home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib32a.dsk
/
SEPTEMBER.1987
/
TEXT.SCULPTURE.bas
< prev
Wrap
BASIC Source File
|
2023-02-26
|
18KB
|
482 lines
10 REM **********************
20 REM * TEXT SCULPTURE *
30 REM * BY JOHN BELTRAMI *
40 REM * COPYRIGHT (C) 1987 *
50 REM * BY MICROSPARC, INC *
60 REM * CONCORD, MA 01742 *
70 REM **********************
80 REM --- HOUSEKEEPING ---
90 LOMEM: 19456:D$ = CHR$(4):S$ = "*NONE*":T$ = "*NONE*":ESC$ = CHR$(27)
100 SV$ = "":Y1$ = SV$:Y2$ = SV$
110 P = 1:SA = 16384:SU$ = "":CT = 0
120 FI$ = "RECYCLE TEXT":FC$ = "*":HH = 9:FF = 9
130 DIM PT(48,6)
140 REM ***************
150 REM * MAIN MENU *
160 REM ***************
170 TEXT
180 M1$ = "MAIN":M2$ = "EXIT": GOSUB 4740
190 INVERSE : VTAB 3: HTAB 5:W = 16: GOSUB 4630: PRINT W$
200 VTAB 5: HTAB 5: PRINT W$
210 VTAB 4: HTAB 5: PRINT " TEXT SCULPTURE "
220 NORMAL
230 VTAB 7: HTAB 6: PRINT "COPYRIGHT 1987"
240 VTAB 8: HTAB 6: PRINT "BY MICROSPARC, INC."
250 VTAB 12: HTAB 5: PRINT "1) SELECT TEXT SHAPE"
260 VTAB 14: HTAB 5: PRINT "2) SELECT TEXT CONTENT"
270 VTAB 16: HTAB 5: PRINT "3) PRINT SCULPTURE"
280 VTAB 19: HTAB 5: INVERSE : PRINT "YOUR CHOICE -->";: NORMAL : GET Y$: PRINT Y$
290 IF Y$ = CHR$(27) THEN 340: REM END
300 IF Y$ = "2" THEN 410: REM CONTENT
310 IF Y$ = "1" THEN 1800: REM SHAPE
320 IF Y$ = "3" THEN 2660: REM PRINT
330 PRINT CHR$(7): GOTO 280
340 VTAB 22: HTAB 5: INVERSE
350 PRINT "ARE YOU SURE THAT YOU"
360 VTAB 23: HTAB 5: PRINT "WANT TO QUIT NOW? ";: NORMAL : GET Y$: PRINT Y$
370 IF (Y$ < > CHR$(89)) AND (Y$ < > CHR$(121)) THEN GOTO 180
380 END
390 REM * TEXT CONTENT *
400 REM ****************
410 M1$ = "CONTENT":M2$ = "MAIN": GOSUB 4740
420 INVERSE
430 VTAB 3: HTAB 5:W = 21: GOSUB 4630: PRINT W$
440 VTAB 5: HTAB 5: PRINT W$
450 VTAB 4: HTAB 5: PRINT " SELECT TEXT CONTENT "
460 NORMAL
470 VTAB 8: HTAB 5: PRINT "1) INPUT TEXT FROM KEYBOARD"
480 VTAB 10: HTAB 5: PRINT "2) INPUT TEXT FROM FILE"
490 VTAB 13: HTAB 5: INVERSE : PRINT "YOUR CHOICE -->";: NORMAL : GET Y$: PRINT Y$
500 IF Y$ = CHR$(27) THEN GOTO 180: REM MAIN MENU
510 IF Y$ = "1" THEN GOTO 570
520 IF Y$ = "2" THEN GOTO 1020
530 PRINT CHR$(7): GOTO 490
540 REM ******************
550 REM * KEYBOARD INPUT *
560 REM ******************
570 M1$ = "KEYBOARD":M2$ = "CONTENT": GOSUB 4740
580 INVERSE
590 VTAB 3: HTAB 5:W = 16: GOSUB 4630: PRINT W$
600 VTAB 5: HTAB 5: PRINT W$
610 VTAB 4: HTAB 5: PRINT " KEYBOARD INPUT "
620 NORMAL
630 VTAB 8: HTAB 5: PRINT "PLEASE TYPE ONE LINE MESSAGE"
640 VTAB 9: HTAB 5: PRINT " (MAXIMUM OF 30 CHARACTERS) "
650 VTAB 11: HTAB 1: PRINT "> ";
660 YY$ = ""
670 VTAB 11: HTAB 3:H = 3
680 VTAB 11: HTAB H: GET Y$
690 IF Y$ = CHR$(27) THEN GOTO 410: REM LAST MENU
700 IF Y$ = CHR$(13) THEN GOTO 830: REM COMPLETE
710 IF Y$ < > CHR$(8) THEN GOTO 770
720 PRINT CHR$(8)" ";: CALL -958:H = H -1: IF H <3 THEN H = 3: GOTO 680
730 L = LEN(YY$)
740 IF L >1 THEN YY$ = LEFT$(YY$,L -1)
750 IF L = 1 THEN YY$ = ""
760 GOTO 680
770 V = ASC(Y$)
780 IF V <32 THEN GOTO 680: REM REJECT CONTROL CHARS
790 YY$ = YY$ +Y$
800 PRINT Y$;
810 H = H +1: IF H >32 THEN GOTO 830
820 GOTO 680
830 VTAB 14: HTAB 5: PRINT "IS THIS CORRECT ?"
840 Y$ = YY$:L = LEN(Y$)
850 VTAB 16: HTAB 1: PRINT "> ";Y$;" <"
860 VTAB 18: HTAB 5: PRINT "(Y) OR (N) --> ";: GET Z$: NORMAL : PRINT Z$
870 IF (Z$ = CHR$(78)) OR (Z$ = CHR$(110)) THEN GOTO 570
880 IF (Z$ = CHR$(27)) THEN GOTO 410: REM LAST MENU
890 IF (Z$ < > CHR$(89)) AND (Z$ < > CHR$(121)) THEN PRINT CHR$(7): GOTO 860
900 CT = 0
910 IF L <1 THEN GOTO 410: REM NO TEXT FOUND
920 FOR I = 1 TO L
930 AC = ASC( MID$ (Y$,I,1))
940 IF AC <32 OR (AC >122 AND AC <161) OR (AC >250) THEN AC = 32
950 POKE SA +CT,AC
960 CT = CT +1
970 NEXT I
980 GOTO 180: REM MAIN MENU
990 REM **************
1000 REM * FILE INPUT *
1010 REM **************
1020 M1$ = "FILE":M2$ = "CONTENT": GOSUB 4740
1030 INVERSE
1040 VTAB 3: HTAB 5:W = 17: GOSUB 4630: PRINT W$
1050 VTAB 5: HTAB 5: PRINT W$
1060 VTAB 4: HTAB 5: PRINT " TEXT FILE INPUT "
1070 NORMAL
1080 VTAB 8: HTAB 5: PRINT "CURRENT FILE NAME:"
1090 VTAB 10: HTAB 9: PRINT T$
1100 VTAB 13: HTAB 5: PRINT "INPUT NEW FILE (?) FOR CATALOG"
1110 YY$ = ""
1120 VTAB 14: HTAB 9:H = 9
1130 VTAB 14: HTAB H: GET Y$
1140 IF Y$ = CHR$(27) THEN GOTO 410: REM LAST MENU
1150 IF Y$ = CHR$(13) THEN GOTO 1290: REM ENTRY COMPLETE
1160 IF Y$ = "?" THEN GOSUB 2570: GOTO 1020: REM CATALOG
1170 IF Y$ < > CHR$(8) THEN GOTO 1230
1180 PRINT CHR$(8)" ";: CALL -958:H = H -1: IF H <9 THEN H = 9: GOTO 1130
1190 L = LEN(YY$)
1200 IF L >1 THEN YY$ = LEFT$(YY$,L -1)
1210 IF L = 1 THEN YY$ = ""
1220 GOTO 1130
1230 V = ASC(Y$)
1240 IF V <32 THEN GOTO 1130
1250 YY$ = YY$ +Y$
1260 PRINT Y$;
1270 H = H +1: IF H >39 THEN GOTO 1290: REM COMPLETE
1280 GOTO 1130
1290 VTAB 16: HTAB 5: PRINT "NEW FILE NAME"
1300 L = LEN(YY$): IF L <1 THEN GOTO 410: REM NO CHANGE
1310 VTAB 18: HTAB 9: GOSUB 4820: PRINT YY$
1320 VTAB 20: HTAB 5: PRINT "IS THIS CORRECT ?"
1330 VTAB 22: HTAB 5: PRINT "(Y) OR (N) -->";: GET Y$: PRINT Y$
1340 IF (Y$ = CHR$(78)) OR (Y$ = CHR$(110)) THEN GOTO 1020
1350 IF (Y$ < > CHR$(89)) AND (Y$ < > CHR$(121)) THEN PRINT CHR$(7): GOTO 1330
1360 T$ = YY$
1370 REM *************************
1380 REM * LOAD FILE INTO MEMORY *
1390 REM *************************
1400 HOME : INVERSE : VTAB 5: HTAB 5: PRINT "TEXT FILE LOAD": NORMAL
1410 VTAB 7: HTAB 5: PRINT "PLEASE PRESS <RETURN> WHEN READY": CALL ( -676)
1420 VTAB 9: HTAB 5: PRINT "VERIFYING FILE": NORMAL : PRINT
1430 ONERR GOTO 1470
1440 PRINT D$;"VERIFY ";T$
1450 PRINT D$;"CLOSE": GOTO 1510: REM FILE FOUND
1460 HOME
1470 VTAB 11: HTAB 5: PRINT "SORRY - FILE NOT FOUND": PRINT CHR$(7): POKE 216,0
1480 VTAB 15: HTAB 5: PRINT "PRESS <RETURN> TO CONTINUE";: CALL ( -676)
1490 GOTO 410
1500 INVERSE
1510 VTAB 11: HTAB 5: PRINT "LOADING TEXT FILE INTO MEMORY"
1520 VTAB 13: HTAB 5: PRINT "PLEASE BE PATIENT"
1530 POKE 216,0: ONERR GOTO 1560
1540 PRINT D$;"OPEN ";T$
1550 GOTO 1620: REM FILE OPEN SUCCESS
1560 HOME
1570 VTAB 14: HTAB 5: PRINT "SORRY - OPEN FAILED ON "
1580 VTAB 16: HTAB 5: PRINT "FILE: ";T$
1590 PRINT CHR$(7): POKE 216,0
1600 VTAB 20: HTAB 5: PRINT "PRESS <RETURN> TO CONTINUE";: CALL ( -676)
1610 GOTO 410
1620 ONERR GOTO 1730
1630 CT = 0
1640 PRINT D$;"READ ";T$
1650 LC$ = ""
1660 GET CC$
1670 AC = ASC(CC$)
1680 IF (AC <32) OR (AC >250) OR (AC >122 AND AC <161) THEN AC = 32:CC$ = " "
1690 IF AC = 32 AND LC$ = " " THEN GOTO 1660
1700 POKE SA +CT,AC:LC$ = CC$:
1710 CT = CT +1
1720 IF CT <3000 THEN GOTO 1660
1730 POKE 216,0: PRINT D$;"CLOSE ";T$
1740 ONERR GOTO 4440
1750 PRINT D$: IF PEEK(222) < >5 GOTO 4440
1760 GOTO 180: REM MAIN MENU
1770 REM ****************
1780 REM * SELECT SHAPE *
1790 REM ****************
1800 M1$ = "SHAPE":M2$ = "MAIN": GOSUB 4740
1810 INVERSE
1820 VTAB 3: HTAB 5:W = 14: GOSUB 4630: PRINT W$
1830 VTAB 5: HTAB 5: PRINT W$
1840 VTAB 4: HTAB 5: PRINT " SELECT SHAPE "
1850 NORMAL
1860 VTAB 8: HTAB 5: PRINT "CURRENT FILE NAME:"
1870 VTAB 10: HTAB 9: PRINT S$
1880 VTAB 13: HTAB 5: PRINT "INPUT FILE NAME (?) FOR CATALOG"
1890 YY$ = ""
1900 VTAB 14: HTAB 9:H = 9
1910 VTAB 14: HTAB H: GET Y$
1920 IF Y$ = CHR$(27) THEN GOTO 180: REM MAIN MENU
1930 IF Y$ = CHR$(13) THEN GOTO 2070: REM ENTRY COMPLETE
1940 IF Y$ = "?" THEN GOSUB 2570: GOTO 1800: REM CATALOG
1950 IF Y$ < > CHR$(8) THEN GOTO 2010
1960 PRINT CHR$(8)" ";: CALL -958:H = H -1: IF H <9 THEN H = 9: GOTO 1910
1970 L = LEN(YY$)
1980 IF L >1 THEN YY$ = LEFT$(YY$,L -1)
1990 IF L = 1 THEN YY$ = ""
2000 GOTO 1910
2010 V = ASC(Y$)
2020 IF V <32 THEN GOTO 1910
2030 YY$ = YY$ +Y$
2040 PRINT Y$;
2050 H = H +1: IF H >39 THEN GOTO 2070
2060 GOTO 1910
2070 VTAB 16: HTAB 5: PRINT "NEW FILE NAME"
2080 L = LEN(YY$): IF L <1 THEN GOTO 180: REM NO CHANGE
2090 VTAB 18: HTAB 9: GOSUB 4820: PRINT YY$
2100 VTAB 20: HTAB 5: PRINT "IS THIS CORRECT ?"
2110 VTAB 22: HTAB 5: PRINT "(Y) OR (N) -->";: GET Y$: PRINT Y$
2120 IF (Y$ = CHR$(78)) OR (Y$ = CHR$(110)) THEN GOTO 1800
2130 IF (Y$ < > CHR$(89)) AND (Y$ < > CHR$(121)) THEN PRINT CHR$(7): GOTO 2110
2140 REM CHECK FOR '.SHP' SUFFIX
2150 Z$ = "":K = 0
2160 FOR I = 1 TO L
2170 IF (I >K) AND (K >0) THEN GOTO 2200
2180 IF MID$ (YY$,I,1) = "." THEN K = I: GOTO 2200
2190 Z$ = Z$ + MID$ (YY$,I,1)
2200 NEXT I
2210 Z$ = Z$ +".SHP"
2220 S$ = Z$
2230 HOME
2240 VTAB 8: HTAB 5: INVERSE : PRINT "SHAPE FILE LOAD": NORMAL
2250 VTAB 10: HTAB 5: PRINT "PRESS <RETURN> WHEN READY";: CALL ( -676)
2260 ONERR GOTO 2350
2270 VTAB 12: HTAB 5: PRINT "VERIFYING SHAPE FILE"
2280 REM
2290 PRINT D$;"VERIFY ";S$
2300 VTAB 14: HTAB 5: PRINT "LOADING SHAPE PARAMETERS"
2310 VTAB 16: HTAB 5: PRINT "PLEASE BE PATIENT": NORMAL
2320 PRINT D$;"OPEN ";S$
2330 GOTO 2400
2340 HOME
2350 POKE 216,0: VTAB 12: HTAB 5
2360 PRINT "SORRY - SHAPE FILE NOT FOUND"
2370 VTAB 14: HTAB 5: PRINT "FILE: ";S$
2380 VTAB 20: HTAB 5: PRINT "PRESS <RETURN> TO CONTINUE";
2390 S$ = "*NONE*": CALL ( -676): GOTO 1800: REM SHAPE MENU
2400 PRINT D$;"READ ";S$
2410 FOR I = 1 TO 48
2420 INPUT PT(I,1)
2430 INPUT PT(I,2)
2440 INPUT PT(I,3)
2450 INPUT PT(I,4)
2460 INPUT PT(I,5)
2470 INPUT PT(I,6)
2480 NEXT I
2490 REM * SHAPE LOADED *
2500 POKE 216,0: ONERR GOTO 4440
2510 PRINT D$;"CLOSE ";S$
2520 PRINT D$
2530 GOTO 180: REM MAIN MENU
2540 REM ****************
2550 REM * DISK CATALOG *
2560 REM ****************
2570 HOME : NORMAL
2580 PRINT
2590 PRINT D$; LEFT$("CATALOG",7 -4 *( PEEK(48896) = 76)): PRINT : PRINT "PRESS <RETURN>"
2600 CALL ( -676): REM WAIT FOR <RETURN>
2610 PRINT
2620 RETURN
2630 REM *******************
2640 REM * PRINT THE SHAPE *
2650 REM *******************
2660 M1$ = "PRINT":M2$ = "MAIN": GOSUB 4740
2670 INVERSE
2680 VTAB 3: HTAB 5:W = 17: GOSUB 4630: PRINT W$
2690 VTAB 5: HTAB 5: PRINT W$
2700 VTAB 4: HTAB 5: PRINT " PRINT SCULPTURE "
2710 NORMAL
2720 VTAB 7: HTAB 5: PRINT "PRINTER SLOT: ";: INVERSE : PRINT P: NORMAL
2730 VTAB 9: HTAB 5: PRINT "FILL INSTRUCTIONS:"
2740 VTAB 10: HTAB 10: INVERSE : PRINT FI$: NORMAL
2750 VTAB 12: HTAB 5: PRINT "1) CHANGE PRINTER SLOT"
2760 VTAB 14: HTAB 5: PRINT "2) CHANGE SET-UP STRING"
2770 VTAB 16: HTAB 5: PRINT "3) CHANGE FILL INSTRUCTIONS"
2780 VTAB 18: HTAB 5: PRINT "4) PRINT IT"
2790 VTAB 20: HTAB 5: INVERSE : PRINT "YOUR CHOICE -->";: NORMAL : GET Y$: PRINT Y$
2800 IF Y$ = "1" THEN GOSUB 4230: GOTO 2660
2810 IF Y$ = "2" THEN GOSUB 3640: GOTO 2660
2820 IF Y$ = "3" THEN GOSUB 4040: GOTO 2660
2830 IF Y$ = CHR$(27) THEN GOTO 180: REM LAST MENU
2840 IF Y$ < >"4" THEN PRINT CHR$(7): GOTO 2790
2850 M1$ = "PROCESS":M2$ = "PRINT": GOSUB 4740
2860 INVERSE
2870 VTAB 3: HTAB 5:W = 18: GOSUB 4630: PRINT W$
2880 VTAB 5: HTAB 5: PRINT W$
2890 VTAB 4: HTAB 5: PRINT " PRINTING PROCESS ": NORMAL
2900 REM ************
2910 REM * PRINT IT *
2920 REM ************
2930 VTAB 10: HTAB 5
2940 IF S$ < >"*NONE*" THEN GOTO 3000
2950 PRINT "SORRY - NO SHAPE WAS SELECTED."
2960 VTAB 12: HTAB 5
2970 PRINT "YOU MUST SELECT A SHAPE FILE."
2980 VTAB 20: HTAB 5: PRINT "PRESS <RETURN> TO CONTINUE";: CALL ( -676)
2990 GOTO 180: REM MAIN MENU
3000 PRINT "SHAPE NAME:"
3010 VTAB 12: HTAB 9: PRINT S$
3020 VTAB 14: HTAB 5: PRINT "TEXT FILL CHARACTERS: ";CT
3030 VTAB 16: HTAB 5
3040 IF CT >0 THEN GOTO 3090
3050 PRINT "NO TEXT FILL CHARACTERS WERE"
3060 VTAB 18: HTAB 5
3070 PRINT "ENTERED. DEFAULT (*) USED INSTEAD."
3080 FI$ = "FILL WITH CHARACTER"
3090 REM
3100 VTAB 20: HTAB 5: PRINT "IS THIS ACCEPTABLE ?"
3110 VTAB 21: HTAB 5: PRINT "(Y) OR (N) -->";: GET Y$: PRINT Y$
3120 IF (Y$ = CHR$(27)) THEN GOTO 2660: REM LAST MENU
3130 IF (Y$ = CHR$(78)) OR (Y$ = CHR$(110)) THEN GOTO 2660: REM LAST MENU
3140 IF (Y$ < > CHR$(89)) AND (Y$ < > CHR$(121)) THEN PRINT CHR$(7): GOTO 3110
3150 HOME
3160 VTAB 10: HTAB 5: PRINT "PRESS <ESC> TO ABORT PRINTING"
3170 PRINT D$;"PR#";P: PRINT CHR$(9)"80N"
3180 REM **************
3190 REM 48 LINES OF DATA
3200 REM 3 PAIRS OF POINTS PER LINE
3210 REM ODD POINT = SPACES
3220 REM EVEN POINT = TEXT FILLING
3230 FOR I = 1 TO HH: PRINT : NEXT I: REM NINE BLANK LINES
3240 J = 0: REM SET TEXT POINTER
3250 POKE -16368,0: REM CLEAR KEYBOARD
3260 FOR I = 1 TO 48
3270 Z = FRE(0): REM STRING GARBAGE COLLECTION
3280 IF I = 1 THEN PRINT SU$;
3290 A = PT(I,1): GOSUB 3440: PRINT B$;
3300 A = PT(I,2): GOSUB 3520: PRINT B$;
3310 A = PT(I,3): GOSUB 3440: PRINT B$;
3320 A = PT(I,4): GOSUB 3520: PRINT B$;
3330 A = PT(I,5): GOSUB 3440: PRINT B$;
3340 A = PT(I,6): GOSUB 3520: PRINT B$
3350 KB = PEEK( -16384)
3360 IF KB >128 THEN GET Y$: IF Y$ = CHR$(27) THEN PRINT : PRINT D$;"PR#0": GOTO 3390
3370 NEXT I
3380 FOR I = 1 TO FF: PRINT : NEXT I: REM NINE BLANK LINES
3390 PRINT D$;"PR#0"
3400 GOTO 2660
3410 REM * CREATE SPACERS *
3420 REM ******************
3430 REM ODD POINTS = BLANK FILL
3440 B$ = ""
3450 IF A = 0 THEN RETURN
3460 FOR K = 1 TO A
3470 B$ = B$ +" "
3480 NEXT K
3490 RETURN
3500 REM ******************
3510 REM * FILL WITH TEXT *
3520 B$ = "": IF A = 0 THEN RETURN
3530 IF (J > = CT) AND (FI$ = "RECYCLE TEXT") THEN J = 0: GOTO 3550
3540 IF (J > = CT) THEN A$ = FC$: GOTO 3580
3550 AC = PEEK(SA +J)
3560 A$ = CHR$(AC)
3570 J = J +1
3580 B$ = B$ +A$
3590 L = LEN(B$)
3600 IF (L <A) THEN GOTO 3530
3610 RETURN
3620 REM *****************
3630 REM * SET-UP STRING *"
3640 M1$ = "SET-UP":M2$ = "PRINT": GOSUB 4740
3650 INVERSE
3660 VTAB 3: HTAB 5:W = 23: GOSUB 4630: PRINT W$
3670 VTAB 5: HTAB 5: PRINT W$
3680 VTAB 4: HTAB 5: PRINT " PRINTER SET-UP STRING "
3690 NORMAL
3700 V$ = "":Y1$ = "":Y2$ = ""
3710 VTAB 7: HTAB 5: PRINT "CURRENT SET-UP"
3720 VTAB 9: HTAB 5: PRINT SV$
3730 VTAB 12: HTAB 5: PRINT "NEW SET-UP"
3740 VTAB 23: HTAB 3: PRINT "PRESS '^' TO END INPUT."
3750 VTAB 14: HTAB 5: PRINT Y1$;
3760 GET V$
3770 IF V$ = CHR$(94) THEN GOTO 3920: REM '^'
3780 IF V$ = CHR$(13) THEN Y1$ = Y1$ +" <RETURN> ":Y2$ = Y2$ + CHR$(13): GOTO 3750
3790 IF V$ = CHR$(27) THEN Y1$ = Y1$ +"<ESC>":Y2$ = Y2$ + CHR$(27): GOTO 3750
3800 V = ASC(V$)
3810 IF (V >127) OR (V = 28) OR (V = 31) THEN GOTO 3750
3820 IF V >30 THEN GOTO 3870: REM REGULAR
3830 REM CONTROL CHARACTERS
3840 Y1$ = Y1$ +" <CTRL>-" + CHR$(V +64) +" "
3850 Y2$ = Y2$ +V$
3860 GOTO 3750
3870 REM REGULAR CHARACTERS
3880 Y1$ = Y1$ +V$
3890 Y2$ = Y2$ +V$
3900 GOTO 3750
3910 IF Z$ = "N" THEN RETURN
3920 REM ENTRY COMPLETE
3930 VTAB 19: HTAB 5: PRINT "IS THIS CORRECT ?"
3940 VTAB 21: HTAB 5: PRINT "(Y) OR (N) -->";: GET Y$: PRINT Y$
3950 IF Y$ = CHR$(27) THEN GOTO 2660: REM LAST MENU
3960 IF (Y$ = CHR$(78)) OR (Y$ = CHR$(110)) THEN GOTO 3640
3970 IF (Y$ < > CHR$(89)) AND (Y$ < > CHR$(121)) THEN PRINT CHR$(7): GOTO 3940
3980 SV$ = Y1$:SU$ = Y2$
3990 PRINT
4000 RETURN
4010 REM ******************
4020 REM * CHARACTER FILL *
4030 REM ******************
4040 M1$ = "FILL":M2$ = "PRINT": GOSUB 4740
4050 INVERSE
4060 VTAB 3: HTAB 5:W = 19: GOSUB 4630: PRINT W$
4070 VTAB 5: HTAB 5: PRINT W$
4080 VTAB 4: HTAB 5: PRINT " FILL INSTRUCTIONS "
4090 NORMAL
4100 VTAB 8: HTAB 5: PRINT "IF THE SCULPTURE NEEDS MORE TEXT"
4110 VTAB 10: HTAB 5: PRINT "TO FILL THE SHAPE THAN THE"
4120 VTAB 12: HTAB 5: PRINT "ORIGINAL INPUT CONTAINED: "
4130 VTAB 15: HTAB 5: PRINT "1) RECYCLE ORIGINAL TEXT"
4140 VTAB 17: HTAB 5: PRINT "2) FILL WITH DEFAULT CHARACTER (*)"
4150 VTAB 19: HTAB 5: INVERSE : PRINT "YOUR CHOICE -->";: NORMAL : GET Y$: PRINT Y$
4160 IF Y$ = CHR$(27) THEN GOTO 2660: REM LAST MENU
4170 IF Y$ = "1" THEN FI$ = "RECYCLE TEXT": RETURN
4180 IF Y$ = "2" THEN FI$ = "FILL WITH CHARACTER": RETURN
4190 PRINT CHR$(7): GOTO 4150
4200 REM ***********************
4210 REM * CHANGE PRINTER SLOT *
4220 REM ***********************
4230 M1$ = "SLOT CHG":M2$ = "PRINT": GOSUB 4740
4240 INVERSE
4250 VTAB 3: HTAB 5:W = 14: GOSUB 4630: PRINT W$
4260 VTAB 5: HTAB 5: PRINT W$
4270 VTAB 4: HTAB 5: PRINT " PRINTER SLOT "
4280 NORMAL
4290 VTAB 7: HTAB 5: PRINT "OLD PRINTER SLOT: ";: INVERSE : PRINT P: NORMAL
4300 VTAB 9: HTAB 5: PRINT "NEW PRINTER SLOT: ";: GET Y$: PRINT Y$
4310 IF Y$ = CHR$(27) THEN GOTO 2660: REM LAST MENU
4320 Y = VAL(Y$): IF (Y <0) OR (Y >7) THEN PRINT CHR$(7): GOTO 4300
4330 VTAB 11: HTAB 5: PRINT "IS THIS CORRECT ?"
4340 VTAB 13: HTAB 5: INVERSE : PRINT "NEW SLOT: ";Y: NORMAL
4350 VTAB 15: HTAB 5: PRINT "(Y) OR (N) -> ";: GET Y$: PRINT Y$
4360 IF (Y$ = CHR$(27)) THEN GOTO 2660: REM LAST MENU
4370 IF (Y$ = CHR$(78)) OR (Y$ = CHR$(110)) THEN GOTO 4230
4380 IF (Y$ < > CHR$(89)) AND (Y$ < > CHR$(121)) THEN PRINT CHR$(7): GOTO 4330
4390 P = Y: REM SET NEW SLOT NUMBER
4400 RETURN
4410 REM ************************
4420 REM * MISCELLANEOUS ERRORS *
4430 REM ************************
4440 A = PEEK(222): POKE 216,0
4450 HOME : INVERSE
4460 VTAB 3: HTAB 5:W = 21: GOSUB 4630: PRINT W$
4470 VTAB 1: HTAB 5: PRINT W$
4480 VTAB 2: HTAB 5: PRINT " MISCELLANEOUS ERROR "
4490 NORMAL
4500 NORMAL : PRINT CHR$(7): PRINT CHR$(7)
4510 VTAB 6: HTAB 5: PRINT "THIS PROGRAM ENCOUNTERED AN"
4520 VTAB 8: HTAB 5: PRINT "UNRECOVERABLE ERROR. PLEASE CHECK"
4530 VTAB 10: HTAB 5: PRINT "YOUR DISK BEFORE TRYING AGAIN."
4540 VTAB 12: HTAB 5: PRINT "ERROR CODE: ";A
4550 VTAB 14: HTAB 5
4560 IF A = 6 THEN PRINT "FILE NOT FOUND"
4570 IF A = 8 THEN PRINT "I/O ERROR"
4580 IF A = 42 THEN PRINT "OUT OF DATA"
4590 IF A = 255 THEN PRINT "YOU HIT CONTROL-C !!!!"
4600 VTAB 17: HTAB 5: PRINT "LINE NUMBER: "; PEEK(219) *256 + PEEK(218)
4610 END
4620 REM ********
4630 REM STRING OF SPACES
4640 REM ********
4650 W$ = ""
4660 FOR WW = 1 TO W
4670 W$ = W$ +" "
4680 NEXT WW
4690 WW = FRE(0): REM GARBAGE COLLECTION
4700 RETURN
4710 REM ************
4720 REM HEADING ROUTINE
4730 REM *************
4740 HOME
4750 VTAB 1: HTAB 1: PRINT "MENU: ";M1$
4760 VTAB 1: HTAB 25: PRINT "ESC TO: ";M2$
4770 PRINT
4780 RETURN
4790 REM ************
4800 REM FILE NAME CONVERSION
4810 REM ************
4820 YZ$ = "": FOR II = 1 TO LEN(YY$):YX = ASC( MID$ (YY$,II,1)):YZ$ = YZ$ + CHR$(YX -32 *(YX >96 AND YX <123)): NEXT :YY$ = YZ$: RETURN