1*1648Smckusick /* Copyright (c) 1979 Regents of the University of California */ 2*1648Smckusick 3*1648Smckusick static char sccsid[] = "@(#)ERROR.c 1.1 10/30/80"; 4*1648Smckusick 5*1648Smckusick #include "stdio.h" 6*1648Smckusick #include "signal.h" 7*1648Smckusick #include "h01errs.h" 8*1648Smckusick 9*1648Smckusick /* 10*1648Smckusick * Routine ERROR is called from the runtime library when a runtime error 11*1648Smckusick * occurs. Its arguments are the internal number of the error which occurred, 12*1648Smckusick * and an error specific piece of error data. The error file is constructed 13*1648Smckusick * from errdata by the makefile using the editor script make.ed1. 14*1648Smckusick */ 15*1648Smckusick ERROR(errnum, errdata) 16*1648Smckusick 17*1648Smckusick long errnum; 18*1648Smckusick union cvt { 19*1648Smckusick long longdat; 20*1648Smckusick char *strngdat; 21*1648Smckusick double dbldat; 22*1648Smckusick } errdata; 23*1648Smckusick { 24*1648Smckusick PFLUSH(); 25*1648Smckusick fputc('\n',stderr); 26*1648Smckusick SETRACE(); 27*1648Smckusick switch (errnum) { 28*1648Smckusick case ECHR: 29*1648Smckusick fprintf(stderr, "Argument to chr of %d is out of range\n" 30*1648Smckusick ,errdata.longdat); 31*1648Smckusick return(errdata.longdat); 32*1648Smckusick case EHALT: 33*1648Smckusick fputs("Call to procedure halt\n",stderr); 34*1648Smckusick PCEXIT(0); 35*1648Smckusick case ENILPTR: 36*1648Smckusick fputs("Pointer value out of legal range\n",stderr); 37*1648Smckusick return(0); 38*1648Smckusick case EPASTEOF: 39*1648Smckusick fprintf(stderr,"%s: Tried to read past end of file\n" 40*1648Smckusick ,errdata.strngdat); 41*1648Smckusick return(0); 42*1648Smckusick case EREADIT: 43*1648Smckusick fprintf(stderr,"%s: Attempt to read, but open for writing\n" 44*1648Smckusick ,errdata.strngdat); 45*1648Smckusick return(0); 46*1648Smckusick case EWRITEIT: 47*1648Smckusick fprintf(stderr,"%s: Attempt to write, but open for reading\n" 48*1648Smckusick ,errdata.strngdat); 49*1648Smckusick return(0); 50*1648Smckusick case ECLOSE: 51*1648Smckusick fprintf(stderr,"%s: Close failed\n",errdata.strngdat); 52*1648Smckusick return(0); 53*1648Smckusick case ELLIMIT: 54*1648Smckusick fprintf(stderr,"%s: Line limit exceeded\n",errdata.strngdat); 55*1648Smckusick return(0); 56*1648Smckusick case ESQRT: 57*1648Smckusick fprintf(stderr,"Negative argument of %E to sqrt\n" 58*1648Smckusick ,errdata.dbldat); 59*1648Smckusick return(errdata.dbldat); 60*1648Smckusick case EREFINAF: 61*1648Smckusick fprintf(stderr,"%s: ",errdata.strngdat); 62*1648Smckusick case ENOFILE: 63*1648Smckusick fputs("Reference to an inactive file\n",stderr); 64*1648Smckusick return(0); 65*1648Smckusick case EWRITE: 66*1648Smckusick fputs("Could not write to ",stderr); 67*1648Smckusick perror(errdata.strngdat); 68*1648Smckusick return(0); 69*1648Smckusick case EOPEN: 70*1648Smckusick fputs("Could not open ",stderr); 71*1648Smckusick perror(errdata.strngdat); 72*1648Smckusick return(0); 73*1648Smckusick case ECREATE: 74*1648Smckusick fputs("Could not create ",stderr); 75*1648Smckusick perror(errdata.strngdat); 76*1648Smckusick return(0); 77*1648Smckusick case EREMOVE: 78*1648Smckusick fputs("Could not remove ",stderr); 79*1648Smckusick perror(errdata.strngdat); 80*1648Smckusick return(0); 81*1648Smckusick case ESEEK: 82*1648Smckusick fputs("Could not reset ",stderr); 83*1648Smckusick perror(errdata.strngdat); 84*1648Smckusick return(0); 85*1648Smckusick case ENAMESIZE: 86*1648Smckusick fprintf(stderr,"%s: File name too long\n",errdata.strngdat); 87*1648Smckusick return(0); 88*1648Smckusick case ELN: 89*1648Smckusick fprintf(stderr,"Non-positive argument of %E to ln\n" 90*1648Smckusick ,errdata.dbldat); 91*1648Smckusick return(errdata.dbldat); 92*1648Smckusick case EBADINUM: 93*1648Smckusick fprintf(stderr,"%s: Bad data found on integer read\n" 94*1648Smckusick ,errdata.strngdat); 95*1648Smckusick return(0); 96*1648Smckusick case EBADFNUM: 97*1648Smckusick fprintf(stderr,"%s: Bad data found on real read\n" 98*1648Smckusick ,errdata.strngdat); 99*1648Smckusick return(0); 100*1648Smckusick case ENUMNTFD: 101*1648Smckusick fprintf(stderr, 102*1648Smckusick "Unknown name \"%s\" found on enumerated type read\n", 103*1648Smckusick errdata.strngdat); 104*1648Smckusick return(0); 105*1648Smckusick case ENAMRNG: 106*1648Smckusick fprintf(stderr, 107*1648Smckusick "Enumerated type value of %d is out of range on output\n", 108*1648Smckusick errdata.longdat); 109*1648Smckusick return(errdata.longdat); 110*1648Smckusick case EFMTSIZE: 111*1648Smckusick fprintf(stderr,"Negative format width: %d\n",errdata.longdat); 112*1648Smckusick return(0); 113*1648Smckusick case EGOTO: 114*1648Smckusick fputs("Active frame not found in non-local goto\n", stderr); 115*1648Smckusick return(0); 116*1648Smckusick case ECASE: 117*1648Smckusick fprintf(stderr,"Label of %d not found in case\n" 118*1648Smckusick ,errdata.longdat); 119*1648Smckusick return(errdata.longdat); 120*1648Smckusick case EOUTOFMEM: 121*1648Smckusick fputs("Ran out of memory\n",stderr); 122*1648Smckusick return(0); 123*1648Smckusick case ECTLWR: 124*1648Smckusick fprintf(stderr, "Range lower bound of %d out of set bounds\n", 125*1648Smckusick errdata.longdat); 126*1648Smckusick return(0); 127*1648Smckusick case ECTUPR: 128*1648Smckusick fprintf(stderr, "Range upper bound of %d out of set bounds\n", 129*1648Smckusick errdata.longdat); 130*1648Smckusick return(0); 131*1648Smckusick case ECTSNG: 132*1648Smckusick fprintf(stderr, "Value of %d out of set bounds\n", 133*1648Smckusick errdata.longdat); 134*1648Smckusick return(0); 135*1648Smckusick case ENARGS: 136*1648Smckusick if (errdata.longdat < 0) 137*1648Smckusick fprintf(stderr, 138*1648Smckusick "There were %d too few arguments to formal routine\n", 139*1648Smckusick -errdata.longdat); 140*1648Smckusick else 141*1648Smckusick fprintf(stderr, 142*1648Smckusick "There were %d too many arguments to formal routine\n", 143*1648Smckusick errdata.longdat); 144*1648Smckusick return(0); 145*1648Smckusick case EARGV: 146*1648Smckusick fprintf(stderr,"Argument to argv of %d is out of range\n" 147*1648Smckusick ,errdata.longdat); 148*1648Smckusick return(errdata.longdat); 149*1648Smckusick case EPACK: 150*1648Smckusick fprintf(stderr,"i = %d: Bad i to pack(a,i,z)\n" 151*1648Smckusick ,errdata.longdat); 152*1648Smckusick return(errdata.longdat); 153*1648Smckusick case EUNPACK: 154*1648Smckusick fprintf(stderr,"i = %d: Bad i to unpack(z,a,i)\n" 155*1648Smckusick ,errdata.longdat); 156*1648Smckusick return(errdata.longdat); 157*1648Smckusick case ERANGE: 158*1648Smckusick fprintf(stderr,"Value of %d is out of range\n",errdata.longdat); 159*1648Smckusick return(errdata.longdat); 160*1648Smckusick case ESUBSC: 161*1648Smckusick fprintf(stderr,"Subscript value of %d is out of range\n" 162*1648Smckusick ,errdata.longdat); 163*1648Smckusick return(errdata.longdat); 164*1648Smckusick case EASRT: 165*1648Smckusick fprintf(stderr,"Assertion failed: %s\n",errdata.strngdat); 166*1648Smckusick return(0); 167*1648Smckusick case ESTLIM: 168*1648Smckusick fprintf(stderr, 169*1648Smckusick "Statement count limit exceeded, %d statements executed\n", 170*1648Smckusick errdata.longdat); 171*1648Smckusick return(errdata.longdat); 172*1648Smckusick default: 173*1648Smckusick fputs("Panic: unknown error\n",stderr); 174*1648Smckusick return(0); 175*1648Smckusick } 176*1648Smckusick } 177