0
|
1 /*
|
|
2 * $Id: rk_vars.c,v 1.4 2005/04/10 15:26:38 aonoto Exp $
|
|
3 */
|
|
4
|
|
5 /*
|
|
6 * FreeWnn is a network-extensible Kana-to-Kanji conversion system.
|
|
7 * This file is part of FreeWnn.
|
|
8 *
|
|
9 * Copyright Kyoto University Research Institute for Mathematical Sciences
|
|
10 * 1987, 1988, 1989, 1990, 1991, 1992
|
|
11 * Copyright OMRON Corporation. 1987, 1988, 1989, 1990, 1991, 1992, 1999
|
|
12 * Copyright ASTEC, Inc. 1987, 1988, 1989, 1990, 1991, 1992
|
|
13 * Copyright FreeWnn Project 1999, 2000
|
|
14 *
|
|
15 * Maintainer: FreeWnn Project <freewnn@tomo.gr.jp>
|
|
16 *
|
|
17 * This library is free software; you can redistribute it and/or
|
|
18 * modify it under the terms of the GNU Lesser General Public
|
|
19 * License as published by the Free Software Foundation; either
|
|
20 * version 2 of the License, or (at your option) any later version.
|
|
21 *
|
|
22 * This library is distributed in the hope that it will be useful,
|
|
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
25 * Lesser General Public License for more details.
|
|
26 *
|
|
27 * You should have received a copy of the GNU Lesser General Public
|
|
28 * License along with this library; if not, write to the
|
|
29 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
30 * Boston, MA 02111-1307, USA.
|
|
31 */
|
|
32
|
|
33 /***********************************************************************
|
|
34 rk_vars.c
|
|
35 88. 6.16 訂 補
|
|
36
|
|
37 プログラム内で二つ以上のファイルにまたがって使う変数を
|
|
38 まとめて定義している。
|
|
39 ***********************************************************************/
|
|
40 /* Version 3.0
|
|
41 */
|
|
42 #include "rk_header.h"
|
|
43 #include "rk_extvars.h"
|
|
44
|
|
45 char rk_errstat = 0; /* (error)によってエラーが引き起こされた時1(但し
|
|
46 (eofflg)が立っていたため末尾までの強制出力処理が
|
|
47 起こった場合は2)になる。romkan_henkan()実行ごとに
|
|
48 更新される。これはユーザにも開放。 */
|
|
49
|
|
50 int flags = 0;
|
|
51 /* 以下のフラグのOR。
|
|
52 RK_CHMOUT モードチェンジを知らせるかのフラグ
|
|
53 RK_KEYACK キーインに対し必ず何か返すかのフラグ
|
|
54 RK_DSPNIL romkan_disp(off)modeの返値のデフォルトが空文字列であるかの
|
|
55 フラグ。立たなければデフォルトはNULL。互換性のためromkan_
|
|
56 init2まではこれが立つ。
|
|
57 RK_NONISE 偽コードを出さないようにするかのフラグ
|
|
58 RK_REDRAW Wnnで使う特殊なフラグ。これが立っている場合、romkan_henkan
|
|
59 の結果としてdisoutにnisedl(偽物のdel)以後が特殊コードのみ
|
|
60 で終わる文字列が返ってきたら、その後ろにREDRAWをつなぐ。Wnn
|
|
61 で変換行のredrawをするために必要な措置。
|
|
62 RK_SIMPLD deleteの動作を単純にするかのフラグ
|
|
63 RK_VERBOS verboseで起こすかのフラグ
|
|
64 */
|
|
65
|
|
66 jmp_buf env0;
|
|
67
|
|
68 FILE *modefile; /* モード定義表のファイル */
|
|
69 char nulstr[1] = { '\0' };
|
|
70
|
|
71 char *hcurread, *mcurread; /* 変換表・モード表の現在行bufへのポインタ */
|
|
72 char *curfnm, *curdir; /* 現在読んでる変換表・モード表の名とディレクトリ。
|
|
73 但しcurdirは、サーチパスを捜してかつ表のオープンに成功した時のみ有効 */
|
|
74 letter *ltrbufbgn; /* 使用中のletterのバッファの先頭を指す */
|
|
75 /* これら五つは、readdata()などの関数内でローカルに定義する配列の先頭を指
|
|
76 す。従って、その関数を抜けた後でこれらの値を使わないよう十分注意。特に、
|
|
77 エラー警告ルーチンなどでは、longjmpで戻るより前にこれらのprintを行うこと
|
|
78 (エラー処理用に使っているのは、上から四個まで)。 */
|
|
79 FILE *nestfile[FILNST], **base; /* 変換対応表のファイル */
|
|
80
|
|
81 struct modestat modesw[MODMAX];
|
|
82
|
|
83 char hyoshu[HYOMAX]; /* 表の種別(前・本・後処理表の区別)を入れる配列 */
|
|
84 char **modmeiptr, *modmeibgn[MODMAX]; /* モード名に対する上と同様のデータ */
|
|
85 char *modmeimem, modmeimem_[MODMEI]; /* 〃 */
|
|
86 char **dspnamptr, *dspnambgn[DMDMAX];
|
|
87 /* モード表示文字列に対する同様のデータ */
|
|
88 char *dspcod, dspcod_[DMDCHR]; /* 〃 */
|
|
89 char *dspmod[2][2] = { NULL, NULL, NULL, NULL };
|
|
90 /* 現在及び一つ前の、romkanをそれぞれon・offしている時のモード表示
|
|
91 文字列へのポインタ。romkan_dispmode()で返る値はdspmod[0][0]。 */
|
|
92
|
|
93 char **hyomeiorg, **hyomeiptr;
|
|
94 /* 表の名へのポインタを入れる配列 *hyomeibgn[HYOMAX] を readdata() で
|
|
95 使うが、その先頭及び特定の要素へのポインタ */
|
|
96 char *hyomeimem;
|
|
97 /* 表の名の実際の文字列を入れる配列 hyomeimem_[HYOMEI] を readdata()
|
|
98 で使うが、その特定の要素へのポインタ */
|
|
99 char **pathmeiorg, **pathmeiptr;
|
|
100 /* 対応表のサーチパス名へのポインタを入れる配列 *pathmeibgn[PTHMAX]を
|
|
101 readdata() で使うが、その先頭及び特定の要素へのポインタ */
|
|
102 char *pathareaorg, *pathmeimem;
|
|
103 /* 上記サーチパス名の実際の文字列を入れる配列 pathmeimem_[PTHMEI] を
|
|
104 readdata() で使うが、その先頭及び特定の要素へのポインタ。
|
|
105 但しpathmeimem_の先頭にはモード表のあるディレクトリの名が入り、後
|
|
106 で使うので、pathareaorgにはその続きのエリアの先頭の番地が入る。 */
|
|
107
|
|
108 int usemaehyo[HYOMAX], usehyo[HYOMAX], useatohyo[HYOMAX];
|
|
109 /* 前・本・後処理表のどれが選択されているかのデータ */
|
|
110 int naibu_[NAIBMX], *naibu; /* モード表の内部表現を入れる配列 */
|
|
111
|
|
112 letter *lptr; /* letterへの汎用ポインタ */
|
|
113
|
|
114 letter rk_input; /* 入力。3バイトまでは変更なしに対応可 */
|
|
115 letter disout[OUTSIZ]; /* 本処理からの出力のバッファ */
|
|
116 letter rk_output[OUTSIZ]; /* 後処理からの出力(最終出力)のバッファ */
|
|
117 letter keybuf[KBFSIZ], urabuf[KBFSIZ]; /* 本処理バッファとその退避領域 */
|
|
118 int lastoutlen, lastkbflen;
|
|
119 letter oneletter[2] = { EOLTTR, EOLTTR }, nil[1] =
|
|
120 {
|
|
121 EOLTTR};
|
|
122 int hyonum;
|
|
123
|
|
124 #define bit3(x, y, z) ((x) | ((y) << 1) | ((z) << 2))
|
|
125
|
|
126 struct funstr func[] = /* 関数の追加にはここと mchevl(), evlis() をいじる */
|
|
127 {
|
|
128 /* 引数の数(-1…この値未使用)
|
|
129 名 出現 | タイプ…0:文字関数 1:文字列関数
|
|
130 ↓ ↓ ↓ ↓ 2:特殊関数 3:機能 4:宣言 */
|
|
131 "defvar", bit3 (1, 0, 0), -1, 4, /* 0 */
|
|
132 "include", bit3 (1, 0, 0), -1, 4,
|
|
133 "toupper", bit3 (1, 1, 1), 1, 0,
|
|
134 "tolower", bit3 (1, 1, 1), 1, 0,
|
|
135 "off", bit3 (0, 1, 0), -1, 2,
|
|
136 "on", bit3 (0, 1, 0), -1, 2, /* 5 */
|
|
137 "switch", bit3 (0, 1, 0), -1, 2,
|
|
138 "toupdown", bit3 (1, 1, 1), 1, 0,
|
|
139 "tozenalpha", bit3 (1, 1, 1), 1, 0,
|
|
140 "tohira", bit3 (1, 1, 1), 1, 0,
|
|
141 "tokata", bit3 (1, 1, 1), 1, 0, /* 10 */
|
|
142 "tohankata", bit3 (1, 1, 1), 1, 1,
|
|
143 "tozenhira", bit3 (1, 1, 1), 1, 0,
|
|
144 "tozenkata", bit3 (1, 1, 1), 1, 0,
|
|
145 "+", bit3 (1, 1, 1), 2, 0,
|
|
146 "-", bit3 (1, 1, 1), 2, 0, /* 15 */
|
|
147 "*", bit3 (1, 1, 1), 2, 0,
|
|
148 "/", bit3 (1, 1, 1), 2, 0,
|
|
149 "%", bit3 (1, 1, 1), 2, 0,
|
|
150 "last=", bit3 (1, 0, 0), 1, 2, /* 直前のマッチコード==引数か? */
|
|
151 "if", bit3 (1, 0, 0), -1, 2, /* 20 */
|
|
152 "unless", bit3 (1, 0, 0), -1, 2,
|
|
153 "restart", bit3 (0, 1, 0), 0, 3,
|
|
154 "delchr", bit3 (1, 1, 1), 0, 0, /* delchrを返す。隠しコマンド */
|
|
155 "alloff", bit3 (0, 1, 0), 0, 2, /* 全モードをいっぺんにOFF */
|
|
156 "allon", bit3 (0, 1, 0), 0, 2, /* 25 */
|
|
157 "bitand", bit3 (1, 1, 1), 2, 0,
|
|
158 "bitor", bit3 (1, 1, 1), 2, 0,
|
|
159 "bitnot", bit3 (1, 1, 1), 1, 0,
|
|
160 "!", bit3 (0, 1, 0), 0, 2, /* 裏バッファの明示的クリア */
|
|
161 "atEOF", bit3 (1, 0, 0), 0, 2, /* 30 */
|
|
162 "todigit", bit3 (1, 1, 1), 2, 1,
|
|
163 "dakuadd", bit3 (1, 1, 1), 1, 1, /* 濁点の付加 */
|
|
164 "handakuadd", bit3 (1, 1, 1), 1, 1, /* 半濁点の付加 */
|
|
165 "value", bit3 (1, 1, 1), 1, 0,
|
|
166 "error", bit3 (0, 1, 0), 0, 3, /* 35 */
|
|
167 "defconst", bit3 (1, 0, 0), -1, 4,
|
|
168 "setmode", bit3 (0, 1, 0), -1, 2,
|
|
169 "mode+", bit3 (0, 1, 0), -1, 2,
|
|
170 "mode-", bit3 (0, 1, 0), -1, 2,
|
|
171 "mode=", bit3 (1, 0, 0), -1, 2, /* 40 */
|
|
172 "mode!=", bit3 (1, 0, 0), -1, 2,
|
|
173 "mode<", bit3 (1, 0, 0), -1, 2,
|
|
174 "mode>", bit3 (1, 0, 0), -1, 2,
|
|
175 "send", bit3 (0, 1, 0), 1, 1, /* 試作 */
|
|
176 NULL
|
|
177 };
|
|
178 /* last=〜unless… 入力コードの位置にしか置けず、文字列関数扱いなので
|
|
179 本処理表にしか書けない。 */
|
|
180 /* +,-,*,/,bitand,bitor,bitnot… 3バイト分の演算を行う。 */
|
|
181 /* atEOF… ファイル末尾での特別動作を指定するためのもの。但し、その
|
|
182 動作は不完全。 */
|
|
183
|
|
184 struct hyo hyo_n[HYOMAX]; /* 表ごとの変域・対応データの開始番地 */
|