home *** CD-ROM | disk | FTP | other *** search
- ╔══════════════════════════════
- ║ TxCFI Compressed Files ┌─────────────────┐
- ║ Interface │ Member │────┐
- ╟────────────────────────────── │ of │░░░░│
- ║ (c) 1989 Robert W. van Hoeven │ │░░░░│
- ╟────────────────────────────── │ Badhoevedorpse │░░░░│
- ║ Release : 6.07 │ Pascal │░░░░│
- ║ Rel.Date: 10th August 1989 │ Programmeurs │░░░░│
- ╠══════════════════════════════ │ Collectief │░░░░│
- ║ └─────────────────┘░░░░│
- ║ │ T4CFI.TPU │░░░░░░░░░░░░░░░░░│
- ║ │ T5CFI.TPU └─────────────────┘
- ║ │ T55CFI.TPU ┌─────┐
- ║ │ CFITEST.PAS │░░░░░│
- ║ │ Changes marked with └──┬──┘
- ║ │ '|' at the start of ┌────┴────┐
- ║ │ the line !!!!!!!!!! ┌ ─ ─ ─ ─ ─ ─ ─││││││ ═══│─ ─ ─ ─ ─ ─ ─ ┐
- ║ └─────────┘
- ╠═══════════════════════════════ │ ┌─────┐ │ B │ ┌─────┐ │
- ║ Address: Robert W. van Hoeven │░░░░░│ │ P + P │ │░░░░░│
- ║ PO Box 131 │ └──┬──┘ │ C │ └──┬──┘ │
- ║ 1170 AC Badhoevedorp ┌────┴────┐ └───────┘ ┌────┴────┐
- ║ Nederland (NL) └ ─ ││││││ ═══│─ ─ ─ ─ ─ ─││││││ ═══│ ─ ┘
- ╚═══════════════════════════════ └─────────┘ └─────────┘
-
- ************************************************************************
- * WARNING: The interface record has been changed. Total length is now *
- * 8 bytes longer (than CFI 5.xx and lower) *
- * WARNING: The PKZIP V 1.00 implementation is taken from the documents *
- * in the beta version. If they change before PKZIP V 1.00 is *
- * released, a new version of CFI will also be released !!!!! *
- ************************************************************************
-
- Copyrights
- ───────────────────────────────────────────────────────────────
- - The package is donated to Public Domain, excluding the source-
- code for the units;
- - THE AUTHOR OF THE PROGRAM SHALL NOT IN ANY CASE BE LIABLE FOR
- SPECIAL, INCIDENTAL, CONSEQUENTIAL, INDIRECT OR OTHER SIMILAR
- DAMAGES ARISING FROM USING THIS PROGRAM OR ITS FUNCTIONS.
- - You may not make any changes or modifications to the program;
- - You may make as many copies of the program and its extra files
- as you like and distribute them to friends, but you have to supply
- the package in its original form;
- - When you should use the package, I should like it, when you send
- me a postcard or a Netmail <tm> message. Only when getting enough
- reactions, I will continue to support this package; .
- - You may use the TxCFI.TPU file(s) in your own programs. When you
- want to offer these program's to others, this can only be done in
- the form of Public Domain programs and you have to include a
- reference to the original CFI-package in your documentation;
- - System Enhanced Assosiates (SEA) regard ARC as their trademark, but
- SEA has indicated that Public Domain programs may process .ARC files
- without notice;
-
- Introduction to TxCFI.TPU
- ───────────────────────────────────────────────────────────────
- The supplied UNIT's in this package are usefull when you want
- to work with compressed files. I have supplied the following
- interfaces:
-
- - PKWare's ZIP-files (and old ARC versions)
- - NoGate's PAK-files
- - Sea's ARC-files
- - R. Dhesi's ZOO-files
- - H. Yoshi's LHZ-files or ICE-files
- - M. Miki's LZS-files (also H. Okumura and K. Masuyama)
- - Dean W. Cooper's DWC-files
-
- The supplied UNIT uses the same routines, transparent from the fact
- what type of compressed file you want to read, only the type of in-
- formation you get back in your interface record is more or less de-
- pendent on the type of compressed files.
-
- Description of TxCFI.TPU
- ───────────────────────────────────────────────────────────────
- This UNIT carries 6 functions, 1 procedure, 1 interface TYPE and
- some variables. The latter you normaly don't use, exept when the
- supplied compression-files don't confirm to the standard naming
- conventions in the extension of the filename.
-
- The interface between YOUR program and this UNIT lies in a pre-
- defined record-type with the name 'CIRTyp' (CIR meens Compression
- Interface Record).
-
- The declaration of this TYPE is:
-
- CIRTyp=RECORD
- CIRAtr:BYTE;
- {Contains the attribute of the current }
- {compression method. }
- {SEA 1 = stored }
- { 2 = stored }
- { 3 = packed }
- { 4 = Squeezed }
- { 5 = Crunched }
- { 6 = Crunched }
- { 7 = Crunched }
- { 8 = Crunched }
- {PKWARE 9 = Squashed (only PkWare) }
- {PAK 10 = Crushed (only NoGate) }
- { 11 = Distilled (only NoGate) }
- { 45 = PAK archive comment }
- { 46 = PAK file comment }
- { 47 = Path for file }
- { 48 = Security enveloppe }
- { 49 = Error Correction }
- { }
- {ZIP Local 50 = stored }
- { 51 = Shrunk }
- { 52 = Reduced factor 1 }
- { 53 = Reduced factor 2 }
- { 54 = Reduced factor 3 }
- { 55 = Reduced factor 4 }
- { 56 = Imploding }
- {ZIP C_Dir 80 = stored }
- { 81 = Shrunk }
- { 82 = Reduced factor 1 }
- { 83 = Reduced factor 2 }
- { 84 = Reduced factor 3 }
- { 85 = Reduced factor 4 }
- { 86 = Imploding }
- {ZIP E_ZIP 99 = End of Central ZIP-Dir }
- { }
- {ZOO 100 = Stored }
- { 101 = LWZ compression }
- { 150 = Stored (deleted) }
- { 151 = LWZ compression (deleted)}
- { }
- {LZH/ICE 200 = Stored }
- { 201 = LZHufman compression }
- {LZH/LZS 202 = LZS (LZH) -lz4- }
- { 203 = LSZ (LZH) -lz5- }
- {LZS 230 = LZS -lz0- (??)* }
- { 231 = LZS -lz1- (??)* }
- { 232 = LZS -lz2- (??)* }
- { 233 = LZS -lz3- (??)* }
- { 249 = LZS -lz?- (??)* }
- { }
- {DWC 250 = Stored }
- { 251 = Crunched }
- CIRNam:STRING[12];
- {Contains the filename (empty with types }
- {45,46,99) }
- CIRPth:STRING[80];
- {Contains the (relative) path with ZIP and}
- {ZOO and LZH/ICE, otherwise empty }
- CIRExt:STRING;
- {Contains empty string and is present for }
- {future releases of PKZIP }
- CIRDes:STRING;
- {Contains empty string or the archive }
- {description (types 45,46,99 and all ZOO) }
- CIROSi:LONGINT;
- {Original size of compressed file }
- CIRASi:LONGINT;
- {Compressed size of file }
- CIRDTm:LONGINT;
- {Contains creation date/time as a LONGINT }
- {as found in a Pascal SearchRec }
- CIRCRC:LONGINT;
- {Contains CRC depending on compression or }
- {the filenumber for a comment records in }
- {PAK files. For PAK (attr 46) }
- {0 : The comment for the whole PAK file }
- {nn : The comment for the nn'th file in }
- { the PAK }
- {The same goes for type 47. CRC contains }
- {the filenumber the path belongs to }
- CIRFAt:BYTE;
- {Contains 0 or the fileatrribute of the }
- {original file (only ZIP and LZH/ICE) }
- CIRSPo:LONGINT;
- {Absolute start (zero based) of the this }
- {header in the compressed file }
- CIRLen:LONGINT;
- {Length (header included) of this file in }
- {the compressed file }
- CIRFl1:WORD;
- {Optional bit-mapped flag. Only used for }
- {ZIP-files this moment. When ZIP, this }
- {bitmap contains the INTERNAL attribute ! }
- {This bitmap is only available in central }
- {directory entries. }
- CIRFl2:WORD;
- {Optional bit-mapped flag. Only used for }
- {ZIP-files this moment. When ZIP, this }
- {bitmap contains the general purpose flag }
- END;
-
- WARNING: When you process a file with the extension PAK, ARC
- or PKA, the NEXT_CFL function can return a mixture
- of types in the CIRAtr variable. When testing this
- variable, please test every possible entry other-
- wise your program will do 'strange' things. When
- using this variable, you can best use a CASE with
- an ELSE clause (look in the demo for an example) !
-
- (*) NOTE:Current DOC's for LARC (V 3.33) are not available to
- me. The headers are the same as Yoshi's LHarc program,
- but only the values -lz4- and -lz5- (which you can al-
- so process with LHARC.EXE) are known. The -lz0- to -lz3-
- are only guesses.
-
- The following CONST's are carried out to you:
-
- HeapAl:BOOLEAN:FALSE;
- {Toggle for external HEAP functions }
- CFlSFX:BOOLEAN:FALSE;
- {Toggle for SFX testing in TEST_CFL function}
- CFlVer:STRING[10];
- {The current version of TxCFl }
- CFlCpy:STRING[80];
- {The complete copyrights for the current }
- {version }
- DayMon:ARRAY[1..12] OF BYTE;
- {A table with number of days iper month }
-
-
- The following VAR's are carried out to you:
-
- CFlFil:FILE;
- {The FILE variable for the current file }
- {NEVER do something with this variable !! }
-
- CFlTyp:BYTE;
- {The type of compression TxCFI has de- }
- {tected (depending on the file extension) }
- {0 = Invalid }
- {1 = ARC/PAK/PKA }
- {2 = ZIP }
- {3 = ZOO }
- {4 = LZH/ICE }
- {5 = DWC }
- {NEVER (and I mean NEVER) change this }
- {variable (CFI will return invalid entries}
- {or aborts ! Only use this variable as a }
- {reference. }
-
- CFlPos:LONGINT;
- {The current position in the open file }
- {NEVER, and I meen NEVER change this vari-}
- {able in your program, strange things may }
- {occur and TcCFI will (at least) not re- }
- {turn valid entries to you }
-
- ZIPALL:BOOLEAN;
- {TRUE when all ZIP-types are wanted, FALSE}
- {when only local-types are wanted (faster)}
- {TxCFI will set this variable to TRUE by }
- {default, before the call to Next_CFL you }
- {can change the variable to FALSE. }
-
- DWCNuE:INTEGER;
- {This variable contains the total number }
- {of entries in a DWC-file, AFTER the first}
- {NEXT_CFL call. You can inspect this }
- {variable, but you must NEVER change it ! }
-
- DWCCuE:INTEGER;
- {This variable contains the current entry }
- {number in the DWC-file, AFTER every }
- {NEXT_CFL call. You can inspect this }
- {variable, but you must NEVER change it ! }
-
- CFlOSi:LONGINT;
- {This variable contains the total of the }
- {original file-sizes in the compressed }
- {file until now. You can inspect this }
- {variable after every call to NEXT_CFl and}
- {even after CLOS_CFL ! }
-
- CFlASi:LONGINT;
- {This variable contains the total of the }
- {compressed file-sizes in the compressed }
- {file until now. You can inspect this }
- {variable after every call to NEXT_CFl and}
- {even after CLOS_CFL ! }
- {The number given is the REAL total of all}
- {compressed files in this compression file}
- {until now. It DOES NOT include headers }
- {and other overhead bytes ! }
-
- DaySav:BOOLEAN;
- GMTDif:LONGINT;
- {DWC make's usage of the C-library Time- }
- {Zone variable (TZ= in the environment }
- {block). CFI searches the environment and }
- {places the difference between GMT and the}
- {found TimeZone as seconds in GMTDif. When}
- {a daylight saving component is found in }
- {TZ, DaySav is set to TRUE (hence subtrac-}
- {ting an hour). You can set DaySav to the }
- {FALSE value yourself. }
-
-
- TxCFI contains the following FUNCTION's and PROCEDURE's:
-
- =======================================================================
- FUNCTION Open_CFl(CFlNam:STRING):BOOLEAN;
-
- Result : BOOLEAN
-
- Input : The name of the compressed file and optional the drive
- and path;
-
- Description: Call this function to open the file, supplied in 'CFLNAM'
- and let TxCFI work out the type of compression file de-
- pending on the extension.
- If the file does not exist, or has an invalid extension,
- the function will return FALSE, otherwise the function
- will return TRUE.
-
- Remarks : OPEN_CFl sets the variables CflPos, CflFil and CflTyp.
- OPEN_Cfl will also (re)set the working variables for
- DWC-timedate stamps when opening a DWC-file. It will
- look at the current values of GMTDif and DaySav and
- create a difference out of these variables.
- Never use this function for the second time if you have
- not used Clos_CFL.
-
- Remarks : See Test_CFL and Forc_CFL functions.
-
- =======================================================================
- FUNCTION Test_CFl(CFlNam:STRING):BYTE;
-
- Result : BOOLEAN
-
- Input : The name of the compressed file and optional the drive
- and path;
-
- Description: Call this function to open a file, supplied in 'CFLNAM'
- and let TxCFI work out the type of compression file de-
- pending on the INTERNAL file structure.
- If the file does not exist, or has an invalid internal
- format, the function will return 0, otherwise the func-
- tion will return 1 (ARC), 2 (ZIP), 3 (ZOO), 4 (LZH) or
- 5 (DWC).
- If there is not enough memory for HEAP functions (this
- must be at least 20000 bytes), Test_CFL returns with
- a value 255.
- If the file is of type .COM or .EXE and CFlSFX is set
- to FALSE (default) then these files are skipped. If the
- boolean is set to TRUE before you call Test_CFl, this
- function will test .COM and .EXE files for SFX-headers.
- If the file is a SFX-file (Self Extracting Archive),
- Test_CFL sets the starting location in the SFX-file
- in the variable CFlPos, otherwise CFlPos is set to 0.
-
- Remarks : Test_CFl opens the supplied file and reads the first
- 29 bytes. Depending on compression headers, the function
- determines what kind of file it is working on. If the
- file isn't a compressed file a 0 is returned, otherwise
- the function returns a valid CFLTyp value (1,2,3,4,5).
- When the file has an extension of .EXE or .COM, Test_CFL
- will read the first 20000 bytes of the file to see if it
- is a SFX-file. When this is the case, Test_CFl will re-
- turn the correct CFLTyp value (only 1,2 and 5).
- Test_CFl sets the global variable CFlPos to a value. You
- can read the value but you are advised not to change the
- value. The following function call to Next_CFl will use
- this value to determine the starting position inside
- the file.
- The 29 (or 20000) bytes are stored on the HEAP. Cfl
- releases this bytes from the HEAP before terminating
- the function (see chapter on HEAP-mamagement). After
- the test all files are closed !
- Test_Cfl does not open a DWC file. It only returns 5
- as a result of the test. The test is done on extension.
-
- Remarks : See Forc_CFL
-
- =======================================================================
- FUNCTION Forc_CFl(CFlNam:STRING,CflAtt:BYTE):BOOLEAN;
-
- Result : BOOLEAN
-
- Input : The name of the compressed file (optional drive and
- path) and a valid CFlTyp (1, 2, 3, 4 or 5) or a SFX
- file (.COM or .EXE tested with Test_CFl) and a valid
- CFlTyp (1,2 or 5).
-
- Description: Call this function to open the file, supplied in 'CFLNAM'.
- TxCFI sets all global variables AND sets the CFlTyp to
- the value supplied in CFlAtt. Never use other values than
- 1 (ARC/PAK/PKPAK), 2 (ZIP), 3 (ZOO), 4 (LZH) or 5 (DWC)
- for CflAtt. In case of doubt, let Test_CFL work out the
- internal structure of the file and use the returned value
- as input for CflAtt. This is also the case when working
- on SFX files, because CFL needs to know the starting point
- inside the SFX-file.
- FORC_Cfl will also (re)set the working variables for
- DWC-timedate stamps when opening a DWC-file. It will
- look at the current values of GMTDif and DaySav and
- create a difference out of these variables.
-
- Remarks : Forc_CFl sets the variables CflFil and CflTyp. It uses
- the variable CFlPos.
- Never use this function for the second time if you have
- not used Clos_CFL.
-
- Remarks : See the supplied demo for reference !
-
- =======================================================================
- PROCEDURE Clos_Cfl;
-
- Result : -
-
- Input : -
-
- Description: Call this function to close the file you have worked on.
- Even if you have opened the file yourself, use this pro-
- cedure to close it.
-
- Remarks : OPEN_CFl sets the variables CflPos.
-
- =======================================================================
- FUNCTION Next_CFl(VAR DTACFl:CIRTyp):BOOLEAN;
-
- Result : BOOLEAN;
-
- Input : A variable of the type CIRTyp (carried out with TxCFI).
-
- Description: Next_Cfl returns the next valid entry from the compres-
- sed file and returns TRUE, or returns FALSE if there is
- nothing more to read (E.O.F. on compressed file).
- The returned variables are depending on the type of com-
- pressed file you work on (see comments in the TYPE de-
- claration).
- This function always works after a succesfull Open_CFl,
- Forc_CFl or LFor_CFl. With LFor_CFI you will get the
- first valid entry in the compressed (SFX) file.
-
- Remarks : When you are working on a DWC-file, after the first
- call you can obtain the number of files in the DWC
- with the variable DWCNuE (never change it);
-
- =======================================================================
- FUNCTION HEAP_All:BOOLEAN;
-
- Result : BOOLEAN;
-
- Input : Nothing
-
- Description: When you are incorporation CFL functions in a part of
- your program that relies on the HEAP, you can do a heap
- allocation before you call TEST_CFL. Test_CFL will then
- use this predefined heap-space and will NOT allocate and
- deallocate HEAP of its own.
- This function should be used when working with sort units
- like Turbo Professional's B-Tree Filer MSort.
-
- Remarks : Heap_All sets the variable HeapAl. Heap_All will return
- FALSE when no memory is available !
-
- =======================================================================
- FUNCTION HEAP_Dal:BOOLEAN;
-
- Result : BOOLEAN;
-
- Input : Nothing
-
- Description: When you have allocated HEAP with HEAP_All, you can
- deallocate it with Heap_DAl.
-
- Remarks : Heap_DAl sets the variable HeapAl. Heap_Dal will return
- FALSE when there is no HEAP allocated (HeapAL=FALSE).
-
- Notes on usage
- ───────────────────────────────────────────────────────────────
- TxCFI uses fast I/O (blockread) to access the compressed file. Some
- types of compressed files have and 'strange' structure. The goal of
- the UNIT is to keep memory requirements as low as possible, so an
- extra read is preferred over extra memory. I have used this routine
- in some of my PD-programs like MTV and MTA and I had no complaints
- about the speed !
-
- TxCFI uses extensive tests on probable I/O errors or invalid files.
- The routine snatches Int24 from Turbo Pascal and has no problems
- with unavailable devices, common I/O errors and so on. In case of
- an I/O error, TxCFI returns FALSE from the function-call, so you
- can supply every file with a valid extension but with an invalid
- format. When you make the assumption that every passed file has a
- valid extension (not some exotic variant), you can pass EVERY file
- to OPEN_CFL and depending on the returned condition (FALSE or TRUE)
- take futher action. When an invalid file (e.g. COMMAND.COM or
- TURBO.EXE) is passed to OPEN_CFG, the routine DOES NOT open the file,
- so there is no loss in time (only the function-call).
- You can also use Test_CFL in cases where one expects compressed files
- with alternative extension. Test_CFL does open the file, so consumes
- more time.
-
- TxCFI uses 20K of heap and the small amount of 5000 bytes of stack-
- space. Please adjust your $M values according to this extra consump-
- tion. The heap usage is temporary and only used inside the Test_Cfl
- function.
-
- If you are a Turbo Pascal 4.xx user, you can use the supplied T4CFI
- unit and keep the T5CFI unit for the moment you are going to upgrade
- your current release of Turbo Pascal.
-
- The supplied demo works fine with both releases (4 & 5) of Turbo Pas-
- cal.
-
- Heap Management
- ───────────────────────────────────────────────────────────────
- There are some cases where it is forbidden to allocate HEAP when
- parts of your program is in progress. This is the case when working
- with functions that have their own heap-management. Turbo Profes-
- sional's B-tree Filer MSort unit is such an example. Also it is
- possible that some functions will take all the HEAP and when you
- interface with such function's and you want to call Test_CFL, you
- are left in the cold.
-
- CFI carries two function that can help you with this problem. Nor-
- maly CFI will allocate and deallocate (GETMEM & FREEMEM) HEAP-space
- with every call to Test_CFL. You can force Test_CFl NOT to allocate
- HEAP-space, but in that case this space must be reserved beforehand.
-
- You can obtain this result by calling HEAP_All before you enter the
- HEAP-critical function's. When you call Test_CFL inside this functions,
- no HEAP-space is allocated (this is already done with HEAP_All) and
- the remainder of the HEAP is for the critical function.
- After the critical function ends, you can call HEAP_DAl to release
- the HEAP used by CFI. After the HEAP is deallocated, Test_CFl works
- like it normal does, it allocates and deallocates HEAP every time
- it is called.
-
- How to recognize a valid compression file
- ───────────────────────────────────────────────────────────────
- If you don't want to wast lots of time and don't want to read the
- whole file (a pitty when it isn't a compressed file) there is no
- save way to test if a file is compressed with one of the supported
- methods or not. This is the way how Test_CFL does its work:
-
- - Test the extension for .DWC, if true, its a DWC-file;
- - Read the first 29 bytes of the compressed files;
- - If there is an error (file not found) return a 0 (FALSE);
- - If pos. 1 contains #26 and pos. 2 does not contain #00 and
- there are 29 bytes read, its an ARC compatible compressed
- file and return 1;
- - If pos. 1/2 contains #80#75, its a ZIP compatible compressed
- file and return 2;
- - If pos 21/24 contains #220#167#196#253, its a ZOO compatible
- compressed file and return 3;
- - If pos 3-5 contains -lh and 7 a -, its a LHZ or LZS compressed
- file (NOT a giant Suzuki) and return 4;
-
- These tests are extended a lot when testing for SFX-files.
-
- It is possible that this combination of bytes is available in files
- that are not compressed files. In that case, don't worry, the first
- or next time you call Next_CFL you will get a FALSE situation !
-
- The DWC method is quick and dirty, this is because many I/O has to
- be done to test a DWC and it is not possible for DWC to work on
- files with another extension than .DWC;
-
- SFX files
- ───────────────────────────────────────────────────────────────
- This release supports SFX files (Self extracting Compression
- files). If you have an SFX (ARC (all), PAK, ZIP or LZx) you
- can use LTst_CFl and LFor_Cfl to work out the internal format
- and let CFI display the files inside the SFX with Next_CFl.
- In the supplied demo, you can use the third fase of the program
- to list SFX files like PKZ092.EXE, PAK161.EXE and LH113B.EXE.
- You can make one yourself and try it out.
-
- Future releases
- ───────────────────────────────────────────────────────────────
- - Including file/archive decriptions in ARC files;
- - Yet another compression program ??? Who knows....
-
- Bugs and flaws
- ───────────────────────────────────────────────────────────────
- If you find any bugs, please report them to me or leave a message
- (under the name Rob Van.Hoeven (mind the point)) at FIDO-Emmen !
-
- Releases
- ───────────────────────────────────────────────────────────────
- 1.01 : First release
-
- 2.01 : - Added Test_CFL and Forc_CFL functions to work easy with
- variable extensions.
-
- 3.01 : - Added LZH (LHarc) support. This is done in a cruel and
- dirty way. The original format is, up to this moment,
- not available to me.
- - DWC files are somewhat supported. Depending on the ex-
- tension, CFI detects a DWC file, but is will not look
- to the internal structure;
- - CFITyp is set to 0 after closing the file (could cause
- an error with wrong calling sequences);
- - I/O error checking did not work everywhere. Could cause
- some strange bugs, fixed;
-
- 3.02 : - Changed the TEST_CFl test for ZIP-files because it was
- to global to work 99% ok. Some other files start with
- just PK. Now also testing the header !
- - Changed the original and compressed size in a LZH file,
- bug corrected;
-
- 4.01 : - DWC internal support;
- - Counters for total compressed and uncompressed sizes;
-
- 4.02 : - DWC time/date stamps returned incorrect. Added all the
- coding to compute the right values;
- - DWC timezone changes can be influenced by the user;
-
- 4.03 : - TxCFI.TPU made self contained. This means that users with
- Turbo Pascal 5.xx don't need the original Turbo Proffesio-
- nal routines anymore. It was never intended but TP 5.xx
- wants the original included units. TP 4.xx has had no
- problems of this kind.
-
- 4.04 : - Not a public release (tests for LZS);
-
- 4.05 : - Implemented LZS;
-
- 5.01 : - Implemented SFX support for ARC (all), PAK, ZIP, LZH
- and LZS.
-
- 5.02 : - Fixed a bug in SFX support. Not almost 99.99% was
- tested ok.
-
- 5.03 : - Implemented 'external HEAP-support';
-
- 5.04 : Not released, internal usage only;
-
- 5.05 : - Implemented a combined test for SFX and NO-SFX.
- - Dropped the LFor_CFl and LTst_CFl functions, they
- are now included in Forc_Cfl and Test_CFl.
- - Added Heap_All and Heap_Dal functions to make exter-
- nal HEAP-support really external;
-
- 6.01 : - Added code to implement PKZIP release 1.0 imploding
- method. Taken from the BETA-release documentation.
- No actual PKZIP/PKUNZIP program is available, so this
- is implemented from paper;
- - Optimized the TEST_CFL function. If extension is COM
- or EXE a full (20000 bytes) SFX-test will be done,
- if other extension, then a small (1000 bytes) test is
- done to see if file contains a false (shifted) header.
- Files under 200 bytes are not tested for shifted
- headers or SFX-headers.
-
- 6.02 : - Changed code to support both LHarc/LZH and LHice/ICE
- files when testing on extension. This is changed in
- LHarc release 1.14. LHarc V 1.14 is a doubtfull release;
-
- 6.05 : - Added support for type 11 (Nogate's Destilled), thus
- supporting PAK V 2.0;
- - Fixed bug in PKZ 1.00 (imploding) support. Central
- directory entries 87,88 and 89 could occur. This was
- a trial version, only 86 + general flags are supported.
-
- 6.06 : - Fixed a bug where CFI could hang while testing for
- an SFX-file. Fixed.
-
- |6.07 : - Fixed a bug in Turbo Pascal 5.5 implementation
-
- Notice
- ───────────────────────────────────────────────────────────────
- Some ideas for this unit came from Philip R. Burns package
- PIBCAT17 (ZOO/DWC-files). The formats for ZIP, ARC and PAK came
- from the documents supplied with those programs. The format for
- LZH/ICE is worked out in a trial on error method.
-
- - ARC is a trademark of SEA;
- - PAK is a trademark of NoGate Consulting;
- - ZIP is a free extension with thanks to PkWare and Phil;
- - ZOO is a trademark of Rahul Dhesi;
- - DWC is a trademark of Dean W. Cooper;
- - LZH/ICE is a trademark of Haruyasu Yoshizaki
- -LZS is a trademark of M.Miki's, H.Okumura and K.Masuyama
-
- |This UNIT is written and compiled with Borland's Turbo Pascal 5.5 and
- uses some routines from Turbo Professional 5.01. Everything was tested
- with the Turbo Debugger 1.0. The T4CFI.TPU unit is compiled under
- Turbo Pascal 4.0. The Turbo Professional routines are self-contained
- (you don't need the original units when compiling under TPascal 5.0)
- and NOT interfaced outside;
-
- Turbo Pascal is a trademark of Borland International
- Turbo Debugger is a trademark of Borland International
- Turbo Professional is a trademark of TurboPower Inc.
- B-Tree Filer is a trademark of TorboPower Inc.
-
- Sorry for my usage of the English language, it's not my native language
- so this can happen.
-
- If you have suggestions, additions or other comments, you can leave a
- message, addressed to me (Rob Van.hoeven) at FIDO Emmen.
-
- Support and Registration
- ───────────────────────────────────────────────────────────────
- As mentioned earlier, when you use the UNIT(s), please send me a
- postcard or a NetMail message.
-
- When you have troubles, find bugs or have otherwise comments on this
- package, please let me know.
-
-
- You can send a postcard to the address in the header of this documen-
- tation, or you can send a netmail <tm> message to:
-
- Rob Van.Hoeven (watch the point !)
-
- National : FIDO Emmen Holland -- 2:500/31
- International: QuickBBS International Support Node -- 2:2/100