PCX Library
Format type | Archive |
---|---|
Max files | 65,535 |
File Allocation Table (FAT) | Beginning |
Filenames? | Yes, 8.3 |
Metadata? | None |
Supports compression? | No |
Supports encryption? | No |
Supports subdirectories? | No |
Hidden data? | Yes |
Games |
Some games use PCX libraries to store .PCX files. The PCX Library format was developed by Genus Microprogramming, Inc. and is handled by the PCXLIB.EXE tool distributed with their PCX Utilities (later renamed to PCX Toolkit). This library file format was later revised and called the GX Library format.
Usually the default library extensions are .PCL or .LIB, but this is not required (as actual example: .GXL or .VXL used too). Library files can be easily identified by the copyright text at the beginning (see below).
Library files may contain not only .PCX images, but any type of file.
Library files consists of two parts - the header and file directory. Note that PCX/GX tools and the libraries code used in software verified only the id (Library ID) value in header for both formats. Nothing else is checked in library header and can be literally anything.
PCX Library format
Each file begins with the following header.
Data type | Name | Description |
---|---|---|
char[10] | id | Library ID string. Must be null-terminated "pcxLib" string. Following three bytes are unused and generally random (e.g. "pcxLib\x00\x14\xBE\x00"). Some games (at least those using toolkit v3.53) only verify the first character is 'p' and ignore the rest, but PCXLIB.EXE expected full string here. |
char[50] | copyright | Copyright notice (example: "Copyright (c) Genus Microprogramming, Inc. 1988-89"). |
UINT16LE | version | pcxLib version |
char[40] | label | Library volume label |
BYTE[20] | xtra | Filler, unused/ignored, set to 0 |
Immediately after the header are the files, each with their own header.
Data type | Name | Description |
---|---|---|
UINT8 | synch | Synch byte (always 1) |
char[13] | name | Image file name (8.3, name padding with spaces before dot from extension, ends with 0) |
INT32LE | size | File size |
UINT16LE | date | DOS packed file date |
UINT16LE | time | DOS packed file time |
UINT16LE | pack | Packing type |
char[40] | note | Image note |
BYTE[20] | xtra | Extra filler, unused/ignored, set to 0 |
After the file's header is size bytes of file data. This file header and file data are then repeated for each file in the library. The library file should be read until the end of the file or while synch byte still 1 (in case of extra data at the end of the library).
The date and time are in standard DOS FAT16 format:
Field | Date | Time | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Bit | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Value |
Add 1980 to the year value to get the calendar year (i.e. a year value of 1 translates to 1981). Multiply the seconds by 2 (i.e. a value of 29 translates to 58 seconds). A month or day value of 0 is not permitted. Dates before 1 Jan 1980 are not possible. The times are stored in the local time zone of the computer that wrote the timestamps, however the timezone itself is not stored.
Tools
The following tools are able to work with files in this format.
Name | Platform | Extract files? | Decompress on extract? | Create new? | Modify? | Compress on insert? | Access hidden data? | Edit metadata? | Notes |
---|---|---|---|---|---|---|---|---|---|
PCX/GX Library unpacker | Windows | Yes | N/A | No | No | N/A | No | No | PCX/GX Library support (with C source code) |
See also
- GX Library, a newer version of this format.
Credits
This file format was reverse engineered by CTPAX-X_Team. If you find this information helpful in a project you're working on, please give credit where credit is due. (A link back to this wiki would be nice too!)