Apple Color Plotter: AppleSoft BASIC Chart Maker II (1 of 3)

This is the Applesoft BASIC source for "Chart Maker II", a demonstration program for the Apple Color Plotter. It provides an easy way to create charts and signs with the plotter. Just startup Applesoft, EXEC this file, and save the program to disk.

Note: This is Part 1 of 3 Parts, all 3 parts must be combined together to complete the program.
The file named "C.DESCRIPTION" should be saved as a text file. It is a sample file created by Chart Maker and is ready to plot.

10 D$ = CHR$(4): PRINT D$;"NOMON C,I,O"
12 FOR I = 0 TO 9: READ ZZ: POKE 768 + I,ZZ: NEXT
14 PRINT D$;"PR #3"
20 DIM TXT$(10),CENTER$(10),DENT(10),SIZE(10),BOLD$(10)
21 DIM COL(10),SL$(10)
25 GOSUB 7300
30 D$ = CHR$(4)
40 UC = 128:LC = UC + 32:APPLE$ = CHR$(127)
50 D$ = CHR$(4): GOTO 1000
60 GOSUB 99: PRINT " ";: PRINT "--------";: RETURN
61 GOSUB 99: PRINT " ";: PRINT "========";: RETURN
71 POKE 32,2: POKE 33,77: POKE 34,1: POKE 35,13:HOME : TEXT : RETURN
72 POKE 32,2: POKE 33,77: POKE 34,14: POKE 35,14:HOME : TEXT : RETURN
73 POKE 32,2: POKE 33,77: POKE 34,16: POKE 35,23:HOME : TEXT : RETURN
75 GOSUB 73:M$ = BT$:PV = 23: GOSUB 350: RETURN
82 PV = 1:FOR PH = 23 TO 79 STEP 10:INVERSE:GOSUB 99:PRINT " ":NEXT:NORMAL
83 POKE 32,19: POKE 33,60: POKE 34,1: POKE 35,1:HOME : TEXT : RETURN
85 POKE 32,2: POKE 33,77: POKE 34,14: POKE 35,14:HOME : TEXT : RETURN
86 POKE 32,19: POKE 33,60: POKE 34,3: POKE 35,13:HOME : TEXT : RETURN
87 POKE 32,2: POKE 33,77: POKE 34,19: POKE 35,22:HOME : TEXT : RETURN
90 REM*** ONERR GOTO 900
91 CM = PEEK (49152): IF CM < 128 THEN GOTO 90
92 CM = CM - 128: A = PEEK (49168)
93 IF PEEK ( - 16287) > 127 THEN CM = CM + 128
94 RETURN
97 NORMAL : HOME :PRINT "Applesoft BASIC -- Type 'RUN HELLO' to Restart":PRINT "or, 'GOTO 50' to Restart with last chart": END
99 POKE 1403,PH: VTAB PV: RETURN
101 P2 = PH: GOSUB 99:A$ = "":B$ = "":IF LEN (Z$) < > 0 THEN Z1$ = "9"
102 FOR I = 1 TO SL: PRINT ".";: NEXT :PH = P2: GOSUB 99: FOR I = 1 TO SL + 1
105 INVERSE : PRINT " ";: NORMAL :PH = P2 + I - 1: GOSUB 99
106 GOSUB 90:A$ = CHR$(CM): IF A$ = CHR$(27) THEN RETURN
107 IF A$ = CHR$(13) THEN 120
108 IF NB=1 AND ASC(A$)=>8 AND ASC (A$) < = 21 THEN GOTO 182
113 IF A$=CHR$(127) OR A$= CHR$(8) THEN GOSUB 140: GOTO 105
114 FG = 0: GOSUB 130: IF FG=1 THEN PRINT CHR$(7);: GOTO 105
116 IF A$ = CHR$(13) GOTO 120
117 PRINT A$;:B$ = B$ + A$:A$ = "": NEXT
119 IF RIGHT$ (B$,1) < > CHR$(13) THEN GOSUB 370:PH = P2: GOTO 101
120 PH = P2 + I - 1: GOSUB 99: PRINT ".";:Z1$ = "": RETURN
130 IF ASC (A$) = 13 THEN 139
131 IF NB=0 AND ASC(A$)=> 8 AND ASC(A$) <= 21 THEN FG=1: RETURN
132 IF ASC(A$)=>123 OR ASC(A$)>90 AND ASC(A$)<97 THEN FG = 1:RETURN
139 FG = 0: RETURN
140 IF I = SL + 1 THEN PRINT " ";:I=I - 1:PH=(P2 + I - 1):GOSUB 99:GOTO 155
142 IF LEN (Z$) > 0 AND I=1 THEN SL=SL + 1:PH=PH - 0:GOSUB 99: PRINT ".";:PH = PH - 1:Z$ = "":P2 = P2 - 1:B$ = "":
GOSUB 99: GOTO 180
145 PRINT ".";:PH = P2 - 1:I = I - 1:PH = P2 + I - 2: GOSUB 99
155 IF I = < 0 THEN I = 1:PH = P2: GOSUB 99:B$ = "": RETURN
160 IF I = 1 THEN B$ = "": GOTO 170
165 B$ = LEFT$ (B$,I - 1)
170 PH = P2 + (I - 1): GOSUB 99: RETURN
180 RETURN
182 IF A$ = CHR$(11) THEN DI = 72:A$ = CHR$(13): GOTO 120:REM U
185 IF A$ = CHR$(10) THEN DI = 80:A$ = CHR$(13): GOTO 120:REM D
188 IF A$ = CHR$(8) THEN DI = 75:A$ = CHR$(13): GOTO 120:REM L
191 IF A$ = CHR$(21) THEN DI = 77:A$ = CHR$(13): GOTO 120:REM R
194 PRINT CHR$(7);: GOTO 106
201 X9 = 0:X8 = 0:H9 = 0: GOSUB 101: IF A$=CHR$(27) THEN RETURN
202 N$ = Z$ + B$: FOR H = 1 TO LEN (N$)
203 IF LEN (N$) = 0 THEN X9 = 1: RETURN
204 IF ASC ( MID$ (N$,H,1)) = 46 THEN H9 = H9 + 1: GOTO 212
205 IF ASC ( MID$ (N$,H,1)) = 45 THEN H8 = H: GOTO 209
206 IF ASC ( MID$ (N$,H,1)) < 48 THEN X9 = 1: RETURN
207 IF ASC ( MID$ (N$,H,1)) > 57 THEN X9 = 1: RETURN
208 GOTO 212
209 IF H8 = 1 THEN 212
210 X9 = 1: RETURN
212 NEXT
213 X8 = VAL (N$)
214 IF X8 > UL THEN X9 = 1: RETURN
215 IF X8 < LL THEN X9 = 1: RETURN
216 X9 = 2: RETURN
250 IF LEN (B$) = 0 THEN B$ = "Y": GOSUB 99: PRINT B$;:
251 RETURN
260 IF A$ > CHR$(64) AND A$ < CHR$(91) THEN RETURN :REM Uppercase
261 IF A$ > CHR$(96) AND A$ < CHR$(123) THEN RETURN :REM Lowercase
262 IF A$ > CHR$(47) AND A$ < CHR$(58) THEN RETURN :REM Numbers
263 IF A$ = CHR$(45) THEN RETURN : REM - SIGN
264 IF A$ = CHR$(46) THEN RETURN : REM PERIOD
265 IF A$ = CHR$(32) THEN RETURN : REM space
269 OK = 0: RETURN
300 INVERSE :PV = 14:PH = 30:M$ = " ":GOSUB 352:PH=20:M$="Default Names: " +DV$+MT$:
GOSUB 352:NORMAL:RETURN
340 IF LEN (B$) = 0 THEN B$ = MT$: GOSUB 99: PRINT B$;: RETURN
345 GOSUB 99: INVERSE : PRINT ">";: NORMAL : RETURN
349 GOSUB 72:PV = 15:PH = 3: GOSUB 99: PRINT MA$;:PH=46-INT ((LEN(MS$)/2)):
GOSUB 99: PRINT MS$;:RETURN
350 PH = 40 - INT (( LEN (M$) / 2)): GOSUB 99: PRINT M$;:RETURN
351 GOSUB 75:GOSUB 72:PV=15:PH=3:GOSUB 99:PRINT MA$;:
PH=46-INT ((LEN(MS$)/2)): GOSUB 99: PRINT MS$;:RETURN
352 GOSUB 99: PRINT M$;: RETURN
353 PH = 40 - INT (( LEN (M$) / 2)): GOSUB 99: PRINT M$;: RETURN
357 PV = 15:PH = INT (40 - ( LEN (M$) / 2)): GOSUB 99: PRINT M$;: RETURN :REM Print centered line
360 GOSUB 250: IF B$ = "Y" OR B$ = "y" THEN Q = 1: GOTO 365
362 IF B$ = "N" OR B$ = "n" THEN Q = 2: GOTO 365
363 GOSUB 369: GOTO 360
365 RETURN
369 PRINT CHR$(7);: RETURN
370 PRINT CHR$(7);:IF LEN (Z1$)<> 0 AND Z$ <> "" THEN Z$="": SL = SL + 1:P2 = P2 - 1
374 PH = P2: GOSUB 99: FOR I = 1 TO SL + 1: PRINT " ";: NEXT :RETURN
400 OA%=0:CM=0:GOSUB 90:A$=CHR$(CM):IF CM>96 AND CM<123 THEN CM=CM - 32:RETURN
420 IF CM = 13 THEN RETURN
425 IF CM > 64 AND CM < 91 THEN RETURN
426 IF CM = 44 THEN GOTO 475
427 IF CM = 46 THEN GOTO 475
430 IF CM > 41 AND CM < 58 THEN RETURN
435 IF CM = 27 THEN RETURN
440 IF CM = 32 THEN RETURN
470 IF CM = (81 + UC) OR CM = (81 + LC) THEN OA% = 1: CM = 16: RETURN : REMQ
475 PRINT CHR$(7);: GOTO 400
700 IF V(K4,L1) > 999999999 THEN V(K4,L1) = 0
701 IF V(K4,L1) < - 99999999 THEN V(K4,L1) = 0
705 RETURN
710 IF V(K4,L1) > 9999999.9 THEN V(K4,L1) = 0
711 IF V(K4,L1) < - 999999.9 THEN V(K4,L1) = 0
715 RETURN
720 IF V(K4,L1) > 999999.99 THEN V(K4,L1) = 0
721 IF V(K4,L1) < - 99999.99 THEN V(K4,L1) = 0
725 RETURN
730 IF V(K4,L1) > 99999.999 THEN V(K4,L1) = 0
731 IF V(K4,L1) < - 9999.999 THEN V(K4,L1) = 0
735 RETURN
740 IF V(K4,L1) > 9999.9999 THEN V(K4,L1) = 0
741 IF V(K4,L1) < - 999.9999 THEN V(K4,L1) = 0
745 RETURN
900 EC = PEEK (222): IF EC = 255 GOTO 97
901 GOTO 90
1000 GOSUB 1001: GOTO 1200
1001 INVERSE : HOME : NORMAL
1002 REM*** GOSUB 71:GOSUB 72:GOSUB 73
1005 M$ = " ":PV = 1: INVERSE : GOSUB 350
1010 M$ = "Chart Maker IIe":PV = 1: INVERSE : GOSUB 350
1020 M$ = "Press 'ESC' to 'Back Out' of Any Function":PV = 14: GOSUB 350
1025 M$="Public Domain Software courtesy of Apple Computer Inc": PV = 24:GOSUB 350: NORMAL
1030 PLR$ = "2"
1090 GOSUB 7000
1099 RETURN
1200 Z = 0:Z$ = "": GOSUB 73
1205 MS$="New Enter Move Clear Save Load Draw OA-Quit":MA$="FUNCTIONS:": GOSUB 351
1210 ONERR GOTO 97
1220 GOSUB 400
1230 IF OA% = 1 AND CM = 16 THEN 97
1235 IF OA% = 1 THEN 1299
1240 IF CM = 78 THEN GOSUB 8000: GOTO 1200: REM Start New Chart
1250 IF CM = 69 THEN X9 = 0:X8 = 0: GOSUB 6000: GOTO 1200: REM Enter a Line
1260 IF CM = 68 THEN GOSUB 9000: GOTO 1200: REM Draw the Chart
1270 IF CM = 67 THEN GOSUB 8500: GOTO 1200: REM Clear Line
1272 IF CM = 77 THEN GOSUB 10000: GOTO 1200: REM Move a line
1274 IF CM = 83 THEN GOSUB 2000: GOTO 1200: REM Save a Chart
1275 IF CM = 76 THEN GOSUB 3000: GOTO 1200: REM Load a Chart
Published Date: Feb 20, 2012