home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib40b.dsk / BEEP.EDITOR.bas < prev    next >
BASIC Source File  |  2023-02-26  |  10KB  |  210 lines

  1. 10  REM  ************************
  2. 20  REM  * BEEP.EDITOR          *
  3. 30  REM  * BY RUSSELL ROSS      *
  4. 40  REM  * COPYRIGHT (C) 1990   *
  5. 50  REM  * MINDCRAFT PUBL. CORP.*
  6. 60  REM  * CONCORD, MA  01742   *
  7. 70  REM  ************************
  8. 80  TEXT : PRINT  CHR$(21): HOME : NORMAL : SPEED= 255: ONERR  GOTO 1790
  9. 90  FOR X = 1 TO 31  STEP 2: READ A: IF X <31  THEN  READ B
  10. 100 N = N +A -B *(X <31)
  11. 110  IF N < > -91  THEN  HOME : PRINT "Fatal Error": PRINT : PRINT "There is an error in the data statement": PRINT "at line 560": END 
  12. 120 MD = 570:ME = 580:S1 = 1370:S2 = 1380
  13. 130 N = 0
  14. 140 PS = 1
  15. 150 SE = 1
  16. 160 MH = 11:MV = 5
  17. 170  RESTORE : FOR X = 0 TO 28: READ A: POKE X +768,A: NEXT X
  18. 180  POKE 1013,76: POKE 1014,0: POKE 1015,3
  19. 190  & 1090
  20. 200  FOR X = 1 TO 82  STEP 2: READ A: READ B
  21. 210 N = N +A -B: NEXT X
  22. 220  IF N < > -775  THEN  HOME : PRINT "Fatal Error": PRINT : PRINT "There is an error in the data statement": PRINT "at line "S1" or line "S2: END 
  23. 230  GOSUB 1890
  24. 240  GOSUB 610
  25. 250  ONERR  GOTO 1820
  26. 260  HOME :A$ = "Beep Editor": GOSUB 550
  27. 270 A$ = "By Russell Ross": GOSUB 550
  28. 280  PRINT :A$ = "Copyright (c) 1990": GOSUB 550
  29. 290 A$ = "MindCraft Publ. Corp.": GOSUB 550
  30. 300  & MD: READ A
  31. 310  PRINT : FOR X = 1 TO A
  32. 320  HTAB MH: IF X = SE  THEN  INVERSE : GOSUB 530: GOTO 340
  33. 330  GOSUB 510
  34. 340  PRINT A$: NORMAL : PRINT : NEXT X
  35. 350 A$ = "Use arrow keys or A and Z keys": GOSUB 550
  36. 360 A$ = "and press <RETURN>": GOSUB 550
  37. 370  WAIT  -16384,128: GET SL$
  38. 380 SL =  ASC(SL$)
  39. 390  IF SL = 97  OR SL = 65  THEN SL = 11
  40. 400  IF SL = 122  OR SL = 90  THEN SL = 10
  41. 410  IF SL = 11 GOTO 470
  42. 420  IF SL = 10 GOTO 450
  43. 430  IF SL < >13 GOTO 370
  44. 440  GOTO 590
  45. 450 X = SE: GOSUB 510: VTAB MV +SE *2 -1: PRINT : HTAB 11: PRINT A$:SE = SE +1: IF SE >B  THEN SE = 1
  46. 460  GOTO 480
  47. 470 X = SE: GOSUB 510: VTAB MV +SE *2 -1: PRINT : HTAB 11: PRINT A$:SE = SE -1: IF SE <1  THEN SE = B
  48. 480  VTAB MV +SE *2 -1: PRINT 
  49. 490  HTAB MH: INVERSE :X = SE: GOSUB 530
  50. 500  PRINT A$: NORMAL : GOTO 370
  51. 510  & MD
  52. 520  READ B: FOR C = 1 TO X: READ A$: NEXT C: RETURN 
  53. 530  & ME: GOTO 520
  54. 540  END 
  55. 550  HTAB 20 - LEN(A$)/2: PRINT A$: RETURN 
  56. 560  DATA  32,123,221,32,82,231,32,26,214,144,13,165,155,233,1,133,125,165,156,233,0,133,126,96,162,90,76,18,212
  57. 570  DATA  7,Add Beep,Modify Beep,Subtract Beep,Hear Beep,Save Beep,Print Specifications,Quit
  58. 580  DATA  7,ADD BEEP,MODIFY BEEP,SUBTRACT BEEP,HEAR BEEP,SAVE BEEP,PRINT SPECIFICATIONS,QUIT
  59. 590  ON SE GOTO 710,920,1050,1150,1400,1460,2070
  60. 600  REM  RESERVE SPACE FOR BEEP SOUNDS
  61. 610  HOME : PRINT "How many 'beeps' do you plan to use?"
  62. 620  PRINT "Make sure you reserve enough space.": PRINT "If you estimate high, it's O.K."
  63. 630  VTAB 6: INPUT "How many? ";MB$
  64. 640  IF MB$ = ""  OR  STR$( INT( VAL(MB$))) < >MB$ GOTO 630
  65. 650 MB =  VAL(MB$)
  66. 660  IF MB = 0 GOTO 630
  67. 670  IF MB <10  THEN  RETURN 
  68. 680  IF MB >100  THEN  PRINT : PRINT : PRINT "Must be less than 100": GOTO 630
  69. 690  DIM B1(MB),B2(MB),B3(MB): RETURN 
  70. 700  REM  ADD BEEP
  71. 710  HOME : PRINT "You have used "BN" beeps so far": PRINT : PRINT "Your maximum is "MB"."
  72. 720  IF BN = MB  THEN  PRINT "You've used your limit, sorry.": WAIT  -16384,128: GET A$: GOTO 250
  73. 730  IF BN = 0 GOTO 760
  74. 740  PRINT : PRINT "A)dd to the end or I)nsert? ";: WAIT  -16384,128: GET A$: IF A$ = "i"  OR A$ = "I" GOTO 790
  75. 750  VTAB 5: HTAB 1: PRINT  SPC( 27)
  76. 760  VTAB 4: GOSUB 1630
  77. 770  IF OK  THEN BN = BN +1:B1(BN) = T1:B2(BN) = T2:B3(BN) = T3
  78. 780  GOTO 250
  79. 790  VTAB 5: HTAB 1: PRINT  SPC( 27): VTAB 4
  80. 800  GOSUB 1580
  81. 810  PRINT : INPUT "Insert before what number? ";A$
  82. 820  IF  STR$( INT( VAL(A$))) < >A$  OR  VAL(A$) >BN  OR  VAL(A$) <1 GOTO 810
  83. 830 N =  VAL(A$)
  84. 840  HOME : PRINT "Insert Beep": PRINT : PRINT "Insert before number "N
  85. 850  GOSUB 1630
  86. 860  IF   NOT OK GOTO 250
  87. 870  FOR X = BN TO N  STEP  -1:B1(X +1) = B1(X):B2(X +1) = B2(X):B3(X +1) = B3(X): NEXT X
  88. 880 B1(N) = T1:B2(N) = T2:B3(N) = T3
  89. 890 BN = BN +1
  90. 900  GOTO 250
  91. 910  REM  MODIFY BEEP
  92. 920  IF BN = 0 GOTO 250
  93. 930  IF BN = 1  THEN N = 1: GOTO 980
  94. 940  GOSUB 1580
  95. 950  PRINT : INPUT "Which number? ";A$
  96. 960  IF  STR$( INT( VAL(A$))) < >A$  OR  VAL(A$) >BN  OR  VAL(A$) <1 GOTO 950
  97. 970 N =  VAL(A$)
  98. 980  HOME : PRINT "Modify Beep"
  99. 990  PRINT "Old values:"
  100. 1000  PRINT "Start: "B1(N)"  End: "B2(N)"  Length :"B3(N)
  101. 1010  GOSUB 1630
  102. 1020  IF OK  THEN B1(N) = T1:B2(N) = T2:B3(N) = T3
  103. 1030  GOTO 250
  104. 1040  REM  SUBTRACT BEEP
  105. 1050  IF BN = 0 GOTO 250
  106. 1060  GOSUB 1580
  107. 1070  PRINT : HTAB 2: INPUT "Which number? ";A$: GOSUB 1760:SN = A: IF A <1  OR A >BN  THEN  VTAB 4 +BN: GOTO 1070
  108. 1080  PRINT : HTAB 2: PRINT "Are you sure? (Y/N) ";: GET A$: IF A$ < >"y"  AND A$ < >"Y" GOTO 250
  109. 1090  IF SN = BN  THEN BN = BN -1: GOTO 250
  110. 1100  FOR X = SN TO BN -1:B1(X) = B1(X +1):B2(X) = B2(X +1):B3(X) = B3(X +1): NEXT X
  111. 1110 BN = BN -1
  112. 1120  IF BN = 0 GOTO 80
  113. 1130  GOTO 250
  114. 1140  REM  HEAR BEEP
  115. 1150  IF BN <1 GOTO 250
  116. 1160  HOME :BC = 1:EC = BN
  117. 1170  IF BN = 1 GOTO 1230
  118. 1180  PRINT "Hear all of the beeps? ";: GET A$: IF A$ = "Y"  OR A$ = "y" GOTO 1230
  119. 1190  GOSUB 1580: PRINT 
  120. 1200  INPUT "Which number? ";A$
  121. 1210  IF  STR$( INT( VAL(A$))) < >A$  OR  VAL(A$) >BN  OR  VAL(A$) <1 GOTO 1200
  122. 1220 BC =  VAL(A$):EC =  VAL(A$)
  123. 1230  GOSUB 1250: PRINT  CHR$(7): GOTO 250
  124. 1240  REM  COMPILE BEEP
  125. 1250  IF BN = 0 GOTO 250
  126. 1260  HOME : PRINT "Compiling..."
  127. 1270 L1 = 51:L2 = 31: REM  LENGTH OF SUBROUTINES
  128. 1280 DE = 30:DL = 26:DS = 22:UD = 17: REM  L2-THESE=DEFAULT POKE ADDRESSES
  129. 1290 AD = 16384: & S1: FOR X = AD TO AD +L1 -1: READ A: POKE X,A: NEXT X:AD = X
  130. 1300  FOR Y = BC TO EC: & S2: FOR X = AD TO AD +L2 -1: READ A: POKE X,A: NEXT X:AD = X
  131. 1310  POKE AD -DS,B1(Y): POKE AD -DE,B2(Y): POKE AD -DL,B3(Y)
  132. 1320  IF B1(Y) >B2(Y)  THEN  POKE AD -UD,202
  133. 1330  IF Y <BN  THEN AD = AD -3
  134. 1340  NEXT Y
  135. 1350  CALL 16384
  136. 1360  RETURN 
  137. 1370  DATA  173,0,191,201,76,208,11,169,30,141,48,190,169,64,141,49,190,96,169,30,133,54,169,64,133,55,32,234,3,96,201,135,208,6,32,74,255,76,51,64,44,31,192,16,3,76,7,195,76,240,253
  138. 1380  DATA  169,255,133,6,169,255,133,7,162,0,228,6,240,1,232,44,48,192,138,168,234,136,208,252,198,7,208,238,76,63,255
  139. 1390  REM  SAVE BEEP
  140. 1400  IF BN <1 GOTO 250
  141. 1410  HOME 
  142. 1420  VTAB 1: INPUT "File name: ";F$: PRINT : PRINT "Are you sure? ";: GET A$: IF A$ < >"Y"  AND A$ < >"y" GOTO 250
  143. 1430  ONERR  GOTO 1860
  144. 1435 BC = 1:EC = BN
  145. 1440  GOSUB 1250: HOME : PRINT  CHR$(4)"BSAVE "F$".BEEP,A$4000,L"AD -16384: GOTO 250
  146. 1450  REM  PRINT SPECIFICATIONS
  147. 1460  HOME : PRINT 
  148. 1470  IF BN = 0 GOTO 250
  149. 1480  PRINT "Print to printer? (Y/N) ";: GET A$: PRINT A$: IF A$ < >"N"  AND A$ < >"n"  AND A$ < >"y"  AND A$ < >"Y" GOTO 1460
  150. 1490  IF A$ < >"Y"  AND A$ < >"y" GOTO 1530
  151. 1500  VTAB 3: PRINT : PRINT "Default = ";: INVERSE : PRINT PS: NORMAL : PRINT : PRINT "Printer slot (<RETURN> for default) : ";: GET A$: IF  ASC(A$) = 13  THEN A$ =  STR$(PS)
  152. 1510  IF  VAL(A$) <1  AND  VAL(A$) >7 GOTO 1500
  153. 1520 PS =  VAL(A$): INVERSE : PRINT PS: NORMAL : PRINT : PRINT  CHR$(4)"PR#"PS
  154. 1530  GOSUB 1580
  155. 1540  PRINT  CHR$(4)"PR#0"
  156. 1550  WAIT  -16384,128: GET A$
  157. 1560  GOTO 250
  158. 1570  REM  PRINT TABLE OF BEEPS
  159. 1580  HOME : PRINT : HTAB 2: PRINT "Beep #   Beginning   Ending   Length"
  160. 1590  HTAB 2: FOR X = 1 TO 36: PRINT "-";: NEXT X
  161. 1600  PRINT : FOR X = 1 TO BN: HTAB 2: PRINT X;: HTAB 11: PRINT B1(X);: HTAB 23: PRINT B2(X);: HTAB 32: PRINT B3(X): NEXT X
  162. 1610  RETURN 
  163. 1620  REM  INPUT BEEP VALUES
  164. 1630  PRINT : INPUT "Starting value: ";A$: GOSUB 1760:T1 = A
  165. 1640  IF T1 <1  OR T1 >255  THEN  VTAB 4: GOTO 1630
  166. 1650 T1 =  INT(T1)
  167. 1660  PRINT : INPUT "Ending value  : ";A$: GOSUB 1760:T2 = A
  168. 1670  IF T2 <1  OR T2 >255  THEN  VTAB 6: GOTO 1660
  169. 1680 T2 =  INT(T2)
  170. 1690  IF T1 < >T2  THEN  PRINT : PRINT "Should I just make the length be the": PRINT "difference between the start and end? ": WAIT  -16384,128: GET A$: IF A$ = "Y"  OR A$ = "y"  THEN T3 =  ABS(T1 -T2): PRINT : PRINT "Beep length   : "T3: GOTO 1730
  171. 1700  PRINT : INPUT "Beep length   : ";A$: GOSUB 1760:T3 = A
  172. 1710  IF T3 <1  OR T3 >255  THEN  VTAB 10: GOTO 1700
  173. 1720 T3 =  INT(T3)
  174. 1730  PRINT : PRINT "Is this correct? (Y/N) ";: WAIT  -16384,128: GET A$: IF A$ = "Y"  OR A$ = "y"  THEN OK = 1: GOTO 1750
  175. 1740 OK = 0
  176. 1750  RETURN 
  177. 1760 A = 0: IF  STR$( INT( VAL(A$))) = A$  THEN A =  VAL(A$)
  178. 1770  RETURN 
  179. 1780  REM  ERROR
  180. 1790 ER =  PEEK(222):EL =  PEEK(218) + PEEK(219) *256
  181. 1800  IF ER = 255  THEN  HOME : VTAB 11: HTAB 6: PRINT "Please do not press <CTRL>-C": WAIT  -16384,128: GET A$: CLEAR : RESTORE : GOTO 80
  182. 1810  HOME : PRINT "Fatal error at line "EL: PRINT "Error #"ER: END 
  183. 1820 ER =  PEEK(222)
  184. 1830 EL =  PEEK(218) + PEEK(219) *256
  185. 1840  IF ER = 255  THEN  HOME : VTAB 11: HTAB 6: PRINT "Please do not press <CTRL>-C": WAIT  -16384,128: GET A$: GOTO 250
  186. 1850  HOME : PRINT "Fatal error at line "EL: PRINT "Error #"ER: END 
  187. 1860  VTAB 6: PRINT "Disk error, Probably bad path/filename": PRINT "Press <RETURN> to continue"
  188. 1870  WAIT  -16384,128: GET A$
  189. 1880  GOTO 1410
  190. 1890  HTAB 10: PRINT "BBB  EEEE EEEE PPP"
  191. 1900  HTAB 10: PRINT "B  B E    E    P  P"
  192. 1910  HTAB 10: PRINT "BBB  EEE  EEE  PPP"
  193. 1920  HTAB 10: PRINT "B  B E    E    P"
  194. 1930  HTAB 10: PRINT "BBB  EEEE EEEE P"
  195. 1940  PRINT 
  196. 1950  HTAB 4: PRINT "EEEE DDD  IIIII TTTTT  OOO  RRR"
  197. 1960  HTAB 4: PRINT "E    D  D   I     T   O   O R  R"
  198. 1970  HTAB 4: PRINT "EEE  D  D   I     T   O   O RRR"
  199. 1980  HTAB 4: PRINT "E    D  D   I     T   O   O R  R"
  200. 1990  HTAB 4: PRINT "EEEE DDD  IIIII   T    OOO  R  R"
  201. 2000  PRINT 
  202. 2010 A$ = "By Russell Ross": GOSUB 550
  203. 2020  PRINT : PRINT :A$ = "Copyright (c) 1990": GOSUB 550
  204. 2030 A$ = "MindCraft Publ. Corp.": GOSUB 550
  205. 2040  PRINT : PRINT : PRINT :A$ = "Press any key to continue": GOSUB 550
  206. 2050  WAIT  -16384,128: GET A$
  207. 2060  RETURN 
  208. 2070  VTAB 21: CALL  -958: INPUT "Do you really want to quit?";YN$: IF  LEFT$(YN$,1) = "n"  OR  LEFT$(YN$,1) = "N"  THEN  GOTO 250
  209. 2080  IF  LEFT$(YN$,1) = "Y"  OR  LEFT$(YN$,1) = "y"  THEN  TEXT : HOME : END 
  210. 2090  GOTO 2070