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 }