summaryrefslogtreecommitdiffstats
path: root/eBones/compile_et/error_message.c
blob: 92cec576e4c6e8bd9641fa1f86c70269bb9ba7eb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
 * Copyright 1987 by the Student Information Processing Board
 * of the Massachusetts Institute of Technology
 * For copyright info, see "Copyright.SIPB".
 *
 *	from: error_message.c,v 1.1 86/11/10 21:34:34 spook Exp $
 *	$Id: error_message.c,v 1.3 1994/09/09 21:43:22 g89r4222 Exp $
 */

#include <stdio.h>
#include "error_table.h"
extern int sys_nerr;

static char buffer[25];

char *
error_message(code)
     int code;
{
     register int offset;
     register error_table **et;
     register int table_num;
     register int div;
     register char *cp;

     offset = code & ((1<<ERRCODE_RANGE)-1);
     table_num = code - offset;
     if ((_et_list == (error_table **)NULL) && table_num)
	  goto oops;
     if (!table_num) {
	  if (offset < sys_nerr)
	       return(sys_errlist[offset]);
	  else
	       goto oops;
     }
     for (et = _et_list; *et != (error_table *)NULL; et++) {
	  if ((*et)->base == table_num) {
	       /* This is the right table */
	       if ((*et)->n_msgs <= offset)
		    goto oops;
	       return((*et)->msgs[offset]);
	  }
     }
 oops:
     cp = buffer;
     {
	  register char *cp1;
	  for (cp1 = "Unknown code "; *cp1; cp1++, cp++)
	       *cp = *cp1;
	  if (table_num) {
	       for (cp1 = error_table_name(table_num); *cp1; cp1++, cp++)
		    *cp = *cp1;
	       *cp++ = ' ';
	       *cp = '\0';
	  }
     }
     div = 1000000000;
     if (offset == 0) {
	  *cp++ = '0';
	  *cp = '\0';
	  return(buffer);
     }
     while (div > offset)
	  div /= 10;
     do {
	  register int n = offset / div;
	  *cp++ = '0' + n;
	  offset -= n * div;
	  div /= 10;
     } while (offset && div);
     while (div) {
	  *cp++ = '0';
	  div /= 10;
     }
     *cp = '\0';
     return(buffer);
}
OpenPOWER on IntegriCloud