home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / misc / plothp.bak < prev    next >
Text File  |  1986-06-13  |  46KB  |  1,327 lines

  1. 25 '
  2. 50 '    FUTURENET HP PLOTTER PROGRAM VERSION 1.00 JANUARY 25, 1984
  3. 75 '    COPYRIGHT 1984, FUTURENET CORPORATION
  4. 100 '
  5. 125 CLEAR ,,8096
  6. 150 ROOT3 = SQR(3)
  7. 175 C = SQR(2)/2
  8. 200 DEF FNCAP$(ARG$) = CHR$(ASC(ARG$) AND &H5F)
  9. 225 '
  10. 250 '   DRAW ARC RELATIVE CENTER AND ENDPOINT ARRAY
  11. 275 '
  12. 300 ACX(0) = 0  : ACY(0) = 1    : AMX(0) = -C   : AMY(0) = -C
  13. 325 ACX(1) = C  : ACY(1) = C    : AMX(1) = -1   : AMY(1) = 0
  14. 350 ACX(2) = 1  : ACY(2) = 0    : AMX(2) = -C   : AMY(2) = C
  15. 375 ACX(3) = C  : ACY(3) = -C   : AMX(3) = 0    : AMY(3) = 1
  16. 400 ACX(4) = 0  : ACY(4) = -1   : AMX(4) = C    : AMY(4) = C
  17. 425 ACX(5) = -C : ACY(5) = -C   : AMX(5) = 1    : AMY(5) = 0
  18. 450 ACX(6) = -1 : ACY(6) = 0    : AMX(6) = C    : AMY(6) = -C
  19. 475 ACX(7) = -C : ACY(7) = C    : AMX(7) = 0    : AMY(7) = -1
  20. 500 '
  21. 525 '   7580B, 7585B P1,P2 COORDINATES FOR EACH PAPER SIZE
  22. 550 '
  23. 575 PSX(0) = 5588       : PSY(0) = 4318         'A SIZE 11 X 8.5
  24. 600 PSX(1) = 8636       : PSY(1) = 5588         'B SIZE 17 X 11
  25. 625 PSX(2) = 11176      : PSY(2) = 8636         'C SIZE 22 X 17
  26. 650 PSX(3) = 17272      : PSY(3) = 11176        'D SIZE 34 X 22
  27. 675 PSX(4) = 22352      : PSY(4) = 17272        'E SIZE 44 X 34
  28. 700 '
  29. 725 INCR% = 1016                'PLOTTER RESOLUTION, PARTS PER INCH
  30. 750 DU% = 20                    'DASH-1 DRAWING UNITS PER INCH
  31. 775 S%=4*((INCR%/DU%+3)\4)     'SCALE, PLOTTER UNITS PER DASH-1 DRAWING UNIT
  32. 800 S = INCR%/DU%
  33. 825 DOT% = S%\4                'PLOT UNITS PER DASH-1 DOT
  34. 850 DD% = DU%*4                'DASH-1 DOTS PER INCH
  35. 875 CSIZEP = INCR%/(DD%*7)     'CONVERT DOTS TO CHARACTER SIZE INCREMENT
  36. 900 CLS                        'CLEAR SCREEN
  37. 925 PRINT : PRINT "FutureNet HP Plotter Program." : PRINT "Version 1.00 Copyright 1984, FutureNet Corporation." : PRINT
  38. 950 PRINT "Turn plotter power on and load with paper and pen. SELECT A PEN!"
  39. 975 INPUT "Press ENTER key when ready.",A$
  40. 1000 OPEN "COM2:9600,S,7,1,RS,CS65535,DS,CD" AS #1 'INITIALIZE SERIAL PORT
  41. 1025 GOSUB 4100         'GET PLOTTER MODEL
  42. 1050 XNOW = 0 : YNOW = 0
  43. 1075 GOSUB 4675         'GET DRAWING SURFACE ORIENTATION
  44. 1100 GOSUB 5150         'SET AXIS ORIENTATION
  45. 1125 ON ERROR GOTO 32950
  46. 1150 INPUT "Enter DASH-1 plotting file name [PLOT.DPL] ",F$
  47. 1175 IF LEN(F$) = 0 THEN F$ = "PLOT.DPL" : GOTO 1225
  48. 1200 IF INSTR(1,F$,".") = 0 THEN F$=F$+".DPL"
  49. 1225 OPEN F$ FOR INPUT AS #2  'EXISTING FILE CHECK
  50. 1250 CLOSE 2
  51. 1275 OPEN F$ AS #2 LEN=128
  52. 1300 R% = 7
  53. 1325 GOSUB 1850 'READ FIRST RECORD
  54. 1350 FIELD #2,1 AS ID$,1 AS B$,1 AS DUM$,2 AS FID$,2 AS DUM$,2 AS X$,2 AS Y$
  55. 1375 ID% = ASC(ID$)
  56. 1400 B% = ASC(B$)
  57. 1425 FID% = CVI(FID$)
  58. 1450 X% = CVI(X$)       'INPUT DRAWING SIZE, D.U.'S
  59. 1475 Y% = CVI(Y$)
  60. 1500 IF (ID% <> 4) OR (FID% <> &H121) THEN PRINT "File ";F$;" is not a plotting file!":CLOSE 2 : GOTO 1150
  61. 1525 PRINT "Plotting file ";F$;" is ";X%/20;"by ";Y%/20;"inches."
  62. 1550 X = X%*S% : XSIZE = X%*S 'CONVERT INPUT DRAWING SIZE TO PLOTTER UNITS
  63. 1575 Y = Y%*S% : YSIZE = Y%*S
  64. 1600 YMAXD = Y
  65. 1625 GOSUB 5375         'GET DESIRED OUTPUT SIZE
  66. 1650 GOSUB 6025         'CHECK FOR 7475 MAXIMUM LIMITATION
  67. 1675 GOSUB 6325         'SET INPUT DRAWING SCALE POINTS
  68. 1700 GOSUB 6475         'CHECK SCALING, SET P1, P2
  69. 1725 PRINT "Plotting..."
  70. 1750 PRINT #1,"SP0;"    'SELECT PEN 1
  71. 1754 print #1,"VS 10;"  'slow the pen velocity from default of 38 cm/s
  72. 1775 GOTO 7350
  73. 1800 '
  74. 1825 '  READ NEXT 16 BYTE BLOCK
  75. 1850 '
  76. 1875 R% = R% +1
  77. 1900 IF R% < 8 THEN RETURN
  78. 1925 GET #2
  79. 1950 R% = 0
  80. 1975 RETURN
  81. 2000 '
  82. 2025 '  DEFINE FIELD TO OBTAIN PARAMETERS
  83. 2050 '
  84. 2075 R16% = R%*16
  85. 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$
  86. 2125 ID% = ASC(ID$) AND 7
  87. 2150 B% = ASC(B$)
  88. 2175 X = S%*CVI(X$)
  89. 2200 Y = YMAXD-S%*CVI(Y$)
  90. 2225 XL = S%*CVI(XL$)
  91. 2250 YL = S%*CVI(YL$)
  92. 2275 RETURN
  93. 2300 '
  94. 2325 '  PEN UP, MOVE PEN TO X, Y, ABSOLUTE MODE, LEAVE PEN UP
  95. 2350 '
  96. 2375 PRINT #1,"PU;PA";X;",";Y;";"
  97. 2400 RETURN
  98. 2425 '
  99. 2450 '  PEN UP, MOVE PEN TO DX, DY, RELATIVE MODE, LEAVE PEN UP
  100. 2475 '
  101. 2500 PRINT #1,"PU;PR";DX;",";DY;";"
  102. 2525 RETURN
  103. 2550 '
  104. 2575 '  PEN DOWN, DRAW TO X,Y, ABSOLUTE MODE, LEAVE PEN DOWN
  105. 2600 '
  106. 2625 PRINT #1,"PD;PA";X;",";Y;";"
  107. 2650 RETURN
  108. 2675 '
  109. 2700 '  PEN DOWN, DRAW TO DX,DY, RELATIVE MODE, LEAVE PEN DOWN
  110. 2725 '
  111. 2750 PRINT #1,"PD;PR";DX;",";DY;";"
  112. 2775 RETURN
  113. 2800 '
  114. 2825 '  SET ABSOLUTE MODE
  115. 2850 '
  116. 2875 RETURN
  117. 2900 '
  118. 2925 '  SET RELATIVE MODE
  119. 2950 '
  120. 2975 RETURN
  121. 3000 '
  122. 3025 '  PEN UP
  123. 3050 '
  124. 3075 PRINT #1,"PU;" : RETURN
  125. 3100 '
  126. 3125 '  PEN DOWN
  127. 3150 '
  128. 3175 PRINT #1,"PD;" : RETURN
  129. 3200 '
  130. 3225 '  SET SOLID LINE MODE
  131. 3250 '
  132. 3275 PRINT #1,"LT;" : RETURN
  133. 3300 '
  134. 3325 '  SET DOTTED LINE MODE
  135. 3350 '
  136. 3375 PRINT #1,"LT 1,";4*DOT%*LTPARM;";" : RETURN
  137. 3400 '
  138. 3425 '  SET DASHED LINE MODE
  139. 3450 '
  140. 3475 PRINT #1,"LT 2,";4*DOT%*LTPARM;";" : RETURN
  141. 3500 '
  142. 3525 '  SET WIDE DASHED LINE MODE
  143. 3550 '
  144. 3575 PRINT #1,"LT 3,";12*DOT%*LTPARM;";" : RETURN
  145. 3600 '
  146. 3625 '  CIRCLE PLOT RELATIVE MODE
  147. 3650 '
  148. 3675 PRINT #1,"PU;PR";DX;",";DY;";"
  149. 3700 PRINT #1,"CI";R;";";"PU;PR";-DX;",";-DY;";"
  150. 3725 RETURN
  151. 3750 '
  152. 3775 '  ARC PLOT ABSOLUTE MODE
  153. 3800 '
  154. 3825 PRINT #1,"PD;AA";X;",";Y;",";D;";" : RETURN
  155. 3850 '
  156. 3875 '  ARC PLOT RELATIVE MODE
  157. 3900 '
  158. 3925 PRINT #1,"PD;AR";DX;",";DY;",";D;";" : RETURN
  159. 3950 '
  160. 3975 '  PLOT ALPHANUMERIC STRING
  161. 4000 '
  162. 4025 PRINT #1,"SR";CW%*DOT%/(P2X-P1X)/3*200*SCALE;",";CH%*DOT%/(P2Y-P1Y)*100*SCALE;";"
  163. 4050 PRINT #1,"LB";ALF$+CHR$(3)+";"
  164. 4075 RETURN
  165. 4100 '
  166. 4125 '  GET PLOTTER MODEL DESIGNATION, ANNOUNCE
  167. 4150 '  AND SET MODEL% ACCORDINGLY
  168. 4175 '
  169. 4200 RETRY = 0
  170. 4225 PRINT #1, "IN; OI;"        'ASK FOR MODEL ID
  171. 4250 ON ERROR GOTO 33025
  172. 4275 MODEL% = 0
  173. 4300 LINE INPUT #1, MODEL$
  174. 4325 RETRY = RETRY + 1
  175. 4350 IF MODEL$ = "7475A" THEN MODEL% = 1 : S = 51
  176. 4375 IF MODEL$ = "7580B" THEN MODEL% = 2
  177. 4376 IF MODEL$ = "7580A" THEN MODEL% = 2
  178. 4400 IF MODEL$ = "7585B" THEN MODEL% = 3
  179. 4425 IF MODEL% = 0 THEN 4500
  180. 4450 PRINT "Model ";MODEL$;" Plotter."
  181. 4475 RETURN
  182. 4500 IF RETRY = 1 THEN 4225
  183. 4525 PRINT "Unable to interface to Model "+MODEL$+" HP Plotter."
  184. 4550 INPUT "Retry or Abort [R]/A?",A$
  185. 4575 IF LEN(A$) = 0 THEN 4225
  186. 4600 A$ = FNCAP$(A$)
  187. 4625 IF A$ = "R" THEN 4225
  188. 4650 IF A$ = "A" THEN SYSTEM ELSE 4500
  189. 4675 '
  190. 4700 '  GET DRAWING SURFACE SIZE, SET XMAX, YMAX IN PLOTTER UNITS
  191. 4725 '
  192. 4750 ON MODEL% GOTO 4775, 4950, 4950
  193. 4775 INPUT "Enter letter size of paper loaded: ",PSIZE$
  194. 4800 IF LEN(PSIZE$) = 0 THEN 4900
  195. 4825 PSIZE$ = FNCAP$(PSIZE$)
  196. 4850 IF PSIZE$ = "A" THEN PRINT #1, "PS4;" : GOTO 4950
  197. 4875 IF PSIZE$ = "B" THEN PRINT #1, "PS1;" : GOTO 4950
  198. 4900 PRINT "Paper size is improper."
  199. 4925 GOTO 4775
  200. 4950 PRINT #1, "OP;"    'ASK FOR P1, P2 COORDINATES
  201. 4975 INPUT #1, P1X,P1Y,P2X,P2Y
  202. 5000 XMAX = P2X-P1X
  203. 5025 YMAX = P2Y-P1Y
  204. 5050 XMAXIN = XMAX/INCR%
  205. 5075 YMAXIN = YMAX/INCR%
  206. 5100 PRINT "P1, P2 area is ";XMAXIN;" by ";YMAXIN;" inches."
  207. 5125 RETURN
  208. 5150 '
  209. 5175 '  SET AXIS ORIENTATION
  210. 5200 '
  211. 5225 ON MODEL% GOTO 5350,5250,5250
  212. 5250 IF XMAX > YMAX THEN RETURN
  213. 5275 PRINT #1,"RO90;"
  214. 5300 SWAP P1X,P1Y : SWAP P2X,P2Y : SWAP XMAX,YMAX
  215. 5325 PRINT #1, "IP";P1X,P1Y,P2X,P2Y;";"
  216. 5350 RETURN
  217. 5375 '
  218. 5400 '  GET DESIRED OUTPUT DRAWING SIZE
  219. 5425 '
  220. 5450 INPUT "Do you want to change the output drawing size Y/[N]";A$
  221. 5475 IF LEN(A$) = 0 THEN 5750
  222. 5500 A$ = FNCAP$(A$)
  223. 5525 IF A$ = "N" THEN 5750
  224. 5550 INPUT "Enter desired output drawing letter size: ",DSIZE$
  225. 5575 IF LEN(DSIZE$) = 0 THEN 5775
  226. 5600 DSIZE$ = FNCAP$(DSIZE$)
  227. 5625 IF (DSIZE$ < "A") OR (DSIZE$ > "E") THEN PRINT "Output letter size improper." : GOTO 5550
  228. 5650 I% = ASC(DSIZE$) - ASC("A")
  229. 5675 XSIZEOUT = 2*PSX(I%)
  230. 5700 YSIZEOUT = 2*PSY(I%)
  231. 5725 GOTO 5850
  232. 5750 XSIZEOUT = XSIZE : YSIZEOUT = YSIZE : SCALE = 1 : RETURN
  233. 5775 INPUT "Enter output drawing size width, height in inches:", XWID,YHGT
  234. 5800 XSIZEOUT = XWID*INCR%
  235. 5825 YSIZEOUT = YHGT*INCR%
  236. 5850 '
  237. 5875 ' PROPORTIONALIZE OUTPUT SIZE TO INPUT SIZE
  238. 5900 '
  239. 5925 SCALE = YSIZEOUT/YSIZE : TEMP = SCALE*XSIZE
  240. 5950 IF TEMP <= XSIZEOUT THEN XSIZEOUT = TEMP : RETURN
  241. 5975 SCALE = XSIZEOUT/XSIZE : YSIZEOUT = SCALE*YSIZE
  242. 6000 RETURN
  243. 6025 '
  244. 6050 ' CHECK TO NOT EXCEED 7475 PLOTTING AREA LIMITATIONS
  245. 6075 '
  246. 6100 IF MODEL% <> 1 THEN RETURN
  247. 6125 IF PSIZE$ = "B" THEN 6200
  248. 6150 IF (XSIZEOUT <= 10365) AND (YSIZEOUT <= 7962) THEN RETURN
  249. 6175 XSIZEOUT = 10365 : YSIZEOUT = 7962 : GOTO 6250
  250. 6200 IF (XSIZEOUT <= 16640) AND (YSIZEOUT <= 10365) THEN RETURN
  251. 6225 XSIZEOUT = 16640 : YSIZEOUT = 10365
  252. 6250 GOSUB 5900
  253. 6275 XMAX = XSIZEOUT : YMAX = YSIZEOUT
  254. 6300 RETURN
  255. 6325 '  CALCULATE INPUT DRAWING SCALE POINTS
  256. 6350 '
  257. 6375 SCX1 = 0 : SCY1 = 0
  258. 6400 SCX2 = X : SCY2 = Y
  259. 6425 PRINT #1,"SC ";SCX1;SCX2;SCY1;SCY2;";"
  260. 6450 RETURN
  261. 6475 '
  262. 6500 ' SEE IF DRAWING WILL FIT
  263. 6525 '
  264. 6550 IF XSIZEOUT > XMAX THEN 6600
  265. 6575 IF YSIZEOUT <= YMAX THEN XMAX = XSIZEOUT : YMAX = YSIZEOUT : GOTO 7050
  266. 6600 '
  267. 6625 ' DRAWING DOES NOT FIT
  268. 6650 '
  269. 6675 IF MODEL% = 1 THEN XMAX=XSIZEOUT : YMAX=YSIZEOUT : GOTO 7025
  270. 6676 PRINT "Output drawing will not fit on drawing surface."
  271. 6700 INPUT "Do you want to scale or clip [S]/C";A$
  272. 6725 IF LEN(A$) = 0 THEN 6800
  273. 6750 A$ = FNCAP$(A$)
  274. 6775 IF A$ = "C" THEN XMAX = XSIZEOUT : YMAX = YSIZEOUT : GOTO 7025
  275. 6776 IF A$ <> "S" THEN GOTO 6700
  276. 6800 '
  277. 6825 '  CHECK SCALING AND SET P1, P2 SO THAT
  278. 6850 '  MAGNIFICATION IS EQUAL FOR X AND Y
  279. 6875 '
  280. 6900 SCALE1 = YMAX/YSIZEOUT
  281. 6925 TEMP = SCALE1*XSIZEOUT
  282. 6950 IF TEMP <= XMAX THEN XMAX = TEMP : GOTO 7025
  283. 6975 SCALE1 = XMAX/XSIZEOUT
  284. 7000 YMAX = SCALE1*YSIZEOUT
  285. 7025 SCALE = YMAX/YSIZE
  286. 7050 ON MODEL% GOTO 7075, 7150, 7150
  287. 7075 P1X = 0 : P1Y = 0
  288. 7100 P2X = XMAX : P2Y = YMAX
  289. 7125 GOTO 7200
  290. 7150 P1X = -XMAX/2 : P1Y = -YMAX/2
  291. 7175 P2X = -P1X : P2Y = -P1Y
  292. 7200 PRINT #1, "IP ";P1X;P1Y;P2X;P2Y;";"
  293. 7225 DIAG = SQR((P2X-P1X)^2+(P2Y-P1Y)^2)
  294. 7250 LTPARM = SCALE*100/DIAG
  295. 7275 RETURN
  296. 7300 '
  297. 7325 '  READ BLOCK AND BRANCH ON ID
  298. 7350 '
  299. 7375 GOSUB 1850
  300. 7400 GOSUB 2050
  301. 7425 ON ID% GOTO 7500,28300,29425
  302. 7450 IF ID% = 0 THEN PRINT #1,"PU;PA0,0;SP0;" : PRINT "Plot finished." : CLOSE  : SYSTEM
  303. 7475 PRINT "Illegal field type ";ID%;" encountered, plot aborted! " : SYSTEM
  304. 7500    '
  305. 7525    ' SYMBOL DEFINITION FIELD
  306. 7550    '
  307. 7575 C% = CVI(MID$(Z$,3,2))
  308. 7600 GOSUB 2050 'GET SYMBOL PARAMETERS
  309. 7625 GOSUB 2350        ;MOVE TO X,Y
  310. 7650 XNOW = X : YNOW = Y       'SAVE SYMBOL ORIGIN
  311. 7675 INC% = 0   'DOT INCREMENT FLAG
  312. 7700 SSIZE% = -1 : SLINTYP% = 2
  313. 7725 P% = 16
  314. 7750 GOSUB 27875        'GET NEXT DRAW COMMAND
  315. 7775 IF (OP% AND &HC0) = &H80 THEN 8925 'DRAW DOTS
  316. 7800 IF (OP% AND &H80) <> 0 THEN 8075  'NON "SHORT" COMMAND
  317. 7825 '
  318. 7850 '  DXS, DYS, MXS, OR MYS COMMAND
  319. 7875 '
  320. 7900 DU% = OP% AND &H1F
  321. 7925 IF (DU% AND &H10) <> 0 THEN DU% = DU% OR &HFFE0 'EXTEND SIGN
  322. 7950 O% = (OP% AND &HE0)\32+1
  323. 7975 ON O% GOSUB 8450,8675,8775,8850
  324. 8000 GOTO 7750
  325. 8025 GOSUB 2350 : XNOW = X : YNOW = Y : GOTO 7350 ' END OF SYMBOL DEF'N
  326. 8050 PRINT "Unknown symbol drawing command, plot aborted!" : SYSTEM
  327. 8075 O% = (OP% AND &H70)\16 - 3
  328. 8100 O1% = (OP% AND &HF) + 1
  329. 8125 '
  330. 8150 '  THE FOLLOWING 3 "ON GOSUB" STATEMENTS BRANCH TO A SUBROUTINE
  331. 8175 '  TO PERFORM A DRAWING COMMAND
  332. 8200 '
  333. 8225 ON O% GOTO 8250,8300,8350,8400 'CX, DX, EX, OR FX
  334. 8250 ON O1% GOSUB 9325,9400,9475,9600,9800,9900,9975,10100,10475,10550,19000,19350,19400,19450,19500,19550       'C0 - CF
  335. 8275 GOTO 7750
  336. 8300 ON O1% GOSUB 19600,19675,19750,19875,20000,20075,20150,20275,20350,20425,20450,20475,20500,20625,20650,20725       'D0 - DF
  337. 8325 GOTO 7750
  338. 8350 ON O1% GOSUB 20800,20825,20850,20875,20900,20925,20950,20975,26150,26250,26350,26450,26550,26600,26800,26950       'E0 - EF
  339. 8375 GOTO 7750
  340. 8400 ON O1% GOSUB 27500,27700,8050,8050,8050,8050,8050,8050,8050,8050,8050,8050,8050,8050,8050,8025
  341. 8425 GOTO 7750
  342. 8450 GOSUB 8550         'DXS
  343. 8475 X = X + DU%
  344. 8500 Y = Y - INC%*DOT%
  345. 8525 GOTO 2600
  346. 8550 '
  347. 8575 IF INC% = 0 THEN DU% = DU%*S% : RETURN
  348. 8600 IF DU% < 0 THEN DU% = DU% - 1 ELSE DU% = DU% + 1
  349. 8625 DU% = DU%*DOT%
  350. 8650 RETURN
  351. 8675 GOSUB 8550         'DYS
  352. 8700 X = X + INC%*DOT%
  353. 8725 Y = Y - DU%
  354. 8750 GOTO 2600
  355. 8775 DU% = DU%*S%       'MXS
  356. 8800 X = X + DU%
  357. 8825 GOTO 2350         ,MOVE TO X,Y ABS MODE
  358. 8850 DU% = DU%*S%       'MYS
  359. 8875 Y = Y - DU%
  360. 8900 GOTO 2350         ,MOVE TO X,Y ABS MODE
  361. 8925 '
  362. 8950 '  DRAW DOTS
  363. 8975 '
  364. 9000 D1% = (OP% AND &H38)\8
  365. 9025 GOSUB 9100
  366. 9050 D1% = OP% AND 7
  367. 9075 GOSUB 9100 : GOTO 7750
  368. 9100 ON D1%+1 GOTO 9125, 9150, 9175, 9200, 9225, 9250, 9275, 9300
  369. 9125 Y = Y + DOT% : GOTO 2600
  370. 9150 X = X + DOT% : Y = Y + DOT% : GOTO 2600
  371. 9175 X = X + DOT% : GOTO 2600
  372. 9200 X = X + DOT% : Y = Y - DOT% : GOTO 2600
  373. 9225 Y = Y - DOT% : GOTO 2600
  374. 9250 X = X - DOT% : Y = Y - DOT% : GOTO 2600
  375. 9275 X = X - DOT% : GOTO 2600
  376. 9300 X = X - DOT% : Y = Y + DOT% : GOTO 2600
  377. 9325 GOSUB 28200        'DX
  378. 9350 X = X + OP%*S%
  379. 9375 GOTO 2600
  380. 9400 GOSUB 28200        'DY
  381. 9425 Y = Y - OP%*S%
  382. 9450 GOTO 2600
  383. 9475 GOSUB 28200        'DXY
  384. 9500 X = X + OP%*S%
  385. 9525 GOSUB 28200
  386. 9550 Y = Y - OP%*S%
  387. 9575 GOTO 2600
  388. 9600 GOSUB 28200        'DR
  389. 9625 OP2% = OP%*S%
  390. 9650 GOSUB 28200
  391. 9675 OP% = OP%*S%
  392. 9700 DX = OP2% : DY = 0 : GOSUB 2725
  393. 9725 DX = 0 : DY = -OP% : GOSUB 2725
  394. 9750 DX = -OP2% : DY = 0 : GOSUB 2725
  395. 9775 GOTO 2600
  396. 9800 GOSUB 28200        'MX
  397. 9825 X = X + OP%*S%
  398. 9850 GOSUB 2350
  399. 9875 RETURN
  400. 9900 GOSUB 28200        'MY
  401. 9925 Y = Y - OP%*S%
  402. 9950 GOTO 2350
  403. 9975 GOSUB 28200        'MXY
  404. 10000 X = X + OP%*S%
  405. 10025 GOSUB 28200
  406. 10050 Y = Y - OP%*S%
  407. 10075 GOTO 2350
  408. 10100 GOSUB 28200        'BX
  409. 10125 X = X + OP%*S%
  410. 10150 ON SLINTYP%+1 GOSUB 3250,10225,3450,3350,3550
  411. 10175 GOSUB 2600 : GOSUB 3250
  412. 10200 RETURN
  413. 10225 SDX1 = 0
  414. 10250 IF O% = 1 THEN SDX2 = OP%*S% ELSE SDX2 = OP%*DOT%
  415. 10275 SDY1 = DOT% : SDY2 = 0
  416. 10300 IF (O1% AND 1) = 1 THEN SWAP SDX1,SDY1 : SWAP SDX2,SDY2
  417. 10325 X = X+SDX1-SDX2 : Y = Y+SDY1+SDY2 : GOSUB 2600
  418. 10350 X = X+SDX2 : Y = Y-SDY2 : GOSUB 2600
  419. 10375 X = X-2*SDX1 : Y = Y-2*SDY1 : GOSUB 2600
  420. 10400 X = X-SDX2 : Y = Y+SDY2 : GOSUB 2600
  421. 10425 X = X+SDX1+SDX2 : Y = Y+SDY1-SDY2
  422. 10450 RETURN
  423. 10475 GOSUB 28200        'BY
  424. 10500 Y = Y - OP%*S%
  425. 10525 GOTO 10150
  426. 10550 GOSUB 28200        'IG
  427. 10575 IG% = OP% +1 : IF IG% > 38 THEN RETURN
  428. 10600 '
  429. 10625 '  BRANCH TO THE PROPER ROUTINE TO DRAW A GRAPHICS SYMBOL
  430. 10650 '
  431. 10675 IGX = X : IGY = Y         'SAVE X,Y COORDINATES
  432. 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
  433. 10725 X = IGX : Y = IGY : GOTO 2350     'RESTORE PEN POSITION
  434. 10750  GOSUB 16300       '2 INPUT AND GATE
  435. 10775 OP%=2 : GOSUB 9925 'MY 2
  436. 10800 GOSUB 19400       'DXL
  437. 10825 OP%=3 : GOSUB 9925 'MY 3
  438. 10850 GOSUB 19400       'DXL
  439. 10875 X = X + 9.25*S%
  440. 10900 Y = Y + S%
  441. 10925 GOSUB 2350       'MXY 9.25,-1
  442. 10950 GOTO 19450        'DXR
  443. 10975  GOSUB 16300       '2 INPUT NAND GATE
  444. 11000 OP%=2 : GOSUB 9925 'MY 2
  445. 11025 GOSUB 19400       'DXL
  446. 11050 OP%=3 : GOSUB 9925 'MY 3
  447. 11075 GOSUB 19400       'DXL
  448. 11100 X = X + 9.25*S%
  449. 11125 Y = Y + S%
  450. 11150 GOSUB 2350       'MXY 9.25,-1
  451. 11175 GOTO 26250        'BXR
  452. 11200  GOSUB 16300       '2 INVERTED INPUT AND GATE
  453. 11225 OP%=2 : GOSUB 9925 'MY 2
  454. 11250 GOSUB 26150       'BXL
  455. 11275 OP%=3 : GOSUB 9925 'MY 3
  456. 11300 GOSUB 26150       'BXL
  457. 11325 X = X + 9.25*S%
  458. 11350 Y = Y + S%
  459. 11375 GOSUB 2350       'MXY 9.25,-1
  460. 11400 GOTO 19450        'DXR
  461. 11425  GOSUB 16300       '2 INVERTED INPUT NAND GATE
  462. 11450 OP%=2 : GOSUB 9925 'MY 2
  463. 11475 GOSUB 26150       'BXL
  464. 11500 OP%=3 : GOSUB 9925 'MY 3
  465. 11525 GOSUB 26150       'BXL
  466. 11550 X = X + 9.25*S%
  467. 11575 Y = Y + S%
  468. 11600 GOSUB 2350       'MXY 9.25,-1
  469. 11625 GOTO 26250        'BXR
  470. 11650  GOSUB 16525       '3 INPUT AND GATE
  471. 11675 OP%=1 : GOSUB 9925 'MY 1
  472. 11700 GOSUB 19400       'DXL
  473. 11725 OP%=3 : GOSUB 9925 'MY 3
  474. 11750 GOSUB 19400       'DXL
  475. 11775 OP%=3 : GOSUB 9925 'MY 3
  476. 11800 GOSUB 19400       'DXL
  477. 11825 X = X + 9.25*S%
  478. 11850 Y = Y + 3*S%
  479. 11875 GOSUB 2350       'MXY 9.25,-3
  480. 11900 GOTO 19450        'DXR
  481. 11925  GOSUB 16525       '3 INPUT NAND GATE
  482. 11950 OP%=1 : GOSUB 9925 'MY 1
  483. 11975 GOSUB 19400       'DXL
  484. 12000 OP%=3 : GOSUB 9925 'MY 3
  485. 12025 GOSUB 19400       'DXL
  486. 12050 OP%=3 : GOSUB 9925 'MY 3
  487. 12075 GOSUB 19400       'DXL
  488. 12100 X = X + 9.25*S%
  489. 12125 Y = Y + 3*S%
  490. 12150 GOSUB 2350       'MXY 9.25,-3
  491. 12175 GOTO 26250        'BXR
  492. 12200  GOSUB 16525       '3 INVERTED INPUT AND GATE
  493. 12225 OP%=1 : GOSUB 9925 'MY 1
  494. 12250 GOSUB 26150       'BXL
  495. 12275 OP%=3 : GOSUB 9925 'MY 3
  496. 12300 GOSUB 26150       'BXL
  497. 12325 OP%=3 : GOSUB 9925 'MY 3
  498. 12350 GOSUB 26150       'BXL
  499. 12375 X = X + 9.25*S%
  500. 12400 Y = Y + 3*S%
  501. 12425 GOSUB 2350       'MXY 9.25,-3
  502. 12450 GOTO 19450        'DXR
  503. 12475  GOSUB 16525       '3 INVERTED INPUT NAND GATE
  504. 12500 OP%=1 : GOSUB 9925 'MY 1
  505. 12525 GOSUB 26150       'BXL
  506. 12550 OP%=3 : GOSUB 9925 'MY 3
  507. 12575 GOSUB 26150       'BXL
  508. 12600 OP%=3 : GOSUB 9925 'MY 3
  509. 12625 GOSUB 26150       'BXL
  510. 12650 X = X + 9.25*S%
  511. 12675 Y = Y + 3*S%
  512. 12700 GOSUB 2350       'MXY 9.25,-3
  513. 12725 GOTO 26250        'BXR
  514. 12750  GOSUB 12800               '4 INPUT AND GATE
  515. 12775 GOTO 19450                'DXR
  516. 12800 Y = Y-2*S% : GOSUB 2600  'DYS 2
  517. 12825 GOSUB 16300               'DRAW NARROW AND SYMBOL
  518. 12850 Y = Y+S% : GOSUB 2350    'MYS -1
  519. 12875 GOSUB 19400               'DXL
  520. 12900 Y = Y-3*S% : GOSUB 2600  'DYS 3
  521. 12925 GOSUB 19400               'DXL
  522. 12950 Y = Y-3*S% : GOSUB 2600  'DYS 3
  523. 12975 GOSUB 19400               'DXL
  524. 13000 Y = Y-3*S% : GOSUB 2600  'DYS 3
  525. 13025 GOSUB 19400               'DXL
  526. 13050 Y = Y -S% : GOSUB 2600   'DYS 1
  527. 13075 X = X +9.25*S% : Y = Y+5*S%
  528. 13100 GOTO 2350                'MXY 9.25,-4
  529. 13125 GOSUB 12800               '4 INPUT NAND GATE
  530. 13150 GOTO 26250                'BXR
  531. 13175  GOSUB 13225               '4 INVERTED INPUT AND GATE
  532. 13200 GOTO 19450                'DXR
  533. 13225 Y = Y-2*S% : GOSUB 2600  'DYS 2
  534. 13250 GOSUB 16300               'DRAW NARROW AND SYMBOL
  535. 13275 Y = Y+S% : GOSUB 2350    'MYS -1
  536. 13300 GOSUB 26150               'BXL
  537. 13325 Y = Y-3*S% : GOSUB 2600  'DYS 3
  538. 13350 GOSUB 26150               'BXL
  539. 13375 Y = Y-3*S% : GOSUB 2600  'DYS 3
  540. 13400 GOSUB 26150               'BXL
  541. 13425 Y = Y-3*S% : GOSUB 2600  'DYS 3
  542. 13450 GOSUB 26150               'BXL
  543. 13475 Y = Y -S% : GOSUB 2600   'DYS 1
  544. 13500 X = X +9.25*S% : Y = Y+5*S%
  545. 13525 GOTO 2350                'MXY 9.25,-4
  546. 13550 GOSUB 13225               '4 INVERTED INPUT NAND GATE
  547. 13575 GOTO 26250                'BXR
  548. 13600  GOSUB 13650               '2 INPUT OR GATE
  549. 13625 GOTO 19450                'DXR
  550. 13650 GOSUB 16750
  551. 13675 X = X+3*DOT% : Y = Y-2*S%
  552. 13700 GOSUB 2350               'MXY
  553. 13725 GOSUB 19400               'DXL
  554. 13750 Y = Y -3*S%
  555. 13775 GOSUB 2350               'MXY
  556. 13800 GOSUB 19400               'DXL
  557. 13825 X = X -3*DOT%+WD%
  558. 13850 Y = Y +S%
  559. 13875 GOTO 2350                'MXY
  560. 13900 GOSUB 13650               '2 INPUT NOR GATE
  561. 13925 GOTO 26250                'BXR
  562. 13950  GOSUB 14000               '2 INVERTED INPUT OR GATE
  563. 13975 GOTO 19450                'DXR
  564. 14000 GOSUB 16750
  565. 14025 X = X+3*DOT% : Y = Y-2*S%
  566. 14050 GOSUB 2350               'MXY
  567. 14075 GOSUB 26150               'BXL
  568. 14100 Y = Y -3*S%
  569. 14125 GOSUB 2350               'MXY
  570. 14150 GOSUB 26150               'BXL
  571. 14175 X = X -3*DOT%+WD%
  572. 14200 Y = Y +S%
  573. 14225 GOTO 2350                'MXY
  574. 14250 GOSUB 14000               '2 INVERTED INPUT NOR GATE
  575. 14275 GOTO 26250               'BXR
  576. 14300  GOSUB 14350               '3 INPUT OR GATE
  577. 14325 GOTO 19450                'DXR
  578. 14350 GOSUB 16975
  579. 14375 X = X+2*DOT% : Y = Y - S%
  580. 14400 GOSUB 2350               'MXY
  581. 14425 GOSUB 19400               'DXL
  582. 14450 X = X+2*DOT% : Y = Y-3*S%
  583. 14475 GOSUB 2350               'MXY
  584. 14500 GOSUB 19400               'DXL
  585. 14525 X = X-2*DOT% : Y = Y-3*S%
  586. 14550 GOSUB 2350               'MXY
  587. 14575 GOSUB 19400               'DXL
  588. 14600 X = X -2*DOT%+WD%
  589. 14625 Y = Y +3*S%
  590. 14650 GOTO 2350
  591. 14675 GOSUB 14350               '3 INPUT NOR GATE
  592. 14700 GOTO 26250                'BXR
  593. 14725 GOSUB 14775               '3 INVERTED INPUT OR GATE
  594. 14750 GOTO 19450                'DXR
  595. 14775 GOSUB 16975
  596. 14800 X = X+2*DOT% : Y = Y - S%
  597. 14825 GOSUB 2350               'MXY
  598. 14850 GOSUB 26150               'BXL
  599. 14875 X = X+2*DOT% : Y = Y-3*S%
  600. 14900 GOSUB 2350               'MXY
  601. 14925 GOSUB 26150               'BXL
  602. 14950 X = X-2*DOT% : Y = Y-3*S%
  603. 14975 GOSUB 2350               'MXY
  604. 15000 GOSUB 26150               'BXL
  605. 15025 X = X -2*DOT%+WD%
  606. 15050 Y = Y +3*S%
  607. 15075 GOTO 2350
  608. 15100 GOSUB 14775               '3 INVERTED INPUT NOR GATE
  609. 15125 GOTO 26250                'BXR
  610. 15150 GOSUB 15200               '4 INPUT OR GATE
  611. 15175 GOTO 19450                'DXR
  612. 15200 Y = Y-2*S% : GOSUB 2600  'DXY
  613. 15225 GOSUB 16750
  614. 15250 Y = Y+S% : GOSUB 2350    'MXY
  615. 15275 GOSUB 19400               'DXL
  616. 15300 X = X+3*DOT% : Y = Y -3*S%
  617. 15325 GOSUB 2350               'MXY
  618. 15350 GOSUB 19400               'DXL
  619. 15375 Y = Y - 3*S%
  620. 15400 GOSUB 2350               'MXY
  621. 15425 GOSUB 19400               'DXL
  622. 15450 X = X-3*DOT% : Y = Y-3*S%
  623. 15475 GOSUB 2350               'MXY
  624. 15500 GOSUB 19400               'DXL
  625. 15525 Y = Y -S% : GOSUB 2350
  626. 15550 Y = Y +2*S% : GOSUB 2600 'DXY
  627. 15575 X = X+WD% : Y = Y+3*S%
  628. 15600 GOTO 2350                'MXY
  629. 15625 GOSUB 15200               '4 INPUT NOR GATE
  630. 15650 GOTO 26250                'BXR
  631. 15675 GOSUB 15725               '4 INVERTED INPUT OR GATE
  632. 15700 GOTO 19450                'DXR
  633. 15725 Y = Y-2*S% : GOSUB 2600  'DXY
  634. 15750 GOSUB 16750
  635. 15775 Y = Y+S% : GOSUB 2350    'MXY
  636. 15800 GOSUB 26150               'BXL
  637. 15825 X = X+3*DOT% : Y = Y -3*S%
  638. 15850 GOSUB 2350               'MXY
  639. 15875 GOSUB 26150               'BXL
  640. 15900 Y = Y - 3*S%
  641. 15925 GOSUB 2350               'MXY
  642. 15950 GOSUB 26150               'BXL
  643. 15975 X = X-3*DOT% : Y = Y-3*S%
  644. 16000 GOSUB 2350               'MXY
  645. 16025 GOSUB 26150               'BXL
  646. 16050 Y = Y -S% : GOSUB 2350
  647. 16075 Y = Y +2*S% : GOSUB 2600 'DXY
  648. 16100 X = X+WD% : Y = Y+3*S%
  649. 16125 GOTO 2350                'MXY
  650. 16150 GOSUB 15725               '4 INVERTED INPUT NOR GATE
  651. 16175 GOTO 26250                'BXR
  652. 16200  WD% = 11*S% : HT% = 7*S% 'XOR LINE
  653. 16225 H% = (HT%/2)*ROOT3
  654. 16250 DX = -H% : DY = -HT%/2 : D = -60 : GOSUB 3900 : GOSUB 2850
  655. 16275 GOTO 2350       'MY HT%
  656. 16300  OP% = 7          'NARROW AND SYMBOL
  657. 16325 GOSUB 9425       'DY 7
  658. 16350 X = X + 5.75*S%
  659. 16375 GOSUB 2600
  660. 16400 DX = 0 : DY = 3.5*S% : D = 180 : GOSUB 3900 : GOSUB 2850
  661. 16425 Y = Y + 7*S%
  662. 16450 X = X - 5.75*S%
  663. 16475 GOSUB 2600       'DX -5.75
  664. 16500 RETURN
  665. 16525  OP% = 8          'WIDE AND SYMBOL
  666. 16550 GOSUB 9425       'DY 8
  667. 16575 X = X + 5.25*S%
  668. 16600 GOSUB 2600       'DX 5.25
  669. 16625 DX = 0 : DY = 4*S% : D = 180 : GOSUB 3900 : GOSUB 2850
  670. 16650 Y = Y + 8*S%
  671. 16675 X = X - 5.25*S%
  672. 16700 GOSUB 2600       'DX -5.25
  673. 16725 RETURN
  674. 16750  WD% = 11*S% : HT% = 7*S% 'NARROW OR SYMBOL
  675. 16775 H% = (HT%/2)*ROOT3
  676. 16800 DX = -H% : DY = -HT%/2 : D = -60 : GOSUB 3900 : GOSUB 2850
  677. 16825 DX = WD% - H% : DY = 0
  678. 16850 GOSUB 2725       'DX
  679. 16875 DX = 0 : DY = HT% : D = 55 : GOSUB 3900
  680. 16900 DX = -H%-DOT% : DY = -HT%/2 + 2*DOT% : D = 62 : GOSUB 3900 : GOSUB 2850
  681. 16925 DX = - WD% + H% + DOT% : DY = 0
  682. 16950 GOTO 2725        'DX
  683. 16975 WD% = 11*S% : HT% = 8*S%  'WIDE OR SYMBOL
  684. 17000 H% = (HT%/2)*ROOT3
  685. 17025 DX = -H% : DY = -HT%/2 : D = -60 : GOSUB 3900 : GOSUB 2850
  686. 17050 DY = 0
  687. 17075 DX = WD% - H%
  688. 17100 GOSUB 2725       'DX
  689. 17125 DX = 0 : DY = HT% : D = 60 : GOSUB 3900
  690. 17150 DX = -H% : DY = -HT%/2 : D = 60 : GOSUB 3900 : GOSUB 2850
  691. 17175 DX = - WD% + H% : DY = 0
  692. 17200 GOTO 2725        'DX
  693. 17225 RETURN    'IG 29 UNDEFINED
  694. 17250 X = X-6*DOT% : GOSUB 2350        'HORIZ CAP
  695. 17275 X = X+3*S% : GOSUB 2600
  696. 17300 Y = Y-6*DOT% : GOSUB 2350
  697. 17325 H% = 6*DOT%*ROOT3
  698. 17350 DX = -6*DOT% : DY = -H% : D = 60 : GOSUB 3900 : GOSUB 2850
  699. 17375 X = X-6*DOT% : Y = Y+6*DOT%
  700. 17400 GOSUB 2350 : GOTO 17775
  701. 17425  Y = Y-6*DOT% : GOSUB 2350        'VERTICAL CAP
  702. 17450 Y = Y +3*S% : GOSUB 2600
  703. 17475 X = X+6*DOT% : GOSUB 2350
  704. 17500 H% = 6*DOT%*ROOT3
  705. 17525 DX = H% : DY = -6*DOT% : D = 60 : GOSUB 3900 : GOSUB 2850
  706. 17550 X = X-6*DOT% : Y = Y-6*DOT%
  707. 17575 GOSUB 2350 : GOTO 17775
  708. 17600  X = X+2*DOT% : Y = Y-2*DOT%       'VERTICAL RESISTOR
  709. 17625 GOSUB 2600
  710. 17650 X = X-S% : Y = Y-S%
  711. 17675 GOSUB 2600
  712. 17700 X = X+2*DOT% : Y = Y-2*DOT%
  713. 17725 GOSUB 2600
  714. 17750 OP% = -2 : GOSUB 9925
  715. 17775 GOTO 3050         'PEN UP
  716. 17800  X = X+2*DOT% : Y = Y+2*DOT%       'HORIZONTAL RESISTOR
  717. 17825 GOSUB 2600
  718. 17850 X = X+S% : Y = Y -S%
  719. 17875 GOSUB 2600
  720. 17900 X = X+2*DOT% : Y = Y+2*DOT%
  721. 17925 GOSUB 2600
  722. 17950 OP%=-2 : GOSUB 9825
  723. 17975 GOTO 17775
  724. 18000  OP%=2 : GOSUB 19625      'RIGHT COIL
  725. 18025 DX = 0 : DY = -3*DOT% : D = -180 : GOSUB 3900 : GOSUB 2850
  726. 18050 OP%=6 : GOSUB 20100
  727. 18075 OP%=-2 : GOSUB 19625
  728. 18100 OP%=2 : GOSUB 20025
  729. 18125 DX = 0 : DY = -3*DOT% : D = -180 : GOSUB 3900 : GOSUB 2850
  730. 18150 OP%=6 : GOSUB 20100
  731. 18175 OP%=-2 : GOSUB 19625
  732. 18200 OP%=-3 : GOSUB 9925
  733. 18225 GOTO 17775
  734. 18250 OP%=-2 : GOSUB 19625      'LEFT COIL
  735. 18275 DX = 0 : DY = -3*DOT% : D = 180 : GOSUB 3900 : GOSUB 2850
  736. 18300 OP%=6 : GOSUB 20100
  737. 18325 OP%=2 : GOSUB 19625
  738. 18350 OP%=-2 : GOSUB 20025
  739. 18375 DX = 0 : DY = -3*DOT% : D = 180 : GOSUB 3900 : GOSUB 2850
  740. 18400 OP%=6 : GOSUB 20100
  741. 18425 OP%=2 : GOSUB 19625
  742. 18450 OP%=-3 : GOSUB 9925
  743. 18475 GOTO 17775
  744. 18500  OP%=-2 : GOSUB 19700     'UPPER COIL
  745. 18525 DX = 3*DOT% : DY = 0 : D = -180 : GOSUB 3900 : GOSUB 2850
  746. 18550 OP%=6 : GOSUB 20025
  747. 18575 OP%=2 : GOSUB 19700
  748. 18600 OP%=-2 : GOSUB 20100
  749. 18625 DX = 3*DOT% : DY = 0 : D = -180 : GOSUB 3900 : GOSUB 2850
  750. 18650 OP%=6 : GOSUB 20025
  751. 18675 OP%=2 : GOSUB 19700
  752. 18700 OP%=-3 : GOSUB 9825
  753. 18725 GOTO 17775
  754. 18750  OP%=2 : GOSUB 19700      'LOWER COIL
  755. 18775 DX = 3*DOT% : DY = 0 : D = 180 : GOSUB 3900 : GOSUB 2850
  756. 18800 OP%=6 : GOSUB 20025
  757. 18825 OP%=-2 : GOSUB 19700
  758. 18850 OP%=2 : GOSUB 20100
  759. 18875 DX = 3*DOT% : DY = 0 : D = 180 : GOSUB 3900 : GOSUB 2850
  760. 18900 OP%=6 : GOSUB 20025
  761. 18925 OP%=-2 : GOSUB 19700
  762. 18950 OP%=-3 : GOSUB 9825
  763. 18975 GOTO 17775
  764. 19000 FOR K1% = 1 TO 2          'INSERT DOTS
  765. 19025 GOSUB 27875 'GET PARAMETER
  766. 19050 M%=&H80
  767. 19075 FOR K2% = 1 TO 2
  768. 19100 FOR K3% = 1 TO 4
  769. 19125 IF (OP% AND M%) <> 0 THEN GOSUB 3150 : GOSUB 3050
  770. 19150 DX = DOT% : DY = 0 : GOSUB 2475
  771. 19175 M%= M%/2
  772. 19200 NEXT K3%
  773. 19225 DX = -4*DOT% : DY = -DOT% : GOSUB 2475
  774. 19250 NEXT K2%
  775. 19275 NEXT K1%
  776. 19300 DX = 0 : DY = 4*DOT% : GOSUB 2475
  777. 19325 RETURN
  778. 19350 O1% = 9 : GOTO 20975      'ISC
  779. 19375 RETURN     'TEMP
  780. 19400 DX = XNOW - X : DY = 0 : GOSUB 2725       'DXL
  781. 19425 GOTO 2350
  782. 19450 DX = XNOW + XL - X : DY = 0 : GOSUB 2725    'DXR
  783. 19475 GOTO 2350
  784. 19500 DX = 0 : DY = YNOW - Y : GOSUB 2725       'DYU
  785. 19525 GOTO 2350
  786. 19550 DX = 0 : DY = YNOW - YL - Y : GOSUB 2725  'DYL
  787. 19575 GOTO 2350
  788. 19600 GOSUB 28200       'DXD
  789. 19625 X = X + OP%*DOT%
  790. 19650 GOTO 2600
  791. 19675 GOSUB 28200       'DYD
  792. 19700 Y = Y - OP%*DOT%
  793. 19725 GOTO 2600
  794. 19750 GOSUB 28200       'DXYD
  795. 19775 X = X + OP%*DOT%
  796. 19800 GOSUB 28200
  797. 19825 Y = Y - OP%*DOT%
  798. 19850 GOTO 2600
  799. 19875 GOSUB 28200       'DRD
  800. 19900 OP2% = OP%*DOT%
  801. 19925 GOSUB 28200
  802. 19950 OP% = OP%*DOT%
  803. 19975 GOTO 9700
  804. 20000 GOSUB 28200       'MXD
  805. 20025 X = X + OP%*DOT%
  806. 20050 GOTO 2350
  807. 20075 GOSUB 28200       'MYD
  808. 20100 Y = Y - OP%*DOT%
  809. 20125 GOTO 2350
  810. 20150 GOSUB 28200       'MXYD
  811. 20175 X = X + OP%*DOT%
  812. 20200 GOSUB 28200
  813. 20225 Y = Y - OP%*DOT%
  814. 20250 GOTO 2350
  815. 20275 GOSUB 28200       'BXD
  816. 20300 X = X +OP%*DOT%
  817. 20325 GOTO 10150
  818. 20350 GOSUB 28200       'BYD
  819. 20375 Y = Y - OP%*DOT%
  820. 20400 GOTO 10150
  821. 20425 INC% = 0 : RETURN 'SN
  822. 20450 INC% = 1 : RETURN 'SI
  823. 20475 INC% =-1 : RETURN 'SD
  824. 20500 GOSUB 27900       'MXYA
  825. 20525 X = XNOW + OP%*S%
  826. 20550 GOSUB 27900
  827. 20575 Y = YNOW - OP%*S%
  828. 20600 GOTO 2350
  829. 20625 SSIZE% = -1 : RETURN    'RS
  830. 20650 XSAVE = X         'SXY
  831. 20675 YSAVE = Y
  832. 20700 RETURN
  833. 20725 X = XSAVE         'RXY
  834. 20750 Y = YSAVE
  835. 20775 GOTO 2350
  836. 20800 'ISTC
  837. 20825 'ISTR
  838. 20850 'ISRC
  839. 20875 'ISBR
  840. 20900 'ISBC
  841. 20925 'ISBL
  842. 20950 'ISLC
  843. 20975 GOSUB 27875       'ISTL
  844. 21000 IF SSIZE% <> -1 THEN GOTO 21625
  845. 21025 IF OP% < 11 THEN RETURN
  846. 21050 IF OP% > 16 THEN GOTO 21850
  847. 21075 ON OP%-10 GOTO 21100,21175,21375,21250,21400,21550
  848. 21100 DX%=2*DOT% : DY%=2*DOT% : GOSUB 25900       'SMALL DOT SYMBOL
  849. 21125 DX = DX%+2*DOT% : DY = DY%-2*DOT% : GOSUB 2475 : GOSUB 32625
  850. 21150 GOTO 2350
  851. 21175 DX%=3*DOT% : DY%=3*DOT% : GOSUB 25900       'LARGE DOT SYMBOL
  852. 21200 DX = DX%+3*DOT% : DY = DY%-3*DOT% : GOSUB 2475 : GOSUB 32750
  853. 21225 GOTO 2350
  854. 21250 DX%=2*DOT% : DY%=3*DOT% : GOSUB 25900       'LEFT CLOCK
  855. 21275 DX = DOT% + DX% : DY = DY% : GOSUB 2475
  856. 21300 DX = 3*DOT% : DY = -3*DOT% : GOSUB 2725
  857. 21325 DX = -3*DOT% : GOSUB 2725
  858. 21350 GOSUB 2350
  859. 21375 RETURN
  860. 21400 DX%=2*DOT% : DY%=3*DOT% : GOSUB 25900       'RIGHT CLOCK
  861. 21425 DX = 3*DOT%+DX% : DY = DY% : GOSUB 2475
  862. 21450 DX = -3*DOT% : DY = -3*DOT% : GOSUB 2725
  863. 21475 DX = 3*DOT% : GOSUB 2725
  864. 21500 GOSUB 2350
  865. 21525 RETURN
  866. 21550 DX% = 2*DOT% : DY% = 2*DOT% : GOSUB 25900   'BUBBLE SYMBOL
  867. 21575 DX = DX%+2*DOT% : DY = DY%-2*DOT% : GOSUB 2475 : GOSUB 32500
  868. 21600 GOTO 2350
  869. 21625 ON SSIZE%+1 GOTO 21650,21675,21700
  870. 21650 DX%=4*DOT% : DY%=4*DOT% : CH% = 5 : CW% = 6 : DX = 2*DOT% : DY = -6*DOT% : GOTO 21725
  871. 21675 DX%=4*DOT% : DY%=6*DOT% : CH% = 7 : CW% = 7 : DX = 2*DOT% : DY = -9*DOT% : GOTO 21725
  872. 21700 DX%=5*DOT% : DY%=8*DOT% : CH% = 9 : CW% = 8 : DX = DOT% : DY = -11*DOT%
  873. 21725 GOSUB 25900
  874. 21750 DX = DX+DX%  : DY = DY+DY% : GOSUB 2475
  875. 21775 ALF$ = CHR$(OP%) : GOSUB 4000
  876. 21800 GOSUB 2350
  877. 21825 RETURN
  878. 21850 IF OP% < 30 THEN RETURN
  879. 21875 IF OP% > 50 THEN RETURN
  880. 21900 IF OP% < 40 THEN ON OP%-29 GOTO 21950,22125,22300,22475,22650,22875,23100,23325,23550,23725
  881. 21925 ON OP%-39 GOTO 23900,24075,24250,24425,24600,24775,24950,25125,25300,25475,25650
  882. 21950 DX%=6*DOT% : DY%=3*DOT% : GOSUB 25900               'BIG RT ARROW
  883. 21975 DX = DX% : DY = DY% : GOSUB 2475
  884. 22000 DX = 11*DOT% : DY = -3*DOT% : GOSUB 2725
  885. 22025 DX = -11*DOT% : DY = -3*DOT% : GOSUB 2725
  886. 22050 DX = 0 : DY = 6*DOT% : GOSUB 2725
  887. 22075 GOSUB 2350
  888. 22100 RETURN
  889. 22125 DX%=6*DOT% : DY%=3*DOT% : GOSUB 25900       'BIG LEFT ARROW
  890. 22150 DX = DX% : DY = DY%-3*DOT% : GOSUB 2475
  891. 22175 DX = 11*DOT% : DY = 3*DOT% : GOSUB 2725
  892. 22200 DX = 0 : DY = -6*DOT% : GOSUB 2725
  893. 22225 DX = -11*DOT% : DY = 3*DOT% : GOSUB 2725
  894. 22250 GOSUB 2350
  895. 22275 RETURN
  896. 22300 DX%=3*DOT% : DY%=6*DOT% : GOSUB 25900       'BIG UP ARROW
  897. 22325 DX = 3*DOT%+DX% : DY = DY% : GOSUB 2475
  898. 22350 DX = 3*DOT% : DY = -11*DOT% : GOSUB 2725
  899. 22375 DX = -6*DOT% : DY = 0 : GOSUB 2725
  900. 22400 DX = 3*DOT% : DY = 11*DOT% : GOSUB 2725
  901. 22425 GOSUB 2350
  902. 22450 RETURN
  903. 22475 DX%=3*DOT% : DY%=6*DOT% : GOSUB 25900       'BIG DOWN ARROW
  904. 22500 DX = DX% : DY = DY% : GOSUB 2475
  905. 22525 DX = 6*DOT% : DY = 0 : GOSUB 2725
  906. 22550 DX = -3*DOT% : DY = -11*DOT% : GOSUB 2725
  907. 22575 DX = -3*DOT% : DY = 11*DOT% : GOSUB 2725
  908. 22600 GOSUB 2350
  909. 22625 RETURN
  910. 22650 DX%=6*DOT% : DY%=4*DOT% : GOSUB 25900       'BIG UP RIGHT ARROW
  911. 22675 DX = DX% : DY = DY%-7*DOT% : GOSUB 2475
  912. 22700 DX = 2*DOT% : DY = 2*DOT% : GOSUB 2725
  913. 22725 DX = 2*DOT% : DY = -2*DOT% : GOSUB 2725
  914. 22750 DX = 7*DOT% : DY = 7*DOT% : GOSUB 2725
  915. 22775 DX = -11*DOT% : DY = -3*DOT% : GOSUB 2725
  916. 22800 DX = 2*DOT% : DY = -2*DOT% : GOSUB 2725
  917. 22825 GOSUB 2350
  918. 22850 RETURN
  919. 22875 DX%=6*DOT% : DY%=4*DOT% : GOSUB 25900       'BIG DOWN RIGHT ARROW
  920. 22900 DX = DX% : DY = DY% : GOSUB 2475
  921. 22925 DX = 2*DOT% : DY = -2*DOT% : GOSUB 2725
  922. 22950 DX = 2*DOT% : DY = 2*DOT% : GOSUB 2725
  923. 22975 DX = 7*DOT% : DY = -7*DOT% : GOSUB 2725
  924. 23000 DX = -11*DOT% : DY = 3*DOT% : GOSUB 2725
  925. 23025 DX = 2*DOT% : DY = 2*DOT% : GOSUB 2725
  926. 23050 GOSUB 2350
  927. 23075 RETURN
  928. 23100 DX%=6*DOT% : DY%=4*DOT% : GOSUB 25900       'BIG DOWN LEFT ARROW
  929. 23125 DX = 11*DOT%+DX% : DY = DY% : GOSUB 2475
  930. 23150 DX = -2*DOT% : DY = -2*DOT% : GOSUB 2725
  931. 23175 DX = -2*DOT% : DY = 2*DOT% : GOSUB 2725
  932. 23200 DX = -7*DOT% : DY = -7*DOT% : GOSUB 2725
  933. 23225 DX = 11*DOT% : DY = 3*DOT% : GOSUB 2725
  934. 23250 DX = -2*DOT% : DY = 2*DOT% : GOSUB 2725
  935. 23275 GOSUB 2350
  936. 23300 RETURN
  937. 23325 DX%=6*DOT% : DY%=4*DOT% : GOSUB 25900       'BIG UP LEFT ARROW
  938. 23350 DX = 11*DOT%+DX% : DY = -7*DOT%+DY% : GOSUB 2475
  939. 23375 DX = -2*DOT% : DY = 2*DOT% : GOSUB 2725
  940. 23400 DX = -2*DOT% : DY = -2*DOT% : GOSUB 2725
  941. 23425 DX = -7*DOT% : DY = 7*DOT% : GOSUB 2725
  942. 23450 DX = 11*DOT% : DY = -3*DOT% : GOSUB 2725
  943. 23475 DX = -2*DOT% : DY = -2*DOT% : GOSUB 2725
  944. 23500 GOSUB 2350
  945. 23525 RETURN
  946. 23550 DX%=3*DOT% : DY%=5*DOT% : GOSUB 25900       'RIGHT DIODE ARROW
  947. 23575 DX = DX% : DY = DY% : GOSUB 2475
  948. 23600 DX = 5*DOT% : DY = -5*DOT% : GOSUB 2725
  949. 23625 DX = -5*DOT% : GOSUB 2725
  950. 23650 DX = 0 : DY = 10*DOT% : GOSUB 2725
  951. 23675 GOSUB 2350
  952. 23700 RETURN
  953. 23725 DX%=3*DOT% : DY%=5*DOT% : GOSUB 25900       'LEFT DIODE ARROW
  954. 23750 DX = 6*DOT%+DX% : DY = DY% : GOSUB 2475
  955. 23775 DX = 0 : DY = -10*DOT% : GOSUB 2725
  956. 23800 DX = -5*DOT% : DY = 5*DOT% : GOSUB 2725
  957. 23825 DX = 5*DOT% : GOSUB 2725
  958. 23850 GOSUB 2350
  959. 23875 RETURN
  960. 23900 DX%=5*DOT% : DY%=3*DOT% : GOSUB 25900        'UP DIODE ARROW
  961. 23925 DX = 5*DOT%+DX% : DY = -DOT%+DY% : GOSUB 2475
  962. 23950 DX = -5*DOT% : DY = -5*DOT% : GOSUB 2725
  963. 23975 DX = 10*DOT% : DY = 0 : GOSUB 2725
  964. 24000 DX = -5*DOT% : DY = 5*DOT% : GOSUB 2725
  965. 24025 GOSUB 2350
  966. 24050 RETURN
  967. 24075 DX%=5*DOT% : DY%=3*DOT% : GOSUB 25900        'DOWN DIODE ARROW
  968. 24100 DX = DX% : DY = DY% : GOSUB 2475
  969. 24125 DX = 10*DOT% : DY = 0 : GOSUB 2725
  970. 24150 DX = -5*DOT% : DY = -5*DOT% : GOSUB 2725
  971. 24175 DY = 5*DOT% : GOSUB 2725
  972. 24200 GOSUB 2350
  973. 24225 RETURN
  974. 24250 DX%=2*DOT% : DY%=3*DOT% : GOSUB 25900       'SMALL RT ARROW
  975. 24275 DX = DX% : DY = DY% : GOSUB 2475
  976. 24300 DX = 3*DOT% : DY = -3*DOT% : GOSUB 2725
  977. 24325 DX = -3*DOT% : GOSUB 2725
  978. 24350 DX = 0 : DY = 6*DOT% : GOSUB 2725
  979. 24375 GOSUB 2350
  980. 24400 RETURN
  981. 24425 DX%=2*DOT% : DY%=3*DOT% : GOSUB 25900       'SMALL LEFT ARROW
  982. 24450 DX = 4*DOT%+DX% : DY = DY% : GOSUB 2475
  983. 24475 DX = 0 : DY = -6*DOT% : GOSUB 2725
  984. 24500 DX = -3*DOT% : DY = 3*DOT% : GOSUB 2725
  985. 24525 DX = 3*DOT% : GOSUB 2725
  986. 24550 GOSUB 2350
  987. 24575 RETURN
  988. 24600 DX%=3*DOT% : DY%=2*DOT% : GOSUB 25900       'SMALL UP ARROW
  989. 24625 DX = 3*DOT%+DX% : DY = -DOT%+DY% : GOSUB 2475
  990. 24650 DX = 3*DOT% : DY = -3*DOT% : GOSUB 2725
  991. 24675 DX = -6*DOT% : DY = 0 : GOSUB 2725
  992. 24700 DX = 3*DOT% : DY = 3*DOT% : GOSUB 2725
  993. 24725 GOSUB 2350
  994. 24750 RETURN
  995. 24775 DX%=3*DOT% : DY%=2*DOT% : GOSUB 25900       'SMALL DOWN ARROW
  996. 24800 DX = DX% : DY = DY% : GOSUB 2475
  997. 24825 DX = 6*DOT% : DY = 0 : GOSUB 2725
  998. 24850 DX = -3*DOT% : DY = -3*DOT% : GOSUB 2725
  999. 24875 DY = 3*DOT% : GOSUB 2725
  1000. 24900 GOSUB 2350
  1001. 24925 RETURN
  1002. 24950 DX%=2*DOT% : DY%=2*DOT% : GOSUB 25900       'SMALL UP RIGHT ARROW
  1003. 24975 DX = DX% : DY = DY% : GOSUB 2475
  1004. 25000 DX = 4*DOT% : DY = 0 : GOSUB 2725
  1005. 25025 DX = 0 : DY = -4*DOT% : GOSUB 2725
  1006. 25050 DX = -4*DOT% : DY = 4*DOT% : GOSUB 2725
  1007. 25075 GOSUB 2350
  1008. 25100 RETURN
  1009. 25125 DX%=2*DOT% : DY%=2*DOT% : GOSUB 25900       'SMALL DOWN RIGHT ARROW
  1010. 25150 DX = 4*DOT%+DX% : DY = DY% : GOSUB 2475
  1011. 25175 DX = 0 : DY = -4*DOT% : GOSUB 2725
  1012. 25200 DX = -4*DOT% : DY = 0 : GOSUB 2725
  1013. 25225 DX = 4*DOT% : DY = 4*DOT% : GOSUB 2725
  1014. 25250 GOSUB 2350
  1015. 25275 RETURN
  1016. 25300 DX%=2*DOT% : DY%=2*DOT% : GOSUB 25900       'SMALL DOWN LEFT ARROW
  1017. 25325 DX = DX% : DY = DY% : GOSUB 2475
  1018. 25350 DX = 4*DOT% : DY = -4*DOT% : GOSUB 2725
  1019. 25375 DX = -4*DOT% : DY = 0 : GOSUB 2725
  1020. 25400 DX = 0 : DY = 4*DOT% : GOSUB 2725
  1021. 25425 GOSUB 2350
  1022. 25450 RETURN
  1023. 25475 DX%=2*DOT% : DY%=2*DOT% : GOSUB 25900       'SMALL UP LEFT ARROW
  1024. 25500 DX = DX% : DY = DY% : GOSUB 2475
  1025. 25525 DX = 4*DOT% : DY = 0 : GOSUB 2725
  1026. 25550 DX = -4*DOT% : DY = -4*DOT% : GOSUB 2725
  1027. 25575 DX = 0 : DY = 4*DOT% : GOSUB 2725
  1028. 25600 GOSUB 2350
  1029. 25625 RETURN
  1030. 25650 DX%=6*DOT% : DY%=2*DOT% : GOSUB 25900       'RIGHT ? ARROW
  1031. 25675 DX = DX% : DY = DY% : GOSUB 2475
  1032. 25700 DX = 11*DOT% : DY = -3*DOT% : GOSUB 2725
  1033. 25725 DX = -11*DOT% : DY = 0 : GOSUB 2725
  1034. 25750 DX = 0 : DY = 3*DOT% : GOSUB 2725
  1035. 25775 GOSUB 2350
  1036. 25800 RETURN
  1037. 25825 '
  1038. 25850 ' GET RELATIVE OFFSETS DX%, DY% FOR THE ISXX COMMANDS
  1039. 25875 '
  1040. 25900 ON O1% GOTO 25925,25950,25975,26000,26025,26050,26075,26100,26125
  1041. 25925 DX% = -DX% : DY% = 0 : RETURN     'ISTC CASE
  1042. 25950 DX%=-2*DX% : DY% = 0 : RETURN     'ISTR
  1043. 25975 DX%=-2*DX% : RETURN               'ISRC
  1044. 26000 DX%=-2*DX% : DY%=2*DY% : RETURN  'ISBR
  1045. 26025 DX%=-DX% : DY%=2*DY% : RETURN     'ISBC
  1046. 26050 DX%=0 : DY%=2*DY% : RETURN        'ISBL
  1047. 26075 DX%=0 : RETURN                    'ISLC
  1048. 26100 DX%=0 : DY%=0 : RETURN            'ISTL
  1049. 26125 DX%=-DX% : RETURN                 'ISC
  1050. 26150 DX = -2*DOT% : DY = 0 : GOSUB 2475   'BXL
  1051. 26175 GOSUB 32500
  1052. 26200 DX = -2*DOT% : DY = 0 : GOSUB 2475
  1053. 26225 DX = XNOW-X+4*DOT% : DY = 0 : GOSUB 2725 : GOTO 2350
  1054. 26250 DX = 2*DOT% : DY = 0 : GOSUB 2475   'BXR
  1055. 26275 GOSUB 32500
  1056. 26300 DX = 2*DOT% : DY = 0 : GOSUB 2475
  1057. 26325 DX = XNOW+XL-X-4*DOT% : DY = 0 : GOSUB 2725 : GOTO 2350
  1058. 26350 DX = 0 : DY = 2*DOT% : GOSUB 2475   'BYU
  1059. 26375 GOSUB 32500
  1060. 26400 DX = 0 : DY = 2*DOT% : GOSUB 2475
  1061. 26425 DX = 0 : DY = YNOW-Y-4*DOT% : GOSUB 2725 : GOTO 2350
  1062. 26450 DX = 0 : DY = -2*DOT% : GOSUB 2475  'BYL
  1063. 26475 GOSUB 32500
  1064. 26500 DX = 0 : DY = -2*DOT% : GOSUB 2475
  1065. 26525 DX = 0 : DY = YNOW-YL-Y+4*DOT% : GOSUB 2725 : GOTO 2350
  1066. 26550 GOSUB 27875               'ST
  1067. 26575 SSIZE% = OP% : RETURN
  1068. 26600  '
  1069. 26625 ' DRAW CIRCLE
  1070. 26650 '
  1071. 26675 GOSUB 27875       'GET RADIUS
  1072. 26700 R = OP%*S%
  1073. 26725 DX = 0 : DY = 0
  1074. 26750 GOSUB 3650
  1075. 26775 RETURN
  1076. 26800  '
  1077. 26825 ' DRAW CIRCLE DOTS
  1078. 26850 '
  1079. 26875 GOSUB 27875       'GET RADIUS
  1080. 26900 R = OP%*DOT%
  1081. 26925 GOTO 26725
  1082. 26950 '
  1083. 26975 ' DRAW ARC
  1084. 27000 '
  1085. 27025 GOSUB 27875       'GET RADIUS
  1086. 27050 OP% = OP%*S%
  1087. 27075 RAD% = OP%
  1088. 27100 GOSUB 27875       'GET LENGTH AND DIRECTION
  1089. 27125 AL% = (OP% AND 7)*45+45
  1090. 27150 IF (OP% AND 8) = 0 THEN AL% = -AL%
  1091. 27175 DIR% = (OP% AND &H70)\16
  1092. 27200 XC% = ACX(DIR%)*RAD%
  1093. 27225 YC% = ACY(DIR%)*RAD%
  1094. 27250 DX = XC% : DY = YC% : D = AL% : GOSUB 3900
  1095. 27275 I% = OP% AND 15
  1096. 27300 IF I% = 15 THEN I% = 7 : GOTO 27350
  1097. 27325 IF I% > 7 THEN I% = 14-I%
  1098. 27350 I% = I% +DIR%
  1099. 27375 IF I% > 7 THEN I% = I%-8
  1100. 27400 XM% = CINT((XC%+AMX(I%)*RAD%)/3)*3
  1101. 27425 YM% = CINT((YC%+AMY(I%)*RAD%)/3)*3
  1102. 27450 X = X + XM% : Y = Y + YM%
  1103. 27475 GOTO 2350
  1104. 27500 '
  1105. 27525 ' DRAW ARC DOTS
  1106. 27550 '
  1107. 27575 GOSUB 27875       'GET RADIUS
  1108. 27600 OP% = OP%*DOT%
  1109. 27625 GOTO 27075
  1110. 27650 '
  1111. 27675 ' SET SYMBOL BROKEN LINE TYPE
  1112. 27700 '
  1113. 27725 GOSUB 27875
  1114. 27750 SLINTYP% = OP%
  1115. 27775 RETURN
  1116. 27800 '
  1117. 27825 ' PUT NEXT SYMBOL DRAWING OPERATOR OR PARAMETER
  1118. 27850 ' BYTE INTO OP%
  1119. 27875 '
  1120. 27900 P% = P% +1
  1121. 27925 IF P% < 17 THEN GOTO 28050
  1122. 27950 '
  1123. 27975 GOSUB 1850
  1124. 28000 FIELD #2,16*R% AS DUM$,16 AS Z$
  1125. 28025 P% = 1
  1126. 28050 OP% = ASC(MID$(Z$,P%,1))
  1127. 28075 RETURN
  1128. 28100 '
  1129. 28125 ' GET NEXT DRAWING COMMAND BYTE AND CONVERT
  1130. 28150 ' TO 2'S COMPLEMENT INTEGER
  1131. 28175 '
  1132. 28200 GOSUB 27875
  1133. 28225 IF (OP% AND &H80) = 0 THEN RETURN
  1134. 28250 OP% = OP% OR &HFF00
  1135. 28275 RETURN
  1136. 28300 '
  1137. 28325 '  LINE SEGMENT DEFINITION FIELD
  1138. 28350 '
  1139. 28375 DFLAG% = ASC(FLAG$) AND 3
  1140. 28400 AFLAG% = (ASC(FLAG$) AND &HC)/4
  1141. 28425 Z% = ASC(Z$)
  1142. 28450 X1 = X + XL                       'GET LINE END-POINTS
  1143. 28475 Y1 = Y - YL
  1144. 28500 ADX = 0 : ADX1 = 0 : ADY = 0 : ADY1 = 0
  1145. 28525 IF XL = 0 THEN 28625
  1146. 28550 IF (AFLAG% AND 1) <> 0 THEN ADX = 4*DOT%
  1147. 28575 IF (AFLAG% AND 2) <> 0 THEN ADX1 = -4*DOT%
  1148. 28600 GOTO 28675
  1149. 28625 IF (AFLAG% AND 1) <> 0 THEN ADY = -4*DOT%
  1150. 28650 IF (AFLAG% AND 2) <> 0 THEN ADY1 = 4*DOT%
  1151. 28675 D1 = ABS(X-XNOW) + ABS(Y-YNOW)
  1152. 28700 D2 = ABS(X1-XNOW) + ABS(Y1 - YNOW)
  1153. 28725 IF D1 < D2 THEN GOTO 28900
  1154. 28750 SWAP X,X1
  1155. 28775 SWAP Y,Y1
  1156. 28800 SWAP ADX,ADX1
  1157. 28825 SWAP ADY,ADY1
  1158. 28850 IF (DFLAG% = 1) OR (DFLAG% = 2) THEN DFLAG% = 3-DFLAG%
  1159. 28875 IF (AFLAG% = 1) OR (AFLAG% = 2) THEN AFLAG% = 3-AFLAG%
  1160. 28900 IF (X = XNOW) AND (Y = YNOW) THEN 28975
  1161. 28925 GOSUB 2350        'MOVE XY ABS
  1162. 28950 XNOW = X : YNOW = Y
  1163. 28975 IF (DFLAG% AND 1) = 1 THEN GOSUB 30250
  1164. 29000 IF (AFLAG% AND 1) = 1 THEN GOSUB 30375
  1165. 29025 X=X1 : Y=Y1
  1166. 29050 IF Z% = 2 THEN GOSUB 3450 : GOSUB 2600 : GOSUB 3250 : GOTO 29325
  1167. 29075 IF Z% = 3 THEN GOSUB 3350 : GOSUB 2600 : GOSUB 3250 : GOTO 29325
  1168. 29100 IF Z% = 4 THEN GOSUB 3550 : GOSUB 2600 : GOSUB 3250 : GOTO 29325
  1169. 29125 GOSUB 2600
  1170. 29150 IF Z% <> 1 THEN GOTO 29325
  1171. 29175 DYB = DOT%  : DXB = 0
  1172. 29200 IF XL = 0 THEN SWAP DYB,DXB
  1173. 29225 GOSUB 31700       'PLOT WIDE BUSS LINE
  1174. 29250 IF SCALE < 1.2 THEN 29325
  1175. 29275 DX = CINT(DX*.5) : DY = CINT(DY*.5)
  1176. 29300 GOSUB 31700       ,FILL IN BUSS LINES ON EXPANDED PLOTS
  1177. 29325 X = XNOW : Y = YNOW : XNOW = X1 : YNOW = Y1
  1178. 29350 IF (DFLAG% AND 2) = 2 THEN GOSUB 30250
  1179. 29375 IF (AFLAG% AND 2) = 2 THEN GOSUB 30375
  1180. 29400 GOTO 7375
  1181. 29425 '
  1182. 29450 '  ALPHANUMERIC FIELD DEFINITION
  1183. 29475 '
  1184. 29500 SIZE% = (ASC(ID$) AND &HE0)\32
  1185. 29525 I% = INSTR(Z$,CHR$(0))
  1186. 29550 IF I% = 0 THEN I% = 5 ELSE I% = I% - 1
  1187. 29575 ALF$=MID$(Z$,1,I%)
  1188. 29600 FLAG% = ASC(FLAG$) AND &H7F
  1189. 29625 NFLAG% = ASC(FLAG$) AND &H80
  1190. 29650 IF FLAG% > 99 THEN GOTO 30150
  1191. 29675 IF SIZE% = 0 THEN CH%=5 : CW%=6 : DX = 2*DOT% : DY = -6*DOT% : GOTO 29750
  1192. 29700 IF SIZE% = 1 THEN CH%=7 : CW%=7 : DX = 2*DOT% : DY = -9*DOT% : GOTO 29750
  1193. 29725 CH%=9 : CW%=8  : DX = DOT% : DY = -11*DOT%
  1194. 29750 GOSUB 2350 : XNOW = X : YNOW = Y : GOSUB 2475 : GOSUB 2850
  1195. 29775 B% = B% - 1
  1196. 29800 IF B% = 0 THEN GOSUB 4000 : GOTO 30000
  1197. 29825 GOSUB 1850        'READ NEXT BLOCK
  1198. 29850 FIELD #2,R%*16 AS DUM$,16 AS Z$
  1199. 29875 I% = INSTR(Z$,CHR$(0))
  1200. 29900 IF I% = 1 THEN GOTO 29775
  1201. 29925 IF I% = 0 THEN I% = 16 ELSE I% = I% - 1
  1202. 29950 ALF$=ALF$+MID$(Z$,1,I%)
  1203. 29975 GOTO 29775
  1204. 30000 IF NFLAG% = &H80 THEN GOTO 30075  'OVERBAR
  1205. 30025 GOSUB 2350        'MOVE XY ABS
  1206. 30050 GOTO 7375
  1207. 30075 DY = -DY-DOT% : DX = -DOT% : GOSUB 2475   'MOVE XY REL
  1208. 30100 Y = Y-DOT% : GOSUB 2600 : Y = Y+DOT% : GOSUB 2350
  1209. 30125 GOTO 7375
  1210. 30150 B% = B% - 1
  1211. 30175 IF B% = 0 THEN GOTO 7375
  1212. 30200 GOSUB 1850
  1213. 30225 GOTO 30150
  1214. 30250 '
  1215. 30275 '  DRAW A "DOT" ON A LINE
  1216. 30300 '
  1217. 30325 IF Z% = 1 THEN 32900 'LARGE DOT ON A LINE
  1218. 30350 GOTO 32625        'SMALL DOT
  1219. 30375 '
  1220. 30400 'DRAW ARROWS AT THE ENDS OF LINE SEGMENTS
  1221. 30425 '
  1222. 30450 IF YL = 0 THEN 31050      'LINE IS HORIZONTAL
  1223. 30475 IF YNOW = Y1 THEN 31025
  1224. 30500 IF Y1 < Y THEN 30775
  1225. 30525 DX = -3*DOT% : DY = 11*DOT% : GOSUB 2725   'DOWN ARROW
  1226. 30550 DX = 6*DOT% : DY = 0 : GOSUB 2725
  1227. 30575 DX = -3*DOT% : DY = -11*DOT% : GOSUB 2725
  1228. 30600 DX = -2*DOT% : DY = 11*DOT% : GOSUB 2725
  1229. 30625 DX = 4*DOT% : DY = 0 : GOSUB 2725
  1230. 30650 DX = -2*DOT% : DY = -11*DOT% : GOSUB 2725
  1231. 30675 DX = -DOT% : DY = 11*DOT% : GOSUB 2725
  1232. 30700 DX = 2*DOT% : DY = 0 : GOSUB 2725
  1233. 30725 DX = -DOT% : DY = -3*DOT% : GOSUB 2725
  1234. 30750 GOTO 2850
  1235. 30775 DX = -3*DOT% : DY = -11*DOT% : GOSUB 2725  'UP ARROW
  1236. 30800 DX = 6*DOT% : DY = 0 : GOSUB 2725
  1237. 30825 DX = -3*DOT% : DY = 11*DOT% : GOSUB 2725
  1238. 30850 DX = -2*DOT% : DY = -11*DOT% : GOSUB 2725
  1239. 30875 DX = 4*DOT% : DY = 0 : GOSUB 2725
  1240. 30900 DX = -2*DOT% : DY = 11*DOT% : GOSUB 2725
  1241. 30925 DX = -DOT% : DY = -11*DOT% : GOSUB 2725
  1242. 30950 DX = 2*DOT% : DY = 0 : GOSUB 2725
  1243. 30975 DX = -DOT% : DY = 11*DOT% : GOSUB 2725
  1244. 31000 GOTO 2850
  1245. 31025 IF Y < Y1 THEN 30775 ELSE 30525
  1246. 31050 IF XNOW = X1 THEN 31600
  1247. 31075 IF X1 < X THEN 31350
  1248. 31100 DX = 11*DOT% : DY = -3*DOT% : GOSUB 2725  'LEFT ARROW
  1249. 31125 DX = 0 : DY = 6*DOT% : GOSUB 2725
  1250. 31150 DX = -11*DOT% : DY = -3*DOT% : GOSUB 2725
  1251. 31175 DX = 11*DOT% : DY = -2*DOT% : GOSUB 2725
  1252. 31200 DX = 0 : DY = 4*DOT% : GOSUB 2725
  1253. 31225 DX = -11*DOT% : DY = -2*DOT% : GOSUB 2725
  1254. 31250 DX = 11*DOT% : DY = -DOT% : GOSUB 2725
  1255. 31275 DX = 0 : DY = 2*DOT% : GOSUB 2725
  1256. 31300 DX = -11*DOT% : DY = -DOT% : GOSUB 2725
  1257. 31325 GOTO 2850
  1258. 31350 DX = -11*DOT% : DY = -3*DOT% : GOSUB 2725 'RIGHT ARROW
  1259. 31375 DX = 0 : DY = 6*DOT% : GOSUB 2725
  1260. 31400 DX = 11*DOT% : DY = -3*DOT% : GOSUB 2725
  1261. 31425 DX = -11*DOT% : DY = -2*DOT% : GOSUB 2725
  1262. 31450 DX = 0 : DY = 4*DOT% : GOSUB 2725
  1263. 31475 DX = 11*DOT% : DY = -2*DOT% : GOSUB 2725
  1264. 31500 DX = -11*DOT% : DY = -DOT% : GOSUB 2725
  1265. 31525 DX = 0 : DY = 2*DOT% : GOSUB 2725
  1266. 31550 DX = 11*DOT% : DY = -DOT% : GOSUB 2725
  1267. 31575 GOTO 2850
  1268. 31600 IF X < X1 THEN 31350 ELSE 31100
  1269. 31625 '
  1270. 31650 ' PLOT BROAD BUSS LINES
  1271. 31675 '
  1272. 31700 X=X1+DXB+ADX1 : Y=Y1+DYB+ADY1 : GOSUB 2600
  1273. 31725 X=XNOW+DXB+ADX : Y=YNOW+DYB+ADY : GOSUB 2600
  1274. 31750 X=XNOW-DXB+ADX : Y=YNOW-DYB+ADY : GOSUB 2600
  1275. 31775 X=X1-DXB+ADX1 : Y=Y1-DYB+ADY1 : GOSUB 2600
  1276. 31800 X = X1 : Y = Y1 : GOSUB 2600
  1277. 31825 RETURN
  1278. 31850 '
  1279. 31875 ' FILL CENTER OF SMALL DOT
  1280. 31900 '
  1281. 31925 DX = DOT% : DY = DOT% : GOSUB 2725
  1282. 31950 DX = -2*DOT% : DY = 0 : GOSUB 2725
  1283. 31975 SWAP DX,DY : GOSUB 2725
  1284. 32000 DX = 2*DOT% : DY = 0 : GOSUB 2725
  1285. 32025 SWAP DX,DY : GOSUB 2725
  1286. 32050 DX = -DOT% : DY = DX : GOSUB 2475
  1287. 32075 GOTO 3050
  1288. 32100 '
  1289. 32125 ' DRAW BUBBLE SUBROUTINE
  1290. 32150 '
  1291. 32175 DX = BX%*DOT% : DY = BY%*DOT% : GOSUB 2475
  1292. 32200 DX = -BP%*DOT% : DY = 0 : GOSUB 2725
  1293. 32225 DX = -DOT% : DY = DX : GOSUB 2725
  1294. 32250 DX = 0 : DY = -BP%*DOT% : GOSUB 2725
  1295. 32275 DX = DOT% : DY = -DX : GOSUB 2725
  1296. 32300 DX = BP%*DOT% : DY = 0 : GOSUB 2725
  1297. 32325 DX = DOT% : DY = DX : GOSUB 2725
  1298. 32350 DX = 0 : DY = BP%*DOT% : GOSUB 2725
  1299. 32375 DX = -DOT% : DY = -DX : GOSUB 2725
  1300. 32400 DX = -BX%*DOT% : DY = -BY%*DOT% : GOSUB 2475
  1301. 32425 GOTO 2850
  1302. 32450 '
  1303. 32475 ' DRAW SMALL BUBBLE
  1304. 32500 '
  1305. 32525 BX% = 1 : BY% = 2 : BP% = 2
  1306. 32550 GOTO 32150
  1307. 32575 '
  1308. 32600 ' DRAW SMALL DOT
  1309. 32625 '
  1310. 32650 GOSUB 31900       'FILL CENTER
  1311. 32675 GOTO 32500        'DRAW SMALL BUBBLE
  1312. 32700 '
  1313. 32725 ' DRAW LARGE DOT SYMBOL (NOT ON A LINE)
  1314. 32750 '
  1315. 32775 GOSUB 32625       'DRAW SMALL DOT
  1316. 32800 BX% = 2 : BY% = 3 : BP% = 4
  1317. 32825 GOTO 32150        'DRAW LARGE BUBBLE
  1318. 32850 '
  1319. 32875 ' DRAW LARGE DOT ON BUSS LINE
  1320. 32900 '
  1321. 32925 GOTO 32625       'DRAW SMALL DOT
  1322. 32950 IF ERL = 1225 THEN PRINT "File  ";F$;" not found!":RESUME 1150
  1323. 32975 IF ERR = 24 THEN BEEP : BEEP : BEEP : RESUME
  1324. 33000 PRINT "ERROR ";ERR;"IN LINE ";ERL : STOP
  1325. 33025 IF ERL = 4300 THEN RESUME 4300
  1326. 33050 STOP
  1327.