|
|
1.1 root 1: # include <pipes.h>
2: # include <ingres.h>
3: # include <aux.h>
4: # include <version.h>
5: # include "IIglobals.h"
6: # include <sccs.h>
7:
8: SCCSID(@(#)IIp_err.c 8.1 12/31/84)
9:
10:
11: /*
12: ** IIp_err
13: **
14: ** This routine processes an IIerror call for printout.This involves doing
15: ** a lookup in the .../files/error? files, where ? is the thous-
16: ** ands digit of the error number. The associated error message
17: ** then goes through parameter substitution and is printed.
18: **
19: ** In the current version, the error message is just printed.
20: */
21:
22: IIp_err(err_num, argc, argv)
23: int err_num;
24: int argc;
25: char **argv;
26: {
27: register char *p;
28: char buf[512];
29: int i;
30: struct iob iob;
31: register char c;
32: extern char *IIerrfilen();
33: extern char *IIconcatv();
34:
35: /* IIfopen the appropriate error file */
36: p = buf;
37: IIerrfilen(err_num / 1000, p);
38:
39: # ifdef xETR2
40: if (IIdebug > 1)
41: printf("IIp_err : with IIerrfilen ret \"%s\"\n", p);
42: # endif
43:
44: if (IIfopen(p, &iob) < 0)
45: return (0);
46:
47: /* read in the code and check for correct */
48: for (;;)
49: {
50: p = buf;
51: while ((c = IIgetc(&iob)) != '\t')
52: {
53: if (c <= 0)
54: {
55: if (IIclose(&iob) < 0)
56: IIsyserr("IIp_err: bad close 1");
57: return (0);
58: }
59: *p++ = c;
60: }
61: *p = 0;
62: if (IIatoi(buf, &i))
63: IIsyserr("IIp_err: bad error file %d\n%s",
64: err_num, buf);
65: if (i != err_num)
66: {
67: while ((c = IIgetc(&iob)) != ERRDELIM)
68: if (c <= 0)
69: IIsyserr("IIp_err: format err %d", err_num);
70: IIgetc(&iob); /* throw out the newline */
71: continue;
72: }
73:
74: /* got the correct line, print it doing parameter substitution */
75: printf("%d: ", err_num);
76: for (;;)
77: {
78: c = IIgetc(&iob);
79: if (c <= 0 || c == ERRDELIM)
80: {
81: printf("\n");
82: if (IIclose(&iob) < 0)
83: IIsyserr("IIp_err: bad close 2");
84: return (1);
85: }
86: if (c == '%')
87: {
88: c = IIgetc(&iob);
89: for (p = argv[c - '0']; c = *p; p++)
90: {
91: if (c < 040 || c >= 0177)
92: printf("\\%o", c);
93: else
94: putchar(c);
95: }
96: continue;
97: }
98: putchar(c);
99: }
100: }
101: }
102:
103: /*
104: ** IIerrfilen -- Returns the pathname where the error file can be found
105: ** into "buf".
106: **
107: ** It is assumed that the error number cannot be more than 999.
108: ** Returned is concat of : IIPathname, "/files/error", VERSION (w/o mod),
109: ** "_num".
110: */
111:
112: char *
113: IIerrfilen(num, buf)
114: int num;
115: char *buf;
116: {
117: register char *cp;
118: char ver[12];
119: extern char *IIconcatv();
120:
121: IIconcatv(ver, VERSION, 0);
122:
123: /* now insert the "_X" */
124: cp = &ver[IIlength(ver)];
125: *cp++ = '_';
126: *cp = '\0';
127: IIconcatv(ver, ver, IIitos(num), 0);
128:
129:
130: return (IIconcatv(buf, IIPathname, "/files/error", ver, 0));
131: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.