168349Sobrien#------------------------------------------------------------------------------ 2362844Sdelphij# $File: compress,v 1.79 2020/05/30 23:53:04 christos Exp $ 368349Sobrien# compress: file(1) magic for pure-compression formats (no archives) 468349Sobrien# 568349Sobrien# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc. 668349Sobrien# 768349Sobrien# Formats for various forms of compressed data 868349Sobrien# Formats for "compress" proper have been moved into "compress.c", 968349Sobrien# because it tries to uncompress it to figure out what's inside. 1068349Sobrien 1168349Sobrien# standard unix compress 1268349Sobrien0 string \037\235 compress'd data 13186690Sobrien!:mime application/x-compress 14191736Sobrien!:apple LZIVZIVU 1568349Sobrien>2 byte&0x80 >0 block compressed 1668349Sobrien>2 byte&0x1f x %d bits 1768349Sobrien 1868349Sobrien# gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver) 19354939Sdelphij# URL: https://en.wikipedia.org/wiki/Gzip 20354939Sdelphij# Reference: https://tools.ietf.org/html/rfc1952 21354939Sdelphij# Update: Joerg Jenderek, Apr 2019 22103373Sobrien# Edited by Chris Chittleborough <cchittleborough@yahoo.com.au>, March 2002 23103373Sobrien# * Original filename is only at offset 10 if "extra field" absent 24103373Sobrien# * Produce shorter output - notably, only report compression methods 25226048Sobrien# other than 8 ("deflate", the only method defined in RFC 1952). 26354939Sdelphij# Note: find defs -iname '*.trid.xml' -exec grep -q '<Bytes>1F8B08' {} \; -ls 27354939Sdelphij# TODO: 28354939Sdelphij# FBR Blueberry FlashBack screen Record https://www.flashbackrecorder.com/ 29354939Sdelphij# KPR KOffice/Calligra KPresenter application/x-kpresenter 30354939Sdelphij# KPT KOffice/Calligra KPresenter template? application/x-kpresenter 31354939Sdelphij# SAV Diggles Saved Game File http://www.innonics.com 32354939Sdelphij# SAV FarCry (demo) saved game http://www.farcry-thegame.com 33354939Sdelphij# DAT ZOAGZIP game data format http://en.wikipedia.org/wiki/SD_Gundam_Capsule_Fighter 34354939Sdelphij0 string \037\213 35354939Sdelphij# to display gzip compressed (strength=100=2*50) before other (strength=50)? 36354939Sdelphij#!:strength * 2 37354939Sdelphij# no FNAME and FCOMMENT bit implies no file name/comment. That means only binary 38354939Sdelphij>3 byte&0x18 =0 39354939Sdelphij# For binary gzipped no ASCII text should occur 40354939Sdelphij# mcd-monu-cad.trid.xml 41354939Sdelphij>>10 string MCD Monu-Cad Drawing, Component or Font 42354939Sdelphij#>>36 string Created\ with\ MONU-CAD 43354939Sdelphij#!:mime application/octet-stream 44354939Sdelphij# http://fileformats.archiveteam.org/wiki/Monu-CAD 45354939Sdelphij# http://www.monucad.com/downloads/FullDemo-2005.EXE 46354939Sdelphij# /HANDS96.MCC Component 47354939Sdelphij# /DEMO_DD01.MCD Drawing 48354939Sdelphij# /MCALF020.FNT Font 49354939Sdelphij!:ext mcc/mcd/fnt 50354939Sdelphij# http://www.generalcadd.com 51354939Sdelphij>>10 string GXD General CADD, Drawing or Component 52354939Sdelphij#!:mime application/octet-stream 53354939Sdelphij# /gxc/BUILDINGEDGE.gxc Component 54354939Sdelphij# /gxd/HOCKETT-STPAUL-WRHSE.gxd Drawing 55354939Sdelphij# /gxd/POWERLAND-MILL-ADD-11.gxd Drawing v9.1.06 56354939Sdelphij!:ext gxc/gxd 57354939Sdelphij#>>>13 ubyte 0 \b, version 0 58354939Sdelphij>>>13 string 09 \b, version 9 59354939Sdelphij# other gzipped binary like gzipped tar, VirtualBox extension package,... 60354939Sdelphij>>10 default x gzip compressed data 61360521Sdelphij!:mime application/gzip 62354939Sdelphij>>>0 use gzip-info 63354939Sdelphij# size of the original (uncompressed) input data modulo 2^32 64362844Sdelphij>>-0 offset >48 65354939Sdelphij>>>-4 ulelong x \b, original size modulo 2^32 %u 66362844Sdelphij>>-0 offset <48 \b, truncated 67354939Sdelphij# gzipped TAR or VirtualBox extension package 68354939Sdelphij#!:mime application/x-compressed-tar 69354939Sdelphij#!:mime application/x-virtualbox-vbox-extpack 70354939Sdelphij# https://www.w3.org/TR/SVG/mimereg.html 71354939Sdelphij#!:mime image/image/svg+xml-compressed 72354939Sdelphij# zlib.3.gz 73354939Sdelphij# microcode-20180312.tgz 74354939Sdelphij# tpz same as tgz 75354939Sdelphij# lua-md5_1.2-1_i386_i486.ipk https://en.wikipedia.org/wiki/Opkg 76354939Sdelphij# Oracle_VM_VirtualBox_Extension_Pack-5.0.12-104815.vbox-extpack 77354939Sdelphij!:ext gz/tgz/tpz/ipk/vbox-extpack/svgz 78354939Sdelphij# FNAME/FCOMMENT bit implies file name/comment as iso-8859-1 text 79354939Sdelphij>3 byte&0x18 >0 gzip compressed data 80354939Sdelphij!:mime application/gzip 81354939Sdelphij# gzipped tar, gzipped Abiword document 82354939Sdelphij#!:mime application/x-compressed-tar 83354939Sdelphij#!:mime application/x-abiword-compressed 84354939Sdelphij#!:mime image/image/svg+xml-compressed 85354939Sdelphij# kleopatra_splashscreen.svgz gzipped .svg 86354939Sdelphij!:ext gz/tgz/tpz/zabw/svgz 87354939Sdelphij>>0 use gzip-info 88354939Sdelphij# size of the original (uncompressed) input data modulo 2^32 89362844Sdelphij>>-0 offset >48 90362844Sdelphij>>>-4 ulelong x \b, original size modulo 2^32 %u 91362844Sdelphij>>-0 offset <48 \b, truncated 92354939Sdelphij# display information of gzip compressed files 93354939Sdelphij0 name gzip-info 94354939Sdelphij#>2 byte x THIS iS GZIP 95103373Sobrien>2 byte <8 \b, reserved method 96103373Sobrien>2 byte >8 \b, unknown method 97103373Sobrien>3 byte &0x01 \b, ASCII 98159764Sobrien>3 byte &0x02 \b, has CRC 99103373Sobrien>3 byte &0x04 \b, extra field 100103373Sobrien>3 byte&0xC =0x08 101103373Sobrien>>10 string x \b, was "%s" 102159764Sobrien>3 byte &0x10 \b, has comment 103267843Sdelphij>3 byte &0x20 \b, encrypted 104267843Sdelphij>4 ledate >0 \b, last modified: %s 105267843Sdelphij>8 byte 2 \b, max compression 106267843Sdelphij>8 byte 4 \b, max speed 107159764Sobrien>9 byte =0x00 \b, from FAT filesystem (MS-DOS, OS/2, NT) 108103373Sobrien>9 byte =0x01 \b, from Amiga 109103373Sobrien>9 byte =0x02 \b, from VMS 110103373Sobrien>9 byte =0x03 \b, from Unix 111159764Sobrien>9 byte =0x04 \b, from VM/CMS 112103373Sobrien>9 byte =0x05 \b, from Atari 113159764Sobrien>9 byte =0x06 \b, from HPFS filesystem (OS/2, NT) 114103373Sobrien>9 byte =0x07 \b, from MacOS 115159764Sobrien>9 byte =0x08 \b, from Z-System 116159764Sobrien>9 byte =0x09 \b, from CP/M 117159764Sobrien>9 byte =0x0A \b, from TOPS/20 118159764Sobrien>9 byte =0x0B \b, from NTFS filesystem (NT) 119159764Sobrien>9 byte =0x0C \b, from QDOS 120159764Sobrien>9 byte =0x0D \b, from Acorn RISCOS 121354939Sdelphij# size of the original (uncompressed) input data modulo 2^32 122354939Sdelphij#>-4 ulelong x \b, original size modulo 2^32 %u 123354939Sdelphij#ERROR: line 114: non zero offset 1048572 at level 1 12468349Sobrien 12568349Sobrien# packed data, Huffman (minimum redundancy) codes on a byte-by-byte basis 12668349Sobrien0 string \037\036 packed data 127186690Sobrien!:mime application/octet-stream 12868349Sobrien>2 belong >1 \b, %d characters originally 12968349Sobrien>2 belong =1 \b, %d character originally 13068349Sobrien# 131133359Sobrien# This magic number is byte-order-independent. 132133359Sobrien0 short 0x1f1f old packed data 133186690Sobrien!:mime application/octet-stream 13468349Sobrien 13568349Sobrien# XXX - why *two* entries for "compacted data", one of which is 13668349Sobrien# byte-order independent, and one of which is byte-order dependent? 13768349Sobrien# 13868349Sobrien0 short 0x1fff compacted data 139186690Sobrien!:mime application/octet-stream 14068349Sobrien# This string is valid for SunOS (BE) and a matching "short" is listed 14168349Sobrien# in the Ultrix (LE) magic file. 14268349Sobrien0 string \377\037 compacted data 143186690Sobrien!:mime application/octet-stream 14468349Sobrien0 short 0145405 huf output 145186690Sobrien!:mime application/octet-stream 14668349Sobrien 14768349Sobrien# bzip2 14868349Sobrien0 string BZh bzip2 compressed data 149186690Sobrien!:mime application/x-bzip2 15068349Sobrien>3 byte >47 \b, block size = %c00k 15168349Sobrien 152337827Seadler# bzip a block-sorting file compressor 153337827Seadler# by Julian Seward <sewardj@cs.man.ac.uk> and others 154337827Seadler0 string BZ0 bzip compressed data 155337827Seadler!:mime application/x-bzip 156337827Seadler>3 byte >47 \b, block size = %c00k 157337827Seadler 158191736Sobrien# lzip 159191736Sobrien0 string LZIP lzip compressed data 160191736Sobrien!:mime application/x-lzip 161191736Sobrien>4 byte x \b, version: %d 162191736Sobrien 16368349Sobrien# squeeze and crunch 16468349Sobrien# Michael Haardt <michael@cantor.informatik.rwth-aachen.de> 16568349Sobrien0 beshort 0x76FF squeezed data, 16668349Sobrien>4 string x original name %s 16768349Sobrien0 beshort 0x76FE crunched data, 16868349Sobrien>2 string x original name %s 16968349Sobrien0 beshort 0x76FD LZH compressed data, 17068349Sobrien>2 string x original name %s 17168349Sobrien 17268349Sobrien# Freeze 17368349Sobrien0 string \037\237 frozen file 2.1 17468349Sobrien0 string \037\236 frozen file 1.0 (or gzip 0.5) 17568349Sobrien 17668349Sobrien# SCO compress -H (LZH) 17768349Sobrien0 string \037\240 SCO compress -H (LZH) data 17868349Sobrien 17968349Sobrien# European GSM 06.10 is a provisional standard for full-rate speech 18068349Sobrien# transcoding, prI-ETS 300 036, which uses RPE/LTP (residual pulse 18168349Sobrien# excitation/long term prediction) coding at 13 kbit/s. 18268349Sobrien# 18368349Sobrien# There's only a magic nibble (4 bits); that nibble repeats every 33 18468349Sobrien# bytes. This isn't suited for use, but maybe we can use it someday. 18568349Sobrien# 18668349Sobrien# This will cause very short GSM files to be declared as data and 18768349Sobrien# mismatches to be declared as data too! 18868349Sobrien#0 byte&0xF0 0xd0 data 18968349Sobrien#>33 byte&0xF0 0xd0 19068349Sobrien#>66 byte&0xF0 0xd0 19168349Sobrien#>99 byte&0xF0 0xd0 19268349Sobrien#>132 byte&0xF0 0xd0 GSM 06.10 compressed audio 19368349Sobrien 19468349Sobrien# lzop from <markus.oberhumer@jk.uni-linz.ac.at> 19568349Sobrien0 string \x89\x4c\x5a\x4f\x00\x0d\x0a\x1a\x0a lzop compressed data 19668349Sobrien>9 beshort <0x0940 19768349Sobrien>>9 byte&0xf0 =0x00 - version 0. 19868349Sobrien>>9 beshort&0x0fff x \b%03x, 19968349Sobrien>>13 byte 1 LZO1X-1, 20068349Sobrien>>13 byte 2 LZO1X-1(15), 20168349Sobrien>>13 byte 3 LZO1X-999, 20268349Sobrien## >>22 bedate >0 last modified: %s, 20368349Sobrien>>14 byte =0x00 os: MS-DOS 20468349Sobrien>>14 byte =0x01 os: Amiga 20568349Sobrien>>14 byte =0x02 os: VMS 20668349Sobrien>>14 byte =0x03 os: Unix 20768349Sobrien>>14 byte =0x05 os: Atari 20868349Sobrien>>14 byte =0x06 os: OS/2 20968349Sobrien>>14 byte =0x07 os: MacOS 21068349Sobrien>>14 byte =0x0A os: Tops/20 21168349Sobrien>>14 byte =0x0B os: WinNT 21268349Sobrien>>14 byte =0x0E os: Win32 21368349Sobrien>9 beshort >0x0939 21468349Sobrien>>9 byte&0xf0 =0x00 - version 0. 21568349Sobrien>>9 byte&0xf0 =0x10 - version 1. 21668349Sobrien>>9 byte&0xf0 =0x20 - version 2. 21768349Sobrien>>9 beshort&0x0fff x \b%03x, 21868349Sobrien>>15 byte 1 LZO1X-1, 21968349Sobrien>>15 byte 2 LZO1X-1(15), 22068349Sobrien>>15 byte 3 LZO1X-999, 22168349Sobrien## >>25 bedate >0 last modified: %s, 22268349Sobrien>>17 byte =0x00 os: MS-DOS 22368349Sobrien>>17 byte =0x01 os: Amiga 22468349Sobrien>>17 byte =0x02 os: VMS 22568349Sobrien>>17 byte =0x03 os: Unix 22668349Sobrien>>17 byte =0x05 os: Atari 22768349Sobrien>>17 byte =0x06 os: OS/2 22868349Sobrien>>17 byte =0x07 os: MacOS 22968349Sobrien>>17 byte =0x0A os: Tops/20 23068349Sobrien>>17 byte =0x0B os: WinNT 23168349Sobrien>>17 byte =0x0E os: Win32 232103373Sobrien 233103373Sobrien# 4.3BSD-Quasijarus Strong Compression 234354939Sdelphij# https://minnie.tuhs.org/Quasijarus/compress.html 235103373Sobrien0 string \037\241 Quasijarus strong compressed data 236110949Sobrien 237110949Sobrien# From: Cory Dikkers <cdikkers@swbell.net> 238110949Sobrien0 string XPKF Amiga xpkf.library compressed data 239110949Sobrien0 string PP11 Power Packer 1.1 compressed data 240110949Sobrien0 string PP20 Power Packer 2.0 compressed data, 241110949Sobrien>4 belong 0x09090909 fast compression 242110949Sobrien>4 belong 0x090A0A0A mediocre compression 243110949Sobrien>4 belong 0x090A0B0B good compression 244110949Sobrien>4 belong 0x090A0C0C very good compression 245110949Sobrien>4 belong 0x090A0C0D best compression 246110949Sobrien 247159764Sobrien# 7-zip archiver, from Thomas Klausner (wiz@danbala.tuwien.ac.at) 248354939Sdelphij# https://www.7-zip.org or DOC/7zFormat.txt 249110949Sobrien# 250159764Sobrien0 string 7z\274\257\047\034 7-zip archive data, 251110949Sobrien>6 byte x version %d 252110949Sobrien>7 byte x \b.%d 253226048Sobrien!:mime application/x-7z-compressed 254298192Sdelphij!:ext 7z/cb7 255133359Sobrien 256186690Sobrien# Type: LZMA 257234250Sobrien0 lelong&0xffffff =0x5d 258267843Sdelphij>12 leshort 0xff LZMA compressed data, 259267843Sdelphij!:mime application/x-lzma 260234250Sobrien>>5 lequad =0xffffffffffffffff streamed 261234250Sobrien>>5 lequad !0xffffffffffffffff non-streamed, size %lld 262267843Sdelphij>12 leshort 0 LZMA compressed data, 263267843Sdelphij>>5 lequad =0xffffffffffffffff streamed 264267843Sdelphij>>5 lequad !0xffffffffffffffff non-streamed, size %lld 265186690Sobrien 266192348Sdelphij# http://tukaani.org/xz/xz-file-format.txt 267226048Sobrien0 ustring \xFD7zXZ\x00 XZ compressed data 268284237Sdelphij!:strength * 2 269192348Sdelphij!:mime application/x-xz 270192348Sdelphij 271226048Sobrien# https://github.com/ckolivas/lrzip/blob/master/doc/magic.header.txt 272226048Sobrien0 string LRZI LRZIP compressed data 273226048Sobrien>4 byte x - version %d 274226048Sobrien>5 byte x \b.%d 275226048Sobrien!:mime application/x-lrzip 276226048Sobrien 277354939Sdelphij# https://fastcompression.blogspot.fi/2013/04/lz4-streaming-format-final.html 278267843Sdelphij0 lelong 0x184d2204 LZ4 compressed data (v1.4+) 279267843Sdelphij!:mime application/x-lz4 280267843Sdelphij# Added by osm0sis@xda-developers.com 281267843Sdelphij0 lelong 0x184c2103 LZ4 compressed data (v1.0-v1.3) 282267843Sdelphij!:mime application/x-lz4 283267843Sdelphij0 lelong 0x184c2102 LZ4 compressed data (v0.1-v0.9) 284267843Sdelphij!:mime application/x-lz4 285267843Sdelphij 286309847Sdelphij# Zstandard/LZ4 skippable frames 287309847Sdelphij# https://github.com/facebook/zstd/blob/dev/zstd_compression_format.md 288309847Sdelphij0 lelong&0xFFFFFFF0 0x184D2A50 289328874Seadler>(4.l+8) indirect x 290309847Sdelphij 291309847Sdelphij# Zstandard Dictionary ID subroutine 292309847Sdelphij0 name zstd-dictionary-id 293309847Sdelphij# Single Segment = True 294309847Sdelphij>0 byte &0x20 \b, Dictionary ID: 295309847Sdelphij>>0 byte&0x03 0 None 296309847Sdelphij>>0 byte&0x03 1 297309847Sdelphij>>>1 byte x %u 298309847Sdelphij>>0 byte&0x03 2 299309847Sdelphij>>>1 leshort x %u 300309847Sdelphij>>0 byte&0x03 3 301309847Sdelphij>>>1 lelong x %u 302309847Sdelphij# Single Segment = False 303309847Sdelphij>0 byte ^0x20 \b, Dictionary ID: 304309847Sdelphij>>0 byte&0x03 0 None 305309847Sdelphij>>0 byte&0x03 1 306309847Sdelphij>>>2 byte x %u 307309847Sdelphij>>0 byte&0x03 2 308309847Sdelphij>>>2 leshort x %u 309309847Sdelphij>>0 byte&0x03 3 310309847Sdelphij>>>2 lelong x %u 311309847Sdelphij 312309847Sdelphij# Zstandard compressed data 313309847Sdelphij# https://github.com/facebook/zstd/blob/dev/zstd_compression_format.md 314309847Sdelphij0 lelong 0xFD2FB522 Zstandard compressed data (v0.2) 315360521Sdelphij!:mime application/zstd 316309847Sdelphij0 lelong 0xFD2FB523 Zstandard compressed data (v0.3) 317360521Sdelphij!:mime application/zstd 318309847Sdelphij0 lelong 0xFD2FB524 Zstandard compressed data (v0.4) 319360521Sdelphij!:mime application/zstd 320309847Sdelphij0 lelong 0xFD2FB525 Zstandard compressed data (v0.5) 321360521Sdelphij!:mime application/zstd 322309847Sdelphij0 lelong 0xFD2FB526 Zstandard compressed data (v0.6) 323360521Sdelphij!:mime application/zstd 324309847Sdelphij0 lelong 0xFD2FB527 Zstandard compressed data (v0.7) 325360521Sdelphij!:mime application/zstd 326309847Sdelphij>4 use zstd-dictionary-id 327309847Sdelphij0 lelong 0xFD2FB528 Zstandard compressed data (v0.8+) 328360521Sdelphij!:mime application/zstd 329309847Sdelphij>4 use zstd-dictionary-id 330309847Sdelphij 331309847Sdelphij# https://github.com/facebook/zstd/blob/dev/zstd_compression_format.md 332309847Sdelphij0 lelong 0xEC30A437 Zstandard dictionary 333360521Sdelphij!:mime application/x-std-dictionary 334309847Sdelphij>4 lelong x (ID %u) 335309847Sdelphij 336133359Sobrien# AFX compressed files (Wolfram Kleff) 337133359Sobrien2 string -afx- AFX compressed file data 338159764Sobrien 339159764Sobrien# Supplementary magic data for the file(1) command to support 340159764Sobrien# rzip(1). The format is described in magic(5). 341159764Sobrien# 342159764Sobrien# Copyright (C) 2003 by Andrew Tridgell. You may do whatever you want with 343159764Sobrien# this file. 344159764Sobrien# 345159764Sobrien0 string RZIP rzip compressed data 346159764Sobrien>4 byte x - version %d 347159764Sobrien>5 byte x \b.%d 348159764Sobrien>6 belong x (%d bytes) 349192348Sdelphij 350226048Sobrien0 string ArC\x01 FreeArc archive <http://freearc.org> 351226048Sobrien 352226048Sobrien# Type: DACT compressed files 353226048Sobrien0 long 0x444354C3 DACT compressed data 354226048Sobrien>4 byte >-1 (version %i. 355226048Sobrien>5 byte >-1 %i. 356226048Sobrien>6 byte >-1 %i) 357226048Sobrien>7 long >0 , original size: %i bytes 358226048Sobrien>15 long >30 , block size: %i bytes 359267843Sdelphij 360267843Sdelphij# Valve Pack (VPK) files 361267843Sdelphij0 lelong 0x55aa1234 Valve Pak file 362267843Sdelphij>0x4 lelong x \b, version %u 363267843Sdelphij>0x8 lelong x \b, %u entries 364267843Sdelphij 365267843Sdelphij# Snappy framing format 366354939Sdelphij# https://code.google.com/p/snappy/source/browse/trunk/framing_format.txt 367267843Sdelphij0 string \377\006\0\0sNaPpY snappy framed data 368267843Sdelphij!:mime application/x-snappy-framed 369275698Sdelphij 370354939Sdelphij# qpress, https://www.quicklz.com/ 371275698Sdelphij0 string qpress10 qpress compressed data 372275698Sdelphij!:mime application/x-qpress 373275698Sdelphij 374275698Sdelphij# Zlib https://www.ietf.org/rfc/rfc6713.txt 375288143Sdelphij0 string/b x 376328874Seadler>0 beshort%31 =0 377288143Sdelphij>>0 byte&0xf =8 378288143Sdelphij>>>0 byte&0x80 =0 zlib compressed data 379275698Sdelphij!:mime application/zlib 380337827Seadler 381337827Seadler# BWC compression 382337827Seadler0 string BWC 383337827Seadler>3 byte 0 BWC compressed data 384337827Seadler 385337827Seadler# UCL compression 386337827Seadler0 bequad 0x00e955434cff011a UCL compressed data 387337827Seadler 388337827Seadler# Softlib archive 389337827Seadler0 string SLIB Softlib archive 390337827Seadler>4 leshort x \b, version %d 391337827Seadler>6 leshort x (contains %d files) 392337827Seadler 393337827Seadler# URL: https://github.com/lzfse/lzfse/blob/master/src/lzfse_internal.h#L276 394337827Seadler# From: Eric Hall <eric.hall@darkart.com> 395337827Seadler0 string bvx- lzfse encoded, no compression 396337827Seadler0 string bvx1 lzfse compressed, uncompressed tables 397337827Seadler0 string bvx2 lzfse compressed, compressed tables 398337827Seadler0 string bvxn lzfse encoded, lzvn compressed 399362844Sdelphij 400362844Sdelphij# pcxLib.exe compression program 401362844Sdelphij# http://www.shikadi.net/moddingwiki/PCX_Library 402362844Sdelphij0 string/b pcxLib 403362844Sdelphij>0x0A string/b Copyright\020(c)\020Genus\020Microprogramming,\020Inc. pcxLib compressed 404