[comp.sys.apple] ProDOS Catalog program i.e., FULLCAT

SEWALL@UCONNVM.BITNET (05/27/87)

Ok, I edited the FULLCAT text file (only 2 lines were over 80 columns),
and I think I avoided messing it up.  I think I would break for a few
bucks for a modem before I tried to type this in.  Even when Applesoft
can be sent as straight ASCII file, fitting it into 80 columns usually
requires "crunching" it - not so easy to read; difficult to type
without error.

---------------------Cut Here--------------------------
NEW
10DIMDN$(20,20),DC(20),PC$(20),I(20),L4$(100)
20D$=CHR$(4)
30WD=39:MF=100:MD=20
40IFPEEK(49048)<128THEN70:REM IF NOT A IIE
50IFPEEK(49183)>128THENWD=79:GOTO80:REM IIE HAS 80-COLUMN ON
60GOTO80:REM IIE HAS 40-COLUMN ON
70INPUT"How wide is your screen ? ";WD:WD=WD-1
80INPUT"Enter pathname of directory to catalog: ";PF$
90IFLEN(PF$)=0THEN120
100IFMID$(PF$,LEN(PF$),1)<>"/"THENPF$=PF$+"/"
110GOTO130
120?D$;"PREFIX":INPUTPF$:PF$=LEFT$(PF$,LEN(PF$)-1)
130INPUT"Alphabetical listing ([Y] or N) ? ";AN$:AL=1:IFAN$="N"ORAN$="n"THENAL=0
134INPUT"List to printer? (Y/[N]) ";AN$
136IFAN$="Y"ORAN$="y"THENPF=1:?D$;"PR#1":?CHR$(9);"80N":WD=79
138LV=0
140GOSUB1000
150?:?LEFT$(L5$,WD):IFPFTHEN?CHR$(12):?D$;"PR#0"
160END
1000LV=LV+1:DC(LV)=0:I(LV)=0
1010GOSUB2000
1012IFALANDDC(LV)>0THENGOSUB5000
1020PC$(LV)=PF$
1030IFRIGHT$(PC$(LV),1)<>"/"THENPC$(LV)=PC$(LV)+"/"
1040IFDC(LV)=0THEN1110
1050FORE=1TO15
1052IFMID$(DN$(LV,I(LV)),E,1)=" "THENDN$(LV,I(LV))=MID$(DN$(LV,I(LV)),1,E-1)
1054IFMID$(DN$(LV,I(LV)),E,1)=" "THENE=100
1060NEXTE
1070PF$=PC$(LV)+DN$(LV,I(LV))
1080GOSUB1000
1090LV=LV-1
1100I(LV)=I(LV)+1:IFI(LV)<DC(LV)THEN1050
1110RETURN
2000?D$;"OPEN ";PF$;",TDIR"
2010I=0
2020?:?
2030?D$;"READ ";PF$
2040INPUTL1$:REM READ NAME
2050?"Dir= ";PF$:?:REM SHOW FULL PATHNAME OF DIRECTORY
2060INPUTL2$:?LEFT$(L2$,WD):REM  READ TITLE
2070INPUTL3$:?LEFT$(L3$,WD):REM  READ BLANK LINE
2080INPUTL4$(I):REMREAD FILES
2090IFL4$(I)=""THENGOTO2120
2095IFDC(LV)>MDTHEN?"Too many directories in this directory":GOTO2110
2100IFMID$(L4$(I),18,3)="DIR"THENDN$(LV,DC(LV))=MID$(L4$(I),2,15)
2105IFMID$(L4$(I),18,3)="DIR"THENDC(LV)=DC(LV)+1
2110I=I+1:IFI>MFTHEN?"Too many files in this directory":GOTO2130
2112GOTO2080
2120INPUTL5$:REM READ BLOCK COUNT
2130?D$;"CLOSE ";PF$
2140I=I-1
2150IFALANDI>0THENGOSUB4000:REMSORT RECORDS
2160FORJ=0TOI:?LEFT$(L4$(J),WD):NEXT
2170RETURN
3000REM FEATURES TO ADD:
3010REM  1. ALPHABETICAL LISTING OPTION
3020REM  2. SEARCH FOR A FILENAME, SHOWING ALL MATCHES IN CURRENT TREE
3030REM  3. ABILITY TO SET CURRENT PREFIX
3040REM  4. ABILITY TO SPECIFY CURRENT PATHNAME TO CATALOG
4000M=I:?D$;"FRE"
4010M=INT(M/2):IFM=0THENRETURN
4020J=0:K=I-M
4030H=J
4040V=H+M:IFMID$(L4$(H),2,15)<MID$(L4$(V),2,15)THEN4070
4050T$=L4$(H):L4$(H)=L4$(V):L4$(V)=T$
4060H=H-M:IFH>=0THEN4040
4070J=J+1:IFJ>KTHEN4010
4080GOTO4030
5000M=DC(LV)-1:?D$;"FRE"
5010M=INT(M/2):IFM=0THENRETURN
5020J=0:K=(DC(LV)-1)-M
5030H=J
5040V=H+M:IFDN$(LV,H)<DN$(LV,V)THEN5070
5050T$=DN$(LV,H):DN$(LV,H)=DN$(LV,V):DN$(LV,V)=T$
5060H=H-M:IFH>=0THEN5040
5070J=J+1:IFJ>KTHEN5010
5080GOTO5030
SAVE FULLCAT