2001-02-18 Kazu Hirata <kazu@hxi.com>
[official-gcc.git] / libchill / iomodes.h
blob05927e3c102383de8dada422fb7770d5455f3117
1 /* Implement Input/Output runtime actions for CHILL.
2 Copyright (C) 1992,1993 Free Software Foundation, Inc.
3 Author: Wilfried Moser, et al
5 This file is part of GNU CC.
7 GNU CC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
12 GNU CC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GNU CC; see the file COPYING. If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
22 /* As a special exception, if you link this library with other files,
23 some of which are compiled with GCC, to produce an executable,
24 this library does not by itself cause the resulting executable
25 to be covered by the GNU General Public License.
26 This exception does not however invalidate any other reasons why
27 the executable file might be covered by the GNU General Public License. */
29 #ifndef _iomodes_h_
30 #define _iomodes_h_
32 #include "auxtypes.h"
34 typedef enum { ReadOnly, WriteOnly, ReadWrite
35 } Usage_Mode;
37 typedef enum { First, Same, Last
38 } Where_Mode;
40 typedef enum { None, Fixed, VaryingChars
41 } Record_t;
43 /* association flags */
44 #define IO_ISASSOCIATED 0x00000001
45 #define IO_EXISTING 0x00000002
46 #define IO_READABLE 0x00000004
47 #define IO_WRITEABLE 0x00000008
48 #define IO_INDEXABLE 0x00000010
49 #define IO_SEQUENCIBLE 0x00000020
50 #define IO_VARIABLE 0x00000040
51 #define IO_FIRSTLINE 0x00000100
52 #define IO_FORCE_PAGE 0x00000200
54 struct Access_Mode;
56 #define READBUFLEN 512
57 typedef struct
59 unsigned long len;
60 unsigned long cur;
61 char buf[READBUFLEN];
62 } readbuf_t;
64 typedef struct Association_Mode {
65 unsigned long flags; /* INIT = 0 */
66 char* pathname;
67 struct Access_Mode* access;
68 int handle;
69 readbuf_t* bufptr;
70 long syserrno;
71 char usage;
72 char ctl_pre;
73 char ctl_post;
74 } Association_Mode;
77 rectype indexed max. reclength act. reclength
78 ---------------------------------------------------
79 None T/F 0
80 Fixed T/F SIZE(recmode) = SIZE(recmode)
81 Varying F SIZE(recmode) >= length
84 /* access/text flags */
85 #define IO_TEXTLOCATION 0x80000000
86 #define IO_INDEXED 0x00000001
87 #define IO_TEXTIO 0x00000002
88 #define IO_OUTOFFILE 0x00010000
90 typedef struct Access_Mode {
91 unsigned long flags; /* INIT */
92 unsigned long reclength; /* INIT */
93 signed long lowindex; /* INIT */
94 signed long highindex; /* INIT */
95 Association_Mode* association;
96 unsigned long base;
97 char* store_loc;
98 Record_t rectype; /* INIT */
99 } Access_Mode;
101 typedef struct Text_Mode {
102 unsigned long flags; /* INIT */
103 VarString* text_record; /* INIT */
104 Access_Mode* access_sub; /* INIT */
105 unsigned long actual_index;
106 } Text_Mode;
108 typedef enum
110 __IO_UNUSED,
112 __IO_ByteVal,
113 __IO_UByteVal,
114 __IO_IntVal,
115 __IO_UIntVal,
116 __IO_LongVal,
117 __IO_ULongVal,
119 __IO_ByteLoc,
120 __IO_UByteLoc,
121 __IO_IntLoc,
122 __IO_UIntLoc,
123 __IO_LongLoc,
124 __IO_ULongLoc,
126 __IO_ByteRangeLoc,
127 __IO_UByteRangeLoc,
128 __IO_IntRangeLoc,
129 __IO_UIntRangeLoc,
130 __IO_LongRangeLoc,
131 __IO_ULongRangeLoc,
133 __IO_BoolVal,
134 __IO_BoolLoc,
135 __IO_BoolRangeLoc,
137 __IO_SetVal,
138 __IO_SetLoc,
139 __IO_SetRangeLoc,
141 __IO_CharVal,
142 __IO_CharLoc,
143 __IO_CharRangeLoc,
145 __IO_CharStrLoc,
147 __IO_CharVaryingLoc,
149 __IO_BitStrLoc,
151 __IO_RealVal,
152 __IO_RealLoc,
153 __IO_LongRealVal,
154 __IO_LongRealLoc
155 } __tmp_IO_enum;
157 typedef struct
159 long value;
160 char* name;
161 } __tmp_IO_enum_table_type;
163 typedef struct
165 long value;
166 __tmp_IO_enum_table_type* name_table;
167 } __tmp_WIO_set;
169 typedef struct
171 char* ptr;
172 long lower;
173 long upper;
174 } __tmp_IO_charrange;
176 typedef union
178 signed long slong;
179 unsigned long ulong;
180 } __tmp_IO_long;
182 typedef struct
184 void* ptr;
185 __tmp_IO_long lower;
186 __tmp_IO_long upper;
187 } __tmp_IO_intrange;
189 typedef struct
191 void* ptr;
192 unsigned long lower;
193 unsigned long upper;
194 } __tmp_RIO_boolrange;
196 typedef struct
198 void* ptr;
199 long length;
200 __tmp_IO_enum_table_type* name_table;
201 } __tmp_RIO_set;
203 typedef struct
205 void* ptr;
206 long length;
207 __tmp_IO_enum_table_type* name_table;
208 unsigned long lower;
209 unsigned long upper;
210 } __tmp_RIO_setrange;
212 typedef struct
214 char* string;
215 long string_length;
216 } __tmp_IO_charstring;
218 typedef union
220 char __valbyte;
221 unsigned char __valubyte;
222 short __valint;
223 unsigned short __valuint;
224 long __vallong;
225 unsigned long __valulong;
226 void* __locint;
227 __tmp_IO_intrange __locintrange;
229 unsigned char __valbool;
230 unsigned char* __locbool;
231 __tmp_RIO_boolrange __locboolrange;
233 __tmp_WIO_set __valset;
234 __tmp_RIO_set __locset;
235 __tmp_RIO_setrange __locsetrange;
237 unsigned char __valchar;
238 unsigned char* __locchar;
239 __tmp_IO_charrange __loccharrange;
241 __tmp_IO_charstring __loccharstring;
243 float __valreal;
244 float* __locreal;
245 double __vallongreal;
246 double* __loclongreal;
247 } __tmp_IO_union;
250 * CAUTION: The longest variant of __tmp_IO_union is 5 words long.
251 * Together with __descr this caters for double alignment where required.
253 typedef struct
255 __tmp_IO_union __t;
256 __tmp_IO_enum __descr;
257 } __tmp_IO_list;
259 #endif