[net.micro.6809] err.c: Error numbers to English

megabyte@chinet.UUCP (Mark E. Sunderlin) (06/10/86)

A few months ago Brian Lantz Published a small assemble program to
give you the error messages when you gave the program the error number.
Having always thought that "Anything Biran can do in asm, I can do in 'C'" I
write the following 'C' program.  Hope it is useful to someone besides my self.

This is NOT a shell archive, so just cut out the program
----------------- CUT ------------- HERE -------------------------------------

/* err.c - a program to humanise error messages
 *         This program will give you the error 
 *       mesage corrosponding to the error number you
 *       supply to the program.  You may also specify
 *       your own error file instead of the default.
 *
 * Syntax: err errnum [errfile]
 *         Where "errnum" is the error number you want 
 *       the message for and "errfile" is the optional
 *       error file.
 *
 * Author: Mark E. Sunderlin - aka Dr. Megabyte
 *         CIS:74026,3235    DEPHI:MEGABYTE
 *         USENET: ..ihnp4!chinet!megabyte
 */

#include <stdio.h>
#define ERRFILE "/d0/sys/errmsg"   /* default error file */
#define MAXMSG  80                 /* largest error msg (I hope!!) */

main(argc,argv)
int argc;
char *argv[];
{
    int errnum;           /* error number */
    char errmesg[MAXMSG]; /* buffer for error message */
    char errfile[20];     /* error file name */
    FILE *errfp,*fopen();
 
    if (argc < 2)         /* No arguments given?? */
        usage();

    errnum = atoi(argv[1]);      /* get error # from command line */
    if (!errnum) {               /* zero or bad number ?? */
        printf("err: unknown error??\n");
        exit(0);
    }

    strcpy(errfile,ERRFILE);            /* set file name to default */
    if (argc > 2)                       /* Alternate error file ?? */
        strcpy(errfile,argv[2]);        /* yes, set filename */   

    if ((errfp = fopen(errfile,"r")) == NULL) {
         printf("err: can't open error file %s\n",errfile);
         usage();
     }
    /* ok, now read the file which must be in the format of:
     * errnum - error message
     * until we find a match.  We take advantge of the fact that
     * atoi() only scans a string until it hits the 1st non-digit.
     * Thus atoi("23skido") would return 23.
     */

    while (fgets(errmesg,MAXMSG,errfp) != NULL) {
           if (errnum == atoi(errmesg)) {   /* got a match ?? */
               printf("Error #%s",errmesg); /* print it */
               fclose(errfp);               /* close file */
               exit(0);                     /* bye-bye */
           }
    }

    /* We hit end of file with no matching error number */

    printf("Error #%d not found in error file\n",errnum);     
    fclose(errfp);
    usage();
}                                         /* end of main() */

usage()
{
   printf("usage: err errnum [errfile]\n");
   printf("       where errnum is the error number to \n");
   printf("       identify and errfile is an optional\n");
   printf("       alternate errfile.  Default is file \n");
   printf("       %s\n",ERRFILE);
   exit(0);
}

----------------- CUT ------------- HERE -------------------------------------
-- 
_________________________________________________________________________
UUCP:	(1) seismo!dolqci!irsdcp!scsnet!sunder		Mark E. Sunderlin
	(2) ihnp4!chinet!megabyte			aka Dr. Megabyte
CIS:	74026,3235					(202) 634-2529
Quote:	"You have to have FAITH, for that to work on me!"   
Mail:	IRS 1111 Constitution Ave. NW  PM:S:D:NO Washington, DC 20224