home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib20a.dsk
/
JULY.1984
/
COLOR.BILLBOARD.bas
< prev
next >
Wrap
BASIC Source File
|
2023-02-26
|
10KB
|
170 lines
10 REM ********7.9.84*********
20 REM * COLOR.BILLBOARD *
30 REM * BY STEVEN WONG *
40 REM * *
50 REM * COPYRIGHT (C) 1984 *
60 REM * BY MICROSPARC, INC. *
70 REM * LINCOLN, MA. 01773 *
80 REM * *
90 REM ***********************
100 LOMEM: 24576: GOTO 1060
110 POKE 61, FN A(I): POKE 60, FN B(I): POKE 63, FN A(J): POKE 62, FN B(J)
120 POKE 67, FN A(K): POKE 66, FN B(K): CALL 20790: RETURN
130 POKE KR,0: WAIT KB,128: POKE KR,0:I = PEEK(KB): RETURN
140 IF NOT PEEK(8195) THEN POKE 8195,15
150 RETURN
160 INVERSE : PRINT "(CURRENTLY IS " RIGHT$("00" + STR$(I),3)")";: NORMAL : RETURN
170 I = FRE(0):J = POS(0) +1:I$ = "":I = 0: RETURN
180 I$ = LEFT$(I$, LEN(I$) -1): RETURN
190 J$ = LEFT$(I$,1):I = VAL(J$):J = LEN(I$): RETURN
200 Z = VAL( RIGHT$(I$,J -1)): IF Z > -1 AND Z <LN THEN RETURN
210 POP :E = 3: GOTO 1670
220 HTAB 5: PRINT RIGHT$(" " + STR$(Z),4)" ";: GOSUB 310
230 IF J$ = "" THEN POP : GOTO 1230
240 X = ASC(J$):Y = 0: IF J >2 THEN Y = VAL( RIGHT$(I$,J -1))
250 IF NOT (Z +Y) THEN Y = 15
260 IF Y >15 THEN Y = 16
270 RETURN
280 POKE 8194 +Z +Z,X: POKE 8195 +Z +Z,Y: RETURN
290 Z = PEEK(8192) + PEEK(8193) *256: RETURN
300 POKE 8193, FN A(LN): POKE 8192, FN B(LN): RETURN
310 GOSUB 170
320 CALL 20803:I = PEEK(KB):A$ = CHR$(I): IF I = 13 THEN PRINT SP$: GOTO 190
330 IF I <32 THEN IF I < >27 AND I < >8 THEN 320
340 IF LEN(I$) >3 AND I < >8 THEN & 100: GOTO 320
350 IF I = 27 THEN F = 1: GOTO 320
360 IF NOT F THEN PRINT A$;: IF I >64 AND I <91 THEN A$ = CHR$( ASC(A$) +32)
370 IF F THEN IF I >64 AND I <91 THEN INVERSE : PRINT A$;: NORMAL :F = 0
380 & 12: IF I < >8 THEN I$ = I$ +A$: GOTO 320
390 IF LEN(I$) <2 THEN HTAB J: PRINT " ";: HTAB J: GOTO 310
400 PRINT SP$SP$BS$BS$;: GOSUB 180: GOTO 320
410 GOSUB 170
420 GET A$:I = ASC(A$): IF I = 13 THEN PRINT : GOTO 190
430 IF LEN(I$) >20 AND I < >8 THEN & 100: POKE KR,0: GOTO 420
440 IF I <32 AND I < >8 THEN 420
450 & 18: IF I < >8 THEN A$ = CHR$(I): PRINT A$;:I$ = I$ +A$: GOTO 420
460 IF LEN(I$) <2 THEN HTAB J: PRINT " ";: HTAB J: GOTO 410
470 PRINT BS$SP$BS$;: GOSUB 180: GOTO 420
480 GOSUB 290: IF NOT Z THEN VTAB 20: PRINT "NOTHING IN MEMORY. . ."Z$: GOSUB 130: GOTO 810
490 GR : HOME :J = 0: COLOR= 9: FOR I = 0 TO 32 STEP 2: PLOT A(I),B(I): POKE 768 +J,A(I)
500 POKE 800 +J,B(I):J = J +1: NEXT :J = 0: COLOR= 6: FOR I = 1 TO 33 STEP 2
510 PLOT A(I),B(I): POKE 832 +J,A(I): POKE 864 +J,B(I):J = J +1: NEXT
520 Z = Z +Z +8194: FOR I = Z TO Z +22 STEP 2: POKE I,32: NEXT : POKE I,0
530 HOME : PRINT "1) CHANGE SPEEDS ";:I = PEEK(239): GOSUB 160
540 PRINT : PRINT "2) NUMBER OF TIMES TO DISPLAY THE"
550 HTAB 5: PRINT "MESSAGE ";:I = RE: GOSUB 160: PRINT
560 PRINT "3) SOUND 1 4) MENU 5) DISPLAY";: POKE 2009,SO +48
570 HTAB 38: PRINT "(";: POKE 2039,169
580 CALL 20803: & 5:I = PEEK(KB) -48: POKE 2038,I +176: FOR P = 1 TO 100: NEXT : IF I <1 OR I >5 THEN 580
590 ON I GOTO 600,650,700,810,710
600 HOME : PRINT "SPEEDS 1=FASTEST TO 255=SLOWEST"
610 PRINT : PRINT "PLEASE ENTER? ";: GOSUB 410
620 IF I$ = "" THEN 530
630 I = VAL(I$): IF I <1 OR I >255 THEN & 200: GOTO 600
640 POKE 239,I: GOTO 530
650 HOME : PRINT "POSSIBLE VALUES ARE 1 THROUGH 999"
660 PRINT : PRINT "PLEASE ENTER? ";: GOSUB 410
670 IF I$ = "" THEN 530
680 I = VAL(I$): IF I <1 OR I >999 THEN & 200: GOTO 650
690 RE = I: GOTO 530
700 SO = NOT SO: POKE 2009,SO +48: GOTO 580
710 POKE 20702,44: POKE 20703,48: POKE 20704,192
720 IF NOT SO THEN POKE 20702,234: POKE 20703,234: POKE 20704,234
730 HOME :I$ = " PRESS <ESC> TO START ": INVERSE
740 PRINT "<ESC> PAUSE/RESTART - OTHER KEYS TO STOP"
750 NORMAL : PRINT : HTAB 10: PRINT I$;
760 FOR I = 10 TO 31:J$ = MID$ (I$,I -9,1): INVERSE : HTAB I
770 PRINT J$;: NORMAL : FOR J = 1 TO 5: IF PEEK(KB) = 155 THEN 790
780 NEXT : & 4: HTAB I: PRINT J$;: NEXT : GOTO 760
790 POKE KR,0: CALL 54915: HOME : VTAB 22: HTAB 1: PRINT X1$;" ";X2$: HTAB 5: PRINT "--"Y$"--"
800 FOR I = 1 TO RE: CALL 20480: IF PEEK(KB) = 27 THEN NEXT : FOR I = 1 TO 1000: NEXT
810 I = FRE(0): POKE 216,0: CALL 54915: TEXT : HOME : INVERSE : FOR I = 1 TO 7 STEP 6
820 VTAB I: PRINT SPC( 40): NEXT : FOR I = 2 TO 6: VTAB I
830 HTAB 1: PRINT SP$;: HTAB 40: PRINT SP$: NEXT
840 FOR I = 11 TO 16: VTAB I: HTAB 26: PRINT SPC( 12): NEXT
850 VTAB 12: HTAB 27: PRINT "ARROW KEYS": HTAB 27: PRINT "TO CHOOSE"
860 HTAB 27: PRINT "<RETURN>": HTAB 27: PRINT "TO EXECUTE": NORMAL
870 VTAB 3: HTAB 9: PRINT X1$: HTAB 13: PRINT X2$: HTAB 7: PRINT Y$: & 100:I = 0:K1 = 1:K = 1
880 VTAB 11: HTAB 4: PRINT "<1> EDITOR": HTAB 4: PRINT "<2> DISPLAY"
890 HTAB 4: PRINT "<3> CATALOG": HTAB 4: PRINT "<4> SAVE"
900 HTAB 4: PRINT "<5> LOAD": HTAB 4: PRINT "<6> EXIT": GOTO 940
910 GOSUB 130: IF I = 13 THEN ON K GOTO 1220,480,970,990,990,960
920 IF I < >8 AND I < >21 THEN 910
930 & 25:K = K +(I = 21) -(I = 8):K = K +((K <1) -(K >6)) *6
940 VTAB 10 +K1: HTAB 4: PRINT "<"K1">": VTAB 10 +K: INVERSE
950 HTAB 4: PRINT "<"K">": NORMAL :K1 = K: GOTO 910
960 HOME : VTAB 6: PRINT "TYPE "QU$"GOTO 810 <RETURN>"QU$" TO RE-ENTER": POKE 37,21: END
970 HOME : ONERR GOTO 1050
980 PRINT D$"CATALOG": PRINT : PRINT : HTAB 8: PRINT Z$: & 100: GOSUB 130: GOTO 810
990 VTAB 20: GOSUB 290: IF K = 4 THEN IF NOT Z THEN PRINT "NOTHING TO SAVE. . ."Z$: GOSUB 130: GOTO 810
1000 PRINT "FILE NAME? ";: GOSUB 410: IF J$ = "" THEN 810
1010 GOSUB 290:I = Z +1: ONERR GOTO 1050
1020 IF K = 4 THEN PRINT D$"BSAVE "I$".M,A$2000,L"2 *I: GOTO 810
1030 I = LEN(I$): IF I >2 AND RIGHT$(I$,2) = ".M" THEN I$ = LEFT$(I$,I -2)
1040 PRINT D$"BLOAD "I$".M,A$2000": GOTO 810
1050 VTAB 22: PRINT "DISK ERROR #" PEEK(222)". . ."Z$: & 200: GOSUB 130: GOTO 810
1060 TEXT : HOME :D$ = CHR$(4): IF PEEK(20491) + PEEK(1015) = 319 THEN 1090
1070 POKE 230,32: CALL 62450: PRINT D$"BLOAD BILLBOARD.ML,A$5000"
1080 POKE 1013,76: POKE 1014,59: POKE 1015,81
1090 IF PEEK(16700) + PEEK(16800) < >112 THEN PRINT D$"BLOAD NIBBLE.SET,A$4000"
1100 DIM A(33),B(33),C$(16):KB = -16384:KR = -16368: POKE 239,150:RE = 1:SO = 1
1110 DEF FN A(A) = INT(A/256): DEF FN B(A) = A - FN A(A) *256
1120 FOR I = 1 TO 40:MU$ = MU$ +"-": NEXT :BS$ = CHR$(8):SP$ = CHR$(32)
1130 QU$ = CHR$(34):GT$ = CHR$(62):X1$ = "NIBBLE COLOR BILLBOARD":X2$ = "BY STEVEN WONG"
1140 Y$ = "(C) 1984 BY MICROSPARC, INC.":Z$ = "PRESS A KEY. . ."
1150 E$(1) = "UNKNOWN COMMAND ERROR":E$(2) = "MAXIMUM LINE ERROR":E$(3) = "RANGE ERROR"
1160 J = 0: FOR I = 0 TO 39 STEP 3:A(J) = I:B(J) = 14:J = J +1: NEXT
1170 FOR I = 17 TO 23 STEP 3:A(J) = 39:B(J) = I:J = J +1: NEXT : FOR I = 39 TO 0 STEP -3
1180 A(J) = I:B(J) = 26:J = J +1: NEXT : FOR I = 23 TO 17 STEP -3
1190 B(J) = I:J = J +1: NEXT : FOR I = 1 TO 16: READ C$(I): NEXT : GOTO 810
1200 DATA "MAGENTA","DARK BLUE","PURPLE","DARK GREEN","GRAY1","MEDIUM BLUE","LIGHT BLUE"
1210 DATA "BROWN","ORANGE","GRAY2","PINK","LIGHT GREEN","YELLOW","AGUA","WHITE","RANDOM"
1220 GOSUB 290:LN = Z: HOME : PRINT MU$: PRINT MU$: POKE 34,4
1230 E = 1: PRINT : PRINT ">";: GOSUB 410: IF J$ = "" THEN 1230
1240 IF J <2 THEN 1430
1250 IF J$ < >"R" THEN 1270
1260 GOSUB 200: GOSUB 220: GOSUB 280: GOTO 1230
1270 IF J$ < >"I" THEN 1330
1280 IF LN = >1999 THEN PRINT :E = 2: GOTO 1670
1290 GOSUB 200
1300 GOSUB 220:I = 8194 +Z +Z:T = Z: GOSUB 290:J = 8194 +Z +Z
1310 K = 12288:L = K +Z +Z: GOSUB 110:A = I:B = J:I = K:J = L:K = A +2:L = B +2: GOSUB 110
1320 Z = T: GOSUB 280:LN = LN +1: GOSUB 300:Z = Z +1: GOTO 1300
1330 IF J$ < >"D" THEN 1430
1340 FOR I = 1 TO LEN(I$): IF MID$ (I$,I,1) = "," THEN 1380
1350 NEXT : GOSUB 200:T = Z:I = 8196 +Z +Z:K = I -2: GOSUB 290:J = 8194 +Z +Z
1360 GOSUB 110: GOSUB 140
1370 LN = LN -1: GOSUB 300: GOTO 1230
1380 T = Z:J$ = I$:S1 = VAL( MID$ (I$,2,I -2)):S2 = VAL( RIGHT$(J$, LEN(J$) -I))
1390 S3 = 1 +S2 -S1: IF S1 <0 OR S2 >LN -1 OR S3 <2 THEN E = 3: GOTO 1670
1400 I = 8196 +S2 +S2:K = I -2 *S3
1410 GOSUB 290:J = 8194 +Z +Z
1420 GOSUB 110: GOSUB 140:LN = LN -S3: GOSUB 300: GOTO 1230
1430 IF J$ < >"L" THEN 1530
1440 IF NOT LN THEN 1230
1450 ONERR GOTO 1520
1460 K1 = 0: CALL 20779: PRINT : FOR I = 0 TO LN -1: HTAB 5: PRINT RIGHT$(" " + STR$(I),4)" ";
1470 J = PEEK(8194 +I +I):K = PEEK(8195 +I +I):I$ = " ^^": IF K THEN I$ = SP$ + RIGHT$("0" + STR$(K),2)
1480 IF J >96 THEN CALL 20765: POKE 1191,J +96: PRINT CHR$(J -32)I$ TAB( 20)C$(K): NEXT : GOTO 1230
1490 IF J = 32 THEN CALL 20765: POKE 1191,160: PRINT : NEXT : GOTO 1230
1500 IF J >64 AND J <91 THEN CALL 20765: POKE 1191,J -64: INVERSE : PRINT CHR$(J);: NORMAL : PRINT I$ TAB( 20)C$(K): NEXT : GOTO 1230
1510 CALL 20765: POKE 1191,J +128: PRINT CHR$(J)I$ TAB( 20)C$(K): NEXT : GOTO 1230
1520 POKE 216,0: PRINT : GOTO 1230
1530 IF I$ = "NEW" THEN CALL 20779: HOME : POKE 230,32: CALL 62450:LN = 0: GOTO 1230
1540 IF J$ < >"?" THEN 1640
1550 TEXT : HOME : HTAB 12: PRINT "EDITOR'S COMMANDS": HTAB 12: PRINT "------------------"
1560 PRINT : POKE 32,8: PRINT : PRINT "= SHOW THIS HELPFUL PAGE": PRINT
1570 PRINT "= DELETE LINE(S) *": PRINT : PRINT "= CLEAR TEXT SCREEN": PRINT
1580 PRINT "= INSERT NEW LINES *": PRINT : PRINT "= LIST MESSAGE": PRINT
1590 PRINT "= REMOVE MESSAGE FROM MEMORY": PRINT : PRINT "= QUIT AND GO BACK TO MENU"
1600 PRINT : PRINT "= REPLACE LINE'S CONTENTS *": PRINT : PRINT "= WRITE MESSAGE"
1610 POKE 32,0: VTAB 4: INVERSE : PRINT : FOR I = 1 TO 9: HTAB 7
1620 PRINT MID$ ("?DHIL QRW",I,1): PRINT : NEXT : VTAB 15: HTAB 5: PRINT "NEW": NORMAL
1630 VTAB 24: HTAB 11: PRINT "* REQUIRES LINE NUMBER(S)";: GOSUB 130: GOTO 1220
1640 IF J$ = "Q" THEN 810
1650 IF J$ = "H" THEN HOME : GOTO 1230
1660 IF J$ = "W" THEN PRINT : GOTO 1690
1670 CALL 54915: PRINT : PRINT E$(E): FOR J = 1 TO 5: FOR I = 1 TO 50
1680 & 2: NEXT : FOR I = 1 TO 75: NEXT : NEXT : GOTO 1230
1690 IF LN = >1999 THEN E = 2: GOTO 1670
1700 Z = LN: GOSUB 220: GOSUB 280:LN = LN +1: GOSUB 300: GOTO 1690