1: /* 2: * Copyright (c) 1980 Regents of the University of California. 3: * All rights reserved. The Berkeley software License Agreement 4: * specifies the terms and conditions for redistribution. 5: * 6: * @(#)util.c 5.1 6/7/85 7: */ 8: 9: /* 10: * utility routines 11: */ 12: 13: #include "fio.h" 14: 15: extern short ccntrl_, blzero_; 16: 17: nowreading(x) unit *x; 18: { 19: return(now_acc(x,"r")); 20: } 21: 22: nowwriting(x) unit *x; 23: { 24: return(now_acc(x,"a")); 25: } 26: 27: LOCAL now_acc(x,mode) 28: unit *x; char *mode; 29: { 30: long loc; 31: 32: if (!x->ufnm) 33: { 34: errno = EBADF; 35: return(NO); 36: } 37: if (x->useek) 38: loc=ftell(x->ufd); 39: if (freopen(x->ufnm,mode,x->ufd)) 40: { 41: if (x->useek) 42: fseek(x->ufd,loc,0); 43: x->uwrt = (*mode=='a'); 44: return(YES); 45: } 46: if (x->ufd = fopen(x->ufnm, (*mode=='a')? "r":"a")) 47: if (x->useek) 48: fseek(x->ufd,loc,0); 49: return(NO); 50: } 51: 52: g_char(a,alen,b) char *a,*b; ftnlen alen; 53: { char *x=a+alen-1, *y=b+alen-1; 54: while (x >= a && *x == ' ') {x--; y--;} 55: *(y+1) = '\0'; 56: while (x >= a) *y-- = *x--; 57: } 58: 59: b_char(from, to, tolen) char *from, *to; ftnlen tolen; 60: { int i=0; 61: while (*from && i < tolen) { 62: *to++ = *from++; 63: i++; 64: } 65: while (i++ < tolen) 66: *to++ = ' '; 67: } 68: 69: char 70: last_char(f) FILE *f; 71: { 72: fseek(f,-2L,1); 73: if(ftell(f)) return(getc(f)); 74: else return('\n'); 75: }