home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib20a.dsk / JULY.1984 / COLOR.BILLBOARD.bas < prev    next >
BASIC Source File  |  2023-02-26  |  10KB  |  170 lines

  1. 10  REM ********7.9.84*********
  2. 20  REM *   COLOR.BILLBOARD   *
  3. 30  REM *   BY  STEVEN WONG   *
  4. 40  REM *                     *
  5. 50  REM * COPYRIGHT (C) 1984  *
  6. 60  REM * BY MICROSPARC, INC. *
  7. 70  REM * LINCOLN, MA. 01773  *
  8. 80  REM *                     *
  9. 90  REM ***********************
  10. 100  LOMEM: 24576: GOTO 1060
  11. 110  POKE 61, FN A(I): POKE 60, FN B(I): POKE 63, FN A(J): POKE 62, FN B(J)
  12. 120  POKE 67, FN A(K): POKE 66, FN B(K): CALL 20790: RETURN 
  13. 130  POKE KR,0: WAIT KB,128: POKE KR,0:I =  PEEK(KB): RETURN 
  14. 140  IF   NOT  PEEK(8195)  THEN  POKE 8195,15
  15. 150  RETURN 
  16. 160  INVERSE : PRINT "(CURRENTLY IS " RIGHT$("00" + STR$(I),3)")";: NORMAL : RETURN 
  17. 170 I =  FRE(0):J =  POS(0) +1:I$ = "":I = 0: RETURN 
  18. 180 I$ =  LEFT$(I$, LEN(I$) -1): RETURN 
  19. 190 J$ =  LEFT$(I$,1):I =  VAL(J$):J =  LEN(I$): RETURN 
  20. 200 Z =  VAL( RIGHT$(I$,J -1)): IF Z > -1  AND Z <LN  THEN  RETURN 
  21. 210  POP :E = 3: GOTO 1670
  22. 220  HTAB 5: PRINT  RIGHT$("   " + STR$(Z),4)"    ";: GOSUB 310
  23. 230  IF J$ = ""  THEN  POP : GOTO 1230
  24. 240 X =  ASC(J$):Y = 0: IF J >2  THEN Y =  VAL( RIGHT$(I$,J -1))
  25. 250  IF   NOT (Z +Y)  THEN Y = 15
  26. 260  IF Y >15  THEN Y = 16
  27. 270  RETURN 
  28. 280  POKE 8194 +Z +Z,X: POKE 8195 +Z +Z,Y: RETURN 
  29. 290 Z =  PEEK(8192) + PEEK(8193) *256: RETURN 
  30. 300  POKE 8193, FN A(LN): POKE 8192, FN B(LN): RETURN 
  31. 310  GOSUB 170
  32. 320  CALL 20803:I =  PEEK(KB):A$ =  CHR$(I): IF I = 13  THEN  PRINT SP$: GOTO 190
  33. 330  IF I <32  THEN  IF I < >27  AND I < >8  THEN 320
  34. 340  IF  LEN(I$) >3  AND I < >8  THEN  & 100: GOTO 320
  35. 350  IF I = 27  THEN F = 1: GOTO 320
  36. 360  IF   NOT F  THEN  PRINT A$;: IF I >64  AND I <91  THEN A$ =  CHR$( ASC(A$) +32)
  37. 370  IF F  THEN  IF I >64  AND I <91  THEN  INVERSE : PRINT A$;: NORMAL :F = 0
  38. 380  & 12: IF I < >8  THEN I$ = I$ +A$: GOTO 320
  39. 390  IF  LEN(I$) <2  THEN  HTAB J: PRINT "  ";: HTAB J: GOTO 310
  40. 400  PRINT SP$SP$BS$BS$;: GOSUB 180: GOTO 320
  41. 410  GOSUB 170
  42. 420  GET A$:I =  ASC(A$): IF I = 13  THEN  PRINT : GOTO 190
  43. 430  IF  LEN(I$) >20  AND I < >8  THEN  & 100: POKE KR,0: GOTO 420
  44. 440  IF I <32  AND I < >8  THEN 420
  45. 450  & 18: IF I < >8  THEN A$ =  CHR$(I): PRINT A$;:I$ = I$ +A$: GOTO 420
  46. 460  IF  LEN(I$) <2  THEN  HTAB J: PRINT "  ";: HTAB J: GOTO 410
  47. 470  PRINT BS$SP$BS$;: GOSUB 180: GOTO 420
  48. 480  GOSUB 290: IF   NOT Z  THEN  VTAB 20: PRINT "NOTHING IN MEMORY. . ."Z$: GOSUB 130: GOTO 810
  49. 490  GR : HOME :J = 0: COLOR= 9: FOR I = 0 TO 32  STEP 2: PLOT A(I),B(I): POKE 768 +J,A(I)
  50. 500  POKE 800 +J,B(I):J = J +1: NEXT :J = 0: COLOR= 6: FOR I = 1 TO 33  STEP 2
  51. 510  PLOT A(I),B(I): POKE 832 +J,A(I): POKE 864 +J,B(I):J = J +1: NEXT 
  52. 520 Z = Z +Z +8194: FOR I = Z TO Z +22  STEP 2: POKE I,32: NEXT : POKE I,0
  53. 530  HOME : PRINT "1) CHANGE SPEEDS ";:I =  PEEK(239): GOSUB 160
  54. 540  PRINT : PRINT "2) NUMBER OF TIMES TO DISPLAY THE"
  55. 550  HTAB 5: PRINT "MESSAGE ";:I = RE: GOSUB 160: PRINT 
  56. 560  PRINT "3) SOUND 1   4) MENU   5) DISPLAY";: POKE 2009,SO +48
  57. 570  HTAB 38: PRINT "(";: POKE 2039,169
  58. 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
  59. 590  ON I GOTO 600,650,700,810,710
  60. 600  HOME : PRINT "SPEEDS 1=FASTEST TO 255=SLOWEST"
  61. 610  PRINT : PRINT "PLEASE ENTER? ";: GOSUB 410
  62. 620  IF I$ = ""  THEN 530
  63. 630 I =  VAL(I$): IF I <1  OR I >255  THEN  & 200: GOTO 600
  64. 640  POKE 239,I: GOTO 530
  65. 650  HOME : PRINT "POSSIBLE VALUES ARE 1 THROUGH 999"
  66. 660  PRINT : PRINT "PLEASE ENTER? ";: GOSUB 410
  67. 670  IF I$ = ""  THEN 530
  68. 680 I =  VAL(I$): IF I <1  OR I >999  THEN  & 200: GOTO 650
  69. 690 RE = I: GOTO 530
  70. 700 SO =   NOT SO: POKE 2009,SO +48: GOTO 580
  71. 710  POKE 20702,44: POKE 20703,48: POKE 20704,192
  72. 720  IF   NOT SO  THEN  POKE 20702,234: POKE 20703,234: POKE 20704,234
  73. 730  HOME :I$ = " PRESS <ESC> TO START ": INVERSE 
  74. 740  PRINT "<ESC> PAUSE/RESTART - OTHER KEYS TO STOP"
  75. 750  NORMAL : PRINT : HTAB 10: PRINT I$;
  76. 760  FOR I = 10 TO 31:J$ =  MID$ (I$,I -9,1): INVERSE : HTAB I
  77. 770  PRINT J$;: NORMAL : FOR J = 1 TO 5: IF  PEEK(KB) = 155  THEN 790
  78. 780  NEXT : & 4: HTAB I: PRINT J$;: NEXT : GOTO 760
  79. 790  POKE KR,0: CALL 54915: HOME : VTAB 22: HTAB 1: PRINT X1$;" ";X2$: HTAB 5: PRINT "--"Y$"--"
  80. 800  FOR I = 1 TO RE: CALL 20480: IF  PEEK(KB) = 27  THEN  NEXT : FOR I = 1 TO 1000: NEXT 
  81. 810 I =  FRE(0): POKE 216,0: CALL 54915: TEXT : HOME : INVERSE : FOR I = 1 TO 7  STEP 6
  82. 820  VTAB I: PRINT  SPC( 40): NEXT : FOR I = 2 TO 6: VTAB I
  83. 830  HTAB 1: PRINT SP$;: HTAB 40: PRINT SP$: NEXT 
  84. 840  FOR I = 11 TO 16: VTAB I: HTAB 26: PRINT  SPC( 12): NEXT 
  85. 850  VTAB 12: HTAB 27: PRINT "ARROW KEYS": HTAB 27: PRINT "TO CHOOSE"
  86. 860  HTAB 27: PRINT "<RETURN>": HTAB 27: PRINT "TO EXECUTE": NORMAL 
  87. 870  VTAB 3: HTAB 9: PRINT X1$: HTAB 13: PRINT X2$: HTAB 7: PRINT Y$: & 100:I = 0:K1 = 1:K = 1
  88. 880  VTAB 11: HTAB 4: PRINT "<1> EDITOR": HTAB 4: PRINT "<2> DISPLAY"
  89. 890  HTAB 4: PRINT "<3> CATALOG": HTAB 4: PRINT "<4> SAVE"
  90. 900  HTAB 4: PRINT "<5> LOAD": HTAB 4: PRINT "<6> EXIT": GOTO 940
  91. 910  GOSUB 130: IF I = 13  THEN  ON K GOTO 1220,480,970,990,990,960
  92. 920  IF I < >8  AND I < >21  THEN 910
  93. 930  & 25:K = K +(I = 21) -(I = 8):K = K +((K <1) -(K >6)) *6
  94. 940  VTAB 10 +K1: HTAB 4: PRINT "<"K1">": VTAB 10 +K: INVERSE 
  95. 950  HTAB 4: PRINT "<"K">": NORMAL :K1 = K: GOTO 910
  96. 960  HOME : VTAB 6: PRINT "TYPE "QU$"GOTO 810 <RETURN>"QU$" TO RE-ENTER": POKE 37,21: END 
  97. 970  HOME : ONERR  GOTO 1050
  98. 980  PRINT D$"CATALOG": PRINT : PRINT : HTAB 8: PRINT Z$: & 100: GOSUB 130: GOTO 810
  99. 990  VTAB 20: GOSUB 290: IF K = 4  THEN  IF   NOT Z  THEN  PRINT "NOTHING TO SAVE. . ."Z$: GOSUB 130: GOTO 810
  100. 1000  PRINT "FILE NAME? ";: GOSUB 410: IF J$ = ""  THEN 810
  101. 1010  GOSUB 290:I = Z +1: ONERR  GOTO 1050
  102. 1020  IF K = 4  THEN  PRINT D$"BSAVE "I$".M,A$2000,L"2 *I: GOTO 810
  103. 1030 I =  LEN(I$): IF I >2  AND  RIGHT$(I$,2) = ".M"  THEN I$ =  LEFT$(I$,I -2)
  104. 1040  PRINT D$"BLOAD "I$".M,A$2000": GOTO 810
  105. 1050  VTAB 22: PRINT "DISK ERROR #" PEEK(222)". . ."Z$: & 200: GOSUB 130: GOTO 810
  106. 1060  TEXT : HOME :D$ =  CHR$(4): IF  PEEK(20491) + PEEK(1015) = 319  THEN 1090
  107. 1070  POKE 230,32: CALL 62450: PRINT D$"BLOAD BILLBOARD.ML,A$5000"
  108. 1080  POKE 1013,76: POKE 1014,59: POKE 1015,81
  109. 1090  IF  PEEK(16700) + PEEK(16800) < >112  THEN  PRINT D$"BLOAD NIBBLE.SET,A$4000"
  110. 1100  DIM A(33),B(33),C$(16):KB =  -16384:KR =  -16368: POKE 239,150:RE = 1:SO = 1
  111. 1110  DEF  FN A(A) =  INT(A/256): DEF  FN B(A) = A - FN A(A) *256
  112. 1120  FOR I = 1 TO 40:MU$ = MU$ +"-": NEXT :BS$ =  CHR$(8):SP$ =  CHR$(32)
  113. 1130 QU$ =  CHR$(34):GT$ =  CHR$(62):X1$ = "NIBBLE COLOR BILLBOARD":X2$ = "BY STEVEN WONG"
  114. 1140 Y$ = "(C) 1984 BY MICROSPARC, INC.":Z$ = "PRESS A KEY. . ."
  115. 1150 E$(1) = "UNKNOWN COMMAND ERROR":E$(2) = "MAXIMUM LINE ERROR":E$(3) = "RANGE ERROR"
  116. 1160 J = 0: FOR I = 0 TO 39  STEP 3:A(J) = I:B(J) = 14:J = J +1: NEXT 
  117. 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
  118. 1180 A(J) = I:B(J) = 26:J = J +1: NEXT : FOR I = 23 TO 17  STEP  -3
  119. 1190 B(J) = I:J = J +1: NEXT : FOR I = 1 TO 16: READ C$(I): NEXT : GOTO 810
  120. 1200  DATA "MAGENTA","DARK BLUE","PURPLE","DARK GREEN","GRAY1","MEDIUM BLUE","LIGHT BLUE"
  121. 1210  DATA "BROWN","ORANGE","GRAY2","PINK","LIGHT GREEN","YELLOW","AGUA","WHITE","RANDOM"
  122. 1220  GOSUB 290:LN = Z: HOME : PRINT MU$: PRINT MU$: POKE 34,4
  123. 1230 E = 1: PRINT : PRINT ">";: GOSUB 410: IF J$ = ""  THEN 1230
  124. 1240  IF J <2  THEN 1430
  125. 1250  IF J$ < >"R"  THEN 1270
  126. 1260  GOSUB 200: GOSUB 220: GOSUB 280: GOTO 1230
  127. 1270  IF J$ < >"I"  THEN 1330
  128. 1280  IF LN =  >1999  THEN  PRINT :E = 2: GOTO 1670
  129. 1290  GOSUB 200
  130. 1300  GOSUB 220:I = 8194 +Z +Z:T = Z: GOSUB 290:J = 8194 +Z +Z
  131. 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
  132. 1320 Z = T: GOSUB 280:LN = LN +1: GOSUB 300:Z = Z +1: GOTO 1300
  133. 1330  IF J$ < >"D"  THEN 1430
  134. 1340  FOR I = 1 TO  LEN(I$): IF  MID$ (I$,I,1) = ","  THEN 1380
  135. 1350  NEXT : GOSUB 200:T = Z:I = 8196 +Z +Z:K = I -2: GOSUB 290:J = 8194 +Z +Z
  136. 1360  GOSUB 110: GOSUB 140
  137. 1370 LN = LN -1: GOSUB 300: GOTO 1230
  138. 1380 T = Z:J$ = I$:S1 =  VAL( MID$ (I$,2,I -2)):S2 =  VAL( RIGHT$(J$, LEN(J$) -I))
  139. 1390 S3 = 1 +S2 -S1: IF S1 <0  OR S2 >LN -1  OR S3 <2  THEN E = 3: GOTO 1670
  140. 1400 I = 8196 +S2 +S2:K = I -2 *S3
  141. 1410  GOSUB 290:J = 8194 +Z +Z
  142. 1420  GOSUB 110: GOSUB 140:LN = LN -S3: GOSUB 300: GOTO 1230
  143. 1430  IF J$ < >"L"  THEN 1530
  144. 1440  IF   NOT LN  THEN 1230
  145. 1450  ONERR  GOTO 1520
  146. 1460 K1 = 0: CALL 20779: PRINT : FOR I = 0 TO LN -1: HTAB 5: PRINT  RIGHT$("   " + STR$(I),4)"    ";
  147. 1470 J =  PEEK(8194 +I +I):K =  PEEK(8195 +I +I):I$ = " ^^": IF K  THEN I$ = SP$ + RIGHT$("0" + STR$(K),2)
  148. 1480  IF J >96  THEN  CALL 20765: POKE 1191,J +96: PRINT  CHR$(J -32)I$ TAB( 20)C$(K): NEXT : GOTO 1230
  149. 1490  IF J = 32  THEN  CALL 20765: POKE 1191,160: PRINT : NEXT : GOTO 1230
  150. 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
  151. 1510  CALL 20765: POKE 1191,J +128: PRINT  CHR$(J)I$ TAB( 20)C$(K): NEXT : GOTO 1230
  152. 1520  POKE 216,0: PRINT : GOTO 1230
  153. 1530  IF I$ = "NEW"  THEN  CALL 20779: HOME : POKE 230,32: CALL 62450:LN = 0: GOTO 1230
  154. 1540  IF J$ < >"?"  THEN 1640
  155. 1550  TEXT : HOME : HTAB 12: PRINT "EDITOR'S  COMMANDS": HTAB 12: PRINT "------------------"
  156. 1560  PRINT : POKE 32,8: PRINT : PRINT "= SHOW THIS HELPFUL PAGE": PRINT 
  157. 1570  PRINT "= DELETE LINE(S) *": PRINT : PRINT "= CLEAR TEXT SCREEN": PRINT 
  158. 1580  PRINT "= INSERT NEW LINES *": PRINT : PRINT "= LIST MESSAGE": PRINT 
  159. 1590  PRINT "= REMOVE MESSAGE FROM MEMORY": PRINT : PRINT "= QUIT AND GO BACK TO MENU"
  160. 1600  PRINT : PRINT "= REPLACE LINE'S CONTENTS *": PRINT : PRINT "= WRITE MESSAGE"
  161. 1610  POKE 32,0: VTAB 4: INVERSE : PRINT : FOR I = 1 TO 9: HTAB 7
  162. 1620  PRINT  MID$ ("?DHIL QRW",I,1): PRINT : NEXT : VTAB 15: HTAB 5: PRINT "NEW": NORMAL 
  163. 1630  VTAB 24: HTAB 11: PRINT "* REQUIRES LINE NUMBER(S)";: GOSUB 130: GOTO 1220
  164. 1640  IF J$ = "Q"  THEN 810
  165. 1650  IF J$ = "H"  THEN  HOME : GOTO 1230
  166. 1660  IF J$ = "W"  THEN  PRINT : GOTO 1690
  167. 1670  CALL 54915: PRINT : PRINT E$(E): FOR J = 1 TO 5: FOR I = 1 TO 50
  168. 1680  & 2: NEXT : FOR I = 1 TO 75: NEXT : NEXT : GOTO 1230
  169. 1690  IF LN =  >1999  THEN E = 2: GOTO 1670
  170. 1700 Z = LN: GOSUB 220: GOSUB 280:LN = LN +1: GOSUB 300: GOTO 1690