|
|
1.1 ! root 1: /* ! 2: char id_err[] = "@(#)err.c 1.4"; ! 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: ! 43: /*error messages*/ ! 44: ! 45: extern char *sys_errlist[]; ! 46: extern int sys_nerr; ! 47: ! 48: extern char *f_errlist[]; ! 49: extern int f_nerr; ! 50: ! 51: ! 52: fatal(n,s) char *s; ! 53: { ! 54: ftnint lu; ! 55: ! 56: for (lu=1; lu < MXUNIT; lu++) ! 57: flush_(&lu); ! 58: if(n<0) ! 59: fprintf(stderr,"%s: [%d] end of file\n",s,n); ! 60: else if(n>=0 && n<sys_nerr) ! 61: fprintf(stderr,"%s: [%d] %s\n",s,n,sys_errlist[n]); ! 62: else if(n>=F_ER && n<F_MAXERR) ! 63: fprintf(stderr,"%s: [%d] %s\n",s,n,f_errlist[n-F_ER]); ! 64: else ! 65: fprintf(stderr,"%s: [%d] unknown error number\n",s,n); ! 66: if(external) ! 67: { ! 68: if(!lfname) switch (lunit) ! 69: { case STDERR: lfname = "stderr"; ! 70: break; ! 71: case STDIN: lfname = "stdin"; ! 72: break; ! 73: case STDOUT: lfname = "stdout"; ! 74: break; ! 75: default: lfname = ""; ! 76: } ! 77: fprintf(stderr,"logical unit %d, named '%s'\n",lunit,lfname); ! 78: } ! 79: if (elist) ! 80: { fprintf(stderr,"lately: %s %s %s %s IO\n", ! 81: reading?"reading":"writing", ! 82: sequential?"sequential":"direct", ! 83: formatted>0?"formatted":(formatted<0?"list":"unformatted"), ! 84: external?"external":"internal"); ! 85: if (formatted) ! 86: { if(fmtbuf) prnt_fmt(n); ! 87: if (external) ! 88: { if(reading && curunit->useek) ! 89: prnt_ext(); /* print external data */ ! 90: } ! 91: else prnt_int(); /* print internal array */ ! 92: } ! 93: } ! 94: f_exit(); ! 95: _cleanup(); ! 96: abort(); ! 97: } ! 98: ! 99: prnt_ext() ! 100: { int ch; ! 101: int i=1; ! 102: long loc; ! 103: fprintf (stderr, "part of last data: "); ! 104: loc = ftell(curunit->ufd); ! 105: if(loc) ! 106: { if(loc==1L) rewind(curunit->ufd); ! 107: else for(;i<12 && last_char(curunit->ufd)!='\n';i++); ! 108: while(i--) ffputc(fgetc(curunit->ufd),stderr); ! 109: } ! 110: fputc('|',stderr); ! 111: for(i=0;i<5 && (ch=fgetc(curunit->ufd)!=EOF);i++) ffputc(ch,stderr); ! 112: fputc('\n',stderr); ! 113: } ! 114: ! 115: prnt_int() ! 116: { char *ep; ! 117: fprintf (stderr,"part of last string: "); ! 118: ep = icptr - (recpos<12?recpos:12); ! 119: while (ep<icptr) ffputc(*ep++,stderr); ! 120: fputc('|',stderr); ! 121: while (ep<(icptr+5) && ep<icend) ffputc(*ep++,stderr); ! 122: fputc('\n',stderr); ! 123: } ! 124: ! 125: prnt_fmt(n) int n; ! 126: { int i; char *ep; ! 127: fprintf(stderr, "part of last format: "); ! 128: if(n==F_ERFMT) ! 129: { i = fmtptr - fmtbuf; ! 130: ep = fmtptr - (i<20?i:20); ! 131: i = i + 5; ! 132: } ! 133: else ! 134: { ep = fmtbuf; ! 135: i = 25; ! 136: fmtptr = fmtbuf - 1; ! 137: } ! 138: while(i && *ep) ! 139: { ffputc((*ep==GLITCH)?'"':*ep,stderr); ! 140: if(ep==fmtptr) fputc('|',stderr); ! 141: ep++; i--; ! 142: } ! 143: fputc('\n',stderr); ! 144: } ! 145: ! 146: ffputc(c, f) ! 147: int c; ! 148: FILE *f; ! 149: { ! 150: c &= 0177; ! 151: if (c < ' ' || c == 0177) ! 152: { ! 153: fputc('^', f); ! 154: c ^= 0100; ! 155: } ! 156: fputc(c, f); ! 157: } ! 158: ! 159: /*initialization routine*/ ! 160: f_init() ! 161: { ! 162: extern short init66_; ! 163: ini_std(STDERR, stderr, WRITE, 0); ! 164: ini_std(STDIN, stdin, READ, 0); ! 165: ini_std(STDOUT, stdout, WRITE, init66_); ! 166: } ! 167:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.