annotate os9/mc09/mclibos9.c @ 134:42592ea2966f

fix fclose/mfree problem
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 07 Jan 2019 03:38:10 +0900
parents 2562c18c904e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
c4e909f21b25 micro c,j self compiled on os9 level2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
1 /* os9 driver */
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
2
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
3
110
098b3feab38c mc09 test program worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 109
diff changeset
4 int errno = 0;
098b3feab38c mc09 test program worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 109
diff changeset
5
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
6 typedef struct {
132
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
7 int fd; /* 0 */
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
8 int fmode; /* 2 */
133
2562c18c904e malloc for mc2 wrong...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 132
diff changeset
9 int length; /* 4 */
132
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
10 char *fname; /* 6 */
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
11 char *ptr; /* 8 */
133
2562c18c904e malloc for mc2 wrong...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 132
diff changeset
12 char *buf; /* 10 */
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
13 } FILE ;
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
14
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
15 #define FCBSIZE (sizeof(FILE))
132
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
16 #define BUFSIZ 256
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
17
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 #define NFILES 8
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 #define NULL 0
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 #define EOF (-1)
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 #define stdin _fcbtbl[0]
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 #define stdout _fcbtbl[1]
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 #define stderr _fcbtbl[2]
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 FILE *_fcbtbl[NFILES];
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
29 FILE _s0[3];
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
30
105
6eef99bb4771 fix runtime
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
31 _main(prog,args)
6eef99bb4771 fix runtime
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
32 char *prog;
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
33 char *args;
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 {int i;
104
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
35 char **argv,*p,*q;
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
36 int argc,n,quote,c;
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 initheap();
134
42592ea2966f fix fclose/mfree problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 133
diff changeset
38 stdin = (FILE*) malloc(sizeof(FILE)); initfp(stdin,0);
42592ea2966f fix fclose/mfree problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 133
diff changeset
39 stdout = (FILE*) malloc(sizeof(FILE)); initfp(stdout,1);
42592ea2966f fix fclose/mfree problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 133
diff changeset
40 stderr = (FILE*) malloc(sizeof(FILE)); initfp(stderr,2);
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 for ( i = 3; i < NFILES; i++ ) _fcbtbl[i] = NULL;
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
42 /* create argv here */
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
43 argc = 0;
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
44 argv = 0;
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
45 for( i = 0; i < 2 ; i++ ) {
111
c4e909f21b25 micro c,j self compiled on os9 level2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
46 q = p = args;
104
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
47 if (i==1) {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
48 argv = (char**)malloc(sizeof(char*)*(argc+1));
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
49 argv[0] = prog;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
50 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
51 n = 1;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
52 quote = 0;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
53 if (i==1) argv[n] = args;
105
6eef99bb4771 fix runtime
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
54 while((c = *p) && c!='\r') {
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
55 if (c=='\'') {
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
56 if (!quote) {
105
6eef99bb4771 fix runtime
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
57 p++;
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
58 quote = 1;
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
59 } else {
105
6eef99bb4771 fix runtime
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
60 p++;
104
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
61 if (i==1) *q=0;
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
62 quote = 0;
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
63 }
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
64 } else if (c=='\\') {
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
65 p++;
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
66 } else if (c==' ') {
104
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
67 if (!quote) {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
68 if (i==1) {
105
6eef99bb4771 fix runtime
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
69 *q = 0; argv[++n] = q+1;
104
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
70 }
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
71 }
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
72 }
104
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
73 if (i==1) *q = *p;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
74 q++; p++;
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
75 }
108
014002970940 getc worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
76 if (i==1&&p!=args) { *q = 0; argv[++n] = q+1; }
104
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
77 argc = n;
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
78 }
104
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 103
diff changeset
79 argv[n]=0;
132
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
80 exit(main(argc,argv));
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
81 }
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
82
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
83
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
84 exit(e)
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
85 int e;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
86 {
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
87 int i;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
88 for ( i = 3; i < NFILES; i++ ) {
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
89 if (_fcbtbl[i])
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
90 fclose(_fcbtbl[i]);
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
91 }
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
92 #asm
133
2562c18c904e malloc for mc2 wrong...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 132
diff changeset
93 ldb 4,u
132
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
94 os9 F$Exit
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
95 #endasm
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
96 }
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
97
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
98 initfp(fp,d)
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
99 FILE *fp;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
100 int fd;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
101 {
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
102 fp->fd = d;
134
42592ea2966f fix fclose/mfree problem
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 133
diff changeset
103 fp->buf = (char*)malloc(BUFSIZ+1);
132
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
104 fp->ptr = fp->buf;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
105 fp->fname = fp->length = fp->fmode = 0;
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 FILE *fopen(name,mode)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 char *name,*mode;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 {FILE *fcbp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 char *p;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 int rd,wt,cm;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 rd = wt = cm = 0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 for ( p = mode; *p; p++ ) {
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 switch ( *p ) {
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 case 'r':
110
098b3feab38c mc09 test program worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 109
diff changeset
117 rd = 1; cm |= 1; break;
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 case 'w':
111
c4e909f21b25 micro c,j self compiled on os9 level2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
119 wt = 1; cm |= 3; break;
c4e909f21b25 micro c,j self compiled on os9 level2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
120 case 'c': /* charcter mode */
c4e909f21b25 micro c,j self compiled on os9 level2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
121 cm = 1; break;
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 return NULL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 if ( !(rd ^ wt) ) return NULL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 if ( rd ) return _open(name,cm);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 else return _create(name,cm);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
130
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 FILE *_open(name,cm)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 char *name;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 int cm;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 {FILE *fcbp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 int i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 for ( i = 0; i < NFILES; i++)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 if ( _fcbtbl[i] == NULL ) break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 if ( i >= NFILES) return NULL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 if ( (fcbp = malloc(FCBSIZE)) == NULL ) return NULL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 if ( _setname(name,fcbp) == 0 ) return NULL;
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
141 #asm
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
142 pshs x,y,u
109
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
143 ldx -2,u
110
098b3feab38c mc09 test program worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 109
diff changeset
144 lda 7,u mode
133
2562c18c904e malloc for mc2 wrong...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 132
diff changeset
145 ldx 6,x name
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
146 os9 I$Open
110
098b3feab38c mc09 test program worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 109
diff changeset
147 bcs _LC0001
098b3feab38c mc09 test program worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 109
diff changeset
148 ldx -2,u
106
6566b9f47f4a asm macro fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
149 tfr a,b
6566b9f47f4a asm macro fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
150 clra
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
151 std ,x
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
152 bra _LC0002
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
153 _LC0001
110
098b3feab38c mc09 test program worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 109
diff changeset
154 ldx -2,u
098b3feab38c mc09 test program worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 109
diff changeset
155 tfr a,b
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
156 clra
106
6566b9f47f4a asm macro fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
157 std 2,x err code
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
158 ldd #-1
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
159 std ,x
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
160 _LC0002
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
161 puls x,y,u
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
162 #endasm
132
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
163 if (fcbp->fd < 0 ) { errno = fcbp->fmode ; *mfree(fcbp); return NULL; }
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
164 initfp(fcbp,i);
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
165 fcbp->fmode = cm;
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 return (_fcbtbl[i] = fcbp);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
168
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 FILE *_create(name,cm)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 char *name;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 int cm;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 {FILE *fcbp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 int i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 for ( i = 0; i < NFILES; i++)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 if ( _fcbtbl[i] == NULL ) break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 if ( i >= NFILES) return NULL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
177 if ( (fcbp = malloc(FCBSIZE)) == NULL ) return NULL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 if ( _setname(name,fcbp) == 0 ) return NULL;
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
179 #asm
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
180 pshs x,y,u
109
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
181 ldx -2,u
110
098b3feab38c mc09 test program worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 109
diff changeset
182 lda 7,u mode
111
c4e909f21b25 micro c,j self compiled on os9 level2
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 110
diff changeset
183 ldb #3
133
2562c18c904e malloc for mc2 wrong...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 132
diff changeset
184 ldx 6,x name
103
844305752064 no compile errors on mc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
185 os9 I$Create
110
098b3feab38c mc09 test program worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 109
diff changeset
186 bcs _LC0003
098b3feab38c mc09 test program worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 109
diff changeset
187 ldx -2,u
106
6566b9f47f4a asm macro fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
188 tfr a,b
6566b9f47f4a asm macro fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
189 clra
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
190 std ,x
103
844305752064 no compile errors on mc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
191 bra _LC0004
844305752064 no compile errors on mc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
192 _LC0003
110
098b3feab38c mc09 test program worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 109
diff changeset
193 ldx -2,u
098b3feab38c mc09 test program worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 109
diff changeset
194 tfr a,b
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
195 clra
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
196 stD 2,x err code
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
197 ldd #-1
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
198 std ,x
103
844305752064 no compile errors on mc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 102
diff changeset
199 _LC0004
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
200 puls x,y,u
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
201 #endasm
132
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
202 if (fcbp->fd < 0 ) { errno = fcbp->fmode ; mfree(fcbp); return NULL; }
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
203 initfp(fcbp,i);
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
204 fcbp->fmode = cm;
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
205 return (_fcbtbl[i] = fcbp);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
207
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
208 fclose(fcbp)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
209 FILE *fcbp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 {int i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
211 for ( i = 0; i < NFILES; i++ )
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
212 if ( fcbp == _fcbtbl[i] ) break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
213 if ( i >= NFILES ) return EOF;
132
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
214 if ((fcbp->fmode&3) && fcbp->ptr!=fcbp->buf) {
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
215 fflush(fcbp);
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
216 }
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
217 #asm
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
218 pshs x,y,u
109
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
219 ldx 4,u
106
6566b9f47f4a asm macro fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
220 lda 1,x
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
221 os9 I$Close
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
222 puls x,y,u
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
223 #endasm
132
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
224 _fcbtbl[i] = NULL;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
225 if (fcbp->buf) mfree(fcbp->buf);
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
226 mfree(fcbp);
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
227 return 0;
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 _setname(name,fcbp)
109
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
231 char *name; FILE *fcbp;
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
232 {
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
233 fcbp->fname = name;
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 return 1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
236
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
237
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
238 getc(fcbp)
132
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
239 FILE *fcbp;
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 {
132
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
241 int len;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
242 char *buff;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
243 if (fcbp->buf) {
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
244 if (fcbp->ptr < fcbp->buf+fcbp->length) {
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
245 return (*fcbp->ptr++)&0xff;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
246 }
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
247 len = BUFSIZ; fcbp->ptr = buff = fcbp->buf;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
248 } else {
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
249 len = 1 ; fcbp->ptr = buff = &len;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
250 }
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
251 #asm
108
014002970940 getc worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
252 pshs y
132
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
253 ldx 4,u FILE
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
254 lda 1,x file descriptor
132
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
255 ldx -4,u buf
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
256 ldy -2,u len
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
257 os9 I$Read
132
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
258 sty -2,u len
108
014002970940 getc worked
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 106
diff changeset
259 puls y
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
260 #endasm
132
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
261 if (len<=0) { fcbp->length=0; return -1; }
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
262 fcbp->length=len;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
263 return (*fcbp->ptr++)&0xff;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
264 }
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
265
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
266 fflush(fcbp)
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
267 FILE *fcbp;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
268 {
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
269 int len;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
270 char *buff;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
271 if (fcbp->buf==0)
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
272 return;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
273 len = fcbp->ptr - fcbp->buf;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
274 if (len==0) return;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
275 buff = fcbp->buf;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
276 #asm
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
277 pshs y
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
278 ldx 4,u FILE
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
279 lda 1,x file descriptor
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
280 ldx -4,u
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
281 ldy -2,u
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
282 os9 I$Write
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
283 sty -2,u
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
284 puls y
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
285 #endasm
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
286 fcbp->ptr = fcbp->buf;
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
287 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
288
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
289 putc(c,fcbp)
132
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
290 char c; FILE *fcbp;
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
291 {
132
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
292 int len;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
293 if (!fcbp->buf) {
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
294 fcbp->buf=&c; fcbp->ptr=fcbp->buf+1;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
295 fflush(fcbp);
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
296 fcbp->buf = 0;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
297 return;
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
298 } else if (fcbp->ptr >= fcbp->buf+BUFSIZ) {
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
299 fflush(fcbp);
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
300 }
36000611014b micro-c buffering
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 111
diff changeset
301 *fcbp->ptr++ = c;
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
302 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
303
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
304 getchar()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
305 { return getc(stdin);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
306 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
307
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
308 putchar(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
309 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
310 { return putc(c,stdout);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
311 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
312
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
313 printf(s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
314 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
315 { _fprintf(stdout,s,(int *)&s+1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
316 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
317
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
318 fprintf(f,s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
319 char *f,*s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
320 { _fprintf(f,s,(int *)&s+1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
321 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
322
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
323 _fprintf(f,s,p)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
324 char *f,*s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
325 int *p;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
326 {int l,m,n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
327 char c,buf[8];
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
328 while(c = *s++)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
329 if (c != '%') putc(c,f);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
330 else
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
331 { if (l=(*s == '-')) ++s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
332 if (isdigit(*s)) s += _getint(&m,s);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
333 else m = 0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
334 if (*s == '.') ++s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
335 if (isdigit(*s)) s += _getint(&n,s);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
336 else n = 32767;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
337 switch(*s++)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
338 {case 'd':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
339 itoa(*p++,buf);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
340 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
341 case 'o':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
342 itooa(*p++,buf);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
343 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
344 case 'x':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
345 itoxa(*p++,buf);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
346 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
347 case 'u':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
348 itoua(*p++,buf);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
349 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
350 case 'c':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
351 ctos(*p++,buf);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
352 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
353 case 's':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
354 _putstr(f,*p++,l,m,n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
355 continue;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
356 case '\0':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
357 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
358 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
359 ctos(c,buf);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
360 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
361 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
362 _putstr(f,buf,l,m,n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
363 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
364 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
365
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
366 _getint(p,s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
367 int *p;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
368 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
369 {int i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
370 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
371 return i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
372 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
373
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
374 _putstr(f,s,l,m,n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
375 char *f,*s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
376 int l,m,n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
377 {int k;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
378 k = (strlen(s) < n ? strlen(s) : n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
379 m = (k < m ? m-k : 0);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
380 if (l)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
381 { _putsn(f,s,n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
382 _putspc(f,m);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
383 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
384 else
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
385 { _putspc(f,m);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
386 _putsn(f,s,n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
387 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
388 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
389
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
390 _putsn(f,s,n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
391 char *f,*s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
392 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
393 { while(*s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
394 if (--n >= 0) putc(*s++,f);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
395 else break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
396 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
397
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
398 _putspc(f,n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
399 char *f;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
400 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
401 { while(--n >= 0) putc(' ',f);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
402 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
403
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
404 puts(s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
405 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
406 { while(*s) putchar(*s++);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
407 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
408
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
409 itoa(n,s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
410 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
411 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
412 { if (n < 0)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
413 { *s++ = '-';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
414 return (itoua(-n,s)+1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
415 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
416 return itoua(n,s);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
417 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
418
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
419 itoua(n,s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
420 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
421 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
422 { return _itoda(n,s,10);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
423 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
424
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
425 itooa(n,s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
426 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
427 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
428 { return _itoda(n,s,8);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
429 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
430
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
431 itoxa(n,s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
432 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
433 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
434 { return _itoda(n,s,16);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
435 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
436
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
437 _itoac(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
438 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
439 { return (n + ((n < 10) ? '0' : ('A'-10)));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
440 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
441
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
442 _itoda(n,s,r)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
443 unsigned n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
444 int r;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
445 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
446 {int i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
447 char t[8],*u;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
448 u = t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
449 *u++ = '\0';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
450 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
451 for (i=0; *s++ = *--u; ++i);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
452 return i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
453 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
454
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
455 char *ctos(c,s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
456 char c,*s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
457 { s[0] = c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
458 s[1] = '\0';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
459 return s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
460 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
461
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
462 strlen(s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
463 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
464 {int i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
465 for(i = 0; *s++; ++i);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
466 return i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
467 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
468
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
469 isdigit(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
470 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
471 { return '0' <= c && c <= '9';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
472 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
473
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
474 isspace(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
475 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
476 { return (c == ' ' || c == '\t' || c == '\n');
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
477 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
478
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
479 isalpha(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
480 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
481 { return (isupper(c) || islower(c) || c == '_');
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
482 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
483
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
484 isupper(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
485 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
486 { return ('A' <= c && c <= 'Z');
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
487 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
488
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
489 islower(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
490 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
491 { return ('a' <= c && c <= 'z');
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
492 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
493
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
494 toupper(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
495 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
496 { return (islower(c) ? c + ('A'-'a') : c);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
497 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
498
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
499 tolower(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
500 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
501 { return (isupper(c) ? c + ('a'-'A') : c);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
502 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
503
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
504 atoi(s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
505 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
506 {int i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
507 while (isspace(*s)) ++s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
508 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
509 return i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
510 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
511
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
512 typedef struct header
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
513 { struct header *bptr;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
514 unsigned bsize;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
515 } HEADER;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
516
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
517 HEADER base,*allocp,*heapp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
518
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
519 char *malloc(s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
520 unsigned s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
521 {HEADER *p,*q;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
522 int nunits;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
523 nunits = 1 + (s + sizeof(HEADER) - 1) / sizeof(HEADER);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
524 if ((q = allocp) == NULL)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
525 { base.bptr = allocp = q = &base;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
526 base.bsize = 0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
527 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
528 for (p = q->bptr; ; q = p,p = p->bptr)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
529 { if (p->bsize >= nunits)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
530 { if (p->bsize == nunits)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
531 q->bptr = p->bptr;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
532 else
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
533 { p->bsize -= nunits;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
534 p += p->bsize;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
535 p->bsize = nunits;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
536 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
537 allocp = q;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
538 clearblock(p);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
539 return ((char *)(p + 1));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
540 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
541 if (p == allocp)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
542 if ((p = morecore(nunits)) == NULL)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
543 return(NULL);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
544 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
545 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
546
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
547 clearblock(p)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
548 HEADER *p;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
549 {char *s,*t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
550 s = (char *)(p + 1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
551 t = (char *)(p + p->bsize);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
552 while (s < t) *s++ = 0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
553 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
554
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
555 #define NALLOC 128
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
556
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
557 HEADER *morecore(nu)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
558 unsigned nu;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
559 {char *cp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
560 HEADER *up;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
561 int rnu;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
562 rnu = NALLOC * ((nu + NALLOC - 1) / NALLOC);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
563 cp = sbrk(rnu * sizeof(HEADER));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
564 if ((int)cp == -1) return NULL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
565 up = (HEADER *) cp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
566 up->bsize = rnu;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
567 mfree((char *)(up+1));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
568 return allocp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
569 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
570
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
571 #asm
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
572 sbrk PSHS U
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
573 LEAU ,S
109
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 108
diff changeset
574 LDD heapp,Y
105
6eef99bb4771 fix runtime
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
575 PSHS D
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
576 TFR S,D
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
577 SUBD ,S++
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
578 CMPD 4,U
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
579 BCC _mc1
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
580 LDD #-1
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
581 LEAS ,U
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
582 PULS U,PC
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
583
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
584 _mc1 LDD 4,U
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
585 LDX heapp,Y
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
586 LEAX D,X
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
587 LDD heapp,Y
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
588 STX heapp,Y
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
589 LEAS ,U
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
590 PULS U,PC
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
591
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
592 #endasm
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
593
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
594 mfree(ap)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
595 char *ap;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
596 {HEADER *p,*q;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
597 p = (HEADER *)ap - 1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
598 for (q = allocp; !(p > q && p < q->bptr); q = q->bptr)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
599 if (q >= q->bptr && (p > q || p < q->bptr)) break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
600 if (p + p->bsize == q->bptr)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
601 { p->bsize += q->bptr->bsize;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
602 p->bptr = q->bptr->bptr;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
603 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
604 else p->bptr = q->bptr;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
605 if (q + q->bsize == p)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
606 { q->bsize += p->bsize;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
607 q->bptr = p->bptr;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
608 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
609 else q->bptr = p;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
610 allocp = q;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
611 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
612
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
613 unsigned freesize()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
614 {int i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
615 if (!heapp) initheap();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
616 return ((char *)&i - (char *)heapp);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
617 }