'=========================================================================== ' Subject: GET LZH LIST Date: 10-25-99 (18:05) ' Author: Randall L. Glass Code: PB ' Origin: rlglass@yahoo.com Packet: PB.ABC '=========================================================================== '---------------------------------------------------------------------------- ' ' Get Lzh List ' BY Randall Glass ' Copyright 1999 ' '---------------------------------------------------------------------------- ' ' FREEWARE ' ' You may use this as long as you give me credit somewhere in the documentation ' ' Email rlglass@yahoo.com ' '-------------------------------------------------------------------------- DEFINT A-Z TYPE LZHHead HeadSize AS BYTE CheckSum AS BYTE Id1 AS STRING * 3 Method AS BYTE Id2 AS BYTE CompressSize AS DWORD UnCompressSize AS DWORD FileTime AS WORD FileDate AS WORD Attrs AS BYTE HeaderLevel AS BYTE FileNameLen AS BYTE FileName AS STRING * 12 END TYPE DIM ArchiveFiles$(200),ArchiveInfo$(200) GetLzhList Command$, ArchiveFiles$(), ArchiveInfo$(), FilesInfo$ TotalFiles?? = CVWRD(ArchiveFiles$(%TotalFiles)) FOR I% = 1 to TotalFiles?? PRINT ArchiveInfo$(I%) NEXT I% END SUB GetLzhList(LzhFile$,ArchiveFiles$(),ArchiveInfo$(), FilesInfo$) DIM Lzh AS LZHHead DIM FileName AS STRING * 8 DIM Ext AS STRING * 4 FilePos??? = 0: QUIT% = 0 Handle% = FREEFILE OPEN LzhFile$ FOR BINARY AS Handle% RestOfFileSize??? = LOF(Handle%) IF RestOfFileSize??? = 0 THEN CLOSE Handle% PRINT LzhFile$+" has an FileSize of Zero !" EXIT SUB END IF DO GET Handle%,FilePos???,Lzh IF Lzh.Id1 = "-lh" Or Lzh.Id1 = "-lz" Or Lzh.Id1 = "-lZ" THEN IF Lzh.HeadSize AND (Lzh.HeadSize < RestOfFileSize???) THEN Get Handle%,FilePos??? + Lzh.HeadSize,DirLen?? SEEK Handle%,FilePos??? + Lzh.HeadSize+3 IF DirLen?? > 0 AND DirLen?? < 256 THEN GET$ Handle%,DirLen??-3,Directory$ REPLACE CHR$(255) WITH "\" IN Directory$ ELSE Directory$ = "" END IF INCR FilePos???, Lzh.CompressSize + Lzh.HeadSize + 2 DECR RestOfFileSize???, FilePos??? INCR FileNumber?? File$ = LEFT$(Lzh.FileName,Lzh.FileNameLen) LSET FileName$ = Extract$(File$,".") LSET Ext$ = Extension$(File$) GetDateAndTime Lzh.Filedate,Lzh.FileTime,Filedate$,FileTime$ IF DirLen?? THEN DirSign$ = " + " ELSE DirSign$ = " " END IF ArchiveFiles$(FileNumber??) = Directory$ + File$ ArchiveInfo$(FileNumber??) = DirSign$ + FileName$ + Ext$ + USING$("########",Lzh.UnCompressSize) + " " + Filedate$ + " "+FileTime$ END IF ELSE INCR FilePos???, 2 DECR RestOfFileSize???, FilePos??? END IF Loop UNTIL Lzh.HeadSize = 0 Or Lzh.HeadSize > RestOfFileSize??? OR FilePos??? = RestOfFileSize??? Close Handle% FilesInfo$ = LzhFile$ + ":" + STR$(FileNumber??)+" Files" ArchiveFiles$(0) = MKWRD$(FileNumber??) ArchiveInfo$(0) = MKWRD$(FileNumber??) END SUB SUB GetDateAndTime(Filedate??,FileTime??,Filedate$,FileTime$) Year?? = (Filedate?? AND &B1111111000000000):SHIFT RIGHT Year??,9 INCR Year??,1980 Month?? = Filedate?? AND &B0000000111100000:SHIFT RIGHT Month??,5 Day?? = Filedate?? AND &B0000000000011111 Hours?? = FileTime?? AND &B1111100000000000:SHIFT RIGHT Hours??,11 Minutes?? = FileTime?? AND &B0000011111100000:SHIFT RIGHT Minutes??,5 Seconds?? = (FileTime?? AND &B0000000000011111) * 2 Month$ = LTRIM$(STR$(Month??)) Day$ = LTRIM$(STR$(Day??)) IF LEN(Month$) = 1 THEN Month$="0"+Month$ IF LEN(Day$) = 1 THEN Day$ = "0"+Day$ 'IF Hours?? > 12 THEN ' Hours?? = Hours?? -12:AmPm$ = "p & " 'ELSE ' AmPm$ = "a & " 'END IF Hours$ = LTRIM$(STR$(Hours??)) Minutes$ = LTRIM$(STR$(Minutes??)) Seconds$ = LTRIM$(STR$(Seconds??)) IF LEN(Hours$) = 1 THEN Hours$="0"+Hours$ IF LEN(Minutes$) = 1 THEN Minutes$="0"+Minutes$ IF LEN(Seconds$) = 1 THEN Seconds$="0"+Seconds$ Filedate$ = Month$ + "-" + Day$ + "-" + LTRIM$(STR$(Year??)) FileTime$ = Hours$ + ":" + Minutes$ + ":" + Seconds$ 'FileTime$ = Hours$ + ":" + Minutes$ + AmPm$ + Seconds$ +"s" END SUB FUNCTION Extension$(File$) FOR I% = LEN(File$) TO 1 STEP -1 Period$ = MID$(File$,I%,1) IF Period$ = "." THEN Extension$ = MID$(File$,I%):EXIT FUNCTION NEXT I% END FUNCTION FUNCTION FileDirExist%(d$) Ln% = LEN(D$) FOR I% = Ln% TO 1 STEP -1 Char$ = MID$(D$,I%,1) IF Char$ = "\" OR CHAR$ = "/" THEN EXIT FOR NEXT I% FileDirExist% = I% END FUNCTION