|
|
1.1 root 1: # include <ingres.h>
2: # include "IIglobals.h"
3: # include <sccs.h>
4:
5: SCCSID(@(#)IIgetc.c 8.1 12/31/84)
6:
7:
8: /*
9: ** IIGETC.C -- File input routines
10: **
11: ** Defines:
12: ** IIfopen()
13: ** IIgetc()
14: ** IIclose()
15: **
16: ** Requires:
17: ** read()
18: ** open()
19: **
20: ** Required By:
21: ** IIp_err() -- to get text from error files
22: ** IIgetpath();
23: ** USER -- as Input routines
24: **
25: ** History:
26: ** 11/21/78 -- (marc) written to free IIp_err() [IIp_err.c] from
27: ** depending on a single I/O package
28: */
29:
30:
31:
32: /*
33: ** IIFOPEN -- Buffered input file open
34: **
35: ** Entirely analogous to fopen(III).
36: **
37: ** Parameters:
38: ** file - file name to open for READ only
39: ** iobuf - iob struct to use for this file
40: **
41: ** Returns:
42: ** 0 success
43: ** -1 failure (errno set by open(II) call)
44: **
45: ** Side Effects:
46: ** file activity
47: ** sets up iobuf
48: **
49: ** Requires:
50: ** open()
51: **
52: ** Called By:
53: ** IIp_err() [IIp_err.c]
54: ** USER
55: **
56: ** History:
57: ** 11/21/78 -- (marc) written
58: */
59:
60: IIfopen(file, iobuf)
61: char *file;
62: struct iob *iobuf;
63: {
64: register struct iob *b;
65:
66: b = iobuf;
67: if ((b->fildes = open(file, 0)) < 0)
68: return (-1);
69: b->nleft = 0;
70: return (0);
71: }
72:
73: /*
74: ** IIGETC -- Get a character from a file using buffered input
75: **
76: ** Entirely analogous to getc(III).
77: **
78: ** Parameters:
79: ** iobuf -- iob struct for the file from which the character
80: ** is to be taken
81: **
82: ** Returns:
83: ** next character from file (16-bit no sign extension)
84: ** -1 -- EOF or error (errno set by read)
85: **
86: ** Side Effects:
87: ** file activity - may do a read ()
88: ** fuddles iobuf to reflect number of characters left after call
89: **
90: ** Requires:
91: ** read()
92: ** an fopen(III) or IIfopen() [IIgetc.c] call on iobuf before
93: ** being called. (It is unwise to call fopen(), the
94: ** IIgetc(), because fopen() and getc(III) are both
95: ** in /usr/source/s4/getc.c so the code will be
96: ** duplicated).
97: **
98: ** Called By:
99: ** IIp_err() [IIp_err.c]
100: ** USER
101: **
102: ** History:
103: ** 11/21/78 -- (marc) written
104: */
105:
106: IIgetc(iobuf)
107: struct iob *iobuf;
108: {
109: register struct iob *b;
110: register i;
111: register c;
112:
113: b = iobuf;
114: if (--b->nleft >= 0)
115: {
116: c = *b->nextp++ & 0377;
117: return (c);
118: }
119:
120: /* else fill the buffer */
121: i = read(b->fildes, b->buff, sizeof b->buff);
122: if (i > 0)
123: {
124: b->nextp = b->buff;
125: b->nleft = --i;
126: c = *b->nextp++ & 0377;
127: return (c);
128: }
129: /* EOF or error */
130: return (-1);
131: }
132:
133: /*
134: ** IICLOSE -- Close a file opened with IIfopen
135: **
136: ** Parameters:
137: ** buf -- io buffer
138: **
139: ** Returns:
140: ** < 0 one error (errno set)
141: **
142: ** Side Effects:
143: ** closes file
144: **
145: ** Requires:
146: ** close(II)
147: **
148: ** Called By:
149: ** USER
150: */
151:
152: IIclose(buf)
153: struct iob *buf;
154: {
155:
156: return (close(buf->fildes));
157: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.