macintosh revision 159764
1 2#------------------------------------------------------------------------------ 3# macintosh description 4# 5# BinHex is the Macintosh ASCII-encoded file format (see also "apple") 6# Daniel Quinlan, quinlan@yggdrasil.com 711 string must\ be\ converted\ with\ BinHex BinHex binary text 8>41 string x \b, version %.3s 9 10# Stuffit archives are the de facto standard of compression for Macintosh 11# files obtained from most archives. (franklsm@tuns.ca) 120 string SIT! StuffIt Archive (data) 13>2 string x : %s 140 string SITD StuffIt Deluxe (data) 15>2 string x : %s 160 string Seg StuffIt Deluxe Segment (data) 17>2 string x : %s 18 19# Newer StuffIt archives (grant@netbsd.org) 200 string StuffIt StuffIt Archive 21#>162 string >0 : %s 22 23# Macintosh Applications and Installation binaries (franklsm@tuns.ca) 240 string APPL Macintosh Application (data) 25>2 string x \b: %s 26 27# Macintosh System files (franklsm@tuns.ca) 280 string zsys Macintosh System File (data) 290 string FNDR Macintosh Finder (data) 300 string libr Macintosh Library (data) 31>2 string x : %s 320 string shlb Macintosh Shared Library (data) 33>2 string x : %s 340 string cdev Macintosh Control Panel (data) 35>2 string x : %s 360 string INIT Macintosh Extension (data) 37>2 string x : %s 380 string FFIL Macintosh Truetype Font (data) 39>2 string x : %s 400 string LWFN Macintosh Postscript Font (data) 41>2 string x : %s 42 43# Additional Macintosh Files (franklsm@tuns.ca) 440 string PACT Macintosh Compact Pro Archive (data) 45>2 string x : %s 460 string ttro Macintosh TeachText File (data) 47>2 string x : %s 480 string TEXT Macintosh TeachText File (data) 49>2 string x : %s 500 string PDF Macintosh PDF File (data) 51>2 string x : %s 52 53# MacBinary format (Eric Fischer, enf@pobox.com) 54# 55# Unfortunately MacBinary doesn't really have a magic number prior 56# to the MacBinary III format. The checksum is really the way to 57# do it, but the magic file format isn't up to the challenge. 58# 59# 0 byte 0 60# 1 byte # filename length 61# 2 string # filename 62# 65 string # file type 63# 69 string # file creator 64# 73 byte # Finder flags 65# 74 byte 0 66# 75 beshort # vertical posn in window 67# 77 beshort # horiz posn in window 68# 79 beshort # window or folder ID 69# 81 byte # protected? 70# 82 byte 0 71# 83 belong # length of data segment 72# 87 belong # length of resource segment 73# 91 belong # file creation date 74# 95 belong # file modification date 75# 99 beshort # length of comment after resource 76# 101 byte # new Finder flags 77# 102 string mBIN # (only in MacBinary III) 78# 106 byte # char. code of file name 79# 107 byte # still more Finder flags 80# 116 belong # total file length 81# 120 beshort # length of add'l header 82# 122 byte 129 # for MacBinary II 83# 122 byte 130 # for MacBinary III 84# 123 byte 129 # minimum version that can read fmt 85# 124 beshort # checksum 86# 87# This attempts to use the version numbers as a magic number, requiring 88# that the first one be 0x80, 0x81, 0x82, or 0x83, and that the second 89# be 0x81. This works for the files I have, but maybe not for everyone's. 90 91# Unfortunately, this magic is quite weak - MPi 92#122 beshort&0xFCFF 0x8081 Macintosh MacBinary data 93 94# MacBinary I doesn't have the version number field at all, but MacBinary II 95# has been in use since 1987 so I hope there aren't many really old files 96# floating around that this will miss. The original spec calls for using 97# the nulls in 0, 74, and 82 as the magic number. 98# 99# Another possibility, that would also work for MacBinary I, is to use 100# the assumption that 65-72 will all be ASCII (0x20-0x7F), that 73 will 101# have bits 1 (changed), 2 (busy), 3 (bozo), and 6 (invisible) unset, 102# and that 74 will be 0. So something like 103# 104# 71 belong&0x80804EFF 0x00000000 Macintosh MacBinary data 105# 106# >73 byte&0x01 0x01 \b, inited 107# >73 byte&0x02 0x02 \b, changed 108# >73 byte&0x04 0x04 \b, busy 109# >73 byte&0x08 0x08 \b, bozo 110# >73 byte&0x10 0x10 \b, system 111# >73 byte&0x10 0x20 \b, bundle 112# >73 byte&0x10 0x40 \b, invisible 113# >73 byte&0x10 0x80 \b, locked 114 115#>65 string x \b, type "%4.4s" 116 117#>65 string 8BIM (PhotoShop) 118#>65 string ALB3 (PageMaker 3) 119#>65 string ALB4 (PageMaker 4) 120#>65 string ALT3 (PageMaker 3) 121#>65 string APPL (application) 122#>65 string AWWP (AppleWorks word processor) 123#>65 string CIRC (simulated circuit) 124#>65 string DRWG (MacDraw) 125#>65 string EPSF (Encapsulated PostScript) 126#>65 string FFIL (font suitcase) 127#>65 string FKEY (function key) 128#>65 string FNDR (Macintosh Finder) 129#>65 string GIFf (GIF image) 130#>65 string Gzip (GNU gzip) 131#>65 string INIT (system extension) 132#>65 string LIB\ (library) 133#>65 string LWFN (PostScript font) 134#>65 string MSBC (Microsoft BASIC) 135#>65 string PACT (Compact Pro archive) 136#>65 string PDF\ (Portable Document Format) 137#>65 string PICT (picture) 138#>65 string PNTG (MacPaint picture) 139#>65 string PREF (preferences) 140#>65 string PROJ (Think C project) 141#>65 string QPRJ (Think Pascal project) 142#>65 string SCFL (Defender scores) 143#>65 string SCRN (startup screen) 144#>65 string SITD (StuffIt Deluxe) 145#>65 string SPn3 (SuperPaint) 146#>65 string STAK (HyperCard stack) 147#>65 string Seg\ (StuffIt segment) 148#>65 string TARF (Unix tar archive) 149#>65 string TEXT (ASCII) 150#>65 string TIFF (TIFF image) 151#>65 string TOVF (Eudora table of contents) 152#>65 string WDBN (Microsoft Word word processor) 153#>65 string WORD (MacWrite word processor) 154#>65 string XLS\ (Microsoft Excel) 155#>65 string ZIVM (compress (.Z)) 156#>65 string ZSYS (Pre-System 7 system file) 157#>65 string acf3 (Aldus FreeHand) 158#>65 string cdev (control panel) 159#>65 string dfil (Desk Acessory suitcase) 160#>65 string libr (library) 161#>65 string nX^d (WriteNow word processor) 162#>65 string nX^w (WriteNow dictionary) 163#>65 string rsrc (resource) 164#>65 string scbk (Scrapbook) 165#>65 string shlb (shared library) 166#>65 string ttro (SimpleText read-only) 167#>65 string zsys (system file) 168 169#>69 string x \b, creator "%4.4s" 170 171# Somewhere, Apple has a repository of registered Creator IDs. These are 172# just the ones that I happened to have files from and was able to identify. 173 174#>69 string 8BIM (Adobe Photoshop) 175#>69 string ALD3 (PageMaker 3) 176#>69 string ALD4 (PageMaker 4) 177#>69 string ALFA (Alpha editor) 178#>69 string APLS (Apple Scanner) 179#>69 string APSC (Apple Scanner) 180#>69 string BRKL (Brickles) 181#>69 string BTFT (BitFont) 182#>69 string CCL2 (Common Lisp 2) 183#>69 string CCL\ (Common Lisp) 184#>69 string CDmo (The Talking Moose) 185#>69 string CPCT (Compact Pro) 186#>69 string CSOm (Eudora) 187#>69 string DMOV (Font/DA Mover) 188#>69 string DSIM (DigSim) 189#>69 string EDIT (Macintosh Edit) 190#>69 string ERIK (Macintosh Finder) 191#>69 string EXTR (self-extracting archive) 192#>69 string Gzip (GNU gzip) 193#>69 string KAHL (Think C) 194#>69 string LWFU (LaserWriter Utility) 195#>69 string LZIV (compress) 196#>69 string MACA (MacWrite) 197#>69 string MACS (Macintosh operating system) 198#>69 string MAcK (MacKnowledge terminal emulator) 199#>69 string MLND (Defender) 200#>69 string MPNT (MacPaint) 201#>69 string MSBB (Microsoft BASIC (binary)) 202#>69 string MSWD (Microsoft Word) 203#>69 string NCSA (NCSA Telnet) 204#>69 string PJMM (Think Pascal) 205#>69 string PSAL (Hunt the Wumpus) 206#>69 string PSI2 (Apple File Exchange) 207#>69 string R*ch (BBEdit) 208#>69 string RMKR (Resource Maker) 209#>69 string RSED (Resource Editor) 210#>69 string Rich (BBEdit) 211#>69 string SIT! (StuffIt) 212#>69 string SPNT (SuperPaint) 213#>69 string Unix (NeXT Mac filesystem) 214#>69 string VIM! (Vim editor) 215#>69 string WILD (HyperCard) 216#>69 string XCEL (Microsoft Excel) 217#>69 string aCa2 (Fontographer) 218#>69 string aca3 (Aldus FreeHand) 219#>69 string dosa (Macintosh MS-DOS file system) 220#>69 string movr (Font/DA Mover) 221#>69 string nX^n (WriteNow) 222#>69 string pdos (Apple ProDOS file system) 223#>69 string scbk (Scrapbook) 224#>69 string ttxt (SimpleText) 225#>69 string ufox (Foreign File Access) 226 227# Just in case... 228 229102 string mBIN MacBinary III data with surprising version number 230 231# sas magic from Bruce Foster (bef@nwu.edu) 232# 233#0 string SAS SAS 234#>8 string x %s 2350 string SAS SAS 236>24 string DATA data file 237>24 string CATALOG catalog 238>24 string INDEX data file index 239>24 string VIEW data view 240# sas 7+ magic from Reinhold Koch (reinhold.koch@roche.com) 241# 2420x54 string SAS SAS 7+ 243>0x9C string DATA data file 244>0x9C string CATALOG catalog 245>0x9C string INDEX data file index 246>0x9C string VIEW data view 247 248# spss magic for SPSS system and portable files, 249# from Bruce Foster (bef@nwu.edu). 250 2510 long 0xc1e2c3c9 SPSS Portable File 252>40 string x %s 253 2540 string $FL2 SPSS System File 255>24 string x %s 256 257# Macintosh filesystem data 258# From "Tom N Harris" <telliamed@mac.com> 259# Fixed HFS+ and Partition map magic: Ethan Benson <erbenson@alaska.net> 260# The MacOS epoch begins on 1 Jan 1904 instead of 1 Jan 1970, so these 261# entries depend on the data arithmetic added after v.35 262# There's also some Pascal strings in here, ditto... 263 264# The boot block signature, according to IM:Files, is 265# "for HFS volumes, this field always contains the value 0x4C4B." 266# But if this is true for MFS or HFS+ volumes, I don't know. 267# Alternatively, the boot block is supposed to be zeroed if it's 268# unused, so a simply >0 should suffice. 269 2700x400 beshort 0xD2D7 Macintosh MFS data 271>0 beshort 0x4C4B (bootable) 272>0x40a beshort &0x8000 (locked) 273>0x402 beldate-0x7C25B080 x created: %s, 274>0x406 beldate-0x7C25B080 >0 last backup: %s, 275>0x414 belong x block size: %d, 276>0x412 beshort x number of blocks: %d, 277>0x424 pstring x volume name: %s 278 279# "BD" is has many false positives 280#0x400 beshort 0x4244 Macintosh HFS data 281#>0 beshort 0x4C4B (bootable) 282#>0x40a beshort &0x8000 (locked) 283#>0x40a beshort ^0x0100 (mounted) 284#>0x40a beshort &0x0200 (spared blocks) 285#>0x40a beshort &0x0800 (unclean) 286#>0x47C beshort 0x482B (Embedded HFS+ Volume) 287#>0x402 beldate-0x7C25B080 x created: %s, 288#>0x406 beldate-0x7C25B080 x last modified: %s, 289#>0x440 beldate-0x7C25B080 >0 last backup: %s, 290#>0x414 belong x block size: %d, 291#>0x412 beshort x number of blocks: %d, 292#>0x424 pstring x volume name: %s 293 2940x400 beshort 0x482B Macintosh HFS Extended 295>&0 beshort x version %d data 296>0 beshort 0x4C4B (bootable) 297>0x404 belong ^0x00000100 (mounted) 298>&2 belong &0x00000200 (spared blocks) 299>&2 belong &0x00000800 (unclean) 300>&2 belong &0x00008000 (locked) 301>&6 string x last mounted by: '%.4s', 302# really, that should be treated as a belong and we print a string 303# based on the value. TN1150 only mentions '8.10' for "MacOS 8.1" 304>&14 beldate-0x7C25B080 x created: %s, 305# only the creation date is local time, all other timestamps in HFS+ are UTC. 306>&18 bedate-0x7C25B080 x last modified: %s, 307>&22 bedate-0x7C25B080 >0 last backup: %s, 308>&26 bedate-0x7C25B080 >0 last checked: %s, 309>&38 belong x block size: %d, 310>&42 belong x number of blocks: %d, 311>&46 belong x free blocks: %d 312 313# I don't think this is really necessary since it doesn't do much and 314# anything with a valid driver descriptor will also have a valid 315# partition map 316#0 beshort 0x4552 Apple Device Driver data 317#>&24 beshort =1 \b, MacOS 318 319# Is that the partition type a cstring or a pstring? Well, IM says "strings 320# shorter than 32 bytes must be terminated with NULL" so I'll treat it as a 321# cstring. Of course, partitions can contain more than four entries, but 322# what're you gonna do? 3230x200 beshort 0x504D Apple Partition data 324>0x2 beshort x block size: %d, 325>0x230 string x first type: %s, 326>0x210 string x name: %s, 327>0x254 belong x number of blocks: %d, 328>0x400 beshort 0x504D 329>>0x430 string x second type: %s, 330>>0x410 string x name: %s, 331>>0x454 belong x number of blocks: %d, 332>>0x800 beshort 0x504D 333>>>0x830 string x third type: %s, 334>>>0x810 string x name: %s, 335>>>0x854 belong x number of blocks: %d, 336>>>0xa00 beshort 0x504D 337>>>>0xa30 string x fourth type: %s, 338>>>>0xa10 string x name: %s, 339>>>>0xa54 belong x number of blocks: %d 340# AFAIK, only the signature is different 3410x200 beshort 0x5453 Apple Old Partition data 342>0x2 beshort x block size: %d, 343>0x230 string x first type: %s, 344>0x210 string x name: %s, 345>0x254 belong x number of blocks: %d, 346>0x400 beshort 0x504D 347>>0x430 string x second type: %s, 348>>0x410 string x name: %s, 349>>0x454 belong x number of blocks: %d, 350>>0x800 beshort 0x504D 351>>>0x830 string x third type: %s, 352>>>0x810 string x name: %s, 353>>>0x854 belong x number of blocks: %d, 354>>>0xa00 beshort 0x504D 355>>>>0xa30 string x fourth type: %s, 356>>>>0xa10 string x name: %s, 357>>>>0xa54 belong x number of blocks: %d 358 359# From: Remi Mommsen <mommsen@slac.stanford.edu> 3600 string BOMStore Mac OS X bill of materials (BOM) fil 361