xref: /csrg-svn/usr.bin/f77/libI77/util.c (revision 23091)
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