home *** CD-ROM | disk | FTP | other *** search
- 10000 REM **************************************************************
- 10010 REM ** THE DESIGNER V1.0 **
- 10020 REM ** Copyright 1983, by Jan B. Young **
- 10030 REM **************************************************************
- 10035 REM changed for QBasic by jb/'94
- 10040 KEY OFF: ON ERROR GOTO 14930: CAPS = 1: PURGE = 0
- 10050 OPEN "DESIGNER.DRV" FOR INPUT AS #1
- 10060 INPUT #1, DRIVE$
- 10070 CLOSE #1
- 10080 KEY(1) ON: ON KEY(1) GOSUB 10440
- 10090 KEY(2) ON: ON KEY(2) GOSUB 10450
- 10100 KEY(3) ON: ON KEY(3) GOSUB 10460
- 10110 KEY(4) ON: ON KEY(4) GOSUB 10470
- 10120 KEY(5) ON: ON KEY(5) GOSUB 10480
- 10130 KEY(6) ON: ON KEY(6) GOSUB 10490
- 10140 KEY(7) ON: ON KEY(7) GOSUB 10500
- 10150 KEY(8) ON: ON KEY(8) GOSUB 10510
- 10160 KEY(9) ON: ON KEY(9) GOSUB 10520
- 10170 KEY(10) ON: ON KEY(10) GOSUB 10530
- 10180 REM **************************************************************
- 10190 REM ** Mainline **
- 10200 REM **************************************************************
- 10210 SKIP$ = "INS": NOW$ = "INS"
- 10220 REC = 1: GOSUB 15490
- 10230 IF SKIP$ = "INS" THEN GOSUB 10540
- 10240 IF SKIP$ = "NEW" THEN GOSUB 11000
- 10250 IF SKIP$ = "TXT" THEN GOSUB 12170
- 10260 IF SKIP$ = "SCL" THEN GOSUB 12680
- 10270 IF SKIP$ = "SSP" THEN GOSUB 13470
- 10280 IF SKIP$ = "RSP" THEN GOSUB 14330
- 10290 IF SKIP$ = "ANI" THEN GOSUB 13870
- 10300 IF SKIP$ = "RSC" THEN GOSUB 14610
- 10310 IF SKIP$ = "SSC" THEN GOSUB 14740
- 10320 IF SKIP$ <> "" GOTO 10230
- 10330 SCREEN 0, 0, 0: WIDTH 80: END
- 10340 REC = 5: GOSUB 15490
- 10350 GOSUB 15220: IF TYPE$ <> "C" THEN GOTO 10350
- 10360 IF X$ < "A" OR X$ > "D" THEN GOTO 10350
- 10370 OPEN "DESIGNER.DRV" FOR OUTPUT AS #1
- 10380 WRITE #1, X$: CLOSE #1: DRIVE$ = X$: GOTO 10080
- 10390 REC = 19: GOSUB 15490: GOSUB 15220: SCREEN 0, 0, 0: END' no color/graph card
- 10400 REC = 24: GOSUB 15490: GOSUB 15220: SCREEN 0, 0, 0: END' no printer
- 10410 REM *************************************************************
- 10420 REM ** Key Settings **
- 10430 REM *************************************************************
- 10440 SKIP$ = "NEW": RETURN
- 10450 SKIP$ = "SCL": RETURN
- 10460 SKIP$ = "SSP": RETURN
- 10470 SKIP$ = "SSC": RETURN
- 10480 SKIP$ = "RSP": RETURN
- 10490 SKIP$ = "RSC": RETURN
- 10500 SKIP$ = "TXT": RETURN
- 10510 SKIP$ = "ANI": RETURN
- 10520 SKIP$ = "INS": RETURN
- 10530 SKIP$ = "": RETURN
- 10540 REM *************************************************************
- 10550 REM ** F9 INS = Instructions / Command List **
- 10560 REM *************************************************************
- 10570 NOW$ = "INS"
- 10580 REC = 28: GOSUB 15490
- 10590 LOCATE 21, 10: PRINT DRIVE$ + "."
- 10600 GOSUB 15220: IF SKIP$ <> "INS" THEN RETURN
- 10610 IF ASC(X$) = 8 THEN GOTO 10600
- 10620 IF TYPE$ <> "C" THEN GOTO 10600
- 10630 LOCATE 8, 62: PRINT USING "\ \"; " " + X$: Y$ = X$
- 10640 GOSUB 15220: IF SKIP$ <> "INS" THEN RETURN
- 10650 IF TYPE$ <> "C" THEN GOTO 10640
- 10660 IF ASC(X$) <> 8 THEN GOTO 10690
- 10670 LOCATE 8, 62: PRINT USING "\ \"; " "
- 10680 GOTO 10600
- 10690 LOCATE 8, 73: PRINT X$: Y$ = Y$ + X$
- 10700 GOSUB 15220: IF SKIP$ <> "INS" THEN RETURN
- 10710 IF TYPE$ <> "C" THEN GOTO 10700
- 10720 IF ASC(X$) <> 8 THEN GOTO 10750
- 10730 LOCATE 8, 73: PRINT " "
- 10740 GOTO 10640
- 10750 LOCATE 8, 74: PRINT X$: X$ = Y$ + X$
- 10760 REC = 0
- 10770 IF X$ = "INS" THEN GOTO 10580
- 10780 IF X$ = "GEN" THEN REC = 46
- 10790 IF X$ = "NEW" THEN REC = 140
- 10800 IF X$ = "SCL" THEN REC = 189
- 10810 IF X$ = "RSP" THEN REC = 271
- 10820 IF X$ = "SSP" THEN REC = 301
- 10830 IF X$ = "RSC" THEN REC = 328
- 10840 IF X$ = "SSC" THEN REC = 352
- 10850 IF X$ = "ANI" THEN REC = 363
- 10860 IF X$ = "TXT" THEN REC = 389
- 10870 IF X$ = "CRD" THEN REC = 435
- 10880 IF X$ = "DRV" THEN GOTO 10920
- 10890 IF REC <> 0 THEN GOTO 10910
- 10900 LOCATE 8, 62: PRINT "Try Again: ": GOTO 10600
- 10910 GOSUB 15490: RETURN
- 10920 OPEN "DESIGNER.DRV" FOR OUTPUT AS #1
- 10930 IF DRIVE$ = "A" THEN GOTO 10980
- 10940 IF DRIVE$ = "D" THEN DRIVE$ = "A"
- 10950 IF DRIVE$ = "C" THEN DRIVE$ = "D"
- 10960 IF DRIVE$ = "B" THEN DRIVE$ = "C"
- 10970 GOTO 10990
- 10980 DRIVE$ = "B"
- 10990 WRITE #1, DRIVE$: CLOSE #1: RETURN
- 11000 REM *************************************************************
- 11010 REM ** F1 NEW = New Figure or Screen **
- 11020 REM *************************************************************
- 11030 NOW$ = "NEW": REC = 471: GOSUB 15490
- 11040 GOSUB 15220: IF SKIP$ <> "NEW" THEN RETURN
- 11050 IF TYPE$ <> "C" THEN 11040
- 11060 IF X$ = "H" THEN GOTO 11090
- 11070 IF X$ = "M" THEN GOTO 11100
- 11080 GOTO 11040
- 11090 RES1 = 2: BAK = 0: GOTO 11230
- 11100 REC = 474: RES1 = 1
- 11110 GOSUB 15490
- 11120 GOSUB 15220: IF SKIP$ <> "NEW" THEN RETURN
- 11130 IF X$ = "1" THEN GOTO 11160
- 11140 IF X$ = "0" THEN GOTO 11170
- 11150 GOTO 11120
- 11160 REC = 478: PAL = 1: GOTO 11180
- 11170 REC = 489: PAL = 0
- 11180 GOSUB 15490
- 11190 GOSUB 15220: IF SKIP$ <> "NEW" THEN RETURN
- 11200 IF TYPE$ <> "C" THEN 11190
- 11210 BAK = ASC(X$) - 65
- 11220 IF BAK < 0 OR BAK > 15 THEN GOTO 11190
- 11230 RES = RES1: CLS : CLR = 1: GRID = 0: SCREEN RES: LAST = 0
- 11240 IF RES = 1 THEN COLOR BAK, PAL
- 11250 REM ********* intermediate entry point ***********
- 11260 HLOC = 160 * RES: VLOC = 100
- 11270 PSET (HLOC, VLOC)
- 11280 IF LAST = 1 THEN PRESET (HLOC, VLOC + 1), CLR
- 11290 IF LAST = 2 THEN PRESET (HLOC - 1, VLOC), CLR
- 11300 IF LAST = 3 THEN PRESET (HLOC, VLOC - 1), CLR
- 11310 IF LAST = 4 THEN PRESET (HLOC + 1, VLOC), CLR
- 11320 PURGE = 1: GOSUB 15220: IF SKIP$ <> "NEW" THEN RETURN
- 11330 IF TYPE$ = "G" THEN GOTO 11530
- 11340 IF X$ = "G" THEN GOTO 11380
- 11350 IF X$ >= "A" AND X$ <= "Z" THEN HOLD$ = X$
- 11360 IF X$ >= "0" AND X$ <= "9" THEN GOTO 11580
- 11370 GOTO 11320
- 11380 IF GRID = 1 THEN GOTO 11460
- 11390 FOR I = 9 TO 200 STEP 10
- 11400 LINE (0, I)-(4 * RES, I), 1: LINE (315 * RES, I)-(320 * RES, I), 1
- 11410 NEXT I
- 11420 FOR I = 9 TO 320 * RES STEP 10
- 11430 LINE (I, 0)-(I, 4), 1: LINE (I, 195)-(I, 200), 1
- 11440 NEXT I
- 11450 GRID = 1: GOTO 11320
- 11460 FOR I = 9 TO 200 STEP 10
- 11470 LINE (0, I)-(4 * RES, I), 0: LINE (315 * RES, I)-(320 * RES, I), 0
- 11480 NEXT I
- 11490 FOR I = 9 TO 320 * RES STEP 10
- 11500 LINE (I, 0)-(I, 4), 0: LINE (I, 195)-(I, 200), 0
- 11510 NEXT I
- 11520 GRID = 0: GOTO 11320
- 11530 IF X$ = "H" THEN GOTO 12140
- 11540 IF X$ = "M" THEN GOTO 12120
- 11550 IF X$ = "P" THEN GOTO 12100
- 11560 IF X$ = "K" THEN GOTO 12080
- 11570 GOTO 11320
- 11580 IF HOLD$ <> "P" THEN GOTO 11630
- 11590 IF X$ < "0" OR X$ > "3" OR (RES = 2 AND X$ > "1") THEN GOTO 11630
- 11600 PRESET (HLOC, VLOC)
- 11610 PAINT (HLOC, VLOC), (ASC(X$) - 48), CLR
- 11620 PRESET (HLOC, VLOC), CLR
- 11630 IF HOLD$ = "F" AND X$ = "0" THEN CLR = 0
- 11640 IF HOLD$ = "F" AND X$ = "1" THEN CLR = 1
- 11650 IF HOLD$ = "F" AND X$ = "2" THEN CLR = 2
- 11660 IF HOLD$ = "F" AND X$ = "3" THEN CLR = 3
- 11670 IF HOLD$ = "F" THEN HOLD$ = ""
- 11680 IF HOLD$ <> "D" OR X$ <> "1" THEN GOTO 11710
- 11690 VSET = VLOC: HSET = HLOC: HOLD$ = ""
- 11700 GOTO 11320
- 11710 IF HOLD$ <> "D" OR X$ <> "2" THEN GOTO 11740
- 11720 LINE (HSET, VSET)-(HLOC, VLOC), CLR: HOLD$ = ""
- 11730 GOTO 11320
- 11740 IF HOLD$ <> "C" OR X$ <> "1" THEN GOTO 11770
- 11750 VSET = VLOC: HSET = HLOC: HOLD$ = ""
- 11760 GOTO 11320
- 11770 IF HOLD$ <> "C" OR X$ <> "2" THEN GOTO 11830
- 11780 IF RES = 2 THEN RAD = SQR(5.7 * (VSET - VLOC) ^ 2 + (HSET - HLOC) ^ 2)
- 11790 IF RES = 1 THEN RAD = SQR(1.45 * (VSET - VLOC) ^ 2 + (HSET - HLOC) ^ 2)
- 11800 CIRCLE (HSET, VSET), RAD, CLR
- 11810 HOLD$ = ""
- 11820 GOTO 11320
- 11830 IF HOLD$ <> "A" OR X$ <> "1" THEN GOTO 11860
- 11840 VSET = VLOC: HSET = HLOC: HOLD$ = ""
- 11850 GOTO 11320
- 11860 IF HOLD$ <> "A" OR X$ <> "2" THEN GOTO 11890
- 11870 VSET2 = VLOC: HSET2 = HLOC: HOLD$ = ""
- 11880 GOTO 11320
- 11890 IF HOLD$ <> "A" OR X$ <> "3" THEN GOTO 11320
- 11900 IF RES = 2 THEN GOTO 11990
- 11910 RAD = SQR(1.4 * (VSET - VSET2) ^ 2 + (HSET - HSET2) ^ 2)
- 11920 ANG1 = ATN(1.25 * (VSET - VSET2) / (HSET2 - HSET))
- 11930 ANG2 = ATN(1.25 * (VSET - VLOC) / (HLOC - HSET))
- 11940 IF HSET > HLOC THEN ANG2 = 3.14 + ANG2
- 11950 IF HLOC > HSET AND VLOC > VSET THEN ANG2 = 6.28 + ANG2
- 11960 IF HSET > HSET2 THEN ANG1 = 3.14 + ANG1
- 11970 IF HSET2 > HSET AND VSET2 > VSET THEN ANG1 = 6.28 + ANG1
- 11980 GOTO 12060
- 11990 RAD = SQR(5.7 * (VSET - VSET2) ^ 2 + (HSET - HSET2) ^ 2)
- 12000 ANG1 = ATN(2.5 * (VSET - VSET2) / (HSET2 - HSET))
- 12010 ANG2 = ATN(2.5 * (VSET - VLOC) / (HLOC - HSET))
- 12020 IF HSET > HLOC THEN ANG2 = 3.14 + ANG2
- 12030 IF HLOC > HSET AND VLOC > VSET THEN ANG2 = 6.28 + ANG2
- 12040 IF HSET > HSET2 THEN ANG1 = 3.14 + ANG1
- 12050 IF HSET2 > HSET AND VSET2 > VSET THEN ANG1 = 6.28 + ANG1
- 12060 CIRCLE (HSET, VSET), RAD, CLR, ANG1, ANG2
- 12070 HOLD$ = "": GOTO 11320
- 12080 IF HLOC > 0 THEN HLOC = HLOC - 1
- 12090 LAST = 4: GOTO 11270
- 12100 IF VLOC < 199 THEN VLOC = VLOC + 1
- 12110 LAST = 3: GOTO 11270
- 12120 IF HLOC < RES * 320 - 1 THEN HLOC = HLOC + 1
- 12130 LAST = 2: GOTO 11270
- 12140 IF VLOC > 0 THEN VLOC = VLOC - 1
- 12150 LAST = 1: GOTO 11270
- 12160 RETURN
- 12170 REM *************************************************************
- 12180 REM ** F7 TXT = Add Text Characters **
- 12190 REM *************************************************************
- 12200 IF RES <> 0 THEN GOTO 12220
- 12210 NOW$ = "TXT": REC = 500: GOSUB 15490: GOSUB 15220: RETURN
- 12220 NOW$ = "TXT": CAPS = 0: START = 1: MSG = 0: GOSUB 15920
- 12230 PRESET (HLOC, VLOC), CLR
- 12240 OPEN "TEXTCHAR" FOR RANDOM AS #1 LEN = 12: GOTO 12250
- 12250 FIELD #1, 12 AS BUFFER$
- 12260 DIM HOLDC(2), HOLDB(2 * (3 - RES))
- 12270 PURGE = 1: GOSUB 15220: IF SKIP$ = "NEW" THEN GOTO 12650
- 12280 IF SKIP$ <> "TXT" THEN GOTO 12640
- 12290 IF TYPE$ = "C" AND ASC(X$) > 31 AND ASC(X$) < 126 THEN GOTO 12500
- 12300 IF TYPE$ = "C" THEN GOTO 12270
- 12310 IF X$ <> "H" AND X$ <> "M" AND X$ <> "P" AND X$ <> "K" THEN GOTO 12270
- 12320 IF START = 1 THEN GOTO 12270
- 12330 PUT (HLOC, VLOC), HOLDB, PSET
- 12340 IF X$ = "H" THEN GOTO 12390
- 12350 IF X$ = "M" THEN GOTO 12410
- 12360 IF X$ = "P" THEN GOTO 12430
- 12370 IF X$ = "K" THEN GOTO 12450
- 12380 GOTO 12270
- 12390 IF VLOC > 0 THEN VLOC = VLOC - 1
- 12400 GOTO 12470
- 12410 IF HLOC < RES * 320 - 7 THEN HLOC = HLOC + 1
- 12420 GOTO 12470
- 12430 IF VLOC < 192 THEN VLOC = VLOC + 1
- 12440 GOTO 12470
- 12450 IF HLOC > 0 THEN HLOC = HLOC - 1
- 12460 GOTO 12470
- 12470 GET (HLOC, VLOC)-(HLOC + 6, VLOC + 7), HOLDB
- 12480 PUT (HLOC, VLOC), HOLDC, PSET
- 12490 GOTO 12270
- 12500 IF ASC(X$) > 32 THEN GOTO 12550
- 12510 FOR I = HLOC TO HLOC + 3 * RES: FOR J = VLOC TO VLOC + 7
- 12520 PSET (I, J), 0
- 12530 NEXT J, I
- 12540 GOTO 12270
- 12550 GET #1, ASC(X$) - 32 + (2 - RES) * 93
- 12560 OUTPUT$ = BUFFER$
- 12570 FOR J = 0 TO 2
- 12580 HOLDC(J) = CVS(MID$(OUTPUT$, 4 * J + 1, 4))
- 12590 NEXT J
- 12600 HLOC = RES * 160 - 3: VLOC = 97: START = 0
- 12610 GET (HLOC, VLOC)-(HLOC + 6, VLOC + 7), HOLDB
- 12620 PUT (HLOC, VLOC), HOLDC, PSET
- 12630 GOTO 12270
- 12640 ERASE HOLDC, HOLDB: CLOSE #1: CAPS = 1: RETURN
- 12650 ERASE HOLDC, HOLDB: CLOSE #1: CAPS = 1: SKIP$ = "NEW": NOW$ = "NEW"
- 12660 MSG = 0: GOSUB 15920: GOTO 11260
- 12670 REC = 503: GOSUB 15490: GOSUB 15220: RETURN
- 12680 REM *************************************************************
- 12690 REM ** F2 SCL = Scale a Drawing Color 0,14 **
- 12700 REM *************************************************************
- 12710 IF RES <> 0 THEN GOTO 12730
- 12720 NOW$ = "SCL": REC = 510: GOSUB 15490: GOSUB 15220: RETURN
- 12730 NOW$ = "SCL": MSG = 0: GOSUB 15920
- 12740 SPEED = 0: PRESET (HLOC, VLOC), CLR
- 12750 GOSUB 15220: IF SKIP$ = "NEW" THEN GOTO 13460
- 12760 IF SKIP$ <> "SCL" THEN RETURN
- 12770 IF TYPE$ = "G" THEN GOTO 12750
- 12780 IF X$ > "0" AND X$ <= "9" AND HOLD$ <> " " THEN SPEED = 1 - (ASC(X$) - 48) / 25
- 12790 IF X$ = "E" THEN HOLD$ = "E"
- 12800 IF X$ = "C" THEN HOLD$ = "C"
- 12810 IF SPEED = 0 OR HOLD$ = " " THEN GOTO 12750
- 12820 IF HOLD$ = "E" THEN GOTO 13140
- 12830 REM ***** contract - left side *****
- 12840 FOR I = 160 * RES TO 0 STEP -1
- 12850 IF SKIP$ <> "SCL" THEN RETURN
- 12860 PSET (I, 0), 1: PSET (I, 199), 1
- 12870 K = 160 * RES - (160 * RES - I) / SPEED
- 12880 FOR J = 100 TO 1 STEP -1
- 12890 L = 100 - (100 - J) / SPEED
- 12900 IF K >= 0 AND L >= 0 THEN PSET (I, J), POINT(K, L) ELSE PSET (I, J), 0
- 12910 NEXT J
- 12920 FOR J = 101 TO 198
- 12930 L = 100 + (J - 100) / SPEED
- 12940 IF K >= 0 AND L <= 199 THEN PSET (I, J), POINT(K, L) ELSE PSET (I, J), 0
- 12950 NEXT J
- 12960 PSET (I, 0), 0: PSET (I, 199), 0
- 12970 NEXT I
- 12980 REM ***** contract - right side *****
- 12990 FOR I = 160 * RES + 1 TO 320 * RES - 1
- 13000 IF SKIP$ <> "SCL" THEN RETURN
- 13010 PSET (I, 0), 1: PSET (I, 199), 1
- 13020 K = 160 * RES + (I - 160 * RES) / SPEED
- 13030 FOR J = 100 TO 1 STEP -1
- 13040 L = 100 - (100 - J) / SPEED
- 13050 IF K <= 320 * RES - 1 AND L >= 0 THEN PSET (I, J), POINT(K, L) ELSE PSET (I, J), 0
- 13060 NEXT J
- 13070 FOR J = 101 TO 198
- 13080 L = 100 + (J - 100) / SPEED
- 13090 IF K <= 320 * RES - 1 AND L <= 199 THEN PSET (I, J), POINT(K, L) ELSE PSET (I, J), 0
- 13100 NEXT J
- 13110 PSET (I, 0), 0: PSET (I, 199), 0
- 13120 NEXT I
- 13130 SPEED = 0: HOLD$ = " ": MSG = 0: GOSUB 15920: GOTO 12750
- 13140 REM ***** expand - left side *****
- 13150 SPEED = 2 - SPEED
- 13160 FOR I = 0 TO 160 * RES
- 13170 IF SKIP$ <> "SCL" THEN RETURN
- 13180 PSET (I, 0), 1: PSET (I, 199), 1
- 13190 K = 160 * RES - ((160 * RES - I) / SPEED)
- 13200 FOR J = 1 TO 100
- 13210 L = 100 - ((100 - J) / SPEED)
- 13220 PSET (I, J), POINT(K, L)
- 13230 NEXT J
- 13240 FOR J = 198 TO 101 STEP -1
- 13250 L = 100 - ((100 - J) / SPEED)
- 13260 PSET (I, J), POINT(K, L)
- 13270 NEXT J
- 13280 PSET (I, 0), 0: PSET (I, 199), 0
- 13290 NEXT I
- 13300 REM ***** expand - right side *****
- 13310 FOR I = 320 * RES - 1 TO 160 * RES + 1 STEP -1
- 13320 IF SKIP$ <> "SCL" THEN RETURN
- 13330 PSET (I, 0), 1: PSET (I, 199), 1
- 13340 K = (I - 160 * RES) / SPEED + 160 * RES
- 13350 FOR J = 1 TO 100
- 13360 L = 100 - (100 - J) / SPEED
- 13370 PSET (I, J), POINT(K, L)
- 13380 NEXT J
- 13390 FOR J = 198 TO 101 STEP -1
- 13400 L = (J - 100) / SPEED + 100
- 13410 PSET (I, J), POINT(K, L)
- 13420 NEXT J
- 13430 PSET (I, 0), 0: PSET (I, 199), 0
- 13440 NEXT I
- 13450 SPEED = 0: HOLD$ = " ": MSG = 0: GOSUB 15920: GOTO 12750
- 13460 SKIP$ = "NEW": NOW$ = "NEW": MSG = 0: GOSUB 15920: GOTO 11260
- 13470 REM *************************************************************
- 13480 REM ** F3 SSP = Store a Sprite **
- 13490 REM *************************************************************
- 13500 IF RES <> 0 THEN GOTO 13520
- 13510 NOW$ = "SSP": REC = 513: GOSUB 15490: GOSUB 15220: RETURN
- 13520 RES1 = RES: NOW$ = "SSP"
- 13530 L = 1: R = 320 * RES1: T = 1: B = 200: SPEED = 1
- 13540 LINE (L, T)-(R, B), 1, B
- 13550 PURGE = 1: GOSUB 15220: IF SKIP$ <> "SSP" THEN RETURN
- 13560 IF TYPE$ = "G" THEN GOTO 13780
- 13570 IF X$ < "1" OR X$ > "9" THEN GOTO 13600
- 13580 SPEED = ASC(X$) - 48
- 13590 GOTO 13550
- 13600 IF X$ <> "G" THEN GOTO 13550
- 13610 R = R - 1: L = L + 1: T = T + 1: B = B - 1
- 13620 I = 4 + INT(((R - L + 1) * (3 - RES1) + 7) / 8) * (B - T + 1)
- 13630 I = INT((3 + I) / 4) + 1: J = FRE(" ")
- 13640 IF J > ((I * 4) + 500) THEN GOTO 13660
- 13650 MSG = 1001: GOSUB 15920: GOTO 13550
- 13660 DIM HOLD(I)
- 13670 GET (L, T)-(R, B), HOLD
- 13680 REC = 516: VLOC = 6: GOSUB 15340: IF SKIP$ <> "SSP" THEN GOTO 13760
- 13690 OPEN Y$ + ".SPR" FOR OUTPUT AS #1
- 13700 WRITE #1, RES1, PAL, I, R - L + 1, B - T + 1
- 13710 FOR J = 0 TO I
- 13720 K = VARPTR(HOLD(J))
- 13730 WRITE #1, PEEK(K), PEEK(K + 1), PEEK(K + 2), PEEK(K + 3)
- 13740 NEXT J
- 13750 REC = 520: GOSUB 15490: GOSUB 15220: SKIP$ = "INS"
- 13760 CLOSE #1: ERASE HOLD
- 13770 RETURN
- 13780 LINE (L, T)-(R, B), 0, B
- 13790 IF X$ = "H" THEN B = B - SPEED
- 13800 IF X$ = "M" THEN L = L + SPEED
- 13810 IF X$ = "P" THEN T = T + SPEED
- 13820 IF X$ = "K" THEN R = R - SPEED
- 13830 IF B < T + 2 THEN B = T + 2
- 13840 IF L > R - 2 THEN L = R - 2
- 13850 GOTO 13540
- 13860 RETURN
- 13870 REM *************************************************************
- 13880 REM ** F8 ANI = Test Animation **
- 13890 REM *************************************************************
- 13900 NOW$ = "ANI": REC = 521: VLOC = 4: GOSUB 15340: IF SKIP$ <> "ANI" THEN RETURN
- 13910 REC = 524: Z$ = Y$: VLOC = 6: GOSUB 15340: IF SKIP$ <> "ANI" THEN RETURN
- 13920 OPEN Z$ + ".RES" FOR INPUT AS #1: GOTO 13930
- 13930 INPUT #1, RES1, BAK, PAL1
- 13940 CLOSE #1
- 13950 OPEN Y$ + ".SPR" FOR INPUT AS #1: GOTO 13960
- 13960 INPUT #1, RES, PAL, I, WID, HGHT
- 13970 ' DIM HOLDC(I)
- 13971 DIM HOLDB(I): GOTO 13980
- 13980 FOR J = 0 TO I
- 13990 K = VARPTR(HOLDC(J)): INPUT #1, H(0), H(1), H(2), H(3)
- 14000 FOR L = 0 TO 3: POKE K + L, H(L): NEXT L
- 14010 NEXT J
- 14020 CLOSE #1
- 14030 HLOC = (320 * RES - WID) / 2: VLOC = (200 - HGHT) / 2
- 14040 SCREEN RES
- 14050 IF RES = 1 THEN COLOR BAK, PAL
- 14060 DEF SEG = &HB800
- 14070 BLOAD Z$, 0
- 14080 DEF SEG
- 14090 GET (HLOC, VLOC)-(HLOC + WID - 1, VLOC + HGHT - 1), HOLDB
- 14100 Y$ = "P": PUT (HLOC, VLOC), HOLDC, PSET
- 14110 PURGE = 1: GOSUB 15220: IF SKIP$ <> "ANI" THEN GOTO 14290
- 14120 IF TYPE$ <> "G" THEN GOTO 14240
- 14130 PUT (HLOC, VLOC), HOLDB, PSET
- 14140 IF X$ = "H" AND VLOC > 0 THEN VLOC = VLOC - 1
- 14150 IF X$ = "M" AND HLOC < RES * 319 - WID + 1 THEN HLOC = HLOC + 1
- 14160 IF X$ = "P" AND VLOC < 200 - HGHT THEN VLOC = VLOC + 1
- 14170 IF X$ = "K" AND HLOC > 0 THEN HLOC = HLOC - 1
- 14180 GET (HLOC, VLOC)-(HLOC + WID - 1, VLOC + HGHT - 1), HOLDB
- 14190 IF Y$ = "P" THEN PUT (HLOC, VLOC), HOLDC, PSET
- 14200 IF Y$ = "A" THEN PUT (HLOC, VLOC), HOLDC, AND
- 14210 IF Y$ = "O" THEN PUT (HLOC, VLOC), HOLDC, OR
- 14220 IF Y$ = "X" THEN PUT (HLOC, VLOC), HOLDC, XOR
- 14230 GOTO 14110
- 14240 IF X$ = "X" THEN Y$ = "X"
- 14250 IF X$ = "A" THEN Y$ = "A"
- 14260 IF X$ = "O" THEN Y$ = "O"
- 14270 IF X$ = "P" THEN Y$ = "P"
- 14280 GOTO 14110
- 14290 CLOSE #1: ERASE HOLDB: ERASE HOLDC: RETURN
- 14300 REC = 525: GOSUB 15490: GOSUB 15220: RETURN
- 14310 REC = 528: GOSUB 15490: GOSUB 15220: RETURN
- 14320 REC = 531: GOSUB 15490: GOSUB 15220: RETURN
- 14330 REM *************************************************************
- 14340 REM ** F5 RSP = Retrieve a Sprite **
- 14350 REM *************************************************************
- 14360 NOW$ = "RSP": REC = 534: VLOC = 4: GOSUB 15340: IF SKIP$ <> "RSP" THEN RETURN
- 14370 OPEN Y$ + ".SPR" FOR INPUT AS #1
- 14380 INPUT #1, RES1, PAL, I, WID, HGHT
- 14390 ' DIM HOLDC(I)
- 14400 IF RES1 <> 1 THEN GOTO 14460
- 14410 REC = 537: GOSUB 15490
- 14420 GOSUB 15220: IF SKIP$ <> "RSP" THEN GOTO 14580
- 14430 IF TYPE$ <> "C" THEN 14420
- 14440 BAK = ASC(X$) - 65
- 14450 IF BAK < 0 OR BAK > 15 THEN GOTO 14420
- 14460 SCREEN RES1: RES = RES1
- 14470 CLS
- 14480 IF RES = 1 THEN COLOR BAK, PAL
- 14490 FOR J = 0 TO I
- 14500 K = VARPTR(HOLDC(J)): INPUT #1, H(0), H(1), H(2), H(3)
- 14510 FOR L = 0 TO 3: POKE K + L, H(L): NEXT L
- 14520 NEXT J
- 14530 HLOC = (320 * RES - WID) / 2: VLOC = (200 - HGHT) / 2
- 14540 PUT (HLOC, VLOC), HOLDC: ERASE HOLDC
- 14550 CLOSE #1
- 14560 SKIP$ = "NEW": NOW$ = "NEW"
- 14570 GOTO 11260
- 14580 CLOSE #1: ERASE HOLD: RETURN
- 14590 REC = 572: GOSUB 15490: GOSUB 15220: RETURN
- 14600 REC = 548: GOSUB 15490: GOSUB 15220: RETURN
- 14610 REM *************************************************************
- 14620 REM ** F6 RSC = Retrieve a Screen **
- 14630 REM *************************************************************
- 14640 NOW$ = "RSC": REC = 551: VLOC = 4: GOSUB 15340: IF SKIP$ <> "RSC" THEN RETURN
- 14650 OPEN Y$ + ".RES" FOR INPUT AS #1: INPUT #1, RES, BAK, PAL: CLOSE #1
- 14660 SCREEN RES
- 14670 IF RES = 1 THEN COLOR BAK, PAL
- 14680 DEF SEG = &HB800
- 14690 BLOAD Y$, 0
- 14700 DEF SEG
- 14710 SKIP$ = "NEW": NOW$ = "NEW"
- 14720 GOTO 11260
- 14730 REC = 554: GOSUB 15490: GOSUB 15220: RETURN
- 14740 REM *************************************************************
- 14750 REM ** F4 SSC = Store a Screen Color 0,3 **
- 14760 REM *************************************************************
- 14770 IF RES <> 0 THEN GOTO 14790
- 14780 NOW$ = "SSC": REC = 557: GOSUB 15490: GOSUB 15220: RETURN
- 14790 RES1 = RES: NOW$ = "SSC": PRESET (HLOC, VLOC), CLR
- 14800 DEF SEG = &HB800
- 14810 BSAVE DRIVE$ + ":SCREEN", 0, &H4000: DEF SEG
- 14820 REC = 560: VLOC = 19: GOSUB 15340: IF SKIP$ <> "SSC" THEN RETURN
- 14830 IF LEN(Y$) > 2 THEN NAME DRIVE$ + ":SCREEN.BAS" AS Y$ + ".BAS": GOTO 14840
- 14840 IF LEN(Y$) = 2 THEN Y$ = DRIVE$ + ":SCREEN"
- 14850 OPEN Y$ + ".RES" FOR OUTPUT AS #1
- 14860 WRITE #1, RES1, BAK, PAL
- 14870 CLOSE #1: CLS : REC = 569
- 14880 NOW$ = "INS": SKIP$ = "INS": GOSUB 15490
- 14890 RETURN
- 14900 REC = 571: GOSUB 15490: LOCATE 19, 37: PRINT " ": GOTO 14820
- 14910 REC = 576: GOSUB 15490: LOCATE 19, 37: PRINT " ": RETURN
- 14920 REC = 581: GOSUB 15490: LOCATE 19, 37: PRINT " ": RETURN
- 14930 REM *************************************************************
- 14940 REM ** Error Handling **
- 14950 REM *************************************************************
- 14960 MSG = ERR: GOSUB 15920
- 14970 IF ERR = 7 AND ERL = 13970 THEN RESUME 14320
- 14980 IF ERR = 7 AND ERL = 14390 THEN RESUME 14600
- 14990 IF (ERR = 24 OR ERR = 25) AND ERL = 15790 THEN RESUME 15850
- 15000 IF ERR = 61 AND ERL = 14810 THEN RESUME 14910
- 15010 IF ERR = 61 AND ERL = 14870 THEN RESUME 14920
- 15020 IF ERR = 68 AND ERL = 15790 THEN RESUME 10400
- 15030 IF (ERR = 53 OR ERR = 52) AND ERL = 10050 THEN RESUME 10340
- 15040 IF (ERR = 53 OR ERR = 52) AND ERL = 12240 THEN RESUME 12670
- 15050 IF (ERR = 53 OR ERR = 52) AND ERL = 13920 THEN RESUME 14300
- 15060 IF (ERR = 53 OR ERR = 52) AND ERL = 13950 THEN RESUME 14310
- 15070 IF (ERR = 53 OR ERR = 52) AND ERL = 14370 THEN RESUME 14590
- 15080 IF (ERR = 53 OR ERR = 52) AND ERL = 14650 THEN RESUME 14730
- 15090 IF ERR = 58 AND ERL = 14830 THEN RESUME 14900
- 15100 IF ERR = 71 AND ERL = 15530 THEN RESUME 15860
- 15110 IF ERR = 72 AND ERL = 15530 THEN RESUME 15910
- 15120 CLS
- 15130 PRINT "Error number ", ERR, " at line number ", ERL
- 15140 PRINT
- 15150 PRINT "Please notify: Jan Young"
- 15160 PRINT " 767 N. Holden St."
- 15170 PRINT " Port Washington, Wi. 53074"
- 15180 PRINT
- 15190 PRINT "Please include the error number and line number above and"
- 15200 PRINT "as much information about what you were doing as possible."
- 15210 END
- 15220 REM *************************************************************
- 15230 REM ** Read From Keyboard **
- 15240 REM *************************************************************
- 15250 IF PURGE = 0 THEN 15270
- 15260 DEF SEG = &H40: POKE &H1A, PEEK(&H1C): DEF SEG
- 15270 X$ = INKEY$: IF SKIP$ <> NOW$ THEN PURGE = 0: RETURN
- 15280 IF X$ = "" THEN 15270
- 15290 IF LEN(X$) <> 2 THEN 15320
- 15300 X$ = MID$(X$, 2, 1)
- 15310 TYPE$ = "G": PURGE = 0: RETURN
- 15320 IF ASC(X$) > 96 AND CAPS = 1 THEN X$ = CHR$(ASC(X$) - 32)
- 15330 TYPE$ = "C": PURGE = 0: RETURN
- 15340 REM *************************************************************
- 15350 REM ** Read 8 Characters From Keyboard **
- 15360 REM *************************************************************
- 15370 Y$ = DRIVE$ + ":": GOSUB 15490
- 15380 FOR J = 1 TO 8
- 15390 GOSUB 15220: IF SKIP$ <> NOW$ THEN RETURN
- 15400 IF TYPE$ <> "C" THEN 15390
- 15410 IF ASC(X$) <> 8 THEN GOTO 15440
- 15420 IF J = 1 THEN GOTO 15390
- 15430 J = J - 1: X$ = " ": LOCATE VLOC, 62 + J: PRINT X$: Y$ = MID$(Y$, 1, J + 1): GOTO 15390
- 15440 IF ASC(X$) = 13 THEN GOTO 15480
- 15450 IF ASC(X$) = 46 THEN GOTO 15390
- 15460 LOCATE VLOC, 62 + J: PRINT X$: Y$ = Y$ + X$
- 15470 NEXT J
- 15480 RETURN
- 15490 REM *************************************************************
- 15500 REM ** Print Verbiage Screens **
- 15510 REM *************************************************************
- 15520 WIDTH 80: SCREEN 0, 1: RES = 0
- 15530 OPEN "VERBIAGE" FOR RANDOM AS #2 LEN = 85
- 15540 FIELD #2, 85 AS BUFFER$
- 15550 GET 2, REC: OUTREC$ = BUFFER$
- 15560 IF SKIP$ <> NOW$ THEN GOTO 15770
- 15570 IF MID$(OUTREC$, 1, 3) <> "c01" THEN GOTO 15600
- 15580 COLOR (VAL(MID$(OUTREC$, 4, 2))), (VAL(MID$(OUTREC$, 6, 2))), (VAL(MID$(OUTREC$, 8, 2)))
- 15590 CLS : REC = REC + 1: GOTO 15550
- 15600 IF MID$(OUTREC$, 1, 3) = "p01" THEN GOTO 15780
- 15610 LOCATE (VAL(MID$(OUTREC$, 4, 2))), (VAL(MID$(OUTREC$, 6, 2))), 0
- 15620 IF VAL(MID$(OUTREC$, 6, 2)) > 8 THEN PRINT MID$(OUTREC$, 8, 78 - (VAL(MID$(OUTREC$, 6, 2))))
- 15630 IF VAL(MID$(OUTREC$, 6, 2)) < 9 THEN PRINT MID$(OUTREC$, 8, 70)
- 15640 IF MID$(OUTREC$, 82, 1) <> " " AND MID$(OUTREC$, 82, 1) <> "I" THEN GOTO 15680
- 15650 REC = REC + 1
- 15660 IF VAL(MID$(OUTREC$, 78, 4)) <> 0 THEN REC = VAL(MID$(OUTREC$, 78, 4))
- 15670 GOTO 15550
- 15680 IF MID$(OUTREC$, 82, 1) <> "P" THEN GOTO 15740
- 15690 LOCATE 23, 28, 0: PRINT "Press Any Key to Continue"
- 15700 GOSUB 15220: IF SKIP$ <> NOW$ THEN GOTO 15770
- 15710 CLS : REC = REC + 1
- 15720 IF VAL(MID$(OUTREC$, 78, 4)) <> 0 THEN REC = VAL(MID$(OUTREC$, 78, 4))
- 15730 GOTO 15550
- 15740 IF MID$(OUTREC$, 82, 1) <> "E" THEN GOTO 15770
- 15750 LOCATE 23, 28, 0: PRINT "Press Any Key to Continue"
- 15760 GOSUB 15220
- 15770 CLOSE #2: RETURN
- 15780 IF MID$(OUTREC$, 4, 1) = "1" THEN LPRINT
- 15790 LPRINT USING "& &"; MID$(OUTREC$, 8, 35); MID$(OUTREC$, 43, 35)
- 15800 IF MID$(OUTREC$, 82, 1) <> " " AND MID$(OUTREC$, 82, 1) <> "I" THEN GOTO 15840
- 15810 REC = REC + 1
- 15820 IF VAL(MID$(OUTREC$, 78, 4)) <> 0 THEN REC = VAL(MID$(OUTREC$, 78, 4))
- 15830 GOTO 15550
- 15840 CLOSE #2: RETURN
- 15850 REC = 615: GOSUB 15490: GOSUB 15220: GOTO 15790 ' printer not ready
- 15860 CLS : PRINT "Your disk drive is not ready. Please insert The Designer's"
- 15870 PRINT "disk in Drive A and close the door."
- 15880 PRINT
- 15890 PRINT "Press any key to Continue"
- 15900 GOSUB 15220: GOTO 15530
- 15910 REC = 623: GOSUB 15490: GOSUB 15220: GOTO 15530 ' disk i/o error
- 15920 REM *************************************************************
- 15930 REM ** Sound Effects **
- 15940 REM *************************************************************
- 15950 IF MSG = 0 THEN PLAY "t255mso3c8c8c8"
- 15960 IF MSG > 0 THEN PLAY "t255o1c8e-8c8e-8"
- 15970 RETURN
-
-