|
|
1.1 ! root 1: /* ! 2: char id_err[] = "@(#)err.c 1.11"; ! 3: * ! 4: * file i/o error and initialization routines ! 5: */ ! 6: ! 7: #include <sys/types.h> ! 8: #include <sys/stat.h> ! 9: #include <signal.h> ! 10: #include "fiodefs.h" ! 11: ! 12: /* ! 13: * global definitions ! 14: */ ! 15: ! 16: char *tmplate = "tmp.FXXXXXX"; /* scratch file template */ ! 17: char *fortfile = "fort.%d"; /* default file template */ ! 18: ! 19: unit units[MXUNIT] = 0; /*unit table*/ ! 20: flag reading; /*1 if reading, 0 if writing*/ ! 21: flag external; /*1 if external io, 0 if internal */ ! 22: flag sequential; /*1 if sequential io, 0 if direct*/ ! 23: flag formatted; /*1 if formatted io, 0 if unformatted, -1 if list*/ ! 24: char *fmtbuf, *icptr, *icend, *fmtptr; ! 25: int (*doed)(),(*doned)(); ! 26: int (*doend)(),(*donewrec)(),(*dorevert)(),(*dotab)(); ! 27: int (*lioproc)(); ! 28: int (*getn)(),(*putn)(),(*ungetn)(); /*for formatted io*/ ! 29: icilist *svic; /* active internal io list */ ! 30: FILE *cf; /*current file structure*/ ! 31: unit *curunit; /*current unit structure*/ ! 32: int lunit; /*current logical unit*/ ! 33: char *lfname; /*current filename*/ ! 34: int recpos; /*place in current record*/ ! 35: ftnint recnum; /* current record number */ ! 36: int reclen; /* current record length */ ! 37: int cursor,scale; ! 38: int radix; ! 39: ioflag signit,tab,cplus,cblank,elist,errflag,endflag,lquit,l_first; ! 40: flag leof; ! 41: int lcount,line_len; ! 42: struct ioiflg ioiflg_; /* initialization flags */ ! 43: ! 44: /*error messages*/ ! 45: ! 46: extern char *sys_errlist[]; ! 47: extern int sys_nerr; ! 48: ! 49: extern char *f_errlist[]; ! 50: extern int f_nerr; ! 51: ! 52: ! 53: fatal(n,s) char *s; ! 54: { ! 55: ftnint lu; ! 56: ! 57: for (lu=1; lu < MXUNIT; lu++) ! 58: flush_(&lu); ! 59: if(n<0) ! 60: fprintf(stderr,"%s: [%d] end of file\n",s,n); ! 61: else if(n>=0 && n<sys_nerr) ! 62: fprintf(stderr,"%s: [%d] %s\n",s,n,sys_errlist[n]); ! 63: else if(n>=F_ER && n<F_MAXERR) ! 64: fprintf(stderr,"%s: [%d] %s\n",s,n,f_errlist[n-F_ER]); ! 65: else ! 66: fprintf(stderr,"%s: [%d] unknown error number\n",s,n); ! 67: if(external) ! 68: { ! 69: if(!lfname) switch (lunit) ! 70: { case STDERR: lfname = "stderr"; ! 71: break; ! 72: case STDIN: lfname = "stdin"; ! 73: break; ! 74: case STDOUT: lfname = "stdout"; ! 75: break; ! 76: default: lfname = ""; ! 77: } ! 78: fprintf(stderr,"logical unit %d, named '%s'\n",lunit,lfname); ! 79: } ! 80: if (elist) ! 81: { fprintf(stderr,"lately: %s %s %s %s IO\n", ! 82: reading?"reading":"writing", ! 83: sequential?"sequential":"direct", ! 84: formatted>0?"formatted":(formatted<0?"list":"unformatted"), ! 85: external?"external":"internal"); ! 86: if (formatted) ! 87: { if(fmtbuf) prnt_fmt(n); ! 88: if (external) ! 89: { if(reading && curunit->useek) ! 90: prnt_ext(); /* print external data */ ! 91: } ! 92: else prnt_int(); /* print internal array */ ! 93: } ! 94: } ! 95: f_exit(); ! 96: _cleanup(); ! 97: #if vax ! 98: signal(SIGILL, SIG_DFL); ! 99: sigsetmask(0); ! 100: #else pdp11 ! 101: signal(SIGIOT, SIG_DFL); ! 102: #endif ! 103: abort(); ! 104: } ! 105: ! 106: prnt_ext() ! 107: { int ch; ! 108: int i=1; ! 109: long loc; ! 110: fprintf (stderr, "part of last data: "); ! 111: loc = ftell(curunit->ufd); ! 112: if(loc) ! 113: { if(loc==1L) rewind(curunit->ufd); ! 114: else for(;i<12 && last_char(curunit->ufd)!='\n';i++); ! 115: while(i--) ffputc(fgetc(curunit->ufd),stderr); ! 116: } ! 117: fputc('|',stderr); ! 118: for(i=0;i<5 && (ch=fgetc(curunit->ufd))!=EOF;i++) ffputc(ch,stderr); ! 119: fputc('\n',stderr); ! 120: } ! 121: ! 122: prnt_int() ! 123: { char *ep; ! 124: fprintf (stderr,"part of last string: "); ! 125: ep = icptr - (recpos<12?recpos:12); ! 126: while (ep<icptr) ffputc(*ep++,stderr); ! 127: fputc('|',stderr); ! 128: while (ep<(icptr+5) && ep<icend) ffputc(*ep++,stderr); ! 129: fputc('\n',stderr); ! 130: } ! 131: ! 132: prnt_fmt(n) int n; ! 133: { int i; char *ep; ! 134: fprintf(stderr, "part of last format: "); ! 135: if(n==F_ERFMT) ! 136: { i = fmtptr - fmtbuf; ! 137: ep = fmtptr - (i<20?i:20); ! 138: i = i + 5; ! 139: } ! 140: else ! 141: { ep = fmtbuf; ! 142: i = 25; ! 143: fmtptr = fmtbuf - 1; ! 144: } ! 145: while(i && *ep) ! 146: { ffputc((*ep==GLITCH)?'"':*ep,stderr); ! 147: if(ep==fmtptr) fputc('|',stderr); ! 148: ep++; i--; ! 149: } ! 150: fputc('\n',stderr); ! 151: } ! 152: ! 153: ffputc(c, f) ! 154: int c; ! 155: FILE *f; ! 156: { ! 157: c &= 0177; ! 158: if (c < ' ' || c == 0177) ! 159: { ! 160: fputc('^', f); ! 161: c ^= 0100; ! 162: } ! 163: fputc(c, f); ! 164: } ! 165: ! 166: /*initialization routine*/ ! 167: f_init() ! 168: { ! 169: ini_std(STDERR, stderr, WRITE); ! 170: ini_std(STDIN, stdin, READ); ! 171: ini_std(STDOUT, stdout, WRITE); ! 172: } ! 173:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.