|
|
1.1 root 1: /*
2: * A reasonable interface to the system calls
3: */
4: #include <stdio.h>
5: error(a, b, c, d, e)
6: char *a;
7: {
8: extern int errno;
9: extern char *sys_errlist[];
10: extern int sys_nerr;
11: extern char *progname;
12:
13: fprintf(stderr, "%s: ", progname);
14: fprintf(stderr, a, b, c, d, e);
15: if(errno && errno<sys_nerr)
16: fprintf(stderr, ": %s\n", sys_errlist[errno]);
17: else
18: fprintf(stderr, "\n");
19: exit(1);
20: }
21: Read(f, a, n)
22: char *a;
23: {
24: int nr, total=0;
25: while(total<n){
26: nr = read(f, a+total, n-total);
27: if(nr<0) error("read error");
28: if(nr==0) error("premature EOF");
29: total += nr;
30: }
31: }
32: EOFRead(f, a, n)
33: char *a;
34: {
35: int nr, total=0;
36: while(total<n){
37: nr = read(f, a+total, n-total);
38: if(nr<0) error("read error");
39: if(nr==0){
40: if(total>0) error("premature EOF");
41: else return(0);
42: }
43: total += nr;
44: }
45: return(total);
46: }
47: Write(f, a, n)
48: char *a;
49: {
50: int m;
51: if((m=write(f, a, n))!=n)
52: error("write error, wanted %d got %d", n, m);
53: }
54: long
55: Lseek(f, n, w)
56: long n;
57: {
58: long p, lseek();
59: if((p=lseek(f, n, w))==-1)
60: error("lseek error");
61: return(p);
62: }
63: Creat(f, m)
64: char *f;
65: {
66: int fd=creat(f, m);
67: if(fd<0)
68: error("can't create %s", f);
69: return fd;
70: }
71: Open(f, m)
72: char *f;
73: {
74: int fd=open(f, m);
75: if(fd<0)
76: error("can't open %s", f);
77: return fd;
78: }
79: char *
80: Malloc(n)
81: unsigned n;
82: {
83: char *malloc(), *p=malloc(n);
84: if(p==0)
85: error("malloc failed");
86: return p;
87: }
88:
89:
90: double
91: pow2 ( v )
92: short v;
93: {
94: /* this is only here because the system pow is so bad */
95: double s = 1.0;
96: while( v>0 ){ v--; s *= 2; }
97: while( v<0 ){ v++; s /= 2; }
98: return(s);
99: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.