home *** CD-ROM | disk | FTP | other *** search
- /*=============================================================================
-
- The INSTALL program source code, object code, sample script files,
- executable program, and documentation are subject to copyright
- protection under the laws of the United States and other countries.
-
- This software is licensed, not sold, and may only be redistributed
- in executable format and only in accordance with the provisions of
- the INSTALL Source Code License Agreement.
-
- INSTALL is Copyright(C) 1987-1990 by Knowledge Dynamics Corp
- Highway Contract 4 Box 185-H, Canyon Lake, TX (USA) 78133-3508
- 512-964-3994 (Voice) 512-964-3958 (24-hr FAX)
-
- All rights reserved worldwide.
-
- ===============================================================================
-
- FILENAME:
- dosprob.c
-
- AUTHOR:
- eric jon heflin
-
- PUBLIC FUNCTIONS:
- dosprob() - returns a string containing DOS error information
-
- LOCAL FUNCTIONS:
- none
-
- DESCRIPTION:
- This file uses the structure errs_s{a,b,c} where a is an unsigned number
- obtained from the int24(), b is a pointer, and c tells what type of
- error it is (e.g. hard disk, file in use, etc.). The same structure is
- used for both devicemsg[] and dosmsg[] to handle their respective errors.
- If no errors are present, the return is NULL.
-
- REVISION HISTORY:
- DATE: AUTHOR: DESCRIPTION OF CHANGES:
- 891107 allyn jordan documentation
- 900102 ejh Cosmetic changes.
-
- ==============================================================================*/
-
- #include "install.h"
- /*
- #ifdef LATTICE
- #undef LATTICE
- #include <dos.h>
- #define LATTICE
- #else
- #include <dos.h>
- #endif
- */
- #include <errno.h>
- #include <stdlib.h>
- #include <string.h>
-
- /* the following externs are defined in int24.c */
- #if defined(InstantC) || defined(__TURBOC__) || defined(__MICROSOFTC__)
- extern short _OSERR; /* DOS error code */
- extern char _OSERC; /* DOS error class */
- extern char _OSERL; /* DOS error locus */
- extern char _OSERA; /* DOS error action */
- extern char _OSCEF; /* critical error flag */
- extern char _OSCEC; /* critical error code */
- extern short _OSCET; /* critical error type */
- #elif defined(LATTICE)
- extern char _OSCEC; /* critical error code */
- extern short _OSCET; /* critical error type */
- #endif
-
- struct errs_s
- {
- unsigned number;
- byte *text;
- word type;
- } dosmsg[] =
- {
- /* dosprob */
- {0, NULL, UNKNOWN | INTERNAL | SOFT},
- {1, "Invalid function number", INTERNAL | SOFT},
- {2, "File not found", DISK | SOFT},
- {3, "Path not found", DISK | SOFT},
- {4, "Too many files open", ENVIRONMENT | SOFT},
- {5, "Access denied", USER | HARD},
- {6, "Invalid handle", INTERNAL | SOFT},
- {7, "Memory control blocks destroyed", INTERNAL | SOFT},
- {8, "Insufficient memory", ENVIRONMENT | HARD},
- {9, "Invalid memory block address", INTERNAL | SOFT},
- {10, "Invalid environment", ENVIRONMENT | SOFT | INTERNAL},
- {11, "Invalid format", USER | DISK | HARD},
- {12, "Invalid access code", INTERNAL | SOFT},
- {13, "Invalid data", DISK | USER | HARD},
- {14, "Unknown Unit", DISK | SOFT},
- {15, "Invalid disk drive", DISK | USER | HARD},
- {16, "Can't remove current directory", DISK | SOFT},
- {17, "Not same device", DISK},
- {18, "No more files", DISK},
- {19, "Can't write on protected disk", USER | HARD | DISK},
- {20, "Unknown unit", USER | DISK},
- {21, "Drive not ready", USER | HARD | DISK},
- {22, "Unknown command", DISK | SOFT},
- {23, "Data error", HARD | DISK | USER},
- {24, "Bad request structure length", INTERNAL | DISK},
- {25, "Seek error", DISK | HARD | USER},
- {26, "Unknown media type", USER | DISK | HARD},
- {27, "Sector not found", HARD | DISK | USER},
- {28, "Printer out of paper", PRINTER | USER | HARD},
- {29, "Write fault", USER | HARD},
- {30, "Read fault", USER | HARD},
- {31, "General failure", DISK | USER},
- {32, "Sharing violation", DISK | USER},
- {33, "Lock violation", DISK | USER},
- {34, "Invalid disk change", DISK | USER},
- {35, "FCB unavailable", DISK | INTERNAL},
- {36, "Sharing buffer overflow", DISK | USER},
- {37, NULL, UNKNOWN | INTERNAL},
- {38, NULL, UNKNOWN | INTERNAL},
- {39, NULL, UNKNOWN | INTERNAL},
- {40, NULL, UNKNOWN | INTERNAL},
- {41, NULL, UNKNOWN | INTERNAL},
- {42, NULL, UNKNOWN | INTERNAL},
- {43, NULL, UNKNOWN | INTERNAL},
- {44, NULL, UNKNOWN | INTERNAL},
- {45, NULL, UNKNOWN | INTERNAL},
- {46, NULL, UNKNOWN | INTERNAL},
- {47, NULL, UNKNOWN | INTERNAL},
- {48, NULL, UNKNOWN | INTERNAL},
- {49, NULL, UNKNOWN | INTERNAL},
- {50, "Network request not supported", NETWORK | USER},
- {51, "Remote computer not listening", NETWORK | USER},
- {52, "Duplicate name on network", NETWORK | USER},
- {53, "Network name not found", NETWORK | USER},
- {54, "Network busy", NETWORK | USER},
- {55, "Network device no longer exists", NETWORK | USER},
- {56, "NetBIOS command limit exceeded", NETWORK | USER},
- {57, "Network adapter hardware error", NETWORK | USER},
- {58, "Incorrect response from network", NETWORK | USER},
- {59, "Unexpected network error", NETWORK | USER},
- {60, "Incompatible remote adapter", NETWORK | USER},
- {61, "Print queue full", PRINTER | USER},
- {62, "Not enough memory for print file", PRINTER | USER},
- {63, "Print file was deleted", PRINTER | USER},
- {64, "Network name was deleted", NETWORK | USER},
- {65, "Network access denied", NETWORK | USER},
- {66, "Incorrect network device type", NETWORK | USER},
- {67, "Network name not found", NETWORK | USER},
- {68, "Network name limit exceeded", NETWORK | USER},
- {69, "NetBIOS session limit exceeded", NETWORK | USER},
- {70, "File sharing temporarily paused", NETWORK | USER},
- {71, "Network request not accepted", NETWORK | USER},
- {72, "Network print or disk redirection paused", NETWORK | USER},
- {73, NULL, UNKNOWN | INTERNAL},
- {74, NULL, UNKNOWN | INTERNAL},
- {75, NULL, UNKNOWN | INTERNAL},
- {76, NULL, UNKNOWN | INTERNAL},
- {77, NULL, UNKNOWN | INTERNAL},
- {78, NULL, UNKNOWN | INTERNAL},
- {79, NULL, UNKNOWN | INTERNAL},
- {80, "File already exists", SOFT | DISK},
- {81, NULL, UNKNOWN | INTERNAL},
- {82, "Cannot make directory", DISK | SOFT},
- {83, "DOS device error", SOFT | USER},
- {84, "Too many redirections", ENVIRONMENT},
- {85, "Duplicate redirection", ENVIRONMENT},
- {86, "Invalid password", USER},
- {87, "Invalid parameter", INTERNAL},
- {88, "Network device fault", HARD | USER},
- {0, NULL}
- };
-
- struct errs_s devicemsg[] =
- {
- {0, "Attempt to write on protected diskette", USER | DISK | HARD},
- {1, "Unknown unit", INTERNAL},
- {2, "Drive not ready", USER | DISK | HARD},
- {3, "Unknown command", INTERNAL},
- {4, "Disk data error", HARD | DISK},
- {5, "Bad request structure length", INTERNAL},
- {6, "Seek error", DISK | HARD | USER},
- {7, "Unknown media type", DISK | HARD | USER},
- {8, "Sector not found", DISK | HARD | USER},
- {9, "Printer out of paper", PRINTER | HARD | USER},
- {10, "Write fault", HARD | USER | DISK},
- {11, "Read fault", HARD | USER | DISK},
- {12, "General failure", HARD | USER | DISK}
- };
-
- /* static storage area for str return from dosprob */
- byte buf[100];
-
- byte *dosprob(type)
- word *type;
- {
- if (_OSCEF == 3 || _OSCEF == 1)
- {
- if (_OSERR == 83)
- {
- /* INT 24 error */
- if (!(_OSCET & 0x80))
- {
- /* disk error */
- sprintf(buf, "Disk Error on Drive %c: %s", (_OSCET & 0xF) + 'A',
- devicemsg[_OSCEC].text);
- _OSERR = 0;
- _OSCEF = 0;
- if (type != NULL)
- *type = devicemsg[_OSCEC].type;
- return buf;
- }
- else
- {
- sprintf(buf, "Device Error: %s", devicemsg[_OSCEC].text);
- _OSERR = 0;
- _OSCEF = 0;
- if (type != NULL)
- *type = dosmsg[_OSERR].type;
- return buf;
- }
- }
- else if (_OSERR <= 88)
- {
- /* non-INT 24 error */
- if (dosmsg[_OSERR].type & UNKNOWN)
- sprintf(buf, "Unknown DOS error %d", _OSERR);
- else
- strcpy(buf, dosmsg[_OSERR].text);
- _OSERR = 0;
- _OSCEF = 0;
- if (type != NULL)
- *type = dosmsg[_OSERR].type;
- return buf;
- }
- }
- /* no error state currently exists, return such */
- _OSERR = 0;
- _OSCEF = 0;
- if (type != NULL)
- *type = 0;
- return NULL;
- }
-
- /* end-of-file */
-
-