File: TKPLOT.RA of Tape: Various/Decus/decus-4
(Source file text)
/ TKPLOT - FOR PLOTTING ON A TEKTRONIX 4010 SERIES / GRAPHIC TERMINAL. / EUGENE J. M. LYNCH / XEROX CORPORATION / XEROX SQUARE W129 / ROCHESTER, N. Y. 14644 / VERSION A MARCH, 1978 / THIS MODULE MAY BE SUBSTITUTED FOR DEC'S "XYPLOT" / TO ALLOW GRAPHIC OUTPUT TO A TEKTRONIX 4010, / 4012, 4013, 4014, 4015 OR 4051 TERMINAL, RATHER / THAN TO AN INCREMENTAL (CALCOMP) PLOTTER. ALL OF / THE OTHER FORTRAN IV PLOTTER ROUTINES ARE USED AS / SUPPLIED BY DEC. / PLOTTER ROUTINE USAGE REMAINS AS DESCRIBED IN THE / OS/8 HANDBOOK "FORTRAN IV PLOTTER ROUTINES" WITH / THE FOLLOWING EXCEPTIONS: / 1. ARGUMENTS PASSED TO "PLOTS" ARE IGNORED, / AND MAY BE OMITTED. THE INCREMENT IS ALWAYS / .01 LOGICAL INCHES (ONE RASTER POINT). THE / DISPLAY SIZE IS 10.23 X 10.23 LOGICAL INCHES, / BUT ONLY 8 INCHES ARE VISIBLE IN THE VERTICAL / DIRECTION. IF AN ATTEMPT IS MADE TO DRAW TO / A POINT OUTSIDE OF THE SCREEN BORDERS, ANY / OFFENDING COORDINATE IS SET TO THE BORDER VALUE. / 2. THE ALLOWABLE VALUES FOR THE THIRD (PEN CONTROL) / ARGUMENT TO "XYPLOT" ARE NOT RESTRICTED TO THE / SET (-3,-2,2,3); ANY VALUE MAY BE USED. IF, / AFTER TRUNCATION TO INTEGER, IT IS EVEN, THE / PEN WILL BE DOWN DURING TO MOVE; IF ODD, THE / PEN WILL BE UP. IF IT IS NEGATIVE, THE POINT / MOVED TO BECOMES THE NEW ORIGIN. / 3. IF MORE THAN ONE "PLOT" (SCREEN DISPLAY) IS TO / BE MADE BY A PROGRAM, THEN UPON COMPLETION OF / EACH DISPLAY (EXCEPT OPTIONALLY THE LAST), ONE / OF THE SUBROUTINES "PAGE" OR "SPAGE" MUST BE / CALLED. WHEN "PAGE" IS CALLED, I.E. / CALL PAGE / EXECUTION OF THE PROGRAM IS SUSPENDED SO THAT / THE SCREEN DISPLAY MAY BE ADMIRED, AND IT MAY / ALSO BE ANNOTATED. THE BELL SIGNAL IS SOUNDED, / THE CURRENT POSITION (CP) IS SET TO THE LOWER / LEFT CORNER OF THE SCREEN, AND THE GRAPHIC / INPUT CURSORS ARE LIT. THE CURSOR INTERSECTION / (CI) MAY BE MOVED TO ANY POINT ON THE SCREEN / WITH THE THUMBWHEELS AT THE RIGHT OF THE / KEYBOARD, AND ONE OF THE FOLLOWING COMMAND / CHARACTERS IS STRUCK: / M RESET CP TO CI, RELIGHT CURSORS, AND AWAIT / ANOTHER COMMAND / D DRAW A LINE FROM CP TO CI, RESET CP TO CI, / RELIGHT CURSORS AND AWAIT ANOTHER COMMAND / A DRAWW A LINE FROM CP TO CI WITH ARROWHEAD / AT CI END, RESET CP TO CI, RELIGHT CURSORS / AND AWAIT ANOTHER COMMAND. / P DRAW A POINT (DOT) AT CI, RESET CP TO CI, / RELIGHT CURSORS AND AWAIT ANOTHER COMMAND. / L ENTER HORIZONTAL LETTERING MODE. THE / CURSORS ARE EXTINGUISHED, AND AS FURTHER / CHARACTERS ARE STRUCK, THEY APPEAR ON / THE SCREEN. THE LEFT EDGE OF THE FIRST / CHARACTER IS AT THE VERTICAL CURSOR, THE / LEFT EDGE OF EACH SUCCEEDING CHARACTER / IS 0.14 LOGICAL INCHES FROM THE LEFT EDGE / OF THE PRECEEDING ONE. CHARACTERS ARE / 0.14 LOGICAL INCHES HIGH, CENTERED ON THE / HORIZONTAL CURSOR. THIS CONTINUES UNTIL / ANY CONTROL CHARACTER (E.G., CARRIAGE / RETURN) IS ENTERED; THEN THE CURSORS / ARE RELIT, THE CP IS RESET TO THE LOWER / LEFT CORNER OF THE SCREEN, AND ANOTHER / COMMAND IS AWAITED. / V ENTER VERTICAL LETTERING MODE. THIS IS / SIMILAR TO HORIZONTAL MODE, EXCEPT THAT / CHARACTERS ARE PRINTED UNDER EACH OTHER / AT A SPACING OF 0.21 LOGICAL INCHES. / Q QUIT ANNOTATION. THE SCREEN IS ERASED, / THE ORIGIN IS RESET TO THE LOWER LEFT / CORNER, AND PROGRAM EXECUTION IS RESUMED. / IF A PLOT FILE IS BEING CREATED, THE / CURRENT DISPLAY IS DELETED. / S SAVE THE CURRENT DISPLAY IF A PLOT FILE / IS BEING CREATED, SEND A "MAKE COPY" / SIGNAL TO THE HARD COPY UNIT IF PRESENT, / OTHERWISE SAME AS "Q". / C CONTINUE EXECUTION. THE SCREEN IS NOT / ERASED, THE ORIGIN IS RETAINED AT ITS / PRESENT LOCATION, AND, IF A PLOT FILE IS / BEING CREATED, THE CURRENT DISPLAY IS / RETAINED. ITS ULTIMATE FATE DEPENDS ON / WHETHER AN "S" OR A "Q" TERMINATES SOME / SUBSEQUENT CALL PAGE. / IF A CHARACTER OTHER THAN ONE OF THOSE / LISTED ABOVE IS ENTERED AS A COMMAND, IT / WILL BE IGNORED. / THE SUBROUTINE "SPAGE" MAY BE USED INSTEAD OF THE / SUBROUTINE "PAGE" IF THE PROGRAM IS BEING EXECUTED / NOT TO OBSERVE THE SCREEN DISPLAYS, BUT RATHER / ONLY TO MAKE COPIES ON THE HARD COPY UNIT, OR TO / CREATE A PLOT FILE. PROGRAM EXECUTION IS NOT / SUSPENDED, AND NO ANNOTATION MAY BE DONE, BUT A / "MAKE COPY" SIGNAL IS SENT TO THE HARD COPY UNIT / IF ONE IS PRESENT, AND A PAGE END MARK IS PLACED / IN THE PLOT FILE IF ONE IS BEING CREATED. WHEN / "SPAGE" IS CALLED, IT BEHAVES AS IF AN "S" HAD / BEEN TYPED IMMEDIATELY AFTER A CALL TO "PAGE". / SCREEN DISPLAYS MAY BE SAVED SELECTIVELY ("S" OR / "Q" TERMINATION OF SUBROUTINE "PAGE") IN A FILE / ASSIGNED TO I/O UNIT 9. THE SAVED DISPLAYS MAY / THEN BE REPRODUCED ON AN INCREMENTAL PLOTTER / PERIPHERAL TO THE HOST PDP8 WITH THE PROGRAM / "CALCOM.LD". TO CREATE A PLOT FILE, IT IS / ONLY NECESSARY TO ASSIGN I/O UNIT 9 TO / A FILE, E.G.: / .R FRTS / *MYPROG.LD / *DSK:PLOTFL.DA</9$ / NOTE THAT THE FILE IS SPECIFIED AS A NON- / EXISTING ("OUTPUT") FILE; IF AN EXISTING FILE / IS SPECIFIED,(AS EITHER AN EXISTING OR A NON- / EXISTING FILE), IT IS OVER-WRITTEN. A PROGRAM / WHICH INCLUDES THIS MODULE SHOULD NOT USE I/O / UNIT 9 FOR ANY OTHER PURPOSE. IF I/O UNIT 9 / IS NOT ASSIGNED TO A FILE, THE FILE SAVING / MECHANISM IS DISABLED, AND NO PLOT FILE WILL / BE CREATED. SECT XYPLOT /PLOTTING SUBROUTINE ENTRY PLOTS /OTHER ENTRY POINTS ENTRY PLEXIT ENTRY FACTOR ENTRY WHERE ENTRY PAGE ENTRY SPAGE EXTERN SQRT /EXTERNAL ROUTINE REFERENCES EXTERN #WUO EXTERN #RSVO EXTERN #RENDO DEVCOD=01 /ASSEMBLY PARAMETER FOR TEKTRONIX /TERMINAL CONTROLLER DEVICE CODE. /DEVCOD AND DEVCOD+1 USED FOR INPUT /& OUTPUT RESPECTIVELY. MAY NOT BE /03 (CONSOLE DEVICE) JA #ST /JUMP TO START EXECUTION #XR, ORG .+10 /INDEX REGISTERS #XR4=#XR+4 TEXT +XYPLOT+ /NAME FOR TRACEBACK #RET, SETX #XR /FORMAL - SEE SUPPORT MANUAL SETB #BASE JA .+3 #BASE, ORG .+6 /BASE PAGE XX, ORG .+3 /ARG ADDRESSES YY, ORG .+3 PENX, ORG .+3 FACT, ORG .+3 ORG #BASE+30 FNOP JA #RET FNOP #GOBAK, 0;0 /RETURN ADDRESS #ARGS, ORG .+3 INX, F 0.01 /FIXED INCREMENT VALUE FACTR, ORG .+0003 /ARG VALUES XXX, F 0.0 YYY, F 0.0 ZZZ, F 0.0 BIASX, F 0.0 /ORIGIN COORDINATES BIASY, F 0.0 #LIT, 0001 /LITERALS 2000 /1.0 0000 0002 3000 /3.0 0000 0003 3000 /6.0 0000 0004 2200 /9.0 0000 #LITP5, F 0.5 #LIT4, F 4.0 #LIT12, F 12.0 #LIT31, F 31.0 P1023, F 1023.0 BUFFER, ORG .+377 /PLOT FILE BUFFER #RTN, BASE #BASE JA #GOBAK /RETURN TO CALLER #ST, JSA SETUP /BEGIN EXECUTION LDX 0,4 /SET UP ARGS FLDA% #BASE,4+ FSTA XX FLDA% #BASE,4+ FSTA YY FLDA% #BASE,4+ FSTA PENX STARTF FLDA% XX /GET X VALUE FSTA XXX /SAVE IT (FOR WHERE) FADD BIASX /ADD ORIGIN FMUL FACTR /FACTOR FDIV INX /CONVERT TO RASTER PTS JGE XGE /OK IF NOT < 0 FCLA /CLIP TO ZERO XGE, FSUB P1023 /TOO BIG? JLE XLE /JUMP IF OK FCLA /CLIP TO 1023 XLE, FADD P1023 /RESTORE VALUE ATX 5 /SAVE 10 BIT X VALUE FLDA% YY /NOW REPEAT FOR Y FSTA YYY FADD BIASY FMUL FACTR FDIV INX JGE YGE FCLA YGE, FSUB P1023 JLE YLE FCLA YLE, FADD P1023 ATX 6 /SAVE 10 BIT Y VALUE FLDA% PENX /GET PEN CONTROL FSTA ZZZ /SAVE IT ATX 7 /STORE IT FOR OUTPUT JGE #L002 /JUMP IF PEN CONTROL IS + FNEG /ABS VALUE ATX 7 /STORE AGAIN FLDA XXX /RESET ORIGIN FADD BIASX FSTA BIASX FLDA YYY FADD BIASY FSTA BIASY #L002, STARTD /FORMAT FOR OUTPUT LDX -7,4 /SHIFT COUNT XTA 6 /GET Y ALN 4 /5 BITS IN EACH OF FSTA YCORD /TWO 12 BIT WORDS XTA 5 /NOW X ALN 4 FSTA XCORD /STORE IN 8 MODE XTA 7 /GET PEN CONTROL FSTA PCORD /STORE IT TRAP4 COPLOT /OUTPUT TO TEKTRONIX STARTF JXN STORIT,3 /JUMP IF SAVING JA #RTN /RETURN IF NOT STORIT, FLDA #XR+5 /STORE 3 12 BIT #L003, FSTA BUFFER,2+ /WORDS IN BUFFER XTA 7 /CHECK FOR FRAME END JGE #L004 /JUMP IF NOT FADD #LIT /CHECK FOR DELETE JEQ #G000 /JUMP IF NOT LDX -1,7 /FOR PLEXIT JA #G002 /GO RESET POINTERS #L004, JXN #RTN,1+ /RETURN UNLESS BUFFER FULL #G000, TRAP3 #WUO /USE UNFORMATTED WRITE JA #LIT+11 /TO WRITE BUFFER TO LDX -125,1 /ONE BLOCK OF FILE LDX -1,2 #G001, FLDA BUFFER,2+ TRAP3 #RSVO JXN #G001,1+ TRAP3 #RENDO #G002, LDX -125,1 /RESET POINTERS LDX -1,2 JA #RTN /RETURN SETUP, JA . /SET UP RETURN & ARG POINTER STARTD /FOR ALL ENTRIES 0210 /GET & STORE RETURN ADDR FSTA #GOBAK,0 0200 /GET ARG POINTER SETX #XR /SET OUR INDEX REGS SETB #BASE /& BASE PAGE FSTA #BASE /SAVE ARG POINTER FSTA #ARGS JA SETUP /RETURN (STILL D MODE) PLOTS, JSA SETUP /INITIALIZE ROUTINE STARTF /NO ARGS LDX -125,1 /SET UP BUFFER COUNTER LDX -1,2 /SET UP BUFFER POINTER FLDA #LIT+0000 FSTA FACTR /FACTOR=1.0 FCLA FSTA BIASX /ORIGIN=0,0 FSTA BIASY /INITIALIZE BIAS TRAP4 PLINIT /ERASE SCREEN, ETC. SETX 04361 /GET UNIT 9 START BLOCK XTA 0 /FROM DSRN TABLE SETX #XR LDX 0,3 /X3=0 MEANS NO SAVE JEQ #RTN /RETURN IF NO SAVE LDX -1,3 /IF SAVING, X3=RELATIVE /BLOCK OF START OF /CURRENT DISPLAY, EXCEPT /-1 FOR REL BLOCK 0 JA #RTN /ALL DONE - RETURN PLEXIT, JSA SETUP /FINALIZE ROUTINE STARTF /NO ARGS JXN ANNOTE,7+ /CALL PAGE, IF /THAT WAS NOT LAST /PLOT CALL JA #RTN /RETURN FACTOR, JSA SETUP /SET FACTOR ROUTINE LDX 1,4 FLDA% #BASE,4 /GET ARG ADDRESS FSTA FACT STARTF FLDA% FACT /GET ARG VALUE FSTA FACTR /SAVE IT JA #RTN /RETURN WHERE, JSA SETUP /RETURN COORDS ROUTINE LDX 0,4 FLDA% #BASE,4+ /GET 3 ARG ADDRESSES FSTA XX FLDA% #BASE,4+ FSTA YY FLDA% #BASE,4+ FSTA PENX STARTF FLDA XXX /STORE PRESENT X,Y & FSTA% XX /PEN VALUES IN THEM FLDA YYY FSTA% YY FLDA ZZZ FSTA% PENX JA #RTN /RETURN SPAGE, JSA SETUP /NO HALT; SAVE & ERASE STARTF /NO ARGS FLDA #GOBAK-1 /SAVE CALLERS RETURN FSTA PENX JA #505 /DO AS IF "S" PAGE, JSA SETUP /HALT & ANNOTATE ROUTINE STARTF /NO ARGS ANNOTE, TRAP4 BELL /SOUND THE BELL FLDA #GOBAK-1 /SAVE CALLERS RETURN FSTA PENX REENT1, LDX 0,5 /SET CURRENT POSITION LDX 0,6 /TO 0,0 REENT, XTA 5 /SAVE CURRENT POSITION FSTA XXX XTA 6 FSTA YYY #102, TRAP4 DCURSR /GET TERMINAL INPUT LDX 3,7 /SET FOR MOVE FLDA RETN9-1 /SET RETURN FROM PLOT JA GOPLT1 /MOVE BEAM TO CP #101, FLDA CURSXY /PUT CHAR IN XR4, X,Y FSTA #XR4 /IN XR5,6 (CI) /CHAR IS -(ASCII-64) JXN NOTA,4+ /JUMP UNLESS CHAR=A / INPUT CHAR WAS "A". DRAW ARROW FROM LAST X,Y / TO CURSOR INTERSECTION. ARROWHEAD IS AN / ISOCELES TRIANGLE, BASE=6, ALTITUDE=12 TEKPOINTS / AT PROPER ANGLE. IF SHAFT LENGTH IS LESS THAN / 12 TEKPOINTS, HEAD IS NOT DRAWN. XTA 5 /GET NEW X FSUB XXX /SUBTRACT OLD FSTA XX /STORE DELTA X FMUL XX /SQUARE IT FSTA XXX /SAVE SQUARE XTA 6 /NOW Y FSUB YYY FSTA YY FMUL YY FADDM XXX /XXX=X*X+Y*Y JSR SQRT /GET LENGTH JA .+4 JA XXX FSTA XXX /SAVE LENGTH FSUB #LIT12 /.LT.12? JLE #201 /YES - JUMP FLDA #LIT12 /GET ALTITUDE FMUL XX /CALC X COMPONENT FDIV XXX FSTA XX /STORE IT FLDA #LIT12 /NOW CALC Y COMP. FMUL YY FDIV XXX FSTA YY /STORE IT XTA 5 /GET NEW X FSUB XX /LESS X COMP FADD #LITP5 /ROUND FSTA XXX /STORE IT ATX 5 /X COORD FOR PLOT XTA 6 /SAME FOR Y FSUB YY FADD #LITP5 FSTA YYY ATX 6 /Y COORD FOR PLOT LDX 2,7 /SET FOR DRAW FLDA RETN1-1 /SET RETURN FROM PLOT JA GOPLT1 /GO DRAW SHAFT #103, FLDA CURSXY /PUT NEW X,Y IN FSTA #XR4 /PLOT COORDS LDX 3,7 /SET FOR MOVE FLDA RETN2-1 /SET RETURN FROM PLOT JA GOPLT1 /MOVE TO TIP OF HEAD #104, FLDA YY /CALC COORDS OF END OF FDIV #LIT4 /LINE 3 LONG, OTHER END FSTA YY /AT (XXX,YYY) SHAFT, FNEG /SLOPE = -DX/DY (ORTHOG FADD XXX /TO SHAFT) ATX 5 /THIS IS ONE END OF FLDA XX /TRIANGLE BASE FDIV #LIT4 FSTA XX FADD YYY ATX 6 LDX 2,7 /SET FOR DRAW FLDA RETN3-1 /SET RETURN FROM PLOT JA GOPLT1 /DRAW FROM TIP TO BASE #105, FLDA XXX /NOW CALC COORDS OF FADD YY /OTHER END OF BASE ATX 5 FLDA YYY FSUB XX ATX 6 FLDA RETN10-1 /SET RETURN FROM PLOT JA GOPLT1 /DRAW BASE #107, FLDA CURSXY /GET TIP COORDS FSTA #XR4 JA GOPLOT /DRAW TO TIP & LOOP NOTA, ADDX 1,4 /IGNORE "B" JXN NOTC,4+ /JUMP UNLESS "C" FCLA /TERMINATE, NO ERASE, JA ANDONC /RETAIN ORIGIN NOTC, JXN NOTD,4+ /JUMP UNLESS "D" #201, LDX 2,7 /SET FOR DRAW JA GOPLOT /DRAW & LOOP NOTD, ADDX 7,4 /IGNORE "E" TO "K" JXN NOTL,4+ /JUMP UNLESS "L" / INPUT CHARACTER WAS "L". ENTER HORIZONTAL / LETTERING MODE. CHARACTERS ARE RECEIVED / FROM, AND ECHOED TO THE SCREEN BY THE / 8-MODE ROUTINE "EKOCHR", WHICH ALSO REMOVES / THE PARITY BIT, AND NEGATES THE 7 BIT / ASCII. THIS ROUTINE ADDS 31 (DEC) AND / IF THE RESULT IS NON-NEGATIVE, TERMINATES / (CONTROL CHARACTER). A NEGATIVE VALUE / IS STORED IN AN INDEX REGISTER, AND WHEN / THREE HAVE ACCUMULATED, THEY ARE STORED / IN THE BUFFER AS A "FLOATING POINT" WORD. / THUS, IF THE FIRST 12 BIT WORD OF A / FLOATING POINT VALUE IS NON-NEGATIVE, / THE THREE WORDS ARE THE GRAPHIC / COORDINATES X,Y,PEN; IF IT IS NEGATIVE, / THE THREE WORDS ARE ONE OR MORE CHARACTERS / TERMINATED BY A ZERO. THE CHARACTERS / GENERATED BY THE TERMINAL ARE 0.14 / LOGICAL INCHES HIGH, AND ARE SPACED BY / 0.14 LOGICAL INCHES, SO THEY ARE EASY TO / REPRODUCE ON A CALCOMP WITH THE "SYMBOL" / ROUTINE. ADDX -7,6 /OFFSET Y COORD FLDA RETN4-1 /SET RETURN FROM PLOT JA GOPLT1 /GO MOVE BEAM #106, FLDA RETN5-1 /SET RETURN FROM STORE FSTA #GOBAK-1 FLDA #XR+1 /PUT XR1,2,3 IN 8 FSTA EKOREG+1 /MODE LOCATION SETX EKOREG /USE INDEX REGS THERE NXT3, FCLA /CLEAR STORAGE REGS FSTA EKOREG+5 LDX -3,4 /CHARACTER COUNTER NXTCHA, TRAP4 EKOCHR /GET & ECHO CHAR XTA 0 /CHECK FOR CONTROL FADD #LIT31 JGE LDONE /JUMP IF CONT CHAR JXN CH2,4+ /JUMP UNLESS 3RD CHAR ATX 7 /STORE -ASCII+31 FLDA EKOREG+5 /GET 3 CHARS LDX 0,7 /CLEAR PEN CONTROL JXN #L003,3 /JUMP IF SAVING RETN5, JA NXT3 /DO IT AGAIN CH2, JXN CH1,4+ /JUMP UNLESS 2ND CHAR ATX 6 /STORE CHAR LDX -1,4 /SET FOR 3RD CHAR JA NXTCHA /DO IT AGAIN CH1, ATX 5 /STORE -ASCII+31 LDX -2,4 /SET FOR 2ND CHAR JA NXTCHA /DO IT AGAIN LDONE, JXN #111,3 /JUMP IF SAVING RETN8, JA #110 /GO FINISH UP #111, FLDA RETN8-1 /SET RETURN FROM STORE FSTA #GOBAK-1 FLDA EKOREG+5 /GET STORED CHARS ADDX 3,4 /ARE THERE ANY? JXN #L003,4 /GO STORE IF ANY #110, FLDA EKOREG+1 /GET REGS 1,2,3 FSTA #XR+1 /PUT IN REGULAR XR'S SETX #XR /USE REGULAR XR'S JA REENT1 /GO DO IT AGAIN NOTL, JXN NOTM,4+ /JUMP UNLESS "M" RETN, JA REENT /LOOP; DO MOVE NEXT TIME NOTM, ADDX 2,4 /IGNORE "N","O" JXN NOTP,4+ /JUMP UNLESS "P" FLDA RETN6-1 /SET RETURN FROM PLOT JA GOPLT1 /TO DRAW; GO MOVE NOTP, JXN NOTQ,4+ /JUMP UNLESS "Q" JXN #500,3 /JUMP IF SAVING LDX -1,7 /SET ERASE FLAG JA ANDONE /GO FINISH UP #500, XTA 3 /GET RELATIVE BLK NO. JXN #501,3+ /IF XR3=-1, REL BLK=0 FCLA #501, ADDX -1,3 /RESTORE VALUE IN XR3 SETX 04362 /SET DSRN TABLE ATX 0 /SET OLD REL BLK SETX #XR LDX -3,7 /SET DELETE & ERASE FLAG JA ANDONE /GO FINISH UP NOTQ, ADDX 1,4 /IGNORE "R" JXN NOTS,4+ /JUMP UNLESS "S" #505, TRAP4 HDCOPY /SEND COPY SIGNAL LDX -1,7 /SET ERASE FLAG JXN #510,3 /JUMP IF SAVING JA ANDONE /GO FINISH UP #510, SETX 04362 /SET DSRN TABLE XTA 0 /GET NEW REL BLK NO SETX #XR ATX 3 /STORE IN XR3 ADDX 1,3 /AND ADD ONE ANDONE, FCLA FSTA BIASX /RESET ORIGIN TO 0,0 FSTA BIASY ANDONC, FSTA #XR4 /RESET COORDS TO 0,0 FSTA XXX FSTA YYY FLDA PENX /GET CALLERS RETURN JA GOPLT1 /GO MOVE TO 0,0 NOTS, ADDX 3,4 /IGNORE OTHER THAN "V" JXN #102,4 /LOOP UNLESS "V" / INPUT CHARACTER WAS "V". ENTER VERTICAL / LETTERING MODE. SIMILAR TO HORIZONTAL / MODE. ONLY ONE CHARACTER IS STORED IN / EACH FLOATING POINT VALUE, BECAUSE GRAPHIC / MOVES INTERVENE BETWEEN CHARACTERS. FCLA FSTA EKOREG+5 /CLEAR STORAGE REGS ADDX -7,6 /OFFSET Y COORD #400, FLDA RETN7-1 /SET RETURN FROM PLOT JA GOPLT1 /GO MOVE BEAM #401, TRAP4 EKOCHR /GET & ECHO CHAR SETX EKOREG /SET TO 8 MODE LOC XTA 0 /GET -ASCII FADD #LIT31 /ADD 31(DECIMAL) ATX 5 /STORE -(ASCII-31) SETX #XR /RESTORE XR'S JGE REENT1 /LOOP IF CONT CHAR JXN #402,3 /JUMP IF SAVING RETN11, JA #404 /JUMP TO NEXT #402, FLDA RETN11-1 /SET RETURN FROM STORE FSTA #GOBAK-1 FLDA EKOREG+5 /GET CHAR JA #L003 /GO PUT IN FILE #404, ADDX -25,6 /LINE FEED 21 POINTS XTA 6 /BELOW BOTTOM? JGE #400 /NO - GET NEXT CHAR ADDX 1411,6 /WRAP AROUND; KEEP JA #400 /REGISTRATION; THEN NEXT GOPLOT, FLDA RETN-1 /SUB TO BRANCH TO GOPLT1, FSTA #GOBAK-1 /PLOT WITH ALTERNATE JA #L002 /RETURNS RETN1, JA #103 /ALTERNATE RETURN ADDRESSES RETN2, JA #104 RETN3, JA #105 RETN4, JA #106 RETN6, JA #201 RETN7, JA #401 RETN9, JA #101 RETN10, JA #107 / THE FOLLOWING 8-MODE CODE IS THE INTERFACE / FOR I/O DIRECTLY TO THE TERMINAL. TWO / PAGES ARE REQUIRED, WITH INTER-PAGE / COMMUNICATION, THEREFORE "FIELD 1" IS / USED TO AVOID CROSS FIELD LINKAGES. KCFM=DEVCOD*10+6000 /TERMINAL IOT'S KSFM=DEVCOD*10+6001 KCCM=DEVCOD*10+6002 KRSM=DEVCOD*10+6004 KIEM=DEVCOD*10+6005 KRBM=DEVCOD*10+6006 TSFM=DEVCOD*10+6011 TLSM=DEVCOD*10+6016 FIELD1 #CPLOT / THE ROUTINE "COPLOT" FORMATS AND OUTPUTS / CHARACTERS FOR GRAPHIC MOVES AND DRAWS. / SEE THE TEKTRONIX USER'S MANUAL FOR / CHARACTER ENCODING, AND THE CONDITIONS / UNDER WHICH CERTAIN CHARACTERS MAY BE / OMITTED. COPLOT, 0 DEL1MS, CLL CLA CMA RAL /NL-2 TAD FPPIND /SET DELAY INDICATOR DCA ONEBYT /IF USING FPP ISZ PCORD /-1 MEANS ERASE JMP NOERAS ERASE, TAD K233 /SEND "ESC" JMS TOUTPT TAD K214 /SEND "FF" JMS TOUTPT TAD K7700 /WAIT A SECOND JMS DELAY DCA XCORD /MOVE BEAM TO 0,0 DCA XCORDL DCA YCORD DCA YCORDL JMP MOVE NOERAS, TAD XCORDL /RALF CODE STORES THE CLL RTL /COORDS IN THIS ROUTINE RTL /IT PUTS THE 5 LOW RTL /ORDER BITS OF X & Y DCA XCORDL /IN THE HIGH ORDER END TAD YCORDL /OF THEIR WORDS, SO CLL RTL /WE MUST SHIFT THEM RTL /HIGH ORDER BITS ARE OK RTL DCA YCORDL CLL CLA IAC /NL1 AND PCORDL /PEN CONTROL ODD? SNA CLA JMP DRAW /EVEN FOR PEN DOWN MOVE, TAD KGS /SEND "GS" FOR JMS TOUTPT /PEN UP ISZ ONEBYT /COUNT THE BYTE KGS, 235 /PROTECT ISZ DRAW, TAD OLYH /IS NEW HI Y SAME CLL CIA /AS LAST ONE? TAD YCORD SNA JMP CKLOY /YES-DONT SEND TAD OLYH /RESTORE NEW HI Y DCA OLYH /REMEMBER IT TAD OLYH /AND SEND IT TAD KHIORD /CONTROL BITS JMS TOUTPT ISZ ONEBYT /COUNT THE BYTE KHIORD, 240 /PROTECT ISZ CKLOY, TAD OLYL /IS LO Y SAME DEL1P6, CIA CLL /AS LAST? TAD YCORDL SZA CLA JMP SNDLOY /NO TAD OLXH /YES - NOW CHECK CLL CIA /HI X TAD XCORD SNA CLA /SKIP IF DIFFERENT JMP SNDLOX /DONT SEND EITHER SNDLOY, TAD YCORDL /GET 5 LO Y BITS DCA OLYL /REMEMBER THEM TAD OLYL /GET THEM BACK TAD KLOY /ADD CONTROL BITS JMS TOUTPT /SEND IT ISZ ONEBYT /COUNT THE BYTE KLOY, 340 /PROTECT ISZ TAD OLXH /IS HI X SAME CLL CIA /AS LAST? TAD XCORD SNA CLA /SKIP IF NOT JMP SNDLOX /DONT SEND IT TAD XCORD /GET 5 HI X BITS DCA OLXH /REMEMBER THEM TAD OLXH /GET THEM BACK TAD KHIORD /ADD CONTROL BITS JMS TOUTPT /SEND IT JMP SENT3 /NO DELAY NECESSARY / TERMINAL TAKES 2.6 MSEC TO DRAW A VECTOR. / IF SENDING ONE OR TWO CHARS AT 9600 BAUD, / WE NEED A DELAY TO ALLOW LAST VECTOR / TO COMPLETE. NOT NEEDED UNLESS USING FPP / BECAUSE SIMULATOR IS SO SLOW. SNDLOX, TAD ONEBYT /NEED DELAY? K7700, SMA CLA JMP SENT3 /NO TAD DEL1P6 /GET 1.6 MS ISZ ONEBYT /SKIP IF ONE SENT TAD DEL1MS /ADD 1 MS DCA KOUNT CLL CLA CMA /NL-1 JMS DELAY /GO WAIT SENT3, TAD XCORDL /GET 5 LO X BITS TAD KLOX /ADD CONTROL BITS JMS TOUTPT /SEND IT CDF CIF 0 /RETURN P5600, JMP% COPLOT KLOX, 300 /CONSTANTS K207, 207 K214, 214 K233, 233 K2301, TOUTPT, 2301 /STANDARD TTY OUTPUT TSFM /ROUTINE FOR TERMINAL JMP .-1 TLSM CLA CLL JMP% TOUTPT PCORD, 0 PCORDL, DELAY, 0 /DELAY FOR 16 MSEC FOR ISZ KOUNT /EACH NEGATIVE UNIT IN AC JMP .-1 /ON ENTRY, OR FOR 3.8 USEC IAC /FOR EACH NEG UNIT IN SZA /KOUNT IF AC=-1 JMP DELAY+1 /25% LONGER IF 8A JMP% DELAY / INITIALIZE, CALLED BY PLOTS. DISABLE / INTERRUPTS FROM TERMINAL, SET TERMINAL / OUTPUT FLAG, AND IF FPP IS BEING USED / SET FPPIND TO 0 TO ENABLE DELAY IF / ONE OR TWO BYTES SENT, OTHERWISE TO / TWO TO DISABLE DELAY. CODE IS / OVERWRTTEN BY SMALL VALUES, WHICH / WILL BE NOP'S IF EXECUTED, SO / CALLING PLOTS MORE THAN ONCE WILL NOT / BE A DISASTER. KOUNT, PLINIT, 0 CLA CLL TAD PLINIT /TRANSFER RETURN DCA COPLOT OLYH, KIEM /DISABLE INTERRUPTS OLYL, TLSM /SET PRINTER FLAG OLXH, CDF 0 /LEAVE DF 0 - NO XCORD, TAD% P5600 /MORE INDIRECTS XCORDL, TAD K2301 /USING FPP? YCORD, SNA CLA /YES - SKIP YCORDL, CLL CLA IAC RAL /NL2 FPPIND, DCA FPPIND JMP ERASE ONEBYT, BELL, 0 /SEND BELL SIGNAL TAD K207 JMS TOUTPT CDF CIF 0 JMP% BELL ORG COPLOT+200 / DCURSR ACTIVATES THE GRAPHIC INPUT CURSOR AT / THE TERMINAL, AND AWAITS INPUT OF A KEYBOARD / CHARACTER. IT STRIPS PARITY FROM THE CHARACTER, / NEGATES IT, AND ADDS 64(DEC); THUS A=-1, Z=-26. / THIS VALUE IS STORED IN CURSXY, AND THE X,Y / COORDINATES OF THE CURSOR INTERSECTION ARE / STORED IN CURSXY+1,2. DCURSR, 0 CLA CLL CMA /NL-1 JMS% PDELAY /LET TERMINAL FINISH TAD KESC /SEND "ESC" JMS% PTOUTP TAD K232 /SEND "SUB" JMS% PTOUTP /TO LIGHT CURSOR JMS GTCORD /GO GET REPLY TAD CURSXY /GET CHARACTER AND K177 /STRIP PARITY CIA /NEGATE TAD K100 /ADD 64(DEC) DCA CURSXY /STORE CDF CIF 0 /RETURN JMP% DCURSR HDCOPY, 0 /SEND A "MAKE COPY" TAD KESC /SIGNAL TO TERMINAL JMS% PTOUTP /IF HCU IS THERE TAD K205 /SEND "ESC","ENQ" JMS% PTOUTP /TO GET STATUS JMS GTCORD /GET REPLY TAD CURSXY /GET STATUS WORD AND K20 /HCU BIT SZA CLA /SKIP IF HCU THERE JMP NOHC /NO - DO NOTHING TAD KESC JMS% PTOUTP /SEND "ESC" TAD K227 /SEND "ETB" JMS% PTOUTP /TO MAKE COPY TAD K6400 /WAIT ABOUT 12 SECS JMS% PDELAY /FOR COPY NOHC, CDF CIF 0 /RETURN JMP% HDCOPY TINPUT, 0 /TTY INPUT ROUTINE TINLUP, KSFM /ALSO KEEPS COUNT IN JMP KTIM /DP INTEGER OF NUMBER KRBM /OF 6.2 USEC UNITS TO JMP% TINPUT /GET CHARACTER KTIM, ISZ TIMER JMP TINLUP ISZ TIMER1 K100, 100 JMP TINLUP / GTCORD GETS THE TERMINAL RESPONSE TO GRAPHIC / INPUT OR ENQUIRE. IT PUTS THE CHARACTER OR / STATUS WORD IN CURSXY, DECODES THE 4 / COORDINATE CHARACTERS, AND PUTS X,Y IN / CURSXY+1,2. THE TERMINAL MAY RESPOND WITH / 5,6 OR 7 CHARACTERS, DEPENDENT ON STRAPPING. / TO MAKE THIS ROUTINE INDEPENDENT OF STRAPPING / AND BAUD RATE, "TINPUT" COUNTS THE NUMBER OF / 6.2 USEC INTERVALS REQUIRED TO GET THE 4 / COORDINATE CHARACTERS (THE TIME TO GET THE / FIRST CHARACTER DEPENDS ON THE USER). THIS / ROUTINE DIVIDES THE COUNT BY 4, AND AFTER THE / FIFTH CHARACTER IS RECEIVED, WAITS FOR THAT / NUMBER OF 7.2 USEC COUNTS. IF NO CHARACTER IS / RECEIVED IN THIS TIME, IT RETURNS; IF ONE IS / RECEIVED, IT RESETS THE COUNT AND WAITS AGAIN. GTCORD, 0 KCCM /CLEAR KEYBOARD FLAG JMS TINPUT /GET FIRST CHAR DCA CURSXY /STORE IT DCA TIMER /RESET TIME COUNTERS DCA TIMER1 JMS TINPUT /GET 2ND CHAR AND K37 /5 BITS CLL RTL /SHIFT TO MOST SIGNIF RTL RAL DCA CURSXY+1 /STORE JMS TINPUT /GET THIRD CHAR AND K37 /5 LS BITS TAD CURSXY+1 /ADD MS BITS DCA CURSXY+1 /STORE X COORD JMS TINPUT /GET FOURTH CHAR AND K37 /5 BITS CLL RTL /SHIFT TO MOST SIGNIF RTL RAL DCA CURSXY+2 /STORE JMS TINPUT /GET FIFTH CHAR AND K37 /5 LS BITS TAD CURSXY+2 /ADD 5 MS BITS DCA CURSXY+2 /STORE Y COORD BIGLUP, TAD TIMER1 /GET MS TIMER CLL CMA /NEGATE DCA TIMER2 /STORE TAD TIMER /GET LS TIMER STL CIA RAR /NEGATE & DIV BY 2 STL RAR /DIV BY 2 AGAIN EXTCHR, KSFM /CHECK KEYBOARD FLAG JMP TIMOUT /NONE - GO TIME KCCM /CLEAR FLAG JMP BIGLUP /GO RESET TIMER TIMOUT, IAC /COUNT NOP /FOR TIMING SZA JMP EXTCHR /LOOP ISZ TIMER2 /CHECK MS TIMER SKP /SKIP IF MORE JMP% GTCORD /DONE - RETURN STL CLA IAC RTR /NL6000 JMP EXTCHR /RESET LS TIMER & LOOP / ROUTINE USED BY LETTERING MODES OF "ANNOTE" / TO GET CHARACTER FROM KEYBOARD, ECHO IT TO / SCREEN, AND RETURN WITH PARITY STRIPPED, / NEGATED CHARACTER IN EKOREG. EKOCHR, 0 TAD K237 /SEND "US" FOR JMS% PTOUTP /ALPHA MODE JMS TINPUT /GET CHAR DCA EKOREG /STORE IT TAD EKOREG /RETRIEVE IT JMS% PTOUTP /SEND IT TAD EKOREG /RETRIEVE AGAIN AND K177 /STRIP PARITY CLL CIA /NEGATE DCA EKOREG /STORE RESULT CDF CIF 0 /RETURN JMP% EKOCHR EKOREG, 0 /INDEX REGISTERS FOR REG1, 0 /LETTERING MODES REG2, 0 REG3, 0 REG4, 0 REG5, 0 REG6, 0 ADELAY, ADDR DELAY PDELAY=ADELAY+1 /INDIRECT ADDRESS CURSXY, 0 /GRAPHIC INPUT STORAGE 0 ATOUTP, ADDR TOUTPT PTOUTP=ATOUTP+1 /INDIRECT ADDRESS TIMER, 0 /TIMER STORAGE TIMER1, 0 TIMER2, 0 K20, 20 /CONSTANTS K37, 37 K177, 177 K205, 205 K227, 227 K232, 232 KESC, 233 K237, 237 K6400, 6400 / THE REMAINDER OF THIS PROGRAM WAS TAKEN WITHOUT CHANGE / FROM "XYPLOT - FOR PLOTTING TO DISK", A PART OF "USR AND / OTHER SPECIAL PURPOSE SUBROUTINES FOR OS/8 FORTRAN IV", / DECUS NO. 8-850 AND 12-207, BY ROBERT W PHELPS, / UNIVERSITY OF ROCHESTER MEDICAL CENTER, ROCHESTER N.Y. / WE ARE INDEBTED TO MR. PHELPS FOR DOING THE ORIGINAL WORK / TO MAKE IT POSSIBLE TO MODIFY THESE ROUTINES, AND FOR / SOME OF THE IDEAS AND TECHNIQUES USED IN THE FOREGOING. / / COPYRIGHT 1973 / DIGITAL EQUIPMENT CORPORATION / MAYNARD, MASSACHUSETTS 01754 / / PLOTTER ROUTINES FOR OS/8 FORTRAN 4 / / FIELD1 PDPPLT / /MODIFIED BY R. W. PHELPS / RADIATION BIOL & BIOPHYSICS / UNIV. OF ROCHESTER / / WILL USE AN INDEPENDENT PROGRAM <XYPLOT> SO THAT / PLOT FILES CAN BE WRITTEN TO DISK AND PLOTTED AS / A BACKGROUND JOB DURING OTHER FORTRAN JOBS, EITHER / REAL-TIME OR NORMAL. / / DEC DID NOT WRITE THESE ROUTINES TO BE TAKEN APART -- / PROBABLY TO MAKE THINGS HARD FOR MODIFICATION - / BUT I HAVE TRIED TO DO SO WITHOUT COMPLETELY / REWRITING THEM. EXCUSE THE KLUDGES. ORG .+20 /SKIP INDEX REGISTERS /THESE ROUTINES GET THE PLOTTING CODES WITHIN A LETTER /PASS THEM AS X,Y PAIRS FOR PLOT ROUTINE LEFT, 0 JMS GETXYS /GET A LEFT HAND X,Y PAIR RTR RTR RTR JMS PASSXY CDF CIF JMP% LEFT P7, 7 PASSXY, 0 DCA LETCD2 /SAVE XY PAIR TAD LETCD2 CLL RTR RAR /GET IN LO 3 BITS AND P7 DCA LETCD1 /PASS X VALUE TAD LETCD2 /NOW FOR THE Y PART AND P7 DCA LETCD2 /PASS THE Y VALUE JMP% PASSXY RIGHT, 0 /GET A RIGHT HAND X,Y PAIR JMS GETXYS JMS PASSXY CDF CIF JMP% RIGHT LETCOD, 0 LETCD1, 0 LETCD2, 0 /THIS RTN GETS XY PAIRS FROM THE PACKED SEQ FOR EACH LETTER GETXYS, 0 TAD LETCOD CLL TAD LOCNPT /START OF LETTER CODE DCA LETCD2 /UPDATE PTR TO LETTER RAL /IF LINK SET,CROSSED FIELDS /SO UPDATE FIELD POINTER TAD LOCNFL /FIELD PASSED FROM FINDIT RTN CLL RTL RAL TAD CDFINS DCA NFLD NFLD, 0 /SET FIELD TAD% LETCD2 /GET PLOTTING CODES CDF 10 JMP% GETXYS CDFINS, 6201 LOCNFL, 0 /FIELD LOCNPT, 0 ORG LEFT+200-20 NXTLCN, PLETPS, ADDR LOCNPT /POINTS TO START OF CODE FOR /PASSED LETTER COUNT, /COUNT OF STEPS INTO CHAR /PLOTTING CODE TABLE PLCNM1, ADDR LOCNFL /USED TO PASS FIELD TXTADR, 0 0 0 /ADDRESS OF PACKED 6 BIT LETTER, 0 //LETTERS TO PRINT PSYMB, ADDR SYMTBL PP7, 7 /THESE ROUTINES DETERMINE THE START OF PLOTTING CODES FOR A /CHAR PASSED AS A HOLLERITH (6 BIT) FROM SYMBOL RTN. /FIND LOCN OF START OF PLOT VECTORS /FOR LEFT HALF OF 2 6BIT CHARACTERS FINDLF, 0 TAD TXTADR+1 /DO FIELD STUFF AND PP7 CLL RTL RAL TAD CDF DCA DOCDF DOCDF, NOP TAD% TXTADR+2 /GET 2 6-BIT VALUES CDF 10 DCA LETTER CLL TAD LETTER /MOVE LEFT CHAR RTR RTR RTR AND P77 /INTO RIGHTMOST 6 BITS JMS FINDIT ISZ TXTADR+2 /PREPARE FOR NEXT CHAR LEFT JMP FLDOK /IF SKIPS AT FIELD BOUNDARY ISZ TXTADR+1 /SO UPDATE FIELD ALSO FLDOK, CDF CIF JMP% FINDLF FINDIT, 0 /GET LOCN OF LETTER IN SYMBOL /TABLE SPA SNA /CHECK FOR 0 TAD P40 /WHICH DEFAULTS TO SPACE CIA CLL /MAKE A COUNTER DCA TXTADR DCA COUNT /ZERO TOTAL STEP COUNTER TAD PTRTBL+1 DCA NXTLCN /POINTS TO LOCN IN POINTER /TABLE. THIS TBL HAS STEPS FOR EACH LETTER, SO COUNT TOTAL /STEPS TO DESIRED LETTER TAD PTRTBL CLL RTL RAL TAD CDF DCA SCANTB SCANTB, NOP TAD% NXTLCN /GET NEXT STEP COUNT CDF 10 TAD COUNT /ADD IT TO TOTAL STEP COUNT DCA COUNT ISZ NXTLCN /BUMP POINTER SKP /IT DIDN'T CROSS BOUNDARIES TAD P10 /IT DID.UPDATE FIELD WORD TAD SCANTB DCA SCANTB ISZ TXTADR JMP SCANTB /NOT THERE YET CLL TAD COUNT /ADD COUNT TO TAD PSYMB+1 /START OF CODE TABLE DCA% PLETPS+1 /NOW ITS CORRECT PTR RAL /IF L SET,CROSSED FLD BOUNDS TAD PSYMB /GET FIELD OF TABLE DCA% PLCNM1+1 /PASS IT JMP% FINDIT /GOT THE LETTER P40, 40 P77, 77 PTRTBL, ADDR SYMCNT CDF, 6201 P10, 10 FINDRT, 0 TAD LETTER /LEFT FROM LAST LEFT LETTER AND P77 JMS FINDIT CDF CIF JMP% FINDRT /ROUTINE TO HANDLE NUMBERS FROM FORTRAN SUBR NUMBER /NOT CALLED BY USER DIRECTLY PASNUM, 0 TAD TXTADR IAC SNA JMP USZRO /IF EQ -1, USE 0 TAD T2 SPA /L.T. -3 BAD JMP USZRO /SO USE 0 TAD M15 SPA CLA /G.T. 9 BAD TOO JMP USEIT /IT'S -3,-2,0-9 USZRO, CLA INDEX, TAD P60 /INDEX INTO TABLE JMS FINDIT CDF CIF JMP% PASNUM USEIT, TAD TXTADR JMP INDEX /PLOT AN INTEGER EQUIV OR CENTERED (100-117 DEC=144-165 OCT) PASINT, 0 TAD TXTADR SPA SNA /L.T. 0 NO GOOD JMP USSPAC TAD M166 /G.T. 117 DEC. BAD SMA JMP USSPAC TAD A22 SMA JMP OKVAL /CENTERED 100-121 (144-165) TAD P44 SMA CLA JMP USSPAC /64-99 (100-143 OCT) ILLEGAL TAD TXTADR ACHAR, JMS FINDIT CDF CIF JMP% PASINT USSPAC, CLA TAD P40 /DEFAULT TO SPACE JMP ACHAR OKVAL, TAD P100 /PASS CENTEREDS AS 100-121 JMP ACHAR P100, 100 A22, 22 P44, 44 M166, -166 P60, 60 M15, -15 T2, 2 #PLSTR, JA . /SAVE 2 WORDS FOR RETURN JA #XPLOT TEXT +XYPLOT+ PLOTXR, SETX XRPLOT SETB BPPLOT BPPLOT, FNOP 0 0 XRPLOT, 0 /MULTI PURPOSE XRS XR1, 0 XR2, 0 TERM2, 0 XR4, 0 XR5, 0 YPT, F 0. /VALUE ACTUALLY PLOTTED XPT, F 0. TERM1, F 0. ARG1, F 0. YDIFF, F 0. /PEN VALUE ORG 10*3+BPPLOT FNOP JA PLOTXR 0 PLTRTN, JA . PEN, F 3.0 P1, F 1. PF2, F 2. P3, F 3. P4, F 4. PF7, F 7. XCHRPT, F 0. /X,Y VALUES FROM PDP TABLES YCHRPT, F 0. NUMENT, F 0. /INDICATES ENTRY FROM NUMBER SUBRTN COSANG, F 0. SINANG, F 0. DEGRAD, F 0.017453293 /RADIANS TO DEGRRES F100, F 100. CENTSY, F 0. /CENTERED SYMBOL INDICATOR NUMSYM, F 0. /NO. OF CHARS TO PLOT ANGADJ, F 0. X0, F 0.0 Y0, F 0.0 BASE 0 #XPLOT, STARTD FLDA 10*3 /SAVE CALLER'S NEXT LOCN FSTA PLTRTN FLDA 0 SETX XRPLOT /GET POINTER TO START OF /CALLER'S ARG LIST SETB BPPLOT BASE BPPLOT LDX 1,1 FSTA ARG1 JA #PLSTR SECT SYMBOL EXTERN SIN EXTERN COS JSA #PLSTR SYM1, FLDA% ARG1,1 FSTA XPT /X POINT FLDA% ARG1,1+ FSTA YPT /Y VALUE FLDA% ARG1,1+ FSTA YDIFF /HEIGHT FLDA% ARG1,1+ FSTA TERM1 /TEXT FLDA% ARG1,1+ FSTA TERM2 /ANGLE FLDA% ARG1,1+ FSTA ARG1 /NUMBER CHARS. STARTF FLDA% TERM2 FMUL DEGRAD /CONVERT TO RADIANS FSTA XCHRPT /THEN DONT NEED SIND FLDA% XPT FSTA X0 /VALUE OF X FLDA% YPT FSTA Y0 FCLA FSTA CENTSY FLDA TERM1 /GET TEXT ADDRESS FSTA TXTADR /PUT IT DOWN IN PDP PART FLDA% YDIFF /ASSUME ITS A REGULAR JGE NOTNEG /NEGATIVE SIZE IS NOT NICE FNEG NOTNEG, FDIV PF7 /ADJUST LATER IF A CENT FSTA ANGADJ FLDA% ARG1 /SHOWS NUM CHARS + PEN STATUS FSTA NUMSYM JGE REGSYM /GT OR =0 IS REG SYM FLDA% TERM1 /CHECK FOR REG CHAR PASSED FSUB F100 /AS AN INTEGER EQUIV. JLT INTEQ /ITS A INTEGER EQUIV FLDA% YDIFF /CENTERED SYMBOL JGE NOTNG1 FNEG NOTNG1, FDIV P4 FSTA ANGADJ FLDA NUMSYM /-1=PEN UP;-2=PEN DOWN / (CNTRD ONLY) FADD P1 JGE UPPEN /MOVE WITH PEN UP FSTA CENTSY /NEG MEANS DOWN FROM THE START PTITDN, FLDA PF2 CPEN, FSTA YCHRPT /=-2 FOR DOWN(CENT. + /INTEQ ONLY) -3 FOR UP FOR ALL SYMBOLS + INTEQ JSR XYPLOT /PLOT ORIGIN JA .+10 JA X0 JA Y0 JA YCHRPT FLDA CENTSY JLE PENOK JSA PNDOWN /PUT PEN DOWN NOW(CENT ONLY) PENOK, JSR SIN JA .+4 JA XCHRPT FMUL ANGADJ FSTA SINANG /SAVE SIN*HGT. USE FOR ALL VALUES JSR COS JA .+4 JA XCHRPT FMUL ANGADJ FSTA COSANG /COS(ANGLE)*HGT (INCREMENTS) LDX 0,4 /ZERO STEP COUNT FLDA NUMENT JGT NUM2 /JUMP IF FROM NUMBER JA FSTLFT UPPEN, FLDA P3 FSTA CENTSY /PEN DOWN AFTER INITIAL MOVE JA CPEN /MOVE WITH PEN UP PENSET, JSA PNDOWN ONEXY, JA . SETX LETCOD XTA 2 /GET Y FSTA YCHRPT XTA 1 /GET X FSTA XCHRPT /GET 1ST MOVE SETX XRPLOT FSUB PF7 /7,0=PEN UP 7,7=END JEQ PENUPM FLDA CENTSY JEQ CALALL /CENTEREDS REQUIRE MODIFIED /ORIGIN FLDA PF2 FNEG FADDM XCHRPT FADDM YCHRPT CALALL, JSA CALANG JXN PENSET,5 /PUT PEN BACK DOWN IF NEC JA ONEXY INTEQ, FLDA NUMSYM /CHECK ON PEN FADD P1 JLT PTITDN REGSYM, FLDA P3 JA CPEN PENUPM, JSA PENUP FLDA YCHRPT /CHECK FOR 7,7 END FSUB PF7 JEQ NXTCHR /JUMP IF END OF CHAR JA ONEXY /ON TO NEXT PAIR PENUP, JA . FLDA P3 FSTA PEN JA PENUP PNDOWN, JA . FLDA PF2 FSTA PEN JA PNDOWN CALANG, JA . FLDA YCHRPT FMUL SINANG FNEG FSTA TERM1 /=-SINA*Y FLDA XCHRPT FMUL COSANG FADD TERM1 FADD X0 FSTA XPT /X*COSA+OLDX-SINA*Y /REQUIRES AN OLDX + OLDY TERM,BUT I DO THIS ALL REL TO A /LOGICAL 0,0 FOR EACH CHAR, SO I LEFT THEM OUT. FLDA YCHRPT FMUL COSANG FSTA TERM1 /COSA*Y FLDA XCHRPT FMUL SINANG FADD TERM1 FADD Y0 FSTA YPT /NEWX*SINA+OLDY+COSA*Y JSR XYPLOT /DO THE PLOTTING WITH XYPLOT JA .+10 JA XPT JA YPT JA PEN JA CALANG LEFTJS, XTA 4 /NUM OF MOVES SETX LETCOD /PASS NUMBER OF STEPS ATX 0 /INTO LETTER SETX XRPLOT TRAP4 LEFT /RETURN WITH A X,Y PAIR JSA ONEXY XTA 4 SETX LETCOD ATX 0 /STEP COUNT SETX XRPLOT JNE NOTFST /CHANGE IF BEFORE 1ST MOVE JSA PNDOWN /PUT PEN DOWN NOW NOTFST, TRAP4 RIGHT /GET NEXT XY PAIR JSA ONEXY ADDX 1,4 /UPDATE COUNT JA LEFTJS /77 AT END OF CHAR IS END CENTEX, JSA PENUP JA CENTOO NXTCHR, FLDA CENTSY JNE CENTEX /LEAVE PEN AT CENTER FOR /CENTS ONLY FSTA YCHRPT FLDA PF7 FSTA XCHRPT /MOVE PEN TO 7,0 IF REG CHAR JSA CALANG /PLOT IT FLDA XPT FSTA X0 FLDA YPT FSTA Y0 CENTOO, LDX 0,4 /ZERO STEP NUM WITHIN CHAR FLDA P1 FNEG FADD NUMSYM /UPDATE COUNTER JLE SYMDON /NO MORE FSTA NUMSYM /MORE. SAVE COUNT FLDA NUMENT JGT NUM3 /EXIT FOR NUMB SUBR FCLA JXN RTCHAR,3 /1=CHAR IS RIGHT 6 BITS FSTLFT, LDX 1,3 /POINT TO RIGHT 6 WHEN TIME /FOR NEXT CHAR FLDA NUMSYM JLT NUM5 /JUMP IF CENT SYM OR INTEQ /CENTEREDS + INTEG EQUIV PASSING A 3 WORD VALUE IN NUM5 /REG SYM USES PDP RTN TO GET 1 WORD OF LIST FCLA TRAP4 FINDLF JA LEFTJS /GO PLOT THE ACTUAL CHAR RTCHAR, LDX 0,3 /POINT TO LEFT 6 BITS /FOR NEXT TIME TRAP4 FINDRT JA LEFTJS SYMDON, FCLA FSTA NUMENT JA PLTRTN ENTRY SYMB SYMB, JSA #PLSTR /SPEC ENTRY FOR NUMBER SUB STARTF FLDA P1 FSTA NUMENT STARTD JA SYM1 NUM2, SETX NUMENT /FOR NUMBER SUBRTN ONLY /HERE ONLY FOR 1ST NUMBER OF STRING LDX -1,2 NUM3, JSA GETARG /FOR 2ND + LATER NUMBERS TRAP4 PASNUM JA LEFTJS NUM5, SETX NUMENT /FOR INTEQ + CENTEREDS LDX -1,2 JSA GETARG TRAP4 PASINT JA LEFTJS GETARG, JA . SETX NUMENT /USED FOR MORE THAN 1 CHAR STARTD FLDA TXTADR+1 /CENT SYMBOLS AND NUM SUBRTN /PASS VALUES AS 3 WORDS FSTA ARG1 STARTF FLDA% ARG1,2+ /PASS A NUMBER SETX TXTADR FADD PT5 ATX 0 SETX XRPLOT JA GETARG PT5, F 0.5 SECT #SYMBT SYMTBL, A, 0005 /1 1636 4540 7043 0377 B, 0006 3645 4433 0333 4241 3000 7777 C, 4130 1001 0516 3645 7777 D, 0006 3645 4130 0077 E, 4000 0646 7033 0377 F, 0006 4670 0333 7777 G, 4616 0501 1030 4143 2377 H, 0006 /10 OCTAL 7003 4370 4640 7777 I, 0646 7026 2070 0040 7777 J, 0100 /10 DEC 3036 7016 4677 K, 0006 7046 1303 1340 7777 L, 0600 4077 LM, 0006 2346 4077 LN, 0006 4046 7777 O, 0110 3041 4536 1605 0177 P, 0006 /20 OCT 4643 0377 Q, 0110 3041 4536 1605 0170 2240 7777 R, 0006 3645 4433 1303 1340 7777 S, 0110 3041 4233 1304 0516 3645 7777 T, 2026 /20 DEC 7006 4677 U, 0601 1030 4146 7777 V, 0620 4677 W, 0600 2240 4677 X, 0046 7006 4077 Y, 0624 2070 2446 7777 Z, 0646 /26 0040 7777 LBRACK, 3010 1636 7777 BSLASH, 0640 7777 RBRACK, 1030 3616 7777 UPAROW, 2026 7004 2644 7777 LARROW, 2103 2570 0343 7777 SPAC, 7777 /SPACE - 32 DEC, 40 OCT EXCLPT, 2622 7021 2077 DBLQOT, 1416 7036 3477 NUMSGN, 0242 7044 0470 1511 7031 3577 DOLSGN, 1211 3133 1315 3534 7026 2077 PRCNT, 0405 1514 0470 4501 7031 3242 4131 7777 PI, 1014 7004 4470 3430 7777 SNGQOT, 2624 7777 LPAR, 3020 /40 1115 2636 7777 RPAR, 1626 3531 2010 7777 STAR, 0145 /42 7025 2170 4105 7003 4377 PLUS, 2125 7003 4377 COM, 2111 1222 2110 7777 DASH, 0343 7777 PER, 2021 1110 2077 SLASH, 0046 7777 ZER, 0110 2031 3526 1605 0170 3600 7777 ONE, 1436 3070 1040 7777 TWO, 0516 3645 4401 0040 7777 THR, 0516 3645 4433 1333 4241 3010 0177 FOUR, 3036 0343 7777 FIV, 0110 3041 4233 1304 0646 7777 SIX, 0213 3342 4130 1001 0516 3645 7777 SEV, 0506 4645 2120 7777 EIG, 1333 4241 3010 0102 1304 0516 3645 4433 7777 NIN, 0110 3041 4536 1605 0413 3344 7777 COLON, 1415 2524 1470 1222 2111 1277 SEMI, 1415 2524 1470 1222 2011 1277 LT, 4503 /LESS THAN 60=74 4177 EQ, 0444 /EQUAL 61 7002 4277 GT, 0543 /GRTR THAN 62=76 0177 QM, 0516 /Q MARK 63=77 3645 4433 3270 3130 7777 /START OF CENTEREDS-EXPECT TO START AND END IN MIDDLE /PLOTTED WITH 2,2 AS MIDDLE. ALL MUSR END AT 2,2. CBOX, 2224 /BOX 0 0400 4044 2422 7777 COCT, 2224 /OCTAGON 1 1403 0110 3041 4334 2422 7777 CTRI, 2223 /TRIANGLE 2 0141 2322 7777 CPL, 2420 /+ 3 7002 4222 7777 CX, 0440 /X 4 7044 0022 7777 CDIM, 2224 /DIAMOND 5 0220 4224 2277 CUP, 2220 /UP ARROW 6 7002 2442 0222 7777 CHAIR, 2244 /CHAIR 7 0440 7000 2277 ZORRO, 3270 /Z 8 4000 4404 7012 2277 YCENT, 2244 /Y 9 7020 2204 2277 CSHIP, 2233 /SHIP 10 1311 3133 7040 3170 1100 7004 1370 4422 7777 CSTAR, 0242 /STAR 11 7044 0070 2024 7004 4022 7777 TWOTRI, 2244 /2 TRIANGLES 12 0440 0022 7777 CVERT, 2420 /VERTICAL LINE 13 2277 HDSH, 0242 /HORIZ DASH 14 2277 ABSEQ, 2242 /ABSOLUTELY EQUAL TO 15 7044 0470 4000 7002 2277 NOTEQ, 2200 /NOT EQUAL 16 7001 4170 4303 7044 2277 PLSMNS, 2224 /+ OR - 17 7013 3370 3111 7022 7777 /THIS TABLE COUNTS THE NUMBER OF STEPS (12 BIT) BETWEEN /EACH CHARACTER. USED TO DETERMINE LOCATION AT WHICH TO /START PICKING UP PLOTTING CODES. SYMCNT, 0 /TO A B-A C-B D-C E-D F-E G-F H-G I-H J-I K-J L-K LM-L LN-LM O-LN P-O Q-P R-Q S-R T-S U-T V-U W-V X-W Y-X Z-Y LBRACK-Z BSLASH-LBRACK RBRACK-BSLASH UPAROW-RBRACK LARROW-UPAROW SPAC-LARROW EXCLPT-SPAC DBLQOT-EXCLPT NUMSGN-DBLQOT DOLSGN-NUMSGN PRCNT-DOLSGN PI-PRCNT SNGQOT-PI LPAR-SNGQOT RPAR-LPAR STAR-RPAR PLUS-STAR COM-PLUS DASH-COM PER-DASH SLASH-PER ZER-SLASH ONE-ZER TWO-ONE THR-TWO FOUR-THR FIV-FOUR SIX-FIV SEV-SIX EIG-SEV NIN-EIG COLON-NIN SEMI-COLON LT-SEMI EQ-LT GT-EQ QM-GT CBOX-QM COCT-CBOX CTRI-COCT CPL-CTRI CX-CPL CDIM-CX CUP-CDIM CHAIR-CUP ZORRO-CHAIR YCENT-ZORRO CSHIP-YCENT CSTAR-CSHIP TWOTRI-CSTAR CVERT-TWOTRI HDSH-CVERT ABSEQ-HDSH NOTEQ-ABSEQ PLSMNS-NOTEQ