|
|
1.1 ! root 1: /* ! 2: char id_util[] = "@(#)util.c 1.7"; ! 3: * ! 4: * utility routines ! 5: */ ! 6: ! 7: #include <sys/types.h> ! 8: #include <sys/stat.h> ! 9: #include "fio.h" ! 10: ! 11: extern short ccntrl_, blzero_; ! 12: ! 13: ini_std(u,F,w) FILE *F; ! 14: { unit *p; ! 15: p = &units[u]; ! 16: p->ufd = F; ! 17: p->ufnm = NULL; ! 18: p->useek = canseek(F); ! 19: p->ufmt = YES; ! 20: p->uwrt = (w==WRITE)? YES : NO; ! 21: p->uscrtch = p->uend = NO; ! 22: p->ublnk = blzero; ! 23: p->uprnt = ccntrl; ! 24: p->url = 0; ! 25: p->uinode = finode(F); ! 26: } ! 27: ! 28: canseek(f) FILE *f; /*SYSDEP*/ ! 29: { struct stat x; ! 30: return( (fstat(fileno(f),&x)==0) && ! 31: (x.st_nlink > 0 /*!pipe*/) && !isatty(fileno(f)) ); ! 32: } ! 33: ! 34: nowreading(x) unit *x; ! 35: { ! 36: return(now_acc(x,"r")); ! 37: } ! 38: ! 39: nowwriting(x) unit *x; ! 40: { ! 41: return(now_acc(x,"a")); ! 42: } ! 43: ! 44: now_acc(x,mode) ! 45: unit *x; char *mode; ! 46: { ! 47: long loc; ! 48: ! 49: if (!x->ufnm) ! 50: { ! 51: errno = EBADF; ! 52: return(NO); ! 53: } ! 54: if (x->useek) ! 55: loc=ftell(x->ufd); ! 56: if (freopen(x->ufnm,mode,x->ufd)) ! 57: { ! 58: if (x->useek) ! 59: fseek(x->ufd,loc,0); ! 60: x->uwrt = (*mode=='a'); ! 61: return(YES); ! 62: } ! 63: if (x->ufd = fopen(x->ufnm, (*mode=='a')? "r":"a")) ! 64: if (x->useek) ! 65: fseek(x->ufd,loc,0); ! 66: return(NO); ! 67: } ! 68: ! 69: g_char(a,alen,b) char *a,*b; ftnlen alen; ! 70: { char *x=a+alen-1, *y=b+alen-1; ! 71: while (x >= a && *x == ' ') {x--; y--;} ! 72: *(y+1) = '\0'; ! 73: while (x >= a) *y-- = *x--; ! 74: } ! 75: ! 76: b_char(from, to, tolen) char *from, *to; ftnlen tolen; ! 77: { int i=0; ! 78: while (*from && i < tolen) { ! 79: *to++ = *from++; ! 80: i++; ! 81: } ! 82: while (i++ < tolen) ! 83: *to++ = ' '; ! 84: } ! 85: ! 86: inode(a) char *a; ! 87: { struct stat x; ! 88: if(stat(a,&x)==0) return(x.st_ino); ! 89: else return(-1); ! 90: } ! 91: ! 92: finode(f) FILE *f; ! 93: { struct stat x; ! 94: if(fstat(fileno(f),&x)==0) return(x.st_ino); ! 95: else return(-1); ! 96: } ! 97: ! 98: char ! 99: last_char(f) FILE *f; ! 100: { ! 101: fseek(f,-2L,1); ! 102: if(ftell(f)) return(getc(f)); ! 103: else return('\n'); ! 104: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.