Advertisement
gibstov

UDRAW

Nov 4th, 2013
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.71 KB | None | 0 0
  1. 5 REM MY UDraw - Universal Drawing Language
  2. 6 REM ATARI Version - Gibstov
  3. 10 GOTO 500:REM Start
  4. 11 GOTO 100:REM Initialize Data
  5. 12 GOTO 2000:REM Read Line
  6. 13 GOTO 2100:REM Get Next Arg
  7. 14 GOTO 2300:REM Read Program Line
  8. 15 GOTO 4000:REM Read Immediate
  9. 16 GOTO 400:REM Error Handler
  10. 17 GOTO 3500:REM Memory Manager
  11. 18 GOTO 4700:REM GET LINE INTO IO$
  12. 19 GOTO 3600:REM Garbage Collector
  13. 40 GOTO 5500:REM RUN
  14. 41 GOTO 4500:REM LIST [ST][FN]
  15. 42 GOTO 4800:REM SAVE FILE
  16. 43 GOTO 5000:REM LOAD FILE
  17. 44 GOTO 5900:REM NEW
  18. 45 GOTO 5200:REM COPY FILE
  19. 46 GOTO 5300:REM PASTE FILE
  20. 60 GOTO 6500:REM PLOT X Y
  21. 61 GOTO 6600:REM DRAWTO X Y
  22. 62 GOTO 6700:REM LINE X1 Y1 X2 Y2
  23. 63 GOTO 6900:REM CIRCLE X Y R
  24. 64 GOTO 7100:REM ELLIP X Y R1 R2
  25. 65 GOTO 7300:REM COLOR C
  26. 66 GOTO 7400:REM CLEAR
  27. 67 GOTO 7500:REM BRUSH N C
  28. 68 GOTO 6000:REM PIC H W D
  29. 69 GOTO 7600:REM ARC X Y S E R
  30. 70 GOTO 7800:REM EARC X Y S E R1 R2
  31. 100 RESTORE 9900:DEG:MM=2000:ML=255:MT=1
  32. 110 DIM LN(ML),LI(ML),LL(ML),LC(ML),LG(ML),PM$(MM):REM THESE SHOULD BE NUMBERS BUT TOO SLOW
  33. 120 DIM IO$(128),AR$(128),DC$(66),DA(10),IC$(42),CM$(6),CH$(1),PA(8),BR(2)
  34. 130 PRINT "LOADING DATA"
  35. 140 DC$=" ":DC$(66)=" ":DC$(2)=DC$:IC$=DC$
  36. 150 AR=1:NB=0:IX=0
  37. 160 READ CM$
  38. 170 IF CM$=";" THEN 230
  39. 180 DC$((IX*6)+1,(IX*6)+6)=CM$
  40. 190 READ CM
  41. 200 DA(IX)=CM
  42. 210 IX=IX+1
  43. 220 GOTO 160
  44. 230 IX=1
  45. 240 READ CM$
  46. 250 IF CM$=";" THEN 290
  47. 260 IC$(IX,IX+5)=CM$
  48. 270 IX=IX+6
  49. 280 GOTO 240
  50. 290 FOR I=0 TO 8:READ CB:PA(I)=CB:NEXT I
  51. 300 PRINT "INITIALIZING DATA"
  52. 310 GOSUB 44
  53. 330 RETURN
  54. 399 REM Error Handler
  55. 400 PRINT "ERROR ";ER
  56. 440 IF ER<100 THEN RETURN
  57. 450 END
  58. 499 PRINT "NOT IMPLEMENTED YET":RETURN
  59. 500 GOSUB 11
  60. 510 GR.0:PRINT "UDRAW":PRINT
  61. 520 GOSUB 12
  62. 530 GOSUB 13
  63. 540 IF AR$="" THEN 520
  64. 550 IF NB=0 THEN GOSUB 15:GOTO 570
  65. 560 GOSUB 14
  66. 570 GOTO 520
  67. 999 REM Verify legal X or Y
  68. 1000 IF X1<0 OR X1>HR THEN ER=10:RETURN
  69. 1010 IF Y1<0 OR Y1>VR THEN ER=11:RETURN
  70. 1020 RETURN
  71. 1999 END
  72. 2000 AR=1
  73. 2010 POKE 85,1:POKE 752,0:REM MOVE COL AND SHOW CURSOR
  74. 2020 PRINT ">";:INPUT #16;IO$
  75. 2030 POKE 752,1:POKE 85,1:?" ";:REM HIDE CURSOR AND PRINT TO ACTIVATE
  76. 2040 RETURN
  77. 2100 AR$="":NB=0
  78. 2110 IF AR > LEN(IO$) THEN RETURN
  79. 2120 IF IO$(AR,AR)=" " THEN AR = AR + 1:GOTO 2110
  80. 2130 NB=1
  81. 2140 IF AR > LEN(IO$) THEN RETURN
  82. 2150 IF IO$(AR,AR)=" " THEN RETURN
  83. 2160 AR$(LEN(AR$)+1) = IO$(AR,AR)
  84. 2170 IF ASC(IO$(AR,AR)) < 48 OR ASC(IO$(AR,AR)) > 57 THEN NB=0
  85. 2180 AR = AR + 1
  86. 2190 GOTO 2140
  87. 2299 REM Read Program Line
  88. 2300 PL = VAL(AR$)
  89. 2310 GOSUB 13
  90. 2320 IF AR$="" THEN GOSUB 3100:RETURN
  91. 2330 IF NB = 1 THEN ER=1:GOSUB 16:RETURN
  92. 2340 IX=0:CM=0:AN=0
  93. 2350 AR$(LEN(AR$)+1)=" ":AR$=AR$(1,6)
  94. 2360 CM = CM + 1
  95. 2370 IF (IX*6)+1>LEN(DC$) THEN ER=2:GOSUB 16:RETURN
  96. 2380 IF AR$=DC$((IX*6)+1,(IX*6)+6) THEN 2450
  97. 2390 IX=IX+1
  98. 2400 GOTO 2360
  99. 2450 AL=DA(IX)
  100. 2530 AC=0
  101. 2600 MR=AL+1:GOSUB 17:REM WE ADD 1 TO INCLUDE THE COMMAND BYTE TOO
  102. 2610 IF MP=-1 THEN ER=6:GOSUB 16:RETURN
  103. 2620 PM$(MP)=CHR$(CM):AC=1
  104. 2630 IF AC>AL THEN 2700
  105. 2640 GOSUB 13
  106. 2650 IF NB=0 THEN ER=3:GOSUB 16:RETURN
  107. 2660 IF AR$="" THEN ER=4:GOSUB 16:RETURN
  108. 2670 PM$(MP+AC)=CHR$(VAL(AR$))
  109. 2680 AC=AC+1
  110. 2690 GOTO 2630
  111. 2700 GOSUB 13
  112. 2710 IF AR$<>"" THEN ER=5:GOSUB 16:RETURN
  113. 2719 REM ADD LINE
  114. 2720 IF HP=-1 THEN LN(0)=PL:LI(0)=MP:LL(0)=AL+1:LC(0)=-1:HP=0:RETURN
  115. 2730 CP = HP:PP=-1
  116. 2740 IF PL=LN(CP) THEN 2800
  117. 2750 IF PL<LN(CP) THEN 2850
  118. 2760 IF LC(CP)=-1 THEN 2920
  119. 2770 PP=CP:CP=LC(CP)
  120. 2780 GOTO 2740
  121. 2800 LI(CP)=MP:LL(CP)=AL+1:RETURN
  122. 2850 GOSUB 3000:REM Create new node
  123. 2860 IF IX=-1 THEN ER=8:GOSUB 16:RETURN
  124. 2870 LN(IX)=PL:LI(IX)=MP:LL(IX)=AL+1
  125. 2880 IF CP=HP THEN HP=IX
  126. 2890 LC(IX)=CP
  127. 2900 IF PP=-1 THEN RETURN
  128. 2910 LC(PP)=IX:RETURN
  129. 2920 GOSUB 3000
  130. 2930 IF IX=-1 THEN ER=8:GOSUB 16:RETURN
  131. 2940 LN(IX)=PL:LI(IX)=MP:LL(IX)=AL+1
  132. 2950 LC(IX)=-1:LC(CP)=IX
  133. 2960 RETURN
  134. 2999 REM Add Node
  135. 3000 IX=LL
  136. 3010 IF IX <= ML THEN 3040
  137. 3020 IF LL=1 THEN IX=-1:RETURN
  138. 3030 LL=1:IX=0
  139. 3040 IF LI(IX)=-1 THEN LL=IX:RETURN
  140. 3050 IX=IX+1
  141. 3060 GOTO 3010
  142. 3099 REM Delete Node
  143. 3100 CP=HP
  144. 3110 IF CP=-1 THEN RETURN
  145. 3120 IF PL=LN(CP) THEN 3150
  146. 3130 PP=CP:CP=LC(CP)
  147. 3140 GOTO 3110
  148. 3150 LI(CP)=-1
  149. 3160 IF HP=CP THEN HP=LC(CP):GOTO 3180
  150. 3170 LC(PP)=LC(CP)
  151. 3180 RETURN
  152. 3499 REM Memory Manager
  153. 3500 IF MT+MR>MM THEN 3550
  154. 3510 MP=MT:MT=MP+MR
  155. 3520 RETURN
  156. 3550 GOSUB 19:REM Call GC
  157. 3560 IF MT+MR>MM THEN MP=-1:RETURN
  158. 3570 MP=MT:MT=MP+MR
  159. 3580 RETURN
  160. 3599 REM * GARBAGE COLLECTOR
  161. 3600 PRINT "GC..."
  162. 3610 CP=HP
  163. 3620 IF CP=-1 THEN 3660
  164. 3630 LG(CP)=LC(CP)
  165. 3640 CP=LC(CP)
  166. 3650 GOTO 3620
  167. 3660 CI=1:GH=HP
  168. 3670 CP=GH:TP=-1:LX=-1
  169. 3680 IF CP=-1 THEN 3740
  170. 3690 IF LI(CP) < CI THEN 3720
  171. 3700 IF LX =-1 THEN LX=LI(CP):LP=CP:GP=TP
  172. 3710 IF LI(CP) < LX THEN LX=LI(CP):LP=CP:GP=TP
  173. 3720 TP=CP:CP=LG(CP)
  174. 3730 GOTO 3680
  175. 3740 IF LX=-1 THEN 3840
  176. 3750 IF LI(LP)=CI THEN 3780
  177. 3760 PM$(CI,CI+LL(LP)-1)=PM$(LI(LP),LI(LP)+LL(LP)-1)
  178. 3770 LI(LP)=CI:REM POINTER TO NEW INDEX
  179. 3780 CI=CI+LL(LP)
  180. 3790 IF GP=-1 THEN 3820
  181. 3800 LG(GP)=LG(LP)
  182. 3810 GOTO 3670
  183. 3820 GH=LC(LP)
  184. 3830 GOTO 3670
  185. 3840 MT=CI
  186. 3850 PM$=PM$(1,CI-1)
  187. 3860 RETURN
  188. 3999 REM EXECUTE IMMEDIATE
  189. 4000 IX=0:CM=0
  190. 4010 CM = CM + 1
  191. 4020 IF IX>=LEN(IC$) THEN ER=2:GOSUB 16:RETURN
  192. 4030 AR$(LEN(AR$)+1)=" ":AR$=AR$(1,6)
  193. 4040 IF AR$ = IC$(IX+1,IX+6) THEN 4070
  194. 4050 IX=IX+6
  195. 4060 GOTO 4010
  196. 4070 ON CM GOTO 40,41,42,43,44,45,46
  197. 4099 REM ALL COMMANDS SHOULD RETURN, SO IT SHOULD RETURN TO CALLER SO WERE DONE
  198. 4499 REM * LIST *
  199. 4500 GOSUB 13
  200. 4510 CP=HP:TL=-1:REM -1 THEN ALL LINES
  201. 4520 IF AR$="" THEN 4630
  202. 4530 IF NB=0 THEN ER=3:GOSUB 16:RETURN
  203. 4540 TL=VAL(AR$)
  204. 4550 IF CP=-1 THEN RETURN
  205. 4560 IF LN(CP)>=TL THEN 4590
  206. 4570 CP=LC(CP)
  207. 4580 GOTO 4550
  208. 4590 GOSUB 13
  209. 4600 IF AR$="" THEN GOTO 4630
  210. 4610 IF NB=0 THEN ER=3:GOSUB 16:RETURN
  211. 4620 TL=VAL(AR$)
  212. 4630 IF CP=-1 THEN RETURN
  213. 4640 IF TL>-1 AND LN(CP)>TL THEN RETURN
  214. 4650 GOSUB 18
  215. 4660 PRINT IO$
  216. 4670 CP=LC(CP)
  217. 4680 GOTO 4630
  218. 4699 REM GET NODE INFO INTO IO$
  219. 4700 IO$=STR$(LN(CP))
  220. 4710 IO$(LEN(IO$)+1)=" "
  221. 4720 IC=ASC(PM$(LI(CP),LI(CP)))
  222. 4730 IC=(IC-1)*6+1
  223. 4740 IO$(LEN(IO$)+1)=DC$(IC,IC+5)
  224. 4750 IC=1
  225. 4760 IF IC=LL(CP) THEN RETURN
  226. 4770 IO$(LEN(IO$)+1)=" ":IO$(LEN(IO$)+1)=STR$(ASC(PM$(LI(CP)+IC,LI(CP)+IC)))
  227. 4780 IC=IC+1
  228. 4790 GOTO 4760
  229. 4799 REM * SAVE *
  230. 4800 GOSUB 13
  231. 4810 IF NB=1 THEN ER=9:GOSUB 16:RETURN
  232. 4820 TRAP 4980:REM TRAP ANY ERRORS IN SAVE
  233. 4830 IX=1:IC=1
  234. 4840 GOSUB 19:REM Call Garbage Collector
  235. 4850 OPEN #1,8,0,AR$
  236. 4860 CP=HP
  237. 4870 PRINT #1;LN(CP):PRINT #1;LI(CP):PRINT #1;LL(CP)
  238. 4880 IF LC(CP) = -1 THEN PRINT #1;-1:GOTO 4940
  239. 4890 PRINT #1;IX
  240. 4900 REM IC=IC+LL(CP)
  241. 4910 IX=IX+1
  242. 4920 CP=LC(CP)
  243. 4930 GOTO 4870
  244. 4940 PRINT #1;LEN(PM$):FOR I=1 TO LEN(PM$):PUT #1,ASC(PM$(I,I)):NEXT I
  245. 4950 CLOSE #1
  246. 4960 TRAP 40000:REM TURN TRAPS OFF
  247. 4970 RETURN
  248. 4980 CLOSE #1
  249. 4990 ER=20:GOSUB 16:RETURN
  250. 4999 REM * LOAD *
  251. 5000 GOSUB 13
  252. 5010 TRAP 5160:REM TRAP ANY ERRORS IN LOAD
  253. 5020 IX=0:IC=1
  254. 5030 OPEN #1,4,0,AR$
  255. 5040 INPUT #1,IO$:LN(IX)=VAL(IO$)
  256. 5050 INPUT #1,IO$:LI(IX)=VAL(IO$)
  257. 5060 INPUT #1,IO$:LL(IX)=VAL(IO$)
  258. 5070 INPUT #1,IO$:LC(IX)=VAL(IO$)
  259. 5080 IF VAL(IO$)=-1 THEN 5120
  260. 5100 IX=IX+1
  261. 5110 GOTO 5040
  262. 5120 INPUT #1,IC:FOR I=1 TO IC:GET #1,IO:PM$(I,I)=CHR$(IO):NEXT I
  263. 5130 MT=LEN(PM$)+1:HP=0
  264. 5140 CLOSE #1:TRAP 40000:REM TURN TRAPS OFF
  265. 5150 RETURN
  266. 5160 CLOSE #1
  267. 5170 TRAP 40000:REM TURN TRAPS OFF
  268. 5180 ER=21:GOSUB 16:RETURN
  269. 5199 REM * COPY *
  270. 5200 GOSUB 13
  271. 5210 TRAP 4980:REM TRAP ANY ERRORS ON SAVE
  272. 5220 OPEN #1,8,0,AR$
  273. 5230 CP=HP
  274. 5240 IF CP=-1 THEN 5280
  275. 5250 GOSUB 18:PRINT #1;IO$
  276. 5260 CP=LC(CP)
  277. 5270 GOTO 5240
  278. 5280 CLOSE #1:TRAP 40000:REM TURN TRAPS OFF
  279. 5290 RETURN
  280. 5299 REM * PASTE *
  281. 5300 GOSUB 13
  282. 5310 TRAP 5160:REM TRAP ANY ERRORS ON LOAD
  283. 5320 OPEN #1,4,0,AR$
  284. 5340 TRAP 5380:REM TRAP END OF FILE
  285. 5350 INPUT #1,IO$:AR=1:GOSUB 13
  286. 5360 IF AR$<>"" THEN GOSUB 14
  287. 5370 GOTO 5350
  288. 5380 CLOSE #1:TRAP 40000:REM TURN TRAPS OFF
  289. 5390 RETURN
  290. 5499 REM * RUN *
  291. 5500 GR.15+16:MH=159:MV=191:MC=3:HZ=1:VZ=1:HR=100:VR=50:X1=0:Y1=0
  292. 5510 BR(0)=PA(1):BR(1)=PA(4):BR(2)=PA(5):REM SET BRUSHES TO PALLETE 1,4,5 [RED,GREEN,BLUE]
  293. 5520 POKE 708,BR(0):POKE 709,BR(1):POKE 710,BR(2)
  294. 5530 CB=0:COLOR 1:REM Set Current Brush to 0
  295. 5540 CP=HP:ER=0
  296. 5550 IF CP=-1 THEN 5610
  297. 5560 IP = LI(CP)
  298. 5570 ON ASC(PM$(IP,IP)) GOSUB 60,61,62,63,64,65,66,67,68,69,70
  299. 5580 IF ER>0 THEN 5650
  300. 5590 CP=LC(CP)
  301. 5600 GOTO 5550
  302. 5610 OPEN #1,4,0,"K:":GET #1,IX:CLOSE #1:REM Done...Wait for key
  303. 5620 GR.0
  304. 5630 RETURN
  305. 5650 POKE 709,202:POKE 710,148
  306. 5650 PRINT "ERROR ";ER;" IN LINE ";LN(CP)
  307. 5660 RETURN
  308. 5899 REM * NEW *
  309. 5900 FOR I=0 TO 255:LI(I)=-1:LC(I)=-1:NEXT I
  310. 5910 PM$=""
  311. 5920 HP=-1:LL=0:LF=0:IX=0
  312. 5990 RETURN
  313. 5999 REM * PIC *
  314. 6000 HZ=1:XO=0:YO=0
  315. 6010 HR=ASC(PM$(IP+1,IP+1))
  316. 6020 VR=ASC(PM$(IP+2,IP+2))
  317. 6030 DM=ASC(PM$(IP+3,IP+3))
  318. 6040 IF HR>MH THEN HZ=MH/HR
  319. 6050 IF VR>MV THEN VZ=MV/VR
  320. 6060 IF DM=0 THEN 6180
  321. 6070 IF DM=1 THEN 6150
  322. 6080 IF DM=2 THEN 6100
  323. 6100 HZ=MH/HR
  324. 6110 VZ=MV/VR
  325. 6120 GOTO 6190
  326. 6150 IF HR<MH THEN XO=(MH-HR)/2
  327. 6160 IF VR<MV THEN YO=(MV-VR)/2
  328. 6170 GOTO 6190
  329. 6180 XO=O:YO=0
  330. 6190 GR.15+16:REM ERASE SCREEN AND RESET THE COLORS BACK
  331. 6200 POKE 708,BR(0):POKE 709,BR(1):POKE 710,BR(2):CB=0:REM Set Current Brush to 0
  332. 6210 X1=0:Y1=0
  333. 6220 RETURN
  334. 6499 REM * PLOT *
  335. 6500 X1=ASC(PM$(IP+1,IP+1))
  336. 6510 Y1=ASC(PM$(IP+2,IP+2))
  337. 6520 GOSUB 1000:REM Check Legal X/Y
  338. 6530 IF ER>0 THEN RETURN
  339. 6540 PLOT (X1*HZ)+XO,(Y1*VZ)+YO
  340. 6550 RETURN
  341. 6499 REM * DRAWTO *
  342. 6600 X1=ASC(PM$(IP+1,IP+1))
  343. 6610 Y1=ASC(PM$(IP+2,IP+2))
  344. 6620 GOSUB 1000:REM Check Legal X/Y
  345. 6630 IF ER>0 THEN RETURN
  346. 6640 DRAWTO (X1*HZ)+XO,(Y1*VZ)+YO
  347. 6650 RETURN
  348. 6699 REM * LINE *
  349. 6700 X1=ASC(PM$(IP+1,IP+1))
  350. 6710 Y1=ASC(PM$(IP+2,IP+2))
  351. 6720 GOSUB 1000:REM Check Legal X/Y
  352. 6730 IF ER>0 THEN RETURN
  353. 6740 PLOT (X1*HZ)+XO,(Y1*VZ)+YO
  354. 6750 X1=ASC(PM$(IP+3,IP+3))
  355. 6760 Y1=ASC(PM$(IP+4,IP+4))
  356. 6770 GOSUB 1000:REM Check Legal X/Y
  357. 6780 IF ER>0 THEN RETURN
  358. 6790 DRAWTO (X1*HZ)+XO,(Y1*VZ)+YO
  359. 6800 RETURN
  360. 6899 REM * CIRCLE *
  361. 6900 X1=ASC(PM$(IP+1,IP+1))
  362. 6910 Y1=ASC(PM$(IP+2,IP+2))
  363. 6920 A0=ASC(PM$(IP+3,IP+3))
  364. 6930 GOSUB 1000:REM Check Legal X/Y
  365. 6940 IF ER>0 THEN RETURN
  366. 6950 X2=X1:Y2=Y1
  367. 6960 X1=X2+(A0*COS(0)):Y1=Y2+(A0*SIN(0))
  368. 6970 PLOT (X1*HZ)+XO,(Y1*VZ)+YO
  369. 6980 FOR I=0 TO 360 STEP 6:REM DRAW CIRCLE
  370. 6990 X1=X2+(A0*COS(I))
  371. 7000 Y1=Y2+(A0*SIN(I))
  372. 7010 GOSUB 1000:REM Check Legal X/Y
  373. 7020 IF ER>0 THEN RETURN
  374. 7030 DRAWTO (X1*HZ)+XO,(Y1*VZ)+YO
  375. 7040 NEXT I
  376. 7050 RETURN
  377. 7099 REM * ELLIPSE *
  378. 7100 X1=ASC(PM$(IP+1,IP+1))
  379. 7110 Y1=ASC(PM$(IP+2,IP+2))
  380. 7120 A0=ASC(PM$(IP+3,IP+3))
  381. 7130 A1=ASC(PM$(IP+4,IP+4))
  382. 7140 GOSUB 1000:REM Check Legal X/Y
  383. 7150 IF ER>0 THEN RETURN
  384. 7160 X2=X1:Y2=Y1
  385. 7170 X1=X2+(A0*COS(0)):Y1=Y2+(A1*SIN(0))
  386. 7180 PLOT (X1*HZ)+XO,(Y1*VZ)+YO
  387. 7190 FOR I=0 TO 360 STEP 6:REM DRAW CIRCLE
  388. 7200 X1=X2+(A0*COS(I))
  389. 7210 Y1=Y2+(A1*SIN(I))
  390. 7230 GOSUB 1000:REM Check Legal X/Y
  391. 7240 IF ER>0 THEN RETURN
  392. 7250 DRAWTO (X1*HZ)+XO,(Y1*VZ)+YO
  393. 7260 NEXT I
  394. 7270 RETURN
  395. 7299 REM * COLOR *
  396. 7300 A0=ASC(PM$(IP+1,IP+1))
  397. 7310 A1=INT(A0/MC)
  398. 7320 A0=A0-A1*MC:REM THE COLOR SET SHOULD BE THE A0 MOD MC
  399. 7330 COLOR A0+1:CB=A0
  400. 7340 RETURN
  401. 7399 REM * CLEAR *
  402. 7400 GRA.15+16:REM ERASE SCREEN AND RESET THE COLORS BACK
  403. 7410 POKE 708,BR(0):POKE 709,BR(1):POKE 710,BR(2):CB=0:REM Set Current Brush to 0
  404. 7420 X1=0:Y1=0
  405. 7430 RETURN
  406. 7499 REM * BRUSH *
  407. 7500 A0=ASC(PM$(IP+1,IP+1))
  408. 7510 A1=ASC(PM$(IP+2,IP+2))
  409. 7520 IF A0>=MC THEN RETURN:REM IF BRUSH HIGHER THAN SYSTEM SUPPORTS RETURN (NOP)
  410. 7530 IF A1>9 THEN ER=12:RETURN
  411. 7540 BR(A0)=PA(A1):POKE 708+A0,BR(A0)
  412. 7550 RETURN
  413. 7599 REM * ARC *
  414. 7600 X1=ASC(PM$(IP+1,IP+1))
  415. 7610 Y1=ASC(PM$(IP+2,IP+2))
  416. 7620 A0=ASC(PM$(IP+3,IP+3))
  417. 7630 A1=ASC(PM$(IP+4,IP+4))
  418. 7640 A2=ASC(PM$(IP+5,IP+5))
  419. 7650 GOSUB 1000:REM Check Legal X/Y
  420. 7660 IF ER>0 THEN RETURN
  421. 7670 X2=X1:Y2=Y1
  422. 7680 IC=6:IF A0>A1 THEN IC=-6
  423. 7690 A0=A0/(256/360):A1=A1/(256/360):REM CONVERT BINDEGREES TO DEGRESS
  424. 7700 X1=X2+(A2*COS(A0)):Y1=Y2+(A2*SIN(A0))
  425. 7710 PLOT (X1*HZ)+XO,(Y1*VZ)+YO
  426. 7720 FOR I=A0 TO A1 STEP IC:REM DRAW ARC
  427. 7730 X1=X2+(A2*COS(I))
  428. 7740 Y1=Y2+(A2*SIN(I))
  429. 7750 GOSUB 1000:REM Check Legal X/Y
  430. 7760 IF ER>0 THEN RETURN
  431. 7770 DRAWTO (X1*HZ)+XO,(Y1*VZ)+YO
  432. 7780 NEXT I
  433. 7790 RETURN
  434. 7799 REM * ELLIPSE ARC *
  435. 7800 X1=ASC(PM$(IP+1,IP+1))
  436. 7810 Y1=ASC(PM$(IP+2,IP+2))
  437. 7820 A0=ASC(PM$(IP+3,IP+3))
  438. 7830 A1=ASC(PM$(IP+4,IP+4))
  439. 7840 A2=ASC(PM$(IP+5,IP+5))
  440. 7850 A3=ASC(PM$(IP+6,IP+6))
  441. 7860 GOSUB 1000:REM Check Legal X/Y
  442. 7870 IF ER>0 THEN RETURN
  443. 7880 X2=X1:Y2=Y1
  444. 7890 IC=6:IF A0>A1 THEN IC=-6
  445. 7900 A0=A0/(256/360):A1=A1/(256/360):REM CONVERT BINDEGREES TO DEGRESS
  446. 7910 X1=X2+(A2*COS(A0)):Y1=Y2+(A3*SIN(A0))
  447. 7920 PLOT (X1*HZ)+XO,(Y1*VZ)+YO
  448. 7930 FOR I=A0 TO A1 STEP IC:REM DRAW ARC
  449. 7940 X1=X2+(A2*COS(I)):Y1=Y2+(A3*SIN(I))
  450. 7950 GOSUB 1000:REM Check Legal X/Y
  451. 7960 IF ER>0 THEN RETURN
  452. 7970 DRAWTO (X1*HZ)+XO,(Y1*VZ)+YO
  453. 7980 NEXT I
  454. 7990 RETURN
  455. 9900 DATA PLOT,2,DRAWTO,2,LINE,4,CIRCLE,3,ELLIP,4,COLOR,1,CLEAR,0,BRUSH,2,PIC,3,ARC,5,EARC,6,;
  456. 9920 DATA RUN,LIST,SAVE,LOAD,NEW,COPY,PASTE,;
  457. 9930 DATA 0,55,39,215,199,119,135,87,255
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement