-h- fcbdd.edt Thu May 09 16:16:23 1985 DRA2:[FE]FCBDD.EDT;1 FIND=MAIN. DEF K 10 AS "EXT BDDHM." DEF K GOLD 10 AS "EXT ?'Command: '." DEF K 11 AS "D+CIv^Z-C+V-7CD+15CI*-------------*^Z +VD+CI>^Z-16CD-CI<^Z +VD+15CI*-------------*^Z +V-8C." DEF K GOLD 11 AS "-4VD+CI ^Z-C+V-7CD+15CI ^Z +VD+CI ^Z-16CD-CI ^Z +VD+15CI ^Z -3V-8C." DEF K 17 AS "D+CIv^Z +V-10CD+19CI ,---------------. ^Z +VD-CI)^Z-18CD-CI(^Z +V-CD+19CI `-------+-------' ^Z +V-10C." DEF K GOLD 17 AS "-4VD+CI ^Z +V-10CD+19CI ^Z +VD-CI ^Z-18CD-CI ^Z +V-CD+19CI ^Z-3V-10C." DEF K 7 AS "-C-VD+CI\^Z-C." DEF K GOLD 7 AS "D+CI,^Z-C." DEF K 8 AS "-VD+CI|^Z-C." DEF K GOLD 8 AS "D+CI^^Z-C." DEF K 9 AS "+C-VD+CI/^Z-C." DEF K GOLD 9 AS "D+CI.^Z-C." DEF K 18 AS "D+CI+^Z-C." DEF K GOLD 18 AS "D+CIX^Z-C." DEF K 4 AS "D-CI-^Z-C." DEF K GOLD 4 AS "D+CI<^Z-C." DEF K 5 AS "D+CI*^Z-C." DEF K GOLD 5 AS "D+CI#^Z-C." DEF K 6 AS "+CD+CI-^Z-C." DEF K GOLD 6 AS "D+CI>^Z-C." DEF K 19 AS "D+C." DEF K GOLD 19 AS "UNDC." DEF K 1 AS "-C+VD+CI/^Z-C." DEF K GOLD 1 AS "D+CI`^Z-C." DEF K 2 AS "+VD+CI|^Z-C." DEF K GOLD 2 AS "D+CIv^Z-C." DEF K 3 AS "+C+VD+CI\^Z-C." DEF K GOLD 3 AS "D+CI'^Z-C." DEF K 21 AS "SEL." DEF K GOLD 21 AS "CUTSR2(^M-C)+CPASTE+VBACKSEL2ELPASTECUTSR." DEF K 0 AS "EXT MODE." DEF K GOLD 0 AS "(+CBL10(I ^Z)D-C^M-V)." DEF K 16 AS "D+CI ^Z-C." DEF K GOLD 16 AS "D+CI@^Z-C." -h- fcbddhm.edt Thu May 09 16:16:23 1985 DRA2:[FE]FCBDDHM.EDT;1 FIND=BDDHT DEF K 10 AS "." DEF K GOLD 10 AS "EXT ?'Command: '." DEF K 11 AS "EXT BDD." DEF K GOLD 11 AS "EXT BDD." DEF K 17 AS "EXT BDD." DEF K GOLD 17 AS "EXT BDD." DEF K 7 AS "EXT BDD." DEF K GOLD 7 AS "EXT BDD." DEF K 8 AS "EXT BDD." DEF K GOLD 8 AS "EXT BDD." DEF K 9 AS "EXT BDD." DEF K GOLD 9 AS "EXT BDD." DEF K 18 AS "EXT BDD." DEF K GOLD 18 AS "EXT BDD." DEF K 4 AS "EXT BDD." DEF K GOLD 4 AS "EXT BDD." DEF K 5 AS "EXT BDD." DEF K GOLD 5 AS "EXT BDD." DEF K 6 AS "EXT BDD." DEF K GOLD 6 AS "EXT BDD." DEF K 19 AS "EXT BDD." DEF K GOLD 19 AS "EXT BDD." DEF K 1 AS "EXT BDD." DEF K GOLD 1 AS "EXT BDD." DEF K 2 AS "EXT BDD." DEF K GOLD 2 AS "EXT BDD." DEF K 3 AS "EXT BDD." DEF K GOLD 3 AS "EXT BDD." DEF K 21 AS "EXT BDD." DEF K GOLD 21 AS "EXT BDD." DEF K 0 AS "EXT MODE." DEF K GOLD 0 AS "EXT MODE." DEF K 16 AS "EXT BDD." DEF K GOLD 16 AS "EXT BDD." -h- fcbddht.edt Thu May 09 16:16:23 1985 DRA2:[FE]FCBDDHT.EDT;1 +---------+---------+---------+---------+ | PF1 | PF2 | PF3 | PF4 | | GOLD | HELP | DECI.1 |ENT/EXIT1| BDD MODE | | CMD | DEL | DEL | -------- +---------+---------+---------+---------+ | 7 | 8 | 9 | - | | DRAW \ | DRAW | | DRAW / | + | TYPE ENTER TO | , | ^ | . | X | CONTINUE, +---------+---------+---------+---------+ | 4 | 5 | 6 | , | YOU MAY ALSO | DRAW - | * | DRAW - | DEL C | TYPE CMD, OR | < | # | > | UND C | SELECT MODE +---------+---------+---------+---------+ | 1 | 2 | 3 | | | DRAW / | DRAW | | DRAW \ | ENTER | | ` | v | ' | | +---------+---------+---------+ START | | 0 | . | `TEXT' | | SELECT MODE | [ ] | END | | INSERT LINE | @ | | +-------------------+---------+---------+ -h- fcdraw.edt Thu May 09 16:16:23 1985 DRA2:[FE]FCDRAW.EDT;1 FIND=MAIN. DEF K 10 AS "EXT DRAWHM." DEF K GOLD 10 AS "EXT ?'Command: '." DEF K 11 AS "D+CI@^Z-C." DEF K GOLD 11 AS "D+CI(^Z-C." DEF K 17 AS "D+CI~^Z-C." DEF K GOLD 17 AS "D+CI)^Z-C." DEF K 7 AS "-C-VD+CI\^Z-C." DEF K GOLD 7 AS "D+CI,^Z-C." DEF K 8 AS "-VD+CI|^Z-C." DEF K GOLD 8 AS "D+CI^^Z-C." DEF K 9 AS "+C-VD+CI/^Z-C." DEF K GOLD 9 AS "D+CI.^Z-C." DEF K 18 AS "D+CI+^Z-C." DEF K GOLD 18 AS "D+CIX^Z-C." DEF K 4 AS "D-CI-^Z-C." DEF K GOLD 4 AS "D+CI<^Z-C." DEF K 5 AS "D+CI*^Z-C." DEF K GOLD 5 AS "D+CI#^Z-C." DEF K 6 AS "+CD+CI-^Z-C." DEF K GOLD 6 AS "D+CI>^Z-C." DEF K 19 AS "D+C." DEF K GOLD 19 AS "UNDC." DEF K 1 AS "-C+VD+CI/^Z-C." DEF K GOLD 1 AS "D+CI`^Z-C." DEF K 2 AS "+VD+CI|^Z-C." DEF K GOLD 2 AS "D+CIv^Z-C." DEF K 3 AS "+C+VD+CI\^Z-C." DEF K GOLD 3 AS "D+CI'^Z-C." DEF K 21 AS "SEL." DEF K GOLD 21 AS "CUTSR2(^M-C)+CPASTE+VBACKSEL2ELPASTECUTSR." DEF K 0 AS "EXT MODE." DEF K GOLD 0 AS "(+CBL10(I ^Z)D-C^M-V)." DEF K 16 AS "D+CI ^Z-C." DEF K GOLD 16 AS "D+CI%^Z-C." -h- fcdrawhm.edt Thu May 09 16:16:23 1985 DRA2:[FE]FCDRAWHM.EDT;1 FIND=DRAWHT DEF K 10 AS "." DEF K GOLD 10 AS "EXT ?'Command: '." DEF K 11 AS "EXT DRAW." DEF K GOLD 11 AS "EXT DRAW." DEF K 17 AS "EXT DRAW." DEF K GOLD 17 AS "EXT DRAW." DEF K 7 AS "EXT DRAW." DEF K GOLD 7 AS "EXT DRAW." DEF K 8 AS "EXT DRAW." DEF K GOLD 8 AS "EXT DRAW." DEF K 9 AS "EXT DRAW." DEF K GOLD 9 AS "EXT DRAW." DEF K 18 AS "EXT DRAW." DEF K GOLD 18 AS "EXT DRAW." DEF K 4 AS "EXT DRAW." DEF K GOLD 4 AS "EXT DRAW." DEF K 5 AS "EXT DRAW." DEF K GOLD 5 AS "EXT DRAW." DEF K 6 AS "EXT DRAW." DEF K GOLD 6 AS "EXT DRAW." DEF K 19 AS "EXT DRAW." DEF K GOLD 19 AS "EXT DRAW." DEF K 1 AS "EXT DRAW." DEF K GOLD 1 AS "EXT DRAW." DEF K 2 AS "EXT DRAW." DEF K GOLD 2 AS "EXT DRAW." DEF K 3 AS "EXT DRAW." DEF K GOLD 3 AS "EXT DRAW." DEF K 21 AS "EXT DRAW." DEF K GOLD 21 AS "EXT DRAW." DEF K 0 AS "EXT MODE." DEF K GOLD 0 AS "EXT MODE." DEF K 16 AS "EXT DRAW." DEF K GOLD 16 AS "EXT DRAW." -h- fcdrawht.edt Thu May 09 16:16:23 1985 DRA2:[FE]FCDRAWHT.EDT;1 +---------+---------+---------+---------+ | PF1 | PF2 | PF3 | PF4 | | GOLD | HELP | @ | ~ | DRAW MODE | | CMD | ( | ) | --------- +---------+---------+---------+---------+ | 7 | 8 | 9 | - | | DRAW \ | DRAW | | DRAW / | + | TYPE ENTER TO | , | ^ | . | X | CONTINUE, +---------+---------+---------+---------+ | 4 | 5 | 6 | , | YOU MAY ALSO | DRAW - | * | DRAW - | DEL C | TYPE CMD, OR | < | # | > | UND C | SELECT MODE +---------+---------+---------+---------+ | 1 | 2 | 3 | | | DRAW / | DRAW | | DRAW \ | ENTER | | ` | v | ' | | +---------+---------+---------+ START | | 0 | . | `TEXT' | | SELECT MODE | [ ] | END | | INSERT LINE | % | | +-------------------+---------+---------+ -h- fcedt.edt Thu May 09 16:16:23 1985 DRA2:[FE]FCEDT.EDT;1 FIND=MAIN. DEFINE KEY 10 AS "HELP." DEFINE KEY 11 AS """""." DEFINE KEY GOLD 11 AS "?'Search for: '." DEFINE KEY 17 AS "D+NL." DEFINE KEY GOLD 17 AS "UNDL." DEFINE KEY 7 AS "PAGETOP." DEFINE KEY GOLD 7 AS "EXT ?'Command: '." DEFINE KEY 8 AS "(16L)." DEFINE KEY GOLD 8 AS "FILLSR." DEFINE KEY 9 AS "APPENDSR." DEFINE KEY GOLD 9 AS "CUTSR=DELETE PASTE." DEFINE KEY 18 AS "DEW." DEFINE KEY GOLD 18 AS "UNDW." DEFINE KEY 4 AS "ADV." DEFINE KEY GOLD 4 AS "ER." DEFINE KEY 5 AS "BACK." DEFINE KEY GOLD 5 AS "BR." DEFINE KEY 6 AS "CUTSR." DEFINE KEY GOLD 6 AS "PASTE." DEFINE KEY 19 AS "D+C." DEFINE KEY GOLD 19 AS "UNDC." DEFINE KEY 1 AS "W." DEFINE KEY GOLD 1 AS "CHGCSR." DEFINE KEY 2 AS "EL." DEFINE KEY GOLD 2 AS "D+EL." DEFINE KEY 3 AS "C." DEFINE KEY GOLD 3 AS "ASC." DEFINE KEY 0 AS "EXT MODE." DEFINE KEY GOLD 0 AS "(^M-C)." DEFINE KEY 16 AS "SEL." DEFINE KEY GOLD 16 AS "RESET" DEFINE KEY 21 AS "." DEFINE KEY GOLD 21 AS "(CUTSR=DELETE PASTEKS"""")." FIND=MAIN. -h- fcedt.hlp Thu May 09 16:16:23 1985 DRA2:[FE]FCEDT.HLP;2 1 FLOWCHART FLOW CHARTER UTILITIES VAX GRAPHICS ------------ The screen oriented editor available on the VAX, EDT, is extremely powerful and easy to use. Also the resulting text files are available, and easy to modify. However, for many engineering reports and documents some sort of pictures are necessary. Block diagrams, flowcharts, timing diagrams, logic diagrams, state diagrams, etc. are often required in documentation to convey fundamental concepts. This graphics package is designed to allow limited graphics ability on the VAX, using EDT, VT-100 terminals, and the PRINTRONIX line printer. The graphics package actually consists of two parts, an "editor", and a translator. Although these two parts were designed to work in conjunction, both the "editor" and translator are useful by themselves. The "editor" has all the features of the standard screen oriented editor, EDT, but allows the user to change the functions of the auxiliary keypad on the VT-100 to functions more suited to the creation of pictures. The resulting files may be printed out as is on any printer, but all pictures will be drawn with characters as they appeared on the screen during editing. A graphic file may be generated from this text file by using the translation program. The translator will examine each character and the eight surrounding characters from an input text file, if it determines from context that the character was intended to be a "graphic" character, it will substitute the "graphic" character for the original text character. The resulting file will have solid lines instead of text approximating the line. The graphic file is intended to be printed on the PRINTRONIX printer. 2 editor GRAPHIC EDITOR -------------- The "editor" is actually a set of macros for DEC's screen oriented editor, EDT. These macros do not affect normal screen editing, with the exception that "KEY 0" is now a select "MODE" function instead of the "LINE" function. When "MODE" is used a prompt appears to ask which mode you desire, pressing the associated key on the auxiliary keypad followed by "ENTER" will put the editor in that mode. "EDT" is the normal editor mode, "DRAW" is the fundamental graphic mode, "FLOW" is the flowchart generation mode, "TIME" is the mode for timing and logic diagrams, and "BDD" is the mode for binary decision diagrams. The "editor" is invoked from DCL by typing: $FCEDT filename.ext when the proper definitions have been made to the LOGIN.COM file (see the SYSTEM INSTALLATION section). In order to draw on the screen, the screen must first be filled with spaces, otherwise you are not free to move about the screen because the editor will not let you move to a point on the screen unless there is a character there. To insert the necessary spaces, assumming you're in a graphic mode, move the cursor to a blank line then press "GOLD KEY 0", instead of the normal "OPEN LINE" function the editor will now open a line of 80 blanks. To generate multiple lines of blanks, as will be needed, press "GOLD", type the number of lines desired, then press "GOLD 0", there will now be a blank area of spaces, suitable for drawing on. (The cursor must be separated from the EOB end of file indicator by at least a single null line - carriage return for this to occur properly.) Alternatively in EDT line mode *INCLUDE FCEDT:SP21L79C.FIL to get 21 lines by 79 columns blank filled. FCEDT will also work in 132 column mode by entering in line mode *SET SCREEN 132 and *INCLUDE FCEDT:SP21L131C.FIL to get 21 lines by 131 columns blank filled. 3 DRAW EDITOR "DRAW" MODE ------------------ In the "DRAW" mode the auxiliary keypad is setup to ease drawing lines and special "graphic" characters used by the translation program. Refer to the description of the translation program for more information. The cursor keys will still move the cursor about, but if you wish to draw you may use any of the eight keys around "KEY 5" on the auxiliary keypad. Pressing a key will move the cursor and draw a line in that direction. For example, pressing "KEY 9" will move the cursor up, left, then overwrite the existing character or space with a "/". Corner symbols should be used to join two lines, so when the resulting image is processed by the graphics translator a solid line results. Most of the other keys and gold keys will not move the cursor but will only overwrite that position with a given "graphic" character associated with that particular key. Exceptions are the "BEGIN" text and "END" text keys. Since the screen is full of characters while drawing, any text to be entered should be overwritten, not inserted as the editor usually does which would shift parts of your picture. To overwrite text, press "ENTER", type the desired text (single line only), then press "GOLD ENTER", this will result in the text overwriting, not inserting. The diagram shown may be obtained in "DRAW" mode by pressing "KEY PF2", which is normally the "HELP" function. The additional symbols (line junctions, curved segments and corners) are listed in the graphics translator section. Now go use the "DRAW" mode and learn how it really works! +---------+---------+---------+---------+ | PF1 | PF2 | PF3 | PF4 | | GOLD | HELP | @ | ~ | DRAW MODE | | CMD | ( | ) | --------- +---------+---------+---------+---------+ | 7 | 8 | 9 | - | | DRAW \ | DRAW | | DRAW / | + | TYPE ENTER TO | , | ^ | . | X | CONTINUE, +---------+---------+---------+---------+ | 4 | 5 | 6 | , | YOU MAY ALSO | DRAW - | * | DRAW - | DEL C | TYPE CMD, OR | < | # | > | UND C | SELECT MODE +---------+---------+---------+---------+ | 1 | 2 | 3 | | | DRAW / | DRAW | | DRAW \ | ENTER | | ` | v | ' | | +---------+---------+---------+ START | | 0 | . | `TEXT' | | SELECT MODE | [ ] | END | | INSERT LINE | % | | +-------------------+---------+---------+ 3 FLOW EDITOR "FLOW" MODE ------------------ The "FLOW" mode is intended to be used as an aid in drawing flowcharts. Most of the keys in this mode have be setup to draw a standard flowchart element, either an oval enter/exit, a decision diamond (actually hexagonal in this implementation), an input/output parallelagram, a subroutine rectangle, or a simple function rectangle. Each of these elements are fixed in width, but available in two or three choices of text space. The "GOLD" version of a given key will delete the element created by that key if it is used immediately after creation, or if the cursor is properly aligned. A typical problem when first using the flowchart elements results from the fact that they are drawn extending to either side of the cursor. If, for example, the cursor is too close to the left or right margin when a key is pressed to generate an element the element will overwrite a number of characters, including a carriage return or two resulting in complete chaos. At this point it is to far gone to use a "GOLD" key to delete the element and the best bet is probably to return to the "EDT" mode, delete the bezerk lines, and continue from there. An example of the "FLOW" mode "HELP" key is shown below. +---------+---------+---------+---------+ | PF1 | PF2 | PF3 | PF4 | | GOLD | HELP |ENT/EXIT1|ENT/EXIT2| FLOWCHART MODE | | CMD | DEL | DEL | -------------- +---------+---------+---------+---------+ | 7 | 8 | 9 | - | | DECI.1 | DECI.3 | I/O 1 | I/O 2 | TYPE ENTER TO | DEL | DEL | DEL | DEL | CONTINUE, +---------+---------+---------+---------+ | 4 | 5 | 6 | , | YOU MAY ALSO | SUB 1 | SUB 2 | SUB 3 | DEL C | TYPE CMD, OR | DEL | DEL | DEL | UND C | SELECT MODE +---------+---------+---------+---------+ | 1 | 2 | 3 | | | BOX 1 | BOX 2 | BOX 3 | ENTER | | DEL | DEL | DEL | | +---------+---------+---------+ BEGIN | | 0 | . | `TEXT' | | SELECT MODE | CIRCLE | END | | INSERT LINE | DEL | | +-------------------+---------+---------+ 3 TIME "EDITOR" TIME MODE ------------------ This EDT editing mode is designed to aid the user in creating timing diagrams for digital circuits. As with the other modes, TIME mode is entered from the mode select menu. The keys are set up to provide symbols for high, low, indeterminate and high impedance logic states as well as transistions between them. Use of the GOLD key will delete entered symbol immediately after creation, of if the cursor is properly alligned. Insert text operates as in other modes. An example of the "TIME" mode "HELP" key is shown below. +---------+---------+---------+---------+ | PF1 | PF2 | PF3 | PF4 | | GOLD | HELP |HIGH>HI-Z|IND.>HI-Z| TIME MODE | | CMD | DEL | DEL | --------- +---------+---------+---------+---------+ | 7 | 8 | 9 | - | | HIGH |IND.>HIGH|LOW >HIGH|LOW >HI-Z| TYPE ENTER TO | DEL | DEL | DEL | DEL | CONTINUE, +---------+---------+---------+---------+ | 4 | 5 | 6 | , | YOU MAY ALSO |HIGH>IND.| IND. |LOW >IND.| DEL C | TYPE CMD, OR | DEL | DEL | DEL | UND C | SELECT MODE +---------+---------+---------+---------+ | 1 | 2 | 3 | | |HIGH>LOW |IND.>LOW | LOW | ENTER | | DEL | DEL | DEL | | +---------+---------+---------+ BEGIN | | 0 | . | `TEXT' | | SELECT MODE | HI-Z | END | | INSERT LINE | DEL | | +-------------------+---------+---------+ 3 BDD BDD DRAWING ----------- This mode combines the line drawing primitive functions with the flowchart elements for decision block and entry/exit symbols. This allows the user to construct BDD node diagrams without having to swap between the other menus. The open connection symbol (@) is used for signal inversion dots. The HELP text for this mode is: +---------+---------+---------+---------+ | PF1 | PF2 | PF3 | PF4 | | GOLD | HELP | DECI.1 |ENT/EXIT1| BDD MODE | | CMD | DEL | DEL | -------- +---------+---------+---------+---------+ | 7 | 8 | 9 | - | | DRAW \ | DRAW | | DRAW / | + | TYPE ENTER TO | , | ^ | . | X | CONTINUE, +---------+---------+---------+---------+ | 4 | 5 | 6 | , | YOU MAY ALSO | DRAW - | * | DRAW - | DEL C | TYPE CMD, OR | < | # | > | UND C | SELECT MODE +---------+---------+---------+---------+ | 1 | 2 | 3 | | | DRAW / | DRAW | | DRAW \ | ENTER | | ` | v | ' | | +---------+---------+---------+ START | | 0 | . | `TEXT' | | SELECT MODE | [ ] | END | | INSERT LINE | @ | | +-------------------+---------+---------+ 2 translator GRAPHIC TRANSLATOR ------------------ The translator is designed to translate text files into files consisting of dot information which can then be printed using the plot mode of the PRINTRONIX printer. For the most part, characters are translated to their dot matrix representation. Certain "graphic" characters may be translated to their normal dot representation, or to graphic shapes such as solid line segments, arrowheads, etc. Whether or not the "graphic" characters become graphic shapes depends on context. If the "graphic" character has the proper graphic characters around it, it will be translated to a graphic shape, if not, it won't. Ocasionally, the program mis-interpretes the context and substitutes graphic images for something it shouldn't, but this is rare. The user should then change one or more of the surrounding 8 characters, to prevent this. (Alternatively, insertion of a non- printing control character, i.e. CTRL-A, will block graphical interpretation of the entire line of text.) The Translator program is run in BATCH, allowing the user the ability to continue editing other drawings while the image is being translated. The translated output plot file is deleted after printing. The command file which initiates the translation job prompts for the file the user wishes to translate, the output plot file and the number of copies desired for printing. Or this information may be supplied initially, as: $FCTRANSLAT INPUT.EX OUTPUT.PLT 1 The "graphic" characters are described below along with their corresponding graphic shape. "GRAPHIC" CHARACTER GRAPHIC SHAPE --------- ------------- - HORIZONTAL STRAIGHT LINE SEGMENT | VERTICAL STRAIGHT LINE SEGMENT / DIAGONAL STRAIGHT LINE SEGMENT \ DIAGONAL STRAIGHT LINE SEGMENT ~ CURVED LINE SEGMENT * CONNECTION POINT (ANY DIRECTIONS) # SOLID DOT CONNECTION POINT (ANY DIRECTIONS) v DOWN ARROW (MAY BE ON DIAGONAL DOWN) < LEFT ARROW OR DIAGONAL (AND HORIZONTAL) INTERSECTION ^ UP ARROW (MAY BE ON DIAGONAL UP) > RIGHT ARROW OR DIAGONAL (AND HORIZONTAL) INTERSECTION % STRAIGHT LINE BREAK (ANY DIRECTION) , UPPER LEFT CURVED CORNER (90 OR 135 DEGREES) . UPPER RIGHT CURVED CORNER (90 OR 135 DEGREES) ` LOWER LEFT CURVED CORNER (90 OR 135 DEGREES) ' LOWER RIGHT CURVED CORNER (90 OR 135 DEGREES) ( LEFT CURVED EDGE (CAN ALSO CONNECT TO HORIZONTAL) ) RIGHT CURVED EDGE (CAN ALSO CONNECT TO HORIZONTAL) + VERTICAL AND HORIZONTAL INTERSECTION X DIAGONAL INTERSECTIONS V LEFT PORTION OF SQUARE ROOT SYMBOL @ OPEN CIRCLE CONNECTION (ANY DIRECTIONS) 2 running SYSTEM INSTALLATION ------------------ VAX users LOGIN.COM file should contain the following to allow use of the shared FCEDT tool: $@SYS$SYSDEVICE:[RCA.UTILITIES.FCEDT]SETUP.COM This help file may be printed by: $PRINT/HEADER FCEDT:FCEDT.HLP ! in raw form A sample file may be printed by: $PRINT/HEADER FCEDT:TEST.DRW ! in raw form $PRINT/NOFEED FCEDT:TEST.PLT ! in translated form Curious users may print out the macros used to customize the EDT editor by typing: $PRINT/HEADER FCEDT:*.EDT The EDT users manual may be consulted for explanation of how the macros are created and modified if other options are desired. 2 examples EXAMPLE FILE ------------ The before and after views of a particular test example are presented next: 3 equations @ + @@ 2 EQUATIONS: 1 ~ (t-m) Q(x) = -------- | - ------ *---- | 2 s V 2 PI | e ~ @ - @@ 3 timing TIMING: *-*-* *-*-*-* ****** **** \ / X X X ******* / \ *-*-*-*-*-*-* ******* ****** I H L Z I L H L 3 diagrams PICTURES: * +----------+ / \ | | / \ | | / \ | | / * \ +----------+ / \ *-----------* NOTE: CORNER OPTIONS @-----* ,----------. * \ | HI, THIS | | \ HI \ |IS A TEST | | \ ~~ `----------' | \ DICK ~ ,--. ~--~| \ ~ | | | || *---~~ `--' ~--~| 3 flowcharts FLOWCHARTS: v ,---------------. ~ ENTRY OR ~ ~ EXIT ~ `-------+-------' v *-------------* < DECISION >-------------. *------+------* | v | *--------------* | / INPUT/OUTPUT / | *--------+-----* | v | ++---------------++ | || CALL SUBR. || | ||(COMPUTE DATA) || | ++-------+-------++ | |<--------------------' v ,-. ( A ) `-' -h- fcflow.edt Thu May 09 16:16:23 1985 DRA2:[FE]FCFLOW.EDT;1 FIND=MAIN. DEF K 10 AS "EXT FLOWHM." DEF K GOLD 10 AS "EXT ?'Command: '." DEF K 11 AS "D+CIv^Z +V-10CD+19CI ,---------------. ^Z +VD-CI)^Z-18CD-CI(^Z +V-CD+19CI `-------+-------' ^Z +V-10C." DEF K GOLD 11 AS "-4VD+CI ^Z +V-10CD+19CI ^Z +VD-CI ^Z-18CD-CI ^Z +V-CD+19CI ^Z-3V-10C." DEF K 17 AS "D+CIv^Z +V-10CD+19CI ,---------------. ^Z +VD-CI~^Z-18CD-CI~^Z +VD-CI~^Z+17CD+CI~^Z +VD-19CI `-------+-------' ^Z +V-10C." DEF K GOLD 17 AS "-5VD+CI ^Z +V-10CD+19CI ^Z +VD-CI ^Z-18CD-CI ^Z +VD-CI ^Z+17CD+CI ^Z +VD-19CI ^Z -4V-10C." DEF K 7 AS "D+CIv^Z-C+V-7CD+15CI*-------------*^Z +VD+CI>^Z-16CD-CI<^Z +VD+15CI*------+------*^Z +V-8C." DEF K GOLD 7 AS "-4VD+CI ^Z-C+V-7CD+15CI ^Z +VD+CI ^Z-16CD-CI ^Z +VD+15CI ^Z -3V-8C." DEF K 8 AS "D+CIv^Z-C+V-7CD+15CI*-------------*^Z +VD+CI\^Z-16CD-CI/^Z +V-CD-CI<^Z+17CD+CI>^Z +V-CD-CI/^Z-16CD-CI\^Z +VD+15CI*------+------*^Z +V-8C." DEF K GOLD 8 AS "-6VD+CI ^Z-C+V-7CD+15CI ^Z +VD+CI ^Z-16CD-CI ^Z +V-CD-CI ^Z17CD+CI ^Z +V-CD-CI ^Z-16CD-CI ^Z +VD+15CI ^Z +V-8C-6V." DEF K 9 AS "D+CIv^Z+V-8CD+17CI*---------------*^Z +V-2CD+CI/^Z-17CD+CI/^Z +V-2CD+17CI*--------+------*^Z +V-8C." DEF K GOLD 9 AS "-4VD+CI ^Z+V-8CD+17CI ^Z +V-2CD+CI ^Z-17CD+CI ^Z +V-2CD+17CI ^Z -3V-8C." DEF K 18 AS "D+CIv^Z+V-7CD+16CI*--------------*^Z +V-2CD+CI/^Z-16CD+CI/^Z+V -2CD+CI/^Z+14CD+CI/^Z+V -17CD+16CI*--------+-----*^Z+V-7C." DEF K GOLD 18 AS "-5VD+CI ^Z+V-7CD+16CI ^Z +V-2CD+CI ^Z-16CD+CI ^Z+V -2CD+CI ^Z+14CD+CI ^Z+V -17CD+16CI ^Z-4V-7C." DEF K 4 AS "D+CIv^Z +V-10CD+19CI++---------------++^Z +VD-2CI||^Z-17CD-2CI||^Z +V-2CD+19CI++-------+-------++^Z +V-10C." DEF K GOLD 4 AS "-4VD+CI ^Z +V-10CD+19CI ^Z +VD-2CI ^Z-17CD-2CI ^Z +V-2CD+19CI ^Z-3V-10C." DEF K 5 AS "D+CIv^Z +V-10CD+19CI++---------------++^Z +VD-2CI||^Z-17CD-2CI||^Z +VD-2CI||^Z+15CD+2CI||^Z +VD-19CI++-------+-------++^Z +V-10C." DEF K GOLD 5 AS "-5VD+CI ^Z +V-10CD+19CI ^Z +VD-2CI ^Z-17CD-2CI ^Z +VD-2CI ^Z+15CD+2CI ^Z +VD-19CI ^Z -4V-10C." DEF K 6 AS "D+CIv^Z +V-10CD+19CI++---------------++^Z +VD-2CI||^Z-17CD-2CI||^Z +VD-2CI||^Z+15CD+2CI||^Z +VD-2CI||^Z-17CD-2CI||^Z +V-2CD+19CI++-------+-------++^Z +V-10C." DEF K GOLD 6 AS "-6VD+CI ^Z +V-10CD+19CI ^Z +VD-2CI ^Z-17CD-2CI ^Z +VD-2CI ^Z+15CD+2CI ^Z +VD-2CI ^Z-17CD-2CI ^Z +V-2CD+19CI ^Z -5V-10C." DEF K 19 AS "D+C." DEF K GOLD 19 AS "UNDC." DEF K 1 AS "D+CIv^Z +V-10CD+19CI+-----------------+^Z +VD-CI|^Z-18CD-CI|^Z +V-CD+19CI+--------+--------+^Z +V-10C." DEF K GOLD 1 AS "-4VD+CI ^Z +V-10CD+19CI ^Z +VD-CI ^Z-18CD-CI ^Z +V-CD+19CI ^Z-3V-10C." DEF K 2 AS "D+CIv^Z +V-10CD+19CI+-----------------+^Z +VD-CI|^Z-18CD-CI|^Z +VD-CI|^Z+17CD+CI|^Z +VD-19CI+--------+--------+^Z +V-10C." DEF K GOLD 2 AS "-5VD+CI ^Z +V-10CD+19CI ^Z +VD-CI ^Z-18CD-CI ^Z +VD-CI ^Z+17CD+CI ^Z +VD-19CI ^Z -4V-10C." DEF K 3 AS "D+CIv^Z +V-10CD+19CI+-----------------+^Z +VD-CI|^Z-18CD-CI|^Z +VD-CI|^Z+17CD+CI|^Z +VD-CI|^Z-18CD-CI|^Z +V-CD+19CI+--------+--------+^Z +V-10C." DEF K GOLD 3 AS "-6VD+CI ^Z +V-10CD+19CI ^Z +VD-CI ^Z-18CD-CI ^Z +VD-CI ^Z+17CD+CI ^Z +VD-CI ^Z-18CD-CI ^Z +V-CD+19CI ^Z -5V-10C." DEF K 21 AS "SEL." DEF K GOLD 21 AS "CUTSR2(^M-C)+CPASTE+VBACKSEL2ELPASTECUTSR." DEF K 0 AS "EXT MODE." DEF K GOLD 0 AS "(+CBL10(I ^Z)D-C^M-V)." DEF K 16 AS "D+CIv^Z+V-2CD+3CI,-.^Z+VD+CI)^Z-5CD+CI(^Z+VD+3CI`+'^Z+V-2C." DEF K GOLD 16 AS "-4VD+CI ^Z+V-2CD+3CI ^Z+VD+CI ^Z-5CD+CI ^Z+VD+3CI ^Z-3V-2C." -h- fcflowhm.edt Thu May 09 16:16:23 1985 DRA2:[FE]FCFLOWHM.EDT;1 FIND=FLOWHT DEF K 10 AS "." DEF K GOLD 10 AS "EXT ?'Command: '." DEF K 11 AS "EXT FLOW." DEF K GOLD 11 AS "EXT FLOW." DEF K 17 AS "EXT FLOW." DEF K GOLD 17 AS "EXT FLOW." DEF K 7 AS "EXT FLOW." DEF K GOLD 7 AS "EXT FLOW." DEF K 8 AS "EXT FLOW." DEF K GOLD 8 AS "EXT FLOW." DEF K 9 AS "EXT FLOW." DEF K GOLD 9 AS "EXT FLOW." DEF K 18 AS "EXT FLOW." DEF K GOLD 18 AS "EXT FLOW." DEF K 4 AS "EXT FLOW." DEF K GOLD 4 AS "EXT FLOW." DEF K 5 AS "EXT FLOW." DEF K GOLD 5 AS "EXT FLOW." DEF K 6 AS "EXT FLOW." DEF K GOLD 6 AS "EXT FLOW." DEF K 19 AS "EXT FLOW." DEF K GOLD 19 AS "EXT FLOW." DEF K 1 AS "EXT FLOW." DEF K GOLD 1 AS "EXT FLOW." DEF K 2 AS "EXT FLOW." DEF K GOLD 2 AS "EXT FLOW." DEF K 3 AS "EXT FLOW." DEF K GOLD 3 AS "EXT FLOW." DEF K 21 AS "EXT FLOW." DEF K GOLD 21 AS "EXT FLOW." DEF K 0 AS "EXT MODE." DEF K GOLD 0 AS "EXT MODE." DEF K 16 AS "EXT FLOW." DEF K GOLD 16 AS "EXT FLOW." -h- fcflowht.edt Thu May 09 16:16:23 1985 DRA2:[FE]FCFLOWHT.EDT;1 +---------+---------+---------+---------+ | PF1 | PF2 | PF3 | PF4 | | GOLD | HELP |ENT/EXIT1|ENT/EXIT2| FLOWCHART MODE | | CMD | DEL | DEL | -------------- +---------+---------+---------+---------+ | 7 | 8 | 9 | - | | DECI.1 | DECI.3 | I/O 1 | I/O 2 | TYPE ENTER TO | DEL | DEL | DEL | DEL | CONTINUE, +---------+---------+---------+---------+ | 4 | 5 | 6 | , | YOU MAY ALSO | SUB 1 | SUB 2 | SUB 3 | DEL C | TYPE CMD, OR | DEL | DEL | DEL | UND C | SELECT MODE +---------+---------+---------+---------+ | 1 | 2 | 3 | | | BOX 1 | BOX 2 | BOX 3 | ENTER | | DEL | DEL | DEL | | +---------+---------+---------+ BEGIN | | 0 | . | `TEXT' | | SELECT MODE | CIRCLE | END | | INSERT LINE | DEL | | +-------------------+---------+---------+ -h- fchelp.edt Thu May 09 16:16:23 1985 DRA2:[FE]FCHELP.EDT;1 +---------+---------+---------+---------+ | PF1 | PF2 | PF3 | PF4 | | GOLD | HELP | | | | | | | | +---------+---------+---------+---------+ | 7 | 8 | 9 | - | | | | | | | | | | | +---------+---------+---------+---------+ | 4 | 5 | 6 | , | | | | | | | | | | | +---------+---------+---------+---------+ | 1 | 2 | 3 | | |DRAW LINE|FLOWCHART| TIMING | ENTER | | | | | | +---------+---------+---------+ | | 0 | . | | | SELECT MODE | IN.LINE | | | | | | +-------------------+---------+---------+ @ -h- fcinit.edt Thu May 09 16:16:23 1985 DRA2:[FE]FCINIT.EDT;1 DEFINE MACRO MODE INCLUDE FCEDT:FCMODE.EDT =MODE INCLUDE FCEDT:FCMODEHT.EDT =MODEHT DEFINE MACRO FLOW INCLUDE FCEDT:FCFLOW.EDT =FLOW DEFINE MACRO FLOWHM INCLUDE FCEDT:FCFLOWHM.EDT =FLOWHM INCLUDE FCEDT:FCFLOWHT.EDT =FLOWHT DEFINE MACRO DRAW INCLUDE FCEDT:FCDRAW.EDT =DRAW DEFINE MACRO DRAWHM INCLUDE FCEDT:FCDRAWHM.EDT = DRAWHM INCLUDE FCEDT:FCDRAWHT.EDT = DRAWHT DEFINE MACRO TSTIM INCLUDE FCEDT:FCTSTIM.EDT = TSTIM DEFINE MACRO TSTIMHM INCLUDE FCEDT:FCTSTIMHM.EDT = TSTIMHM INCLUDE FCEDT:FCTSTIMHT.EDT = TSTIMHT DEFINE MACRO BDD INCLUDE FCEDT:FCBDD.EDT = BDD DEFINE MACRO BDDHM INCLUDE FCEDT:FCBDDHM.EDT = BDDHM INCLUDE FCEDT:FCBDDHT.EDT = BDDHT DEFINE MACRO EDT INCLUDE FCEDT:FCEDT.EDT =EDT DEFINE KEY 0 AS "EXT MODE." DEFINE KEY GOLD 10 AS "EXT ?'Command: '." DEFINE KEY GOLD E AS "EXT EXIT." DEFINE KEY GOLD Q AS "EXT QUIT." DEFINE KEY GOLD I AS "EXT INCLUDE FCEDT:SP21L79C.FIL." DEFINE KEY GOLD O AS "EXT INCLUDE FCEDT:SP21L131C.FIL." FIND=MAIN. SET QUIET SET MODE CHANGE -h- fcmode.edt Thu May 09 16:16:23 1985 DRA2:[FE]FCMODE.EDT;1 FIND=MODEHT DEF K 10 AS "." DEF K GOLD 10 AS "EXT ?'Command: '." DEF K 11 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K GOLD 11 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K 17 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K GOLD 17 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K 7 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K GOLD 7 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K 8 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K GOLD 8 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K 9 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K GOLD 9 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K 18 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K GOLD 18 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K 4 AS "EXT ?'Entering TSTIM mode, press ENTER.' TSTIM." DEF K GOLD 4 AS "EXT ?'Entering TSTIM mode, press ENTER.' TSTIM." DEF K 5 AS "EXT ?'Entering BDD mode, press ENTER.' BDD." DEF K GOLD 5 AS "EXT ?'Entering BDD mode, press ENTER.' BDD." DEF K 6 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K GOLD 6 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K 19 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K GOLD 19 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K 1 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K GOLD 1 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K 2 AS "EXT ?'Entering DRAW mode, press ENTER.' DRAW." DEF K GOLD 2 AS "EXT ?'Entering DRAW mode, press ENTER.' DRAW." DEF K 3 AS "EXT ?'Entering FLOWCHART mode, press ENTER.' FLOW." DEF K GOLD 3 AS "EXT ?'Entering FLOWCHART mode, press ENTER.' FLOW." DEF K 21 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K GOLD 21 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K 0 AS "." DEF K GOLD 0 AS "." DEF K 16 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." DEF K GOLD 16 AS "EXT ?'Entering EDT mode, press ENTER.' EDT." -h- fcmodeht.edt Thu May 09 16:16:23 1985 DRA2:[FE]FCMODEHT.EDT;2 +---------+---------+---------+---------+ | PF1 | PF2 | PF3 | PF4 | | GOLD | HELP | EDT | EDT | SELECT MODE | | CMD | EDT | EDT | ----------- +---------+---------+---------+---------+ | 7 | 8 | 9 | - | | EDT | EDT | EDT | EDT | TYPE CORRESPONDING | EDT | EDT | EDT | EDT | KEY TO SELECT MODE +---------+---------+---------+---------+ | 4 | 5 | 6 | , | YOU MAY ALSO |TS-TIMING| BDD | EDT | EDT | TYPE CMD, OR |TS-TIMING| BDD | EDT | EDT | SELECT MODE +---------+---------+---------+---------+ | 1 | 2 | 3 | | | EDT | DRAW |FLOWCHART| ENTER | | EDT | DRAW |FLOWCHART| | IF YOU ARE HAVE PROBLEMS +---------+---------+---------+ EDT | OR SUGGESTIONS SEND MAIL | 0 | . | EDT | TO: SYSMGR | SELECT MODE | EDT | | | SELECT MODE | EDT | | +-------------------+---------+---------+ -h- fctstim.edt Thu May 09 16:16:23 1985 DRA2:[FE]FCTSTIM.EDT;1 FIND=MAIN. DEF K 10 AS "EXT TSTIMHM." DEF K GOLD 10 AS "EXT ?'Command: '." DEF K 11 AS "(-VD+CI*^Z+VD+CI*^Z)." DEF K GOLD 11 AS "(-2C-VD+CI ^Z+VD+CI ^Z-2C)." DEF K 17 AS "(-VD+CI*^Z+VD+CI*^Z+V-2CD+CI*^Z+C-V)." DEF K GOLD 17 AS "(-2C-VD+CI ^Z+VD+CI ^Z+V-2CD+CI ^Z+C-V-2C)." DEF K 7 AS "(-VD+2CI*-^Z+V)." DEF K GOLD 7 AS "(-2C-VD+2CI ^Z+V-2C)." DEF K 8 AS "(-VD+2CI*-^Z+VD-CI/^Z+V-CD-CI*^Z+C-V)." DEF K GOLD 8 AS "(-2C-VD+2CI ^Z+VD-CI ^Z+V-CD-CI ^Z+C-V-2C)." DEF K 9 AS "(+CD+CI/^Z+V-CD-CI*^Z+C-V)." DEF K GOLD 9 AS "(-2C+CD+CI ^Z+V-CD-CI ^Z+C-V-2C)." DEF K 18 AS "(+CD+CI*^Z+V-CD-CI*^Z+C-V)." DEF K GOLD 18 AS "(-2C+CD+CI ^Z+V-CD-CI ^Z+C-V-2C)." DEF K 4 AS "(-VD+2CI*-^Z+VD-CI\^Z)." DEF K GOLD 4 AS "(-2C-VD+2CI ^Z+VD-CI ^Z-2C)." DEF K 5 AS "(-VD+2CI*-^Z+VD-CIX^Z+VD-2CI*-^Z-V)." DEF K GOLD 5 AS "(-2C-VD+2CI ^Z+VD-CI ^Z+VD-2CI ^Z-V-2C)." DEF K 6 AS "(+CD+CI/^Z+VD-2CI*-^Z-V)." DEF K GOLD 6 AS "(-2C+CD+CI ^Z+VD-2CI ^Z-V-2C)." DEF K 19 AS "D+C." DEF K GOLD 19 AS "UNDC." DEF K 1 AS "(-VD+CI*^Z+VD+CI\^Z)." DEF K GOLD 1 AS "(-2C-VD+CI ^Z+VD+CI ^Z-2C)." DEF K 2 AS "(-VD+CI*^Z+VD+CI\^Z+VD-2CI*-^Z-V)." DEF K GOLD 2 AS "(-2C-VD+CI ^Z+VD+CI ^Z+VD-2CI ^Z-V-2C)." DEF K 3 AS "(+VD+2CI*-^Z-V)." DEF K GOLD 3 AS "(-2C+VD+2CI ^Z-V-2C)." DEF K 21 AS "SEL." DEF K GOLD 21 AS "CUTSR2(^M-C)+CPASTE+VBACKSEL2ELPASTECUTSR." DEF K 0 AS "EXT MODE." DEF K GOLD 0 AS "(+CBL10(I ^Z)D-C^M-V)." DEF K 16 AS "(D+2CI**^Z)." DEF K GOLD 16 AS "(-2CD+2CI ^Z-2C)." -h- fctstimhm.edt Thu May 09 16:16:23 1985 DRA2:[FE]FCTSTIMHM.EDT;1 FIND=TSTIMHT DEF K 10 AS "." DEF K GOLD 10 AS "EXT ?'Command: '." DEF K 11 AS "EXT TSTIM." DEF K GOLD 11 AS "EXT TSTIM." DEF K 17 AS "EXT TSTIM." DEF K GOLD 17 AS "EXT TSTIM." DEF K 7 AS "EXT TSTIM." DEF K GOLD 7 AS "EXT TSTIM." DEF K 8 AS "EXT TSTIM." DEF K GOLD 8 AS "EXT TSTIM." DEF K 9 AS "EXT TSTIM." DEF K GOLD 9 AS "EXT TSTIM." DEF K 18 AS "EXT TSTIM." DEF K GOLD 18 AS "EXT TSTIM." DEF K 4 AS "EXT TSTIM." DEF K GOLD 4 AS "EXT TSTIM." DEF K 5 AS "EXT TSTIM." DEF K GOLD 5 AS "EXT TSTIM." DEF K 6 AS "EXT TSTIM." DEF K GOLD 6 AS "EXT TSTIM." DEF K 19 AS "EXT TSTIM." DEF K GOLD 19 AS "EXT TSTIM." DEF K 1 AS "EXT TSTIM." DEF K GOLD 1 AS "EXT TSTIM." DEF K 2 AS "EXT TSTIM." DEF K GOLD 2 AS "EXT TSTIM." DEF K 3 AS "EXT TSTIM." DEF K GOLD 3 AS "EXT TSTIM." DEF K 21 AS "EXT TSTIM." DEF K GOLD 21 AS "EXT TSTIM." DEF K 0 AS "EXT MODE." DEF K GOLD 0 AS "EXT MODE." DEF K 16 AS "EXT TSTIM." DEF K GOLD 16 AS "EXT TSTIM." -h- fctstimht.edt Thu May 09 16:16:23 1985 DRA2:[FE]FCTSTIMHT.EDT;1 +---------+---------+---------+---------+ | PF1 | PF2 | PF3 | PF4 | | GOLD | HELP |HIGH>HI-Z|IND.>HI-Z| TRI-STATE TIMING MODE | | CMD | DEL | DEL | --------------------- +---------+---------+---------+---------+ | 7 | 8 | 9 | - | | HIGH |IND.>HIGH|LOW >HIGH|LOW >HI-Z| TYPE ENTER TO | DEL | DEL | DEL | DEL | CONTINUE, +---------+---------+---------+---------+ | 4 | 5 | 6 | , | YOU MAY ALSO |HIGH>IND.| IND. |LOW >IND.| DEL C | TYPE CMD, OR | DEL | DEL | DEL | UND C | SELECT MODE +---------+---------+---------+---------+ | 1 | 2 | 3 | | |HIGH>LOW |IND.>LOW | LOW | ENTER | | DEL | DEL | DEL | | +---------+---------+---------+ BEGIN | | 0 | . | `TEXT' | | SELECT MODE | HI-Z | END | | INSERT LINE | DEL | | +-------------------+---------+---------+ -h- figedt.doc Thu May 09 16:16:23 1985 DRA2:[FE]FIGEDT.DOC;5 F I G E D T ----------- FIGURE EDITOR USER INFORMATION KEYBOARD COMMANDS: Oxy - Set display origin to x,y. Pxy - Move cursor position to x,y. Ifile - Include file at cursor position. Ftext - Fill box with text. Ctext - Insert centered text. E - Exit and Save file. Q - Quit and do not save file. W - Wide screen (132 char.) N - Narrow screen (80 char.) Function Keys: GOLD: Provides shifted functions on the other function keys. INSERT TEXT: Allows direct type-in of text at the current cursor position.Terminates with the RETURN key. UP, DOWN, LEFT, RIGHT: Move cursor in that direction. May be preceeded with a decimal repetition if desired. If preceeded by GOLD, moves to the screen margin. SET, reset: Set or remove a select cursor. One or two may be set. Others: see keypad drawing. +---------+---------+---------+---------+ | | | | INSERT | | GOLD | | NEXT | TEXT | | | | WORD | | +---------+---------+---------+---------+ | ^ *3| *1| *2| | | | | DRAW | AREA | | | UP | LINE | COPY | | +---------+---------+---------+---------+ | | *3| *1| *2| | | V | DRAW | AREA | | | DOWN | BOX | MOVE | | +---------+---------+---------+---------+ | <-- *3| --> *3| *1| INSERT | | LEFT | RIGHT | AREA | COLUMN | | | | CLEAR | | +---------+---------+---------+ + | INSERT LINE | SELECT | delete | | | | column | | delete line | reset | | +---------+---------+---------+---------+ Notes: *1. Operates from select location to current cursor location. *2. Operates from area bounded by two select locations to area bounded by double cursor. *3. Preceed with GOLD to move to the appropriate screen margin. *** Most function keys may be prefixed with a decimal repetition entry. *** Functions activated by GOLD are in lower case. +---------+---------+---------+---------+ | ^ | | | | | | | | | | <--- | ---> | | | | V | | | +---------+---------+---------+---------+ Arrows are not used in this version of FIGEDT. -h- figedt.hlp Thu May 09 16:16:23 1985 DRA2:[FE]FIGEDT.HLP;4 1 FIGEDT F I G E D T FIGURE EDITOR USER INFORMATION KEYBOARD COMMANDS: Oxy - Set display origin to x,y. Pxy - Move cursor position to x,y. Ifile - Include file at cursor position. Ftext - Fill box with text. Ctext - Insert centered text. E - Exit and Save file. Q - Quit and do not save file. W - Wide screen (132 char.) N - Narrow screen (80 char.) Function Keys: GOLD: Provides shifted functions on the other function keys. (PF1) INSERT TEXT: Allows direct type-in of text at the current cursor position.Terminates with the RETURN key. (PF4) UP, DOWN, LEFT, RIGHT: Move cursor in that direction. May be preceeded with a decimal repetition if desired. If preceeded by GOLD, moves to the screen margin. (arrows or 7,4,1,2 keys) SET, reset: Set or remove a select cursor. One or two may be set. (Keypad period key) Others: see keypad drawing. 2 Keypad +---------+---------+---------+---------+ | | | | INSERT | | GOLD | | NEXT | TEXT | | | | WORD | | +---------+---------+---------+---------+ | ^ *3| *1| *2| | | | | DRAW | AREA | | | UP | LINE | COPY | | +---------+---------+---------+---------+ | | *3| *1| *2| | | V | DRAW | AREA | | | DOWN | BOX | MOVE | | +---------+---------+---------+---------+ | <-- *3| --> *3| *1| INSERT | | LEFT | RIGHT | AREA | COLUMN | | | | CLEAR | | +---------+---------+---------+ + | INSERT LINE | SELECT | delete | | | | column | | delete line | reset | | +---------+---------+---------+---------+ 2 Keynotes Notes: *1. Operates from select location to current cursor location. *2. Operates from area bounded by two select locations to area bounded by double cursor. *3. Preceed with GOLD to move to the appropriate screen margin. *** Most function keys may be prefixed with a decimal repetition entry. *** Functions activated by GOLD are in lower case. +---------+---------+---------+---------+ | ^ | | | | | | | | | | <--- | ---> | | | | V | | | +---------+---------+---------+---------+ Arrows are not used in this version of FIGEDT. -h- figedt.pas Thu May 09 16:16:23 1985 DRA2:[FE]FIGEDT.PAS;76 [inherit ('SYS$LIBRARY:STARLET')] program figedt (input, output); const sxdim = 22; pxdim = 132; pydim = 132; esc = 27; bel = 7; TAB = 9; cr = 13; type str = varying [pydim] of char; line = packed array [1..pydim] of char; $word = [word] 0..65535; iosb = record status: $word; count: $word; term: $word; termct: $word end; var cx, cy, ox, oy, lx, ly, nx, ny, mx0, my0, mx1, my1: integer; mkct, rs, sydim: integer; ichan, ochan: $word; iostat: iosb; cmch, c1, c2: char; gold: boolean; ln: str; workflnm: str; work: array [1..pxdim] of line; workfl: text; { Utility Procedures } procedure rdln (len: integer); begin rs := $qiow (, ichan, io$_readvblk + io$m_escape, iostat,,, ln.body, len); ln.length := iostat.count end; procedure rddec (ln: str; var indx, val: integer); begin val := 0; while (indx < length(ln)) and (ln[indx] = ' ') do indx := indx + 1; if ln[indx] in ['0'..'9'] then begin while (indx < length(ln)) and (ln[indx] in ['0'..'9']) do begin val := 10*val + (ord(ln[indx]) - 48); indx := indx + 1 end end else val := 1 end; function uc (ch: char): char; begin if ch >= '`' then uc := chr (ord (ch) - 32) else uc := ch end; procedure wrtstr (oln: str); begin rs := $qiow (,ochan, io$_writevblk,,,, oln.body, oln.length,, 0) end; procedure newlin; begin wrtstr (''(cr)''(10)) end; procedure wrtchr (ch: char); var st: str; begin st := ch; wrtstr (st) end; function onscreen (x, y: integer): boolean; begin onscreen := (x>=ox) and (x-ox=oy) and (y-oylx) or (y<>ly) then cursor (x, y); wrtstr (ch); ly := ly + 1 end; work[x, y] := ch end; procedure newstr (st: str; x, y: integer); var i: integer; begin for i := 1 to length(st) do newch (st[i], x, y+i-1) end; procedure hline (x, y1, y2: integer); var y: integer; begin for y := y1 to y2 do if work[x,y] = '|' then newch ('+', x, y) else newch ('-', x, y) end; procedure vline (x1, x2, y: integer); var x: integer; begin for x := x1 to x2 do if work[x,y] = '-' then newch ('+', x, y) else newch ('|', x, y) end; { Command Procedures } procedure mvcursor (x, y: integer); var i: integer; procedure wrtlin (cln: line); var k: integer; begin k := oy + sydim; repeat k := k - 1 until (k=oy) or (cln[k] <> ' '); wrtstr (substr (cln, oy, k-oy+1)) end; begin if y= sydim then y := oy + sydim-1; if x= sxdim then begin if x > pxdim then x := pxdim; abscursor (sxdim+1, 1); for i := ox+sxdim to x do begin wrtlin (work[i]); newlin end; for i := sxdim to 22 do newlin; ox := x-sxdim+1 end; cx := x; cy := y end; procedure origin (x, y: integer); var i, j, k: integer; begin if (x <= pxdim+1-sxdim) and (y <= pydim+1-sydim) then begin ox := x; oy := y; if not onscreen(cx, cy) then begin cx := x; cy := y end; wrtstr (''(esc)'[2J'(esc)'[f') {Erase screen and Home}; for i := x to x+sxdim-1 do begin k := y + sydim; repeat k:= k - 1 until (k=y) or (work [i, k] <> ' '); wrtstr (substr (work[i], y, k-y+1)); newlin end; for i := sxdim to 22 do newlin end end; procedure instext; var i: integer; begin cursor (cx, cy); rdln (oy+sydim-cy+3); for i := 1 to length(ln) do begin work [cx, cy] := ln[i]; cy := cy + 1 end end; procedure filltext; var i, j, k, y: integer; begin i := 1; ln := ln + ' '; repeat j := i; while (i < length(ln)) and (ln[i] <> ' ') do i := i + 1; if i <> j then begin y := cy; while (y < pydim) and (work [cx, y] = ' ') do y := y + 1; if y-cy <= i-j then begin cx := cx + 1; while (cy > 2) and (work [cx, cy-2] = ' ') do cy := cy - 1 end; if y-cy > i-j then begin for k := j to i-1 do newch (ln[k], cx, k-j+cy); i := i + 1; cy := cy + i-j end else j := i end until j = i end; procedure centertext; var i, k, y, y2, lno: integer; begin i := 0; while (cy+i < pydim) and (cy-i > 1) and (work[cx, cy+i] = ' ') and (work[cx, cy-i] = ' ') do i := i + 1; if i*2-1 >= length(ln) then begin i := cy - length(ln) div 2; for k := 1 to length(ln) do begin newch (ln[k], cx, i); i := i + 1 end end else begin lno := 0; ln := ln + ' '; normal (cx, cy); repeat y := cy; y2 := cy; while (y>1) and (work[cx, y] = ' ') do y := y-1; while (y2 < pydim) and (work[cx, y2] = ' ') do y2 := y2 + 1; i := length(ln); while (lno < i-1) and (ln[lno+1] = ' ') do lno := lno + 1; while (i<>lno) and ((i-lno > y2-y-2) or (ln[i] <> ' ')) do i := i - 1; while (i<>lno) and (ln[i] = ' ') do i := i - 1; if i<>lno then begin y := (y + y2 + lno - i + 1) div 2; for k := lno + 1 to i do begin newch (ln[k], cx, y); y := y + 1 end; cx := cx + 1; lno := i end else lno := length(ln) until lno = length(ln) end end; procedure mark {Set cursor mark}; begin case mkct of 0: begin mx0 := cx; my0 := cy; mkct := mkct + 1 end; 1: begin normal (mx0, my0); if mx0>cx then begin mx1 := mx0; mx0 := cx end else mx1 := cx; if my0>cy then begin my1 := my0; my0 := cy end else my1 := cy; mkct := mkct + 1; mvcursor (mx0, my0) end; otherwise wrtchr (''(bel)) end end; procedure blank {Remove cursor mark}; begin case mkct of 1: begin normal (mx0, my0); mkct := mkct - 1 end; 2: begin normal (mx1, my1); normal (cx+mx1-mx0, cy+my1-my0); mkct := mkct - 1 end end end; procedure copy; var i, j: integer; begin if mkct = 2 then begin if (pxdim-cx >= mx1-mx0) and (pydim-cy >= my1-my0) then if (cx= mx1-mx0) and (pydim-cy >= my1-my0) then begin if (cx mx0) and (cy <> my0) then begin if cx < mx0 then begin x := mx0; mx0 := cx end else x := cx; if cy < my0 then begin y := my0; my0 := cy end else y := cy; newch ('+', mx0, my0); hline (mx0, my0+1, y-1); newch ('+', mx0, y); vline (mx0+1, x-1, my0); vline (mx0+1, x-1, y); newch ('+', x, my0); hline (x, my0+1, y-1); newch ('+', x, y); blank end end; procedure zap {Clear a region to blanks}; var i, j, x, y: integer; begin if mkct = 1 then begin if cx < mx0 then begin x := mx0; mx0 := cx end else x := cx; if cy < my0 then begin y := my0; my0 := cy end else y := cy; for i := mx0 to x do begin for j := my0 to y do begin newch (' ', i, j) end end; blank end end; procedure include (flnm: str); var wfl: str; j, k: integer; ch: char; begin open (workfl, flnm, unknown); reset (workfl); while (cx <= pxdim) and (not eof (workfl)) do begin readln (workfl, wfl); j := 0; k := 0; while k <> length(wfl) do begin k := k + 1; ch := wfl [k]; if ch = ''(tab) then repeat j := j + 1; work[cx,j] := ' ' until j mod 8 = 0 else begin work[cx,j+1] := ch; j := j + 1 end end; for j := j+1 to pydim do work [cx, j] := ' '; cx := cx + 1 end; close (workfl) end; procedure inslin; var i, j: integer; begin for i := pxdim-nx downto cx do work[i+nx] := work[i]; for i := cx to cx+nx-1 do for j := 1 to pydim do work[i, j] := ' '; origin (ox, oy) end; procedure dellin; var i, j: integer; begin for i := cx to pxdim-nx do work[i] := work[i+nx]; for i := pxdim-nx+1 to pxdim do for j := 1 to pydim do work[i, j] := ' '; origin (ox, oy) end; procedure inscol; var i, j: integer; begin for i := 1 to pxdim do begin for j := pydim-nx downto cy do work[i, j+nx] := work[i, j]; for j := cy to cy+nx-1 do work[i, j] := ' ' end; origin (ox, oy) end; procedure delcol; var i, j: integer; begin for i := 1 to pxdim do begin for j := cy to pydim-nx do work[i, j] := work[i, j+nx]; for j := pydim-nx+1 to pydim do work[i, j] := ' ' end; origin (ox, oy) end; procedure getcmd; var i: integer; begin reverse (cx, cy); if mkct <>0 then begin reverse (mx0, my0); if mkct = 2 then begin reverse (mx1, my1); reverse (cx+mx1-mx0, cy+my1-my0) end end; abscursor (sxdim+1, 1); wrtstr ('+'(esc)'[0J'(esc)'='); rdln (pydim); if iostat.term = esc then begin cmch := chr(esc); c2 := ln.body[iostat.count + 3]; ln := ln + ' '; i := 1; rddec (ln, i, nx) end else begin cmch := uc (ln.body[1]); if length(ln) > 0 then ln := substr (ln, 2, length(ln)-1); case cmch of 'O','P': begin i := 1; ln := ln + ' '; rddec (ln, i, nx); rddec (ln, i, ny) end end end; normal (cx, cy); if mkct=2 then normal (cx+mx1-mx0, cy+my1-my0) end; procedure init; var i, j: integer; begin mkct := 0; sydim := 80; {Set no-wrap, key pad application mode, and get file name} writeln (''(esc)'[?7lRev 850125'); writeln; write ('Figure file: '); readln (workflnm); cx := 1; include (workflnm); for i := cx to pxdim do for j := 1 to pydim do work [i, j] := ' '; $assign ('SYS$INPUT', ichan); $assign ('SYS$OUTPUT', ochan); cx := 1; cy := 1; origin (1, 1) end; procedure finish; var i, j, lastln, lastch: integer; function blankline: boolean; var z: integer; begin z := pydim; while (z<>1) and (work [lastln, z] = ' ') do z := z - 1; blankline := (z = 1) and (work [lastln, 1] = ' ') end; begin open (workfl, workflnm, new); rewrite (workfl); lastln := pxdim; while blankline do lastln := lastln - 1; for i := 1 to lastln do begin lastch := pydim; while (lastch <> 1) and (work [i, lastch] = ' ') do lastch := lastch - 1; for j := 1 to lastch do write (workfl, work [i, j]); writeln (workfl) end; close (workfl) end; begin init; gold := false; repeat getcmd; case cmch of 'I': begin nx := cx; include (ln); origin (ox, oy); cx := nx end; 'F': filltext; 'C': centertext; 'W': begin sydim := pydim; oy := 1; wrtstr (''(esc)'[?3h'); origin (ox, oy) end; 'N': begin sydim := 80; wrtstr (''(esc)'[?3l'); origin (ox, oy) end; 'O': origin (nx, ny); 'P': mvcursor (nx, ny); ''(cr): if mkct=0 then mvcursor (cx, oy) else mvcursor (cx, my0); ''(esc): case c2 of 'B', 't': if gold then mvcursor (ox+sxdim-1, cy) else mvcursor (cx+nx, cy); 'A', 'w': if gold then mvcursor (ox, cy) else mvcursor (cx-nx, cy); 'D', 'q': if gold then mvcursor (cx, oy) else mvcursor (cx, cy-nx); 'C', 'r': if gold then mvcursor (cx, oy+sydim-1) else mvcursor (cx, cy+nx); { 'q': mvcursor (cx, cy-8); 'r': mvcursor (cx, cy+8); 'w': mvcursor (cx-8, cy); 't': mvcursor (cx+8, cy); } 'R': begin while (cy < oy+sydim-1) and (work[cx,cy] <> ' ') do cy := cy + 1; while (cy < oy+sydim-1) and (work[cx,cy] = ' ') do cy := cy + 1 end; 'S': instext; 'p': if gold then dellin else inslin; 'M': if gold then delcol else inscol; 'y': copy; 'v': move; 's': zap; 'x': drawline; 'u': drawbox; 'n': if gold then blank else mark end end; gold := (cmch = ''(esc)) and (c2 = 'P') until (cmch = 'E') or (cmch = 'Q'); abscursor (sxdim+1, 1); if cmch = 'E' then finish; $dassgn (ichan); $dassgn (ochan); end. -h- flowchart.drw Thu May 09 16:16:23 1985 DRA2:[FE]FLOWCHART.DRW;1 pf1 key is the gold (usually delete) of the other keys pf2 key is the help/command key v ,---------------. ( pf3 key ) `-------+-------' v ,---------------. ~ pf4 key ~ ~ allows 2 lines ~ `-------+-------' v *-------------* < 7 key > *------+------* v *-------------* / 8 key \ < uses > \ up to 3 lines / *------+------* v *---------------* / 9 key = i/o / *--------+------* v *--------------* / minus key / /2 line i/o / *--------+-----* v ++---------------++ ||4 key || ++-------+-------++ v ++---------------++ ||5 key = 2 line || ||subroutine call|| ++-------+-------++ v ++---------------++ || 6 key || || 3 line || ||subroutine call|| ++-------+-------++ comma key is current character delete key as in edt v +-----------------+ | 1 key = box | +--------+--------+ v +-----------------+ | 2 key | | two line box | +--------+--------+ v +-----------------+ | 3 key | | yields this | | three line box | +--------+--------+ enter is text begin/end 0 key is change drawing modes/ insert blank line v ,-. ( ) <= period key `+' -h- newfigedt.pas Thu May 09 16:16:23 1985 DRA2:[FE]NEWFIGEDT.PAS;1 [inherit ('SYS$LIBRARY:STARLET')] program figedt (input, output); const sxdim = 22; pxdim = 132; pydim = 132; esc = 27; bel = 7; TAB = 9; cr = 13; type str = varying [pydim] of char; line = packed array [1..pydim] of char; $word = [word] 0..65535; iosb = record status: $word; count: $word; term: $word; termct: $word end; var cx, cy, ox, oy, lx, ly, nx, ny, mx0, my0, mx1, my1: integer; mkct, rs, sydim: integer; ichan, ochan: $word; iostat: iosb; iln: line; cmch, c1, c2: char; gold: boolean; ln: str; workflnm: str; work: array [1..pxdim] of line; workfl: text; { Utility Procedures } procedure rdln (len: integer); type modblkt = record item: $word; len: $word; immed: unsigned; return: unsigned end; const modblk = modblkt (trm$_modifiers, 0, trm$m_tm_noedit + trm$m_tm_norecall, 0); begin rs := $qiow (, ichan, io$_readvblk + io$m_extend, iostat,,, ln.body, len,, modblk, 6); ln.length := iostat.count end; procedure rddec (ln: str; var indx, val: integer); begin val := 0; while (indx < length(ln)) and (ln[indx] = ' ') do indx := indx + 1; if ln[indx] in ['0'..'9'] then begin while (indx < length(ln)) and (ln[indx] in ['0'..'9']) do begin val := 10*val + (ord(ln[indx]) - 48); indx := indx + 1 end end else val := 1 end; function uc (ch: char): char; begin if ch >= '`' then uc := chr (ord (ch) - 32) else uc := ch end; procedure wrtstr (oln: str); begin rs := $qiow (,ochan, io$_writevblk,,,, oln.body, oln.length,, 0) end; procedure newlin; begin wrtstr (''(cr)''(10)) end; procedure wrtchr (ch: char); var st: str; begin st := ch; wrtstr (st) end; function onscreen (x, y: integer): boolean; begin onscreen := (x>=ox) and (x-ox=oy) and (y-oylx) or (y<>ly) then cursor (x, y); wrtstr (ch); ly := ly + 1 end; work[x, y] := ch end; procedure newstr (st: str; x, y: integer); var i: integer; begin for i := 1 to length(st) do newch (st[i], x, y+i-1) end; procedure hline (x, y1, y2: integer); var y: integer; begin for y := y1 to y2 do if work[x,y] = '|' then newch ('+', x, y) else newch ('-', x, y) end; procedure vline (x1, x2, y: integer); var x: integer; begin for x := x1 to x2 do if work[x,y] = '-' then newch ('+', x, y) else newch ('|', x, y) end; { Command Procedures } procedure mvcursor (x, y: integer); var i: integer; procedure wrtlin (cln: line); var k: integer; begin k := oy + sydim; repeat k := k - 1 until (k=oy) or (cln[k] <> ' '); wrtstr (substr (cln, oy, k-oy+1)) end; begin if y= sydim then y := oy + sydim-1; if x= sxdim then begin if x > pxdim then x := pxdim; abscursor (sxdim+1, 1); for i := ox+sxdim to x do begin wrtlin (work[i]); newlin end; for i := sxdim to 22 do newlin; ox := x-sxdim+1 end; cx := x; cy := y end; procedure origin (x, y: integer); var i, j, k: integer; begin if (x <= pxdim+1-sxdim) and (y <= pydim+1-sydim) then begin ox := x; oy := y; if not onscreen(cx, cy) then begin cx := x; cy := y end; wrtstr (''(esc)'[2J'(esc)'[f') {Erase screen and Home}; for i := x to x+sxdim-1 do begin k := y + sydim; repeat k:= k - 1 until (k=y) or (work [i, k] <> ' '); wrtstr (substr (work[i], y, k-y+1)); newlin end; for i := sxdim to 22 do newlin end end; procedure instext; var i: integer; begin cursor (cx, cy); rdln (oy+sydim-cy); for i := 1 to length(ln) do begin work [cx, cy] := ln[i]; cy := cy + 1 end end; procedure filltext; var i, j, k, y: integer; begin i := 1; ln := ln + ' '; repeat j := i; while (i < length(ln)) and (ln[i] <> ' ') do i := i + 1; if i <> j then begin y := cy; while (y < pydim) and (work [cx, y] = ' ') do y := y + 1; if y-cy <= i-j then begin cx := cx + 1; while (cy > 2) and (work [cx, cy-2] = ' ') do cy := cy - 1 end; if y-cy > i-j then begin for k := j to i-1 do newch (ln[k], cx, k-j+cy); i := i + 1; cy := cy + i-j end else j := i end until j = i end; procedure centertext; var i, k, y, y2, lno: integer; begin i := 0; while (cy+i < pydim) and (cy-i > 1) and (work[cx, cy+i] = ' ') and (work[cx, cy-i] = ' ') do i := i + 1; if i*2-1 >= length(ln) then begin i := cy - length(ln) div 2; for k := 1 to length(ln) do begin newch (ln[k], cx, i); i := i + 1 end end else begin lno := 0; ln := ln + ' '; normal (cx, cy); repeat y := cy; y2 := cy; while (y>1) and (work[cx, y] = ' ') do y := y-1; while (y2 < pydim) and (work[cx, y2] = ' ') do y2 := y2 + 1; i := length(ln); while (lno < i-1) and (ln[lno+1] = ' ') do lno := lno + 1; while (i<>lno) and ((i-lno > y2-y-2) or (ln[i] <> ' ')) do i := i - 1; while (i<>lno) and (ln[i] = ' ') do i := i - 1; if i<>lno then begin y := (y + y2 + lno - i + 1) div 2; for k := lno + 1 to i do begin newch (ln[k], cx, y); y := y + 1 end; cx := cx + 1; lno := i end else lno := length(ln) until lno = length(ln) end end; procedure mark {Set cursor mark}; begin case mkct of 0: begin mx0 := cx; my0 := cy; mkct := mkct + 1 end; 1: begin normal (mx0, my0); if mx0>cx then begin mx1 := mx0; mx0 := cx end else mx1 := cx; if my0>cy then begin my1 := my0; my0 := cy end else my1 := cy; mkct := mkct + 1; mvcursor (mx0, my0) end; otherwise wrtchr (''(bel)) end end; procedure blank {Remove cursor mark}; begin case mkct of 1: begin normal (mx0, my0); mkct := mkct - 1 end; 2: begin normal (mx1, my1); normal (cx+mx1-mx0, cy+my1-my0); mkct := mkct - 1 end end end; procedure copy; var i, j: integer; begin if mkct = 2 then begin if (pxdim-cx >= mx1-mx0) and (pydim-cy >= my1-my0) then if (cx= mx1-mx0) and (pydim-cy >= my1-my0) then begin if (cx mx0) and (cy <> my0) then begin if cx < mx0 then begin x := mx0; mx0 := cx end else x := cx; if cy < my0 then begin y := my0; my0 := cy end else y := cy; newch ('+', mx0, my0); hline (mx0, my0+1, y-1); newch ('+', mx0, y); vline (mx0+1, x-1, my0); vline (mx0+1, x-1, y); newch ('+', x, my0); hline (x, my0+1, y-1); newch ('+', x, y); blank end end; procedure zap {Clear a region to blanks}; var i, j, x, y: integer; begin if mkct = 1 then begin if cx < mx0 then begin x := mx0; mx0 := cx end else x := cx; if cy < my0 then begin y := my0; my0 := cy end else y := cy; for i := mx0 to x do begin for j := my0 to y do begin newch (' ', i, j) end end; blank end end; procedure include (flnm: str); var wfl: str; j, k: integer; ch: char; begin open (workfl, flnm, unknown); reset (workfl); while (cx <= pxdim) and (not eof (workfl)) do begin readln (workfl, wfl); j := 0; k := 0; while k <> length(wfl) do begin k := k + 1; ch := wfl [k]; if ch = ''(tab) then repeat j := j + 1; work[cx,j] := ' ' until j mod 8 = 0 else begin work[cx,j+1] := ch; j := j + 1 end end; for j := j+1 to pydim do work [cx, j] := ' '; cx := cx + 1 end; close (workfl) end; procedure inslin; var i, j: integer; begin for i := pxdim-nx downto cx do work[i+nx] := work[i]; for i := cx to cx+nx-1 do for j := 1 to pydim do work[i, j] := ' '; origin (ox, oy) end; procedure dellin; var i, j: integer; begin for i := cx to pxdim-nx do work[i] := work[i+nx]; for i := pxdim-nx+1 to pxdim do for j := 1 to pydim do work[i, j] := ' '; origin (ox, oy) end; procedure inscol; var i, j: integer; begin for i := 1 to pxdim do begin for j := pydim-nx downto cy do work[i, j+nx] := work[i, j]; for j := cy to cy+nx-1 do work[i, j] := ' ' end; origin (ox, oy) end; procedure delcol; var i, j: integer; begin for i := 1 to pxdim do begin for j := cy to pydim-nx do work[i, j] := work[i, j+nx]; for j := pydim-nx+1 to pydim do work[i, j] := ' ' end; origin (ox, oy) end; procedure getcmd; var i: integer; begin reverse (cx, cy); if mkct <>0 then begin reverse (mx0, my0); if mkct = 2 then begin reverse (mx1, my1); reverse (cx+mx1-mx0, cy+my1-my0) end end; abscursor (sxdim+1, 1); wrtstr ('+'(esc)'[0J'(esc)'='); rdln (pydim); if iostat.term = esc then begin cmch := chr(esc); c2 := ln.body[iostat.count + 3]; ln := ln + ' '; i := 1; rddec (ln, i, nx) end else begin cmch := uc (ln[1]); ln := substr (ln, 2, length(ln)-1); case cmch of 'O','P': begin i := 1; ln := ln + ' '; rddec (ln, i, nx); rddec (ln, i, ny) end end end; normal (cx, cy); if mkct=2 then normal (cx+mx1-mx0, cy+my1-my0) end; procedure init; var i, j: integer; begin mkct := 0; sydim := 80; {Set no-wrap, key pad application mode, and get file name} writeln (''(esc)'[?7lRev 850114'); writeln; write ('Figure file: '); readln (workflnm); cx := 1; include (workflnm); for i := cx to pxdim do for j := 1 to pydim do work [i, j] := ' '; $assign ('SYS$INPUT', ichan); $assign ('SYS$OUTPUT', ochan); cx := 1; cy := 1; origin (1, 1) end; procedure finish; var i, j, lastln, lastch: integer; function blankline: boolean; var z: integer; begin z := pydim; while (z<>1) and (work [lastln, z] = ' ') do z := z - 1; blankline := (z = 1) and (work [lastln, 1] = ' ') end; begin open (workfl, workflnm, new); rewrite (workfl); lastln := pxdim; while blankline do lastln := lastln - 1; for i := 1 to lastln do begin lastch := pydim; while (lastch <> 1) and (work [i, lastch] = ' ') do lastch := lastch - 1; for j := 1 to lastch do write (workfl, work [i, j]); writeln (workfl) end; close (workfl) end; begin init; gold := false; repeat getcmd; case cmch of 'I': begin nx := cx; include (ln); origin (ox, oy); cx := nx end; 'F': filltext; 'C': centertext; 'W': begin sydim := pydim; oy := 1; wrtstr (''(esc)'[?3h'); origin (ox, oy) end; 'N': begin sydim := 80; wrtstr (''(esc)'[?3l'); origin (ox, oy) end; 'O': origin (nx, ny); 'P': mvcursor (nx, ny); ''(cr): if mkct=0 then mvcursor (cx, oy) else mvcursor (cx, my0); ''(esc): case c2 of 'B': mvcursor (cx+nx, cy); 'A': mvcursor (cx-nx, cy); 'D': if uc(ln[1]) = 'M' then mvcursor (cx, oy) else mvcursor (cx, cy-nx); 'C': if uc(ln[1]) = 'M' then mvcursor (cx, oy+sydim-1) else mvcursor (cx, cy+nx); 'q': mvcursor (cx, cy-8); 'r': mvcursor (cx, cy+8); 'w': mvcursor (cx-8, cy); 't': mvcursor (cx+8, cy); 'R': begin while (cy < oy+sydim-1) and (work[cx,cy] <> ' ') do cy := cy + 1; while (cy < oy+sydim-1) and (work[cx,cy] = ' ') do cy := cy + 1 end; 'S': instext; 'p': if gold then dellin else inslin; 'M': if gold then delcol else inscol; 'y': copy; 'v': move; 's': zap; 'x': drawline; 'u': drawbox; 'n': mark; 'l': blank end end; gold := (cmch = ''(esc)) and (c2 = 'P') until (cmch = 'E') or (cmch = 'Q'); abscursor (sxdim+1, 1); if cmch = 'E' then finish; $dassgn (ichan); $dassgn (ochan); end. -h- setup.com Thu May 09 16:16:23 1985 DRA2:[FE]SETUP.COM;7 $ ASSIGN USR$DSK:[FCEDT] FCEDT $ ASSIGN FCEDT:FCEDT.HLB HLP$LIBRARY $ FC*EDT == "EDIT/COMMAND=FCEDT:FCINIT.EDT" $ FCPR*INT == "PRINT/QUE=FCEDT$PRINT/NOFEED" $ FCT*RANSLAT == "@FCEDT:TRAN" $ ASSIGN LPA0: FCEDT$PRINT -h- sp21l131c.fil Thu May 09 16:16:23 1985 DRA2:[FE]SP21L131C.FIL;1 -h- sp21l79c.fil Thu May 09 16:16:23 1985 DRA2:[FE]SP21L79C.FIL;1 -h- tran.com Thu May 09 16:16:23 1985 DRA2:[FE]TRAN.COM;1 $! $! COMMAND FILE TO TRANSLATE GRAPHICAL IMAGES $! $ IF P1 .NES. "" THEN GOTO PRINT $ WRITE SYS$OUTPUT "This procedure formats flowcharter drawing files" $ WRITE SYS$OUTPUT "to be printed on the line printer." $ WRITE SYS$OUTPUT " " $ WRITE SYS$OUTPUT "(The proceedure is run in batch.) " $ WRITE SYS$OUTPUT "" $! $ IF P1 .EQS. "" THEN INQUIRE P1 "File name to format? " $ IF P2 .EQS. "" THEN INQUIRE P2 "Name of output file? " $ IF P3 .EQS. "" THEN INQUIRE P3 "How many copies? " $ IF P3 .EQS. "" THEN P3 = "1" $ print: $! $ W1:="''F$LOGICAL("SYS$DISK")'''F$DIR()'" ! LOCATION WHERE RUN $ W2:="''P1'" ! INPUT FILE $ W3:="''P2'" ! OUTPUT FILE $ W4:="''P3'" ! NUMBER OF COPIES $! $ SUBMIT/QUEUE=SYS$BATCH/NOPRINT/LOG='W1'FCTRAN.LOG/NOTIFY - FCEDT:TRAN.RUN/PARAMETERS=('W1','W2','W3','W4') $ EXIT -h- tran.for Thu May 09 16:16:23 1985 DRA2:[FE]TRAN.FOR;3 C C ************************************************************** C C TRANSLATION PROGRAM FOR FLOWCHARTER IMAGES C This version is for DEC LXY and PRINTRONIX printers C C ************************************************************** C CHARACTER*12 CHARSET(182) CHARACTER*1 BUF(132) INTEGER*2 INP(134,3) ! 134 char by 3 line input buffer CHARACTER*1 OUT(12,132),PLT LOGICAL*1 AFLAG,BFLAG INTEGER*2 TEMP1,TEMP2,I,J,K,L,N(3) INTEGER*2 GR(134,3) ! Graphics character index (134 chars by 3 lines) C C Matrix of directions to search for connections 7 | 8 | 1 LOGICAL*1 DIR(8,134,3) ! --+---+-- C (8 directions by 134 chars by 3 lines) 6 | | 2 C The directions are for the 8 adjacent --+---+-- C character cells as shown 5 | 4 | 3 INTEGER*2 PC,TC,NC,PL,TL,NL,D(8),CNT,ANGLE COMMON /LOGICAL/DIR COMMON /NUMERIC/PC,TC,NC,PL,TL,NL,D,CNT,ANGLE C INTEGER*2 DNARROW(8),UPARROW(8),SQUIG(8,8) C C DATA PLT/5/ ! CTRL-E Specifies Plot print line in plot mode C ! DEC LXY and PRINTRONIX printers accept raster graphics C ! with the low-order 6 bits of each byte representing C ! pixel values 0=off (blank), 1=on (dot). C C *************************************************************** C C DEFINE CHARACTERS - PIXEL MATRIX FOR CHARACTERS C DATA (CHARSET(i),i=1,31)/31*'@@QQJDJQQ@@@'/ ! X for all Control chars C DATA CHARSET(032)/'@@@@@@@@@@@@'/ ! SPACE DATA CHARSET(033)/'@@DDDDD@D@@@'/ ! ! DATA CHARSET(034)/'@@JJ@@@@@@@@'/ ! " DATA CHARSET(035)/'@@@J_J_J@@@@'/ ! # DATA CHARSET(036)/'@DNUENTUND@@'/ ! $ DATA CHARSET(037)/'@@CSHDBYX@@@'/ ! % DATA CHARSET(038)/'@@@NJFUIV@@@'/ ! & DATA CHARSET(039)/'@LLHD@@@@@@@'/ ! ' DATA CHARSET(040)/'@HDBBBBBDH@@'/ ! ( DATA CHARSET(041)/'@BDHHHHHDB@@'/ ! ) DATA CHARSET(042)/'@@@DUNUD@@@@'/ ! * DATA CHARSET(043)/'@@@DD_DD@@@@'/ ! + DATA CHARSET(044)/'@@@@@@@LLHD@'/ ! , DATA CHARSET(045)/'@@@@@_@@@@@@'/ ! - DATA CHARSET(046)/'@@@@@@@LL@@@'/ ! . DATA CHARSET(047)/'@HHDDBBAA@@@'/ ! / DATA CHARSET(048)/'@@NQYUSQN@@@'/ ! 0 DATA CHARSET(049)/'@@DFDDDDN@@@'/ ! 1 DATA CHARSET(050)/'@@NQPLBA_@@@'/ ! 2 DATA CHARSET(051)/'@@_HDHPQN@@@'/ ! 3 DATA CHARSET(052)/'@@HLJI_HH@@@'/ ! 4 DATA CHARSET(053)/'@@_AOPPQN@@@'/ ! 5 DATA CHARSET(054)/'@@LBAOQQN@@@'/ ! 6 DATA CHARSET(055)/'@@_PHDBBB@@@'/ ! 7 DATA CHARSET(056)/'@@NQQNQQN@@@'/ ! 8 DATA CHARSET(057)/'@@NQQ^PHF@@@'/ ! 9 DATA CHARSET(058)/'@@@@LL@LL@@@'/ ! : DATA CHARSET(059)/'@@@@LL@LLHD@'/ ! ; DATA CHARSET(060)/'@PHDBABDHP@@'/ ! < DATA CHARSET(061)/'@@@@_@_@@@@@'/ ! / DATA CHARSET(062)/'@ABDHPHDBA@@'/ ! > DATA CHARSET(063)/'@@NQPHDD@D@@'/ ! ? C DATA CHARSET(064)/'@@NQ]U]AN@@@'/ ! @ DATA CHARSET(065)/'@@DJQQ_QQ@@@'/ ! A DATA CHARSET(066)/'@@OQQOQQO@@@'/ ! B DATA CHARSET(067)/'@@NQAAAQN@@@'/ ! C DATA CHARSET(068)/'@@GIQQQIG@@@'/ ! D DATA CHARSET(069)/'@@_AAOAA_@@@'/ ! E DATA CHARSET(070)/'@@_AAOAAA@@@'/ ! F DATA CHARSET(071)/'@@NAAYQQ^@@@'/ ! G DATA CHARSET(072)/'@@QQQ_QQQ@@@'/ ! H DATA CHARSET(073)/'@@NDDDDDN@@@'/ ! I DATA CHARSET(074)/'@@PPPPPQN@@@'/ ! J DATA CHARSET(075)/'@@QIECEIQ@@@'/ ! K DATA CHARSET(076)/'@@AAAAAA_@@@'/ ! L DATA CHARSET(077)/'@@Q[UUQQQ@@@'/ ! M DATA CHARSET(078)/'@@QQSUYQQ@@@'/ ! N DATA CHARSET(079)/'@@NQQQQQN@@@'/ ! O DATA CHARSET(080)/'@@OQQOAAA@@@'/ ! P DATA CHARSET(081)/'@@NQQQUIV@@@'/ ! Q DATA CHARSET(082)/'@@OQQOEIQ@@@'/ ! R DATA CHARSET(083)/'@@NQANPQN@@@'/ ! S DATA CHARSET(084)/'@@_DDDDDD@@@'/ ! T DATA CHARSET(085)/'@@QQQQQQN@@@'/ ! U DATA CHARSET(086)/'@@QQQQQJD@@@'/ ! V DATA CHARSET(087)/'@@QQQUUUJ@@@'/ ! W DATA CHARSET(088)/'@@QQJDJQQ@@@'/ ! X DATA CHARSET(089)/'@@QQJDDDD@@@'/ ! Y DATA CHARSET(090)/'@@_PHDBA_@@@'/ ! Z DATA CHARSET(091)/'@NBBBBBBBN@@'/ ! [ DATA CHARSET(092)/'@AABBDDHH@@@'/ ! \ DATA CHARSET(093)/'@NHHHHHHHN@@'/ ! ] DATA CHARSET(094)/'@@DJQQ@@@@@@'/ ! 6 DATA CHARSET(095)/'@@@@@@@@@?@@'/ ! _ C ! DATA CHARSET(096)/'@LLDH@@@@@@@'/ ! ' DATA CHARSET(097)/'@@@@NP^Q^@@@'/ ! a DATA CHARSET(098)/'@@AAOQQQO@@@'/ ! b DATA CHARSET(099)/'@@@@NQAA^@@@'/ ! c DATA CHARSET(100)/'@@PP^QQQ^@@@'/ ! d DATA CHARSET(101)/'@@@@NQ_A^@@@'/ ! e DATA CHARSET(102)/'@@LRGBBBB@@@'/ ! f DATA CHARSET(103)/'@@@@^QQQ^PN@'/ ! g DATA CHARSET(104)/'@@AAOQQQQ@@@'/ ! h DATA CHARSET(105)/'@@D@FDDDN@@@'/ ! i DATA CHARSET(106)/'@@H@HHHHHIF@'/ ! j DATA CHARSET(107)/'@@AAIEGIQ@@@'/ ! k DATA CHARSET(108)/'@@FDDDDDN@@@'/ ! l DATA CHARSET(109)/'@@@@KUUUU@@@'/ ! m DATA CHARSET(110)/'@@@@MSQQQ@@@'/ ! n DATA CHARSET(111)/'@@@@NQQQN@@@'/ ! o DATA CHARSET(112)/'@@@@OQQQOAA@'/ ! p DATA CHARSET(113)/'@@@@^QQQ^PP@'/ ! q DATA CHARSET(114)/'@@@@MSAAA@@@'/ ! r DATA CHARSET(115)/'@@@@NANPO@@@'/ ! s DATA CHARSET(116)/'@@BBOBBBL@@@'/ ! t DATA CHARSET(117)/'@@@@QQQYV@@@'/ ! u DATA CHARSET(118)/'@@@@QQQJD@@@'/ ! v DATA CHARSET(119)/'@@@@QQUUJ@@@'/ ! w DATA CHARSET(120)/'@@@@QJDJQ@@@'/ ! x DATA CHARSET(121)/'@@@@QQQQ^PN@'/ ! y DATA CHARSET(122)/'@@@@_HDB_@@@'/ ! z DATA CHARSET(123)/'@HDDDBDDDH@@'/ ! { DATA CHARSET(124)/'DDDDDDDDDDDD'/ ! | DATA CHARSET(125)/'@BDDDHDDDB@@'/ ! } DATA CHARSET(126)/'@@@@BUH@@@@@'/ ! ~ DATA CHARSET(127)/'U*U*U*U*U*U*'/ ! C ! C ! DATA CHARSET(128)/' PPP @@@@@@'/ ! DATA CHARSET(129)/' PPPPPPPP '/ ! DATA CHARSET(130)/' PPPHHHDDDD'/ ! DATA CHARSET(131)/' PPHHDDBBAA'/ ! DATA CHARSET(132)/' PHFA@@@@@@'/ ! DATA CHARSET(133)/'!RL@@@@@@@@@'/ ! DATA CHARSET(134)/'$X@@@@@@@@@@'/ ! C ! DATA CHARSET(135)/'@@@@@ PPP '/ ! DATA CHARSET(136)/'@@@@@0HDDDDD'/ ! DATA CHARSET(137)/'@@@@@ XDBBAA'/ ! DATA CHARSET(138)/'@@@@@?@@@@@@'/ ! DATA CHARSET(139)/'AABDX @@@@@@'/ ! DATA CHARSET(140)/'DDDDH0@@@@@@'/ ! C ! DATA CHARSET(141)/'@@@@@@@@@@X$'/ ! DATA CHARSET(142)/'@@@@@@@@@LR!'/ ! DATA CHARSET(143)/'@@@@@AFHPP '/ ! DATA CHARSET(144)/'AABBDDHHPP '/ ! DATA CHARSET(145)/'DDDDHHHPPP '/ ! C ! DATA CHARSET(146)/'@@@@@@@@@@FE'/ ! DATA CHARSET(147)/'@@@@@ABDDDDD'/ ! DATA CHARSET(148)/'AAABBBBDDDDD'/ ! DATA CHARSET(149)/'DDDDDDDDDDDD'/ ! C ! DATA CHARSET(150)/'@@@@@ABBBAAA'/ ! DATA CHARSET(151)/'AABBBBBBBBAA'/ ! DATA CHARSET(152)/'DDDDDBBBBAAA'/ ! C ! DATA CHARSET(153)/'AABBBA@@@@@@'/ ! DATA CHARSET(154)/'DDDDBA@@@@@@'/ ! C ! DATA CHARSET(155)/'EF@@@@@@@@@@'/ ! C ! C ! DATA CHARSET(156)/'@@@$R3RI@@@@'/ ! DATA CHARSET(157)/'AABZDC0HVP '/ ! DATA CHARSET(158)/'DDDENPANTDDD'/ ! DATA CHARSET(159)/' PR\ ANRBAA'/ ! C ! DATA CHARSET(160)/' PPHH@@@@@@'/ ! DATA CHARSET(161)/'@@@@@<@@@@@@'/ ! DATA CHARSET(162)/'@@@@@@HHPP '/ ! DATA CHARSET(163)/'@@@@@DDDDDDD'/ ! DATA CHARSET(164)/'@@@@@@DDBBAA'/ ! DATA CHARSET(165)/'@@@@@G@@@@@@'/ ! DATA CHARSET(166)/'AABBDD@@@@@@'/ ! DATA CHARSET(167)/'DDDDDD@@@@@@'/ ! C ! DATA CHARSET(168)/'@@PX\^_\P@@@'/ ! DATA CHARSET(169)/'@@@CO?OC@@@@'/ ! DATA CHARSET(170)/'@@@P\_^\XP@@'/ ! DATA CHARSET(171)/'@@@@@__NNNDD'/ ! DATA CHARSET(172)/'@@@BN>^NFB@@'/ ! DATA CHARSET(173)/'@@@0NB@@@'/ ! DATA CHARSET(175)/'DDNNN__@@@@@'/ ! C ! DATA CHARSET(176)/'@@@@NNN@@@@@'/ ! DATA CHARSET(177)/' PPP_PPPP '/ ! DATA CHARSET(178)/'AABBB>BBBBAA'/ ! DATA CHARSET(179)/' SRJJDDD@@@'/ ! DATA CHARSET(180)/'@@@NQQQN@@@@'/ ! DATA CHARSET(181)/'????111?????'/ ! C C ************************************************************ C C SPECIAL GRAPHICAL SYMBOLS C DATA DNARROW(1)/172/ DATA DNARROW(3)/170/ DATA DNARROW(4)/171/ DATA DNARROW(5)/172/ DATA DNARROW(7)/170/ DATA DNARROW(8)/171/ C C DATA UPARROW(1)/168/ DATA UPARROW(3)/174/ DATA UPARROW(4)/175/ DATA UPARROW(5)/168/ DATA UPARROW(7)/174/ DATA UPARROW(8)/175/ C C DATA SQUIG(1,2)/128/ DATA SQUIG(1,3)/129/ DATA SQUIG(1,4)/130/ DATA SQUIG(1,5)/131/ DATA SQUIG(1,6)/132/ DATA SQUIG(1,7)/133/ DATA SQUIG(1,8)/134/ C DATA SQUIG(2,3)/135/ DATA SQUIG(2,4)/136/ DATA SQUIG(2,5)/137/ DATA SQUIG(2,6)/138/ DATA SQUIG(2,7)/139/ DATA SQUIG(2,8)/140/ C DATA SQUIG(3,4)/141/ DATA SQUIG(3,5)/142/ DATA SQUIG(3,6)/143/ DATA SQUIG(3,7)/144/ DATA SQUIG(3,8)/145/ C DATA SQUIG(4,5)/146/ DATA SQUIG(4,6)/147/ DATA SQUIG(4,7)/148/ DATA SQUIG(4,8)/149/ C DATA SQUIG(5,6)/150/ DATA SQUIG(5,7)/151/ DATA SQUIG(5,8)/152/ C DATA SQUIG(6,7)/153/ DATA SQUIG(6,8)/154/ C DATA SQUIG(7,8)/155/ C C ******************************************************* C C FILE OPENS - LOGICAL NAME IS ASSIGNED AT DCL LEVEL C OPEN(UNIT=11,FILE='INPUT$TXT:',STATUS='OLD',READONLY) OPEN(UNIT=12,FILE='OUTPUT$PLT:',STATUS='NEW') C C ************************************************************* C C PROGRAM USES BUFFER OF THREE LINES OF CHARACTERS TO C DETERMINE IF A CHARACTER IS TO BE INTERPRETED GRAPHICALLY C OR NOT. INDEX VARIBLES ARE USED AS POINTERS IN A CIRCULAR C QUEUE WITHIN THE INPUT BUFFER - IN(LP,CP) C C LP - LINE POSITION C C PL - PREVIOUS LINE C TL - THIS LINE C NL - NEXT LINE C C CP - CHARACTER POSITION C C PC - PREVIOUS CHARACTER C TC - THIS CHARACTER C NC - NEXT CHARACTER C C ************************************************************* C C SPECIAL GRAPHICAL CHARACTER ALPHABET C C ************************************************************* C C - HORIZONTAL STRAIGHT LINE SEGMENT C | VERTICAL STRAIGHT LINE SEGMENT C / DIAGONAL STRAIGHT LINE SEGMENT C \ DIAGONAL STRAIGHT LINE SEGMENT C ~ CURVED LINE SEGMENT C * CONNECTION POINT (ANY DIRECTIONS) C # SOLID DOT CONNECTION POINT (ANY DIRECTIONS) C v DOWN ARROW (MAY BE ON DIAGONAL DOWN) C < LEFT ARROW OR DIAGONAL (AND HORIZONTAL) INTERSECTION C ^ UP ARROW (MAY BE ON DIAGONAL UP) C > RIGHT ARROW OR DIAGONAL (AND HORIZONTAL) INTERSECTION C % STRAIGHT LINE BREAK (ANY DIRECTION) C , UPPER LEFT CURVED CORNER (90 OR 135 DEGREES) C . UPPER RIGHT CURVED CORNER (90 OR 135 DEGREES) C ` LOWER LEFT CURVED CORNER (90 OR 135 DEGREES) C ' LOWER RIGHT CURVED CORNER (90 OR 135 DEGREES) C ( LEFT CURVED EDGE (CAN ALSO CONNECT TO HORIZONTAL) C ) RIGHT CURVED EDGE (CAN ALSO CONNECT TO HORIZONTAL) C + VERTICAL AND HORIZONTAL INTERSECTION C X DIAGONAL INTERSECTIONS C V LEFT PORTION OF SQUARE ROOT SYMBOL C @ OPEN CIRCLE CONNECTION (ANY DIRECTIONS) C C ************************************************************** C C INITIALIZE POINTERS AND BUFFERS C AFLAG=.FALSE. BFLAG=.FALSE. PL=1 N(PL)=2 TL=2 N(TL)=2 NL=3 N(NL)=2 C DO 130 I=1,134 ! Blank input line buffers INP(I,PL)=32 INP(I,TL)=32 INP(I,NL)=32 130 CONTINUE C C C MAIN LOOP STARTS HERE 10 CONTINUE C C C C UPDATE POINTERS AND BUFFERS C PL=MOD(PL,3)+1 TL=MOD(TL,3)+1 NL=MOD(NL,3)+1 C C READ(11,100,END=9999)N(NL),(BUF(J),J=1,N(NL)) ! GET LINE FROM FILE 100 FORMAT(Q,132A1) C DO 135 I=1,134 INP(I,NL)=32 135 CONTINUE C C C C C CHECK IF ANY ASCII CONTROL CHARACTERS IN NEXT LINE C AFLAG=.FALSE. ! Assume no control characters IF (N(NL).GE.1)THEN DO 105 J=1,N(NL) ! Search line for control characters IF (BUF(J).LT.' ')THEN IF(ICHAR(BUF(J)).NE.9)THEN ! Except TAB AFLAG=.TRUE. ! Control character found ENDIF ENDIF 105 CONTINUE ENDIF C C IF (AFLAG) THEN C CONTROL CHARACTERS IN LINE C INSERT DUMMY SPACE LINE, C PROCESS AND PRINT OUT LAST GRAPHIC LINE C THEN WRITE OUT CONTROL LINE AS IS ELSE C NO CONTROL CHARACTERS IN LINE C TRANSLATE TO GRAPHICS C C INP(1,NL)=32 I=2 IF (N(NL).GT.0)THEN DO 150 J=1,N(NL) IF (BUF(J).EQ.CHAR(9))THEN DO 140 K=1,8-IMOD(I-2,8) INP(I,NL)=32 ! Pad with blanks I=I+1 140 CONTINUE ELSE ! Copy line read to next line of input buffer INP(I,NL)=ICHAR(BUF(J)) I=I+1 ENDIF 150 CONTINUE ENDIF INP(I,NL)=32 N(NL)=I C ENDIF C C COMPUTE CONNECTING DIRECTIONS FOR GRAPHICS CHARACTERS C Matrix of directions 7 | 8 | 1 C LOGICAL DIR(8,134,3) --+---+-- C (8 directions by 134 chars by 3 lines) 6 | | 2 C The directions are for the 8 adjacent --+---+-- C character cells as shown 5 | 4 | 3 C DO 160 I=1,134 DO 155 J=1,8 DIR(J,I,NL)=.FALSE. 155 CONTINUE GR(I,NL)=0 C C IF (INP(I,NL).EQ.' ')THEN IF (INP(I,NL).EQ.32)THEN C DO NOTHING, JUST SPEED PROCESS C ELSEIF (INP(I,NL).EQ.'-')THEN ELSEIF (INP(I,NL).EQ.45)THEN DIR(2,I,NL)=.TRUE. DIR(6,I,NL)=.TRUE. GR(I,NL)=1 C ELSEIF (INP(I,NL).EQ.'|')THEN ELSEIF (INP(I,NL).EQ.124)THEN DIR(4,I,NL)=.TRUE. DIR(8,I,NL)=.TRUE. GR(I,NL)=2 C ELSEIF (INP(I,NL).EQ.'/')THEN ELSEIF (INP(I,NL).EQ.47)THEN DIR(1,I,NL)=.TRUE. DIR(5,I,NL)=.TRUE. GR(I,NL)=3 C ELSEIF (INP(I,NL).EQ.'\')THEN ELSEIF (INP(I,NL).EQ.92)THEN DIR(3,I,NL)=.TRUE. DIR(7,I,NL)=.TRUE. GR(I,NL)=4 C ELSEIF (INP(I,NL).EQ.'~')THEN ELSEIF (INP(I,NL).EQ.126)THEN DIR(1,I,NL)=.TRUE. DIR(2,I,NL)=.TRUE. DIR(3,I,NL)=.TRUE. DIR(4,I,NL)=.TRUE. DIR(5,I,NL)=.TRUE. DIR(6,I,NL)=.TRUE. DIR(7,I,NL)=.TRUE. DIR(8,I,NL)=.TRUE. GR(I,NL)=5 C ELSEIF (INP(I,NL).EQ.'*')THEN ELSEIF (INP(I,NL).EQ.42)THEN DIR(1,I,NL)=.TRUE. DIR(2,I,NL)=.TRUE. DIR(3,I,NL)=.TRUE. DIR(4,I,NL)=.TRUE. DIR(5,I,NL)=.TRUE. DIR(6,I,NL)=.TRUE. DIR(7,I,NL)=.TRUE. DIR(8,I,NL)=.TRUE. GR(I,NL)=6 C ELSEIF (INP(I,NL).EQ.'#')THEN ELSEIF (INP(I,NL).EQ.35)THEN DIR(1,I,NL)=.TRUE. DIR(2,I,NL)=.TRUE. DIR(3,I,NL)=.TRUE. DIR(4,I,NL)=.TRUE. DIR(5,I,NL)=.TRUE. DIR(6,I,NL)=.TRUE. DIR(7,I,NL)=.TRUE. DIR(8,I,NL)=.TRUE. GR(I,NL)=7 C ELSEIF (INP(I,NL).EQ.'v')THEN ELSEIF (INP(I,NL).EQ.118)THEN DIR(1,I,NL)=.TRUE. DIR(3,I,NL)=.TRUE. DIR(4,I,NL)=.TRUE. DIR(5,I,NL)=.TRUE. DIR(7,I,NL)=.TRUE. DIR(8,I,NL)=.TRUE. GR(I,NL)=8 C ELSEIF (INP(I,NL).EQ.'<')THEN ELSEIF (INP(I,NL).EQ.60)THEN DIR(1,I,NL)=.TRUE. DIR(2,I,NL)=.TRUE. DIR(3,I,NL)=.TRUE. DIR(6,I,NL)=.TRUE. GR(I,NL)=9 C ELSEIF (INP(I,NL).EQ.'^')THEN ELSEIF (INP(I,NL).EQ.94)THEN DIR(1,I,NL)=.TRUE. DIR(3,I,NL)=.TRUE. DIR(4,I,NL)=.TRUE. DIR(5,I,NL)=.TRUE. DIR(7,I,NL)=.TRUE. DIR(8,I,NL)=.TRUE. GR(I,NL)=10 C ELSEIF (INP(I,NL).EQ.'>')THEN ELSEIF (INP(I,NL).EQ.62)THEN DIR(2,I,NL)=.TRUE. DIR(5,I,NL)=.TRUE. DIR(6,I,NL)=.TRUE. DIR(7,I,NL)=.TRUE. GR(I,NL)=11 C ELSEIF (INP(I,NL).EQ.'%')THEN ELSEIF (INP(I,NL).EQ.37)THEN DIR(1,I,NL)=.TRUE. DIR(2,I,NL)=.TRUE. DIR(3,I,NL)=.TRUE. DIR(4,I,NL)=.TRUE. DIR(5,I,NL)=.TRUE. DIR(6,I,NL)=.TRUE. DIR(7,I,NL)=.TRUE. DIR(8,I,NL)=.TRUE. GR(I,NL)=12 C ELSEIF (INP(I,NL).EQ.',')THEN ELSEIF (INP(I,NL).EQ.44)THEN DIR(2,I,NL)=.TRUE. DIR(4,I,NL)=.TRUE. DIR(5,I,NL)=.TRUE. GR(I,NL)=13 C ELSEIF (INP(I,NL).EQ.'.')THEN ELSEIF (INP(I,NL).EQ.46)THEN DIR(3,I,NL)=.TRUE. DIR(4,I,NL)=.TRUE. DIR(6,I,NL)=.TRUE. GR(I,NL)=14 C ELSEIF (INP(I,NL).EQ.'`')THEN ELSEIF (INP(I,NL).EQ.96)THEN DIR(2,I,NL)=.TRUE. DIR(7,I,NL)=.TRUE. DIR(8,I,NL)=.TRUE. GR(I,NL)=15 C ELSEIF (INP(I,NL).EQ.''')THEN ELSEIF (INP(I,NL).EQ.39)THEN DIR(1,I,NL)=.TRUE. DIR(6,I,NL)=.TRUE. DIR(8,I,NL)=.TRUE. GR(I,NL)=16 C ELSEIF (INP(I,NL).EQ.'(')THEN ELSEIF (INP(I,NL).EQ.40)THEN DIR(1,I,NL)=.TRUE. DIR(3,I,NL)=.TRUE. DIR(6,I,NL)=.TRUE. GR(I,NL)=17 C ELSEIF (INP(I,NL).EQ.')')THEN ELSEIF (INP(I,NL).EQ.41)THEN DIR(2,I,NL)=.TRUE. DIR(5,I,NL)=.TRUE. DIR(7,I,NL)=.TRUE. GR(I,NL)=18 C ELSEIF (INP(I,NL).EQ.'+')THEN ELSEIF (INP(I,NL).EQ.43)THEN DIR(2,I,NL)=.TRUE. DIR(4,I,NL)=.TRUE. DIR(6,I,NL)=.TRUE. DIR(8,I,NL)=.TRUE. GR(I,NL)=19 C ELSEIF (INP(I,NL).EQ.'X')THEN ELSEIF (INP(I,NL).EQ.88)THEN DIR(1,I,NL)=.TRUE. DIR(3,I,NL)=.TRUE. DIR(5,I,NL)=.TRUE. DIR(7,I,NL)=.TRUE. GR(I,NL)=20 C ELSEIF (INP(I,NL).EQ.'V')THEN ELSEIF (INP(I,NL).EQ.86)THEN DIR(1,I,NL)=.TRUE. GR(I,NL)=21 C ELSEIF (INP(I,NL).EQ.'@')THEN ELSEIF (INP(I,NL).EQ.64)THEN DIR(1,I,NL)=.TRUE. DIR(2,I,NL)=.TRUE. DIR(3,I,NL)=.TRUE. DIR(4,I,NL)=.TRUE. DIR(5,I,NL)=.TRUE. DIR(6,I,NL)=.TRUE. DIR(7,I,NL)=.TRUE. DIR(8,I,NL)=.TRUE. GR(I,NL)=22 ENDIF 160 CONTINUE C C DONE PREPROCESSING NEXT LINE C C BEGIN TRANSLATING THIS LINE C DO 7000 TC=2,N(TL)-1 PC=TC-1 NC=TC+1 C GOTO 1xx0 Where xx is index of graphic character GOTO (1010,1020,1030,1040,1050,1060,1070, 1 1080,1090,1100,1110,1120,1130,1140, 2 1150,1160,1170,1180,1190,1200,1210, 3 1220),GR(TC,TL) C C 1000 CONTINUE C NOT A GRAPHIC CHARACTER GOTO 5000 C C 1010 CONTINUE C C - HORIZONTAL STRAIGHT LINE SEGMENT C IF (DIR(2,PC,TL).OR.DIR(6,NC,TL))THEN INP(TC,TL)=138 GOTO 5000 ELSE GOTO 4000 ENDIF C C 1020 CONTINUE C C | VERTICAL STRAIGHT LINE SEGMENT C GOTO 5000 C C 1030 CONTINUE C C / DIAGONAL STRAIGHT LINE SEGMENT C IF (DIR(5,NC,PL).OR.DIR(1,PC,NL))THEN INP(TC,TL)=131 GOTO 5000 ELSE GOTO 4000 ENDIF C C 1040 CONTINUE C C \ DIAGONAL STRAIGHT LINE SEGMENT C IF (DIR(3,PC,PL).OR.DIR(7,NC,NL))THEN INP(TC,TL)=144 GOTO 5000 ELSE GOTO 4000 ENDIF C C 1050 CONTINUE C C ~ CURVED LINE SEGMENT C CALL FIT IF (CNT.EQ.2)THEN IF (D(1).GT.D(2))THEN INP(TC,TL)=SQUIG(D(2),D(1)) ELSE INP(TC,TL)=SQUIG(D(1),D(2)) ENDIF GOTO 5000 ELSE GOTO 4000 ENDIF C C 1060 CONTINUE C C * CONNECTION POINT (ANY DIRECTIONS) C CALL FIT IF (CNT.GT.0)THEN INP(TC,TL)=32 GOTO 6000 ELSE GOTO 4000 ENDIF C C 1070 CONTINUE C C # SOLID DOT CONNECTION POINT (ANY DIRECTIONS) C CALL FIT IF (CNT.GT.0)THEN INP(TC,TL)=176 GOTO 6000 ELSE GOTO 4000 ENDIF C C 1080 CONTINUE C C v DOWN ARROW (MAY BE ON DIAGONAL DOWN) C CALL FIT DO 1082 I=1,8 DIR(I,TC,TL)=.FALSE. 1082 CONTINUE IF (CNT.EQ.1)THEN INP(TC,TL)=DNARROW(D(1)) DIR(D(1),TC,TL)=.TRUE. GOTO 6000 ELSE IF (ANGLE.EQ.4)THEN INP(TC,TL)=DNARROW(D(1)) DIR(D(1),TC,TL)=.TRUE. DIR(D(2),TC,TL)=.TRUE. GOTO 6000 ELSE IF ((CNT.EQ.2).OR.(CNT.EQ.3))THEN J=0 DO 1084 I=1,CNT IF ((D(I).EQ.7).OR.(D(I).EQ.8) 1 .OR.(D(I).EQ.1))THEN J=J+1 K=D(I) ENDIF 1084 CONTINUE IF (J.EQ.1)THEN INP(TC,TL)=DNARROW(K) DIR(K,TC,TL)=.TRUE. J=IMOD(K+3,8)+1 L=0 DO 1086 I=1,CNT IF(D(I).EQ.J)THEN L=1 ENDIF 1086 CONTINUE CNT=1 D(1)=K IF (L.EQ.1)THEN CNT=2 D(2)=J DIR(J,TC,TL)=.TRUE. ENDIF GOTO 6000 ELSE GOTO 4000 ENDIF ELSE GOTO 4000 ENDIF C C 1090 CONTINUE C C < LEFT ARROW OR DIAGONAL (AND HORIZONTAL) INTERSECTION C CALL FIT IF (CNT.EQ.1)THEN IF ((D(1).EQ.2).OR.(D(1).EQ.6))THEN INP(TC,TL)=173 GOTO 5000 ELSE GOTO 4000 ENDIF ELSEIF (ANGLE.EQ.4)THEN INP(TC,TL)=173 GOTO 5000 ELSEIF (ANGLE.EQ.2)THEN INP(TC,TL)=32 GOTO 6000 ELSEIF (CNT.EQ.3)THEN IF((D(1).EQ.2).OR.(D(2).EQ.2) 1 .OR.(D(3).EQ.2))THEN GOTO 4000 ELSE INP(TC,TL)=32 GOTO 6000 ENDIF ELSE GOTO 4000 ENDIF C C 1100 CONTINUE C C ^ UP ARROW (MAY BE ON DIAGONAL UP) C CALL FIT DO 1102 I=1,8 DIR(I,TC,TL)=.FALSE. 1102 CONTINUE IF (CNT.EQ.1)THEN INP(TC,TL)=UPARROW(D(1)) DIR(D(1),TC,TL)=.TRUE. GOTO 6000 ELSE IF (ANGLE.EQ.4)THEN INP(TC,TL)=UPARROW(D(1)) DIR(D(1),TC,TL)=.TRUE. DIR(D(2),TC,TL)=.TRUE. GOTO 6000 ELSE IF ((CNT.EQ.2).OR.(CNT.EQ.3))THEN J=0 DO 1104 I=1,CNT IF ((D(I).EQ.3).OR.(D(I).EQ.4) 1 .OR.(D(I).EQ.5))THEN J=J+1 K=D(I) ENDIF 1104 CONTINUE IF (J.EQ.1)THEN INP(TC,TL)=UPARROW(K) DIR(K,TC,TL)=.TRUE. J=IMOD(K+3,8)+1 L=0 DO 1106 I=1,CNT IF(D(I).EQ.J)THEN L=1 ENDIF 1106 CONTINUE CNT=1 D(1)=K IF (L.EQ.1)THEN CNT=2 D(2)=J DIR(J,TC,TL)=.TRUE. ENDIF GOTO 6000 ELSE GOTO 4000 ENDIF ELSE GOTO 4000 ENDIF C C 1110 CONTINUE C C > RIGHT ARROW OR DIAGONAL (AND HORIZONTAL) INTERSECTION C CALL FIT IF (CNT.EQ.1)THEN IF ((D(1).EQ.2).OR.(D(1).EQ.6))THEN INP(TC,TL)=169 GOTO 5000 ELSE GOTO 4000 ENDIF ELSEIF (ANGLE.EQ.4)THEN INP(TC,TL)=169 GOTO 5000 ELSEIF (ANGLE.EQ.2)THEN INP(TC,TL)=32 GOTO 6000 ELSEIF (CNT.EQ.3)THEN IF((D(1).EQ.6).OR.(D(2).EQ.6) 1 .OR.(D(3).EQ.6))THEN GOTO 4000 ELSE INP(TC,TL)=32 GOTO 6000 ENDIF ELSE GOTO 4000 ENDIF C C 1120 CONTINUE C C % STRAIGHT LINE BREAK (ANY DIRECTION) C CALL FIT IF (ANGLE.EQ.4)THEN INP(TC,TL)=156+IMOD((D(1)+D(2))/2,4) GOTO 5000 ELSE GOTO 4000 ENDIF C C 1130 CONTINUE C C , UPPER LEFT CURVED CORNER (90 OR 135 DEGREES) C CALL FIT IF ((ANGLE.EQ.2).OR.(ANGLE.EQ.3))THEN IF (D(1).GT.D(2))THEN INP(TC,TL)=SQUIG(D(2),D(1)) ELSE INP(TC,TL)=SQUIG(D(1),D(2)) ENDIF GOTO 5000 ELSE GOTO 4000 ENDIF C C 1140 CONTINUE C C . UPPER RIGHT CURVED CORNER (90 OR 135 DEGREES) C CALL FIT IF ((ANGLE.EQ.2).OR.(ANGLE.EQ.3))THEN IF (D(1).GT.D(2))THEN INP(TC,TL)=SQUIG(D(2),D(1)) ELSE INP(TC,TL)=SQUIG(D(1),D(2)) ENDIF GOTO 5000 ELSE GOTO 4000 ENDIF C C 1150 CONTINUE C C ` LOWER LEFT CURVED CORNER (90 OR 135 DEGREES) C CALL FIT IF ((ANGLE.EQ.2).OR.(ANGLE.EQ.3))THEN IF (D(1).GT.D(2))THEN INP(TC,TL)=SQUIG(D(2),D(1)) ELSE INP(TC,TL)=SQUIG(D(1),D(2)) ENDIF GOTO 5000 ELSE GOTO 4000 ENDIF C C 1160 CONTINUE C C ' LOWER RIGHT CURVED CORNER (90 OR 135 DEGREES) C CALL FIT IF ((ANGLE.EQ.2).OR.(ANGLE.EQ.3))THEN IF (D(1).GT.D(2))THEN INP(TC,TL)=SQUIG(D(2),D(1)) ELSE INP(TC,TL)=SQUIG(D(1),D(2)) ENDIF GOTO 5000 ELSE GOTO 4000 ENDIF C C 1170 CONTINUE C C ( LEFT CURVED EDGE (CAN ALSO CONNECT TO HORIZONTAL) C CALL FIT IF (CNT.EQ.3)THEN INP(TC,TL)=177 GOTO 5000 ELSE IF (ANGLE.EQ.2)THEN INP(TC,TL)=129 GOTO 5000 ELSE GOTO 4000 ENDIF C C 1180 CONTINUE C C ) RIGHT CURVED EDGE (CAN ALSO CONNECT TO HORIZONTAL) C CALL FIT IF (CNT.EQ.3)THEN INP(TC,TL)=178 GOTO 5000 ELSE IF (ANGLE.EQ.2)THEN INP(TC,TL)=151 GOTO 5000 ELSE GOTO 4000 ENDIF C C 1190 CONTINUE C C + VERTICAL AND HORIZONTAL INTERSECTION C CALL FIT IF (CNT.GT.1)THEN INP(TC,TL)=32 GOTO 6000 ELSE GOTO 4000 ENDIF C C 1200 CONTINUE C C X DIAGONAL INTERSECTIONS C CALL FIT IF (CNT.GT.1)THEN INP(TC,TL)=32 GOTO 6000 ELSE GOTO 4000 ENDIF C C 1210 CONTINUE C C V LEFT PORTION OF SQUARE ROOT SYMBOL C CALL FIT IF (CNT.GT.0)THEN INP(TC,TL)=179 GOTO 5000 ELSE GOTO 4000 ENDIF C C 1220 CONTINUE C C @ OPEN CIRCLE CONNECTION (ANY DIRECTIONS) C CALL FIT IF (CNT.GT.0)THEN INP(TC,TL)=180 GOTO 6000 ELSE GOTO 4000 ENDIF C C ************************************************************** C 4000 CONTINUE C WAS NOT INTERPRETED AS A GRAPHIC CHARACTER C ZERO ALL DIR(I,TC,TL) VALUES, AND GR(TC,TL) C DO 4010 I=1,8 DIR(I,TC,TL)=.FALSE. 4010 CONTINUE GR(TC,TL)=0 C C *************************************************************** C 5000 CONTINUE C WAS INTERPRETED AS A VALID NORMAL OR GRAPHIC CHARACTER C STORE FIXED PATTERN IN OUTPUT BUFFER C DO 5010 I=1,12 OUT(I,TC)=CHARSET(INP(TC,TL))(I:I) 5010 CONTINUE GOTO 7000 C C 6000 CONTINUE C WAS INTERPRETED AS A VALID GRAPHIC CHARACTER C STORE FIXED PLUS VARIABLE PATTERN IN OUTPUT BUFFER C DO 6020 I=1,12 TEMP2=ICHAR(CHARSET(INP(TC,TL))(I:I)) DO 6010 J=1,CNT TEMP1=ICHAR(CHARSET(159+D(J))(I:I)) TEMP2=IOR(TEMP1,TEMP2) 6010 CONTINUE IF (INP(TC,TL).EQ.180)THEN TEMP1=ICHAR(CHARSET(181)(I:I)) TEMP2=IAND(TEMP1,TEMP2)+64 ENDIF C MAKE SURE OUTPUT IS PRINTING CHARACTER IF (TEMP2.GT.95)THEN TEMP2=TEMP2-64 ENDIF OUT(I,TC)=CHAR(TEMP2) 6020 CONTINUE C C ****************************************************************** C C GO BACK AND GET NEXT CHARACTER 7000 CONTINUE C C 8000 CONTINUE IF (.NOT.BFLAG)THEN C NO CONTROL CHARACTERS IN THIS LINE DO 8010 I=1,12 OUT(I,1)=' ' OUT(I,N(TL))=PLT WRITE(12,100)N(TL),(OUT(I,J),J=1,N(TL)) 8010 CONTINUE ENDIF BFLAG=.FALSE. C C IF (AFLAG)THEN C THERE ARE CONTROL CHARACTERS IN THE NEXT LINE C WRITE THEM OUT AS IS WRITE(12,100)(N(NL)+1),' ',(BUF(J),J=1,N(NL)) BFLAG=.TRUE. ENDIF C C C GOTO 10 9999 END C C *************************************************************** C SUBROUTINE FIT C C Matrix of directions to search for connections 7 | 8 | 1 LOGICAL*1 DIR(8,134,3) ! --+---+-- C (8 directions by 134 chars by 3 lines) 6 | | 2 C The directions are for the 8 adjacent --+---+-- C character cells as shown 5 | 4 | 3 INTEGER*2 PC,TC,NC,PL,TL,NL,CNT,ANGLE INTEGER*2 D(8) ! Array of direction indices where connections found COMMON /LOGICAL/DIR COMMON /NUMERIC/PC,TC,NC,PL,TL,NL,D,CNT,ANGLE C CNT=0 ! Initialize number of connections found IF (DIR(3,PC,PL).AND.DIR(7,TC,TL))THEN CNT=CNT+1 D(CNT)=7 ! upper-left connection ENDIF IF (DIR(4,TC,PL).AND.DIR(8,TC,TL))THEN CNT=CNT+1 D(CNT)=8 ! straigt up connection ENDIF IF (DIR(5,NC,PL).AND.DIR(1,TC,TL))THEN CNT=CNT+1 D(CNT)=1 ! upper-right connection ENDIF IF (DIR(2,PC,TL).AND.DIR(6,TC,TL))THEN CNT=CNT+1 D(CNT)=6 ! left connection ENDIF IF (DIR(6,NC,TL).AND.DIR(2,TC,TL))THEN CNT=CNT+1 D(CNT)=2 ! right connection ENDIF IF (DIR(1,PC,NL).AND.DIR(5,TC,TL))THEN CNT=CNT+1 D(CNT)=5 ! lower-left connection ENDIF IF (DIR(8,TC,NL).AND.DIR(4,TC,TL))THEN CNT=CNT+1 D(CNT)=4 ! straight-down connection ENDIF IF (DIR(7,NC,NL).AND.DIR(3,TC,TL))THEN CNT=CNT+1 D(CNT)=3 ! lower-right connection ENDIF ANGLE=0 IF (CNT.EQ.2)THEN ANGLE=IIABS(D(1)-D(2)) ! difference between direction indices IF (ANGLE.GT.4)THEN ANGLE=8-ANGLE ENDIF ENDIF RETURN END -h- tran.run Thu May 09 16:16:23 1985 DRA2:[FE]TRAN.RUN;1 $! FORMAT FLOWCHARTER DRAWING FILES $! $ SET DEF 'P1' $! $ ASSIGN 'P2' INPUT$TXT: $ ASSIGN 'P3' OUTPUT$PLT: $ RUN FCEDT:TRAN $! $ IF P4 .GT. 0 THEN - PRINT/NOFEED/DELETE/QUEUE=FCEDT$PRINT/COPIES='P4' 'P3' $! $EXIT