Unit ExtError; { Information lifted from 'Disk Operating System 3.30 Technical Reference'. An IBM publication. USE this unit with DOS 3.0 or higher. } Interface Implementation uses Dos; {$F+,R-,S-,I- } Var ExitSave : Pointer; Procedure GetExtendedError; Var Regs : Registers; s : String; Begin ExitProc := ExitSave; Regs.AH := $59; Regs.BX := $0000; Intr($21, Regs); Write('Error #'); Case Regs.AX of 1 : s := 'Invalid function number'; 2 : s := 'File not found'; 3 : s := 'Path not found'; 4 : s := 'Too many open files (no handles left)'; 5 : s := 'Access denied (file was opened Read Only)'; 6 : s := 'Invalid handle'; 7 : s := 'Memory control blocks destroyed'; 8 : s := 'Insufficient memory'; 9 : s := 'Invalid memory block address'; 10 : s := 'Invalid environment'; 11 : s := 'Invalid format'; 12 : s := 'Invalid access code'; 13 : s := 'Invalid data'; 15 : s := 'Invalid drive was specified'; 16 : s := 'Attempt to remove current directory'; 17 : s := 'Not same device'; 18 : s := 'No more files'; 19 : s := 'Attempt to write on write-protected diskette'; 20 : s := 'Unknown unit'; 21 : s := 'Drive not ready'; 22 : s := 'Unknown command'; 23 : s := 'Data error (CRC)'; 24 : s := 'Bad request structure length'; 25 : s := 'Seek error'; 26 : s := 'Unknown media type'; 27 : s := 'Sector not found'; 28 : s := 'Printer out of paper'; 29 : s := 'Write fault'; 30 : s := 'Read fault'; 31 : s := 'General failure'; 32 : s := 'Sharing violation'; 33 : s := 'Lock violation'; 34 : s := 'Invalid disk change'; 35 : s := 'FCB unavailable'; 36 : s := 'Sharing buffer overflow'; 50 : s := 'Network request not supported'; 51 : s := 'Remote computer not listening'; 52 : s := 'Duplicate name on network'; 53 : s := 'Network name not found'; 54 : s := 'Network busy'; 55 : s := 'Network device no longer exists'; 56 : s := 'Net BIOS command limit exceeded'; 57 : s := 'Network adapter hardware error'; 58 : s := 'Incorrect response from network'; 59 : s := 'Unexpected network error'; 60 : s := 'Incompatible remote adapter'; 61 : s := 'Print queue full'; 62 : s := 'Not enough space for print file'; 63 : s := 'Print file was deleted'; 65 : s := 'Access denied'; 66 : s := 'Network device type incorrect'; 67 : s := 'Network name not found'; 68 : s := 'Network name limit exceeded'; 69 : s := 'Net BIOS session limit exceeded'; 70 : s := 'Temporarily paused'; 71 : s := 'Network request not accepted'; 72 : s := 'Print or disk redirection is paused'; 80 : s := 'File exists'; 82 : s := 'Cannot make directory entry'; 83 : s := 'Fail on INT 24'; 84 : s := 'Too many redirections'; 85 : s := 'Duplicate redirection'; 86 : s := 'Invalid password'; 87 : s := 'Invalid parameter'; 88 : s := 'Network device fault'; end; WriteLn(Regs.AX, ': ', s); Write('Error class: '); Case Regs.BH of 1 : s := 'Out of resource'; 2 : s := 'Temporary situation'; 3 : s := 'Permission problem'; 4 : s := 'Internal error in system software'; 5 : s := 'Hardware failure'; 6 : s := 'Serious failure of system software'; 7 : s := 'Application program error'; 8 : s := 'File/item not found'; 9 : s := 'File/item of invalid format or type'; 10 : s := 'File/item interlocked'; 11 : s := 'Media failure: wrong disk, CRC error...'; 12 : s := 'Collision with existing item'; 13 : s := 'Classification doesn''t exist or is inappropriate'; end; WriteLn(s); Write('Suggested action: '); Case Regs.BL of 1 : s := 'Retry'; 2 : s := 'Retry after pause'; 3 : s := 'Ask user to re-enter input'; 4 : s := 'Abort program with cleanup'; 5 : s := 'Abort immediately, skip cleanup'; 6 : s := 'Ignore'; 7 : s := 'Retry after user intervention'; end; WriteLn(s); Write('Error locus: '); Case Regs.CH of 1 : s := 'Unknown or inappropriate'; 2 : s := 'Related to disk storage'; 3 : s := 'Related to the network'; 4 : s := 'Serial device'; 5 : s := 'Memory'; end; WriteLn(s); Halt; end; { GetExtendedError } Begin ExitSave := ExitProc; ExitProc := @GetExtendedError; end. { ExtError }