Doxygen Source Code Documentation
err.c File Reference
#include "stdlib.h"#include "sys/types.h"#include "sys/stat.h"#include "f2c.h"#include "fio.h"#include "fmt.h"#include "rawio.h"Go to the source code of this file.
| Defines | |
| #define | MAXERR (sizeof(F_err)/sizeof(char *)+100) | 
| Functions | |
| int(*)(*) | f__donewrec (void) | 
| f__canseek (FILE *f) | |
| void | f__fatal (int n, char *s) | 
| VOID | f_init (Void) | 
| f__nowreading (unit *x) | |
| f__nowwriting (unit *x) | |
| int | err__fl (int f, int m, char *s) | 
| Variables | |
| unit | f__units [MXUNIT] | 
| flag | f__init | 
| cilist * | f__elist | 
| icilist * | f__svic | 
| flag | f__reading | 
| flag | f__cplus | 
| flag | f__cblank | 
| char * | f__fmtbuf | 
| flag | f__external | 
| int(* | f__getn )(void) | 
| int(*)(*) | f__putn (int) | 
| int(* | f__doed )(struct syl *, char *, ftnlen) | 
| int(*)(*) | f__doned (struct syl *) | 
| int(* | f__dorevert )(void) | 
| int(*)(*)(*) | f__doend (void) | 
| flag | f__sequential | 
| flag | f__formatted | 
| FILE * | f__cf | 
| unit * | f__curunit | 
| int | f__recpos | 
| int | f__cursor | 
| int | f__hiwater | 
| int | f__scale | 
| char * | f__icptr | 
| char * | F_err [] | 
Define Documentation
| 
 | 
| 
 Definition at line 81 of file err.c. Referenced by f__fatal(). | 
Function Documentation
| 
 | ||||||||||||||||
| 
 Definition at line 270 of file err.c. References f__fatal(). 
 00272 {
00273         if (!f)
00274                 f__fatal(m, s);
00275         if (f__doend)
00276                 (*f__doend)();
00277         return errno = m;
00278         }
 | 
| 
 | 
| 
 Definition at line 86 of file err.c. References isatty(), and S_ISDIR. Referenced by f_init(), and f_open(). 
 00088 {
00089 #ifdef NON_UNIX_STDIO
00090         return !isatty(fileno(f));
00091 #else
00092         struct stat x;
00093 
00094         if (fstat(fileno(f),&x) < 0)
00095                 return(0);
00096 #ifdef S_IFMT
00097         switch(x.st_mode & S_IFMT) {
00098         case S_IFDIR:
00099         case S_IFREG:
00100                 if(x.st_nlink > 0)      /* !pipe */
00101                         return(1);
00102                 else
00103                         return(0);
00104         case S_IFCHR:
00105                 if(isatty(fileno(f)))
00106                         return(0);
00107                 return(1);
00108 #ifdef S_IFBLK
00109         case S_IFBLK:
00110                 return(1);
00111 #endif
00112         }
00113 #else
00114 #ifdef S_ISDIR
00115         /* POSIX version */
00116         if (S_ISREG(x.st_mode) || S_ISDIR(x.st_mode)) {
00117                 if(x.st_nlink > 0)      /* !pipe */
00118                         return(1);
00119                 else
00120                         return(0);
00121                 }
00122         if (S_ISCHR(x.st_mode)) {
00123                 if(isatty(fileno(f)))
00124                         return(0);
00125                 return(1);
00126                 }
00127         if (S_ISBLK(x.st_mode))
00128                 return(1);
00129 #else
00130         Help! How does fstat work on this system?
00131 #endif
00132 #endif
00133         return(0);      /* who knows what it is? */
00134 #endif
00135 }
 | 
| 
 | 
| 
 | 
| 
 | ||||||||||||
| 
 Definition at line 141 of file err.c. References f__external, f__fmtbuf, f__formatted, f__reading, f__sequential, F_err, MAXERR, sig_die(), and unit::ufnm. Referenced by ap_end(), err__fl(), l_write(), and unit_chk(). 
 00143 {
00144         if(n<100 && n>=0) perror(s); /*SYSDEP*/
00145         else if(n >= (int)MAXERR || n < -1)
00146         {       fprintf(stderr,"%s: illegal error number %d\n",s,n);
00147         }
00148         else if(n == -1) fprintf(stderr,"%s: end of file\n",s);
00149         else
00150                 fprintf(stderr,"%s: %s\n",s,F_err[n-100]);
00151         if (f__curunit) {
00152                 fprintf(stderr,"apparent state: unit %d ",f__curunit-f__units);
00153                 fprintf(stderr, f__curunit->ufnm ? "named %s\n" : "(unnamed)\n",
00154                         f__curunit->ufnm);
00155                 }
00156         else
00157                 fprintf(stderr,"apparent state: internal I/O\n");
00158         if (f__fmtbuf)
00159                 fprintf(stderr,"last format: %s\n",f__fmtbuf);
00160         fprintf(stderr,"lately %s %s %s %s",f__reading?"reading":"writing",
00161                 f__sequential?"sequential":"direct",f__formatted?"formatted":"unformatted",
00162                 f__external?"external":"internal");
00163         sig_die(" IO", 1);
00164 }
 | 
