annotate mc09/stdio2.txt @ 161:91447c3ccd58

fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 12 Feb 2019 09:16:24 +0900
parents 1a30cd6e5973
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 #define FBSIZE sizeof(FILE)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 #define NFILES 16
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 #define NULL 0
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 #define EOF (-1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 #define stdin _fptbl[0]
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 #define stdout _fptbl[1]
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 #define stderr _fptbl[2]
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 #define STDIN 0xffff
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 #define STDOUT 0xfffe
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 #define STDERR 0xfffd
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 typedef struct {
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 int _fcb[FCBSIZE];
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 int _fbp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 char _fbuf[1024];
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 } FILE;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 FILE *_fptbl[NFILES];
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 char _ch;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 int _fch = 0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 _main(argc,argv)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 int argc;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 char **argv;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 {int i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 initheap();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 stdin = STDIN;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 stdout = STDOUT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 stderr = STDERR;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 for (i = 3; i < NFILES; ++i) _fptbl[i] = NULL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 main(argc,argv);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 for (i = 0; i < NFILES; ++i) fflush(_fptbl[i]);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 ungetc(c,fp)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 FILE *fp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 { if (fp == STDIN)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 { _fch = 1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 return _ch = c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 fp->_fcb[62] = 1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 return fp->_fcb[61] = c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 getc(fp)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 FILE *fp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 {
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 switch ( fp ) {
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 case STDIN:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 if (_fch) { _fch = 0; return _ch; }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 return GETCH();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 case STDOUT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 case STDERR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 return EOF;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 if (fp->_fcb[2] != 1) return EOF;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 if (fp->_fcb[62]) { fp->_fcb[62] = 0; return fp->_fcb[61]; }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 return FMS(fp->_fcb,0);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 putc(c,fp)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 FILE *fp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 { switch ( fp ) {
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 case STDIN:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 return EOF;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 case STDOUT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 return PUTCH(c);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 case STDERR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 return PUTCH2(c);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 if (fp->_fcb[2] != 2) return EOF;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 if (FMS(fp->_fcb,0,c) < 0) return EOF;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 return c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 ugetch(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 { return ungetc(c,stdin);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 getchar()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 { return getc(stdin);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 putchar(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 { return putc(c,stdout);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 printf(s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 { _fprintf(stdout,s,(int *)&s+1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 fprintf(fp,s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 FILE *fp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 { _fprintf(fp,s,(int *)&s+1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 _fprintf(fp,s,p)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 FILE *fp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 int *p;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 {int l,m,n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 char c,buf[8];
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 while(c = *s++)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 if (c != '%') putc(c,fp);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 else
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 { if (l=(*s == '-')) ++s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 if (isdigit(*s)) s += _getint(&m,s);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 else m = 0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 if (*s == '.') ++s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 if (isdigit(*s)) s += _getint(&n,s);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 else n = 32767;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 switch(c = *s++)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 {case 'd':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 itoa(*p++,buf);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 case 'o':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 itooa(*p++,buf);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 case 'x':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 itoxa(*p++,buf);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 case 'u':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 itoua(*p++,buf);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 case 'c':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 ctos(*p++,buf);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 case 's':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 _putstr(fp,*p++,l,m,n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 continue;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 case '\0':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 ctos(c,buf);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
150 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 _putstr(fp,buf,l,m,n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
152 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
154
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 _getint(p,s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 int *p;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
157 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
158 {int i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 for(*p = i = 0; isdigit(*s); ++i) *p = *p * 10 + *s++ - '0';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 return i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
162
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 _putstr(fp,s,l,m,n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 FILE fp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
165 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 int l,m,n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 {int k;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 k = (strlen(s) < n ? strlen(s) : n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 m = (k < m ? m - k : 0);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 if (l)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 { _putsn(fp,s,n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 _putspc(fp,m);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 else
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 { _putspc(fp,m);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 _putsn(fp,s,n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
177 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
179
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
180 _putsn(fp,s,n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
181 FILE fp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
183 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 { while(*s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
185 if (--n >= 0) putc(*s++,fp);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
186 else break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
187 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
188
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
189 _putspc(fp,n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
190 FILE *fp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
192 { while(--n >= 0) putc(' ',fp);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
194
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 itoa(n,s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 { if (n < 0)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 { *s++ = '-';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 return (itoua(-n,s) + 1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
201 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
202 return itoua(n,s);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
203 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
204
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
205 itoua(n,s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
208 { return _itoda(n,s,10);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
209 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
210
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
211 ctos(c,s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
212 char c,*s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
213 { s[0] = c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 s[1] = '\0';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
215 return s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
216 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
217
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
218 itooa(n,s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
219 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
220 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
221 { return _itoda(n,s,8);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
222 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
223
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
224 itoxa(n,s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
225 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
226 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
227 { return _itoda(n,s,16);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
229
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 _itoac(n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
232 { return (n + ((n < 10) ? '0' : ('A'-10)));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
233 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
234
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 _itoda(n,s,r)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
236 unsigned n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
237 int r;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
238 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
239 {int i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 char t[8],*u;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
241 u = t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 *u++ = '\0';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
243 do *u++ = _itoac(n % r); while(n /= r);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 for (i=0; *s++ = *--u; ++i);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 return i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
246 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
247
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 isdigit(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 { return ('0' <= c && c <= '9');
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
252
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
253 isspace(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
254 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
255 { return (c == ' ' || c == '\t' || c == '\n');
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
256 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
257
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
258 isalpha(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
259 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
260 { return (isupper(c) || islower(c) || c == '_');
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
261 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
262
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
263 isupper(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
264 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
265 { return ('A' <= c && c <= 'Z');
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
266 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
267
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
268 islower(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
269 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
270 { return ('a' <= c && c <= 'z');
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
271 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
272
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
273 toupper(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
274 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
275 { return (islower(c) ? c + ('A'-'a') : c);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
276 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
277
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
278 tolower(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
279 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
280 { return (isupper(c) ? c + ('a'-'A') : c);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
281 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
282
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
283 atoi(s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
284 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
285 {int i,m;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
286 while (isspace(*s)) ++s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
287 if (m = (*s == '-')) ++s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
288 for (i = 0; isdigit(*s);) i = i * 10 + *s++ - '0';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
289 return (m ? -i : i);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
290 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
291 strlen(s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
292 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
293 {int i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
294 for (i = 0; *s++; ++i);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
295 return i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
296 }