12503Sdlw /* 2*23091Skre * Copyright (c) 1980 Regents of the University of California. 3*23091Skre * All rights reserved. The Berkeley software License Agreement 4*23091Skre * specifies the terms and conditions for redistribution. 52503Sdlw * 6*23091Skre * @(#)util.c 5.1 06/07/85 7*23091Skre */ 8*23091Skre 9*23091Skre /* 102503Sdlw * utility routines 112503Sdlw */ 122503Sdlw 132503Sdlw #include "fio.h" 142503Sdlw 1512007Sdlw extern short ccntrl_, blzero_; 162503Sdlw 172503Sdlw nowreading(x) unit *x; 182503Sdlw { 194119Sdlw return(now_acc(x,"r")); 202503Sdlw } 212503Sdlw 222503Sdlw nowwriting(x) unit *x; 232503Sdlw { 244119Sdlw return(now_acc(x,"a")); 254119Sdlw } 264119Sdlw 2720984Slibs LOCAL now_acc(x,mode) 284119Sdlw unit *x; char *mode; 294119Sdlw { 302503Sdlw long loc; 314119Sdlw 324119Sdlw if (!x->ufnm) 334119Sdlw { 344119Sdlw errno = EBADF; 354119Sdlw return(NO); 364119Sdlw } 374119Sdlw if (x->useek) 384119Sdlw loc=ftell(x->ufd); 394119Sdlw if (freopen(x->ufnm,mode,x->ufd)) 404119Sdlw { 414119Sdlw if (x->useek) 424119Sdlw fseek(x->ufd,loc,0); 434119Sdlw x->uwrt = (*mode=='a'); 444119Sdlw return(YES); 454119Sdlw } 464119Sdlw if (x->ufd = fopen(x->ufnm, (*mode=='a')? "r":"a")) 474119Sdlw if (x->useek) 484119Sdlw fseek(x->ufd,loc,0); 494119Sdlw return(NO); 502503Sdlw } 512503Sdlw 522503Sdlw g_char(a,alen,b) char *a,*b; ftnlen alen; 532503Sdlw { char *x=a+alen-1, *y=b+alen-1; 542503Sdlw while (x >= a && *x == ' ') {x--; y--;} 552503Sdlw *(y+1) = '\0'; 562503Sdlw while (x >= a) *y-- = *x--; 572503Sdlw } 582503Sdlw 592503Sdlw b_char(from, to, tolen) char *from, *to; ftnlen tolen; 602503Sdlw { int i=0; 612503Sdlw while (*from && i < tolen) { 622503Sdlw *to++ = *from++; 632503Sdlw i++; 642503Sdlw } 652503Sdlw while (i++ < tolen) 662503Sdlw *to++ = ' '; 672503Sdlw } 682503Sdlw 692503Sdlw char 702503Sdlw last_char(f) FILE *f; 712503Sdlw { 722503Sdlw fseek(f,-2L,1); 732503Sdlw if(ftell(f)) return(getc(f)); 742503Sdlw else return('\n'); 752503Sdlw } 76