| 
 | 
| 
 Definition at line 195 of file err.c. References unit::ufd, unit::ufmt, unit::ufnm, and unit::uwrt. 
 00197 {
00198         long loc;
00199         int ufmt;
00200         extern char *f__r_mode[];
00201 
00202         if (!x->ufnm)
00203                 goto cantread;
00204         ufmt = x->ufmt;
00205         loc=ftell(x->ufd);
00206         if(freopen(x->ufnm,f__r_mode[ufmt],x->ufd) == NULL) {
00207  cantread:
00208                 errno = 126;
00209                 return(1);
00210                 }
00211         x->uwrt=0;
00212         (void) fseek(x->ufd,loc,SEEK_SET);
00213         return(0);
00214 }
 | 
| 
 | 
| 
 Definition at line 218 of file err.c. References close(), f__cf, fdopen(), O_WRONLY, unit::ufd, unit::ufmt, unit::ufnm, and unit::uwrt. Referenced by s_wdfe(), s_wdue(), s_wsfe(), s_wsle(), s_wsne(), and s_wsue(). 
 00220 {
00221         long loc;
00222         int ufmt;
00223         extern char *f__w_mode[];
00224 #ifndef NON_UNIX_STDIO
00225         int k;
00226 #endif
00227 
00228         if (!x->ufnm)
00229                 goto cantwrite;
00230         ufmt = x->ufmt;
00231 #ifdef NON_UNIX_STDIO
00232         ufmt |= 2;
00233 #endif
00234         if (x->uwrt == 3) { /* just did write, rewind */
00235 #ifdef NON_UNIX_STDIO
00236                 if (!(f__cf = x->ufd =
00237                                 freopen(x->ufnm,f__w_mode[ufmt],x->ufd)))
00238 #else
00239                 if (close(creat(x->ufnm,0666)))
00240 #endif
00241                         goto cantwrite;
00242                 }
00243         else {
00244                 loc=ftell(x->ufd);
00245 #ifdef NON_UNIX_STDIO
00246                 if (!(f__cf = x->ufd =
00247                         freopen(x->ufnm, f__w_mode[ufmt], x->ufd)))
00248 #else
00249                 if (fclose(x->ufd) < 0
00250                 || (k = x->uwrt == 2 ? creat(x->ufnm,0666)
00251                                      : open(x->ufnm,O_WRONLY)) < 0
00252                 || (f__cf = x->ufd = fdopen(k,f__w_mode[ufmt])) == NULL)
00253 #endif
00254                         {
00255                         x->ufd = NULL;
00256  cantwrite:
00257                         errno = 127;
00258                         return(1);
00259                         }
00260                 (void) fseek(x->ufd,loc,SEEK_SET);
00261                 }
00262         x->uwrt = 1;
00263         return(0);
00264 }
 | 
| 
 | 
| 
 Definition at line 167 of file err.c. References f__canseek(), f__init, malloc, p, unit::ufd, unit::ufmt, unit::useek, and unit::uwrt. 
 00168 {       unit *p;
00169 
00170         f__init=1;
00171         p= &f__units[0];
00172         p->ufd=stderr;
00173         p->useek=f__canseek(stderr);
00174 #ifdef NON_UNIX_STDIO
00175         setbuf(stderr, (char *)malloc(BUFSIZ));
00176 #else
00177         stderr->_flag &= ~_IONBF;
00178 #endif
00179         p->ufmt=1;
00180         p->uwrt=1;
00181         p = &f__units[5];
00182         p->ufd=stdin;
00183         p->useek=f__canseek(stdin);
00184         p->ufmt=1;
00185         p->uwrt=0;
00186         p= &f__units[6];
00187         p->ufd=stdout;
00188         p->useek=f__canseek(stdout);
00189         p->ufmt=1;
00190         p->uwrt=1;
00191 }
 | 
Variable Documentation
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 41 of file err.c. Referenced by f__nowwriting(). | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 29 of file err.c. Referenced by f__fatal(). | 
| 
 | 
| 
 Definition at line 28 of file err.c. Referenced by e_rsfe(), e_wsfe(), and f__fatal(). | 
| 
 | 
| 
 Definition at line 40 of file err.c. Referenced by f__fatal(). | 
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 44 of file err.c. Referenced by s_wsfe(), x_putc(), x_wSL(), xw_end(), and xw_rev(). | 
| 
 | 
| 
 Definition at line 45 of file err.c. Referenced by mv_cur(). | 
| 
 | 
| 
 Definition at line 23 of file err.c. Referenced by f_init(). | 
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 26 of file err.c. Referenced by f__fatal(). | 
| 
 | 
| 
 Definition at line 43 of file err.c. Referenced by c_lir(), i_getc(), and i_ungetc(). | 
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 39 of file err.c. Referenced by f__fatal(). | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 Definition at line 48 of file err.c. Referenced by f__fatal(). | 
 
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
 
 
 
 
       
	   
	   
	   
	  