source: vital-to8-sdk/mc09/src/stdio.txt

Last change on this file was 1, checked in by svn, 5 years ago

Import initial

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