home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / MISC / INTER35C.ZIP / INT2GUID.ZIP / INT2GUID.TAB < prev    next >
Encoding:
Text File  |  1993-04-12  |  45.3 KB  |  1,098 lines

  1. ;Text for INT2GUID conversion program, topic 21.
  2. ;INT2GUID converts INTERRUP.LST files to input for GUIDE.
  3. ;
  4. ;NB! When updating, remember to update the release number in the next
  5. ;paragraph, and in the beginning the text.
  6. ;
  7. ;This file contains tables extracted from the INTERRUP.LST file release 34.
  8. ;Tabs in the extracted text were filtered to 1 - 8 spaces.
  9. ;
  10. ;This file includes 4 extra topics. Reserve additionally 6 topics, or a
  11. ;total of 10.
  12. ;
  13. ;Topic headings are included in the GUIDE main index unless the configuration
  14. ;file specifies mask 0x8000.
  15. ;
  16. PSP Format, Environment Block, Country Specific Information, Error List
  17.  
  18. This entry gives access to tables extracted from the INTERRUP.LST file,
  19. release 34.
  20.  
  21.   22PSP + Env.   Program Segment Prefix Format + Environment
  22.   23Country      Specific Information
  23.   24Errors       Returned by DOS Funtion Calls
  24.   25EXE          *.EXE File Header etc.
  25. ;
  26. !TOPIC 22 PSP Format
  27. !! 0x8000
  28. !NOINDEX
  29. !! 0
  30. ;
  31. --------D-2126-------------------------------
  32. INT 21 - DOS 1+ - CREATE NEW PROGRAM SEGMENT PREFIX
  33.         AH = 26h
  34.         DX = segment at which to create PSP (see below)
  35. Notes:  new PSP is updated with memory size information; INTs 22h, 23h, 24h
  36.           taken from interrupt vector table
  37.         (DOS 2+) DOS assumes that the caller's CS is the segment of the PSP to
  38.           copy
  39. SeeAlso: AH=4Bh,AH=50h,AH=51h,AH=55h,AH=62h,AH=67h
  40.  
  41. Format of PSP:
  42. Offset  Size    Description
  43.  00h  2 BYTEs   INT 20 instruction for CP/M CALL 0 program termination
  44.                 the CDh 20h here is often used as a signature for a valid PSP
  45.  02h    WORD    segment of first byte beyond memory allocated to program
  46.  04h    BYTE    unused filler
  47.  05h    BYTE    CP/M CALL 5 service request (FAR JMP to 000C0h)
  48.                 BUG: (DOS 2+) PSPs created by INT 21/AH=4Bh point at 000BEh
  49.  06h    WORD    CP/M compatibility--size of first segment for .COM files
  50.  08h  2 BYTEs   remainder of FAR JMP at 05h
  51.  0Ah    DWORD   stored INT 22 termination address
  52.  0Eh    DWORD   stored INT 23 control-Break handler address
  53.  12h    DWORD   DOS 1.1+ stored INT 24 critical error handler address
  54.  16h    WORD    segment of parent PSP
  55.  18h 20 BYTEs   DOS 2+ Job File Table, one byte per file handle, FFh = closed
  56.  2Ch    WORD    DOS 2+ segment of environment for process
  57.  2Eh    DWORD   DOS 2+ process's SS:SP on entry to last INT 21 call
  58.  32h    WORD    DOS 3+ number of entries in JFT (default 20)
  59.  34h    DWORD   DOS 3+ pointer to JFT (default PSP:0018h)
  60.  38h    DWORD   DOS 3+ pointer to previous PSP (default FFFFFFFFh in 3.x)
  61.                 used by SHARE in DOS 3.3
  62.  3Ch  4 BYTEs   unused by DOS versions <= 6.00
  63.                 reportedly used by Novell NetWare shell 3.x
  64.  40h  2 BYTEs   DOS 5+ version to return on INT 21/AH=30h
  65.  42h    WORD    (MSWin3) selector of next PSP (PDB) in linked list
  66.                 Windows keeps a linked list of Windows programs only
  67.  44h  4 BYTEs   unused by DOS versions <= 6.00
  68.  48h    BYTE    (MSWindows3) bit 0 set if non-Windows application (WINOLDAP)
  69.  49h  7 BYTEs   unused by DOS versions <= 6.00
  70.  50h  3 BYTEs   DOS 2+ service request (INT 21/RETF instructions)
  71.  53h  9 BYTEs   unused in DOS versions <= 6.00
  72.  5Ch 16 BYTEs   first default FCB, filled in from first commandline argument
  73.                 overwrites second FCB if opened
  74.  6Ch 16 BYTEs   second default FCB, filled in from second commandline argument
  75.                 overwrites beginning of commandline if opened
  76.  7Ch  4 BYTEs   unused
  77.  80h 128 BYTEs  commandline / default DTA
  78.                 command tail is BYTE for length of tail, N BYTEs for the tail,
  79.                 followed by a BYTE containing 0Dh
  80. Notes:  in DOS v3+, the limit on simultaneously open files may be increased by
  81.           allocating memory for a new open file table, filling it with FFh,
  82.           copying the first 20 bytes from the default table, and adjusting the
  83.           pointer and count at 34h and 32h.  However, DOS will only copy the
  84.           first 20 file handles into a child PSP (including the one created on
  85.           EXEC).
  86.         network redirectors based on the original MS-Net implementation use
  87.           values of 80h-FEh in the open file table to indicate remote files;
  88.           Novell NetWare reportedly also uses values of 80h-FEh
  89.         MS-DOS 5.00 incorrectly fills the FCB fields when loading a program
  90.           high; the first FCB is empty and the second contains the first
  91.           parameter
  92.         some DOS extenders place protected-mode values in various PSP fields
  93.           such as the "parent" field, which can confuse PSP walkers.  Always
  94.           check either for the CDh 20h signature or that the suspected PSP is
  95.           at the beginning of a memory block which owns itself (the preceding
  96.           paragraph should be a valid MCB with "owner" the same as the
  97.           suspected PSP).
  98.  
  99. Format of environment block:
  100. Offset  Size    Description
  101.  00h  N BYTEs   first environment variable, ASCIZ string of form "var=value"
  102.       N BYTEs   second environment variable, ASCIZ string
  103.         ...
  104.       N BYTEs   last environment variable, ASCIZ string of form "var=value"
  105.         BYTE    00h
  106. ---DOS 3+---
  107.         WORD    number of strings following environment (normally 1)
  108.       N BYTEs   ASCIZ full pathname of program owning this environment
  109.                 other strings may follow
  110. ;
  111. !TOPIC 23 Country Info
  112. !! 0x8000
  113. !NOINDEX
  114. !! 0
  115. ;
  116. --------D-2138-------------------------------
  117. INT 21 - DOS 2+ - GET COUNTRY-SPECIFIC INFORMATION
  118.         AH = 38h
  119. --DOS 2.x--
  120.         AL = 00h get current-country info
  121.         DS:DX -> buffer for returned info (see below)
  122. Return: CF set on error
  123.             AX = error code (02h)
  124.         CF clear if successful
  125.             AX = country code (MS-DOS 2.11 only)
  126.             buffer at DS:DX filled
  127. --DOS 3+--
  128.         AL = 00h for current country
  129.         AL = 01h thru 0FEh for specific country with code <255
  130.         AL = 0FFh for specific country with code >= 255
  131.            BX = 16-bit country code
  132.         DS:DX -> buffer for returned info (see below)
  133. Return: CF set on error
  134.             AX = error code (02h)
  135.         CF clear if successful
  136.             BX = country code
  137.             DS:DX buffer filled
  138. SeeAlso: AH=65h,INT 10/AX=5001h,INT 2F/AX=110Ch,INT 2F/AX=1404h
  139.  
  140. Format of PC-DOS 2.x country info:
  141. Offset  Size    Description
  142.  00h    WORD    date format  0 = USA    mm dd yy
  143.                              1 = Europe dd mm yy
  144.                              2 = Japan  yy mm dd
  145.  02h    BYTE    currency symbol
  146.  03h    BYTE    00h
  147.  04h    BYTE    thousands separator char
  148.  05h    BYTE    00h
  149.  06h    BYTE    decimal separator char
  150.  07h    BYTE    00h
  151.  08h 24 BYTEs   reserved
  152.  
  153. Format of MS-DOS 2.x,DOS 3+ country info:
  154. Offset  Size    Description
  155.  00h    WORD    date format (see above)
  156.  02h  5 BYTEs   ASCIZ currency symbol string
  157.  07h  2 BYTEs   ASCIZ thousands separator
  158.  09h  2 BYTEs   ASCIZ decimal separator
  159.  0Bh  2 BYTEs   ASCIZ date separator
  160.  0Dh  2 BYTEs   ASCIZ time separator
  161.  0Fh    BYTE    currency format
  162.                 bit 2 = set if currency symbol replaces decimal point
  163.                 bit 1 = number of spaces between value and currency symbol
  164.                 bit 0 = 0 if currency symbol precedes value
  165.                         1 if currency symbol follows value
  166.  10h    BYTE    number of digits after decimal in currency
  167.  11h    BYTE    time format
  168.                 bit 0 = 0 if 12-hour clock
  169.                         1 if 24-hour clock
  170.  12h    DWORD   address of case map routine
  171.                 (FAR CALL, AL = character to map to upper case [>= 80h])
  172.  16h  2 BYTEs   ASCIZ data-list separator
  173.  18h 10 BYTEs   reserved
  174.  
  175. Values for country code:
  176.    1 001h   United States
  177.    2 002h   Canadian-French
  178.    3 003h   Latin America
  179.   31 01Fh   Netherlands
  180.   32 020h   Belgium
  181.   33 021h   France
  182.   34 022h   Spain
  183.   36 024h   Hungary (not supported by DR-DOS 5.0)
  184.   38 026h   Yugoslavia (not supported by DR-DOS 5.0)
  185.   39 027h   Italy
  186.   41 029h   Switzerland
  187.   42 02Ah   Czechoslovakia (not supported by DR-DOS 5.0)
  188.   43 02Bh   Austria (DR-DOS 5.0)
  189.   44 02Ch   United Kingdom
  190.   45 02Dh   Denmark
  191.   46 02Eh   Sweden
  192.   47 02Fh   Norway
  193.   48 030h   Poland (not supported by DR-DOS 5.0)
  194.   49 031h   Germany
  195.   55 037h   Brazil (not supported by DR-DOS 5.0)
  196.   61 03Dh   International English [Australia in DR-DOS 5.0]
  197.   81 051h   Japan (DR-DOS 5.0)
  198.   82 052h   Korea (DR-DOS 5.0)
  199.  351 15Fh   Portugal
  200.  358 166h   Finland
  201.  785 311h   Middle East (DR-DOS 5.0)
  202.  972 3CCh   Israel (DR-DOS 5.0)
  203. --------D-2138--DXFFFF-----------------------
  204. INT 21 - DOS 3+ - SET COUNTRY CODE
  205.         AH = 38h
  206.         DX = FFFFh
  207.         AL = 01h thru FEh for specific country with code <255
  208.         AL = FFh for specific country with code >= 255
  209.            BX = 16-bit country code (see AH=38h)
  210. Return: CF set on error
  211.             AX = error code (see AH=59h)
  212.         CF clear if successful
  213. Note:   not supported by OS/2
  214. SeeAlso: INT 2F/AX=1403h
  215. --------D-2165-------------------------------
  216. INT 21 - DOS 3.3+ - GET EXTENDED COUNTRY INFORMATION
  217.         AH = 65h
  218.         AL = info ID
  219.             01h get general internationalization info
  220.             02h get pointer to uppercase table
  221.             04h get pointer to filename uppercase table
  222.             05h get pointer to filename terminator table
  223.             06h get pointer to collating sequence table
  224.             07h (DOS 4+) get pointer to Double-Byte Character Set table
  225.         BX = code page (FFFFh=global code page)
  226.         DX = country ID (FFFFh=current country)
  227.         ES:DI -> country information buffer (see below)
  228.         CX = size of buffer (>= 5)
  229. Return: CF set on error
  230.             AX = error code (see AH=59h)
  231.         CF clear if succesful
  232.             CX = size of country information returned
  233.             ES:DI -> country information
  234. Notes:  AL=05h appears to return same info for all countries and codepages; it
  235.           has been documented for DOS 5+, but was undocumented in ealier
  236.           versions
  237.         NLSFUNC must be installed to get info for countries other than the
  238.           default
  239.         subfunctions 02h and 04h are identical under OS/2
  240. SeeAlso: AH=38h,INT 2F/AX=1401h,INT 2F/AX=1402h,INT 2F/AX=14FEh
  241.  
  242. Format of country information:
  243. Offset  Size    Description
  244.  00h    BYTE    info ID
  245. ---if info ID = 01h---
  246.  01h    WORD    size
  247.  03h    WORD    country ID
  248.  05h    WORD    code page
  249.  07h 34 BYTEs   country-dependent info (see AH=38h)
  250. ---if info ID = 02h---
  251.  01h    DWORD   pointer to uppercase table (see below)
  252. ---if info ID = 04h---
  253.  01h    DWORD   pointer to filename uppercase table (see below)
  254. ---if info ID = 05h---
  255.  01h    DWORD   pointer to filename character table (see below)
  256. ---if info ID = 06h---
  257.  01h    DWORD   pointer to collating table (see below)
  258. ---if info ID = 07h (DOS 4+)---
  259.  01h    DWORD   pointer to DBCS lead byte table (see below)
  260.  
  261. Format of uppercase table:
  262. Offset  Size    Description
  263.  00h    WORD    table size
  264.  02h 128 BYTEs  uppercase equivalents (if any) of chars 80h to FFh
  265.  
  266. Format of collating table:
  267. Offset  Size    Description
  268.  00h    WORD    table size
  269.  02h 256 BYTEs  values used to sort characters 00h to FFh
  270.  
  271. Format of filename terminator table:
  272. Offset  Size    Description
  273.  00h    WORD    table size (not counting this word)
  274.  02h    BYTE    ??? (01h for MS-DOS 3.30-6.00)
  275.  03h    BYTE    lowest permissible character value for filename
  276.  04h    BYTE    highest permissible character value for filename
  277.  05h    BYTE    ??? (00h for MS-DOS 3.30-6.00)
  278.  06h    BYTE    first excluded character in range \ all characters in this
  279.  07h    BYTE    last excluded character in range  / range are illegal
  280.  08h    BYTE    ??? (02h for MS-DOS 3.30-6.00)
  281.  09h    BYTE    number of illegal (terminator) characters
  282.  0Ah  N BYTES   characters which terminate a filename:  ."/\[]:|<>+=;,
  283. Note:   partially documented for DOS 5+, but undocumented for earlier versions
  284.  
  285. Format of filename uppercase table:
  286. Offset  Size    Description
  287.  00h    WORD    table size
  288.  02h 128 BYTEs  uppercase equivalents (if any) of chars 80h to FFh
  289.  
  290. Format of DBCS lead byte table:
  291. Offset  Size    Description
  292.  00h    WORD    length
  293.  02h 2N BYTEs   start/end for N lead byte ranges
  294.         WORD    0000h   (end of table)
  295. --------D-2165-------------------------------
  296. INT 21 - DOS 4+ - COUNTRY-DEPENDENT CHARACTER CAPITALIZATION
  297.         AH = 65h
  298.         AL = function
  299.             20h capitalize character
  300.                 DL = character to capitalize
  301.                 Return: DL = capitalized character
  302.             21h capitalize string
  303.                 DS:DX -> string to capitalize
  304.                 CX = length of string
  305.             22h capitalize ASCIZ string
  306.                 DS:DX -> ASCIZ string to capitalize
  307. Return: CF set on error
  308.             AX = error code (see AH=59h)
  309.         CF clear if successful
  310. Note:   these calls have been documented for DOS 5+, but were undocumented in
  311.           DOS 4.x.
  312. --------D-216523-----------------------------
  313. INT 21 U - DOS 4+ internal - DETERMINE IF CHARACTER REPRESENTS YES/NO RESPONSE
  314.         AX = 6523h
  315.         DL = character
  316.         DH = second character of double-byte character (if applicable)
  317. Return: CF set on error
  318.         CF clear if successful
  319.             AX = type
  320.                 00h no
  321.                 01h yes
  322.                 02h neither yes nor no
  323. --------D-2165-------------------------------
  324. INT 21 U - DOS 4+ internal - COUNTRY-DEPENDENT FILENAME CAPITALIZATION
  325.         AH = 65h
  326.         AL = function
  327.             A0h capitalize filename character
  328.                 DL = character to capitalize
  329.                 Return: DL = capitalized character
  330.             A1h capitalize counted filename string
  331.                 DS:DX -> filename string to capitalize
  332.                 CX = length of string
  333.             A2h capitalize ASCIZ filename
  334.                 DS:DX -> ASCIZ filename to capitalize
  335. Return: CF set on error
  336.             AX = error code (see AH=59h)
  337.         CF clear if successful
  338. Note:   nonfunctional in DOS 4.00 through 6.00 due to a bug (the code sets a
  339.           pointer depending on the high bit of AL, but doesn't clear the
  340.           bit before branching by function number).
  341. --------D-216601-----------------------------
  342. INT 21 - DOS 3.3+ - GET GLOBAL CODE PAGE TABLE
  343.         AX = 6601h
  344. Return: CF set on error
  345.             AX = error code (see AH=59h)
  346.         CF clear if successful
  347.             BX = active code page (see AX=6602h)
  348.             DX = system code page
  349. SeeAlso: AX=6602h
  350. --------D-216602-----------------------------
  351. INT 21 - DOS 3.3+ - SET GLOBAL CODE PAGE TABLE
  352.         AX = 6602h
  353.         BX = active code page (see below)
  354.         DX = system code page (active page at boot time)
  355. Return: CF set on error
  356.             AX = error code (see AH=59h)
  357.         CF clear if successful
  358. SeeAlso: AX=6601h,INT 2F/AX=14FFh
  359.  
  360. Values for code page:
  361.  437 US
  362.  850 Multilingual
  363.  852 Slavic/Latin II (DOS 5+)
  364.  857 Turkish
  365.  860 Portugal
  366.  861 Iceland
  367.  863 Canada (French)
  368.  865 Norway/Denmark
  369. ;
  370. !TOPIC 24 Error Codes
  371. !! 0x8000
  372. !NOINDEX
  373. !! 0
  374. ;
  375. --------D-2159--BX0000-----------------------
  376. INT 21 - DOS 3+ - GET EXTENDED ERROR INFORMATION
  377.         AH = 59h
  378.         BX = 0000h
  379. Return: AX = extended error code (see below)
  380.         BH = error class (see below)
  381.         BL = recommended action (see below)
  382.         CH = error locus (see below)
  383.         ES:DI may be pointer (see error code list below)
  384.         CL, DX, SI, BP, and DS destroyed
  385. Notes:  functions available under DOS 2.x map the true DOS 3+ error code into
  386.           one supported under DOS 2.x
  387.         you should call this function to retrieve the true error code when an
  388.           FCB or DOS 2.x call returns an error
  389.         under DR-DOS 5.0, this function does not use any of the DOS-internal
  390.           stacks and may thus be called at any time
  391. SeeAlso: AX=5D0Ah,INT 2F/AX=122Dh
  392.  
  393. Values for extended error code:
  394.    0 00h no error
  395.    1 01h function number invalid
  396.    2 02h file not found
  397.    3 03h path not found
  398.    4 04h too many open files (no handles available)
  399.    5 05h access denied
  400.    6 06h invalid handle
  401.    7 07h memory control block destroyed
  402.    8 08h insufficient memory
  403.    9 09h memory block address invalid
  404.   10 0Ah environment invalid (usually >32K in length)
  405.   11 0Bh format invalid
  406.   12 0Ch access code invalid
  407.   13 0Dh data invalid
  408.   14 0Eh reserved
  409.   15 0Fh invalid drive
  410.   16 10h attempted to remove current directory
  411.   17 11h not same device
  412.   18 12h no more files
  413. ---DOS 3+---
  414.   19 13h disk write-protected
  415.   20 14h unknown unit
  416.   21 15h drive not ready
  417.   22 16h unknown command
  418.   23 17h data error (CRC)
  419.   24 18h bad request structure length
  420.   25 19h seek error
  421.   26 1Ah unknown media type (non-DOS disk)
  422.   27 1Bh sector not found
  423.   28 1Ch printer out of paper
  424.   29 1Dh write fault
  425.   30 1Eh read fault
  426.   31 1Fh general failure
  427.   32 20h sharing violation
  428.   33 21h lock violation
  429.   34 22h disk change invalid
  430.         ES:DI -> ASCIZ volume label of required disk
  431.   35 23h FCB unavailable
  432.   36 24h sharing buffer overflow
  433.   37 25h (DOS 4+) code page mismatch
  434.   38 26h (DOS 4+) cannot complete file operation (out of input)
  435.   39 27h (DOS 4+) insufficient disk space
  436.  28h-31h reserved
  437.   50 32h network request not supported
  438.   51 33h remote computer not listening
  439.   52 34h duplicate name on network
  440.   53 35h network name not found
  441.   54 36h network busy
  442.   55 37h network device no longer exists
  443.   56 38h network BIOS command limit exceeded
  444.   57 39h network adapter hardware error
  445.   58 3Ah incorrect response from network
  446.   59 3Bh unexpected network error
  447.   60 3Ch incompatible remote adapter
  448.   61 3Dh print queue full
  449.   62 3Eh queue not full
  450.   63 3Fh not enough space to print file
  451.   64 40h network name was deleted
  452.   65 41h network: Access denied
  453.   66 42h network device type incorrect
  454.   67 43h network name not found
  455.   68 44h network name limit exceeded
  456.   69 45h network BIOS session limit exceeded
  457.   70 46h temporarily paused
  458.   71 47h network request not accepted
  459.   72 48h network print/disk redirection paused
  460.   73 49h network software not installed
  461.      (LANtastic) invalid network version
  462.   74 4Ah unexpected adapter close
  463.      (LANtastic) account expired
  464.   75 4Bh (LANtastic) password expired
  465.   76 4Ch (LANtastic) login attempt invalid at this time
  466.   77 4Dh (LANtastic v3+) disk limit exceeded on network node
  467.   78 4Eh (LANtastic v3+) not logged in to network node
  468.   79 4Fh reserved
  469.   80 50h file exists
  470.   81 51h reserved
  471.   82 52h cannot make directory
  472.   83 53h fail on INT 24h
  473.   84 54h (DOS 3.3+) too many redirections
  474.   85 55h (DOS 3.3+) duplicate redirection
  475.   86 56h (DOS 3.3+) invalid password
  476.   87 57h (DOS 3.3+) invalid parameter
  477.   88 58h (DOS 3.3+) network write fault
  478.   89 59h (DOS 4+) function not supported on network
  479.   90 5Ah (DOS 4+) required system component not installed
  480.  100 64h (MSCDEX) unknown error
  481.  101 65h (MSCDEX) not ready
  482.  102 66h (MSCDEX) EMS memory no longer valid
  483.  103 67h (MSCDEX) not High Sierra or ISO-9660 format
  484.  104 68h (MSCDEX) door open
  485.  
  486. Values for Error Class:
  487.    1 01h out of resource (storage space or I/O channels)
  488.    2 02h temporary situation (file or record lock)
  489.    3 03h authorization (denied access)
  490.    4 04h internal (system software bug)
  491.    5 05h hardware failure
  492.    6 06h system failure (configuration file missing or incorrect)
  493.    7 07h application program error
  494.    8 08h not found
  495.    9 09h bad format
  496.   10 0Ah locked
  497.   11 0Bh media error
  498.   12 0Ch already exists
  499.   13 0Dh unknown
  500.  
  501. Values for Suggested Action:
  502.    1 01h retry
  503.    2 02h delayed retry
  504.    3 03h prompt user to reenter input
  505.    4 04h abort after cleanup
  506.    5 05h immediate abort
  507.    6 06h ignore
  508.    7 07h retry after user intervention
  509.  
  510. Values for Error Locus:
  511.    1 01h unknown or not appropriate
  512.    2 02h block device (disk error)
  513.    3 03h network related
  514.    4 04h serial device (timeout)
  515.    5 05h memory related
  516. ;
  517. !TOPIC 25 EXE Header etc
  518. !! 0x8000
  519. !NOINDEX
  520. !! 0
  521. ;
  522. --------D-214B-------------------------------
  523. INT 21 - DOS 2+ - "EXEC" - LOAD AND/OR EXECUTE PROGRAM
  524.         AH = 4Bh
  525.         AL = type of load
  526.             00h load and execute
  527.             01h load but do not execute
  528.             03h load overlay
  529.             04h load and execute in background (European MS-DOS 4.0 only)
  530.                 "Exec & Go" (see also AH=80h)
  531.         DS:DX -> ASCIZ program name (must include extension)
  532.         ES:BX -> parameter block (see below)
  533.         CX = mode (subfunction 04h only)
  534.                 0000h child placed in zombie mode after termination
  535.                 0001h child's return code discarded on termination
  536. Return: CF clear if successful
  537.             BX,DX destroyed
  538.             if subfunction 01h, process ID set to new program's PSP; get with
  539.                 INT 21/AH=62h
  540.         CF set on error
  541.             AX = error code (01h,02h,05h,08h,0Ah,0Bh) (see AH=59h)
  542. Notes:  DOS 2.x destroys all registers, including SS:SP
  543.         for functions 00h and 01h, the calling process must ensure that there
  544.           is enough unallocated memory available; if necessary, by releasing
  545.           memory with AH=49h or AH=4Ah
  546.         for function 01h, the AX value to be passed to the child program is put
  547.           on top of the child's stack
  548.         for function 03h, DOS assumes that the overlay is being loaded into
  549.           memory allocated by the caller
  550.         function 01h was undocumented prior to the release of DOS 5.0
  551.         some versions (such as DR-DOS 6.0) check the parameters and parameter
  552.           block and return an error if an invalid value (such as an offset of
  553.           FFFFh) is found
  554.         background programs under European MS-DOS 4.0 must use the new
  555.           executable format
  556.         new executables begin running with the following register values
  557.                 AX = environment segment
  558.                 BX = offset of command tail in environment segment
  559.                 CX = size of automatic data segment (0000h = 64K)
  560.                 ES,BP = 0000h
  561.                 DS = automatic data segment
  562.                 SS:SP = initial stack
  563.           the command tail corresponds to an old executable's PSP:0081h and
  564.           following, except that the 0Dh is turned into a NUL (00h); new
  565.           format executables have no PSP
  566.         under the FlashTek X-32 DOS extender, only function 00h is supported
  567.           and the pointers are passed in DS:EDX and ES:EBX
  568.         names for the various executable type understood by various
  569.           environments:
  570.                 MZ  old-style DOS executable
  571.                 NE  Windows or OS/2 1.x segmented ("new") executable
  572.                 LE  Windows virtual device driver (VxD) linear executable
  573.                 LX  variant of LE used in OS/2 2.x
  574.                 W3  Windows WIN386.EXE file; a collection of LE files
  575.                 PE  Win32 (Windows NT and Win32s) portable executable based on
  576.                         Unix COFF
  577. BUGS:   DOS 2.00 assumes that DS points at the current program's PSP
  578.         Load Overlay (subfunction 03h) loads up to 512 bytes too many if the
  579.           file contains additional data after the actual overlay
  580. SeeAlso: AX=4B05h,AH=4Ch,AH=4Dh,AH=64h"OS/2",AH=8Ah,INT 2E
  581.  
  582. Format of EXEC parameter block for AL=00h,01h,04h:
  583. Offset  Size    Description
  584.  00h    WORD    segment of environment to copy for child process (copy caller's
  585.                 environment if 0000h)
  586.  02h    DWORD   pointer to command tail to be copied into child's PSP
  587.  06h    DWORD   pointer to first FCB to be copied into child's PSP
  588.  0Ah    DWORD   pointer to second FCB to be copied into child's PSP
  589.  0Eh    DWORD   (AL=01h) will hold subprogram's initial SS:SP on return
  590.  12h    DWORD   (AL=01h) will hold entry point (CS:IP) on return
  591.  
  592. Format of EXEC parameter block for AL=03h:
  593. Offset  Size    Description
  594.  00h    WORD    segment at which to load overlay
  595.  02h    WORD    relocation factor to apply to overlay if in .EXE format
  596.  
  597. Format of EXEC parameter block for FlashTek X-32:
  598. Offset  Size    Description
  599.  00h    PWORD   48-bit far pointer to environment string
  600.  06h    PWORD   48-bit far pointer to command tail string
  601.  
  602. Format of .EXE file header:
  603. Offset  Size    Description
  604.  00h  2 BYTEs   .EXE signature, either "MZ" or "ZM" (5A4Dh or 4D5Ah)
  605.  02h    WORD    number of bytes in last 512-byte page of executable
  606.  04h    WORD    total number of 512-byte pages in executable (includes any
  607.                 partial last page)
  608.  06h    WORD    number of relocation entries
  609.  08h    WORD    header size in paragraphs
  610.  0Ah    WORD    minimum paragraphs of memory to allocation in addition to
  611.                 executable's size
  612.  0Ch    WORD    maximum paragraphs to allocate in addition to executable's size
  613.  0Eh    WORD    initial SS relative to start of executable
  614.  10h    WORD    initial SP
  615.  12h    WORD    checksum (one's complement of sum of all words in executable)
  616.  14h    DWORD   initial CS:IP relative to start of executable
  617.  18h    WORD    offset within header of relocation table
  618.                 40h or greater for new-format (NE,LE,LX,W3,PE,etc.) executable
  619.  1Ah    WORD    overlay number (normally 0000h = main program)
  620. ---new executable---
  621.  1Ch  4 BYTEs   ???
  622.  20h    WORD    behavior bits
  623.  22h 26 BYTEs   reserved for additional behavior info
  624.  3Ch    DWORD   offset of new executable (NE,LE,etc) header within disk file,
  625.                 or 00000000h if plain MZ executable
  626. ---Borland TLINK---
  627.  1Ch  2 BYTEs   ??? (apparently always 01h 00h)
  628.  1Eh    BYTE    signature FBh
  629.  1Fh    BYTE    TLINK version (major in high nybble, minor in low nybble)
  630.  20h  2 BYTEs   ??? (v2.0 apparently always 72h 6Ah, v3.0+ seems always 6Ah 72h)
  631. ---ARJ self-extracting archive---
  632.  1Ch  4 BYTEs   signature "RJSX" (older versions, new signature is "aRJsfX" in
  633.                 the first 1000 bytes of the file)
  634. ---LZEXE 0.90 compressed executable---
  635.  1Ch  4 BYTEs   signature "LZ09"
  636. ---LZEXE 0.91 compressed executable---
  637.  1Ch  4 BYTEs   signature "LZ91"
  638. ---PKLITE compressed executable---
  639.  1Ch    BYTE    minor version number
  640.  1Dh    BYTE    bits 0-3: major version
  641.                 bit 4: extra compression
  642.                 bit 5: huge (multi-segment) file
  643.  1Eh  6 BYTEs   signature "PKLITE" (followed by copyright message)
  644. ---LHarc 1.x self-extracting archive---
  645.  1Ch  4 BYTEs   unused???
  646.  20h  3 BYTEs   jump to start of extraction code
  647.  23h  2 BYTEs   ???
  648.  25h 12 BYTEs   signature "LHarc's SFX "
  649. ---LHA 2.x self-extracting archive---
  650.  1Ch  8 BYTEs   ???
  651.  24h 10 BYTEs   signature "LHa's SFX " (v2.10) or "LHA's SFX " (v2.13)
  652. ---TopSpeed C 3.0 CRUNCH compressed file---
  653.  1Ch    DWORD   018A0001h
  654.  20h    WORD    1565h
  655. ---PKARCK 3.5 self-extracting archive---
  656.  1Ch    DWORD   00020001h
  657.  20h    WORD    0700h
  658. ---BSA (Soviet archiver) self-extracting archive---
  659.  1Ch    WORD    000Fh
  660.  1Eh    BYTE    A7h
  661. ---LARC self-extracting archive---
  662.  1Ch  4 BYTEs   ???
  663.  20h 11 BYTEs   "SFX by LARC "
  664. ---LH self-extracting archive---
  665.  1Ch  8 BYTEs   ???
  666.  24h  8 BYTEs   "LH's SFX "
  667. ---other linkers---
  668.  1Ch    var     optional information
  669. ---
  670.   N   N DWORDs  relocation items
  671. Notes:  if word at offset 02h is 4, it should be treated as 00h, since pre-1.10
  672.           versions of the MS linker set it that way
  673.         if both minimum and maximum allocation (offset 0Ah/0Ch) are zero, the
  674.           program is loaded as high in memory as possible
  675.         the maximum allocation is set to FFFFh by default
  676.  
  677. Format of new executable header:
  678. Offset  Size    Description
  679.  00h  2 BYTEs   "NE" (4Eh 45h) signature
  680.  02h  2 BYTEs   linker version (major, then minor)
  681.  04h    WORD    offset from start of this header to entry table (see below)
  682.  06h    WORD    length of entry table in bytes
  683.  08h    DWORD   file load CRC (0 in Borland's TPW)
  684.  0Ch    BYTE    program flags
  685.                 bits 0-1 DGROUP type
  686.                   0 = none
  687.                   1 = single shared
  688.                   2 = multiple (unshared)
  689.                   3 = (null)
  690.                 bit 2:  global initialization
  691.                 bit 3:  protected mode only
  692.                 bit 4:  8086 instructions
  693.                 bit 5:  80286 instructions
  694.                 bit 6:  80386 instructions
  695.                 bit 7:  80x87 instructions
  696.  0Dh    BYTE    application flags
  697.                 bits 0-2: application type
  698.                     001 full screen (not aware of Windows/P.M. API)
  699.                     010 compatible with Windows/P.M. API
  700.                     011 uses Windows/P.M. API
  701.                 bit 3: is a Family Application (OS/2)
  702.                 bit 5: 0=executable, 1=errors in image
  703.                 bit 6: non-conforming program (valid stack is not maintained)
  704.                 bit 7: DLL or driver rather than application
  705.                         (SS:SP info invalid, CS:IP points at FAR init routine 
  706.                          called with AX=module handle which returns AX=0000h
  707.                          on failure, AX nonzero on successful initialization)
  708.  0Eh    WORD    auto data segment index
  709.  10h    WORD    initial local heap size
  710.  12h    WORD    initial stack size (added to data seg, 0000h if SS != DS)
  711.  14h    DWORD   program entry point (CS:IP), "CS" is index into segment table
  712.  18h    DWORD   initial stack pointer (SS:SP), "SS" is segment index
  713.                 if SS=automatic data segment and SP=0000h, the stack pointer is
  714.                   set to the top of the automatic data segment, just below the
  715.                   local heap
  716.  1Ch    WORD    segment count
  717.  1Eh    WORD    module reference count
  718.  20h    WORD    length of nonresident names table in bytes
  719.  22h    WORD    offset from start of this header to segment table (see below)
  720.  24h    WORD    offset from start of this header to resource table
  721.  26h    WORD    offset from start of this header to resident names table
  722.  28h    WORD    offset from start of this header to module reference table
  723.  2Ah    WORD    offset from start of this header to imported names table
  724.                 (array of counted strings, terminated with a string of length
  725.                  00h)
  726.  2Ch    DWORD   offset from start of file to nonresident names table
  727.  30h    WORD    count of moveable entry point listed in entry table
  728.  32h    WORD    file alignment size shift count
  729.                 0 is equivalent to 9 (default 512-byte pages)
  730.  34h    WORD    number of resource table entries
  731.  36h    BYTE    target operating system
  732.                 00h unknown
  733.                 01h OS/2
  734.                 02h Windows
  735.                 03h European MS-DOS 4.x
  736.                 04h Windows 386
  737.                 05h BOSS (Borland Operating System Services)
  738.  37h    BYTE    other EXE flags
  739.                 bit 0: supports long filenames
  740.                 bit 1: 2.X protected mode
  741.                 bit 2: 2.X proportional font
  742.                 bit 3: gangload area
  743.  38h    WORD    offset to return thunks or start of gangload area
  744.  3Ah    WORD    offset to segment reference thunks or length of gangload area
  745.  3Ch    WORD    minimum code swap area size
  746.  3Eh  2 BYTEs   expected Windows version (minor version first)
  747. Note:   this header is documented in detail in the Windows 3.1 SDK Programmer's
  748.           Reference, Vol 4.
  749.  
  750. Format of Codeview trailer (at end of executable):
  751. Offset  Size    Description
  752.  00h    WORD    signature 4E42h ('NB')
  753.  02h    WORD    Microsoft debug info version number
  754.  04h    DWORD   Codeview header offset
  755.  
  756. Format of new executable segment table record:
  757.  00h    WORD    offset in file (shift left by alignment shift to get byte offs)
  758.  02h    WORD    length of image in file (0000h = 64K)
  759.  04h    WORD    segment attributes (see below)
  760.  06h    WORD    number of bytes to allocate for segment (0000h = 64K)
  761. Note:   the first segment table entry is entry number 1
  762.  
  763. Bitfields for segment attributes:
  764.  bit 0  data segment rather than code segment
  765.  bit 1  unused???
  766.  bit 2  real mode
  767.  bit 3  iterated
  768.  bit 4  movable
  769.  bit 5  sharable
  770.  bit 6  preloaded rather than demand-loaded
  771.  bit 7  execute-only (code) or read-only (data)
  772.  bit 8  relocations (directly following code for this segment)
  773.  bit 9  debug info present
  774.  bits 10,11     80286 DPL bits
  775.  bit 12         discardable
  776.  bits 13-15     discard priority
  777.  
  778. Format of new executable entry table item (list):
  779. Offset  Size    Description
  780.  00h    BYTE    number of entry points (00h if end of entry table list)
  781.  01h    BYTE    segment number (00h if end of entry table list)
  782.  02h 3N BYTEs   entry records
  783.                 Offset  Size    Description
  784.                  00h    BYTE    flags
  785.                                 bit 0: exported
  786.                                 bit 1: single data
  787.                                 bits 2-7: unused???
  788.                  01h    WORD    offset within segment
  789.  
  790. Format of new executable relocation data (immediately follows segment image):
  791. Offset  Size    Description
  792.  00h    WORD    number of relocation items
  793.  02h 8N BYTEs   relocation items
  794.                 Offset  Size    Description
  795.                  00h    BYTE    relocation type
  796.                                 00h LOBYTE
  797.                                 02h BASE
  798.                                 03h PTR
  799.                                 05h OFFS
  800.                                 0Bh PTR48
  801.                                 0Dh OFFS32
  802.                  01h    BYTE    flags
  803.                                 bit 2: additive
  804.                  02h    WORD    offset within segment
  805.                  04h    WORD    target address segment
  806.                  06h    WORD    target address offset
  807.                  
  808. Format of new executable resource data:
  809. Offset  Size    Description
  810.  00h    WORD    alignment shift count for resource data
  811.  02h  N RECORDs resources
  812.         Format of resource record:
  813.         Offset  Size    Description
  814.          00h    WORD    type ID
  815.                         0000h if end of resource records
  816.                         >= 8000h if integer type
  817.                         else offset from start of resource table to type string
  818.          02h    WORD    number of resources of this type
  819.          04h    DWORD   reserved for runtime use
  820.          08h  N Resources (see below)
  821. Note:   resource type and name strings are stored immediately following the
  822.           resource table, and are not null-terminated
  823.  
  824. Format of new executable resource entry:
  825. Offset  Size    Description
  826.  00h    WORD    offset in alignment units from start of file to contents of
  827.                 the resource data
  828.  02h    WORD    length of resource image in bytes
  829.  04h    WORD    flags
  830.                 bit 4: moveable
  831.                 bit 5: shareable
  832.                 bit 6: preloaded
  833.  06h    WORD    resource ID
  834.                 >= 8000h if integer resource
  835.                 else offset from start of resource table to resource string
  836.  08h    DWORD   reserved for runtime use
  837. Notes:  resource type and name strings are stored immediately following the
  838.           resource table, and are not null-terminated
  839.         strings are counted strings, with a string of length 0 indicating the
  840.           end of the resource table
  841.  
  842. Format of new executable module reference table [one bundle of entries]:
  843. Offset  Size    Description
  844.  00h    BYTE    number of records in this bundle (00h if end of table)
  845.  01h    BYTE    segment indicator
  846.                 00h unused
  847.                 FFh movable segment, segment number is in entry
  848.                 else segment number of fixed segment
  849.  02h  N RECORDs
  850.         Format of segment record
  851.         Offset  Size    Description
  852.          00h    BYTE    flags
  853.                         bit 0: entry is exported
  854.                         bit 1: entry uses global (shared) data
  855.                         bits 7-3: number of parameter words
  856.         ---fixed segment---
  857.          01h    WORD    offset
  858.         ---moveable segment---
  859.          01h  2 BYTEs   INT 3F instruction (CDh 3Fh)
  860.          03h    BYTE    segment number
  861.          05h    WORD    offset
  862. Note:   table entries are numbered starting from 1
  863.  
  864. Format of new executable resident/nonresident name table entry:
  865. Offset  Size    Description
  866.  00h    BYTE    length of string (00h if end of table)
  867.  01h  N BYTEs   ASCII text of string
  868.  N+1    WORD    ordinal number (index into entry table)
  869. Notes:  the first string in the resident name table is the module name; the
  870.           first entry in the nonresident name table is the module description
  871.         the strings are case-sensitive; if the executable was linked with
  872.           /IGNORECASE, all strings are in uppercase
  873.  
  874. Format of Linear Executable (enhanced mode executable) header:
  875. Offset  Size    Description
  876.  00h  2 BYTEs   "LE" (4Ch 45h) signature
  877.  02h    BYTE    byte order (00h = little-endian, nonzero = big-endian)
  878.  03h    BYTE    word order (00h = little-endian, nonzero = big-endian)
  879.  04h    DWORD   executable format level
  880.  08h    WORD    CPU type (see also INT 15/AH=C9h)
  881.                 01h Intel 80286 or upwardly compatible
  882.                 02h Intel 80386 or upwardly compatible                  
  883.                 03h Intel 80486 or upwardly compatible                  
  884.                 04h Intel 80586 or upwardly compatible
  885.                 20h Intel i860 (N10) or compatible
  886.                 21h Intel "N11" or compatible
  887.                 40h MIPS Mark I (R2000, R3000) or compatible
  888.                 41h MIPS Mark II (R6000) or compatible
  889.                 42h MIPS Mark III (R4000) or compatible
  890.  0Ah    WORD    target operating system
  891.                 01h OS/2
  892.                 02h Windows
  893.                 03h European DOS 4.0
  894.                 04h Windows 386
  895.  0Ch    DWORD   module version
  896.  10h    DWORD   module type
  897.                 bit 2: initialization (only for DLLs)
  898.                         0 = global
  899.                         1 = per-process
  900.                 bit 4: no internal fixups in executable image
  901.                 bit 5: no external fixups in executable image
  902.                 bits 8,9,10:
  903.                         0 = unknown
  904.                         1 = incompatible with PM windowing \
  905.                         2 = compatible with PM windowing    > (only for
  906.                         3 = uses PM windowing API          /    programs)
  907.                 bit 13: module not loadable (only for programs)
  908.                 bit 15: module is DLL rather than program
  909.  14h    DWORD   number of memory pages
  910.  18h    Initial CS:EIP
  911.         DWORD   object number
  912.         DWORD   offset
  913.  20h    Initial SS:ESP
  914.         DWORD   object number
  915.         DWORD   offset
  916.  28h    DWORD   memory page size
  917.  2Ch    DWORD   bytes on last page
  918.  30h    DWORD   fixup section size
  919.  34h    DWORD   fixup section checksum
  920.  38h    DWORD   loader section size
  921.  3Ch    DWORD   loader section checksum
  922.  40h    DWORD   offset of object table (see below)
  923.  44h    DWORD   object table entries
  924.  48h    DWORD   object page map table offset
  925.  4CH    DWORD   object iterate data map offset
  926.  50h    DWORD   resource table offset
  927.  54h    DWORD   resource table entries
  928.  58h    DWORD   resident names table offset
  929.  5Ch    DWORD   entry table offset
  930.  60h    DWORD   module directives table offset
  931.  64h    DWORD   Module Directives entries
  932.  68h    DWORD   Fixup page table offset
  933.  6Ch    DWORD   Fixup record table offset
  934.  70h    DWORD   imported modules name table offset
  935.  74h    DWORD   imported modules count
  936.  78h    DWORD   imported procedures name table offset
  937.  7Ch    DWORD   per-page checksum table offset
  938.  80h    DWORD   data pages offset
  939.  84h    DWORD   preload page count
  940.  88h    DWORD   non-resident names table offset
  941.  8Ch    DWORD   non-resident names table length
  942.  90h    DWORD   non-resident names checksum
  943.  94h    DWORD   automatic data object
  944.  98h    DWORD   debug information offset
  945.  9Ch    DWORD   debug information length
  946.  A0h    DWORD   preload instance pages number
  947.  A4h    DWORD   demand instance pages number
  948.  A8h    DWORD   extra heap allocation
  949.  ACh 20 BYTEs   reserved
  950.  C0h    WORD    device ID (MS-Windows VxD only)
  951.  C2h    WORD    DDK version (MS-Windows VxD only)
  952. Note:   used by EMM386.EXE, QEMM, and Windows 3.0 Enhanced Mode drivers
  953.  
  954. Format of object table entry:
  955. Offset  Size    Description
  956.  00h    DWORD   virtual size in bytes
  957.  04h    DWORD   relocation base address
  958.  08h    DWORD   object flags (see below)
  959.  0Ch    DWORD   page map index
  960.  10h    DWORD   page map entries
  961.  14h  4 BYTEs   reserved??? (apparently always zeros)
  962.  
  963. Bitfields for object flags:
  964.  bit 0  readable
  965.  bit 1  writable
  966.  bit 2  executable
  967.  bit 3  resource
  968.  bit 4  discardable
  969.  bit 5  shared
  970.  bit 6  preloaded
  971.  bit 7  invalid
  972.  bit 8-9 type
  973.         00 normal
  974.         01 zero-filled
  975.         10 resident
  976.         11 resident/contiguous
  977.  bit 10 "RESIDENT/LONG_LOCKABLE"
  978.  bit 11 reserved
  979.  bit 12 "16:16_ALIAS"
  980.  bit 13 "BIG" (Huge: 32-bit)
  981.  bit 14 conforming
  982.  bit 15 "OBJECT_I/O_PRIVILEGE_LEVEL"
  983.  bits 16-31 reserved
  984.  
  985. Format of object page map table entry:
  986. Offset  Size    Description
  987.  00h    BYTE    ??? (usually 00h)
  988.  01h    WORD    index to fixup table (big-endian)
  989.                 0000h if no relocation info
  990.  03h    BYTE    type (00h hard copy in file, 03h some relocation needed)
  991.  
  992. Format of resident names table entry:
  993. Offset  Size    Description
  994.  00h    BYTE    length of name
  995.  01h  N BYTEs   name
  996.  N+1  3 BYTEs   ???
  997.  
  998. Format of linear executable entry table:
  999. Offset  Size    Description
  1000.  00h    BYTE    number of entries in table
  1001.  01h 10 BYTEs per entry
  1002.                 Offset  Size    Description
  1003.                  00h    BYTE    bit flags
  1004.                                 bit 0: non-empty bundle
  1005.                                 bit 1: 32-bit entry
  1006.                  01h    WORD    object number
  1007.                  03h    BYTE    entry type flags
  1008.                                 bit 0: exported
  1009.                                 bit 1: uses single data rather than instance
  1010.                                 bit 2: reserved
  1011.                                 bits 3-7: number of stack parameters
  1012.                  04h    DWORD   offset of entry point
  1013.                  08h  2 BYTEs   ???
  1014. Note:   empty bundles (bit flags at 00h = 00h) are used to skip unused indices,
  1015.           and do not contain the remaining nine bytes
  1016.  
  1017. Format of linear executable fixup record:
  1018. Offset  Size    Description
  1019.  00h    BYTE    type
  1020.                 bits 7-4: modifier (0001 single, 0011 multiple)
  1021.                 bits 3-0: type
  1022.                         0000 byte offset
  1023.                         0010 word segment
  1024.                         0011 16-bit far pointer (DWORD)
  1025.                         0101 16-bit offset
  1026.                         0110 32-bit far pointer (PWORD)
  1027.                         0111 32-bit offset
  1028.                         1000 near call or jump, WORD/DWORD based on seg attrib
  1029.  01h    BYTE    fixup type
  1030.                 bit 7:  ordinal is BYTE rather than WORD
  1031.                 bit 5:  addition with DWORD rather than WORD
  1032.                 bit 4:  reloation info has size with new two bytes at end
  1033.                 bit 2:  set of add to destination, clear to replace destination
  1034.                 bits 1-0: type
  1035.                         00 internal fixup
  1036.                         01 external fixup, imported by ordinal
  1037.                         10 external fixup, imported by name
  1038. ---if single type---
  1039.  02h    WORD    offset within page
  1040.  04h    relocation information
  1041.         ---internal fixup---
  1042.         BYTE    object number
  1043.         ---external,ordinal---
  1044.         BYTE    one-based module number in Import Module table
  1045.         BYTE/WORD ordinal number
  1046.         WORD/DWORD value to add (only present if modifier bit 4 set)
  1047.         ---external,name---
  1048.         BYTE    one-based module number in Import Module table
  1049.         WORD    offset in Import Procedure names
  1050.         WORD/DWORD value to add (only present if modifier bit 4 set)
  1051. ---if multiple type---
  1052.  02h    BYTE    number of items
  1053.  03h    var     relocation info as for "single" type (see above)
  1054.       N WORDs   offsets of items to relocate
  1055.  
  1056. Format of Borland debugging information header (following load image):
  1057. Offset  Size    Description
  1058.  00h    WORD    signature 52FBh
  1059.  02h    WORD    version ID
  1060.  04h    DWORD   size of name pool in bytes
  1061.  08h    WORD    number of names in namem pool
  1062.  0Ah    WORD    number of type entries
  1063.  0Ch    WORD    number of structure members
  1064.  0Eh    WORD    number of symbols
  1065.  10h    WORD    number of global symbols
  1066.  12h    WORD    number of modules
  1067.  14h    WORD    number of locals (optional)
  1068.  16h    WORD    number of scopes in table
  1069.  18h    WORD    number of line-number entries
  1070.  1Ah    WORD    number of include files
  1071.  1Ch    WORD    number of segment records
  1072.  1Eh    WORD    number of segment/file correlations
  1073.  20h    DWORD   size of load image after removing uninitialized data and debug
  1074.                 info
  1075.  24h    DWORD   debugger hook; pointer into debugged program whose meaning
  1076.                 depends on program flags
  1077.  28h    BYTE    program flags
  1078.                 bit 0: case-sensitive link
  1079.                 bit 1: pascal overlay program
  1080.  29h    WORD    no longer used
  1081.  2Bh    WORD    size of data pool in bytes
  1082.  2Dh    BYTE    padding
  1083.  2Eh    WORD    size of following header extension (currently 00h, 10h, or 20h)
  1084.  30h    WORD    number of classes
  1085.  32h    WORD    number of parents
  1086.  34h    WORD    number of global classes (currently unused)
  1087.  36h    WORD    number of overloads (currently unused)
  1088.  38h    WORD    number of scope classes
  1089.  3Ah    WORD    number of module classes
  1090.  3Ch    WORD    number of coverage offsets
  1091.  3Eh    DWORD   offset relative to symbol base of name pool
  1092.  42h    WORD    number of browser information records
  1093.  44h    WORD    number of optimized symbol records
  1094.  46h    WORD    debugging flags
  1095.  48h  8 BYTEs   padding
  1096. Note:   additional information on the Borland debugging info may be found in
  1097.           Borland's Open Architecture Handbook
  1098.