11648Smckusick /* Copyright (c) 1979 Regents of the University of California */ 21648Smckusick 3*3857Smckusic static char sccsid[] = "@(#)ERROR.c 1.7 06/08/81"; 41648Smckusick 52179Smckusic #include <stdio.h> 62179Smckusic #include <signal.h> 72179Smckusic #include "h00vars.h" 81648Smckusick #include "h01errs.h" 91648Smckusick 101648Smckusick /* 111648Smckusick * Routine ERROR is called from the runtime library when a runtime error 121648Smckusick * occurs. Its arguments are the internal number of the error which occurred, 131648Smckusick * and an error specific piece of error data. The error file is constructed 141648Smckusick * from errdata by the makefile using the editor script make.ed1. 151648Smckusick */ 163002Smckusic long 17*3857Smckusic ERROR(msg, d1, d2, d3, d4) 181648Smckusick 19*3857Smckusic char *msg; 20*3857Smckusic int d1, d2, d3, d4; 21*3857Smckusic { 221648Smckusick union cvt { 23*3857Smckusic int intdat; 241648Smckusick long longdat; 251648Smckusick char *strngdat; 261648Smckusick double dbldat; 271648Smckusick } errdata; 28*3857Smckusic 29*3857Smckusic errdata.dbldat = 0.0; 30*3857Smckusic errdata.intdat = d1; 311648Smckusick PFLUSH(); 321648Smckusick fputc('\n',stderr); 331648Smckusick SETRACE(); 34*3857Smckusic switch ((int)msg) { 351648Smckusick case ECHR: 363002Smckusic fprintf(stderr, "Argument to chr of %D is out of range\n" 371648Smckusick ,errdata.longdat); 381648Smckusick return(errdata.longdat); 391648Smckusick case EHALT: 401648Smckusick fputs("Call to procedure halt\n",stderr); 411648Smckusick PCEXIT(0); 421648Smckusick case ENILPTR: 431648Smckusick fputs("Pointer value out of legal range\n",stderr); 441648Smckusick return(0); 451648Smckusick case EPASTEOF: 461648Smckusick fprintf(stderr,"%s: Tried to read past end of file\n" 471648Smckusick ,errdata.strngdat); 481648Smckusick return(0); 491648Smckusick case EREADIT: 501648Smckusick fprintf(stderr,"%s: Attempt to read, but open for writing\n" 511648Smckusick ,errdata.strngdat); 521648Smckusick return(0); 531648Smckusick case EWRITEIT: 541648Smckusick fprintf(stderr,"%s: Attempt to write, but open for reading\n" 551648Smckusick ,errdata.strngdat); 561648Smckusick return(0); 571648Smckusick case ECLOSE: 581648Smckusick fprintf(stderr,"%s: Close failed\n",errdata.strngdat); 591648Smckusick return(0); 601648Smckusick case ELLIMIT: 611648Smckusick fprintf(stderr,"%s: Line limit exceeded\n",errdata.strngdat); 621648Smckusick return(0); 631648Smckusick case ESQRT: 643002Smckusic fprintf(stderr,"Negative argument of %e to sqrt\n" 651648Smckusick ,errdata.dbldat); 661648Smckusick return(errdata.dbldat); 671648Smckusick case EREFINAF: 681648Smckusick fprintf(stderr,"%s: ",errdata.strngdat); 691648Smckusick case ENOFILE: 701648Smckusick fputs("Reference to an inactive file\n",stderr); 711648Smckusick return(0); 721648Smckusick case EWRITE: 731648Smckusick fputs("Could not write to ",stderr); 741648Smckusick perror(errdata.strngdat); 751648Smckusick return(0); 761648Smckusick case EOPEN: 771648Smckusick fputs("Could not open ",stderr); 781648Smckusick perror(errdata.strngdat); 791648Smckusick return(0); 801648Smckusick case ECREATE: 811648Smckusick fputs("Could not create ",stderr); 821648Smckusick perror(errdata.strngdat); 831648Smckusick return(0); 841648Smckusick case EREMOVE: 851648Smckusick fputs("Could not remove ",stderr); 861648Smckusick perror(errdata.strngdat); 871648Smckusick return(0); 881648Smckusick case ESEEK: 891648Smckusick fputs("Could not reset ",stderr); 901648Smckusick perror(errdata.strngdat); 911648Smckusick return(0); 921648Smckusick case ENAMESIZE: 931648Smckusick fprintf(stderr,"%s: File name too long\n",errdata.strngdat); 941648Smckusick return(0); 951648Smckusick case ELN: 963002Smckusic fprintf(stderr,"Non-positive argument of %e to ln\n" 971648Smckusick ,errdata.dbldat); 981648Smckusick return(errdata.dbldat); 991648Smckusick case EBADINUM: 1001648Smckusick fprintf(stderr,"%s: Bad data found on integer read\n" 1011648Smckusick ,errdata.strngdat); 1021648Smckusick return(0); 1031648Smckusick case EBADFNUM: 1041648Smckusick fprintf(stderr,"%s: Bad data found on real read\n" 1051648Smckusick ,errdata.strngdat); 1061648Smckusick return(0); 1071648Smckusick case ENUMNTFD: 1081648Smckusick fprintf(stderr, 1091648Smckusick "Unknown name \"%s\" found on enumerated type read\n", 1101648Smckusick errdata.strngdat); 1111648Smckusick return(0); 1121648Smckusick case ENAMRNG: 1131648Smckusick fprintf(stderr, 1143002Smckusic "Enumerated type value of %D is out of range on output\n", 1151648Smckusick errdata.longdat); 1161648Smckusick return(errdata.longdat); 1171648Smckusick case EFMTSIZE: 1183178Smckusic fprintf(stderr,"Non-positive format width: %D\n",errdata.longdat); 1191648Smckusick return(0); 1201648Smckusick case EGOTO: 1211648Smckusick fputs("Active frame not found in non-local goto\n", stderr); 1221648Smckusick return(0); 1231648Smckusick case ECASE: 1243002Smckusic fprintf(stderr,"Label of %D not found in case\n" 1251648Smckusick ,errdata.longdat); 1261648Smckusick return(errdata.longdat); 1271648Smckusick case EOUTOFMEM: 1281648Smckusick fputs("Ran out of memory\n",stderr); 1291648Smckusick return(0); 1301648Smckusick case EARGV: 1313002Smckusic fprintf(stderr,"Argument to argv of %D is out of range\n" 1321648Smckusick ,errdata.longdat); 1331648Smckusick return(errdata.longdat); 1341648Smckusick case EPACK: 1353002Smckusic fprintf(stderr,"i = %D: Bad i to pack(a,i,z)\n" 1361648Smckusick ,errdata.longdat); 1371648Smckusick return(errdata.longdat); 1381648Smckusick case EUNPACK: 1393002Smckusic fprintf(stderr,"i = %D: Bad i to unpack(z,a,i)\n" 1401648Smckusick ,errdata.longdat); 1411648Smckusick return(errdata.longdat); 1421648Smckusick case ERANGE: 1433002Smckusic fprintf(stderr,"Value of %D is out of range\n",errdata.longdat); 1441648Smckusick return(errdata.longdat); 1451648Smckusick case ESUBSC: 1463002Smckusic fprintf(stderr,"Subscript value of %D is out of range\n" 1471648Smckusick ,errdata.longdat); 1481648Smckusick return(errdata.longdat); 1491648Smckusick case EASRT: 1501648Smckusick fprintf(stderr,"Assertion failed: %s\n",errdata.strngdat); 1511648Smckusick return(0); 1521648Smckusick case ESTLIM: 1531648Smckusick fprintf(stderr, 1543002Smckusic "Statement count limit exceeded, %D statements executed\n", 1551648Smckusick errdata.longdat); 1561648Smckusick return(errdata.longdat); 1571648Smckusick default: 158*3857Smckusic fprintf(stderr, msg, d1, d2, d3, d4); 1591648Smckusick return(0); 1601648Smckusick } 1611648Smckusick } 162