home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib21a.dsk / SEPTEMBER.1984 / PROMENU.bas < prev    next >
BASIC Source File  |  2023-02-26  |  15KB  |  363 lines

  1. 10  REM  ***********************
  2. 20  REM  *       PROMENU       *
  3. 30  REM  *   BY ROYCE BACON    *
  4. 40  REM  *  COPYRIGHT (C) 1984 *
  5. 50  REM  *  MICROSPARC, INC.   *
  6. 60  REM  *  LINCOLN, MA. 01773 *
  7. 70  REM  ***********************
  8. 80  DEF  FN M9(X) = X -( INT((X -1)/9) *9): REM  MOD 9
  9. 90 D$ =  CHR$(4)
  10. 100 DFALSE = (0 = 1):TRUE = (1 = 1)
  11. 110  DIM SUB$(51): REM  SUBDIRECTORY NAMES
  12. 120  DIM PGM$(51): REM  PROGRAM NAMES
  13. 130 BELL$ =  CHR$(7)
  14. 140  GOSUB 3540: REM  GET FIRST LEVEL PREFIX
  15. 150 L1$ = PREFIX$: REM  SAVE HIGH LEVEL PREFIX
  16. 160 BL$ = " ": FOR I = 2 TO 38:BL$ = BL$ +" ": NEXT I
  17. 170 S1$ = "*": FOR I = 2 TO 39:S1$ = S1$ +"*": NEXT I
  18. 180 S2$ = "*" + LEFT$(BL$,37) +"*"
  19. 190 MO$ = "???JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"
  20. 200  GOSUB 340: REM  GET CURRENT TIME AND DATE
  21. 210  GOTO 1920
  22. 220  REM 
  23. 230  REM  - DISPLAY HEADINGS -
  24. 240  REM 
  25. 250  TEXT : HOME : SPEED= 255
  26. 260  PRINT S1$: PRINT S2$
  27. 270  PRINT S2$
  28. 280  PRINT S2$: PRINT S1$
  29. 290  VTAB 2: HTAB 3: PRINT DT$;: HTAB 17: PRINT "PROMENU";
  30. 300  VTAB 2: HTAB 29: PRINT TIME$;
  31. 310  POKE 34,5
  32. 320  HOME 
  33. 330  RETURN 
  34. 340  REM 
  35. 350  REM  - READ SYSTEM DATE -
  36. 360  REM 
  37. 370 DD =  PEEK(49040) - INT( PEEK(49040)/32) *32
  38. 380 YY =  INT( PEEK(49041)/2)
  39. 390 MM = ( PEEK(49041) -YY *2) *8 + INT( PEEK(49040)/32)
  40. 400 MM$ =  MID$ (MO$,MM *3 +1,3)
  41. 410  REM 
  42. 420  REM  - READ SYSTEM TIME
  43. 430  REM 
  44. 440 MI =  PEEK(49042)
  45. 450 HH =  PEEK(49043)
  46. 460  REM 
  47. 470  REM  - CONVERT 24 HOURS TO 12
  48. 480  REM 
  49. 490  IF HH >11  THEN PM = 1
  50. 500  IF HH >12  THEN HH = HH -12
  51. 510  IF HH = 0  THEN HH = 12
  52. 520  IF DD = 0  THEN DT$ = "<NO DATE>":TIME$ = "<NO TIME>": RETURN 
  53. 530 DT$ =  RIGHT$("00" + STR$(DD),2) +"-" +MM$ +"-" + RIGHT$("00" + STR$(YY),2)
  54. 540 TIME$ =  RIGHT$("00" + STR$(HH),2) +":" + RIGHT$("00" + STR$(MI),2)
  55. 550  IF PM = 1  THEN TIME$ = TIME$ +"  PM"
  56. 560  IF PM = 0  THEN TIME$ = TIME$ +"  AM"
  57. 570  RETURN 
  58. 580  PRINT "       THE CURRENT SETTINGS ARE:"
  59. 590  PRINT : PRINT 
  60. 600  REM 
  61. 610  REM  - PRINT DATE AND TIME
  62. 620  REM 
  63. 630  PRINT "             DATE: ";
  64. 640  IF DD = 0  THEN  PRINT "<NO DATE>": GOTO 700
  65. 650  IF DD <10  THEN  PRINT "0";
  66. 660  PRINT DD;"-";
  67. 670  PRINT MM$;"-";
  68. 680  IF YY <10  THEN  PRINT "0";
  69. 690  PRINT YY
  70. 700  PRINT 
  71. 710  PRINT "             TIME: ";
  72. 720  IF HH = 12  AND MI = 0  AND DD = 0  THEN  PRINT "<NO TIME>": GOTO 790
  73. 730  IF HH <10  THEN  PRINT "0";
  74. 740  PRINT HH;":";
  75. 750  IF MI <10  THEN  PRINT "0";
  76. 760  PRINT MI;
  77. 770  IF PM = 1  THEN  PRINT "  PM"
  78. 780  IF PM = 0  THEN  PRINT "  AM"
  79. 790  VTAB 18
  80. 800  PRINT "    UPDATE SYSTEM DATE AND TIME? Y/N ";
  81. 810  GET A$
  82. 820  IF  ASC(A$) >90  THEN A$ =  CHR$( ASC(A$) -32)
  83. 830  IF (A$ < >"Y")  AND (A$ < >"N")  THEN  PRINT BELL$;: GOTO 810
  84. 840  VTAB 18: HTAB 2: PRINT BL$
  85. 850  IF A$ = "N"  OR A$ = "N"  THEN 1880
  86. 860  VTAB 12: PRINT 
  87. 870  PRINT "       ENTER DATE: DD-MMM-YY";
  88. 880  REM 
  89. 890  REM  -READ DAY INTO DD
  90. 900  REM 
  91. 910  HTAB 20: PRINT "DD";: HTAB 20
  92. 920  GET A$: IF (A$ <"0")  OR (A$ >"3") GOTO 910
  93. 930 DD =  VAL(A$): PRINT A$;
  94. 940  GET A$: IF (A$ <"0")  OR (A$ >"9") GOTO 910
  95. 950 DD = DD *10 + VAL(A$): PRINT A$;
  96. 960  IF DD >31  OR DD <1 GOTO 910
  97. 970  REM 
  98. 980  REM  GET MONTH INTO M1$
  99. 990  REM 
  100. 1000  IF  ASC(A$) = 27  THEN 860
  101. 1010  HTAB 23: PRINT "MMM";: HTAB 23:COUNT = 1:M1$ = ""
  102. 1020  GET A$: IF  ASC(A$) >96  THEN A$ =  CHR$( ASC(A$) -32)
  103. 1030 M1$ = M1$ +A$::MM = 4
  104. 1040  IF M1$ =  MID$ (MO$,MM,COUNT)  THEN  GOTO 1070
  105. 1050 MM = MM +3: IF MM <39  THEN  GOTO 1040
  106. 1060  GOTO 1000
  107. 1070  PRINT A$;:COUNT = COUNT +1: IF COUNT <4  THEN  GOTO 1020
  108. 1080 MM = (MM -1)/3
  109. 1090  REM 
  110. 1100  REM  -READ YEAR INTO YY
  111. 1110  REM 
  112. 1120  IF  ASC(A$) = 27  THEN 860
  113. 1130  HTAB 27: PRINT "YY";: HTAB 27
  114. 1140  GET A$: IF (A$ <"0")  OR (A$ >"9") GOTO 1120
  115. 1150 YY =  VAL(A$): PRINT A$;
  116. 1160  GET A$: IF (A$ <"0")  OR (A$ >"9") GOTO 1120
  117. 1170 YY = YY *10 + VAL(A$): PRINT A$
  118. 1180  VTAB 13: HTAB 8: PRINT "     "
  119. 1190  VTAB 15: HTAB 8: PRINT "ENTER TIME: HH:MM  AM";
  120. 1200  REM 
  121. 1210  REM  -READ HOUR INTO HH
  122. 1220  REM 
  123. 1230  HTAB 20: PRINT "HH";: HTAB 20
  124. 1240  GET A$: IF (A$ <"0")  OR (A$ >"1") GOTO 1230
  125. 1250 HH =  VAL(A$): PRINT A$;
  126. 1260  GET A$: IF (A$ <"0")  OR (A$ >"9") GOTO 1230
  127. 1270 HH = 10 *HH + VAL(A$): PRINT A$;
  128. 1280  IF HH >12  OR HH <1 GOTO 1230
  129. 1290  REM 
  130. 1300  REM  -READ MINUTE INTO MI
  131. 1310  REM 
  132. 1320  IF  ASC(A$) = 27  THEN 1190
  133. 1330  HTAB 23: PRINT "MM";: HTAB 23
  134. 1340  GET A$: IF (A$ <"0")  OR (A$ >"5") GOTO 1320
  135. 1350 MI =  VAL(A$): PRINT A$;
  136. 1360  GET A$: IF (A$ <"0")  OR (A$ >"9") GOTO 1320
  137. 1370 MI = 10 *MI + VAL(A$): PRINT A$;
  138. 1380  IF MI >59 GOTO 1320
  139. 1390  REM 
  140. 1400  REM  -GET AM OR PM
  141. 1410  REM 
  142. 1420  IF  ASC(A$) = 27  THEN 1190
  143. 1430  HTAB 27
  144. 1440  GET A$: IF (A$ < >"A")  AND (A$ < >"a")  AND (A$ < >"P")  AND (A$ < >"p")  AND (A$ < >" ")  AND (A$ < > CHR$(13)) GOTO 1420
  145. 1450  IF (A$ = "P")  OR (A$ = "p")  THEN  PRINT "P";
  146. 1460  REM 
  147. 1470  REM  -REPEAT UNTIL CORRECT
  148. 1480  REM 
  149. 1490  VTAB 18: HTAB 2: PRINT "             CORRECT? Y/N ";
  150. 1500  GET P$
  151. 1510  IF  ASC(P$) >90  THEN P$ =  CHR$( ASC(P$) -32)
  152. 1520  IF (P$ < >"Y")  AND (P$ < >"N")  THEN  PRINT BELL$;: GOTO 1500
  153. 1530  VTAB 18: HTAB 2: PRINT BL$
  154. 1540  IF P$ < >"Y"  THEN 860
  155. 1550  VTAB 15: HTAB 8: PRINT "     "
  156. 1560  REM 
  157. 1570  REM  -UPDATE SYSTEM DATE
  158. 1580  REM 
  159. 1590  POKE 49041,YY *2 +(MM >7)
  160. 1600  IF MM >7  THEN  POKE 49040,(MM -8) *32 +DD
  161. 1610  IF MM <8  THEN  POKE 49040,MM *32 +DD
  162. 1620  REM 
  163. 1630  REM  -UPDATE SYSTEM TIME (24 HOUR CLOCK)
  164. 1640  REM 
  165. 1650  IF HH = 12  THEN HH = 0
  166. 1660  IF A$ = "P"  OR A$ = "p"  THEN HH = HH +12
  167. 1670  POKE 49043,HH: POKE 49042,MI
  168. 1680  GOSUB 340: VTAB 2: HTAB 3: PRINT DT$;: HTAB 29: PRINT TIME$;
  169. 1690  VTAB 18: PRINT "      SYSTEM DATE AND TIME UPDATED": PRINT 
  170. 1700 FLAG =  PEEK(49048): REM  GET FLAG INDICATING IN THUNDERCLOCK PRESENT
  171. 1710  IF  INT(FLAG/2) = FLAG/2  THEN 1870: REM  IF BIT=OFF THEN NO CLOCK
  172. 1720  PRINT "UPDATE CLOCK/CALENDAR CARD? Y/N ";
  173. 1730  GET U$
  174. 1740  IF  ASC(U$) >90  THEN U$ =  CHR$( ASC(U$) -32)
  175. 1750  IF U$ < >"Y"  AND U$ < >"N"  THEN  PRINT BELL$;: GOTO 1730
  176. 1755  IF U$ = "N"  THEN 1940
  177. 1760  HOME : PRINT "SET THE PROTECT/ENABLE SWITCH ON THE    CLOCK CARD TO THE SET-ENABLE POSITION"
  178. 1770  PRINT : INPUT "WHAT SLOT IS YOUR CLOCK CARD IN? ";CS$: IF  LEN(CS$) >1  OR CS$ <"2"  OR CS$ >"7"  THEN  PRINT BELL$;:"INVALID SLOT": GOTO 1770
  179. 1780  PRINT : PRINT "ENTER DATE AND TIME AS MM W DD HH MI SS,WHERE MM=MONTH, W=DAY OF THE WEEK (0=SUN1=MON, 2=TUES, 3=WED, 4=THU, 5=FRI,     6=SAT), DD=DAY, HH=HOUR, MI=MIN, SS=SEC"
  180. 1790  PRINT : PRINT "  MM W DD HH MM SS": IF (A$ = "P")  AND HH <12)  THEN HH = HH +12
  181. 1800 S$ =  RIGHT$("0" + STR$(MM),2) +" W " + RIGHT$("0" + STR$(DD),2) +" " + RIGHT$("0" + STR$(HH),2) +" " + RIGHT$("0" + STR$(MI),2) +" 00"
  182. 1810  PRINT "TIME ?";S$;: HTAB 7: INPUT "";S$
  183. 1820  PRINT D$;"PR#";CS$: PRINT D$;"IN#";CS$: PRINT "!";S$: INPUT "%";T$: PRINT D$;"PR#0": PRINT D$;"IN#0"
  184. 1830  PRINT : PRINT "IS ";T$;" THE CORRECT DATE AND TIME? (Y/N) ";
  185. 1840  GET YN$: IF  ASC(YN$) >90  THEN YN$ =  CHR$( ASC(YN$) -32)
  186. 1850  IF YN$ < >"Y"  AND YN$ < >"N"  THEN  PRINT BELL$;: GOTO 1840
  187. 1860  IF YN$ = "N"  THEN  GOTO 1760
  188. 1870  HOME 
  189. 1880  RETURN 
  190. 1890  REM 
  191. 1900  REM  *** MAINLINE ROUTINE ***
  192. 1910  REM 
  193. 1920  GOSUB 250: REM  DISPLAY HEADINGS
  194. 1930  GOSUB 580: REM  DO DATE ROUTINE
  195. 1940  PRINT D$;"PREFIX ";PREFIX$
  196. 1950 DN = FALSE
  197. 1960  GOSUB 2090: IF   NOT DN  THEN 1960: REM  DO SUBDIRECTORY ROUTINE
  198. 1970  IF OP$ =  CHR$(27)  AND PREFIX$ = L1$  THEN  TEXT : HOME : END 
  199. 1980  IF OP$ =  CHR$(27)  THEN  HOME : GOSUB 3570: GOTO 1940
  200. 1990 DN = FALSE
  201. 2000  GOSUB 2840: IF   NOT DN  THEN 2000: REM  DO DIRECTORY ROUTINE
  202. 2010  IF OP$ =  CHR$(27)  THEN  HOME : GOSUB 3540: GOTO 1940
  203. 2020  IF PGM$ = "-EXIT TO BASIC-"  THEN  TEXT : HOME : END 
  204. 2030  TEXT : HOME : VTAB 12: HTAB 1: PRINT "RUNNING ";PGM$
  205. 2040  REM  MAKE THIS A STOP TO SAVE PROGRAM
  206. 2050  PRINT D$;"-";PGM$: REM  RUN THE PROGRAM SELECTED
  207. 2060  REM 
  208. 2070  REM  SUBDIRECTORY ROUTINE
  209. 2080  REM 
  210. 2090  GOSUB 2230: REM  READ DIRECTORY
  211. 2100  VTAB 4: HTAB 10: PRINT "PROGRAM SUBDIRECTORIES";: HOME 
  212. 2110  IF SUB = 0  THEN DN = TRUE: RETURN : REM  NO SUBDIRECTORIES EXIST
  213. 2120 INDEX = 1:PG = 1:NPG =  INT((SUB +9)/10)
  214. 2130  IF INDEX >SUB  THEN INDEX = 1
  215. 2140  GOSUB 2460: REM  DISPLAY SUBDIRECTORIES
  216. 2150  IF OP$ =  CHR$(21)  THEN INDEX = INDEX +10: GOTO 2130: REM  NEXT PAGE
  217. 2160  IF OP$ =  CHR$(13)  OR OP$ =  CHR$(27)  THEN DN = TRUE: RETURN : REM  WANTS CURRENT DIRECTORY OR ESC
  218. 2170 PREFIX$ = PREFIX$ +SUB$(WINDEX)
  219. 2180  PRINT D$;"PREFIX ";PREFIX$
  220. 2190  RETURN 
  221. 2200  REM 
  222. 2210  REM  READ A DIRECTORY & SAVE SUBDIRECTORIES IN SUB$
  223. 2220  REM 
  224. 2230  HOME : VTAB 12: HTAB 5: PRINT "...READING DIRECTORY FOR:...": PRINT : PRINT PREFIX$
  225. 2240  FOR I = 1 TO 50:SUB$(I) = "": NEXT I
  226. 2250 SUB$(0) = PREFIX$
  227. 2260 J2 = 1
  228. 2270  PRINT D$;"VERIFY ";PREFIX$
  229. 2280  PRINT D$;"OPEN ";PREFIX$;",TDIR"
  230. 2290  PRINT D$;"READ ";PREFIX$
  231. 2300  FOR REC = 1 TO 51
  232. 2310  INPUT REC$: REM  READ A DIRECTORY RECORD
  233. 2320  IF  LEN(REC$) <5  THEN 2390
  234. 2330  IF  LEFT$(REC$,12) = "BLOCKS FREE:"  THEN BF$ =  LEFT$(REC$,40):REC = 100: GOTO 2390
  235. 2340  IF  MID$ (REC$,18,3) < >"DIR"  THEN 2390
  236. 2350 SUB$(J2) =  MID$ (REC$,2,15)
  237. 2360  IF  RIGHT$(SUB$(J2),1) = " "  THEN SUB$(J2) =  LEFT$(SUB$(J2), LEN(SUB$(J2)) -1): GOTO 2360
  238. 2370 SUB$(J2) = SUB$(J2) +"/"
  239. 2380 J2 = J2 +1
  240. 2390  NEXT REC
  241. 2400  PRINT D$;"CLOSE ";PREFIX$
  242. 2410 SUB = J2 -1: REM  NUMBER OF SUBDIRECTORIES
  243. 2420  RETURN 
  244. 2430  REM 
  245. 2440  REM  DISPLAY SUBDIRECTORIES
  246. 2450  REM 
  247. 2460  HOME : PRINT "PREFIX: ";PREFIX$
  248. 2470  VTAB 8: HTAB 1: PRINT BF$;: REM  BLOCKS FREE
  249. 2480  FOR COL = 1 TO 40: PRINT "=";: NEXT COL
  250. 2490  PRINT " RETURN = DIRECTORY FOR CURRENT PREFIX"
  251. 2500  FOR J3 = INDEX TO INDEX +9
  252. 2510  IF J3 < = SUB  THEN  HTAB 7: PRINT  RIGHT$( STR$(J3),1);" = ";SUB$(J3)
  253. 2520  NEXT J3
  254. 2530  VTAB 21: HTAB 1: FOR COL = 1 TO 40: PRINT "-";: NEXT COL
  255. 2540  PRINT " PRESS A NUMBER TO SEE ANOTHER DIRECTORY";
  256. 2550  IF NPG = 1  THEN  PRINT : GOTO 2590
  257. 2560  HTAB 8: PRINT "OR --> TO SEE PAGE ";
  258. 2570 PG =  INT(INDEX/10) +2: IF PG >NPG  THEN PG = 1
  259. 2580  PRINT PG;" OF ";NPG
  260. 2590  HTAB 13: PRINT "OR ? FOR HELP";
  261. 2600  VTAB 24: HTAB 27: GET OP$
  262. 2610  IF OP$ =  CHR$(13)  OR OP$ =  CHR$(27)  THEN WINDEX = 0: RETURN 
  263. 2620  IF OP$ =  CHR$(21)  THEN  RETURN : REM  NEXT PAGE
  264. 2630  IF OP$ = "?"  OR OP$ = "/"  THEN  GOSUB 2700: GOTO 2430
  265. 2640  IF OP$ <"0"  OR OP$ >"9"  THEN  PRINT BELL$;: GOTO 2600
  266. 2650 WINDEX =  VAL(OP$): IF WINDEX = 0  THEN WINDEX = 10
  267. 2660 WINDEX = WINDEX +INDEX -1
  268. 2670  IF WINDEX >SUB  THEN  PRINT BELL$;: GOTO 2600
  269. 2680  RETURN 
  270. 2690  REM 
  271. 2700  REM  DISPLAY HELP
  272. 2710  REM 
  273. 2720  HOME : PRINT "THIS DISPLAY LISTS ALL SUBDIRECTORIES   FOR THE CURRENT PREFIX AND ALLOWS YOU TOSELECT THE CURRENT DIRECTORY OR A SUB-  DIRECTORY."
  274. 2730  PRINT : PRINT "TO SELECT THE DIRECTORY FOR THE CURRENT PREFIX (";PREFIX$;")": PRINT "PRESS THE ";: INVERSE : PRINT "RETURN";: NORMAL : PRINT " KEY."
  275. 2740  PRINT : PRINT "TO SELECT A SUBDIRECTORY PRESS THE      NUMBER ASSOCIATED WITH THE DESIRED SUB- DIRECTORY (";: INVERSE : PRINT "1-0";: NORMAL : PRINT ")"
  276. 2750  PRINT : PRINT "IF THERE ARE MORE THAN 9 SUBDIRECTORIES PRESS THE ";: INVERSE : PRINT "-->";: NORMAL : PRINT " KEY TO SEE THE NEXT PAGE."
  277. 2760  PRINT : PRINT "PRESS THE ";: INVERSE : PRINT "ESC";: NORMAL 
  278. 2770  IF PREFIX$ = L1$  THEN  PRINT " KEY TO EXIT TO BASIC": GOTO 2790
  279. 2780  PRINT " KEY TO RETURN TO THE      VOLUME DIRECTORY"
  280. 2790  VTAB 24: HTAB 10: INVERSE : PRINT "PRESS ANY KEY TO CONTINUE ";: NORMAL : GET GB$: PRINT 
  281. 2800  RETURN 
  282. 2810  REM 
  283. 2820  REM  DIRECTORY ROUTINE
  284. 2830  REM 
  285. 2840  GOSUB 2980: REM  READ DIRECTORY
  286. 2850  VTAB 4: HTAB 10: PRINT "  PROGRAM DIRECTORY   ";: HOME 
  287. 2860  IF MPGM = 0  THEN DN = TRUE:PGM$ = "": RETURN : REM  NO PROGRAMS IN DIRECTORY
  288. 2870 INDEX = 1:PG = 1:NPG =  INT((MPGM +8)/9)
  289. 2880  IF INDEX >MPGM  THEN INDEX = 1
  290. 2890  GOSUB 3200: REM  DISPLAY PROGRAM DIRECTORY
  291. 2900  IF OP$ =  CHR$(27)  THEN DN = TRUE: RETURN : REM  ESC
  292. 2910  IF OP$ =  CHR$(21)  THEN INDEX = INDEX +9: GOTO 2880: REM  NEXT PAGE
  293. 2920 PGM$ =  MID$ (PGM$(WINDEX),2,15)
  294. 2930 DN = TRUE
  295. 2940  RETURN 
  296. 2950  REM 
  297. 2960  REM  READ A DIRECTORY AND SAVE PROGRAMS IN PGM$
  298. 2970  REM 
  299. 2980  HOME : VTAB 12: HTAB 5: PRINT "...READING DIRECTORY FOR:...": PRINT : PRINT PREFIX$
  300. 2990  FOR I = 1 TO 50:PGM$(I) = "": NEXT I
  301. 3000 J2 = 1
  302. 3010  PRINT D$;"VERIFY ";PREFIX$
  303. 3020  PRINT D$;"OPEN ";PREFIX$;",TDIR"
  304. 3030  PRINT D$;"READ ";PREFIX$
  305. 3040  FOR REC = 1 TO 3: INPUT REC$: NEXT REC: REM  BYPASS DIRECTORY NAME
  306. 3050  FOR REC = 4 TO 51
  307. 3060  INPUT REC$: REM  GET DIRECTORY RECORD
  308. 3070  IF  LEN(REC$) <5  THEN 3120
  309. 3080  IF  LEFT$(REC$,12) = "BLOCKS FREE:"  THEN BF$ =  LEFT$(REC$,40):REC = 100: GOTO 3120
  310. 3090  IF  MID$ (REC$,18,3) = "DIR"  OR  MID$ (REC$,17,4) = "TYPE"  OR  LEFT$(REC$,1) = "/"  THEN 3120
  311. 3100 PGM$(J2) =  LEFT$(REC$,21) + MID$ (REC$,31,15)
  312. 3110 J2 = J2 +1
  313. 3120  NEXT REC
  314. 3130  PRINT D$;"CLOSE ";PREFIX$
  315. 3140 MPGM = J2: REM  NUMBER OF PROGRAMS
  316. 3150 PGM$(J2) = "--EXIT TO BASIC-"
  317. 3160  RETURN 
  318. 3170  REM 
  319. 3180  REM  DISPLAY PROGRAM NAMES & INFO
  320. 3190  REM 
  321. 3200  HOME : PRINT "PREFIX: ";PRFIX$
  322. 3210  VTAB 8: HTAB 1: PRINT BF$;: REM  FREE BLOCKS
  323. 3220  FOR COL = 1 TO 40: PRINT "=";: NEXT COL
  324. 3230  PRINT "NUM     PROGRAM     TYP    MODIFIED"
  325. 3240  PRINT " -  --------------- --- ---------------"
  326. 3250  FOR J3 = INDEX TO INDEX +8
  327. 3260  IF J3 < = MPGM  THEN  HTAB 2: PRINT  FN M9(J3);" ";PGM$(J3)
  328. 3270  NEXT J3
  329. 3280  VTAB 21: HTAB 1: FOR COL = 1 TO 40: PRINT "-";: NEXT COL
  330. 3290  PRINT "    PRESS A NUMBER TO RUN A PROGRAM"
  331. 3300  IF NPG = 1  THEN  PRINT : GOTO 3340
  332. 3310  HTAB 8: PRINT "OR --> TO SEE PAGE ";
  333. 3320 PG =  INT(INDEX/9) +2: IF PG >NPG  THEN PG = 1
  334. 3330  PRINT PG;" OF ";NPG
  335. 3340  HTAB 13: PRINT "OR ? FOR HELP";
  336. 3350  VTAB 24: HTAB 27: GET OP$
  337. 3360  IF OP$ =  CHR$(27)  THEN  RETURN 
  338. 3370  IF OP$ =  CHR$(21)  THEN  RETURN : REM  NEXT PAGE
  339. 3380  IF OP$ = "?"  OR OP$ = "/"  THEN  GOSUB 3470: GOTO 3170
  340. 3390  IF OP$ <"1"  OR OP$ >"9"  THEN  PRINT BELL$;: GOTO 3350
  341. 3400 WINDEX =  VAL(OP$)
  342. 3410 WINDEX = WINDEX +INDEX -1
  343. 3420  IF WINDEX >MPGM  THEN  PRINT BELL$;: GOTO 3350
  344. 3430  RETURN 
  345. 3440  REM 
  346. 3450  REM  DISPLAY HELP FOR PROGRAM DISPLAY
  347. 3460  REM 
  348. 3470  HOME : PRINT "THIS DISPLAY LISTS ALL PROGRAMS AND     FILES IN THE CURRENT DIRECTORY AND      ALLOWS YOU TO RUN A PROGRAM."
  349. 3480  PRINT : PRINT "TO RUN A PROGRAM PRESS THE NUMBER ASSOC-IATED WITH THE DESIRED PROGRAM (";: INVERSE : PRINT "1-9";: NORMAL : PRINT ")"
  350. 3490  PRINT : PRINT "IF THERE ARE MORE THAN 9 PROGRAMS/FILES PRESS THE ";: INVERSE : PRINT "-->";: NORMAL : PRINT " KEY TO SEE THE NEXT PAGE."
  351. 3500  PRINT : PRINT "PRESS THE ";: INVERSE : PRINT "ESC";: NORMAL 
  352. 3510  PRINT " KEY TO RETURN TO THE      VOLUME DIRECTORY"
  353. 3520  VTAB 24: HTAB 10: INVERSE : PRINT "PRESS ANY KEY TO CONTINUE ";: NORMAL : GET GB$: PRINT 
  354. 3530  RETURN 
  355. 3540  REM 
  356. 3550  REM  REDUCE PREFIX TO FIRST LEVEL
  357. 3560  REM 
  358. 3570  PRINT  CHR$(4);"PREFIX": INPUT PR$
  359. 3580 LP =  LEN(PREFIX$)
  360. 3590  FOR COL = 2 TO LP: REM  CHOP PREFIX OFF AT FIRST LEVEL
  361. 3600  IF  MID$ (PREFIX$,COL,1) = "/"  THEN PREFIX$ =  LEFT$(PREFIX$,COL):COL = LP
  362. 3610  NEXT COL
  363. 3620  RETURN