1 /* Copyrigth 1993 H.Ogasawara (COR.) */
2
3 #include "config.h"
4
5 #if DELCTRL
6 static unsigned char ctrlmap[]={
7 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,
8 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
9 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
10 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
12 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
13 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
14 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
15 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
16 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
17 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
18 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
19 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
20 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
21 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
22 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
23 };
24 #endif
25
26
27
28 #if HUMANFIO
29 /* ============================================= */
30
31 #if SYSDOSLIB
32 # include <sys_doslib.h>
33 #else
34 # include <doslib.h>
35 #endif
36 #include "microfio.h"
37
38 #if MVOLENC
Merr(msg)39 Merr( msg )
40 char *msg;
41 {
42 FPUTS( msg, 2 );
43 }
44 #endif
45
Mopen(fm,name)46 Mopen( fm, name )
47 m_file *fm;
48 unsigned char *name;
49 {
50 if( *name == '-' && !name[1] ){
51 fm->fn= 0;
52 }else if( (fm->fn= OPEN( name, 0 )) < 0 )
53 return 0;
54 fm->limit= 0;
55 return 1;
56 }
57
Mcreate(fm,name)58 Mcreate( fm, name )
59 m_file *fm;
60 unsigned char *name;
61 {
62 if( *name == '-' && !name[1] ){
63 fm->fn= 1;
64 #if !MVOLENC
65 }else if( (fm->fn= CREATE( (void*)getfname(name), 0x20 )) < 0 )
66 #else
67 }else if( (fm->fn= CREATE( name, 0x20 )) < 0 )
68 #endif
69 return 0;
70 fm->ptr= fm->buf;
71 fm->limit= fm->buf+MFBUFSIZE;
72 return 1;
73 }
74
75 #if !MVOLENC
Mappend(fm,name)76 Mappend( fm, name )
77 m_file *fm;
78 unsigned char *name;
79 {
80 if( CHMOD( name, -1 ) < 0 )
81 return Mcreate( fm, name );
82 if( (fm->fn= OPEN( name, 1 )) < 0 )
83 return 0;
84 /* SEEK( fm->fn, 0, 2 );*/
85 fm->ptr= fm->buf;
86 fm->limit= fm->buf+MFBUFSIZE;
87 return 1;
88 }
89
Mseek(fm,pos,mode)90 Mseek( fm, pos, mode )
91 m_file *fm;
92 {
93 int p= SEEK( fm->fn, pos, mode );
94 if( p < 0 ){
95 p= SEEK( fm->fn, 0, 2 );
96 for(; pos > p+MFBUFSIZE ; p+= MFBUFSIZE )
97 WRITE( fm->fn, fm, MFBUFSIZE );
98 WRITE( fm->fn, fm, pos-p );
99 }
100 }
101 #endif /* MVOLENC */
102
Mclose(fm)103 Mclose( fm )
104 m_file *fm;
105 {
106 if( fm->fn >= 3 )
107 return CLOSE( fm->fn );
108 }
109
Mread(fm,buf,len)110 Mread( fm, buf, len )
111 m_file *fm;
112 unsigned char *buf;
113 unsigned int len;
114 {
115 unsigned char *str= buf,
116 *ptr;
117 for( ptr= fm->ptr ; len-- ;){
118 if( ptr >= fm->limit ){
119 int size= READ( fm->fn, ptr= fm->buf, MFBUFSIZE );
120 if( size <= 0 ){
121 fm->limit= 0;
122 break;
123 }
124 fm->limit= fm->buf+ size;
125 }
126 *str++= *ptr++;
127 }
128 fm->ptr= ptr;
129 return str-buf;
130 }
131
132 #if !MVOLENC
Mgets(fm,buf,len)133 Mgets( fm, buf, len )
134 m_file *fm;
135 unsigned char *buf;
136 unsigned int len;
137 {
138 unsigned char *str= buf,
139 *ptr;
140 for( ptr= fm->ptr ; len-- ; ptr++ ){
141 if( ptr >= fm->limit ){
142 int size= READ( fm->fn, ptr= fm->buf, MFBUFSIZE );
143 if( size <= 0 )
144 return 0;
145 fm->limit= fm->buf+ size;
146 }
147 if( *ptr == '\n' ){
148 ptr++;
149 break;
150 }
151 #if DELCTRL
152 if( !ctrlmap[*ptr] )
153 #else
154 if( *ptr != '\r' )
155 #endif
156 *str++= *ptr;
157 }
158 *str= '\0';
159 fm->ptr= ptr;
160 return str-buf+1;
161 }
162 #endif /* MVOLENC */
163
Mwrite(fm,ptr,len)164 Mwrite( fm, ptr, len )
165 m_file *fm;
166 unsigned char *ptr;
167 {
168 unsigned char *str;
169 int ret= 1;
170 for( str= fm->ptr ; len-- ;){
171 if( str >= fm->limit )
172 ret= WRITE( fm->fn, str= fm->buf,MFBUFSIZE)>=MFBUFSIZE;
173 *str++= *ptr++;
174 }
175 fm->ptr= str;
176 return ret;
177 }
178
179 #if !MVOLENC
Mputs(fm,ptr)180 Mputs( fm, ptr )
181 m_file *fm;
182 unsigned char *ptr;
183 {
184 unsigned char *str;
185 int ret= 1;
186 for( str= fm->ptr ; *ptr ;){
187 if( str >= fm->limit )
188 ret= WRITE( fm->fn, str= fm->buf,MFBUFSIZE)>=MFBUFSIZE;
189 *str++= *ptr++;
190 }
191 fm->ptr= str;
192 return ret;
193 }
194
Misfile(fm)195 Misfile( fm )
196 m_file *fm;
197 {
198 return fm->fn >= 3; /* 5 */
199 }
200 #endif /* MVOLENC */
201
Mflush(fm)202 Mflush( fm )
203 m_file *fm;
204 {
205 if( fm->ptr > fm->buf ){
206 WRITE( fm->fn, fm->buf, fm->ptr - fm->buf );
207 fm->ptr= fm->buf;
208 }
209 }
210
211 #if !MVOLENC
Maccess(name)212 Maccess( name )
213 char *name;
214 {
215 return CHMOD( name, -1 ) >= 0;
216 }
217 #endif
218
219
220 #else /* HUMANFIO */
221 /* ============================================= */
222 /* Normal - file I/O rourtine */
223 #include "microfio.h"
224
225 #if NOERR
226 int noerrflag= 0;
227 #endif
228
229 void
Mputchar(ch)230 Mputchar( ch )
231 char ch;
232 {
233 #if UNIX
234 if( ch == '\r' )
235 return;
236 #endif
237 putchar( ch );
238 }
239
240 void
Merrch(ch)241 Merrch( ch )
242 char ch;
243 {
244 #if UNIX
245 if( ch == '\r' )
246 return;
247 #endif
248 #if NOERR
249 if( !noerrflag )
250 #endif
251 putc( ch, stderr );
252 }
253
254
Mprint(ptr)255 Mprint( ptr )
256 char *ptr;
257 {
258 for(; *ptr ; Mputchar( *ptr++ ) );
259 }
260
Merr(ptr)261 Merr( ptr )
262 char *ptr;
263 {
264 for(; *ptr ; Merrch( *ptr++ ) );
265 }
266
Mopen(fm,name)267 Mopen( fm, name )
268 m_file *fm;
269 char *name;
270 {
271 if( *name == '-' && !name[1] ){
272 fm->fp= stdin;
273 fm->fn= fileno( stdin );
274 return 1;
275 }else if( fm->fp= fopen( name, BROPEN ) ){
276 fm->fn= fileno( fm->fp );
277 return 1;
278 }
279 return 0;
280 }
281
Mcreate(fm,name)282 Mcreate( fm, name )
283 m_file *fm;
284 char *name;
285 {
286 if( *name == '-' && !name[1] ){
287 fm->fp= stdout;
288 fm->fn= fileno( stdout );
289 return 1;
290 #if !MVOLENC
291 }else if( fm->fp= fopen( getfname(name), BWOPEN ) ){
292 #else
293 }else if( fm->fp= fopen( name, BWOPEN ) ){
294 #endif
295 fm->fn= fileno( fm->fp );
296 return 1;
297 }
298 return 0;
299 }
300
Mappend(fm,name)301 Mappend( fm, name )
302 m_file *fm;
303 char *name;
304 {
305 if( access( name, 0 /*F_OK*/ ) < 0 )
306 return Mcreate( fm, name );
307 if( fm->fp= fopen( name, BRWOPEN ) ){
308 fm->fn= fileno( fm->fp );
309 return 1;
310 }
311 return 0;
312 }
313
Mclose(fm)314 Mclose( fm )
315 m_file *fm;
316 {
317 if( fm->fp != stdin && fm->fp != stdout )
318 return fclose( fm->fp );
319 }
320
Mread(fm,buf,len)321 Mread( fm, buf, len )
322 m_file *fm;
323 char *buf;
324 {
325 int size= fread( buf, 1, len, fm->fp );
326 return size;
327 }
328
329 #define RDBUFSIZE 1024
Mgets(fm,buf,len)330 Mgets( fm, buf, len )
331 m_file *fm;
332 unsigned char *buf;
333 {
334 unsigned char readbuf[RDBUFSIZE];
335 if( fgets( readbuf, RDBUFSIZE, fm->fp ) ){
336 unsigned char *str= buf,
337 *ptr= readbuf;
338 for(; *ptr && *ptr != '\r' && *ptr != '\n' ; ptr++ ){
339 #if DELCTRL
340 if( !ctrlmap[*ptr] )
341 #endif
342 *str++= *ptr;
343 }
344 *str= '\0';
345 return strlen( buf )+1;
346 }
347 return 0;
348 }
349
Mwrite(fm,ptr,len)350 Mwrite( fm, ptr, len )
351 m_file *fm;
352 char *ptr;
353 {
354 return fwrite( ptr, 1, len, fm->fp ) >= len;
355 }
356
Mputs(fm,ptr)357 Mputs( fm, ptr )
358 m_file *fm;
359 char *ptr;
360 {
361 #if UNIX
362 for(; *ptr ; ptr++ ){
363 if( *ptr != '\r' )
364 putc( *ptr, fm->fp );
365 }
366 #else
367 fputs( ptr, fm->fp );
368 #endif
369 return 1;
370 }
371
Mflush(fm)372 Mflush( fm )
373 m_file *fm;
374 {
375 fflush( fm->fp );
376 }
377
Mseek(fm,pos,mode)378 Mseek( fm, pos, mode )
379 m_file *fm;
380 {
381 fseek( fm->fp, pos, mode );
382 }
383
Misfile(fm)384 Misfile( fm )
385 m_file *fm;
386 {
387 return fm->fn >= 3; /* tenuki */
388 }
389
390 #if !MVOLENC
Maccess(name)391 Maccess( name )
392 {
393 return !access( name, 0 );
394 }
395 #endif
396
397 #endif /* !HUMANFIO */
398