home *** CD-ROM | disk | FTP | other *** search
/ RBBS in a Box Volume 1 #3.1 / RBBSIABOX31.cdr / scrg / rolodex.bas < prev    next >
BASIC Source File  |  1990-09-29  |  14KB  |  240 lines

  1. 10 ' ***********
  2. 20 ' * Rolodex *
  3. 30 ' ***********
  4. 40 KEY OFF:WIDTH 80:GOSUB 1950:LOCATE ,,0
  5. 50 A$="a":Z$="z":AC$="A":ZC$="Z":B$=" "
  6. 60 CV%=ASC(AC$)-ASC(A$)
  7. 70 DIM NUM%(26)
  8. 80 DEF FNCAP$(C$)=CHR$(ASC(C$)+CV%*(C$>=A$)*(C$<=Z$))
  9. 90 ' Disk file is Rolodex.dat with a length of 128
  10. 100 ' Each address is contained on one record
  11. 110 ' The first 16 characters is the last name
  12. 120 ' The next  22 characters is the first name or names
  13. 130 ' The next  3 sets of 20 characters is the street or mailing address
  14. 140 ' The next  9 characters is the zip code
  15. 150 ' The next 20 characters is the phone number
  16. 160 ' The last character is a sub code
  17. 170 OPEN "Rolodex.dat" AS #1 LEN=128
  18. 180 FIELD #1,16 AS LAST.NAME$,22 AS FIRST.NAME$,20 AS ADDRESS1$,20 AS ADDRESS2$,20 AS ADDRESS3$,9 AS ZIP.CODE$,20 AS PHONE.NUMBER$,1 AS SUB.CODE$
  19. 190 FIELD #1,128 AS GOT$
  20. 200 IF LOF(1)>0 THEN 320
  21. 210 LOCATE 5:PRINT "The disk in drive A: doesn't have a rolodex data file on it."
  22. 220 PRINT "Rolodex requires a data file that will take up most of the space"
  23. 230 PRINT "of a single sided disk. Do you want the data file opened and initia-"
  24. 240 PRINT "ed, or would you rather not at this moment.  It is suggested that"
  25. 250 PRINT "you have only DOS, BASIC, ROLODEX, and it's data file on the disk"
  26. 260 PRINT:PRINT "Do you want to 1 Initialize the disk or 2 stop here";
  27. 270 INPUT " (1 or 2)";WHICH
  28. 280 IF WHICH<1 OR WHICH>2 THEN 260 ELSE IF WHICH=2 THEN CLOSE:KILL"Rolodex.dat":END
  29. 290 LOCATE 14,14:PRINT "Initializing the address data file"
  30. 300 LSET GOT$=""
  31. 310 FOR I=1 TO 850:PUT #1,I:NEXT I
  32. 320 GOSUB 2280: ' Wave a little flag for Clay Jones
  33. 330 GOSUB 1950:LOCATE 5,,0:PRINT "A = Enter new addresses"
  34. 340 PRINT:PRINT "B = Edit existing addresses"
  35. 350 PRINT:PRINT "C = List addresses"
  36. 360 PRINT:PRINT "D = End"
  37. 370 PRINT:PRINT:PRINT "Press the key for the option you want"
  38. 380 L$="ABCD"
  39. 390 CMD$=INKEY$:IF CMD$="" THEN 390
  40. 400 CMD$=FNCAP$(CMD$)
  41. 410 CMD%=INSTR(L$,CMD$):IF CMD%=0 THEN SOUND 1000,1:SOUND 2000,2:BEEP:GOTO 390
  42. 420 SOUND 1000,1:SOUND 2000,2:SOUND 3000,2:ON CMD% GOTO 430,660,970,1840
  43. 430 GOSUB 1960:LOCATE 5,13:COLOR 0,7:PRINT "End adding":COLOR 7,0:LOCATE 24,1:PRINT "[PgUp] to start over entering";
  44. 440 LOCATE 5,13:MAX.IN=16:GOSUB 2070
  45. 450 IF IN$="" THEN GOTO 330
  46. 460 IF IN$=CHR$(1) OR IN$=CHR$(2) THEN 430 ELSE LAST$=IN$
  47. 470 IF FNCAP$(IN$)<"A" OR FNCAP$(IN$)>"Z" THEN LOCATE 5,30:PRINT "That is an invalid last name":GOSUB 1920:GOTO 430
  48. 480 LOCATE 7,13:MAX.IN=22:GOSUB 2070
  49. 490 IF IN$=CHR$(1) OR IN$=CHR$(2) THEN 430 ELSE FIRST$=IN$
  50. 500 LOCATE 9,13:MAX.IN=20:GOSUB 2070
  51. 510 IF IN$=CHR$(1) OR IN$=CHR$(2) THEN 430 ELSE LINE1$=IN$
  52. 520 LOCATE 11,13:MAX.IN=20:GOSUB 2070
  53. 530 IF IN$=CHR$(1) OR IN$=CHR$(2) THEN 430 ELSE LINE2$=IN$
  54. 540 LOCATE 13,13:MAX.IN=20:GOSUB 2070
  55. 550 IF IN$=CHR$(1) OR IN$=CHR$(2) THEN 430 ELSE LINE3$=IN$
  56. 560 LOCATE 15,13:MAX.IN=9:GOSUB 2070
  57. 570 IF IN$=CHR$(1) OR IN$=CHR$(2) THEN 430 ELSE ZIP$=IN$
  58. 580 LOCATE 17,13:MAX.IN=20:GOSUB 2070
  59. 590 IF IN$=CHR$(1) OR IN$=CHR$(2) THEN 430 ELSE PHONE$=IN$
  60. 600 LOCATE 19,13:MAX.IN=1:GOSUB 2070
  61. 610 IF IN$=CHR$(1) OR IN$=CHR$(2) THEN 430 ELSE CODE$=FNCAP$(IN$+" ")
  62. 620 START%=(ASC(FNCAP$(LEFT$(LAST$,1)))-ASC(AC$))
  63. 630 START%=START%*30+1
  64. 640 GET #1,START%:IF ASC(FIRST.NAME$)<>ASC(B$) AND ASC(FIRST.NAME$)<>ASC("*") THEN START%=START%+1:GOTO 640
  65. 650 NUMBER=START%:GOSUB 1760:GOTO 430
  66. 660 GOSUB 1950:LOCATE 5:PRINT "Last name  ";:COLOR 0,7:PRINT ":End editing"SPC(5):COLOR 7,0
  67. 670 LOCATE 7,1:PRINT "Terminate with a ? to search for part of a name":PRINT "ie. ";:COLOR 0,7:PRINT ":A? ";:COLOR 7,0:PRINT " will search for all last names starting with A"
  68. 680 LOCATE 5,13:MAX.IN=16:GOSUB 2070:IF IN$="" THEN 330
  69. 690 GOSUB 1850:IF NUM=-1 THEN LOCATE 5,30:PRINT "Invalid name":GOSUB 1920:GOTO 660
  70. 700 IF NUM=0 THEN LOCATE 5,30:PRINT "No such last name on file":GOSUB 1920:GOTO 660
  71. 710 IF NUM=1 THEN NUMBER=NUM%(1):GOTO 750
  72. 720 GOSUB 1950:PRINT:FOR I=1 TO NUM:PRINT I;:GET #1,NUM%(I):PRINT LAST.NAME$;FIRST.NAME$:NEXT I
  73. 730 INPUT "Which one";W:IF W=0 THEN 660 ELSE IF W<1 OR W>NUM THEN 710
  74. 740 NUMBER=NUM%(W)
  75. 750 GOSUB 1670:GOSUB 1960:LOCATE 24,1:PRINT "[PgUp] to redisplay address  -  [PgDn] to end without corredtions";
  76. 760 COLOR 0,7:LOCATE 5,13:PRINT LAST$;:COLOR 7,0:PRINT " Enter an * here to delete":COLOR 0,7:LOCATE 7,13:PRINT FIRST$:LOCATE 9,13:PRINT LINE1$
  77. 770 LOCATE 11,13:PRINT LINE2$:LOCATE 13,13:PRINT LINE3$:LOCATE 15,13:PRINT ZIP$:LOCATE 17,13:PRINT PHONE$
  78. 780 LOCATE 19,13:PRINT CODE$:COLOR 7,0
  79. 790 MAX.IN=16:LOCATE 5,13:GOSUB 2070:IF IN$="*" THEN LAST$="*":GOTO 950 ELSE PRINT SPC(30)
  80. 800 IF IN$=CHR$(1) THEN 710 ELSE IF IN$=CHR$(2) THEN 660
  81. 810 IF IN$<>"" THEN IF LEFT$(IN$,1)<>LEFT$(LAST$,1) THEN PRINT "You can`t change the first letter of the last name":FOR I=1 TO 1000:NEXT I:GOTO 710 ELSE LAST$=IN$
  82. 820 MAX.IN=22:LOCATE 7,13:GOSUB 2070
  83. 830 IF IN$=CHR$(1) THEN 710 ELSE IF IN$=CHR$(2) THEN 660 ELSE IF IN$<>"" THEN FIRST$=IN$
  84. 840 LOCATE 9,13:MAX.IN=20:GOSUB 2070
  85. 850 IF IN$=CHR$(1) THEN 710 ELSE IF IN$=CHR$(2) THEN 660 ELSE IF IN$<>"" THEN LINE1$=IN$
  86. 860 LOCATE 11,13:GOSUB 2070
  87. 870 IF IN$=CHR$(1) THEN 710 ELSE IF IN$=CHR$(2) THEN 660 ELSE IF IN$<>"" THEN LINE2$=IN$
  88. 880 LOCATE 13,13:GOSUB 2070
  89. 890 IF IN$=CHR$(1) THEN 710 ELSE IF IN$=CHR$(2) THEN 660 ELSE IF IN$<>"" THEN LINE3$=IN$
  90. 900 LOCATE 15,13:MAX.IN=10:GOSUB 2070
  91. 910 IF IN$=CHR$(1) THEN 710 ELSE IF IN$=CHR$(2) THEN 660 ELSE IF IN$<>"" THEN ZIP$=IN$
  92. 920 LOCATE 17,13:MAX.IN=20:GOSUB 2070
  93. 930 IF IN$=CHR$(1) THEN 710 ELSE IF IN$=CHR$(2) THEN 660 ELSE IF IN$<>"" THEN PHONE$=IN$
  94. 940 LOCATE 19,13:MAX.IN=1:GOSUB 2070
  95. 950 IF IN$=CHR$(1) THEN 710 ELSE IF IN$=CHR$(2) THEN 660 ELSE IF IN$<>"" THEN CODE$=FNCAP$(IN$)
  96. 960 GOSUB 1760:GOTO 660
  97. 970 GOSUB 1950:LOCATE 5:PRINT "A = Print only 1 address"
  98. 980 PRINT:PRINT "B = Print addresses with a specific last name"
  99. 990 PRINT:PRINT "C = Print all addresses":PRINT:PRINT "D = Print according to sub code"
  100. 1000 PRINT:PRINT "E = End Printing"
  101. 1010 PRINT:PRINT:PRINT "Press the key for your choice"
  102. 1020 CMD$=INKEY$:IF CMD$="" THEN 1020 ELSE CMD%=INSTR("ABCDE",FNCAP$(CMD$)):IF CMD%=0 THEN SOUND 1000,1:SOUND 2000,1:BEEP:GOTO 1020
  103. 1030 SOUND 1000,1:SOUND 2000,2:SOUND 3000,2:IF CMD%=5 THEN 330 ELSE IF CMD%>1 THEN 1150
  104. 1040 GOSUB 1950:PRINT:PRINT "List addresses":LOCATE 5:PRINT "Last name  ";:COLOR 0,7:PRINT ":End        "SPC(5):COLOR 7,0
  105. 1050 LOCATE 7,1:PRINT "Terminate with a ? to search for part of a name":PRINT "ie. ";:COLOR 0,7:PRINT ":A? ";:COLOR 7,0:PRINT " will search for all last names starting with A"
  106. 1060 LOCATE 5,13:MAX.IN=16:GOSUB 2070:PRINT:PRINT:IF IN$="" THEN 970
  107. 1070 GOSUB 1850:IF NUM=-1 THEN LOCATE 5,30:PRINT "Invalid name":GOSUB 1920:GOTO 1040
  108. 1080 IF NUM=0 THEN LOCATE 5,30:PRINT "No such last name on file":GOSUB 1920:GOTO 1040
  109. 1090 IF NUM=1 THEN NUMBER=NUM%(1):GOTO 1140
  110. 1100 GOSUB 1950:PRINT:FOR I=1 TO NUM:PRINT I;:GET #1,NUM%(I):PRINT LAST.NAME$;FIRST.NAME$:NEXT I
  111. 1110 INPUT "Which one";W:IF W=0 THEN 970 ELSE IF W<1 OR W>NUM THEN 1090
  112. 1120 NUMBER=NUM%(W)
  113. 1130 GOSUB 1630:IF WHICH=-1 THEN 1040
  114. 1140 GOSUB 1670:GOSUB 1480:FOR I=1 TO 2000:NEXT I:GOTO 970
  115. 1150 IF CMD%>2 THEN 1230
  116. 1160 GOSUB 1950:LOCATE 3:PRINT "List addresses":LOCATE 5:PRINT "Last name  ";:COLOR 0,7:PRINT ":End";SPC(13):COLOR 7,0
  117. 1170 LOCATE 7,1:PRINT "Terminate with a ? to search for part of a name":PRINT "ie. ";:COLOR 0,7:PRINT ":A? ";:COLOR 7,0:PRINT " will search for all last names starting with A"
  118. 1180 LOCATE 5,13:MAX.IN=16:GOSUB 2070:IF IN$="" THEN 970
  119. 1190 PRINT:PRINT:GOSUB 1850:IF NUM<0 THEN LOCATE 5,30:PRINT "Invalid":GOSUB 1920:GOTO 1160
  120. 1200 IF NUM=0 THEN LOCATE 5,30:PRINT "None saved under that name":GOSUB 1920:GOTO 1160
  121. 1210 GOSUB 1630:IF WHICH=-1 THEN 1160
  122. 1220 FOR L=1 TO NUM:NUMBER=NUM%(L):GOSUB 1670:GOSUB 1480:NEXT L:FOR I=1 TO 3000:NEXT I:GOTO 970
  123. 1230 IF CMD%=4 THEN 1350
  124. 1240 GOSUB 1950:LOCATE 3:PRINT "List all addresses on file":GOSUB 1630:P=0
  125. 1250 GOSUB 1630:IF WHICH=-1 THEN 970
  126. 1260 FOR LTR=ASC("A") TO ASC("Z")
  127. 1270 IN$=CHR$(LTR)+"?":GOSUB 1850
  128. 1280 IF NUM=0 THEN 1320
  129. 1290 P=P+NUM:FOR L=1 TO NUM
  130. 1300 NUMBER=NUM%(L):GOSUB 1670:GOSUB 1480
  131. 1310 NEXT L
  132. 1320 NEXT LTR
  133. 1330 IF P=0 THEN PRINT "None saved on file" ELSE PRINT P;"addresses saved."
  134. 1340 FOR L=1 TO 3000:NEXT L:GOTO 970
  135. 1350 GOSUB 1950:LOCATE 5:PRINT "What sub codes ";:COLOR 0,7:PRINT ":";SPC(10);:COLOR 7,0
  136. 1360 PRINT:PRINT:PRINT "All names with the entered codes will be printed (space is a code also).":LOCATE 5,17:MAX.IN=10:GOSUB 2070
  137. 1370 IF IN$=CHR$(1) OR IN$=CHR$(2) OR IN$="" THEN 970 ELSE GOSUB 2060:LOOK.CODE$=IN$
  138. 1380 GOSUB 1630:P=0:IF WHICH=-1 THEN 1350
  139. 1390 FOR LTR=ASC("A") TO ASC("Z")
  140. 1400 IN$=CHR$(LTR)+"?":GOSUB 1850
  141. 1410 IF NUM=0 THEN 1450
  142. 1420 FOR L=1 TO NUM
  143. 1430 NUMBER=NUM%(L):GOSUB 1670:IF INSTR(LOOK.CODE$,CODE$)<>0 THEN P=P+1:GOSUB 1480
  144. 1440 NEXT L
  145. 1450 NEXT LTR
  146. 1460 IF P=0 THEN PRINT "None saved under that code" ELSE PRINT P;"saved under that code"
  147. 1470 FOR L=1 TO 3000:NEXT L:GOTO 970
  148. 1480 IF WHICH=1 THEN 1560
  149. 1490 FOR I=LEN(FIRST$) TO 1 STEP -1:IF MID$(FIRST$,I,1)<>B$ THEN 1500 ELSE NEXT I
  150. 1500 LPRINT TAB(T);LEFT$(FIRST$,I);" ";LAST$:LPRINT TAB(T);LINE1$:LPRINT TAB(T);LINE2$;
  151. 1510 FOR I=LEN(LINE3$) TO 1 STEP -1:IF MID$(LINE3$,I,1)<>B$ THEN 1520 ELSE NEXT I:LPRINT " ";ZIP$:GOTO 1530
  152. 1520 LPRINT:LPRINT TAB(T);LINE3$;" ";ZIP$
  153. 1530 IF PHONE=1 THEN LPRINT TAB(T);PHONE$ ELSE LPRINT
  154. 1540 LPRINT:IF I=0 THEN LPRINT
  155. 1550 IF WHICH=2 THEN RETURN
  156. 1560 FOR I=LEN(FIRST$) TO 1 STEP -1:IF MID$(FIRST$,I,1)<>B$ THEN 1570 ELSE NEXT I
  157. 1570 PRINT TAB(T);LEFT$(FIRST$,I);" ";LAST$:PRINT TAB(T);LINE1$:PRINT TAB(T);LINE2$;
  158. 1580 FOR I=LEN(LINE3$) TO 1 STEP -1:IF MID$(LINE3$,I,1)<>B$ THEN 1590 ELSE NEXT I:PRINT " ";ZIP$:GOTO 1600
  159. 1590 PRINT:PRINT TAB(T);LINE3$;" ";ZIP$
  160. 1600 IF PHONE=1 THEN PRINT TAB(T);PHONE$ ELSE PRINT
  161. 1610 PRINT:IF I=0 THEN PRINT
  162. 1620 RETURN
  163. 1630 LOCATE 10,1:INPUT "1 = on screen   2 = on printer (labels)   3 = both";WHICH$:IF WHICH$="" THEN WHICH=-1:RETURN ELSE WHICH=VAL(WHICH$)
  164. 1640 IF WHICH=0 THEN WHICH=1
  165. 1650 PRINT:INPUT "0 = Don't print phone number   1 = Do print phone number";PHONE$:IF PHONE$="" THEN 1630 ELSE PHONE=VAL(PHONE$)
  166. 1660 RETURN
  167. 1670 GET #1,NUMBER
  168. 1680 LAST$=LAST.NAME$:FIRST$=FIRST.NAME$
  169. 1690 LINE1$=ADDRESS1$
  170. 1700 LINE2$=ADDRESS2$
  171. 1710 LINE3$=ADDRESS3$
  172. 1720 ZIP$=ZIP.CODE$
  173. 1730 PHONE$=PHONE.NUMBER$
  174. 1740 CODE$=SUB.CODE$
  175. 1750 RETURN
  176. 1760 LSET LAST.NAME$=LAST$:LSET FIRST.NAME$=FIRST$
  177. 1770 LSET ADDRESS1$=LINE1$
  178. 1780 LSET ADDRESS2$=LINE2$
  179. 1790 LSET ADDRESS3$=LINE3$
  180. 1800 LSET ZIP.CODE$=ZIP$
  181. 1810 LSET PHONE.NUMBER$=PHONE$
  182. 1820 LSET SUB.CODE$=CODE$
  183. 1830 PUT #1,NUMBER:RETURN
  184. 1840 CLEAR:END
  185. 1850 START%=ASC(FNCAP$(LEFT$(IN$,1)))-ASC(AC$):NUM=0
  186. 1860 START%=START%*30+1:LSET LAST.NAME$=IN$:IN$=LAST.NAME$:NUM=0:GOSUB 2060:F$=IN$
  187. 1870 IF START%<0 OR START%>3000 THEN NUM=-1:RETURN
  188. 1880 DIST%=INSTR(F$,"?")-1:IF DIST%<0 THEN DIST%=LEN(F$)
  189. 1890 GET #1,START%:IF ASC(LAST.NAME$)=32 THEN RETURN
  190. 1900 IN$=LAST.NAME$:GOSUB 2060:IF LEFT$(IN$,DIST%)<>LEFT$(F$,DIST%) THEN START%=START%+1:GOTO 1890
  191. 1910 NUM=NUM+1:NUM%(NUM)=START%:START%=START%+1:GOTO 1890
  192. 1920 SOUND 2000,1:SOUND 1000,1
  193. 1930 FOR I=1 TO 1000:NEXT I
  194. 1940 RETURN
  195. 1950 CLS:PRINT TAB(30);"Rolodex":RETURN
  196. 1960 GOSUB 1950
  197. 1970 LOCATE 5   :PRINT "Last name  ";:COLOR 0,7:PRINT ":";SPC(16):COLOR 7,0
  198. 1980 PRINT:PRINT:PRINT "First name ";:COLOR 0,7:PRINT ":";SPC(22):COLOR 7,0
  199. 1990 PRINT:PRINT:PRINT "Address    ";:COLOR 0,7:PRINT ":";SPC(20):COLOR 7,0
  200. 2000 PRINT:PRINT:PRINT "Address    ";:COLOR 0,7:PRINT ":";SPC(20):COLOR 7,0
  201. 2010 PRINT:PRINT:PRINT "Address    ";:COLOR 0,7:PRINT ":";SPC(20):COLOR 7,0
  202. 2020 PRINT:PRINT:PRINT "Zip Code   ";:COLOR 0,7:PRINT ":";SPC(9):COLOR 7,0
  203. 2030 PRINT:PRINT:PRINT "Phone      ";:COLOR 0,7:PRINT ":";SPC(20):COLOR 7,0
  204. 2040 PRINT:PRINT:PRINT "Sub Code   ";:COLOR 0,7:PRINT ": ":COLOR 7,0
  205. 2050 RETURN
  206. 2060 FOR I=1 TO LEN(IN$):MID$(IN$,I,1)=FNCAP$(MID$(IN$,I,1)):NEXT I:RETURN
  207. 2070 LFT=POS(0):IN$=""
  208. 2080 LOCATE ,,1,5,5:COLOR 0,7
  209. 2090 CMD$=INKEY$:IF CMD$="" THEN 2090
  210. 2100 IF LEN(CMD$)=1 THEN 2180
  211. 2110 IF RIGHT$(CMD$,1)<>CHR$(83) THEN 2140
  212. 2120 IF RIGHT$(IN$,1)=B$ OR POS(0)=LFT THEN 2090 ELSE LOCATE ,POS(0)-1:PRINT SPC(1);:LOCATE ,POS(0)-1:IN$=LEFT$(IN$,LEN(IN$)-1):GOTO 2090
  213. 2130 CMD$=CHR$(8):GOTO 2220
  214. 2140 IF RIGHT$(CMD$,1)<>CHR$(73) THEN 2160
  215. 2150 IN$=CHR$(1):GOTO 2200
  216. 2160 IF RIGHT$(CMD$,1)<>CHR$(81) THEN 2090
  217. 2170 IN$=CHR$(2):GOTO 2200
  218. 2180 IF CMD$=CHR$(27) THEN COLOR 7,0:LOCATE ,,,7,7:STOP
  219. 2190 IF CMD$<>CHR$(13) THEN 2220
  220. 2200 LOCATE ,LFT+MAX.IN:LOCATE ,,0,7,7:COLOR 7,0
  221. 2210 RETURN
  222. 2220 IF CMD$=CHR$(8) AND POS(0)=LFT THEN 2090
  223. 2230 IF CMD$=CHR$(8) THEN LOCATE ,POS(0)-1:PRINT SPC(1);:LOCATE ,POS(0)-1:IN$=LEFT$(IN$,LEN(IN$)-1):GOTO 2090
  224. 2240 IF POS(0)=LFT+MAX.IN THEN BEEP:GOTO 2090
  225. 2250 IF POS(0)=LFT THEN PRINT SPC(MAX.IN);:LOCATE ,LFT
  226. 2260 IN$=IN$+CMD$:PRINT CMD$;
  227. 2270 GOTO 2090
  228. 2280 ' ******************************************************************
  229. 2290 ' * Subroutine to tell everyone that Clay Jones wrote this program *
  230. 2300 ' ******************************************************************
  231. 2310 SCREEN 1:FOR I=6 TO 94 STEP 8:LINE (I,I)-(319-I,199-I),,B:SOUND 32+5*I,2:NEXT I
  232. 2320 FOR I=82 TO 2 STEP -8:LINE (I,I)-(319-I,199-I),,B:SOUND 32+5*I,2:NEXT I
  233. 2330 FOR I=4 TO 84 STEP 8:LINE (I,I)-(319-I,199-I),,B:SOUND 32+5*I,2:NEXT I
  234. 2340 LOCATE 13,16:PRINT "Clay Jones"
  235. 2350 FOR I=1 TO 20:FOR L=1 TO 20:NEXT L:LINE (120,104)-(198,104),2*(I MOD 2):NEXT I
  236. 2360 LOCATE 13,16:PRINT " Rolodex  "
  237. 2370 LOCATE 24,8:PRINT "  press any key to begin  ";
  238. 2380 IF INKEY$<>"" THEN SOUND 1000,1:SOUND 2000,1:SOUND 1000,1:SOUND 2000,1:SCREEN 0:WIDTH 80:RETURN
  239. 2390 I=(I=0):FOR L=1 TO 20:NEXT L:LINE (128,104)-(182,104),-2*I:GOTO 2380
  240.