1 /**********************************************************************
2 * File: errcode.c (Formerly error.c)
3 * Description: Generic error handler function
4 * Author: Ray Smith
5 * Created: Tue May 1 16:28:39 BST 1990
6 *
7 * (C) Copyright 1989, Hewlett-Packard Ltd.
8 ** Licensed under the Apache License, Version 2.0 (the "License");
9 ** you may not use this file except in compliance with the License.
10 ** You may obtain a copy of the License at
11 ** http://www.apache.org/licenses/LICENSE-2.0
12 ** Unless required by applicable law or agreed to in writing, software
13 ** distributed under the License is distributed on an "AS IS" BASIS,
14 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 ** See the License for the specific language governing permissions and
16 ** limitations under the License.
17 *
18 **********************************************************************/
19
20 #include "mfcpch.h"
21 #include <signal.h>
22 #include "errcode.h"
23 #include "tprintf.h"
24
25 /*inT16 global_loc_code = LOC_INIT;//location code
26 inT16 global_subloc_code = SUBLOC_NORM;
27 //pass2 subloc code
28 inT16 global_subsubloc_code = SUBSUBLOC_OTHER;
29 //location code
30 inT16 global_abort_code = NO_ABORT_CODE;
31 //Prog abort code
32 */
signal_exit(int signal_code)33 void signal_exit( //
34 int signal_code //Signal which
35 ) {
36 /*int exit_status;
37
38 if ((global_loc_code == LOC_PASS2) || (global_loc_code == LOC_FUZZY_SPACE))
39 global_loc_code += global_subloc_code + global_subsubloc_code;
40
41 if (signal_code < 0) {
42 exit_status = global_loc_code * 8 + global_abort_code * 2 + 1;
43 tprintf ("Signal_exit %d ABORT. LocCode: %d AbortCode: %d\n",
44 exit_status, global_loc_code, global_abort_code);
45 }
46 else {
47 exit_status = global_loc_code * 8 + signal_code * 2;
48 tprintf ("Signal_exit %d SIGNAL ABORT. LocCode: %d SignalCode: %d\n",
49 exit_status, global_loc_code, signal_code);
50 }
51
52 exit(exit_status);*/
53 exit(signal_code);
54 }
55
56
57 /*************************************************************************
58 * err_exit()
59 * All program exits should go through this point. It allows a meaningful status
60 * code to be generated for the real exit() call. The status code is made up
61 * as follows:
62 * Bit 0 : 1 = Program Abort 0 = System Abort
63 * Bits 1,2 : IF bit 0 = 1 THEN ERRCODE::abort_code
64 * ELSE 0 = Bus Err or Seg Vi
65 * 1 = Floating point exception
66 * 2 = TimeOut (Signal 15 from command timer)
67 * 3 = Any other signal
68 * Bits 3..7 : Location code NEVER 0 !
69 *************************************************************************/
70
71 //extern "C" {
72
err_exit()73 void err_exit() {
74 signal_exit (-1);
75 }
76
77
signal_termination_handler(int sig)78 void signal_termination_handler( //The real signal
79 int sig) {
80 tprintf ("Signal_termination_handler called with signal %d\n", sig);
81 switch (sig) {
82 case SIGABRT:
83 signal_exit (-1); //use abort code
84 // case SIGBUS:
85 case SIGSEGV:
86 signal_exit (0);
87 case SIGFPE:
88 signal_exit (1); //floating point
89 case SIGTERM:
90 signal_exit (2); //timeout by cmdtimer
91 default:
92 signal_exit (3); //Anything else
93 }
94 }
95
96
97 //}; //end extern "C"
98
99
set_global_loc_code(int loc_code)100 void set_global_loc_code(int loc_code) {
101 // global_loc_code = loc_code;
102
103 }
104
105
set_global_subloc_code(int loc_code)106 void set_global_subloc_code(int loc_code) {
107 // global_subloc_code = loc_code;
108
109 }
110
111
set_global_subsubloc_code(int loc_code)112 void set_global_subsubloc_code(int loc_code) {
113 // global_subsubloc_code = loc_code;
114
115 }
116