
10REM  ***** PROGRAM SET UP *****
11POKE 12185, 240
12LOMEM :30025
20DIM tb$(144), ab$(144), ws(1000)
30HOME:?:? "WHAT IS TODAY'S DATE (MO/DY/YR)"; :INPUT d$
40HOME:?:? "WHICH DRIVE DO YOU WANT TO LIST (1/2)"; :INPUT d1
50IF d1<1 OR d1>2 THEN 40
53IF d1=1 THEN  dr%=4
54IF d1=2 THEN  dr%=5
55POKE 28904, dr%:POKE 28999, 0:CALL 28900
60REM      ***** READ DISK MENU *****
70GOSUB 1320:HOME:? "READING DATA...PLEASE STAND BY"
80FOR i=29000 TO 29011:READ a:POKE i, a:NEXT: p1=0: p2=0: a$="": c=0
90 p1=ws(0)-ws(0)+PEEK(16109): p2=ws(0)-ws(0)+PEEK(16110)
100POKE 29001, p1:POKE 29002, p2
120? CHR$(4); "CATALOG,D5"
125?
130POKE 29000, 173:POKE 29001, p1:POKE 29002, p2
150FOR i=1 TO 4:INPUT a$:NEXT: c=1
160INPUT a$:IF a$="" THEN 170
165IF LEFT$(a$, 1)="*" THEN  a$=RIGHT$(a$, LEN(a$)-1)
167 tb$(c)=MID$(a$, 7, 18): c=c+1:GOTO 160
170HOME:TEXT
180FOR i=1 TO c-1:? tb$(i):NEXT
190DATA      141,0,64,238,1,3,208,3
200DATA      238,2,3,96
340IF c>88 THEN GOSUB 1260
350REM      *** ALPHABETIZE LISTING ***
360GOSUB 1320:HOME:? "SORTING DATA: PLEASE STAND BY"
370 z$=CHR$(255): e=1
380FOR a=1 TO c-1: c$=z$:FOR b=1 TO c-1:IF c$<tb$(b) THEN 400
390 c$=tb$(b): d=b
400NEXT: ab$(e)=c$: e=e+1: tb$(d)=z$:NEXT
410REM      **** JACKET NAME = NS$ ****
420 ns$="*****   REFERENCE  *****"
430REM      ***** PRINT ALPHA LISTING *****
440GOSUB 1320:HOME:? "PRINTING JACKET...PLEASE STAND BY"
450 dd=0: cd=INT(c/2):? CHR$(4); "PR#1":? CHR$(9); "80N"
460FOR cr=1 TO 2
470? CHR$(10):REM      LINE FEED
480NEXT
510 tl$="-"
520? TAB(4); :FOR tl=1 TO 71:? tl$; :NEXT:? " CUT"
530GOSUB 1100:GOSUB 1110
540GOSUB 1100
550POKE 17002, INT(40-LEN(ns$)/2):? ns$; 
560GOSUB 1110
570FOR le=1 TO 2
580GOSUB 1100:GOSUB 1110
590NEXT
600GOSUB 1100
610POKE 17002, 36:? dt$; :GOSUB 1110:GOSUB 1120
620IF c>32 THEN 790
630REM      *** PRINT : < 32 PROGRAMS ***
640FOR dd=1 TO cd:GOSUB 1100
650POKE 17002, 20:? ab$(dd); 
670GOSUB 1110
680NEXT
690GOSUB 1100:GOSUB 1110: dd=dd+1
700IF dd>17 THEN 720
710GOTO 690
720GOSUB 1170
730FOR sl=1 TO 29
740GOSUB 1150:GOSUB 1160
750NEXT
760GOSUB 1190
770GOSUB 1210
780REM      *** PRINT: > 32 PROGRAMS ***
790FOR dd=1 TO 16:GOSUB 1100
800POKE 17002, 20:? ab$(dd); 
810POKE 17002, 45:? ab$(dd+16); 
820GOSUB 1110
830NEXT
840GOSUB 1100:GOSUB 1110
850GOSUB 1170
860GOSUB 1150:GOSUB 1160
870 cx=(c-33)/2: cz=cx+32
880FOR dd=33 TO cz:GOSUB 1150
890POKE 17002, 20:? ab$(dd); 
900POKE 17002, 45:? ab$(dd+cx); 
910GOSUB 1160
920NEXT
930GOSUB 1150:GOSUB 1160: dd=dd+1
940IF dd>60 THEN 960
950GOTO 930
960GOSUB 1190:GOSUB 1210
970REM      *** CLOSING REMARKS ***
980? CHR$(4); "PR#0"
990GOSUB 1320:HOME:? "ALPHABETIZED DISK COVER COMPLETE"
1000?:? "DO YOU WANT ANOTHER DISK COVER (Y/N)"; :INPUT ag$
1010FOR dd=0 TO 144: ab$(dd)="":NEXT:RESTORE
1020IF ag$<>"Y" OR ag$<>"y" THEN 1050
1030GOTO 40
1040REM      ** TERMINATE PROGRAM **
1050HOME:? "PROGRAM TERMINATED"
1060GOSUB 1320
1070FOR wt=1 TO 1000:NEXT
1080HOME:END
1090REM      *** DISK JACKET OUTLINE ***
1100? "  !       ! *"; :RETURN
1110POKE 17002, 64:? "* !       !":RETURN
1120? "  !       ! *"; 
1130POKE 17002, 29:? "--------------------"; 
1140POKE 17002, 64:? "* !       !":RETURN
1150? "          !"; :RETURN
1160POKE 17002, 66:? "!":RETURN
1170 cl$="-"
1180? TAB(4); :FOR cl=1 TO 71:? cl$; :NEXT:? " FOLD":RETURN
1190 ll$="-"
1200? TAB(12); :FOR ll=1 TO 55:? ll$; :NEXT:? "CUT":RETURN
1210?:FOR cr=1 TO 3
1220? CHR$(10):REM      LINE FEED
1230NEXT:GOTO 980
1240REM      *** MENU TOO LONG TO LIST ***
1250REM      *** CAN ONLY LIST 88 PGMS ***
1260GOSUB 1320:HOME:? "TOO MANY PROGRAMS TO LIST ON JACKET"
1270?:? "PRINT THOSE THAT FIT (Y/N)"; :INPUT aw$
1280IF aw$<>"Y" OR aw$<>"y" THEN 1050
1290 c=88:RETURN
1310REM      ***** SOUND ROUTINE *****
1320? CHR$(7):? CHR$(7):? CHR$(7):? CHR$(7):? CHR$(7):RETURN




