Home | History | Annotate | Download | only in et
      1 /*
      2  * Copyright 1987 by MIT Student Information Processing Board
      3  *
      4  * Permission to use, copy, modify, and distribute this software and
      5  * its documentation for any purpose is hereby granted, provided that
      6  * the names of M.I.T. and the M.I.T. S.I.P.B. not be used in
      7  * advertising or publicity pertaining to distribution of the software
      8  * without specific, written prior permission.  M.I.T. and the
      9  * M.I.T. S.I.P.B. make no representations about the suitability of
     10  * this software for any purpose.  It is provided "as is" without
     11  * express or implied warranty.
     12  */
     13 
     14 #include "config.h"
     15 #include "com_err.h"
     16 #include "error_table.h"
     17 #include "internal.h"
     18 
     19 static const char char_set[] =
     20 	"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_";
     21 
     22 static char buf[6];
     23 
     24 const char * error_table_name(errcode_t num)
     25 {
     26     int ch;
     27     int i;
     28     char *p;
     29 
     30     /* num = aa aaa abb bbb bcc ccc cdd ddd d?? ??? ??? */
     31     p = buf;
     32     num >>= ERRCODE_RANGE;
     33     /* num = ?? ??? ??? aaa aaa bbb bbb ccc ccc ddd ddd */
     34     num &= 077777777L;
     35     /* num = 00 000 000 aaa aaa bbb bbb ccc ccc ddd ddd */
     36     for (i = 4; i >= 0; i--) {
     37 	ch = (int)((num >> BITS_PER_CHAR * i) & ((1 << BITS_PER_CHAR) - 1));
     38 	if (ch != 0)
     39 	    *p++ = char_set[ch-1];
     40     }
     41     *p = '\0';
     42     return(buf);
     43 }
     44