home *** CD-ROM | disk | FTP | other *** search
/ back2roots/padua / padua.7z / padua / uucp / cnews_src.zoo / libfake / strerror.c < prev    next >
C/C++ Source or Header  |  1990-12-29  |  2KB  |  84 lines

  1. /*
  2.  * strerror - map error number to descriptive string
  3.  *
  4.  * This version is obviously somewhat Unix-specific.
  5.  */
  6.  
  7. #define SIZEOF(ary)        (sizeof(ary) / sizeof((ary)[0]))
  8.  
  9. typedef struct {
  10.     int        err;
  11.     char    *msg;
  12. } DosErr;
  13.  
  14. DosErr dos[] = {
  15.     103,    "NO FREE STORE",
  16.     105,    "TASK TABLE FULL",
  17.     114,    "BAD TEMPLATE",
  18.     115,    "BAD NUMBER",
  19.     116,    "REQUIRED ARG MISSING",
  20.     117,    "KEY NEEDS ARG",
  21.     118,    "TOO MANY ARGS",
  22.     119,    "UNMATCHED QUOTES",
  23.     120,    "LINE TOO LONG",
  24.     121,    "FILE NOT OBJECT",
  25.     122,    "INVALID RESIDENT LIBRARY",
  26.     201,    "NO DEFAULT DIR",
  27.     202,    "OBJECT IN USE",
  28.     203,    "OBJECT EXISTS",
  29.     204,    "DIR NOT FOUND",
  30.     205,    "OBJECT NOT FOUND",
  31.     206,    "BAD STREAM NAME",
  32.     207,    "OBJECT TOO LARGE",
  33.     209,    "ACTION NOT KNOWN",
  34.     210,    "INVALID COMPONENT NAME",
  35.     211,    "INVALID LOCK",
  36.     212,    "OBJECT WRONG TYPE",
  37.     213,    "DISK NOT VALIDATED",
  38.     214,    "DISK WRITE PROTECTED",
  39.     215,    "RENAME ACROSS DEVICES",
  40.     216,    "DIRECTORY NOT EMPTY",
  41.     217,    "TOO MANY LEVELS",
  42.     218,    "DEVICE NOT MOUNTED",
  43.     219,    "SEEK ERROR",
  44.     220,    "COMMENT TOO BIG",
  45.     221,    "DISK FULL",
  46.     222,    "DELETE PROTECTED",
  47.     223,    "WRITE PROTECTED",
  48.     224,    "READ PROTECTED",
  49.     225,    "NOT A DOS DISK",
  50.     226,    "NO DISK",
  51.     232,    "NO MORE ENTRIES",
  52.     233,    "IS SOFT LINK",
  53.     234,    "OBJECT LINKED",
  54.     235,    "BAD HUNK",
  55.     240,    "RECORD NOT LOCKED",
  56.     241,    "LOCK COLLISION",
  57.     242,    "LOCK TIMEOUT",
  58.     243,    "UNLOCK ERROR",
  59. };
  60.  
  61. char *strerror(int errnum)
  62. {
  63.     extern int sys_nerr;
  64.     extern char *sys_errlist[];
  65.     static char buff[24 + 10 + 1];
  66.  
  67.     if (errnum > 0 && errnum < sys_nerr)
  68.         return(sys_errlist[errnum]);
  69.     if (errnum >= dos[0].err && errnum <= dos[SIZEOF(dos)-1].err) {
  70.         register DosErr *ptr;
  71.  
  72.         for (ptr = dos + SIZEOF(dos); ptr-- > dos; )
  73.             if (errnum == ptr->err)
  74.                 return( ptr->msg );
  75.         sprintf(buff, "unknown AmigaDOS error: %d", errnum);
  76.         return(buff);
  77.     }
  78.     if (errnum != 0) {
  79.         sprintf(buff, "unknown error: %d", errnum);
  80.         return(buff);
  81.     } else
  82.         return("no details given");
  83. }
  84.