'=========================================================================== ' Subject: LZH VIEWER FOR QB Date: 12-10-97 (14:44) ' Author: The ABC Programmer Code: QB, QBasic, PDS ' Origin: Check PB.ABC for PB version Packet: MISC.ABC '=========================================================================== '=============================[ .LZH Viewer ]=============================== ' Simple .LZH Viewer for QuickBASIC programmed by William Yu (12-10-97) ' Special thanks to the SWAG SUPPORT TEAM for posting the Pascal equivalent. ' Donated to the Public Domain, please give credit where due. ' (The PowerBASIC equivalent of this code is also available). ' ' Author can be e-mailed at: voxel@freenet.edmonton.ab.ca ' Or visit his ABC Homepage: http://www.freenet.edmonton.ab.ca/~voxel/ '=========================================================================== DECLARE SUB DO.LZH (FileN AS STRING) DECLARE SUB GET.LZH.ENTRY (C AS LONG) DEFINT A-Z CONST False = 0 CONST True = NOT False TYPE LZHHead HSize AS STRING * 1 Fill1 AS STRING * 1 Method AS STRING * 5 Compsize AS LONG UCompsize AS LONG DateTime AS LONG Fill2 AS INTEGER 'WORD FileNameLen AS STRING * 1 FileName AS STRING * 12 END TYPE DIM SHARED LZH1 AS LZHHead DIM SHARED FSize AS LONG DIM SHARED QUIT AS INTEGER CLS DO.LZH "whatever.lzh" '<-- place Filename here SUB DO.LZH (FileN AS STRING) DIM C AS LONG DIM filenstr AS STRING * 12 DIM LZHMeth AS STRING DIM fls AS LONG, totu AS LONG, totc AS LONG DIM Year AS LONG DIM Month AS LONG DIM Day AS LONG DIM Hour AS LONG DIM Minute AS LONG DIM Secs AS LONG totu = 0: totc = 0: fls = 0 OPEN FileN FOR BINARY AS #1 FSize = LOF(1) IF FSize = 0 THEN CLOSE #1 KILL FileN PRINT FileN + " does not exist!" EXIT SUB END IF C = 1: QUIT = False PRINT "LZH File : "; FileN PRINT PRINT " Filename OrigSize CompSize Ratio Method Date Time" PRINT "------------ -------- -------- ------ -------- -------- --------" DO GET.LZH.ENTRY C IF NOT QUIT THEN Year = LZH1.DateTime: Year = Year \ (2 ^ 25) AND &H7F Month = LZH1.DateTime: Month = Month \ (2 ^ 21) AND &HF Day = LZH1.DateTime: Day = Day \ (2 ^ 16) AND &H1F Hour = LZH1.DateTime: Hour = Hour \ (2 ^ 11) AND &H1F Minute = LZH1.DateTime: Minute = Minute \ (2 ^ 5) AND &H3F Secs = LZH1.DateTime AND &H1F M$ = LTRIM$(STR$(Month)) D$ = LTRIM$(STR$(Day)) IF LEN(M$) = 1 THEN M$ = "0" + M$ IF LEN(D$) = 1 THEN D$ = "0" + D$ A$ = M$ + "-" + D$ + "-" + LTRIM$(STR$(Year + 80))' Year starts at 1980 H$ = LTRIM$(STR$(Hour)) M$ = LTRIM$(STR$(Minute)) S$ = LTRIM$(STR$(Secs)) IF LEN(H$) = 1 THEN H$ = "0" + H$ IF LEN(M$) = 1 THEN M$ = "0" + M$ IF LEN(S$) = 1 THEN S$ = "0" + S$ B$ = H$ + ":" + M$ + ":" + S$ totu = totu + LZH1.UCompsize totc = totc + LZH1.Compsize fls = fls + 1 SELECT CASE MID$(LZH1.Method, 4, 1) 'normally only 0,1 or 5 CASE "0": LZHMeth = "Stored " CASE "1": LZHMeth = "Frozen 1" CASE "2": LZHMeth = "Frozen 2" CASE "3": LZHMeth = "Frozen 3" CASE "4": LZHMeth = "Frozen 4" CASE "5": LZHMeth = "Frozen 5" CASE ELSE LZHMeth = " Unknown" END SELECT PRINT USING "\ \ \ \ \ \ \ \% \ \ \ \ \ \"; LEFT$(LZH1.FileName, ASC(LZH1.FileNameLen)); STR$(LZH1.UCompsize); STR$(LZH1.Compsize); STR$(LZH1.Compsize / LZH1.UCompsize * 100); LZHMeth; A$; B$ END IF C = C + FSize + ASC(LZH1.HSize) + 2 LOOP UNTIL QUIT CLOSE #1 PRINT "------------ -------- -------- ------ -------- -------- --------" PRINT USING "\ \ \ \ \ \ \ \%"; STR$(fls) + " files"; STR$(totu); STR$(totc); STR$(totc / totu * 100) END SUB ' DO.LZH SUB GET.LZH.ENTRY (C AS LONG) GET #1, C, LZH1 IF ASC(LZH1.HSize) > 0 THEN FSize = LZH1.Compsize ELSE QUIT = True END IF END SUB ' GET.LZH.ENTRY