1*60027Storek /* 2*60027Storek * $Header: error_message.c,v 1.1 86/11/10 21:34:34 spook Exp $ 3*60027Storek * $Source: /mit/s/p/spook/Work/et/RCS/error_message.c,v $ 4*60027Storek * $Locker: spook $ 5*60027Storek * 6*60027Storek * Copyright 1987 by the Student Information Processing Board 7*60027Storek * of the Massachusetts Institute of Technology 8*60027Storek * 9*60027Storek * For copyright info, see "mit-sipb-copyright.h". 10*60027Storek */ 11*60027Storek 12*60027Storek #include <stdio.h> 13*60027Storek #include "error_table.h" 14*60027Storek #include "mit-sipb-copyright.h" 15*60027Storek extern char *sys_errlist[]; 16*60027Storek extern int sys_nerr; 17*60027Storek 18*60027Storek static char buffer[25]; 19*60027Storek 20*60027Storek char * 21*60027Storek error_message(code) 22*60027Storek int code; 23*60027Storek { 24*60027Storek register int offset; 25*60027Storek register error_table **et; 26*60027Storek register int table_num; 27*60027Storek register int div; 28*60027Storek register char *cp; 29*60027Storek 30*60027Storek offset = code & ((1<<ERRCODE_RANGE)-1); 31*60027Storek table_num = code - offset; 32*60027Storek if ((_et_list == (error_table **)NULL) && table_num) 33*60027Storek goto oops; 34*60027Storek if (!table_num) { 35*60027Storek if (offset < sys_nerr) 36*60027Storek return(sys_errlist[offset]); 37*60027Storek else 38*60027Storek goto oops; 39*60027Storek } 40*60027Storek for (et = _et_list; *et != (error_table *)NULL; et++) { 41*60027Storek if ((*et)->base == table_num) { 42*60027Storek /* This is the right table */ 43*60027Storek if ((*et)->n_msgs <= offset) 44*60027Storek goto oops; 45*60027Storek return((*et)->msgs[offset]); 46*60027Storek } 47*60027Storek } 48*60027Storek oops: 49*60027Storek cp = buffer; 50*60027Storek { 51*60027Storek register char *cp1; 52*60027Storek for (cp1 = "Unknown code "; *cp1; cp1++, cp++) 53*60027Storek *cp = *cp1; 54*60027Storek if (table_num) { 55*60027Storek for (cp1 = error_table_name(table_num); *cp1; cp1++, cp++) 56*60027Storek *cp = *cp1; 57*60027Storek *cp++ = ' '; 58*60027Storek *cp = '\0'; 59*60027Storek } 60*60027Storek } 61*60027Storek div = 1000000000; 62*60027Storek if (offset == 0) { 63*60027Storek *cp++ = '0'; 64*60027Storek *cp = '\0'; 65*60027Storek return(buffer); 66*60027Storek } 67*60027Storek while (div > offset) 68*60027Storek div /= 10; 69*60027Storek do { 70*60027Storek register int n = offset / div; 71*60027Storek *cp++ = '0' + n; 72*60027Storek offset -= n * div; 73*60027Storek div /= 10; 74*60027Storek } while (offset && div); 75*60027Storek while (div) { 76*60027Storek *cp++ = '0'; 77*60027Storek div /= 10; 78*60027Storek } 79*60027Storek *cp = '\0'; 80*60027Storek return(buffer); 81*60027Storek } 82