xref: /csrg-svn/usr.bin/f77/libI77/util.c (revision 20984)
12503Sdlw /*
2*20984Slibs char id_util[] = "@(#)util.c	1.8";
32503Sdlw  *
42503Sdlw  * utility routines
52503Sdlw  */
62503Sdlw 
72503Sdlw #include "fio.h"
82503Sdlw 
912007Sdlw extern short	ccntrl_, blzero_;
102503Sdlw 
112503Sdlw nowreading(x) unit *x;
122503Sdlw {
134119Sdlw 	return(now_acc(x,"r"));
142503Sdlw }
152503Sdlw 
162503Sdlw nowwriting(x) unit *x;
172503Sdlw {
184119Sdlw 	return(now_acc(x,"a"));
194119Sdlw }
204119Sdlw 
21*20984Slibs LOCAL now_acc(x,mode)
224119Sdlw unit *x; char *mode;
234119Sdlw {
242503Sdlw 	long loc;
254119Sdlw 
264119Sdlw 	if (!x->ufnm)
274119Sdlw 	{
284119Sdlw 		errno = EBADF;
294119Sdlw 		return(NO);
304119Sdlw 	}
314119Sdlw 	if (x->useek)
324119Sdlw 		loc=ftell(x->ufd);
334119Sdlw 	if (freopen(x->ufnm,mode,x->ufd))
344119Sdlw 	{
354119Sdlw 		if (x->useek)
364119Sdlw 			fseek(x->ufd,loc,0);
374119Sdlw 		x->uwrt = (*mode=='a');
384119Sdlw 		return(YES);
394119Sdlw 	}
404119Sdlw 	if (x->ufd = fopen(x->ufnm, (*mode=='a')? "r":"a"))
414119Sdlw 		if (x->useek)
424119Sdlw 			fseek(x->ufd,loc,0);
434119Sdlw 	return(NO);
442503Sdlw }
452503Sdlw 
462503Sdlw g_char(a,alen,b) char *a,*b; ftnlen alen;
472503Sdlw {	char *x=a+alen-1, *y=b+alen-1;
482503Sdlw 	while (x >= a  &&  *x == ' ') {x--; y--;}
492503Sdlw 	*(y+1) = '\0';
502503Sdlw 	while (x >= a) *y-- = *x--;
512503Sdlw }
522503Sdlw 
532503Sdlw b_char(from, to, tolen) char *from, *to; ftnlen tolen;
542503Sdlw {	int i=0;
552503Sdlw 	while (*from && i < tolen) {
562503Sdlw 		*to++ = *from++;
572503Sdlw 		i++;
582503Sdlw 	}
592503Sdlw 	while (i++ < tolen)
602503Sdlw 		*to++ = ' ';
612503Sdlw }
622503Sdlw 
632503Sdlw char
642503Sdlw last_char(f) FILE *f;
652503Sdlw {
662503Sdlw 	fseek(f,-2L,1);
672503Sdlw 	if(ftell(f)) return(getc(f));
682503Sdlw 	else return('\n');
692503Sdlw }
70