
            **********************************************
            * QuickTime 5 Install/Archive Package Format *
            **********************************************

 - values use big endian (network) byte order
 - general terms: integer = signed value
 - general values: byte = 8-bit value; short/word = 16-bit value; long = 32-bit value
 - octal values: base-8 long unsigned values (values containing 8 and 9 are invalid)
 - atom offsets: values relative to atoms only and are used to skip to the next atom
 - long mac file version: byte hex version + byte hex revision + byte hex revision stage + byte hex non-final number
 - mac version revision stages: development = 0x20 ; alpha = 0x40 ; beta = 0x60 ; release = 0x80

FILE INFO

Suffix = ".pkg";  Mac OS Type = "pack";  Mac OS Creator = "qtup";  MIME="application/x-quicktime-install-package"

Standard single fork binary file that only uses a resource fork on HFS/HFS+ volumes to store mac
specific file info.

Unknown atoms can be safely skipped over, atoms can be in any order, all lowercase long ASCII text strings
used for atom names/types are reserved for use by Apple and packages can contain multiple file atoms.

The format is limited to a total size of 2^32 bytes (< 4.3 GB).

FILE CONTAINER/HEADER

* 8+ bytes package container atom = long unsigned offset + long ASCII text string 'pckg'

   * 8+ bytes optional package file name atom = long unsigned offset + long ASCII text string 'pnam'
     -> name of this file = ASCII text string

   * 8+ bytes optional package title name atom = long unsigned offset + long ASCII text string 'punm'
     -> display name = ASCII text string

   * 8+ bytes optional target os atom = long unsigned offset + long ASCII text string 'tos '
     -> 3 bytes os type = 24-bit ASCII text string
       - OS types are Mac OS = 'mac'; Mac OS X = 'osx'; MS 32-bit Windows = 'win'

   * 8+ bytes optional target language atom = long unsigned offset + long ASCII text string 'lang'
     -> 2 bytes language code = short ASCII text string
       - some language codes are English - North American = 'us'; English - British = 'uk'
       - some language codes are German = 'de'; French = 'fr'; Italian = 'it'

   * 8+ bytes optional package task atom = long unsigned offset + long ASCII text string 'pact'
     -> 4 bytes system code = long ASCII text string
       - a system code for Restart = 'rsrt'

   * 8+ bytes optional license atom = long unsigned offset + long ASCII text string 'lice'

      * 8+ bytes optional license maintainer atom = long unsigned offset + long ASCII text string 'lcmn'
        -> 4 bytes company code = long ASCII text string
          - a company code for Apple = 'appl'

      * 8+ bytes optional license ID atom = long unsigned offset + long ASCII text string 'lcid'
        -> 4 bytes unique ID = long integer

      * 8+ bytes optional license language atom = long unsigned offset + long ASCII text string 'lang'
        -> 2 bytes language code = short ASCII text string
          - some language codes are English - North American = 'us'; English - British = 'uk'
          - some language codes are German = 'de'; French = 'fr'; Italian = 'it'

      * 8+ bytes optional license agree atom = long unsigned offset + long ASCII text string 'lcag'
        -> button name = ASCII text string

      * 8+ bytes optional license disagree atom = long unsigned offset + long ASCII text string 'lcdg'
        -> button name = ASCII text string

      * 8+ bytes license text atom = long unsigned offset + long ASCII text string 'lctx'
        -> user viewable text = ASCII text dump

   * 8+ bytes file atom = long unsigned offset + long ASCII text string 'file'

      * 8+ bytes compression atom = long unsigned offset + long ASCII text string 'comp'
        -> 4 bytes compression code = long ASCII text string
          - a compression code for Deflate = 'zlib'

      * 8+ bytes optional version atom = long unsigned offset + long ASCII text string 'vers'
        -> 4 bytes mac file version = long hex value (see above)

      * 8+ bytes optional file modified date atom = long unsigned offset + long ASCII text string 'fmdt'
        -> 4 bytes mac file date = long unsigned value in seconds since beginning 1904 to 2040

      * 8+ bytes displayed file name atom = long unsigned offset + long ASCII text string 'fnam'
        -> displayed file name = ASCII text string

      * 8+ bytes unpacked file name atom = long unsigned offset + long ASCII text string 'unam'
        -> actual file name = ASCII text string

      * 8+ bytes file creator atom = long unsigned offset + long ASCII text string 'fcrt'
        -> 4 bytes mac os creator code = long ASCII text string

      * 8+ bytes file type atom = long unsigned offset + long ASCII text string 'ftyp'
        -> 4 bytes mac os type code = long ASCII text string

      * 8+ bytes location atom = long unsigned offset + long ASCII text string 'loca'
        -> 4 bytes install location code = long ASCII text string
          - some location codes are qt app directory = 0x7174C420 ; system directory = 'macs'
          - some location codes are system init directory = 'extn' ; qt system directory = 'qtex'
          - some location codes are web browser directories = 0xC46E6574 ; system cdev directory = 'ctrl'
          - some location codes are control strip folder = 'sdev' ; loc. manager folder = 'walk'
          - some location codes are mac os runtime java folder = 0x6D726AC4 ; os x qt system directory = 'qt3c'

      * 8+ bytes installer action atom = long unsigned offset + long ASCII text string 'inac'
        -> 4 bytes installer action code = long ASCII text string
          - some installer action codes are plain file = 'file' ; system add-on = 'init'
          - some installer action codes for system component = 'thng'

      * 8+ bytes data fork atom = long unsigned offset + long ASCII text string 'dfrk'
        -> 4 bytes uncompressed size = long unsigned value
        -> compressed data = hex dump

      * 8+ bytes mac resource fork atom = long unsigned offset + long ASCII text string 'rfrk'
        -> 4 bytes uncompressed size = long unsigned value
        -> compressed data = hex dump
