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