home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / CATLOG / CATLA10.LBR / CATLA.BZS / CATLA.BAS
BASIC Source File  |  2000-06-30  |  17KB  |  597 lines

  1. 00010 TRONB : REM ALLOW USER TO STOP PROGRAM
  2. 00020 REM PROGRAM CATLA.BAS, CREATES LBR/ARK/ARC CATALOG
  3. 00030 REM
  4. 00040 REM WRITTEN BY SAUL G. LEVY, TUCSON, ARIZONA, 12/20/87
  5. 00050 REM LAST CHANGED 5/5/88
  6. 00060 REM COPYRIGHT (C) SAUL G. LEVY 1988
  7. 00070 REM
  8. 00080 REM SEE CATLA.DOC AND THE MENU INFORMATION BELOW.
  9. 00090 REM LBR MEMBERS WERE 1ST GIVEN BY SD114 (OR SO) AND ARK/ARC BY SD125
  10. 00100 REM
  11. 00110 REM
  12. 00120 REM FOR ADD ENTRIES (SORTED) PLUS SECTION OF MASTLA.CAT,
  13. 00130 REM OR ONE LIST PAGE (37+1 BYTES EACH)
  14. 00140 CLEAR 4560 : REM 4560 MINIMUM, 24K (24576) IN .COM
  15. 00150 NumIndex=MEM/38 : REM # OF ENTRIES
  16. 00160 REM
  17. 00170 REM DIMENSIONS
  18. 00180 DIM TEXT$, 40 DUM$, 10 FDIR$, 13 FPT$
  19. 00190 DIM 12 FCAT$, FTMP$, FBAK$, MemberNAME$, DISKNAME$, LBRARKNAME$
  20. 00200 DIM 11 DISKNAME2$, 3 DISKNAME3$, Point(57)
  21. 00210 REM
  22. 00220 REM FILES
  23. 00230 FDIR$="B:DISK.DIR" : FCAT$="A:MASTLA.CAT" : FTMP$="A:MASTLA.TMP"
  24. 00240 FBAK$="A:MASTLA.BAK" : FPT$="A:POINTER.FIL"
  25. 00250 REM
  26. 00260 REM TURN OFF ERROR HANDLING SINCE WE DON'T KNOW THE NUMBER OF RECORDS
  27. 00270 ON ERROR GOSUB 65535
  28. 00280 REM
  29. 00290 SIZE=12 : REM TEXT$ POINTER
  30. 00300 PtOffset=33 : REM ASCII POINTER OFFSET (!=0, Z=57)
  31. 00310 REM
  32. 00320 REM MAIN MENU
  33. 00330 CLS
  34. 00340 PRINT "Program CATLA, creates MASTLA.CAT from DISK.DIR files"
  35. 00350 PRINT
  36. 00360 PRINT
  37. 00370 PRINT "Only LBR/ARK/ARC and the member files will be cataloged!  Super"
  38. 00380 PRINT "Directory's DISK.DIR files are the input.  Run SD on each logged-"
  39. 00390 PRINT "in, default drive disk (SD $AFL).  SD ? for help"
  40. 00400 PRINT
  41. 00410 PRINT "The -DISKNAM.nnn must also exist and be in DISK.DIR!  It will"
  42. 00420 PRINT "have an entry too"
  43. 00430 PRINT
  44. 00440 PRINT "MASTLA.CAT must be on drive A:, DISK.DIRs on B:"
  45. 00450 PRINT
  46. 00460 PRINT
  47. 00470 PRINT "[A]dd/Update               [D]elete"
  48. 00480 PRINT "[L]ist Options Submenu     [P]ointer Create"
  49. 00490 PRINT
  50. 00500 INPUT "Choose one (CR=Quit): ";DUM$
  51. 00510 IF LEN(DUM$)=0 THEN END
  52. 00520 DUM$=UCASE$(DUM$)
  53. 00530 IF DUM$="A" THEN "ADD"
  54. 00540 IF DUM$="D" THEN "DELETE"
  55. 00550 IF DUM$="P" THEN "POINTER"
  56. 00560 IF DUM$<>"L" THEN RUN : REM RESTART PROGRAM
  57. 00570 PRINT
  58. 00580 PRINT
  59. 00590 PRINT
  60. 00600 PRINT "List Options Submenu:"
  61. 00610 PRINT
  62. 00620 PRINT "[D]isk Names     [L]BR/ARK/ARC Names     [S]elected"
  63. 00630 PRINT
  64. 00640 INPUT "Choose one (CR=Entire File): ";DUM$
  65. 00650 DUM$=UCASE$(DUM$)
  66. 00660 DISKNAME$="" : DISKNAME2$="" : DISKNAME3$="" : DUM=0 : DUM1=0 : START=-1
  67. 00670 IF DUM$="D" THEN DISKNAME$="DISKNAME" : START=26 : GOTO "PRINTER"
  68. 00680 LONG IF DUM$="L"
  69. 00690 DISKNAME$="LBR" : DISKNAME2$="ARK" : DISKNAME3$="ARC" : START=10
  70. 00700 ENDIF
  71. 00710 LONG IF DUM$="S"
  72. 00720 START=0
  73. 00730 INPUT "Enter ONE character for START (!-Z): ";DISKNAME$
  74. 00740 IF LEN(DISKNAME$)<>1 THEN 730
  75. 00750 DISKNAME$=UCASE$(DISKNAME$)
  76. 00760 PRINT "Enter ONE character for  STOP (";DISKNAME$;
  77. 00770 INPUT "-Z): ";DISKNAME2$
  78. 00780 IF LEN(DISKNAME2$)<>1 THEN 760
  79. 00790 DISKNAME2$=UCASE$(DISKNAME2$)
  80. 00800 DUM=ASC(DISKNAME$) : DUM1=ASC(DISKNAME2$)
  81. 00810 IF DUM>DUM1 THEN PRINT "EQUAL or GREATER!" : GOTO 760
  82. 00820 ENDIF
  83. 00830 IF LEN(DUM$)>0 AND START<0 THEN 640
  84. 00840 REM
  85. 00850 "PRINTER"
  86. 00860 REM
  87. 00870 PRINT
  88. 00880 INPUT "Printer output (Y, CR=N): ";DUM$
  89. 00890 DUM$=UCASE$(DUM$)
  90. 00900 Device=0 : Page=46 : REM TO TERMINAL, ENTRIES/PAGE
  91. 00910 IF DUM$="Y" THEN Device=128 : REM TO PRINTER?
  92. 00920 PRINT
  93. 00930 ROUTE Device : REM SET OUTPUT
  94. 00940 LONG IF START<=0 : REM 2 COLUMNS
  95. 00950 IF Device THEN Page=120
  96. 00960 GOTO "LIST"
  97. 00970 XELSE
  98. 00980 Page=69 : REM TO TERMINAL, 3 COLUMNS
  99. 00990 IF Device THEN Page=180
  100. 01000 GOTO "SPECIAL LIST"
  101. 01010 ENDIF
  102. 01020 REM
  103. 01030 REM
  104. 01040 "ADD" : REM ADD/UPDATE ROUTINE
  105. 01050 REM
  106. 01060 REM
  107. 01070 REM OPEN DISK.DIR
  108. 01080 OPEN "I",1,FDIR$
  109. 01090 IF ERROR=259 THEN ERROR=0 : GOTO "FILE ERROR"
  110. 01100 REM
  111. 01110 N=0 : REM # OF INDEX$ RECORDS FROM DISK.DIR
  112. 01120 Done=0 : REM EOF FLAG
  113. 01130 DISKNAME$="" : DISKNAME2$=""
  114. 01140 REM
  115. 01150 "READ DISK.DIR"
  116. 01160 REM
  117. 01170 REM READ HEADER RECORDS (HEADER AT END IF - 1ST CHARACTER)
  118. 01180 LINEINPUT#1,TEXT$
  119. 01190 LONG IF ERROR=257
  120. 01200 ERROR=0
  121. 01210 DUM=INSTR(1,TEXT$,CHR$(26)) : REM REMOVE EOF AT END OF DISK.DIR
  122. 01220 IF DUM>0 THEN TEXT$=LEFT$(TEXT$,DUM-1)
  123. 01230 CLOSE
  124. 01240 Done=1
  125. 01250 ENDIF
  126. 01260 PRINT TEXT$
  127. 01270 IF Done THEN "MASTLA CREATE"
  128. 01280 REM
  129. 01290 REM IF -DISKNAM, SAVE IT
  130. 01300 IF INSTR(1,TEXT$,"-") THEN DISKNAME$=LEFT$(TEXT$,SIZE) : GOSUB 
  131. "DISK NAME"
  132. 01310 REM
  133. 01320 REM FIND 1ST LBR/ARK/ARC FILE
  134. 01330 IF INSTR(1,TEXT$,"Library directory") THEN "SAVE FILENAME"
  135. 01340 IF INSTR(1,TEXT$,"Archive directory") THEN "SAVE FILENAME"
  136. 01350 GOTO "READ DISK.DIR"
  137. 01360 REM
  138. 01370 "SAVE FILENAME"
  139. 01380 REM
  140. 01390 REM -DISKNAME EXISTS?
  141. 01400 IF DISKNAME$="" THEN "FILE ERROR"
  142. 01410 REM
  143. 01420 REM PUT LBR/ARK/ARC FILE NAME IN INDEX$
  144. 01430 START=INSTR(1,TEXT$,".")
  145. 01440 LBRARKNAME$=MID$(TEXT$,START-8,SIZE)
  146. 01450 DUM$=LBRARKNAME$+","+DISKNAME2$+","+LBRARKNAME$
  147. 01460 GOSUB "INDEX$ INSERT"
  148. 01470 REM
  149. 01480 "READ ENTRIES"
  150. 01490 REM
  151. 01500 START=1 : REM TEXT$ POINTER
  152. 01510 LINEINPUT#1,TEXT$
  153. 01520 IF ERROR=257 THEN ERROR=0 : CLOSE : GOTO "MASTLA CREATE"
  154. 01530 PRINT TEXT$
  155. 01540 IF TEXT$="" THEN "READ DISK.DIR"
  156. 01550 DUM=INSTR(1,TEXT$,"++ Not a lib") : DUM1=INSTR(1,TEXT$,"++ Not an ar")
  157. 01560 IF DUM OR DUM1 THEN "READ DISK.DIR"
  158. 01570 REM
  159. 01580 "SAVE ENTRIES"
  160. 01590 REM
  161. 01600 MemberNAME$=MID$(TEXT$,START,SIZE)
  162. 01610 DUM$=MemberNAME$+","+DISKNAME2$+","+LBRARKNAME$
  163. 01620 GOSUB "INDEX$ INSERT"
  164. 01630 REM
  165. 01640 REM ANOTHER MEMBER?
  166. 01650 START=INSTR(START,TEXT$,":")
  167. 01660 IF START=0 THEN "READ ENTRIES"
  168. 01670 START=START+2
  169. 01680 GOTO "SAVE ENTRIES"
  170. 01690 REM
  171. 01700 "MASTLA CREATE"
  172. 01710 REM
  173. 01720 REM
  174. 01730 REM -DISKNAME EXISTS?
  175. 01740 IF DISKNAME$="" THEN "FILE ERROR"
  176. 01750 REM
  177. 01760 REM ON DRIVE A:?
  178. 01770 CLOSE : REM DISK.DIR/CREATION DONE
  179. 01780 PRINT
  180. 01790 PRINT "Reading MASTLA.CAT"
  181. 01800 OPEN "I",1,FCAT$
  182. 01810 IF ERROR=0 THEN "OPEN OUTPUT" : REM EXISTS
  183. 01820 ERROR=0
  184. 01830 REM
  185. 01840 REM NOT FOUND, CREATE IT
  186. 01850 OPEN "O",1,FCAT$
  187. 01860 PRINT#1,"()"+SPACE$(35) : REM FIXED LENGTH
  188. 01870 GOTO "MASTLA CREATE"
  189. 01880 REM
  190. 01890 "OPEN OUTPUT"
  191. 01900 REM
  192. 01910 REM OPEN OUTPUT FILE
  193. 01920 OPEN "O",2,FTMP$
  194. 01930 REM
  195. 01940 REM KEEP () 1ST RECORD 1ST
  196. 01950 LINEINPUT#1,TEXT$ : PRINT#2,TEXT$
  197. 01960 N1=1 : REM INDEX$ POINTER
  198. 01970 Done=0 : REM EOF FLAG
  199. 01980 REM
  200. 01990 "READ LOOP"
  201. 02000 REM
  202. 02010 J=0 : REM # OF MASTLA.CAT ENTRIES IN INDEX$ (AFTER N DISK.DIR ONES)
  203. 02020 PRINT "Reading..."
  204. 02030 REM
  205. 02040 "READ MASTLA"
  206. 02050 REM
  207. 02060 REM READ RECORD
  208. 02070 LINEINPUT#1,TEXT$
  209. 02080 IF ERROR=257 THEN ERROR=0 : Done=1 : GOTO "WRITE LOOP"
  210. 02090 REM
  211. 02100 REM PUT IN INDEX$ IF NOT OLD ENTRY WITH SAME DISKNAM.NNN
  212. 02110 DUM$=MID$(TEXT$,14,SIZE-1)
  213. 02120 IF DUM$<>DISKNAME2$ THEN J=J+1 : INDEX$(J+N)=TEXT$ : GOTO 2140
  214. 02130 PRINT "Del: ";TEXT$
  215. 02140 IF J+N<NumIndex THEN "READ MASTLA"
  216. 02150 REM
  217. 02160 "WRITE LOOP"
  218. 02170 REM
  219. 02180 PRINT "Writing..."
  220. 02190 REM
  221. 02200 REM ADD NEW ENTRIES
  222. 02210 LONG IF J : REM ANY OLD ENTRIES?
  223. 02220 FOR I= 1 TO J
  224. 02230 TEXT$=INDEX$(I+N) : REM RETRIEVE OLD ENTRY
  225. 02240 LONG IF N1>N : REM NO NEW ENTRIES LEFT
  226. 02250 PRINT#2,TEXT$
  227. 02260 IF ERROR=514 THEN ERROR=0 : GOTO "FILE ERROR2"
  228. 02270 GOTO 2420
  229. 02280 ENDIF
  230. 02290 LONG IF TEXT$<INDEX$(N1)
  231. 02300 PRINT#2,TEXT$ : REM SAVE OLD ENTRY
  232. 02310 IF ERROR=514 THEN ERROR=0 : GOTO "FILE ERROR2"
  233. 02320 XELSE
  234. 02330 WHILE N1<=N AND TEXT$>=INDEX$(N1) : REM ADD NEW ENTRIES (IF = TOO)
  235. 02340 PRINT#2,INDEX$(N1)
  236. 02350 IF ERROR=514 THEN ERROR=0 : GOTO "FILE ERROR2"
  237. 02360 PRINT "Add: ";INDEX$(N1)
  238. 02370 N1=N1+1
  239. 02380 WEND
  240. 02390 IF TEXT$>INDEX$(N1-1) THEN PRINT#2,TEXT$ : REM SAVE OLD ENTRY
  241. 02400 IF ERROR=514 THEN ERROR=0 : GOTO "FILE ERROR2"
  242. 02410 ENDIF
  243. 02420 NEXT I
  244. 02430 IF Done=0 THEN "READ LOOP"
  245. 02440 ENDIF
  246. 02450 REM
  247. 02460 REM ANY NEW ENTRIES TO ADD?
  248. 02470 WHILE N1<=N
  249. 02480 PRINT#2,INDEX$(N1)
  250. 02490 IF ERROR=514 THEN ERROR=0 : GOTO "FILE ERROR2"
  251. 02500 PRINT "Add: ";INDEX$(N1)
  252. 02510 N1=N1+1
  253. 02520 WEND
  254. 02530 REM
  255. 02540 "RENAMING FILES"
  256. 02550 REM
  257. 02560 PRINT
  258. 02570 PRINT "Renaming files"
  259. 02580 CLOSE
  260. 02590 REM
  261. 02600 REM RENAME FILES, KILL OLD POINTER.FIL IF ANY ADD/DELETE
  262. 02610 KILL FBAK$ : ERROR=0
  263. 02620 RENAME FCAT$,FBAK$
  264. 02630 RENAME FTMP$,FCAT$
  265. 02640 IF N THEN KILL FPT$ : ERROR=0
  266. 02650 REM
  267. 02660 RUN : REM RESTART PROGRAM
  268. 02670 REM
  269. 02680 REM
  270. 02690 "DELETE" : REM DELETE ROUTINE
  271. 02700 REM
  272. 02710 REM
  273. 02720 CLS
  274. 02730 PRINT "You can DELETE anything within the MASTLA.CAT file (in the FILE"
  275. 02740 PRINT "NAME, DISK NAME, or LBR/ARK/ARC NAME fields)!"
  276. 02750 PRINT
  277. 02760 PRINT "To delete a DISK NAME, enter .nnn rather than just the nnn"
  278. 02770 PRINT "number.  If you enter just a PERIOD or COMMA, EVERYTHING WILL BE"
  279. 02780 PRINT "DELETED!  Entering only blanks won't be accepted!"
  280. 02790 PRINT
  281. 02800 PRINT "Manual deletions are only needed if you change a DISK NAME, or"
  282. 02810 PRINT "totally erase a disk and don't reuse the DISK NAME (including the"
  283. 02820 PRINT ".nnn number!).  Updates TOTALLY REMOVE any OLD DATA with the same"
  284. 02830 PRINT "-DISKNAM.nnn.  Other things must match EXACTLY what is in the"
  285. 02840 PRINT "MASTLA.CAT file!"
  286. 02850 PRINT
  287. 02860 LINEINPUT "What do you wish to DELETE (CR=Quit): ";DUM$
  288. 02870 IF LEN(DUM$)=0 THEN RUN : REM RESTART PROGRAM
  289. 02880 DUM=LEN(DUM$)
  290. 02890 TEXT$=SPACE$(DUM)
  291. 02900 IF DUM$=TEXT$ THEN 2860
  292. 02910 PRINT
  293. 02920 REM
  294. 02930 REM OPEN FILES
  295. 02940 OPEN "I",1,FCAT$ : OPEN "O",2,FTMP$
  296. 02950 REM
  297. 02960 REM KEEP 1ST () RECORD 1ST
  298. 02970 LINEINPUT#1,TEXT$ : PRINT#2,TEXT$
  299. 02980 REM
  300. 02990 Done=0 : REM EOF FLAG
  301. 03000 N=0 : REM # OF DELETIONS
  302. 03010 REM
  303. 03020 "READ LOOP2"
  304. 03030 REM
  305. 03040 I=0 : REM # OF ENTRIES IN INDEX$
  306. 03050 PRINT "Reading..."
  307. 03060 REM
  308. 03070 "READ MASTLA2"
  309. 03080 REM
  310. 03090 REM READ RECORD
  311. 03100 LINEINPUT#1,TEXT$
  312. 03110 IF ERROR=257 THEN ERROR=0 : Done=1 : GOTO "WRITE LOOP2"
  313. 03120 REM
  314. 03130 REM INSERT INTO INDEX$
  315. 03140 I=I+1
  316. 03150 INDEX$(I)=TEXT$
  317. 03160 IF I<NumIndex THEN "READ MASTLA2"
  318. 03170 REM
  319. 03180 "WRITE LOOP2"
  320. 03190 REM
  321. 03200 PRINT "Writing..."
  322. 03210 FOR J= 1 TO I
  323. 03220 REM
  324. 03230 REM DELETE THIS RECORD?
  325. 03240 TEXT$=INDEX$(J)
  326. 03250 LONG IF INSTR(1,TEXT$,DUM$)=0
  327. 03260 PRINT#2,TEXT$ : REM NO
  328. 03270 IF ERROR=514 THEN ERROR=0 : GOTO "FILE ERROR2"
  329. 03280 XELSE
  330. 03290 PRINT "Del: ";TEXT$ : REM YES
  331. 03300 N=N+1
  332. 03310 ENDIF
  333. 03320 NEXT J
  334. 03330 IF Done=0 THEN "READ LOOP2"
  335. 03340 PRINT
  336. 03350 PRINT "There were";N;"deletions"
  337. 03360 GOTO "RENAMING FILES"
  338. 03370 REM
  339. 03380 REM
  340. 03390 "POINTER" : REM POINTER CREATE ROUTINE
  341. 03400 REM
  342. 03410 REM
  343. 03420 REM OPEN FILES
  344. 03430 DUM=-1 : REM PREVIOUS ASCII NUMBER
  345. 03440 PRINT "   Working...";
  346. 03450 OPEN "I",1,FCAT$,39 : REM FIXED LENGTH
  347. 03460 OPEN "O",2,FPT$
  348. 03470 REM
  349. 03480 "READ MASTLA3"
  350. 03490 REM
  351. 03500 REM READ RECORD
  352. 03510 RecNUM=REC(1) : REM RECORD POINTER
  353. 03520 LINEINPUT#1,TEXT$
  354. 03530 IF ERROR=257 THEN ERROR=0 : GOTO "SAVE POINTER"
  355. 03540 REM
  356. 03550 REM PUT POINTERS IN Point ARRAY
  357. 03560 DUM1=ASC(TEXT$)
  358. 03570 IF DUM1<>DUM THEN Point(DUM1-PtOffset)=RecNUM+1 : DUM=DUM1
  359. 03580 GOTO "READ MASTLA3"
  360. 03590 REM
  361. 03600 "SAVE POINTER"
  362. 03610 REM
  363. 03620 FOR I= 0 TO 57
  364. 03630 WRITE#2,Point(I)
  365. 03640 IF ERROR=514 THEN ERROR=0 : GOTO "FILE ERROR2"
  366. 03650 NEXT I
  367. 03660 CLOSE
  368. 03670 RUN : REM RESTART PROGRAM
  369. 03680 REM
  370. 03690 REM
  371. 03700 "SPECIAL LIST" : REM -DISKNAMES OR LBR/ARK/ARC NAMES
  372. 03710 REM
  373. 03720 REM
  374. 03730 REM OPEN INPUT FILE
  375. 03740 Done=0 : REM EOF FLAG
  376. 03750 N=0 : N1=0 : N2=0 : N3=0 : REM COUNTERS
  377. 03760 OPEN "I",1,FCAT$
  378. 03770 REM
  379. 03780 IF Page<100 THEN CLS : PRINT "   Working...";CHR$(13);
  380. 03790 I=0 : REM # OF INDEX$ RECORDS
  381. 03800 REM
  382. 03810 "READ MASTLA4"
  383. 03820 REM
  384. 03830 REM FINISHED WITH PAGE?
  385. 03840 IF I=Page THEN "SPECIAL LIST PAGE"
  386. 03850 REM
  387. 03860 REM READ RECORD
  388. 03870 LINEINPUT#1,TEXT$
  389. 03880 IF ERROR=257 THEN ERROR=0 : Done=1 : GOTO "SPECIAL LIST PAGE"
  390. 03890 N=N+1
  391. 03900 REM
  392. 03910 REM STORE OUTPUT IN INDEX$, FOR DISKNAME OR LBR
  393. 03920 DUM=INSTR(START,TEXT$,DISKNAME$)
  394. 03930 IF START=10 AND DUM>10 THEN "CHECK ARK" : REM NOT LBR
  395. 03940 LONG IF DUM>0
  396. 03950 N1=N1+1
  397. 03960 I=I+1
  398. 03970 INDEX$(I)=LEFT$(TEXT$,2*SIZE)
  399. 03980 GOTO "READ MASTLA4"
  400. 03990 ENDIF
  401. 04000 IF START=10 THEN "CHECK ARK"
  402. 04010 REM
  403. 04020 REM NO DISKNAMES AFTER MINUS FILES
  404. 04030 IF START=26 AND (INSTR(1,TEXT$,"-")=1 OR N1=0) THEN "READ MASTLA4" ELSE 
  405. Done=1 : GOTO "SPECIAL LIST PAGE"
  406. 04040 REM
  407. 04050 "CHECK ARK"
  408. 04060 REM
  409. 04070 DUM=INSTR(START,TEXT$,DISKNAME2$)
  410. 04080 IF DUM>10 THEN "CHECK ARC"
  411. 04090 LONG IF DUM>0
  412. 04100 N2=N2+1
  413. 04110 I=I+1
  414. 04120 INDEX$(I)=LEFT$(TEXT$,2*SIZE)
  415. 04130 GOTO "READ MASTLA4"
  416. 04140 ENDIF
  417. 04150 REM
  418. 04160 "CHECK ARC"
  419. 04170 REM
  420. 04180 DUM=INSTR(START,TEXT$,DISKNAME3$)
  421. 04190 IF DUM>10 THEN "READ MASTLA4"
  422. 04200 LONG IF DUM>0
  423. 04210 N3=N3+1
  424. 04220 I=I+1
  425. 04230 INDEX$(I)=LEFT$(TEXT$,2*SIZE)
  426. 04240 ENDIF
  427. 04250 GOTO "READ MASTLA4"
  428. 04260 REM
  429. 04270 "SPECIAL LIST PAGE"
  430. 04280 REM
  431. 04290 WHILE I
  432. 04300 INDEX$(I+1)=" " : INDEX$(I+2)=" " : REM BLANK RECORDS FOR LAST PAGE
  433. 04310 IF FRAC(I/3.)>0 THEN I=I+1 : REM LAST PAGE FIX IF REMAINDER IS 1/3
  434. 04320 FOR J= 1 TO INT(I/3.+.7)
  435. 04330 PRINT INDEX$(J);" | ";INDEX$(J+INT(I/3.+.7));" | ";
  436. INDEX$(J+INT(2.*I/3.+.7))
  437. 04340 NEXT J
  438. 04350 I=0
  439. 04360 WEND
  440. 04370 LONG IF Page<100 AND Done=0
  441. 04380 INPUT "Hit RETURN to continue ";DUM$
  442. 04390 CLS : PRINT "   Working...";CHR$(13);
  443. 04400 XELSE
  444. 04410 IF Done=0 THEN PRINT CHR$(12);
  445. 04420 ENDIF
  446. 04430 IF Done=0 THEN "READ MASTLA4"
  447. 04440 PRINT
  448. 04450 LONG IF START=26
  449. 04460 PRINT "DISK NAMES on file:";N1
  450. 04470 XELSE
  451. 04480 PRINT "Total FILES in catalog:";N-1
  452. 04490 PRINT "Total .LBR/.ARK/.ARCs:";N1+N2+N3
  453. 04500 PRINT "On file:";N1;".LBRs,  ";N2;".ARKs,  ";N3;".ARCs"
  454. 04510 ENDIF
  455. 04520 IF Page>100 THEN PRINT CHR$(12);
  456. 04530 ROUTE 0
  457. 04540 INPUT "Hit RETURN to continue ";DUM$
  458. 04550 RUN : REM RESTART PROGRAM
  459. 04560 REM
  460. 04570 REM
  461. 04580 "LIST" : REM SELECTED LIST OR ENTIRE FILE
  462. 04590 REM
  463. 04600 REM
  464. 04610 IF Page<100 THEN CLS : PRINT "   Working...";CHR$(13);
  465. 04620 REM
  466. 04630 REM READ POINTER FILE (SELECTED LIST)
  467. 04640 LONG IF DUM
  468. 04650 OPEN "I",1,FPT$
  469. 04660 LONG IF ERROR=259
  470. 04670 ERROR=0
  471. 04680 PRINT "No POINTER.FIL file available!"
  472. 04690 INPUT "Hit RETURN to continue ";DUM$
  473. 04700 RUN : REM RESTART PROGRAM
  474. 04710 ENDIF
  475. 04720 FOR I= 0 TO 57
  476. 04730 READ#1,Point(I)
  477. 04740 NEXT I
  478. 04750 CLOSE
  479. 04760 ENDIF
  480. 04770 REM
  481. 04780 REM OPEN INPUT FILE, SKIP 1ST RECORD ()
  482. 04790 Done=0 : REM EOF FLAG
  483. 04800 OPEN "I",1,FCAT$,39 : REM FIXED LENGTH
  484. 04810 LINEINPUT#1,TEXT$
  485. 04820 REM
  486. 04830 REM IF SELECTED LIST, SET 1ST RECORD POINTER (NEVER 0)
  487. 04840 LONG IF DUM
  488. 04850 LONG IF Point(DUM-PtOffset)>0
  489. 04860 RECORD #1,Point(DUM-PtOffset)
  490. 04870 XELSE
  491. 04880 Done=1
  492. 04890 GOTO "LIST PAGE"
  493. 04900 ENDIF
  494. 04910 ENDIF
  495. 04920 REM
  496. 04930 N=0 : REM # OF INDEX$ RECORDS
  497. 04940 REM
  498. 04950 "READ MASTLA5"
  499. 04960 REM
  500. 04970 REM READ RECORD
  501. 04980 LINEINPUT#1,TEXT$
  502. 04990 IF ERROR=257 THEN ERROR=0 : Done=1 : GOTO "LIST PAGE"
  503. 05000 REM
  504. 05010 REM IF SELECTED LIST, IS RECORD PAST OUR RANGE?
  505. 05020 LONG IF DUM
  506. 05030 DUM2=ASC(TEXT$)
  507. 05040 IF DUM2>DUM1 THEN Done=1 : GOTO "LIST PAGE"
  508. 05050 ENDIF
  509. 05060 REM
  510. 05070 REM STORE IN INDEX$
  511. 05080 N=N+1
  512. 05090 INDEX$(N)=TEXT$
  513. 05100 REM
  514. 05110 REM FINISHED WITH PAGE?
  515. 05120 IF N<Page THEN "READ MASTLA5"
  516. 05130 REM
  517. 05140 "LIST PAGE"
  518. 05150 REM
  519. 05160 WHILE N
  520. 05170 INDEX$(N+1)=" " : REM BLANK RECORD FOR LAST PAGE
  521. 05180 FOR I= 1 TO INT(N/2.+.5001)
  522. 05190 PRINT INDEX$(I);" | ";INDEX$(I+INT(N/2.+.5001))
  523. 05200 NEXT I
  524. 05210 N=0
  525. 05220 WEND
  526. 05230 LONG IF Page<100
  527. 05240 INPUT "Hit RETURN to continue ";DUM$
  528. 05250 CLS : PRINT "   Working...";CHR$(13);
  529. 05260 XELSE
  530. 05270 PRINT CHR$(12);
  531. 05280 ENDIF
  532. 05290 IF Done THEN ROUTE 0 : RUN : REM RESTART PROGRAM
  533. 05300 GOTO "READ MASTLA5"
  534. 05310 REM
  535. 05320 REM
  536. 05330 REM SUBROUTINES
  537. 05340 REM
  538. 05350 REM
  539. 05360 "FILE ERROR"
  540. 05370 REM
  541. 05380 REM
  542. 05390 PRINT
  543. 05400 LONG IF DISKNAME$=""
  544. 05410 PRINT "-DISKNAM.nnn missing in DISK.DIR!"
  545. 05420 GOTO "ABORT"
  546. 05430 ENDIF
  547. 05440 PRINT "File error in DISK.DIR:  Missing file or wrong format!"
  548. 05450 REM
  549. 05460 "ABORT"
  550. 05470 REM
  551. 05480 PRINT "Program aborted"
  552. 05490 END
  553. 05500 REM
  554. 05510 REM
  555. 05520 "FILE ERROR2"
  556. 05530 REM
  557. 05540 REM
  558. 05550 PRINT
  559. 05560 PRINT "Disk full error!"
  560. 05570 GOTO "ABORT"
  561. 05580 REM
  562. 05590 REM
  563. 05600 "DISK NAME"
  564. 05610 REM
  565. 05620 REM
  566. 05630 REM INSERT DISK NAME ONCE
  567. 05640 LONG IF LEN(DISKNAME2$)=0
  568. 05650 DISKNAME2$=RIGHT$(DISKNAME$,SIZE-1) : REM REMOVE -
  569. 05660 DUM$=DISKNAME$+","+DISKNAME2$+",DISKNAME.   "
  570. 05670 GOSUB "INDEX$ INSERT"
  571. 05680 ENDIF
  572. 05690 RETURN
  573. 05700 REM
  574. 05710 REM
  575. 05720 "INDEX$ INSERT"
  576. 05730 REM
  577. 05740 REM
  578. 05750 REM INSERT ENTRY
  579. 05760 LONG IF N>0
  580. 05770 FOR I= 1 TO N
  581. 05780 IF INDEX$(I)<DUM$ THEN 5800
  582. 05790 INDEX$I(I)=DUM$ : N=N+1 : RETURN
  583. 05800 NEXT I
  584. 05810 ENDIF
  585. 05820 REM
  586. 05830 REM PUT AT END
  587. 05840 N=N+1
  588. 05850 INDEX$(N)=DUM$
  589. 05860 RETURN
  590. 05870 REM LAST LINE OF CATLA.BAS
  591. 10 ENDIF
  592. 05820 REM
  593. 05830 REM PUT AT END
  594. 05840 N=N+1
  595. 05850 INDEX$(N)=DUM$
  596. 05860 RETURN
  597. 05870 REM LAST LIN