|
|
1.1 root 1: /* UNIX HEADERS */
2: #include <stdio.h>
3: #include <signal.h>
4:
5: /* COMMON SGS HEADERS */
6: #include "filehdr.h"
7: #include "ldfcn.h"
8:
9: /* SGS SPECIFIC HEADER */
10: #include "sgs.h"
11:
12: /* STRIP HEADER */
13: #include "defs.h"
14:
15:
16: /* error(file, message, level)
17: *
18: * prints an error message
19: * and closes what ever files are open associated with the error level and
20: * the current state of the lister
21: *
22: * simply returns
23: */
24:
25:
26: error(file, message, level)
27:
28: char *file;
29: char *message;
30: int level;
31:
32: {
33: /* UNIX FUNCTIONS CALLED */
34: extern fprintf( ),
35: fclose( ),
36: unlink( );
37:
38: /* COMMON OBJECT FILE ACCESS ROUTINE CALLED */
39: extern int ldaclose( );
40:
41: /* EXTERNAL VARIABLES USED */
42: extern LDFILE *ldptr,
43: *fwdptr;
44: extern FILE *strp1,
45: *strp2,
46: *stripout;
47: #if AR16WR
48: extern FILE *tempfil,
49: *readtmp;
50: #endif
51: extern char tmpnam1[ ],
52: tmpnam2[ ];
53:
54:
55: fprintf(stderr, "%sstrip: %s: %s\n", SGS, file, message);
56:
57: switch(level) {
58: case 0:
59: break;
60:
61: case 1:
62: ldaclose(ldptr);
63: break;
64:
65: case 2:
66: ldaclose(ldptr);
67: if (strp1 != NULL)
68: fclose(strp1);
69: if (strp2 != NULL)
70: fclose(strp2);
71: #if AR16WR
72: if (tempfil != NULL)
73: fclose(tempfil);
74: if (readtmp != NULL)
75: fclose(readtmp);
76: #endif
77: break;
78:
79: case 3:
80: ldaclose(ldptr);
81: ldaclose(fwdptr);
82: if (strp1 != NULL)
83: fclose(strp1);
84: if (strp2 != NULL)
85: fclose(strp2);
86: #if AR16WR
87: if (tempfil != NULL)
88: fclose(tempfil);
89: if (readtmp != NULL)
90: fclose(readtmp);
91: #endif
92: break;
93:
94: case 4:
95: if (stripout != NULL)
96: fclose(stripout);
97: unlink(tmpnam1);
98: break;
99:
100: case 5:
101: if (strp1 != NULL)
102: fclose(strp1);
103: if (strp2 != NULL)
104: fclose(strp2);
105: #if AR16WR
106: if (tempfil != NULL)
107: fclose(tempfil);
108: if (readtmp != NULL)
109: fclose(readtmp);
110: #endif
111: if (stripout != NULL)
112: fclose(stripout);
113: unlink(file);
114: break;
115:
116: default:
117: break;
118: }
119: return;
120: }
121:
122:
123:
124:
125: /* catchsig( )
126: *
127: * prepares strip to field interrupts (via function onintr( ))
128: * so that if interrupted strip can remove the temporary files it has
129: * created
130: *
131: * catchsig simply returns
132: */
133:
134:
135: catchsig( )
136:
137: {
138: /* UNIX FUNCTION CALLED */
139: extern int (*signal( ))( );
140:
141: /* EXTERNAL VARIABLE USED */
142: extern onintr( );
143:
144: if ((signal(SIGINT, SIG_IGN)) == SIG_DFL)
145: signal(SIGINT, onintr);
146:
147: if ((signal(SIGHUP, SIG_IGN)) == SIG_DFL)
148: signal(SIGHUP, onintr);
149:
150: if ((signal(SIGQUIT, SIG_IGN)) == SIG_DFL)
151: signal(SIGQUIT, onintr);
152:
153: if ((signal(SIGTERM, SIG_IGN)) == SIG_DFL)
154: signal(SIGTERM, onintr);
155:
156: return;
157:
158: }
159:
160:
161:
162:
163: /* STATIC VARIABLES USED */
164: static int (*oldint)( );
165: static int (*oldhup)( );
166: static int (*oldquit)( );
167: static int (*oldterm)( );
168:
169:
170: /* ignorsig( )
171: *
172: * turns off interrupts but saves their former state in static variables
173: * so that previous state of interrupts can be restored later
174: *
175: * ignorsig simply returns
176: */
177:
178:
179: ignorsig( )
180:
181: {
182: /* UNIX FUNCTION CALLED */
183: extern int (*signal( ))( );
184:
185: oldint = signal(SIGINT, SIG_IGN);
186: oldhup = signal(SIGHUP, SIG_IGN);
187: oldquit = signal(SIGQUIT, SIG_IGN);
188: oldterm = signal(SIGTERM, SIG_IGN);
189:
190: return;
191: }
192:
193:
194:
195:
196: /* resetsig( )
197: *
198: * restores state of interrupts to what they were before ignorsig was
199: * called
200: * uses static variables old-whatever to do the restoration
201: *
202: * simply returns
203: */
204:
205:
206: resetsig( )
207:
208: {
209: /* UNIX FUNCTION CALLED */
210: extern int (*signal( ))( );
211:
212: signal(SIGINT, oldint);
213: signal(SIGHUP, oldhup);
214: signal(SIGQUIT, oldquit);
215: signal(SIGTERM, oldterm);
216:
217: return;
218: }
219:
220:
221:
222:
223: /* onintr( )
224: *
225: * is strip's interrupt handling routine
226: * onintr turns off interrupts while it closes all files that may be open
227: * and unlinks strip's temporary file
228: *
229: * onintr always exits fatally
230: */
231:
232:
233: onintr( )
234:
235: {
236: /* UNIX FUNCTIONS CALLED */
237: extern int (*signal( ))( );
238: extern fclose( ),
239: unlink( ),
240: exit( );
241:
242: /* COMMON OBJECT FILE ACCESS ROUTINE CALLED */
243: extern int ldaclose( );
244:
245: /* EXTERNAL VARIABLES USED */
246: extern LDFILE *ldptr,
247: *fwdptr;
248: extern FILE *strp1,
249: *strp2,
250: *stripout;
251: #if AR16WR
252: extern FILE *tempfil,
253: *readtmp;
254: #endif
255: extern char tmpnam1[ ],
256: tmpnam2[ ],
257: tmpnam3[ ];
258:
259:
260: /* ignore signals */
261: signal(SIGINT, SIG_IGN);
262: signal(SIGHUP, SIG_IGN);
263: signal(SIGQUIT, SIG_IGN);
264: signal(SIGTERM, SIG_IGN);
265:
266: ldaclose(ldptr);
267: ldaclose(fwdptr);
268: if (strp1 != NULL)
269: fclose(strp1);
270: if (strp2 != NULL)
271: fclose(strp2);
272: #if AR16WR
273: if (tempfil != NULL)
274: fclose(tempfil);
275: if (readtmp != NULL)
276: fclose(readtmp);
277: #endif
278: unlink(tmpnam1);
279: unlink(tmpnam2);
280: unlink(tmpnam3);
281: if (stripout != NULL)
282: fclose(stripout);
283:
284: exit(FATAL);
285:
286: }
287:
288: /*
289: * static char ID[] = "@(#) fcns.c: 1.5 2/13/83";
290: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.