home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Unsorted BBS Collection
/
thegreatunsorted.tar
/
thegreatunsorted
/
misc
/
plothp.bas
< prev
next >
Wrap
BASIC Source File
|
1994-08-06
|
47KB
|
1,328 lines
25 '
50 ' FUTURENET HP PLOTTER PROGRAM VERSION 1.00 JANUARY 25, 1984
75 ' COPYRIGHT 1984, FUTURENET CORPORATION
100 '
125 CLEAR , , 8096
150 ROOT3 = SQR(3)
175 C = SQR(2) / 2
200 DEF FNCAP$ (ARG$) = CHR$(ASC(ARG$) AND &H5F)
225 '
250 ' DRAW ARC RELATIVE CENTER AND ENDPOINT ARRAY
275 '
300 ACX(0) = 0: ACY(0) = 1: AMX(0) = -C: AMY(0) = -C
325 ACX(1) = C: ACY(1) = C: AMX(1) = -1: AMY(1) = 0
350 ACX(2) = 1: ACY(2) = 0: AMX(2) = -C: AMY(2) = C
375 ACX(3) = C: ACY(3) = -C: AMX(3) = 0: AMY(3) = 1
400 ACX(4) = 0: ACY(4) = -1: AMX(4) = C: AMY(4) = C
425 ACX(5) = -C: ACY(5) = -C: AMX(5) = 1: AMY(5) = 0
450 ACX(6) = -1: ACY(6) = 0: AMX(6) = C: AMY(6) = -C
475 ACX(7) = -C: ACY(7) = C: AMX(7) = 0: AMY(7) = -1
500 '
525 ' 7580B, 7585B P1,P2 COORDINATES FOR EACH PAPER SIZE
550 '
575 PSX(0) = 5588: PSY(0) = 4318 'A SIZE 11 X 8.5
600 PSX(1) = 8636: PSY(1) = 5588 'B SIZE 17 X 11
625 PSX(2) = 11176: PSY(2) = 8636 'C SIZE 22 X 17
650 PSX(3) = 17272: PSY(3) = 11176 'D SIZE 34 X 22
675 PSX(4) = 22352: PSY(4) = 17272 'E SIZE 44 X 34
700 '
725 INCR% = 1016 'PLOTTER RESOLUTION, PARTS PER INCH
750 DU% = 20 'DASH-1 DRAWING UNITS PER INCH
775 S% = 4 * ((INCR% / DU% + 3) \ 4)'SCALE, PLOTTER UNITS PER DASH-1 DRAWING UNIT
800 S = INCR% / DU%
825 DOT% = S% \ 4 'PLOT UNITS PER DASH-1 DOT
850 DD% = DU% * 4 'DASH-1 DOTS PER INCH
875 CSIZEP = INCR% / (DD% * 7) 'CONVERT DOTS TO CHARACTER SIZE INCREMENT
900 CLS 'CLEAR SCREEN
925 PRINT : PRINT "FutureNet HP Plotter Program.": PRINT "Version 1.00 Copyright 1984, FutureNet Corporation.": PRINT
950 PRINT "Turn plotter power on and load with paper and pen."
975 INPUT "Press ENTER key when ready.", A$
1000 OPEN "COM2:1200,S,7,1,RS,CS65535,DS,CD" FOR RANDOM AS #1'INITIALIZE SERIAL PORT
1025 GOSUB 4100 'GET PLOTTER MODEL
1050 XNOW = 0: YNOW = 0
1075 GOSUB 4675 'GET DRAWING SURFACE ORIENTATION
1100 GOSUB 5150 'SET AXIS ORIENTATION
1125 ON ERROR GOTO 32950
1150 INPUT "Enter DASH-1 plotting file name [PLOT.DPL] ", F$
1175 IF LEN(F$) = 0 THEN F$ = "PLOT.DPL": GOTO 1225
1200 IF INSTR(1, F$, ".") = 0 THEN F$ = F$ + ".DPL"
1225 OPEN F$ FOR INPUT AS #2 'EXISTING FILE CHECK
1250 CLOSE 2
1275 OPEN F$ FOR RANDOM AS #2 LEN = 128
1300 R% = 7
1325 GOSUB 1850 'READ FIRST RECORD
1350 FIELD #2, 1 AS ID$, 1 AS B$, 1 AS DUM$, 2 AS FID$, 2 AS DUM$, 2 AS X$, 2 AS Y$
1375 ID% = ASC(ID$)
1400 B% = ASC(B$)
1425 FID% = CVI(FID$)
1450 X% = CVI(X$) 'INPUT DRAWING SIZE, D.U.'S
1475 Y% = CVI(Y$)
1500 IF (ID% <> 4) OR (FID% <> &H121) THEN PRINT "File "; F$; " is not a plotting file!": CLOSE 2: GOTO 1150
1525 PRINT "Plotting file "; F$; " is "; X% / 20; "by "; Y% / 20; "inches."
1550 X = X% * S%: XSIZE = X% * S'CONVERT INPUT DRAWING SIZE TO PLOTTER UNITS
1575 Y = Y% * S%: YSIZE = Y% * S
1600 YMAXD = Y
1625 GOSUB 5375 'GET DESIRED OUTPUT SIZE
1650 GOSUB 6025 'CHECK FOR 7475 MAXIMUM LIMITATION
1675 GOSUB 6325 'SET INPUT DRAWING SCALE POINTS
1700 GOSUB 6475 'CHECK SCALING, SET P1, P2
1725 PRINT "Plotting..."
1750 PRINT #1, "SP1;" 'SELECT PEN 1
1775 GOTO 7350
1800 '
1825 ' READ NEXT 16 BYTE BLOCK
1850 '
1875 R% = R% + 1
1900 IF R% < 8 THEN RETURN
1925 GET #2
1950 R% = 0
1975 RETURN
2000 '
2025 ' DEFINE FIELD TO OBTAIN PARAMETERS
2050 '
2075 R16% = R% * 16
2100 FIELD #2, R16% AS DUM$, 1 AS ID$, 1 AS B$, 1 AS FLAG$, 2 AS X$, 2 AS Y$, 2 AS XL$, 2 AS YL$, 5 AS Z$
2125 ID% = ASC(ID$) AND 7
2150 B% = ASC(B$)
2175 X = S% * CVI(X$)
2200 Y = YMAXD - S% * CVI(Y$)
2225 XL = S% * CVI(XL$)
2250 YL = S% * CVI(YL$)
2275 RETURN
2300 '
2325 ' PEN UP, MOVE PEN TO X, Y, ABSOLUTE MODE, LEAVE PEN UP
2350 '
2375 PRINT #1, "PU;PA"; X; ","; Y; ";"
2400 RETURN
2425 '
2450 ' PEN UP, MOVE PEN TO DX, DY, RELATIVE MODE, LEAVE PEN UP
2475 '
2500 PRINT #1, "PU;PR"; DX; ","; DY; ";"
2525 RETURN
2550 '
2575 ' PEN DOWN, DRAW TO X,Y, ABSOLUTE MODE, LEAVE PEN DOWN
2600 '
2625 PRINT #1, "PD;PA"; X; ","; Y; ";"
2650 RETURN
2675 '
2700 ' PEN DOWN, DRAW TO DX,DY, RELATIVE MODE, LEAVE PEN DOWN
2725 '
2750 PRINT #1, "PD;PR"; DX; ","; DY; ";"
2775 RETURN
2800 '
2825 ' SET ABSOLUTE MODE
2850 '
2875 RETURN
2900 '
2925 ' SET RELATIVE MODE
2950 '
2975 RETURN
3000 '
3025 ' PEN UP
3050 '
3075 PRINT #1, "PU;": RETURN
3100 '
3125 ' PEN DOWN
3150 '
3175 PRINT #1, "PD;": RETURN
3200 '
3225 ' SET SOLID LINE MODE
3250 '
3275 PRINT #1, "LT;": RETURN
3300 '
3325 ' SET DOTTED LINE MODE
3350 '
3375 PRINT #1, "LT 1,"; 4 * DOT% * LTPARM; ";": RETURN
3400 '
3425 ' SET DASHED LINE MODE
3450 '
3475 PRINT #1, "LT 2,"; 4 * DOT% * LTPARM; ";": RETURN
3500 '
3525 ' SET WIDE DASHED LINE MODE
3550 '
3575 PRINT #1, "LT 3,"; 12 * DOT% * LTPARM; ";": RETURN
3600 '
3625 ' CIRCLE PLOT RELATIVE MODE
3650 '
3675 PRINT #1, "PU;PR"; DX; ","; DY; ";"
3700 PRINT #1, "CI"; R; ";"; "PU;PR"; -DX; ","; -DY; ";"
3725 RETURN
3750 '
3775 ' ARC PLOT ABSOLUTE MODE
3800 '
3825 PRINT #1, "PD;AA"; X; ","; Y; ","; D; ";": RETURN
3850 '
3875 ' ARC PLOT RELATIVE MODE
3900 '
3925 PRINT #1, "PD;AR"; DX; ","; DY; ","; D; ";": RETURN
3950 '
3975 ' PLOT ALPHANUMERIC STRING
4000 '
4025 PRINT #1, "SR"; CW% * DOT% / (P2X - P1X) / 3 * 200 * SCALE; ","; CH% * DOT% / (P2Y - P1Y) * 100 * SCALE; ";"
4050 PRINT #1, "LB"; ALF$ + CHR$(3) + ";"
4075 RETURN
4100 '
4125 ' GET PLOTTER MODEL DESIGNATION, ANNOUNCE
4150 ' AND SET MODEL% ACCORDINGLY
4175 '
4200 RETRY = 0
4225 PRINT #1, "IN; OI;" 'ASK FOR MODEL ID
4250 ON ERROR GOTO 33025
4275 MODEL% = 0
4300 LINE INPUT #1, MODEL$
4325 RETRY = RETRY + 1
4350 IF MODEL$ = "7475A" THEN MODEL% = 1: S = 51
4375 IF MODEL$ = "7580B" THEN MODEL% = 2
4376 IF MODEL$ = "7580A" THEN MODEL% = 2
4400 IF MODEL$ = "7585B" THEN MODEL% = 3
4410 IF MODEL$ = "7586B" THEN MODEL% = 3
4425 IF MODEL% = 0 THEN 4500
4450 PRINT "Model "; MODEL$; " Plotter."
4475 RETURN
4500 IF RETRY = 1 THEN 4225
4525 PRINT "Unable to interface to Model " + MODEL$ + " HP Plotter."
4550 INPUT "Retry or Abort [R]/A?", A$
4575 IF LEN(A$) = 0 THEN 4225
4600 A$ = FNCAP$(A$)
4625 IF A$ = "R" THEN 4225
4650 IF A$ = "A" THEN SYSTEM ELSE 4500
4675 '
4700 ' GET DRAWING SURFACE SIZE, SET XMAX, YMAX IN PLOTTER UNITS
4725 '
4750 ON MODEL% GOTO 4775, 4950, 4950
4775 INPUT "Enter letter size of paper loaded: ", PSIZE$
4800 IF LEN(PSIZE$) = 0 THEN 4900
4825 PSIZE$ = FNCAP$(PSIZE$)
4850 IF PSIZE$ = "A" THEN PRINT #1, "PS4;": GOTO 4950
4875 IF PSIZE$ = "B" THEN PRINT #1, "PS1;": GOTO 4950
4900 PRINT "Paper size is improper."
4925 GOTO 4775
4950 PRINT #1, "OP;" 'ASK FOR P1, P2 COORDINATES
4975 INPUT #1, P1X, P1Y, P2X, P2Y
5000 XMAX = P2X - P1X
5025 YMAX = P2Y - P1Y
5050 XMAXIN = XMAX / INCR%
5075 YMAXIN = YMAX / INCR%
5100 PRINT "P1, P2 area is "; XMAXIN; " by "; YMAXIN; " inches."
5125 RETURN
5150 '
5175 ' SET AXIS ORIENTATION
5200 '
5225 ON MODEL% GOTO 5350, 5250, 5250
5250 IF XMAX > YMAX THEN RETURN
5275 PRINT #1, "RO90;"
5300 SWAP P1X, P1Y: SWAP P2X, P2Y: SWAP XMAX, YMAX
5325 PRINT #1, "IP"; P1X, P1Y, P2X, P2Y; ";"
5350 RETURN
5375 '
5400 ' GET DESIRED OUTPUT DRAWING SIZE
5425 '
5450 INPUT "Do you want to change the output drawing size Y/[N]"; A$
5475 IF LEN(A$) = 0 THEN 5750
5500 A$ = FNCAP$(A$)
5525 IF A$ = "N" THEN 5750
5550 INPUT "Enter desired output drawing letter size: ", DSIZE$
5575 IF LEN(DSIZE$) = 0 THEN 5775
5600 DSIZE$ = FNCAP$(DSIZE$)
5625 IF (DSIZE$ < "A") OR (DSIZE$ > "E") THEN PRINT "Output letter size improper.": GOTO 5550
5650 I% = ASC(DSIZE$) - ASC("A")
5675 XSIZEOUT = 2 * PSX(I%)
5700 YSIZEOUT = 2 * PSY(I%)
5725 GOTO 5850
5750 XSIZEOUT = XSIZE: YSIZEOUT = YSIZE: SCALE = 1: RETURN
5775 INPUT "Enter output drawing size width, height in inches:", XWID, YHGT
5800 XSIZEOUT = XWID * INCR%
5825 YSIZEOUT = YHGT * INCR%
5850 '
5875 ' PROPORTIONALIZE OUTPUT SIZE TO INPUT SIZE
5900 '
5925 SCALE = YSIZEOUT / YSIZE: TEMP = SCALE * XSIZE
5950 IF TEMP <= XSIZEOUT THEN XSIZEOUT = TEMP: RETURN
5975 SCALE = XSIZEOUT / XSIZE: YSIZEOUT = SCALE * YSIZE
6000 RETURN
6025 '
6050 ' CHECK TO NOT EXCEED 7475 PLOTTING AREA LIMITATIONS
6075 '
6100 IF MODEL% <> 1 THEN RETURN
6125 IF PSIZE$ = "B" THEN 6200
6150 IF (XSIZEOUT <= 10365) AND (YSIZEOUT <= 7962) THEN RETURN
6175 XSIZEOUT = 10365: YSIZEOUT = 7962: GOTO 6250
6200 IF (XSIZEOUT <= 16640) AND (YSIZEOUT <= 10365) THEN RETURN
6225 XSIZEOUT = 16640: YSIZEOUT = 10365
6250 GOSUB 5900
6275 XMAX = XSIZEOUT: YMAX = YSIZEOUT
6300 RETURN
6325 ' CALCULATE INPUT DRAWING SCALE POINTS
6350 '
6375 SCX1 = 0: SCY1 = 0
6400 SCX2 = X: SCY2 = Y
6425 PRINT #1, "SC "; SCX1; SCX2; SCY1; SCY2; ";"
6450 RETURN
6475 '
6500 ' SEE IF DRAWING WILL FIT
6525 '
6550 IF XSIZEOUT > XMAX THEN 6600
6575 IF YSIZEOUT <= YMAX THEN XMAX = XSIZEOUT: YMAX = YSIZEOUT: GOTO 7050
6600 '
6625 ' DRAWING DOES NOT FIT
6650 '
6675 IF MODEL% = 1 THEN XMAX = XSIZEOUT: YMAX = YSIZEOUT: GOTO 7025
6676 PRINT "Output drawing will not fit on drawing surface."
6700 INPUT "Do you want to scale or clip [S]/C"; A$
6725 IF LEN(A$) = 0 THEN 6800
6750 A$ = FNCAP$(A$)
6775 IF A$ = "C" THEN XMAX = XSIZEOUT: YMAX = YSIZEOUT: GOTO 7025
6776 IF A$ <> "S" THEN GOTO 6700
6800 '
6825 ' CHECK SCALING AND SET P1, P2 SO THAT
6850 ' MAGNIFICATION IS EQUAL FOR X AND Y
6875 '
6900 SCALE1 = YMAX / YSIZEOUT
6925 TEMP = SCALE1 * XSIZEOUT
6950 IF TEMP <= XMAX THEN XMAX = TEMP: GOTO 7025
6975 SCALE1 = XMAX / XSIZEOUT
7000 YMAX = SCALE1 * YSIZEOUT
7025 SCALE = YMAX / YSIZE
7050 ON MODEL% GOTO 7075, 7150, 7150
7075 P1X = 0: P1Y = 0
7100 P2X = XMAX: P2Y = YMAX
7125 GOTO 7200
7150 P1X = -XMAX / 2: P1Y = -YMAX / 2
7175 P2X = -P1X: P2Y = -P1Y
7200 PRINT #1, "IP "; P1X; P1Y; P2X; P2Y; ";"
7225 DIAG = SQR((P2X - P1X) ^ 2 + (P2Y - P1Y) ^ 2)
7250 LTPARM = SCALE * 100 / DIAG
7275 RETURN
7300 '
7325 ' READ BLOCK AND BRANCH ON ID
7350 '
7375 GOSUB 1850
7400 GOSUB 2050
7425 ON ID% GOTO 7500, 28300, 29425
7450 IF ID% = 0 THEN PRINT #1, "PU;PA0,0;SP0;": PRINT "Plot finished.": CLOSE : SYSTEM
7475 PRINT "Illegal field type "; ID%; " encountered, plot aborted! ": SYSTEM
7500 '
7525 ' SYMBOL DEFINITION FIELD
7550 '
7575 C% = CVI(MID$(Z$, 3, 2))
7600 GOSUB 2050 'GET SYMBOL PARAMETERS
7625 GOSUB 2350 'MOVE TO X,Y
7650 XNOW = X: YNOW = Y 'SAVE SYMBOL ORIGIN
7675 INC% = 0 'DOT INCREMENT FLAG
7700 SSIZE% = -1: SLINTYP% = 2
7725 P% = 16
7750 GOSUB 27875 'GET NEXT DRAW COMMAND
7775 IF (OP% AND &HC0) = &H80 THEN 8925 'DRAW DOTS
7800 IF (OP% AND &H80) <> 0 THEN 8075 'NON "SHORT" COMMAND
7825 '
7850 ' DXS, DYS, MXS, OR MYS COMMAND
7875 '
7900 DU% = OP% AND &H1F
7925 IF (DU% AND &H10) <> 0 THEN DU% = DU% OR &HFFE0 'EXTEND SIGN
7950 O% = (OP% AND &HE0) \ 32 + 1
7975 ON O% GOSUB 8450, 8675, 8775, 8850
8000 GOTO 7750
8025 GOSUB 2350: XNOW = X: YNOW = Y: GOTO 7350 ' END OF SYMBOL DEF'N
8050 PRINT "Unknown symbol drawing command, plot aborted!": SYSTEM
8075 O% = (OP% AND &H70) \ 16 - 3
8100 O1% = (OP% AND &HF) + 1
8125 '
8150 ' THE FOLLOWING 3 "ON GOSUB" STATEMENTS BRANCH TO A SUBROUTINE
8175 ' TO PERFORM A DRAWING COMMAND
8200 '
8225 ON O% GOTO 8250, 8300, 8350, 8400'CX, DX, EX, OR FX
8250 ON O1% GOSUB 9325, 9400, 9475, 9600, 9800, 9900, 9975, 10100, 10475, 10550, 19000, 19350, 19400, 19450, 19500, 19550'C0 - CF
8275 GOTO 7750
8300 ON O1% GOSUB 19600, 19675, 19750, 19875, 20000, 20075, 20150, 20275, 20350, 20425, 20450, 20475, 20500, 20625, 20650, 20725'D0 - DF
8325 GOTO 7750
8350 ON O1% GOSUB 20800, 20825, 20850, 20875, 20900, 20925, 20950, 20975, 26150, 26250, 26350, 26450, 26550, 26600, 26800, 26950'E0 - EF
8375 GOTO 7750
8400 ON O1% GOSUB 27500, 27700, 8050, 8050, 8050, 8050, 8050, 8050, 8050, 8050, 8050, 8050, 8050, 8050, 8050, 8025
8425 GOTO 7750
8450 GOSUB 8550 'DXS
8475 X = X + DU%
8500 Y = Y - INC% * DOT%
8525 GOTO 2600
8550 '
8575 IF INC% = 0 THEN DU% = DU% * S%: RETURN
8600 IF DU% < 0 THEN DU% = DU% - 1 ELSE DU% = DU% + 1
8625 DU% = DU% * DOT%
8650 RETURN
8675 GOSUB 8550 'DYS
8700 X = X + INC% * DOT%
8725 Y = Y - DU%
8750 GOTO 2600
8775 DU% = DU% * S% 'MXS
8800 X = X + DU%
8825 GOTO 2350 'MOVE TO X,Y ABS MODE
8850 DU% = DU% * S% 'MYS
8875 Y = Y - DU%
8900 GOTO 2350 'MOVE TO X,Y ABS MODE
8925 '
8950 ' DRAW DOTS
8975 '
9000 D1% = (OP% AND &H38) \ 8
9025 GOSUB 9100
9050 D1% = OP% AND 7
9075 GOSUB 9100: GOTO 7750
9100 ON D1% + 1 GOTO 9125, 9150, 9175, 9200, 9225, 9250, 9275, 9300
9125 Y = Y + DOT%: GOTO 2600
9150 X = X + DOT%: Y = Y + DOT%: GOTO 2600
9175 X = X + DOT%: GOTO 2600
9200 X = X + DOT%: Y = Y - DOT%: GOTO 2600
9225 Y = Y - DOT%: GOTO 2600
9250 X = X - DOT%: Y = Y - DOT%: GOTO 2600
9275 X = X - DOT%: GOTO 2600
9300 X = X - DOT%: Y = Y + DOT%: GOTO 2600
9325 GOSUB 28200 'DX
9350 X = X + OP% * S%
9375 GOTO 2600
9400 GOSUB 28200 'DY
9425 Y = Y - OP% * S%
9450 GOTO 2600
9475 GOSUB 28200 'DXY
9500 X = X + OP% * S%
9525 GOSUB 28200
9550 Y = Y - OP% * S%
9575 GOTO 2600
9600 GOSUB 28200 'DR
9625 OP2% = OP% * S%
9650 GOSUB 28200
9675 OP% = OP% * S%
9700 DX = OP2%: DY = 0: GOSUB 2725
9725 DX = 0: DY = -OP%: GOSUB 2725
9750 DX = -OP2%: DY = 0: GOSUB 2725
9775 GOTO 2600
9800 GOSUB 28200 'MX
9825 X = X + OP% * S%
9850 GOSUB 2350
9875 RETURN
9900 GOSUB 28200 'MY
9925 Y = Y - OP% * S%
9950 GOTO 2350
9975 GOSUB 28200 'MXY
10000 X = X + OP% * S%
10025 GOSUB 28200
10050 Y = Y - OP% * S%
10075 GOTO 2350
10100 GOSUB 28200 'BX
10125 X = X + OP% * S%
10150 ON SLINTYP% + 1 GOSUB 3250, 10225, 3450, 3350, 3550
10175 GOSUB 2600: GOSUB 3250
10200 RETURN
10225 SDX1 = 0
10250 IF O% = 1 THEN SDX2 = OP% * S% ELSE SDX2 = OP% * DOT%
10275 SDY1 = DOT%: SDY2 = 0
10300 IF (O1% AND 1) = 1 THEN SWAP SDX1, SDY1: SWAP SDX2, SDY2
10325 X = X + SDX1 - SDX2: Y = Y + SDY1 + SDY2: GOSUB 2600
10350 X = X + SDX2: Y = Y - SDY2: GOSUB 2600
10375 X = X - 2 * SDX1: Y = Y - 2 * SDY1: GOSUB 2600
10400 X = X - SDX2: Y = Y + SDY2: GOSUB 2600
10425 X = X + SDX1 + SDX2: Y = Y + SDY1 - SDY2
10450 RETURN
10475 GOSUB 28200 'BY
10500 Y = Y - OP% * S%
10525 GOTO 10150
10550 GOSUB 28200 'IG
10575 IG% = OP% + 1: IF IG% > 38 THEN RETURN
10600 '
10625 ' BRANCH TO THE PROPER ROUTINE TO DRAW A GRAPHICS SYMBOL
10650 '
10675 IGX = X: IGY = Y 'SAVE X,Y COORDINATES
10700 ON IG% GOSUB 10750, 10975, 11200, 11425, 11650, 11925, 12200, 12475, 12750, 13125, 13175, 13550, 13600, 13900, 13950, 14250, 14300, 14675, 14725, 15100, 15150, 15625, 15675, 16150, 16200, 16300, 16525, 16750, 16975, 17225, 17250, 17425, 17600, 17800, 18000, 18250, 18500, 18750
10725 X = IGX: Y = IGY: GOTO 2350 'RESTORE PEN POSITION
10750 GOSUB 16300 '2 INPUT AND GATE
10775 OP% = 2: GOSUB 9925'MY 2
10800 GOSUB 19400 'DXL
10825 OP% = 3: GOSUB 9925'MY 3
10850 GOSUB 19400 'DXL
10875 X = X + 9.25 * S%
10900 Y = Y + S%
10925 GOSUB 2350 'MXY 9.25,-1
10950 GOTO 19450 'DXR
10975 GOSUB 16300 '2 INPUT NAND GATE
11000 OP% = 2: GOSUB 9925'MY 2
11025 GOSUB 19400 'DXL
11050 OP% = 3: GOSUB 9925'MY 3
11075 GOSUB 19400 'DXL
11100 X = X + 9.25 * S%
11125 Y = Y + S%
11150 GOSUB 2350 'MXY 9.25,-1
11175 GOTO 26250 'BXR
11200 GOSUB 16300 '2 INVERTED INPUT AND GATE
11225 OP% = 2: GOSUB 9925'MY 2
11250 GOSUB 26150 'BXL
11275 OP% = 3: GOSUB 9925'MY 3
11300 GOSUB 26150 'BXL
11325 X = X + 9.25 * S%
11350 Y = Y + S%
11375 GOSUB 2350 'MXY 9.25,-1
11400 GOTO 19450 'DXR
11425 GOSUB 16300 '2 INVERTED INPUT NAND GATE
11450 OP% = 2: GOSUB 9925'MY 2
11475 GOSUB 26150 'BXL
11500 OP% = 3: GOSUB 9925'MY 3
11525 GOSUB 26150 'BXL
11550 X = X + 9.25 * S%
11575 Y = Y + S%
11600 GOSUB 2350 'MXY 9.25,-1
11625 GOTO 26250 'BXR
11650 GOSUB 16525 '3 INPUT AND GATE
11675 OP% = 1: GOSUB 9925'MY 1
11700 GOSUB 19400 'DXL
11725 OP% = 3: GOSUB 9925'MY 3
11750 GOSUB 19400 'DXL
11775 OP% = 3: GOSUB 9925'MY 3
11800 GOSUB 19400 'DXL
11825 X = X + 9.25 * S%
11850 Y = Y + 3 * S%
11875 GOSUB 2350 'MXY 9.25,-3
11900 GOTO 19450 'DXR
11925 GOSUB 16525 '3 INPUT NAND GATE
11950 OP% = 1: GOSUB 9925'MY 1
11975 GOSUB 19400 'DXL
12000 OP% = 3: GOSUB 9925'MY 3
12025 GOSUB 19400 'DXL
12050 OP% = 3: GOSUB 9925'MY 3
12075 GOSUB 19400 'DXL
12100 X = X + 9.25 * S%
12125 Y = Y + 3 * S%
12150 GOSUB 2350 'MXY 9.25,-3
12175 GOTO 26250 'BXR
12200 GOSUB 16525 '3 INVERTED INPUT AND GATE
12225 OP% = 1: GOSUB 9925'MY 1
12250 GOSUB 26150 'BXL
12275 OP% = 3: GOSUB 9925'MY 3
12300 GOSUB 26150 'BXL
12325 OP% = 3: GOSUB 9925'MY 3
12350 GOSUB 26150 'BXL
12375 X = X + 9.25 * S%
12400 Y = Y + 3 * S%
12425 GOSUB 2350 'MXY 9.25,-3
12450 GOTO 19450 'DXR
12475 GOSUB 16525 '3 INVERTED INPUT NAND GATE
12500 OP% = 1: GOSUB 9925'MY 1
12525 GOSUB 26150 'BXL
12550 OP% = 3: GOSUB 9925'MY 3
12575 GOSUB 26150 'BXL
12600 OP% = 3: GOSUB 9925'MY 3
12625 GOSUB 26150 'BXL
12650 X = X + 9.25 * S%
12675 Y = Y + 3 * S%
12700 GOSUB 2350 'MXY 9.25,-3
12725 GOTO 26250 'BXR
12750 GOSUB 12800 '4 INPUT AND GATE
12775 GOTO 19450 'DXR
12800 Y = Y - 2 * S%: GOSUB 2600'DYS 2
12825 GOSUB 16300 'DRAW NARROW AND SYMBOL
12850 Y = Y + S%: GOSUB 2350 'MYS -1
12875 GOSUB 19400 'DXL
12900 Y = Y - 3 * S%: GOSUB 2600'DYS 3
12925 GOSUB 19400 'DXL
12950 Y = Y - 3 * S%: GOSUB 2600'DYS 3
12975 GOSUB 19400 'DXL
13000 Y = Y - 3 * S%: GOSUB 2600'DYS 3
13025 GOSUB 19400 'DXL
13050 Y = Y - S%: GOSUB 2600 'DYS 1
13075 X = X + 9.25 * S%: Y = Y + 5 * S%
13100 GOTO 2350 'MXY 9.25,-4
13125 GOSUB 12800 '4 INPUT NAND GATE
13150 GOTO 26250 'BXR
13175 GOSUB 13225 '4 INVERTED INPUT AND GATE
13200 GOTO 19450 'DXR
13225 Y = Y - 2 * S%: GOSUB 2600'DYS 2
13250 GOSUB 16300 'DRAW NARROW AND SYMBOL
13275 Y = Y + S%: GOSUB 2350 'MYS -1
13300 GOSUB 26150 'BXL
13325 Y = Y - 3 * S%: GOSUB 2600'DYS 3
13350 GOSUB 26150 'BXL
13375 Y = Y - 3 * S%: GOSUB 2600'DYS 3
13400 GOSUB 26150 'BXL
13425 Y = Y - 3 * S%: GOSUB 2600'DYS 3
13450 GOSUB 26150 'BXL
13475 Y = Y - S%: GOSUB 2600 'DYS 1
13500 X = X + 9.25 * S%: Y = Y + 5 * S%
13525 GOTO 2350 'MXY 9.25,-4
13550 GOSUB 13225 '4 INVERTED INPUT NAND GATE
13575 GOTO 26250 'BXR
13600 GOSUB 13650 '2 INPUT OR GATE
13625 GOTO 19450 'DXR
13650 GOSUB 16750
13675 X = X + 3 * DOT%: Y = Y - 2 * S%
13700 GOSUB 2350 'MXY
13725 GOSUB 19400 'DXL
13750 Y = Y - 3 * S%
13775 GOSUB 2350 'MXY
13800 GOSUB 19400 'DXL
13825 X = X - 3 * DOT% + WD%
13850 Y = Y + S%
13875 GOTO 2350 'MXY
13900 GOSUB 13650 '2 INPUT NOR GATE
13925 GOTO 26250 'BXR
13950 GOSUB 14000 '2 INVERTED INPUT OR GATE
13975 GOTO 19450 'DXR
14000 GOSUB 16750
14025 X = X + 3 * DOT%: Y = Y - 2 * S%
14050 GOSUB 2350 'MXY
14075 GOSUB 26150 'BXL
14100 Y = Y - 3 * S%
14125 GOSUB 2350 'MXY
14150 GOSUB 26150 'BXL
14175 X = X - 3 * DOT% + WD%
14200 Y = Y + S%
14225 GOTO 2350 'MXY
14250 GOSUB 14000 '2 INVERTED INPUT NOR GATE
14275 GOTO 26250 'BXR
14300 GOSUB 14350 '3 INPUT OR GATE
14325 GOTO 19450 'DXR
14350 GOSUB 16975
14375 X = X + 2 * DOT%: Y = Y - S%
14400 GOSUB 2350 'MXY
14425 GOSUB 19400 'DXL
14450 X = X + 2 * DOT%: Y = Y - 3 * S%
14475 GOSUB 2350 'MXY
14500 GOSUB 19400 'DXL
14525 X = X - 2 * DOT%: Y = Y - 3 * S%
14550 GOSUB 2350 'MXY
14575 GOSUB 19400 'DXL
14600 X = X - 2 * DOT% + WD%
14625 Y = Y + 3 * S%
14650 GOTO 2350
14675 GOSUB 14350 '3 INPUT NOR GATE
14700 GOTO 26250 'BXR
14725 GOSUB 14775 '3 INVERTED INPUT OR GATE
14750 GOTO 19450 'DXR
14775 GOSUB 16975
14800 X = X + 2 * DOT%: Y = Y - S%
14825 GOSUB 2350 'MXY
14850 GOSUB 26150 'BXL
14875 X = X + 2 * DOT%: Y = Y - 3 * S%
14900 GOSUB 2350 'MXY
14925 GOSUB 26150 'BXL
14950 X = X - 2 * DOT%: Y = Y - 3 * S%
14975 GOSUB 2350 'MXY
15000 GOSUB 26150 'BXL
15025 X = X - 2 * DOT% + WD%
15050 Y = Y + 3 * S%
15075 GOTO 2350
15100 GOSUB 14775 '3 INVERTED INPUT NOR GATE
15125 GOTO 26250 'BXR
15150 GOSUB 15200 '4 INPUT OR GATE
15175 GOTO 19450 'DXR
15200 Y = Y - 2 * S%: GOSUB 2600'DXY
15225 GOSUB 16750
15250 Y = Y + S%: GOSUB 2350 'MXY
15275 GOSUB 19400 'DXL
15300 X = X + 3 * DOT%: Y = Y - 3 * S%
15325 GOSUB 2350 'MXY
15350 GOSUB 19400 'DXL
15375 Y = Y - 3 * S%
15400 GOSUB 2350 'MXY
15425 GOSUB 19400 'DXL
15450 X = X - 3 * DOT%: Y = Y - 3 * S%
15475 GOSUB 2350 'MXY
15500 GOSUB 19400 'DXL
15525 Y = Y - S%: GOSUB 2350
15550 Y = Y + 2 * S%: GOSUB 2600'DXY
15575 X = X + WD%: Y = Y + 3 * S%
15600 GOTO 2350 'MXY
15625 GOSUB 15200 '4 INPUT NOR GATE
15650 GOTO 26250 'BXR
15675 GOSUB 15725 '4 INVERTED INPUT OR GATE
15700 GOTO 19450 'DXR
15725 Y = Y - 2 * S%: GOSUB 2600'DXY
15750 GOSUB 16750
15775 Y = Y + S%: GOSUB 2350 'MXY
15800 GOSUB 26150 'BXL
15825 X = X + 3 * DOT%: Y = Y - 3 * S%
15850 GOSUB 2350 'MXY
15875 GOSUB 26150 'BXL
15900 Y = Y - 3 * S%
15925 GOSUB 2350 'MXY
15950 GOSUB 26150 'BXL
15975 X = X - 3 * DOT%: Y = Y - 3 * S%
16000 GOSUB 2350 'MXY
16025 GOSUB 26150 'BXL
16050 Y = Y - S%: GOSUB 2350
16075 Y = Y + 2 * S%: GOSUB 2600'DXY
16100 X = X + WD%: Y = Y + 3 * S%
16125 GOTO 2350 'MXY
16150 GOSUB 15725 '4 INVERTED INPUT NOR GATE
16175 GOTO 26250 'BXR
16200 WD% = 11 * S%: HT% = 7 * S%'XOR LINE
16225 H% = (HT% / 2) * ROOT3
16250 DX = -H%: DY = -HT% / 2: D = -60: GOSUB 3900: GOSUB 2850
16275 GOTO 2350 'MY HT%
16300 OP% = 7 'NARROW AND SYMBOL
16325 GOSUB 9425 'DY 7
16350 X = X + 5.75 * S%
16375 GOSUB 2600
16400 DX = 0: DY = 3.5 * S%: D = 180: GOSUB 3900: GOSUB 2850
16425 Y = Y + 7 * S%
16450 X = X - 5.75 * S%
16475 GOSUB 2600 'DX -5.75
16500 RETURN
16525 OP% = 8 'WIDE AND SYMBOL
16550 GOSUB 9425 'DY 8
16575 X = X + 5.25 * S%
16600 GOSUB 2600 'DX 5.25
16625 DX = 0: DY = 4 * S%: D = 180: GOSUB 3900: GOSUB 2850
16650 Y = Y + 8 * S%
16675 X = X - 5.25 * S%
16700 GOSUB 2600 'DX -5.25
16725 RETURN
16750 WD% = 11 * S%: HT% = 7 * S%'NARROW OR SYMBOL
16775 H% = (HT% / 2) * ROOT3
16800 DX = -H%: DY = -HT% / 2: D = -60: GOSUB 3900: GOSUB 2850
16825 DX = WD% - H%: DY = 0
16850 GOSUB 2725 'DX
16875 DX = 0: DY = HT%: D = 55: GOSUB 3900
16900 DX = -H% - DOT%: DY = -HT% / 2 + 2 * DOT%: D = 62: GOSUB 3900: GOSUB 2850
16925 DX = -WD% + H% + DOT%: DY = 0
16950 GOTO 2725 'DX
16975 WD% = 11 * S%: HT% = 8 * S%'WIDE OR SYMBOL
17000 H% = (HT% / 2) * ROOT3
17025 DX = -H%: DY = -HT% / 2: D = -60: GOSUB 3900: GOSUB 2850
17050 DY = 0
17075 DX = WD% - H%
17100 GOSUB 2725 'DX
17125 DX = 0: DY = HT%: D = 60: GOSUB 3900
17150 DX = -H%: DY = -HT% / 2: D = 60: GOSUB 3900: GOSUB 2850
17175 DX = -WD% + H%: DY = 0
17200 GOTO 2725 'DX
17225 RETURN 'IG 29 UNDEFINED
17250 X = X - 6 * DOT%: GOSUB 2350 'HORIZ CAP
17275 X = X + 3 * S%: GOSUB 2600
17300 Y = Y - 6 * DOT%: GOSUB 2350
17325 H% = 6 * DOT% * ROOT3
17350 DX = -6 * DOT%: DY = -H%: D = 60: GOSUB 3900: GOSUB 2850
17375 X = X - 6 * DOT%: Y = Y + 6 * DOT%
17400 GOSUB 2350: GOTO 17775
17425 Y = Y - 6 * DOT%: GOSUB 2350 'VERTICAL CAP
17450 Y = Y + 3 * S%: GOSUB 2600
17475 X = X + 6 * DOT%: GOSUB 2350
17500 H% = 6 * DOT% * ROOT3
17525 DX = H%: DY = -6 * DOT%: D = 60: GOSUB 3900: GOSUB 2850
17550 X = X - 6 * DOT%: Y = Y - 6 * DOT%
17575 GOSUB 2350: GOTO 17775
17600 X = X + 2 * DOT%: Y = Y - 2 * DOT%'VERTICAL RESISTOR
17625 GOSUB 2600
17650 X = X - S%: Y = Y - S%
17675 GOSUB 2600
17700 X = X + 2 * DOT%: Y = Y - 2 * DOT%
17725 GOSUB 2600
17750 OP% = -2: GOSUB 9925
17775 GOTO 3050 'PEN UP
17800 X = X + 2 * DOT%: Y = Y + 2 * DOT%'HORIZONTAL RESISTOR
17825 GOSUB 2600
17850 X = X + S%: Y = Y - S%
17875 GOSUB 2600
17900 X = X + 2 * DOT%: Y = Y + 2 * DOT%
17925 GOSUB 2600
17950 OP% = -2: GOSUB 9825
17975 GOTO 17775
18000 OP% = 2: GOSUB 19625 'RIGHT COIL
18025 DX = 0: DY = -3 * DOT%: D = -180: GOSUB 3900: GOSUB 2850
18050 OP% = 6: GOSUB 20100
18075 OP% = -2: GOSUB 19625
18100 OP% = 2: GOSUB 20025
18125 DX = 0: DY = -3 * DOT%: D = -180: GOSUB 3900: GOSUB 2850
18150 OP% = 6: GOSUB 20100
18175 OP% = -2: GOSUB 19625
18200 OP% = -3: GOSUB 9925
18225 GOTO 17775
18250 OP% = -2: GOSUB 19625 'LEFT COIL
18275 DX = 0: DY = -3 * DOT%: D = 180: GOSUB 3900: GOSUB 2850
18300 OP% = 6: GOSUB 20100
18325 OP% = 2: GOSUB 19625
18350 OP% = -2: GOSUB 20025
18375 DX = 0: DY = -3 * DOT%: D = 180: GOSUB 3900: GOSUB 2850
18400 OP% = 6: GOSUB 20100
18425 OP% = 2: GOSUB 19625
18450 OP% = -3: GOSUB 9925
18475 GOTO 17775
18500 OP% = -2: GOSUB 19700 'UPPER COIL
18525 DX = 3 * DOT%: DY = 0: D = -180: GOSUB 3900: GOSUB 2850
18550 OP% = 6: GOSUB 20025
18575 OP% = 2: GOSUB 19700
18600 OP% = -2: GOSUB 20100
18625 DX = 3 * DOT%: DY = 0: D = -180: GOSUB 3900: GOSUB 2850
18650 OP% = 6: GOSUB 20025
18675 OP% = 2: GOSUB 19700
18700 OP% = -3: GOSUB 9825
18725 GOTO 17775
18750 OP% = 2: GOSUB 19700 'LOWER COIL
18775 DX = 3 * DOT%: DY = 0: D = 180: GOSUB 3900: GOSUB 2850
18800 OP% = 6: GOSUB 20025
18825 OP% = -2: GOSUB 19700
18850 OP% = 2: GOSUB 20100
18875 DX = 3 * DOT%: DY = 0: D = 180: GOSUB 3900: GOSUB 2850
18900 OP% = 6: GOSUB 20025
18925 OP% = -2: GOSUB 19700
18950 OP% = -3: GOSUB 9825
18975 GOTO 17775
19000 FOR K1% = 1 TO 2 'INSERT DOTS
19025 GOSUB 27875 'GET PARAMETER
19050 M% = &H80
19075 FOR K2% = 1 TO 2
19100 FOR K3% = 1 TO 4
19125 IF (OP% AND M%) <> 0 THEN GOSUB 3150: GOSUB 3050
19150 DX = DOT%: DY = 0: GOSUB 2475
19175 M% = M% / 2
19200 NEXT K3%
19225 DX = -4 * DOT%: DY = -DOT%: GOSUB 2475
19250 NEXT K2%
19275 NEXT K1%
19300 DX = 0: DY = 4 * DOT%: GOSUB 2475
19325 RETURN
19350 O1% = 9: GOTO 20975 'ISC
19375 RETURN 'TEMP
19400 DX = XNOW - X: DY = 0: GOSUB 2725 'DXL
19425 GOTO 2350
19450 DX = XNOW + XL - X: DY = 0: GOSUB 2725 'DXR
19475 GOTO 2350
19500 DX = 0: DY = YNOW - Y: GOSUB 2725 'DYU
19525 GOTO 2350
19550 DX = 0: DY = YNOW - YL - Y: GOSUB 2725 'DYL
19575 GOTO 2350
19600 GOSUB 28200 'DXD
19625 X = X + OP% * DOT%
19650 GOTO 2600
19675 GOSUB 28200 'DYD
19700 Y = Y - OP% * DOT%
19725 GOTO 2600
19750 GOSUB 28200 'DXYD
19775 X = X + OP% * DOT%
19800 GOSUB 28200
19825 Y = Y - OP% * DOT%
19850 GOTO 2600
19875 GOSUB 28200 'DRD
19900 OP2% = OP% * DOT%
19925 GOSUB 28200
19950 OP% = OP% * DOT%
19975 GOTO 9700
20000 GOSUB 28200 'MXD
20025 X = X + OP% * DOT%
20050 GOTO 2350
20075 GOSUB 28200 'MYD
20100 Y = Y - OP% * DOT%
20125 GOTO 2350
20150 GOSUB 28200 'MXYD
20175 X = X + OP% * DOT%
20200 GOSUB 28200
20225 Y = Y - OP% * DOT%
20250 GOTO 2350
20275 GOSUB 28200 'BXD
20300 X = X + OP% * DOT%
20325 GOTO 10150
20350 GOSUB 28200 'BYD
20375 Y = Y - OP% * DOT%
20400 GOTO 10150
20425 INC% = 0: RETURN 'SN
20450 INC% = 1: RETURN 'SI
20475 INC% = -1: RETURN 'SD
20500 GOSUB 27900 'MXYA
20525 X = XNOW + OP% * S%
20550 GOSUB 27900
20575 Y = YNOW - OP% * S%
20600 GOTO 2350
20625 SSIZE% = -1: RETURN 'RS
20650 XSAVE = X 'SXY
20675 YSAVE = Y
20700 RETURN
20725 X = XSAVE 'RXY
20750 Y = YSAVE
20775 GOTO 2350
20800 'ISTC
20825 'ISTR
20850 'ISRC
20875 'ISBR
20900 'ISBC
20925 'ISBL
20950 'ISLC
20975 GOSUB 27875 'ISTL
21000 IF SSIZE% <> -1 THEN GOTO 21625
21025 IF OP% < 11 THEN RETURN
21050 IF OP% > 16 THEN GOTO 21850
21075 ON OP% - 10 GOTO 21100, 21175, 21375, 21250, 21400, 21550
21100 DX% = 2 * DOT%: DY% = 2 * DOT%: GOSUB 25900 'SMALL DOT SYMBOL
21125 DX = DX% + 2 * DOT%: DY = DY% - 2 * DOT%: GOSUB 2475: GOSUB 32625
21150 GOTO 2350
21175 DX% = 3 * DOT%: DY% = 3 * DOT%: GOSUB 25900 'LARGE DOT SYMBOL
21200 DX = DX% + 3 * DOT%: DY = DY% - 3 * DOT%: GOSUB 2475: GOSUB 32750
21225 GOTO 2350
21250 DX% = 2 * DOT%: DY% = 3 * DOT%: GOSUB 25900 'LEFT CLOCK
21275 DX = DOT% + DX%: DY = DY%: GOSUB 2475
21300 DX = 3 * DOT%: DY = -3 * DOT%: GOSUB 2725
21325 DX = -3 * DOT%: GOSUB 2725
21350 GOSUB 2350
21375 RETURN
21400 DX% = 2 * DOT%: DY% = 3 * DOT%: GOSUB 25900 'RIGHT CLOCK
21425 DX = 3 * DOT% + DX%: DY = DY%: GOSUB 2475
21450 DX = -3 * DOT%: DY = -3 * DOT%: GOSUB 2725
21475 DX = 3 * DOT%: GOSUB 2725
21500 GOSUB 2350
21525 RETURN
21550 DX% = 2 * DOT%: DY% = 2 * DOT%: GOSUB 25900 'BUBBLE SYMBOL
21575 DX = DX% + 2 * DOT%: DY = DY% - 2 * DOT%: GOSUB 2475: GOSUB 32500
21600 GOTO 2350
21625 ON SSIZE% + 1 GOTO 21650, 21675, 21700
21650 DX% = 4 * DOT%: DY% = 4 * DOT%: CH% = 5: CW% = 6: DX = 2 * DOT%: DY = -6 * DOT%: GOTO 21725
21675 DX% = 4 * DOT%: DY% = 6 * DOT%: CH% = 7: CW% = 7: DX = 2 * DOT%: DY = -9 * DOT%: GOTO 21725
21700 DX% = 5 * DOT%: DY% = 8 * DOT%: CH% = 9: CW% = 8: DX = DOT%: DY = -11 * DOT%
21725 GOSUB 25900
21750 DX = DX + DX%: DY = DY + DY%: GOSUB 2475
21775 ALF$ = CHR$(OP%): GOSUB 4000
21800 GOSUB 2350
21825 RETURN
21850 IF OP% < 30 THEN RETURN
21875 IF OP% > 50 THEN RETURN
21900 IF OP% < 40 THEN ON OP% - 29 GOTO 21950, 22125, 22300, 22475, 22650, 22875, 23100, 23325, 23550, 23725
21925 ON OP% - 39 GOTO 23900, 24075, 24250, 24425, 24600, 24775, 24950, 25125, 25300, 25475, 25650
21950 DX% = 6 * DOT%: DY% = 3 * DOT%: GOSUB 25900 'BIG RT ARROW
21975 DX = DX%: DY = DY%: GOSUB 2475
22000 DX = 11 * DOT%: DY = -3 * DOT%: GOSUB 2725
22025 DX = -11 * DOT%: DY = -3 * DOT%: GOSUB 2725
22050 DX = 0: DY = 6 * DOT%: GOSUB 2725
22075 GOSUB 2350
22100 RETURN
22125 DX% = 6 * DOT%: DY% = 3 * DOT%: GOSUB 25900 'BIG LEFT ARROW
22150 DX = DX%: DY = DY% - 3 * DOT%: GOSUB 2475
22175 DX = 11 * DOT%: DY = 3 * DOT%: GOSUB 2725
22200 DX = 0: DY = -6 * DOT%: GOSUB 2725
22225 DX = -11 * DOT%: DY = 3 * DOT%: GOSUB 2725
22250 GOSUB 2350
22275 RETURN
22300 DX% = 3 * DOT%: DY% = 6 * DOT%: GOSUB 25900 'BIG UP ARROW
22325 DX = 3 * DOT% + DX%: DY = DY%: GOSUB 2475
22350 DX = 3 * DOT%: DY = -11 * DOT%: GOSUB 2725
22375 DX = -6 * DOT%: DY = 0: GOSUB 2725
22400 DX = 3 * DOT%: DY = 11 * DOT%: GOSUB 2725
22425 GOSUB 2350
22450 RETURN
22475 DX% = 3 * DOT%: DY% = 6 * DOT%: GOSUB 25900 'BIG DOWN ARROW
22500 DX = DX%: DY = DY%: GOSUB 2475
22525 DX = 6 * DOT%: DY = 0: GOSUB 2725
22550 DX = -3 * DOT%: DY = -11 * DOT%: GOSUB 2725
22575 DX = -3 * DOT%: DY = 11 * DOT%: GOSUB 2725
22600 GOSUB 2350
22625 RETURN
22650 DX% = 6 * DOT%: DY% = 4 * DOT%: GOSUB 25900 'BIG UP RIGHT ARROW
22675 DX = DX%: DY = DY% - 7 * DOT%: GOSUB 2475
22700 DX = 2 * DOT%: DY = 2 * DOT%: GOSUB 2725
22725 DX = 2 * DOT%: DY = -2 * DOT%: GOSUB 2725
22750 DX = 7 * DOT%: DY = 7 * DOT%: GOSUB 2725
22775 DX = -11 * DOT%: DY = -3 * DOT%: GOSUB 2725
22800 DX = 2 * DOT%: DY = -2 * DOT%: GOSUB 2725
22825 GOSUB 2350
22850 RETURN
22875 DX% = 6 * DOT%: DY% = 4 * DOT%: GOSUB 25900 'BIG DOWN RIGHT ARROW
22900 DX = DX%: DY = DY%: GOSUB 2475
22925 DX = 2 * DOT%: DY = -2 * DOT%: GOSUB 2725
22950 DX = 2 * DOT%: DY = 2 * DOT%: GOSUB 2725
22975 DX = 7 * DOT%: DY = -7 * DOT%: GOSUB 2725
23000 DX = -11 * DOT%: DY = 3 * DOT%: GOSUB 2725
23025 DX = 2 * DOT%: DY = 2 * DOT%: GOSUB 2725
23050 GOSUB 2350
23075 RETURN
23100 DX% = 6 * DOT%: DY% = 4 * DOT%: GOSUB 25900 'BIG DOWN LEFT ARROW
23125 DX = 11 * DOT% + DX%: DY = DY%: GOSUB 2475
23150 DX = -2 * DOT%: DY = -2 * DOT%: GOSUB 2725
23175 DX = -2 * DOT%: DY = 2 * DOT%: GOSUB 2725
23200 DX = -7 * DOT%: DY = -7 * DOT%: GOSUB 2725
23225 DX = 11 * DOT%: DY = 3 * DOT%: GOSUB 2725
23250 DX = -2 * DOT%: DY = 2 * DOT%: GOSUB 2725
23275 GOSUB 2350
23300 RETURN
23325 DX% = 6 * DOT%: DY% = 4 * DOT%: GOSUB 25900 'BIG UP LEFT ARROW
23350 DX = 11 * DOT% + DX%: DY = -7 * DOT% + DY%: GOSUB 2475
23375 DX = -2 * DOT%: DY = 2 * DOT%: GOSUB 2725
23400 DX = -2 * DOT%: DY = -2 * DOT%: GOSUB 2725
23425 DX = -7 * DOT%: DY = 7 * DOT%: GOSUB 2725
23450 DX = 11 * DOT%: DY = -3 * DOT%: GOSUB 2725
23475 DX = -2 * DOT%: DY = -2 * DOT%: GOSUB 2725
23500 GOSUB 2350
23525 RETURN
23550 DX% = 3 * DOT%: DY% = 5 * DOT%: GOSUB 25900 'RIGHT DIODE ARROW
23575 DX = DX%: DY = DY%: GOSUB 2475
23600 DX = 5 * DOT%: DY = -5 * DOT%: GOSUB 2725
23625 DX = -5 * DOT%: GOSUB 2725
23650 DX = 0: DY = 10 * DOT%: GOSUB 2725
23675 GOSUB 2350
23700 RETURN
23725 DX% = 3 * DOT%: DY% = 5 * DOT%: GOSUB 25900 'LEFT DIODE ARROW
23750 DX = 6 * DOT% + DX%: DY = DY%: GOSUB 2475
23775 DX = 0: DY = -10 * DOT%: GOSUB 2725
23800 DX = -5 * DOT%: DY = 5 * DOT%: GOSUB 2725
23825 DX = 5 * DOT%: GOSUB 2725
23850 GOSUB 2350
23875 RETURN
23900 DX% = 5 * DOT%: DY% = 3 * DOT%: GOSUB 25900 'UP DIODE ARROW
23925 DX = 5 * DOT% + DX%: DY = -DOT% + DY%: GOSUB 2475
23950 DX = -5 * DOT%: DY = -5 * DOT%: GOSUB 2725
23975 DX = 10 * DOT%: DY = 0: GOSUB 2725
24000 DX = -5 * DOT%: DY = 5 * DOT%: GOSUB 2725
24025 GOSUB 2350
24050 RETURN
24075 DX% = 5 * DOT%: DY% = 3 * DOT%: GOSUB 25900 'DOWN DIODE ARROW
24100 DX = DX%: DY = DY%: GOSUB 2475
24125 DX = 10 * DOT%: DY = 0: GOSUB 2725
24150 DX = -5 * DOT%: DY = -5 * DOT%: GOSUB 2725
24175 DY = 5 * DOT%: GOSUB 2725
24200 GOSUB 2350
24225 RETURN
24250 DX% = 2 * DOT%: DY% = 3 * DOT%: GOSUB 25900 'SMALL RT ARROW
24275 DX = DX%: DY = DY%: GOSUB 2475
24300 DX = 3 * DOT%: DY = -3 * DOT%: GOSUB 2725
24325 DX = -3 * DOT%: GOSUB 2725
24350 DX = 0: DY = 6 * DOT%: GOSUB 2725
24375 GOSUB 2350
24400 RETURN
24425 DX% = 2 * DOT%: DY% = 3 * DOT%: GOSUB 25900 'SMALL LEFT ARROW
24450 DX = 4 * DOT% + DX%: DY = DY%: GOSUB 2475
24475 DX = 0: DY = -6 * DOT%: GOSUB 2725
24500 DX = -3 * DOT%: DY = 3 * DOT%: GOSUB 2725
24525 DX = 3 * DOT%: GOSUB 2725
24550 GOSUB 2350
24575 RETURN
24600 DX% = 3 * DOT%: DY% = 2 * DOT%: GOSUB 25900 'SMALL UP ARROW
24625 DX = 3 * DOT% + DX%: DY = -DOT% + DY%: GOSUB 2475
24650 DX = 3 * DOT%: DY = -3 * DOT%: GOSUB 2725
24675 DX = -6 * DOT%: DY = 0: GOSUB 2725
24700 DX = 3 * DOT%: DY = 3 * DOT%: GOSUB 2725
24725 GOSUB 2350
24750 RETURN
24775 DX% = 3 * DOT%: DY% = 2 * DOT%: GOSUB 25900 'SMALL DOWN ARROW
24800 DX = DX%: DY = DY%: GOSUB 2475
24825 DX = 6 * DOT%: DY = 0: GOSUB 2725
24850 DX = -3 * DOT%: DY = -3 * DOT%: GOSUB 2725
24875 DY = 3 * DOT%: GOSUB 2725
24900 GOSUB 2350
24925 RETURN
24950 DX% = 2 * DOT%: DY% = 2 * DOT%: GOSUB 25900 'SMALL UP RIGHT ARROW
24975 DX = DX%: DY = DY%: GOSUB 2475
25000 DX = 4 * DOT%: DY = 0: GOSUB 2725
25025 DX = 0: DY = -4 * DOT%: GOSUB 2725
25050 DX = -4 * DOT%: DY = 4 * DOT%: GOSUB 2725
25075 GOSUB 2350
25100 RETURN
25125 DX% = 2 * DOT%: DY% = 2 * DOT%: GOSUB 25900 'SMALL DOWN RIGHT ARROW
25150 DX = 4 * DOT% + DX%: DY = DY%: GOSUB 2475
25175 DX = 0: DY = -4 * DOT%: GOSUB 2725
25200 DX = -4 * DOT%: DY = 0: GOSUB 2725
25225 DX = 4 * DOT%: DY = 4 * DOT%: GOSUB 2725
25250 GOSUB 2350
25275 RETURN
25300 DX% = 2 * DOT%: DY% = 2 * DOT%: GOSUB 25900 'SMALL DOWN LEFT ARROW
25325 DX = DX%: DY = DY%: GOSUB 2475
25350 DX = 4 * DOT%: DY = -4 * DOT%: GOSUB 2725
25375 DX = -4 * DOT%: DY = 0: GOSUB 2725
25400 DX = 0: DY = 4 * DOT%: GOSUB 2725
25425 GOSUB 2350
25450 RETURN
25475 DX% = 2 * DOT%: DY% = 2 * DOT%: GOSUB 25900 'SMALL UP LEFT ARROW
25500 DX = DX%: DY = DY%: GOSUB 2475
25525 DX = 4 * DOT%: DY = 0: GOSUB 2725
25550 DX = -4 * DOT%: DY = -4 * DOT%: GOSUB 2725
25575 DX = 0: DY = 4 * DOT%: GOSUB 2725
25600 GOSUB 2350
25625 RETURN
25650 DX% = 6 * DOT%: DY% = 2 * DOT%: GOSUB 25900 'RIGHT ? ARROW
25675 DX = DX%: DY = DY%: GOSUB 2475
25700 DX = 11 * DOT%: DY = -3 * DOT%: GOSUB 2725
25725 DX = -11 * DOT%: DY = 0: GOSUB 2725
25750 DX = 0: DY = 3 * DOT%: GOSUB 2725
25775 GOSUB 2350
25800 RETURN
25825 '
25850 ' GET RELATIVE OFFSETS DX%, DY% FOR THE ISXX COMMANDS
25875 '
25900 ON O1% GOTO 25925, 25950, 25975, 26000, 26025, 26050, 26075, 26100, 26125
25925 DX% = -DX%: DY% = 0: RETURN 'ISTC CASE
25950 DX% = -2 * DX%: DY% = 0: RETURN 'ISTR
25975 DX% = -2 * DX%: RETURN 'ISRC
26000 DX% = -2 * DX%: DY% = 2 * DY%: RETURN'ISBR
26025 DX% = -DX%: DY% = 2 * DY%: RETURN 'ISBC
26050 DX% = 0: DY% = 2 * DY%: RETURN 'ISBL
26075 DX% = 0: RETURN 'ISLC
26100 DX% = 0: DY% = 0: RETURN 'ISTL
26125 DX% = -DX%: RETURN 'ISC
26150 DX = -2 * DOT%: DY = 0: GOSUB 2475 'BXL
26175 GOSUB 32500
26200 DX = -2 * DOT%: DY = 0: GOSUB 2475
26225 DX = XNOW - X + 4 * DOT%: DY = 0: GOSUB 2725: GOTO 2350
26250 DX = 2 * DOT%: DY = 0: GOSUB 2475 'BXR
26275 GOSUB 32500
26300 DX = 2 * DOT%: DY = 0: GOSUB 2475
26325 DX = XNOW + XL - X - 4 * DOT%: DY = 0: GOSUB 2725: GOTO 2350
26350 DX = 0: DY = 2 * DOT%: GOSUB 2475 'BYU
26375 GOSUB 32500
26400 DX = 0: DY = 2 * DOT%: GOSUB 2475
26425 DX = 0: DY = YNOW - Y - 4 * DOT%: GOSUB 2725: GOTO 2350
26450 DX = 0: DY = -2 * DOT%: GOSUB 2475 'BYL
26475 GOSUB 32500
26500 DX = 0: DY = -2 * DOT%: GOSUB 2475
26525 DX = 0: DY = YNOW - YL - Y + 4 * DOT%: GOSUB 2725: GOTO 2350
26550 GOSUB 27875 'ST
26575 SSIZE% = OP%: RETURN
26600 '
26625 ' DRAW CIRCLE
26650 '
26675 GOSUB 27875 'GET RADIUS
26700 R = OP% * S%
26725 DX = 0: DY = 0
26750 GOSUB 3650
26775 RETURN
26800 '
26825 ' DRAW CIRCLE DOTS
26850 '
26875 GOSUB 27875 'GET RADIUS
26900 R = OP% * DOT%
26925 GOTO 26725
26950 '
26975 ' DRAW ARC
27000 '
27025 GOSUB 27875 'GET RADIUS
27050 OP% = OP% * S%
27075 RAD% = OP%
27100 GOSUB 27875 'GET LENGTH AND DIRECTION
27125 AL% = (OP% AND 7) * 45 + 45
27150 IF (OP% AND 8) = 0 THEN AL% = -AL%
27175 DIR% = (OP% AND &H70) \ 16
27200 XC% = ACX(DIR%) * RAD%
27225 YC% = ACY(DIR%) * RAD%
27250 DX = XC%: DY = YC%: D = AL%: GOSUB 3900
27275 I% = OP% AND 15
27300 IF I% = 15 THEN I% = 7: GOTO 27350
27325 IF I% > 7 THEN I% = 14 - I%
27350 I% = I% + DIR%
27375 IF I% > 7 THEN I% = I% - 8
27400 XM% = CINT((XC% + AMX(I%) * RAD%) / 3) * 3
27425 YM% = CINT((YC% + AMY(I%) * RAD%) / 3) * 3
27450 X = X + XM%: Y = Y + YM%
27475 GOTO 2350
27500 '
27525 ' DRAW ARC DOTS
27550 '
27575 GOSUB 27875 'GET RADIUS
27600 OP% = OP% * DOT%
27625 GOTO 27075
27650 '
27675 ' SET SYMBOL BROKEN LINE TYPE
27700 '
27725 GOSUB 27875
27750 SLINTYP% = OP%
27775 RETURN
27800 '
27825 ' PUT NEXT SYMBOL DRAWING OPERATOR OR PARAMETER
27850 ' BYTE INTO OP%
27875 '
27900 P% = P% + 1
27925 IF P% < 17 THEN GOTO 28050
27950 '
27975 GOSUB 1850
28000 FIELD #2, 16 * R% AS DUM$, 16 AS Z$
28025 P% = 1
28050 OP% = ASC(MID$(Z$, P%, 1))
28075 RETURN
28100 '
28125 ' GET NEXT DRAWING COMMAND BYTE AND CONVERT
28150 ' TO 2'S COMPLEMENT INTEGER
28175 '
28200 GOSUB 27875
28225 IF (OP% AND &H80) = 0 THEN RETURN
28250 OP% = OP% OR &HFF00
28275 RETURN
28300 '
28325 ' LINE SEGMENT DEFINITION FIELD
28350 '
28375 DFLAG% = ASC(FLAG$) AND 3
28400 AFLAG% = (ASC(FLAG$) AND &HC) / 4
28425 Z% = ASC(Z$)
28450 X1 = X + XL 'GET LINE END-POINTS
28475 Y1 = Y - YL
28500 ADX = 0: ADX1 = 0: ADY = 0: ADY1 = 0
28525 IF XL = 0 THEN 28625
28550 IF (AFLAG% AND 1) <> 0 THEN ADX = 4 * DOT%
28575 IF (AFLAG% AND 2) <> 0 THEN ADX1 = -4 * DOT%
28600 GOTO 28675
28625 IF (AFLAG% AND 1) <> 0 THEN ADY = -4 * DOT%
28650 IF (AFLAG% AND 2) <> 0 THEN ADY1 = 4 * DOT%
28675 D1 = ABS(X - XNOW) + ABS(Y - YNOW)
28700 D2 = ABS(X1 - XNOW) + ABS(Y1 - YNOW)
28725 IF D1 < D2 THEN GOTO 28900
28750 SWAP X, X1
28775 SWAP Y, Y1
28800 SWAP ADX, ADX1
28825 SWAP ADY, ADY1
28850 IF (DFLAG% = 1) OR (DFLAG% = 2) THEN DFLAG% = 3 - DFLAG%
28875 IF (AFLAG% = 1) OR (AFLAG% = 2) THEN AFLAG% = 3 - AFLAG%
28900 IF (X = XNOW) AND (Y = YNOW) THEN 28975
28925 GOSUB 2350 'MOVE XY ABS
28950 XNOW = X: YNOW = Y
28975 IF (DFLAG% AND 1) = 1 THEN GOSUB 30250
29000 IF (AFLAG% AND 1) = 1 THEN GOSUB 30375
29025 X = X1: Y = Y1
29050 IF Z% = 2 THEN GOSUB 3450: GOSUB 2600: GOSUB 3250: GOTO 29325
29075 IF Z% = 3 THEN GOSUB 3350: GOSUB 2600: GOSUB 3250: GOTO 29325
29100 IF Z% = 4 THEN GOSUB 3550: GOSUB 2600: GOSUB 3250: GOTO 29325
29125 GOSUB 2600
29150 IF Z% <> 1 THEN GOTO 29325
29175 DYB = DOT%: DXB = 0
29200 IF XL = 0 THEN SWAP DYB, DXB
29225 GOSUB 31700 'PLOT WIDE BUSS LINE
29250 IF SCALE < 1.2 THEN 29325
29275 DX = CINT(DX * .5): DY = CINT(DY * .5)
29300 GOSUB 31700 'FILL IN BUSS LINES ON EXPANDED PLOTS
29325 X = XNOW: Y = YNOW: XNOW = X1: YNOW = Y1
29350 IF (DFLAG% AND 2) = 2 THEN GOSUB 30250
29375 IF (AFLAG% AND 2) = 2 THEN GOSUB 30375
29400 GOTO 7375
29425 '
29450 ' ALPHANUMERIC FIELD DEFINITION
29475 '
29500 SIZE% = (ASC(ID$) AND &HE0) \ 32
29525 I% = INSTR(Z$, CHR$(0))
29550 IF I% = 0 THEN I% = 5 ELSE I% = I% - 1
29575 ALF$ = MID$(Z$, 1, I%)
29600 FLAG% = ASC(FLAG$) AND &H7F
29625 NFLAG% = ASC(FLAG$) AND &H80
29650 IF FLAG% > 99 THEN GOTO 30150
29675 IF SIZE% = 0 THEN CH% = 5: CW% = 6: DX = 2 * DOT%: DY = -6 * DOT%: GOTO 29750
29700 IF SIZE% = 1 THEN CH% = 7: CW% = 7: DX = 2 * DOT%: DY = -9 * DOT%: GOTO 29750
29725 CH% = 9: CW% = 8: DX = DOT%: DY = -11 * DOT%
29750 GOSUB 2350: XNOW = X: YNOW = Y: GOSUB 2475: GOSUB 2850
29775 B% = B% - 1
29800 IF B% = 0 THEN GOSUB 4000: GOTO 30000
29825 GOSUB 1850 'READ NEXT BLOCK
29850 FIELD #2, R% * 16 AS DUM$, 16 AS Z$
29875 I% = INSTR(Z$, CHR$(0))
29900 IF I% = 1 THEN GOTO 29775
29925 IF I% = 0 THEN I% = 16 ELSE I% = I% - 1
29950 ALF$ = ALF$ + MID$(Z$, 1, I%)
29975 GOTO 29775
30000 IF NFLAG% = &H80 THEN GOTO 30075 'OVERBAR
30025 GOSUB 2350 'MOVE XY ABS
30050 GOTO 7375
30075 DY = -DY - DOT%: DX = -DOT%: GOSUB 2475 'MOVE XY REL
30100 Y = Y - DOT%: GOSUB 2600: Y = Y + DOT%: GOSUB 2350
30125 GOTO 7375
30150 B% = B% - 1
30175 IF B% = 0 THEN GOTO 7375
30200 GOSUB 1850
30225 GOTO 30150
30250 '
30275 ' DRAW A "DOT" ON A LINE
30300 '
30325 IF Z% = 1 THEN 32900 'LARGE DOT ON A LINE
30350 GOTO 32625 'SMALL DOT
30375 '
30400 'DRAW ARROWS AT THE ENDS OF LINE SEGMENTS
30425 '
30450 IF YL = 0 THEN 31050 'LINE IS HORIZONTAL
30475 IF YNOW = Y1 THEN 31025
30500 IF Y1 < Y THEN 30775
30525 DX = -3 * DOT%: DY = 11 * DOT%: GOSUB 2725 'DOWN ARROW
30550 DX = 6 * DOT%: DY = 0: GOSUB 2725
30575 DX = -3 * DOT%: DY = -11 * DOT%: GOSUB 2725
30600 DX = -2 * DOT%: DY = 11 * DOT%: GOSUB 2725
30625 DX = 4 * DOT%: DY = 0: GOSUB 2725
30650 DX = -2 * DOT%: DY = -11 * DOT%: GOSUB 2725
30675 DX = -DOT%: DY = 11 * DOT%: GOSUB 2725
30700 DX = 2 * DOT%: DY = 0: GOSUB 2725
30725 DX = -DOT%: DY = -3 * DOT%: GOSUB 2725
30750 GOTO 2850
30775 DX = -3 * DOT%: DY = -11 * DOT%: GOSUB 2725'UP ARROW
30800 DX = 6 * DOT%: DY = 0: GOSUB 2725
30825 DX = -3 * DOT%: DY = 11 * DOT%: GOSUB 2725
30850 DX = -2 * DOT%: DY = -11 * DOT%: GOSUB 2725
30875 DX = 4 * DOT%: DY = 0: GOSUB 2725
30900 DX = -2 * DOT%: DY = 11 * DOT%: GOSUB 2725
30925 DX = -DOT%: DY = -11 * DOT%: GOSUB 2725
30950 DX = 2 * DOT%: DY = 0: GOSUB 2725
30975 DX = -DOT%: DY = 11 * DOT%: GOSUB 2725
31000 GOTO 2850
31025 IF Y < Y1 THEN 30775 ELSE 30525
31050 IF XNOW = X1 THEN 31600
31075 IF X1 < X THEN 31350
31100 DX = 11 * DOT%: DY = -3 * DOT%: GOSUB 2725'LEFT ARROW
31125 DX = 0: DY = 6 * DOT%: GOSUB 2725
31150 DX = -11 * DOT%: DY = -3 * DOT%: GOSUB 2725
31175 DX = 11 * DOT%: DY = -2 * DOT%: GOSUB 2725
31200 DX = 0: DY = 4 * DOT%: GOSUB 2725
31225 DX = -11 * DOT%: DY = -2 * DOT%: GOSUB 2725
31250 DX = 11 * DOT%: DY = -DOT%: GOSUB 2725
31275 DX = 0: DY = 2 * DOT%: GOSUB 2725
31300 DX = -11 * DOT%: DY = -DOT%: GOSUB 2725
31325 GOTO 2850
31350 DX = -11 * DOT%: DY = -3 * DOT%: GOSUB 2725'RIGHT ARROW
31375 DX = 0: DY = 6 * DOT%: GOSUB 2725
31400 DX = 11 * DOT%: DY = -3 * DOT%: GOSUB 2725
31425 DX = -11 * DOT%: DY = -2 * DOT%: GOSUB 2725
31450 DX = 0: DY = 4 * DOT%: GOSUB 2725
31475 DX = 11 * DOT%: DY = -2 * DOT%: GOSUB 2725
31500 DX = -11 * DOT%: DY = -DOT%: GOSUB 2725
31525 DX = 0: DY = 2 * DOT%: GOSUB 2725
31550 DX = 11 * DOT%: DY = -DOT%: GOSUB 2725
31575 GOTO 2850
31600 IF X < X1 THEN 31350 ELSE 31100
31625 '
31650 ' PLOT BROAD BUSS LINES
31675 '
31700 X = X1 + DXB + ADX1: Y = Y1 + DYB + ADY1: GOSUB 2600
31725 X = XNOW + DXB + ADX: Y = YNOW + DYB + ADY: GOSUB 2600
31750 X = XNOW - DXB + ADX: Y = YNOW - DYB + ADY: GOSUB 2600
31775 X = X1 - DXB + ADX1: Y = Y1 - DYB + ADY1: GOSUB 2600
31800 X = X1: Y = Y1: GOSUB 2600
31825 RETURN
31850 '
31875 ' FILL CENTER OF SMALL DOT
31900 '
31925 DX = DOT%: DY = DOT%: GOSUB 2725
31950 DX = -2 * DOT%: DY = 0: GOSUB 2725
31975 SWAP DX, DY: GOSUB 2725
32000 DX = 2 * DOT%: DY = 0: GOSUB 2725
32025 SWAP DX, DY: GOSUB 2725
32050 DX = -DOT%: DY = DX: GOSUB 2475
32075 GOTO 3050
32100 '
32125 ' DRAW BUBBLE SUBROUTINE
32150 '
32175 DX = BX% * DOT%: DY = BY% * DOT%: GOSUB 2475
32200 DX = -BP% * DOT%: DY = 0: GOSUB 2725
32225 DX = -DOT%: DY = DX: GOSUB 2725
32250 DX = 0: DY = -BP% * DOT%: GOSUB 2725
32275 DX = DOT%: DY = -DX: GOSUB 2725
32300 DX = BP% * DOT%: DY = 0: GOSUB 2725
32325 DX = DOT%: DY = DX: GOSUB 2725
32350 DX = 0: DY = BP% * DOT%: GOSUB 2725
32375 DX = -DOT%: DY = -DX: GOSUB 2725
32400 DX = -BX% * DOT%: DY = -BY% * DOT%: GOSUB 2475
32425 GOTO 2850
32450 '
32475 ' DRAW SMALL BUBBLE
32500 '
32525 BX% = 1: BY% = 2: BP% = 2
32550 GOTO 32150
32575 '
32600 ' DRAW SMALL DOT
32625 '
32650 GOSUB 31900 'FILL CENTER
32675 GOTO 32500 'DRAW SMALL BUBBLE
32700 '
32725 ' DRAW LARGE DOT SYMBOL (NOT ON A LINE)
32750 '
32775 GOSUB 32625 'DRAW SMALL DOT
32800 BX% = 2: BY% = 3: BP% = 4
32825 GOTO 32150 'DRAW LARGE BUBBLE
32850 '
32875 ' DRAW LARGE DOT ON BUSS LINE
32900 '
32925 GOTO 32625 'DRAW SMALL DOT
32950 IF ERL = 1225 THEN PRINT "File "; F$; " not found!": RESUME 1150
32975 IF ERR = 24 THEN BEEP: BEEP: BEEP: RESUME
33000 PRINT "ERROR "; ERR; "IN LINE "; ERL: STOP
33025 IF ERL = 4300 THEN RESUME 4300
33050 STOP