Mercurial > freewnn
comparison Wnn/romkan/rk_modread.c @ 28:a7ccf412ba02
more warning suppression
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Sat, 06 Mar 2010 23:24:53 +0900 |
parents | bbc77ca4def5 |
children |
comparison
equal
deleted
inserted
replaced
27:6bfa7ea3b75b | 28:a7ccf412ba02 |
---|---|
73 scan1tm (), modsrc_tourk (), chk_get_int (), pathsrc_tourk (), modnamchk (), ctov (), look_cond (), evlcond (), chkchar_getc (); | 73 scan1tm (), modsrc_tourk (), chk_get_int (), pathsrc_tourk (), modnamchk (), ctov (), look_cond (), evlcond (), chkchar_getc (); |
74 static char codeeval (); | 74 static char codeeval (); |
75 extern void ERRMOD (), ERMOPN (), BUGreport (); | 75 extern void ERRMOD (), ERMOPN (), BUGreport (); |
76 extern int filnamchk (); | 76 extern int filnamchk (); |
77 | 77 |
78 struct kwdpair | 78 struct kwdpair { |
79 { | |
80 /* キーワードとその内部表現の対応を与える構造体。内部表現を | 79 /* キーワードとその内部表現の対応を与える構造体。内部表現を |
81 持たないものに対しては0が与えられている。 */ | 80 持たないものに対しては0が与えられている。 */ |
82 char *name; | 81 char *name; |
83 int code; | 82 int code; |
84 } | 83 }; |
85 modfn[] = | 84 |
86 { | 85 struct kwdpair modfn[] = { |
87 "defmode", 0, | 86 {"defmode", 0}, |
88 "if", XY2INT (2, 0), "when", XY2INT (2, 1), "path", 0, "search", 0, "on_dispmode", XY2INT (5, 0), "off_dispmode", XY2INT (5, 1), "on_unchg", XY2INT (6, 0), "off_unchg", XY2INT (6, 1), NULL}; /* 下を見よ キーワード定義表はまだあと二つあるのだ */ | 87 {"if", XY2INT (2, 0)}, |
88 {"when", XY2INT (2, 1)}, | |
89 {"path", 0}, | |
90 {"search", 0}, | |
91 {"on_dispmode", XY2INT (5, 0)}, | |
92 {"off_dispmode", XY2INT (5, 1)}, | |
93 {"on_unchg", XY2INT (6, 0)}, | |
94 {"off_unchg", XY2INT (6, 1)}, | |
95 {NULL, 0}, | |
96 }; /* 下を見よ キーワード定義表はまだあと二つあるのだ */ | |
89 | 97 |
90 struct kwdpair modcond[] = { | 98 struct kwdpair modcond[] = { |
91 "not", XY2INT (3, 0), | 99 {"not", XY2INT (3, 0)}, |
92 "and", XY2INT (3, 1), | 100 {"and", XY2INT (3, 1)}, |
93 "or", XY2INT (3, 2), | 101 {"or", XY2INT (3, 2)}, |
94 "true", XY2INT (3, 3), | 102 {"true", XY2INT (3, 3)}, |
95 "false", XY2INT (3, 4), | 103 {"false", XY2INT (3, 4)}, |
96 "=", XY2INT (3, 5), | 104 {"=", XY2INT (3, 5)}, |
97 "!=", XY2INT (3, 6), | 105 {"!=", XY2INT (3, 6)}, |
98 "<", XY2INT (3, 7), | 106 {"<", XY2INT (3, 7)}, |
99 ">", XY2INT (3, 8), | 107 {">", XY2INT (3, 8)}, |
100 NULL | 108 {NULL, 0} |
101 }; | 109 }; |
110 | |
102 int condarg[] = { 1, 2, 2, 0, 0, 2, 2, 2, 2 }; /* 条件判断関数の引数個数 */ | 111 int condarg[] = { 1, 2, 2, 0, 0, 2, 2, 2, 2 }; /* 条件判断関数の引数個数 */ |
103 | 112 |
104 struct kwdpair swstat[] = { | 113 struct kwdpair swstat[] = { |
105 "on", 0, | 114 {"on", 0}, |
106 "off", 0, | 115 {"off", 0}, |
107 NULL | 116 {NULL, 0} |
108 }; | 117 }; |
109 /* 1×2^24代はモード名、4×2^24代はモード表示文字列、7×2^24代はモード状態定 | 118 /* 1×2^24代はモード名、4×2^24代はモード表示文字列、7×2^24代はモード状態定 |
110 数の内部表現に使っている */ | 119 数の内部表現に使っている */ |
111 | 120 |
112 /** キーワード(if, andなど)が正当なものかチェックし、その番号を返す */ | 121 /** キーワード(if, andなど)が正当なものかチェックし、その番号を返す */ |
119 | 128 |
120 for (i = 0; hyo[i].name != NULL; i++) | 129 for (i = 0; hyo[i].name != NULL; i++) |
121 if (!mystrcmp (hyo[i].name, wd)) | 130 if (!mystrcmp (hyo[i].name, wd)) |
122 return (i); | 131 return (i); |
123 ERRMOD (9); | 132 ERRMOD (9); |
124 /*NOTREACHED*/ | 133 /*NOTREACHED*/ |
134 return -1; /* dummy */ | |
125 } | 135 } |
126 | 136 |
127 /** モード表の読み込み */ | 137 /** モード表の読み込み */ |
128 void | 138 void |
129 readmode (modfname) | 139 readmode (modfname) |
1278 /** strcpyと同等 但し'\(8進);'も解釈する。s1 <= s2なら正常動作するはず */ | 1288 /** strcpyと同等 但し'\(8進);'も解釈する。s1 <= s2なら正常動作するはず */ |
1279 static void | 1289 static void |
1280 mystrcpy (s1, s2) | 1290 mystrcpy (s1, s2) |
1281 char *s1, *s2; | 1291 char *s1, *s2; |
1282 { | 1292 { |
1283 while (*s1++ = codeeval (&s2)); | 1293 while ((*s1++ = codeeval(&s2))); |
1284 } | 1294 } |
1285 | 1295 |
1286 /** 一文字の解釈を行う。普通の文字はそのまま、'\(8進);'は実際のコードに | 1296 /** 一文字の解釈を行う。普通の文字はそのまま、'\(8進);'は実際のコードに |
1287 直す。その後、文字列へのポインタを一文字分進めておく(少なくとも | 1297 直す。その後、文字列へのポインタを一文字分進めておく(少なくとも |
1288 1バイト分進むことが保証されるはず)。*/ | 1298 1バイト分進むことが保証されるはず)。*/ |