home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Spezial / SPEZIAL2_97.zip / SPEZIAL2_97.iso / ANWEND / EDITOR / BE / BE.INI < prev    next >
Text File  |  1997-04-19  |  28KB  |  1,061 lines

  1. //
  2. // Binary Editor configuration file
  3. //
  4. // This default initialisation file has definitions to aid in the decoding
  5. // and display of bitmap headers, palettes and data of various formats.
  6. // This file may be extended to allow decoding of other file formats too.
  7. // It is admitted that the field names used to describe the various fields
  8. // may or may not match up that given in the official documentation.
  9. // 
  10.  
  11. // Some handy things to have around
  12.  
  13. map bool { "TRUE" 1 "FALSE" 0 }
  14.  
  15. def BYTE  { n8  hex "byte"  } def BYTES  { 2048 n8  hex "bytes"  }
  16. def WORD  { n16 hex "word"  } def WORDS  { 2048 n16 hex "words"  }
  17. def DWORD { n32 hex "dword" } def DWORDS { 2048 n32 hex "dwords" }
  18.  
  19. def DBLINE union { 8 n8  hex "bytes"  buf 8  asc "chars"  }
  20. def DWLINE union { 4 n16 hex "words"  buf 8  asc "chars"  }
  21. def DDLINE union { 4 n32 hex "dwords" buf 16 asc "chars " }
  22. def DB { 4096 DBLINE open open open "lines" }
  23. def DW { 4096 DWLINE open open open "lines" }
  24. def DD { 4096 DDLINE open open open "lines" }
  25.  
  26. unsigned dec
  27.  
  28. //
  29. // OS/2 and Windows Bitmap File Format
  30. // Decode the headers and palettes, but not the bitmap bits
  31. //
  32.  
  33. le
  34.  
  35. map BFT_ // bitmap file type
  36.     {
  37.     "BFT_ICON"         0x4349 // 'IC'
  38.     "BFT_BMAP"         0x4d42 // 'BM'
  39.     "BFT_POINTER"      0x5450 // 'PT'
  40.     "BFT_COLORICON"    0x4943 // 'CI'
  41.     "BFT_COLORPOINTER" 0x5043 // 'CP'
  42.     "BFT_BITMAPARRAY"  0x4142 // 'BA'
  43.     }
  44.  
  45. map BCA_ // ulCompression
  46.     {
  47.     "BCA_UNCOMP"    0
  48.     "BCA_RLE8"      1
  49.     "BCA_RLE4"      2
  50.     "BCA_HUFFMAN1D" 3
  51.     "BCA_RLE24"     4
  52.     }
  53.  
  54. map BRU_ // units
  55.     {
  56.     "BRU_METRIC" 0
  57.     }
  58.  
  59. map BRA_ // algorithm
  60.     {
  61.     "BRA_BOTTOMUP" 0
  62.     }
  63.  
  64. map BRH_ // halftoning alg
  65.     {
  66.     "BRH_NOTHALFTONED"   0
  67.     "BRH_ERRORDIFFUSION" 1
  68.     "BRH_PANDA"          2
  69.     "BRH_SUPERCIRCLE"    3
  70.     }
  71.  
  72. def RGB
  73.     {
  74.     n8 hex "bBlue "
  75.     n8 hex "bGreen"
  76.     n8 hex "bRed  "
  77.     }
  78.  
  79. def RGB2
  80.     {
  81.     n8 hex "bBlue    "
  82.     n8 hex "bGreen   "
  83.     n8 hex "bRed     "
  84.     n8 hex "fcOptions"
  85.     }
  86.  
  87. def BMP_PALETTE_11
  88.     {
  89.     0x100 RGB "argbColor"
  90.     }
  91.  
  92. def BMP_INFO_HEADER_11
  93.     {
  94.     n32 ptr BMP_PALETTE_11 "cbFix    "
  95.     n16                    "cx       "
  96.     n16                    "cy       "
  97.     n16                    "cPlanes  "
  98.     n16                    "cBitCount"
  99.     }
  100.  
  101. def BMP_PALETTE_20
  102.     {
  103.     0x100 RGB2 "argbColor"
  104.     }
  105.  
  106. def BMP_INFO_HEADER_20
  107.     {
  108.     n32 ptr BMP_PALETTE_20 rel "cbFix          "
  109.     n32                        "cx             "
  110.     n32                        "cy             "
  111.     n16                        "cPlanes        "
  112.     n16                        "cBitCount      "
  113.     n32 map BCA_               "ulCompression  "
  114.     n32                        "cbImage        "
  115.     n32                        "cxResolution   "
  116.     n32                        "cyResolution   "
  117.     n32                        "cclrUsed       "
  118.     n32                        "cclrImportant  "
  119.     n16 map BRU_               "usUnits        "
  120.     n16                        "usReserved     "
  121.     n16 map BRA_               "usRecording    "
  122.     n16 map BRH_               "usRendering    "
  123.     n32                        "cSize1         "
  124.     n32                        "cSize2         "
  125.     n32                        "ulColorEncoding"
  126.     n32 hex                    "ulIdentifier   "
  127.     }
  128.  
  129. def BMP_INFO_HEADER
  130.     {
  131.     n32                     "cbFix       "
  132.     at 0 BMP_INFO_HEADER_11 "if cbFix==12"
  133.     at 0 BMP_INFO_HEADER_20 "if cbFix>12 "
  134.     }
  135.  
  136. def BMP_FILE_HEADER
  137.     {
  138.     n16 map BFT_    "usType  "
  139.     n32             "cbSize  "
  140.     n16 signed      "xHotspot"
  141.     n16 signed      "yHotspot"
  142.     n32 hex         "offBits "
  143.     BMP_INFO_HEADER "bmp     "
  144.     }
  145.  
  146. def BMP_ARRAY_FILE_HEADER
  147.     {
  148.     n16 map BFT_                      "usType   "
  149.     n32                               "cbSize   "
  150.     n32 hex ptr BMP_ARRAY_FILE_HEADER "offNext  "
  151.     n16                               "cxDisplay"
  152.     n16                               "cyDisplay"
  153.     BMP_FILE_HEADER                   "bfh      "
  154.     }
  155.  
  156. def BMP_FILE
  157.     {
  158.     n16 map BFT_               "usType                    "
  159.     at 0 BMP_FILE_HEADER       "if usType==BFT_BMAP       "
  160.     at 0 BMP_ARRAY_FILE_HEADER "if usType==BFT_BITMAPARRAY"
  161.     }
  162.  
  163. //
  164. // Targa files
  165. // Just decode the header
  166. //
  167.  
  168. le
  169.  
  170. map TGA_
  171.     {
  172.     "TGA_NO_IMAGE"    0
  173.     "TGA_UNCOMP_CM"   1
  174.     "TGA_UNCOMP_RGB"  2
  175.     "TGA_UNCOMP_BW"   3
  176.     "TGA_RL_CM"       9
  177.     "TGA_RL_RGB"     10
  178.     "TGA_RL_BW"      11
  179.     "TGA_COMP_CM"    32
  180.     "TGA_COMP_CM_4"  33
  181.     }
  182.  
  183. map IDB_
  184.     {
  185.     "IDB_ORIGIN"  0x20 : 0x20
  186.     "IDB_NON_INT" 0x00 : 0xc0
  187.     "IDB_2_WAY"   0x40 : 0xc0
  188.     "IDB_4_WAY"   0x80 : 0xc0
  189.     }
  190.  
  191. def TGA_HEADER
  192.     {
  193.     n8          "n_chars_in_id       "
  194.     n8          "color_map_present   "
  195.     n8 map TGA_ "image_type          "
  196.     n16         "color_map_start     "
  197.     n16         "color_map_length    "
  198.     n8          "color_map_entry_bits"
  199.     n16         "x_origin            "
  200.     n16         "y_origin            "
  201.     n16         "width               "
  202.     n16         "height              "
  203.     n8          "bpp                 "
  204.     n8 map IDB_ "image_descriptor    "
  205.     }
  206.  
  207. def TGA_FILE
  208.     {
  209.     n8 ptr TGA_HEADER null "n_chars_in_id"
  210.     buf 255 asc            "id           "
  211.     }
  212.  
  213. //
  214. // KIPS files
  215. // Just decode the header
  216. //
  217.  
  218. def KPS_FILE
  219.     {
  220.     buf 8 asc  "signiture (=DFIMAG00)"
  221.     n16        "height               "
  222.     n16        "width                "
  223.     buf 20 hex "unknown              "
  224.     }
  225.  
  226. //
  227. // PCX file
  228. // Decode header with small inline 4bpp palette
  229. // Don't decode compressed bitmap bits or trailer with 8bpp palette
  230. //
  231.  
  232. map PCXENC_
  233.     {
  234.     "PCXENC_RLE" 1
  235.     }
  236.  
  237. def PCX_RGB
  238.     {
  239.     n8 hex "red  "
  240.     n8 hex "green"
  241.     n8 hex "blue "
  242.     }
  243.  
  244. def PCX_FILE
  245.     {
  246.     n8 hex         "magic# (=0x0a)      "
  247.     n8             "version (=0,1,2,3,5)"
  248.     n8 map PCXENC_ "compression         "
  249.     n8             "bpppp               "
  250.     n16            "x1                  "
  251.     n16            "y1                  "
  252.     n16            "x2                  "
  253.     n16            "y2                  "
  254.  
  255.     at 16
  256.     16 PCX_RGB     "4bpp palette        "
  257.  
  258.     at 65
  259.     n8             "planes              "
  260.     n16            "bytes_per_line      "
  261.     n8             "colour/bw           "
  262.  
  263.     at 0
  264.     8 buf 16 hex   "header as hex       "
  265.     }
  266.  
  267. //
  268. // M-Motion VID file
  269. //
  270.  
  271. le
  272.  
  273. def VID_FILE
  274.     {
  275.     buf 6 asc "signiture (=YUV12C)"
  276.     buf 2 hex "padding            "
  277.     n16       "xpos               "
  278.     n16       "ypos               "
  279.     n16       "xsize              "
  280.     n16       "ysize              "
  281.     }
  282.  
  283. //
  284. // TIFF file
  285. // Decode the file as little or big endian TIFF, depending upon the
  286. // BE_TIFF pre-processor symbol
  287. //
  288.  
  289. $ifdef BE_TIFF
  290. be
  291. $else
  292. le
  293. $endif
  294.  
  295. map TIFF_T
  296.     {
  297.     "T_NEWSUBFILETYPE"        254
  298.     "T_SUBFILETYPE"           255
  299.     "T_IMAGEWIDTH"            256
  300.     "T_IMAGELENGTH"           257
  301.     "T_BITSPERSAMPLE"         258
  302.     "T_COMPRESSION"           259
  303.     "T_PHOTOMETRIC"           262
  304.     "T_THRESHOLDING"          263
  305.     "T_CELLWIDTH"             264
  306.     "T_CELLLENGTH"            265
  307.     "T_FILLORDER"             266
  308.     "T_DOCNAME"               269
  309.     "T_DESCRIPTION"           270
  310.     "T_MAKE"                  271
  311.     "T_MODEL"                 272
  312.     "T_STRIPOFFSETS"          273
  313.     "T_ORIENTATION"           274
  314.     "T_SAMPLESPERPIXEL"       277
  315.     "T_ROWSPERSTRIP"          278
  316.     "T_STRIPBYTECOUNTS"       279
  317.     "T_MINSAMPLEVALUE"        280
  318.     "T_MAXSAMPLEVALUE"        281
  319.     "T_XRESOLUTION"           282
  320.     "T_YRESOLUTION"           283
  321.     "T_PLANARCONFIG"          284
  322.     "T_PAGENAME"              285
  323.     "T_XPOSITION"             286
  324.     "T_YPOSITION"             287
  325.     "T_FREEOFFSETS"           288
  326.     "T_FREEBYTECOUNTS"        289
  327.     "T_GRAYRESPONSEUNIT"      290
  328.     "T_GRAYRESPONSECURVE"     291
  329.     "T_GROUP3OPTIONS"         292
  330.     "T_GROUP4OPTIONS"         293
  331.     "T_RESOLUTIONUNIT"        296
  332.     "T_PAGENUMBER"            297
  333.     "T_COLORRESPONSECURVES"   301
  334.     "T_SOFTWARE"              305
  335.     "T_DATETIME"              306
  336.     "T_ARTIST"                315
  337.     "T_HOSTCOMPUTER"          316
  338.     "T_PREDICTOR"             317
  339.     "T_WHITEPOINT"            318
  340.     "T_PRIMARYCHROMA"         319
  341.     "T_COLORMAP"              320
  342.     "T_HALFTONEHINTS"         321
  343.     "T_TILEWIDTH"             322
  344.     "T_TILELENGTH"            323
  345.     "T_TILEOFFSETS"           324
  346.     "T_TILEBYTECOUNTS"        325
  347.     "T_INKSET"                332
  348.     "T_INKNAMES"              333
  349.     "T_NUMBEROFINKS"          334
  350.     "T_DOTRANGE"              336
  351.     "T_TARGETPRINTER"         337
  352.     "T_EXTRASAMPLES"          338
  353.     "T_SAMPLEFORMAT"          339
  354.     "T_SMINSAMPLEVALUE"       340
  355.     "T_SMAXSAMPLEVALUE"       341
  356.     "T_TRANSFERRANGE"         342
  357.     "T_JPEGPROC"              512
  358.     "T_JPEGINTERCHANGEFMT"    513
  359.     "T_JPEGINTERCHANGEFMTLEN" 514
  360.     "T_JPEGRESTARTINTERVAL"   515
  361.     "T_JPEGLOSSLESSPRED"      517
  362.     "T_JPEGPOINTTRANSFORMS"   518
  363.     "T_JPEGOTABLES"           519
  364.     "T_JPEGDCTABLES"          520
  365.     "T_JPEGACTABLES"          521
  366.     "T_COEFFICIENTS"          529
  367.     "T_SUBSAMPLING"           530
  368.     "T_REFERENCEBLACKWHITE"   532
  369.     }
  370.  
  371. map TIFF_D
  372.     {
  373.     "D_BYTE"       1
  374.     "D_ASCII"      2
  375.     "D_SHORT"      3
  376.     "D_LONG"       4
  377.     "D_RATIONAL"   5
  378.     "D_SBYTE"      6
  379.     "D_UNDEFINED"  7
  380.     "D_SSHORT"     8
  381.     "D_SLONG"      9
  382.     "D_SRATIONAL" 10
  383.     "D_FLOAT"     11
  384.     "D_DOUBLE"    12
  385.     }
  386.  
  387. def TIFF_RATIONAL
  388.     {
  389.     n32 unsigned "numerator  "
  390.     n32 unsigned "denominator"
  391.     }
  392.  
  393. def TIFF_SRATIONAL
  394.     {
  395.     n32 signed "numerator  "
  396.     n32 signed "denominator"
  397.     }
  398.  
  399. def TIFF_TAG_NI union
  400.     {
  401.     buf 100 asc                  "data (if D_ASCII)    "
  402.     100 n8 unsigned open         "data (if D_BYTE)     "
  403.     100 n8 signed open           "data (if D_SBYTE)    "
  404.     100 n16 unsigned open        "data (if D_SHORT)    "
  405.     100 n16 signed open          "data (if D_SSHORT)   "
  406.     100 n32 unsigned open        "data (if D_LONG)     "
  407.     100 n32 signed open          "data (if D_SLONG)    "
  408.     100 TIFF_RATIONAL open open  "data (if D_RATIONAL) "
  409.     100 TIFF_SRATIONAL open open "data (if D_SRATIONAL)"
  410.     100 buf 4 hex open           "data (if D_FLOAT)    "
  411.     100 buf 8 hex open           "data (if D_DOUBLE)   "
  412.     16 buf 16 hex                "data                 "
  413.     }
  414.  
  415. def TIFF_TAG
  416.     {
  417.     n16 map TIFF_T                     "type                "
  418.     n16 map TIFF_D                     "data_type           "
  419.     n32 dec                            "length              "
  420.     union
  421.       {
  422.       buf 4 asc               suppress "data (if D_ASCII)   "
  423.       4 n8 unsigned open      suppress "data (if D_BYTE     "
  424.       4 n8 signed open        suppress "data (if D_SBYTE)   "
  425.       2 n16 unsigned open     suppress "data (if D_SHORT)   "
  426.       2 n16 signed open       suppress "data (if D_SSHORT)  "
  427.       n32 unsigned            suppress "data (if D_LONG)    "
  428.       n32 signed              suppress "data (if D_SLONG)   "
  429.       buf 4 hex               suppress "data (if D_FLOAT)   "
  430.       n32 hex ptr TIFF_TAG_NI suppress "data (if non-inline)"
  431.       }
  432.     }
  433.  
  434. def TIFF_NEXT_IFD
  435.     {
  436.     n32 ptr TIFF_IFD "offset_ifd"
  437.     at 12
  438.     }
  439.  
  440. def TIFF_IFD
  441.     {
  442.     n16 ptr TIFF_NEXT_IFD mul add 2 rel "n_tags"
  443.     100 TIFF_TAG                        "tags  "
  444.     }
  445.  
  446. def TIFF_FILE
  447.     {
  448.     buf 2 asc        "byte_order (=II,MM) "
  449.     n16 dec          "version_number (=42)"
  450.     n32 ptr TIFF_IFD "offset_ifd          "
  451.     }
  452.  
  453. //
  454. // ILBM files
  455. // Decode chunk structure
  456. //
  457.  
  458. be
  459.  
  460. map ILBM_COMP_TYPE
  461.     {
  462.     "none" 0
  463.     "rle"  1
  464.     }
  465.  
  466. map ILBM_MASKING
  467.     {
  468.     "none"        0
  469.     "mask"        1
  470.     "transparent" 2
  471.     }
  472.  
  473. def ILBM_BMHD_DATA
  474.     {
  475.     n16                   "width       "
  476.     n16                   "height      "
  477.     n16                   "xpos        "
  478.     n16                   "ypos        "
  479.     n8                    "bitsperpixel"
  480.     n8 map ILBM_MASKING   "masking     "
  481.     n8 map ILBM_COMP_TYPE "compression "
  482.     n8 hex                "unused      "
  483.     n16                   "transcol    "
  484.     n8                    "xaspect     "
  485.     n8                    "yaspect     "
  486.     n16                   "xscreen     "
  487.     n16                   "yscreen     "
  488.     }
  489.  
  490. map ILBM_CAMG_VALUE
  491.     {
  492.     "lace"    0x00000004 : 0x00000004
  493.     "ehb"    0x00000080 : 0x00000080
  494.     "ham"    0x00000800 : 0x00000800
  495.     "hires"    0x00008000 : 0x00008000
  496.     }
  497.  
  498. def ILBM_RGB
  499.     {
  500.     n8 hex "red  "
  501.     n8 hex "green"
  502.     n8 hex "blue "
  503.     }
  504.  
  505. def ILBM_SHAM_PAL
  506.     {
  507.     16 ILBM_RGB "0rgb's"
  508.     }
  509.  
  510. def ILBM_SHAM_DATA
  511.     {
  512.     n16               "sham version (=0)"
  513.     200 ILBM_SHAM_PAL "sham palettes    "
  514.     }
  515.  
  516. // note that chunk next pointer may require size rounding up by one
  517. // note size decoded first for ease of navigation
  518.  
  519. def ILBM_CHUNK
  520.     {
  521.     buf 4 asc                            "name            "
  522.     n32 ptr ILBM_CHUNK add 4 rel align 2 "size            "
  523.     union
  524.       {
  525.       ILBM_BMHD_DATA            suppress "data (if BMHD)  "
  526.       n32 map ILBM_CAMG_VALUE   suppress "data (if CAMG)  "
  527.       0x100 ILBM_RGB            suppress "data (if CMAP)  "
  528.       ILBM_SHAM_DATA            suppress "data (if SHAM)  "
  529.       buf 100 hex               suppress "data (otherwise)"
  530.       }
  531.     }
  532.  
  533. def ILBM_FILE
  534.     {
  535.     buf 4 asc  "form       "
  536.     n32        "length     "
  537.     buf 4 asc  "ilbm       "
  538.     ILBM_CHUNK "first chunk"
  539.     }
  540.  
  541. //
  542. // GIF file
  543. // Decode headers and block structures
  544. //
  545.  
  546. le
  547.  
  548. map GIF_GCT_BPP
  549.     {
  550.     "gct"    0x80 : 0x80
  551.     "no_gct" 0x00 : 0x80
  552.     }
  553.  
  554. def GIF_RGB
  555.     {
  556.     n8 hex "red  "
  557.     n8 hex "green"
  558.     n8 hex "blue "
  559.     }
  560.  
  561. def GIF_CHUNK
  562.     {
  563.     n8 ptr GIF_CHUNK add 1 rel           "size               "
  564.     16 buf 16 hex                        "data               "
  565.     at 0 n8 ptr GIF_BLOCK add 1 rel null "follow if size is 0"
  566.     }
  567.  
  568. def GIF_EXTENSION
  569.     {
  570.     n8 hex    "introducer (=0x21)   "
  571.     n8 hex    "graphic control label"
  572.     GIF_CHUNK "first chunk          "
  573.     }
  574.  
  575. map GIF_LCT_BPP
  576.     {
  577.     "lct"           0x80 : 0x80
  578.     "no_lct"        0x00 : 0x80
  579.     "ilace"         0x40 : 0x40
  580.     "no_ilace"      0x00 : 0x40
  581. //    "sortedpalette" 0x?? : 0x??
  582.     }
  583.  
  584. def GIF_IMAGE_DESC
  585.     {
  586.     n8 hex                             "introducer (=0x2c)     "
  587.     n16                                "xpos                   "
  588.     n16                                "ypos                   "
  589.     n16                                "width                  "
  590.     n16                                "height                 "
  591.     n8 map GIF_LCT_BPP                 "lct bpp-1              "
  592.     n8                                 "min_LZW_code_size-1    "
  593.     at 11                    GIF_CHUNK "1st chunk if (no   lct)"
  594.     at 11+  2*sizeof GIF_RGB GIF_CHUNK "1st chunk if (1bpp lct)"
  595.     at 11+  4*sizeof GIF_RGB GIF_CHUNK "1st chunk if (2bpp lct)"
  596.     at 11+  8*sizeof GIF_RGB GIF_CHUNK "1st chunk if (3bpp lct)"
  597.     at 11+ 16*sizeof GIF_RGB GIF_CHUNK "1st chunk if (4bpp lct)"
  598.     at 11+ 32*sizeof GIF_RGB GIF_CHUNK "1st chunk if (5bpp lct)"
  599.     at 11+ 64*sizeof GIF_RGB GIF_CHUNK "1st chunk if (6bpp lct)"
  600.     at 11+128*sizeof GIF_RGB GIF_CHUNK "1st chunk if (7bpp lct)"
  601.     at 11+256*sizeof GIF_RGB GIF_CHUNK "1st chunk if (8bpp lct)"
  602.     }
  603.  
  604. def GIF_TERM
  605.     {
  606.     n8 hex "introducer (=0x3b)"
  607.     }
  608.  
  609. def GIF_BLOCK
  610.     {
  611.     n8 hex              "introducer"
  612.     at 0 GIF_EXTENSION  "if 0x21   "
  613.     at 0 GIF_IMAGE_DESC "if 0x2c   "
  614.     at 0 GIF_TERM       "if 0x3b   "
  615.     }
  616.  
  617. // signature and screen descriptor
  618.  
  619. def GIF_FILE
  620.     {
  621.     buf 6 asc                          "signiture (GIFxxx)     "
  622.     n16                                "xscreen                "
  623.     n16                                "yscreen                "
  624.     n8 map GIF_GCT_BPP                 "gct bpp-1              "
  625.     n8                                 "bg index               "
  626.     n8 hex                             "?                      "
  627.     0x100 GIF_RGB                      "gct (if got one)       "
  628.     at 13                    GIF_BLOCK "1st block if (no   gct)"
  629.     at 13+  2*sizeof GIF_RGB GIF_BLOCK "1st block if (1bpp gct)"
  630.     at 13+  4*sizeof GIF_RGB GIF_BLOCK "1st block if (2bpp gct)"
  631.     at 13+  8*sizeof GIF_RGB GIF_BLOCK "1st block if (3bpp gct)"
  632.     at 13+ 16*sizeof GIF_RGB GIF_BLOCK "1st block if (4bpp gct)"
  633.     at 13+ 32*sizeof GIF_RGB GIF_BLOCK "1st block if (5bpp gct)"
  634.     at 13+ 64*sizeof GIF_RGB GIF_BLOCK "1st block if (6bpp gct)"
  635.     at 13+128*sizeof GIF_RGB GIF_BLOCK "1st block if (7bpp gct)"
  636.     at 13+256*sizeof GIF_RGB GIF_BLOCK "1st block if (8bpp gct)"
  637.     }
  638.  
  639. //
  640. // RiscOS Sprites
  641. // Display headers and data (rather crudely)
  642. //
  643.  
  644. le
  645.  
  646. map SPRITE_MODE
  647.     {
  648.     "640x256x1bpp"                    0
  649.     "320x256x2bpp"                    1
  650.     "160x256x4bpp"                    2
  651.     "Text only"                    3
  652.     "320x256x1bpp"                    4
  653.     "160x256x2bpp"                    5
  654.     "160x256x2bpp"                    6
  655.     "Teletext"                    7
  656.     "640x256x2bpp"                    8
  657.     "320x256x4bpp"                    9
  658.     "160x256x8bpp"                    10
  659.     "640x250x2bpp"                    11
  660.     "640x256x4bpp"                    12
  661.     "320x256x8bpp"                    13
  662.     "640x250x4bpp"                    14
  663.     "640x256x8bpp"                    15
  664.     "1056x250x4bpp"                    16
  665.     "1056x256x4bpp"                    17
  666.     "640x512x1bpp multisync-monitor"        18
  667.     "640x512x2bpp multisync-monitor"        19
  668.     "640x512x4bpp multisync-monitor"        20
  669.     "640x512x8bpp multisync-monitor"        21
  670.     "1152x896x1bpp 61.2Hz-hires-monitor"        23
  671.     "1056x256x8bpp"                    24
  672.     "640x480x1bpp multisync-or-60Hz-VGA-monitor"    25
  673.     "640x480x2bpp multisync-or-60Hz-VGA-monitor"    26
  674.     "640x480x4bpp multisync-or-60Hz-VGA-monitor"    27
  675.     "640x480x8bpp multisync-or-60Hz-VGA-monitor"    28
  676.     }
  677.  
  678. // 2 RGB values match if not flashing
  679.  
  680. def SPRITE_PAL
  681.     {
  682.     n8 hex "?    "
  683.     n8 hex "red  "
  684.     n8 hex "green"
  685.     n8 hex "blue "
  686.     n8 hex "?    "
  687.     n8 hex "red  "
  688.     n8 hex "green"
  689.     n8 hex "blue "
  690.     }
  691.  
  692. // List the first few bytes of data
  693. // Give it laid out at several widths
  694. // Remember, nibbles can be swapped
  695.  
  696. def SPRITE_DATA
  697.     {
  698.     at 0 50 buf  4 hex "data (1 dword  per line)"
  699.     at 0 50 buf  8 hex "data (2 dwords per line)"
  700.     at 0 50 buf 12 hex "data (3 dwords per line)"
  701.     at 0 50 buf 16 hex "data (4 dwords per line)"
  702.     at 0 50 buf 20 hex "data (5 dwords per line)"
  703.     at 0 50 buf 24 hex "data (6 dwords per line)"
  704.     at 0 50 buf 28 hex "data (7 dwords per line)"
  705.     at 0 50 buf 32 hex "data (8 dwords per line)"
  706.     }
  707.  
  708. def SPRITE_HDR
  709.     {
  710.     n32 hex ptr SPRITE_HDR rel         "next_sprite      "
  711.     buf 12 asc                         "name             "
  712.     n32                                "width_in_dwords-1"
  713.     n32                                "scan_lines-1     "
  714.     n32                                "first_bit        "
  715.     n32                                "last_bit         "
  716.     n32 hex ptr SPRITE_DATA add -. rel "offset_image     "
  717.     n32 hex ptr SPRITE_DATA add -. rel "offset_mask      "
  718.     n32 map SPRITE_MODE                "mode             "
  719.     0x40 SPRITE_PAL                    "palette          "
  720.     }
  721.  
  722. def SPRITE_FILE
  723.     {
  724.     n32                           "num_sprites "
  725.     n32 hex ptr SPRITE_HDR add -. "first_sprite"
  726.     }
  727.  
  728. //
  729. // PSEG files
  730. // I don't know very much about the internal structure of these.
  731. // Here is enough to allow loading and saving of 1bpp PSEG files.
  732. //
  733.  
  734. be
  735.  
  736. def PSEG_COMMENT
  737.     {
  738.     buf 100 ebc "text"
  739.     }
  740.  
  741. def PSEG_BEGIN_PAGE
  742.     {
  743.     buf 100 ebc "segment (often is filename)"
  744.     }
  745.  
  746. def PSEG_BEGIN_IMG_BLOCK
  747.     {
  748.     buf 100 ebc "image (often is filename)"
  749.     }
  750.  
  751. map PSEG_ORIENTATION
  752.     {
  753.     "90degrees" 0x2d
  754.     }
  755.  
  756. def PSEG_IMG_OUTPUT_CTL
  757.     {
  758.     buf 6 hex               "?          "
  759.     buf 2 hex               "?          "
  760.     n8 map PSEG_ORIENTATION "orientation"
  761.     buf 1 hex               "?          "
  762.     buf 8 hex               "?          "
  763.     n16                     "x_scale    "
  764.     n16                     "y_scale    "
  765.     buf 2 hex               "reserved   "
  766.     }
  767.  
  768. def PSEG_INPUT_IMG_DESC
  769.     {
  770.     buf 2                   "?             "
  771.     n16 hex                 "0 or 0x0960   "
  772.     n16 hex                 "0 or 0x0960   "
  773.     buf 8 hex               "?             "
  774.     n16 hex                 "0 or 0x0960   "
  775.     n16 hex                 "0 or 0x0960   "
  776.     n16                     "bytes_per_line"
  777.     n16                     "lines         "
  778.     buf 4 hex               "?             "
  779.         n8 map PSEG_ORIENTATION "orientation   "
  780.     buf 1 hex               "?             "
  781.     n16                     "x_cell        "
  782.     n16                     "y_cell        "
  783.     buf 4 hex               "? (=00001ffff)"
  784.     }
  785.  
  786. def PSEG_RASTER_DATA
  787.     {
  788.     buf 100 hex "data"
  789.     }
  790.  
  791. def PSEG_IMG_CELL_POSN
  792.     {
  793.     n16 "x_cell_pos "
  794.     n16 "y_cell_pos "
  795.     n16 "x_cell_size"
  796.     n16 "y_cell_size"
  797.     n16 "x_fill_size"
  798.     n16 "y_fill_size"
  799.     }
  800.  
  801. def PSEG_END_IMG_BLOCK
  802.     {
  803.     buf 100 ebc "image (often is filename)"
  804.     }
  805.  
  806. def PSEG_END_PAGE
  807.     {
  808.     buf 100 ebc "segment (often is filename)"
  809.     }
  810.  
  811. def PSEG_RECORD
  812.     {
  813.     n8  hex                 "start (=0x5a)   "
  814.     n16 ptr PSEG_RECORD rel "data_size       "
  815.     buf 3 hex               "type            "
  816.     buf 3 hex               "?               "
  817.     union
  818.       {
  819.       PSEG_COMMENT          "if type==@deeeee"
  820.       PSEG_BEGIN_PAGE       "if type==@d3a85f"
  821.       PSEG_BEGIN_IMG_BLOCK  "if type==@d3a87b"
  822.       PSEG_IMG_OUTPUT_CTL   "if type==@d3a77b"
  823.       PSEG_INPUT_IMG_DESC   "if type==@d3a67b"
  824.       PSEG_RASTER_DATA      "if type==@d3ee7b"
  825.       PSEG_IMG_CELL_POSN    "if type==@d3ac7b"
  826.       PSEG_END_IMG_BLOCK    "if type==@d3a97b"
  827.       PSEG_END_PAGE         "if type==@d3a95f"
  828.       buf 100 hex           "as raw data     "
  829.       }
  830.     }
  831.  
  832. def PSEG_FILE
  833.     {
  834.     PSEG_RECORD "first_record"
  835.     }
  836.  
  837. //
  838. // 3D Texture block file, as understood by Andys CSG Raytracer,
  839. // and the Modular Renderer C++ class library, written by the BE author.
  840. //
  841.  
  842. le
  843.  
  844. def TEX_FILE
  845.     {
  846.     n32 hex     "magic  "
  847.     n32 dec     "w      "
  848.     n32 dec     "h      "
  849.     n32 dec     "d      "
  850.     n32 dec     "bpv    "
  851.     buf 100 hex "data..."
  852.     }
  853.  
  854. //
  855. // OS/2 Resource File
  856. // Assume types and names are not ASCII strings.
  857. //
  858.  
  859. le
  860.  
  861. map RES_TYPE
  862.     {
  863.     "RT_POINTER"       1
  864.     "RT_BITMAP"        2
  865.     "RT_MENU"          3
  866.     "RT_DIALOG"        4
  867.     "RT_STRING"        5
  868.     "RT_FONTDIR"       6
  869.     "RT_FONT"          7
  870.     "RT_ACCELTABLE"    8
  871.     "RT_RCDATA"        9
  872.     "RT_DLGINCLUDE"   11
  873.     "RT_FKALONG"      17
  874.     "RT_HELPTABLE"    18
  875.     "RT_HELPSUBTABLE" 19
  876.     }
  877.  
  878. map RES_MEM_FLAGS
  879.     {
  880.     "NSCODE"    0x0000 : 0x0007
  881.     "NSDATA"    0x0001 : 0x0007
  882.     "NSITER"    0x0008 : 0x0008
  883.     "NSMOVE"    0x0010 : 0x0010
  884.     "NSPURE"    0x0020 : 0x0020
  885.     "NSPRELOAD" 0x0040 : 0x0040
  886.     "NSEXRD"    0x0080 : 0x0080
  887.     "NSRELOC"   0x0100 : 0x0100
  888.     "NSCONFORM" 0x0200 : 0x0200
  889.     "NSDPL0"    0x0400 : 0x0400
  890.     "NSDPL1"    0x0800 : 0x0800
  891.     "NSDISCARD" 0x1000 : 0x1000
  892.     "NS32BIT"   0x2000 : 0x2000
  893.     "NSHUGE"    0x4000 : 0x4000
  894.     }
  895.  
  896. def RES_FILE
  897.     {
  898.     n8 hex                     "(=0xff)          "
  899.     n16 map RES_TYPE           "resource_type    "
  900.     n8 hex                     "(=0xff)          "
  901.     n16                        "name             "
  902.     n16 map RES_MEM_FLAGS      "memory_flags     "
  903.     n32 ptr RES_FILE add 4 rel "data_size        "
  904.     union
  905.       {
  906.       buf 100 hex              "data...          "
  907.       BMP_FILE                 "data if RT_BITMAP"
  908.       }
  909.     }
  910.  
  911. //
  912. // ZIP file format
  913. // zero or more zipped-files
  914. //   where each zipped-file is a ZIP_LOCAL_FILE_HEADER followed by its data
  915. // followed by zero or more ZIP_FILE_HEADERs
  916. // followed by ZIP_CENTRAL
  917. // This is a little tricky to handle, because each of the zip files
  918. // in the header
  919. //
  920.  
  921. le
  922.  
  923. // Operating system
  924.  
  925. map ZIP_OS
  926.     {
  927.     "MS-DOS and OS/2 (FAT FS)" 0
  928.     "Amiga"                    1
  929.     "VMS"                      2
  930.     "*nix"                     3
  931.     "VM/CMS"                   4
  932.     "Atari ST"                 5
  933.     "OS/2 (HPFS FS)"           6
  934.     "Macintosh"                7
  935.     "Z-System"                 8
  936.     "CP/M"                     9
  937.     }
  938.  
  939. // Compression method
  940.  
  941. map ZIP_COMP
  942.     {
  943.     "Stored"                                         0
  944.     "Shrunk (dynamic LZW)"                           1
  945.     "Reduced with compression factor 1"              2
  946.     "Reduced with compression factor 2"              3 
  947.     "Reduced with compression factor 3"              4
  948.     "Reduced with compression factor 4"              5
  949.     "Imploded (sliding dict.+shannon fano)"          6
  950.     "Tokenized"                                      7
  951.     "Imploded (sliding dict.+dyn huff+shannon fano)" 8
  952.     }
  953.  
  954. // header to each zipped-file in the zip-archive
  955.  
  956. def ZIP_LOCAL_FILE_HEADER
  957.     {
  958.     n32 hex          "signature (=0x04034b50)          "
  959.     n8 dec           "version needed to extract (level)"
  960.     n8 map ZIP_OS    "version needed to extract (OS)   "
  961.     n16 hex          "general purpose bit flag         "
  962.     n16 map ZIP_COMP "compression method               "
  963.     n16 dec          "last mod file time               "
  964.     n16 dec          "last mod file date               "
  965.     n32 hex          "crc-32                           "
  966.     n32 dec          "compressed size                  "
  967.     n32 dec          "uncompressed size                "
  968.     n16 dec          "filename length                  "
  969.     n16 dec          "extra field length               "
  970.     buf 100 asc      "filename and extra field ...     "
  971.     }
  972.  
  973. // The awkward thing here is that the next zipped-file in the archive
  974. // follows sizeof ZIP_LOCAL_FILE_HEADER + compressed size + filename length
  975. // + extra field length bytes later on, and BE doesn't give an easy way
  976. // to step onto the next one...
  977. // If you are looking at a ZIP_LOCAL_FILE_HEADER, and you want to see the
  978. // next one, add 0x1e+compressed size+filename length+extra field length.
  979.  
  980. // header to each entry in the central directory
  981.  
  982. def ZIP_FILE_HEADER
  983.     {
  984.     n32 hex       "signature (=0x02014b50)              "
  985.     n8 dec        "version made by (level)              "
  986.     n8 map ZIP_OS "version made by (OS)                 "
  987.     n8 dec        "version needed to extract (level)    "
  988.     n8 map ZIP_OS "version needed to extract (OS)       "
  989.     n16 hex       "general purpose bit flag             "
  990.     n16 dec       "compression method                   "
  991.     n16 dec       "last mod file time                   "
  992.     n16 dec       "last mod file date                   "
  993.     n32 hex       "crc-32                               "
  994.     n32 dec       "compressed size                      "
  995.     n32 dec       "uncompressed size                    "
  996.     n16 dec       "filename length                      "
  997.     n16 dec       "extra field length                   "
  998.     n16 dec       "file comment length                  "
  999.     n16 dec       "disk number start                    "
  1000.     n16 hex       "internal file attributes             "
  1001.     n32 hex       "external file attributes             "
  1002.     n32 dec       "relative offset of local header      "
  1003.     buf 100 asc   "filename, extra field and comment ..."
  1004.     }
  1005.  
  1006. // The awkward thing here is that the entry in the central directory
  1007. // follows sizeof ZIP_FILE_HEADER + filename length + extra field length
  1008. // bytes later on, and BE doesn't give an easy way to step onto the next one...
  1009. // If you are looking at a ZIP_FILE_HEADER, and you want to see the
  1010. // next one, add 0x2e+filename length+extra field length+comment length.
  1011.  
  1012. def ZIP_CENTRAL
  1013.     {
  1014.     n32 hex     "signature (=0x06054b50)                                 "
  1015.     n16 dec     "number of this disk                                     "
  1016.     n16 dec     "number of disk with start of central directory          "
  1017.     n16 dec     "total number of entries in the central dir on this disk "
  1018.     n16 dec     "total number of entries in the central dir              "
  1019.     n32 dec     "size of the central directory                           "
  1020.     n32 dec     "offset of start of central directory wrt. start disk num"
  1021.     n16 dec     "zipfile comment length                                  "
  1022.     buf 100 asc "zipfile comment ...                                     "
  1023.     }
  1024.  
  1025. def ZIP_BLOCK union
  1026.     {
  1027.     n32 hex               "signature                                  "
  1028.     ZIP_LOCAL_FILE_HEADER "local file header (if signature=0x04034b50)"
  1029.     ZIP_FILE_HEADER       "file header       (if signature=0x02014b50)"
  1030.     ZIP_CENTRAL           "central directory (if signature=0x06054b50)"
  1031.     }
  1032.  
  1033. // So this ZIP_FILE definition is very sad really
  1034.  
  1035. def ZIP_FILE
  1036.     {
  1037.     ZIP_BLOCK "first zip-block"
  1038.     }
  1039.  
  1040. //
  1041. // Choose what to decode. Simply overlay all the different filetypes given in
  1042. // this configuration file on top of each other.
  1043. //
  1044.  
  1045. def main union
  1046.     {
  1047.     BMP_FILE    "Bitmap file"
  1048.     TGA_FILE    "Targa  file"
  1049.     KPS_FILE    "KIPS   file"
  1050.     PCX_FILE    "PCX    file"
  1051.     VID_FILE    "VID    file"
  1052.     TIFF_FILE   "TIFF   file"
  1053.     ILBM_FILE   "ILBM   file"
  1054.     GIF_FILE    "GIF    file"
  1055.     SPRITE_FILE "Sprite file"
  1056.     PSEG_FILE   "PSEG   file"
  1057.     TEX_FILE    "TEX    file"
  1058.     RES_FILE    "RES    file"
  1059.     ZIP_FILE    "ZIP    file"
  1060.     }
  1061.