BSD 4 development
[unix-history] / usr / src / lib / libI77uc / util.c
CommitLineData
55162a5a
BJ
1/*
2 * utility routines
3 */
4
5#include <sys/types.h>
6#include <sys/stat.h>
7#include "fio.h"
8
9
10ini_std(u,F,w) FILE *F;
11{ unit *p;
12 p = &units[u];
13 p->ufd = F;
14 p->ufnm = NULL;
15 p->useek = canseek(F);
16 p->ufmt = YES;
17 p->uwrt = (w==WRITE)? YES : NO;
18 p->ublnk = p->uscrtch = p->uprnt = p->uend = NO;
19 p->url = 0;
20 p->uinode = finode(F);
21}
22
23canseek(f) FILE *f; /*SYSDEP*/
24{ struct stat x;
25 return( (fstat(fileno(f),&x)==0) &&
26 (x.st_nlink > 0 /*!pipe*/) && !isatty(fileno(f)) );
27}
28
29nowreading(x) unit *x;
30{
31 long loc;
32 x->uwrt = NO;
33 loc=ftell(x->ufd);
34 freopen(x->ufnm,"r",x->ufd);
35 fseek(x->ufd,loc,0);
36}
37
38nowwriting(x) unit *x;
39{
40 long loc;
41 x->uwrt = YES;
42 loc=ftell(x->ufd);
43 freopen(x->ufnm,"a",x->ufd);
44 fseek(x->ufd,loc,0);
45}
46
47g_char(a,alen,b) char *a,*b; ftnlen alen;
48{ char *x=a+alen-1, *y=b+alen-1;
49 while (x >= a && *x == ' ') {x--; y--;}
50 *(y+1) = '\0';
51 while (x >= a) *y-- = *x--;
52}
53
54b_char(from, to, tolen) char *from, *to; ftnlen tolen;
55{ int i=0;
56 while (*from && i < tolen) {
57 *to++ = *from++;
58 i++;
59 }
60 while (i++ < tolen)
61 *to++ = ' ';
62}
63
64inode(a) char *a;
65{ struct stat x;
66 if(stat(a,&x)==0) return(x.st_ino);
67 else return(-1);
68}
69
70finode(f) FILE *f;
71{ struct stat x;
72 if(fstat(fileno(f),&x)==0) return(x.st_ino);
73 else return(-1);
74}
75
76char
77last_char(f) FILE *f;
78{
79 fseek(f,-2L,1);
80 if(ftell(f)) return(getc(f));
81 else return('\n');
82}