annotate conv/c2cbc.c @ 104:c21aeb12b78b

*** empty log message ***
author kono
date Mon, 17 Mar 2003 20:57:01 +0900
parents 0b068058dd67
children 756ba7c78e4c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
60
aa779bcffef7 CwC converters
kono
parents:
diff changeset
1 #define EXTERN /**/
aa779bcffef7 CwC converters
kono
parents:
diff changeset
2
aa779bcffef7 CwC converters
kono
parents:
diff changeset
3 #include "mc.h"
aa779bcffef7 CwC converters
kono
parents:
diff changeset
4
65
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
5 static void open(char *);
60
aa779bcffef7 CwC converters
kono
parents:
diff changeset
6 static void print(char *);
65
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
7 static void close();
66
0b068058dd67 *** empty log message ***
kono
parents: 65
diff changeset
8 static void comment(char *s);
60
aa779bcffef7 CwC converters
kono
parents:
diff changeset
9
aa779bcffef7 CwC converters
kono
parents:
diff changeset
10 Converter c2cbc_converter = {
65
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
11 &open,
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
12 &print,
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
13 &close,
66
0b068058dd67 *** empty log message ***
kono
parents: 65
diff changeset
14 &comment,
60
aa779bcffef7 CwC converters
kono
parents:
diff changeset
15 };
aa779bcffef7 CwC converters
kono
parents:
diff changeset
16
66
0b068058dd67 *** empty log message ***
kono
parents: 65
diff changeset
17 static FILE *vout;
0b068058dd67 *** empty log message ***
kono
parents: 65
diff changeset
18
0b068058dd67 *** empty log message ***
kono
parents: 65
diff changeset
19 static void
0b068058dd67 *** empty log message ***
kono
parents: 65
diff changeset
20 comment(char *s)
0b068058dd67 *** empty log message ***
kono
parents: 65
diff changeset
21 {
0b068058dd67 *** empty log message ***
kono
parents: 65
diff changeset
22 }
0b068058dd67 *** empty log message ***
kono
parents: 65
diff changeset
23
65
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
24 static void cbcstruct_init(void);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
25 static void init(void);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
26 static void unlist(int e1);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
27 static int unsym(int e1);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
28
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
29 static FILE *vout;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
30 static FILE *cbc_fp1;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
31
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
32 static int while_count=0;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
33 static int for_count=0;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
34 static int while_sign=0;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
35 static int for_sign=0;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
36
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
37 #define SPSTACK_MAX 300
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
38 int cbc_spstack[SPSTACK_MAX];
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
39 static int sp_free=0;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
40
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
41 #define FUNBUF_MAX 1000
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
42 char *cbc_funstack[FUNBUF_MAX];
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
43 static int fun_free=0;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
44
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
45 static void
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
46 open(char *s)
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
47 {
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
48 char *p=cheapp;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
49 while((*cheapp++ = *s++)) {
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
50 if (*s=='.') {
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
51 *cheapp++=*s++; *cheapp++='c';
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
52 *cheapp++='b'; *cheapp++='c';
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
53 *cheapp++=0;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
54 break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
55 }
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
56 }
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
57 vout = fopen(p,"w");
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
58 if(!vout) error(-1);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
59
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
60 cheapp=p;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
61 while((*cheapp++ = *s++)) {
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
62 if (*s=='.') {
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
63 *cheapp++='-'; *cheapp++='s';
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
64 *cheapp++=*s++; *cheapp++='h';
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
65 *cheapp++=0;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
66 break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
67 }
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
68 }
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
69 cbc_fp1 = fopen(p,"w");
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
70 if(!cbc_fp1) error(-1);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
71
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
72 cbcstruct_init();
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
73 init();
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
74 fprintf(vout,"#include \"%s\"\n",p);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
75 cheapp=p;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
76 }
60
aa779bcffef7 CwC converters
kono
parents:
diff changeset
77
aa779bcffef7 CwC converters
kono
parents:
diff changeset
78 static void
aa779bcffef7 CwC converters
kono
parents:
diff changeset
79 print(char *s)
aa779bcffef7 CwC converters
kono
parents:
diff changeset
80 {
aa779bcffef7 CwC converters
kono
parents:
diff changeset
81 fprintf(vout,"c: %s\n",s);
aa779bcffef7 CwC converters
kono
parents:
diff changeset
82 }
65
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
83
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
84 static void
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
85 close()
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
86 {
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
87 fclose(vout);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
88 }
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
89
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
90 static void
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
91 cbcstruct_init(void)
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
92 {
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
93 fprintf(cbc_fp1,"typedef char *stack;\n");
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
94 fprintf(cbc_fp1,"EXTERN stack sp;\n");
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
95 fprintf(cbc_fp1,"struct cont_save {\n");
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
96 fprintf(cbc_fp1," code (*ret)();\n");
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
97 fprintf(cbc_fp1,"};\n");
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
98 }
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
99
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
100 static void
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
101 init(void)
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
102 {
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
103 while_count=0;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
104 for_count=0;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
105 while_sign=0;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
106 for_sign=0;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
107 sp_free=0;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
108 fun_free=0;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
109 cbc_funstack[fun_free++]="main";
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
110 }
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
111
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
112 static void
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
113 unlist(int e1)
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
114 {
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
115 int e2,e3;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
116 e2=cadr(e1);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
117 e3=caddr(e1);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
118 switch(car(e1)){
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
119 case GT:
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
120 unlist(e2);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
121 printf(">");
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
122 unlist(e3);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
123 return;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
124 case LT:
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
125 unlist(e2);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
126 unsym(LT);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
127 unlist(e3);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
128 return;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
129 case RLVAR: case LVAR: case GVAR:
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
130 fprintf(vout,"%s",(char *)e3);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
131 return;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
132 case CONST:
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
133 fprintf(vout,"%d",e2);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
134 return;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
135 case POSTINC:
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
136 if(e3==1){
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
137 unlist(e2);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
138 fprintf(vout,"++");
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
139 return;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
140 }
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
141 else return;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
142 case CPOSTINC:
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
143 unlist(e2);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
144 fprintf(vout,"++");
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
145 return;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
146 default:
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
147 return;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
148 }
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
149 }
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
150
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
151 static int
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
152 unsym(int t) /*タイプをプリントする*/
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
153 {
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
154 char *symbuf;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
155 switch(t){
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
156 case -1: symbuf="int"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
157 case -2: symbuf="char"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
158 case -3: symbuf="unsigned"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
159 case -4: symbuf="*"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
160 case -6: symbuf="struct"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
161 case -10: symbuf="static"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
162 case -34: symbuf="long"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
163 case -35: symbuf="short"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
164 case -36: symbuf="extern"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
165 case -37: symbuf="void"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
166 case CODE: symbuf="code"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
167 case MUL: symbuf="*"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
168 case MUL+AS: symbuf="*="; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
169 case BAND: symbuf="&"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
170 case BAND+AS: symbuf="&="; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
171 case LAND: symbuf="&&"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
172 case SUB: symbuf="-"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
173 case SUB+AS: symbuf="-="; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
174 case DEC: symbuf="--"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
175 case ARROW: symbuf="->"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
176 case LNOT: symbuf="!"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
177 case NEQ: symbuf="!="; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
178 case BNOT: symbuf="~"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
179 case ADD: symbuf="+"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
180 case ADD+AS: symbuf="+="; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
181 case INC: symbuf="++"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
182 case MOD: symbuf="%"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
183 case MOD+AS: symbuf="%="; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
184 case EOR: symbuf="^"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
185 case EOR+AS: symbuf="^="; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
186 case BOR: symbuf="|"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
187 case BOR+AS: symbuf="||"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
188 case ASS: symbuf="="; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
189 case EQ: symbuf="=="; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
190 case RSHIFT: symbuf=">>"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
191 case RSHIFT+AS: symbuf=">>="; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
192 case GT: symbuf=">"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
193 case GE: symbuf=">="; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
194 case LSHIFT: symbuf="<<"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
195 case LSHIFT+AS: symbuf="<<="; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
196 case LT: symbuf="<"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
197 case LE: symbuf="<="; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
198 case LPAR: symbuf="("; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
199 case RPAR: symbuf=")"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
200 case LBRA: symbuf="["; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
201 case RBRA: symbuf="]"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
202 case LC: symbuf="{"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
203 case RC: symbuf="}"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
204 case COMMA: symbuf=","; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
205 case COLON: symbuf=":"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
206 case COND: symbuf="?"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
207 case DOTS: symbuf="..."; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
208 case PERIOD: symbuf="."; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
209 case DIV: symbuf="/"; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
210 case DIV+AS: symbuf="/="; break;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
211 default:
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
212 return sym;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
213 }
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
214 if((mode==GDECL)&&((t==INT)||(t==CHAR)))
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
215 fprintf(vout,"code ");
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
216 else
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
217 fprintf(vout,"%s",symbuf);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
218 if((mode!=GDECL)&&((t==INT)||(t==CHAR)||(t==-3)||(t==-4)))
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
219 fprintf(cbc_fp1," %s",symbuf);
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
220 return sym;
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
221 }
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
222
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
223
8ad746efa4f8 *** empty log message ***
kono
parents: 60
diff changeset
224 /* end */