150 DIM M$(10,3),ES$(8),LD%(2),PR$(4): FOR J = 1 TO 3: READ IT%(J): READ M$(0,J): FOR I = 1 TO IT%(J): READ M$(I,J): NEXT : NEXT : FOR I = 2 TO 8: READ ES$(I): NEXT : FOR I = 1 TO 4: READ PR$(I): NEXT
620 GOSUB 670: PRINT B$;: GET K$: ON K$ = E$ GOTO 590: ON K$ = CHR$(13) GOTO 630: PRINT K$:T1 = SL:SL = VAL(K$): IF SL <1 OR SL >7 THEN SL = T1: GOTO 620
630 GOSUB 680: PRINT B$;: GET K$: ON K$ = E$ GOTO 590: ON K$ = CHR$(13) GOTO 640: PRINT K$:T1 = DR:DR = VAL(K$): IF DR <1 OR DR >4 THEN DR = T1: GOTO 630
640 C1$ = C$ +",S" + STR$(SL) +",D" + STR$(DR)
650 HOME : PRINT : PRINT D$;C1$: PRINT : PRINT : PRINT :M% = T:X% = 0: IF NOT PRODOS THEN RETURN
1350 GOSUB 850: GOSUB 800: IF PEEK(6) THEN SA = SA -4:LN = LN +4:NUM = 1: POKE 6,0
1360 GOSUB 1390
1370 IF SA +LN > = 16384 THEN K$ = OLD$: & DEL NUM: GOSUB 420:NX = NUM: GOTO 1370
1380 ON SAVFLAG% = 2 GOSUB 1000
1390 POKE 2, FN LO(SA): POKE 3, FN HI(SA):X = SA +LN -1: POKE 4, FN LO(X): POKE 5, FN HI(X): RETURN : REM START & END ADR
1400 POP : GOTO 1030
1410 REM LOAD 2D TABLE
1420 HOME : VTAB 12
1430 IF NOT PRODOS THEN VTAB 5: PRINT : PRINT "DON'T LOAD A FILE LONGER THAN": PRINT INT((20480 -SA -LN)/256);" SECTORS": VTAB 12
1440 PRINT "NAME OF FILE CONTAINING SHAPES TO ADD": PRINT "TO "OLD$: PRINT : GOSUB 500: ON PEEK(ESCAPE) GOTO 1530: ON C GOTO 1440,1420: IF IN$ = "" THEN 1420
1450 GOSUB 820: PRINT IN$: PRINT "AND ";R$: GET K$: PRINT : ON K$ = E$ GOTO 1420
1560 ON NOT X GOTO 1030:M% = 4:PR% = 1: GOSUB 850: ON X GOSUB 2100,900,1710,1820,1850: GOTO 1550
1570 REM 2TABLES
1580 ON NOT LD%(2) GOTO 1240:M% = 3: GOSUB 200: PRINT "ADD TO: ";OLD$: PRINT "FROM: ";NW$: PRINT : POKE 34,3: GOSUB 860: GOSUB 700
1590 M% = 5:PR% = 1: GOSUB 840: ON X = 0 GOTO 1030: ON X GOSUB 1610,1660,1710,1820,1850,2100,1870,900,1730,1780: GOTO 1580
1600 REM ADD ONE
1610 GOSUB 1900:OP$ = "ADD":OP% = 1: GOSUB 1980: ON NOT K GOTO 1640:OPT = 0: GOSUB 390: ON ANSWER < >1 GOTO 1640
1620 & STORE K AT END : IF PEEK(ESCAPE) THEN GOSUB 230: IF NOT PEEK(ESCAPE) THEN 1620
1630 IF NOT PEEK(ESCAPE) AND NOT LD%(2) THEN GOSUB 310
1640 GOSUB 420: RETURN
1650 REM ADD RANGE
1660 OP$ = "ADD": GOSUB 1930: GOSUB 320: FOR I = 0 TO J
1670 & STORE L +I AT END : IF PEEK(ESCAPE) THEN GOSUB 230: IF NOT PEEK(ESCAPE) THEN 1670
1680 PRINT ".";: NEXT
1690 GOSUB 420: ON NOT LD%(2) GOSUB 310: RETURN
1700 REM VIEW
1710 ON NOT NUM GOTO 1920:OP$ = "VIEW": GOSUB 850: GOSUB 1980: RETURN
1720 REM INSERT ONE
1730 GOSUB 1900: ON NOT NUM GOTO 1610:OP$ = "INSERT":OP% = 1: GOSUB 1980:L = K: ON NOT K GOTO 1760: GOSUB 850:PR% = 4: GOSUB 1980: ON NOT K GOTO 1760:OPT = 0: GOSUB 390: ON ANSWER < >1 GOTO 1760: GOSUB 840
1740 & STORE L AT K: IF PEEK(ESCAPE) THEN GOSUB 230: IF NOT PEEK(ESCAPE) THEN 1740
1750 IF NOT PEEK(ESCAPE) AND NOT LD%(2) THEN GOSUB 310
1760 GOSUB 420: RETURN
1770 REM INSERT RANGE
1780 OP$ = "INSERT": GOSUB 1930: GOSUB 850:PR% = 4: GOSUB 1980: ON NOT K GOTO 1830: GOSUB 840: GOSUB 320: FOR I = 0 TO J
1790 & STORE L +I AT K +I: IF PEEK(ESCAPE) THEN GOSUB 230: IF NOT PEEK(ESCAPE) THEN 1790
1800 GOTO 1680
1810 REM DELETE ONE
1820 ON NOT NUM GOTO 1920:OP$ = "DELETE": GOSUB 850: GOSUB 1980: ON NOT K GOTO 1830: GOSUB 390: ON (ANSWER = 2 OR ANSWER = 3) GOTO 1830: & DEL K: GOSUB 420
1830 RETURN
1840 REM DELETE RANGE
1850 ON NOT NUM GOTO 1920:OP$ = "DELETE": GOSUB 850: GOSUB 1940: GOSUB 320: GOSUB 330: FOR I = 1 TO (K -L +1): & DEL L: PRINT ".";: NEXT : GOSUB 420: RETURN
1860 REM TABLE2
1870 HOME : GOSUB 760: PRINT "ARE YOU SURE YOU WANT TO REMOVE": PRINT "==> ";NW$: PRINT "FROM MEMORY? (Y/N) ?";:OPT = 0: GOSUB 350: IF ANSWER >1 THEN RETURN
1880 GOSUB 1420: RETURN
1890 POKE 34,0: HOME : TEXT : VTAB 12: PRINT "A TABLE CAN ONLY CONTAIN 255 SHAPES": PRINT : PRINT "THIS WOULD MAKE "NUM +K -L +1: PRINT : GOSUB 450: POP : RETURN
1900 IF NUM = 255 THEN HOME : VTAB 12: PRINT "TABLE FULL...": PRINT : GOSUB 450: POP
1910 RETURN
1920 HOME : VTAB 12: PRINT "NO SHAPES IN TABLE...": PRINT : GOSUB 450: RETURN
1930 ON NUM = 255 GOTO 1900
1940 PR% = 2:OP% = 2: GOSUB 1980:L = K: ON NOT K GOTO 1960:PR% = 3: GOSUB 1980: ON NOT K GOTO 1960: GOSUB 470:T1 = K:J = K -L: IF NUM +J +1 >255 AND OP$ < >"DELETE" THEN 1890
2000 K = 0: GOSUB 770: VTAB 20: PRINT : PRINT "NUMBER OF SHAPES:";NX: PRINT "WHAT IS THE NUMBER OF THE ";PR$(PR%): PRINT "YOU WISH TO ";OP$;" ==> ";: HTAB 33: PRINT "#";: GOSUB 2080
2010 & INPUT K$,3: ON PEEK(ESCAPE) GOTO 2070:X = 0:K = VAL(K$):K = K +(K = 0): IF K >NX THEN K = 1
2020 DRAW K AT 140,75: ON X GOTO 2040: HOME : GOSUB 770: VTAB 20: PRINT : IF NX >1 THEN PRINT "HIGHER ";V1$;"-->";V2$;" ";: FLASH : PRINT " ";: NORMAL : PRINT " ";V1$;"<--";V2$;" LOWER";: GOSUB 2080
2030 PRINT : IF OP$ < >"VIEW" THEN PRINT R1$;" IF THIS IS THE ";PR$(PR%): PRINT "YOU WANT TO "OP$: GOSUB 2080
2050 GET K$: ON K$ = CHR$(13) GOTO 2070: IF K$ = E$ THEN K = 0: RETURN
2060 T = K -(K$ = CHR$(8)) +(K$ = CHR$(21)):T = T *(T < = NX) +NX *(T <1) +(T >NX): ON T = K GOTO 2050: HCOLOR= 0: DRAW K AT 140,75:K = T: HCOLOR= 3: GOTO 2020
2070 RETURN
2080 & MOVE,1616,2047 TO 2640: RETURN : REM MOVE TEXT PAGE 1 TO PAGE 2
2090 REM SAVE TABLE
2100 TEXT : HOME : VTAB 5: PRINT OLD$;" NOW": PRINT "CONTAINS ";NUM;" SHAPES.": PRINT "AND IS ";LN;" BYTES LONG":X = 25: IF PRODOS THEN X = 10
2110 FL$ = OLD$: IF LEN(OLD$) >4 THEN IF MID$ (OLD$, LEN(OLD$) -3,3) = "REV" THEN 2150
2120 IF SAVFLAG% = 3 THEN 2170
2130 IF LEN(FL$) >X THEN FL$ = LEFT$(FL$,X)
2140 FL$ = FL$ +".REV1": GOTO 2170
2150 T = VAL( RIGHT$(OLD$,1)): IF T = 9 AND LEN(OLD$) = X +5 THEN X = X -1:FL$ = LEFT$(FL$,X) + RIGHT$(FL$,5)
2160 T = VAL( RIGHT$(FL$,1)):T = T +1:FL$ = LEFT$(FL$, LEN(FL$) -1) + STR$(T)
2180 PRINT "> ";FL$;: HTAB 2: & INPUT IN$: ON PEEK(ESCAPE) GOTO 2270: ON IN$ = "" GOTO 2250: IF IN$ = "?" THEN GOSUB 510: GOTO 2220
2190 FL$ = IN$: GOTO 2240
2200 HOME : VTAB 11: PRINT
2210 PRINT "ENTER NEW NAME UNDER WHICH TO SAVE": PRINT "YOUR REVISED VERSION OF": PRINT OLD$: PRINT : GOSUB 500
2220 ON PEEK(ESCAPE) GOTO 2270: ON C GOTO 2210,2200:FL$ = IN$: IF FL$ = "" THEN 2200
2230 HOME : GOSUB 880: IF K$ = E$ THEN POKE ESCAPE,1: GOTO 2270
2240 ONERR GOTO 2390
2250 X% = 3: PRINT : PRINT D$"BSAVE"FL$",A";SA;",L";LN: IF SAVFLAG% THEN SAVFLAG% = 1
2260 & ABSFL$,OLD$
2270 GOSUB 1220: RETURN
2280 REM QUIT
2290 HOME :M% = 2: GOSUB 760: IF SAVFLAG% <2 THEN 2330
2300 PRINT "YOU CHANGED:": PRINT : PRINT "==> ";OLD$: PRINT : PRINT "DO YOU WANT TO SAVE THE CHANGES": PRINT "BEFORE YOU QUIT (Y/N) ";:OPT = 0: GOSUB 350: ON ANSWER GOTO 2310,2320,1030
2310 GOSUB 2100: ON PEEK(ESCAPE) GOTO 1030
2320 HOME :M% = 2: GOSUB 760
2330 A$ = " QUIT PROGRAM ": GOSUB 830: PRINT : PRINT "ARE YOU SURE (Y/N) => ";:OPT = 0: GOSUB 350: IF ANSWER < >1 THEN 1030
2340 IF PRODOS THEN POKE 48996,0
2350 HOME : END
2360 REM ONERR
2370 CALL -3288: GOSUB 2510: ON ER < >6 GOTO 2400:M% = 6: GOSUB 770: GOSUB 2500: ON K$ = E$ GOTO 2380: ON X% GOTO 1320,1470
2380 ON X% GOTO 1270,1420
2390 CALL -3288: GOSUB 2510
2400 VTAB 11: PRINT : IF ER = 4 THEN PRINT "DISK WRITE-PROTECTED": GOTO 2490
2410 IF (PRODOS AND ER = 16) OR ( NOT PRODOS AND ER = 11) THEN PRINT Q$;IN$;Q$: PRINT "IS NOT A LEGAL FILE NAME":IN$ = "": GOSUB 2520: ON X% GOTO 1270,1420,2100: IF X% = 5 THEN 910
2420 IF ER = 9 THEN PRINT "DISK FULL": GOTO 2490
2430 IF ER = 8 OR ER = 3 THEN PRINT "I/O ERROR... CHECK DISK DRIVE": GOTO 2490
2440 IF ER = 13 THEN PRINT "FILE TYPE MISMATCH": GOTO 2490
2450 IF ER = 255 THEN PRINT "PLEASE EXIT THROUGH MENU": RESUME
2460 IF ER = 12 AND PRODOS THEN PRINT "TABLE TOO LONG TO LOAD": GOSUB 2520:LD%(X%) = 0: ON X% GOTO 1270,1420
2470 IF ER = 90 OR ER = 16 AND NOT PRODOS THEN PRINT "TABLE TOO LONG - OVERWROTE PROGRAM": PRINT : PRINT "RUN PROGRAM AGAIN AND DELETE SOME SHAPES": PRINT : PRINT CHR$(4)"FP": END
2480 PRINT "ERROR NUMBER ";ER;" AT LINE "; FN PTR(218)
2490 GOSUB 2520: ON X% GOTO 1310,1450,2230,510,910: RESUME
2500 VTAB 9: PRINT : PRINT Q$; LEFT$(IN$,38);Q$: PRINT "IS NOT ON THIS DISK": PRINT "PUT IN THE RIGHT DISK AND PRESS ANY KEY": GET K$: PRINT : RETURN
2510 ER = PEEK(222): PRINT CHR$(7): TEXT : HOME : RETURN
2520 PRINT : PRINT : PRINT R$;" TO CONTINUE ==> ";: GET K$: PRINT : RETURN
2530 REM MENU
2540 DATA 4,MAIN MENU,EDIT A SINGLE TABLE,WORK WITH TWO TABLES,START A NEW TABLE,QUIT
2550 DATA 5,SINGLE TABLE MENU,SAVE MAIN SHAPE TABLE,SAVE A SHAPE AS A VECTOR FILE,SEE SHAPES IN TABLE,DELETE A SHAPE,DELETE RANGE OF SHAPES
2560 DATA 10,TWO TABLE MENU,ADD A SHAPE TO MAIN TABLE,ADD RANGE OF SHAPES,SEE SHAPES IN MAIN TABLE,DELETE A SHAPE FROM MAIN TABLE,DELETE RANGE OF SHAPES
2570 DATA SAVE MAIN SHAPE TABLE,GET NEW SECOND TABLE,SAVE A SHAPE FROM SECOND TABLE,INSERT A SHAPE IN MAIN TABLE,INSERT RANGE OF SHAPES
2580 DATA MAIN MENU,MAIN MENU,SINGLE TABLE MENU,TWO TABLES MENU,ENTER FILENAME,CHANGE SLOT/DRIVE,DRIVE/PATHNAME
2590 DATA SHAPE,FIRST SHAPE,LAST SHAPE,SHAPE WHERE