From c5d964c6173b3781ea7fef1de160b787a241b885 Mon Sep 17 00:00:00 2001 From: iratqq Date: Fri, 11 Jan 2008 11:57:08 +0000 Subject: [PATCH] import --- CHANGES.eucJP | 284 + Makefile.am | 18 + README | 77 + README.eucJP | 72 + config/pkg.m4 | 157 + configure.in | 900 + dict/Makefile.am | 19 + dict/visual.dic | 29803 +++++++++++++++++++++++++++ doc/Makefile.am | 2 + doc/doc/Makefile.am | 29 + doc/doc/Nihongo.ps | 18417 +++++++++++++++++ doc/doc/hinsi.ms | 489 + doc/doc/makedict.ms | 91 + doc/doc/sj3lib.ms | 619 + doc/doc/sj3serv.ms | 170 + doc/man/Makefile.am | 25 + doc/man/sj3dic.1 | 141 + doc/man/sj3mkdic.1 | 576 + doc/man/sj3serv.1 | 78 + include/Makefile.am | 6 + include/sj3common/Const.h | 99 + include/sj3common/Makefile.am | 9 + include/sj3common/sj3cmd.h | 107 + include/sj3common/sj3err.h | 107 + include/sj3common/sj_const.h | 155 + include/sj3common/sj_euc.h | 47 + include/sj3common/sj_hinsi.h | 231 + include/sj3common/sj_string.h | 37 + include/sj3compat/Makefile.am | 2 + include/sj3compat/sj3compat.h | 128 + include/sj3compat/sys-queue.h | 610 + include/sj3core/Dict.h | 82 + include/sj3core/Makefile.am | 21 + include/sj3core/Struct.h | 173 + include/sj3core/sj3lowlib.h | 69 + include/sj3core/sj_connect.h | 524 + include/sj3core/sj_const.h | 155 + include/sj3core/sj_dict.h | 98 + include/sj3core/sj_global.h | 44 + include/sj3core/sj_kanakan.h | 332 + include/sj3core/sj_kcnv.h | 48 + include/sj3core/sj_left.h | 286 + include/sj3core/sj_prty.h | 81 + include/sj3core/sj_rename.h | 563 + include/sj3core/sj_right.h | 373 + include/sj3core/sj_struct.h | 200 + include/sj3core/sj_study.h | 92 + include/sj3core/sj_suuji.h | 137 + include/sj3core/sj_table.h | 124 + include/sj3core/sj_typedef.h | 65 + include/sj3core/sj_var.h | 47 + include/sj3core/sj_yomi.h | 217 + include/sj3lib/Makefile.am | 6 + include/sj3lib/sj3intern.h | 55 + include/sj3lib/sj3lib.h | 207 + include/sj3lib/sj3lowlib.h | 69 + include/sj3rkcv/Makefile.am | 8 + include/sj3rkcv/kana.h | 92 + include/sj3rkcv/kctype.h | 115 + include/sj3rkcv/key.h | 98 + include/sj3rkcv/rk.h | 85 + include/sj3rkcv/sj3rkcv.h | 127 + include/sj3rkcv/wchar16.h | 392 + lib/Makefile.am | 11 + lib/lua/COPYRIGHT | 34 + lib/lua/HISTORY | 183 + lib/lua/INSTALL | 99 + lib/lua/Makefile | 531 + lib/lua/Makefile.am | 11 + lib/lua/README | 37 + lib/lua/doc/Makefile.am | 13 + lib/lua/doc/amazon.gif | Bin 0 -> 797 bytes lib/lua/doc/contents.html | 456 + lib/lua/doc/cover.png | Bin 0 -> 3305 bytes lib/lua/doc/logo.gif | Bin 0 -> 4232 bytes lib/lua/doc/lua.1 | 163 + lib/lua/doc/lua.css | 41 + lib/lua/doc/lua.html | 172 + lib/lua/doc/luac.1 | 136 + lib/lua/doc/luac.html | 145 + lib/lua/doc/manual.css | 7 + lib/lua/doc/manual.html | 8521 ++++++++ lib/lua/doc/readme.html | 40 + lib/lua/etc/Makefile.am | 10 + lib/lua/etc/README | 37 + lib/lua/etc/all.c | 38 + lib/lua/etc/lua.hpp | 9 + lib/lua/etc/lua.ico | Bin 0 -> 1078 bytes lib/lua/etc/lua.pc | 31 + lib/lua/etc/luavs.bat | 15 + lib/lua/etc/min.c | 39 + lib/lua/etc/noparser.c | 50 + lib/lua/etc/strict.lua | 39 + lib/lua/src/Makefile.am | 64 + lib/lua/src/lapi.c | 1080 + lib/lua/src/lapi.h | 16 + lib/lua/src/lauxlib.c | 653 + lib/lua/src/lauxlib.h | 174 + lib/lua/src/lbaselib.c | 643 + lib/lua/src/lcode.c | 839 + lib/lua/src/lcode.h | 76 + lib/lua/src/ldblib.c | 397 + lib/lua/src/ldebug.c | 622 + lib/lua/src/ldebug.h | 33 + lib/lua/src/ldo.c | 516 + lib/lua/src/ldo.h | 57 + lib/lua/src/ldump.c | 164 + lib/lua/src/lfunc.c | 174 + lib/lua/src/lfunc.h | 34 + lib/lua/src/lgc.c | 711 + lib/lua/src/lgc.h | 110 + lib/lua/src/linit.c | 38 + lib/lua/src/liolib.c | 532 + lib/lua/src/llex.c | 461 + lib/lua/src/llex.h | 81 + lib/lua/src/llimits.h | 128 + lib/lua/src/lmathlib.c | 271 + lib/lua/src/lmem.c | 86 + lib/lua/src/lmem.h | 49 + lib/lua/src/loadlib.c | 664 + lib/lua/src/lobject.c | 213 + lib/lua/src/lobject.h | 381 + lib/lua/src/lopcodes.c | 102 + lib/lua/src/lopcodes.h | 268 + lib/lua/src/loslib.c | 244 + lib/lua/src/lparser.c | 1339 ++ lib/lua/src/lparser.h | 82 + lib/lua/src/lstate.c | 214 + lib/lua/src/lstate.h | 168 + lib/lua/src/lstring.c | 111 + lib/lua/src/lstring.h | 31 + lib/lua/src/lstrlib.c | 869 + lib/lua/src/ltable.c | 588 + lib/lua/src/ltable.h | 40 + lib/lua/src/ltablib.c | 278 + lib/lua/src/ltm.c | 75 + lib/lua/src/ltm.h | 54 + lib/lua/src/lua.c | 390 + lib/lua/src/lua.h | 385 + lib/lua/src/luac.c | 200 + lib/lua/src/luaconf.h | 762 + lib/lua/src/lualib.h | 53 + lib/lua/src/lundump.c | 223 + lib/lua/src/lundump.h | 36 + lib/lua/src/lvm.c | 765 + lib/lua/src/lvm.h | 36 + lib/lua/src/lzio.c | 82 + lib/lua/src/lzio.h | 67 + lib/lua/src/print.c | 227 + lib/sj3compat/Makefile.am | 16 + lib/sj3compat/bsd-asprintf.c | 99 + lib/sj3compat/bsd-getpeereid.c | 51 + lib/sj3compat/bsd-misc.c | 58 + lib/sj3compat/bsd-snprintf.c | 805 + lib/sj3compat/daemon.c | 69 + lib/sj3compat/fake-rfc2553.c | 228 + lib/sj3compat/getopt.c | 123 + lib/sj3compat/inet_ntoa.c | 59 + lib/sj3compat/setproctitle.c | 160 + lib/sj3compat/strlcat.c | 63 + lib/sj3compat/strlcpy.c | 59 + lib/sj3core/Makefile.am | 76 + lib/sj3core/adddic.c | 526 + lib/sj3core/addelcmn.c | 404 + lib/sj3core/alloc.c | 107 + lib/sj3core/charsize.c | 63 + lib/sj3core/chrtbl.c | 303 + lib/sj3core/cl2knj.c | 222 + lib/sj3core/clstudy.c | 285 + lib/sj3core/cmpstr.c | 58 + lib/sj3core/conjunc.c | 1245 ++ lib/sj3core/connect.c | 8113 ++++++++ lib/sj3core/cvtclknj.c | 68 + lib/sj3core/cvtdict.c | 246 + lib/sj3core/cvtkanji.c | 206 + lib/sj3core/deldic.c | 295 + lib/sj3core/dict.c | 102 + lib/sj3core/functbl.c | 81 + lib/sj3core/fuzoku.c | 272 + lib/sj3core/fzkyomi.c | 776 + lib/sj3core/getkanji.c | 220 + lib/sj3core/getrank.c | 191 + lib/sj3core/global.c | 58 + lib/sj3core/hzstrlen.c | 68 + lib/sj3core/init.c | 89 + lib/sj3core/istrcmp.c | 63 + lib/sj3core/memory.c | 150 + lib/sj3core/mk2claus.c | 162 + lib/sj3core/mkbunset.c | 166 + lib/sj3core/mkjiritu.c | 190 + lib/sj3core/mkkouho.c | 467 + lib/sj3core/mknumber.c | 376 + lib/sj3core/mvmemd.c | 48 + lib/sj3core/mvmemi.c | 48 + lib/sj3core/peepdic.c | 396 + lib/sj3core/ph2knj.c | 113 + lib/sj3core/ph_khtbl.c | 119 + lib/sj3core/priority.c | 291 + lib/sj3core/prtytbl.c | 104 + lib/sj3core/s2ctbl.c | 153 + lib/sj3core/sdepend.c | 756 + lib/sj3core/selclrec.c | 104 + lib/sj3core/selsuuji.c | 123 + lib/sj3core/setconj.c | 159 + lib/sj3core/setjrec.c | 312 + lib/sj3core/setkouho.c | 279 + lib/sj3core/setubi.c | 83 + lib/sj3core/sj2code.c | 132 + lib/sj3core/skiphblk.c | 53 + lib/sj3core/skipkstr.c | 61 + lib/sj3core/srchdict.c | 156 + lib/sj3core/srchhead.c | 67 + lib/sj3core/srchidx.c | 75 + lib/sj3core/srchnum.c | 606 + lib/sj3core/sstrcmp.c | 50 + lib/sj3core/sstrlen.c | 54 + lib/sj3core/sstrncmp.c | 63 + lib/sj3core/stbtbl.c | 147 + lib/sj3core/stttbl.c | 90 + lib/sj3core/study.c | 188 + lib/sj3core/suujitbl.c | 196 + lib/sj3core/terminat.c | 72 + lib/sj3core/termtbl.c | 327 + lib/sj3core/wakachi.c | 130 + lib/sj3lib/Makefile.am | 22 + lib/sj3lib/level1.c | 1268 ++ lib/sj3lib/sj.c | 1097 + lib/sj3lib/sj3lib.pc.in | 11 + lib/sj3lib/sj_string.c | 336 + lib/sj3rkcv/Makefile.am | 21 + lib/sj3rkcv/rk_conv.c | 1221 ++ lib/sj3rkcv/sj3_rkcv.c | 840 + lib/sj3rkcv/sjrk | 332 + lib/sj3rkcv/wc16_str.c | 414 + sj3.spec.in | 31 + src/Makefile.am | 6 + src/sj3demo/Makefile.am | 20 + src/sj3demo/sj3demo.c | 359 + src/sj3dic/Makefile.am | 26 + src/sj3dic/codecnv.c | 158 + src/sj3dic/dictdisp.c | 99 + src/sj3dic/dictmake.c | 227 + src/sj3dic/hinsi.c | 258 + src/sj3dic/sj3dic.c | 333 + src/sj3dic/sj3dic.h | 87 + src/sj3dic/sj3err.c | 108 + src/sj3dic/sjctype.h | 77 + src/sj3dic/sjrc.c | 290 + src/sj3dic/sjtool.h | 69 + src/sj3mkdic/GramTable | 198 + src/sj3mkdic/Makefile.am | 31 + src/sj3mkdic/char.c | 275 + src/sj3mkdic/cnvhinsi.c | 118 + src/sj3mkdic/file.c | 163 + src/sj3mkdic/global.c | 60 + src/sj3mkdic/hindo.c | 548 + src/sj3mkdic/knjcvt.c | 232 + src/sj3mkdic/makedict.c | 225 + src/sj3mkdic/makelist.c | 539 + src/sj3mkdic/makeseg.c | 387 + src/sj3mkdic/memory.c | 68 + src/sj3mkdic/offset.c | 167 + src/sj3mkdic/readline.c | 286 + src/sj3mkdic/sj3_dict_const.h | 108 + src/sj3mkdic/sj3_dict_struct.h | 90 + src/sj3mkdic/sj3mkdic.h | 123 + src/sj3mkdic/string.c | 202 + src/sj3serv/Makefile.am | 62 + src/sj3serv/auth.c | 230 + src/sj3serv/comuni.c | 586 + src/sj3serv/error.c | 187 + src/sj3serv/execute.c | 1714 ++ src/sj3serv/freebsd-sj3.sh.in | 26 + src/sj3serv/main.c | 203 + src/sj3serv/priv.c | 61 + src/sj3serv/setup.c | 631 + src/sj3serv/sj3serv.h | 156 + src/sj3serv/sj3serv.lua.example.in | 117 + src/sj3serv/sj_string.c | 336 + src/sj3serv/sj_string.h | 36 + src/sj3serv/time_stamp.sh | 6 + src/sj3serv/version.c | 36 + src/sj3stat/Makefile.am | 16 + src/sj3stat/sj3stat.c | 117 + 284 files changed, 125357 insertions(+) create mode 100644 CHANGES.eucJP create mode 100644 Makefile.am create mode 100644 README create mode 100644 README.eucJP create mode 100644 config/pkg.m4 create mode 100644 configure.in create mode 100644 dict/Makefile.am create mode 100644 dict/visual.dic create mode 100644 doc/Makefile.am create mode 100644 doc/doc/Makefile.am create mode 100644 doc/doc/Nihongo.ps create mode 100644 doc/doc/hinsi.ms create mode 100644 doc/doc/makedict.ms create mode 100644 doc/doc/sj3lib.ms create mode 100644 doc/doc/sj3serv.ms create mode 100644 doc/man/Makefile.am create mode 100644 doc/man/sj3dic.1 create mode 100644 doc/man/sj3mkdic.1 create mode 100644 doc/man/sj3serv.1 create mode 100644 include/Makefile.am create mode 100644 include/sj3common/Const.h create mode 100644 include/sj3common/Makefile.am create mode 100644 include/sj3common/sj3cmd.h create mode 100644 include/sj3common/sj3err.h create mode 100644 include/sj3common/sj_const.h create mode 100644 include/sj3common/sj_euc.h create mode 100644 include/sj3common/sj_hinsi.h create mode 100644 include/sj3common/sj_string.h create mode 100644 include/sj3compat/Makefile.am create mode 100644 include/sj3compat/sj3compat.h create mode 100644 include/sj3compat/sys-queue.h create mode 100644 include/sj3core/Dict.h create mode 100644 include/sj3core/Makefile.am create mode 100644 include/sj3core/Struct.h create mode 100644 include/sj3core/sj3lowlib.h create mode 100644 include/sj3core/sj_connect.h create mode 100644 include/sj3core/sj_const.h create mode 100644 include/sj3core/sj_dict.h create mode 100644 include/sj3core/sj_global.h create mode 100644 include/sj3core/sj_kanakan.h create mode 100644 include/sj3core/sj_kcnv.h create mode 100644 include/sj3core/sj_left.h create mode 100644 include/sj3core/sj_prty.h create mode 100644 include/sj3core/sj_rename.h create mode 100644 include/sj3core/sj_right.h create mode 100644 include/sj3core/sj_struct.h create mode 100644 include/sj3core/sj_study.h create mode 100644 include/sj3core/sj_suuji.h create mode 100644 include/sj3core/sj_table.h create mode 100644 include/sj3core/sj_typedef.h create mode 100644 include/sj3core/sj_var.h create mode 100644 include/sj3core/sj_yomi.h create mode 100644 include/sj3lib/Makefile.am create mode 100644 include/sj3lib/sj3intern.h create mode 100644 include/sj3lib/sj3lib.h create mode 100644 include/sj3lib/sj3lowlib.h create mode 100644 include/sj3rkcv/Makefile.am create mode 100644 include/sj3rkcv/kana.h create mode 100644 include/sj3rkcv/kctype.h create mode 100644 include/sj3rkcv/key.h create mode 100644 include/sj3rkcv/rk.h create mode 100644 include/sj3rkcv/sj3rkcv.h create mode 100644 include/sj3rkcv/wchar16.h create mode 100644 lib/Makefile.am create mode 100644 lib/lua/COPYRIGHT create mode 100644 lib/lua/HISTORY create mode 100644 lib/lua/INSTALL create mode 100644 lib/lua/Makefile create mode 100644 lib/lua/Makefile.am create mode 100644 lib/lua/README create mode 100644 lib/lua/doc/Makefile.am create mode 100644 lib/lua/doc/amazon.gif create mode 100644 lib/lua/doc/contents.html create mode 100644 lib/lua/doc/cover.png create mode 100644 lib/lua/doc/logo.gif create mode 100644 lib/lua/doc/lua.1 create mode 100644 lib/lua/doc/lua.css create mode 100644 lib/lua/doc/lua.html create mode 100644 lib/lua/doc/luac.1 create mode 100644 lib/lua/doc/luac.html create mode 100644 lib/lua/doc/manual.css create mode 100644 lib/lua/doc/manual.html create mode 100644 lib/lua/doc/readme.html create mode 100644 lib/lua/etc/Makefile.am create mode 100644 lib/lua/etc/README create mode 100644 lib/lua/etc/all.c create mode 100644 lib/lua/etc/lua.hpp create mode 100644 lib/lua/etc/lua.ico create mode 100644 lib/lua/etc/lua.pc create mode 100644 lib/lua/etc/luavs.bat create mode 100644 lib/lua/etc/min.c create mode 100644 lib/lua/etc/noparser.c create mode 100644 lib/lua/etc/strict.lua create mode 100644 lib/lua/src/Makefile.am create mode 100644 lib/lua/src/lapi.c create mode 100644 lib/lua/src/lapi.h create mode 100644 lib/lua/src/lauxlib.c create mode 100644 lib/lua/src/lauxlib.h create mode 100644 lib/lua/src/lbaselib.c create mode 100644 lib/lua/src/lcode.c create mode 100644 lib/lua/src/lcode.h create mode 100644 lib/lua/src/ldblib.c create mode 100644 lib/lua/src/ldebug.c create mode 100644 lib/lua/src/ldebug.h create mode 100644 lib/lua/src/ldo.c create mode 100644 lib/lua/src/ldo.h create mode 100644 lib/lua/src/ldump.c create mode 100644 lib/lua/src/lfunc.c create mode 100644 lib/lua/src/lfunc.h create mode 100644 lib/lua/src/lgc.c create mode 100644 lib/lua/src/lgc.h create mode 100644 lib/lua/src/linit.c create mode 100644 lib/lua/src/liolib.c create mode 100644 lib/lua/src/llex.c create mode 100644 lib/lua/src/llex.h create mode 100644 lib/lua/src/llimits.h create mode 100644 lib/lua/src/lmathlib.c create mode 100644 lib/lua/src/lmem.c create mode 100644 lib/lua/src/lmem.h create mode 100644 lib/lua/src/loadlib.c create mode 100644 lib/lua/src/lobject.c create mode 100644 lib/lua/src/lobject.h create mode 100644 lib/lua/src/lopcodes.c create mode 100644 lib/lua/src/lopcodes.h create mode 100644 lib/lua/src/loslib.c create mode 100644 lib/lua/src/lparser.c create mode 100644 lib/lua/src/lparser.h create mode 100644 lib/lua/src/lstate.c create mode 100644 lib/lua/src/lstate.h create mode 100644 lib/lua/src/lstring.c create mode 100644 lib/lua/src/lstring.h create mode 100644 lib/lua/src/lstrlib.c create mode 100644 lib/lua/src/ltable.c create mode 100644 lib/lua/src/ltable.h create mode 100644 lib/lua/src/ltablib.c create mode 100644 lib/lua/src/ltm.c create mode 100644 lib/lua/src/ltm.h create mode 100644 lib/lua/src/lua.c create mode 100644 lib/lua/src/lua.h create mode 100644 lib/lua/src/luac.c create mode 100644 lib/lua/src/luaconf.h create mode 100644 lib/lua/src/lualib.h create mode 100644 lib/lua/src/lundump.c create mode 100644 lib/lua/src/lundump.h create mode 100644 lib/lua/src/lvm.c create mode 100644 lib/lua/src/lvm.h create mode 100644 lib/lua/src/lzio.c create mode 100644 lib/lua/src/lzio.h create mode 100644 lib/lua/src/print.c create mode 100644 lib/sj3compat/Makefile.am create mode 100644 lib/sj3compat/bsd-asprintf.c create mode 100644 lib/sj3compat/bsd-getpeereid.c create mode 100644 lib/sj3compat/bsd-misc.c create mode 100644 lib/sj3compat/bsd-snprintf.c create mode 100644 lib/sj3compat/daemon.c create mode 100644 lib/sj3compat/fake-rfc2553.c create mode 100644 lib/sj3compat/getopt.c create mode 100644 lib/sj3compat/inet_ntoa.c create mode 100644 lib/sj3compat/setproctitle.c create mode 100644 lib/sj3compat/strlcat.c create mode 100644 lib/sj3compat/strlcpy.c create mode 100644 lib/sj3core/Makefile.am create mode 100644 lib/sj3core/adddic.c create mode 100644 lib/sj3core/addelcmn.c create mode 100644 lib/sj3core/alloc.c create mode 100644 lib/sj3core/charsize.c create mode 100644 lib/sj3core/chrtbl.c create mode 100644 lib/sj3core/cl2knj.c create mode 100644 lib/sj3core/clstudy.c create mode 100644 lib/sj3core/cmpstr.c create mode 100644 lib/sj3core/conjunc.c create mode 100644 lib/sj3core/connect.c create mode 100644 lib/sj3core/cvtclknj.c create mode 100644 lib/sj3core/cvtdict.c create mode 100644 lib/sj3core/cvtkanji.c create mode 100644 lib/sj3core/deldic.c create mode 100644 lib/sj3core/dict.c create mode 100644 lib/sj3core/functbl.c create mode 100644 lib/sj3core/fuzoku.c create mode 100644 lib/sj3core/fzkyomi.c create mode 100644 lib/sj3core/getkanji.c create mode 100644 lib/sj3core/getrank.c create mode 100644 lib/sj3core/global.c create mode 100644 lib/sj3core/hzstrlen.c create mode 100644 lib/sj3core/init.c create mode 100644 lib/sj3core/istrcmp.c create mode 100644 lib/sj3core/memory.c create mode 100644 lib/sj3core/mk2claus.c create mode 100644 lib/sj3core/mkbunset.c create mode 100644 lib/sj3core/mkjiritu.c create mode 100644 lib/sj3core/mkkouho.c create mode 100644 lib/sj3core/mknumber.c create mode 100644 lib/sj3core/mvmemd.c create mode 100644 lib/sj3core/mvmemi.c create mode 100644 lib/sj3core/peepdic.c create mode 100644 lib/sj3core/ph2knj.c create mode 100644 lib/sj3core/ph_khtbl.c create mode 100644 lib/sj3core/priority.c create mode 100644 lib/sj3core/prtytbl.c create mode 100644 lib/sj3core/s2ctbl.c create mode 100644 lib/sj3core/sdepend.c create mode 100644 lib/sj3core/selclrec.c create mode 100644 lib/sj3core/selsuuji.c create mode 100644 lib/sj3core/setconj.c create mode 100644 lib/sj3core/setjrec.c create mode 100644 lib/sj3core/setkouho.c create mode 100644 lib/sj3core/setubi.c create mode 100644 lib/sj3core/sj2code.c create mode 100644 lib/sj3core/skiphblk.c create mode 100644 lib/sj3core/skipkstr.c create mode 100644 lib/sj3core/srchdict.c create mode 100644 lib/sj3core/srchhead.c create mode 100644 lib/sj3core/srchidx.c create mode 100644 lib/sj3core/srchnum.c create mode 100644 lib/sj3core/sstrcmp.c create mode 100644 lib/sj3core/sstrlen.c create mode 100644 lib/sj3core/sstrncmp.c create mode 100644 lib/sj3core/stbtbl.c create mode 100644 lib/sj3core/stttbl.c create mode 100644 lib/sj3core/study.c create mode 100644 lib/sj3core/suujitbl.c create mode 100644 lib/sj3core/terminat.c create mode 100644 lib/sj3core/termtbl.c create mode 100644 lib/sj3core/wakachi.c create mode 100644 lib/sj3lib/Makefile.am create mode 100644 lib/sj3lib/level1.c create mode 100644 lib/sj3lib/sj.c create mode 100644 lib/sj3lib/sj3lib.pc.in create mode 100644 lib/sj3lib/sj_string.c create mode 100644 lib/sj3rkcv/Makefile.am create mode 100644 lib/sj3rkcv/rk_conv.c create mode 100644 lib/sj3rkcv/sj3_rkcv.c create mode 100644 lib/sj3rkcv/sjrk create mode 100644 lib/sj3rkcv/wc16_str.c create mode 100644 sj3.spec.in create mode 100644 src/Makefile.am create mode 100644 src/sj3demo/Makefile.am create mode 100644 src/sj3demo/sj3demo.c create mode 100644 src/sj3dic/Makefile.am create mode 100644 src/sj3dic/codecnv.c create mode 100644 src/sj3dic/dictdisp.c create mode 100644 src/sj3dic/dictmake.c create mode 100644 src/sj3dic/hinsi.c create mode 100644 src/sj3dic/sj3dic.c create mode 100644 src/sj3dic/sj3dic.h create mode 100644 src/sj3dic/sj3err.c create mode 100644 src/sj3dic/sjctype.h create mode 100644 src/sj3dic/sjrc.c create mode 100644 src/sj3dic/sjtool.h create mode 100644 src/sj3mkdic/GramTable create mode 100644 src/sj3mkdic/Makefile.am create mode 100644 src/sj3mkdic/char.c create mode 100644 src/sj3mkdic/cnvhinsi.c create mode 100644 src/sj3mkdic/file.c create mode 100644 src/sj3mkdic/global.c create mode 100644 src/sj3mkdic/hindo.c create mode 100644 src/sj3mkdic/knjcvt.c create mode 100644 src/sj3mkdic/makedict.c create mode 100644 src/sj3mkdic/makelist.c create mode 100644 src/sj3mkdic/makeseg.c create mode 100644 src/sj3mkdic/memory.c create mode 100644 src/sj3mkdic/offset.c create mode 100644 src/sj3mkdic/readline.c create mode 100644 src/sj3mkdic/sj3_dict_const.h create mode 100644 src/sj3mkdic/sj3_dict_struct.h create mode 100644 src/sj3mkdic/sj3mkdic.h create mode 100644 src/sj3mkdic/string.c create mode 100644 src/sj3serv/Makefile.am create mode 100644 src/sj3serv/auth.c create mode 100644 src/sj3serv/comuni.c create mode 100644 src/sj3serv/error.c create mode 100644 src/sj3serv/execute.c create mode 100755 src/sj3serv/freebsd-sj3.sh.in create mode 100644 src/sj3serv/main.c create mode 100644 src/sj3serv/priv.c create mode 100644 src/sj3serv/setup.c create mode 100644 src/sj3serv/sj3serv.h create mode 100644 src/sj3serv/sj3serv.lua.example.in create mode 100644 src/sj3serv/sj_string.c create mode 100644 src/sj3serv/sj_string.h create mode 100755 src/sj3serv/time_stamp.sh create mode 100644 src/sj3serv/version.c create mode 100644 src/sj3stat/Makefile.am create mode 100644 src/sj3stat/sj3stat.c diff --git a/CHANGES.eucJP b/CHANGES.eucJP new file mode 100644 index 0000000..4708d78 --- /dev/null +++ b/CHANGES.eucJP @@ -0,0 +1,284 @@ +# +# $SonyId: CHANGES.eucJP,v 1.31 1998/04/08 13:11:09 notanaka Exp $ +# + +[After X11R6 contrib release] + +number: 1 +date: 1994/08/01 +contents: sjis2euc と euc2sjis が半角カタカナも変換してくれると勘違いしていた。 +source: sj3rkcv/wc16_str.c + +number: 2 +date: 1994/08/17 +from: ASHIDA Isao +contents: (sj3-bugs 1) Lynux でコンパイルができない +source: dict/tool/hindo.c +source: dict/tool/offset.c +source: kanakan/depend.c +source: server/comuni.c + +number: 3 +date: 1994/10/21 +contents: MaxClient の上限値を 512 にする。Client 構造体を動的に取る。 +source: include/Const.h +source: include/Struct.h +source: server/comuni.c +source: server/execute.c + +number: 4 +date: 1994/10/21 +contents: ユーザ辞書と学習ファイルのパーミッションのデフォルトを 600 にする。 +source: include/Struct.h +source: server/execute.c +source: server/setup.c + +number: 5 +date: 1994/11/16 +contents: fix spell miss(trdwr -> tirdwr) in warning message +source: server/comuni.c + +number: 6 +date: 1994/11/17 +contents: SJIS の環境で、sj3 の変換結果の文字列がむちゃくちゃになる。 +source: sj3rkcv/wc16_str.c + +number: 7 +date: 1994/11/22 +contents: sj3_zentohan*()が全カタの「ム」以降の文字でおかしい(使ってないけど) +source: sj3rkcv/sj3_rkcv.c + +number: 8 +date: 1994/12/09 +contents: sj3servで複数の辞書を扱えるようにして、sj3libにインタフェースを追加 +source(add): doc/man/sj3mkdic.1 +source: dict/dict/Imakefile +source: dict/tool/Imakefile +source: dict/tool/makedict.c +source: dict/tool/makeseg.c +source: include/sj_global.h +source: kanakan/global.c +source: patchlevel.h +source: server/execute.c +source: server/main.c +source: server/setup.c +source: server/time_stamp.c +source: server/version.c +source: sj3/eucmessage.c +source: sj3/libif.c +source: sj3/sjrc.c +source: sj3/version.c +source: sj3lib/sj.c +source: sj3rkcv/rk_conv.c + +number: 9 +date: 1995/02/03 +from: Haruyuki Kawabe +contents: (sj3-bugs 3) [sj3serv]: [FileReadError] +source: kanakan/depend.c +source: server/version.c + +number: 10 +date: 1995/02/03 +contents: FreeBSD で sj3 が動作するようにした。 +source: dict/tool/file.c +source: kanakan/depend.c +source: server/main.c +source: server/time_stamp.c +source: server/version.c +source: sj3/sj3.c +source: sj3/sjgetchar.c +source: sj3/version.c +source: sj3lib/level1.c + +number: 11 +date: 1995/02/10 +from: Manabe Takashi +contents: Linux で sj3 を動かすためのパッチをあてた。 +source: include/sj_sysvdef.h +source: sj3/sj3.c +source: sj3/sjgetchar.c +source: sj3/version.c + +number: 12 +date: 1995/02/10 +contents: sj3_zentohan()で漢字を入力すると字が化ける(使ってないけど) +source: sj3rkcv/sj3_rkcv.c + +[After fix-1 release] + +number: 13 +date: 1995/03/14 +from: Tsuyoshi Tada +contents: NetBSD/i386 でのコンパイルができるようにした。 +source: sj3/sj3.c +source: sj3/sjgetchar.c + +number: 14 +date: 1995/04/05 +contents: put_flush() が正常終了時に return value を返していない。 +source: sj3lib/level1.c + +number: 15 +date: 1995/04/07 +contents: NetBSD で環境変数 LANG が設定されていないと core dump する。 +source: sj3/sj3.c +source: sj3/version.c + +number: 16 +date: 1995/04/17 +contents: put_over() の引数が多いところがある(とりあえず実害はない)。 +source: sj3lib/level1.c + +number: 17 +date: 1995/05/30 +from: Yoshikatsu Kawabe +contents: (sj3-bugs 5) [SJ3]: Contrib new utility (sj3stat) +source(add): sj3stat/Imakefile +source(add): sj3stat/sj3stat.c +source: Imakefile + +number: 18 +date: 1995/07/18 +from: Ryuichi MATSUMOTO +contents: (sj3-bugs 4) SJ3: Illegal Conversion (-ku, ku-ru) +source: dict/dict/visual.dic + +number: 19 +date: 1995/07/18 +contents: sj3stat で client の情報が正しく取れない。 +source: server/execute.c +source: server/version.c +source: server/time_stamp.c + +number: 20 +date: 1995/07/21 +contents: 単語登録の読み文字列で[a-z],[ヴヵヶ],[#@〒]が正しく使用できない。 +source: kanakan/peepdic.c +source: kanakan/s2ctbl.c +source: kanakan/sj2code.c +source: server/version.c +source: server/time_stamp.c + +number: 21 +date: 1996/02/15 +contents: locale が正しく設定されていないと sj3dic が core dump する。 +source: sj3dic/sj3dic.c +source: sj3dic/sjtool.h +source: sj3dic/codecnv.c +source: sj3dic/sjrc.c + +number: 22 +date: 1996/02/23 +contents: sj3 の変換候補に読みを全角仮名にした候補をくわえた。 +source: sj3/douon.c +source: sj3/libif.c +source: sj3/version.c +source: sj3h/sj3libsj3.h +source: sj3h/sj.h + +number: 23 +date: 1996/02/23 +contents: 読みの全角仮名の候補を選択したとき、ユーザ辞書に登録されるようにした。 +source: sj3/douon.c +source: sj3/version.c + +number: 24 +date: 1996/05/27 +contents: 上記の修正についてマニュアルに記述を追加した。 +source: doc/doc/Nihongo.ps.Z + +number: 25 +date: 1996/05/27 +contents: 辞書が正常に作成できないことがある(SunOS Release 4.1.x)。 +source: dict/tool/cnvhinsi.c +source: sj3h/sj3libsj3.h + +number: 26 +date: 1996/09/05 +contents: sj3serv で使用されないグループ指定に関する文章とソースを削除した。 +source: doc/man/sj3mkdic.1 +source(delete): kanakan/srchgrp.c + +number: 27 +date: 1997/01/21 +from: Hidekazu Kuroki +contents: (sj3-bugs 10) FreeBSD port のための修正 +source(add): server/rc.sj3serv.FreeBSD +source(add): doc/Imakefile +source(add): doc/doc/Imakefile +source(add): doc/man/Imakefile +source: Imakefile +source: demo/sample.c +source: dict/dict/Imakefile +source: dict/tool/Imakefile +source: include/Const.h +source: server/Imakefile +source: sj3/Imakefile +source: sj3/edit.c +source: sj3/funckey.c +source: sj3/henkan.c +source: sj3/romaji.c +source: sj3/sj3.c +source: sj3/sjrc.c +source: sj3dic/Imakefile +source: sj3h/sj2.h +source: sj3lib/Imakefile +source: sj3stat/Imakefile +source: sj3stat/sj3stat.c + +number: 28 +date: 1997/01/22 +from: Toya +contents: (sj3-bugs 9) [NOT bug...] easier(?) installation to non-default directory +source(add): include/Paths.h.in +source(add): sj3.tmpl +source: Imakefile +source: dict/dict/Imakefile +source: dict/tool/Imakefile +source: doc/man/Imakefile +source: doc/doc/Imakefile +source: include/Const.h +source: server/Imakefile +source: sj3/Imakefile +source: sj3/funckey.c +source: sj3/sjrc.c +source: sj3dic/Imakefile +source: sj3lib/Imakefile +source: sj3stat/Imakefile + +number: 29 +date: 1997/01/22 +from: Iwama Yoshihiko +contents: (sj3-bugs 12) sj3: Can't compile sj3 command on BSD/OS +source: demo/sample.c +source: sj3/sj3.c +source: sj3/sjgetchar.c +source: sj3dic/codecnv.c +source: sj3dic/sjrc.c + +number: 30 +date: 1997/10/07 +from: UO Youjiro +contents: (sj3-bugs 20) not work sj3serv on bsdi platform +source: kanakan/depend.c + +number: 31 +date: 1998/01/14 +from: SL Baur +contents: (sj3-bugs 22) [PATCH] Port of sj3-2.0.1.17 to Linux/Libc6 +source: include/sj_sysvdef.h +source: kanakan/depend.c +source: server/comuni.c +source: sj3lib/string.c +source: sj3/display.c +source: sj3/sjgetchar.c +source: sj3/sj3.c + +number: 32 +date: 1998/03/23 +from: MURANAKA Masaki +contents: (sj3-bugs 23) Security bug on SJ3SERV +source: server/execute.c +source: server/time_stamp.c +source: server/version.c diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..82976d5 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,18 @@ +AUTOMAKE_OPTIONS = foreign +ACLOCAL_AMFLAGS = -I config + +EXTRA_DIST = \ + CHANGES.eucJP \ + README \ + README.eucJP \ + sj3.spec.in + +SUBDIRS = \ + include \ + doc \ + lib \ + src \ + dict + +install-data-local: + $(mkdir_p) $(SJ3VARDIR) diff --git a/README b/README new file mode 100644 index 0000000..550eb0c --- /dev/null +++ b/README @@ -0,0 +1,77 @@ +* What's SJ3 + SJ3 is a Japanese input system developed by Sony Corporation. + SJ3 is composed of Kana-Kanji conversion server(sj3serv), + Kana-Kanji conversion client for terminal(sj3) and Kana-Kanji + conversion library(sj3lib). + +* How to make + In this directory, + + $ ./configure + $ make + # make install + + Following files are installed after make install: + + $(prefix)/var/sj3/spool/sj3/sj3main.dic + Main dictionary(used by sj3serv) + $(prefix)/sbin/sj3serv Kana-Kanji conversion server + $(prefix)/bin/sj3demo Demonstration program + $(prefix)/bin/sj3dic User dictionary utility + $(prefix)/bin/sj3mkdic Dictionary converter + $(prefix)/bin/sj3stat Utility to show status of sj3serv + $(prefix)/include/sj3lib.h Header file for sj3lib + $(prefix)/lib/libsj3core.a Kana-Kanji conversion server library + $(prefix)/lib/libsj3core.so.x.x Kana-Kanji conversion server library + $(prefix)/lib/libsj3lib.a Kana-Kanji conversion library + $(prefix)/lib/libsj3lib.so.x.x Kana-Kanji conversion library + $(prefix)/share/examples/sj3/sj3serv.lua.example + Config example file of sj3serv + $(prefix)/share/examples/sj3/freebsd-sj3.sh.in + Config rc file for FreeBSD + +* Source tree + include Header files + + lib/lua lua + + lib/sj3core Kana-Kanji conversion library of server + + lib/sj3rkcv Roma-Kana conversion library of client + + lib/sj3lib Kana-Kanji conversion library of client + + dict Main dictionary(text file) + + src/sj3mkdic Tool for converting main dictionary from text file + to binary file + + src/sj3serv Kana-Kanji conversion server + + src/sj3dic User dictionary utility + src/sj3stat Utility to show status of sj3serv + + src/sj3demo Demonstration program for Kana-Kanji conversion + + doc/man Online manual(Japanese) + doc/doc Operation guide for SJ3 and other documents(Japanese) + +* Tested machine + PC OpenBSD 4.2 + FreeBSD 7.0-current + +* Bug report + If some bugs are found, please send bug report(Japanese or English) + http://code.google.com/p/sj3/issues/list + +* Acknowledgements + + I would like to thank to the following people for compiled and tested: + + Takashi Fujiwara (Fujitsu) + Katsuhisa Yano (Toshiba) + + January 22, 1997 + + Nobuyuki Tanaka + Sony Corporation diff --git a/README.eucJP b/README.eucJP new file mode 100644 index 0000000..e47e4c6 --- /dev/null +++ b/README.eucJP @@ -0,0 +1,72 @@ +・SJ3 とは + SJ3 は、ソニー(株)で開発された日本語入力システムです。 + SJ3 は、仮名漢字変換サーバ(sj3serv)と、 + 仮名漢字変換ライブラリ(sj3lib)で構成されています。 + +・make の手順 + このディレクトリにおいて以下のようにしてください。 + + Makefile を作成する + $ ./configure + + make する + $ make + + インストールする + # make install + + この操作によりインストールされるファイルを以下に示します。 + + $(prefix)/var/sj3/spool/sj3/sj3main.dic + sj3serv が使用するメイン辞書 + $(prefix)/sbin/sj3serv 仮名漢字変換サーバ + $(prefix)/bin/sj3demo デモプログラム + $(prefix)/bin/sj3dic ユーザ辞書ユーティリティ + $(prefix)/bin/sj3mkdic 辞書生成ツール + $(prefix)/bin/sj3stat sj3serv への接続状況表示ユーティリティ + $(prefix)/include/sj3lib.h 仮名漢字変換ライブラリのヘッダファイル + $(prefix)/lib/libsj3core.a 仮名漢字変換サーバのライブラリ + $(prefix)/lib/libsj3core.so.x.x + $(prefix)/lib/libsj3lib.a 仮名漢字変換クライアントのライブラリ + $(prefix)/lib/libsj3lib.so.x.x + $(prefix)/share/examples/sj3/sj3serv.lua.example + sj3serv の設定ファイル + $(prefix)/share/examples/sj3/freebsd-sj3.sh.in + FreeBSDの起動スクリプト + +・ディレクトリ構成 + include ヘッダファイル + + lib/lua lua + + lib/sj3core 仮名漢字変換サーバのライブラリ + + lib/sj3rkcv 端末用仮名漢字変換クライアントのライブラリ + + lib/sj3lib 仮名漢字変換クライアントのライブラリ + + dict メイン辞書のテキストファイル + + src/sj3mkdic 辞書のテキストファイルをバイナリファイルに + 変換するツール + + src/sj3serv 仮名漢字変換サーバ + + src/sj3dic ユーザ辞書ユーティリティ + src/sj3stat sj3serv への接続状況表示ユーティリティ + + src/sj3demo 仮名漢字変換ライブラリのデモプログラム + + doc/man オンラインマニュアル + doc/doc SJ3 日本語入力ガイドとその他ドキュメント + + +・テスト機種 + PC OpenBSD 4.2 + FreeBSD 7.0-current + +・バグレポート + SJ3 のバグを見つけた方は以下のURLに報告していただけると助かります。 + レポートは日本語又は英語でお願いします。 + + http://code.google.com/p/sj3/issues/list diff --git a/config/pkg.m4 b/config/pkg.m4 new file mode 100644 index 0000000..c29b6c0 --- /dev/null +++ b/config/pkg.m4 @@ -0,0 +1,157 @@ +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# +# Copyright 息 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi + +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# +# Similar to PKG_CHECK_MODULES, make sure that the first instance of +# this or PKG_CHECK_MODULES is called, or make sure to call +# PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_ifval([$2], [$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$PKG_CONFIG"; then + if test -n "$$1"; then + pkg_cv_[]$1="$$1" + else + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], + [pkg_failed=yes]) + fi +else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + ifelse([$4], , [AC_MSG_ERROR(dnl +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT +])], + [AC_MSG_RESULT([no]) + $4]) +elif test $pkg_failed = untried; then + ifelse([$4], , [AC_MSG_FAILURE(dnl +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])], + [$4]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + ifelse([$3], , :, [$3]) +fi[]dnl +])# PKG_CHECK_MODULES diff --git a/configure.in b/configure.in new file mode 100644 index 0000000..2e87410 --- /dev/null +++ b/configure.in @@ -0,0 +1,900 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.61) +AC_INIT([sj3], [2.0.1.21], [iwata@quasiquote.org]) +AC_CONFIG_AUX_DIR([config]) +AC_CONFIG_SRCDIR([src/sj3serv/main.c]) +AC_CONFIG_HEADER([config.h]) +AM_INIT_AUTOMAKE([1.9.6]) + +# Enable GNU extensions such as asprintf(3), BSD-originated functions, +# POSIX features and more on glibc (and some other +# implementations). See features.h. This macro should be placed here. +AC_GNU_SOURCE + +# Checks for programs. +AC_PROG_CXX +AC_PROG_CC +AC_PROG_CPP +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET +AC_PROG_RANLIB + +# Checks for libraries. +LIBSJ3CORE_MAJOR_VERSION=2 +LIBSJ3CORE_MINOR_VERSION=0 +LIBSJ3CORE_MICRO_VERSION=121 +LIBSJ3CORE_MICRO_VERSION_SUFFIX= + +LIBSJ3CORE_VERSION=$LIBSJ3CORE_MAJOR_VERSION.$LIBSJ3CORE_MINOR_VERSION.$LIBSJ3CORE_MICRO_VERSION$LIBSJ3CORE_MICRO_VERSION_SUFFIX +LIBSJ3CORE_VERSION_INFO=`expr $LIBSJ3CORE_MAJOR_VERSION + $LIBSJ3CORE_MINOR_VERSION`:$LIBSJ3CORE_MICRO_VERSION:$LIBSJ3CORE_MINOR_VERSION +LIBSJ3CORE_VERSION_NUMBER=`expr $LIBSJ3CORE_MAJOR_VERSION \* 10000 + $LIBSJ3CORE_MINOR_VERSION \* 100 + $LIBSJ3CORE_MICRO_VERSION` + +AC_SUBST(LIBSJ3CORE_MAJOR_VERSION) +AC_SUBST(LIBSJ3CORE_MINOR_VERSION) +AC_SUBST(LIBSJ3CORE_MICRO_VERSION) +AC_SUBST(LIBSJ3CORE_MICRO_VERSION_SUFFIX) +AC_SUBST(LIBSJ3CORE_VERSION) +AC_SUBST(LIBSJ3CORE_VERSION_INFO) +AC_SUBST(LIBSJ3CORE_VERSION_NUMBER) +AC_SUBST(LIBSJ3CORE_VERSION_EXTRA) + +LIBSJ3LIB_MAJOR_VERSION=2 +LIBSJ3LIB_MINOR_VERSION=0 +LIBSJ3LIB_MICRO_VERSION=121 +LIBSJ3LIB_MICRO_VERSION_SUFFIX= + +LIBSJ3LIB_VERSION=$LIBSJ3LIB_MAJOR_VERSION.$LIBSJ3LIB_MINOR_VERSION.$LIBSJ3LIB_MICRO_VERSION$LIBSJ3LIB_MICRO_VERSION_SUFFIX +LIBSJ3LIB_VERSION_INFO=`expr $LIBSJ3LIB_MAJOR_VERSION + $LIBSJ3LIB_MINOR_VERSION`:$LIBSJ3LIB_MICRO_VERSION:$LIBSJ3LIB_MINOR_VERSION +LIBSJ3LIB_VERSION_NUMBER=`expr $LIBSJ3LIB_MAJOR_VERSION \* 10000 + $LIBSJ3LIB_MINOR_VERSION \* 100 + $LIBSJ3LIB_MICRO_VERSION` + +AC_SUBST(LIBSJ3LIB_MAJOR_VERSION) +AC_SUBST(LIBSJ3LIB_MINOR_VERSION) +AC_SUBST(LIBSJ3LIB_MICRO_VERSION) +AC_SUBST(LIBSJ3LIB_MICRO_VERSION_SUFFIX) +AC_SUBST(LIBSJ3LIB_VERSION) +AC_SUBST(LIBSJ3LIB_VERSION_INFO) +AC_SUBST(LIBSJ3LIB_VERSION_NUMBER) +AC_SUBST(LIBSJ3LIB_VERSION_EXTRA) + +LIBSJ3RKCV_MAJOR_VERSION=2 +LIBSJ3RKCV_MINOR_VERSION=0 +LIBSJ3RKCV_MICRO_VERSION=121 +LIBSJ3RKCV_MICRO_VERSION_SUFFIX= + +LIBSJ3RKCV_VERSION=$LIBSJ3RKCV_MAJOR_VERSION.$LIBSJ3RKCV_MINOR_VERSION.$LIBSJ3RKCV_MICRO_VERSION$LIBSJ3RKCV_MICRO_VERSION_SUFFIX +LIBSJ3RKCV_VERSION_INFO=`expr $LIBSJ3RKCV_MAJOR_VERSION + $LIBSJ3RKCV_MINOR_VERSION`:$LIBSJ3RKCV_MICRO_VERSION:$LIBSJ3RKCV_MINOR_VERSION +LIBSJ3RKCV_VERSION_NUMBER=`expr $LIBSJ3RKCV_MAJOR_VERSION \* 10000 + $LIBSJ3RKCV_MINOR_VERSION \* 100 + $LIBSJ3RKCV_MICRO_VERSION` + +AC_SUBST(LIBSJ3RKCV_MAJOR_VERSION) +AC_SUBST(LIBSJ3RKCV_MINOR_VERSION) +AC_SUBST(LIBSJ3RKCV_MICRO_VERSION) +AC_SUBST(LIBSJ3RKCV_MICRO_VERSION_SUFFIX) +AC_SUBST(LIBSJ3RKCV_VERSION) +AC_SUBST(LIBSJ3RKCV_VERSION_INFO) +AC_SUBST(LIBSJ3RKCV_VERSION_NUMBER) +AC_SUBST(LIBSJ3RKCV_VERSION_EXTRA) + + +AC_LIBTOOL_WIN32_DLL +AC_PROG_LIBTOOL + +# Checks for header files. +AC_HEADER_STDC +AC_HEADER_SYS_WAIT +AC_CHECK_HEADERS([ \ + arpa/inet.h \ + fcntl.h \ + getopt.h \ + locale.h \ + netdb.h \ + syslog.h \ + netinet/in.h \ + stdlib.h \ + string.h \ + strings.h \ + sys/file.h \ + sys/ioctl.h \ + sys/param.h \ + sys/socket.h \ + sys/time.h \ + termio.h \ + termios.h \ + unistd.h \ + utmp.h \ + utmpx.h \ + wctype.h \ +]) + +case "$host" in +*-*-aix*) + # Some versions of VAC won't allow macro redefinitions at + # -qlanglevel=ansi, and autoconf 2.60 sometimes insists on using that + # particularly with older versions of vac or xlc. + # It also throws errors about null macro argments, but these are + # not fatal. + AC_MSG_CHECKING(if compiler allows macro redefinitions) + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE([[ +#define testmacro foo +#define testmacro bar +int main(void) { exit(0); } + ]])], + [ AC_MSG_RESULT(yes) ], + [ AC_MSG_RESULT(no) + CC="`echo $CC | sed 's/-qlanglvl\=ansi//g'`" + LD="`echo $LD | sed 's/-qlanglvl\=ansi//g'`" + CFLAGS="`echo $CFLAGS | sed 's/-qlanglvl\=ansi//g'`" + CPPFLAGS="`echo $CPPFLAGS | sed 's/-qlanglvl\=ansi//g'`" + ] + ) + + AC_MSG_CHECKING([how to specify blibpath for linker ($LD)]) + if (test -z "$blibpath"); then + blibpath="/usr/lib:/lib" + fi + saved_LDFLAGS="$LDFLAGS" + if test "$GCC" = "yes"; then + flags="-Wl,-blibpath: -Wl,-rpath, -blibpath:" + else + flags="-blibpath: -Wl,-blibpath: -Wl,-rpath," + fi + for tryflags in $flags ;do + if (test -z "$blibflags"); then + LDFLAGS="$saved_LDFLAGS $tryflags$blibpath" + AC_TRY_LINK([], [], [blibflags=$tryflags]) + fi + done + if (test -z "$blibflags"); then + AC_MSG_RESULT(not found) + AC_MSG_ERROR([*** must be able to specify blibpath on AIX - check config.log]) + else + AC_MSG_RESULT($blibflags) + fi + LDFLAGS="$saved_LDFLAGS" + ;; +*-*-cygwin*) + AC_DEFINE(HAVE_CYGWIN, 1, [Define if you are on Cygwin]) + ;; +*-*-dgux*) + ;; +*-*-darwin*) + AC_MSG_CHECKING(if we have working getaddrinfo) + AC_TRY_RUN([#include +main() { if (NSVersionOfRunTimeLibrary("System") >= (60 << 16)) + exit(0); + else + exit(1); +}], [AC_MSG_RESULT(working)], + [AC_MSG_RESULT(buggy) + AC_DEFINE(BROKEN_GETADDRINFO, 1, [getaddrinfo is broken (if present)])], + [AC_MSG_RESULT(assume it is working)]) + ;; +*-*-dragonfly*) + ;; +*-*-hpux*) + # first we define all of the options common to all HP-UX releases + CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1" + LIBS="$LIBS -lsec" + AC_CHECK_LIB(xnet, t_error, , + AC_MSG_ERROR([*** -lxnet needed on HP-UX - check config.log ***])) + + # next, we define all of the options specific to major releases + case "$host" in + *-*-hpux10*) + if test -z "$GCC"; then + CFLAGS="$CFLAGS -Ae" + fi + ;; + *-*-hpux11*) + ;; + esac + + # lastly, we define options specific to minor releases + case "$host" in + *-*-hpux10.26) + ;; + esac + ;; +*-*-irix5*) + PATH="$PATH:/usr/etc" + AC_DEFINE(BROKEN_INET_NTOA, 1, + [Define if you system's inet_ntoa is busted + (e.g. Irix gcc issue)]) + ;; +*-*-irix6*) + PATH="$PATH:/usr/etc" + AC_DEFINE(BROKEN_INET_NTOA) + ;; +*-*-linux*) + AC_DEFINE(DONT_TRY_OTHER_AF, 1, [Workaround more Linux IPv6 quirks]) + inet6_default_4in6=yes + ;; +mips-sony-bsd|mips-sony-newsos4) + SONY=1 + ;; +*-*-netbsd*) + ;; +*-*-freebsd*) + ;; +*-*-bsdi*) + ;; +*-next-*) + ;; +*-*-openbsd*) + AC_DEFINE(HAVE_ATTRIBUTE__SENTINEL__, 1, [OpenBSD's gcc has sentinel]) + AC_DEFINE(HAVE_ATTRIBUTE__BOUNDED__, 1, [OpenBSD's gcc has bounded]) + ;; +*-*-solaris*) + ;; +*-*-sunos4*) + CPPFLAGS="$CPPFLAGS -DSUNOS4" + ;; +*-ncr-sysv*) + LIBS="$LIBS -lc89" + ;; +*-sni-sysv*) + # /usr/ucblib MUST NOT be searched on ReliantUNIX + AC_CHECK_LIB(dl, dlsym, ,) + # -lresolv needs to be at the end of LIBS or DNS lookups break + AC_CHECK_LIB(resolv, res_query, [ LIBS="$LIBS -lresolv" ]) + # /usr/ucblib/libucb.a no longer needed on ReliantUNIX + # Attention: always take care to bind libsocket and libnsl before libc, + # otherwise you will find lots of "SIOCGPGRP errno 22" on syslog + ;; +# UnixWare 1.x, UnixWare 2.x, and others based on code from Univel. +*-*-sysv4.2*) + ;; +# UnixWare 7.x, OpenUNIX 8 +*-*-sysv5*) + ;; +*-*-sysv*) + ;; +# SCO UNIX and OEM versions of SCO UNIX +*-*-sco3.2v4*) + AC_MSG_ERROR("This Platform is no longer supported.") + ;; +# SCO OpenServer 5.x +*-*-sco3.2v5*) + if test -z "$GCC"; then + CFLAGS="$CFLAGS -belf" + fi + LIBS="$LIBS -lprot -lx -ltinfo -lm" + no_dev_ptmx=1 + MANTYPE=man + TEST_SHELL=ksh + ;; +*-*-unicosmk*) + LDFLAGS="$LDFLAGS" + LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm" + MANTYPE=cat + ;; +*-*-unicosmp*) + LDFLAGS="$LDFLAGS" + LIBS="$LIBS -lgen -lacid -ldb" + MANTYPE=cat + ;; +*-*-unicos*) + LDFLAGS="$LDFLAGS -Wl,-Dmsglevel=334:fatal" + LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm" + MANTYPE=cat + ;; +*-dec-osf*) + AC_DEFINE(BROKEN_GETADDRINFO) + ;; +*-*-nto-qnx*) + ;; +*-*-ultrix*) + AC_DEFINE(BROKEN_GETGROUPS, 1, [getgroups(0,NULL) will return -1]) + AC_DEFINE(HAVE_SYS_SYSLOG_H, 1, [Force use of sys/syslog.h on Ultrix]) + ;; +*-*-lynxos) + CFLAGS="$CFLAGS -D__NO_INCLUDE_WARN__" + ;; +esac + +# Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_TYPE_PID_T +AC_TYPE_SIZE_T +AC_HEADER_TIME +AC_HEADER_STDBOOL +AC_TYPE_UID_T + +AC_CACHE_CHECK([for ssize_t], ac_cv_have_ssize_t, [ + AC_TRY_COMPILE( + [ +#include + ], + [ ssize_t foo; foo = 1235; ], + [ ac_cv_have_ssize_t="yes" ], + [ ac_cv_have_ssize_t="no" ] + ) +]) +if test "x$ac_cv_have_ssize_t" = "xyes" ; then + AC_DEFINE(HAVE_SSIZE_T, 1, [define if you have ssize_t data type]) +fi + +# Checks for library functions. +AC_FUNC_CHOWN +AC_FUNC_ERROR_AT_LINE +AC_FUNC_FORK +AC_PROG_GCC_TRADITIONAL +AC_FUNC_MALLOC +AC_FUNC_MEMCMP +AC_FUNC_REALLOC +AC_FUNC_SELECT_ARGTYPES +AC_FUNC_SETPGRP +AC_TYPE_SIGNAL +AC_FUNC_STAT +AC_FUNC_VPRINTF +AC_FUNC_WAIT3 +AC_CHECK_FUNCS([ \ + alarm \ + arc4random \ + asprintf \ + dup2 \ + endpwent \ + freeaddrinfo \ + ftruncate \ + inet_ntoa \ + getaddrinfo \ + gethostbyaddr \ + gethostbyname \ + gethostname \ + getnameinfo \ + getopt \ + getpeereid \ + memset \ + mkdir \ + select \ + setlocale \ + setproctitle \ + setsid \ + socket \ + snprintf \ + strchr \ + strdup \ + strerror \ + strlcat \ + strlcpy \ + strrchr \ + strstr \ + strtol \ + vsnprintf \ + vasprintf \ +]) + +AC_CHECK_LIBM +AC_SUBST(LIBM) + +# IRIX has a const char return value for gai_strerror() +AC_CHECK_FUNCS(gai_strerror,[ + AC_DEFINE(HAVE_GAI_STRERROR) + AC_TRY_COMPILE([ +#include +#include +#include + +const char *gai_strerror(int);],[ +char *str; + +str = gai_strerror(0);],[ + AC_DEFINE(HAVE_CONST_GAI_STRERROR_PROTO, 1, + [Define if gai_strerror() returns const char *])])]) + +AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_have_struct_sockaddr_storage, [ + AC_TRY_COMPILE( + [ +#include +#include + ], + [ struct sockaddr_storage s; ], + [ ac_cv_have_struct_sockaddr_storage="yes" ], + [ ac_cv_have_struct_sockaddr_storage="no" ] + ) +]) +if test "x$ac_cv_have_struct_sockaddr_storage" = "xyes" ; then + AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1, + [define if you have struct sockaddr_storage data type]) +fi + +AC_CACHE_CHECK([for struct sockaddr_in6], ac_cv_have_struct_sockaddr_in6, [ + AC_TRY_COMPILE( + [ +#include +#include + ], + [ struct sockaddr_in6 s; s.sin6_family = 0; ], + [ ac_cv_have_struct_sockaddr_in6="yes" ], + [ ac_cv_have_struct_sockaddr_in6="no" ] + ) +]) +if test "x$ac_cv_have_struct_sockaddr_in6" = "xyes" ; then + AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6, 1, + [define if you have struct sockaddr_in6 data type]) +fi + +AC_CACHE_CHECK([for struct in6_addr], ac_cv_have_struct_in6_addr, [ + AC_TRY_COMPILE( + [ +#include +#include + ], + [ struct in6_addr s; s.s6_addr[0] = 0; ], + [ ac_cv_have_struct_in6_addr="yes" ], + [ ac_cv_have_struct_in6_addr="no" ] + ) +]) +if test "x$ac_cv_have_struct_in6_addr" = "xyes" ; then + AC_DEFINE(HAVE_STRUCT_IN6_ADDR, 1, + [define if you have struct in6_addr data type]) +fi + +AC_CACHE_CHECK([for struct addrinfo], ac_cv_have_struct_addrinfo, [ + AC_TRY_COMPILE( + [ +#include +#include +#include + ], + [ struct addrinfo s; s.ai_flags = AI_PASSIVE; ], + [ ac_cv_have_struct_addrinfo="yes" ], + [ ac_cv_have_struct_addrinfo="no" ] + ) +]) +if test "x$ac_cv_have_struct_addrinfo" = "xyes" ; then + AC_DEFINE(HAVE_STRUCT_ADDRINFO, 1, + [define if you have struct addrinfo data type]) +fi + + +# Check for broken snprintf +if test "x$ac_cv_func_snprintf" = "xyes" ; then + AC_MSG_CHECKING([whether snprintf correctly terminates long strings]) + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include +int main(void){char b[5];snprintf(b,5,"123456789");exit(b[4]!='\0');} + ]])], + [AC_MSG_RESULT(yes)], + [ + AC_MSG_RESULT(no) + AC_DEFINE(BROKEN_SNPRINTF, 1, + [Define if your snprintf is busted]) + AC_MSG_WARN([****** Your snprintf() function is broken, complain to your vendor]) + ], + [ AC_MSG_WARN([cross compiling: Assuming working snprintf()]) ] + ) +fi + +# If we don't have a working asprintf, then we strongly depend on vsnprintf +# returning the right thing on overflow: the number of characters it tried to +# create (as per SUSv3) +if test "x$ac_cv_func_asprintf" != "xyes" && \ + test "x$ac_cv_func_vsnprintf" = "xyes" ; then + AC_MSG_CHECKING([whether vsnprintf returns correct values on overflow]) + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include +#include +#include + +int x_snprintf(char *str,size_t count,const char *fmt,...) +{ + size_t ret; va_list ap; + va_start(ap, fmt); ret = vsnprintf(str, count, fmt, ap); va_end(ap); + return ret; +} +int main(void) +{ + char x[1]; + exit(x_snprintf(x, 1, "%s %d", "hello", 12345) == 11 ? 0 : 1); +} ]])], + [AC_MSG_RESULT(yes)], + [ + AC_MSG_RESULT(no) + AC_DEFINE(BROKEN_SNPRINTF, 1, + [Define if your snprintf is busted]) + AC_MSG_WARN([****** Your vsnprintf() function is broken, complain to your vendor]) + ], + [ AC_MSG_WARN([cross compiling: Assuming working vsnprintf()]) ] + ) +fi + +AC_CACHE_CHECK([whether va_copy exists], ac_cv_have_va_copy, [ + AC_TRY_LINK( + [#include + va_list x,y;], + [va_copy(x,y);], + [ ac_cv_have_va_copy="yes" ], + [ ac_cv_have_va_copy="no" ] + ) +]) +if test "x$ac_cv_have_va_copy" = "xyes" ; then + AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy exists]) +fi + +AC_CACHE_CHECK([whether __va_copy exists], ac_cv_have___va_copy, [ + AC_TRY_LINK( + [#include + va_list x,y;], + [__va_copy(x,y);], + [ ac_cv_have___va_copy="yes" ], + [ ac_cv_have___va_copy="no" ] + ) +]) +if test "x$ac_cv_have___va_copy" = "xyes" ; then + AC_DEFINE(HAVE___VA_COPY, 1, [Define if __va_copy exists]) +fi + +AC_CACHE_CHECK([whether getopt has optreset support], + ac_cv_have_getopt_optreset, [ + AC_TRY_LINK( + [ +#include + ], + [ extern int optreset; optreset = 0; ], + [ ac_cv_have_getopt_optreset="yes" ], + [ ac_cv_have_getopt_optreset="no" ] + ) +]) +if test "x$ac_cv_have_getopt_optreset" = "xyes" ; then + AC_DEFINE(HAVE_GETOPT_OPTRESET, 1, + [Define if your getopt(3) defines and uses optreset]) +fi + +AC_CHECK_FUNCS(setresuid, [ + dnl Some platorms have setresuid that isn't implemented, test for this + AC_MSG_CHECKING(if setresuid seems to work) + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include +#include +int main(){errno=0; setresuid(0,0,0); if (errno==ENOSYS) exit(1); else exit(0);} + ]])], + [AC_MSG_RESULT(yes)], + [AC_DEFINE(BROKEN_SETRESUID, 1, + [Define if your setresuid() is broken]) + AC_MSG_RESULT(not implemented)], + [AC_MSG_WARN([cross compiling: not checking setresuid])] + ) +]) + +AC_CHECK_FUNCS(setresgid, [ + dnl Some platorms have setresgid that isn't implemented, test for this + AC_MSG_CHECKING(if setresgid seems to work) + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include +#include +int main(){errno=0; setresgid(0,0,0); if (errno==ENOSYS) exit(1); else exit(0);} + ]])], + [AC_MSG_RESULT(yes)], + [AC_DEFINE(BROKEN_SETRESGID, 1, + [Define if your setresgid() is broken]) + AC_MSG_RESULT(not implemented)], + [AC_MSG_WARN([cross compiling: not checking setresuid])] + ) +]) + +AC_CHECK_FUNC(daemon, + [AC_DEFINE(HAVE_DAEMON, 1, [Define if your libraries define daemon()])], + [AC_CHECK_LIB(bsd, daemon, + [LIBS="$LIBS -lbsd"; AC_DEFINE(HAVE_DAEMON)])] +) + +# On systems where [v]snprintf is broken, but is declared in stdio, +# check that the fmt argument is const char * or just char *. +# This is only useful for when BROKEN_SNPRINTF +AC_MSG_CHECKING([whether snprintf can declare const char *fmt]) +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include + int snprintf(char *a, size_t b, const char *c, ...) { return 0; } + int main(void) { snprintf(0, 0, 0); } + ]])], + [AC_MSG_RESULT(yes) + AC_DEFINE(SNPRINTF_CONST, [const], + [Define as const if snprintf() can declare const char *fmt])], + [AC_MSG_RESULT(no) + AC_DEFINE(SNPRINTF_CONST, [/* not const */])]) + +AC_ARG_WITH(libwrap,[ --with-libwrap use tcp wrappers [default=no]], , wrap_ok=no) + +# Check for missing getpeereid (or equiv) support +NO_PEERCHECK="" +if test "x$ac_cv_func_getpeereid" != "xyes" ; then + AC_MSG_CHECKING([whether system supports SO_PEERCRED getsockopt]) + AC_TRY_COMPILE( + [#include + #include ], + [int i = SO_PEERCRED;], + [ AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_SO_PEERCRED, 1, [Have PEERCRED socket option]) + ], + [AC_MSG_RESULT(no) + NO_PEERCHECK=1] + ) +fi + +if test ! -z "$NO_PEERCHECK" ; then + echo "WARNING: the operating system that you are using does not " + echo "appear to support either the getpeereid() API nor the " + echo "SO_PEERCRED getsockopt() option. These facilities are used to " + echo "enforce security checks to prevent unauthorised connections to " + echo "sj3serv. Their absence increases the risk that a malicious " + echo "user can connect to your agent. " + echo "" +fi + +if test "x$ac_cv_func_getaddrinfo" = "xyes" && \ + test "x$check_for_hpux_broken_getaddrinfo" = "x1"; then + AC_MSG_CHECKING(if getaddrinfo seems to work) + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include +#include +#include +#include +#include + +#define TEST_PORT "2222" + +int +main(void) +{ + int err, sock; + struct addrinfo *gai_ai, *ai, hints; + char ntop[NI_MAXHOST], strport[NI_MAXSERV], *name = NULL; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = PF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_PASSIVE; + + err = getaddrinfo(name, TEST_PORT, &hints, &gai_ai); + if (err != 0) { + fprintf(stderr, "getaddrinfo failed (%s)", gai_strerror(err)); + exit(1); + } + + for (ai = gai_ai; ai != NULL; ai = ai->ai_next) { + if (ai->ai_family != AF_INET6) + continue; + + err = getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop, + sizeof(ntop), strport, sizeof(strport), + NI_NUMERICHOST|NI_NUMERICSERV); + + if (err != 0) { + if (err == EAI_SYSTEM) + perror("getnameinfo EAI_SYSTEM"); + else + fprintf(stderr, "getnameinfo failed: %s\n", + gai_strerror(err)); + exit(2); + } + + sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); + if (sock < 0) + perror("socket"); + if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0) { + if (errno == EBADF) + exit(3); + } + } + exit(0); +} + ]])], + [ + AC_MSG_RESULT(yes) + ], + [ + AC_MSG_RESULT(no) + AC_DEFINE(BROKEN_GETADDRINFO) + ], + [ + AC_MSG_RESULT(cross-compiling, assuming yes) + ] + ) +fi + +AC_MSG_CHECKING(enable server for sj3) +AC_ARG_ENABLE(server, + AC_HELP_STRING([--enable-server], + [install server @<:@default=yes@:>@]), + [], + [ + enable_server=yes + ]) +AM_CONDITIONAL(BUILDABLE_SJ3SERV, test x$enable_server = xyes) +AC_MSG_RESULT($enable_server) + +AC_MSG_CHECKING(enable client for sj3) +AC_ARG_ENABLE(client, + AC_HELP_STRING([--enable-client], + [install client @<:@default=yes@:>@]), + [], + [ + enable_client=yes + ]) +AM_CONDITIONAL(BUILDABLE_SJ3CLIENT, test x$enable_client = xyes) +AC_MSG_RESULT($enable_client) + +AC_MSG_CHECKING(enable dictionary for sj3) +AC_ARG_ENABLE(dict, + AC_HELP_STRING([--enable-dict], + [install dictionary @<:@default=yes@:>@]), + [], + [ + if test ! x$enable_server = xyes; then + AC_MSG_ERROR([*** must be set --enable-server]) + fi + enable_dict=yes + ]) +AM_CONDITIONAL(BUILDABLE_SJ3DICT, test x$enable_dict = xyes) +AC_MSG_RESULT($enable_dict) + +AC_MSG_CHECKING(enable demo for sj3) +AC_ARG_ENABLE(demo, + AC_HELP_STRING([--enable-demo], + [install demo @<:@default=yes@:>@]), + [], + [ + if test ! x$enable_client = xyes; then + AC_MSG_ERROR([*** must be set --enable-client]) + fi + enable_demo=yes + ]) +AM_CONDITIONAL(BUILDABLE_SJ3DEMO, test x$enable_demo = xyes) +AC_MSG_RESULT($enable_demo) + +WRAP_LIB= +if test "x$with_libwrap" = "xyes"; then + sj3_save_LIBS="$LIBS" + LIBS="$LIBS -lwrap" + + AC_MSG_CHECKING([for tcp_wrapper library and headers]) + + wrap_ok=no + AC_TRY_LINK( +[#include +#include +#include +int allow_severity = LOG_INFO; +int deny_severity = LOG_WARNING;], +[struct request_info *request; return hosts_access (request);], + [AC_DEFINE(USE_LIBWRAP, 1, [Define if you have the tcp_wrapper library.]) + WRAP_LIB="-lwrap" + wrap_ok=yes], + [LIBS="$LIBS -lnsl" + AC_TRY_LINK( +[#include +#include +#include +int allow_severity = LOG_INFO; +int deny_severity = LOG_WARNING;], +[struct request_info *request; return hosts_access (request);], + + [AC_DEFINE(USE_LIBWRAP, 1, [Define if you have the tcp_wrapper library.]) + WRAP_LIB="-lwrap -lnsl" + wrap_ok=yes])]) + + AC_MSG_RESULT($wrap_ok) + + LIBS="$sj3_save_LIBS" +fi +AC_SUBST(WRAP_LIB) + +AC_ARG_WITH(external-lua, + AS_HELP_STRING([--with-external-lua], [Use external lua library, + @<:@default=no@:>@]), + [ + if test "x$with_external_lua" = "xyes"; then + PKG_CHECK_MODULES(LUA, lua >= 5.1, with_internal_lua="no") + else + with_internal_lua=yes + fi + ], + [ + with_internal_lua=yes + ] +) +AM_CONDITIONAL(SJ3_INTERNAL_LUA, test x$with_internal_lua = xyes) + +AC_ARG_WITH(user, +[ --with-user=uid name of the sj3 user (default=_sj3)], +sj3_user="$withval", sj3_user="_sj3") + +SJ3OWNER=$sj3_user +AC_DEFINE_UNQUOTED(SJ3OWNER, "$sj3_user",[name of the sj3 user]) +AC_SUBST(SJ3OWNER) + +AC_ARG_WITH(group, +[ --with-group=gid name of the sj3 group (default=_sj3)], +sj3_group="$withval", sj3_group="_sj3") + +SJ3GROUP=$sj3_group +AC_DEFINE_UNQUOTED(SJ3GROUP, "$sj3_group",[name of the sj3 group]) +AC_SUBST(SJ3GROUP) + +dnl configure config directory +sj3sysconf_dir=`echo $sysconfdir | grep prefix` + +if test -n "$sj3sysconf_dir"; then + if test "$prefix" = "NONE" + then + sj3sysconf_dir="$ac_default_prefix/etc/sj3" + else + sj3sysconf_dir="$prefix/etc/sj3" + fi +else + sj3sysconf_dir="$sysconfdir/sj3" +fi + +SJ3SYSCONFDIR=$sj3sysconf_dir +AC_SUBST(SJ3SYSCONFDIR) +AC_DEFINE_UNQUOTED(SJ3CONFDIR, "$sj3sysconf_dir", [server config dir]) +AC_DEFINE_UNQUOTED(RUNCMDFILE, "$sj3sysconf_dir/sj3serv.lua", [server config file]) + +dnl configure config directory +sj3var_dir=`echo $localstatedir | grep prefix` + +if test -n "$sj3var_dir"; then + if test "$prefix" = "NONE" + then + sj3var_dir="$ac_default_prefix/var" + else + sj3var_dir="$prefix/var" + fi +else + sj3var_dir="$localstatedir" +fi + +SJ3VARDIR="$sj3var_dir" +AC_SUBST(SJ3VARDIR) +AC_DEFINE_UNQUOTED(CHROOTDIR, "$sj3var_dir/spool/sj3", [chrooted dir]) +AC_DEFINE_UNQUOTED(SOCKETNAME, "$sj3var_dir/run/sj3serv.socket", [socket file]) +AC_DEFINE_UNQUOTED(PIDFILE, "$sj3var_dir/run/sj3serv.pid", [pid file]) + +SJ3DICTDIR="$sj3var_dir/spool/sj3" +AC_SUBST(SJ3DICTDIR) +AC_DEFINE_UNQUOTED(DICTROOTDIR, "$SJ3DICTDIR", [dict root dir]) + +AH_BOTTOM([/* Include os specific header. */ +#include "sj3compat.h"]) + +AC_CONFIG_FILES([ + Makefile + sj3.spec + include/Makefile + include/sj3common/Makefile + include/sj3compat/Makefile + include/sj3core/Makefile + include/sj3lib/Makefile + include/sj3rkcv/Makefile + dict/Makefile + doc/Makefile + doc/man/Makefile + doc/doc/Makefile + lib/Makefile + lib/sj3compat/Makefile + lib/sj3core/Makefile + lib/sj3lib/Makefile + lib/lua/Makefile + lib/lua/doc/Makefile + lib/lua/etc/Makefile + lib/lua/src/Makefile + lib/lua/test/Makefile + lib/sj3lib/sj3lib.pc + lib/sj3rkcv/Makefile + src/Makefile + src/sj3demo/Makefile + src/sj3dic/Makefile + src/sj3mkdic/Makefile + src/sj3serv/Makefile + src/sj3stat/Makefile +]) + +AC_OUTPUT diff --git a/dict/Makefile.am b/dict/Makefile.am new file mode 100644 index 0000000..cdb448f --- /dev/null +++ b/dict/Makefile.am @@ -0,0 +1,19 @@ +if BUILDABLE_SJ3DICT + +EXTRA_DIST = visual.dic + +all: sj3main.dic + +sj3main.dic: visual.dic + $(top_srcdir)/src/sj3mkdic/sj3mkdic ./visual.dic sj3main.dic > Moutput + +install:: + ($(mkdir_p) $(SJ3DICTDIR); \ + $(INSTALL_DATA) sj3main.dic $(SJ3DICTDIR); \ + $(mkdir_p) $(SJ3DICTDIR)/user; \ + chown $(SJ3OWNER) $(SJ3DICTDIR)/user; \ + chgrp $(SJ3GROUP) $(SJ3DICTDIR)/user;) + +CLEANFILES = sj3main.dic Moutput + +endif diff --git a/dict/visual.dic b/dict/visual.dic new file mode 100644 index 0000000..e46cf9c --- /dev/null +++ b/dict/visual.dic @@ -0,0 +1,29803 @@ +## +## Copyright (c) 1991-1994 Sony Corporation +## +## Permission is hereby granted, free of charge, to any person obtaining +## a copy of this software and associated documentation files (the +## "Software"), to deal in the Software without restriction, including +## without limitation the rights to use, copy, modify, merge, publish, +## distribute, sublicense, and/or sell copies of the Software, and to +## permit persons to whom the Software is furnished to do so, subject to +## the following conditions: +## +## The above copyright notice and this permission notice shall be +## included in all copies or substantial portions of the Software. +## +## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +## IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, +## DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +## OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +## THE USE OR OTHER DEALINGS IN THE SOFTWARE. +## +## Except as contained in this notice, the name of Sony Corporation +## shall not be used in advertising or otherwise to promote the sale, use +## or other dealings in this Software without prior written authorization +## from Sony Corporation. +## + +## +## $SonyRCSfile: visual.dic,v $ +## $SonyRevision: 1.2 $ +## $SonyDate: 1995/07/18 02:30:34 $ +## +あ 亜 接頭1: +あ 開 カ五2: +あ 空 カ五4: +あ 明 カ五2: +あ 飽 カ五3: +あ 編 マ五6: +あ あ ラ五1: +あ 在 ラ五3: +あ 有 ラ五4: +あ 会 ワ五8: +あ 合 ワ五7: +あ 逢 ワ五8: +あ 遭 ワ五7: +あ 阿 単漢: +あ 唖 単漢: +あ 娃 単漢: +あーきてくちゃ アーキテクチャ 名1: +あーく アーク 名1: +あーす アース 代4: +あーち アーチ 名1: +あーちすと アーチスト 名1: +あーてぃすと アーティスト 名1: +ああ ああ 代6: +あい 愛 代4:サ五5: +あい 藍 代1: +あい 哀 代1: +あい 相 代1: +あい 姶 単漢: +あい 娃 単漢: +あい 挨 単漢: +あいあん アイアン 名1: +あいいれな 相容れな 形1: +あいお 秋穂 地名: +あいおい 相生 地名: +あいかわ 愛川 苗字: +あいかわ 相川 苗字: +あいかわ 合川 地名: +あいかわらず 相変わらず 副8: +あいがん 哀願 名6: +あいがん 愛玩 名6: +あいきょう 愛敬 名3: +あいきょう 愛嬌 名3: +あいけん 愛犬 名1: +あいこ 愛顧 名3: +あいこ 愛子 名前: +あいこう 愛好 名7: +あいこう 愛甲 苗字: +あいこう 愛甲 地名: +あいこく 愛国 名1: +あいこん アイコン 名1: +あいご 愛護 名6: +あいさい 愛妻 名1: +あいさつ 挨拶 名7: +あいざわ 相沢 苗字: +あいしゅう 哀愁 名1: +あいしょう 愛称 名1: +あいしょう 相性 名1: +あいしょう 愛誦 名6: +あいじ 愛児 名1: +あいじょう 愛情 名1: +あいじん 愛人 名1: +あいす アイス 名1: +あいず 合図 名6: +あいずみ 藍住 地名: +あいせき 哀惜 名6: +あいそ 愛想 名5: +あいぞう 愛憎 名1: +あいたい 相対 名6: +あいだ 間 名11: +あいだ 会田 苗字: +あいだ 相田 苗字: +あいだ 英田 地名: +あいだがら 間柄 代1: +あいち 愛知 地名: +あいちゃく 愛着 名7: +あいちょう 愛鳥 名1: +あいつ あいつ 代1: +あいつ 相次 ガ五3: +あいづ 会津 苗字: +あいづたかだ 会津高田 地名: +あいづばんげ 会津坂下 地名: +あいづわかまつ 会津若松 地名: +あいて 相手 名2: +あいてさき 相手先 名1: +あいてむ アイテム 名1: +あいであ アイデア 名1: +あいでぃあ アイディア 名1: +あいでんてぃてぃー アイデンティティー 名1: +あいとう 哀悼 名7: +あいとう 愛東 地名: +あいどく 愛読 名7: +あいどりんぐ アイドリング 名6: +あいどる アイドル 名1: +あいにく あいにく 形動6: +あいにく 生憎 形動6: +あいぬ アイヌ 名1: +あいの 愛野 地名: +あいはら 相原 苗字: +あいびーえむ アイビーエム 企業: +あいびき 逢引 代4: +あいぶ 愛撫 名6: +あいべつ 愛別 地名: +あいま 合間 名1: +あいまい 曖昧 名8: +あいまい あいまい 名8: +あいみ 会見 地名: +あいよう 愛用 名7: +あいら 姶良 地名: +あいら 吾平 地名: +あいらく 哀楽 名1: +あいらし 愛らし 形3: +あいろ 隘路 名1: +あいろん アイロン 名1: +あうと アウト 代4: +あえ あえ ガ五3:一段1: +あえ 喘 ガ五3: +あえ 和え 一段1: +あえて 敢えて 副1: +あえて あえて 副1: +あえな 敢な 形1: +あえろふろーと アエロフロート 名1: +あえん 亜鉛 名1: +あお 青 代1:形11: +あお 仰 ガ五7: +あお 扇 ガ五7: +あお 煽 ラ五7: +あお 蒼 形8: +あお 碧 単漢: +あおあお 青々 副3: +あおい 葵 代1: +あおがき 青垣 地名: +あおがしま 青ヶ島 地名: +あおき 青木 苗字: +あおざめ 青ざめ 一段1: +あおしま 青島 苗字: +あおしま 青島 地名: +あおじろ 青白 形2: +あおぞら 青空 名1: +あおた 青田 苗字: +あおぬま 青沼 苗字: +あおの 青野 苗字: +あおば 青葉 名1: +あおもの 青物 名1: +あおもり 青森 地名: +あおや 青谷 地名: +あおやぎ 青柳 苗字: +あおやま 青山 苗字: +あおやま 青山 地名: +あか 赤 代1:形11: +あか 垢 代1: +あか 明か サ五1: +あか 飽か サ五1: +あかい 赤井 苗字: +あかいがわ 赤井川 地名: +あかいけ 赤池 苗字: +あかいわ 赤磐 地名: +あかうんと アカウント 代1: +あかおか 赤岡 地名: +あかがわ 赤川 苗字: +あかがわ 赤川 地名: +あかぎ 赤城 苗字: +あかぎ 赤城 地名: +あかぎ 赤木 苗字: +あかご 赤子 代1: +あかさか 赤坂 地名: +あかさか 赤坂 苗字: +あかさき 赤碕 地名: +あかざわ 赤沢 苗字: +あかし 証 代1: +あかし 明石 苗字: +あかし 明石 地名: +あかしお 赤潮 名1: +あかしな 明科 地名: +あかじ 赤字 名1: +あかつか 赤塚 苗字: +あかつき 暁 代1: +あかつき あかつき 代1: +あかどまり 赤泊 地名: +あかぬけ 垢抜け 代4:一段1: +あかね 茜 名1:名前: +あかばね 赤羽 苗字: +あかばね 赤羽 地名: +あかばね 赤羽根 地名: +あかびら 赤平 地名: +あかぼう 赤帽 名1: +あかぼり 赤堀 苗字: +あかま 赤間 苗字: +あかまつ 赤松 苗字: +あから 赤ら マ五1: +あからさま あからさま 形動1: +あかり 灯り 名1: +あかり 灯 名1: +あかり 明り 名1: +あかる 明る 形6:マ五3: +あかん 阿寒 地名: +あかんぼう 赤ん坊 代1: +あが あが カ五7:ラ五8: +あが 上が ラ五8: +あが 挙が ラ五1: +あが 揚が ラ五1: +あがつま 我妻 苗字: +あがつま 吾妻 地名: +あがる 上ル 地名: +あがわ 吾川 地名: +あき 秋 代1:接頭1: +あき 飽き 一段3: +あき 亜紀 名前: +あき 安岐 地名: +あき 安芸 地名: +あき 明 単漢: +あき 穐 単漢: +あきう 秋保 地名: +あきお 昭夫 名前: +あきお 昭男 名前: +あきお 昭雄 名前: +あきお 明男 名前: +あきお 明夫 名前: +あきお 明雄 名前: +あきお 秋男 名前: +あきお 秋夫 名前: +あきお 秋雄 名前: +あきお 章夫 名前: +あきがわ 秋川 地名: +あきこ 晃子 名前: +あきこ 昭子 名前: +あきこ 章子 名前: +あきこ 明子 名前: +あきこ 晶子 名前: +あきこ 顕子 名前: +あきさめ 秋雨 名1: +あきしま 昭島 地名: +あきた 秋田 苗字: +あきた 秋田 地名: +あきた 飽田 地名: +あきち 空き地 名1: +あきつ 安芸津 地名: +あきな 明菜 名前: +あきな 商 ワ五7: +あきない 商い サ変: +あきはばら 秋葉原 地名: +あきば 秋葉 苗字: +あきばれ 秋晴れ 代1: +あきひこ 昭彦 名前: +あきひこ 明彦 名前: +あきひと 明仁 名前: +あきひろ 明宏 名前: +あきひろ 明弘 名前: +あきもと 秋本 苗字: +あきもと 秋元 苗字: +あきや 空き家 名1: +あきやま 秋山 苗字: +あきら 晃 名前: +あきら 彰 名前: +あきら 昭 名前: +あきら 晶 名前: +あきら 章 名前: +あきら 明 名前: +あきら 朗 名前: +あきら 旭 名前: +あきらか 明らか 形動1: +あきらめ あきらめ 一段3: +あきらめ 諦め 一段3: +あきれ 呆れ 一段1: +あく 悪 代1:接頭1: +あく 握 代1: +あく 渥 代1: +あくしつ 悪質 名8: +あくしでんと アクシデント 名1: +あくしゅ 握手 名6: +あくしゅう 悪臭 名1: +あくしょん アクション 名1: +あくじ 悪事 名1: +あくせい 悪性 名8: +あくせさりー アクセサリー 名1: +あくせす アクセス 名6: +あくせぷと アクセプト 名1: +あくせる アクセル 名1: +あくせんと アクセント 名1: +あくた 芥 代1: +あくたい 悪態 名1: +あくたがわ 芥川 苗字: +あくつ 阿久津 苗字: +あくてぃびてぃ アクティビティ 名1: +あくてぃぶ アクティブ 名8: +あくとく 悪徳 名8: +あくにん 悪人 名1: +あくね 阿久根 地名: +あくび あくび 代4: +あくびょう 悪病 名1: +あくま 悪魔 名1: +あくまで あくまで 副6: +あくみ 飽海 地名: +あくみょう 悪名 名1: +あくむ 悪夢 名1: +あくよう 悪用 名6: +あくりょく 握力 名1: +あくりる アクリル 名1: +あぐ 倦 マ五1: +あぐい 阿久比 地名: +あぐに 粟国 地名: +あけ 開け 一段2: +あけ 空け 一段1: +あけ 明け 一段3: +あけ 朱 単漢: +あけがた 明け方 代1: +あけち 明智 苗字: +あけの 明野 地名: +あけはな 開け放 サ五7:タ五5: +あけはま 明浜 地名: +あけぼの 曙 代1: +あけわた 明け渡 サ五7:ラ五1: +あげ あげ 一段2: +あげ 上げ 接尾1:一段2: +あげ 揚げ 接尾1:一段2: +あげ 挙げ 一段2: +あげ 安芸 地名: +あげあし 揚げ足 代1: +あげお 上尾 地名: +あげく 挙げ句 代1: +あげぞこ 上げ底 代1: +あげつら 論 ワ五3: +あげまつ 上松 地名: +あこーすてぃっく アコースティック 代5: +あこう 赤穂 地名: +あこお 赤穂 地名: +あこがれ 憧れ 一段3: +あこがれ あこがれ 一段3: +あご 顎 代1: +あご 阿児 地名: +あさ 浅 形8: +あさ 漁 ラ五7: +あさ 朝 名11: +あさ 麻 名1: +あさ 安佐 地名: +あさ 厚狭 地名: +あさい 浅井 苗字: +あさいち 朝市 代1: +あさお 麻生 地名: +あさか 浅香 苗字: +あさか 浅香 地名: +あさか 朝霞 地名: +あさかわ 浅川 苗字: +あさかわ 浅川 地名: +あさが 浅賀 苗字: +あさがた 朝方 代6: +あさきた 安佐北 地名: +あさくさ 浅草 地名: +あさくち 浅口 地名: +あさくら 朝倉 苗字: +あさくら 朝倉 地名: +あさぐろ 浅黒 形2: +あさこ 朝来 地名: +あさしな 浅科 地名: +あさじ 朝地 地名: +あさだ 浅田 苗字: +あさだ 麻田 苗字: +あさって あさって 代6: +あさって 明後日 代6: +あさぬま 浅沼 苗字: +あさの 浅野 苗字: +あさはら 浅原 苗字: +あさば 浅羽 地名: +あさばん 朝晩 代6: +あさひ 朝日 名1: +あさひ 旭 代1: +あさひかせい 旭化成 企業: +あさひかわ 旭川 地名: +あさひがわ 旭川 地名: +あさみ 浅見 苗字: +あさみなみ 安佐南 地名: +あさめし 朝飯 代1: +あさやけ 朝焼け 代1: +あさゆう 朝夕 代6: +あさり 鯏 単漢: +あざ 字 代1: +あざい 浅井 地名: +あざな 糾 ワ五5: +あざぶ 麻布 地名: +あざむ 欺 カ五7: +あざやか 鮮やか 形動4: +あし 足 代1: +あし 脚 代1: +あし 葦 代1: +あし 芦 単漢: +あしあと 足跡 代1: +あしお 足尾 地名: +あしおと 足音 代1: +あしかが 足利 苗字: +あしかが 足利 地名: +あしかけ 足掛け 副1: +あしからず あしからず 副1: +あしかり 芦刈 地名: +あしがかり 足掛かり 名1: +あしがかり 足掛り 名1: +あしがため 足固め 代1: +あしがら 足柄 地名: +あしがらかみ 足柄上 地名: +あしがらしも 足柄下 地名: +あしがわ 芦川 地名: +あしきた 芦北 地名: +あしくび 足首 代1: +あしこし 足腰 代1: +あしざわ 芦沢 苗字: +あしすたんと アシスタント 名1: +あしずり 足摺 サ変: +あしずり 足摺 地名: +あした 明日 代6: +あしどり 足取り 代1: +あしなみ 足並み 代1: +あしび 馬酔木 代1: +あしべ 芦辺 地名: +あしべつ 芦別 地名: +あしもと 足元 名2: +あしや 芦屋 苗字: +あしや 芦屋 地名: +あしやす 芦安 地名: +あしゅら 阿修羅 代1: +あしょろ 足寄 地名: +あしよろ 足寄 地名: +あしろ 安代 地名: +あしわだ 足和田 地名: +あじ 味 代1: +あじ 鯵 代1: +あじ 鰺 代1: +あじ 庵治 地名: +あじあ アジア 名1: +あじがさわ 鯵ヶ沢 地名: +あじけな 味気な 形5: +あじさい 紫陽花 名1: +あじす 阿知須 地名: +あじつけ 味付け 一段3: +あじな 芦品 地名: +あじみ 味見 名5: +あじむ 安心院 地名: +あじわ 味わ ワ五8: +あす 明日 代6: +あすか 明日香 地名: +あすか 明日香 名前: +あすか 飛鳥 地名: +あすか 飛鳥 名前: +あすきー アスキー 企業: +あすけ 足助 地名: +あすぱらがす アスパラガス 名1: +あすぺくと アスペクト 名1: +あすわ 足羽 地名: +あずか 預か ラ五8: +あずか 与 ラ五3: +あずか 預 ラ五8: +あずき 小豆 代1: +あずき あずき 代1: +あずけ 預け 一段4: +あずけいれ 預け入れ 一段4: +あずさ 梓 苗字:名前: +あずさがわ 梓川 地名: +あずま 東 苗字: +あずみ 安曇 地名: +あせ 汗 代1: +あせ 焦 ラ五3: +あせ 褪せ 一段1: +あせんぶら アセンブラ 名1: +あせんぶり アセンブリ 名1: +あせんぶる アセンブル 名6: +あぜ 畦 代1: +あぜ 畔 代1: +あそ 遊 バ五8: +あそ 阿蘇 地名: +あそ 安蘇 地名: +あそ 阿曽 苗字: +あそう 麻生 苗字: +あそこ あそこ 代1: +あそしえーしょん アソシエーション 名1: +あた あた ラ五3: +あた 当た ラ五7: +あた 当 ラ五7: +あたい 値 代4: +あたい 価 代1: +あたい 値い 代4: +あたえ 与え 一段2: +あたかも あたかも 副1: +あたたか 温か 形8:形動1: +あたたか 暖か 形8:形動1: +あたたま 温ま ラ五5: +あたたま 暖ま ラ五5: +あたため 温め 一段2: +あたため 暖め 一段2: +あたっく アタック 代4: +あたっちめんと アタッチメント 名1: +あたま 頭 代1: +あたまかず 頭数 代1: +あたまきん 頭金 名1: +あたまごなし 頭ごなし 名1: +あたみ 熱海 地名: +あたらし 新し 形8: +あたり 辺り 代1: +あたりまえ 当たり前 代5: +あたりまえ 当たりまえ 代5: +あたりまえ 当り前 代5: +あたる 中 単漢: +あだ 仇 代1: +あだ 徒 代1: +あだち 足立 苗字: +あだち 足立 地名: +あだち 安達 苗字: +あだち 安達 地名: +あだぷた アダプタ 名1: +あち 阿智 地名: +あちこち あちこち 代1: +あちら あちら 代1: +あっか 悪化 代4: +あっかん 圧巻 名1: +あっけし 厚岸 地名: +あっけらかん アッケラカン 副2: +あっさぶ 厚沢部 地名: +あっさり あっさり 副9: +あっしゅく 圧縮 名6: +あっしょう 圧勝 名6: +あっせん 斡旋 名7: +あっち あっち 代1: +あっちゃく 圧着 名6: +あっと あっと 副1: +あっとう 圧倒 名6: +あっぱく 圧迫 名6: +あっぴ 安比 地名: +あっぷ アップ 名6: +あっぷる アップル 名1: +あつ 厚 形11: +あつ 熱 形10: +あつ 暑 形10: +あつ 篤 形2: +あつ 圧 接尾1: +あつえん 圧延 名6: +あつか 扱 ワ五8: +あつかいだか 扱い高 名1: +あつかまし 厚かまし 形3: +あつがみ 厚紙 名1: +あつぎ 厚木 地名: +あつぎ 厚着 代4: +あつくるし 暑苦し 形5: +あつこ 敦子 名前: +あつし 厚 名前: +あつし 淳 名前: +あつし 篤 名前: +あつし 敦 名前: +あつしおかのう 熱塩加納 地名: +あつじ 厚地 名1: +あつた 厚田 地名: +あつた 熱田 苗字: +あつた 熱田 地名: +あつで 厚手 代1: +あつま 集ま ラ五8: +あつま 厚真 地名: +あつみ 渥美 地名: +あつみ 渥美 名前: +あつみ 温海 地名: +あつめ 集め 一段4: +あつりょく 圧力 名1: +あづち 安土 地名: +あづま 吾妻 苗字: +あて 宛 接尾1: +あて 宛て 一段3: +あて 充て 一段1: +あて 当て 接尾1:一段2: +あて あて 一段3: +あてが あてが ワ五5: +あてさき 宛先 代1: +あてつ 阿哲 地名: +あてつけ 当てつけ 一段3: +あてな 宛名 代1: +あてね アテネ 地名: +あてはま 当てはま ラ五1: +あてはめ 当てはめ 一段3: +あと あと 代1: +あと 後 代1: +あと 痕 代1: +あと 跡 代1: +あと 蹟 単漢: +あとあと 後々 代6: +あとう 阿東 地名: +あとおし 後押し 代4: +あとかたづけ 後かたづけ 代3: +あとさき 後先 代1: +あとしまつ 後始末 代4: +あとち 跡地 名1: +あとつぎ 跡継ぎ 代1: +あとばらい 後払い 代1: +あとみっく アトミック 名8: +あとむ アトム 名1: +あともどり 後戻り 代4: +あとりえ アトリエ 名1: +あとりびゅーと アトリビュート 代1: +あどがわ 安曇川 地名: +あどけな あどけな 形3: +あどばいす アドバイス 名6: +あどほっく アドホック 代5: +あどれす アドレス 名1: +あどれなりん アドレナリン 名1: +あな 穴 代1: +あな 孔 代1: +あな 坑 単漢: +あなうめ 穴埋め 代4: +あなうんさー アナウンサー 名1: +あなうんす アナウンス 名6: +あながち あながち 副1: +あなた あなた 代1: +あなた 貴方 代1: +あなど 侮 ラ五7: +あなぶき 穴吹 苗字: +あなみず 穴水 地名: +あならいざ アナライザ 代1: +あなりすと アナリスト 名1: +あなろぐ アナログ 名1: +あなろじー アナロジー 名1: +あなん 阿南 苗字: +あなん 阿南 地名: +あに 兄 名1: +あに 阿仁 地名: +あにき 兄貴 代1: +あにめ アニメ 名1: +あにめーしょん アニメーション 名1: +あね 姉 代2: +あね 姐 代2: +あねったい 亜熱帯 名1: +あの あの 連体: +あのう 安濃 地名: +あのよう あのよう 形動1: +あのよう あの様 形動1: +あば 暴 カ五5: +あば 阿波 地名: +あばきだ 暴き出 サ五5: +あばしり 網走 地名: +あばらぼね 肋骨 名1: +あばれ 暴れ 一段1: +あぱーと アパート 名1: +あぱれる アパレル 名1: +あび 浴び 一段2: +あびきょうかん 阿鼻叫喚 名1: +あびこ 我孫子 苗字: +あびこ 我孫子 地名: +あびせ 浴びせ 一段1: +あぴーる アピール 名6: +あふがにすたん アフガニスタン 地名: +あふりか アフリカ 地名: +あふれ あふれ 一段4: +あふれ 溢れ 一段4: +あぶ あぶ ラ五7: +あぶ 虻 名1: +あぶ 阿武 地名: +あぶすとらくと アブストラクト 名1: +あぶた 虻田 地名: +あぶな 危な 形5: +あぶな あぶな 形5: +あぶみ 鐙 代1: +あぶら 油 代1: +あぶら 脂 代1: +あぶらえ 油絵 名1: +あぷりけーしょん アプリケーション 名1: +あぷろーち アプローチ 名6: +あべ 阿部 苗字: +あべ 安部 苗字: +あべっく アベック 名1: +あべの 阿倍野 地名: +あべれーじ アベレージ 名1: +あほ 阿呆 代5: +あほう 阿呆 代5: +あほうどり 信天翁 代1: +あま 甘 形8:接頭1: +あま 余 サ五1:ラ五4: +あま 海女 代2: +あま 尼 代1: +あま アマ 代1: +あま 海士 地名: +あま 海部 地名: +あまえ 甘え 一段4: +あまがさ 雨傘 代1: +あまがさ 雨がさ 代1 +あまがさ 雨ガサ 代1: +あまがさき 尼崎 地名: +あまがせ 天瀬 地名: +あまぎ 甘木 地名: +あまぎ 天城 地名: +あまぎゆがしま 天城湯ヶ島 地名: +あまくさ 天草 地名: +あまくち 甘口 代5: +あまぐも 雨雲 名1: +あまた あまた 副7: +あまた 天田 地名: +あまだれ 雨だれ 代1: +あまちゅあ アマチュア 名1: +あまつこみなと 天津小湊 地名: +あまど 雨戸 代1: +あまぬま 天沼 苗字: +あまの 天野 苗字: +あまのじゃく 天の邪鬼 代1: +あまみ 奄美 地名: +あまみず 雨水 代1: +あまみや 雨宮 苗字: +あまもり 雨漏り 代4: +あまやか 甘やか サ五7: +あまり あまり 副7: +あまるめ 余目 地名: +あまん 甘ん ザ変: +あみ 網 名1: +あみ 阿見 地名: +あみだな 網棚 代1: +あみど アミド 代1: +あみの 網野 苗字: +あみのさん アミノ酸 名1: +あめ 雨 代1: +あめ 飴 代1: +あめ あめ 代1: +あめあがり 雨上がり 代1: +あめふり 雨降り 代1: +あめふり 雨ふり 代1: +あめみや 雨宮 苗字: +あめよこ アメ横 地名: +あめりか アメリカ 地名: +あめりかん アメリカン 名1: +あや 絢 代1: +あや 綾 代1: +あや 彩 単漢: +あや 文 単漢: +あやう 危う 形3: +あやう あやう 形3: +あやうた 綾歌 地名: +あやかみ 綾上 地名: +あやこ 文子 名前: +あやこ 綾子 名前: +あやし 怪し 形5:マ五1: +あやせ 綾瀬 苗字: +あやせ 綾瀬 地名: +あやつ 操 ラ五7: +あやふや あやふや 形動9: +あやぶ 危ぶ マ五5: +あやべ 綾部 苗字: +あやべ 綾部 地名: +あやま 過 タ五3: +あやま 誤 ラ五8: +あやま 謝 ラ五8: +あやま 阿山 地名: +あゆ 歩 マ五7: +あゆ 鮎 代1: +あゆみよ 歩み寄 ラ五7: +あら 荒 形2: +あら 洗 ワ五8: +あら 粗 形2: +あらー アラー 名1: +あらあらし 荒々し 形3: +あらい 荒井 苗字: +あらい 新井 苗字: +あらい 新井 地名: +あらい 新居 苗字: +あらいおと 洗い落と サ五7: +あらいなが 洗い流 サ五5: +あらお 荒尾 地名: +あらかじめ あらかじめ 副1: +あらかじめ 予め 副1: +あらかると アラカルト 名1: +あらかわ 荒川 苗字: +あらかわ 荒川 地名: +あらき 荒木 苗字: +あらけずり 荒削り 代4:形動4: +あらし 嵐 代1: +あらしやま 嵐山 地名: +あらすか アラスカ 地名: +あらすじ 粗筋 名1: +あらそ 争 ワ五7: +あらた 新た 形動1: +あらたま 改ま ラ五6: +あらため 改め 一段2: +あらっぽ 荒っぽ 形2: +あらて 新手 代1: +あらなみ 荒波 代1: +あらびあ アラビア 地名: +あらまき 新巻 代1: +あらゆる あらゆる 連体: +あらわ あらわ 形動1:サ五5: +あらわ 表 サ五5: +あらわ 現 サ五5: +あらわ 著 サ五5: +あらわれ 表れ 一段4: +あらわれ 現れ 一段4: +あらわれ 現われ 一段4: +あり 蟻 代1: +ありあけ 有明 地名: +ありあけかい 有明海 地名: +ありあり ありあり 副8: +ありあわせ 有り合わせ 一段3: +ありえ 有家 地名: +ありかわ 有川 苗字: +ありかわ 有川 地名: +ありが 有賀 苗字: +ありがた ありがた 形5: +ありがた 有難 形8: +ありがたみ ありがた味 代1: +ありがとう ありがとう 挨拶: +ありがとう 有難う 挨拶: +ありさま 有り様 代1: +ありさわ 有沢 苗字: +ありぞな アリゾナ 地名: +ありた 有田 苗字: +ありた 有田 地名: +ありだ 有田 地名: +ありふれ ありふれ 一段1: +ありま 有馬 苗字: +ありま 有馬 地名: +ありゅう 亜流 名1: +ありよし 有吉 苗字: +ある 歩 カ五8: +ある 或 単漢: +あるいは あるいは 接続: +あるいは 或は 接続: +あるかり アルカリ 名1: +あるきめです アルキメデス 名1: +あるこーる アルコール 名1: +あるごりずむ アルゴリズム 名1: +あるごん アルゴン 名1: +あるじ 主 代1: +あるぜんちん アルゼンチン 地名: +あるばいと アルバイト 名6: +あるばむ アルバム 名1: +あるふぁ α 代1: +あるふぁべっと アルファベット 名1: +あるぷす アルプス 地名: +あるぺん アルペン 名1: +あるまいと アルマイト 名1: +あるみ アルミ 名1: +あるみにうむ アルミニウム 名1: +あれ あれ 代1: +あれ 荒れ 一段3: +あれい アレイ 名1: +あれるぎー アレルギー 名1: +あれんじ アレンジ 名6: +あろけーしょん アロケーション 名1: +あろけーと アロケート 名6: +あわ 粟 代1: +あわ 阿波 地名: +あわ 安房 地名: +あわ 淡 形2: +あわ 泡 代1: +あわさ 合わさ ラ五1: +あわじ 淡路 地名: +あわじしま 淡路島 地名: +あわせ 合わせ 代1: +あわせ 袷 代1: +あわせて 併せて 接続: +あわだ 泡立 タ五3: +あわて 慌て 一段2: +あわて あわて 一段2: +あわの 粟野 苗字: +あわび 鮑 代1: +あわや あわや 副1: +あわゆき 淡雪 代1: +あわら 芦原 地名: +あわれ 哀れ 代5:マ五3: +あわれ 憐れ マ五3: +あわれ あわれ マ五3: +あん 案 代1:助数:ザ変: +あん 庵 代1: +あん 按 ザ変: +あん 暗 単漢: +あん 安 単漢: +あん 闇 単漢: +あん 鞍 単漢: +あん 杏 単漢: +あんい 安易 名8: +あんうん 暗雲 名1: +あんか 安価 代5: +あんがい 案外 形動1: +あんき 暗記 名6: +あんけーと アンケート 名6: +あんこーる アンコール 代4: +あんこう 鮟鱇 代1: +あんこく 暗黒 名8: +あんごう 暗号 名4: +あんさつ 暗殺 名6: +あんざい 安斎 苗字: +あんざい 安西 苗字: +あんざん 暗算 名6: +あんしつ 暗室 名1: +あんしょう 暗証 名1: +あんしょう 暗礁 名1: +あんしん 安心 名7:形動8: +あんじ 暗示 名6: +あんじゅう 安住 名6: +あんじょう 安城 苗字: +あんじょう 安城 地名: +あんず 杏 名1: +あんず あんず 代1: +あんせい 安静 名8: +あんぜん 安全 名8: +あんそく 安息 名1: +あんたい 安泰 名10: +あんだー アンダー 名1: +あんち 安置 名6: +あんちゅうもさく 暗中模索 代4: +あんちょく 安直 形動4: +あんてい 安定 名6: +あんてな アンテナ 名1: +あんど 安堵 名7: +あんどう 安東 苗字: +あんどう 安藤 苗字: +あんな あんな 連体: +あんない 案内 名7: +あんなか 安中 地名: +あんに 暗に 副1: +あんのじょう 案の定 副8: +あんばらんす アンバランス 名8: +あんぱち 安八 地名: +あんぴ 安否 名3: +あんぺあ アンペア 助数2: +あんぽ 安保 名1: +あんまり あんまり 形動1: +あんみん 安眠 名6: +あんもく 暗黙 名8: +あんもにあ アンモニア 名1: +あんらく 安楽 名8: +い い 一段1:ラ五7:ワ五7:カ五7: +い 行 カ五7: +い 往 カ五1: +い 逝 カ五1: +い 忌 マ五5: +い 入 ラ五3: +い 要 ラ五3: +い 煎 ラ五3: +い 言 ワ五7: +い 云 ワ五7: +い 居 一段1: +い 射 一段1: +い 鋳 一段1: +い 委 接尾1: +い 医 接尾1: +い 胃 代1: +い 意 代1: +い 井 代1: +い 衣 代1: +い 伊 代1: +い 猪 代1: +い 位 助数: +い 異 代1: +い 夷 代1: +い 威 代1: +い 緯 代1: +い 偉 代1: +い 以 単漢: +い 依 単漢: +い 囲 単漢: +い 尉 単漢: +い 惟 単漢: +い 慰 単漢: +い 易 単漢: +い 椅 単漢: +い 為 単漢: +い 畏 単漢: +い 移 単漢: +い 維 単漢: +い 萎 単漢: +い 謂 単漢: +い 違 単漢: +い 遺 単漢: +い 亥 単漢: +い 蔚 単漢: +い 莞 単漢: +い 詑 単漢: +い 斐 単漢: +い 鮪 単漢: +いーさ イーサ 代1: +いーさねっと イーサネット 代1: +いあつ 威圧 名6: +いあん 慰安 名6: +いい 飯 単漢: +いいあ 言い合 ワ五7: +いいあらそ 言い争 ワ五7: +いいあらわ 言い表 サ五5: +いいえ いいえ 代1: +いいおか 飯岡 苗字: +いいおか 飯岡 地名: +いいかえ 言い換え 一段3: +いいかえ 言い返 サ五7: +いいかえ 言い替え 一段3: +いいかげん いい加減 形動4: +いいかね 言い兼ね 一段1: +いいかわ 言い交わ サ五7: +いいき 言い切 ラ五7: +いいし 飯石 地名: +いいじま 飯島 苗字: +いいすて 言い捨て 一段1: +いいそこな 言い損な ワ五3: +いいたか 飯高 苗字: +いいたか 飯高 地名: +いいたがわ 飯田川 地名: +いいたて 飯館 地名: +いいだ 飯田 苗字: +いいだ 飯田 地名: +いいだ 言い出 サ五7: +いいつけ 言いつけ 一段4: +いいづか 飯塚 苗字: +いいづか 飯塚 地名: +いいで 飯豊 地名: +いいなお 言い直 サ五7: +いいなずけ 許嫁 代1: +いいなん 飯南 地名: +いいぬま 飯沼 苗字: +いいの 飯野 名1: +いいのがれ 言い逃れ 一段3: +いいは 言い張 ラ五5: +いいふら 言い触ら サ五3: +いいぶん 言い分 名1: +いいむら 飯村 苗字: +いいもり 飯森 苗字: +いいもり 飯盛 地名: +いいやま 飯山 苗字: +いいやま 飯山 地名: +いいわけ 言い訳 代4: +いいわた 言い渡 サ五7: +いいん 委員 名1: +いいん 医院 名1: +いいんかい 委員会 名1: +いえ 家 名2: +いえ 癒え 一段1: +いえ 伊江 地名: +いえがら 家柄 名2: +いえしま 家島 地名: +いえじ 家路 名1: +いえす イエス 名1: +いえで 家出 名6: +いえもと 家元 名2: +いえろー イエロー 名1: +いおう 硫黄 名1: +いおうじま 伊王島 地名: +いおり 庵 代1: +いおん イオン 名1: +いか 活か サ五5: +いか 生か サ五5: +いか 怒 ラ五8: +いか 以下 接尾9:助数2: +いか 医科 名1: +いか 烏賊 代1: +いか 異化 代4: +いか 伊香 地名: +いかが 如何 副1:形動1: +いかが いかが 副1:形動1: +いかく 威嚇 名6: +いかさま いかさま 代1: +いかざき 五十崎 地名: +いかた 伊方 地名: +いかだ 筏 代1: +いかなる いかなる 連体: +いかなる 如何なる 連体: +いかに いかに 副6: +いかほ 伊香保 地名: +いかり 碇 代1: +いかり 錨 代1: +いかりがせき 碇ヶ関 地名: +いかわ 井川 苗字: +いかわ 井川 地名: +いかん 遺憾 名8: +いかん 移管 名6: +いかん 如何 名1: +いが 伊賀 苗字: +いが 伊賀 地名: +いがい 以外 接尾9:助数2: +いがい 意外 名8: +いがい 遺骸 名1: +いがく 医学 名4: +いがみあ いがみ合 ワ五7: +いがらし 五十嵐 苗字: +いがわ 井川 苗字: +いがん 依願 名1: +いき 生き 一段3: +いき 活き 一段3: +いき 意気 名1: +いき 息 代3: +いき 域 接尾1: +いき 遺棄 代4: +いき 粋 代5: +いき 壱岐 地名: +いきいき 生き生き 副3: +いきいき いきいき 副3: +いきいき イキイキ 副3: +いきうめ 生き埋め 代1: +いきおい 勢い 代6: +いきおいこ 勢い込 マ五1: +いきかえ 生き返 ラ五7: +いきがい 生きがい 代1: +いきき 行き来 代4: +いきぎれ 息切れ 代4: +いきぐるし 息苦し 形5: +いきご 意気込 マ五7: +いきさき 行き先 代1: +いきさつ いきさつ 代1: +いきしゅ 異機種 代1: +いきすぎ 行き過ぎ 一段3: +いきつき 生月 地名: +いきづま 息詰ま ラ五3: +いきとど 行き届 カ五1: +いきとど いきとど カ五1: +いきどお 憤 ラ五3: +いきな 生名 地名: +いきなり いきなり 副8: +いきぬき 息抜き 代4: +いきのこ 生き残 ラ五7: +いきもの 生き物 代1: +いきょう 異境 名1: +いきょく 医局 名1: +いきわた 行き渡 ラ五1: +いぎ 意義 名1: +いぎ 異議 名3: +いぎ 異義 名1: +いぎょう 偉業 名1: +いぎょう 遺業 名1: +いぎりす イギリス 地名: +いく 育 単漢: +いく 郁 単漢: +いく 幾 単漢: +いく 粥 単漢: +いくえ 幾重 名1: +いくえい 育英 名1: +いくお 育男 名前: +いくお 郁夫 苗字: +いくこ 郁子 名前: +いくさ 戦 代1: +いくさか 生坂 地名: +いくしゅ 育種 代1: +いくじ 育児 名6: +いくせい 育成 名6: +いくた 生田 苗字: +いくたはら 生田原 地名: +いくつ いくつ 名2: +いくつ 幾つ 代6: +いくど 幾度 代6: +いくにち 幾日 代6: +いくの 生野 地名: +いくぶん 幾分 代6: +いくよ 郁代 名前: +いくら いくら 名2: +いくら 幾ら 代6: +いくらか 幾らか 代6: +いぐ 伊具 地名: +いぐさ 井草 地名: +いぐち 井口 苗字: +いけ 池 名2: +いけい 畏敬 名6: +いけがき 生け垣 代1: +いけがみ 池上 苗字: +いけがみ 池上 地名: +いけがわ 池川 地名: +いけだ 池田 苗字: +いけだ 池田 地名: +いけど 生け捕 ラ五7: +いけばな 生け花 代1: +いけぶくろ 池袋 地名: +いけもと 池本 苗字: +いけん 意見 名7: +いけん 違憲 名1: +いげん 威厳 名1: +いこ 憩 ワ五3: +いこい 憩 代1: +いこう 移行 名6: +いこう 移項 名6: +いこう 以降 名1: +いこう 意向 名3: +いこく 異国 名1: +いこつ 遺骨 名1: +いこま 生駒 地名: +いこん 遺恨 名1: +いご 以後 名11:接尾1: +いご 囲碁 名1: +いごこち 居心地 代1: +いさ 伊佐 苗字: +いさ 伊佐 地名: +いさ 勇 マ五3: +いさい 委細 名1: +いさい 異彩 名1: +いさお 勲 名前: +いさお 功 名前: +いさお 勇夫 名前: +いさお 勇雄 名前: +いさか 伊坂 苗字: +いさぎよ 潔 形2: +いさく 遺作 名1: +いささか いささか 代6: +いさはや 諌早 地名: +いさまし 勇まし 形5: +いさむ 勇 名前: +いさめ 諌め 一段4: +いさわ 石和 地名: +いさわ 胆沢 地名: +いさん 遺産 名1: +いざ いざ 代1: +いざかや 居酒屋 代1: +いざき 井崎 苗字: +いざな 誘 ワ五7: +いざわ 伊沢 苗字: +いざわ 井沢 苗字: +いし 意志 名1: +いし 意思 名1: +いし 遺志 名1: +いし 医師 名1: +いし 石 名1: +いしい 石井 苗字: +いしおか 石岡 苗字: +いしおか 石岡 地名: +いしかり 石狩 地名: +いしかわ 石川 苗字: +いしかわ 石川 地名: +いしかわ 石河 苗字: +いしがき 石垣 名1: +いしがき 石垣 地名: +いしき 意識 名6: +いしくら 石倉 苗字: +いしぐろ 石黒 苗字: +いしげ 石下 地名: +いしげ 石毛 苗字: +いしこし 石越 地名: +いしざか 石坂 苗字: +いしざき 石崎 苗字: +いしざわ 石沢 苗字: +いしじま 石島 苗字: +いしずえ 礎 代1: +いしだ 石田 苗字: +いしだ 石田 地名: +いしつ 異質 名8: +いしつ 遺失 名6: +いしづか 石塚 苗字: +いしどう 石堂 苗字: +いしどりや 石鳥谷 地名: +いしなべ 石鍋 苗字: +いしの 石野 苗字: +いしのまき 石巻 地名: +いしはら 石原 苗字: +いしばし 石橋 名1:苗字: +いしぶみ 碑 代1: +いしべ 石部 苗字: +いしべ 石部 地名: +いしまる 石丸 苗字: +いしゃ 医者 名2: +いしゃ 慰謝 名6: +いしやま 石山 苗字: +いしやまでら 石山寺 地名: +いしゅ 異種 名1: +いしゅう 異臭 名1: +いしゅく 萎縮 名6: +いしゅつ 移出 名6: +いしょ 遺書 名1: +いしょう 衣装 名1: +いしょう 意匠 名1: +いしょく 移植 名6: +いしょく 委嘱 名6: +いしょく 異色 名8: +いしょくじゅう 衣食住 名1: +いしわたり 石渡 苗字: +いしん 維新 名1: +いじ いじ ラ五8: +いじ 意地 名1: +いじ 維持 名6: +いじ 遺児 名1: +いじめ 苛め 一段3: +いじゅう 移住 名6: +いじゅういん 伊集院 苗字: +いじょう 以上 名11:助数2: +いじょう 異常 名8: +いじょう 委譲 代4: +いじら 伊自良 地名: +いじわる 意地悪 代5:形1: +いじん 偉人 名1: +いじん 異人 名1: +いす 椅子 名1: +いすみ 夷隅 地名: +いすらえる イスラエル 地名: +いすらむ イスラム 名1: +いすわ 居座 ラ五7: +いず 伊豆 地名: +いずし 出石 地名: +いずながおか 伊豆長岡 地名: +いずみ 泉 名1: +いずみ 泉 地名: +いずみ 和泉 苗字: +いずみ 和泉 地名: +いずみ 出水 地名: +いずみおおつ 泉大津 地名: +いずみさの 泉佐野 地名: +いずみや 泉谷 苗字: +いずも 出雲 地名: +いずもざき 出雲崎 地名: +いずれ いずれ 代6: +いせ 伊勢 地名: +いせい 威勢 名1: +いせい 異性 名1: +いせいしゃ 為政者 名1: +いせき 移籍 名6: +いせき 遺跡 名1: +いせさき 伊勢崎 地名: +いせたん 伊勢丹 企業: +いせつ 異説 名1: +いせはら 伊勢原 苗字: +いせはら 伊勢原 地名: +いせん 伊仙 地名: +いぜな 伊是名 地名: +いぜん 以前 名1: +いぜん 依然 名1: +いそ 磯 代1: +いそ 急 ガ五8: +いそう 位相 名1: +いそう 移送 名6: +いそうろう 居候 代1: +いそがい 磯貝 苗字: +いそがし 忙し 形10: +いそご 磯子 地名: +いそざき 磯崎 苗字: +いそし 勤し マ五7: +いそだ 磯田 苗字: +いその 磯野 苗字: +いそべ 磯部 苗字: +いそや 磯谷 苗字: +いそや 磯谷 地名: +いそん 依存 名6: +いぞう 遺贈 名6: +いぞく 遺族 名3: +いぞん 依存 名6: +いぞん 異存 名1: +いた 板 代1: +いた 致 サ五7: +いた いた サ五5: +いた 痛 形5:マ五7: +いた 傷 マ五7: +いた 悼 マ五3: +いた 至 ラ五7: +いた 到 ラ五7: +いたい 遺体 名1: +いたい 異体 名1: +いたいたし 痛々し 形3: +いたがき 板垣 苗字: +いたく 依託 名7: +いたく 委託 名7: +いたくら 板倉 苗字: +いたこ 潮来 苗字: +いたこ 潮来 地名: +いたずら 悪戯 代4:形動1: +いたずら 徒 形動1: +いただ いただ カ五7: +いただ 戴 カ五7: +いただ 頂 カ五7: +いただき 頂 代1: +いたって いたって 副1: +いたで 痛手 代1: +いたどり 板取 地名: +いたの 板野 苗字: +いたの 板野 地名: +いたばし 板橋 苗字: +いたばし 板橋 地名: +いたまえ 板前 代2: +いたまし 痛まし 形9: +いたみ 伊丹 苗字: +いたみ 伊丹 地名: +いため 炒め 一段3: +いためつけ 痛めつけ 一段3: +いたやなぎ 板柳 地名: +いたりあ イタリア 地名: +いたわ いたわ ラ五8: +いたん 異端 名1: +いだ 井田 苗字: +いだ 抱 カ五7: +いだい 偉大 形動4: +いだい 医大 名1: +いち 位置 代4: +いち 一 一括: +いち 市 接尾1: +いちい 一意 名4: +いちいち 一々 代6: +いちいち いちいち 代6: +いちいん 一因 名1: +いちいん 一員 名1: +いちう 一宇 地名: +いちえん 一円 一括: +いちおう 一応 代6: +いちかい 市貝 地名: +いちかわ 市川 苗字: +いちかわ 市川 地名: +いちかわだいもん 市川大門 地名: +いちがや 市ヶ谷 地名: +いちがん 一丸 名1: +いちき 市来 苗字: +いちき 市来 地名: +いちげき 一撃 名6: +いちげん 一元 名4: +いちご 苺 代1: +いちし 一志 地名: +いちじ 一時 一括: +いちじ 一事 名1: +いちじま 市島 地名: +いちじょ 一助 名1: +いちじょう 一条 苗字: +いちじるし 著し 形2: +いちぞん 一存 名1: +いちたろう 一太郎 名1: +いちだん 一団 代1: +いちだんらく 一段落 名6: +いちづけ 位置付け 一段3: +いちどう 一同 名3: +いちどう 一堂 名1: +いちどく 一読 名7: +いちにん 一任 名6: +いちにんまえ 一人前 名1: +いちねん 一念 名1: +いちのせき 一関 地名: +いちのへ 一戸 苗字: +いちのへ 一戸 地名: +いちのみや 一の宮 地名: +いちのみや 一宮 苗字: +いちのみや 一宮 地名: +いちはさま 一迫 地名: +いちはやく いち早く 副1: +いちはら 市原 苗字: +いちはら 市原 地名: +いちば 市場 名1: +いちばん 一番 一括: +いちぶ 一部 一括: +いちぶぶん 一部分 名1: +いちむら 市村 苗字: +いちめい 一命 名1: +いちめん 一面 名1: +いちもくりょうぜん 一目瞭然 代5: +いちもん 一門 名1: +いちやく 一躍 代4:副1: +いちゅう 意中 名1: +いちょう 胃腸 名1: +いちょう 銀杏 名1: +いちよう 一様 形動4: +いちらん 一覧 名6: +いちり 一理 名1: +いちりつ 一律 代5: +いちれい 一例 一括: +いちれん 一連 名1: +いちろ 一路 代6: +いちろう 一朗 名前: +いちろう 一郎 名前: +いっ 逸 サ変:サ五1: +いっ 行っ カ五音便: +いっ 逝っ カ五音便: +いっか 一家 名3: +いっかい 一介 副7: +いっかく 一角 名1: +いっかせい 一過性 名1: +いっかつ 一括 名6: +いっかん 一環 名1: +いっかん 一貫 名6: +いっき 一揆 名1: +いっきょ 一挙 名1: +いっきょう 一興 名1: +いっけい 一計 名1: +いっけん 一見 代4:副1: +いっこう 一向 名11: +いっこう 一行 名3: +いっこく 一刻 名1: +いっさい 一切 代6: +いっさく 一昨 接頭1: +いっさくじつ 一昨日 代6: +いっさくねん 一昨年 代6: +いっさんかたんそ 一酸化炭素 名1: +いっしき 一式 一括: +いっしき 一色 苗字: +いっしき 一色 地名: +いっしゅう 一周 名6: +いっしゅん 一瞬 名1: +いっしょ いっしょ 名6: +いっしょ 一緒 名7: +いっしょう 一生 名1: +いっしょうけんめい 一生懸命 代6: +いっしょうけんめい 一所懸命 代6: +いっしょけんめい 一所懸命 代6: +いっしん 一心 名8: +いっしん 一新 名6: +いっすい 一睡 名6: +いっせい 一斉 名1: +いっせいに 一斉に 副1: +いっせきにちょう 一石二鳥 代1: +いっせつ 一説 代1: +いっせん 一線 代1: +いっそ いっそ 副1: +いっそう いっそう 副1: +いっそう 一層 一括: +いっそう 一掃 代4: +いったい いったい 副1: +いったい 一体 一括: +いったい 一帯 代1: +いったん 一旦 副1: +いったん 一端 名1: +いったん いったん 副1: +いったん 一たん 副1: +いっち 一致 名6: +いっちゅうや 一昼夜 代1: +いっちょういっせき 一朝一夕 代1: +いっちょういったん 一長一短 代1: +いってい 一定 名6: +いってん 一転 名6: +いってん 一点 一括: +いっと 一途 代1: +いっぱい いっぱい 代5: +いっぱい 一杯 一括: +いっぱく 一泊 代4: +いっぱつ 一発 一括: +いっぱん 一般 名4: +いっぴつ 一筆 名1: +いっぴん 逸品 名1: +いっぷく 一服 名6: +いっぺい 一平 名前: +いっぺん 一辺 名1: +いっぺん 一変 名6: +いっぺんとう 一辺倒 名1: +いっぽう 一方 名1: +いっぽう 一報 名7: +いっぽう いっぽう 名1: +いっぽんまつ 一本松 地名: +いつ いつ 代6: +いつ 何時 代6: +いつ 一 単漢: +いつ 壱 単漢: +いつ 溢 単漢: +いつ 逸 単漢: +いつう 胃痛 代1: +いつか 五日 代6: +いつかいち 五日市 地名: +いつき 五木 苗字: +いつくし 慈し マ五7: +いつざい 逸材 名1: +いつだつ 逸脱 名6: +いつつ 五つ 代6: +いつも いつも 代6: +いつわ 偽 ラ五7: +いつわ 逸話 名1: +いつわ 五輪 苗字: +いつわ 五和 地名: +いづはら 厳原 地名: +いてざ 射手座 代1: +いてつ 凍てつ カ五5: +いてん 移転 名7: +いで 井手 苗字: +いで 井出 苗字: +いでおろぎー イデオロギー 名1: +いでみつ 出光 苗字: +いでむら 出村 苗字: +いでん 遺伝 名6: +いでんし 遺伝子 名1: +いと 厭 ワ五1: +いと 意図 代4: +いと 糸 名1: +いと 伊都 地名: +いといがわ 糸魚川 地名: +いとう 伊東 苗字: +いとう 伊東 地名: +いとう 伊藤 苗字: +いとうちゅう 伊藤忠 企業: +いとおし いとおし 形5:マ五3: +いとぐち 糸口 代1: +いとこ いとこ 代1: +いとし 愛し 形5: +いとしま 糸島 地名: +いとだ 糸田 地名: +いとな 営 マ五8: +いとぬき 糸貫 地名: +いとま 暇 名2: +いとまん 糸満 地名: +いとめ 射止め 一段2: +いとも いとも 副1: +いど 緯度 名1: +いど 井戸 名1: +いど 挑 マ五7: +いどう 移動 名7: +いどう 異同 名1: +いどころ 居所 名1: +いどばた 井戸端 名1: +いな 否 代1:マ五7: +いな 伊那 苗字: +いな 伊那 地名: +いな 伊奈 苗字: +いな 伊奈 地名: +いな 伊南 地名: +いない 以内 接尾9:助数2: +いない 稲井 苗字: +いなお 居直 ラ五7: +いなおか 稲岡 苗字: +いなか 田舎 名1: +いなかだて 田舎館 地名: +いなかわ 稲川 地名: +いながき 稲垣 苗字: +いながわ 猪名川 地名: +いなぎ 稲城 地名: +いなさ 引佐 地名: +いなざわ 稲沢 苗字: +いなざわ 稲沢 地名: +いなしき 稲敷 地名: +いなだ 稲田 苗字: +いなつき 稲築 地名: +いなば 稲葉 苗字: +いなぶ 稲武 地名: +いなべ 員弁 地名: +いなみ 井波 苗字: +いなみ 井波 地名: +いなみ 稲美 名前: +いなみ 稲美 地名: +いなみ 印南 地名: +いなむら 稲村 苗字: +いなら 居並 バ五1: +いなり 稲荷 名2: +いなわしろ 猪苗代 地名: +いなん 以南 代1: +いにしえ いにしえ 代1: +いにしゃらいず イニシャライズ 名6: +いにしゃる イニシャル 名1: +いにゅう 移入 名6: +いにん 委任 名6: +いぬ 犬 代1: +いぬ 狗 代1: +いぬい 乾 苗字: +いぬかい 犬飼 苗字: +いぬかみ 犬上 地名: +いぬやま 犬山 地名: +いね 稲 名1: +いね 伊根 地名: +いね 禾 単漢: +いねかり 稲刈り 代4: +いねむり 居眠り 代4: +いの 祈 ラ五8: +いの 伊野 地名: +いのうえ 井上 苗字: +いのき 猪木 苗字: +いのくち 井口 地名: +いのこ 居残 ラ五3: +いのしし 猪 代1: +いのち 命 代1: +いのまた 猪股 苗字: +いはら 庵原 地名: +いはん 違反 名6: +いば 威張 ラ五8: +いばしょ 居場所 名1: +いばら 茨 代1: +いばら 井原 地名: +いばらき 茨城 地名: +いばらき 茨木 苗字: +いばらき 茨木 地名: +いひょう 意表 名1: +いひん 遺品 名1: +いび 揖斐 地名: +いびがわ 揖斐川 地名: +いびつ いびつ 代5: +いふ 畏怖 名6: +いふく 衣服 名1: +いぶき 伊吹 苗字: +いぶき 伊吹 地名: +いぶき 息吹 名1: +いぶすき 指宿 苗字: +いぶすき 指宿 地名: +いぶすき 揖宿 地名: +いぶつ 異物 名1: +いぶつ 遺物 名1: +いぶり 胆振 地名: +いへや 伊平屋 地名: +いへん 異変 名1: +いべんと イベント 名1: +いほう 違法 名8: +いぼ 揖保 地名: +いぼがわ 揖保川 地名: +いま 今 代6: +いま いま 代6: +いま 居間 代1: +いまい 今井 苗字: +いまいずみ 今泉 苗字: +いまいずみ 今泉 地名: +いまいち 今市 地名: +いまいまし 忌々し 形5: +いまがね 今金 地名: +いまがわ 今川 苗字: +いまごろ 今ごろ 代6: +いまさら 今さら 副8: +いまさら 今更 副8: +いまさら いまさら 副8: +いましめ 戒め 一段3: +いまじょう 今庄 地名: +いまぜき 今関 苗字: +いまだ いまだ 副5: +いまだ 未だ 副5: +いまだ 今田 苗字: +いまだて 今立 地名: +いまづ 今津 苗字: +いまづ 今津 地名: +いまでがわ 今出川 地名: +いまばり 今治 地名: +いまふく 今福 苗字: +いまべつ 今別 地名: +いまむら 今村 苗字: +いまり 伊万里 地名: +いまわし 忌まわし 形5: +いみ 意味 代4: +いみず 射水 地名: +いみん 移民 名6: +いむ 医務 名1: +いむら 井村 苗字: +いめーじ イメージ 名1: +いも 芋 名2: +いもうと 妹 代2: +いもの 鋳物 代1: +いもん 慰問 名6: +いや いや 感動:サ五7:形動1: +いや 嫌 形動6: +いや 厭 形動6: +いや 癒 サ五7: +いやおう 否応 名1: +いやく 医薬 名1: +いやく 意訳 名6: +いやく 違約 名6: +いやくきん 違約金 名1: +いやけ 嫌気 名1: +いやし 卑し 形3:マ五7: +いやに いやに 副1: +いやみ 嫌味 名8: +いやみ 厭味 名8: +いやらし いやらし 形7: +いよ 伊代 名前: +いよ 伊予 地名: +いよいよ いよいよ 副8: +いよう 異様 形動4: +いよく 意欲 名4: +いよみしま 伊予三島 地名: +いらい 以来 接尾1:副1: +いらい 依頼 名7: +いらいら イライラ 代4: +いらすと イラスト 名1: +いらだ 苛立 タ五8: +いらっしゃ いらっしゃ ラ五3: +いらぶ 伊良部 地名: +いりえ 入り江 名1: +いりえ 入江 苗字: +いりき 入来 地名: +いりく 入り組 マ五5: +いりぐち 入口 名1: +いりこ 入り込 マ五7: +いりの 入野 苗字: +いりひろせ 入広瀬 地名: +いりゅう 慰留 名6: +いりゅう 遺留 名6: +いりょう 医療 名1: +いりょう 衣料 名1: +いりょく 威力 名1: +いるい 衣類 名1: +いるか 海豚 代1: +いるか 鯆 単漢: +いるま 入間 地名: +いれ 入れ 接尾1:一段2: +いれい 異例 名1: +いれかえ 入れ換え 一段4: +いれかわ 入れ替わ ラ五7: +いろ 色 接尾1: +いろあい 色合い 代1: +いろあせ 色あせ 一段3: +いろあせ 色褪せ 一段3: +いろいろ いろいろ 代5: +いろいろ 色々 代5: +いろう 慰労 代4: +いろけ 色気 名2: +いろずり 色刷 代4: +いろづ 色づ カ五7: +いろど 彩 ラ五7: +いろは いろは 代1: +いろめ 色め カ五3: +いろわけ 色分け 代4: +いろん 異論 名1: +いろんな いろんな 連体: +いろんな 色んな 連体: +いわ 岩 代1: +いわ 祝 ワ五8: +いわ 磐 単漢: +いわい 岩井 苗字: +いわい 岩井 地名: +いわいずみ 岩泉 地名: +いわお 巌 名1:名前: +いわお 岩男 名前: +いわお 岩夫 苗字: +いわお 岩雄 名前: +いわかん 違和感 名1: +いわき いわき 地名: +いわき 岩城 苗字: +いわき 岩城 地名: +いわき 岩木 苗字: +いわき 磐城 地名: +いわぎ 岩城 地名: +いわく 曰く 代1: +いわくに 岩国 地名: +いわくら 岩倉 苗字: +いわくら 岩倉 地名: +いわさ 岩佐 苗字: +いわさき 岩崎 苗字: +いわさわ 岩沢 苗字: +いわし 鰯 代1: +いわし 鰮 単漢: +いわした 岩下 苗字: +いわしろ 岩代 地名: +いわせ 岩瀬 苗字: +いわせ 岩瀬 地名: +いわた 岩田 苗字: +いわた 磐田 地名: +いわたき 岩滝 地名: +いわつき 岩槻 苗字: +いわつき 岩槻 地名: +いわて 岩手 地名: +いわで 岩出 苗字: +いわで 岩出 地名: +いわでやま 岩出山 地名: +いわない 岩内 地名: +いわなみ 岩波 苗字: +いわぬま 岩沼 地名: +いわば いわば 副1: +いわば 言わば 副1: +いわば 岩場 代1: +いわふね 岩舟 地名: +いわふね 岩船 地名: +いわぶち 岩淵 苗字: +いわま 岩間 苗字: +いわみ 岩美 地名: +いわみ 石見 名1: +いわみざわ 岩見沢 地名: +いわむら 岩村 苗字: +いわむろ 岩室 地名: +いわもと 岩本 苗字: +いわもと 岩本 地名: +いわゆる いわゆる 連体: +いん 印 接尾1:サ変: +いん 員 接尾1: +いん 院 接尾1: +いん 陰 代1: +いん 韻 代1: +いん イン 代1: +いん 淫 代4: +いん 允 単漢: +いん 咽 単漢: +いん 因 単漢: +いん 姻 単漢: +いん 引 単漢: +いん 飲 単漢: +いん 胤 単漢: +いん 蔭 単漢: +いん 隠 単漢: +いん 音 単漢: +いんえい 陰影 名1: +いんか 引火 名6: +いんかん 印鑑 名1: +いんが 因果 名8: +いんき 陰気 名8: +いんきょ 隠居 名7: +いんきょく 陰極 名1: +いんく インク 名1: +いんくりめんと インクリメント 名6: +いんくるーど インクルード 名6: +いんけん 陰険 名8: +いんこう 咽喉 名1: +いんさーと インサート 名6: +いんさつ 印刷 名6: +いんさん 陰惨 代5: +いんざい 印西 地名: +いんし 因子 名1: +いんし 印紙 名1: +いんしつ 陰湿 名8: +いんしゅ 飲酒 名6: +いんしゅう 因習 名1: +いんしゅりん インシュリン 名1: +いんしょう 印象 名4: +いんしょう 印章 名1: +いんしょうづけ 印象づけ 一段3: +いんしょく 飲食 名6: +いんじ 印字 名6: +いんじぇくしょん インジェクション 名1: +いんじけーた インジケータ 名1: +いんすたんと インスタント 名8: +いんすとーる インストール 名6: +いんすとらくしょん インストラクション 代1: +いんせき 引責 名6: +いんぜい 印税 名1: +いんそつ 引率 名6: +いんたー インター 名1: +いんたーばる インターバル 名1: +いんたーぷりたー インタープリター 名1: +いんたーりーぶ インターリーブ 代4: +いんたい 引退 名7: +いんたびゅー インタビュー 名6: +いんたふぇーす インタフェース 代1: +いんたらくてぃぶ インタラクティブ 名8: +いんだすとり インダストリ 名1: +いんだすとりある インダストリアル 名8: +いんち インチ 助数2: +いんち 吋 助数2: +いんちょう 院長 名1: +いんてりあ インテリア 名1: +いんてる インテル 名1: +いんでぃあん インディアン 名1: +いんでっくす インデックス 名1: +いんでんと インデント 代4: +いんとねーしょん イントネーション 名1: +いんど インド 地名: +いんど 印度 地名: +いんどよう インド洋 代1: +いんない 院内 地名: +いんなみ 印南 苗字: +いんなみ 印南 地名: +いんねん 因縁 名1: +いんのう 陰嚢 代1: +いんのしま 因島 地名: +いんば 印旛 地名: +いんぱくと インパクト 名1: +いんふぉめーしょん インフォメーション 代1: +いんふるえんざ インフルエンザ 名1: +いんふれ インフレ 名1: +いんぷっと インプット 名6: +いんぷりめんと インプリメント 名6: +いんぺい 隠蔽 名6: +いんぼう 陰謀 名1: +いんよう 引用 名6: +いんよう 飲用 名6: +いんよう 陰陽 名1: +いんりょうすい 飲料水 名1: +いんりょく 引力 名1: +いんれき 陰暦 名1: +う 浮 カ五3: +う 打 タ五7: +う 討 タ五7: +う 撃 タ五7: +う 生 マ五4: +う 産 マ五4: +う 膿 マ五7: +う 売 ラ五8: +う 鵜 代1: +う 卯 代1: +う 芋 単漢: +う 右 単漢: +う 宇 単漢: +う 烏 単漢: +う 羽 単漢: +う 迂 単漢: +う 雨 単漢: +う 胡 単漢: +う 菟 単漢: +う 憂 単漢: +う 有 単漢: +うーまん ウーマン 名1: +うぃーく ウィーク 名1: +うぃるす ウィルス 代1: +うぃんど ウィンド 名1: +うぃんどう ウィンドウ 名1: +うい 初 単漢: +ういういし 初々し 形3: +ういざん 初産 代1: +ういすきー ウイスキー 名1: +ういるす ウイルス 名1: +ういんく ウインク 代4: +ういんどう ウインドウ 名1: +うぇいと ウェイト 名1: +うえ 上 代6: +うえ 植え 一段1: +うえ 飢え 一段3: +うえいと ウエイト 名1: +うえき 植木 名1: +うえした 上下 名1: +うえじに 餓死 代4: +うえすぎ 上杉 苗字: +うえだ 上田 苗字:地名: +うえだ 植田 苗字: +うえつけ 植え付け 一段3: +うえの 上野 苗字: +うえの 上野 地名: +うえのはら 上野原 地名: +うえはら 上原 苗字: +うえはら 上原 地名: +うえはら 植原 苗字: +うえまつ 植松 苗字: +うえむら 上村 苗字: +うえむら 植村 苗字: +うえもと 植本 苗字: +うえん 迂遠 形動4: +うぉーくまん ウォークマン 名1: +うぉーみんぐ ウォーミング 名1: +うお 魚 代1: +うおうさおう 右往左往 代4: +うおざ 魚座 代1: +うおしま 魚島 地名: +うおづ 魚津 地名: +うおぬま 魚沼 地名: +うか 羽化 代4: +うか 受か ラ五2: +うか 浮か バ五8: +うかい 迂回 名6: +うかうか うかうか 副3: +うかが 伺 ワ五6: +うかが うかが ワ五6: +うかが 窺 ワ五5: +うかつ うかつ 名8: +うかん 有漢 地名: +うがん 右岸 名1: +うき 右記 名1: +うき 雨期 名1: +うき 雨季 名1: +うきくさ 浮草 名1: +うきしずみ 浮き沈み 代4: +うきな 浮名 名1: +うきは 浮羽 地名: +うきぶくろ 浮袋 名1: +うきぼり 浮き彫り 代4: +うきょう 右京 地名: +うきよえ 浮世絵 名1: +うく 宇久 地名: +うぐいす 鴬 代1: +うぐいすざわ 鴬沢 地名: +うぐいすだに 鴬谷 地名: +うけ 受け 接尾1:一段2: +うけ 請け 一段4: +うけあ 請け合 ワ五5: +うけい 右傾 名6: +うけいれ 受け入れ 一段4: +うけお 請け負 ワ五7: +うけおい 請負 名1: +うけざら 受け皿 名1: +うけしょ 請書 名1: +うけたまわ 承 ラ五8: +うけつ 受け継 ガ五7: +うけつけ 受付 名1: +うけつけ 受け付け 一段3: +うけと 受け取 ラ五8: +うけとめ 受け止め 一段4: +うけとり 受取 名2: +うけなが 受け流 サ五7: +うけはらい 受払い 代4: +うけも 受け持 タ五7: +うけわたし 受渡し 名2: +うけん 宇検 地名: +うご 動 カ五7: +うご 羽後 地名: +うごか 動か サ五1: +うごきだ 動き出 サ五3: +うさ 宇佐 苗字: +うさ 宇佐 地名: +うさぎ 兎 代1: +うさぎ 菟 単漢: +うさみ 宇佐見 苗字: +うさみ 宇佐美 苗字: +うざわ 鵜沢 苗字: +うし 牛 代1: +うし 丑 単漢: +うしお 潮 代1: +うしく 牛久 地名: +うしじま 牛島 苗字: +うしづ 牛津 地名: +うしな 失 ワ五6: +うしぶか 牛深 地名: +うしぼり 牛堀 地名: +うしまど 牛窓 地名: +うしろ 後ろ 名1: +うしろあし 後ろ足 名1: +うしろすがた 後ろ姿 名1: +うしろだて 後ろだて 名1: +うしろむき 後向き 代5: +うしろめた 後ろめた 形5: +うじ 宇治 苗字: +うじ 宇治 地名: +うじ 蛆 代1: +うじ 氏 代1: +うじいえ 氏家 苗字: +うじたわら 宇治田原 地名: +うす 臼 代1: +うす 薄 接頭1:形3: +うす 有珠 地名: +うす 碓 単漢: +うすい 雨水 名1: +うすい 碓井 苗字: +うすい 臼井 苗字: +うすい 薄井 苗字: +うすい 碓氷 地名: +うすうす 薄々 代6: +うすがた 薄型 名1: +うすき 臼杵 苗字: +うすき 臼杵 地名: +うすぎ 薄着 代4: +うすぎり 薄切り 代4: +うすぐら 薄暗 形2: +うすじお 薄塩 名1: +うすだ 臼田 苗字: +うすだ 臼田 地名: +うすで 薄手 名8: +うすび 薄日 代1: +うすま 薄ま ラ五1: +うすめ 薄め 一段3: +うすら 薄ら ガ五1: +うすれ 薄れ 一段1: +うず 渦 代1: +うずくま 蹲 ラ五5: +うずま 渦巻 カ五7: +うずま 埋ま ラ五1: +うずまき 渦巻 名1: +うずめ 埋め 一段1: +うずめ うずめ 一段1: +うずもれ 埋もれ 一段1: +うせ 失せ 一段1: +うせつ 右折 名6: +うそ 嘘 代1: +うそ ウソ 代1: +うた 歌 名2: +うた 歌 ワ五8: +うた 唄 名2: +うた 唄 ワ五8: +うた 詠 ワ五5: +うた 謡 ワ五5: +うた 詩 代1: +うた 唱 単漢: +うたい 謡 単漢: +うたが 疑 ワ五8: +うたがわし 疑わし 形3: +うたぐ 疑 ラ五8: +うたげ 宴 代1: +うたごえ 歌声 名1: +うたしない 歌志内 地名: +うたつ 歌津 地名: +うたづ 宇多津 地名: +うたの 菟田野 地名: +うたのぼり 歌登 地名: +うたん 右端 名1: +うだ 宇陀 地名: +うだがわ 宇田川 苗字: +うだがわ 宇田川 地名: +うち うち 代6: +うち 家 名2: +うち 内 代6: +うちあ 撃ち合 ワ五7: +うちあけ 打ち明け 一段3: +うちあげ 打ち上げ 一段3: +うちあわせ 打合せ 名5: +うちあわせ 打ち合せ 名5: +うちいわい 内祝 代1: +うちうち 内々 名8: +うちうみ 内海 苗字: +うちうら 内浦 地名: +うちおと 撃ち落と サ五7: +うちか 打ち勝 タ五7: +うちかけ 打掛け 名1: +うちかんだ 内神田 地名: +うちがわ 内側 名1: +うちき 打ち切 ラ五7: +うちき 内気 名8: +うちきん 内金 名1: +うちくだ 打ち砕 カ五5: +うちけ 打ち消 サ五7: +うちこ 打ち込 マ五7: +うちこ 内子 地名: +うちた 打田 地名: +うちだ 打ち出 サ五7: +うちだ 内田 苗字: +うちでし 内弟子 代1: +うちとけ 打ち解け 一段1: +うちなだ 内灘 地名: +うちの 内野 苗字: +うちのうら 内之浦 地名: +うちのみ 内海 地名: +うちはら 内原 苗字: +うちはら 内原 地名: +うちぼり 内堀 苗字: +うちまく 内幕 名1: +うちみ 打ち身 名1: +うちみず 打ち水 代4: +うちやま 内山 苗字: +うちゅう 宇宙 名1: +うちょうてん 有頂天 名8: +うちわ 内輪 名1: +うちわけ 内訳 名1: +うっかり うっかり 代4:副1: +うっせき うっ積 名6: +うったえ 訴え 一段4: +うってつけ うってつけ 代5: +うっとうし うっとうし 形5: +うつ 移 サ五8:ラ五8: +うつ 写 サ五8:ラ五8: +うつ 映 サ五8:ラ五8: +うつ 鬱 代1: +うつ 欝 代1: +うつ 蔚 単漢: +うつくし 美し 形9: +うつしだ 映し出 サ五7: +うつしと 写し取 ラ五5: +うつのみや 宇都宮 地名: +うつぼ 靭 代1: +うつみ 内海 苗字: +うつむ うつむ カ五7: +うつりぎ 移り気 代5: +うつろ 虚ろ 代5: +うつわ 器 代1: +うてん 雨天 代1: +うで 腕 代1: +うできき 腕利き 名1: +うでどけい 腕時計 名1: +うでまえ 腕前 名1: +うと 疎 形2:マ五1: +うと 宇土 地名: +うとまし 疎まし 形5: +うとん 疎ん ザ変: +うどの 鵜殿 苗字: +うどの 鵜殿 地名: +うどん うどん 代1: +うな うな ラ五3: +うなかみ 海上 地名: +うなが 促 サ五7: +うなぎ 鰻 代1: +うなじ 項 代1: +うなず うなず カ五7: +うなづき 宇奈月 地名: +うなばら 海原 名1: +うね 畦 代1: +うね 畝 代1: +うの 宇野 苗字: +うの 宇野 地名: +うのけ 宇ノ気 地名: +うのみ 鵜呑み 代4: +うは 右派 名1: +うば 姥 代1: +うば 奪 ワ五6: +うば 乳母 代1: +うばいと 奪い取 ラ五5: +うぶ 初 代5: +うぶ 産 単漢: +うぶごえ 産声 代1: +うぶやま 産山 地名: +うへん 右辺 名1: +うべ 宇部 地名: +うま うま 形8: +うま 旨 形8: +うま 埋ま ラ五1: +うま 馬 名1: +うま 宇摩 地名: +うま 午 単漢: +うまじ 馬路 地名: +うまみ 旨味 名1: +うまや 厩 代1: +うまれ 生まれ 名2: +うまれ 産まれ 名2: +うまれかわ 生まれ変わ ラ五7: +うみ 海 名1: +うみ 膿 名1: +うみ 宇美 地名: +うみおと 産み落と サ五7: +うみせんやません 海千山千 代1: +うみだ 生み出 サ五7: +うみべ 海辺 名1: +うむ 有無 名1: +うめ 埋め 一段2: +うめ 梅 名1: +うめ 宇目 地名: +うめあわせ 埋め合わせ 代4: +うめあわせ 埋め合せ 代4: +うめこ 埋め込 マ五7: +うめざわ 梅沢 苗字: +うめぞの 梅園 苗字: +うめたて 埋め立て 一段1: +うめたて 埋立 名1: +うめたてち 埋立地 名1: +うめだ 梅田 苗字: +うめだ 梅田 地名: +うめづ 梅津 苗字: +うめはら 梅原 苗字: +うめぼし 梅干し 代1: +うもう 羽毛 名1: +うもれ 埋もれ 一段2: +うやうやし 恭し 形3: +うやま 宇山 苗字: +うやま 敬 ワ五6: +うやむや うやむや 形動9: +うよく 右翼 名1: +うら 裏 代1: +うら 浦 代1: +うら 恨 マ五8: +うら 怨 マ五8: +うら 裡 単漢: +うらうす 浦臼 地名: +うらおもて 裏表 代1: +うらかた 裏方 代2: +うらかわ 浦河 地名: +うらがえ 裏返 サ五7:ラ五7: +うらがき 裏書 代4: +うらがね 裏金 名1: +うらがわ 裏側 名1: +うらぎ 裏切 ラ五7: +うらぐち 裏口 名1: +うらさく 裏作 名6: +うらじ 裏地 名1: +うらそえ 浦添 地名: +うらづけ 裏付け 代4:一段1: +うらて 裏手 名1: +うらな 占 ワ五7: +うらにわ 裏庭 名1: +うらの 浦野 苗字: +うらはら 裏腹 名8: +うらべ 浦部 苗字: +うらほろ 浦幌 地名: +うらみち 裏道 名1: +うらめ 裏目 名1: +うらめし 恨めし 形5: +うらや 羨 マ五3: +うらやす 浦安 苗字: +うらやす 浦安 地名: +うらやま 裏山 名1: +うらやまし 羨まし 形9: +うららか うららか 形動4: +うらわ 浦和 地名: +うらん ウラン 名1: +うり 瓜 代1: +うりあげ 売り上げ 一段3: +うりあげ 売上 名1: +うりあげきん 売上金 名1: +うりあげだか 売上高 名1: +うりかい 売り買い 代4: +うりかけ 売り掛け 一段3: +うりかけきん 売掛金 名1: +うりきれ 売り切れ 一段3: +うりこ 売り込 マ五7: +うりこ 売子 代2: +うりだ 売り出 サ五8: +うりだし 売出 名1: +うりづら 瓜連 地名: +うりて 売り手 名1: +うりぬし 売り主 名1: +うりね 売値 名1: +うりはら 売り払 ワ五7: +うりば 売場 名1: +うりゅう 雨龍 地名: +うりょう 雨量 名1: +うりわた 売り渡 サ五7: +うるう 閏 代1: +うるうどし 閏年 代1: +うるお 潤 サ五5:ワ五7: +うるさ うるさ 形7: +うるさ 煩 形7: +うるわし 麗し 形3: +うれ 熟れ 一段2: +うれい 愁い 名1: +うれい 憂い 名1: +うれえ 愁え 一段2: +うれえ 憂え 一段2: +うれくち 売れ口 名1: +うれし うれし 形5: +うれし 嬉し 形5: +うれしの 嬉野 地名: +うれっこ 売れっ子 代1: +うれのこ 売れ残 ラ五7: +うれゆき 売行き 代1: +うろうろ うろうろ 副3: +うろおぼえ うろ覚え 名1: +うろこ 鱗 代1: +うわ 宇和 地名: +うわ 上 単漢: +うわがき 上書き 代4: +うわがわ 上側 代1: +うわき 浮気 名6:形動1: +うわぎ 上着 代1: +うわぐつ 上靴 名1: +うわさ 噂 代4: +うわじま 宇和島 地名: +うわすべり 上滑り 代5:サ変: +うわづみ 上積み 代4: +うわぬり 上塗り 代4: +うわのせ 上乗せ 代4: +うわばき 上履き 代1: +うわべ 上辺 名1: +うわまえ 上前 代1: +うわまわ 上回 ラ五5: +うわむ 上向 カ五7: +うわめ 上目 代1: +うわやく 上役 名1: +うん 運 代1: +うん 雲 代1: +うん 云 単漢: +うんえい 運営 名6: +うんかい 雲海 名1: +うんが 運河 名1: +うんきゅう 運休 名6: +うんこう 運行 名6: +うんこう 運航 名6: +うんざり うんざり 代4: +うんざん 運算 名6: +うんしん 運針 名1: +うんせい 運勢 名1: +うんぜん 雲仙 地名: +うんそう 運送 名6: +うんそうや 運送屋 代2: +うんちく 蘊蓄 名1: +うんちん 運賃 名1: +うんてん 運転 名6: +うんてんしゅ 運転手 代2: +うんでい 雲泥 代1: +うんと うんと 副1: +うんどう 運動 名6: +うんどうかい 運動会 名1: +うんどうじょう 運動場 名1: +うんぬん 云々 代4: +うんの 海野 苗字: +うんぱん 運搬 名6: +うんぴつ 運筆 名1: +うんめい 運命 名4: +うんゆ 運輸 名1: +うんゆしょう 運輸省 名1: +うんよう 運用 名6: +え 絵 代1: +え 柄 代1: +え 江 代1: +え 笑 マ五1: +え 得 一段1: +え 選 一段1: +え 獲 一段1: +え え 一段1: +え 荏 単漢: +え 画 単漢: +え 会 単漢: +え 恵 単漢: +え 枝 単漢: +え 慧 単漢: +え 重 単漢: +え 餌 単漢: +え 衛 単漢: +えーじぇんと エージェント 名1: +えーす エース 名1: +えーてる エーテル 名1: +えあ エア 名1: +えい 頴娃 地名: +えい 映 ザ変: +えい 詠 ザ変: +えい 栄 単漢: +えい 英 単漢: +えい 営 単漢: +えい 永 単漢: +えい 泳 単漢: +えい 衛 単漢: +えい 叡 単漢: +えい 鋭 単漢: +えい 嬰 単漢: +えい 影 単漢: +えい 曳 単漢: +えい 洩 単漢: +えい 瑛 単漢: +えい 盈 単漢: +えい 穎 単漢: +えい 頴 単漢: +えい 裔 単漢: +えいい 鋭意 副1: +えいいち 栄一 名前: +えいいち 英一 名前: +えいいちろう 栄一郎 名前: +えいえん 永遠 名8: +えいかく 鋭角 名1: +えいかん 栄冠 名1: +えいが 映画 名4: +えいがかん 映画館 名1: +えいきち 栄吉 名前: +えいきゅう 永久 名8: +えいきょう 影響 名6: +えいぎょう 営業 名6: +えいぎょうか 営業課 代1: +えいぎょうぶ 営業部 名1: +えいげんじ 永源寺 地名: +えいこ 栄子 名前: +えいこ 英子 名前: +えいこう 栄光 名1: +えいこう 曳航 代4: +えいこく 英国 名1: +えいご 英語 名4: +えいごう 永劫 名1: +えいさい 英才 名1: +えいさく 栄作 名前: +えいざぶろう 栄三郎 名前: +えいしゃ 映写 名6: +えいしゃき 映写機 名1: +えいしん 栄進 名7: +えいじ 英字 名1: +えいじ 嬰児 名1: +えいじ 栄治 名前: +えいじ 栄二 名前: +えいじ 英司 名前: +えいじ 英治 名前: +えいじ 英二 名前: +えいじゅう 永住 名6: +えいず エイズ 名1: +えいせい 衛生 名4: +えいせい 衛星 名1: +えいせい 永世 名1: +えいせい 永逝 名6: +えいせいし 衛生士 名1: +えいぜん 営繕 名6: +えいぞう 映像 名4: +えいぞう 営造 代4: +えいぞう 栄三 名前: +えいぞう 英三 名前: +えいぞく 永続 名6: +えいたつ 栄達 代4: +えいたろう 栄太郎 名前: +えいたん 詠嘆 代4: +えいだん 英断 名1: +えいだん 営団 名1: +えいち 英知 名1: +えいてん 栄転 名7: +えいねん 永年 名1: +えいびん 鋭敏 形動4: +えいふく 永福 地名: +えいふくちょう 永福町 地名: +えいぶん 英文 名1: +えいへいじ 永平寺 名1: +えいみん 永眠 名6: +えいやく 英訳 名6: +えいゆう 英雄 名1: +えいよう 栄養 名1: +えいようか 栄養価 名1: +えいようし 栄養士 名1: +えいようそ 栄養素 名1: +えいり 営利 名1: +えいりあん エイリアン 名1: +えいりん 営林 名1: +えいりん 映倫 名1: +えいりんしょ 営林署 代1: +えいわ 英和 名1: +ええ ええ 代1: +えが 描 カ五5: +えがお 笑顔 名1: +えがら 絵柄 名1: +えがわ 江川 苗字: +えき 駅 代1:接尾4: +えき 液 代1: +えき 益 代4: +えき 役 代4: +えき 易 代1: +えき 疫 単漢: +えきいん 駅員 代2: +えきか 液化 代4: +えきしゃ 易者 名1: +えきしょう 液晶 名1: +えきじょう 液状 名1: +えきすぱーと エキスパート 名1: +えきせんとりっく エキセントリック 代5: +えきたい 液体 名1: +えきちょう 駅長 代2: +えきでん 駅伝 名1: +えきまえ 駅前 名1: +えきむ 役務 名1: +えきめい 駅名 名1: +えきり 疫痢 名1: +えくあどる エクアドル 地名: +えくすてんしょん エクステンション 名1: +えぐち 江口 苗字:地名: +えこー エコー 名6: +えこだ 江古田 地名: +えこのみすと エコノミスト 名1: +えごいずむ エゴイズム 名1: +えさ 餌 代1: +えさき 江崎 苗字: +えさし 江差 地名: +えさし 江刺 苗字: +えさし 江刺 地名: +えさし 枝幸 地名: +えざわ 江沢 苗字: +えし 壊死 名6: +えしゃく 会釈 名6: +えじき 餌食 名1: +えじぷと エジプト 地名: +えすかれーと エスカレート 名6: +えすきもー エスキモー 名1: +えすけーぷ エスケープ 名6: +えすぺらんと エスペラント 名1: +えせ 似非 接頭1: +えそ 壊疽 名1: +えぞえ 江副 苗字: +えたい 得体 名1: +えたじま 江田島 地名: +えだ 枝 代1: +えだぶり 枝振り 名1: +えだまめ 枝豆 名1: +えち 愛知 地名: +えちがわ 愛知川 地名: +えちけっと エチケット 名1: +えちご 越後 地名: +えちぜん 越前 地名: +えっきょう 越境 名6: +えっけん 謁見 名6: +えっけん 越権 名1: +えっせい エッセイ 名1: +えっせいすと エッセイスト 名1: +えっちゅう 越中 地名: +えっとう 越冬 名6: +えつ 悦 単漢: +えつ 謁 単漢: +えつ 越 単漢: +えつ 閲 単漢: +えつお 悦夫 名前: +えつこ 悦子 名前: +えつねん 越年 名6: +えつらく 悦楽 名1: +えつらん 閲覧 名6: +えて 得手 代5: +えてして 得てして 副1: +えでぃた エディタ 名1: +えでぃっと エディット 名6: +えと 干支 代1: +えとう 江藤 苗字: +えとく 会得 名6: +えとろふ 択捉 地名: +えど 江戸 地名: +えどがわ 江戸川 苗字: +えどがわ 江戸川 地名: +えどさき 江戸崎 地名: +えな 恵那 地名: +えなじー エナジー 名1: +えにし 縁 代1: +えにわ 恵庭 地名: +えぬま 江沼 地名: +えねるぎー エネルギー 名1: +えのき 榎 代1: +えのきだ 榎田 苗字: +えのぐ 絵の具 名1: +えのしま 江ノ島 地名: +えのもと 榎本 苗字: +えはがき 絵はがき 名1: +えはた 江畑 苗字: +えはら 江原 苗字: +えばら 江原 苗字: +えひめ 愛媛 地名: +えび 海老 名1: +えび 蝦 名1: +えび 鰕 単漢: +えびさわ 海老沢 苗字: +えびす 恵比寿 地名: +えびす 夷 単漢: +えびす 胡 単漢: +えびな 海老名 地名: +えびの えびの 地名: +えびはら 海老原 苗字: +えぴそーど エピソード 名1: +えべつ 江別 地名: +えほん 絵本 名1: +えま 絵馬 名1: +えまき 絵巻 名1: +えみこ 恵美子 名前: +えみゅれーた エミュレータ 代1: +えみゅれーと エミュレート 名6: +えむかえ 江迎 地名: +えめらるど エメラルド 名1: +えもの 獲物 名1: +えら 偉 形9: +えら 選 バ五8: +えら 鰓 代1: +えら えら 代1:形9: +えらー エラー 名6: +えらびだ 選び出 サ五5: +えり 衿 代1: +えり 襟 代1: +えり 恵理 名前: +えりーと エリート 名1: +えりあ エリア 名1: +えりくび 襟首 名1: +えりも えりも 地名: +えりもと 襟元 名1: +えるさるばどる エルサルバドル 地名: +えれがんと エレガント 名8: +えれくとりっく エレクトリック 名1: +えれくとろにくす エレクトロニクス 名1: +えれべーたー エレベーター 名1: +えん 円 代1:助数2: +えん 縁 名3: +えん 園 接尾1: +えん 宴 接尾1: +えん 塩 接尾1: +えん 炎 接尾1: +えん 演 ザ変: +えん 宛 単漢: +えん 厭 単漢: +えん 堰 単漢: +えん 奄 単漢: +えん 延 単漢: +えん 怨 単漢: +えん 掩 単漢: +えん 援 単漢: +えん 沿 単漢: +えん 焔 単漢: +えん 煙 単漢: +えん 燕 単漢: +えん 猿 単漢: +えん 艶 単漢: +えん 苑 単漢: +えん 薗 単漢: +えん 遠 単漢: +えん 鉛 単漢: +えん 鴛 単漢: +えん 垣 単漢: +えん 鳶 単漢: +えん 媛 単漢: +えん 淵 単漢: +えんえい 遠泳 名6: +えんえき 演繹 名6: +えんえん 延々 形動2: +えんか 演歌 名1: +えんか 塩化 代4: +えんかい 宴会 名3: +えんかい 遠海 名1: +えんかい 沿海 名1: +えんかく 沿革 名1: +えんかく 遠隔 名1: +えんかくち 遠隔地 名1: +えんかつ 円滑 名8: +えんがる 遠軽 地名: +えんがわ 縁側 名1: +えんがん 沿岸 名1: +えんき 延期 名6: +えんき 塩基 名1: +えんきょり 遠距離 名1: +えんきん 遠近 名1: +えんぎ 演技 名6: +えんけい 円形 名1: +えんげい 園芸 名1: +えんげい 演芸 名1: +えんげき 演劇 名1: +えんこ 縁故 名1: +えんこ 円弧 名1: +えんこーだ エンコーダ 代1: +えんこーでぃんぐ エンコーディング 代1: +えんこーど エンコード 名6: +えんこん 怨恨 名1: +えんご 援護 名7: +えんさん 塩酸 名1: +えんざん 演算 名6: +えんざん 塩山 地名: +えんざんし 演算子 代1: +えんし 遠視 名1: +えんしゅう 演習 名6: +えんしゅう 円周 名1: +えんしゅつ 演出 名6: +えんしょう 延焼 名6: +えんしんりょく 遠心力 名1: +えんじ 園児 代1: +えんじにあ エンジニア 名1: +えんじゃ 縁者 名1: +えんじゅく 円熟 名6: +えんじょ 援助 名7: +えんじょい エンジョイ 代4: +えんじょう 炎上 名6: +えんじん エンジン 名1: +えんじん 円陣 名1: +えんすい 円錐 名1: +えんせい 遠征 名6: +えんせん 沿線 名1: +えんぜつ 演説 名6: +えんそう 演奏 名6: +えんそく 遠足 名6: +えんたー エンター 名1: +えんたーていめんと エンターテイメント 名1: +えんたーぷらいず エンタープライズ 名1: +えんたい 延滞 名6: +えんたく 円卓 名1: +えんだか 円高 名1: +えんだん 縁談 名1: +えんだん 演壇 名1: +えんちゃく 延着 名6: +えんちゅう 円柱 名1: +えんちょう 延長 名6: +えんちょう 園長 名1: +えんちょく 鉛直 名8: +えんてんか 炎天下 名1: +えんでぃんぐ エンディング 名1: +えんとう 円筒 名1: +えんとつ 煙突 名1: +えんとり エントリ 名1: +えんとりー エントリー 名6: +えんとろぴー エントロピー 名1: +えんど エンド 名1: +えんどう 沿道 名1: +えんどう 遠藤 苗字: +えんにち 縁日 名1: +えんばん 円盤 名1: +えんぴつ 鉛筆 名1: +えんぶん 塩分 名1: +えんべつ 遠別 地名: +えんぽう 遠方 名1: +えんまく 煙幕 名1: +えんまん 円満 名8: +えんむすび 縁結び 代4: +えんめい 延命 名1: +えんやす 円安 名1: +えんよう 遠洋 名1: +えんよう 援用 名6: +えんりょ 遠慮 名7: +えんろ 遠路 名1: +お 尾 代1: +お お 接頭1:カ五5:ラ五3: +お 御 接頭1: +お 置 カ五7: +お 押 サ五7: +お 推 サ五7: +お 追 ワ五5: +お 負 ワ五1: +お 居 ラ五3: +お 折 ラ五7: +お 織 ラ五7: +お 緒 代1: +お 悪 単漢: +お 苧 単漢: +お 於 単漢: +お 汚 単漢: +お 小 単漢: +お 男 単漢: +お 雄 単漢: +おーけすとら オーケストラ 名1: +おーすとらりあ オーストラリア 地名: +おーすとりあ オーストリア 地名: +おーだー オーダー 名6: +おーでぃお オーディオ 名1: +おーと オート 名1: +おーとばい オートバイ 名1: +おーとまとん オートマトン 名1: +おーとめーしょん オートメーション 名4: +おーなー オーナー 名1: +おーばー オーバー 名6: +おーばーらっぷ オーバーラップ 代4: +おーぷん オープン 名6: +おーる オール 名1: +おあしす オアシス 名1: +おい おい 感動: +おい 老い 一段3: +おい 甥 代1: +おい 笈 単漢: +おいかけ 追いかけ 一段3: +おいかわ 及川 苗字: +おいかわ 追川 苗字: +おいけ 御池 地名: +おいこ 追い越 サ五7: +おいこ 追い込 マ五7: +おいこ 追いこ サ五7: +おいこ 追いこ マ五7: +おいし おいし 形5: +おいし 美味し 形5: +おいしげ 生い茂 ラ五1: +おいたち 生い立ち 代1: +おいたて 追い立て 一段3: +おいたて 追いたて 一段3: +おいだ 追い出 サ五7: +おいつ 追い付 カ五7: +おいつめ 追い詰め 一段3: +おいて おいて 代6: +おいてきぼり おいてきぼり 名1: +おいで おいで 代1: +おいぬ 追い抜 カ五7: +おいはら 追い払 ワ五5: +おいもとめ 追い求め 一段1: +おいる オイル 名1: +おいわけ 追分 地名: +おう 王 代1: +おう 応 ザ変: +おう 凹 単漢: +おう 央 単漢: +おう 奥 単漢: +おう 往 単漢: +おう 押 単漢: +おう 旺 単漢: +おう 横 単漢: +おう 欧 単漢: +おう 殴 単漢: +おう 翁 単漢: +おう 襖 単漢: +おう 鴬 単漢: +おう 鴎 単漢: +おう 黄 単漢: +おう 鴨 単漢: +おう 皇 単漢: +おう 姶 単漢: +おう 桜 単漢: +おう 應 単漢: +おうい 王位 名1: +おういつ 横溢 名6: +おういん 押印 名7: +おうう 奥羽 地名: +おうえん 応援 名6: +おうおう 往々 副5: +おうか 欧化 代4: +おうか 押下 代4: +おうかくまく 横隔膜 名1: +おうかん 往還 名1: +おうかん 王冠 名1: +おうがい 鴎外 名前: +おうきゅう 応急 名1: +おうきゅう 王宮 名1: +おうぎ 扇 代1: +おうこう 横行 名6: +おうこく 王国 名1: +おうごん 黄金 名1: +おうさか 逢坂 地名: +おうさま 王様 代1: +おうしざ 牡牛座 代1: +おうしつ 王室 名1: +おうしゅう 応酬 名6: +おうしゅう 押収 名6: +おうしゅう 欧州 名1: +おうしょう 王将 名1: +おうしょく 黄色 名1: +おうしん 往信 名6: +おうしん 往診 名6: +おうじ 王子 代1: +おうじ 王寺 地名: +おうじゃ 王者 名1: +おうじょう 往生 名6: +おうせい 旺盛 形動4: +おうせつ 応接 名6: +おうたい 応対 名6: +おうだく 応諾 名6: +おうだん 横断 名6: +おうち 相知 地名: +おうちゃく 横着 代5: +おうちょう 王朝 名1: +おうて 王手 名1: +おうてん 横転 代4: +おうとう 応答 名6: +おうとう 大塔 地名: +おうとつ 凹凸 名1: +おうどう 王道 名1: +おうなつ 押捺 名6: +おうねん 往年 名1: +おうひ 王妃 名1: +おうふう 欧風 名1: +おうふく 往復 名6: +おうぶん 欧文 名1: +おうべい 欧米 名4: +おうぼ 応募 名6: +おうぼう 横暴 名8: +おうみ 近江 地名: +おうみ 青海 地名: +おうみはちまん 近江八幡 地名: +おうむ 鸚鵡 名1: +おうむ 雄武 地名: +おうむ 王蟲 名1: +おうめ 青梅 地名: +おうよう 応用 名6: +おうら 邑楽 地名: +おうらい 往来 名6: +おうりょう 横領 名6: +おうろ 往路 名1: +おえ 終え 一段1: +おえ 麻植 地名: +おお 大 接頭1: +おお 多 形6: +おお 被 ワ五3: +おお 覆 ワ五3: +おお おお 感動: +おおあさ 大朝 地名: +おおあざ 大字 名1: +おおあみしらさと 大網白里 地名: +おおあめ 大雨 名1: +おおあらい 大洗 地名: +おおい 大井 地名: +おおい 大飯 地名: +おおいがわ 大井川 地名: +おおいし 大石 苗字: +おおいしだ 大石田 地名: +おおいずみ 大泉 苗字: +おおいそ 大磯 地名: +おおいそぎ 大急ぎ 代5: +おおいた 大分 地名: +おおいなる 大いなる 連体: +おおいに 大いに 副1: +おおいり 大入 代1: +おおうだ 大宇陀 地名: +おおうち 大内 苗字: +おおうちやま 大内山 地名: +おおうら 大浦 地名: +おおうりだし 大売出し 名1: +おおえ 大江 苗字: +おおえ 大江 地名: +おおおか 大岡 苗字: +おおおかやま 大岡山 地名: +おおかぜ 大風 名1: +おおかた 大方 代6: +おおかみ 狼 代1: +おおかわ 大川 苗字: +おおかわ 大川 地名: +おおが 大賀 苗字: +おおがかり 大掛かり 代5: +おおがかり 大がかり 代5: +おおがき 大垣 苗字: +おおがき 大垣 地名: +おおがき 大柿 地名: +おおがた 大型 名4: +おおがた 大形 名4: +おおがた 大潟 地名: +おおがた 大方 地名: +おおがたき 大型機 名1: +おおがわら 大河原 苗字: +おおがわら 大河原 地名: +おおき 大き 形6: +おおき 大木 苗字: +おおきな 大きな 連体: +おおぎみ 大宜味 地名: +おおく 多く 代6: +おおくち 大口 地名: +おおくぼ 大久保 苗字: +おおくぼ 大久保 地名: +おおくま 大熊 苗字: +おおくま 大隈 苗字: +おおくら 大蔵 名1: +おおくら 大倉 苗字: +おおくらしょう 大蔵省 名1: +おおくらやま 大倉山 地名: +おおくわ 大桑 地名: +おおぐち 大口 名1: +おおげさ 大げさ 形動1: +おおこうち 大河内 苗字: +おおこうち 大河内 地名: +おおご 大胡 苗字: +おおご 大胡 地名: +おおごえ 大声 代1: +おおごえ 大越 地名: +おおさ 大佐 地名: +おおさか 大阪 地名: +おおさかふ 大阪府 県区: +おおさき 大崎 苗字: +おおさき 大崎 地名: +おおさと 大里 苗字: +おおさと 大里 地名: +おおさと 大郷 地名: +おおさわ 大沢 苗字: +おおさわ 大沢 地名: +おおさわぎ 大騒ぎ 代4: +おおさわの 大沢野 地名: +おおざっぱ 大雑把 形動1: +おおざっぱ おおざっぱ 形動1: +おおざと 大里 地名: +おおしか 大鹿 苗字: +おおしか 大鹿 地名: +おおしま 大島 苗字: +おおしま 大島 地名: +おおじ 王寺 地名: +おおすか 大須賀 地名: +おおすが 大須賀 苗字: +おおすじ 大筋 名1: +おおすみ 大角 苗字: +おおすみ 大隅 苗字: +おおすみ 大隅 地名: +おおず 大洲 地名: +おおせ 仰せ 代1: +おおせつか 仰せつか ラ五1: +おおせと 大瀬戸 地名: +おおぜい 大勢 名1: +おおぜき 大関 名1: +おおぞら 大空 名1: +おおた 太田 苗字: +おおた 太田 地名: +おおた 大田 苗字: +おおたき 王滝 地名: +おおたき 大多喜 地名: +おおたき 大滝 苗字: +おおたけ 大竹 苗字: +おおたけ 大竹 地名: +おおたに 大谷 苗字: +おおたま 大玉 地名: +おおたわら 大田原 地名: +おおだ 大田 地名: +おおだい 大台 名1: +おおだか 大高 苗字: +おおだて 大館 地名: +おおち 邑智 地名: +おおつ 大津 地名: +おおつか 大塚 苗字: +おおつき 大月 苗字: +おおつき 大月 地名: +おおつき 大槻 苗字: +おおつち 大槌 地名: +おおつぼ 大坪 苗字: +おおづ 大津 地名: +おおづめ 大詰め 名1: +おおて 大手 名1: +おおで 大手 名1: +おおとう 大塔 地名: +おおとう 大任 地名: +おおとね 大利根 地名: +おおとも 大友 苗字: +おおとよ 大豊 地名: +おおとり 鳳 苗字: +おおとり 鵬 苗字: +おおとり 鴻 単漢: +おおどおり 大通り 名1: +おおなみ 大波 名1: +おおにし 大西 苗字: +おおぬき 大貫 苗字: +おおぬま 大沼 苗字: +おおぬま 大沼 地名: +おおねじめ 大根占 地名: +おおの 大野 苗字: +おおの 大野 地名: +おおのじょう 大野城 地名: +おおのはら 大野原 地名: +おおのみ 大野見 地名: +おおはし 大橋 苗字: +おおはた 大畑 苗字: +おおはた 大畑 地名: +おおはば 大幅 名8: +おおはら 大原 苗字: +おおはら 大原 地名: +おおはる 大治 地名: +おおば 大場 苗字: +おおば 大庭 苗字: +おおばたけ 大畠 地名: +おおばやし 大林 苗字: +おおばん 大判 名1: +おおひと 大仁 地名: +おおひら 大衡 地名: +おおひら 大平 苗字: +おおびけ 大引け 名1: +おおふな 大船 苗字: +おおふな 大船 地名: +おおふなと 大船渡 地名: +おおぶ 大府 地名: +おおほ 大穂 地名: +おおま 大間 地名: +おおまか 大まか 形動4: +おおまがり 大曲 地名: +おおまち 大町 苗字: +おおまち 大町 地名: +おおまま 大間々 地名: +おおみしま 大三島 地名: +おおみず 大水 名1: +おおみそか 大晦日 名1: +おおみや 大宮 苗字: +おおみや 大宮 地名: +おおむかし 大昔 代1: +おおむた 大牟田 地名: +おおむね おおむね 代6: +おおむね 概ね 代6: +おおむら 大村 苗字: +おおむら 大村 地名: +おおめ 大目 名1: +おおもじ 大文字 名1: +おおもの 大物 名1: +おおもり 大森 苗字: +おおもり 大森 地名: +おおもり 大盛り 代1: +おおや 大家 代2: +おおや 大屋 苗字: +おおや 大谷 苗字: +おおや 大矢 苗字: +おおやけ 公 代1: +おおやの 大矢野 地名: +おおやま 大山 苗字: +おおやま 大山 地名: +おおやまざき 大山崎 地名: +おおやまだ 大山田 地名: +おおゆき 大雪 名1: +おおよそ おおよそ 代6: +おおよど 大淀 苗字: +おおよど 大淀 地名: +おおらか おおらか 形動4: +おおわだ 大和田 苗字: +おおわに 大鰐 地名: +おおわらい 大笑い 代4: +おか 岡 苗字: +おか 丘 苗字: +おか 侵 サ五1: +おか 犯 サ五3: +おか 冒 サ五3: +おか 阜 単漢: +おかあさま お母様 代1: +おかがき 岡垣 地名: +おかげ おかげ 代1: +おかざき 岡崎 苗字: +おかざき 岡崎 地名: +おかし おかし 形5: +おかしな おかしな 連体: +おかじま 岡島 苗字: +おかず おかず 代1: +おかだ 岡田 苗字: +おかちまち 御徒町 地名: +おかどちがい お門違い 代5: +おかの 岡野 苗字: +おかはる 岡原 地名: +おかべ 岡部 苗字: +おかむら 岡村 苗字: +おかもと 岡本 苗字: +おかや 岡谷 地名: +おかやす 岡安 苗字: +おかやま 岡山 苗字: +おかやま 岡山 地名: +おかりな オカリナ 名1: +おかん 悪寒 名1: +おが 男鹿 地名: +おが 拝 マ五8: +おがさ 小笠 苗字: +おがさ 小笠 地名: +おがさわら 小笠原 地名: +おがさわら 小笠原 苗字: +おがた 緒方 苗字: +おがた 尾形 苗字: +おがち 雄勝 地名: +おがつ 雄勝 地名: +おがの 小鹿野 地名: +おがわ 小川 苗字: +おがわ 小川 名1: +おがわ 小河 苗字: +おがわ 緒川 地名: +おがわな 小川名 苗字: +おき 沖 代1: +おき 起き 一段2: +おき 隠岐 地名: +おきあい 沖合い 名1: +おきあが 起き上が ラ五7: +おきかえ 置き換え 一段3: +おきかえ 置換え 一段3: +おきざり 置き去り 代1: +おきた 沖田 苗字: +おきな 翁 代1: +おきなわ 沖縄 地名: +おきみ 沖美 地名: +おきもの 置物 名1: +おきゃくさま お客様 代1: +おきわすれ 置き忘れ 一段3: +おぎ 小木 苗字: +おぎ 小木 地名: +おぎ 小城 地名: +おぎ 荻 単漢: +おぎくぼ 荻窪 苗字: +おぎくぼ 荻窪 地名: +おぎた 荻田 苗字: +おぎな 補 ワ五7: +おぎの 荻野 苗字: +おぎのめ 荻野目 苗字: +おぎはら 荻原 苗字: +おぎはら 荻原 地名: +おぎわら 荻原 苗字: +おく 奥 代1: +おく 億 数詞: +おく 送 ラ五8: +おく 贈 ラ五8: +おく 邑久 地名: +おく 臆 サ変:サ五1: +おく 屋 単漢: +おく 憶 単漢: +おくい 奥井 苗字: +おくがい 屋外 名1: +おくぎ 奥義 代1: +おくさま 奥様 代1: +おくさわ 奥沢 苗字: +おくしり 奥尻 地名: +おくじょう 屋上 名1: +おくそく 憶測 名6: +おくそこ 奥底 名1: +おくたま 奥多摩 地名: +おくだ 奥田 苗字: +おくち 奥地 名1: +おくつ 奥津 苗字: +おくつ 奥津 地名: +おくない 屋内 名1: +おくの 奥野 苗字: +おくば 奥歯 代1: +おくびょう 臆病 名8: +おくむら 奥村 苗字: +おくやま 奥山 苗字: +おくゆかし 奥ゆかし 形5: +おくゆき 奥行き 代1: +おくら 遅ら サ五5: +おくりこ 送り込 マ五7: +おくりさき 送り先 名1: +おくりじょう 送り状 名1: +おくりだ 送り出 サ五7: +おくりとどけ 送り届け 一段3: +おくりぬし 送り主 名1: +おくりむかえ 送り迎え 代4: +おくりもの 贈物 代3: +おくれ 遅れ 接尾1:一段2: +おくれ 後れ 一段3: +おくればせながら 遅ればせながら 副1: +おぐち 小口 苗字: +おぐに 小国 苗字: +おぐに 小国 地名: +おぐら 小倉 苗字: +おぐら 小倉 地名: +おぐら 小椋 苗字: +おぐり 小栗 苗字: +おぐろ 小黒 苗字: +おけ 桶 代1: +おけがわ 桶川 地名: +おけと 置戸 地名: +おこ 起こ サ五7:ラ五7: +おこ 怒 ラ五6: +おこ 興 サ五7:ラ五7: +おこがまし おこがまし 形2: +おこさま お子様 代1: +おこさん お子さん 代1: +おこた 怠 ラ五7: +おこっぺ 興部 地名: +おこな 行 ワ五7: +おこな 行な ワ五7: +おこのぎ 小此木 苗字: +おご おご ラ五7: +おごおり 小郡 地名: +おごせ 越生 地名: +おごそか 厳か 形動4: +おさ 長 代1: +おさえ 押さえ 一段3: +おさえ 抑え 一段3: +おさえ 押え 一段3: +おさか 小坂 苗字: +おさか 小坂 地名: +おさげ おさげ 代1: +おさだ 長田 苗字: +おさな 幼 形3: +おさなご 幼子 代1: +おさふね 長船 苗字: +おさふね 長船 地名: +おさま 治ま ラ五3: +おさま 収ま ラ五3: +おさま 修ま ラ五3: +おさま 納ま ラ五3: +おさむ 治 名前: +おさむ 修 名前: +おさむ 治虫 名前: +おさめ 収め 一段2: +おさめ 納め 接尾1:一段2: +おさめ 修め 一段2: +おさめ 治め 一段2: +おざき 尾崎 苗字: +おざく 小作 地名: +おざわ 小沢 苗字: +おし 唖 代1: +おし 惜し 形5:マ五1: +おしあげ 押し上げ 一段3: +おしい 押し入 ラ五1: +おしいれ 押入 名1: +おしうり 押売 名6: +おしえ 教え 一段4: +おしか 牡鹿 地名: +おしかえ 押し返 サ五7: +おしかけ 押しかけ 一段3: +おしき 押し切 ラ五7: +おしこ 押し込 マ五3: +おしこめ 押し込め 一段1: +おしだ 押し出 サ五7: +おしつけ 押し付け 一段3: +おしつけ 押しつけ 一段3: +おしつま 押し詰ま ラ五1: +おしとお 押し通 サ五7: +おしどり 鴛鴦 名1: +おしの 忍野 地名: +おしのけ 押し退け 一段1: +おしはか 推し量 ラ五1: +おしま 渡島 地名: +おしみず 押水 地名: +おしみな 惜しみな 形1: +おしゃべり おしゃべり 代4:形動1: +おしゃまんべ 長万部 地名: +おしゃれ おしゃれ 代4:形動1: +おしょう 和尚 代1: +おしよせ 押し寄せ 一段1: +おしろい 白粉 代1: +おしろすこーぷ オシロスコープ 名1: +おじ 叔父 代2: +おじ 伯父 代2: +おじ 小父 代2: +おじいさん おじいさん 代1: +おじか 小値賀 地名: +おじま 尾島 苗字: +おじょうさま お嬢様 代1: +おじょうさん お嬢さん 代1: +おじょく 汚辱 名1: +おす 雄 代1: +おす 雄 接頭1: +おす 牡 代1: +おす 牡 接頭1: +おす ♂ 単漢: +おすい 汚水 名1: +おせあにあ オセアニア 名1: +おせん 汚染 名6: +おぜ 尾瀬 地名: +おそ 遅 形6: +おそ 襲 ワ五5: +おそざき 遅咲き 代1: +おそらく 恐らく 副1: +おそらくは 恐らくは 副1: +おそれ 恐れ 一段3: +おそれ 虞 代1: +おそれい 恐れ入 ラ五1: +おそろし 恐ろし 形7: +おそわ 教わ ラ五2: +おそん 汚損 名6: +おた 織田 地名: +おたがい お互い 代1: +おたべ 小田部 苗字: +おたり 小谷 地名: +おたる 小樽 地名: +おだ 織田 苗字: +おだ 小田 苗字: +おだ 小田 地名: +おだか 小高 苗字: +おだきゅう 小田急 企業: +おだく 汚濁 名6: +おだじま 小田島 苗字: +おだて 煽て 一段3: +おだやか 穏やか 形動4: +おだわら 小田原 地名: +おち 落ち 接尾1:一段1: +おち 越智 苗字: +おち 越智 地名: +おち 越知 地名: +おちあ 落ち合 ワ五5: +おちあい 落合 苗字: +おちあい 落合 地名: +おちい 陥 ラ五5: +おちこ 落ち込 マ五3: +おちつ 落ち着 カ五7: +おちど 落度 代1: +おちば 落葉 名1: +おちぶれ 落ちぶれ 一段3: +おちゃのみず お茶の水 地名: +おちゃのみず 御茶ノ水 地名: +おぢや 小千谷 地名: +おっこち 落っこち 一段1: +おっしゃ おっしゃ ラ五7: +おって 追って 代6: +おって 追っ手 代1: +おって 追手 代1: +おっと 夫 代1: +おつ 乙 代5: +おてん 汚点 名1: +おでら 小寺 苗字: +おでん おでん 代1: +おと 音 名1: +おと 落と サ五7: +おと 劣 ラ五1: +おといねっぷ 音威子府 地名: +おとうと 弟 代2: +おとくに 乙訓 苗字: +おとくに 乙訓 地名: +おとこ 男 名1: +おとこで 男手 代1: +おとこのこ 男の子 代1: +おとさた 音沙汰 名1: +おとしいれ 陥れ 一段1: +おとしもの 落し物 代1: +おとずれ 訪れ 一段3: +おとづれ 訪れ 一段3: +おととい 一昨日 代6: +おととし 一昨年 代6: +おとな 大人 名8: +おとなげな 大人げな 形2: +おとなし おとなし 形6: +おとなし 大人し 形6: +おとふけ 音更 地名: +おとべ 乙部 苗字: +おとべ 乙部 地名: +おとめ 乙女 名1: +おとめざ 乙女座 代1: +おとろえ 衰え 一段3: +おとわ 音羽 苗字: +おとわ 音羽 地名: +おど 脅 サ五7: +おど 躍 ラ五5: +おど 踊 ラ五7: +おど おど ラ五7: +おどか 脅か サ五7: +おどろ 驚 カ五7: +おなか お腹 代1: +おながわ 女川 地名: +おなじ 同じ 代5:連体: +おなじく 同じく 副1: +おなじよう 同じよう 形動1: +おなにー オナニー 名1: +おなりもん 御成門 地名: +おに 鬼 代1: +おにし 鬼石 地名: +おにゆう 遠敷 地名: +おね 尾根 代1: +おの 斧 代1: +おの 小野 苗字: +おの 小野 地名: +おのえ 尾上 苗字: +おのおの 各々 代6: +おのがみ 小野上 地名: +おのざわ 小野沢 苗字: +おのずから 自ずから 副1: +おのずと 自ずと 副1: +おのだ 小野田 苗字: +おのだ 小野田 地名: +おのづか 小野塚 苗字: +おのでら 小野寺 苗字: +おのみち 尾道 地名: +おのれ 己 代1: +おはなし お話 代4: +おはよう おはよう 挨拶: +おはら 小原 苗字: +おば 叔母 代2: +おば 伯母 代2: +おば 小母 代2: +おばあさん おばあさん 代1: +おばけ お化け 代1: +おばた 小幡 苗字: +おばた 小幡 地名: +おばた 小畑 苗字: +おばた 小俣 地名: +おばなざわ 尾花沢 地名: +おばま 小浜 地名: +おばら 小原 苗字: +おひつじざ 牡羊座 代1: +おひとよし 御人好し 代5: +おび 帯び 一段1: +おび 帯 代1: +おびじょう 帯状 代1: +おびただし おびただし 形2: +おびひろ 帯広 地名: +おびやか 脅か サ五7: +おびら 小平 地名: +おふ オフ 代4: +おふぃす オフィス 名1: +おふせっと オフセット 名1: +おふれこ オフレコ 名1: +おぶじぇくと オブジェクト 名1: +おぶせ 小布施 地名: +おぶつ 汚物 名1: +おぷしょん オプション 名1: +おぷてぃまいず オプティマイズ 名1: +おぺら オペラ 名1: +おぺれーしょん オペレーション 名6: +おぺれーた オペレータ 名1: +おぺれーたー オペレーター 名1: +おぺれーてぃんぐ オペレーティング 名1: +おぼえ 覚え 一段3: +おぼえ 憶え 一段3: +おぼえ おぼえ 一段3: +おぼえがき 覚書 名1: +おぼし 思し 形1: +おぼつかな おぼつかな 形5: +おぼれ 溺れ 一段1: +おまえ お前 代2: +おまえざき 御前崎 地名: +おまけ おまけ 代4: +おまた 小俣 苗字: +おまわり お巡り 代2: +おみ 麻績 地名: +おみがわ 小見川 地名: +おむすび おむすび 代1: +おむにばす オムニバス 名1: +おむらいす オムライス 名1: +おめい 汚名 名1: +おめが Ω 代1: +おめでとう おめでとう 挨拶: +おめにかか お目にかか ラ五5: +おも 思 ワ五8: +おも 想 ワ五8: +おも 主 形動1: +おも 重 形8: +おも 面 単漢: +おもいあた 思い当た ラ五1: +おもいおこ 思い起こ サ五7: +おもいかえ 思い返 サ五7: +おもいき 思い切 ラ五7: +おもいこ 思い込 マ五7: +おもいし 思い知 ラ五7: +おもいた 思い立 タ五5: +おもいだ 思い出 サ五7: +おもいだ 思いだ サ五7: +おもいちがい 思い違い 代4: +おもいつ 思い付 カ五7: +おもいつ 思いつ カ五7: +おもいつめ 思い詰め 一段3: +おもいで 思い出 名1: +おもいで 想い出 名1: +おもいなお 思い直 サ五7: +おもいのこ 思い残 サ五7: +おもいや 思いや ラ五3: +おもおもし 重々し 形3: +おもかげ 面影 代1: +おもくるし 重苦し 形3: +おもご 面河 地名: +おもしろ おもしろ 形8: +おもしろ 面白 形8: +おもた 重た 形5: +おもて 表 代1: +おもて 面 代1: +おもてがき 表書き 代4: +おもてがわ 表側 名1: +おもてぐち 表口 名1: +おもてごう 表郷 地名: +おもてさんどう 表参道 地名: +おもてむき 表向き 名1: +おもに 重荷 代1: +おものがわ 雄物川 地名: +おもむ 赴 カ五3: +おもむき 趣 代1: +おもむろに おもむろに 副1: +おもや 母屋 代1: +おもわく 思惑 名1: +おもわし 思わし 形1: +おもわず 思わず 副1: +おもん 重ん ザ変: +おもんぱか 慮 ラ五1: +おや おや 感動: +おや 親 名1: +おやかた 親方 名1: +おやこ 親子 名1: +おやこうこう 親孝行 代5:サ変: +おやじ 親父 代2: +おやすみ おやすみ 代1: +おやだま 親玉 代1: +おやぶん 親分 名1: +おやべ 小矢部 地名: +おやま 小山 苗字: +おやま 小山 地名: +おやもと 親元 代1: +おやゆび 親指 代1: +おゆ お湯 代1: +およ 泳 ガ五8: +およ 及 バ五5: +およそ およそ 代6: +および および 接続: +および 及び 接続: +およぼ 及ぼ サ五5: +おらんうーたん オランウータン 名1: +おらんだ オランダ 地名: +おり 下り 一段2: +おり 降り 一段2: +おり 折 代1: +おり 澱 代1: +おりあ 折り合 ワ五7: +おりえんと オリエント 名1: +おりおり 折々 代6: +おりかえ 折り返 サ五7: +おりかさな 折り重な ラ五3: +おりがみ 折り紙 代1: +おりこ 折り込 マ五7: +おりこ 織り込 マ五7: +おりしも 折しも 副1: +おりじなる オリジナル 名8: +おりたた 折り畳 マ五7: +おりはら 折原 苗字: +おりめ 折り目 名1: +おりもの 織物 名1: +おりんぱす オリンパス 企業: +おりんぴっく オリンピック 名1: +おれ 俺 代1: +おれい お礼 代4: +おれい 御礼 代4: +おれせん 折れ線 名1: +おれまが 折れ曲が ラ五7: +おれんじ オレンジ 名1: +おろ 下ろ サ五7: +おろ 降ろ サ五7: +おろ 卸 サ五7: +おろか 愚か 形動4: +おろし 卸 代1: +おろしうり 卸売 名6: +おろしね 卸値 名1: +おろそか 疎か 形動1: +おわ 終わ ラ五7: +おわせ 尾鷲 地名: +おわり 終 代1: +おわり 尾張 地名: +おわりあさひ 尾張旭 地名: +おん 恩 代1: +おん 音 代1: +おん オン 代4: +おん 遠 単漢: +おん 温 単漢: +おん 穏 単漢: +おん 御 単漢: +おんいん 音韻 名1: +おんかい 音階 名1: +おんかん 音感 名1: +おんが 遠賀 地名: +おんがえし 恩返し 代4: +おんがく 音楽 名1: +おんきゅう 恩給 名1: +おんきょう 音響 名1: +おんけい 恩恵 名1: +おんけん 穏健 名8: +おんこ 恩顧 名1: +おんこう 温厚 名8: +おんし 恩師 名1: +おんしつ 温室 名1: +おんしつ 音質 名1: +おんしゃ 御社 名1: +おんしょう 温床 名1: +おんしん 音信 名1: +おんじゅく 御宿 苗字: +おんじゅく 御宿 地名: +おんじょう 温情 名1: +おんじん 恩人 名1: +おんすい 温水 名1: +おんせい 音声 名1: +おんせつ 音節 名1: +おんせん 温泉 名1: +おんぞうし 御曹司 名1: +おんぞん 温存 名6: +おんたい 温帯 名1: +おんだ 恩田 苗字: +おんだん 温暖 名8: +おんち 音痴 名1: +おんちゅう 御中 接尾1: +おんてい 音程 名1: +おんとう 穏当 形動1: +おんど 温度 名1: +おんど 音頭 名1: +おんど 音戸 地名: +おんどけい 温度計 名1: +おんな 女 名1: +おんな 恩納 地名: +おんなじ おんなじ 形動1:連体: +おんなのこ 女の子 代1: +おんねん 怨念 名1: +おんぱ 音波 名1: +おんびん 穏便 形動4: +おんびん 音便 名1: +おんぶ おんぶ 代4: +おんぷ 音符 名1: +おんべつ 音別 地名: +おんみつ 隠密 名8: +おんよみ 音読み 代4: +おんらいん オンライン 名1: +おんりー オンリー 名1: +おんりょう 音量 名1: +おんれい 御礼 名6: +おんわ 温和 名8: +おんわ 穏和 名8: +か 書 カ五8: +か 欠 カ五3: +か 掻 カ五7: +か 描 カ五8: +か 貸 サ五8: +か 買 ワ五8: +か 飼 ワ五6: +か 勝 タ五8: +か 噛 マ五7: +か 刈 ラ五7: +か 狩 ラ五7: +か 苅 ラ五7: +か 駆 ラ五3: +か 日 助数2: +か 課 助数:接尾1:サ五5:サ変: +か 蚊 代1: +か 香 代1: +か 可 代1: +か 火 代1: +か 家 接尾1: +か 価 接尾1: +か 下 接尾1: +か 化 接尾1:サ五1:サ変: +か 科 接尾1:サ五1:サ変: +か 架 サ変: +か 歌 代1: +か 渦 単漢: +か 果 単漢: +か 加 単漢: +か 嫁 単漢: +か 仮 単漢: +か 何 単漢: +か 伽 単漢: +か 佳 単漢: +か 嘉 単漢: +か 夏 単漢: +か 寡 単漢: +か 暇 単漢: +か 河 単漢: +か 珂 単漢: +か 禍 単漢: +か 禾 単漢: +か 稼 単漢: +か 箇 単漢: +か 花 単漢: +か 苛 単漢: +か 茄 単漢: +か 荷 単漢: +か 華 単漢: +か 菓 単漢: +か 蝦 単漢: +か 嘩 単漢: +か 貨 単漢: +か 迦 単漢: +か 過 単漢: +か 霞 単漢: +か 靴 単漢: +か 卦 単漢: +か 袈 単漢: +か 鹿 単漢: +か 彼 単漢: +か 掛 単漢: +かー カー 名1: +かーそる カーソル 名1: +かーとりっじ カートリッジ 名1: +かーど カード 名1: +かーにばる カーニバル 名1: +かーねる カーネル 名1: +かーぶ カーブ 代4: +かーる カール 代4: +かあさん 母さん 名2: +かあちゃん 母ちゃん 名2: +かい 貝 代1: +かい 下位 代1: +かい 甲斐 代1: +かい 回 代1:助数: +かい 階 代1: +かい 階 助数2: +かい 会 代3: +かい 会 サ変:サ五5: +かい 海 接尾1: +かい 界 接尾1: +かい 介 サ変:サ五5: +かい 怪 代1: +かい 解 代4: +かい 塊 代1: +かい 開 単漢: +かい 絵 単漢: +かい 壊 単漢: +かい 廻 単漢: +かい 快 単漢: +かい 悔 単漢: +かい 恢 単漢: +かい 懐 単漢: +かい 戒 単漢: +かい 拐 単漢: +かい 改 単漢: +かい 魁 単漢: +かい 晦 単漢: +かい 械 単漢: +かい 灰 単漢: +かい 皆 単漢: +かい 芥 単漢: +かい 潰 単漢: +かい 蟹 単漢: +かいあく 改悪 名6: +かいあげ 買い上げ 一段4: +かいいき 海域 名1: +かいいれ 買い入れ 一段4: +かいいん 会員 名1: +かいいん 改印 代4: +かいうん 開運 名7: +かいうん 海運 名1: +かいえん 開園 名6: +かいえん 開演 名7: +かいえん 開宴 名7: +かいおうせい 海王星 名1: +かいか 開化 名6: +かいか 階下 名1: +かいか 開花 名6: +かいかい 開会 名6: +かいかえ 買い替え 一段3: +かいかく 改革 名7: +かいかけ 買掛 名1: +かいかつ 快活 形動4: +かいかん 会館 名1: +かいかん 快感 名1: +かいかん 開館 代4: +かいかん 会舘 名1: +かいが 絵画 名1: +かいがい 海外 名1: +かいがら 貝殻 代1: +かいがん 海岸 名1: +かいがん 開眼 代4: +かいがんせん 海岸線 名1: +かいき 会期 名1: +かいき 皆既 名1: +かいき 回帰 名6: +かいき 快気 名6: +かいき 怪奇 名8: +かいき 回忌 助数2: +かいき 買い切 ラ五7: +かいきしょく 皆既食 名1: +かいきせん 回帰線 名1: +かいきゅう 階級 名1:助数2: +かいきゅう 懐旧 名6: +かいきょ 快挙 名1: +かいきょう 海峡 名1: +かいきょう 回教 名1: +かいきょく 開局 名7: +かいきん 解禁 名6: +かいきん 皆勤 名6: +かいぎ 会議 名6: +かいぎ 懐疑 名6: +かいぎゃく 諧謔 名1: +かいぎょう 開業 名7: +かいぎょう 改行 名6: +かいぎょうい 開業医 名1: +かいぐん 海軍 名1: +かいけい 会計 名2: +かいけつ 解決 名6: +かいけつさく 解決策 名1: +かいけん 会見 名6: +かいけん 改憲 名1: +かいげんれい 戒厳令 名1: +かいこ 解雇 名6: +かいこ 回顧 名6: +かいこ 懐古 名6: +かいこ 蚕 代1: +かいこ 買い込 マ五7: +かいこう 開口 名1: +かいこう 開校 名6: +かいこう 開港 名6: +かいこう 海港 名1: +かいこう 回航 名6: +かいこう 海溝 名1: +かいこう 邂逅 名6: +かいこん 悔恨 名6: +かいこん 開墾 名6: +かいご 介護 名7: +かいごう 会合 名6: +かいさい 開催 名7: +かいさく 改作 名6: +かいさつ 改札 名6: +かいさん 解散 名6: +かいさんぶつ 海産物 名1: +かいざい 介在 名6: +かいし 開始 名6: +かいし 会誌 名1: +かいしめ 買い占め 一段3: +かいしめ 買占め 名1: +かいしゃ 会社 名1: +かいしゃく 解釈 名6: +かいしゅう 回収 名6: +かいしゅう 改修 名6: +かいしょう 解消 名6: +かいしょう 甲斐性 名1: +かいしょう 改称 名6: +かいしょく 会食 名6: +かいしょく 解職 名6: +かいしん 会心 名1: +かいしん 改心 名7: +かいしん 改新 名6: +かいしん 回診 名6: +かいじ 開示 名6: +かいじゅう 怪獣 名1: +かいじょ 解除 名7: +かいじょう 会場 名1: +かいじょう 海上 名1:地名: +かいじょう 開場 名6: +かいじょう 階上 名1: +かいじょう 階乗 名1: +かいすい 海水 名1: +かいすいよく 海水浴 名1: +かいすう 回数 名1: +かいせ 貝瀬 苗字: +かいせい 改正 名6: +かいせい 改姓 名6: +かいせい 快晴 名1: +かいせい 開成 地名: +かいせい 回生 助数2: +かいせき 解析 名6: +かいせき 会席 名1: +かいせつ 解説 名7: +かいせつ 開設 名6: +かいせつ 回折 代4: +かいせん 回線 名1: +かいせん 改選 名6: +かいせん 回旋 名6: +かいせん 会戦 名6: +かいせん 開戦 名6: +かいせん 回戦 助数: +かいぜん 改善 名6: +かいそ 改組 名6: +かいそう 改装 名6: +かいそう 階層 名1: +かいそう 回想 名6: +かいそう 回送 名6: +かいそう 快走 名6: +かいそう 会葬 名6: +かいそう 海草 名1: +かいそう 海草 地名: +かいそう 海藻 名1: +かいそく 快速 名8: +かいそく 会則 名1: +かいぞう 改造 名6: +かいぞく 海賊 名1: +かいた 頴田 地名: +かいた 海田 地名: +かいたい 解体 名6: +かいたく 開拓 名6: +かいだ 開田 地名: +かいだい 改題 代4: +かいだい 解題 名1: +かいだく 快諾 名7: +かいだめ 買い貯め 代4: +かいだん 会談 名6: +かいだん 階段 名1: +かいだん 怪談 名1: +かいちく 改築 名6: +かいちゅう 懐中 名6: +かいちゅう 海中 名1: +かいちょう 会長 代2: +かいちょう 快調 名8: +かいつう 開通 名6: +かいつけ 買付け 一段3: +かいづ 海津 地名: +かいづか 貝塚 苗字: +かいづか 貝塚 地名: +かいて 買い手 名1: +かいてい 改定 名6: +かいてい 改訂 名6: +かいてい 海底 名1: +かいてい 開廷 名6: +かいてき 快適 名8: +かいてん 回転 名6: +かいてん 開店 名7: +かいと 買い取 ラ五7: +かいとう 解答 名7: +かいとう 回答 名7: +かいとう 解凍 名6: +かいとう 会頭 名1: +かいどう 街道 名1: +かいどう 会堂 名1: +かいどく 解読 名7: +かいどく 買い得 名9: +かいなら 飼い慣ら サ五7: +かいなん 海難 名1: +かいなん 海南 地名: +かいにゅう 介入 名6: +かいにん 解任 名6: +かいにん 懐妊 名7: +かいぬし 飼い主 名1: +かいね 買値 名1: +かいはい 改廃 名6: +かいはつ 開発 名6: +かいはん 改版 名6: +かいばつ 海抜 名1: +かいばら 柏原 地名: +かいひ 会費 名1: +かいひ 回避 名6: +かいひょう 開票 名6: +かいひん 海浜 名1: +かいふ 回付 名6: +かいふ 海部 苗字: +かいふ 海部 地名: +かいふう 開封 名7: +かいふく 回復 名7: +かいふく 快復 名6: +かいぶつ 怪物 名1: +かいぶんしょ 怪文書 名1: +かいへい 開閉 名6: +かいへん 改変 名6: +かいへん 改編 名6: +かいほう 開放 名6: +かいほう 解放 名6: +かいほう 介抱 名7: +かいほう 会報 名1: +かいほう 解法 代4: +かいほう 快方 名1: +かいぼう 解剖 名6: +かいまく 開幕 名6: +かいまみ かいま見 一段1: +かいみん 快眠 名1: +かいむ 皆無 名8: +かいめい 解明 名6: +かいめい 改名 名6: +かいめつ 壊滅 名6: +かいめん 海面 名1: +かいめん 界面 名1: +かいもど 買い戻 サ五7: +かいもの 買物 名5: +かいもの 買いもの 名5: +かいもん 開門 名6: +かいもん 開聞 地名: +かいもんだけ 開聞岳 地名: +かいやく 解約 名6: +かいゆう 回遊 名6: +かいよう 海洋 名1: +かいよう 潰瘍 名1: +かいらく 快楽 名1: +かいらん 回覧 名7: +かいり 海里 名1:助数2: +かいり 浬 助数2: +かいり 乖離 名6: +かいりく 海陸 名1: +かいりゅう 海流 名1: +かいりょう 改良 名6: +かいろ 回路 名1: +かいろ 海路 名1: +かいろう 回廊 名1: +かいわ 会話 名6: +かいわい 界隈 名1: +かいん 下院 名1: +かうんた カウンタ 名1: +かうんと カウント 名6:助数2: +かえ 返 サ五8:ラ五7: +かえ 帰 サ五7:ラ五8: +かえ 変え 一段4: +かえ 代え 一段4: +かえ 換え 一段4: +かえ 替え 一段4: +かえ かえ 一段2: +かえって かえって 副1: +かえって 却って 副1: +かえで 楓 代1: +かえりざ 返り咲 カ五7: +かえりみ 顧み 一段1: +かえりみ 省み 一段1: +かえる 蛙 代1: +かえん 火炎 名1: +かお 顔 代3: +かお 香 ラ五1: +かお 薫 ラ五1: +かおあわせ 顔合せ 代4: +かおいろ 顔色 名1: +かおう 花王 企業: +かおう 鹿央 地名: +かおく 家屋 名1: +かおだち 顔立ち 代1: +かおぶれ 顔ぶれ 代1: +かおみしり 顔見知り 代1: +かおむけ 顔向け 代4: +かおやく 顔役 名1: +かおり 香織 名前: +かおる かおる 名前: +かおる 馨 名前: +かおる 薫 名前: +かおる 香 名前: +かか かか ラ五5: +かか 架か ラ五5: +かか 掛か ラ五5: +かか 係 ラ五7: +かか 欠か サ五5: +かか 懸か ラ五5: +かかえ 抱え 一段2: +かかく 価格 名1: +かかげ 掲げ 一段2: +かかぢ 香々地 地名: +かかみがはら 各務原 地名: +かかり 係 代1: +かかりいん 係員 名1: +かかりかん 係官 名1: +かかりちょう 係長 代2: +かかわ かかわ ラ五7: +かかわ 関わ ラ五7: +かかわ 係わ ラ五7: +かが かが マ五1: +かが 屈 マ五1: +かが 加賀 地名: +かが 加賀 苗字: +かがい 加害 名1: +かがい 課外 名1: +かがく 科学 名4: +かがく 化学 名4: +かがみ 鏡 名2: +かがみ 香我美 地名: +かがみいし 鏡石 地名: +かがみの 鏡野 地名: +かがや 輝 カ五7: +かがやかし 輝かし 形3: +かがわ 香川 苗字: +かがわ 香川 地名: +かき 下記 名1: +かき 夏期 名1: +かき 夏季 名1: +かき 火気 名1: +かき 花器 名1: +かき 牡蛎 代1: +かき 柿 代1: +かき 垣 代1: +かき 堵 単漢: +かき 蛎 単漢: +かきあげ 書き上げ 一段3: +かきあげ かき揚げ 一段3: +かきあつめ かき集め 一段3: +かきあらわ 書き表 サ五5: +かきいれ 書き入れ 一段3: +かきお 書き置 カ五3: +かきおと 書き落と サ五7: +かきかえ 書き換え 一段3: +かきかえ 書換え 名1: +かきかた 書き方 代1: +かきくだ 書き下 サ五7: +かきけ かき消 サ五5: +かきこ 書き込 マ五8: +かきざき 柿崎 苗字: +かきそえ 書き添え 一段2: +かきぞめ 書初め 名1: +かきたて 書き立て 一段1: +かきだ 書き出 サ五7: +かきつけ 書付け 一段3: +かきと 書き取 ラ五7: +かきとめ 書き留め 一段3: +かきとめ 書留 名1: +かきぬ 書き抜 カ五3: +かきぬま 柿沼 苗字: +かきね 垣根 代1: +かきのき 柿木 地名: +かきのこ 書き残 サ五7: +かきまぜ かき混ぜ 一段4: +かきまわ かき回 サ五7: +かきみだ かき乱 サ五7: +かきゅう 下級 名1: +かきゅう 火急 代5: +かきょう 佳境 名1: +かきょう 架橋 名1: +かきょう 華僑 名1: +かきよせ かき寄せ 一段1: +かきわけ かき分け 一段3: +かぎ 鍵 代1: +かぎ 鈎 代1: +かぎ 限 ラ五7: +かぎゃく 可逆 名1: +かぎょう 家業 名1: +かぎょう 稼業 名1: +かぎりな 限りな 形1: +かく 各 接頭5: +かく かく 代6: +かく 隠 サ五8: +かく 画 代1:助数2:サ五1: +かく 格 代1: +かく 核 代1: +かく 角 代1: +かく 郭 代1: +かく 劃 単漢: +かく 嚇 単漢: +かく 廓 単漢: +かく 拡 単漢: +かく 撹 単漢: +かく 殻 単漢: +かく 獲 単漢: +かく 確 単漢: +かく 穫 単漢: +かく 覚 単漢: +かく 赫 単漢: +かく 較 単漢: +かく 閣 単漢: +かく 隔 単漢: +かく 革 単漢: +かく 掴 単漢: +かく 鶴 単漢: +かく 塙 単漢: +かくあげ 格上げ 代4: +かくい 各位 接尾1: +かくいん 各員 名1: +かくう 架空 名8: +かくえき 各駅 名1: +かくか 各課 代1: +かくかい 各階 名1: +かくぎ 閣議 名1: +かくけん 各県 名1: +かくげつ 隔月 名1: +かくげん 格言 名1: +かくげん 確言 名7: +かくこう 各項 名1: +かくこう 各校 名1: +かくご 覚悟 名7: +かくさ 格差 名1: +かくさく 画策 名6: +かくさげ 格下げ 代4: +かくさん 拡散 名6: +かくさん 核酸 名1: +かくし 各紙 代1: +かくし 各市 代1: +かくしき 格式 名1: +かくしつ 確執 代4: +かくしつ 角質 名4: +かくしつ 各室 名1: +かくして かくして 接続: +かくしゃ 各社 代1: +かくしゅ 各種 名1: +かくしゅう 各週 名1: +かくしゅう 隔週 名1: +かくしょ 各所 名1: +かくしょ 各署 名1: +かくしょう 確証 名3: +かくしょうちょう 各省庁 名1: +かくしん 確信 名7: +かくしん 革新 名6: +かくしん 核心 名1: +かくじ 各自 名1: +かくじっけん 核実験 代3: +かくじつ 確実 名8: +かくじつ 隔日 名1: +かくじゅう 拡充 名6: +かくじん 各人 名1: +かくすう 画数 名1: +かくせいざい 覚醒剤 名1: +かくせんそう 核戦争 代1: +かくぜつ 隔絶 名6: +かくぜん 画然 形動2: +かくた 角田 苗字: +かくだ 角田 地名: +かくだい 拡大 名6: +かくだん 格段 代5: +かくち 各地 名1: +かくちょう 拡張 名6: +かくちょう 格調 名1: +かくつき 各月 名1: +かくづけ 格付け 一段1: +かくてい 確定 名6: +かくてん 各店 代1: +かくとう 格闘 名6: +かくとう 確答 名6: +かくとく 獲得 名6: +かくど 角度 名1: +かくど 確度 名1: +かくない 閣内 名1: +かくにん 確認 名7: +かくねん 隔年 名1: +かくのう 格納 名6: +かくのだて 角館 地名: +かくは 各派 名1: +かくはん 撹拌 名6: +かくはん 各般 名1: +かくぶ 各部 名1: +かくぶんれつ 核分裂 名6: +かくへいき 核兵器 名1: +かくべつ 格別 代5: +かくほ 確保 名6: +かくほう 確報 名1: +かくまく 角膜 名1: +かくめい 革命 名6: +かくやく 確約 名6: +かくやす 格安 名8: +かくゆうごう 核融合 名6: +かくり 隔離 名6: +かくりつ 確率 名1: +かくりつ 確立 名6: +かくりょう 閣僚 名1: +かくれ 隠れ 一段2: +かくれんぼ かくれんぼ 代1: +かくろん 各論 名1: +かぐ 家具 名1: +かぐら 神楽 名1: +かけ かけ 一段2: +かけ 架け 一段2: +かけ 懸け 一段2: +かけ 欠け 一段3: +かけ 掛け 一段4: +かけ 賭け 一段4: +かけ 駆け 一段1: +かけ 加計 地名: +かけあ 掛け合 ワ五3: +かけあし 駆け足 代4: +かけい 家計 名1: +かけい 家系 名1: +かけい 筧 単漢: +かけいぼ 家計簿 名1: +かけおち 駆け落ち 代4: +かけがわ 掛川 地名: +かけがわ 掛川 苗字: +かけきん 掛金 名1: +かけこ 駆け込 マ五7: +かけごえ かけ声 名1: +かけごと 賭事 名1: +かけざん かけ算 名1: +かけじく 掛軸 名1: +かけず 掛図 名1: +かけずりまわ 駆けずり回 ラ五1: +かけずりまわ 駆けずりまわ ラ五1: +かけつ 可決 名6: +かけつけ 駆けつけ 一段4: +かけぬけ 駆け抜け 一段3: +かけはし 架け橋 名1: +かけはなれ かけ離れ 一段3: +かけひき 駆け引き 代1: +かけひき 駆引き 代1: +かけまわ 駆け回 ラ五5: +かけもち 掛持ち 代4: +かけや 掛合 地名: +かけよ 駆け寄 ラ五7: +かけら かけら 代1: +かける × 単漢: +かけん 科研 企業: +かげ 陰 名2:ラ五3: +かげ 蔭 名2: +かげ 影 代1: +かげ 鹿毛 苗字: +かげえ 影絵 名1: +かげき 過激 名8: +かげき 歌劇 名1: +かげぐち 陰口 名1: +かげつ ヶ月 助数2: +かげぼし 陰干し 代4: +かげやま 影山 苗字: +かげろう 陽炎 代1: +かげん 加減 名5: +かげん 下限 名1: +かげん 下弦 名1: +かげんじょうじょ 加減乗除 名5: +かこ 過去 名1: +かこ 囲 マ五8:ワ五8: +かこ 加古 地名: +かこう 加工 名6: +かこう 下降 名6: +かこう 河口 名1: +かこう 火口 名1: +かこうせん 下降線 名1: +かこがわ 加古川 地名: +かこく 苛酷 代5: +かこく 過酷 代5: +かこく ヶ国 助数2: +かご 籠 代1: +かご 篭 単漢: +かごう 化合 名6: +かごうぶつ 化合物 名1: +かごしま 鹿児島 地名: +かごたに 篭谷 苗字: +かごめ カゴメ 企業: +かごん 過言 名1: +かさ 傘 代1: +かさ 笠 代1: +かさ 嵩 代1:マ五1: +かさ 加佐 地名: +かさい 火災 名1: +かさい 家裁 名1: +かさい 葛西 苗字: +かさい 葛西 地名: +かさい 笠井 苗字: +かさい 加西 地名: +かさい 河西 苗字: +かさい 河西 地名: +かさおか 笠岡 苗字: +かさおか 笠岡 地名: +かさかけ 笠懸 地名: +かさぎ 笠置 苗字: +かさぎ 笠置 地名: +かさく 佳作 名1: +かささ 笠沙 地名: +かさな 重な ラ五3: +かさね 重ね 一段3: +かさはら 笠原 苗字: +かさま 笠間 苗字: +かさま 笠間 地名: +かさまつ 笠松 苗字: +かさり 笠利 地名: +かさん 加算 名6: +かざ 飾 ラ五8: +かざい 家財 名1: +かざかみ 風上 名1: +かざぐるま 風車 代1: +かざしも 風下 名1: +かざま 風間 苗字: +かざまうら 風間浦 地名: +かざみ 風見 苗字: +かざむき 風向き 代1: +かざりつけ 飾り付け 一段3:サ変: +かざん 火山 名1: +かし 菓子 名2: +かし 歌詞 名1: +かし 可視 名1: +かし 河岸 名1: +かし 瑕疵 名1: +かし 華氏 名1: +かし 仮死 名1: +かし 樫 名1: +かし 橿 単漢: +かしお カシオ 企業: +かしかた 貸方 代1: +かしきり 貸切り 名1: +かしきん 貸し金 名1: +かしげ 傾げ 一段2: +かしげ かしげ 一段2: +かしこ 賢 形3: +かしこ 貸し越 サ五1: +かしだ 貸し出 サ五8: +かしちん 貸賃 名1: +かしつ 過失 名1: +かしつけ 貸し付け 一段3: +かしはら 橿原 地名: +かしば 香芝 地名: +かしほん 貸本 代1: +かしま 貸間 名1: +かしま 嘉島 地名: +かしま 鹿島 地名: +かしま 鹿島 苗字: +かしまだい 鹿島台 地名: +かしも 加子母 地名: +かしゃ 貨車 名1: +かしや 貸家 名1: +かしゅ 歌手 名1: +かしゅう 歌集 名1: +かしょ 個所 名1: +かしょ 箇所 助数2: +かしょ ヶ所 助数2: +かしょう 仮称 名6: +かしょう 歌唱 名6: +かしょう 過小 名8: +かしょう 過少 名8: +かしょく 過食 名6: +かしら 頭 代1: +かしわ 柏 名1: +かしわ 柏 地名: +かしわ 栢 単漢: +かしわぎ 柏木 苗字: +かしわざき 柏崎 苗字: +かしわざき 柏崎 地名: +かしわばら 柏原 苗字: +かしわら 柏原 苗字: +かしわら 柏原 地名: +かしん 家臣 名1: +かしん 過信 名6: +かじ 火事 代1: +かじ 家事 代1: +かじ 鍛冶 代1: +かじ 舵 代1: +かじ 柁 代1: +かじ 梶 代1: +かじ かじ ラ五5: +かじい 梶井 苗字: +かじうら 梶浦 苗字: +かじか 鰍 代1: +かじか 鮖 単漢: +かじかざわ 鰍沢 地名: +かじき 加治木 地名: +かじたに 梶谷 苗字: +かじつ 果実 名1: +かじつ 佳日 名1: +かじつ 過日 代6: +かじはら 梶原 苗字: +かじま 鹿島 苗字: +かじもと 梶本 苗字: +かじゅ 果樹 名1: +かじゅう 加重 代4: +かじゅう 果汁 名1: +かじゅう 荷重 名1: +かじゅう 過重 代5: +かじょ 加除 名6: +かじょう 過剰 名8: +かじょう ヶ条 助数: +かじょう 箇条 名1: +かじょうがき 箇条書 代1: +かじわら 梶原 苗字: +かじん 歌人 名1: +かす 霞 マ五3: +かす 掠 ラ五3: +かす 糟 代1: +かす 粕 代1: +かすい 下垂 名6: +かすいぶんかい 加水分解 名6: +かすか かすか 形動1: +かすか 微か 形動1: +かすかべ 春日部 地名: +かすかわ 粕川 苗字: +かすかわ 粕川 地名: +かすが 春日 苗字: +かすが 春日 地名: +かすがい 春日井 苗字: +かすがい 春日井 地名: +かすがい 春日居 地名: +かすたまいず カスタマイズ 代4: +かすたむ カスタム 名1: +かすてら カステラ 名1: +かすみ 霞 代1: +かすみ 香住 地名: +かすみがうら 霞ヶ浦 地名: +かすみがせき 霞ヶ関 地名: +かすや 粕屋 地名: +かすや 粕谷 苗字: +かず 数 名1: +かず 下図 名1: +かず 和 単漢: +かずあき 和明 名前: +かずえ 和恵 名前: +かずえ 和枝 名前: +かずお 一男 名前: +かずお 一夫 名前: +かずお 一雄 名前: +かずお 和男 名前: +かずお 和夫 名前: +かずお 和雄 名前: +かずおお 数多 形2: +かずおおく 数多く 副7: +かずかず 数々 代6: +かずき 一樹 名前: +かずこ 和子 名前: +かずさ 上総 苗字: +かずさ 上総 地名: +かずしげ 和茂 名前: +かずすくな 数少な 形2: +かずのこ 鯑 代1: +かずのり 一憲 名前: +かずひこ 一彦 名前: +かずひこ 和彦 名前: +かずひさ 一久 名前: +かずひさ 和久 名前: +かずひで 和秀 名前: +かずひろ 一宏 名前: +かずひろ 一弘 名前: +かずひろ 一博 名前: +かずひろ 和弘 名前: +かずまさ 一正 名前: +かずまさ 和正 名前: +かずみ 一三 名前: +かずみ 一美 名前: +かずみ 和美 名前: +かずや 一也 名前: +かずや 和也 名前: +かずゆき 一行 名前: +かずゆき 和幸 名前: +かずよし 一義 名前: +かずよし 和義 名前: +かせ 加瀬 苗字: +かせ 稼 ガ五8: +かせ 枷 代1: +かせい 家政 名1: +かせい 火星 名1: +かせい 仮性 名1: +かせい 化成 代4: +かせい 加勢 代4: +かせき 化石 名1: +かせだ 加世田 地名: +かせっと カセット 名1: +かせつ 仮説 名1: +かせつ 仮設 名6: +かせつ 架設 名6: +かせん 下線 名1: +かせん 河川 名1: +かせん 化繊 名1: +かせん 寡占 名1: +かせん 架線 代4: +かぜ 風 名1: +かぜ 風邪 名2: +かぜい 課税 名6: +かぜいん カゼイン 名1: +かぜむき 風向き 代1: +かそ 過疎 名1: +かそう 仮想 名6: +かそう 仮装 名6: +かそう 火葬 名6: +かそう 下層 名1: +かそく 加速 名6: +かそくど 加速度 名1: +かぞ 加須 地名: +かぞえ 数え 一段4: +かぞく 家族 名3: +かた 語 ラ五7: +かた 固 形3: +かた 硬 形6: +かた 堅 形9: +かた 難 形2: +かた 方 名2:接尾1: +かた 肩 代1: +かた 型 代1: +かた 形 代1: +かた 潟 代1: +かた 片 代1: +かたあし 片足 名1: +かたいれ 肩入れ 代4: +かたうで 片腕 名1: +かたおか 片岡 苗字: +かたおもい 片思い 代1: +かたおもい 片想い 代1: +かたかな カタカナ 名1: +かたかな 片仮名 名1: +かたがき 肩書 名1: +かたがた 方々 代1: +かたがみ 型紙 代1: +かたがわ 片側 名1: +かたがわり 肩代り 代4: +かたぎ 気質 接尾1: +かたぎ 堅気 代5: +かたぎり 片桐 苗字: +かたく 仮託 代4: +かたく 家宅 代1: +かたくな かたくな 形動4: +かたくるし 堅苦し 形3: +かたこと 片言 名1: +かたこり 肩こり 代4: +かたしな 片品 地名: +かたすみ 片隅 名1: +かたち 形 代1: +かたちづく 形作 ラ五1: +かたづ 片付 カ五1: +かたづけ 片付け 一段4: +かたて 片手 名1: +かたとき 片時 名1: +かたど 型ど ラ五7: +かたどおり 型どおり 代5: +かたな 刀 代1: +かたの 交野 地名: +かたの 片野 苗字: +かたはし 片端 名1: +かたはば 肩幅 名1: +かたひがし 潟東 地名: +かたほう 片方 名1: +かたま 固ま ラ五3: +かたまち 片町 苗字: +かたまち 片町 地名: +かたまり 塊 代1: +かたみ 形見 名1: +かたみ 肩身 名1: +かたみち 片道 名1: +かたむ 傾 カ五3: +かため 固め 一段4: +かため 片目 名1: +かためん 片面 名1: +かたやぶり 型破り 代5: +かたやま 片山 苗字: +かたよ 偏 ラ五7: +かたら 語ら ワ五3: +かたりあ 語り合 ワ五7: +かたりつ 語り継 ガ五7: +かたろぐ カタログ 名1: +かたわら 傍ら 名1: +かたん 荷担 名6: +かたん 下端 名1: +かだい 課題 名1: +かだい 過大 名8: +かだん 花壇 名1: +かだん 歌壇 名1: +かち 価値 名1: +かちあ かち合 ワ五5: +かちかん 価値観 名1: +かちき 勝気 名8: +かちく 家畜 名1: +かちこ 勝越 サ五7: +かちすす 勝ち進 マ五7: +かちと かち取 ラ五5: +かちぬ 勝ち抜 カ五3: +かちぼし 勝ち星 代1: +かちまけ 勝ち負け 代1: +かちめ 勝ち目 代1: +かちゅう 渦中 名1: +かちょう 課長 代2: +かちょうきん 課徴金 名1: +かっか 閣下 接尾1: +かっかい 各界 名1: +かっき 活気 名1: +かっきてき 画期的 形動1: +かっきょう 活況 名1: +かっけつ 喀血 名6: +かっこ 各個 名1: +かっこ 括弧 代4: +かっこう 格好 名1: +かっこう 滑降 代4: +かっこく 各国 名1: +かっさい 喝采 代4: +かっしゃ 滑車 名1: +かっしょく 褐色 名1: +かっすい 渇水 名1: +かっせい 活性 名4: +かっせん 合戦 代1: +かっそう 滑走 名6: +かっそうろ 滑走路 名1: +かった 刈田 地名: +かったー カッター 名1: +かって かって 代6: +かって 勝手 名10: +かっと カット 代4: +かっとう 葛藤 代4: +かっぱ 河童 代1: +かっぱつ 活発 形動4: +かっぱん 活版 名1: +かっぷ 割賦 名1: +かっぷる カップル 名1: +かっぽう 割烹 名1: +かつ かつ 接続:ガ五7: +かつ 且つ 接続: +かつ 担 ガ五7: +かつ 活 代1: +かつ 割 単漢: +かつ 喝 単漢: +かつ 恰 単漢: +かつ 括 単漢: +かつ 渇 単漢: +かつ 滑 単漢: +かつ 葛 単漢: +かつ 褐 単漢: +かつ 轄 単漢: +かつ 克 単漢: +かつ 猾 単漢: +かつあい 割愛 名6: +かつあき 勝昭 名前: +かつうら 勝浦 地名: +かつお 勝男 名前: +かつお 勝夫 名前: +かつお 勝雄 名前: +かつお 鰹 代1: +かつぎこ かつぎ込 マ五7: +かつこ 克子 名前: +かつこ 勝子 名前: +かつしか 葛飾 地名: +かつじ 活字 名1: +かつじ 勝次 名前: +かつじ 勝治 名前: +かつじょう 割譲 名6: +かつぞう 勝三 名前: +かつた 勝田 苗字: +かつた 勝田 地名: +かつて かつて 副7: +かつとし 勝利 名前: +かつどう 活動 名6: +かつぬま 勝沼 地名: +かつひこ 克彦 名前: +かつひこ 勝彦 名前: +かつひさ 勝久 名前: +かつぼう 渇望 名6: +かつまた 勝又 苗字: +かつみ 克美 名前: +かつみ 克巳 名前: +かつみ 勝美 名前: +かつみ 勝巳 名前: +かつもと 勝本 苗字: +かつや 勝也 名前: +かつやく 活躍 名7: +かつやま 勝山 苗字: +かつやま 勝山 地名: +かつよう 活用 名7: +かつら 桂 代1:苗字: +かつらお 葛尾 地名: +かつらぎ かつらぎ 地名: +かつらぎ 葛城 苗字: +かつらぎ 葛城 地名: +かつりょく 活力 名1: +かつれん 勝連 地名: +かつろ 活路 名1: +かづけ 日付 助数2: +かづさ 加津佐 地名: +かづの 鹿角 地名: +かて 糧 代1: +かてい 家庭 名3: +かてい 仮定 名6: +かてい 課程 名1: +かてい 過程 名1: +かていか 家庭科 名1: +かてごり カテゴリ 名1: +かでな 嘉手納 地名: +かでん 家電 名1: +かでん 家伝 名1: +かと 過渡 名4: +かとう 下等 代5: +かとう 過当 代5: +かとう 果糖 代1: +かとう 加藤 苗字: +かとう 加東 地名: +かとう 河東 地名: +かとき 過渡期 名1: +かとく 家督 名1: +かとり 香取 苗字: +かとり 香取 地名: +かとりっく カトリック 名1: +かど 角 代1: +かど 門 代1: +かど 過度 形動9: +かどう 稼働 名6: +かどう 華道 名1: +かどかわ 角川 苗字: +かどがわ 門川 地名: +かどで 門出 代4: +かどま 門真 地名: +かどまつ 門松 名1: +かどみうむ カドミウム 名1: +かどわき 門脇 苗字: +かな 仮名 名1: +かな かな 名1:ワ五5: +かな 叶 ワ五5: +かな 金 単漢: +かな 哉 単漢: +かなあみ 金網 名1: +かない 家内 名1: +かない 金井 苗字: +かなえ 鼎 単漢: +かながわ 神奈川 地名: +かなぎ 金城 地名: +かなぎ 金木 地名: +かなぐ 金具 名1: +かなさき 金崎 地名: +かなさごう 金砂郷 地名: +かなざわ 金沢 地名: +かなざわ 金沢 苗字: +かなし 悲し 形9:マ五8: +かなし 哀し 形9:マ五8: +かなた 彼方 代1: +かなだ カナダ 地名: +かなだ 金田 苗字: +かなだ 金田 地名: +かなづ 金津 苗字: +かなづ 金津 地名: +かなで 奏で 一段2: +かなまる 金丸 苗字: +かなめ 要 代1: +かなもの 金物 名1: +かなもり 金森 苗字: +かなや 金屋 地名: +かなや 金谷 苗字: +かなやま 金山 苗字: +かならず 必ず 代6: +かならずしも 必ずしも 副1: +かなり かなり 代6: +かなん 河南 地名: +かに 蟹 代1: +かに 可児 地名: +かにえ 蟹江 苗字: +かにざ 蟹座 代1: +かにた 蟹田 地名: +かにゅう 加入 名7: +かぬま 鹿沼 地名: +かね 金 名2: +かね 鐘 代1: +かね かね 一段1: +かね 兼ね 一段1: +かねあい 兼ね合い 代1: +かねがさき 金ヶ崎 地名: +かねがね かねがね 副1: +かねこ 金子 苗字: +かねそなえ 兼ね備え 一段3: +かねだ 金田 苗字: +かねつ 加熱 名6: +かねつ 過熱 名6: +かねづかい 金遣い 代1: +かねまる 金丸 苗字: +かねまわり 金回り 代1: +かねみつ 金光 名前: +かねもうけ 金儲け 代4: +かねもち 金持ち 名2: +かねやま 金山 地名: +かねやま 兼山 地名: +かねん ヶ年 助数2: +かの 鹿野 苗字: +かのあし 鹿足 地名: +かのう 可能 名8: +かのう 化膿 名6: +かのう 加納 苗字: +かのうせい 可能性 名1: +かのじょ 彼女 代1: +かのせ 鹿瀬 地名: +かのや 鹿屋 地名: +かはん 過半 代1: +かはん 可搬 代1: +かはんしん 下半身 名1: +かはんすう 過半数 代1: +かば 庇 ワ五1: +かば 樺 代1: +かば 椛 単漢: +かばー カバー 代4: +かばと 樺戸 地名: +かばね 屍 代1: +かばん 鞄 代1: +かひ 可否 名1: +かひつ 加筆 名6: +かひょう 下表 名1: +かび 華美 代5: +かび カビ 代1: +かびん 花瓶 名1: +かびん 過敏 名8: +かふう 家風 名1: +かふぇいん カフェイン 名1: +かふぇてりあ カフェテリア 名1: +かふそく 過不足 名1: +かふん 花粉 名1: +かぶ 株 名2:助数2: +かぶ 蕪 名1: +かぶ 下部 名1: +かぶ 被 ラ五7: +かぶか 株価 名1: +かぶき 歌舞伎 名1: +かぶけん 株券 名1: +かぶしき 株式 名1: +かぶしきがいしゃ 株式会社 代1: +かぶせ かぶせ 一段2: +かぶと 兜 代1: +かぶと 甲 代1: +かぶぬし 株主 名1: +かぶら 鏑 代1: +かぶら 蕪 代1: +かぶん 寡聞 名1: +かぶん 過分 名8: +かぷせる カプセル 名1: +かへい 貨幣 名1: +かへん 可変 名1: +かべ 壁 名1: +かべん 花弁 名1: +かほ 嘉穂 地名: +かほう 家宝 名1: +かほう 加法 名1: +かほく 河北 地名: +かほく 香北 地名: +かほく 鹿北 地名: +かほご 過保護 名1: +かぼちゃ かぼちゃ 代1: +かま 釜 名2: +かま 鎌 代1: +かま 窯 代1: +かま かま ワ五1: +かま 構 ワ五1: +かま 竃 単漢: +かま 蒲 単漢: +かまいし 釜石 地名: +かまえ 蒲江 地名: +かまえ 構え 一段4: +かまがや 鎌ヶ谷 苗字: +かまがや 鎌ヶ谷 地名: +かまがり 蒲刈 地名: +かまくら 鎌倉 地名: +かまた 蒲田 苗字: +かまた 蒲田 地名: +かまた 鎌田 苗字: +かみ 紙 代1: +かみ 上 代1:接頭2: +かみ 神 代1: +かみ 髪 代1: +かみ 加味 代4: +かみ 加美 地名: +かみ 可美 地名: +かみ 香美 地名: +かみあがた 上県 地名: +かみいしづ 上石津 地名: +かみいずみ 神泉 地名: +かみいそ 上磯 地名: +かみいた 上板 地名: +かみいち 上市 地名: +かみいな 上伊那 地名: +かみうけな 上浮穴 地名: +かみうら 上浦 地名: +かみおか 神岡 苗字: +かみおか 神岡 地名: +かみかつ 上勝 地名: +かみかわ 上川 苗字: +かみかわ 上川 地名: +かみかわ 神川 地名: +かみかわち 上河内 地名: +かみがた 上方 代1: +かみがた 髪型 代1: +かみき 上期 名1: +かみきた 上北 地名: +かみきたやま 上北山 地名: +かみぎょう 上京 地名: +かみくいしき 上九一色 地名: +かみくだ 噛み砕 カ五5: +かみこあに 上小阿仁 地名: +かみこしき 上甑 地名: +かみごとう 上五島 地名: +かみさいばら 上斉原 地名: +かみさと 上郷 地名: +かみさと 上里 地名: +かみさま 神様 代1: +かみざ 上座 代1: +かみしひ 上志比 地名: +かみしほろ 上士幌 地名: +かみしめ 噛みしめ 一段1: +かみじょう 上条 苗字: +かみす 神栖 地名: +かみすながわ 上砂川 地名: +かみそり 剃刀 名1: +かみたいら 上平 地名: +かみたかい 上高井 地名: +かみたから 上宝 地名: +かみだな 神棚 代1: +かみつ 過密 名8: +かみつが 上都賀 地名: +かみつしま 上対馬 地名: +かみて 上手 代1: +かみとんだ 上富田 地名: +かみなか 上中 苗字: +かみなか 上中 地名: +かみなか 上那賀 地名: +かみなり 雷 代1: +かみにいかわ 上新川 地名: +かみのかわ 上三川 地名: +かみのくに 上ノ国 地名: +かみのせき 上関 地名: +かみのほ 上之保 地名: +かみのやま 上山 苗字: +かみのやま 上山 地名: +かみはやし 神林 地名: +かみはんき 上半期 名1: +かみふくおか 上福岡 地名: +かみふらの 上富良野 地名: +かみへい 上閉伊 地名: +かみましき 上益城 地名: +かみみね 上峰 地名: +かみみのち 上水内 地名: +かみむら 上村 苗字: +かみや 神谷 苗字: +かみやく 上屋久 地名: +かみやちょう 神谷町 地名: +かみやはぎ 上矢作 地名: +かみやま 神山 苗字: +かみやまだ 上山田 地名: +かみゆうべつ 上湧別 地名: +かみん 仮眠 名6: +かめ 亀 代1: +かめ 瓶 代1: +かめい 加盟 名7: +かめい 仮名 名1: +かめい 家名 名1: +かめい 亀井 苗字: +かめおか 亀岡 苗字: +かめおか 亀岡 地名: +かめだ 亀田 苗字: +かめだ 亀田 地名: +かめやま 亀山 苗字: +かめやま 亀山 地名: +かめら カメラ 名1: +かめん 仮面 名1: +かも 醸 サ五1: +かも 鴨 名1: +かも 加茂 苗字: +かも 加茂 地名: +かも 賀茂 地名: +かもう 蒲生 地名: +かもえない 神恵内 地名: +かもがた 鴨方 地名: +かもがわ 加茂川 地名: +かもがわ 鴨川 地名: +かもく 科目 名1: +かもく 課目 名1: +かもしだ 醸し出 サ五5: +かもじま 鴨島 地名: +かもつ 貨物 名1: +かもつせん 貨物船 名1: +かもと 鹿本 地名: +かもめ 鴎 代1: +かもん 家紋 名1: +かや 蚊帳 代1: +かや 萱 代1: +かや 加悦 地名: +かや 茅 単漢: +かやく 火薬 名1: +かやべ 茅部 地名: +かゆ かゆ 形8: +かゆ 痒 形8: +かゆ 粥 名2: +かよ 佳代 名前: +かよ 通 ワ五8: +かよう 歌謡 名1: +かよう 火曜 名1: +かよう 賀陽 地名: +かようきょく 歌謡曲 名1: +かようび 火曜日 名1: +から 枯ら サ五7: +から 絡 マ五7: +から 辛 形11:単漢: +から 殻 代1: +から 空 代1:接頭1: +から 〜 代1: +から 唐 単漢: +からー カラー 名4: +からおけ カラオケ 名1: +からくち 辛口 名1: +からくり からくり 代1: +からくわ 唐桑 地名: +からさわ 唐沢 苗字: +からす 烏 代1: +からす カラス 代1: +からす 香良洲 地名: +からす 鴉 単漢: +からすま 烏丸 苗字: +からすやま 烏山 地名: +からだ 身体 名2: +からだ 体 名2: +からだ 躯 単漢: +からつ 唐津 地名: +からて 空手 代1: +からふと 樺太 地名: +からま 絡ま ラ五7: +からまわり 空回り 代4: +からみあ 絡み合 ワ五7: +かり 仮 代1:接頭1: +かり 雁 代1: +かり 借り 一段4: +かり 狩り 代1: +かり 狩 単漢: +かり 猟 単漢: +かりあげ 刈り上げ 一段3: +かりあげ 借り上げ 一段3: +かりあつめ かり集め 一段1: +かりいれ 借入れ 名1: +かりいれ 借り入れ 一段3: +かりいれ 刈り入れ 一段3: +かりうけ 借り受け 一段3: +かりかた 借方 名1: +かりき 借り切 ラ五7: +かりこ 刈り込 マ五7: +かりしょぶん 仮処分 名1: +かりすま カリスマ 名1: +かりずまい 仮住い 名1: +かりたて 駆り立て 一段3: +かりだ 駆り出 サ五7: +かりちょういん 仮調印 名6: +かりて 借り手 代1: +かりと 刈り取 ラ五7: +かりぬい 仮縫い 代4: +かりばらいきん 仮払金 名1: +かりふぉるにあ カリフォルニア 地名: +かりめんきょ 仮免許 名1: +かりや 刈谷 苗字: +かりや 刈谷 地名: +かりゅう 下流 名1: +かりゅう 顆粒 名1: +かりょう 科料 名1: +かりょう 加療 代4: +かりょく 火力 名1: +かりわ 刈羽 地名: +かる 軽 形6: +かるいざわ 軽井沢 地名: +かるがりー カルガリー 地名: +かるがる 軽々 副8: +かるがるし 軽々し 形3: +かるはずみ 軽はずみ 名8: +かるぴす カルピス 企業: +かるふぉるにあ カルフォルニア 地名: +かるまい 軽米 地名: +かるわざ 軽業 名1: +かれ 彼 代1: +かれ 枯れ 一段1: +かれ 渇れ 一段1: +かれー カレー 名1: +かれい 華麗 形動4: +かれい 鰈 代1: +かれき 枯木 名1: +かれし 彼氏 代1: +かれつ 苛烈 代5: +かれら 彼ら 代1: +かれん 可憐 代5: +かれんだー カレンダー 名1: +かれんと カレント 名1: +かろうじて かろうじて 副1: +かろやか 軽やか 形動4: +かろりー カロリー 名1:助数2: +かわ 川 代1: +かわ 河 代1: +かわ 革 代1: +かわ 皮 代1: +かわ 乾 カ五4: +かわ 渇 カ五8: +かわ 変わ ラ五8: +かわ 代わ ラ五8: +かわ 換わ ラ五7: +かわ 替わ ラ五7: +かわ かわ サ五7:ラ五7: +かわ 交わ サ五7: +かわ 側 単漢: +かわい かわい 形9: +かわい 可愛 形9: +かわい 河井 苗字: +かわい 河合 苗字: +かわい 川井 苗字: +かわい 川合 苗字: +かわいそう 可哀想 形動1: +かわうえ 川上 地名: +かわうち 河内 苗字: +かわうち 川内 苗字: +かわうら 河浦 地名: +かわか 乾か サ五1: +かわかみ 川上 苗字: +かわかみ 川上 地名: +かわかみ 河上 苗字: +かわきた 川北 苗字: +かわぐち 川口 苗字: +かわぐち 川口 地名: +かわぐち 河口 苗字: +かわぐち 河口 地名: +かわぐちこ 河口湖 地名: +かわぐつ 革靴 名1: +かわげ 河芸 地名: +かわごえ 川越 苗字: +かわごえ 川越 地名: +かわさき 川崎 苗字: +かわさき 川崎 地名: +かわさと 川里 地名: +かわしま 河島 苗字: +かわしま 川島 苗字: +かわしも 川下 名1: +かわじま 川島 苗字: +かわじり 川尻 苗字: +かわじり 川尻 地名: +かわず 蛙 代1: +かわせ 為替 名1: +かわせ 川瀬 苗字: +かわそえ 川副 地名: +かわぞこ 川底 代1: +かわた 河田 苗字: +かわたな 川棚 地名: +かわだ 河田 苗字: +かわだ 川田 苗字: +かわち 河内 苗字: +かわち 河内 地名: +かわちながの 河内長野 地名: +かわづ 川津 苗字: +かわな 川名 苗字: +かわなべ 川辺 地名: +かわにし 河西 苗字: +かわにし 川西 苗字: +かわにし 川西 地名: +かわぬま 河沼 地名: +かわね 川根 苗字: +かわね 川根 地名: +かわの 河野 苗字: +かわの 川野 苗字: +かわのえ 川之江 地名: +かわはら 河原 苗字: +かわはら 川原 苗字: +かわば 川場 地名: +かわばた 川端 苗字: +かわばた 川畑 苗字: +かわひがし 河東 苗字: +かわひがし 河東 地名: +かわべ 河辺 苗字: +かわべ 河辺 地名: +かわべ 川辺 苗字: +かわべ 川辺 地名: +かわまた 川俣 苗字: +かわまた 川俣 地名: +かわまた 川又 苗字: +かわみなみ 川南 地名: +かわむら 河村 苗字: +かわむら 川村 苗字: +かわもと 川本 苗字: +かわや 厠 代1: +かわら 河原 名1: +かわら 瓦 名1: +かわら 川原 名1: +かわら 香春 地名: +かん 缶 代1: +かん 勘 代1: +かん 寒 代1: +かん 刊 代1: +かん 歓 代1: +かん 漢 代1: +かん 簡 代1: +かん 艦 代1: +かん 間 接尾1: +かん 感 接尾1:ザ変: +かん 観 接尾1:ザ変: +かん 館 接尾1: +かん 管 接尾1: +かん 官 接尾1: +かん 巻 助数: +かん 貫 助数2: +かん 関 サ変: +かん 姦 サ変: +かん 冠 代4: +かん 環 代1: +かん 棺 代1: +かん 柑 代1: +かん 乾 単漢: +かん 侃 単漢: +かん 勧 単漢: +かん 喚 単漢: +かん 堪 単漢: +かん 完 単漢: +かん 寛 単漢: +かん 干 単漢: +かん 幹 単漢: +かん 患 単漢: +かん 慣 単漢: +かん 憾 単漢: +かん 換 単漢: +かん 敢 単漢: +かん 桓 単漢: +かん 款 単漢: +かん 汗 単漢: +かん 澗 単漢: +かん 潅 単漢: +かん 甘 単漢: +かん 監 単漢: +かん 看 単漢: +かん 竿 単漢: +かん 緩 単漢: +かん 翰 単漢: +かん 肝 単漢: +かん 莞 単漢: +かん 諌 単漢: +かん 還 単漢: +かん 鑑 単漢: +かん 閑 単漢: +かん 陥 単漢: +かん 韓 単漢: +かん 舘 単漢: +かん 甲 単漢: +かん 函 単漢: +かん 神 単漢: +かん 奸 単漢: +かん 瞰 単漢: +かんい 簡易 名8: +かんいち 貫一 名前: +かんいっぱつ 間一髪 名1: +かんえつ 関越 地名: +かんえん 肝炎 名1: +かんおけ 棺桶 名1: +かんおんじ 観音寺 地名: +かんか 感化 名6: +かんか 看過 名6: +かんかく 感覚 名4: +かんかく 間隔 名1: +かんかつ 管轄 名6: +かんがい 感慨 名1: +かんがい 干害 名1: +かんがえ 考え 一段4: +かんがえかた 考え方 代3: +かんがえこ 考え込 マ五3: +かんがえだ 考え出 サ五5: +かんがえつ 考え付 カ五7: +かんがえなお 考え直 サ五8: +かんがみ 鑑み 一段1: +かんき 喚起 名6: +かんき 歓喜 名6: +かんき 換気 名6: +かんき 乾期 名1: +かんき 寒気 名1: +かんきせん 換気扇 名1: +かんきつ 柑橘 名1: +かんきゃく 観客 名1: +かんきゅう 緩急 名1: +かんきょ 閑居 名6: +かんきょう 環境 名1: +かんきん 監禁 名6: +かんきん 換金 名6: +かんぎょう 勧業 名1: +かんぎょう 官業 名1: +かんく 管区 名1: +かんぐ 勘ぐ ラ五3: +かんけい 関係 名7: +かんけつ 簡潔 名8: +かんけつ 完結 名6: +かんけつ 間欠 名6: +かんげい 歓迎 名7: +かんげき 感激 名7: +かんげき 観劇 名6: +かんげき 間隙 名1: +かんげん 還元 名6: +かんげん 換言 名6: +かんげん 甘言 名6: +かんげんがく 管弦楽 名1: +かんこ 歓呼 代4: +かんこう 観光 名1: +かんこう 慣行 名1: +かんこう 刊行 名6: +かんこう 完工 名6: +かんこう 敢行 名6: +かんこう 感光 名6: +かんこうきゃく 観光客 名1: +かんこうちょう 官公庁 名1: +かんこうへん 肝硬変 名1: +かんこうれい 箝口令 名1: +かんこく 韓国 地名: +かんこく 勧告 代4: +かんこつだったい 換骨奪胎 代4: +かんこどり 閑古鳥 名1: +かんこんそうさい 冠婚葬祭 代1: +かんご 看護 名7: +かんご 漢語 名1: +かんごく 監獄 名1: +かんごふ 看護婦 代2: +かんさ 監査 名6: +かんさ 鑑査 名6: +かんさい 関西 名1: +かんさい 簡裁 名1: +かんさい 完済 名1: +かんさつ 観察 名7: +かんさつ 監察 名6: +かんさつ 鑑札 名1: +かんさん 換算 名6: +かんさん 閑散 名8: +かんざい 管財 名1: +かんざき 神崎 苗字: +かんざき 神崎 地名: +かんざき 神埼 苗字: +かんざき 神埼 地名: +かんし 監視 名6: +かんしき 鑑識 名1: +かんしつ 乾湿 名1: +かんしゃ 感謝 名6: +かんしゃ 官舎 名1: +かんしゅ 看守 代2: +かんしゅう 慣習 名1: +かんしゅう 監修 名6: +かんしゅう 観衆 名1: +かんしょう 感傷 名4: +かんしょう 観賞 名7: +かんしょう 鑑賞 名7: +かんしょう 干渉 代4: +かんしょう 緩衝 代4: +かんしょく 感触 名1: +かんしょく 閑職 名1: +かんしょく 間食 名6: +かんしん 関心 名3: +かんしん 感心 名6:形動1: +かんしん 歓心 名1: +かんしんじ 関心事 名1: +かんじ 漢字 名1: +かんじ 幹事 名1: +かんじ 監事 名1: +かんじ 感じ 名2: +かんじ 完治 名前: +かんじと 感じと ラ五5: +かんじゃ 患者 代2: +かんじゅ 甘受 名6: +かんじゅく 完熟 名6: +かんじょう 感情 名4: +かんじょう 勘定 名5: +かんじょう 環状 名1: +かんじん 肝心 名8: +かんすい 冠水 名6: +かんすい 完遂 名6: +かんすう 関数 名1: +かんせい 完成 名7: +かんせい 感性 名4: +かんせい 官製 名1: +かんせい 歓声 名1: +かんせい 喚声 名1: +かんせい 乾性 名1: +かんせい 管制 代4: +かんせい 閑静 名8: +かんせつ 間接 名4: +かんせつ 関節 名1: +かんせん 観戦 名7: +かんせん 感染 名6: +かんせん 幹線 名1: +かんぜい 関税 名1: +かんぜん 完全 名8: +かんぜん 敢然 形動2: +かんそ 簡素 名8: +かんそう 感想 名3: +かんそう 乾燥 名6: +かんそう 歓送 名6: +かんそう 完走 名6: +かんそく 観測 名7: +かんそん 寒村 名1: +かんぞう 肝臓 名1: +かんたい 歓待 名7: +かんたい 艦隊 名1: +かんたい 寒帯 名1: +かんたく 干拓 名6: +かんたん 簡単 名8: +かんたん 感嘆 名6: +かんだ 神田 苗字: +かんだ 神田 地名: +かんだ 苅田 地名: +かんだい 寛大 形動4: +かんだん 歓談 名7: +かんだん 寒暖 名1: +かんだん 間断 名1: +かんち 感知 名6: +かんち 関知 名6: +かんちがい 勘違い 代4: +かんちゅう 寒中 名1: +かんちょう 官庁 名1: +かんちょう 干潮 名1: +かんちょう 艦長 名1: +かんちょう 館長 名1: +かんちょう 浣腸 代4: +かんつう 貫通 名6: +かんづ 感づ カ五8: +かんづめ 缶詰 名1: +かんてい 官邸 名1: +かんてい 艦艇 名1: +かんてい 鑑定 名6: +かんてつ 貫徹 代4: +かんてん 観点 名1: +かんでん 感電 名6: +かんでんち 乾電池 名1: +かんとう 関東 名1: +かんとう 敢闘 名6: +かんとう 巻頭 名1: +かんとく 監督 名6: +かんとん 広東 地名: +かんど 感度 名1: +かんどう 感動 名7: +かんどう 勘当 代4: +かんない 管内 名1: +かんない 関内 苗字: +かんない 関内 地名: +かんない 館内 名1: +かんなづき 神無月 代1: +かんなな 環七 名1: +かんなべ 神辺 地名: +かんなみ 函南 地名: +かんなり 金成 地名: +かんにん 堪忍 代4: +かんぬし 神主 代1: +かんねん 観念 名6: +かんの 菅野 苗字: +かんのう 感応 名6: +かんのう 完納 名6: +かんのう 官能 名1: +かんのん 観音 名1: +かんばし 芳し 形2: +かんばつ 間伐 名6: +かんばやし 上林 苗字: +かんばやし 神林 苗字: +かんばら 蒲原 地名: +かんばん 看板 名1: +かんぱ カンパ 代4: +かんぱ 寒波 名1: +かんぱい 乾杯 代4: +かんぱい 完敗 代4: +かんぱく 関白 名1: +かんぱち 環八 名1: +かんぱん 甲板 名1: +かんび 完備 代4: +かんびょう 看病 名6: +かんぶ 幹部 名1: +かんぶ 患部 名1: +かんぶつ 乾物 名1: +かんぶん 漢文 名1: +かんぷ 還付 代4: +かんぷう 寒風 名1: +かんぷう 完封 名6: +かんぷく 感服 名6: +かんべ 神戸 苗字: +かんべつ 鑑別 名6: +かんべん 勘弁 名7: +かんべん 簡便 名8: +かんぺき 完璧 名8: +かんぼう 官房 名1: +かんぼう 感冒 名1: +かんぼつ 陥没 名6: +かんぽう 官報 名1: +かんぽう 漢方 名1: +かんぽうやく 漢方薬 名1: +かんま カンマ 名1: +かんまき 上牧 地名: +かんまつ 巻末 名1: +かんまん 干満 名1: +かんまん 緩慢 形動4: +かんみ 甘味 名1: +かんむり 冠 代1: +かんむりょう 感無量 形動1: +かんめい 感銘 名6: +かんめい 簡明 形動4: +かんもん 喚問 名6: +かんもん 関門 名1: +かんやく 完訳 名6: +かんやく 簡約 名8: +かんゆう 勧誘 名7: +かんよ 関与 名7: +かんよう 寛容 形動7: +かんよう 慣用 名6: +かんよう 肝要 名8: +かんら 甘楽 地名: +かんらく 歓楽 名1: +かんらく 陥落 名6: +かんらん 観覧 名7: +かんり 管理 名6: +かんり 官吏 名1: +かんりしょく 管理職 名1: +かんりにん 管理人 代2: +かんりゃく 簡略 名8: +かんりゅう 寒流 名1: +かんりょう 完了 名6: +かんりょう 官僚 名1: +かんるい 感涙 名1: +かんれい 慣例 名1: +かんれい 寒冷 名1: +かんれき 還暦 名1: +かんれん 関連 名6: +かんろ 甘露 名1: +かんろ 寒露 名1: +かんろく 貫禄 名1: +かんわ 緩和 名6: +かんわ 漢和 名1: +かんわきゅうだい 閑話休題 名1: +が 我 代1: +が 蛾 代1: +が 賀 代1:サ五1: +が 雅 代1: +が 画 接尾1: +が 俄 単漢: +が 峨 単漢: +が 牙 単漢: +が 臥 単漢: +が 芽 単漢: +が 餓 単漢: +が 駕 単漢: +がーぜ ガーゼ 名1: +がーたー ガーター 名1: +がーど ガード 名6: +がーりっく ガーリック 名1: +がい 害 代4: +がい 街 接尾3: +がい 外 接尾2: +がい 階 助数2: +がい 凱 単漢: +がい 劾 単漢: +がい 咳 単漢: +がい 崖 単漢: +がい 慨 単漢: +がい 概 単漢: +がい 涯 単漢: +がい 碍 単漢: +がい 蓋 単漢: +がい 該 単漢: +がい 鎧 単漢: +がい 骸 単漢: +がいあく 害悪 名1: +がいあつ 外圧 名1: +がいいん 外因 名1: +がいか 外貨 代1: +がいか 凱歌 代1: +がいかい 外界 名1: +がいかく 外郭 名1: +がいかつ 概括 名6: +がいかん 外観 名1: +がいかん 概観 名6: +がいき 外気 名1: +がいきょう 概況 名1: +がいきょく 外局 名1: +がいきん 外勤 名1: +がいけい 外形 名1: +がいけん 外見 名1: +がいこう 外交 名1: +がいこう 外向 名1: +がいこうかん 外交官 名1: +がいこく 外国 名1: +がいこつ 骸骨 名1: +がいご 外語 名1: +がいさい 外債 名1: +がいさん 概算 名6: +がいし 外紙 名1: +がいし 外資 名1: +がいしゃ 会社 接尾2: +がいしゃ 外車 名1: +がいしゅう 外周 名1: +がいしゅつ 外出 名6: +がいしょう 外傷 名1: +がいしょう 外相 名1: +がいしょく 外食 名6: +がいしん 外信 名1: +がいじ 外字 名1: +がいじゅ 外需 名1: +がいじん 外人 名1: +がいすう 概数 名1: +がいせつ 概説 名6: +がいせつ 外接 名6: +がいせん 外線 名1: +がいせん 凱旋 名7: +がいそう 外挿 名6: +がいちゅう 外注 名6: +がいちゅう 害虫 名1: +がいてき 外敵 名1: +がいてき 外的 形動1: +がいでん 外電 名1: +がいとう 該当 名6: +がいとう 街頭 名1: +がいとう 街灯 名1: +がいとう 外灯 名1: +がいど ガイド 名6: +がいどく 害毒 名1: +がいねん 概念 名4: +がいはく 外泊 名6: +がいひょう 概評 名6: +がいぶ 外部 名1: +がいぶん 外聞 名1: +がいへき 外壁 名1: +がいまい 外米 名1: +がいむ 外務 名1: +がいむしょう 外務省 名1: +がいめん 外面 名4: +がいや 外野 代1: +がいゆう 外遊 名6: +がいよう 概要 名1: +がいらい 外来 名1: +がいらん 外乱 代1: +がいりゃく 概略 名1: +がいろ 街路 名1: +がいろん 概論 名1: +がお 顔 接尾2: +がか 画家 代1: +がかり 係 接尾2: +ががく 雅楽 名1: +がき 書き 接尾2: +がく 学 接尾1: +がく 楽 代1: +がく 額 接尾1: +がく 岳 単漢: +がく 顎 単漢: +がく 鍔 単漢: +がく 鰐 単漢: +がくい 学位 名1: +がくいん 学院 名1: +がくえん 学園 名1: +がくぎょう 学業 名1: +がくげい 学芸 名1: +がくさい 学才 名1: +がくし 学士 名1: +がくし 学資 名1: +がくしき 学識 名1: +がくしゃ 学者 名1: +がくしゅう 学習 名6: +がくしょう 楽章 助数: +がくじゅつ 学術 名4: +がくせい 学生 名1:助数2: +がくせい 学制 名1: +がくせき 学籍 名1: +がくせつ 学説 名1: +がくそう 学窓 名1: +がくそく 学則 名1: +がくそつ 学卒 名1: +がくたい 楽隊 名1: +がくだん 楽団 名1: +がくちょう 学長 名1: +がくどう 学童 名1: +がくない 学内 名1: +がくねん 学年 名1: +がくばつ 学閥 名1: +がくひ 学費 名1: +がくふ 楽譜 代1: +がくぶ 学部 名1: +がくぶち 額縁 名1: +がくめい 学名 名1: +がくめん 額面 名1: +がくもん 学問 名6: +がくや 楽屋 名1: +がくゆう 学友 名3: +がくようひん 学用品 名1: +がくりょく 学力 名1: +がくれき 学歴 名1: +がくわり 学割 名1: +がけ がけ 接尾2: +がけ 崖 代1: +がざい 画材 名1: +がし 餓死 代4: +がしつ 画質 名1: +がしゅう 画集 名1: +がしょう 賀正 名1: +がしんしょうたん 臥薪嘗胆 代1: +がじょう 牙城 名1: +がじょう 賀状 名1: +がす ガス 名1: +がす 瓦斯 名1: +がぜん 俄然 代1: +がそりん ガソリン 名1: +がぞう 画像 名1: +がた 型 接尾3: +がた 難 接尾5: +がた 方 接尾2: +がち がち 接尾6: +がち 勝ち 接尾6: +がっか 学科 名1: +がっか 学課 名1: +がっかい 学会 名1: +がっかい 学界 名1: +がっかり がっかり 代4: +がっき 学期 名1:助数: +がっき 楽器 名1: +がっきゅう 学級 名1: +がっく 学区 名1: +がっくり がっくり 副9: +がっこう 学校 名1: +がっさく 合作 名6: +がっさん 合算 名6: +がっさん 月山 地名: +がっしゅうこく 合衆国 名1: +がっしゅく 合宿 名6: +がっしょう 合唱 名6: +がっしょう 合掌 名6: +がっそう 合奏 名6: +がったい 合体 名6: +がっち 合致 名6: +がっと ガット 名1: +がっぺい 合併 名6: +がつ 月 助数2: +がつごう 月号 助数2: +がつまつ 月末 助数2: +がね 金 接尾2: +がはく 画伯 名1: +がまごおり 蒲郡 地名: +がまし がまし 接尾5: +がまん 我慢 名6: +がめん 画面 名1: +がもう 蒲生 地名: +がよい 通い 接尾2: +がようし 画用紙 名1: +がら 柄 接尾1: +がらす ガラス 名1: +がらす 硝子 名1: +がらり がらり 副2: +がらん 伽藍 名1: +がりゅう 我流 名1: +がれーじ ガレージ 名1: +がれき 瓦礫 名1: +がろう 画廊 名1: +がわ 側 接尾3: +がわ 川 接尾4: +がん 癌 代1: +がん 岩 代1: +がん 贋 代1: +がん 雁 代1: +がん 願 代1: +がん ガン 代1: +がん 眼 接尾2: +がん 丸 代1: +がん 岸 代1: +がん 含 単漢: +がん 巌 単漢: +がん 玩 単漢: +がん 翫 単漢: +がん 頑 単漢: +がん 顔 単漢: +がん 元 単漢: +がんい 含意 名6: +がんか 眼下 名1: +がんか 眼科 名1: +がんきゅう 眼球 名1: +がんきょう 頑強 形動4: +がんきょう 眼鏡 名1: +がんきん 元金 名1: +がんぐ 玩具 名1: +がんこ 頑固 形動4: +がんこう 眼光 名1: +がんしょ 願書 名1: +がんじつ 元日 名1: +がんせき 岩石 名1: +がんそ 元祖 名1: +がんたん 元旦 名1: +がんちく 含蓄 名6: +がんちゅう 眼中 名1: +がんねん 元年 名1: +がんば 頑張 ラ五7: +がんぺき 岸壁 名1: +がんぼう 願望 名6: +がんぽん 元本 名1: +がんめん 顔面 名1: +がんゆう 含有 名6: +がんらい 元来 名1: +がんり 元利 名1: +がんりょう 顔料 名1: +き 聞 カ五6: +き 聴 カ五6: +き 利 カ五3: +き 効 カ五3: +き 着 一段1: +き 切 ラ五7: +き 斬 ラ五7: +き き ラ五7: +き 木 代1: +き 樹 代1: +き 黄 代1: +き 気 代1: +き 紀 代1: +き 奇 代1: +き 機 接尾1:助数: +き 記 サ五1:サ変: +き 記 接尾1: +き 帰 サ変:サ五1: +き 期 接尾1:助数:サ五1:サ変: +き 基 代1:助数2: +き 来 カ変用: +き 器 接尾1: +き 旗 接尾1: +き 貴 接頭1:代1: +き 鬼 接尾1: +き 忌 代1: +き 企 単漢: +き 伎 単漢: +き 危 単漢: +き 喜 単漢: +き 嬉 単漢: +き 寄 単漢: +き 岐 単漢: +き 希 単漢: +き 幾 単漢: +き 揮 単漢: +き 机 単漢: +き 既 単漢: +き 棋 単漢: +き 棄 単漢: +き 毅 単漢: +き 汽 単漢: +き 畿 単漢: +き 祈 単漢: +き 季 単漢: +き 稀 単漢: +き 徽 単漢: +き 規 単漢: +き 起 単漢: +き 軌 単漢: +き 輝 単漢: +き 飢 単漢: +き 騎 単漢: +き 亀 単漢: +き 祁 単漢: +き 己 単漢: +き 碕 単漢: +き 生 単漢: +き 其 単漢: +き 槻 単漢: +き 姫 単漢: +き 鰭 単漢: +き 箕 単漢: +き 肌 単漢: +き 綺 単漢: +き 騏 単漢: +き 麒 単漢: +きー キー 名1: +きあい 気合い 代1: +きあつ 気圧 名1: +きあん 起案 名6: +きい 奇異 形動1: +きい 紀伊 地名: +きい 貴意 名1: +きいち 喜一 名前: +きいちろう 喜一郎 名前: +きいと 生糸 名1: +きいながしま 紀伊長島 地名: +きいれ 喜入 地名: +きいろ 黄色 名1:形11: +きいん 起因 名6: +きうち 木内 苗字: +きえ 消え 一段2: +きえい 気鋭 名1: +きえい 消え入 ラ五1: +きえさ 消え去 ラ五1: +きえん 気炎 名1: +きお 気負 ワ五3: +きおう 既往 名1: +きおく 記憶 名7: +きおち 気落ち 代4: +きおん 気温 名1: +きか 帰化 代4: +きか 気化 代4: +きか 幾何 代1: +きか 貴下 代1: +きかい 機械 名4: +きかい 器械 名1: +きかい 機会 名1: +きかい 奇怪 形動1: +きかい 喜界 地名: +きかがく 幾何学 名1: +きかく 企画 名6: +きかく 規格 名6: +きかざ 着飾 ラ五5: +きかん 期間 名1: +きかん 機関 名1: +きかん 器官 名1: +きかん 基幹 名1: +きかん 既刊 名1: +きかん 気管 名1: +きかん 季刊 名1: +きかん 帰還 名7: +きが 飢餓 代1: +きがい 危害 名1: +きがえ 着替え 代4:一段1: +きがかり 気がかり 代5: +きがく 器楽 名1: +きがね 気兼ね 代4: +きがる 気軽 形動7: +きがん 祈願 名7: +きき 機器 名1: +きき 危機 名1: +ききい 聞き入 ラ五1: +ききいれ 聞き入れ 一段3: +ききかえ 聞き返 サ五7: +ききぐるし 聞き苦し 形9: +ききこ 聞き込 マ五7: +ききだ 聞き出 サ五7: +ききて 聞き手 代1: +ききと 聞き取 ラ五7: +ききなが 聞き流 サ五7: +ききめ 効き目 名1: +ききゃく 棄却 名6: +ききゅう 気球 名1: +ききゅう 希求 代4: +ききょ 起居 名7: +ききょう 帰郷 名7: +ききょう 帰京 名7: +ききょう 桔梗 名1: +ききわけ 聞き分け 一段3: +ききん 基金 名1: +ききんぞく 貴金属 名1: +きぎょう 企業 名4: +きく 菊 代1: +きく 掬 単漢: +きく 鞠 単漢: +きくお 喜久男 名前: +きくお 喜久雄 名前: +きくか 菊鹿 地名: +きくがわ 菊川 苗字: +きくすい 菊水 地名: +きくた 菊田 苗字: +きくち 菊地 苗字: +きくち 菊池 苗字: +きくち 菊池 地名: +きくばり 気配り 代4: +きくばり 気くばり 代4: +きくま 菊間 苗字: +きくま 菊間 地名: +きくよう 菊陽 地名: +きくん 貴君 代1: +きぐ 器具 名1: +きぐ 危惧 名6: +きぐう 奇遇 名1: +きぐらい 気位 名1: +きぐろう 気苦労 代4: +きけい 貴兄 代1: +きけい 奇形 代1: +きけつ 既決 名1: +きけつ 帰結 名6: +きけん 危険 名8: +きけん 棄権 名6: +きげき 喜劇 名1: +きげん 期限 名1: +きげん 機嫌 名1: +きげん 紀元 名1: +きげん 起源 名1: +きこう 気候 名1: +きこう 機構 名1: +きこう 帰港 名6: +きこう 起工 名6: +きこう 寄港 名6: +きこう 寄稿 名6: +きこう 気孔 名1: +きこう 紀行 名1: +きこうし 貴公子 名1: +きこえ 聞こえ 一段1: +きこく 帰国 名6: +きこな 着こな サ五7: +きこない 木古内 地名: +きこん 既婚 名1: +きご 季語 代1: +きごう 記号 名1: +きさ 吉舎 地名: +きさい 記載 名6: +きさい 起債 名6: +きさい 奇才 名1: +きさい 鬼才 名1: +きさい 騎西 地名: +きさい 既済 名6: +きさかた 象潟 地名: +きさき 妃 名2: +きさき 后 名2: +きさく 気さく 形動4: +きさぶろう 喜三郎 名前: +きさらぎ 如月 代1: +きさらづ 木更津 地名: +きさわ 木沢 地名: +きさん 起算 名6: +きざ きざ マ五7: +きざ 刻 マ五7: +きざ 兆 サ五3: +きざい 機材 名1: +きざみこ 刻み込 マ五7: +きざみつけ 刻みつけ 一段1: +きし 岸 名1: +きし 棋士 名1: +きし 貴志 苗字: +きし 貴志 地名: +きし 騎士 名1: +きしかいせい 起死回生 代1: +きしがわ 貴志川 地名: +きしだ 岸田 苗字: +きしつ 気質 名1: +きしべ 岸辺 苗字: +きしま 杵島 地名: +きしもと 岸本 苗字: +きしゃ 記者 名1: +きしゃ 汽車 名1: +きしゃ 貴社 名1: +きしゃ 帰社 名6: +きしゅ 機種 名1: +きしゅ 機首 名1: +きしゅ 旗手 名1: +きしゅ 期首 名1: +きしゅう 奇襲 名6: +きしゅく 寄宿 名6: +きしゅく 岐宿 地名: +きしょ 貴書 名1: +きしょう 気象 名1: +きしょう 記章 名1: +きしょう 起床 名7: +きしょう 気性 名3: +きしょう 希少 形動1: +きしょうだい 気象台 名1: +きしょうちょう 気象庁 名1: +きしょうてんけつ 起承転結 代1: +きしょく 気色 名1: +きしわだ 岸和田 地名: +きしん 寄進 名6: +きじ 記事 名1: +きじ 生地 名1: +きじ 雉 代1: +きじく 基軸 名1: +きじく 機軸 名1: +きじつ 期日 名1: +きじま 木島 苗字: +きじまだいら 木島平 地名: +きじゅ 喜寿 名1: +きじゅつ 記述 名6: +きじゅつ 奇術 名1: +きじゅん 基準 名1: +きじゅん 規準 名1: +きじょう 機上 名1: +きじょう 机上 名1: +きじょう 気丈 形動4: +きじょう 木城 地名: +きじん 奇人 名1: +きす キス 代4: +きす 鱚 代1: +きすう 奇数 名1: +きすき 木次 地名: +きず 築 カ五5: +きず 傷 代1: +きず 瑕 代1: +きずあと 傷跡 名1: +きずきあげ 築き上げ 一段1: +きずぐち 傷口 名1: +きずつ 傷つ カ五5: +きずな 絆 代1: +きせ 着せ 一段2: +きせい 規制 名6: +きせい 規正 名6: +きせい 帰省 名7: +きせい 寄生 代4: +きせい 既製 名1: +きせい 既成 名1: +きせい 気勢 名1: +きせい 奇声 名1: +きせい 期生 助数: +きせい 紀勢 名1: +きせき 奇跡 名4: +きせき 軌跡 名1: +きせつ 季節 名1: +きせつ 既設 名1: +きせのん キセノン 名1: +きせん 汽船 名1: +きぜつ 気絶 名6: +きぜん 毅然 形動2: +きそ 競 ワ五7: +きそ 基礎 名1: +きそ 起訴 名6: +きそ 木曽 苗字: +きそ 木曽 地名: +きそ 木曾 地名: +きそ 木祖 地名: +きそう 寄贈 名6: +きそう 起草 名6: +きそうてんがい 奇想天外 形動1: +きそく 規則 名4: +きそふくしま 木曾福島 地名: +きそん 既存 名6: +きそん 毀損 名6: +きぞう 寄贈 名6: +きぞく 貴族 名1: +きぞく 帰属 名6: +きぞん 既存 名1: +きた 北 代1: +きた 北 苗字: +きた 北 接頭2: +きた 喜多 苗字: +きた 木田 地名: +きた 来 ラ五1:サ五1: +きた 来た サ五1: +きたあいき 北相木 地名: +きたあいづ 北会津 地名: +きたあきた 北秋田 地名: +きたあずみ 北安曇 地名: +きたあだち 北足立 地名: +きたあまべ 北海部 地名: +きたありま 北有馬 地名: +きたい 期待 名7: +きたい 気体 名1: +きたい 機体 名1: +きたいばらき 北茨城 地名: +きたうおぬま 北魚沼 地名: +きたうら 北浦 苗字: +きたうら 北浦 地名: +きたうわ 北宇和 地名: +きたえ 鍛え 一段3: +きたえあげ 鍛え上げ 一段3: +きたかぜ 北風 代1: +きたかた 喜多方 地名: +きたかた 北方 苗字: +きたかた 北方 地名: +きたかつしか 北葛飾 地名: +きたかつらぎ 北葛城 地名: +きたかみ 北上 苗字: +きたかみ 北上 地名: +きたかわち 北河内 地名: +きたかわべ 北川辺 地名: +きたかんばら 北蒲原 地名: +きたがた 北方 地名: +きたがわ 北側 名1: +きたがわ 北川 苗字: +きたがわ 北川 地名: +きたきゅうしゅう 北九州 地名: +きたく 帰宅 名6: +きたく 寄託 名6: +きたくわだ 北桑田 地名: +きたぐち 北口 名1: +きたぐんま 北群馬 地名: +きたけ 着丈 名1: +きたこま 北巨摩 地名: +きたごう 北郷 苗字: +きたごう 北郷 地名: +きたさいたま 北埼玉 地名: +きたさく 北佐久 地名: +きたざわ 北沢 苗字: +きたしおばら 北塩原 地名: +きたしげやす 北茂安 地名: +きたしたら 北設楽 地名: +きたじま 北島 苗字: +きたそうま 北相馬 地名: +きたたかぎ 北高来 地名: +きたたちばな 北橘 地名: +きたたま 北多摩 地名: +きただいとう 北大東 地名: +きたつがる 北津軽 地名: +きたつる 北都留 地名: +きたな 汚 形5: +きたなかぐすく 北中城 地名: +きたならし 汚らし 形5: +きたにほん 北日本 名1: +きたの 北野 苗字: +きたの 北野 地名: +きたはた 北波多 地名: +きたはら 北原 苗字: +きたはんきゅう 北半球 名1: +きたひやま 北桧山 地名: +きたまつうら 北松浦 地名: +きたみ 北見 苗字: +きたみ 北見 地名: +きたみまき 北御牧 地名: +きたむら 北村 苗字: +きたむらやま 北村山 地名: +きたむろ 北牟婁 地名: +きたもと 北本 苗字: +きたもと 北本 地名: +きたもろかた 北諸県 地名: +きたやま 北山 苗字: +きたやま 北山 地名: +きたる 来る 連体: +きたろう 喜太郎 名前: +きたん 忌憚 名1: +きだ 木田 苗字: +きだ 木田 地名: +きだて 気だて 代1: +きだん 気団 名1: +きち 基地 名1: +きち 既知 名1: +きち 機知 名1: +きち 貴地 名1: +きち 吉 代1: +きちがい 気違い 名1: +きちじつ 吉日 名1: +きちじょうじ 吉祥寺 地名: +きちゃく 帰着 名6: +きちゅう 忌中 名1: +きちょう 基調 名1: +きちょう 機長 名1: +きちょう 記帳 名7: +きちょう 貴重 形動4: +きちんと きちんと 副4: +きっかけ きっかけ 代1: +きっかり きっかり 代6: +きっかわ 吉川 苗字: +きっきょう 吉凶 名1: +きっく キック 代4: +きっこう 拮抗 名6: +きっさ 喫茶 名1: +きっさてん 喫茶店 名1: +きっす キッス 代4: +きっすい 生粋 名1: +きっちょう 吉兆 名1: +きっちり きっちり 副9: +きっちん キッチン 名1: +きって 切手 名1: +きっと きっと 副1: +きっと キット 代1: +きっぱり きっぱり 副2: +きっぷ 切符 名1: +きっぽう 吉報 名1: +きつ きつ 形7: +きつ 吃 単漢: +きつ 喫 単漢: +きつ 桔 単漢: +きつ 橘 単漢: +きつ 詰 単漢: +きつえん 喫煙 名6: +きつかわ 橘川 苗字: +きつき 杵築 地名: +きつけ 着付け 名1: +きつね 狐 代1: +きつもん 詰問 名6: +きつれがわ 喜連川 地名: +きづ 気付 カ五8: +きづ 木津 苗字: +きづ 木津 地名: +きづか 気遣 ワ五7: +きづかれ 気疲れ 代4: +きづけ 気付 名1: +きてい 規定 名6: +きてい 規程 名1: +きてい 既定 名1: +きてい 基底 名1: +きてき 汽笛 代1: +きてん 基点 名1: +きてん 機転 名1: +きてん 貴店 名1: +きてん 起点 名1: +きでん 貴殿 代1: +きと 帰途 名1: +きと 企図 名6: +きとう 祈祷 名7: +きとう 木頭 地名: +きとく 危篤 名3: +きとく 奇特 名10: +きとく 既得 名1: +きど 気取 ラ五7: +きど 輝度 名1: +きど 木戸 苗字: +きど 気ど ラ五7: +きどう 軌道 名1: +きどう 機動 名1: +きどう 起動 名6: +きどうたい 機動隊 名1: +きどるい 希土類 名1: +きない 機内 名1: +きなが 気長 名8: +きなさ 鬼無里 地名: +きにい 気に入 ラ五2: +きにゅう 記入 名7: +きにん 帰任 名6: +きぬ 絹 代1: +きぬいと 絹糸 名1: +きぬた 砧 名1: +きぬた 砧 地名: +きね 杵 代1: +きねま キネマ 名1: +きねん 記念 名6: +きねん 祈念 名6: +きねんひん 記念品 名1: +きねんび 記念日 名1: +きのう 昨日 代6: +きのう 機能 名6: +きのう 帰納 名6: +きのえ 木江 地名: +きのくにや 紀伊国屋 名1: +きのさき 城崎 苗字: +きのさき 城崎 地名: +きのした 木下 苗字: +きのどく 気の毒 名9: +きのり 気乗り 代4: +きはく 希薄 名8: +きはく 気迫 名1: +きはつ 揮発 名6: +きはつゆ 揮発油 名1: +きはら 木原 苗字: +きはん 規範 名1: +きば 黄ば マ五3: +きば 牙 名1: +きば 気張 ラ五7: +きば 騎馬 名1: +きば 木場 苗字: +きば 木場 地名: +きばく 起爆 名1: +きばつ 奇抜 名8: +きばらし 気晴らし 代4: +きばん 基板 名1: +きばん 基盤 名1: +きひ 忌避 名6: +きひん 気品 名1: +きひん 貴賓 名1: +きび 機微 代1: +きび 黍 代1: +きび 吉備 地名: +きびきび きびきび 副3: +きびし 厳し 形7: +きびょう 奇病 名1: +きびん 機敏 名8: +きふ 寄付 名7: +きふう 気風 名1: +きふく 起伏 名6: +きぶん 気分 名4: +きへい 騎兵 名1: +きほう 紀宝 地名: +きほう 貴方 名1: +きほく 輝北 地名: +きほん 基本 名4: +きぼ 規模 名1: +きぼう 希望 名7: +きぼり 木彫り 代1: +きま 決ま ラ五4: +きまえ 気前 名1: +きまぐれ 気まぐれ 名8: +きまず 気まず 形3: +きまつ 期末 名1: +きまま 気まま 名8: +きみ 君 代1: +きみ 気味 代1: +きみ 黄身 代1: +きみ 公 単漢: +きみお 公男 名前: +きみこ 喜美子 名前: +きみこ 君子 名前: +きみこ 公子 名前: +きみしま 君島 苗字: +きみじか 気短 代5: +きみじま 君島 苗字: +きみた 君田 地名: +きみたち 君達 代1: +きみつ 機密 名1: +きみつ 君津 地名: +きみひこ 公彦 名前: +きみょう 奇妙 形動4: +きむち キムチ 代1: +きむづかし 気難し 形3: +きむら 木村 苗字: +きめ 決め 一段4: +きめい 記名 名7: +きめこ 決め込 マ五7: +きめつけ 決めつけ 一段3: +きめて 決め手 名1: +きも 肝 代1: +きもち 気持ち 名2: +きもつき 肝属 地名: +きもと 木本 苗字: +きもの 着物 名2: +きもべつ 喜茂別 地名: +きもん 鬼門 名1: +きゃ 伽 単漢: +きゃく 客 名2: +きゃく 客 助数2: +きゃく 脚 助数2: +きゃく 却 単漢: +きゃくあし 客足 名1: +きゃくしつ 客室 名1: +きゃくしゃ 客車 名1: +きゃくしょく 脚色 名6: +きゃくせき 客席 名1: +きゃくせん 客船 名1: +きゃくちゅう 脚注 名1: +きゃくほん 脚本 名1: +きゃくま 客間 名1: +きゃしゃ 華奢 代5: +きゃしゃ きゃしゃ 代5: +きゃすと キャスト 代4: +きゃたつ 脚立 名1: +きゃっか 却下 名6: +きゃっかん 客観 名4: +きゃっこう 脚光 名1: +きゃっしゅ キャッシュ 名1: +きゃっしんぐ キャッシング 名1: +きゃっち キャッチ 代4: +きゃのん キャノン 企業: +きゃばれー キャバレー 名1: +きゃびねっと キャビネット 名1: +きゃぷてん キャプテン 名1: +きゃらくた キャラクタ 名1: +きゃりあ キャリア 名1: +きゃんせる キャンセル 名6: +きゃんでぃ キャンディ 名1: +きゃんでぃー キャンディー 名1: +きゃんばす キャンバス 名1: +きゃんぱす キャンパス 名1: +きゃんぷ キャンプ 名6: +きゃんぺーん キャンペーン 名6: +きやく 規約 名1: +きやす 気安 形6: +きやすめ 気休め 名1: +きやま 基山 地名: +きゅー キュー 名1: +きゅう 急 代5: +きゅう 灸 代1: +きゅう 球 代1:助数: +きゅう 給 接尾1: +きゅう 旧 接頭1: +きゅう 級 接尾1:助数: +きゅう 丘 単漢: +きゅう 久 単漢: +きゅう 仇 単漢: +きゅう 休 単漢: +きゅう 及 単漢: +きゅう 吸 単漢: +きゅう 宮 単漢: +きゅう 弓 単漢: +きゅう 救 単漢: +きゅう 朽 単漢: +きゅう 求 単漢: +きゅう 汲 単漢: +きゅう 泣 単漢: +きゅう 究 単漢: +きゅう 窮 単漢: +きゅう 笈 単漢: +きゅう 糾 単漢: +きゅう 鳩 単漢: +きゅう 嗅 単漢: +きゅうあい 求愛 名6: +きゅういん 吸引 名6: +きゅうえん 救援 名6: +きゅうえん 休演 名6: +きゅうか 休暇 名1: +きゅうか 旧家 名1: +きゅうかい 休会 代4: +きゅうかく 嗅覚 名1: +きゅうかん 休刊 名6: +きゅうかん 休館 名6: +きゅうかん 急患 名1: +きゅうかん 旧館 名1: +きゅうかんちょう 九官鳥 名1: +きゅうがく 休学 名6: +きゅうきゅう 救急 名1: +きゅうきゅうしゃ 救急車 名1: +きゅうきょ 急きょ 副1: +きゅうきょく 究極 名4: +きゅうきん 給金 名1: +きゅうぎ 球技 名1: +きゅうぎょう 休業 名6: +きゅうくつ 窮屈 名8: +きゅうけい 休憩 名7: +きゅうけい 求刑 名6: +きゅうけい 球形 名1: +きゅうけい 急啓 名1: +きゅうけつ 吸血 名6: +きゅうけつき 吸血鬼 名1: +きゅうげき 急激 形動4: +きゅうげん 急減 名6: +きゅうこう 急行 名6: +きゅうこう 休校 名6: +きゅうこう 休講 名6: +きゅうこうか 急降下 代4: +きゅうこく 急告 名6: +きゅうこん 求婚 名6: +きゅうこん 球根 名1: +きゅうご 救護 名6: +きゅうさい 救済 名6: +きゅうさい 休載 名6: +きゅうし 休止 名6: +きゅうし 急死 名6: +きゅうしき 旧式 名8: +きゅうしふ 休止符 名1: +きゅうしゅう 吸収 名6: +きゅうしゅう 九州 名1: +きゅうしゅつ 救出 名6: +きゅうしょ 急所 名1: +きゅうしょく 休職 名6: +きゅうしょく 求職 名6: +きゅうしょく 給食 名6: +きゅうしん 急進 名6: +きゅうしん 休診 名6: +きゅうじつ 休日 名1: +きゅうじょ 救助 名6: +きゅうじょう 休場 名6: +きゅうじょう 球場 名1: +きゅうじょう 球状 名1: +きゅうじょう 窮状 名3: +きゅうじょうしょう 急上昇 名6: +きゅうじょたい 救助隊 名1: +きゅうじん 求人 名1: +きゅうす 急須 名1: +きゅうすい 給水 名6: +きゅうすう 級数 名1: +きゅうせい 急性 名1: +きゅうせい 急逝 名7: +きゅうせい 旧制 名1: +きゅうせい 旧姓 名1: +きゅうせいしゅ 救世主 名1: +きゅうせいちょう 急成長 名6: +きゅうせき 旧跡 名1: +きゅうせん 休戦 名6: +きゅうそう 急送 名6: +きゅうそく 休息 名7: +きゅうそく 急速 名8: +きゅうぞう 急増 名6: +きゅうだい 及第 名6: +きゅうだい 九大 名1: +きゅうだん 糾弾 名6: +きゅうだん 球団 名1: +きゅうち 窮地 名1: +きゅうち 旧知 名1: +きゅうちゃく 吸着 名6: +きゅうちゅう 宮中 名1: +きゅうちょう 級長 名1: +きゅうてい 宮廷 名1: +きゅうていしゃ 急停車 名6: +きゅうてん 急転 名6: +きゅうでん 宮殿 名1: +きゅうとう 急騰 名6: +きゅうとう 給湯 名1: +きゅうにゅう 吸入 名6: +きゅうねん 旧年 名1: +きゅうは 急派 名6: +きゅうはく 急迫 名6: +きゅうば 急場 名1: +きゅうばん 吸盤 名1: +きゅうびょう 急病 名1: +きゅうふ 給付 名6: +きゅうふきん 給付金 名1: +きゅうへん 急変 名7: +きゅうほう 急報 名6: +きゅうほうじ 久宝寺 地名: +きゅうぼ 急募 名6: +きゅうむ 急務 名1: +きゅうめい 救命 名1: +きゅうめい 究明 名6: +きゅうめい 糾明 名6: +きゅうめん 球面 名1: +きゅうゆ 給油 名6: +きゅうゆう 級友 名1: +きゅうゆう 旧友 名1: +きゅうよ 給与 名6: +きゅうよう 休養 名7: +きゅうよう 急用 名1: +きゅうらい 旧来 名1: +きゅうらぎ 厳木 地名: +きゅうらく 急落 名6: +きゅうりゅう 急流 名1: +きゅうりょう 給料 名2: +きゅうりょう 丘陵 名1: +きゅうれき 旧暦 名1: +きゅりー キュリー 名1: +きゆう 杞憂 名1: +きょ 虚 代1: +きょ 居 代1: +きょ 挙 代1: +きょ 嘘 単漢: +きょ 去 単漢: +きょ 巨 単漢: +きょ 拒 単漢: +きょ 拠 単漢: +きょ 渠 単漢: +きょ 許 単漢: +きょ 距 単漢: +きょ 鋸 単漢: +きょう 今日 代6: +きょう 凶 代1: +きょう 興 代1:ザ変: +きょう 郷 代1: +きょう 京 代1: +きょう 共 代1: +きょう 卿 代1: +きょう 境 代1: +きょう 経 代1: +きょう 強 接尾1: +きょう 教 接尾1: +きょう 橋 接尾1: +きょう 鏡 接尾1: +きょう 協 接尾1: +きょう 供 サ変: +きょう 狂 サ変:接尾1: +きょう 饗 サ変: +きょう 杏 単漢: +きょう 叶 単漢: +きょう 亨 単漢: +きょう 享 単漢: +きょう 侠 単漢: +きょう 僑 単漢: +きょう 兇 単漢: +きょう 競 単漢: +きょう 匡 単漢: +きょう 叫 単漢: +きょう 喬 単漢: +きょう 峡 単漢: +きょう 彊 単漢: +きょう 怯 単漢: +きょう 恐 単漢: +きょう 恭 単漢: +きょう 挟 単漢: +きょう 況 単漢: +きょう 狭 単漢: +きょう 矯 単漢: +きょう 胸 単漢: +きょう 脅 単漢: +きょう 蕎 単漢: +きょう 響 単漢: +きょう 驚 単漢: +きょう 兄 単漢: +きょう 梗 単漢: +きょう 劫 単漢: +きょうい 驚異 名4: +きょうい 脅威 名1: +きょうい 胸囲 名1: +きょういく 教育 名6: +きょういち 恭一 名前: +きょういん 教員 名1: +きょうえい 共栄 名6: +きょうえい 競泳 名6: +きょうえき 共益 名1: +きょうえん 競演 名6: +きょうえん 共演 名6: +きょうか 強化 名6: +きょうか 教科 名1: +きょうか 教化 名6: +きょうかい 協会 名1: +きょうかい 境界 名1: +きょうかい 教会 名1: +きょうかく 胸郭 名1: +きょうかしょ 教科書 名1: +きょうかつ 恐喝 名6: +きょうかん 共感 名6: +きょうかん 教官 名1: +きょうがせ 京ヶ瀬 地名: +きょうき 凶器 名1: +きょうき 狂喜 名6: +きょうき 狂気 名1: +きょうき 驚喜 名6: +きょうきゃく 橋脚 名1: +きょうきゅう 供給 名6: +きょうぎ 競技 名6: +きょうぎ 協議 名6: +きょうぎ 狭義 名1: +きょうくん 教訓 名6: +きょうぐう 境遇 名1: +きょうけん 強健 名8: +きょうけん 強権 名1: +きょうけんびょう 狂犬病 名1: +きょうげん 狂言 名1: +きょうこ 京子 名前: +きょうこ 響子 名前: +きょうこ 恭子 名前: +きょうこ 今日子 名前: +きょうこ 強固 形動4: +きょうこう 強硬 形動4: +きょうこう 強行 名6: +きょうこう 恐慌 名1: +きょうこう 凶行 名1: +きょうこく 峡谷 名1: +きょうこく 強国 名1: +きょうこつ 胸骨 代1: +きょうごう 競合 名6: +きょうごう 強豪 名1: +きょうごく 京極 地名: +きょうさい 共催 名7: +きょうさい 共済 名1: +きょうさい 恐妻 名1: +きょうさく 競作 名6: +きょうさく 凶作 名1: +きょうさん 共産 名1: +きょうさん 協賛 名7: +きょうさんとう 共産党 名1: +きょうざい 教材 名1: +きょうざめ 興ざめ 代4:一段1:形動1: +きょうし 教師 名1: +きょうしつ 教室 名2: +きょうしゅう 郷愁 名1: +きょうしゅうじょ 教習所 名1: +きょうしゅく 恐縮 名6: +きょうしゅつ 供出 名6: +きょうしょ 教書 名1: +きょうしょう 狭小 形動4: +きょうしょく 教職 名1: +きょうしん 強震 名1: +きょうしん 共振 名6: +きょうしんしょう 狭心症 名1: +きょうじ 教示 名7: +きょうじゃく 強弱 名1: +きょうじゅ 教授 名7: +きょうじゅ 享受 名7: +きょうじゅつ 供述 名6: +きょうじん 強靭 代5: +きょうじん 狂人 名1: +きょうせい 強制 名6: +きょうせい 矯正 名6: +きょうせい 強請 名6: +きょうせら 京セラ 企業: +きょうそ 教祖 名1: +きょうそう 競争 名6: +きょうそう 競走 名6: +きょうそう 強壮 名8: +きょうそうきょく 協奏曲 名1: +きょうそく 教則 名1: +きょうそん 共存 名6: +きょうぞう 胸像 名1: +きょうぞん 共存 名6: +きょうたく 供託 名6: +きょうたん 驚嘆 名6: +きょうだ 強打 名6: +きょうだい 兄弟 名3: +きょうだい 鏡台 名1: +きょうだい 京大 名1: +きょうだん 教壇 名1: +きょうだん 凶弾 名1: +きょうだん 教団 名1: +きょうち 境地 名1: +きょうちゅう 胸中 名3: +きょうちょう 強調 名6: +きょうちょう 協調 名6: +きょうつう 共通 名8:サ変: +きょうてい 協定 名6: +きょうてい 教程 名1: +きょうてい 競艇 名1: +きょうてき 強敵 名1: +きょうと 京都 地名: +きょうと 教徒 代1: +きょうとう 共闘 名6: +きょうとう 教頭 名1: +きょうとふ 京都府 県区: +きょうど 強度 名8: +きょうど 郷土 名1: +きょうどう 共同 名6: +きょうどう 協同 名6: +きょうどう 経堂 名1: +きょうどう 経堂 地名: +きょうねん 享年 名1: +きょうはく 強迫 名6: +きょうはく 脅迫 名6: +きょうはん 共犯 名1: +きょうばい 競売 名6: +きょうふ 恐怖 名6: +きょうふう 強風 名1: +きょうぶ 胸部 名1: +きょうべん 教鞭 名1: +きょうべん 強弁 代4: +きょうほん 狂奔 名6: +きょうぼう 共謀 名6: +きょうぼう 凶暴 名8: +きょうぼう 狂暴 名8: +きょうみ 興味 名3: +きょうむ 教務 名1: +きょうめい 共鳴 名6: +きょうやく 協約 名6: +きょうゆ 教諭 名1: +きょうゆう 享有 名6: +きょうゆう 共有 名6: +きょうよ 供与 名6: +きょうよう 教養 名1: +きょうよう 強要 名6: +きょうよう 共用 名6: +きょうらく 享楽 名6: +きょうらん 狂乱 名6: +きょうらん 供覧 名6: +きょうり 郷里 名1: +きょうりつ 共立 名1: +きょうりゅう 恐竜 代1: +きょうりょう 橋梁 名1: +きょうりょう 狭量 名8: +きょうりょく 協力 名7: +きょうりょく 強力 名8: +きょうれつ 強烈 名8: +きょうれん 教練 名6: +きょうわ 共和 名1: +きょうわ 協和 名1: +きょうわこく 共和国 名1: +きょえい 虚栄 名1: +きょか 許可 名6: +きょがく 巨額 代5: +きょきょじつじつ 虚々実々 代5: +きょぎ 虚偽 名1: +きょく 曲 代1:助数: +きょく 極 代1: +きょく 局 接尾1: +きょくいん 局員 名1: +きょくぎ 曲技 名1: +きょくげい 曲芸 名1: +きょくげん 極限 名1: +きょくげん 極言 名6: +きょくげん 局限 名6: +きょくし 旭志 地名: +きょくしょ 局所 名1: +きょくしょう 極小 名8: +きょくせい 極性 名1: +きょくせつ 曲折 名6: +きょくせん 曲線 名1: +きょくたん 極端 名8: +きょくだい 極大 名8: +きょくち 極致 名1: +きょくち 局地 名4: +きょくち 極地 名1: +きょくちょう 局長 名1: +きょくてん 極点 名1: +きょくど 極度 名1: +きょくない 局内 名1: +きょくばん 局番 名1: +きょくぶ 局部 名4: +きょくめん 局面 名1: +きょくめん 曲面 名1: +きょくもく 曲目 名1: +きょくりょく 極力 副1: +きょくろん 極論 名6: +きょこう 虚構 名1: +きょこう 挙行 名6: +きょしき 挙式 名6: +きょしつ 居室 名1: +きょしゅ 挙手 名6: +きょしゅう 去就 名1: +きょしゅつ 拠出 名6: +きょしょ 居所 名1: +きょしょう 巨匠 名1: +きょしょく 虚飾 名1: +きょしんたんかい 虚心坦懐 名8: +きょじつ 虚実 名1: +きょじゃく 虚弱 名8: +きょじゅう 居住 名6: +きょじん 巨人 名1: +きょすう 虚数 名1: +きょせい 去勢 名6: +きょせい 虚勢 名1: +きょぜつ 拒絶 名6: +きょたく 居宅 名1: +きょだい 巨大 名8: +きょだく 許諾 名6: +きょだつ 虚脱 名6: +きょっかい 曲解 名6: +きょっけい 極刑 名1: +きょてん 拠点 名1: +きょとう 巨頭 名1: +きょとう 挙党 名1: +きょどう 挙動 名1: +きょなん 鋸南 地名: +きょねん 去年 名1: +きょひ 拒否 名6: +きょひ 巨費 名1: +きょむ 虚無 名1: +きょよう 許容 名6: +きょらい 去来 名6: +きょり 距離 名4: +きょり 巨利 名1: +きょりゅう 居留 名6: +きょれい 虚礼 名1: +きょろきょろ きょろきょろ 副3: +きよ 寄与 名6: +きよ 清 形3: +きよう 器用 形動4: +きよう 起用 名6: +きよかわ 清川 苗字: +きよこ 喜代子 名前: +きよこ 清子 名前: +きよさと 清里 地名: +きよし 潔 名前: +きよし 清 名前: +きよし 清志 名前: +きよし 喜代志 名前: +きよす 清洲 地名: +きよせ 清瀬 苗字: +きよせ 清瀬 地名: +きよたか 清隆 名前: +きよたけ 清武 地名: +きよと 清人 名前: +きよね 清音 地名: +きよはら 清原 苗字: +きよみ 清見 苗字: +きよみ 清見 地名: +きよみ 清美 名前: +きよみず 清水 苗字: +きよみず 清水 地名: +きよめ 清め 一段4: +きよらか 清らか 形動4: +きよわ 気弱 名8: +きら 嫌 ワ五2: +きら 吉良 苗字: +きらい 嫌い 形動7: +きらく 気楽 形動7: +きらめ きらめ カ五3: +きり 霧 代1: +きり 桐 代1: +きりあげ 切り上げ 一段3: +きりあげ 切上げ 名1: +きりおと 切り落と サ五7: +きりかえ 切り替え 一段3:サ変: +きりかえ 切替え 名1: +きりかえ 切替 一段3:サ変: +きりかぶ 切株 名1: +きりかわ 切り替わ ラ五7: +きりきざ 切り刻 マ五5: +きりきず 切傷 名1: +きりぎりす キリギリス 代1: +きりくず 切り崩 サ五7: +きりくち 切口 名1: +きりこ 切り込 マ五7: +きりさげ 切り下げ 一段3: +きりさげ 切下げ 名1: +きりさめ 霧雨 名1: +きりしま 霧島 地名: +きりすて 切捨て 名1: +きりすと キリスト 名1: +きりた 切り立 タ五1: +きりたに 桐谷 苗字: +きりだ 切り出 サ五7: +きりつ 規律 名1: +きりつ 起立 名7: +きりつめ 切り詰め 一段3: +きりと 切り取 ラ五7: +きりとり 切取り 名1: +きりぬ 切り抜 カ五3: +きりぬ 切りぬ カ五3: +きりはな 切り放 サ五7: +きりはな 切り離 サ五7: +きりはり 切り貼り 代4: +きりひら 切り開 カ五7: +きりふだ 切札 名1: +きりまわ 切り回 サ五7: +きりもり 切盛り 代4: +きりゅう 気流 名1: +きりゅう 桐生 地名: +きりゅう 桐生 苗字: +きりょう 器量 名1: +きりょく 気力 名1: +きりん キリン 企業: +きりん 麒麟 代1: +きれい きれい 名9: +きれい 綺麗 名9: +きれい 奇麗 名9: +きれこ 切れ込 マ五7: +きれつ 亀裂 名1: +きれはし 切れ端 代1: +きれま 切れ間 代1: +きれめ 切れ目 名1: +きろ キロ 助数2: +きろ 岐路 名1: +きろ 帰路 名1: +きろく 記録 名6: +きろめーとる 粁 単漢: +きわ 紀和 地名: +きわ 際 代1: +きわだ 際だ タ五5: +きわど きわど 形2: +きわま 極ま ラ五3: +きわま 窮ま ラ五3: +きわみ 極み 名1: +きわめ 極め 一段4: +きわめ 究め 一段2: +きわめて きわめて 副1: +きん 金 代1:接尾1: +きん 筋 接尾1: +きん 菌 代1: +きん 禁 代1:ザ変: +きん 斤 助数2: +きん 勤 代1: +きん 巾 代1: +きん 琴 代1: +きん 金武 地名: +きん 僅 単漢: +きん 均 単漢: +きん 錦 単漢: +きん 欣 単漢: +きん 欽 単漢: +きん 禽 単漢: +きん 緊 単漢: +きん 芹 単漢: +きん 衿 単漢: +きん 襟 単漢: +きん 謹 単漢: +きん 近 単漢: +きん 今 単漢: +きんいち 金一 名前: +きんいつ 均一 名8: +きんいろ 金色 代1: +きんいん 近因 名1: +きんえい 近影 名1: +きんえん 禁煙 名6: +きんか 金貨 名1: +きんか 近火 名1: +きんかい 近海 名1: +きんかい 金塊 名1: +きんかい 琴海 地名: +きんかくじ 金閣寺 名1: +きんかん 近刊 名1: +きんが 謹賀 名1: +きんがく 金額 名1: +きんがん 近眼 名1: +きんき 近畿 地名: +きんきゅう 緊急 名8: +きんきょう 近況 名3: +きんきょり 近距離 名1: +きんきん 近々 副5: +きんぎょ 金魚 名1: +きんく 禁句 名1: +きんぐ キング 名1: +きんけい 謹啓 名1: +きんけん 近県 名1: +きんけん 金権 名1: +きんけん 金券 名1: +きんげん 謹厳 名8: +きんこ 金庫 名1: +きんこ 禁固 名1: +きんこう 近郊 名1: +きんこう 均衡 名6: +きんこつ 筋骨 名1: +きんこんしき 金婚式 名1: +きんさ 僅差 名1: +きんさく 金策 代4: +きんざい 近在 名1: +きんし 禁止 名6: +きんし 近視 名1: +きんしつ 均質 名8: +きんしゅ 禁酒 名6: +きんしゅく 緊縮 名6: +きんしょう 僅少 形動4: +きんしん 謹慎 名6: +きんしん 近親 名1: +きんじ 近似 名6: +きんじ 金治 名前: +きんじち 近似値 名1: +きんじつ 近日 代6: +きんじとう 金字塔 名1: +きんじょ 近所 名3: +きんじろう 金次郎 名前: +きんせい 均整 名1: +きんせい 近世 名1: +きんせい 金星 名1: +きんせい 禁制 代4: +きんせい 謹製 代4: +きんせつ 近接 名6: +きんせん 金銭 名4: +きんそく 禁則 名1: +きんぞう 金蔵 名前: +きんぞく 勤続 名6: +きんぞく 金属 名1: +きんたい 勤怠 名1: +きんたろう 金太郎 名前: +きんだい 近代 名4: +きんだいち 金田一 苗字: +きんだん 禁断 名1: +きんちょう 緊張 名6: +きんてい 謹呈 名6: +きんてつ 近鉄 名1: +きんとう 均等 名8: +きんにく 筋肉 名1: +きんねん 近年 代6: +きんぱく 緊迫 名6: +きんぱく 金箔 名1: +きんぱつ 金髪 名1: +きんぴん 金品 名1: +きんぶん 均分 名6: +きんべん 勤勉 名8: +きんぺん 近辺 名1: +きんぼう 近傍 名1: +きんぼし 金星 名1: +きんぽう 金峰 地名: +きんみつ 緊密 名8: +きんみゃく 金脈 名1: +きんむ 勤務 名6: +きんむさき 勤務先 名1: +きんもつ 禁物 名1: +きんや 欽也 名前: +きんゆ 禁輸 名1: +きんゆう 金融 名1: +きんゆうぎょう 金融業 名1: +きんよう 金曜 名1: +きんようび 金曜日 名1: +きんらい 近来 代6: +きんり 金利 名1: +きんりょう 禁漁 名1: +きんりょう 禁猟 名1: +きんりょく 筋力 名1: +きんりょく 金力 名1: +きんりん 近隣 名1: +きんろう 勤労 名6: +ぎ 儀 代1: +ぎ 妓 代1: +ぎ 技 代1: +ぎ 義 代1: +ぎ 議 代1: +ぎ 着 接尾2: +ぎ 伎 単漢: +ぎ 偽 単漢: +ぎ 宜 単漢: +ぎ 戯 単漢: +ぎ 擬 単漢: +ぎ 欺 単漢: +ぎ 犠 単漢: +ぎ 疑 単漢: +ぎ 祇 単漢: +ぎ 蟻 単漢: +ぎ 誼 単漢: +ぎ 祁 単漢: +ぎあ ギア 名1: +ぎあく 偽悪 名1: +ぎあん 議案 名1: +ぎいち 義一 名前: +ぎいん 議員 名1: +ぎいん 議院 名1: +ぎえんきん 義援金 名1: +ぎおん 擬音 名1: +ぎおん 祇園 地名: +ぎかい 議会 名1: +ぎかん 技官 名1: +ぎきょく 戯曲 名1: +ぎぎ 疑義 名1: +ぎけつ 議決 名6: +ぎけん 技研 名1: +ぎこう 技巧 名4: +ぎごく 疑獄 名1: +ぎごちな ぎごちな 形3: +ぎざぎざ ギザギザ 代5:サ変: +ぎし 技師 名1: +ぎし 義肢 名1: +ぎしき 儀式 名1: +ぎしゅ 義手 名1: +ぎしょう 偽証 名6: +ぎしょう 偽称 名6: +ぎしん 疑心 名1: +ぎしんあんき 疑心暗鬼 名1: +ぎじ 疑似 名1: +ぎじ 議事 名1: +ぎじどう 議事堂 名1: +ぎじゅく 義塾 名1: +ぎじゅつ 技術 名4: +ぎじょう 議場 名1: +ぎじろく 議事録 名1: +ぎじん 擬人 名1: +ぎすぎす ぎすぎす 副9: +ぎせい 犠牲 名4: +ぎせき 議席 名1: +ぎぜん 偽善 名1: +ぎそう 偽装 名6: +ぎそく 義足 名1: +ぎぞう 偽造 名6: +ぎたー ギター 名1: +ぎだい 議題 名1: +ぎちょう 議長 代2: +ぎっしり ぎっしり 代6: +ぎなん 岐南 地名: +ぎねん 疑念 名1: +ぎのう 技能 名1: +ぎのざ 宜野座 地名: +ぎのわん 宜野湾 地名: +ぎふ 岐阜 地名: +ぎふ 義父 名1: +ぎふと ギフト 名1: +ぎふん 義憤 名1: +ぎぶす ギブス 名1: +ぎほう 技法 名1: +ぎぼ 義母 名1: +ぎまん 欺瞞 名6: +ぎみ 気味 接尾6: +ぎむ 義務 名4: +ぎむづけ 義務づけ 一段3: +ぎめい 偽名 名1: +ぎもん 疑問 名1: +ぎゃく 逆 代5:接頭5: +ぎゃく 虐 単漢: +ぎゃくさつ 虐殺 名6: +ぎゃくさん 逆算 名6: +ぎゃくしゅう 逆襲 名6: +ぎゃくじゅん 逆順 名1: +ぎゃくじょう 逆上 名6: +ぎゃくすう 逆数 名1: +ぎゃくせつ 逆説 名1: +ぎゃくたい 虐待 名6: +ぎゃくてん 逆転 名6: +ぎゃくふう 逆風 名1: +ぎゃくもどり 逆戻り 代4: +ぎゃくりゅう 逆流 名6: +ぎゃぐ ギャグ 名1: +ぎゃっきょう 逆境 名1: +ぎゃっこう 逆行 名6: +ぎゃっぷ ギャップ 名1: +ぎゃんぶる ギャンブル 名6: +ぎゅう 牛 代1: +ぎゅうにく 牛肉 名1: +ぎゅうにゅう 牛乳 名1: +ぎょ 魚 接尾1: +ぎょ 御 サ変: +ぎょ 漁 単漢: +ぎょ 禦 単漢: +ぎょい 御意 名1: +ぎょう 行 代1:助数: +ぎょう 業 接尾1: +ぎょう 仰 単漢: +ぎょう 凝 単漢: +ぎょう 尭 単漢: +ぎょう 暁 単漢: +ぎょう 形 単漢: +ぎょうかい 業界 名1: +ぎょうかく 行革 名1: +ぎょうかん 行間 名1: +ぎょうぎ 行儀 名2: +ぎょうぎょうし 仰々し 形3: +ぎょうけつ 凝結 名6: +ぎょうけつ 凝血 名6: +ぎょうこ 凝固 名6: +ぎょうざ 餃子 代1: +ぎょうし 凝視 名6: +ぎょうしゃ 業者 名1: +ぎょうしゅ 業種 名1: +ぎょうしゅう 凝集 名6: +ぎょうしゅく 凝縮 サ変: +ぎょうしょ 行書 代1: +ぎょうしょう 行商 名6: +ぎょうじ 行事 名1: +ぎょうじ 行司 名1: +ぎょうずい 行水 名1: +ぎょうせい 行政 名1: +ぎょうせき 業績 名1: +ぎょうそう 形相 名1: +ぎょうだ 行田 地名: +ぎょうてん 仰天 名6: +ぎょうとう 行頭 名1: +ぎょうまつ 行末 代1: +ぎょうむ 業務 名1: +ぎょうれつ 行列 名6: +ぎょかい 魚介 名1: +ぎょきょう 漁協 名1: +ぎょぎょう 漁業 名1: +ぎょく 玉 代1: +ぎょくさい 玉砕 名6: +ぎょくせきこんこう 玉石混淆 名1: +ぎょくとう 玉東 地名: +ぎょこう 漁港 名1: +ぎょしょう 漁礁 名1: +ぎょじょう 漁場 名1: +ぎょせん 漁船 名1: +ぎょそん 漁村 名1: +ぎょにく 魚肉 名1: +ぎょふ 漁夫 名1: +ぎょみん 漁民 名1: +ぎょらい 魚雷 名1: +ぎょるい 魚類 名1: +ぎょろぎょろ ぎょろぎょろ 副3: +ぎり 義理 名1: +ぎりぎり ぎりぎり 代5: +ぎりしゃ ギリシャ 地名: +ぎりょう 技量 名1: +ぎれい 儀礼 名4: +ぎろん 議論 名6: +ぎわ 際 接尾2: +ぎわく 疑惑 名1: +ぎん 吟 ザ変: +ぎん 銀 代1: +ぎんいろ 銀色 代1: +ぎんか 銀貨 名1: +ぎんかくじ 銀閣寺 名1: +ぎんが 銀河 名1: +ぎんこう 銀行 名1: +ぎんこんしき 銀婚式 名1: +ぎんざ 銀座 名1: +ぎんざ 銀座 地名: +ぎんざん 銀山 名1: +ぎんしょう 吟唱 名6: +ぎんぞう 銀蔵 名前: +ぎんばん 銀盤 名1: +ぎんぱく 銀箔 名1: +ぎんみ 吟味 名6: +く 句 代1: +く 区 代1:接尾4:助数: +く 苦 接尾1: +く 組 マ五7: +く 酌 マ五5: +く 汲 マ五5: +く 食 ワ五5: +く 繰 ラ五3: +く 来 単漢: +く 久 単漢: +く 供 単漢: +く 倶 単漢: +く 狗 単漢: +く 玖 単漢: +く 矩 単漢: +く 躯 単漢: +く 駆 単漢: +く 駈 単漢: +く 駒 単漢: +く 孔 単漢: +く 工 単漢: +く 貢 単漢: +く 口 単漢: +くーぽん クーポン 名1: +くーらー クーラー 名1: +くーる クール 名8: +くい 杭 代1: +くい 悔い 一段3: +くい 久井 地名: +くいーん クイーン 名1: +くいあ 食い合 ワ五7: +くいい 食い入 ラ五1: +くいき 区域 名1: +くいこ 食い込 マ五7: +くいさが 食い下が ラ五1: +くいず クイズ 名1: +くいちが 食い違 ワ五3: +くいつ 食いつ カ五7: +くいとめ 食い止め 一段1: +くう 空 代1: +くういき 空域 名1: +くうかん 空間 名1: +くうき 空気 名1: +くうきょ 空虚 代5: +くうぐん 空軍 名1: +くうこう 空港 名1: +くうしゃ 空車 名1: +くうしゅう 空襲 名6: +くうせき 空席 名1: +くうぜん 空前 名1: +くうそ 空疎 代5: +くうそう 空想 名6: +くうちゅう 空中 名1: +くうちょう 空調 名1: +くうてん 空転 名6: +くうどう 空洞 名1: +くうはく 空白 名8: +くうふく 空腹 名1: +くうほう 空砲 名1: +くうぼ 空母 名1: +くうゆ 空輸 名6: +くうれい 空冷 名1: +くうろ 空路 名1: +くうろん 空論 名1: +くぇすちょん クェスチョン 名1: +くえい 区営 名1: +くぉーつ クォーツ 名1: +くぉりてぃー クォリティー 名1: +くか 久賀 地名: +くかく 区画 名6:助数: +くかん 区間 名1: +くが 玖珂 地名: +くがく 苦学 名6: +くき 久喜 地名: +くき 茎 代1: +くきざき 茎崎 地名: +くきょう 苦境 名3: +くぎ 釘 名1: +くぎ 区切 ラ五7: +くぎづけ 釘付け 代4: +くぎの 久木野 地名: +くく 括 ラ五5: +くぐ 潜 ラ五1: +くぐい 鵠 単漢: +くぐの 久々野 地名: +くけい 矩形 名1: +くさ 臭 形8: +くさ 草 代1: +くさ 腐 ラ五5: +くさか 日下 苗字: +くさかべ 日下部 苗字: +くさつ 草津 地名: +くさの 草野 苗字: +くさばな 草花 名1: +くさり 鎖 代1: +くさわけ 草分け 名1: +くし 駆使 代4: +くし 串 代1: +くし 櫛 代1: +くし 釧 単漢: +くしがた 櫛形 地名: +くしきの 串木野 苗字: +くしきの 串木野 地名: +くしくも 奇しくも 副1: +くしだ 串田 苗字: +くしはら 串原 地名: +くしびき 櫛引 地名: +くしま 串間 地名: +くしもと 串本 地名: +くしゃみ くしゃみ 代1: +くしょう 苦笑 代4: +くしら 串良 地名: +くしろ 釧路 地名: +くしん 苦心 名6: +くじ 久慈 地名: +くじびき くじ引き 代4: +くじゃく 孔雀 代1: +くじゅう 久住 地名: +くじゅう 苦渋 名1: +くじゅうくり 九十九里 地名: +くじょ 駆除 名6: +くじょう 苦情 名1: +くじら 鯨 代1: +くす 玖珠 地名: +くす 樟 代1: +くす 楠 地名: +くすくす くすくす 副2: +くすぐ くすぐ ラ五3: +くすのき 楠 代1: +くすのき 樟 単漢: +くすもと 楠本 苗字: +くすり 薬 名2: +くず 屑 代1: +くず 葛 代1: +くず 崩 サ五7: +くずう 葛生 地名: +くずまき 葛巻 地名: +くずれ 崩れ 一段4: +くずれおち 崩れ落ち 一段3: +くせ 癖 代1: +くせ 久世 地名: +くせつ 苦節 名1: +くせもの 曲者 名1: +くせん 苦戦 名6: +くぜ 久瀬 地名: +くそ 糞 代1: +くだ 下 サ五7:ラ五7: +くだ 管 代1: +くだ 砕 カ五1: +くだけ 砕け 一段3: +くださ 下さ ラ五7: +くだまつ 下松 地名: +くだもの 果物 名1: +くだらな 下らな 形2: +くだん 九段 地名: +くだん 件 代1: +くだんした 九段下 地名: +くち 朽ち 一段1: +くち 口 名2: +くち 口 助数2: +くちあたり 口当り 代1: +くちえ 口絵 名1: +くちかず 口数 名1: +くちがね 口金 名1: +くちく 駆逐 名6: +くちぐせ 口癖 名1: +くちぐせ 口ぐせ 名1: +くちぐるま 口車 名1: +くちずさ 口ずさ マ五7: +くちづけ 口づけ 代4: +くちのつ 口之津 地名: +くちばし 口走 ラ五3: +くちび 口火 名1: +くちびる 唇 代1: +くちべに 口紅 名1: +くちもと 口元 代1: +くちゅう 駆虫 名6: +くちょう 口調 名1: +くちょう 区長 名1: +くちわ 口和 地名: +くっきょう 屈強 形動4: +くっきょく 屈曲 名6: +くっきり くっきり 副9: +くっさく 掘削 名6: +くっし 屈指 名1: +くっしゃろこ 屈斜路湖 地名: +くっしょん クッション 名1: +くっしん 屈伸 代4: +くっせつ 屈折 代4: +くったく 屈託 代4: +くっちゃん 倶知安 地名: +くっつ くっつ カ五5: +くっつけ くっつけ 一段1: +くっぷく 屈伏 名6: +くっぷく 屈服 名6: +くつ 靴 名2: +くつ 屈 単漢: +くつ 掘 単漢: +くつ 窟 単漢: +くつ 沓 単漢: +くつ 堀 単漢: +くつう 苦痛 名1: +くつがえ 覆 サ五5:ラ五1: +くつき 朽木 地名: +くつした 靴下 名1: +くつじゅう 屈従 名6: +くつじょく 屈辱 名1: +くつろ 寛 ガ五8: +くつわ 轡 代1: +くてん 句点 名1: +くてん 区点 名1: +くとう 苦闘 名6: +くとうてん 句読点 名1: +くど くど 形2: +くど 口説 カ五7: +くどう 駆動 名6: +くどう 工藤 苗字: +くどう 久遠 地名: +くどやま 九度山 地名: +くない 区内 名1: +くないちょう 宮内庁 名1: +くなしり 国後 地名: +くなん 苦難 名1: +くに 国 名2: +くに 六合 地名: +くに 邦 単漢: +くに 國 単漢: +くにい 国井 苗字: +くにえだ 国枝 苗字: +くにお 国男 名前: +くにお 国夫 名前: +くにお 国雄 名前: +くにお 邦男 名前: +くにお 邦夫 名前: +くにお 邦雄 名前: +くにがみ 国頭 地名: +くにく 苦肉 名1: +くにぐに 国々 代1: +くにこ 邦子 名前: +くにさき 国東 地名: +くにたち 国立 地名: +くにとみ 国富 地名: +くにひこ 国彦 名前: +くにひこ 邦彦 名前: +くにみ 国見 苗字: +くにみ 国見 地名: +くの 久野 苗字: +くのう 苦悩 名6: +くのへ 九戸 地名: +くば 配 ラ五7: +くび 首 代1: +くび 頚 代1: +くびき 頚城 地名: +くびすじ 首筋 代1: +くふう 工夫 名6: +くぶくりん 九分九厘 代6: +くぶん 区分 名6: +くべ くべ 一段1: +くべつ 区別 名6: +くほんぶつ 九品仏 地名: +くぼ 久保 苗字: +くぼかわ 窪川 苗字: +くぼた 久保田 苗字: +くぼた 窪田 苗字: +くま 久万 地名: +くま 球磨 地名: +くま 熊 代1: +くま 隈 代1: +くまいし 熊石 地名: +くまがい 熊谷 苗字: +くまがや 熊谷 苗字: +くまがや 熊谷 地名: +くまくら 熊倉 苗字: +くまげ 熊毛 地名: +くまざわ 熊沢 苗字: +くまだ 熊田 苗字: +くまとり 熊取 地名: +くまの 熊野 苗字: +くまの 熊野 地名: +くまのがわ 熊野川 地名: +くまもと 熊本 苗字: +くまもと 熊本 地名: +くまやま 熊山 地名: +くみ 組 代1:助数: +くみ 久美 名前: +くみあ 組み合 ワ五7: +くみあい 組合 名1: +くみあげ 汲み上げ 一段1: +くみあげ 組み上げ 一段1: +くみあわ 組み合わ サ五1: +くみあわせ 組合せ 名1: +くみあわせ 組み合わせ 名1: +くみいれ 組み入れ 一段3: +くみこ 久美子 名前: +くみこ 組み込 マ五7: +くみたて 組み立て 一段3: +くみつ 組み付 カ五3: +くみと 汲み取 ラ五7: +くみと くみ取 ラ五7: +くみはま 久美浜 地名: +くみはん 組版 名1: +くみやま 久御山 地名: +くみん 区民 名1: +くめ 久米 苗字: +くめ 久米 地名: +くめ 粂 単漢: +くめなん 久米南 地名: +くめん 工面 名6: +くも 雲 代1: +くも 蜘蛛 代1: +くも 曇 ラ五7: +くもつ 供物 名2: +くもん 苦悶 名6: +くや 悔や マ五8: +くやくしょ 区役所 名1: +くやし 悔し 形5: +くよう 供養 名7: +くら 蔵 名2: +くら 倉 名2: +くら 鞍 代1: +くら 暗 形6: +くら 暮ら サ五8: +くら くら マ五7: +くら 食ら ワ五1: +くらい くらい 接尾1:助数2: +くらい 位 接尾1: +くらい 位 助数2: +くらいあんと クライアント 代1: +くらいし 倉石 苗字: +くらいし 倉石 地名: +くらいまっくす クライマックス 名8: +くらく 苦楽 名1: +くらくしょん クラクション 名1: +くらさわ 倉沢 苗字: +くらしき 倉敷 地名: +くらしっく クラシック 名8: +くらす クラス 名1: +くらすた クラスタ 名1: +くらた 倉田 苗字: +くらたけ 倉岳 地名: +くらっしゅ クラッシュ 名6: +くらっち クラッチ 名1: +くらて 鞍手 地名: +くらはし 倉橋 苗字: +くらふと クラフト 名1: +くらぶ クラブ 名1: +くらぶ 倶楽部 名1: +くらぶち 倉淵 地名: +くらべ 比べ 接尾1:一段2: +くらべ 較べ 一段2: +くらま 鞍馬 地名: +くらもち 倉持 苗字: +くらもと 倉本 苗字: +くらやみ 暗闇 名1: +くらよし 倉吉 地名: +くらよし 倉吉 苗字: +くり 栗 名1: +くりーにんぐ クリーニング 名6: +くりーむ クリーム 名1: +くりーん クリーン 名1: +くりあ クリア 代5:サ変: +くりあげ 繰り上げ 一段3: +くりいれ 繰り入れ 一段3: +くりかえ 繰り返 サ五7: +くりこ 繰り越 サ五7: +くりこ 繰り込 マ五7: +くりこし 繰越 名1: +くりこま 栗駒 地名: +くりさげ 繰り下げ 一段3: +くりさわ 栗沢 地名: +くりすたる クリスタル 名1: +くりすます クリスマス 名1: +くりた 栗太 地名: +くりた 栗田 苗字: +くりだ 繰り出 サ五7: +くりっく クリック 代4: +くりっぴんぐ クリッピング 代1: +くりっぷ クリップ 名1: +くりつ 区立 名1: +くりにっく クリニック 名1: +くりの 栗野 苗字: +くりのべ 繰り延べ 一段3: +くりのべ 繰延 名1: +くりはし 栗橋 苗字: +くりはら 栗原 苗字: +くりはら 栗原 地名: +くりばやし 栗林 苗字: +くりひろげ 繰り広げ 一段3: +くりもと 栗源 地名: +くりもと 栗本 苗字: +くりやま 栗山 苗字: +くりょ 苦慮 名6: +くる 狂 ワ五8: +くる くる マ五7: +くる 来る カ変終体: +くるー クルー 名1: +くるくる くるくる 副3: +くるし 苦し 形9:マ五8: +くるま くるま ラ五5: +くるま 車 名2: +くるま クルマ 名1: +くるまだい 車代 名2: +くるみ 胡桃 代1: +くるみ くるみ 代1: +くるめ 久留米 地名: +くれ くれ 一段1: +くれ 呉 地名: +くれ 暮れ 一段3: +くれ 来れ カ変仮: +くれーたー クレーター 名1: +くれーむ クレーム 名1: +くれーん クレーン 名1: +くれおぱとら クレオパトラ 代1: +くれぐれ くれぐれ 副6: +くれじっと クレジット 名6: +くれない 紅 代1: +くろ 黒 名1:形11: +くろーく クローク 名1: +くろーず クローズ 代4: +くろいし 黒石 苗字: +くろいし 黒石 地名: +くろいそ 黒磯 地名: +くろいわ 黒岩 苗字: +くろう 苦労 名7:形動8: +くろうと 玄人 代2: +くろかわ 黒川 苗字: +くろかわ 黒川 地名: +くろき 黒木 苗字: +くろさき 黒崎 苗字: +くろさわ 黒沢 苗字: +くろしお 黒潮 名1: +くろじ 黒字 名1: +くろす クロス 名6: +くろせ 黒瀬 苗字: +くろたき 黒滝 苗字: +くろたき 黒滝 地名: +くろだ 黒田 苗字: +くろだしょう 黒田庄 地名: +くろっく クロック 名1: +くろばね 黒羽 地名: +くろべ 黒部 地名: +くろほね 黒保根 地名: +くろぼし 黒星 名1: +くろまく 黒幕 名1: +くろまつない 黒松内 地名: +くろやなぎ 黒柳 苗字: +くろやま 黒山 名8: +くわ 桑 代1: +くわ 鍬 代1: +くわえ 加え 一段2: +くわけ 区分け 代4: +くわし 詳し 形9: +くわた 桑田 苗字: +くわだて 企て 一段4: +くわな 桑名 苗字: +くわな 桑名 地名: +くわはら 桑原 苗字: +くわばら 桑原 苗字: +くわり 区割り 代4: +くわわ 加わ ラ五7: +くん 訓 代1: +くん 君 接尾1: +くん 薫 ザ変:代1: +くん 勲 代1: +くんいく 訓育 名6: +くんかい 訓戒 名6: +くんこく 訓告 名6: +くんしゅ 君主 名1: +くんしょう 勲章 名1: +くんじ 訓示 名6: +くんとう 薫陶 名7: +くんねっぷ 訓子府 地名: +くんぷう 薫風 名1: +くんよみ 訓読み 代4: +くんりん 君臨 名6: +くんれい 訓令 名6: +くんれん 訓練 名7: +くんわ 訓話 名6: +ぐ 具 代1: +ぐ 愚 代1: +ぐ 倶 単漢: +ぐ 虞 単漢: +ぐ 惧 単漢: +ぐあい 具合 名1: +ぐあてまら グアテマラ 地名: +ぐう 遇 サ変: +ぐう 偶 代1: +ぐう 宮 代1: +ぐう 隅 単漢: +ぐう 寓 単漢: +ぐうじ 宮司 名1: +ぐうすう 偶数 名1: +ぐうぜん 偶然 代5: +ぐうぞう 偶像 名1: +ぐうはつ 偶発 名6: +ぐきょ 愚挙 名1: +ぐしかみ 具志頭 地名: +ぐしかわ 具志川 地名: +ぐしょう 具象 名6: +ぐしん 具申 名6: +ぐじょう 郡上 地名: +ぐすくべ 城辺 地名: +ぐたい 具体 名4: +ぐち 愚痴 名1: +ぐち 口 接尾2: +ぐちょく 愚直 名8: +ぐっしょり ぐっしょり 副8: +ぐっと ぐっと 副1: +ぐどん 愚鈍 代5: +ぐび 具備 名6: +ぐみ 組 接尾2: +ぐらいだー グライダー 名1: +ぐらうんど グラウンド 名1: +ぐらす グラス 名1: +ぐらふ グラフ 名1: +ぐらふぃっく グラフィック 名1: +ぐらまー グラマー 名8: +ぐらむ グラム 助数2: +ぐらんど グランド 名1: +ぐりーん グリーン 名1: +ぐりこーげん グリコーゲン 名1: +ぐりせりん グリセリン 名1: +ぐりっど グリッド 名1: +ぐりる グリル 名1: +ぐるーぴんぐ グルーピング 名6: +ぐるーぷ グループ 名1: +ぐるい 狂い 接尾6: +ぐるぐる ぐるぐる 副2: +ぐるめ グルメ 名1: +ぐるり ぐるり 副2: +ぐれー グレー 名1: +ぐれーぷ グレープ 名1: +ぐれい グレイ 名1: +ぐろーばる グローバル 名8: +ぐん 群 接尾1:助数: +ぐん 軍 接尾1:助数: +ぐん 郡 代1:接尾4: +ぐんか 軍歌 名1: +ぐんかく 軍拡 名1: +ぐんかん 軍艦 名1: +ぐんきょ 群居 名6: +ぐんぐん ぐんぐん 副2: +ぐんこく 軍国 名1: +ぐんしきん 軍資金 名1: +ぐんしゅう 群衆 名1: +ぐんしゅう 群集 名6: +ぐんしゅく 軍縮 名1: +ぐんじ 軍事 名1: +ぐんじ 郡司 名前: +ぐんじゅ 軍需 名1: +ぐんじん 軍人 名1: +ぐんせい 群生 名6: +ぐんそう 軍曹 名1: +ぐんぞう 群像 名1: +ぐんたい 軍隊 名1: +ぐんだん 軍団 名1: +ぐんと ぐんと 副1: +ぐんとう 群島 名1: +ぐんばい 軍配 名1: +ぐんび 軍備 名1: +ぐんぶ 郡部 名1: +ぐんぶ 群舞 名6: +ぐんま 群馬 地名: +ぐんよう 軍用 名1: +ぐんらく 群落 名1: +け 蹴 ラ五7: +け 消 サ五7: +け 毛 代1: +け 気 接尾1: +け 家 接尾1: +け 化 単漢: +け 仮 単漢: +け 華 単漢: +け 卦 単漢: +け 袈 単漢: +け 祁 単漢: +け 懸 単漢: +けーき ケーキ 名1: +けーす ケース 名1: +けーぶる ケーブル 名1: +けい 計 接尾1:接頭4: +けい 軽 接頭1: +けい 系 接尾3:助数: +けい 形 接尾1: +けい 刑 接尾1: +けい 啓 代4: +けい 契 代1: +けい 径 代1: +けい 敬 代4: +けい 景 代1: +けい 桂 代1: +けい 経 代1: +けい 京 代1: +けい 罫 代1: +けい 兄 代1: +けい 慶 代4: +けい 卿 代1: +けい 茎 代1: +けい 渓 代1: +けい 型 代1: +けい 馨 単漢: +けい 競 単漢: +けい 境 単漢: +けい 係 単漢: +けい 傾 単漢: +けい 圭 単漢: +けい 珪 単漢: +けい 恵 単漢: +けい 慧 単漢: +けい 憩 単漢: +けい 掲 単漢: +けい 携 単漢: +けい 畦 単漢: +けい 稽 単漢: +けい 継 単漢: +けい 繋 単漢: +けい 荊 単漢: +けい 蛍 単漢: +けい 詣 単漢: +けい 警 単漢: +けい 頚 単漢: +けい 鶏 単漢: +けい 勁 単漢: +けいあい 敬愛 名7: +けいい 敬意 名1: +けいい 経緯 名1: +けいいち 啓一 名前: +けいいち 圭一 名前: +けいいち 恵一 名前: +けいいち 慶一 名前: +けいいち 敬一 名前: +けいいん 契印 名6: +けいえい 経営 名6: +けいえん 敬遠 名6: +けいおう 京王 企業: +けいおう 慶応 名1: +けいおう 慶應 名1: +けいか 経過 名7: +けいかい 警戒 名6: +けいかい 軽快 名8: +けいかく 計画 名7: +けいかん 警官 名1: +けいかん 景観 名1: +けいが 慶賀 名1: +けいがい 形骸 名4: +けいがん 慧眼 名1: +けいき 景気 名1: +けいき 契機 名1: +けいき 計器 名1: +けいき 刑期 名1: +けいぐ 敬具 名1: +けいけん 経験 名7: +けいげん 軽減 名6: +けいこ 稽古 名5: +けいこ 恵子 名前: +けいこ 慶子 名前: +けいこ 圭子 名前: +けいこ 景子 名前: +けいこ 啓子 名前: +けいこ 桂子 名前: +けいこ 敬子 名前: +けいこう 傾向 名1: +けいこう 携行 名6: +けいこう 蛍光 名1: +けいこうぎょう 軽工業 名1: +けいこうとう 蛍光灯 名1: +けいこく 渓谷 名1: +けいこく 警告 名6: +けいご 敬語 名1: +けいご 警護 名6: +けいさい 掲載 名6: +けいさつ 警察 名1: +けいさつかん 警察官 名1: +けいさつしょ 警察署 名1: +けいさつちょう 警察庁 名1: +けいさん 計算 名6: +けいさんき 計算機 名1: +けいさんしょ 計算書 名1: +けいざい 経済 名4: +けいざいかい 経済界 名1: +けいし 警視 名1: +けいし 軽視 名6: +けいしき 形式 名4: +けいしちょう 警視庁 名1: +けいしつ 形質 名1: +けいしゃ 傾斜 名6: +けいしゅつ 掲出 名6: +けいしょう 敬称 名1: +けいしょう 景勝 名1: +けいしょう 継承 名6: +けいしょう 警鐘 名1: +けいしょう 軽傷 名1: +けいしょう 軽症 名1: +けいしょく 軽食 名1: +けいしん 軽震 名1: +けいじ 刑事 名1: +けいじ 掲示 名6: +けいじ 啓司 名前: +けいじ 啓二 名前: +けいじ 圭二 名前: +けいじ 慶治 名前: +けいじ 敬二 名前: +けいじじょう 形而上 代1: +けいじょう 経常 名1: +けいじょう 形状 名1: +けいじょう 計上 名6: +けいじょう 啓上 名6: +けいすう 係数 名1: +けいすう 計数 名1: +けいすけ 佳佑 名前: +けいすけ 佳祐 名前: +けいすけ 啓介 名前: +けいず 系図 名1: +けいせい 形勢 名1: +けいせい 形成 名6: +けいせき 形跡 名1: +けいせつ 蛍雪 名1: +けいせん 罫線 名1: +けいせん 経線 名1: +けいせん 桂川 地名: +けいそう 軽装 名6: +けいそう 係争 名6: +けいそく 計測 名6: +けいそつ 軽率 名8: +けいぞう 啓三 名前: +けいぞう 恵三 名前: +けいぞう 敬三 名前: +けいぞう 恵贈 名7: +けいぞく 継続 名6: +けいた 慶太 名前: +けいたい 形態 名1: +けいたい 携帯 名6: +けいたいそ 形態素 代1: +けいだい 境内 名1: +けいだんれん 経団連 名1: +けいちつ 啓蟄 名1: +けいちゅう 傾注 代4: +けいちょう 傾聴 代4: +けいちょう 慶弔 名1: +けいてい 兄弟 名1: +けいてき 警笛 名1: +けいと 毛糸 名1: +けいとう 系統 名4: +けいとう 傾倒 代4: +けいど 軽度 名1: +けいど 経度 名1: +けいねん 経年 名1: +けいはく 軽薄 名8: +けいはつ 啓発 名6: +けいはん 京阪 企業: +けいはんしん 京阪神 地名: +けいば 競馬 名1: +けいばつ 刑罰 名1: +けいひ 経費 名1: +けいひん 景品 名1: +けいひん 京浜 地名: +けいび 警備 名6: +けいふ 系譜 名1: +けいふく 敬服 名6: +けいふく 京福 企業: +けいぶ 警部 名1: +けいべつ 軽蔑 名6: +けいほう 警報 名1: +けいほう 刑法 名1: +けいほく 京北 地名: +けいみょう 軽妙 形動4: +けいむしょ 刑務所 名1: +けいもう 啓蒙 名6: +けいやく 契約 名7: +けいやくしょ 契約書 名1: +けいゆ 経由 名6: +けいゆ 軽油 名1: +けいよう 形容 名6: +けいよう 掲揚 名6: +けいようし 形容詞 名1: +けいらん 鶏卵 名1: +けいり 経理 代4: +けいりゃく 計略 名1: +けいりゅう 渓流 名1: +けいりょう 計量 名6: +けいりん 競輪 名1: +けいるい 係累 名1: +けいれい 敬礼 代4: +けいれき 経歴 名1: +けいれつ 系列 名1: +けいれん 痙攣 代4: +けいろ 経路 名1: +けいろう 敬老 名1: +けおと け落と サ五5: +けおりもの 毛織物 名1: +けが 怪我 代4: +けが 汚 サ五7: +けがらわし 汚らわし 形2: +けがれ 汚れ 一段4: +けがわ 毛皮 名1: +けさ 今朝 代6: +けさ 袈裟 代1: +けしいん 消印 名1: +けしき 景色 名1: +けしとめ 消し止め 一段3: +けしょう 化粧 名5: +けしょうひん 化粧品 代1: +けしん 化身 名1: +けず 削 ラ五8: +けずりと 削り取 ラ五5: +けせん 気仙 地名: +けせんぬま 気仙沼 地名: +けた 桁 代1:助数: +けたか 気高 地名: +けたたまし けたたまし 形3: +けたちがい 桁違い 代5: +けだか 気高 形2: +けっか 結果 名3: +けっかい 決壊 名6: +けっかく 結核 名1: +けっかく 欠格 名1: +けっかん 欠陥 名1: +けっかん 血管 名1: +けっき 決起 名6: +けっきゅう 血球 名1: +けっきょく 結局 代6: +けっきん 欠勤 名6: +けっこう 結構 代5: +けっこう 決行 名6: +けっこう 欠航 名6: +けっこう 血行 名1: +けっこん 結婚 名7: +けっこん 血痕 名1: +けっこんしき 結婚式 名1: +けっさい 決裁 名7: +けっさい 決済 名7: +けっさく 傑作 名8: +けっさん 決算 名6: +けっし 決死 名1: +けっしゃ 結社 名1: +けっしゅう 結集 名6: +けっしゅつ 傑出 名6: +けっしょう 決勝 名1: +けっしょう 血漿 名1: +けっしょう 結晶 代4: +けっしょうせん 決勝戦 名1: +けっしょく 欠食 名6: +けっしょく 血色 名1: +けっしん 決心 名7: +けっしん 結審 名6: +けっせい 結成 名6: +けっせい 血清 名1: +けっせき 欠席 名7: +けっせき 結石 名1: +けっせん 決戦 名1: +けっせん 血栓 名1: +けっそう 血相 名1: +けっそく 結束 名6: +けっそん 欠損 名6: +けったく 結託 名6: +けっちゃく 決着 名6: +けっちん 血沈 名1: +けってい 決定 名7: +けってん 欠点 名1: +けっとう 決闘 名6: +けっとう 結党 名6: +けっとう 血糖 名1: +けっとう 血統 名1: +けっぱく 潔白 名8: +けっぺき 潔癖 名8: +けつ 欠 代1: +けつ 決 代1: +けつ 穴 代1: +けつ 桔 単漢: +けつ 傑 単漢: +けつ 潔 単漢: +けつ 結 単漢: +けつ 血 単漢: +けつ 訣 単漢: +けつ 蕨 単漢: +けつあつ 血圧 名1: +けつい 決意 代4: +けついん 欠員 名1: +けつえき 血液 名1: +けつえきがた 血液型 代1: +けつえん 血縁 名1: +けつぎ 決議 名6: +けつごう 結合 名6: +けつじつ 結実 名6: +けつじょ 欠如 名6: +けつじょう 欠場 名6: +けつぞく 血族 名1: +けつだん 決断 名7: +けつだん 結団 名6: +けつばん 欠番 名1: +けつべつ 決別 名6: +けつぼう 欠乏 名6: +けつまくえん 結膜炎 名1: +けつまつ 結末 名1: +けつらく 欠落 名6: +けつれい 欠礼 名6: +けつれつ 決裂 名6: +けつろ 結露 代4: +けつろん 結論 名6: +けどういん 祁答院 地名: +けな けな サ五7: +けなげ 健気 形動4: +けなみ 毛並 名1: +けねん 懸念 名6: +けはい 気配 名1: +けびょう 仮病 名1: +けぶか 毛深 形2: +けむ 煙 形4:ラ五3: +けむし 毛虫 代1: +けむた 煙た 形5: +けむり 煙 代1: +けもの 獣 代1: +けらい 家来 名1: +けり けり 代1: +けれど けれど 接続: +けれども けれども 接続: +けわし 険し 形2: +けん 券 接尾1: +けん 権 接尾1: +けん 犬 接尾1: +けん 圏 接尾1: +けん 軒 助数2: +けん 件 代1:助数2: +けん 間 代1:助数2: +けん 剣 代1: +けん 県 代1: +けん 見 代1: +けん 鍵 代1: +けん 兼 代1: +けん 険 代1: +けん 拳 代1: +けん 堅 代1: +けん 験 代4: +けん 研 代1: +けん 肩 代1: +けん 絹 代1: +けん 建 代1: +けん 繭 代1: +けん 憲 代1: +けん 健 名前: +けん 硯 代1: +けん 検 サ変: +けん 献 ザ変: +けん 嫌 単漢: +けん 絢 単漢: +けん 喧 単漢: +けん 鰹 単漢: +けん 倹 単漢: +けん 倦 単漢: +けん 懸 単漢: +けん 捲 単漢: +けん 牽 単漢: +けん 謙 単漢: +けん 賢 単漢: +けん 遣 単漢: +けん 顕 単漢: +けん 鹸 単漢: +けんあく 険悪 形動4: +けんあん 懸案 名3: +けんい 権威 名1: +けんいち 健一 名前: +けんいち 憲一 名前: +けんいち 研一 名前: +けんいち 謙一 名前: +けんいち 賢一 名前: +けんいん 検印 名1: +けんいん 牽引 名6: +けんえい 兼営 名6: +けんえい 県営 名1: +けんえき 検疫 名6: +けんえつ 検閲 名6: +けんえん 嫌煙 名1: +けんえん 犬猿 名1: +けんお 嫌悪 名6: +けんおん 検温 名6: +けんか 県下 名1: +けんか 喧嘩 名6: +けんかい 見解 名1: +けんかい 県会 名1: +けんがい 圏外 名1: +けんがい 県外 名1: +けんがく 見学 名7: +けんがん 検眼 名6: +けんきち 健吉 名前: +けんきゃく 健脚 名10: +けんきゅう 研究 名7: +けんきゅうかい 研究会 名1: +けんきゅうしつ 研究室 名1: +けんきゅうしょ 研究所 名1: +けんきゅうじょ 研究所 名1: +けんきょ 検挙 名6: +けんきょ 謙虚 形動4: +けんきん 献金 名6: +けんぎ 嫌疑 名1: +けんぎ 建議 名6: +けんぎ 県議 名1: +けんぎょう 兼業 名6: +けんけい 県警 名1: +けんけつ 献血 名6: +けんげん 権限 名1: +けんげん 顕現 名6: +けんこう 健康 名10: +けんこうほけん 健康保険 名1: +けんこく 建国 名1: +けんご 堅固 名8: +けんさ 検査 名6: +けんさく 検索 名6: +けんさつ 検察 名6: +けんさつ 検札 名6: +けんさつ 賢察 名7: +けんさつかん 検察官 名1: +けんさつちょう 検察庁 名1: +けんざい 顕在 名7: +けんざい 健在 名10: +けんざい 建材 名1: +けんざぶろう 健三郎 名前: +けんざん 検算 名6: +けんし 検視 名6: +けんしき 見識 名1: +けんしゅう 研修 名6: +けんしゅう 検収 名6: +けんしゅつ 検出 名6: +けんしょう 健勝 名10: +けんしょう 検証 名6: +けんしょう 懸賞 名1: +けんしょう 憲章 名1: +けんしょく 兼職 名6: +けんしん 検診 名6: +けんしん 検針 名6: +けんしん 献身 名6: +けんじ 検事 名1: +けんじ 堅持 名6: +けんじ 顕示 名6: +けんじ 健司 名前: +けんじ 健次 名前: +けんじ 健二 名前: +けんじ 建司 名前: +けんじ 憲司 名前: +けんじ 憲治 名前: +けんじ 憲二 名前: +けんじ 謙治 名前: +けんじ 謙二 名前: +けんじ 賢治 名前: +けんじ 賢二 名前: +けんじつ 堅実 名8: +けんじゃ 賢者 名1: +けんじゅう 拳銃 名1: +けんじょう 献上 名7: +けんじょう 謙譲 名8: +けんじろう 健次郎 名前: +けんじん 県人 名1: +けんじん 賢人 名1: +けんすい 懸垂 名6: +けんすう 件数 名1: +けんすう 軒数 名1: +けんすけ 健介 名前: +けんせい 牽制 名6: +けんせい 権勢 名1: +けんせい 県政 名1: +けんせつ 建設 名6: +けんせつしょう 建設省 名1: +けんぜん 健全 名10: +けんそ 険阻 代5: +けんそう 喧騒 名1: +けんそん 謙遜 名7:形動1: +けんぞう 建造 名6: +けんぞう 健三 名前: +けんぞう 賢三 名前: +けんぞうぶつ 建造物 名1: +けんたい 倦怠 名6: +けんたっきー ケンタッキー 地名: +けんたろう 健太郎 名前: +けんち 検知 名6: +けんち 見地 名1: +けんちく 建築 名6: +けんちくし 建築士 名1: +けんちょ 顕著 形動4: +けんちょう 県庁 名1: +けんてい 検定 名6: +けんてい 献呈 名6: +けんでん 喧伝 名6: +けんとう 検討 名7: +けんとう 健闘 名7: +けんとう 見当 名1: +けんどう 剣道 名1: +けんどう 県道 名1: +けんない 県内 名1: +けんない 圏内 名1: +けんにょう 検尿 名6: +けんにん 兼任 名6: +けんのう 献納 名6: +けんばん 鍵盤 名1: +けんび 兼備 名6: +けんびきょう 顕微鏡 名1: +けんぶち 剣淵 地名: +けんぶつ 見物 名6: +けんぶりっじ ケンブリッジ 代1: +けんぶん 見聞 名6: +けんぶん 検分 名7: +けんべん 検便 名6: +けんぺいりつ 建蔽率 名1: +けんぽ 健保 名1: +けんぽう 憲法 名1: +けんぽう 拳法 名1: +けんみん 県民 名1: +けんむ 兼務 名6: +けんめい 懸命 形動9: +けんめい 賢明 形動4: +けんめい 件名 名1: +けんもん 検問 名6: +けんやく 倹約 名8:サ変: +けんよう 兼用 名6: +けんり 権利 名1: +けんりつ 県立 名1:接尾4: +けんりょく 権力 名1: +けんろう 堅牢 名8: +げ 下 代1: +げ 解 単漢: +げ 外 単漢: +げーと ゲート 名1: +げーとあれい ゲートアレイ 名1: +げーむ ゲーム 代3: +げい 芸 接尾1: +げい 迎 単漢: +げい 鯨 単漢: +げい 睨 単漢: +げい 藝 単漢: +げいげき 迎撃 名6: +げいごう 迎合 名6: +げいごと 芸事 名1: +げいしゃ 芸者 代2: +げいしゃ 迎車 代1: +げいしゅん 迎春 名1: +げいじゅつ 芸術 名4: +げいせい 芸西 地名: +げいとう 芸当 名1: +げいにん 芸人 名1: +げいのう 芸能 名1: +げいのう 芸濃 地名: +げいのうじん 芸能人 名1: +げいひんかん 迎賓館 名1: +げいほく 芸北 地名: +げいめい 芸名 名1: +げか 外科 名1: +げかい 下界 名1: +げき 劇 代1:接尾1: +げき 隙 代1: +げき 激 サ変: +げき 逆 単漢: +げき 戟 単漢: +げき 撃 単漢: +げきか 激化 代4: +げきが 劇画 名1: +げきげん 激減 名6: +げきしん 激震 名1: +げきじょう 劇場 名1: +げきじょう 激情 名1: +げきせん 激戦 名6: +げきぞう 激増 名6: +げきたい 撃退 名6: +げきだん 劇団 名1: +げきつい 撃墜 名6: +げきつう 激痛 名1: +げきてき 劇的 形動1: +げきとう 激闘 名6: +げきとつ 激突 名6: +げきど 激怒 名6: +げきどう 激動 名6: +げきは 撃破 名6: +げきはつ 激発 名6: +げきへん 激変 名6: +げきむ 激務 名1: +げきめつ 撃滅 名6: +げきやく 劇薬 名1: +げきりゅう 激流 名1: +げきれい 激励 名6: +げきれつ 激烈 名8: +げきろん 激論 名6: +げこ 下戸 名1: +げこう 下校 名6: +げざい 下剤 名1: +げざん 下山 名6: +げし 夏至 名1: +げしゃ 下車 名6: +げしゅく 下宿 名6: +げじゅん 下旬 名1: +げすい 下水 名1: +げすいどう 下水道 名1: +げすと ゲスト 名1: +げせん 下船 名6: +げた 下駄 名1: +げだん 下段 名1: +げっか 月下 代1: +げっかん 月刊 名1: +げっかん 月間 名1: +げっきゅう 月給 名1: +げっけい 月経 名1: +げっけいじゅ 月桂樹 名1: +げっさん 月産 名1: +げっしゃ 月謝 名2: +げっしゅう 月収 名1: +げっしょく 月食 名1: +げっぷ 月賦 名1: +げっぺい 月餅 代1: +げっぽう 月俸 名1: +げっぽう 月報 名1: +げつ 月 代1: +げつがく 月額 名1: +げつじ 月次 名1: +げつまつ 月末 名1: +げつよう 月曜 名1: +げつようび 月曜日 名1: +げつり 月利 名1: +げつれい 月例 名1: +げどく 解毒 名6: +げねつ 解熱 名6: +げねつざい 解熱剤 名1: +げひん 下品 名8: +げらく 下落 名6: +げりら ゲリラ 名1: +げれつ 下劣 名8: +げれんで ゲレンデ 名1: +げろ 下呂 地名: +げん 元 代1:助数2: +げん 弦 代1:助数2: +げん 減 代1:ザ変: +げん 源 接尾1: +げん 玄 代1: +げん 現 代1:接頭1:ザ変: +げん 舷 代1: +げん 言 代1: +げん 限 助数2: +げん 厳 代1: +げん 原 代1: +げん 絃 単漢: +げん 諺 単漢: +げん 幻 単漢: +げんあつ 減圧 名6: +げんあん 原案 名1: +げんいん 原因 名6: +げんえい 幻影 名1: +げんえき 現役 名1: +げんえき 減益 名1: +げんえき 原液 名1: +げんか 原価 名1: +げんか 減価 名1: +げんか 現下 名1: +げんか 言下 名1: +げんか 喧嘩 接尾2: +げんかい 限界 名1: +げんかい 厳戒 名6: +げんかく 厳格 形動4: +げんかく 幻覚 名1: +げんかん 玄関 名1: +げんかん 厳寒 名1: +げんが 原画 名1: +げんがい 言外 名1: +げんがく 弦楽 名1: +げんがく 減額 名6: +げんき 元気 名9: +げんきゃく 減却 名6: +げんきゅう 言及 名6: +げんきゅう 減給 名6: +げんきょう 現況 名1: +げんきん 現金 名8: +げんきん 厳禁 名6: +げんぎょう 現業 名1: +げんけい 原型 名1: +げんけい 原形 名1: +げんけい 減刑 名6: +げんこう 原稿 名1: +げんこう 現行 名6: +げんこう 言行 名1: +げんこく 原告 名1: +げんご 言語 名1: +げんご 原語 名1: +げんごう 元号 名1: +げんさい 減殺 名6: +げんさく 原作 名1: +げんさん 原産 名1: +げんさん 減産 名6: +げんさんち 原産地 名1: +げんざい 現在 名1: +げんざいりょう 原材料 名1: +げんざん 減算 名6: +げんし 原始 名4: +げんし 原子 名1: +げんし 減資 代4: +げんしかく 原子核 名1: +げんしゅ 厳守 名6: +げんしゅ 元首 名1: +げんしゅ 原種 名1: +げんしゅ 原酒 名1: +げんしゅう 減収 名6: +げんしゅく 厳粛 形動4: +げんしょ 原書 名1: +げんしょう 現象 名1: +げんしょう 減少 名6: +げんしょく 現職 名1: +げんしょく 原色 名1: +げんしょく 減食 名6: +げんしりょく 原子力 名1: +げんしろ 原子炉 名1: +げんじ 源氏 名1: +げんじ 源治 苗字: +げんじつ 現実 名4: +げんじつみ 現実味 名1: +げんじゅう 厳重 代5: +げんじゅうしょ 現住所 名1: +げんじゅうみん 原住民 名1: +げんじょう 現状 名1: +げんじょう 原状 名1: +げんすい 元帥 名1: +げんすい 減水 名6: +げんすい 減衰 名6: +げんすいばく 原水爆 名1: +げんすん 原寸 名1: +げんず 原図 名1: +げんせい 厳正 名8: +げんせき 原石 名1: +げんせつ 言説 名1: +げんせん 厳選 名6: +げんせん 源泉 名1: +げんぜい 減税 名6: +げんぜん 厳然 形動2: +げんそ 元素 名1: +げんそう 幻想 名4: +げんそう 現送 代4: +げんそく 原則 名4: +げんそく 減速 名6: +げんそん 減損 名1: +げんそん 現存 名6: +げんぞう 現像 名6: +げんぞん 現存 名6: +げんたい 減退 名6: +げんたん 減反 名6: +げんだい 現代 名4: +げんち 現地 代1: +げんち 言質 代1: +げんつき 原付 名1: +げんてい 限定 名6: +げんていばん 限定版 名1: +げんてん 原点 名1: +げんてん 原典 名1: +げんてん 減点 名6: +げんとう 厳冬 名1: +げんど 限度 名1: +げんどう 言動 名1: +げんどうき 原動機 名1: +げんどうりょく 原動力 名1: +げんに 現に 副1: +げんにん 現任 名1: +げんば 現場 名1: +げんばく 原爆 名1: +げんばつ 厳罰 名6: +げんぱい 減配 名6: +げんぱつ 原発 名1: +げんぴ 厳秘 名1: +げんぴん 現品 名1: +げんぶつ 現物 名1: +げんぶん 原文 名1: +げんぷ 厳父 名1: +げんぷう 厳封 名6: +げんぼ 原簿 名1: +げんぼく 原木 名1: +げんぽう 減俸 名6: +げんぽう 減法 名1: +げんぽん 原本 名1: +げんまい 玄米 名1: +げんみつ 厳密 名8: +げんめい 厳命 名6: +げんめい 言明 名6: +げんめつ 幻滅 名6: +げんめん 減免 名1: +げんや 原野 名1: +げんゆ 原油 名1: +げんゆう 現有 名6: +げんり 原理 名1: +げんりゅう 源流 名1: +げんりょう 原料 名1: +げんりょう 減量 名6: +げんろく 元禄 代1: +げんろん 言論 名1: +こ こ ガ五7: +こ 漕 ガ五7: +こ 超 サ五5: +こ 越 サ五8: +こ 漉 サ五7: +こ 乞 ワ五3: +こ 込 マ五7: +こ 混 マ五3: +こ 恋 ワ五3: +こ 請 ワ五3: +こ 凝 ラ五7: +こ 濃 形2: +こ 来 カ変未: +こ 子 代1: +こ 弧 代1: +こ 粉 代1: +こ 小 接頭1: +こ 故 接頭3: +こ 庫 接尾1: +こ 湖 接尾4: +こ 個 助数2: +こ 戸 助数2: +こ 去 単漢: +こ 拠 単漢: +こ 虚 単漢: +こ 乎 単漢: +こ 古 単漢: +こ 呼 単漢: +こ 固 単漢: +こ 姑 単漢: +こ 孤 単漢: +こ 己 単漢: +こ 狐 単漢: +こ 枯 単漢: +こ 糊 単漢: +こ 袴 単漢: +こ 股 単漢: +こ 菰 単漢: +こ 虎 単漢: +こ 誇 単漢: +こ 跨 単漢: +こ 鈷 単漢: +こ 雇 単漢: +こ 顧 単漢: +こ 鼓 単漢: +こ 瑚 単漢: +こ 呱 単漢: +こ 胡 単漢: +こ 壷 単漢: +こ 箇 単漢: +こーす コース 名1: +こーち コーチ 名6: +こーでぃねーしょん コーディネーション 名1: +こーでぃんぐ コーディング 名6: +こーと コート 名1: +こーど コード 名4: +こーなー コーナー 名1: +こーひー コーヒー 名1: +こーひー 珈琲 名1: +こーぽ コーポ 名1: +こーらす コーラス 名1: +こーる コール 名6: +こーるど コールド 名1: +こーん コーン 代1: +こあ コア 名1: +こあら コアラ 名1: +こい 恋 代4: +こい 故意 代1: +こい 鯉 代1: +こい 来い カ変命: +こいけ 小池 苗字: +こいしわら 小石原 地名: +こいじ 恋路 名1: +こいずみ 小泉 苗字: +こいつ こいつ 代1: +こいで 小出 苗字: +こいびと 恋人 代1: +こいん コイン 名1: +こう 高 接頭1:ザ変:代1: +こう 甲 代1: +こう 硬 代1: +こう 行 代1: +こう 衡 代1: +こう 講 代1:ザ変: +こう 降 代1: +こう 項 代1:助数: +こう 香 代1: +こう 鉱 接尾1: +こう 鋼 接尾1: +こう 稿 代1: +こう 綱 代1: +こう 考 代1: +こう 坑 代1: +こう 工 接尾1: +こう 幸 代1: +こう 庚 代1: +こう 抗 サ変:サ五1: +こう 更 代1: +こう 校 接尾1:助数2: +こう 港 接尾4: +こう 公 代1: +こう 功 代1: +こう 効 代1: +こう こう 特殊副: +こう 侯 代1: +こう 候 代1: +こう 交 代1: +こう 孔 代1: +こう 光 代1: +こう 袷 単漢: +こう 黄 単漢: +こう 恰 単漢: +こう 興 単漢: +こう 仰 単漢: +こう 後 単漢: +こう 佼 単漢: +こう 倖 単漢: +こう 勾 単漢: +こう 厚 単漢: +こう 口 単漢: +こう 向 単漢: +こう 后 単漢: +こう 喉 単漢: +こう 垢 単漢: +こう 好 単漢: +こう 孝 単漢: +こう 宏 単漢: +こう 巧 単漢: +こう 巷 単漢: +こう 広 単漢: +こう 康 単漢: +こう 弘 単漢: +こう 恒 単漢: +こう 慌 単漢: +こう 拘 単漢: +こう 控 単漢: +こう 鈎 単漢: +こう 攻 単漢: +こう 昂 単漢: +こう 晃 単漢: +こう 杭 単漢: +こう 梗 単漢: +こう 構 単漢: +こう 江 単漢: +こう 洪 単漢: +こう 浩 単漢: +こう 溝 単漢: +こう 皇 単漢: +こう 糠 単漢: +こう 紅 単漢: +こう 紘 単漢: +こう 絞 単漢: +こう 耕 単漢: +こう 肯 単漢: +こう 肱 単漢: +こう 腔 単漢: +こう 膏 単漢: +こう 航 単漢: +こう 荒 単漢: +こう 貢 単漢: +こう 購 単漢: +こう 郊 単漢: +こう 酵 単漢: +こう 砿 単漢: +こう 閤 単漢: +こう 鴻 単漢: +こう 肴 単漢: +こう 皐 単漢: +こう 縞 単漢: +こう 塙 単漢: +こう 廣 単漢: +こう 敲 単漢: +こう 滉 単漢: +こうあつ 高圧 名1: +こうあん 考案 名6: +こうあん 公安 名1: +こうい 好意 名3: +こうい 厚意 名3: +こうい 行為 名1: +こうい 校医 名1: +こうい 更衣 名1: +こうい 高位 名1: +こういき 広域 名1: +こういしょう 後遺症 名1: +こういち 孝一 名前: +こういち 幸一 名前: +こういち 公一 名前: +こういち 功一 名前: +こういち 光一 名前: +こういち 弘一 名前: +こういち 晃一 名前: +こういち 浩一 名前: +こういち 耕一 名前: +こういちろう 幸一郎 名前: +こういん 工員 名1: +こういん 行員 名1: +こういん 拘引 名6: +こうう 降雨 名1: +こううん 幸運 名10: +こううん 好運 名10: +こうえい 光栄 名8: +こうえい 公営 名1: +こうえき 公益 名1: +こうえき 交易 名6: +こうえつ 校閲 名6: +こうえん 公園 名1: +こうえん 講演 名7: +こうえん 後援 名7: +こうえん 好演 名7: +こうえん 公演 名6: +こうおつ 甲乙 名1: +こうおん 高温 名1: +こうおん 高音 名1: +こうか 効果 名4: +こうか 校歌 名1: +こうか 硬貨 名1: +こうか 高架 名1: +こうか 工科 名1: +こうか 考課 名1: +こうか 硬化 代4: +こうか 降下 代4: +こうか 高価 代5: +こうか 甲賀 地名: +こうかい 公開 名6: +こうかい 後悔 名6: +こうかい 更改 名6: +こうかい 航海 名6: +こうかい 公海 名1: +こうかいどう 公会堂 名1: +こうかがく 光化学 名1: +こうかく 広角 名1: +こうかく 甲殻 名1: +こうかつ 狡猾 名8: +こうかん 交換 名6: +こうかん 交歓 名6: +こうかん 好感 名1: +こうかん 鋼管 名1: +こうかん 高官 名1: +こうかん 交感 名1: +こうかんき 交換器 名1: +こうかんき 交換機 名1: +こうが 甲賀 地名: +こうがい 公害 名1: +こうがい 郊外 名1: +こうがい 校外 名1: +こうがい 構外 名1: +こうがい 口外 名6: +こうがく 工学 名1: +こうがく 高額 名1: +こうがく 向学 名1: +こうがく 光学 名1: +こうがく 後学 名1: +こうがくか 工学科 名1: +こうがくねん 高学年 名1: +こうがくぶ 工学部 名1: +こうがんむち 厚顔無恥 代5: +こうき 後期 名1: +こうき 好奇 名1: +こうき 好機 名1: +こうき 工期 名1: +こうき 広軌 名1: +こうき 後記 代4: +こうき 高貴 代5: +こうきしん 好奇心 名1: +こうきゅう 高級 名8: +こうきゅう 公休 名1: +こうきゅう 高給 名1: +こうきゅう 硬球 名1: +こうきゅう 恒久 名4: +こうきょ 皇居 名1: +こうきょう 公共 名1: +こうきょう 好況 名1: +こうきょう 広狭 名1: +こうきょうきょく 交響曲 名1: +こうきょうぶつ 公共物 名1: +こうきん 公金 名1: +こうきん 拘禁 名6: +こうきんり 高金利 名1: +こうぎ 講義 名6: +こうぎ 抗議 名6: +こうぎ 広義 名1: +こうぎょう 工業 名4: +こうぎょう 興業 名1: +こうぎょう 鉱業 名1: +こうぎょう 興行 名6: +こうくう 航空 名1: +こうくう 高空 名1: +こうくう 口腔 名1: +こうくうき 航空機 名1: +こうくうけん 航空券 名1: +こうぐ 工具 名1: +こうけい 光景 名1: +こうけい 後継 名1: +こうけい 口径 名1: +こうけつ 高潔 名8: +こうけつあつ 高血圧 名1: +こうけん 貢献 名6: +こうけん 後見 名6: +こうげい 工芸 名1: +こうげき 攻撃 名6: +こうげん 高原 名1: +こうげん 公言 名6: +こうげん 光源 名1: +こうげん 抗原 名1: +こうこ 公庫 名1: +こうこ 考古 名1: +こうこう 高校 名1: +こうこう 孝行 名1: +こうこう 航行 代4: +こうこうせい 高校生 名1: +こうこく 広告 名6: +こうこく 公告 名6: +こうこつ 硬骨 名1: +こうご 交互 名1: +こうご 口語 名1: +こうごう 皇后 名1: +こうさ 交差 名6: +こうさ 考査 名6: +こうさ 較差 名1: +こうさ 甲佐 地名: +こうさい 交際 名6: +こうさい 公債 名1: +こうさい 高裁 名1: +こうさい 甲西 地名: +こうさいかい 弘済会 名1: +こうさく 工作 名6: +こうさく 耕作 名6: +こうさく 交錯 名6: +こうさく 幸作 名前: +こうさつ 考察 名6: +こうさつ 高察 名3: +こうさん 公算 名1: +こうさん 降参 名6: +こうざ 講座 名1: +こうざ 口座 名1: +こうざ 高座 地名: +こうざい 鋼材 名1: +こうざき 神崎 地名: +こうざぶろう 幸三郎 名前: +こうざん 鉱山 名1: +こうざん 高山 名1: +こうざん 甲山 地名: +こうし 行使 名6: +こうし 講師 名1: +こうし 格子 名1: +こうし 公使 名1: +こうし 公司 名1: +こうし 公私 名1: +こうし 厚志 名3: +こうし 合志 地名: +こうしえん 甲子園 名1: +こうしき 公式 名4: +こうしき 硬式 名1: +こうしつ 皇室 名1: +こうしつ 硬質 名1: +こうしど 格子戸 名1: +こうしゃ 後者 名1: +こうしゃ 公社 名1: +こうしゃ 校舎 名1: +こうしゃ 降車 名6: +こうしゃく 講釈 名6: +こうしゃく 公爵 名1: +こうしゅ 攻守 名1: +こうしゅう 講習 名6: +こうしゅう 公衆 名1: +こうしゅう 口臭 名1: +こうしゅう 甲州 地名: +こうしょ 高所 名1: +こうしょ 向暑 名1: +こうしょう 交渉 名6: +こうしょう 校章 名1: +こうしょう 公称 代4: +こうしょう 公証 代4: +こうしょう 考証 代4: +こうしょく 公職 名1: +こうしょく 更埴 地名: +こうしん 更新 名6: +こうしん 交信 名6: +こうしん 後進 代4: +こうしん 行進 名6: +こうしんじょ 興信所 名1: +こうしんりょう 香辛料 名1: +こうじ 工事 名6: +こうじ 公示 名6: +こうじ 高次 名1: +こうじ 麹 名1: +こうじ 小路 名1: +こうじ 浩司 名前: +こうじ 浩二 名前: +こうじ 孝治 名前: +こうじ 孝二 名前: +こうじ 幸司 名前: +こうじ 幸治 名前: +こうじ 幸二 名前: +こうじ 康治 名前: +こうじ 糀 単漢: +こうじえん 広辞苑 名1: +こうじつ 口実 名1: +こうじまち 麹町 地名: +こうじゅつ 後述 名6: +こうじゅつ 口述 名6: +こうじゅん 降順 名1: +こうじょ 控除 名6: +こうじょ 公序 名1: +こうじょう 工場 名1: +こうじょう 口上 名1: +こうじょう 恒常 名4: +こうじょう 向上 名6: +こうじょう 厚情 名3: +こうじょうせん 甲状腺 名1: +こうじろう 幸次郎 名前: +こうすい 硬水 名1: +こうすい 降水 名1: +こうすい 香水 名1: +こうすいじゅん 高水準 名1: +こうすう 工数 名1: +こうず 構図 名1: +こうず 神津 苗字: +こうずい 洪水 名1: +こうせい 構成 名6: +こうせい 更正 名6: +こうせい 更生 名6: +こうせい 校正 名6: +こうせい 厚生 名1: +こうせい 攻勢 名1: +こうせい 後世 名1: +こうせい 後生 名1: +こうせい 恒星 名1: +こうせい 抗生 名1: +こうせい 公正 名8: +こうせい 甲西 地名: +こうせいしょう 厚生省 名1: +こうせいせき 好成績 名1: +こうせいのう 高性能 名8: +こうせき 功績 名3: +こうせき 鉱石 名1: +こうせつ 巧拙 名1: +こうせつ 降雪 名1: +こうせん 交戦 代4: +こうせん 公選 代4: +こうせん 光線 名1: +こうせん 高専 名1: +こうぜん 公然 名1:形動2: +こうそ 公訴 名6: +こうそ 控訴 名6: +こうそ 酵素 名1: +こうそう 構想 名6: +こうそう 高層 名4: +こうそう 抗争 名6: +こうそう 広壮 形動4: +こうそく 高速 名4: +こうそく 拘束 代4: +こうそく 校則 名1: +こうそく 梗塞 名1: +こうそく 光速 名1: +こうそつ 高卒 名1: +こうぞう 構造 名4: +こうぞう 孝三 名前: +こうぞう 幸三 名前: +こうぞうたい 構造体 代1: +こうぞく 後続 名6: +こうぞく 皇族 名1: +こうた 幸田 地名: +こうたい 交替 名6: +こうたい 交代 名6: +こうたい 後退 名6: +こうたい 抗体 名1: +こうたいごう 皇太后 名1: +こうたいし 皇太子 名1: +こうたく 光沢 名1: +こうたろう 孝太郎 名前: +こうたろう 幸太郎 名前: +こうだ 幸田 苗字: +こうだ 幸田 地名: +こうだ 甲田 苗字: +こうだ 甲田 地名: +こうだい 広大 形動4: +こうだん 公団 名1: +こうだん 講壇 名1: +こうだん 講談 名1: +こうだんしゃ 講談社 企業: +こうち 高知 地名: +こうち 拘置 名6: +こうち 耕地 名1: +こうち 河内 苗字: +こうちく 構築 名6: +こうちゃ 紅茶 名1: +こうちゃく 膠着 名6: +こうちょう 好調 名8: +こうちょう 校長 名1: +こうちょう 紅潮 名6: +こうちょう 高潮 名6: +こうちょうかい 公聴会 名1: +こうちょく 硬直 名6: +こうちん 工賃 名1: +こうつう 交通 名6: +こうつうもう 交通網 名1: +こうつごう 好都合 名8: +こうづき 上月 地名: +こうづけ 上野 地名: +こうづしま 神津島 地名: +こうてい 校庭 名1: +こうてい 行程 名1: +こうてい 工程 名1: +こうてい 皇帝 名1: +こうてい 高低 名1: +こうてい 公邸 名1: +こうてい 肯定 名6: +こうてい 公定 代4: +こうてい 校訂 代4: +こうてき 好適 形動4: +こうてき 公的 形動1: +こうてきしゅ 好敵手 名1: +こうてつ 更迭 名6: +こうてつ 鋼鉄 名1: +こうてん 好転 名6: +こうてん 公転 名6: +こうてん 交点 名1: +こうてん 好天 名1: +こうてん 後天 名1: +こうでら 香寺 地名: +こうでん 香典 名2: +こうとう 高等 名8: +こうとう 高騰 名6: +こうとう 口頭 名1: +こうとう 喉頭 名1: +こうとう 恒等 名4: +こうとう 江東 地名: +こうとうぶ 後頭部 名1: +こうど 高度 名8: +こうどう 行動 名6: +こうどう 講堂 名1: +こうどう 公道 名1: +こうどう 坑道 名1: +こうどう 黄道 名1: +こうどく 購読 名6: +こうない 校内 名1: +こうない 構内 名1: +こうない 港内 名1: +こうないえん 口内炎 名1: +こうなん 江南 地名: +こうなん 港南 地名: +こうなん 甲南 地名: +こうなん 硬軟 名1: +こうなん 香南 地名: +こうにゅう 購入 名7: +こうにん 後任 名3: +こうにん 公認 名7: +こうぬ 甲奴 地名: +こうねつ 高熱 名1: +こうねつ 光熱 名1: +こうねん 後年 名1: +こうねん 光年 名1:助数2: +こうねん 高年 名1: +こうねんき 更年期 名1: +こうの 河野 苗字: +こうのう 効能 名1: +こうのす 鴻巣 地名: +こうは 硬派 名1: +こうはい 後輩 名1: +こうはい 荒廃 名6: +こうはい 高配 名3: +こうはく 紅白 名1: +こうはん 後半 名11: +こうはん 公判 名1: +こうはん 広範 形動1: +こうはんい 広範囲 名8: +こうば 工場 名1: +こうばい 購買 代4: +こうばい 勾配 名1: +こうばし 香ばし 形3: +こうばん 交番 名1: +こうひ 公費 名1: +こうひ 工費 名1: +こうひつ 硬筆 名1: +こうひょう 好評 名3: +こうひょう 公表 名7: +こうひょう 講評 名6: +こうひん 公賓 名1: +こうび 後尾 名1: +こうび 交尾 名6: +こうふ 交付 名6: +こうふ 公布 名6: +こうふ 甲府 地名: +こうふ 江府 地名: +こうふう 校風 名1: +こうふく 幸福 名10: +こうふく 降伏 名6: +こうふん 興奮 名6: +こうぶ 後部 名1: +こうぶつ 好物 名1: +こうぶつ 鉱物 名1: +こうぶん 構文 名1: +こうぶんしょ 公文書 名1: +こうへい 公平 名8: +こうへい 幸平 名前: +こうへん 後編 名1: +こうべ 神戸 地名: +こうほ 候補 名1: +こうほう 広報 名1: +こうほう 公報 名1: +こうほう 工法 名1: +こうほう 後方 名1: +こうほく 江北 地名: +こうほく 港北 地名: +こうぼ 公募 名6: +こうぼ 酵母 名1: +こうぼう 興亡 名1: +こうぼう 攻防 名1: +こうぼう 工房 名1: +こうまん 高慢 名8: +こうみ 小海 地名: +こうみゃく 鉱脈 名1: +こうみょう 巧妙 形動4: +こうみん 公民 名1: +こうみんかん 公民館 名1: +こうむ 公務 名1: +こうむ 被 ラ五5: +こうむいん 公務員 代2: +こうむてん 工務店 名1: +こうめい 公明 名8: +こうめい 高名 名8: +こうめいとう 公明党 名1: +こうもく 項目 名1:助数: +こうもん 校門 名1: +こうもん 肛門 名1: +こうや 広野 名1: +こうや 荒野 名1: +こうや 高野 地名: +こうやぎ 香焼 地名: +こうやく 公約 名6: +こうやく 口約 名6: +こうやぐち 高野口 地名: +こうやま 高山 地名: +こうゆう 交遊 代4: +こうゆう 公有 代4: +こうゆう 交友 名1: +こうよう 効用 名1: +こうよう 公用 名1: +こうよう 紅葉 代4: +こうよう 高揚 代4: +こうら 甲良 地名: +こうらくえん 後楽園 地名: +こうらん 高覧 名3: +こうり 公理 名1: +こうり 功利 名1: +こうり 高利 名1: +こうりつ 効率 名4: +こうりつ 公立 名1: +こうりつ 高率 名1: +こうりゃく 攻略 名6: +こうりゃく 後略 名6: +こうりゅう 交流 名6: +こうりゅう 拘留 名6: +こうりょ 考慮 名6: +こうりょう 香料 名1: +こうりょう 荒涼 形動2: +こうりょう 広陵 地名: +こうりょく 効力 名1: +こうれい 高齢 名3: +こうれい 恒例 名3: +こうれい 好例 名1: +こうれつ 後列 名1: +こうろ 航路 名1: +こうろ 高炉 名1: +こうろう 功労 名1: +こうろん 公論 名1: +こうろん 口論 名6: +こうわ 講和 名6: +こうわ 講話 名7: +こうわん 港湾 名1: +こえ 声 名2: +こえ 越え 一段4: +こえ 超え 一段3: +こえ 肥え 一段3: +こえ 肥 単漢: +こお 凍 ラ五7: +こおう 呼応 名6: +こおげ 郡家 地名: +こおり 氷 名1: +こおり 桑折 地名: +こおり 郡 単漢: +こおりつ 凍り付 カ五7: +こおりやま 郡山 地名: +こかげ 木陰 代1: +こかつ 枯渇 名6: +こかわ 粉河 地名: +こが 古河 地名: +こが 古賀 苗字: +こが 焦が サ五7: +こがい 戸外 名1: +こがいしゃ 子会社 名1: +こがた 小型 名4: +こがた 小形 名1: +こがたき 小型機 名1: +こがね 黄金 代1: +こがねい 小金井 地名: +こがら 小柄 代5: +こがらし 木枯し 代1: +こき 呼気 名1: +こき 古希 名1: +こきざみ 小刻み 名1: +こきつか こき使 ワ五5: +こきゃく 顧客 名1: +こきゅう 呼吸 名6: +こきょう 故郷 名1: +こきんしゅう 古今集 名1: +こぎって 小切手 名1: +こく 刻 代1: +こく 穀 代1: +こく 国 接尾1:助数2: +こく 石 助数2: +こく 酷 形動4: +こく 克 単漢: +こく 告 単漢: +こく 鵠 単漢: +こく 黒 単漢: +こく 谷 単漢: +こく 哭 単漢: +こくい 国威 名1: +こくいん 刻印 名1: +こくう 穀雨 名1: +こくえい 国営 名1: +こくえき 国益 名1: +こくおう 国王 名1: +こくがい 国外 名1: +こくぎ 国技 名1: +こくご 国語 名4: +こくさい 国際 名4: +こくさい 国債 名1: +こくさいせん 国際線 名1: +こくさく 国策 名1: +こくさん 国産 名4: +こくさんしゃ 国産車 名1: +こくし 酷使 名6: +こくしむそう 国士無双 代1: +こくしょ 酷暑 名1: +こくしょう 国生 苗字: +こくじ 告示 名6: +こくじ 国事 名1: +こくじ 酷似 名6: +こくじょう 国情 名1: +こくじん 黒人 名1: +こくせい 国勢 名1: +こくせい 国政 名1: +こくせき 国籍 名1: +こくせん 国選 名6: +こくぜい 国税 名1: +こくぜいきょく 国税局 名1: +こくぜいちょう 国税庁 名1: +こくそ 告訴 名6: +こくたい 国体 名1: +こくち 告知 名6: +こくてい 国定 名1: +こくてつ 国鉄 名1: +こくでん 国電 名1: +こくど 国土 名1: +こくどう 国道 名1: +こくどちょう 国土庁 名1: +こくない 国内 名1: +こくないせん 国内線 名1: +こくはく 告白 名6: +こくはつ 告発 名6: +こくばん 黒板 名1: +こくひ 国費 名1: +こくひん 国賓 名1: +こくふ 国府 名1: +こくふく 克服 名6: +こくぶ 国分 苗字: +こくぶんじ 国分寺 地名: +こくべつ 告別 名6: +こくほ 国保 名1: +こくほう 国宝 名1: +こくぼ 小久保 苗字: +こくぼう 国防 名1: +こくみん 国民 名1: +こくむ 国務 名1: +こくむしょう 国務省 名1: +こくもつ 穀物 名1: +こくゆう 国有 名1: +こくら 小倉 苗字: +こくら 小倉 地名: +こくらきた 小倉北 地名: +こくらみなみ 小倉南 地名: +こくりつ 国立 名1: +こくるい 穀類 名1: +こくれん 国連 名1: +こくろう 国労 名1: +こぐち 小口 名1: +こぐれ 小暮 苗字: +こけ こけ 一段3: +こけ 苔 代1: +こけい 固形 名1: +こげ 焦げ 一段3: +こげつ 焦げ付 カ五7: +ここ ここ 代1: +ここ 個々 代1: +ここあ ココア 名1: +ここいら ここいら 代1: +ここく 故国 名1: +ここち 心地 名1: +ここちよ 心地よ 形3: +ここのえ 九重 名1: +ここのつ 九つ 代6: +こころ 心 代1: +こころある 心ある 連体: +こころえ 心得 一段4: +こころがけ 心がけ 一段4: +こころがまえ 心構え 代1: +こころざ 志 サ五8: +こころづけ 心付け 代4: +こころづよ 心強 形2: +こころない 心ない 連体: +こころのこり 心残り 代5: +こころぼそ 心細 形5: +こころみ 試み 一段4: +こころもとな 心許な 形3: +こころゆ 心行 カ五3: +こころよ 快 形3: +ここん 古今 代6: +こご 古語 名1: +こごえ 凍え 一段3: +こごた 小牛田 地名: +こごと 小言 名1: +こさい 湖西 地名: +こさか 小坂 苗字: +こさざ 小佐々 地名: +こさめ 小雨 代1: +こさん 古参 名1: +こざ 古座 地名: +こざいく 小細工 代4: +こざかい 小坂井 地名: +こざがわ 古座川 地名: +こし 腰 名2: +こし 輿 代1: +こし 枯死 代4: +こし 古志 地名: +こしかけ 腰掛け 一段3: +こしかけ 腰かけ 一段3: +こしかわ 越川 苗字: +こしがや 越谷 地名: +こしき 甑 単漢: +こしじ 越路 苗字: +こしじ 越路 地名: +こしたんたん 虎視眈々 名8: +こしつ 個室 名1: +こしつ 固執 名6: +こしの 越廼 地名: +こしば 小柴 苗字: +こしみず 小清水 苗字: +こしみず 小清水 地名: +こしゅ 固守 名6: +こしゅ 戸主 名1: +こしゅう 固執 名6: +こしょ 古書 名1: +こしょう 故障 名6: +こしょう 呼称 名6: +こじ 孤児 名1: +こじ 故事 名1: +こじ 誇示 代4: +こじ 固持 代4: +こじ 固辞 代4: +こじあけ こじ開け 一段1: +こじき 乞食 名1: +こじき 古事記 代1: +こじま 児島 苗字: +こじま 小島 苗字: +こじん 個人 名4: +こじん 故人 名1: +こすい 湖水 名1: +こすう 個数 名1: +こすう 戸数 名1: +こすぎ 小杉 苗字: +こすぎ 小杉 地名: +こすげ 小菅 苗字: +こすげ 小菅 地名: +こすたりか コスタリカ 地名: +こすと コスト 名1: +こすど 小須戸 地名: +こすも コスモ 企業: +こずえ 梢 名1: +こずえ 梢 名前: +こせい 個性 名4: +こせき 古跡 名1: +こせき 戸籍 名1: +こせき 小関 苗字: +こそく 姑息 形動4: +こそだて 子育て 代1: +こぞう 小僧 代1: +こぞって こぞって 副1: +こたい 個体 名1: +こたい 固体 名1: +こたえ 答 名2: +こたえ 答え 一段4: +こたえ 応え 一段2: +こたけ 小竹 苗字: +こたに 小谷 苗字: +こだい 古代 名1: +こだいら 小平 苗字: +こだいら 小平 地名: +こだか 小高 形1: +こだち 木立 代1: +こだま 児玉 苗字: +こだま 児玉 地名: +こだま 小玉 苗字: +こだわ こだわ ラ五3: +こち 故知 代1: +こち 鯒 単漢: +こちこち こちこち 形動9: +こちこち コチコチ 形動9: +こちゃく 固着 名6: +こちょう 誇張 名6: +こちら こちら 代1: +こちんだ 東風平 地名: +こっか 国家 名4: +こっか 国歌 名1: +こっかい 国会 名1: +こっかく 骨格 名1: +こっかん 酷寒 名1: +こっき 国旗 名1: +こっきょう 国境 名1: +こっけい 滑稽 代5: +こっけん 国権 名1: +こっこ 国庫 名1: +こっこう 国交 名1: +こっこく 刻々 副2: +こっし 骨子 名1: +こっせつ 骨折 名6: +こっそり こっそり 副2: +こっち こっち 代1: +こっとう 骨董 名1: +こっぷ コップ 名1: +こつ 骨 代1: +こつ こつ 代1: +こつ 忽 単漢: +こつ 乞 単漢: +こつ 惚 単漢: +こつこつ コツコツ 副2: +こつばん 骨盤 名1: +こづかい 小遣い 名2: +こづつみ 小包 名1: +こて 小手 名1: +こてい 固定 名6: +こてき 鼓笛 名1: +こてん 古典 名4: +こてん 個展 名1: +こと こと 代1: +こと 琴 名2: +こと 言 代1: +こと 古都 代1: +こと 事 接尾1: +こと 異 単漢: +こと 殊 単漢: +ことう 孤島 名1: +ことう 湖東 地名: +ことおか 琴丘 地名: +ことか 事欠 カ五3: +ことがら 事柄 名1: +ことこまか 事細か 形動4: +ことさら ことさら 副5: +ことさら 殊更 副5: +ことし 今年 代6: +ことたり 事足り 一段1: +ことづけ 言付け 一段4:サ変: +ことな 異な ラ五3: +ことなみ 琴南 地名: +ことに 異に サ変: +ことば 言葉 名2: +ことば 詞 代1: +ことひら 琴平 地名: +ことぶき 寿 代1: +こともなげ こともなげ 形動9: +ことり 小鳥 名1: +ことわ 断わ ラ五4: +ことわ 断 ラ五4: +ことわざ 諺 代1: +こどう 鼓動 名6: +こどうぐ 小道具 名1: +こどく 孤独 名8: +こどまり 小泊 地名: +こども 子供 代2: +こな こな サ五7: +こな 粉 代1: +こなか 小中 苗字: +こながい 小長井 苗字: +こながい 小長井 地名: +こなごな 粉々 代5: +こにくらし 小憎らし 形3: +こにし 小西 苗字: +こぬま 小沼 苗字: +こね コネ 代1: +こねくしょん コネクション 名1: +こねくた コネクタ 代1: +こねくと コネクト 名6: +この この 連体: +この 好 マ五8: +このあいだ この間 代6: +このうら 金浦 地名: +このこと このこと 代1: +このごろ この頃 代6: +このほど このほど 副1: +このまし 好まし 形3: +このまま このまま 代6: +このみ 木の実 代1: +このんで 好んで 副1: +こはら 小原 苗字: +こはる 小春 名前: +こはん 湖畔 名1: +こば 拒 マ五7: +こばやかわ 小早川 苗字: +こばやし 小林 苗字: +こばやし 小林 地名: +こばやし 古林 苗字: +こばり 小針 苗字: +こばると コバルト 名1: +こばん 小判 代1: +こび 媚び 一段3: +こぴー コピー 名6: +こぴーらいと コピーライト 名1: +こふう 古風 代5: +こふん 古墳 名1: +こぶし 拳 代1: +こぶちざわ 小淵沢 地名: +こぶり 小降り 代1: +こぶん 古文 名1: +こべつ 個別 名1: +こべつ 戸別 名1: +こほく 湖北 地名: +こぼ こぼ サ五5: +こぼり 小堀 苗字: +こぼれ こぼれ 一段2: +こま 駒 代1: +こま コマ 代1: +こま 困 ラ五4: +こま 狛 単漢: +こまーしゃる コマーシャル 名1: +こまえ 狛江 名前: +こまえ 狛江 地名: +こまか 細か 形2:形動1: +こまがね 駒ヶ根 地名: +こまき 小牧 苗字: +こまき 小牧 地名: +こまぎれ 細切れ 代5: +こまく 鼓膜 名1: +こまごま こまごま 副3: +こまごめ 駒込 地名: +こまつ 小松 苗字: +こまつ 小松 地名: +こまつざき 小松崎 苗字: +こまつしま 小松島 苗字: +こまつしま 小松島 地名: +こまば 駒場 地名: +こまめ こまめ 形動1: +こまやか 細やか 形動4: +こまりはて 困り果て 一段1: +こまわり 小回り 代1: +こまんど コマンド 名1: +こみあ 込み合 ワ五5: +こみあげ こみ上げ 一段1: +こみい 込み入 ラ五3: +こみち 小道 名1: +こみっく コミック 名1: +こみや 小宮 苗字: +こみやま 小宮山 苗字: +こみゅにけーしょん コミュニケーション 代4: +こむぎ 小麦 名1: +こむぎこ 小麦粉 名1: +こむろ 小室 苗字: +こめ 米 名2: +こめ 込め 一段2: +こめじるし ※ 代1: +こめでぃー コメディー 名1: +こめでぃあん コメディアン 名1: +こめんと コメント 名1: +こも 薦 代1: +こも 篭 ラ五7: +こもじ 小文字 名1: +こもち 子持 地名: +こもの 菰野 地名: +こもの 小物 名1: +こもり 子守 名6: +こもり 小森 苗字: +こもろ 小諸 地名: +こもん 顧問 名1: +こもんじょ 古文書 名1: +こや 小屋 代1: +こや 肥 サ五7: +こやなぎ 小柳 苗字: +こやま 小山 苗字: +こゆ 児湯 地名: +こゆう 固有 名1: +こゆび 小指 代1: +こよい 今宵 代6: +こよう 雇用 名6: +こよみ 暦 代1: +こら こら 感動: +こら 懲ら サ五5: +こらい 古来 代1: +こらえ 堪え 一段1: +こらしめ 懲らしめ 一段3: +こらむ コラム 名1: +こり 懲り 一段1: +こりつ 孤立 名6: +こりょう 湖陵 地名: +こりょうり 小料理 名1: +こるちこいど コルチコイド 代1: +これ これ 代1: +これ 此 単漢: +これ 是 単漢: +これ 之 単漢: +これくしょん コレクション 代4: +これくたー コレクター 名1: +これほど これほど 代6: +これら これら 代1: +これら コレラ 代1: +ころ ころ 代1: +ころ 頃 代1: +ころ 殺 サ五7: +ころ 転 バ五8: +ころが 転が サ五7:ラ五7: +ころがりこ 転がり込 マ五7: +ころげこ 転げ込 マ五7: +ころな コロナ 名1: +ころにー コロニー 名1: +ころも 衣 代1: +ころもがえ 衣更え 代4: +ころらど コロラド 地名: +こわ 壊 サ五7: +こわ 怖 形7: +こわ 恐 形7: +こわごわ こわごわ 副2: +こわば こわば ラ五7: +こわれ 壊れ 一段1: +こん 今 接頭1: +こん 紺 代1: +こん 根 代1: +こん 混 ザ変: +こん 近 単漢: +こん 献 単漢: +こん 困 単漢: +こん 坤 単漢: +こん 墾 単漢: +こん 婚 単漢: +こん 恨 単漢: +こん 懇 単漢: +こん 昏 単漢: +こん 昆 単漢: +こん 梱 単漢: +こん 痕 単漢: +こん 艮 単漢: +こん 魂 単漢: +こん 金 単漢: +こんい 懇意 名10: +こんいん 婚姻 名6: +こんか 今夏 名1: +こんかい 今回 代6: +こんかん 根幹 名1: +こんがり こんがり 形動1: +こんがん 懇願 名6: +こんき 今期 名1: +こんき 根気 名1: +こんきゃく 困却 名6: +こんきゅう 困窮 名6: +こんきょ 根拠 名1: +こんぎ 婚儀 名3: +こんく 困苦 名1: +こんくーる コンクール 名1: +こんくりーと コンクリート 名1: +こんけつ 混血 名1: +こんげつ 今月 名1: +こんげん 根源 名1: +こんこう 金光 苗字: +こんこう 金光 地名: +こんこう 混交 名6: +こんご 今後 代6: +こんごう 混合 名6: +こんさーと コンサート 名1: +こんさるたんと コンサルタント 名1: +こんさるてぃんぐ コンサルティング 名1: +こんざい 混在 名6: +こんざつ 混雑 名6: +こんしゅう 今週 名1: +こんしゅう 今秋 名1: +こんしゅん 今春 名1: +こんしん 懇親 名1: +こんしん 混信 名6: +こんじゃく 今昔 名1: +こんじょう 根性 名1: +こんじょう 懇情 名3: +こんじょう 今生 名1: +こんすい 昏睡 名6: +こんすたんと コンスタント 名8: +こんせい 懇請 名6: +こんせい 混成 名6: +こんせき 痕跡 名1: +こんせき 今夕 名1: +こんせつ 懇切 名8: +こんせぷと コンセプト 名1: +こんせん 混戦 名1: +こんせんさす コンセンサス 名1: +こんせんと コンセント 名1: +こんぜつ 根絶 名6: +こんそーる コンソール 名1: +こんそしあむ コンソシアム 名1: +こんたくと コンタクト 名6: +こんたん 魂胆 名1: +こんだ 今田 地名: +こんだて 献立 名2: +こんだん 懇談 名6: +こんちゅう 昆虫 名1: +こんてい 根底 名1: +こんてすと コンテスト 名6: +こんてな コンテナ 名1: +こんでぃしょん コンディション 名1: +こんでんさ コンデンサ 名1: +こんとらすと コントラスト 名1: +こんとろーら コントローラ 代1: +こんとろーる コントロール 名6: +こんとん 混沌 名6: +こんど 今度 代6: +こんどう 近藤 苗字: +こんどう 金堂 名1: +こんどう 混同 名6: +こんな こんな 連体: +こんなん 困難 名8:サ変: +こんにち 今日 代6: +こんにちは こんにちは 感動: +こんにちわ こんにちわ 感動: +こんにゅう 混入 名6: +こんねん 今年 代6: +こんねんど 今年度 代6: +こんの 今野 苗字: +こんの 紺野 苗字: +こんばーじょん コンバージョン 代1: +こんばーた コンバータ 名1: +こんばーと コンバート 名6: +こんばん 今晩 名11: +こんぱ コンパ 代3: +こんぱいら コンパイラ 代1: +こんぱいらー コンパイラー 代1: +こんぱいる コンパイル 名6: +こんぱくと コンパクト 名8: +こんぱす コンパス 名1: +こんぱち コンパチ 名1: +こんぱちびりてぃ コンパチビリティ 名1: +こんぱちぶる コンパチブル 名1: +こんぱにおん コンパニオン 名1: +こんぱん 今般 名11: +こんび コンビ 名1: +こんびなーと コンビナート 名1: +こんびにえんす コンビニエンス 名8: +こんびねーしょん コンビネーション 名1: +こんぴゅーた コンピュータ 名1: +こんぴゅーたー コンピューター 名1: +こんぶ 昆布 代1: +こんぷれっくす コンプレックス 名1: +こんべんしょん コンベンション 名1: +こんぺき 紺碧 名1: +こんぼう 懇望 名6: +こんぼう 混紡 名6: +こんぽーねんと コンポーネント 代1: +こんぽう 梱包 名6: +こんぽん 根本 名1: +こんま コンマ 名1: +こんめい 混迷 名6: +こんもう 懇望 名6: +こんもり こんもり 副8: +こんや 今夜 代6: +こんやく 婚約 名7: +こんよう 混用 名6: +こんらん 混乱 名6: +こんりゅう 建立 名6: +こんりんざい 金輪際 代6: +こんれい 婚礼 名3: +こんろ コンロ 名1: +こんわ 懇話 名1: +こんわ 混和 名6: +こんわく 困惑 名6: +ご ご 接頭1: +ご 御 接頭1: +ご 後 接尾1: +ご 語 接尾1:助数2: +ご 碁 代1: +ご 胡 単漢: +ご 互 単漢: +ご 伍 単漢: +ご 午 単漢: +ご 呉 単漢: +ご 吾 単漢: +ご 娯 単漢: +ご 悟 単漢: +ご 梧 単漢: +ご 檎 単漢: +ご 瑚 単漢: +ご 誤 単漢: +ご 護 単漢: +ご 醐 単漢: +ご 冴 単漢: +ごーじゃす ゴージャス 代5: +ごーすと ゴースト 名1: +ごーる ゴール 代4: +ごーるでん ゴールデン 名1: +ごーるど ゴールド 名1: +ごい 語意 名1: +ごい 語彙 名1: +ごう 郷 代1: +ごう 業 代1: +ごう 号 接尾1:助数: +ごう 合 助数2: +ごう 豪 代1: +ごう 強 単漢: +ごう 剛 単漢: +ごう 劫 単漢: +ごう 壕 単漢: +ごう 拷 単漢: +ごう 濠 単漢: +ごう 轟 単漢: +ごうい 合意 名6: +ごういん 強引 形動4: +ごうう 豪雨 名1: +ごうか 豪華 形動4: +ごうかい 豪快 形動4: +ごうかく 合格 名6: +ごうかん 号館 助数2: +ごうかん 強姦 名6: +ごうがい 号外 名1: +ごうきゅう 号泣 名6: +ごうきん 合金 名1: +ごうぎ 合議 名6: +ごうけい 合計 名6: +ごうけつ 豪傑 名1: +ごうごう 轟々 形動2: +ごうし 合資 代4: +ごうしつ 号室 助数2: +ごうじょう 強情 名8: +ごうせい 合成 名6: +ごうせつ 豪雪 名1: +ごうだ 郷田 苗字: +ごうだつ 強奪 名6: +ごうつ 江津 地名: +ごうとう 強盗 名1: +ごうど 神戸 地名: +ごうどう 合同 名6: +ごうのうら 郷ノ浦 地名: +ごうはん 合板 名1: +ごうひ 合否 名1: +ごうべん 合弁 名1: +ごうほう 合法 名8: +ごうほう 号砲 代1: +ごうほうらいらく 豪放磊落 名8: +ごうまん ごう慢 名8: +ごうめい 合名 名1: +ごうもん 拷問 名6: +ごうよく 強欲 名1: +ごうり 合理 名4: +ごうりき 強力 代5: +ごうりゅう 合流 名6: +ごうれい 号令 名6: +ごえい 護衛 名6: +ごか 五箇 地名: +ごか 五霞 地名: +ごかい 誤解 名6: +ごかしょう 五個荘 地名: +ごかせ 五ヶ瀬 地名: +ごかん 語感 名1: +ごかん 語幹 名1: +ごかん 互換 代4: +ごがく 語学 名1: +ごがん 護岸 名1: +ごき 語気 名1: +ごきぶり ゴキブリ 代1: +ごく ごく 副1: +ごく 語句 代1: +ごく 獄 代1: +ごく 極 単漢: +ごくあく 極悪 名8: +ごくい 極意 名1: +ごくひ 極秘 名8: +ごくらく 極楽 名1: +ごけい 互恵 名1: +ごけん 護憲 名1: +ごげん 語源 名1: +ごこう 後光 名1: +ごこち 心地 接尾2: +ごころ 心 接尾2: +ごご 午後 名11: +ごさ 誤差 名1: +ごさい 後妻 名1: +ござ ござ 代1: +ごしき 五色 地名: +ごしっく ゴシック 名1: +ごしょ 御所 名1: +ごしょう 後生 名1: +ごしょがわら 五所川原 地名: +ごしょく 誤植 名6: +ごしょのうら 御所浦 地名: +ごしん 誤診 名6: +ごしん 護身 名1: +ごじ 誤字 名1: +ごじ 護持 代4: +ごじつ 後日 代6: +ごじゅうおん 五十音 代1: +ごじょ 互助 名1: +ごじょう 五条 苗字: +ごじょう 五条 地名: +ごじょう 五條 地名: +ごじょう 互譲 名1: +ごじょうめ 五城目 地名: +ごすう 語数 名1: +ごせ 御所 地名: +ごせん 五泉 地名: +ごせん 互選 名6: +ごせんふ 五線譜 代1: +ごぜん 午前 名11: +ごぜんやま 御前山 地名: +ごそう 護送 名6: +ごそうさ 誤操作 名6: +ごたく 御託 名1: +ごたんだ 五反田 地名: +ごちゃごちゃ ごちゃごちゃ 副9: +ごちょう 語調 名1: +ごっそり ごっそり 副2: +ごてん 御殿 名1: +ごてんば 御殿場 地名: +ごと ごと 接尾9: +ごと 毎 接尾9: +ごと 事 接尾2: +ごとう 五島 苗字: +ごとう 後藤 苗字: +ごにん 誤認 名6: +ごのへ 五戸 地名: +ごはん ご飯 代1: +ごはん 御飯 代1: +ごばん 碁盤 名1: +ごび 語尾 名1: +ごふく 呉服 名1: +ごぶさた 御無沙汰 代4: +ごへい 語弊 名1: +ごほう 誤報 名6: +ごほく 吾北 地名: +ごぼう 御坊 地名: +ごま 胡麻 名1: +ごまか 誤魔化 サ五7: +ごみ ゴミ 名1: +ごみ 五味 苗字: +ごみばこ ゴミ箱 名1: +ごむ ゴム 名1: +ごめん ごめん 名1: +ごめん 御免 名1: +ごやく 誤訳 名6: +ごよう 誤用 名6: +ごようおさめ 御用納め 代1: +ごようはじめ 御用始め 代1: +ごらいこう 御来光 代1: +ごらく 娯楽 名1: +ごらん ご覧 代1: +ごらん 御覧 代1: +ごりん 五輪 一括: +ごるばちょふ ゴルバチョフ 代1: +ごるふ ゴルフ 代3: +ごろ 語呂 代1: +ごろ ごろ 接尾2: +ごろ 頃 接尾2: +ごろう 五郎 名前: +ごろく 語録 代1: +ごろごろ ゴロゴロ 副3: +ごろね ごろ寝 代4: +ごん 権 単漢: +ごん 厳 単漢: +ごん 言 単漢: +ごん 魂 単漢: +ごんげ 権化 名1: +ごんどう 権藤 苗字: +さ さ サ変未1:サ五5: +さ 咲 カ五5: +さ 裂 カ五5: +さ 割 カ五5: +さ 刺 サ五8: +さ 指 サ五8: +さ 挿 サ五6: +さ 鎖 サ五5: +さ 射 サ五5: +さ 去 ラ五2: +さ 差 代1:接尾1:サ五1: +さ 些 単漢: +さ 佐 単漢: +さ 叉 単漢: +さ 唆 単漢: +さ 嵯 単漢: +さ 左 単漢: +さ 査 単漢: +さ 沙 単漢: +さ 瑳 単漢: +さ 砂 単漢: +さ 詐 単漢: +さ 裟 単漢: +さ 作 単漢: +さ 紗 単漢: +さ 茶 単漢: +さ 蓑 単漢: +さーきっと サーキット 名1: +さーくる サークル 名1: +さーち サーチ 名6: +さーばー サーバー 名1: +さーびす サービス 名6: +さーふぃん サーフィン 代4: +さーぶ サーブ 代4: +さーべい サーベイ 代4: +さあ さあ 接続: +さい 際 代4: +さい 再 接頭5: +さい 最 接頭1: +さい 歳 助数2: +さい 才 代1:助数2: +さい 菜 代1: +さい 債 代1: +さい 妻 代1: +さい 犀 代1: +さい 差異 代1: +さい 祭 接尾1: +さい 佐井 地名: +さい 採 単漢: +さい 済 単漢: +さい 災 単漢: +さい 催 単漢: +さい 栽 単漢: +さい 斎 単漢: +さい 細 単漢: +さい 西 単漢: +さい 斉 単漢: +さい 切 単漢: +さい 裁 単漢: +さい 載 単漢: +さい 財 単漢: +さい 哉 単漢: +さい 塞 単漢: +さい 宰 単漢: +さい 彩 単漢: +さい 采 単漢: +さい 砕 単漢: +さい 砦 単漢: +さい 殺 単漢: +さい 晒 単漢: +さい 偲 単漢: +さい 齋 単漢: +さいあい 最愛 名1: +さいあく 最悪 名8: +さいえん 再演 名6: +さいえん 才媛 名1: +さいえん 菜園 名1: +さいえんす サイエンス 名1: +さいか 最下 名1: +さいか 裁可 名3: +さいかい 再会 名6: +さいかい 再開 名6: +さいかい 西海 苗字: +さいかい 西海 地名: +さいかく 才覚 代4: +さいがい 災害 名1: +さいがわ 犀川 地名: +さいき 佐伯 苗字: +さいき 佐伯 地名: +さいき 再帰 名1: +さいき 再起 代4: +さいき 才気 名1: +さいき 斎木 苗字: +さいきょう 最強 名1: +さいきん 最近 代6: +さいきん 細菌 代1: +さいぎ 猜疑 代4: +さいく 細工 名6: +さいくつ 採掘 名6: +さいくりんぐ サイクリング 名1: +さいくる サイクル 名1: +さいぐさ 三枝 苗字: +さいけつ 採決 名6: +さいけつ 採血 名6: +さいけつ 裁決 名6: +さいけん 債券 名1: +さいけん 債権 名1: +さいけん 再建 名6: +さいげつ 歳月 名1: +さいげん 再現 名6: +さいげん 際限 名1: +さいこ 最古 名1: +さいこう 最高 名8: +さいこう 再興 名6: +さいこう 再考 名6: +さいこうさい 最高裁 名1: +さいこうちょう 最高潮 名1: +さいこく 催告 名6: +さいこん 再婚 名6: +さいご 最後 名1: +さいご 最期 名1: +さいごう 西郷 苗字: +さいごく 西国 地名: +さいさん 採算 名4: +さいさん 再三 代6: +さいし 妻子 名1: +さいしゅ 採取 名7: +さいしゅう 最終 名4: +さいしゅう 採集 名6: +さいしゅつ 歳出 名1: +さいしょ 最初 名1: +さいしょう 最小 名4: +さいしょう 最少 名4: +さいしょうげん 最小限 名1: +さいしょうち 最小値 名1: +さいしょく 才色 名1: +さいしょく 菜食 代4: +さいしん 最新 名4: +さいしん 再審 名6: +さいしん 細心 名8: +さいじつ 祭日 名1: +さいじょ 才女 名1: +さいじょう 最上 名1: +さいじょう 西城 苗字: +さいじょう 西条 苗字: +さいじょう 西条 地名: +さいず サイズ 名1: +さいせい 再生 名6: +さいせい 再製 名6: +さいせいき 最盛期 名1: +さいせき 採石 名6: +さいせん 再選 名6: +さいぜん 最前 名1: +さいぜん 最善 名1: +さいぜんせん 最前線 名8: +さいそう 再送 名6: +さいそく 催促 名6: +さいた 最多 名1: +さいた 財田 地名: +さいたい 妻帯 代4: +さいたく 採択 名6: +さいたま 埼玉 地名: +さいたん 最短 名4: +さいだ 斎田 苗字: +さいだい 最大 名4: +さいだいげん 最大限 名1: +さいだいじ 西大寺 地名: +さいだいち 最大値 名1: +さいだん 祭壇 名1: +さいだん 裁断 名6: +さいち 才知 名1: +さいちゅう 最中 名1: +さいちょう 最長 名1: +さいてい 最低 名8: +さいてい 裁定 名6: +さいていげん 最低限 代1: +さいてき 最適 名8: +さいてん 採点 名6: +さいてん 祭典 名1: +さいと 西都 地名: +さいと サイト 名1: +さいとう 斉藤 苗字: +さいとう 斎藤 苗字: +さいど 再度 名11: +さいど サイド 名1: +さいなん 災難 名3: +さいなんたん 最南端 代1: +さいにゅう 歳入 代4: +さいにん 再任 名6: +さいねん 再燃 名6: +さいねんしょう 最年少 代5: +さいのう 才能 名1: +さいはい 采配 名3: +さいはく 西伯 地名: +さいはつ 再発 名6: +さいばい 栽培 名6: +さいばし 才走 ラ五3: +さいばん 裁判 名6: +さいばんかん 裁判官 名1: +さいばんしょ 裁判所 名1: +さいひ 採否 名1: +さいひ 歳費 名1: +さいふ 財布 名2: +さいぶ 細部 名1: +さいぶん 細分 名6: +さいへん 再編 名6: +さいほう 裁縫 名5: +さいほくたん 最北端 代1: +さいぼう 細胞 名1: +さいまつ 歳末 名1: +さいみつ 細密 名8: +さいみん 催眠 名1: +さいむ 債務 名1: +さいもく 細目 名1: +さいよう 採用 名6: +さいらい 再来 名6: +さいりょう 最良 名8: +さいりょう 裁量 名6: +さいれい 祭礼 名1: +さいろく 採録 名6: +さいろく 載録 名6: +さいわい 幸い 代5:副4: +さいん サイン 代4: +さうんど サウンド 名1: +さえ 冴え 一段3: +さえき 佐伯 苗字: +さえき 佐伯 地名: +さえき 差益 名1: +さえぎ 遮 ラ五7: +さえぐさ 三枝 苗字: +さえこ 小枝子 名前: +さお 竿 名1: +さお 棹 名1: +さおり 佐織 地名: +さか 盛 ラ五7: +さか 坂 名1: +さか 阪 単漢: +さかい 境 名1: +さかい 坂井 苗字: +さかい 坂井 地名: +さかい 阪井 苗字: +さかい 堺 苗字: +さかい 堺 地名: +さかい 酒井 苗字: +さかいがわ 境川 地名: +さかいで 坂出 苗字: +さかいで 坂出 地名: +さかいみなと 境港 地名: +さかうえ 坂上 苗字: +さかうち 坂内 苗字: +さかえ 栄え 一段3: +さかえ 栄 名前: +さかがみ 坂上 苗字: +さかき 坂城 地名: +さかき 榊 名1: +さかきた 坂北 地名: +さかきばら 榊原 苗字: +さかぐち 坂口 苗字: +さかぐち 阪口 苗字: +さかさ 逆さ 代1: +さかさい 逆井 苗字: +さかさい 逆井 地名: +さかした 坂下 苗字: +さかずき 杯 代1: +さかた 坂田 苗字: +さかた 坂田 地名: +さかた 酒田 苗字: +さかた 酒田 地名: +さかづき 杯 代1: +さかど 坂戸 苗字: +さかど 坂戸 地名: +さかな 魚 名2: +さかな 肴 代1: +さかの 坂野 苗字: +さかのぼ 遡 ラ五5: +さかば 酒場 代1: +さかべ 坂部 苗字: +さかべ 坂部 地名: +さかほぎ 坂祝 地名: +さかみち 坂道 代1: +さかもと 坂本 苗字: +さかもと 坂本 地名: +さかや 酒屋 代1: +さから 逆ら ワ五5: +さかわ 佐川 地名: +さかん 盛ん 形動6: +さかん 左官 代1: +さが 下が ラ五8: +さが 探 サ五8: +さが 捜 サ五8: +さが 佐賀 苗字: +さが 佐賀 地名: +さが 嵯峨 苗字: +さが 性 代1: +さがえ 寒河江 地名: +さがく 差額 名1: +さがしあて 捜し当て 一段1: +さがしだ 捜し出 サ五7: +さがの 嵯峨野 地名: +さがのせき 佐賀関 地名: +さがみ 相模 地名: +さがみこ 相模湖 地名: +さがみはら 相模原 地名: +さがら 相良 苗字: +さがわ 佐川 苗字: +さき 先 代1:接尾1: +さき 崎 代1: +さき 左記 代1: +さき 咲 単漢: +さき 埼 単漢: +さき 碕 単漢: +さき 前 単漢: +さきがけ 先駆け 一段3: +さきごろ 先頃 代6: +さきさま 先様 名1: +さきざき 先々 代6: +さきだ 先立 タ五5: +さきだて 先立て 一段1: +さきと 崎戸 地名: +さきどり 先取り 代4: +さきばし 先走 ラ五3: +さきまわり 先回り 代4: +さきもの 先物 名1: +さきゅう 砂丘 名1: +さきゆき 先行き 代1: +さきょう 左京 名前: +さきょう 左京 地名: +さきん 先ん ザ変: +さぎ 詐欺 名1: +さぎ 鷺 代1: +さぎょう 作業 名6: +さく 柵 代1: +さく 作 代1:接尾1:助数: +さく 策 接尾1:サ変: +さく 佐久 地名: +さく 昨 代1: +さく 索 代1: +さく 削 単漢: +さく 咋 単漢: +さく 搾 単漢: +さく 朔 単漢: +さく 窄 単漢: +さく 錯 単漢: +さく 酢 単漢: +さく 乍 単漢: +さく 炸 単漢: +さくい 作意 名1: +さくい 作為 名4: +さくいん 索引 名1: +さくがら 作柄 名1: +さくげん 削減 名6: +さくご 錯誤 名1: +さくし 作詞 名6: +さくし 策士 名1: +さくしゃ 作者 名1: +さくしゅ 搾取 名6: +さくじつ 昨日 代6: +さくじょ 削除 名6: +さくず 作図 名6: +さくせい 作成 名6: +さくせい 作製 名6: +さくせん 作戦 名1: +さくそう 錯綜 名6: +さくつけ 作付 名6: +さくてい 策定 名6: +さくとう 作東 地名: +さくとう 昨冬 代6: +さくどう 策動 名6: +さくにゅう 搾乳 名6: +さくねん 昨年 代6: +さくねんど 昨年度 代6: +さくひょう 作表 名6: +さくひん 作品 名1:助数2: +さくふう 作風 名1: +さくぶん 作文 名6: +さくま 佐久間 苗字: +さくま 佐久間 地名: +さくもつ 作物 名1: +さくや 昨夜 代6: +さくら 桜 名1: +さくら 櫻 名1: +さくら 佐倉 苗字: +さくら 佐倉 地名: +さくらい 桜井 苗字: +さくらい 桜井 地名: +さくらえ 桜江 地名: +さくらがわ 桜川 苗字: +さくらがわ 桜川 地名: +さくらしんまち 桜新町 地名: +さくらじま 桜島 地名: +さくらだ 桜田 苗字: +さくらだい 桜台 地名: +さくらん 錯乱 名6: +さくりゃく 策略 名1: +さくれい 作例 名1: +さくれつ 炸裂 名6: +さぐ 探 ラ五8: +さぐりあて 探り当て 一段1: +さぐりだ 探り出 サ五7: +さけ 酒 名2: +さけ 鮭 名1: +さけ 叫 バ五8: +さけ 避け 一段2: +さけい 左傾 名6: +さけかわ 鮭川 地名: +さげ 下げ 接尾1:一段2: +さげ 提げ 一段3: +さこく 鎖国 名1: +ささ 笹 代1: +ささ 刺さ ラ五5: +ささい 些細 形動4: +ささえ 支え 一段3: +ささお 笹尾 苗字: +ささおか 笹岡 苗字: +ささかみ 笹神 地名: +ささがわ 笹川 苗字: +ささがわ 笹川 地名: +ささき 佐々木 苗字: +ささくら 笹倉 苗字: +ささぐり 篠栗 地名: +ささげ 捧げ 一段2: +ささつ 査察 名6: +ささはら 笹原 苗字: +ささもと 笹本 苗字: +ささや ささや カ五7: +ささや 囁 カ五7: +ささや 囁や カ五7: +ささやか ささやか 代5: +ささやま 篠山 地名: +さざ 佐々 地名: +さざなみ 漣 代1: +さざなみ さざ波 代1: +さざんか 山茶花 代1: +さしあげ 差し上げ 一段1: +さしあた 差し当た ラ五3: +さしいれ 差し入れ 一段3: +さしえ 挿絵 名1: +さしおさえ 差し押さえ 一段3: +さしかえ 差し替え 一段3: +さしがね 差し金 名1: +さしき 佐敷 地名: +さしき 挿し木 代1: +さしこ 差し込 マ五7: +さしさわ 差し障 ラ五3: +さししめ 指し示 サ五5: +さしず 指図 名6: +さしずめ さしずめ 副1: +さしせま 差し迫 ラ五1: +さしたる さしたる 連体: +さしだ 差し出 サ五7: +さしだしにん 差出人 名1: +さしつかえ 差し支え 一段3: +さしづめ さしづめ 副1: +さしとめ 差し止め 一段3: +さしひ 差し引 カ五7: +さしひかえ 差し控え 一段3: +さしま 猿島 地名: +さしみ 刺身 名2: +さしむか 差し向か ワ五3: +さしむけ 差し向け 一段3: +さしもど 差し戻 サ五7: +さしもどし 差戻し 名1: +さしゅ 詐取 名6: +さしゅう 査収 名7: +さしょう 些少 名8: +さしょう 査証 名6: +さしわた 差し渡 サ五7: +さしんしつ 左心室 代1: +さじ 匙 名2: +さじ 些事 名1: +さじき 桟敷 名1: +さす さす ラ五8: +さすが さすが 代6: +さすが 流石 代6: +さすぺんど サスペンド 名1: +さずか 授か ラ五4: +さずけ 授け 一段2: +させつ 左折 名6: +させぼ 佐世保 地名: +させん 左遷 名6: +さそ 誘 ワ五8: +さそいかけ 誘いかけ 一段3: +さそいこ 誘い込 マ五7: +さそいだ 誘い出 サ五7: +さそく 左側 名1: +さそり 蠍 代1: +さそん 差損 名1: +さた 沙汰 代4: +さた 佐多 地名: +さたけ 佐竹 苗字: +さたん 左端 名1: +さだ 佐田 苗字: +さだ 定 名前: +さだ 禎 単漢: +さだお 貞男 名前: +さだお 貞夫 名前: +さだお 貞雄 名前: +さだお 定男 名前: +さだお 定夫 名前: +さだお 定雄 名前: +さだか 定か 形動1: +さだこ 貞子 名前: +さだま 定ま ラ五4: +さだみつ 貞光 名前: +さだめ 定め 一段4: +さだゆき 貞行 名前: +さち 幸 代1: +さちお 幸雄 名前: +さちこ 幸子 名前: +さっ 察 サ変: +さっか 作家 名1: +さっかー サッカー 代3: +さっかく 錯覚 名6: +さっき さっき 代6: +さっき 殺気 名1: +さっきゅう 早急 代5: +さっきょく 作曲 名6: +さっきん 殺菌 名6: +さっこん 昨今 代6: +さっさと さっさと 副4: +さっし 冊子 名1: +さっしん 刷新 名6: +さっそう さっそう 形動2: +さっそく さっそく 代6: +さっそく 早速 代6: +さっち 察知 名7: +さって 幸手 地名: +さっと さっと 副1: +さっとう 殺到 名6: +さっぱり さっぱり 副9: +さっぽろ 札幌 地名: +さつ 冊 助数2: +さつ 札 名2: +さつ 刷 単漢: +さつ 察 単漢: +さつ 拶 単漢: +さつ 撮 単漢: +さつ 擦 単漢: +さつ 殺 単漢: +さつ 薩 単漢: +さつ 撒 単漢: +さつい 殺意 名1: +さつえい 撮影 名6: +さつがい 殺害 名6: +さつき 五月 代1: +さつじん 殺人 名1: +さつばつ 殺伐 代5:形動2: +さつま 薩摩 地名: +さて さて 接続: +さてい 査定 名6: +さと 里 名2: +さと 悟 ラ五7: +さと 諭 サ五3: +さと 郷 単漢: +さとう 佐藤 苗字: +さとう 砂糖 名2: +さとし 聡 名前: +さとし 智 名前: +さとし 諭 名前: +さとしょう 里庄 地名: +さとみ 聡美 名前: +さとみ 智美 名前: +さとみ 里美 名前: +さとみ 恵規 名前: +さとる 悟 名前: +さど 佐渡 苗字: +さど 佐渡 地名: +さどう 作動 名6: +さどう 茶道 名1: +さどわら 佐土原 地名: +さなえ 早苗 苗字: +さなぎ 蛹 代1: +さなごうち 佐那河内 地名: +さなだ 真田 苗字: +さぬき 讃岐 地名: +さねとう 實藤 苗字: +さの 佐野 苗字: +さの 佐野 地名: +さは 左派 名1: +さはら 佐原 苗字: +さはら 砂原 地名: +さはんじ 茶飯事 名1: +さば 裁 カ五8: +さば 捌 カ五8: +さば 鯖 代1: +さば 佐波 地名: +さば 鯆 単漢: +さばえ 鯖江 地名: +さばく 砂漠 名4: +さび 錆 代1: +さび 錆び 一段1: +さびし 寂し 形9: +さびし 淋し 形9: +さびし さびし 形5: +さぶ サブ 名1: +さぶじぇくと サブジェクト 名1: +さぶろう 三郎 名前: +さぷらい サプライ 代4: +さへん 左辺 名1: +さべつ 差別 名6: +さほう 作法 名1: +さほど さほど 副5: +さぼ さぼ ラ五7: +さぼ サボ ラ五7: +さぼう 砂防 名1: +さぽーと サポート 名6: +さま 冷ま サ五8: +さま 覚ま サ五8: +さま 様 代1: +さま さま 代1: +さまざま 様々 形動9: +さまたげ 妨げ 一段2: +さまに 様似 地名: +さまよ さまよ ワ五5: +さまよ さ迷 ワ五5: +さまりー サマリー 名1: +さみし 寂し 形9: +さみし 淋し 形9: +さみず 三水 地名: +さむ 寒 形9: +さむ サム 代1: +さむかわ 寒川 苗字: +さむかわ 寒川 地名: +さむけ 寒気 名1: +さむらい 侍 代1: +さめ 覚め 一段2: +さめ 醒め 一段2: +さめ 冷め 一段2: +さめ 鮫 代1: +さめかわ 鮫川 地名: +さめしま 鮫島 苗字: +さも さも 副1: +さもなければ さもなければ 接続: +さもん 査問 名6: +さや 鞘 代1: +さやま 狭山 地名: +さやま 佐山 苗字: +さゆう 左右 名6: +さゆり 早百合 名前: +さよう 作用 名6: +さよう 佐用 地名: +さようなら さようなら 代1: +さよく 左翼 名1: +さよなら さよなら 代1: +さら さら サ五5:ワ五5: +さら 晒 サ五7: +さら 曝 サ五7: +さら 皿 名2:助数2: +さら 更 単漢: +さらいげつ 再来月 代6: +さらいしゅう 再来週 代6: +さらいねん 再来年 代6: +さらうんど サラウンド 名1: +さらけだ さらけだ サ五5: +さらさら 更々 副1: +さらしな 更級 地名: +さらだ サラダ 名1: +さらに 更に 副1: +さらば さらば 代1: +さらべつ 更別 地名: +さらりーまん サラリーマン 名1: +さりげな さりげな 形2: +さる さる 連体: +さる 猿 代1: +さる 沙流 地名: +さるすべり 百日紅 代1: +さるふつ 猿払 地名: +されど されど 接続: +さろま 佐呂間 地名: +さわ 触 ラ五8: +さわ 障 ラ五7: +さわ 騒 ガ五8: +さわ 沢 代1: +さわ 佐波 地名: +さわ 澤 単漢: +さわい 沢井 苗字: +さわうち 沢内 苗字: +さわうち 沢内 地名: +さわがし 騒がし 形3: +さわぐち 沢口 苗字: +さわた 佐和田 地名: +さわたり 沢渡 地名: +さわだ 沢田 苗字: +さわだ 澤田 苗字: +さわむら 沢村 苗字: +さわやか さわやか 形動4: +さわやか 爽やか 形動4: +さわら 佐原 地名: +さわら 早良 地名: +さわら 鰆 代1: +さわん 左腕 名1: +さん さん 接尾1: +さん 山 接尾4: +さん 酸 接尾1: +さん 桟 代1: +さん 算 サ変: +さん 賛 サ変: +さん 散 ザ変: +さん 参 サ変:ザ変: +さん 産 接尾1:サ変: +さん 讃 代1: +さん 傘 単漢: +さん 纂 単漢: +さん 燦 単漢: +さん 珊 単漢: +さん 蚕 単漢: +さん 惨 単漢: +さん 撒 単漢: +さん 餐 単漢: +さん 蒜 単漢: +さんい 賛意 名1: +さんいつ 散逸 名6: +さんいん 参院 名1: +さんいん 山陰 名1: +さんいん 産院 名1: +さんか 参加 名7: +さんか 酸化 名6: +さんか 賛歌 名1: +さんか 傘下 名1: +さんかい 散会 代4: +さんかい 参会 代4: +さんかく 三角 名8: +さんかん 参観 名7: +さんかん 山間 名1: +さんかんしおん 三寒四温 代1: +さんが 参賀 代4: +さんが 山河 名1: +さんがい 惨害 名1: +さんがく 山岳 名1: +さんがく 産額 名1: +さんがにち 三が日 名1: +さんがわ 寒川 地名: +さんきゅう 産休 名1: +さんきょう 山峡 名1: +さんぎいん 参議院 名1: +さんぎょう 産業 名4: +さんぐう 参宮 地名: +さんぐらす サングラス 名1: +さんけん 散見 名6: +さんげき 惨劇 名1: +さんこう 参考 名3: +さんこう 三光 地名: +さんこうしょ 参考書 名1: +さんご 珊瑚 名1: +さんご 産後 名1: +さんごう 三郷 地名: +さんさい 山菜 名1: +さんさく 散策 名7: +さんざい 散在 名6: +さんざい 散財 名6: +さんざん 散々 形動9: +さんしゅう 参集 名7: +さんしゅつ 産出 名6: +さんしゅつ 算出 名6: +さんしょう 参照 名7: +さんしょう 三唱 名6: +さんじ 参事 名1: +さんじ 惨事 名1: +さんじ 産児 名1: +さんじ 賛辞 名1: +さんじゅつ 算術 名1: +さんじょ 賛助 名6: +さんじょう 参上 名6: +さんじょう 山上 名1: +さんじょう 惨状 名1: +さんすい 散水 名6: +さんすう 算数 名1: +さんせい 賛成 名6: +さんせい 酸性 名1: +さんせい 参政 名1: +さんせいどう 三省堂 企業: +さんせき 山積 名6: +さんせん 参戦 名6: +さんぜん 燦然 形動2: +さんそ 酸素 名1: +さんそう 山荘 名1: +さんそん 山村 名1: +さんぞく 山賊 名1: +さんたくろーす サンタクロース 名1: +さんたん 賛嘆 代4: +さんだ 三田 地名: +さんだん 散弾 名1: +さんだん 算段 名6: +さんち 産地 名1: +さんち 山地 名1: +さんちゅう 山中 名1: +さんちょう 山頂 名1: +さんてい 算定 名6: +さんでぃえご サンディエゴ 地名: +さんとう 三島 地名: +さんとう 山東 地名: +さんとりー サントリー 企業: +さんどう 参道 名1: +さんどう 賛同 名7: +さんない 山内 地名: +さんなん 山南 地名: +さんにゅう 参入 名6: +さんにゅう 算入 名6: +さんのう 山王 地名: +さんのへ 三戸 苗字: +さんのへ 三戸 地名: +さんば 産婆 名2: +さんばし 桟橋 名1: +さんぱい 参拝 名6: +さんぱつ 散発 名6: +さんぱつ 散髪 名6: +さんび 賛美 名6: +さんぴ 賛否 名1: +さんふじんか 産婦人科 名1: +さんふらんしすこ サンフランシスコ 地名: +さんぶ 山武 地名: +さんぶつ 産物 名1: +さんぶん 散文 名4: +さんぷ 散布 名6: +さんぷく 山腹 名1: +さんぷりんぐ サンプリング 名1: +さんぷる サンプル 名1: +さんぼう 参謀 名1: +さんぼんぎ 三本木 地名: +さんぽ 散歩 名5: +さんぽう 算法 名1: +さんみ 酸味 名1: +さんみゃく 山脈 名1: +さんゆ 産油 名6: +さんよ 参与 名6: +さんよう 山陽 名1: +さんよう 三洋 企業: +さんよう 算用 代1: +さんらん 散乱 名6: +さんらん 産卵 名6: +さんりく 三陸 地名: +さんりん 山林 名1: +さんれつ 参列 名7: +さんろく 山麓 名1: +さんわ 三和 企業: +ざ 座 代1: +ざ 坐 単漢: +ざ 挫 単漢: +ざい 剤 接尾3: +ざい 材 接尾1: +ざい 罪 接尾1: +ざい 財 接尾1: +ざい 在 単漢: +ざいあく 罪悪 名1: +ざいい 在位 名7: +ざいか 財貨 名1: +ざいかい 財界 名1: +ざいがい 在外 名1: +ざいがく 在学 名6: +ざいきょう 在京 名6: +ざいきん 在勤 名6: +ざいけい 財形 名1: +ざいげん 財源 名1: +ざいこ 在庫 名1: +ざいこう 在校 名6: +ざいさん 財産 名1: +ざいしつ 材質 名1: +ざいしょ 在所 名3: +ざいしょく 在職 名6: +ざいじゅう 在住 名6: +ざいじょう 罪状 名1: +ざいせい 財政 名1: +ざいせき 在籍 名6: +ざいたく 在宅 名6: +ざいだん 財団 名1: +ざいにち 在日 名6: +ざいにん 在任 名6: +ざいにん 罪人 名1: +ざいばつ 財閥 名1: +ざいほう 財宝 名1: +ざいむ 財務 名1: +ざいもく 材木 名1: +ざいらい 在来 名1: +ざいりゅう 在留 名6: +ざいりょう 材料 名1: +ざいりょく 財力 名1: +ざおう 蔵王 地名: +ざか 坂 接尾2: +ざこう 座高 名1: +ざしき 座敷 名2: +ざしょう 座礁 名6: +ざしょう 挫傷 名6: +ざせき 座席 名1: +ざせつ 挫折 名6: +ざぜん 座禅 名1: +ざだん 座談 名6: +ざちょう 座長 名1: +ざっか 雑貨 名1: +ざっき 雑記 名6: +ざっきょ 雑居 名6: +ざっくばらん ざっくばらん 形動4: +ざっし 雑誌 名1: +ざっしゅ 雑種 名1: +ざっそう 雑草 名1: +ざった 雑多 形動4: +ざっと ざっと 副1: +ざっとう 雑踏 名6: +ざっぱく 雑駁 名8: +ざっぴ 雑費 名1: +ざつ 雑 代5: +ざつえき 雑益 名1: +ざつおん 雑音 名1: +ざつがく 雑学 名1: +ざつじ 雑事 名1: +ざつぜん 雑然 形動2: +ざつだん 雑談 名6: +ざつねん 雑念 名1: +ざつむ 雑務 名1: +ざつよう 雑用 名5: +ざひょう 座標 名1: +ざま 座間 苗字: +ざま 座間 地名: +ざま 様 代1: +ざゆう 座右 名1: +ざわめ ざわめ カ五3: +ざん 山 接尾2: +ざん 残 接尾2: +ざん 算 接尾2: +ざん 惨 単漢: +ざん 斬 単漢: +ざん 暫 単漢: +ざんがい 残骸 名1: +ざんがく 残額 名1: +ざんきん 残金 名1: +ざんぎゃく 残虐 名8: +ざんぎょう 残業 名6: +ざんこく 残酷 名8: +ざんさつ 惨殺 名6: +ざんしょ 残暑 名1: +ざんしん 斬新 名8: +ざんじ 暫時 代6: +ざんせつ 残雪 名1: +ざんそん 残存 名6: +ざんぞう 残像 名1: +ざんぞん 残存 名6: +ざんだか 残高 名1: +ざんてい 暫定 名4: +ざんにん 残忍 代5: +ざんねん 残念 名8: +ざんぱん 残飯 名1: +ざんぴん 残品 名1: +ざんむ 残務 名1: +ざんよ 残余 名1: +ざんりゅう 残留 名6: +し 知 ラ五6: +し し サ変未用:ラ五5: +し 資 サ変: +し 敷 カ五7: +し 詩 代1: +し 死 代1:ナ五:サ変:サ五1: +し 詞 代1: +し 子 代1: +し 志 代1: +し 視 接尾7: +し 紙 接尾1:助数2: +し 誌 接尾1:助数2: +し 史 接尾1: +し 士 接尾1: +し 市 接尾4: +し 師 接尾1: +し 氏 接尾1: +し 祇 単漢: +し 此 単漢: +し 仕 単漢: +し 仔 単漢: +し 伺 単漢: +し 使 単漢: +し 刺 単漢: +し 司 単漢: +し 嗣 単漢: +し 始 単漢: +し 姉 単漢: +し 姿 単漢: +し 屍 単漢: +し 思 単漢: +し 指 単漢: +し 支 単漢: +し 孜 単漢: +し 斯 単漢: +し 施 単漢: +し 旨 単漢: +し 枝 単漢: +し 止 単漢: +し 獅 単漢: +し 祉 単漢: +し 私 単漢: +し 糸 単漢: +し 紫 単漢: +し 肢 単漢: +し 脂 単漢: +し 至 単漢: +し 試 単漢: +し 諮 単漢: +し 賜 単漢: +し 雌 単漢: +し 飼 単漢: +し 歯 単漢: +し 次 単漢: +し 示 単漢: +し 自 単漢: +し 偲 単漢: +し 芝 単漢: +し 笥 単漢: +し 弛 単漢: +し 砥 単漢: +し 之 単漢: +し 覗 単漢: +し 髭 単漢: +し 巳 単漢: +し 矢 単漢: +し 匙 単漢: +しーく シーク 名6: +しーけんしゃる シーケンシャル 代5: +しーけんす シーケンス 名1: +しーずん シーズン 名1: +しーと シート 名1: +しーど シード 名6: +しーま シーマ 名1: +しーるど シールド 名6: +しーん シーン 名1: +しあい 試合 名6: +しあが 仕上が ラ五8: +しあげ 仕上げ 一段3: +しあたー シアター 名1: +しあわせ 幸せ 名9: +しあん 思案 名6: +しあん 私案 名1: +しあん シアン 名1: +しい 強い 一段1: +しい 椎 代1: +しい 私意 名1: +しい 恣意 名1: +しいか 詩歌 名1: +しいく 飼育 名6: +しいたけ 椎茸 名1: +しいだ 椎田 地名: +しいな 椎名 苗字: +しいな 椎名 地名: +しいの 椎野 苗字: +しいば 椎葉 地名: +しいれ 仕入れ 一段3: +しいん 子音 名1: +しいん 死因 名1: +しいん 試飲 名6: +しうち 仕打 代1: +しうら 市浦 地名: +しうんじ 紫雲寺 地名: +しうんてん 試運転 名6: +しぇあ シェア 名1: +しぇぱーど シェパード 名1: +しぇる シェル 名1: +しえい 市営 名1: +しえい 私営 名1: +しえき 使役 名6: +しえき 私益 名1: +しえん 支援 名7: +しお 塩 名2: +しお 汐 名1: +しお 潮 名1: +しお 志雄 地名: +しおかわ 塩川 苗字: +しおかわ 塩川 地名: +しおがま 塩釜 地名: +しおくり 仕送り 代4: +しおけ 塩気 名1: +しおざわ 塩沢 苗字: +しおざわ 塩沢 地名: +しおじり 塩尻 地名: +しおた 塩田 地名: +しおだ 塩田 苗字: +しおづけ 塩漬け 代4: +しおどめ 汐留 地名: +しおの 塩野 苗字: +しおのえ 塩江 地名: +しおはま 塩浜 地名: +しおばら 塩原 苗字: +しおばら 塩原 地名: +しおひがり 潮干狩 代1: +しおみ 塩見 苗字: +しおみず 塩水 名1: +しおや 塩屋 地名: +しおや 塩谷 苗字: +しおや 塩谷 地名: +しおやき 塩焼 名1: +しおり 栞 代1: +しおん 紫苑 名1: +しか しか ラ五8: +しか 叱 ラ五8: +しか 鹿 名1: +しか 歯科 名1: +しか 市価 名1: +しか 志賀 地名: +しかい 司会 名6: +しかい 視界 名1: +しかえし 仕返し 代4: +しかおい 鹿追 地名: +しかく 資格 名1: +しかく 視覚 名8: +しかく 死角 名1: +しかく 四角 名8:形1: +しかけ 仕掛け 一段3: +しかし しかし 接続: +しかしながら しかしながら 接続: +しかた 仕方 名1: +しかつ 師勝 地名: +しかの 鹿野 苗字: +しかの 鹿野 地名: +しかばね 屍 代1: +しかべ 鹿部 地名: +しかま 飾磨 地名: +しかま 色麻 地名: +しかまち 鹿町 地名: +しかも しかも 接続: +しかりつけ 叱りつけ 一段1: +しかるべき 然るべき 連体: +しかん 仕官 名1: +しかん 弛緩 代4: +しが 志賀 苗字: +しが 志賀 地名: +しが 滋賀 地名: +しが 四賀 地名: +しがい 市外 名1: +しがい 市街 名1: +しがい 死骸 名1: +しがいせん 紫外線 名1: +しがく 史学 名1: +しがく 私学 名1: +しがこうげん 志賀高原 地名: +しがらき 信楽 地名: +しがらみ しがらみ 名1: +しがん 志願 名6: +しき 式 名2:助数: +しき 四季 名1: +しき 死期 名1: +しき 始期 名1: +しき 指揮 代4: +しき 色 代1: +しき 織 代1: +しき 敷 代1: +しき 仕切 ラ五7: +しき 志木 地名: +しき 磯城 地名: +しき 識 単漢: +しきい 敷居 名1: +しききん 敷金 名1: +しきさい 色彩 名1: +しきし 色紙 名1: +しきしま 敷島 苗字: +しきしゃ 識者 名1: +しきじ 式辞 名1: +しきじょう 式場 名1: +しきそ 色素 名1: +しきそう 色相 名1: +しきち 敷地 名1: +しきちょう 色調 名1: +しきつめ 敷き詰め 一段1: +しきてん 式典 名1: +しきふ 敷布 名1: +しきべつ 識別 名6: +しきもう 色盲 名1: +しきゅう 支給 名6: +しきゅう 至急 代6: +しきゅう 子宮 名1: +しきょ 死去 名7: +しきょう 市況 名1: +しきょく 支局 名1: +しきり 仕切り 名1: +しきりに しきりに 副1: +しきん 資金 名4: +しきん 至近 名1: +しきんぐり 資金繰り 代4: +しぎ 仕儀 名1: +しぎ 市議 名1: +しぎ 鴫 代1: +しぎょう 始業 名6: +しぎん 詩吟 名1: +しく 仕組 マ五7: +しく 市区 名1: +しくしく しくしく 副3: +しくはっく 四苦八苦 代4: +しぐさ しぐさ 代1: +しぐさ 仕草 代1: +しぐなる シグナル 名1: +しぐれ 時雨 名1: +しけい 死刑 名6: +しけつ 止血 名6: +しけん 試験 名6: +しけん 私見 名1: +しけんじょう 試験場 代1: +しげ 繁 ラ五7:単漢: +しげ 茂 ラ五7:単漢: +しげ 重 単漢: +しげお 重男 名前: +しげお 重夫 名前: +しげお 重雄 名前: +しげお 繁男 名前: +しげお 繁夫 名前: +しげお 繁雄 名前: +しげお 茂男 名前: +しげお 茂夫 名前: +しげお 茂雄 名前: +しげき 刺激 名6: +しげき 重樹 名前: +しげき 茂樹 名前: +しげこ 茂子 名前: +しげた 重田 苗字: +しげのぶ 重信 苗字:名前: +しげはる 重治 名前: +しげひこ 重彦 名前: +しげまつ 重松 苗字: +しげみつ 重光 苗字:名前: +しげゆき 重行 名前: +しげよし 重義 名前: +しげる 滋 名前: +しげる 繁 名前: +しげる 茂 名前: +しげん 資源 名1: +しげん 至言 名1: +しこ 仕込 マ五7: +しこう 思考 名6: +しこう 志向 名6: +しこう 指向 名6: +しこう 施行 名6: +しこう 至高 名1: +しこう 試行 名6: +しこう 嗜好 名6: +しこく 四国 一括: +しこたん 色丹 地名: +しご しご カ五3: +しご 死後 名1: +しご 私語 代4: +しごく 至極 形動4: +しごと 仕事 名5: +しさ 示唆 名6: +しさい 司祭 名1: +しさい 子細 名8: +しさく 思索 名6: +しさく 施策 名6: +しさく 試作 名6: +しさつ 視察 名6: +しさつ 刺殺 名6: +しさん 資産 名1: +しさん 試算 名6: +しざい 私財 名1: +しざい 資材 名1: +しし 獅子 名1: +しし 宍 単漢: +ししくい 宍喰 地名: +ししつ 資質 名1: +ししど 宍戸 苗字: +ししゃ 使者 名1: +ししゃ 支社 名1: +ししゃ 死者 名1: +ししゃ 試写 名6: +ししゃく 子爵 名1: +ししゃごにゅう 四捨五入 代4: +ししゃちょう 支社長 名1: +ししゅ 死守 名6: +ししゅう 詩集 名1: +ししゅう 刺繍 代4: +ししゅつ 支出 名6: +ししゅんき 思春期 名1: +ししょ 司書 名1: +ししょ 支所 名1: +ししょ 支署 名1: +ししょう 支障 名1: +ししょう 師匠 名1: +ししょう 死傷 名6: +ししょう 刺傷 名6: +ししょく 試食 名6: +ししょばこ 私書箱 名1: +ししん 指針 名1: +ししん 私信 名1: +ししん 私心 名1: +しじ 指示 名7: +しじ 支持 名6: +しじ 師事 名6: +しじ 私事 名1: +しじみ 蜆 代1: +しじゅう 始終 名1: +しじゅく 私塾 名1: +しじょ 子女 名1: +しじょう 市場 名1: +しじょう 私情 名1: +しじょう 紙上 名1: +しじょう 至上 名1: +しじょう 史上 名1: +しじょう 誌上 名1: +しじょう 試乗 名6: +しじょう 四条 地名: +しじょうなわて 四条畷 地名: +しじん 詩人 名1: +しすい 酒々井 地名: +しすい 泗水 地名: +しすう 指数 名1: +しすてむ システム 名4: +しず 沈 マ五8: +しず 静 単漢: +しずえ 静江 名前: +しずえ 静枝 名前: +しずお 静男 名前: +しずお 静夫 名前: +しずお 静雄 名前: +しずおか 静岡 地名: +しずか 静か 形動7: +しずか 静 名前: +しずか 静香 名前: +しずく 雫 代1: +しずく 滴 代1: +しずくいし 雫石 地名: +しずけさ 静けさ 代1: +しずこ 静子 名前: +しずない 静内 地名: +しずま 静ま ラ五5: +しずま 鎮ま ラ五5: +しずまりかえ 静まり返 ラ五1: +しずめ 静め 一段2: +しずめ 鎮め 一段2: +しせい 姿勢 名1: +しせい 市制 名1: +しせい 市政 名1: +しせい 施政 名1: +しせい 私製 名1: +しせいかつ 私生活 名1: +しせいじ 私生児 名1: +しせき 史跡 名1: +しせつ 施設 名6: +しせつ 使節 名1: +しせつ 私設 名1: +しせん 視線 名1: +しせん 支線 名1: +しせん 四川 名1: +しせん 死線 名1: +しぜん 自然 名8: +しそーらす シソーラス 代1: +しそう 思想 名4: +しそう 宍粟 地名: +しそうか 思想家 名1: +しそく 子息 名3: +しそん 子孫 名1: +しぞう 死蔵 名6: +しぞく 氏族 名1: +した 下 代1: +した 舌 代1: +した 慕 ワ五2: +したい 姿態 名1: +したい 死体 名1: +したい 肢体 名1: +したうけ 下請け 名6: +したえ 下絵 名1: +したが 従 ワ五1: +したがき 下書き 代4: +したぎ 下着 名1: +したく 支度 名5: +したざわり 舌触り 代1: +したし 親し 形9:マ五8: +したしらべ 下調べ 代4: +したじ 下地 名1: +したじき 下敷 代1: +したた 滴 ラ五3: +したたか 強か 形動4: +したため 認め 一段1: +しただ 下田 地名: +したづみ 下積み 代1: +したて 下手 名1: +したて 仕立て 一段4: +したどり 下取り 代4: +したね 下値 名1: +したび 下火 名1: +したまち 下町 名1: +したまわ 下回 ラ五7: +したみ 下見 名6: +したむき 下向き 名1: +したら 設楽 地名: +したわし 慕わし 形3: +しだ 志太 地名: +しだ 志田 地名: +しだい 次第 名1:接尾9: +しだい 私大 名1: +しだし 仕出し 名1: +しだれ 垂れ 一段1: +しだん 師団 名1: +しち 質 代1: +しちがはま 七ヶ浜 地名: +しちじょう 七城 地名: +しちずん シチズン 企業: +しちてんばっとう 七転八倒 代4: +しちなん 七難 名1: +しちのへ 七戸 地名: +しちや 質屋 名1: +しちゅー シチュー 名1: +しちゅう 市中 名1: +しちゅう 支柱 名1: +しちょう 市長 代2: +しちょう 思潮 名1: +しちょう 支庁 名1: +しちょう 視聴 名6: +しちょう 試聴 名6: +しちょうそん 市町村 名1: +しちろう 七郎 名前: +しっかく 失格 名6: +しっかり しっかり 副3: +しっかん 疾患 名1: +しっき 漆器 名1: +しっきゃく 失脚 名6: +しっくり しっくり 副3: +しっけい 失敬 名8:サ変: +しっこう 執行 名6: +しっこう 失効 名6: +しっさく 失策 名6: +しっしょう 失笑 名6: +しっしょく 失職 名6: +しっしん 失神 名6: +しっしん 湿疹 名1: +しっせき 叱責 名6: +しっそ 質素 名8: +しっそう 失踪 名6: +しっそう 疾走 名6: +しっそく 失速 名6: +しった 叱咤 名7: +しったい 失態 名1: +しっち 湿地 名1: +しっちょう 失調 名1: +しっつい 失墜 名6: +しってん 失点 名1: +しっと 嫉妬 名6: +しっとう 執刀 名6: +しっとり しっとり 副9: +しっぱい 失敗 名6: +しっぴつ 執筆 名6: +しっぷ 湿布 名6: +しっぷう 疾風 名1: +しっぺい 疾病 名1: +しっぽ 尻尾 代1: +しっぽう 七宝 名1: +しつ 質 代1: +しつ 室 接尾1:助数2: +しつ 湿 単漢: +しつ 失 単漢: +しつ 叱 単漢: +しつ 執 単漢: +しつ 嫉 単漢: +しつ 悉 単漢: +しつ 漆 単漢: +しつ 疾 単漢: +しつ 膝 単漢: +しつい 失意 名1: +しつおん 室温 名1: +しつかん 質感 名1: +しつき 後月 地名: +しつぎ 質疑 名6: +しつぎょう 失業 名6: +しつけ しつけ 一段3: +しつけ 仕付 一段3: +しつげん 失言 名6: +しつげん 湿原 名1: +しつこ しつこ 形2: +しつじ 執事 名1: +しつじつ 質実 名8: +しつじゅん 湿潤 名8: +しつちょう 室長 名1: +しつてき 質的 形動1: +しつでん 湿田 名1: +しつど 湿度 名1: +しつない 室内 名1: +しつねん 失念 名6: +しつぼう 失望 名6: +しつむ 執務 名6: +しつめい 失明 名6: +しつもん 質問 名7: +しつよう 執拗 名8: +しつりょう 質量 名1: +しつれい 失礼 名8:サ変: +しつれん 失恋 名6: +してぃ シティ 名1: +してい 指定 名6: +してい 師弟 名1: +してい 私邸 名1: +していせき 指定席 名1: +してき 指摘 名7: +してき 私的 形動1: +してき 史的 形動1: +してつ 私鉄 名1: +してん 支店 名1:接尾4: +してん 支点 名1: +してん 始点 名1: +してん 視点 名1: +してんちょう 支店長 名1: +してんのう 四天王 代1: +しでん 市電 名1: +しと 使徒 名1: +しと 使途 名1: +しとう 死闘 名6: +しとみ 蔀 単漢: +しど 志度 地名: +しどう 指導 名7: +しどう 始動 名6: +しどう 私道 名1: +しな しな ワ五1: +しな 品 名2: +しな 科 単漢: +しない 市内 名1: +しない 竹刀 名1: +しなかず 品数 名2: +しながわ 品川 地名: +しなぎれ 品切れ 代4: +しなさだめ 品定め 代4: +しなじな 品々 代1: +しなの 信濃 地名: +しなび 萎び 一段2: +しなもの 品物 名2: +しなりお シナリオ 名1: +しなん 至難 名8: +しなん 指南 名7: +しにあ シニア 名1: +しにせ 老舗 名4: +しにたえ 死に絶え 一段1: +しにょう し尿 名1: +しにん 死人 名1: +しね 死ね 一段1: +しねま シネマ 名1: +しねん 思念 名6: +しの しの ガ五7: +しの 凌 ガ五7: +しの 偲 バ五8: +しの 忍 バ五8: +しの 篠 単漢: +しのざき 篠崎 苗字: +しのだ 篠田 苗字: +しのづか 篠塚 苗字: +しのはら 篠原 苗字: +しのびこ 忍び込 マ五7: +しのびよ 忍び寄 ラ五5: +しのぶ 忍 名前: +しはい 支配 名6: +しはい 賜杯 名1: +しはいにん 支配人 名1: +しはつ 始発 名1: +しはら 支払 ワ五6: +しはらい 支払 名5: +しはらいにん 支払人 名1: +しはん 市販 名6: +しはん 師範 名1: +しはん 紫斑 名1: +しば 柴 名1: +しば 芝 名1: +しば 芝 地名: +しば 縛 ラ五8: +しばい 芝居 名5: +しばうら 芝浦 苗字: +しばうら 芝浦 地名: +しばかわ 芝川 地名: +しばさき 柴崎 苗字: +しばさき 柴崎 地名: +しばざき 柴崎 苗字: +しばし しばし 代6: +しばしば しばしば 副8: +しばた 柴田 苗字: +しばた 柴田 地名: +しばた 新発田 地名: +しばはら 芝原 苗字: +しばふ 芝生 名1: +しばやま 柴山 苗字: +しばやま 芝山 苗字: +しばらく しばらく 代4: +しばらく 暫く 代4: +しばりつけ 縛り付け 一段1: +しひ 市費 名1: +しひょう 指標 名1: +しびあ シビア 名8: +しびっく シビック 名1: +しびれ 痺れ 一段3: +しふく 私服 名1: +しふく 私腹 名1: +しふく 至福 名1: +しふく 雌伏 名6: +しふと シフト 名6: +しぶ 市部 名1: +しぶ 支部 名1: +しぶ 渋 形8:ラ五1:代1: +しぶかわ 渋川 苗字: +しぶかわ 渋川 地名: +しぶし 志布志 地名: +しぶしぶ 渋々 副8: +しぶつ 私物 名1: +しぶと しぶと 形2: +しぶや 渋谷 苗字: +しぶや 渋谷 地名: +しぶん 詩文 名1: +しへい 紙幣 名1: +しべ 蕊 代1: +しべちゃ 標茶 地名: +しべつ 士別 地名: +しべつ 死別 名6: +しべつ 標津 地名: +しべとろ 蕊取 地名: +しべりあ シベリア 地名: +しべん 思弁 名6: +しべん 至便 形動4: +しほう 司法 名1: +しほう 四方 名1: +しほうしょし 司法書士 名1: +しほろ 士幌 地名: +しほん 資本 名1: +しほんか 資本家 名1: +しほんきん 資本金 名1: +しぼ しぼ マ五7:ラ五7: +しぼ 萎 マ五7: +しぼ 絞 ラ五8: +しぼ 搾 ラ五8: +しぼ 思慕 名6: +しぼう 志望 名6: +しぼう 死亡 名6: +しぼう 脂肪 名1: +しぼうこう 志望校 名1: +しぼつ 死没 名6: +しぼりあげ 絞り上げ 一段1: +しぼりあげ 搾り上げ 一段1: +しぼりだ 絞り出 サ五7: +しま 島 苗字:接尾4: +しま 閉ま ラ五3: +しま 締ま ラ五3: +しま しま ワ五8: +しま 仕舞 ワ五8: +しま 志摩 苗字: +しま 志摩 地名: +しま 縞 代1: +しま 嶋 単漢: +しまい 姉妹 名1: +しまうま シマウマ 代1: +しまかげ 島陰 名1: +しまがはら 島ヶ原 地名: +しまぐに 島国 名1: +しまざき 島崎 苗字: +しまじり 島尻 地名: +しまだ 島田 苗字: +しまだ 島田 地名: +しまだ 嶋田 苗字: +しまつ 始末 名6: +しまづ 島津 苗字: +しまづ 島津 地名: +しまね 島根 苗字: +しまね 島根 地名: +しまの 島野 苗字: +しまばら 島原 苗字: +しまばら 島原 地名: +しままき 島牧 地名: +しまむら 島村 苗字: +しみ 染み 一段3: +しみこ 染み込 マ五7: +しみじみ しみじみ 副2: +しみず 清水 苗字: +しみず 清水 地名: +しみつ 染み着 カ五3: +しみぬき 染み抜き 名6: +しみゅれーしょん シミュレーション 名1: +しみゅれーた シミュレータ 名1: +しみゅれーと シミュレート 名6: +しみん 市民 名1: +しみんぜい 市民税 名1: +しむかっぷ 占冠 地名: +しむけ 仕向 名1: +しむけ 仕向け 一段3: +しむら 志村 苗字: +しめ 志免 地名: +しめ 閉め 一段4: +しめ 占め 一段2: +しめ 締め 一段4: +しめ 絞め 一段4: +しめ 示 サ五8: +しめ 湿 サ五7:ラ五8: +しめい 指名 名6: +しめい 指命 名6: +しめい 氏名 名1: +しめい 使命 名1: +しめき 締め切 ラ五7: +しめきり 〆切り 名1: +しめきり 締切り 名1: +しめきりび 締切日 名1: +しめくく 締めくく ラ五7: +しめだ 締め出 サ五7: +しめっぽ 湿っぽ 形2: +しめつ 死滅 名6: +しめつけ 締め付け 一段3: +しめび 締日 名1: +しめやか しめやか 形動4: +しめん 紙面 名1: +しめんそか 四面楚歌 名1: +しも 下 代1:接頭1: +しも 霜 代1: +しもあがた 下県 地名: +しもいち 下市 地名: +しもいな 下伊那 地名: +しもうさ 下総 地名: +しもかまがり 下蒲刈 地名: +しもかわ 下川 苗字: +しもかわ 下川 地名: +しもがれ 霜枯れ 代4: +しもき 下期 名1: +しもきた 下北 地名: +しもきたざわ 下北沢 地名: +しもきたやま 下北山 地名: +しもぎょう 下京 地名: +しもげ 下毛 地名: +しもこしき 下甑 地名: +しもごう 下郷 地名: +しもざ 下座 名1: +しもじ 下地 地名: +しもじょう 下条 苗字: +しもじょう 下条 地名: +しもすわ 下諏訪 地名: +しもたかい 下高井 地名: +しもだ 下田 苗字: +しもだ 下田 地名: +しもだて 下館 地名: +しもつ 下津 苗字: +しもつ 下津 地名: +しもつが 下都賀 地名: +しもつけ 下野 地名: +しもつま 下妻 地名: +しもて 下手 名1: +しもにいかわ 下新川 地名: +しもにた 下仁田 地名: +しものせき 下関 地名: +しもはんき 下半期 名1: +しもばしら 霜柱 代1: +しもふさ 下総 地名: +しもへい 下閉伊 地名: +しもべ 下部 地名: +しもましき 下益城 地名: +しもみのち 下水内 地名: +しもむら 下村 苗字: +しもやけ 霜焼け 名1: +しもやま 下山 苗字: +しもん 諮問 名6: +しもん 試問 名6: +しもん 指紋 名1: +しゃ 社 接尾1:助数2: +しゃ 者 接尾3:助数2: +しゃ 車 接尾1: +しゃ 舎 代1: +しゃ 射 代1: +しゃ 斜 代1: +しゃ 紗 代1: +しゃ 謝 サ変: +しゃ 沙 単漢: +しゃ 砂 単漢: +しゃ 写 単漢: +しゃ 捨 単漢: +しゃ 赦 単漢: +しゃ 煮 単漢: +しゃ 遮 単漢: +しゃーぷ シャープ 代5:企業: +しゃい 謝意 名1: +しゃいん 社員 名1: +しゃうん 社運 名1: +しゃえい 射影 名6: +しゃおく 社屋 名1: +しゃおん 謝恩 名6: +しゃか 釈迦 代1: +しゃかい 社会 名4: +しゃかいとう 社会党 名1: +しゃがい 社外 名1: +しゃぎょう 社業 名1: +しゃく 酌 代1: +しゃく 尺 代1:助数2: +しゃく 爵 代1: +しゃく 釈 代1: +しゃく 錫 代1: +しゃく 勺 代1: +しゃく 杓 代1: +しゃく 昔 単漢: +しゃく 石 単漢: +しゃく 赤 単漢: +しゃく 借 単漢: +しゃく 灼 単漢: +しゃくい 爵位 名1: +しゃくざい 借財 代4: +しゃくし 杓子 名1: +しゃくぜん 釈然 形動2: +しゃくど 尺度 名1: +しゃくねつ 灼熱 名1: +しゃくほう 釈放 名6: +しゃくめい 釈明 名6: +しゃくよう 借用 名6: +しゃくりょう 酌量 名6: +しゃけん 車検 名1: +しゃげき 射撃 名6: +しゃこ 車庫 名1: +しゃこう 社交 名4: +しゃこう 遮光 代4: +しゃこたん 積丹 地名: +しゃさい 社債 名1: +しゃさつ 射殺 名6: +しゃざい 謝罪 名6: +しゃし 斜視 名1: +しゃしゅ 車種 名1: +しゃしゅつ 射出 代4: +しゃしょう 車掌 代2: +しゃしょう 捨象 代4: +しゃしょく 写植 名1: +しゃしん 写真 名2: +しゃじ 謝辞 名1: +しゃじ 社寺 名1: +しゃじく 車軸 名1: +しゃじつ 写実 名4: +しゃせい 写生 名6: +しゃせつ 社説 名1: +しゃせん 斜線 名1: +しゃせん 車線 名1: +しゃぜつ 謝絶 名6: +しゃそう 車窓 名1: +しゃそう 社葬 名1: +しゃぞう 写像 名1: +しゃたい 車体 名1: +しゃたい 斜体 名1: +しゃたく 社宅 名1: +しゃだん 社団 名1: +しゃだん 遮断 名6: +しゃち 鯱 代1: +しゃちゅう 社中 名1: +しゃちゅう 車中 名1: +しゃちょう 社長 代2: +しゃっかん 借款 名1: +しゃっきん 借金 名6: +しゃったー シャッター 名1: +しゃつ シャツ 名1: +しゃてい 射程 名1: +しゃどう 車道 名1: +しゃな 紗那 地名: +しゃない 社内 名1: +しゃない 車内 名1: +しゃにくさい 謝肉祭 名1: +しゃにむに 遮二無二に 副1: +しゃひ 社費 名1: +しゃふう 社風 名1: +しゃふつ 煮沸 名6: +しゃべ 喋 ラ五8: +しゃみせん 三味線 名1: +しゃめい 社名 名1: +しゃめん 斜面 名1: +しゃよう 社用 名1: +しゃり 斜里 地名: +しゃりき 車力 地名: +しゃりょう 車両 名1: +しゃりん 車輪 名1: +しゃれ しゃれ 一段3: +しゃれ 洒落 名2: +しゃれい 謝礼 名6: +しゃれき 社歴 名1: +しゃわー シャワー 名1: +しゃんはい 上海 地名: +しゃんぷー シャンプー 代4: +しや 視野 名1: +しやく 試薬 名1: +しやくしょ 市役所 名1: +しゅ 種 接尾1:助数: +しゅ 主 代5:接頭1: +しゅ 酒 接尾1: +しゅ 首 代1:助数2: +しゅ 手 接尾1: +しゅ 朱 代1: +しゅ 取 単漢: +しゅ 守 単漢: +しゅ 殊 単漢: +しゅ 狩 単漢: +しゅ 珠 単漢: +しゅ 腫 単漢: +しゅ 趣 単漢: +しゅ 諏 単漢: +しゅーず シューズ 名1: +しゅい 趣意 名1: +しゅい 首位 名1: +しゅい 主意 名1: +しゅいん 主因 名1: +しゅう 州 接尾4:助数2: +しゅう 週 代1:助数: +しゅう 周 代1:助数2: +しゅう 囚 代1: +しゅう 宗 代1: +しゅう 醜 代1: +しゅう 衆 代1: +しゅう 秀 代1: +しゅう 集 接尾1: +しゅう 臭 代1: +しゅう 鰍 単漢: +しゅう 執 単漢: +しゅう 収 単漢: +しゅう 就 単漢: +しゅう 修 単漢: +しゅう 愁 単漢: +しゅう 拾 単漢: +しゅう 洲 単漢: +しゅう 秋 単漢: +しゅう 終 単漢: +しゅう 繍 単漢: +しゅう 習 単漢: +しゅう 舟 単漢: +しゅう 蒐 単漢: +しゅう 襲 単漢: +しゅう 讐 単漢: +しゅう 蹴 単漢: +しゅう 輯 単漢: +しゅう 酋 単漢: +しゅう 酬 単漢: +しゅう 摺 単漢: +しゅう 鍬 単漢: +しゅうい 周囲 名1: +しゅういち 修一 名前: +しゅういち 秀一 名前: +しゅういつ 秀逸 名8: +しゅういん 衆院 名1: +しゅうえいしゃ 集英社 企業: +しゅうえき 収益 名1: +しゅうえき 就役 名6: +しゅうか 集荷 名6: +しゅうかい 集会 名6: +しゅうかい 周回 名6: +しゅうかく 収穫 名6: +しゅうかん 習慣 名1: +しゅうかん 週刊 名1: +しゅうかん 週間 名1:助数2: +しゅうかんし 週刊誌 名1: +しゅうがく 就学 名6: +しゅうがく 修学 名6: +しゅうき 周期 名4:助数2: +しゅうき 周忌 名1:助数2: +しゅうき 終期 名1: +しゅうきゅう 週休 名1: +しゅうきゅう 週給 名1: +しゅうきょう 宗教 名4: +しゅうきょく 終局 名1: +しゅうきん 集金 名6: +しゅうぎ 祝儀 名3: +しゅうぎいん 衆議院 名1: +しゅうぎょう 就業 名6: +しゅうぎょう 修業 名6: +しゅうぎょう 終業 名6: +しゅうけい 集計 名6: +しゅうけつ 終結 名6: +しゅうけつ 集結 名6: +しゅうけん 集権 名4: +しゅうげき 襲撃 名6: +しゅうげん 祝言 名3: +しゅうこう 周航 名6: +しゅうこう 就航 名6: +しゅうこう 修好 名6: +しゅうごう 集合 名6: +しゅうさい 秀才 名1: +しゅうさく 秀作 名1: +しゅうさん 集散 名6: +しゅうし 終始 名6: +しゅうし 終止 名6: +しゅうし 収支 名1: +しゅうし 修士 名1: +しゅうしゅう 収集 名6: +しゅうしゅう 収拾 名6: +しゅうしゅく 収縮 名6: +しゅうしょう 愁傷 名3: +しゅうしょく 就職 名7: +しゅうしょく 修飾 名6: +しゅうしん 就寝 名7: +しゅうしん 執心 名7: +しゅうしん 終身 名1: +しゅうじ 習字 名1: +しゅうじ 修辞 名1: +しゅうじ 周二 名前: +しゅうじ 修司 名前: +しゅうじ 修二 名前: +しゅうじつ 終日 代6: +しゅうじゅく 習熟 名6: +しゅうじん 囚人 名1: +しゅうせい 修正 名6: +しゅうせい 集成 名6: +しゅうせい 修整 名6: +しゅうせい 習性 名1: +しゅうせき 集積 名6: +しゅうせん 終戦 名1: +しゅうせん 周旋 代4: +しゅうぜん 修繕 名6: +しゅうそう 周桑 地名: +しゅうそく 収束 名6: +しゅうそく 終息 名6: +しゅうたい 醜態 名1: +しゅうたん 愁嘆 名7: +しゅうたん 終端 代4: +しゅうだん 集団 名1: +しゅうち 周知 名6: +しゅうち 周智 地名: +しゅうち 羞恥 名6: +しゅうちく 修築 名6: +しゅうちゃく 執着 名6: +しゅうちゃく 終着 名1: +しゅうちゅう 集中 名6: +しゅうてん 終点 名1: +しゅうでん 終電 名1: +しゅうと 姑 名2: +しゅうとう 周東 地名: +しゅうとう 周到 名8: +しゅうとく 収得 名6: +しゅうとく 修得 名6: +しゅうとく 拾得 名6: +しゅうとく 習得 名6: +しゅうとめ 姑 名2: +しゅうにゅう 収入 名1: +しゅうにん 就任 名7: +しゅうねん 執念 名1: +しゅうねん 周年 助数2: +しゅうのう 収納 名6: +しゅうは 周波 名1: +しゅうは 宗派 名1: +しゅうはい 集配 名6: +しゅうはすう 周波数 名1: +しゅうばつ 秀抜 名8: +しゅうばん 終盤 名1: +しゅうふく 修復 名6: +しゅうぶん 秋分 名1: +しゅうへき 習癖 名1: +しゅうへん 周辺 名1: +しゅうほう 週報 名1: +しゅうほう 秋芳 地名: +しゅうぼう 衆望 名1: +しゅうまく 終幕 名1: +しゅうまつ 週末 名1: +しゅうまつ 終末 名1: +しゅうみん 就眠 名6: +しゅうもく 衆目 名1: +しゅうや 終夜 代6: +しゅうやく 集約 名6: +しゅうゆう 周遊 名6: +しゅうよう 収容 名6: +しゅうよう 収用 名6: +しゅうらい 襲来 名6: +しゅうらく 集落 名1: +しゅうり 修理 名6: +しゅうりょう 終了 名6: +しゅうりょう 修了 名6: +しゅうりょう 収量 名1: +しゅうれい 秋冷 名1: +しゅうれん 修練 名6: +しゅうろう 就労 名6: +しゅうろく 収録 名6: +しゅうろく 集録 名6: +しゅうろん 修論 名1: +しゅうわい 収賄 名6: +しゅえい 守衛 代2: +しゅえん 主演 名6: +しゅかく 主格 名1: +しゅかん 主観 名4: +しゅかん 主幹 名1: +しゅがー シュガー 名1: +しゅがん 主眼 名1: +しゅき 手記 代4: +しゅぎ 主義 名1: +しゅぎょう 修行 名6: +しゅく 祝 接頭1:サ変:サ五1: +しゅく 宿 代4:サ五1: +しゅく 叔 単漢: +しゅく 夙 単漢: +しゅく 淑 単漢: +しゅく 縮 単漢: +しゅく 粛 単漢: +しゅくい 祝意 名1: +しゅくえん 祝宴 名1: +しゅくが 祝賀 名7: +しゅくがん 宿願 名1: +しゅくさつ 縮刷 名6: +しゅくしゃ 宿舎 名1: +しゅくしゃ 縮写 名6: +しゅくしゃく 縮尺 名6: +しゅくしょう 縮小 名6: +しゅくじ 祝辞 名3: +しゅくじつ 祝日 名1: +しゅくじょ 淑女 名1: +しゅくず 縮図 名1: +しゅくせい 粛正 名6: +しゅくだい 宿題 代3: +しゅくちょく 宿直 名6: +しゅくてき 宿敵 名1: +しゅくてん 祝典 名1: +しゅくでん 祝電 名1: +しゅくはい 祝杯 名1: +しゅくはく 宿泊 名7: +しゅくば 宿場 名1: +しゅくふく 祝福 名6: +しゅくめい 宿命 名4: +しゅくん 殊勲 名1: +しゅくん 主君 名3: +しゅけん 主権 名1: +しゅげい 手芸 名1: +しゅこう 趣向 名1: +しゅご 主語 名1: +しゅさ 主査 名1: +しゅさい 主催 名6: +しゅさい 主宰 名6: +しゅざい 取材 名6: +しゅざん 珠算 名1: +しゅし 主旨 名1: +しゅし 種子 名1: +しゅし 趣旨 名1: +しゅしゃ 取捨 名6: +しゅしゅ 種々 名8: +しゅしょう 首相 名1: +しゅしょう 主将 名1: +しゅしょう 主唱 名6: +しゅしょう 殊勝 形動4: +しゅしょく 主食 名1: +しゅしん 主審 名1: +しゅじ 主事 名1: +しゅじい 主治医 名1: +しゅじく 主軸 名1: +しゅじゅ 種々 名8: +しゅじゅう 主従 名1: +しゅじゅつ 手術 名6: +しゅじん 主人 名3: +しゅじんこう 主人公 名1: +しゅせい 守勢 名1: +しゅせき 主席 名1: +しゅせき 首席 名1: +しゅぜんじ 修善寺 地名: +しゅぞう 酒造 名1: +しゅぞく 種族 名1: +しゅたい 主体 名4: +しゅだい 主題 名1: +しゅだん 手段 名1: +しゅちにくりん 酒池肉林 名1: +しゅちゅう 手中 名1: +しゅちょう 主張 名6: +しゅちょう 首長 名1: +しゅっか 出火 名6: +しゅっか 出荷 名6: +しゅっきん 出勤 名6: +しゅっきん 出金 名6: +しゅっけつ 出欠 名3: +しゅっけつ 出血 名6: +しゅっこ 出庫 名6: +しゅっこう 出向 名7: +しゅっこう 出航 名6: +しゅっこく 出国 名6: +しゅっさん 出産 名7: +しゅっし 出資 名7: +しゅっしゃ 出社 名7: +しゅっしょ 出所 代4: +しゅっしょ 出処 代4: +しゅっしょう 出生 代4: +しゅっしん 出身 名3: +しゅっすい 出水 名6: +しゅっせ 出世 名7: +しゅっせい 出生 名7: +しゅっせき 出席 名7: +しゅっそう 出走 名6: +しゅっちょう 出張 名6: +しゅっちょう 出超 名1: +しゅってん 出典 名1: +しゅってん 出展 名6: +しゅっとう 出頭 名6: +しゅっぱつ 出発 名7: +しゅっぱん 出版 名7: +しゅっぱん 出帆 名6: +しゅっぴ 出費 名6: +しゅっぴん 出品 名7: +しゅつ 出 代1: +しゅつえん 出演 名7: +しゅつがん 出願 名7: +しゅつげん 出現 名7: +しゅつごく 出獄 名7: +しゅつじょう 出場 名7: +しゅつじん 出陣 名7: +しゅつだい 出題 名7: +しゅつどう 出動 名7: +しゅつにゅう 出入 代4: +しゅつば 出馬 名6: +しゅつぼつ 出没 名6: +しゅつりょう 出漁 名6: +しゅつりょく 出力 名7: +しゅと 首都 名1: +しゅとう 種痘 名1: +しゅとく 取得 名7: +しゅとけん 首都圏 名1: +しゅとして 主として 副1: +しゅどう 主導 名6: +しゅどう 手動 名1: +しゅにん 主任 代2: +しゅのう 首脳 名1: +しゅはん 主犯 名1: +しゅひつ 主筆 名1: +しゅひん 主賓 名1: +しゅび 守備 名6: +しゅび 首尾 名3: +しゅふ 主婦 名1: +しゅふ 首府 名1: +しゅぶん 主文 名1: +しゅぷーる シュプール 名1: +しゅべつ 種別 名6: +しゅほう 手法 名1: +しゅぼう 首謀 名1: +しゅみ 趣味 名3: +しゅむ 主務 名1: +しゅもく 種目 名1: +しゅやく 主役 名1: +しゅよう 主要 名8: +しゅよく 主翼 名1: +しゅら 修羅 名1: +しゅらん 酒乱 名1: +しゅりゅう 主流 名1: +しゅりょう 狩猟 名6: +しゅりょう 首領 名1: +しゅりょく 主力 名1: +しゅるい 種類 名1:助数2: +しゅわ 手話 名1: +しゅん 旬 代1: +しゅん 俊 単漢: +しゅん 峻 単漢: +しゅん 春 単漢: +しゅん 瞬 単漢: +しゅん 竣 単漢: +しゅん 舜 単漢: +しゅん 駿 単漢: +しゅんいち 俊一 名前: +しゅんかん 瞬間 名1: +しゅんき 春季 名1: +しゅんこう 竣工 名7: +しゅんさい 俊才 名1: +しゅんじ 瞬時 代6: +しゅんじ 俊二 名前: +しゅんじゅう 春秋 名1: +しゅんだん 春暖 名1: +しゅんとう 春闘 名1: +しゅんびん 俊敏 名8: +しゅんぶん 春分 名1: +しゆう 私有 名6: +しゆう 雌雄 名1: +しゆうち 私有地 名1: +しょ 書 接尾1:サ変:サ五1: +しょ 署 接尾1:サ変: +しょ 所 接尾1: +しょ 初 接頭1: +しょ 諸 接頭1: +しょ 処 サ変:サ五1: +しょ 暑 単漢: +しょ 黍 単漢: +しょ 曙 単漢: +しょ 渚 単漢: +しょ 庶 単漢: +しょ 緒 単漢: +しょ 薯 単漢: +しょ 藷 単漢: +しょ 岨 単漢: +しょー ショー 名1: +しょーと ショート 名6: +しょあく 諸悪 名1: +しょい 所為 名1: +しょいん 所員 名1: +しょいん 署員 名1: +しょいん 書院 名1: +しょう 勝 代1:助数2: +しょう 妾 代1: +しょう 将 代1: +しょう 症 接尾1: +しょう 省 接尾1: +しょう 称 代4: +しょう 章 代1:助数: +しょう 衝 代1: +しょう 性 代1: +しょう 賞 接尾1:サ変: +しょう 証 接尾1:サ変: +しょう 生 代1:ザ変: +しょう 招 ザ変: +しょう 鉦 代1: +しょう 小 代1:接頭1: +しょう 少 代1: +しょう 升 代1:助数2: +しょう 抄 代1: +しょう 商 接尾1: +しょう 床 代1: +しょう ショウ 接尾1: +しょう 鍬 単漢: +しょう 錆 単漢: +しょう 篠 単漢: +しょう 傷 単漢: +しょう 償 単漢: +しょう 匠 単漢: +しょう 召 単漢: +しょう 哨 単漢: +しょう 唱 単漢: +しょう 嘗 単漢: +しょう 奨 単漢: +しょう 娼 単漢: +しょう 宵 単漢: +しょう 尚 単漢: +しょう 庄 単漢: +しょう 廠 単漢: +しょう 彰 単漢: +しょう 承 単漢: +しょう 掌 単漢: +しょう 捷 単漢: +しょう 昇 単漢: +しょう 昌 単漢: +しょう 昭 単漢: +しょう 晶 単漢: +しょう 松 単漢: +しょう 梢 単漢: +しょう 樟 単漢: +しょう 樵 単漢: +しょう 沼 単漢: +しょう 消 単漢: +しょう 渉 単漢: +しょう 湘 単漢: +しょう 焼 単漢: +しょう 焦 単漢: +しょう 照 単漢: +しょう 硝 単漢: +しょう 礁 単漢: +しょう 祥 単漢: +しょう 笑 単漢: +しょう 粧 単漢: +しょう 紹 単漢: +しょう 肖 単漢: +しょう 菖 単漢: +しょう 蒋 単漢: +しょう 蕉 単漢: +しょう 裳 単漢: +しょう 訟 単漢: +しょう 鍾 単漢: +しょう 醤 単漢: +しょう 鐘 単漢: +しょう 障 単漢: +しょう 鞘 単漢: +しょう 詔 単漢: +しょう 詳 単漢: +しょう 象 単漢: +しょう 姓 単漢: +しょう 政 単漢: +しょう 正 単漢: +しょう 精 単漢: +しょう 相 単漢: +しょう 装 単漢: +しょう 蛸 単漢: +しょう 憧 単漢: +しょう 橡 単漢: +しょう 憔 単漢: +しょう 翔 単漢: +しょう 誦 単漢: +しょうあく 掌握 名6: +しょうい 小異 代1: +しょういち 庄一 名前: +しょういち 昇一 名前: +しょういち 昭一 名前: +しょういち 章一 名前: +しょういち 正一 名前: +しょういちろう 正一郎 名前: +しょういん 勝因 名1: +しょうえん 小宴 名1: +しょうえん 招宴 名1: +しょうおう 勝央 地名: +しょうおう 照応 名6: +しょうか 消火 名6: +しょうか 消化 名6: +しょうかい 紹介 名7: +しょうかい 照会 名6: +しょうかい 詳解 名6: +しょうかい 商会 名1: +しょうかく 昇格 名6: +しょうかわ 荘川 地名: +しょうかん 償還 名6: +しょうかん 召喚 名6: +しょうかん 小寒 名1: +しょうがい 生涯 名1: +しょうがい 障害 名1: +しょうがい 傷害 名1: +しょうがい 渉外 名1: +しょうがく 奨学 名1: +しょうがく 小学 名1: +しょうがく 小額 名1: +しょうがく 少額 名1: +しょうがくかん 小学館 企業: +しょうがくせい 小学生 名1: +しょうがっこう 小学校 名1: +しょうがつ 正月 名2: +しょうがな しょうがな 形1: +しょうがわ 庄川 地名: +しょうき 正気 名1: +しょうきち 昭吉 名前: +しょうきち 正吉 名前: +しょうきぼ 小規模 名8: +しょうきゃく 償却 名6: +しょうきゃく 消却 名6: +しょうきゃく 焼却 名6: +しょうきゅう 昇級 名6: +しょうきゅう 昇給 名6: +しょうきょ 消去 名6: +しょうきょく 消極 名4: +しょうきん 償金 名1: +しょうきん 賞金 名1: +しょうぎ 将棋 名1: +しょうぎょう 商業 名4: +しょうぐん 将軍 名1: +しょうけい 小計 名6: +しょうけい 象形 名1: +しょうけん 証券 名1: +しょうけん 證券 名1: +しょうげき 衝撃 名4: +しょうげん 証言 名6: +しょうこ 証拠 名1: +しょうこう 症候 名1: +しょうこう 将校 名1: +しょうこう 小康 名1: +しょうこう 商工 名1: +しょうこう 昇降 名6: +しょうこう 焼香 名7: +しょうこく 小国 名1: +しょうこん 商魂 名1: +しょうご 正午 名1: +しょうご 省吾 名前: +しょうご 昭吾 名前: +しょうご 正吾 名前: +しょうごう 照合 名6: +しょうごう 称号 名1: +しょうごう 商号 名1: +しょうさ 照査 名6: +しょうさ 小差 名1: +しょうさい 詳細 名8: +しょうさい 商才 名1: +しょうさん 称賛 名6: +しょうさん 賞賛 名6: +しょうさん 勝算 名1: +しょうさん 硝酸 名1: +しょうし 焼死 名6: +しょうし 証紙 名1: +しょうしつ 消失 名6: +しょうしつ 焼失 名6: +しょうしゃ 商社 名1: +しょうしゃ 勝者 名1: +しょうしゃ 照射 名6: +しょうしゅう 召集 名6: +しょうしゅう 招集 名6: +しょうしょ 証書 名1: +しょうしょ 小暑 名1: +しょうしょう 少々 代6: +しょうしん 昇進 名7: +しょうしん 焦心 名6: +しょうしん 正真 名1: +しょうしん 焼身 名1: +しょうしん 傷心 名3: +しょうしん 小心 名8: +しょうじ 商事 名1: +しょうじ 小路 地名: +しょうじ 庄司 苗字: +しょうじ 昭司 名前: +しょうじ 昭次 名前: +しょうじ 昭二 名前: +しょうじ 章二 名前: +しょうじ 障子 名1: +しょうじ 正次 名前: +しょうじ 正二 名前: +しょうじ 東海林 苗字: +しょうじき 正直 名8: +しょうじゃく 正雀 地名: +しょうじゅう 小銃 名1: +しょうじゅつ 詳述 名6: +しょうじゅん 照準 名1: +しょうじゅん 昇順 名1: +しょうじょ 少女 名1: +しょうじょう 症状 名1: +しょうじょう 賞状 名1: +しょうじろう 正次郎 名前: +しょうじん 精進 名7: +しょうすい 憔悴 名6: +しょうすう 小数 名1: +しょうすう 少数 名1: +しょうず 小豆 地名: +しょうせい 小生 名1: +しょうせい 招請 名6: +しょうせつ 小説 名1: +しょうせつ 小雪 名1: +しょうせつ 小節 助数: +しょうせつ 詳説 代4: +しょうせつか 小説家 名1: +しょうせん 商船 名1: +しょうそ 勝訴 名6: +しょうそう 尚早 代5: +しょうそう 焦燥 名6: +しょうそく 消息 名3: +しょうぞう 肖像 名1: +しょうぞう 昭三 名前: +しょうぞう 正三 名前: +しょうぞう 省三 名前: +しょうぞく 装束 名1: +しょうたい 招待 名7: +しょうたい 正体 名1: +しょうたろう 正太郎 名前: +しょうだく 承諾 名7: +しょうだん 商談 名6: +しょうち 承知 名7: +しょうち 招致 名6: +しょうちく 松竹 名1: +しょうちゅう 掌中 名1: +しょうちゅう 焼酎 名1: +しょうちょう 象徴 名6: +しょうちょう 省庁 名1: +しょうちょう 小腸 名1: +しょうちん 消沈 名6: +しょうてん 商店 名1: +しょうてん 昇天 名6: +しょうてん 焦点 名1: +しょうてん 衝天 名1: +しょうとう 消灯 名6: +しょうとくたいし 聖徳太子 名1: +しょうとつ 衝突 名6: +しょうど 焦土 名1: +しょうど 照度 名1: +しょうどう 衝動 名4: +しょうどく 消毒 名6: +しょうない 庄内 地名: +しょうなん 湘南 地名: +しょうなん 沼南 地名: +しょうに 小児 名1: +しょうにゅうどう 鍾乳洞 名1: +しょうにん 商人 名1: +しょうにん 承認 名7: +しょうにん 昇任 名6: +しょうにん 証人 名1: +しょうね 性根 名1: +しょうねん 少年 名1: +しょうねんば 正念場 名1: +しょうのう 笑納 名7: +しょうは 小破 サ変: +しょうはい 勝敗 名1: +しょうはい 賞杯 名1: +しょうばい 商売 名7: +しょうばつ 賞罰 名1: +しょうばら 庄原 地名: +しょうばん 相伴 名7: +しょうひ 消費 名6: +しょうひしゃ 消費者 名1: +しょうひぜい 消費税 名1: +しょうひょう 商標 名1: +しょうひん 商品 名4: +しょうひん 賞品 名1: +しょうび 賞美 名6: +しょうび 焦眉 名1: +しょうふ 娼婦 名1: +しょうふだ 正札 名1: +しょうぶ 勝負 名6: +しょうぶ 菖蒲 名1: +しょうぶん 性分 名1: +しょうへい 招聘 名6: +しょうへい 正平 名前: +しょうへき 障壁 名1: +しょうほう 商法 名1: +しょうほん 抄本 名1: +しょうぼう 消防 名1: +しょうぼうしょ 消防署 名1: +しょうまん 小満 名1: +しょうみ 賞味 名7: +しょうみ 正味 名1: +しょうめい 証明 名6: +しょうめい 照明 名6: +しょうめい 正銘 名1: +しょうめつ 消滅 名6: +しょうめん 正面 名1: +しょうもう 消耗 名6: +しょうもん 証文 名1: +しょうや 庄屋 名1: +しょうやく 抄訳 名6: +しょうゆ 醤油 名2: +しょうよ 賞与 名1: +しょうよう 商用 名1: +しょうらい 将来 名4: +しょうらん 照覧 名6: +しょうらん 笑覧 名7: +しょうり 勝利 名6: +しょうりゃく 省略 名6: +しょうりょ 焦慮 名6: +しょうりょう 小量 名8: +しょうりょう 少量 名8: +しょうりょく 省力 名4: +しょうれい 奨励 名6: +しょうれい 省令 名1: +しょうろく 抄録 名6: +しょうろん 詳論 名6: +しょうわ 昭和 名1: +しょうわ 唱和 名7: +しょうわ 庄和 地名: +しょえん 初演 名6: +しょか 初夏 名1: +しょか 書架 名1: +しょかい 初回 名1: +しょかつ 所轄 名6: +しょかん 所感 名1: +しょかん 所管 名6: +しょかん 書簡 名1: +しょが 書画 代1: +しょき 初期 名4: +しょき 書記 名1: +しょきち 初期値 名1: +しょきちょう 書記長 名1: +しょきゅう 初級 名1: +しょく 職 代1: +しょく 食 接尾1:助数2:サ変:サ五1: +しょく 色 接尾1:助数2: +しょく 嘱 サ変:サ五1: +しょく 埴 単漢: +しょく 飾 単漢: +しょく 拭 単漢: +しょく 植 単漢: +しょく 殖 単漢: +しょく 燭 単漢: +しょく 織 単漢: +しょく 触 単漢: +しょく 蝕 単漢: +しょく 喰 単漢: +しょくあん 職安 名1: +しょくいん 職員 名1: +しょくえん 食塩 名1: +しょくぎょう 職業 名3: +しょくご 食後 名1: +しょくし 食指 名1: +しょくしゅ 職種 名1: +しょくしょう 職掌 名1: +しょくしょう 食傷 名6: +しょくじ 食事 名5: +しょくじゅ 植樹 名6: +しょくせい 職制 名1: +しょくせい 植生 名1: +しょくせいかつ 食生活 名1: +しょくせき 職責 名1: +しょくぜん 食前 名1: +しょくぜん 食膳 名1: +しょくたく 食卓 名1: +しょくたく 嘱託 名6: +しょくだい 燭台 名1: +しょくち 諸口 名1: +しょくちゅうどく 食中毒 名1: +しょくつう 食通 名1: +しょくどう 食堂 名1: +しょくどう 食道 名1: +しょくにん 職人 代2: +しょくのう 職能 名1: +しょくはつ 触発 名6: +しょくば 職場 名1: +しょくばい 触媒 名1: +しょくひ 食費 名1: +しょくひん 食品 名1: +しょくぶつ 植物 名4: +しょくぶん 職分 名1: +しょくぼう 嘱望 名6: +しょくみんち 植民地 名1: +しょくむ 職務 名1: +しょくもく 属目 名6: +しょくもつ 食物 名1: +しょくよう 食用 名1: +しょくよく 食欲 名1: +しょくりょう 食料 名1: +しょくりょう 食糧 名1: +しょくりょうひん 食料品 名1: +しょくりん 植林 名6: +しょくれき 職歴 名1: +しょくん 諸君 代1: +しょけい 処刑 名6: +しょけん 所見 名1: +しょこ 書庫 名1: +しょこく 諸国 名1: +しょこん 初婚 名1: +しょさい 書斎 名1: +しょさい 所載 名1: +しょさん 所産 名1: +しょさんべつ 初山別 地名: +しょざい 所在 名1: +しょざいち 所在地 名1: +しょし 初志 名1: +しょし 諸氏 名1: +しょしき 書式 名1: +しょしゅう 初秋 名1: +しょしゅん 初春 名1: +しょしょ 処暑 名1: +しょしん 初心 名8: +しょしん 初診 名1: +しょしん 所信 名1: +しょしん 書信 名1: +しょしん 初審 名1: +しょしんしゃ 初心者 名1: +しょじ 所持 名6: +しょじ 諸事 名1: +しょじゅん 初旬 名1: +しょじょ 処女 名1: +しょじょう 書状 名1: +しょせい 処世 名1: +しょせい 書生 名1: +しょせき 書籍 名1: +しょせつ 諸説 名1: +しょせん 所詮 代6: +しょぞう 所蔵 名6: +しょぞく 所属 名6: +しょぞん 所存 名1: +しょたい 所帯 名1: +しょたい 書体 名1: +しょたいめん 初対面 名1: +しょだい 初代 名1: +しょだな 書棚 名1: +しょだん 初段 名1: +しょち 処置 名6: +しょちゅう 書中 名1: +しょちゅう 暑中 名1: +しょちょう 所長 名1: +しょちょう 署長 名1: +しょっかく 触覚 名1: +しょっかん 触感 名1: +しょっき 食器 名1: +しょっく ショック 名8: +しょっけん 職権 名1: +しょっけん 食券 名1: +しょっこう 職工 名1: +しょっちゅう しょっちゅう 副8: +しょっと ショット 代4: +しょっぴんぐ ショッピング 名6: +しょっぷ ショップ 名1: +しょてい 所定 名1: +しょてん 書店 名1: +しょとう 初頭 名1: +しょとう 諸島 名1: +しょとう 初等 名1: +しょとう 初冬 名1: +しょとく 所得 名1: +しょどう 書道 名1: +しょない 所内 名1: +しょにち 初日 名1: +しょにんきゅう 初任給 名1: +しょはん 初版 名1: +しょはん 初犯 名1: +しょはん 諸般 名1: +しょばつ 処罰 名6: +しょひょう 書評 名1: +しょぶん 処分 名6: +しょほ 初歩 名1: +しょほう 処方 名6: +しょぼう 書房 名1: +しょみん 庶民 名4: +しょむ 庶務 代2: +しょめい 署名 名6: +しょめい 書名 名1: +しょめん 書面 名3: +しょもう 所望 名6: +しょもつ 書物 名1: +しょゆう 所有 名6: +しょよう 所用 名1: +しょよう 所要 名1: +しょり 処理 名6: +しょるい 書類 名1: +しょろう 初老 名1: +しょんぼり しょんぼり 副3: +しよう 使用 名7: +しよう 仕様 名1: +しよう 私用 名1: +しよう 試用 名6: +しようしょ 仕様書 代1: +しよく 私欲 名1: +しら 白 代1:マ五1: +しらい 白井 苗字: +しらいし 白石 苗字: +しらおい 白老 地名: +しらおか 白岡 地名: +しらかば 白樺 代1: +しらかわ 白川 苗字: +しらかわ 白河 地名: +しらかわ 白川 地名: +しらが 白髪 代1: +しらき 白木 代1: +しらけ 白け 一段3: +しらこ 白子 名1:苗字: +しらさぎ 白鷺 名1: +しらさわ 白沢 苗字: +しらじらし 白々し 形2: +しらたか 白鷹 地名: +しらたき 白滝 苗字: +しらたき 白滝 地名: +しらとり 白鳥 苗字: +しらぬか 白糠 地名: +しらぬひ 不知火 地名: +しらね 白根 苗字: +しらね 白根 地名: +しらは 白羽 名1: +しらはま 白浜 苗字: +しらはま 白浜 地名: +しらべ 調べ 一段4: +しらみね 白峰 地名: +しり 私利 名1: +しり 尻 名2: +しりーず シリーズ 名1: +しりあ 知り合 ワ五8: +しりあす シリアス 名8: +しりある シリアル 名1: +しりうち 知内 地名: +しりきしない 尻岸内 地名: +しりこん シリコン 名1: +しりごみ 後込み 代4: +しりごみ 尻込み 代4: +しりぞ 退 カ五1: +しりぞけ 退け 一段1: +しりつ 市立 名1:接尾4: +しりつ 私立 名1: +しりぬ 知り抜 カ五1: +しりべし 後志 地名: +しりめ 後目 名1: +しりめつれつ 支離滅裂 代5: +しりゅう 支流 名1: +しりょ 思慮 名6: +しりょう 資料 名1: +しりょう 史料 名1: +しりょう 飼料 名1: +しりょう 死霊 名1: +しりょく 視力 名1: +しりょく 資力 名1: +しりょく 死力 名1: +しる 記 サ五7: +しる 汁 代1: +しるえっと シルエット 名1: +しるく シルク 名1: +しるし 印 代1: +しるばー シルバー 名1: +しれい 指令 名6: +しれい 司令 名6: +しれとこ 知床 地名: +しれん 試練 名1: +しろ 白 名1:接頭1:形11: +しろ 城 名2: +しろ 代 代1: +しろ しろ サ変命1: +しろい 白井 地名: +しろいし 白石 地名: +しろう 司郎 名前: +しろう 史郎 名前: +しろう 四郎 名前: +しろう 志郎 名前: +しろうと 素人 代2: +しろうま 白馬 地名: +しろかわ 城川 苗字: +しろかわ 城川 地名: +しろがね 白金 地名: +しろくじちゅう 四六時中 副8: +しろくま 白熊 名1: +しろくろ 白黒 名6: +しろじ 白地 名1: +しろた 白田 苗字: +しろとり 白鳥 地名: +しろね 白根 地名: +しろぼし 白星 名1: +しろみ 白身 代1: +しろもの 代物 名1: +しろやま 城山 苗字: +しろん 史論 名1: +しろん 私論 名1: +しわ しわ 名1: +しわ 紫波 地名: +しわけ 仕訳 名6: +しわけ 仕分け 一段1: +しわざ 仕業 名1: +しわす 師走 名1: +しわひめ 志波姫 地名: +しわよせ しわ寄せ 代4: +しん 新 代1:接頭5: +しん 心 接尾1: +しん 審 接尾1:助数: +しん 真 代1: +しん 芯 代1: +しん 信 代1:ザ変: +しん 臣 代1: +しん 親 代1: +しん 辛 代1: +しん 進 ザ変: +しん 森 単漢: +しん 浸 単漢: +しん 寝 単漢: +しん 深 単漢: +しん 慎 単漢: +しん 振 単漢: +しん 紳 単漢: +しん 身 単漢: +しん 針 単漢: +しん 震 単漢: +しん 伸 単漢: +しん 侵 単漢: +しん 唇 単漢: +しん 娠 単漢: +しん 榛 単漢: +しん 申 単漢: +しん 晋 単漢: +しん 疹 単漢: +しん 神 単漢: +しん 秦 単漢: +しん 薪 単漢: +しん 診 単漢: +しん 辰 単漢: +しん 津 単漢: +しん 賑 単漢: +しん 槙 単漢: +しん 矧 単漢: +しん 沁 単漢: +しん 眞 単漢: +しんあい 親愛 名8:サ変: +しんあさひ 新旭 地名: +しんあん 新案 名1: +しんい 真意 名1: +しんいち 伸一 名前: +しんいち 信一 名前: +しんいち 慎一 名前: +しんいち 新一 名前: +しんいち 新市 地名: +しんいち 真一 名前: +しんいち 進一 名前: +しんいちろう 新一郎 名前: +しんいり 新入り 代4: +しんうおのめ 新魚目 地名: +しんうち 真打ち 名1: +しんえい 新鋭 名8: +しんえい 親衛 名1: +しんえん 深遠 代5: +しんおおさか 新大阪 地名: +しんおん 心音 名1: +しんか 進化 代4: +しんか 深化 代4: +しんか 真価 代1: +しんかい 深海 名1: +しんかいち 新開地 名1: +しんかぶ 新株 名1: +しんかわ 新川 苗字: +しんかわ 新川 地名: +しんかん 新刊 名1: +しんかん 新館 名1: +しんかんせん 新幹線 名1: +しんがー シンガー 名1: +しんがい 侵害 名6: +しんがい 心外 形動4: +しんがお 新顔 名1: +しんがく 進学 名7: +しんがた 新型 名1: +しんがぽーる シンガポール 地名: +しんき 新規 名8: +しんき 新奇 名8: +しんき 心機 名1: +しんきち 信吉 名前: +しんきち 新吉 名前: +しんきゅう 新旧 名1: +しんきゅう 進級 名7: +しんきょ 新居 名3: +しんきょう 心境 名1: +しんきょく 新曲 名1: +しんきろう 蜃気楼 名1: +しんきろく 新記録 名1: +しんきん 信金 名1: +しんきん 親近 名6: +しんぎ 審議 名6: +しんぎ 真偽 名1: +しんぎかい 審議会 名1: +しんく 真紅 名1: +しんく 辛苦 代4: +しんくう 真空 名1: +しんくうかん 真空管 名1: +しんぐ 寝具 名1: +しんぐう 新宮 地名: +しんぐる シングル 名1: +しんけい 神経 名1: +しんけいしつ 神経質 名8: +しんけん 真剣 名8: +しんけん 親権 名1: +しんげき 進撃 名6: +しんげん 信玄 名前: +しんげんち 震源地 名1: +しんこう 進行 名6: +しんこう 信仰 名6: +しんこう 振興 名6: +しんこう 侵攻 名6: +しんこう 親交 名1: +しんこう 新興 名1: +しんこきゅう 深呼吸 名6: +しんこく 申告 名7: +しんこく 深刻 名8: +しんこく 親告 名6: +しんこっちょう 真骨頂 名1: +しんこん 新婚 名1: +しんごう 信号 名6: +しんごう 新郷 地名: +しんごう 神郷 地名: +しんさ 審査 名6: +しんさい 震災 名1: +しんさく 新作 名6: +しんさつ 診察 名6: +しんさん 辛酸 名1: +しんざん 新参 名1: +しんし 紳士 名4: +しんしき 新式 名8: +しんしつ 寝室 名1: +しんしのつ 新篠津 地名: +しんしゃ 新車 名1: +しんしゃ 深謝 名6: +しんしゅ 新種 名1: +しんしゅう 信州 地名: +しんしゅうしん 信州新 地名: +しんしゅく 伸縮 名6: +しんしゅつ 進出 名6: +しんしゅつ 浸出 名6: +しんしゅん 新春 名1: +しんしょ 新書 名1: +しんしょう 辛勝 名6: +しんしょうしゃ 身障者 名1: +しんしょく 寝食 名1: +しんしょく 浸食 名6: +しんしょく 侵食 名6: +しんしろ 新城 地名: +しんしん 心身 名1: +しんしん 新進 名1: +しんじ 信次 名前: +しんじ 信治 名前: +しんじ 信二 名前: +しんじ 新治 名前: +しんじ 宍道 地名: +しんじけーと シンジケート 名1: +しんじつ 真実 代5: +しんじゃ 信者 名1: +しんじゅ 真珠 名1: +しんじゅう 心中 名6: +しんじゅく 新宿 地名: +しんじょう 心情 名3: +しんじょう 信条 名1: +しんじょう 身上 名1: +しんじょう 新庄 苗字: +しんじょう 新庄 地名: +しんじろう 新次郎 名前: +しんじん 新人 代2: +しんじん 信心 代4: +しんすい 浸水 名6: +しんすい 進水 名6: +しんすい 心酔 名6: +しんすう 進数 助数2: +しんずい 真髄 名1: +しんずい 神髄 名1: +しんせい 申請 名6: +しんせい 新生 名6: +しんせい 新制 名1: +しんせい 真性 名1: +しんせい 新星 名1: +しんせい 神聖 形動4: +しんせい 真正 地名:形動1: +しんせいじ 新生児 名1: +しんせいひん 新製品 名1: +しんせき 親戚 名3: +しんせつ 親切 名10: +しんせつ 新設 名6: +しんせつ 新説 名1: +しんせつ 新雪 名1: +しんせん 新鮮 名8: +しんぜん 親善 名1: +しんぜん 神前 名1: +しんそう 深層 名1: +しんそう 真相 名1: +しんそこ 心底 名1: +しんそつ 新卒 名1: +しんぞう 心臓 名8: +しんぞく 親族 名3: +しんたい 身体 名1: +しんたい 進退 名6: +しんたいせい 新体制 名1: +しんたく 信託 名6: +しんたろう 信太郎 名前: +しんたろう 新太郎 名前: +しんだい 寝台 名1: +しんだん 診断 名6: +しんち 新地 苗字: +しんち 新地 地名: +しんちく 新築 名6: +しんちゅう 心中 名1: +しんちゅう 進駐 名6: +しんちょう 慎重 名8: +しんちょう 新調 名6: +しんちょう 伸長 名6: +しんちょう 身長 名1: +しんちょう 新潮 企業: +しんちょう 深長 形動4: +しんちょく 進捗 名6: +しんちんたいしゃ 新陳代謝 名1: +しんつう 心痛 名6: +しんてい 進呈 名6: +しんてき 心的 形動4: +しんてん 進展 名6: +しんてん 親展 名1: +しんでれら シンデレラ 代1: +しんでん 新田 名1: +しんでん 神殿 名1: +しんでんず 心電図 名1: +しんとう 浸透 名6: +しんとう 新党 名1: +しんとう 親等 名1:助数2: +しんとう 榛東 地名: +しんとう 真藤 苗字: +しんとく 新得 地名: +しんとつかわ 新十津川 地名: +しんとね 新利根 地名: +しんとみ 新富 地名: +しんど 進度 名1: +しんど 震度 名1: +しんどう 振動 名6: +しんどう 震動 名6: +しんどう 神童 名1: +しんどう 進藤 苗字: +しんなー シンナー 名1: +しんなんよう 新南陽 地名: +しんにってつ 新日鉄 企業: +しんにほん 新日本 名1: +しんにゅう 新入 名1: +しんにゅう 進入 名6: +しんにゅう 侵入 名6: +しんにゅう 浸入 名6: +しんにゅうがく 新入学 名1: +しんにゅうせい 新入生 名1: +しんにん 信任 名6: +しんにん 新任 名6: +しんねん 新年 名1: +しんねん 信念 名1: +しんねんかい 新年会 名1: +しんはつばい 新発売 代4: +しんばし 新橋 苗字: +しんばし 新橋 地名: +しんばん 新盤 名1: +しんぱ 新派 名1: +しんぱい 心配 名7:形動8: +しんぱん 審判 名6: +しんぱん 侵犯 名6: +しんび 審美 名1: +しんぴ 神秘 名8: +しんぴ 真否 名1: +しんぴん 新品 名1: +しんふぜん 心不全 名1: +しんぶつ 神仏 名1: +しんぶん 新聞 名1: +しんぷ 新婦 名1: +しんぷ 新譜 名1: +しんぷ 神父 代2: +しんぷう 新風 名1: +しんぷく 振幅 名1: +しんぷる シンプル 代5: +しんぺい 新平 名前: +しんぺん 身辺 名1: +しんぼ 新保 苗字: +しんぼう 辛抱 名6: +しんぼう 信望 名1: +しんぼう 心棒 名1: +しんぼく 親睦 名6: +しんぼりっく シンボリック 代1: +しんぼる シンボル 名1: +しんぽ 進歩 名6: +しんぽう 新法 名1: +しんぽじうむ シンポジウム 名1: +しんぽん 新本 名1: +しんまい 新米 名1: +しんまち 新町 地名: +しんみ 親身 名8: +しんみつ 親密 名8: +しんみなと 新湊 地名: +しんみり しんみり 副3: +しんめ 新芽 名1: +しんもつ 進物 名3: +しんもん 審問 名6: +しんや 深夜 名1: +しんや 伸也 名前: +しんや 信也 名前: +しんゆう 親友 名1: +しんよう 信用 名6: +しんよしとみ 新吉富 地名: +しんらい 信頼 名7: +しんらつ 辛辣 名8: +しんらばんしょう 森羅万象 代1: +しんらん 親鸞 名前: +しんり 心理 名4: +しんり 真理 名1: +しんり 審理 代4: +しんりゃく 侵略 名6: +しんりょ 深慮 名1: +しんりょう 診療 名6: +しんりょく 新緑 名1: +しんりん 森林 名1: +しんるい 親類 名3: +しんれい 心霊 名1: +しんろ 進路 名1: +しんろう 新郎 名1: +しんろう 心労 代4: +しんわ 新和 地名: +しんわ 神話 名1: +しんわ 親和 代4: +じ 時 接尾1:助数2: +じ 次 接頭1:助数: +じ 字 代1:助数2: +じ 児 接尾1:助数2: +じ 事 接尾1: +じ 寺 接尾1: +じ 痔 代1: +じ 辞 代4:サ五5: +じ 地 代1: +じ 持 代4: +じ 侍 サ変: +じ 滋 単漢: +じ 治 単漢: +じ 爾 単漢: +じ 餌 単漢: +じ 慈 単漢: +じ 似 単漢: +じ 璽 単漢: +じ 磁 単漢: +じ 示 単漢: +じ 而 単漢: +じ 耳 単漢: +じ 自 単漢: +じ 蒔 単漢: +じ 迩 単漢: +じ 路 単漢: +じ 峙 単漢: +じあい 慈愛 代1: +じあい 自愛 名7: +じい 辞意 名1: +じい 自慰 名1: +じい 爺 名2: +じいしき 自意識 名1: +じいん 寺院 名1: +じぇっと ジェット 名1: +じぇっとき ジェット機 名1: +じぇねれーしょん ジェネレーション 名1: +じぇらしー ジェラシー 名1: +じえい 自営 名6: +じえい 自衛 名6: +じえいたい 自衛隊 名1: +じえん 自演 代4: +じか 時下 名1: +じか 時価 名1: +じか 自家 名1: +じかい 次回 名1: +じかく 自覚 名6: +じかく 字画 名1: +じかけ 仕掛け 接尾2: +じかせい 自家製 名1: +じかつ 自活 名6: +じかよう 自家用 名1: +じかん 時間 名2:助数2: +じかん 次官 名1: +じかんがい 時間外 名1: +じかんたい 時間帯 名1: +じが 自我 名1: +じがぞう 自画像 名1: +じがため 地固め 代4: +じき 時期 名1: +じき 時機 名1: +じき 次期 名1: +じき 磁気 名1: +じき 磁器 名1: +じき 自棄 名6: +じきそ 直訴 名6: +じきひつ 直筆 名1: +じきゅう 自給 名6: +じきゅう 時給 名1: +じきゅう 持久 代4: +じきょ 辞去 名6: +じきょう 自供 名6: +じきょく 時局 名1: +じぎ 辞儀 名5: +じぎゃく 自虐 代4: +じぎょう 事業 名4: +じぎょうしょ 事業所 代1: +じく 字句 名1: +じく 軸 名1: +じく 竺 単漢: +じぐざぐ ジグザグ 代5: +じけい 次兄 名1: +じけいれつ 時系列 名1: +じけつ 自決 名6: +じけん 事件 名1: +じげん 時限 名1: +じげん 次元 名1: +じこ 事故 名1:ラ五8: +じこ 自己 名1: +じこう 事項 名1: +じこう 時候 名1: +じこう 時効 名1: +じこく 時刻 名1: +じこく 自国 名1: +じご 事後 名1: +じごう 次号 名1: +じごうじとく 自業自得 代1: +じごく 地獄 名1: +じさ 時差 名1: +じさく 自作 名6: +じさつ 自殺 名6: +じさん 持参 名7: +じさん 自賛 名6: +じざい 自在 名8: +じざけ 地酒 名1: +じしつ 自室 名1: +じしつ 自失 名6: +じしゃ 自社 名1: +じしゃく 磁石 名1: +じしゅ 自主 名4: +じしゅ 自首 代4: +じしゅう 自習 名6: +じしゅく 自粛 名6: +じしょ 辞書 名1: +じしょ 地所 名1: +じしょ 自署 代4: +じしょう 事象 名1: +じしょう 自称 名6: +じしょく 辞職 名6: +じしん 自信 名1: +じしん 地震 名1: +じしん 自身 名3: +じじ 時事 名1: +じじ 爺 単漢: +じじこくこく 時々刻々 副2: +じじつ 事実 代6: +じじつじょう 事実上 名1: +じじゅう 侍従 名1: +じじょ 次女 名1: +じじょう 事情 名3: +じじょう 自乗 代4: +じすい 自炊 名6: +じすぎ 時過ぎ 助数2: +じせい 時世 名3: +じせい 時勢 名1: +じせい 時制 名1: +じせい 自制 代4: +じせき 次席 名1: +じせき 自席 名1: +じせき 自責 名6: +じせつ 時節 名1: +じせつ 自説 名1: +じせん 自薦 名6: +じせん 自選 名6: +じぜん 事前 名1: +じぜん 慈善 名1: +じぜん 次善 名1: +じそく 時速 名1: +じそん 自存 名6: +じそん 自尊 名1: +じぞう 地蔵 名2: +じぞく 持続 名6: +じた 自他 代1: +じたい 事態 名1: +じたい 字体 名1: +じたい 自体 名11: +じたい 辞退 名7: +じたく 自宅 名1: +じたばた じたばた 副3: +じだい 時代 名1: +じだい 次代 名1: +じだい 地代 名1: +じだん 示談 名1: +じち 自治 名1: +じちかい 自治会 名1: +じちしょう 自治省 名1: +じちたい 自治体 名1: +じちょう 次長 代2: +じちょう 自重 名7: +じっか 実家 名3: +じっかん 実感 名6: +じっき 実機 名1: +じっきょう 実況 名6: +じっくり じっくり 副2: +じっけい 実刑 名1: +じっけい 実兄 名1: +じっけん 実験 名6: +じっけん 実権 名1: +じっこう 実行 名6: +じっこう 実効 名1: +じっさい 実際 名4: +じっし 実施 名6: +じっし 実子 名1: +じっしつ 実質 名4: +じっしゃ 実写 名6: +じっしゅう 実習 名6: +じっしゅう 実収 名1: +じっしょう 実証 名6: +じっすう 実数 名1: +じっせき 実績 名1: +じっせん 実戦 名1: +じっせん 実線 名1: +じっせん 実践 名6: +じっそう 実装 名6: +じっそく 実測 名6: +じったい 実体 名1: +じったい 実態 名1: +じっち 実地 名1: +じっちょく 実直 名8: +じっと じっと 副4: +じっぴ 実費 名1: +じっぷ 実父 名1: +じつ 実 代1: +じつ 日 単漢: +じつ 實 単漢: +じついん 実印 名1: +じつえき 実益 名1: +じつえん 実演 名6: +じつがい 実害 名1: +じつぎ 実技 名1: +じつぎょう 実業 名1: +じつぎょうか 実業家 名1: +じつげん 実現 名6: +じつざい 実在 名6: +じつじょう 実情 名1: +じつぞう 実像 名1: +じつぞん 実存 名6: +じつだん 実弾 名1: +じつどう 実働 名6: +じつぶつ 実物 名1: +じつぼ 実母 名1: +じつむ 実務 名1: +じつめい 実名 名1: +じつよう 実用 名4: +じつり 実利 名1: +じつりょく 実力 名1: +じつれい 実例 名1: +じつろく 実録 名1: +じつわ 実話 名1: +じづら 字面 名1: +じてき 自適 名8:サ変: +じてん 辞典 名1: +じてん 事典 名1: +じてん 時点 名1: +じてん 次点 名1: +じてん 自転 代4: +じてんしゃ 自転車 名1: +じでん 自伝 名4: +じとく 自得 代4: +じどう 自動 名4: +じどう 児童 名1: +じどうし 自動詞 名1: +じどうしゃ 自動車 名1: +じなり 地鳴り 代4: +じなん 次男 名1: +じにん 辞任 名6: +じにん 自認 名6: +じにん 自任 名6: +じぬし 地主 名1: +じねつ 地熱 名1: +じはく 自白 名6: +じはだ 地肌 名1: +じはつ 自発 名4: +じば 地場 名1: +じばく 自爆 名6: +じばん 地盤 名1: +じひ 慈悲 名2: +じひ 自費 名1: +じひつ 自筆 名1: +じひょう 辞表 名1: +じびか 耳鼻科 名1: +じびき 字引 名1: +じびょう 持病 名1: +じふ 自負 代4: +じぶつ 事物 名1: +じぶん 自分 名3: +じぶん 時分 代1: +じへいしょう 自閉症 名1: +じへん 事変 名1: +じほう 時報 名1: +じぼう 自暴 名1: +じまえ 自前 名1: +じまく 字幕 名1: +じまん 自慢 名7: +じみ 地味 名8: +じみち 地道 名8: +じみん 自民 名1: +じみんとう 自民党 名1: +じむ 事務 名4: +じむ ジム 名1: +じむき 事務機 代1: +じむきょく 事務局 代1: +じむしょ 事務所 代1: +じめい 自明 名8: +じめつ 自滅 名6: +じめん 地面 名1: +じもくじ 甚目寺 地名: +じもと 地元 名1: +じゃ 蛇 代1: +じゃ 邪 代1: +じゃーなりすと ジャーナリスト 名1: +じゃーなる ジャーナル 名1: +じゃあ じゃあ 感動: +じゃあく 邪悪 形動4: +じゃいあんと ジャイアント 名8: +じゃがいも じゃがいも 名1: +じゃき 邪気 名1: +じゃく 寂 サ変: +じゃく 弱 代1:接頭1: +じゃく 若 単漢: +じゃく 惹 単漢: +じゃく 雀 単漢: +じゃくし 弱視 名1: +じゃくしゃ 弱者 名1: +じゃくしょう 弱小 名8: +じゃくしん 弱震 名1: +じゃくてん 弱点 名1: +じゃくねん 若年 名1: +じゃくはい 若輩 名1: +じゃぐち 蛇口 名1: +じゃけっと ジャケット 名1: +じゃしん 邪心 名1: +じゃすい 邪推 名6: +じゃすと ジャスト 名1: +じゃすみん ジャスミン 名1: +じゃず ジャズ 名1: +じゃっかん 若干 代6: +じゃどう 邪道 名1: +じゃぱん ジャパン 地名: +じゃま 邪魔 名5:形動6: +じゃむ ジャム 名1: +じゃり 砂利 名1: +じゃんぐる ジャングル 名1: +じゃんぱー ジャンパー 名1: +じゃんぷ ジャンプ 名6: +じゃんぼ ジャンボ 名8: +じゃんる ジャンル 名1: +じゅ 寿 代1: +じゅ 樹 接尾1: +じゅ 綬 代1: +じゅ 儒 代1: +じゅ 授 単漢: +じゅ 受 単漢: +じゅ 呪 単漢: +じゅ 需 単漢: +じゅ 嬬 単漢: +じゅーくぼっくす ジュークボックス 名1: +じゅーす ジュース 名1: +じゅう 中 接尾2: +じゅう 重 接頭1:助数2: +じゅう 銃 接尾1: +じゅう 住 代1: +じゅう 従 代1: +じゅう 柔 代1: +じゅう 汁 単漢: +じゅう 渋 単漢: +じゅう 戎 単漢: +じゅう 充 単漢: +じゅう 什 単漢: +じゅう 獣 単漢: +じゅう 縦 単漢: +じゅうあつ 重圧 名1: +じゅうい 獣医 代2: +じゅうおう 縦横 名1: +じゅうおう 十王 地名: +じゅうかん 縦貫 名6: +じゅうき 什器 名1: +じゅうきち 重吉 名前: +じゅうきょ 住居 名3: +じゅうぎょういん 従業員 名1: +じゅうけい 重刑 名1: +じゅうけいしょう 重軽傷 名1: +じゅうけつ 充血 名6: +じゅうげき 銃撃 名6: +じゅうこう 重厚 形動4: +じゅうこう 銃口 名1: +じゅうこうぎょう 重工業 名1: +じゅうさつ 銃殺 名6: +じゅうざい 重罪 名1: +じゅうし 重視 名6: +じゅうしやま 十四山 地名: +じゅうしょ 住所 名3: +じゅうしょう 重傷 名1: +じゅうしょう 重症 名1: +じゅうしょく 住職 名1: +じゅうしょろく 住所録 名1: +じゅうしん 重心 名1: +じゅうじ 従事 名6: +じゅうじつ 充実 名6: +じゅうじゅん 従順 形動4: +じゅうせい 銃声 名1: +じゅうぜい 重税 名1: +じゅうそう 重奏 代4: +じゅうそう 縦走 代4: +じゅうそう 十三 地名: +じゅうそく 充足 名6: +じゅうぞく 従属 名6: +じゅうたい 渋滞 名6: +じゅうたい 重体 名8: +じゅうたく 住宅 名1: +じゅうたくち 住宅地 名1: +じゅうたん 絨毯 名1: +じゅうだい 重大 名8: +じゅうだん 縦断 名6: +じゅうだん 銃弾 名1: +じゅうてん 重点 名4: +じゅうてん 充填 代4: +じゅうでん 充電 名6: +じゅうとう 充当 代4: +じゅうどう 柔道 代3: +じゅうなん 柔軟 形動4: +じゅうにし 十二支 名1: +じゅうにん 住人 名1: +じゅうばこ 重箱 名1: +じゅうびょう 重病 名1: +じゅうふく 重複 名6: +じゅうぶん 充分 形動9: +じゅうぶん 十分 形動9: +じゅうほう 銃砲 名1: +じゅうまん 充満 名6: +じゅうみん 住民 名1: +じゅうみんぜい 住民税 名1: +じゅうもんじ 十文字 名1: +じゅうやく 重役 名1: +じゅうゆ 重油 名1: +じゅうよう 重要 名8: +じゅうようし 重要視 代4: +じゅうらい 従来 代6: +じゅうらん 縦覧 代4: +じゅうりょう 重量 名1: +じゅうりょうぜい 従量税 名1: +じゅうりょく 重力 名1: +じゅかい 樹海 名1: +じゅきゅう 受給 名6: +じゅきゅう 需給 名1: +じゅぎょう 授業 名6: +じゅく 塾 接尾1: +じゅく 熟 サ変:サ五1: +じゅく 宿 単漢: +じゅくご 熟語 名1: +じゅくすい 熟睡 名6: +じゅくせい 熟成 名6: +じゅくたつ 熟達 名6: +じゅくち 熟知 名6: +じゅくどく 熟読 名6: +じゅくねん 熟年 名1: +じゅくりょ 熟慮 名6: +じゅくれん 熟練 名6: +じゅけい 受刑 名6: +じゅけん 受験 名6: +じゅけん 受検 名6: +じゅけんせい 受験生 名1: +じゅこう 受講 名6: +じゅし 樹脂 名1: +じゅしょう 受賞 名6: +じゅしょう 授賞 名6: +じゅしん 受信 名6: +じゅしん 受診 名6: +じゅじゅ 授受 名6: +じゅじゅつ 呪術 名1: +じゅず 数珠 名1: +じゅせい 受精 名6: +じゅせい 授精 名6: +じゅぞう 受像 名6: +じゅたい 受胎 名6: +じゅたく 受託 名6: +じゅだく 受諾 名6: +じゅちゅう 受注 名6: +じゅっかい 述懐 名6: +じゅつ 術 接尾1: +じゅつ 述 代1: +じゅつご 述語 名1: +じゅつご 術語 名1: +じゅどう 受動 名4: +じゅどうたい 受動態 名1: +じゅなん 受難 名6: +じゅにあ ジュニア 名1: +じゅにゅう 授乳 名6: +じゅのう 受納 名7: +じゅひ 樹皮 名1: +じゅひょう 樹氷 名1: +じゅみょう 寿命 名1: +じゅもく 樹木 名1: +じゅもん 呪文 名1: +じゅよ 授与 名6: +じゅよう 需要 名3: +じゅよう 受容 名6: +じゅり 受理 名6: +じゅりつ 樹立 名6: +じゅりょう 受領 名6: +じゅりょうしょ 受領書 名1: +じゅれい 樹齢 名1: +じゅわき 受話器 名1: +じゅん 純 代5:接頭1: +じゅん 準 接頭1:ザ変: +じゅん 順 接尾1: +じゅん 殉 ザ変: +じゅん 閏 単漢: +じゅん 准 単漢: +じゅん 循 単漢: +じゅん 旬 単漢: +じゅん 楯 単漢: +じゅん 淳 単漢: +じゅん 潤 単漢: +じゅん 盾 単漢: +じゅん 巡 単漢: +じゅん 遵 単漢: +じゅん 醇 単漢: +じゅん 惇 単漢: +じゅん 馴 単漢: +じゅん 隼 単漢: +じゅんあい 純愛 名1: +じゅんい 順位 名1: +じゅんいち 淳一 名前: +じゅんいち 純一 名前: +じゅんいち 順一 名前: +じゅんえき 純益 名1: +じゅんえん 巡演 名6: +じゅんえん 順延 名6: +じゅんか 純化 名6: +じゅんかい 巡回 名6: +じゅんかつ 潤滑 名8: +じゅんかつゆ 潤滑油 名1: +じゅんかん 循環 名6: +じゅんきょ 準拠 名6: +じゅんきん 純金 名1: +じゅんぎょう 巡業 名6: +じゅんけつ 純潔 名8: +じゅんけつ 純血 名1: +じゅんこ 淳子 名前: +じゅんこ 純子 名前: +じゅんこ 順子 名前: +じゅんこう 巡行 名6: +じゅんさ 巡査 名1: +じゅんさつ 巡察 名6: +じゅんし 殉死 名6: +じゅんし 巡視 名6: +じゅんしゅ 遵守 名6: +じゅんしょく 殉職 名6: +じゅんしん 純真 形動4: +じゅんじ 順次 副1: +じゅんじゅん 順々 名1: +じゅんじょ 順序 名1: +じゅんじょう 純情 名8: +じゅんすい 純粋 名8: +じゅんせい 純正 名8: +じゅんちょう 順調 名10: +じゅんとう 順当 形動4: +じゅんど 純度 名1: +じゅんのう 順応 名6: +じゅんばん 順番 名1: +じゅんぱく 純白 代5: +じゅんび 準備 名7: +じゅんびきん 準備金 名1: +じゅんふどう 順不同 名1: +じゅんぷう 順風 名1: +じゅんぼく 純朴 名8: +じゅんぽう 順法 名1: +じゅんよう 準用 名6: +じゅんようかん 巡洋艦 名1: +じゅんり 純利 名1: +じゅんりょう 純良 形動4: +じゅんれい 巡礼 名6: +じゅんろ 順路 名1: +じゆう 自由 名10: +じゆう 事由 代1: +じゆうがおか 自由が丘 地名: +じゆうがおか 自由ヶ丘 地名: +じょ 所 接尾3: +じょ 序 代4: +じょ 女 代1: +じょ 助 代1: +じょ 除 サ変: +じょ 叙 サ変: +じょ 恕 サ変: +じょ 徐 単漢: +じょ 如 単漢: +じょ 鋤 単漢: +じょ 汝 単漢: +じょーく ジョーク 名1: +じょい 女医 名1: +じょう 状 接尾1: +じょう 場 接尾1: +じょう 城 接尾4: +じょう 嬢 接尾1: +じょう 情 代1: +じょう 定 代1: +じょう 上 代1:接尾9: +じょう 条 代1:助数: +じょう 乗 代1:ザ変:助数: +じょう 畳 助数2: +じょう 錠 助数2: +じょう 帖 助数2: +じょう 丈 助数2: +じょう 穣 単漢: +じょう 常 単漢: +じょう 蒸 単漢: +じょう 杖 単漢: +じょう 浄 単漢: +じょう 壌 単漢: +じょう 譲 単漢: +じょう 醸 単漢: +じょう 擾 単漢: +じょう 成 単漢: +じょう 静 単漢: +じょう 茸 単漢: +じょう 貞 単漢: +じょう 冗 単漢: +じょう 剰 単漢: +じょう 丞 単漢: +じょう 瀞 単漢: +じょう 縄 単漢: +じょうい 上位 名1: +じょういん 乗員 名1: +じょういん 上院 名1: +じょうえい 上映 名6: +じょうえつ 上越 地名: +じょうえん 上演 名6: +じょうおん 常温 名1: +じょうか 浄化 名6: +じょうかそう 浄化槽 名1: +じょうかまち 城下町 名1: +じょうかん 情感 名1: +じょうかん 上官 名1: +じょうがい 場外 名1: +じょうがしま 城ヶ島 地名: +じょうき 上気 代4: +じょうき 上記 名1: +じょうき 蒸気 名1: +じょうきゃく 乗客 名1: +じょうきゅう 上級 名1: +じょうきょう 状況 名1: +じょうきょう 上京 名6: +じょうきん 常勤 名6: +じょうぎ 定規 名1: +じょうくう 上空 名1: +じょうけい 情景 名1: +じょうけん 条件 名1: +じょうげ 上下 名6: +じょうげん 上限 名1: +じょうげん 上弦 名1: +じょうこう 乗降 名6: +じょうこう 条項 名1: +じょうこう 上皇 名1: +じょうこく 上告 名6: +じょうご 上戸 名1: +じょうさん 乗算 名1: +じょうざい 錠剤 名1: +じょうざん 乗算 名1: +じょうし 上司 名1: +じょうしき 常識 名4: +じょうしつ 上質 名8: +じょうしゃ 乗車 名7: +じょうしゅ 城主 名1: +じょうしょう 上昇 名6: +じょうしょく 常食 名1: +じょうしん 上申 名6: +じょうしんえつ 上信越 地名: +じょうじ 常時 名1: +じょうじ 情事 名1: +じょうじま 城島 地名: +じょうじゅ 成就 名6: +じょうじゅつ 上述 名6: +じょうじゅん 上旬 名1: +じょうじょう 上場 名6: +じょうじょう 上々 代5: +じょうすい 浄水 代4: +じょうすいどう 上水道 名1: +じょうすう 乗数 名1: +じょうすう 常数 名1: +じょうすう 定数 名1: +じょうず 上手 名9: +じょうせい 情勢 名1: +じょうせい 状勢 名1: +じょうせい 醸成 名6: +じょうせき 上席 名1: +じょうせき 定石 名1: +じょうせつ 常設 名6: +じょうせん 乗船 名6: +じょうそ 上訴 名6: +じょうそう 上層 名1: +じょうそう 情操 名1: +じょうぞう 醸造 名6: +じょうたい 状態 名1: +じょうたい 常態 名1: +じょうたつ 上達 名7: +じょうたん 上端 名1: +じょうだん 冗談 名1: +じょうだん 上段 名1: +じょうち 上智 名1: +じょうち 常置 代4: +じょうちゅう 常駐 名6: +じょうちょ 情緒 名1: +じょうちょう 冗長 形動4:名4: +じょうでき 上出来 形動1: +じょうと 譲渡 名6: +じょうとう 上等 名8: +じょうとう 常套 名1: +じょうとう 城東 地名: +じょうとう 上道 地名: +じょうど 浄土 名1: +じょうない 場内 名1: +じょうない 城内 名1: +じょうなん 城南 地名: +じょうにん 常任 名6: +じょうねつ 情熱 名1: +じょうねん 情念 名1: +じょうはつ 蒸発 名6: +じょうはな 城端 地名: +じょうはんしん 上半身 名1: +じょうば 乗馬 名6: +じょうひ 上皮 名1: +じょうひん 上品 名8: +じょうび 常備 名6: +じょうぶ 丈夫 代5: +じょうぶ 上部 名1: +じょうぶつ 成仏 代4: +じょうぶん 条文 名1: +じょうへき 城壁 名1: +じょうへん 城辺 地名: +じょうほ 譲歩 名7: +じょうほう 情報 名4: +じょうほう 乗法 名1: +じょうほうじ 浄法寺 地名: +じょうほく 常北 地名: +じょうぼう 上房 地名: +じょうみゃく 静脈 名1: +じょうむ 乗務 名6: +じょうむ 常務 名1: +じょうやく 条約 名1: +じょうよ 剰余 名1: +じょうよ 譲与 名6: +じょうよう 乗用 名1: +じょうよう 常用 名6: +じょうよう 城陽 地名: +じょうよう 上陽 地名: +じょうようしゃ 乗用車 名1: +じょうよく 情欲 名1: +じょうらん 上覧 名6: +じょうり 条理 名1: +じょうりく 上陸 名6: +じょうりゅう 上流 名1: +じょうりゅう 蒸留 名6: +じょうりょく 常緑 名1: +じょうるり 浄瑠璃 名1: +じょうれい 条例 名1: +じょうれい 常例 名1: +じょうれん 常連 名1: +じょえん 助演 名6: +じょおう 女王 名1: +じょがい 除外 名6: +じょがくせい 女学生 名1: +じょきょ 除去 名6: +じょきょうじゅ 助教授 名1: +じょく 辱 単漢: +じょくん 叙勲 名1: +じょげん 助言 名6: +じょこう 徐行 名6: +じょさい 如才 名1: +じょさんぷ 助産婦 名1: +じょざん 除算 名1: +じょし 女子 名1: +じょし 女史 名1: +じょし 助詞 名1: +じょしつ 除湿 名6: +じょしゅ 助手 名1: +じょしょう 序章 名1: +じょじゅつ 叙述 名6: +じょじょう 叙情 名1: +じょじょに 徐々に 副1: +じょせい 女性 名4: +じょせい 助成 代4: +じょせき 除籍 名6: +じょせつ 除雪 名6: +じょせつ 序説 名1: +じょそう 助走 名6: +じょそう 女装 名6: +じょそう 除草 名6: +じょたい 除隊 名6: +じょちゅう 女中 代2: +じょちょう 助長 名6: +じょどうし 助動詞 名1: +じょばん 序盤 名1: +じょぶ ジョブ 名1: +じょぶん 序文 名1: +じょほう 除法 名1: +じょまく 序幕 名1: +じょまくしき 除幕式 名1: +じょめい 助命 名6: +じょめい 除名 名6: +じょや 除夜 名1: +じょやく 助役 名1: +じょゆう 女優 代2: +じょりゅう 女流 名1: +じょりょく 助力 名7: +じょれつ 序列 名1: +じょろん 序論 名1: +じよう 滋養 名1: +じら じら サ五7: +じらい 地雷 名1: +じりき 自力 名1: +じりつ 自立 名6: +じりつ 自律 名6: +じりゅう 時流 名1: +じりょく 磁力 名1: +じる 汁 接尾2: +じるし 印 接尾2: +じれい 事例 名1: +じれい 辞令 名1: +じれんま ジレンマ 名1: +じろう 次郎 名前: +じろう 治郎 名前: +じろう 二郎 名前: +じろん 持論 名1: +じん 人 接尾1: +じん 仁 代1: +じん 壬 代1: +じん 尋 代1: +じん 尽 代1: +じん 腎 代1: +じん 陣 代1: +じん 塵 代1: +じん 神 単漢: +じん 刃 単漢: +じん 甚 単漢: +じん 訊 単漢: +じん 迅 単漢: +じん 靭 単漢: +じんい 人為 名4: +じんいち 仁一 名前: +じんいん 人員 名1: +じんえい 陣営 名1: +じんえん 腎炎 名1: +じんか 人家 名1: +じんかく 人格 名1: +じんぎ 仁義 名1: +じんくす ジンクス 名1: +じんぐう 神宮 名1: +じんぐう 神宮 地名: +じんけん 人権 名1: +じんけん 人件 名1: +じんこう 人口 名1: +じんこう 人工 名4: +じんこつ 人骨 名1: +じんさい 人災 名1: +じんざい 人材 名1: +じんしゅ 人種 名4: +じんしん 人身 名1: +じんじ 人事 名1: +じんじいん 人事院 名1: +じんじか 人事課 名1: +じんじゃ 神社 名1: +じんじょう 尋常 代5: +じんせい 人生 名1: +じんせいかん 人生観 名1: +じんせき 神石 地名: +じんせき 人跡 名1: +じんせん 人選 名6: +じんそく 迅速 形動4: +じんぞう 腎臓 名1: +じんぞう 人造 名1: +じんたい 人体 名1: +じんだい 甚大 形動4: +じんち 陣地 名1: +じんち 人知 名1: +じんちく 人畜 名1: +じんちゅう 陣中 名1: +じんつう 陣痛 名1: +じんてき 人的 形動4: +じんとう 陣頭 名1: +じんとく 人徳 名1: +じんどう 人道 名4: +じんぶつ 人物 名1: +じんぶん 人文 名1: +じんぼ 神保 苗字: +じんぼう 人望 名1: +じんぼうちょう 神保町 地名: +じんましん 蕁麻疹 名1: +じんみゃく 人脈 名1: +じんみん 人民 名1: +じんめい 人名 名1: +じんめい 人命 名1: +じんもん 尋問 名6: +じんりきしゃ 人力車 名1: +じんりょく 尽力 名7: +じんりょく 人力 名1: +じんるい 人類 名1: +す 吸 ワ五6: +す 空 カ五1: +す 好 カ五1: +す 透 カ五5: +す 住 マ五8: +す 棲 マ五7: +す 澄 マ五7: +す 済 マ五8: +す す カ五7:マ五7:ワ五1: +す 刷 ラ五8: +す 擦 ラ五8: +す 酢 代1: +す 巣 代1: +す 守 単漢: +す 州 単漢: +す 洲 単漢: +す 諏 単漢: +す 須 単漢: +す 栖 単漢: +す 素 単漢: +す 簾 単漢: +すーつ スーツ 名1: +すーぱー スーパー 名1: +すーぷ スープ 名1: +すあし 素足 名1: +すい 水 接尾1: +すい 粋 代1: +すい 出 単漢: +すい 吹 単漢: +すい 垂 単漢: +すい 帥 単漢: +すい 推 単漢: +すい 炊 単漢: +すい 睡 単漢: +すい 翠 単漢: +すい 衰 単漢: +すい 遂 単漢: +すい 酔 単漢: +すい 錐 単漢: +すい 錘 単漢: +すい 誰 単漢: +すい 穂 単漢: +すい 悴 単漢: +すいあげ 吸い上げ 一段3: +すいあつ 水圧 名1: +すいい 推移 名6: +すいい 水位 名1: +すいいき 水域 名1: +すいえい 水泳 名6: +すいおん 水温 名1: +すいか スイカ 代1: +すいか 西瓜 代1: +すいがい 水害 名1: +すいがら 吸殻 名1: +すいきょ 推挙 名6: +すいぎん 水銀 名1: +すいけい 推計 名6: +すいげん 水源 名1: +すいこ 吸い込 マ五7: +すいこう 遂行 名6: +すいこう 推敲 名6: +すいこう 推考 名6: +すいさいが 水彩画 名1: +すいさつ 推察 名7: +すいさん 水産 名1: +すいさんか 水酸化 接頭1: +すいし 水死 名6: +すいしつ 水質 名1: +すいしょう 推奨 名6: +すいしょう 推賞 名6: +すいしょう 水晶 名1: +すいしん 推進 名6: +すいしん 水深 名1: +すいじ 炊事 名6: +すいじゃく 衰弱 名6: +すいじゅん 水準 名1: +すいじょう 水上 名1: +すいじょうき 水蒸気 名1: +すいす スイス 地名: +すいせい 水性 名1: +すいせい 水星 名1: +すいせい 彗星 名1: +すいせん 推薦 名7: +すいせん 水洗 名6: +すいせん 垂線 名1: +すいせん 水仙 名1: +すいそ 水素 名1: +すいそう 吹奏 名6: +すいそう 水槽 名1: +すいそく 推測 名6: +すいぞくかん 水族館 名1: +すいた 吹田 地名: +すいたい 衰退 名6: +すいちゅう 水中 名1: +すいちょく 垂直 名8: +すいっち スイッチ サ変: +すいてい 推定 名6: +すいてい 水底 名1: +すいてき 水滴 名1: +すいでん 水田 名1: +すいと 吸い取 ラ五7: +すいとう 出納 名6: +すいとう 水筒 名1: +すいとう 水稲 名1: +すいどう 水道 名1: +すいなん 水難 名1: +すいはんき 炊飯器 名1: +すいばく 水爆 名1: +すいばら 水原 地名: +すいばん 水盤 名1: +すいふ 水夫 名1: +すいふ 水府 地名: +すいへい 水平 名8: +すいぼう 衰亡 名6: +すいぼくが 水墨画 名1: +すいぼつ 水没 名6: +すいま 睡魔 名1: +すいみん 睡眠 名6: +すいめん 水面 名1: +すいもん 水門 名1: +すいよう 水曜 名1: +すいようえき 水溶液 名1: +すいようび 水曜日 名1: +すいり 推理 名6: +すいりゅう 水流 名1: +すいりょう 推量 名6: +すいりょう 水量 名1: +すいりょく 推力 名1: +すいりょく 水力 名1: +すいろ 水路 名1: +すいろん 推論 名6: +すいんぐ スイング 代1: +すう 数 数詞:接尾1: +すう 崇 単漢: +すう 嵩 単漢: +すう 枢 単漢: +すう 趨 単漢: +すう 雛 単漢: +すうぇーでん スウェーデン 地名: +すうがく 数学 名1: +すうき 数奇 代5: +すうこう 崇高 名8: +すうし 数詞 名1: +すうしき 数式 一括: +すうじ 数字 一括: +すうじく 枢軸 名1: +すうじつ 数日 代1: +すうせい 趨勢 名1: +すうち 数値 名1: +すうにん 数人 一括: +すうはい 崇拝 名6: +すうり 数理 名1: +すうりょう 数量 名1: +すうれつ 数列 一括: +すえ 末 代1: +すえ 据え 一段2: +すえ 須恵 地名: +すえ 陶 単漢: +すえお 据え置 カ五7: +すえお 末男 名前: +すえきち 末吉 名前: +すえつけ 据え付け 一段3: +すえなが 末永 苗字: +すえひろ 末広 地名:名前: +すえまつ 末松 苗字: +すえよし 末吉 地名: +すおう 周防 地名: +すかーと スカート 名1: +すかうと スカウト 名6: +すかがわ 須賀川 地名: +すからー スカラー 名1: +すが 須賀 苗字: +すが 菅 単漢: +すがい 菅井 苗字: +すがお 素顔 名1: +すがた 姿 名2: +すがだいら 菅平 地名: +すがの 菅野 苗字: +すがも 巣鴨 苗字: +すがも 巣鴨 地名: +すがや 菅谷 苗字: +すがわら 菅原 苗字: +すき 好き 名9: +すき 隙 代1: +すき 鋤 代1: +すき 須木 地名: +すき 鍬 単漢: +すきー スキー 代3: +すきーやー スキーヤー 名1: +すきずき 好きずき 代1: +すきっぷ スキップ 名6: +すきとお 透き通 ラ五7: +すきま 隙間 名1: +すきま すき間 名1: +すきゃな スキャナ 名1: +すきゃん スキャン 名1: +すきゃんだる スキャンダル 名1: +すぎ 杉 代1: +すぎ 過ぎ 一段3: +すぎ 椙 単漢: +すぎうら 杉浦 苗字: +すぎえ 杉江 苗字: +すぎさ 過ぎ去 ラ五1: +すぎさき 杉崎 苗字: +すぎざき 杉崎 苗字: +すぎた 杉田 苗字: +すぎと 杉戸 地名: +すぎなみ 杉並 地名: +すぎの 杉野 苗字: +すぎの 杉野 地名: +すぎはら 杉原 苗字: +すぎむら 杉村 苗字: +すぎもと 杉本 苗字: +すぎもと 杉本 地名: +すぎやま 杉山 苗字: +すく 救 ワ五8: +すく 巣食 ワ五1: +すくーぷ スクープ 代4: +すくーる スクール 名1: +すくいだ 救い出 サ五7: +すくな 少な 接尾1:形7: +すくも 宿毛 地名: +すくりーん スクリーン 名1: +すくりぷと スクリプト 名1: +すくろーる スクロール 名6: +すぐ すぐ 代6:ラ五7: +すぐさま すぐさま 副1: +すぐる 英 名前: +すぐれ 優れ 一段1: +すけ 介 単漢: +すけ 助 単漢: +すけ 甫 単漢: +すけ 輔 単漢: +すけ 祐 単漢: +すけ 亮 単漢: +すけーと スケート 代3: +すけーる スケール 名1: +すけじゅーる スケジュール 名1: +すけっち スケッチ 名6: +すげ 菅 単漢: +すげぬま 菅沼 苗字: +すこーぷ スコープ 名1: +すこあ スコア 名1: +すこし 少し 代6: +すこぶる すこぶる 副1: +すこやか 健やか 形動7: +すご 過ご サ五8: +すご すご 形2:マ五3: +すご 凄 形2:マ五3: +すごろく すごろく 代1: +すさ 須佐 地名: +すさき 須崎 苗字: +すさき 須崎 地名: +すさまじ 凄まじ 形3: +すさみ すさみ 地名: +すざか 須坂 地名: +すし 寿司 名2: +すし 鮨 代1: +すじ 筋 接尾1: +すじがき 筋書き 名1: +すじみち 筋道 名1: +すじょう 素性 名1: +すす すす ガ五7:ラ五7: +すす 進 マ五4: +すす 濯 ガ五7: +すす 煤 代1: +すすむ 進 名前: +すすめ 進め 一段1: +すすめ 勧め 一段4: +すすめ 奨め 一段4: +すすめ 薦め 一段4: +すず 鈴 代1: +すず 錫 代1: +すず スズ 代1: +すず 涼 マ五7: +すず 珠洲 地名: +すずか 鈴鹿 苗字: +すずか 鈴鹿 地名: +すずかぜ 涼風 名1: +すずき 鈴木 苗字: +すずき 鱸 代1: +すずし 涼し 形5: +すずめ 雀 代1: +すずらん 鈴蘭 代1: +すずり 硯 代1: +すそ 裾 代1: +すその 裾野 名1:地名: +すた 廃 ラ五7: +すたー スター 名1: +すたーと スタート 名6: +すたいる スタイル 名1: +すたじお スタジオ 名1: +すたっく スタック 名6: +すたっふ スタッフ 名1: +すたてぃっく スタティック 代5: +すたでぃ スタディ 名1: +すたみな スタミナ 名1: +すたれ 廃れ 一段1: +すたんだーど スタンダード 名8: +すたんど スタンド 名1: +すたんふぉーど スタンフォード 名1: +すたんぷ スタンプ 名1: +すだ 須田 苗字: +すだ 須田 地名: +すだ 巣立 タ五3: +すだま 須玉 地名: +すだれ 簾 代1: +すちーる スチール 名1: +すちろーる スチロール 名1: +すっかり すっかり 副2: +すっきり すっきり 副9: +すっつ 寿都 地名: +すっぱ すっぱ 形8: +すて 捨て 一段2: +すてーしょん ステーション 名1: +すてーじ ステージ 名1: +すてーたす ステータス 代1: +すてーと ステート 名1: +すてーとめんと ステートメント 名1: +すていたす ステイタス 代1: +すてき すてき 形動1: +すてき 素敵 形動1: +すてっかー ステッカー 名1: +すてっぷ ステップ 名1: +すてれお ステレオ 名1: +すてろいど ステロイド 名1: +すてんれす ステンレス 名1: +すで 素手 名1: +すでに すでに 副1: +すでに 既に 副1: +すと スト 名1: +すとーりー ストーリー 名1: +すとあ ストア 名6: +すとあー ストアー 名1: +すとっきんぐ ストッキング 名1: +すとっく ストック 名6: +すとっぷ ストップ 代4: +すとらいき ストライキ 名1: +すとらくちゃ ストラクチャ 名1: +すとりーと ストリート 名1: +すとりーま ストリーマ 名1: +すとりーまー ストリーマー 名1: +すとりーむ ストリーム 名1: +すとりんぐ ストリング 名1: +すとれーと ストレート 名8: +すとれす ストレス 名1: +すとろーく ストローク 名1: +すとろべりー ストロベリー 名1: +すどう 須藤 苗字: +すどおり 素通り 代4: +すな 砂 代1: +すな 沙 単漢: +すなお 素直 形動4: +すなが 須永 苗字: +すながわ 砂川 苗字: +すながわ 砂川 地名: +すなじ 砂地 名1: +すなっく スナック 名1: +すなっぷ スナップ 名1: +すなはま 砂浜 名1: +すなはら 砂原 苗字: +すなば 砂場 名1: +すなみ 巣南 地名: +すなわち すなわち 接続: +すなわち 即ち 接続: +すのまた 墨俣 地名: +すはだ 素肌 名1: +すばや 素早 形2: +すばらし すばらし 形2: +すばらし 素晴らし 形3: +すばる 昴 名1: +すぱーく スパーク 代4: +すぱい スパイ 名6: +すぱげってぃ スパゲッティ 名1: +すぱん スパン 名1: +すぴーか スピーカ 名1: +すぴーち スピーチ 名1: +すぴーでぃー スピーディー 名1: +すぴーど スピード 名1: +すぴん スピン 名6: +すぷーる スプール 名1: +すべ 統べ 一段1: +すべ 術 代1: +すべ 滑べ ラ五7: +すべて すべて 代6: +すべて 全て 代6: +すべりこ 滑り込 マ五7: +すべりだ 滑り出 サ五7: +すぺーす スペース 名1: +すぺあ スペア 名1: +すぺいん スペイン 地名: +すぺくとる スペクトル 名1: +すぺしゃりすと スペシャリスト 名1: +すぺっく スペック 名1: +すぺりんぐ スペリング 名1: +すぺる スペル 名1: +すぽーつ スポーツ 名6: +すぽっと スポット 名1: +すぽんさー スポンサー 名1: +すま 須磨 苗字: +すま 須磨 地名: +すま 住ま ワ五4: +すまーと スマート 名8: +すみ 角 苗字:代1: +すみ 隅 代1: +すみ 炭 代1: +すみ 墨 代1: +すみえ 澄江 名前: +すみかわ 澄川 苗字: +すみかわ 澄川 地名: +すみこ 住み込 マ五7: +すみこ 澄子 名前: +すみた 住田 苗字: +すみた 住田 地名: +すみだ 墨田 地名: +すみつ 住み着 カ五7: +すみとも 住友 苗字: +すみとも 住友 企業: +すみなれ 住み慣れ 一段1: +すみのえ 住之江 地名: +すみやか 速やか 形動4: +すみよう 住用 地名: +すみよし 住吉 地名: +すむーず スムーズ 名8: +すもう 相撲 名2: +すもっぐ スモッグ 名1: +すもと 洲本 地名: +すもと 栖本 地名: +すもも 李 代1: +すもん 守門 地名: +すやま 須山 苗字: +すらいす スライス 名6: +すらいど スライド 名6: +すらっしゅ スラッシュ 名1: +すりかえ すり替え 一段3: +すりこ 擦り込 マ五7: +すりっぷ スリップ 名6: +すりへ すり減 ラ五3: +すりへら すり減ら サ五1: +すりむ 擦りむ カ五5: +すりりんぐ スリリング 名8: +すりる スリル 名1: +するが 駿河 地名: +すると すると 接続: +するど 鋭 形2: +するめ 鯣 代1: +すれーぶ スレーブ 名1: +すれあ 擦れ合 ワ五1: +すれすれ すれすれ 代6: +すれちが すれ違 ワ五3: +すろーがん スローガン 名1: +すろっと スロット 名1: +すろっとる スロットル 名1: +すわ 座 ラ五8: +すわ 据わ ラ五7: +すわ 諏訪 苗字: +すわ 諏訪 地名: +すわこ 諏訪湖 名1: +すわっぷ スワップ 名1: +すわりこ 座り込 マ五5: +すん 寸 助数2: +すんか 寸暇 名1: +すんし 寸志 名1: +すんじ 寸時 名1: +すんぜん 寸前 名1: +すんだん 寸断 名6: +すんとう 駿東 地名: +すんぶん 寸分 副1: +すんぽう 寸法 名1: +すんわ 寸話 名1: +ず 図 接尾1:助数: +ず 厨 単漢: +ず 逗 単漢: +ず 豆 単漢: +ず 頭 単漢: +ずーむ ズーム 名1: +ずあん 図案 名1: +ずい 髄 代1: +ずい 蕊 単漢: +ずい 随 単漢: +ずい 瑞 単漢: +ずいい 随意 名1: +ずいこう 随行 名6: +ずいしょ 随所 名1: +ずいじ 随時 副8: +ずいはん 随伴 名6: +ずいひつ 随筆 代1: +ずいぶん ずいぶん 形動1: +ずいぶん 随分 形動1: +ずうずうし 図々し 形2: +ずかい 図解 名6: +ずかん 図鑑 名1: +ずが 図画 名1: +ずがいこつ 頭蓋骨 名1: +ずがら 図柄 名1: +ずき 好き 接尾6: +ずくめ ずくめ 接尾2: +ずけい 図形 名1: +ずこう 図工 名1: +ずし 図示 名6: +ずし 逗子 地名: +ずしき 図式 名4: +ずじょう 頭上 名1: +ずじょう 図上 名1: +ずっきーに ズッキーニ 名1: +ずっしり ずっしり 副8: +ずっと ずっと 副1: +ずつう 頭痛 名1: +ずのう 頭脳 名1: +ずばぬけ ずば抜け 一段1: +ずばり ずばり 代6: +ずひょう 図表 名1: +ずほう 図法 名1: +ずぼし 図星 名1: +ずぼん ズボン 名1: +ずまい 住い 接尾2: +ずみ 済み 接尾2: +ずめん 図面 名1: +ずら ずら サ五7: +ずる ずる 形2:代1: +ずるずる ずるずる 副2: +ずれ ずれ 一段3: +ずれこ ずれ込 マ五1: +ずんぐり ずんぐり 副9: +せ せ サ変未2:カ五1: +せ 競 ラ五3: +せ 背 代1: +せ 瀬 代1: +せ 施 単漢: +せ 世 単漢: +せ 畝 単漢: +せ 脊 単漢: +せーたー セーター 名1: +せーふ セーフ 名1: +せーぶ セーブ 名6: +せーる セール 名1: +せーるす セールス 名1: +せい せい 代1: +せい 製 接尾1:サ変: +せい 生 接尾1: +せい 制 接尾1:サ変:サ五1: +せい 星 接尾1: +せい 性 接尾3: +せい 世 助数2: +せい 正 代1:接頭1: +せい 姓 代1: +せい 精 代1: +せい 所為 代1: +せい 声 代1:助数: +せい 静 代1: +せい 成 単漢: +せい 清 単漢: +せい 勢 単漢: +せい 政 単漢: +せい 整 単漢: +せい 晴 単漢: +せい 聖 単漢: +せい 西 単漢: +せい 醒 単漢: +せい 青 単漢: +せい 省 単漢: +せい 棲 単漢: +せい 凄 単漢: +せい 井 単漢: +せい 甥 単漢: +せい 歳 単漢: +せい 犀 単漢: +せい 錆 単漢: +せい 鉦 単漢: +せい 征 単漢: +せい 栖 単漢: +せい 牲 単漢: +せい 盛 単漢: +せい 誠 単漢: +せい 誓 単漢: +せい 請 単漢: +せい 逝 単漢: +せい 斉 単漢: +せい 瀞 単漢: +せい 婿 単漢: +せい 靖 単漢: +せいあつ 制圧 名6: +せいあん 成案 名1: +せいい 誠意 名1: +せいいく 成育 名6: +せいいく 生育 名6: +せいいち 清一 名前: +せいいち 精一 名前: +せいいち 誠一 名前: +せいいちろう 清一郎 名前: +せいいちろう 誠一郎 名前: +せいいっぱい 精一杯 名1: +せいいん 成員 名1: +せいいん 正員 名1: +せいいん 成因 名1: +せいうん 盛運 名1: +せいえい 清栄 名3: +せいえい 精鋭 名1: +せいえん 声援 名7: +せいえん 製塩 代4: +せいおう 西欧 名4: +せいおん 静穏 名8: +せいか 成果 名1: +せいか 正価 名1: +せいか 正課 名1: +せいか 生家 名1: +せいか 生花 名1: +せいか 盛夏 名1: +せいか 精華 名1: +せいか 聖火 名1: +せいか 製菓 名1: +せいか 青果 名1: +せいかい 正解 名6: +せいかい 政界 名1: +せいかい 盛会 名1: +せいかく 正確 名8: +せいかく 性格 名1: +せいかつ 生活 名6: +せいかん 生還 名7: +せいかん 静観 名6: +せいかん 青函 地名: +せいがく 声楽 名1: +せいがん 請願 名6: +せいき 正規 名8: +せいき 世紀 名1:助数2: +せいき 生気 名1: +せいき 精機 名1: +せいき 精気 名1: +せいき 性器 名1: +せいき 生起 名6: +せいきち 清吉 名前: +せいきゅう 請求 名7: +せいきゅう 性急 名8: +せいきょ 逝去 名7: +せいきょう 生協 名1: +せいきょう 盛況 名1: +せいきょく 政局 名1: +せいきん 精勤 名6: +せいぎ 正義 名1: +せいぎょ 制御 名6: +せいぎょう 盛業 名1: +せいけい 成形 名6: +せいけい 整形 名6: +せいけい 生計 名1: +せいけつ 清潔 名8: +せいけん 政権 名1: +せいけん 政見 名1: +せいげん 制限 名6: +せいこ 聖子 名前: +せいこう 成功 名7: +せいこう 製鋼 名6: +せいこう 精巧 名8: +せいこううどく 晴耕雨読 代4: +せいこつ 整骨 名1: +せいこん 成婚 名7: +せいこん 精魂 名1: +せいご 生後 名1: +せいご 正誤 名1: +せいご 清吾 苗字: +せいごう 整合 名6: +せいさい 制裁 名6: +せいさい 正妻 名1: +せいさい 精細 形動4: +せいさく 製作 名6: +せいさく 制作 名6: +せいさく 政策 名1: +せいさく 清作 名前: +せいさん 生産 名6: +せいさん 精算 名6: +せいさん 清算 名6: +せいさん 成算 名1: +せいさん 凄惨 代5: +せいさんだか 生産高 名1: +せいざ 星座 名1: +せいざ 正座 名6: +せいざい 製材 名6: +せいし 制止 名6: +せいし 正視 名6: +せいし 生死 名1: +せいし 製紙 名1: +せいし 精子 名1: +せいし 静止 名6: +せいしき 正式 名8: +せいしつ 性質 名1: +せいしゃいん 正社員 名1: +せいしゅ 清酒 名1: +せいしゅん 青春 名6: +せいしょ 清書 名6: +せいしょ 聖書 名1: +せいしょう 清勝 名1: +せいしょう 清祥 名3: +せいしょう 斉唱 代4: +せいしょうねん 青少年 名1: +せいしょく 生殖 名1: +せいしん 精神 名4: +せいしん 誠心 名1: +せいしん 聖心 名1: +せいじ 政治 名4: +せいじ 清司 名前: +せいじ 清次 名前: +せいじ 清治 名前: +せいじ 清二 名前: +せいじ 誠司 名前: +せいじ 誠治 名前: +せいじ 誠二 名前: +せいじか 政治家 名1: +せいじつ 誠実 名8: +せいじゃく 静寂 名8: +せいじゅく 成熟 名6: +せいじゅん 清純 形動4: +せいじょう 正常 名8: +せいじょう 政情 名1: +せいじょう 清浄 名8: +せいじょう 成城 地名: +せいじろう 清次郎 名前: +せいじん 成人 名6: +せいすい 盛衰 名1: +せいすう 整数 名4: +せいすう 正数 名4: +せいず 製図 名6: +せいず 星図 名1: +せいせい 生成 名6: +せいせい 精製 名6: +せいせい 清々 副3: +せいせいどうどう 正々堂々 代6: +せいせき 成績 名1: +せいせん 生鮮 名8: +せいせん 精選 名6: +せいぜい せいぜい 副8: +せいぜん 整然 名1:形動2: +せいぜん 生前 名1: +せいそ 清楚 形動4: +せいそう 清掃 名6: +せいそう 正装 名6: +せいそう 盛装 名6: +せいそう 政争 名1: +せいそう 精巣 名1: +せいそく 生息 名6: +せいそく 棲息 名6: +せいそく 正則 名8: +せいぞう 製造 名6: +せいぞう 清三 名前: +せいぞろい 勢ぞろい 代4: +せいぞん 生存 名6: +せいたい 生態 名1: +せいたい 生体 名1: +せいたい 成体 名1: +せいたろう 清太郎 名前: +せいだい 盛大 形動4: +せいだん 西淡 地名: +せいち 聖地 名1: +せいち 生地 名1: +せいち 整地 名6: +せいち 精緻 形動4: +せいちゃ 製茶 名1: +せいちゅう 成虫 名1: +せいちょう 成長 名7: +せいちょう 正調 名1: +せいちょう 清澄 名8: +せいちょう 生長 名6: +せいちょう 静聴 名1: +せいつう 精通 名6: +せいてい 制定 名6: +せいてき 性的 形動1: +せいてき 静的 形動1: +せいてつ 製鉄 名1: +せいてん 晴天 名1: +せいでんき 静電気 名1: +せいと 生徒 名1: +せいとう 正当 名8: +せいとう 正統 名4: +せいとう 政党 名1: +せいとう 正答 名1: +せいとう 製糖 名1: +せいとん 整頓 名6: +せいど 制度 名1: +せいど 精度 名1: +せいどく 精読 名6: +せいないじ 清内路 地名: +せいにく 精肉 名1: +せいねん 成年 名1: +せいねん 青年 名1: +せいねんがっぴ 生年月日 名1: +せいの 清野 苗字: +せいのう 性能 名1: +せいは 制覇 名6: +せいはく 精白 名6: +せいはん 製版 名6: +せいはんたい 正反対 名8: +せいばい 成敗 名6: +せいばつ 征伐 名6: +せいひ 成否 名1: +せいひ 正否 名1: +せいひ 西彼 地名: +せいひょう 製氷 名6: +せいひん 製品 名4: +せいび 整備 名6: +せいふ 政府 名1: +せいふ 正負 名1: +せいふう 清風 名1: +せいふく 制服 名1: +せいふく 征服 名6: +せいふん 製粉 名6: +せいぶ 西部 名1: +せいぶ 西武 企業: +せいぶつ 生物 名1: +せいぶつ 静物 名1: +せいぶん 成分 名1: +せいべつ 性別 名1: +せいほう 製法 名1: +せいほう 西方 名1: +せいほうけい 正方形 名1: +せいほん 製本 名6: +せいぼ 歳暮 名2: +せいぼ 生母 名1: +せいぼう 制帽 名1: +せいまい 精米 名6: +せいみつ 精密 名8: +せいめい 生命 名1: +せいめい 姓名 名1: +せいめい 清明 名1: +せいめい 声明 名6: +せいもん 正門 名1: +せいやく 制約 名6: +せいやく 成約 名6: +せいやく 製薬 名1: +せいやく 誓約 名6: +せいゆ 製油 名6: +せいゆう 声優 名1: +せいよう 静養 名7: +せいよう 西洋 名1: +せいよく 性欲 名1: +せいらい 生来 名1: +せいり 整理 名6: +せいり 生理 名4: +せいりつ 成立 名6: +せいりゃく 政略 名1: +せいりゅう 清流 名1: +せいりょう 清涼 名8: +せいりょう 声量 名1: +せいりょく 勢力 名4: +せいりょく 精力 名4: +せいれい 精励 名7: +せいれい 政令 名1: +せいれい 精霊 名1: +せいれき 西暦 名1: +せいれつ 整列 名6: +せいれん 精錬 名6: +せいろう 聖篭 地名: +せいろん 正論 名1: +せいわ 勢和 地名: +せいわ 清和 地名: +せお 瀬尾 苗字: +せお 背負 ワ五5: +せおりー セオリー 名1: +せかい 世界 名4: +せがわ 瀬川 苗字: +せき 席 名2: +せき 籍 代1: +せき 咳 代1: +せき 関 代1: +せき 関 苗字: +せき 関 地名: +せき 堰 代1: +せき 積 代1: +せき 石 接尾1: +せき 隻 助数2: +せき 寂 単漢: +せき 惜 単漢: +せき 戚 単漢: +せき 斥 単漢: +せき 昔 単漢: +せき 析 単漢: +せき 績 単漢: +せき 脊 単漢: +せき 責 単漢: +せき 赤 単漢: +せき 跡 単漢: +せき 蹟 単漢: +せき 碩 単漢: +せき 夕 単漢: +せきかわ 関川 苗字: +せきがいせん 赤外線 名1: +せきがね 関金 地名: +せきがはら 関ヶ原 地名: +せきぐち 関口 苗字: +せきさい 積載 名6: +せきさん 積算 名6: +せきざい 石材 名1: +せきしゅつ 析出 名6: +せきしょく 赤色 名1: +せきじゅうじ 赤十字 名1: +せきじょう 関城 地名: +せきじょう 席上 名1: +せきずい 脊髄 名1: +せきせつ 積雪 名1: +せきぜん 関前 地名: +せきぞう 石像 名1: +せきたん 石炭 名1: +せきつい 脊椎 名1: +せきてい 石庭 名1: +せきとめ せき止め 一段3: +せきとり 関取 名1: +せきどう 赤道 名1: +せきにん 責任 名1: +せきね 関根 苗字: +せきの 関野 苗字: +せきのみや 関宮 地名: +せきはい 惜敗 名6: +せきはん 赤飯 名2: +せきひ 石碑 名1: +せきぶん 積分 名6: +せきべつ 惜別 名6: +せきむ 責務 名1: +せきめ 関目 苗字: +せきめ 関目 地名: +せきめん 赤面 名6: +せきもと 関本 苗字: +せきもと 関本 地名: +せきや 関谷 苗字: +せきやど 関宿 地名: +せきゅりてぃ セキュリティ 名1: +せきゆ 石油 名1: +せきり 赤痢 名1: +せきわけ 関脇 名1: +せくしょん セクション 名1: +せぐち 瀬口 苗字: +せぐめんと セグメント 名1: +せけん 世間 名1: +せこう 施工 名6: +せしゅう 世襲 名6: +せじ 世辞 名2: +せじょう 施錠 名6: +せじょう 世情 名1: +せすじ 背筋 名1: +せそう 世相 名1: +せぞく 世俗 名4: +せた 瀬田 苗字: +せた 瀬田 地名: +せた 勢多 地名: +せたい 世帯 名1:助数2: +せたか 瀬高 地名: +せたがや 世田谷 地名: +せたけ 背丈 名1: +せたな 瀬棚 地名: +せだい 世代 名1:助数: +せちばる 世知原 地名: +せっ 接 サ変: +せっかい 石灰 名1: +せっかい 切開 名6: +せっかく せっかく 代6: +せっかく 折角 代6: +せっかち せっかち 代5: +せっき 節気 名1: +せっきゃく 接客 名6: +せっきょう 説教 名5: +せっきょく 積極 名4: +せっきん 接近 名6: +せっく 節句 名2: +せっくす セックス 名6: +せっけい 設計 名6: +せっけいず 設計図 名1: +せっけん 石鹸 名1: +せっけん 接見 代4: +せっこう 石膏 名1: +せっこつ 接骨 名6: +せっさく 切削 名6: +せっし 摂氏 名1: +せっしゅ 摂取 名6: +せっしゅ 接種 名6: +せっしょう 折衝 名6: +せっしょく 接触 名6: +せっしょく 節食 名6: +せっしょん セッション 名1: +せっすい 節水 名6: +せっせい 摂生 名6: +せっせい 節制 名6: +せっせん 接戦 代4: +せっせん 接線 名1: +せっそう 節操 名1: +せっそく 拙速 名8: +せったい 接待 名6: +せったく 拙宅 名1: +せっち 設置 名6: +せっち 接地 名6: +せっちゃく 接着 名6: +せっちゅう 折衷 名6: +せっつ 摂津 名1: +せっつ 摂津 地名: +せってい 設定 名6: +せってん 接点 名1: +せっと セット 代4:助数2: +せっとう 接頭 名1: +せっとう 窃盗 名6: +せっとく 説得 名6: +せっぱく 切迫 名6: +せっぱん 折半 名6: +せっぷん 接吻 名6: +せっぺん 切片 名1: +せつ せつ カ五1: +せつ 説 代1:接尾1: +せつ 節 代1:助数: +せつ 切 単漢: +せつ 拙 単漢: +せつ 接 単漢: +せつ 摂 単漢: +せつ 折 単漢: +せつ 設 単漢: +せつ 窃 単漢: +せつ 雪 単漢: +せつ 鱈 単漢: +せつえい 設営 名6: +せつお 節男 名前: +せつお 節夫 苗字: +せつがん 接岸 名6: +せつげん 節減 名6: +せつげん 雪原 名1: +せつこ 節子 名前: +せつごう 接合 名6: +せつじ 接辞 名1: +せつじつ 切実 名8: +せつじゅ 接受 名6: +せつじょ 切除 名6: +せつじょく 雪辱 名6: +せつぜい 節税 名6: +せつぞく 接続 名6: +せつぞくし 接続詞 名1: +せつだん 切断 名6: +せつでん 節電 名6: +せつど 節度 名1: +せつな 切な 形5: +せつび 設備 名6: +せつぶん 節分 名1: +せつぼう 切望 名6: +せつめい 説明 名7: +せつもん 設問 名6: +せつやく 節約 名6: +せつり 摂理 名1: +せつりつ 設立 名6: +せつわ 説話 名1: +せと 瀬戸 名1: +せとうち 瀬戸内 地名: +せとぎわ 瀬戸際 名1: +せとだ 瀬戸田 地名: +せとないかい 瀬戸内海 地名: +せなか 背中 名2: +せのび 背伸び 代4: +せばま 狭ま ラ五1: +せばめ 狭め 一段1: +せびろ 背広 名1: +せぴあ セピア 名1: +せふぃーろ セフィーロ 名1: +せふり 背振 地名: +せぼね 背骨 名1: +せま 狭 形7: +せま 迫 ラ五8: +せまくるし 狭苦し 形3: +せみ 蝉 代1: +せみころん セミコロン 名1: +せみなー セミナー 名1: +せみね 瀬峰 地名: +せめ 攻め 一段3: +せめ 責め 一段3: +せめおと 攻め落と サ五7: +せめこ 攻め込 マ五7: +せめたて 責めたて 一段3: +せめつけ 責めつけ 一段1: +せめて せめて 副1: +せめんと セメント 名1: +せや 瀬谷 苗字: +せや 瀬谷 地名: +せら 世羅 地名: +せらにし 世羅西 地名: +せらみっく セラミック 名1: +せり 芹 単漢: +せりあ 競り合 ワ五7: +せりあげ せり上げ 一段3: +せりざわ 芹沢 苗字: +せりふ 台詞 代1: +せる セル 名1: +せれくと セレクト 名6: +せろん 世論 名1: +せわ 世話 名5: +せん 線 代1:接尾1: +せん 栓 代1: +せん 船 接尾1: +せん 選 接尾1: +せん 戦 接尾1:助数: +せん 腺 接尾1: +せん 銭 助数2: +せん 宣 サ変: +せん 煎 ザ変: +せん 泉 代1: +せん 先 代1: +せん 詮 代1: +せん 釧 単漢: +せん 蝉 単漢: +せん 仙 単漢: +せん 占 単漢: +せん 専 単漢: +せん 尖 単漢: +せん 川 単漢: +せん 扇 単漢: +せん 撰 単漢: +せん 栴 単漢: +せん 浅 単漢: +せん 洗 単漢: +せん 染 単漢: +せん 潜 単漢: +せん 煽 単漢: +せん 旋 単漢: +せん 穿 単漢: +せん 箭 単漢: +せん 繊 単漢: +せん 羨 単漢: +せん 舛 単漢: +せん 薦 単漢: +せん 賎 単漢: +せん 践 単漢: +せん 遷 単漢: +せん 銑 単漢: +せん 閃 単漢: +せん 鮮 単漢: +せん 揃 単漢: +せん 苫 単漢: +せん 亘 単漢: +せん 僭 単漢: +せんい 繊維 名1: +せんい 遷移 名6: +せんいん 船員 名1: +せんえき 戦役 名1: +せんえつ 僭越 名8: +せんか 専科 名1: +せんか 戦果 名1: +せんか 戦火 名1: +せんかい 旋回 名6: +せんかく 先覚 名1: +せんかん 戦艦 名1: +せんがい 選外 名1: +せんがく 浅学 名1: +せんがん 洗顔 名6: +せんき 戦記 名1: +せんきゃく 船客 名1: +せんきゃくばんらい 千客万来 代1: +せんきょ 選挙 名6: +せんきょ 占拠 名6: +せんきょうし 宣教師 名1: +せんきょく 戦局 名1: +せんきょく 選曲 名6: +せんぎょ 鮮魚 名1: +せんぎょう 専業 名1: +せんく 先駆 名6: +せんけい 線形 名1: +せんけつ 先決 名1: +せんけん 先見 名1: +せんげつ 先月 名1: +せんげん 宣言 名6: +せんこう 専攻 名7: +せんこう 選考 名6: +せんこう 先攻 名6: +せんこう 先行 名6: +せんこう 穿孔 名6: +せんこう 線香 名2: +せんこう 閃光 名1: +せんこく 先刻 名1: +せんこく 宣告 名6: +せんご 戦後 名1: +せんごく 戦国 名1: +せんさー センサー 名1: +せんさい 戦災 名1: +せんさい 繊細 名8: +せんさく 詮索 名6: +せんさばんべつ 千差万別 名8: +せんざい 洗剤 名1: +せんざい 潜在 名6: +せんし 戦死 名6: +せんし 戦士 名1: +せんしつ 船室 名1: +せんしゃ 戦車 名1: +せんしゅ 選手 名1: +せんしゅ 船首 名1: +せんしゅ 先取 名6: +せんしゅう 先週 名11: +せんしゅう 専修 名1: +せんしゅう 選集 名1: +せんしゅうらく 千秋楽 名1: +せんしゅつ 選出 名6: +せんしょう 先勝 代4: +せんしょく 染色 名6: +せんしょく 染織 名1: +せんしん 先進 名1: +せんしん 専心 代4: +せんしんこく 先進国 名1: +せんじ 戦時 名1: +せんじつ 先日 名1: +せんじゃ 選者 名1: +せんじゅう 専従 名6: +せんじゅつ 戦術 名1: +せんじょう 戦場 名1: +せんじょう 洗浄 代4: +せんじょう 船上 名1: +せんじん 先人 名1: +せんす センス 名1: +せんす 扇子 名1: +せんすい 潜水 名6: +せんすいかん 潜水艦 名1: +せんせーしょなる センセーショナル 名8: +せんせーしょん センセーション 名1: +せんせい 先生 名1: +せんせい 宣誓 名6: +せんせいじゅつ 占星術 名1: +せんせん 宣戦 名6: +せんせん 戦線 名1: +せんぜん 戦前 名1: +せんそう 戦争 名6: +せんぞ 先祖 名3: +せんぞく 専属 名6: +せんたー センター 名1: +せんたい 船体 名1: +せんたく 選択 名6: +せんたく 洗濯 名5: +せんたくき 洗濯機 名1: +せんたくし 選択肢 代1: +せんたん 先端 名1: +せんだい 仙台 地名: +せんだい 先代 名3: +せんだい 川内 苗字: +せんだい 川内 地名: +せんだがや 千駄ヶ谷 地名: +せんだぎ 千駄木 地名: +せんち センチ 助数2: +せんち 戦地 名1: +せんちめーとる 糎 単漢: +せんちゃ 煎茶 名1: +せんちゃく 先着 名6: +せんちょう 船長 代2: +せんちょう 千丁 地名: +せんて 先手 名1: +せんてい 選定 名6: +せんてん 先天 名4: +せんでん 宣伝 名6: +せんと セント 助数2: +せんとう 先頭 名1: +せんとう 銭湯 名1: +せんとう 戦闘 名6: +せんとうき 戦闘機 名1: +せんど 鮮度 名1: +せんどう 先導 名6: +せんどう 船頭 名1: +せんない 船内 名1: +せんなん 仙南 地名: +せんなん 泉南 地名: +せんにちまえ 千日前 地名: +せんにゅう 潜入 名6: +せんにゅうかん 先入観 名1: +せんにん 専任 名1: +せんにん 仙人 名1: +せんにん 選任 名6: +せんねん 専念 代4: +せんのう 洗脳 名6: +せんはた 千畑 地名: +せんば 船場 地名: +せんばい 専売 名6: +せんばつ 選抜 名6: +せんばん 旋盤 名1: +せんぱい 先輩 名1: +せんぱく 船舶 名1: +せんぱつ 先発 名6: +せんぱつ 洗髪 名6: +せんぱん 先般 代6: +せんび 船尾 名1: +せんぴょう 選評 名6: +せんぶん 線分 名1: +せんぷう 旋風 名1: +せんぷうき 扇風機 名1: +せんぷく 潜伏 名6: +せんべつ 選別 名6: +せんぼう 羨望 名6: +せんぼく 仙北 地名: +せんぼく 泉北 地名: +せんぼつ 戦没 名6: +せんぽう 先方 名1: +せんまや 千厩 地名: +せんむ 専務 名1: +せんめい 鮮明 名8: +せんめん 洗面 名6: +せんもん 専門 名4: +せんもんか 専門家 名1: +せんやく 先約 名6: +せんゆう 占有 名6: +せんゆう 専有 名6: +せんゆう 戦友 名1: +せんよう 専用 名6: +せんり 千里 苗字:名前: +せんり 千里 地名: +せんり 戦利 名1: +せんりつ 戦慄 代4: +せんりつ 旋律 代1: +せんりゃく 戦略 名1: +せんりゅう 川柳 名1: +せんりょう 占領 代4: +せんりょう 染料 代1: +せんりょく 戦力 名1: +せんれい 先例 名1: +せんれい 洗礼 名1: +せんれつ 鮮烈 名8: +せんれん 洗練 名6: +せんろ 線路 名1: +ぜ 是 代1: +ぜい 税 接尾1: +ぜい 脆 単漢: +ぜいかん 税関 名1: +ぜいがく 税額 名1: +ぜいきん 税金 名1: +ぜいげん 税源 名1: +ぜいこみ 税込み 名1: +ぜいしゅう 税収 名1: +ぜいせい 税制 名1: +ぜいたく 贅沢 名8: +ぜいにく ぜい肉 名1: +ぜいほう 税法 名1: +ぜいむ 税務 名1: +ぜいむしょ 税務署 名1: +ぜいりし 税理士 名1: +ぜいりつ 税率 名1: +ぜせい 是正 名6: +ぜっ 絶 サ変: +ぜっきょう 絶叫 名6: +ぜっく 絶句 名6: +ぜっけい 絶景 名1: +ぜっこう 絶好 名1: +ぜっこう 絶交 名6: +ぜっこうちょう 絶好調 名8: +ぜっさん 絶賛 名6: +ぜっしょく 絶食 名6: +ぜっせい 絶世 名1: +ぜったい 絶対 名4: +ぜったいち 絶対値 名1: +ぜっちょう 絶頂 名1: +ぜっぱん 絶版 名1: +ぜっぴつ 絶筆 名1: +ぜっぴん 絶品 名1: +ぜっぺき 絶壁 名1: +ぜつ 絶 単漢: +ぜつ 舌 単漢: +ぜつえん 絶縁 名6: +ぜつだい 絶大 形動4: +ぜつぼう 絶望 名6: +ぜつみょう 絶妙 代5: +ぜつむ 絶無 名1: +ぜつめい 絶命 名6: +ぜつめつ 絶滅 名6: +ぜに 銭 代1: +ぜにん 是認 名6: +ぜねすと ゼネスト 名1: +ぜひ ぜひ 副1: +ぜひ 是非 代1: +ぜみ ゼミ 名1: +ぜみなーる ゼミナール 名1: +ぜろ ゼロ 名1: +ぜろっくす ゼロックス 企業: +ぜん 全 代1:接頭5: +ぜん 前 接頭1: +ぜん 善 代1: +ぜん 禅 代1: +ぜん 膳 名2:助数2: +ぜん 然 代1: +ぜん 千 単漢: +ぜん 漸 単漢: +ぜん 繕 単漢: +ぜん 蝉 単漢: +ぜん 喘 単漢: +ぜんあく 善悪 名1: +ぜんい 善意 名1: +ぜんいき 全域 名1: +ぜんいち 善一 名前: +ぜんいん 全員 代6: +ぜんえい 前衛 名1: +ぜんか 前科 名1: +ぜんかい 前回 名11: +ぜんかい 全会 名1: +ぜんかい 全壊 名6: +ぜんかい 全快 名6: +ぜんかい 全開 名6: +ぜんかく 全角 名1: +ぜんかしき 漸化式 名1: +ぜんかん 全巻 名1: +ぜんかん 全館 名1: +ぜんがく 全額 名1: +ぜんがく 全学 名1: +ぜんき 前期 名1: +ぜんき 前記 名6: +ぜんきち 善吉 名前: +ぜんきょく 全局 名1: +ぜんきょく 全曲 名1: +ぜんきん 漸近 名1: +ぜんけい 前掲 名1: +ぜんけい 全景 名1: +ぜんげつ 前月 名1: +ぜんげん 漸減 名6: +ぜんこ 全戸 名1: +ぜんこう 前項 名1: +ぜんこう 善行 名1: +ぜんこう 全校 名1: +ぜんこく 全国 名4: +ぜんご 前後 代4: +ぜんごさく 善後策 名1: +ぜんさい 前菜 名1: +ぜんさく 前作 名1: +ぜんし 全紙 名1: +ぜんしゃ 前者 名1: +ぜんしゃ 全社 名1: +ぜんしゅう 全集 名1: +ぜんしゅう 前週 名1: +ぜんしょ 善処 名6: +ぜんしょ 全書 名1: +ぜんしょう 全勝 名6: +ぜんしょう 全焼 名6: +ぜんしょう 全章 名1: +ぜんしょう 前章 名1: +ぜんしん 全身 名4: +ぜんしん 前身 名1: +ぜんしん 前進 名6: +ぜんしん 漸進 名6: +ぜんじ 漸次 代6: +ぜんじつ 前日 名1: +ぜんじつ 全日 名1: +ぜんじゅつ 前述 名6: +ぜんじろう 善次郎 名前: +ぜんせいき 全盛期 名1: +ぜんせき 全席 名1: +ぜんせん 前線 名1: +ぜんせん 全線 名1: +ぜんぜん 全然 副8: +ぜんそう 前奏 名6: +ぜんそく 喘息 名1: +ぜんぞう 漸増 名6: +ぜんたい 全体 名1: +ぜんだい 前代 名1: +ぜんち 全治 名6: +ぜんちし 前置詞 名1: +ぜんちょう 前兆 名1: +ぜんちょう 全長 名1: +ぜんつう 全通 名6: +ぜんつうじ 善通寺 地名: +ぜんてい 前提 名1: +ぜんてん 全店 名1: +ぜんと 前途 名1: +ぜんど 全土 名1: +ぜんどう 善導 代4: +ぜんにちせい 全日制 名1: +ぜんにっくう 全日空 企業: +ぜんにほん 全日本 名1: +ぜんにん 前任 名1: +ぜんにん 善人 名1: +ぜんねんど 前年度 名1: +ぜんのう 前納 名6: +ぜんはん 前半 名1: +ぜんぱい 全廃 名6: +ぜんぱい 全敗 名6: +ぜんぱん 全般 名4: +ぜんびん 前便 名1: +ぜんびん 全便 名1: +ぜんぴん 全品 名1: +ぜんぶ 全部 名1: +ぜんぶん 全文 名1: +ぜんぶん 前文 名1: +ぜんべい 全米 名1: +ぜんぺん 前編 名1: +ぜんぺん 全編 名1: +ぜんぼう 全貌 名1: +ぜんぽう 前方 名1: +ぜんめつ 全滅 名6: +ぜんめん 前面 名1: +ぜんめん 全面 名1: +ぜんや 前夜 名1: +ぜんやく 全訳 名6: +ぜんよう 善用 代4: +ぜんよう 全容 名1: +ぜんら 全裸 名1: +ぜんりゃく 前略 名1: +ぜんりょう 善良 形動4: +ぜんりょく 全力 名1: +ぜんれい 前例 名1: +ぜんれき 前歴 名1: +ぜんれつ 前列 名1: +そ 沿 ワ五7: +そ 添 ワ五3: +そ 剃 ラ五8: +そ 反 ラ五8: +そ 祖 代1: +そ 素 代1: +そ 疎 代1: +そ 粗 代1: +そ 姐 単漢: +そ 噌 単漢: +そ 塑 単漢: +そ 岨 単漢: +そ 措 単漢: +そ 曾 単漢: +そ 曽 単漢: +そ 楚 単漢: +そ 狙 単漢: +そ 疏 単漢: +そ 礎 単漢: +そ 租 単漢: +そ 組 単漢: +そ 蘇 単漢: +そ 訴 単漢: +そ 阻 単漢: +そ 遡 単漢: +そ 鼠 単漢: +そーす ソース 名1: +そーと ソート 名6: +そーぷ ソープ 名1: +そあく 粗悪 形動4: +そいつ そいつ 代1: +そいん 素因 名1: +そう 総 接頭1: +そう そう 特殊副:代1: +そう 相 代1: +そう 僧 代1: +そう 奏 サ変:サ五1: +そう 層 接尾1:助数: +そう 荘 代1: +そう 葬 代1: +そう 壮 代1: +そう 双 代1: +そう 想 代1: +そう 走 代1: +そう 鯵 単漢: +そう 繰 単漢: +そう 桑 単漢: +そう 宗 単漢: +そう 庄 単漢: +そう 曾 単漢: +そう 曽 単漢: +そう 創 単漢: +そう 叢 単漢: +そう 倉 単漢: +そう 喪 単漢: +そう 爽 単漢: +そう 宋 単漢: +そう 匝 単漢: +そう 惣 単漢: +そう 捜 単漢: +そう 掃 単漢: +そう 挿 単漢: +そう 掻 単漢: +そう 操 単漢: +そう 早 単漢: +そう 曹 単漢: +そう 巣 単漢: +そう 槍 単漢: +そう 槽 単漢: +そう 漕 単漢: +そう 燥 単漢: +そう 争 単漢: +そう 痩 単漢: +そう 窓 単漢: +そう 糟 単漢: +そう 綜 単漢: +そう 聡 単漢: +そう 草 単漢: +そう 蒼 単漢: +そう 藻 単漢: +そう 装 単漢: +そう 送 単漢: +そう 遭 単漢: +そう 鎗 単漢: +そう 霜 単漢: +そう 騒 単漢: +そう 贈 単漢: +そう 爪 単漢: +そう 葱 単漢: +そう 蚤 単漢: +そう 湊 単漢: +そう 聰 単漢: +そう 躁 単漢: +そう 輳 単漢: +そうあん 草案 名1: +そうい 相違 名6: +そうい 創意 名1: +そういち 宗一 名前: +そういん 総員 名1: +そううつ 躁鬱 名1: +そうおう 相応 名6:形動1: +そうおん 騒音 名1: +そうか 草加 地名: +そうかい 総会 名1: +そうかい 壮快 名8: +そうかい 爽快 名8: +そうかつ 総括 名6: +そうかつ 総轄 名6: +そうかん 創刊 名6: +そうかん 壮観 名1: +そうかん 相関 名6: +そうかん 総監 名1: +そうかん 送還 名6: +そうがく 総額 名1: +そうがんきょう 双眼鏡 名1: +そうき 早期 名1: +そうきゅう 早急 名8: +そうきょ 壮挙 名1: +そうきょく 総局 名1: +そうきょくせん 双曲線 名1: +そうきん 送金 名6: +そうぎ 争議 名1: +そうぎ 葬儀 名3: +そうぎょう 創業 名6: +そうぎょう 操業 名6: +そうぐう 遭遇 名6: +そうけい 総計 名6: +そうけん 送検 名6: +そうけん 壮健 名10: +そうげい 送迎 名6: +そうげん 草原 名4: +そうこ 倉庫 名1: +そうこう 走行 名6: +そうこう 壮行 名1: +そうこう 操行 名1: +そうこう 草稿 名1: +そうこう 霜降 名1: +そうご 相互 名1: +そうごう 総合 名6: +そうごん 荘厳 名8: +そうさ 操作 名6: +そうさ 捜査 名6: +そうさ 走査 名6: +そうさ 匝瑳 地名: +そうさい 総裁 名6: +そうさく 創作 名6: +そうさく 捜索 名6: +そうざい 惣菜 名2: +そうし 創始 名6: +そうし 相思 名1: +そうし 草紙 名1: +そうしき 葬式 名2: +そうしたら そうしたら 接続: +そうしつ 喪失 名6: +そうして そうして 副1: +そうしゃ 走者 名1: +そうしゃ 奏者 名1: +そうしゃ 操車 名1: +そうしゅうへん 総集編 代1: +そうしゅつ 送出 代4: +そうしゅん 早春 名1: +そうしょ 草書 名1: +そうしょう 総称 名6: +そうしょく 装飾 名6: +そうしん 送信 名6: +そうじ 掃除 名5: +そうじ 相似 名6: +そうじしょく 総辞職 名6: +そうじて 総じて 副1: +そうじゃ 総社 地名: +そうじゅ 送受 名6: +そうじゅう 操縦 名6: +そうじゅく 早熟 名8: +そうじゅしん 送受信 名6: +そうじょう 相乗 名1: +そうすう 総数 名1: +そうせい 早世 名6: +そうせいじ 双生児 名1: +そうせつ 創設 名6: +そうぜい 総勢 名1: +そうぜつ 壮絶 名8: +そうぜん 騒然 形動2: +そうそう 早々 代6: +そうそう 草々 形動2: +そうぞう 想像 名7: +そうぞう 創造 名6: +そうぞうし 騒々し 形5: +そうぞく 相続 名6: +そうたい 相対 名4: +そうたい 早退 名6: +そうたつ 送達 名6: +そうだい 壮大 形動4: +そうだい 総代 名1: +そうだい 早大 名1: +そうだか 総高 名1: +そうだち 総立ち 名1: +そうだつ 争奪 名6: +そうだん 相談 名7: +そうち 装置 名6: +そうち 送致 名6: +そうちゃく 装着 名6: +そうちょう 早朝 名1: +そうちょう 総長 名1: +そうちょう 荘重 形動4: +そうてい 想定 名6: +そうてい 装丁 名6: +そうてい 送呈 名6: +そうてん 争点 名1: +そうで 総出 名1: +そうでん 送電 名6: +そうと 壮図 代1: +そうと 壮途 代1: +そうとう 相当 名8:副4: +そうとう 双頭 名1: +そうとく 総督 名1: +そうどう 騒動 名1: +そうどう 相同 名1: +そうなん 遭難 名6: +そうにゅう 挿入 名6: +そうねん 壮年 名1: +そうは 走破 名6: +そうば 相場 名1: +そうばん 早晩 副1: +そうひょう 総評 名1: +そうび 装備 名6: +そうふ 送付 名7: +そうふう 送風 名6: +そうべつ 送別 名6: +そうべつ 壮瞥 地名: +そうほう 双方 名1: +そうほうこう 双方向 名1: +そうま 相馬 苗字: +そうま 相馬 地名: +そうむ 総務 名1: +そうめい 聰明 名8: +そうめん 素麺 名1: +そうや 宗谷 地名: +そうらく 相楽 地名: +そうらん 総覧 名6: +そうらん 騒乱 名1: +そうり 総理 名6: +そうりつ 創立 名6: +そうりふ 総理府 名1: +そうりょ 僧侶 名1: +そうりょう 送料 名1: +そうりょう 総量 名1: +そうりょう 総領 名1: +そうりょく 総力 名1: +そうる ソウル 地名: +そうれつ 壮烈 名8: +そうろう 候 単漢: +そうろん 総論 名1: +そうわ 挿話 名1: +そうわ 総和 名1: +そえ 添え 一段3: +そえかみ 添上 地名: +そえだ 添田 苗字: +そえだ 添田 地名: +そえん 疎遠 名8: +そお 曽於 地名: +そかい 疎開 名6: +そが 曽我 苗字: +そがい 疎外 名6: +そがい 阻害 名6: +そく 即 サ変:サ五1: +そく 則 接尾1:サ変:サ五1: +そく 足 助数2: +そく 速 助数2: +そく 束 代1: +そく 塞 単漢: +そく 促 単漢: +そく 側 単漢: +そく 息 単漢: +そく 捉 単漢: +そく 測 単漢: +そく 速 単漢: +そくい 即位 名6: +そくおう 即応 名6: +そくざ 即座 名1: +そくし 即死 代4: +そくしん 促進 名6: +そくじ 即時 名1: +そくせい 促成 名6: +そくせき 即席 名1: +そくせき 足跡 名1: +そくたつ 速達 名6: +そくだん 即断 名6: +そくち 測地 名6: +そくてい 測定 名6: +そくとう 即答 名6: +そくとう 速答 名6: +そくど 速度 名1: +そくど 測度 名1: +そくはつ 即発 名6: +そくばい 即売 名6: +そくばく 束縛 名6: +そくほう 速報 名6: +そくめん 側面 名1: +そくらてす ソクラテス 代1: +そくりょう 測量 名6: +そくりょく 速力 名1: +そくろう 足労 名3: +そぐ そぐ ワ五1: +そけっと ソケット 名1: +そげき 狙撃 名6: +そこ そこ 代1: +そこ 底 代1: +そこう 素行 代1: +そこく 祖国 名1: +そこそこ そこそこ 代1: +そこぢから 底力 名1: +そこで そこで 接続: +そこな 損な ワ五5: +そこね 損ね 一段3: +そこね 底値 名1: +そこびえ 底冷え 代4: +そこら そこら 代1: +そごう そごう 企業: +そざい 素材 名1: +そざつ 粗雑 名8: +そし 素子 名1: +そし 阻止 名6: +そし 誹 ラ五3: +そしき 組織 名6: +そしつ 素質 名1: +そして そして 接続: +そしな 粗品 名1: +そしゃく 租借 名6: +そしゃく 咀嚼 名6: +そしょう 訴訟 名6: +そしょく 粗食 名1: +そじ 素地 名1: +そじょう 訴状 名1: +そすい 疎水 名1: +そすう 素数 名1: +そせい 組成 名6: +そせい 蘇生 名6: +そせい 粗製 名1: +そせん 祖先 名1: +そそ そそ ラ五7: +そそ 注 ガ五7: +そそ 楚々 形動2: +そそう 粗相 代4: +そそのか 唆 サ五5: +そそりた そそり立 タ五1: +そだ 育 タ五8: +そだい 粗大 名8: +そだて 育て 一段4: +そだてあげ 育て上げ 一段1: +そち 措置 名7: +そちら そちら 代1: +そっき 速記 名6: +そっきょう 即興 名1: +そっきん 側近 名1: +そっきん 即金 名1: +そっくり そっくり 代6: +そっけつ 即決 名6: +そっけな そっけな 形3: +そっこう 即効 名1: +そっこう 速攻 名1: +そっこうじょ 測候所 名1: +そっこく 即刻 代6: +そっせん 率先 名6: +そっち そっち 代1: +そっちゅう 卒中 名1: +そっちょく 率直 形動4: +そっと そっと 副4: +そっとう 卒倒 名6: +そつ 卒 接尾1: +そつ 率 単漢: +そつう 疎通 名6: +そつぎょう 卒業 名7: +そつろん 卒論 名1: +そで 袖 代1: +そでがうら 袖ヶ浦 地名: +そと 外 代1: +そとがわ 外側 名1: +そとまわり 外回り 代1: +そとめ 外海 地名: +そなえ 備え 一段3: +そなえ 供え 一段4: +そなえつけ 備え付け 一段3: +そなた ソナタ 名1: +そなわ 備わ ラ五3: +そに 曾爾 地名: +そにー ソニー 企業: +そね 曽根 苗字: +そねざき 曽根崎 地名: +その その 連体: +その 園 代1: +その 苑 単漢: +その 薗 単漢: +その 其 単漢: +そのうち そのうち 代6: +そのこと そのこと 代1: +そのた その他 代1: +そのだ 園田 苗字: +そのべ 園部 苗字: +そのべ 園部 地名: +そのまま そのまま 代6: +そば そば 名2: +そば 蕎麦 名2: +そば 側 代1: +そびえた そびえ立 タ五5: +そびえと ソビエト 地名: +そびょう 素描 名6: +そふ 祖父 代1: +そふと ソフト 名8: +そふとうぇあ ソフトウェア 名1: +そふとうえあ ソフトウエア 名1: +そふぼ 祖父母 名1: +そぶえ 祖父江 地名: +そほう 粗放 形動4: +そぼ 祖母 代1: +そぼう 粗暴 形動4: +そぼく 素朴 名8: +そま 染ま ラ五1: +そまつ 粗末 形動4: +そむ 背 カ五1: +そめ 染め 一段3: +そめ 初め 一段3: +そめつけ 染め付け 一段3: +そめもの 染物 代1: +そめや 染谷 苗字: +そもそも そもそも 副7: +そや 粗野 名8: +そよ そよ ガ五3: +そよう 素養 名1: +そよう 蘇陽 地名: +そよかぜ そよ風 代1: +そら 逸ら サ五5: +そら 空 名2: +そらち 空知 地名: +そりかえ 反り返 ラ五7: +そりっど ソリッド 名1: +そりゃく 粗略 名8: +そりゅうし 素粒子 代1: +それ それ 代1: +それ 逸れ 一段1: +それぞれ それぞれ 代6: +それだけ それだけ 代6: +それほど それほど 代6: +それん ソ連 地名: +そろ 揃 ワ五4: +そろえ そろえ 一段4: +そろえ 揃え 一段4: +そろそろ そろそろ 代6: +そん 損 代4:ザ変: +そん 存 サ変:ザ変: +そん 村 代1: +そん 孫 単漢: +そん 尊 単漢: +そん 噂 単漢: +そん 遜 単漢: +そん 邨 単漢: +そんえい 村営 名1: +そんえき 損益 名1: +そんかい 損壊 名6: +そんがい 損害 名1: +そんぐ ソング 名1: +そんけい 尊敬 名6: +そんげん 尊厳 名8: +そんざい 存在 名6: +そんしつ 損失 名1: +そんしょう 尊称 名1: +そんしょう 損傷 名6: +そんしょく 遜色 名1: +そんぞく 存続 名6: +そんぞく 尊属 名1: +そんだい 尊大 名8: +そんちょう 尊重 名6: +そんちょう 村長 代2: +そんとく 損得 名1: +そんな そんな 連体: +そんぼう 存亡 名1: +そんみん 村民 名1: +そんもう 損耗 名6: +そんらく 村落 名1: +そんりつ 存立 名6: +そんりつ 村立 名1: +ぞい 沿い 接尾2: +ぞう 像 代1:接尾1: +ぞう 増 接尾1: +ぞう 象 代1: +ぞう 蔵 サ変:代1: +ぞう 贈 単漢: +ぞう 憎 単漢: +ぞう 臓 単漢: +ぞう 造 単漢: +ぞう 雑 単漢: +ぞういん 増員 名6: +ぞうえい 造営 名6: +ぞうえき 増益 名6: +ぞうえん 増援 代4: +ぞうえん 造園 代4: +ぞうお 憎悪 代4: +ぞうか 増加 名6: +ぞうか 造花 名1: +ぞうかん 増刊 名6: +ぞうがく 増額 名6: +ぞうき 臓器 名1: +ぞうきばやし 雑木林 代1: +ぞうきょう 増強 名6: +ぞうけい 造形 名1: +ぞうけい 造詣 名1: +ぞうけつ 増結 名6: +ぞうげ 象牙 名1: +ぞうげん 増減 名6: +ぞうご 造語 名1: +ぞうさ 造作 名1: +ぞうさく 造作 名6: +ぞうさつ 増刷 名6: +ぞうさん 増産 名6: +ぞうし 増資 名6: +ぞうしゅう 増収 名6: +ぞうしょ 蔵書 名1: +ぞうしょう 蔵相 名1: +ぞうしょく 増殖 名6: +ぞうしん 増進 名6: +ぞうすい 雑炊 名2: +ぞうすい 増水 名6: +ぞうせい 造成 名6: +ぞうせつ 増設 名6: +ぞうせん 造船 名6: +ぞうぜい 増税 名6: +ぞうだい 増大 名6: +ぞうちく 増築 名6: +ぞうちょう 増長 名6: +ぞうてい 贈呈 名6: +ぞうとう 贈答 名7: +ぞうに 雑煮 名2: +ぞうはつ 増発 名6: +ぞうびん 増便 名6: +ぞうふく 増幅 名6: +ぞうぶん 増分 名1: +ぞうほ 増補 名6: +ぞうよ 贈与 名7: +ぞうり 草履 代1: +ぞうりん 造林 名6: +ぞうわい 贈賄 名6: +ぞく 属 サ変:サ五1:代1: +ぞく 族 接尾1: +ぞく 俗 代1: +ぞく 賊 代1: +ぞく 続 単漢: +ぞくあく 俗悪 代5: +ぞくご 俗語 名1: +ぞくしゅつ 続出 名6: +ぞくしょう 俗称 名1: +ぞくせい 属性 名4: +ぞくせつ 俗説 名1: +ぞくぞく 続々 副8: +ぞくとう 続騰 名6: +ぞくはつ 続発 名6: +ぞくへん 続編 名1: +ぞくほう 続報 名6: +ぞくろん 俗論 名1: +ぞっか 俗化 名6: +ぞっこう 続行 名6: +ぞめ 初め 接尾2: +ぞる ゾル 名1: +ぞろえ 揃え 接尾2: +ぞろぞろ ぞろぞろ 副8: +ぞん 存 ザ変: +ぞんがい 存外 形動1: +ぞんじあげ 存じ上げ 一段1: +ぞんぶん 存分 名1: +ぞんめい 存命 名6: +た た タ五5: +た 炊 カ五5: +た 焚 カ五5: +た 立 タ五4: +た 建 タ五4: +た 発 タ五8: +た 絶 タ五1: +た 経 タ五1: +た 裁 タ五3: +た 断 タ五3: +た 足 サ五7:ラ五7: +た 田 代1: +た 他 代1: +た 多 接頭1: +た 太 単漢: +た 汰 単漢: +た 詫 単漢: +たーげっと ターゲット 名1: +たーとる タートル 名1: +たーびん タービン 名1: +たーぼ ターボ 名1: +たーみなる ターミナル 名1: +たーみねーた ターミネータ 名1: +たーむ ターム 名1: +たーん ターン 名6: +たあい 他愛 名1: +たい 対 代4:接頭1: +たい 体 接尾1:助数2: +たい 帯 接尾1: +たい 隊 接尾1: +たい 鯛 代1: +たい 態 代1: +たい 他意 代1: +たい タイ 地名: +たい 耐 代1: +たい 太 単漢: +たい 碓 単漢: +たい 汰 単漢: +たい 堆 単漢: +たい 岱 単漢: +たい 待 単漢: +たい 怠 単漢: +たい 戴 単漢: +たい 替 単漢: +たい 泰 単漢: +たい 滞 単漢: +たい 胎 単漢: +たい 腿 単漢: +たい 苔 単漢: +たい 袋 単漢: +たい 貸 単漢: +たい 退 単漢: +たい 逮 単漢: +たい 黛 単漢: +たい 台 単漢: +たい 大 単漢: +たい 諦 単漢: +たいあたり 体当り 代4: +たいあっぷ タイアップ 名6: +たいあん 対案 名1: +たいあん 大安 名1: +たいい 体位 名1: +たいい 退位 名6: +たいい 大意 名1: +たいいき 帯域 名1: +たいいく 体育 名1: +たいいくかん 体育館 名1: +たいいん 退院 名7: +たいいん 隊員 名1: +たいえい 大栄 地名: +たいえき 体液 名1: +たいおう 対応 名6: +たいおん 体温 名1: +たいか 退化 名6: +たいか 滞貨 名1: +たいか 大家 名1: +たいかい 大会 名1: +たいかい 退会 名6: +たいかい 大海 名1: +たいかく 体格 名1: +たいかく 対角 名1: +たいかくせん 対角線 名1: +たいかん 耐寒 名1: +たいかん 退官 名6: +たいかんしき 戴冠式 名1: +たいが 大河 名1: +たいがい 体外 名1: +たいがい 対外 名1: +たいがい 大概 代6: +たいがく 退学 名6: +たいがん 対岸 名1: +たいき 待機 名6: +たいき 大気 名1: +たいき 大樹 地名: +たいきゃく 退却 名6: +たいきゅう 耐久 名1: +たいきょ 退去 名6: +たいきょ 大挙 副4: +たいきょく 対局 代4: +たいきょく 大局 名4: +たいきん 大金 名1: +たいぎめいぶん 大義名分 代1: +たいくつ 退屈 名8:サ変: +たいぐう 待遇 名6: +たいぐん 大群 名1: +たいけい 体型 名1: +たいけい 体系 名4: +たいけつ 対決 名6: +たいけん 体験 名6: +たいげん 体言 名1: +たいげん 体現 代4: +たいこ 太古 名1: +たいこ 太鼓 名1: +たいこう 対抗 名6: +たいこう 退行 名6: +たいこう 大公 名1: +たいこう 大綱 名1: +たいこく 大国 名1: +たいさ 大佐 名1: +たいさ 大差 名1: +たいさく 対策 名1: +たいさく 大作 名1: +たいさん 退散 名6: +たいざ 対座 代4: +たいざい 滞在 名6: +たいし 大使 名1: +たいし 大志 名1: +たいし 太子 名1: +たいしかん 大使館 名1: +たいした 大した 連体: +たいしつ 体質 名4: +たいしゃ 退社 名6: +たいしゃ 代謝 名6: +たいしゃ 大社 名1: +たいしゃく 貸借 名6: +たいしゅう 大衆 名4: +たいしゅう 体臭 名1: +たいしゅつ 退出 名6: +たいしょ 対処 代4: +たいしょ 大暑 代1: +たいしょう 対象 名1: +たいしょう 大賞 名1: +たいしょう 大正 名1: +たいしょう 大将 名1: +たいしょう 対照 名6: +たいしょう 対称 名8: +たいしょう 大勝 代4: +たいしょく 退職 名6: +たいしょくきん 退職金 名1: +たいしん 大信 地名: +たいじ 退治 名6: +たいじ 胎児 名1: +たいじ 泰次 名前: +たいじ 太地 地名: +たいじゅ 大樹 名1: +たいじゅう 体重 名1: +たいじょう 退場 名6: +たいじん 対人 名1: +たいすい 耐水 名1: +たいすう 対数 名1: +たいすけ 泰介 名前: +たいせい 体制 名4: +たいせい 体勢 名1: +たいせい 耐性 名1: +たいせい 態勢 名1: +たいせい 大勢 名1: +たいせい 大成 名6: +たいせいよう 大西洋 名1: +たいせき 体積 名1: +たいせき 堆積 名6: +たいせき 退席 名6: +たいせつ 大切 名8: +たいせつ 大雪 名1: +たいせん 対戦 代4: +たいせん 大戦 名1: +たいそう 体操 名6: +たいそう 大層 副1:形動1: +たいそう 大喪 名1: +たいぞう 泰三 名前: +たいだ 怠惰 名8: +たいだん 対談 名6: +たいだん 退団 名6: +たいち 太一 名前: +たいち 対置 名6: +たいちょう 体調 名1: +たいちょう 体長 名1: +たいちょう 隊長 名1: +たいてい 大抵 代5: +たいてき 大敵 名1: +たいでん 帯電 名6: +たいとう 対等 代5: +たいとう 台東 地名: +たいとう 台頭 名6: +たいとく 体得 名6: +たいとる タイトル 名1: +たいど 態度 名1: +たいどう 胎動 代4: +たいない 体内 名1: +たいない 胎内 名1: +たいにち 対日 名1: +たいにち 滞日 名6: +たいにん 退任 名6: +たいにん 大任 名1: +たいねつ 耐熱 名1: +たいのう 滞納 名6: +たいは 大破 名6: +たいはん 大半 名1: +たいばつ 体罰 名1: +たいばん 胎盤 名1: +たいひ 対比 名6: +たいひ 退避 名6: +たいびょう 大病 名6: +たいぴすと タイピスト 名1: +たいふう 台風 名1: +たいぶつ 対物 名1: +たいぷ タイプ 名6: +たいぷらいたー タイプライター 名1: +たいへい 太平 名1: +たいへい 大平 地名: +たいへいよう 太平洋 名1: +たいへん 大変 代5: +たいへん たいへん 代5: +たいべい 対米 名1: +たいべつ 大別 名6: +たいほ 逮捕 名6: +たいほう 大砲 名1: +たいぼう 待望 名7: +たいぼう 耐乏 名1: +たいぼく 大木 名1: +たいま 大麻 名1: +たいま 当麻 地名: +たいま タイマ 名1: +たいまん 怠慢 名8: +たいみんぐ タイミング 名1: +たいむ タイム 名1: +たいむりー タイムリー 名8: +たいめい 岱明 地名: +たいめん 対面 名7: +たいめん 体面 名1: +たいや タイヤ 名1: +たいやく 大役 名1: +たいやく 対訳 名6: +たいゆう 大雄 地名: +たいよ 貸与 名7: +たいよう 太陽 名1: +たいよう 大洋 名1: +たいよう 大要 名1: +たいら 平 地名: +たいら 平ら 形動4:ガ五1: +たいらげ 平らげ 一段1: +たいりく 大陸 名4: +たいりつ 対立 名6: +たいりゃく 大略 代6: +たいりょう 大量 名1: +たいりょく 体力 名1: +たいりん 大輪 名1: +たいる タイル 名1: +たいわ 対話 名6: +たいわ 大和 地名: +たいわん 台湾 地名: +たう 多雨 名1: +たうん タウン 名1: +たえ 耐え 一段2: +たえ 堪え 一段2: +たえ 絶え 一段2: +たえ 妙 代1: +たえこ 妙子 名前: +たえず 絶えず 副1: +たえま 絶え間 代1: +たお 倒 サ五8: +たおやか たおやか 形動4: +たおる タオル 名1: +たおれ 倒れ 一段2: +たか たか ラ五7: +たか 高 代1:形10: +たか 鷹 代1: +たか 多可 地名: +たか 隆 単漢: +たかあき 孝明 名前: +たかあき 隆明 名前: +たかい 他界 代4: +たかい 高井 苗字: +たかいし 高石 苗字: +たかいし 高石 地名: +たかいち 高市 苗字: +たかいち 高市 地名: +たかいど 高井戸 地名: +たかお 孝男 名前: +たかお 孝夫 名前: +たかお 孝雄 名前: +たかお 高尾 苗字: +たかお 高尾 地名: +たかお 隆男 名前: +たかお 隆夫 名前: +たかお 隆雄 名前: +たかおか 高岡 苗字: +たかおか 高岡 地名: +たかおの 高尾野 地名: +たかが たかが 副1: +たかき 高来 地名: +たかぎ 喬木 地名: +たかぎ 高木 苗字: +たかく 高久 名前: +たかく 多角 名4: +たかくけい 多角形 代1: +たかこ 貴子 名前: +たかこ 孝子 名前: +たかさか 高坂 苗字: +たかさき 高崎 苗字: +たかさき 高崎 地名: +たかさご 高砂 地名: +たかさと 高郷 地名: +たかさわ 高沢 苗字: +たかざわ 高沢 苗字: +たかし 高志 名前: +たかし 隆司 名前: +たかし 隆志 名前: +たかし 孝司 名前: +たかし 孝志 名前: +たかし 喬 名前: +たかし 敬 名前: +たかし 孝 名前: +たかし 崇 名前: +たかし 卓 名前: +たかし 隆 名前: +たかしお 高潮 名1: +たかしま 高島 苗字: +たかしま 高島 地名: +たかしま 鷹島 地名: +たかしまだいら 高島平 地名: +たかしみず 高清水 地名: +たかじょう 高城 地名: +たかす 高鷲 地名: +たかす 鷹栖 地名: +たかせ 高瀬 苗字: +たかせ 高瀬 地名: +たかた 高田 苗字: +たかた 高田 地名: +たかだ 高田 苗字: +たかだい 高台 名1: +たかだか 高々 副2: +たかだのばば 高田馬場 地名: +たかちほ 高千穂 地名: +たかっけい 多角形 名1: +たかつ 高津 苗字: +たかつ 高津 地名: +たかつき 高月 地名: +たかつき 高槻 苗字: +たかつき 高槻 地名: +たかとう 高遠 地名: +たかとう 高藤 苗字: +たかとし 孝利 名前: +たかとび 高飛び 代4: +たかとみ 高富 地名: +たかとり 高取 苗字: +たかとり 高取 地名: +たかな 高鳴 ラ五7: +たかなし 高梨 苗字: +たかなべ 高鍋 地名: +たかなみ 高波 苗字:名1: +たかなわ 高輪 地名: +たかね 高値 名8: +たかね 高根 地名: +たかねざわ 高根沢 苗字: +たかねざわ 高根沢 地名: +たかの 高野 苗字: +たかの 高野 地名: +たかのす 鷹巣 地名: +たかのぞみ 高望み 代4: +たかのり 隆則 名前: +たかはぎ 高萩 地名: +たかはし 高橋 苗字: +たかはし 高梁 地名: +たかはた 高畑 苗字: +たかはた 高畠 苗字: +たかはま 高浜 苗字: +たかはま 高浜 地名: +たかはら 高原 苗字: +たかはる 高原 地名: +たかばやし 高林 苗字: +たかふみ 隆文 名前: +たかま 高ま ラ五3: +たかまつ 高松 地名: +たかみ 高見 苗字: +たかみや 高宮 苗字: +たかみや 高宮 地名: +たかむら 高村 苗字: +たかめ 高め 一段3: +たかもと 高本 苗字: +たかもり 高森 苗字: +たかもり 高森 地名: +たかや 高谷 苗字: +たかやす 高安 苗字: +たかやす 高安 地名: +たかやなぎ 高柳 苗字: +たかやま 高山 苗字: +たかやま 高山 地名: +たかゆき 孝幸 名前: +たかゆき 孝行 名前: +たかゆき 孝之 名前: +たかゆき 隆之 名前: +たかよし 孝義 名前: +たから 宝 名2: +たから 財 単漢: +たからか 高らか 形動4: +たからじま 宝島 代1: +たからづか 宝塚 地名: +たからべ 財部 地名: +たからもの 宝物 名1: +たかん 多感 名8: +たが 違 ワ五5: +たが 多賀 苗字: +たが 多賀 地名: +たがい 互い 代1: +たがいちがい 互い違い 代1: +たがく 多額 名8: +たがじょう 多賀城 地名: +たがた 田方 地名: +たがみ 田上 苗字: +たがや 耕 サ五5: +たがわ 田川 苗字: +たがわ 田川 地名: +たき 滝 代1: +たき 瀧 代1: +たき 多岐 代5: +たき 多気 地名: +たき 多紀 地名: +たきかわ 滝川 苗字: +たきかわ 滝川 地名: +たきがわ 滝川 苗字: +たきがわ 滝川 地名: +たきぎ 薪 代1: +たきぐち 滝口 苗字: +たきさわ 滝沢 地名: +たきざわ 滝沢 苗字: +たきざわ 滝沢 地名: +たきしーど タキシード 名1: +たきだし 炊出し 代4: +たきね 滝根 地名: +たきの 滝野 苗字: +たきの 滝野 地名: +たきび 焚火 名1: +たきもと 滝本 苗字: +たく 託 サ五7: +たく 宅 代1: +たく 卓 代1: +たく 多久 地名: +たく 托 単漢: +たく 啄 単漢: +たく 択 単漢: +たく 拓 単漢: +たく 沢 単漢: +たく 濯 単漢: +たく 琢 単漢: +たく 鐸 単漢: +たく 擢 単漢: +たくいつ 択一 名6: +たくえつ 卓越 名6: +たくお 卓雄 名前: +たくさん たくさん 代5: +たくさん 沢山 代5: +たくしー タクシー 名1: +たくしょく 拓殖 代4: +たくじ 託児 代4: +たくじょう 卓上 名1: +たくせつ 卓説 名1: +たくそう 託送 代4: +たくち 宅地 名1: +たくはい 宅配 名6: +たくばつ 卓抜 代5: +たくほん 拓本 名1: +たくぼ 田窪 苗字: +たくま 詫間 地名: +たくまし たくまし 形3: +たくみ 巧み 代5: +たくみ 巧 名前: +たくみ 匠 代1: +たくや 卓也 名前: +たくら 企 マ五7: +たくわえ 蓄え 一段3: +たくわえ 貯え 一段3: +たぐ 手繰 ラ五1: +たぐ タグ 名1: +たぐい 類 代1: +たぐち 田口 苗字: +たけ 竹 代1: +たけ 茸 代1: +たけ 丈 代1: +たけ 他家 名1: +たけ 岳 代1: +たけ たけ 一段1: +たけ 長け 一段1: +たけ 武 単漢: +たけい 武井 苗字: +たけいち 武市 苗字: +たけうち 竹内 苗字: +たけうち 武内 苗字: +たけお 武男 名前: +たけお 武夫 名前: +たけお 武雄 地名: +たけお 武雄 名前: +たけお 竹男 名前: +たけお 竹雄 名前: +たけおか 竹岡 苗字: +たけざわ 竹沢 苗字: +たけし 毅 名前: +たけし 健 名前: +たけし 剛 名前: +たけし 猛 名前: +たけし 武 名前: +たけし 健志 名前: +たけし 武司 名前: +たけし 武史 名前: +たけし 武志 苗字: +たけし 武石 地名: +たけした 竹下 苗字: +たけじ 武治 名前: +たけた 竹田 地名: +たけだ 武田 苗字: +たけだ 竹田 苗字: +たけだ 竹田 地名: +たけとみ 竹富 地名: +たけとよ 武豊 地名: +たけなか 竹中 苗字: +たけなわ たけなわ 代5: +たけの 竹野 苗字: +たけの 竹野 地名: +たけはら 竹原 苗字: +たけはら 竹原 地名: +たけばやし 竹林 名1: +たけばやし 竹林 苗字: +たけひこ 武彦 名前: +たけひさ 武久 名前: +たけふ 武生 地名: +たけべ 建部 苗字: +たけべ 建部 地名: +たけむら 竹村 苗字: +たけもと 竹本 苗字: +たけもり 竹森 苗字: +たけん 他県 名1: +たげい 多芸 名8: +たげん 多元 名4: +たげん 多言 名1: +たこ 凧 代1: +たこ 蛸 代1: +たこ 鮹 代1: +たこ 多古 地名: +たこう 他校 名1: +たこう 多幸 名10: +たこく 他国 名1: +たごん 他言 名6: +たさい 多才 名8: +たさい 多彩 名8: +たさつ 他殺 名1: +たざき 田崎 苗字: +たざわ 田沢 苗字: +たざわこ 田沢湖 地名: +たし 他紙 代1: +たし 他誌 代1: +たしか 確か 副1:形動4: +たしか たしか 副1:形動4: +たしかめ 確かめ 一段4: +たしざん 足し算 名1: +たしざん 足算 名1: +たしつ 多湿 名8: +たしゃ 他社 名1: +たしゃ 他者 名1: +たしゅ 多種 名8: +たしょう 多少 代6: +たしょう 多祥 名3: +たしろ 田代 苗字: +たしろ 田代 地名: +たじ 他事 名1: +たじ 多事 名8: +たじつ 他日 名1: +たじま 田島 苗字: +たじみ 多治見 地名: +たじゅう 多重 名4: +たじょう 多情 名8: +たじり 田尻 苗字: +たじり 田尻 地名: +たすう 多数 名1: +たすうけつ 多数決 名1: +たすか 助か ラ五3: +たすく タスク 代1: +たすけ 助け 一段4: +たすけあ 助け合 ワ五7: +たすけだ 助け出 サ五7: +たずさえ 携え 一段1: +たずさわ 携わ ラ五3: +たずね 尋ね 一段2: +たずね 訪ね 一段2: +たせん 他薦 名6: +たぜい 多勢 名1: +たた たた カ五7:マ五7: +たた 畳 マ五7: +たた 叩 カ五7: +たた 多々 副1: +たたえ 称え 一段1: +たたか 戦 ワ五7: +たたか 闘 ワ五7: +たたみ 畳 代1: +たたみかけ 畳み掛け 一段1: +たたみこ 畳み込 マ五7: +ただ ただ 代6: +ただ 只 代6: +ただ 唯 代6: +ただ 正 サ五5: +ただ 質 サ五5: +ただ 多田 苗字: +ただい 多大 名8: +ただいま ただいま 感動: +ただいま ただ今 代6: +ただいま 只今 代6: +ただお 忠男 名前: +ただお 忠夫 名前: +ただお 忠雄 名前: +ただおか 忠岡 地名: +ただごと 唯事 代1: +ただし ただし 接続: +ただし 正 名前: +ただし 正し 形2: +ただし 但し 接続: +ただし 忠 名前: +ただちに 直ちに 副1: +ただひこ 忠彦 名前: +ただまさ 忠正 名前: +ただみ 只見 地名: +ただよ 漂 ワ五7: +ただよし 忠義 名前: +たち たち 接尾1: +たち 達 接尾1: +たち 質 代1: +たちあ 立ち会 ワ五7: +たちあが 立ち上が ラ五7: +たちあらい 大刀洗 地名: +たちい 立ち入 ラ五3: +たちおくれ 立ち後れ 一段3: +たちかわ 立川 苗字: +たちかわ 立川 地名: +たちき 断ち切 ラ五7: +たちぎえ 立ち消え 代1: +たちぎき 立ち聞き 代4: +たちさ 立ち去 ラ五7: +たちすく 立ちすく マ五7: +たちどころに たちどころに 副1: +たちどま 立ち止ま ラ五7: +たちなお 立ち直 ラ五7: +たちなら 立ち並 バ五7: +たちの 立ち退 カ五7: +たちはだか 立ちはだか ラ五3: +たちば 立場 名2: +たちばな 橘 代1: +たちばな 立花 苗字: +たちばなし 立ち話 代4: +たちまち たちまち 副7: +たちまわ 立ち回 ラ五7: +たちみ 立見 代1: +たちむか 立ち向か ワ五3: +たちよ 立ち寄 ラ五6: +たっ 達 サ変:サ五1: +たっきゅう 卓球 代3: +たっきゅうびん 宅急便 名1: +たっけん 卓見 名3: +たっしゃ 達者 形動6: +たっせい 達成 名6: +たった たった 副7: +たった 立田 地名: +たっち タッチ 代4: +たっての たっての 連体: +たっと 貴 形2:バ五3: +たっと 尊 形2:バ五3: +たっぴつ 達筆 名8: +たっぷり たっぷり 代4:副1: +たつ 辰 代1: +たつ 竜 代1: +たつ 龍 代1: +たつ 達 単漢: +たつお 達男 名前: +たつお 達夫 名前: +たつお 達雄 名前: +たつお 辰男 名前: +たつお 辰夫 名前: +たつお 辰雄 名前: +たつお 竜夫 名前: +たつお 竜雄 名前: +たつこ 田子 地名: +たつごう 竜郷 地名: +たつじ 辰二 名前: +たつじん 達人 名1: +たつの 辰野 地名: +たつの 竜野 苗字: +たつの 竜野 地名: +たつのくち 辰口 地名: +たつのり 達徳 名前: +たつまき 竜巻 名1: +たつみ 巽 苗字: +たつみ 立見 苗字: +たつや 達也 名前: +たつや 辰也 名前: +たつやま 竜山 地名: +たつるはま 田鶴浜 地名: +たつろう 達郎 名前: +たづな 手綱 名1: +たて 縦 代1: +たて 盾 代1: +たて たて 接尾1: +たて 建て 一段4: +たて 立て 一段4: +たて 楯 代1: +たて 館 単漢: +たて 舘 単漢: +たて 竪 単漢: +たていし 建石 苗字: +たていし 立石 苗字: +たていわ 館岩 地名: +たてうり 建売り 名1: +たてかえ 建て替え 一段3: +たてかえ 立て替え 一段3: +たてかえ 立替 名1: +たてかけ 立てかけ 一段1: +たてこ たて込 マ五7: +たてこも 立てこも ラ五3: +たてしな 立科 地名: +たてじま 縦縞 名1: +たてつ 盾突 カ五1: +たてつぼ 建坪 名1: +たてなが 縦長 名8: +たての 館野 苗字: +たてばやし 館林 地名: +たてまえ 建前 代1: +たてまし 建増し 代4: +たてまつ 奉 ラ五3: +たてもの 建物 名1: +たてやま 館山 地名: +たてやま 立山 苗字: +たてやま 立山 地名: +たで 蓼 代1: +たとえ たとえ 一段3: +たとえば たとえば 連体: +たとえば 例えば 連体: +たとみ 田富 地名: +たど たど ラ五5: +たど 多度 地名: +たど 辿 ラ五5: +たどうし 他動詞 代1: +たどころ 田所 苗字: +たどつ 多度津 地名: +たどりつ たどり着 カ五5: +たな 棚 代1: +たな 店 代1: +たなおろし 棚卸し 名6: +たなか 田中 苗字: +たなぐら 棚倉 地名: +たなし 田無 地名: +たなだ 棚田 苗字: +たなばた 七夕 名1: +たなび 棚引 カ五5: +たなべ 田辺 苗字: +たなべ 田辺 地名: +たなん 多難 名8: +たに 谷 代1:苗字: +たにうち 谷内 苗字: +たにがわ 谷川 名1: +たにぐち 谷口 苗字: +たにぐみ 谷汲 地名: +たにま 谷間 代1: +たにもと 谷本 苗字: +たにやま 谷山 苗字: +たにん 他人 名1: +たぬき 狸 代1: +たぬしまる 田主丸 地名: +たぬま 田沼 苗字: +たね 種 代1: +たね 胤 単漢: +たねあかし 種明し 代4: +たねいち 種市 苗字: +たねいち 種市 地名: +たねがしま 種子島 地名: +たねん 多年 名1: +たの 多野 地名: +たの 田野 苗字: +たの 田野 地名: +たの 頼 マ五8: +たのうら 田浦 地名: +たのし 楽し 形5:マ五5: +たのはた 田野畑 地名: +たのみこ 頼み込 マ五7: +たのもし 頼もし 形9: +たはつ 多発 名6: +たはら 田原 苗字: +たば 束 代1: +たばこ タバコ 名2: +たばこ 煙草 名2: +たばた 田端 苗字: +たばた 田端 地名: +たばた 田畑 苗字: +たばね 束ね 一段1: +たばやま 丹波山 地名: +たび たび 代1: +たび 足袋 代1: +たび 度 代1: +たび 旅 代4: +たびかさな 度重な ラ五1: +たびさき 旅先 代1: +たびじ 旅路 代1: +たびたび たびたび 代6: +たびたび 度々 代6: +たびだ 旅立 タ五7: +たびびと 旅人 代1: +たびら 田平 地名: +たふ タフ 名8: +たぶ タブ 名1: +たぶー タブー 名1: +たぶせ 田布施 地名: +たぶん たぶん 代6: +たぶん 多分 代6: +たぶん 他聞 代1: +たべ 食べ 一段2: +たべもの 食べ物 名1: +たべん 多弁 名8: +たほう 他方 代6: +たぼう 多忙 名10: +たま たま ラ五3: +たま 給 ワ五1: +たま 賜 ワ五1: +たま 玉 名2: +たま 球 代1: +たま 珠 代1: +たま 弾 代1: +たま 多摩 地名: +たま 溜 ラ五3: +たま 霊 単漢: +たまい 玉井 苗字: +たまかわ 玉川 地名: +たまがわ 玉川 地名: +たまがわ 田万川 地名: +たまき 玉城 苗字: +たまき 玉木 苗字: +たまぐすく 玉城 地名: +たまご 卵 名1: +たましい 魂 代1: +たまたま たまたま 副8: +たまち 田町 苗字: +たまち 田町 地名: +たまつくり 玉造 地名: +たまづくり 玉造 地名: +たまな 玉名 地名: +たまに たまに 副1: +たまの 玉野 苗字: +たまの 玉野 地名: +たまのうら 玉之浦 地名: +たまのこし 玉の輿 名1: +たまほ 玉穂 地名: +たまむら 玉村 苗字: +たまむら 玉村 地名: +たまもの 賜 名1: +たまやま 玉山 苗字: +たまやま 玉山 地名: +たまゆ 玉湯 地名: +たまり 玉里 地名: +たまり 溜 名1: +たまわ 賜わ ラ五5: +たまわ 賜 ラ五5: +たみお 民男 名前: +たみお 民雄 名前: +たむら 田村 苗字: +たむら 田村 地名: +たむろ 屯 代4: +ため 為 代1: +ため ため 一段3: +ため 溜め 一段4: +ため 貯め 一段2: +ため 矯め 一段1: +ため 試 サ五8: +ためいき ため息 代1: +ためら ためら ワ五3: +ためん 他面 名11: +ためん 多面 名4: +たも 保 タ五8: +たもつ 保 名前: +たや 絶や サ五5: +たやす たやす 形6: +たよ 頼 ラ五7: +たよう 多様 形動4: +たよう 多用 代5:サ変: +たより 便り 名5: +たよりな 頼りな 形3: +たら 垂ら サ五7: +たら 鱈 名1: +たら 太良 地名: +たらぎ 多良木 地名: +たらず 足らず 接尾1: +たらま 多良間 地名: +たらみ 多良見 地名: +たり 足り 一段1: +たりき 他力 名1: +たりょう 多量 名8: +たる 樽 代1: +たるい 垂井 苗字: +たるい 垂井 地名: +たるみ 垂水 地名: +たるみず 垂水 地名: +たれ 垂れ 一段4: +たれさが 垂れ下が ラ五3: +たれんと タレント 名1: +たろう 太郎 名前: +たろう 田老 地名: +たわ たわ マ五7: +たわー タワー 名1: +たわいな たわいな 形1: +たわごと たわごと 代1: +たわごと 戯言 代1: +たわむれ 戯れ 一段4: +たわら 田原 苗字: +たわら 俵 苗字:代1: +たわらもと 田原本 地名: +たん 単 代1: +たん 胆 代1: +たん 短 代1:接頭1: +たん 痰 代1: +たん 端 代1: +たん 反 代1:助数2: +たん 嘆 ザ変: +たん 炭 代1: +たん 丹 代1: +たん 但 単漢: +たん 坦 単漢: +たん 担 単漢: +たん 探 単漢: +たん 旦 単漢: +たん 歎 単漢: +たん 淡 単漢: +たん 湛 単漢: +たん 箪 単漢: +たん 綻 単漢: +たん 耽 単漢: +たん 蛋 単漢: +たん 誕 単漢: +たん 鍛 単漢: +たん 椴 単漢: +たん 譚 単漢: +たんい 単位 名1: +たんいつ 単一 名8: +たんか 単価 名1: +たんか 短歌 名1: +たんかー タンカー 名1: +たんがん 嘆願 名6: +たんき 短期 名4: +たんき 短気 名8: +たんきゅう 探求 名6: +たんきゅう 探究 名6: +たんく タンク 名1: +たんぐすてん タングステン 名1: +たんけん 探検 名6: +たんけん 探険 名6: +たんげん 単元 名1: +たんこう 単行 名1: +たんこう 炭坑 名1: +たんこう 炭鉱 名1: +たんこう 単項 名1: +たんご 単語 名1: +たんご 丹後 地名: +たんさ 探査 名6: +たんさく 探索 名6: +たんさん 炭酸 名1: +たんざにあ タンザニア 地名: +たんし 端子 名1: +たんしゃ 単車 名1: +たんしゅく 短縮 名6: +たんしょ 短所 名1: +たんしょう 探勝 名6: +たんしょう 短小 名8: +たんしん 単身 名1: +たんしん 短針 名1: +たんじかん 短時間 名1: +たんじゅう 短銃 名1: +たんじゅう 胆汁 名1: +たんじゅん 単純 名8: +たんじょう 誕生 名5: +たんじょうび 誕生日 名2: +たんす 箪笥 名1: +たんすい 淡水 名1: +たんすう 単数 名1: +たんせい 丹精 代4: +たんせい 端正 名8: +たんせき 胆石 名1: +たんせん 単線 名1: +たんぜん 丹前 名1: +たんぜん 端然 名11: +たんそ 炭素 名1: +たんそく 嘆息 名6: +たんたい 単体 名1: +たんたん 淡々 形動2: +たんだい 短大 名1: +たんち 探知 名6: +たんちょう 単調 名8: +たんちょう 短調 名1: +たんてい 探偵 名6: +たんてき 端的 形動1: +たんでん 炭田 名1: +たんとう 担当 名7: +たんとう 短刀 名1: +たんとう 但東 地名: +たんとうちょくにゅう 単刀直入 代1: +たんどく 単独 名1: +たんなる 単なる 連体: +たんなん 丹南 地名: +たんにん 担任 代4: +たんねん 丹念 形動4: +たんの 丹野 苗字: +たんの 端野 地名: +たんば 丹波 苗字: +たんば 丹波 地名: +たんばら 丹原 地名: +たんぱ 短波 名1: +たんぱく タンパク 名1: +たんぱく 蛋白 名1: +たんぱく 淡白 名8: +たんぴょう 短評 名1: +たんぴょう 単票 名1: +たんぴん 単品 名1: +たんぶん 短文 名1: +たんぶん 単文 名1: +たんぺん 短編 名1: +たんぺん 短篇 名1: +たんぼ 田んぼ 代1: +たんぼう 探訪 名6: +たんぽ 担保 名1: +たんまつ 端末 名1: +たんもの 反物 名1: +たんらく 短絡 名6: +たんれい 端麗 形動4: +たんれん 鍛錬 名6: +だ だ サ五7:代1: +だ 出 サ五8: +だ 抱 カ五6: +だ 打 代1: +だ 駄 代1: +だ 唾 単漢: +だ 堕 単漢: +だ 妥 単漢: +だ 雫 単漢: +だ 蛇 単漢: +だ 惰 単漢: +だ 柁 単漢: +だ 舵 単漢: +だ 楕 単漢: +だ 陀 単漢: +だ 騨 単漢: +だーく ダーク 名8: +だーす ダース 助数2: +だい 大 接頭5:接尾1: +だい 第 接頭1: +だい 代 接尾1:助数: +だい 台 代1:助数2: +だい 題 代4: +だい 弟 単漢: +だい 内 単漢: +だい 廼 単漢: +だい 醍 単漢: +だいあ ダイア 名1: +だいあぐらむ ダイアグラム 名1: +だいある ダイアル 名6: +だいあろぐ ダイアログ 名1: +だいあん 代案 名1: +だいあん 大安 地名: +だいいち 第一 一括: +だいえい 大栄 名1: +だいえっと ダイエット 名6: +だいおーど ダイオード 名1: +だいおう 大王 地名: +だいおうじょう 大往生 代4: +だいか 代価 代1: +だいかん 大寒 代1: +だいがえ 代替 名1: +だいがく 大学 名1: +だいがくいん 大学院 名1: +だいがくせい 大学生 名1: +だいきぼ 大規模 名8: +だいきゅう 代休 名1: +だいきん 代金 名1: +だいく 大工 代2: +だいけい 台形 名1: +だいこう 代行 名6: +だいこく 大黒 名1: +だいこん 大根 名1: +だいご 大子 地名: +だいごみ 醍醐味 名1: +だいざい 題材 名1: +だいし 台紙 名1: +だいしゃ 台車 名1: +だいしょ 代書 名6: +だいしょう 代償 名6: +だいしょう 大小 名1: +だいじ 大事 名9: +だいじ 題字 名1: +だいじぇすと ダイジェスト 名1: +だいじょうぶ 大丈夫 代5: +だいじん 大臣 名1: +だいすう 代数 名1: +だいすう 台数 名1: +だいず 大豆 名1: +だいせつ 大雪 地名: +だいせん 大山 地名: +だいたい だいたい 代6: +だいたい 大体 代6: +だいたい 代替 代4: +だいたい 大隊 名1: +だいたん 大胆 形動4: +だいだい 橙 代1: +だいだい 代々 代6: +だいち 大地 名1: +だいち 台地 名1: +だいちょう 台帳 名1: +だいちょう 大腸 名1: +だいとう 大東 地名: +だいとうりょう 大統領 名1: +だいどころ 台所 名2: +だいなし 台無し 名8: +だいなみっく ダイナミック 名8: +だいに 第二 一括: +だいにっぽん 大日本 企業: +だいにゅう 代入 名6: +だいのう 大脳 名1: +だいひつ 代筆 名6: +だいひょう 代表 名6: +だいぶ だいぶ 副1: +だいぶつ 大仏 名1: +だいぶぶん 大部分 代6: +だいべん 代弁 名6: +だいべん 大便 名1: +だいほん 台本 名1: +だいみょう 大名 名2: +だいめい 題名 名1: +だいめいし 代名詞 名1: +だいもく 題目 名1: +だいもん 大門 苗字: +だいもん 大門 地名: +だいや ダイヤ 名1: +だいやく 代役 名1: +だいやぐらむ ダイヤグラム 名1: +だいやもんど ダイヤモンド 名1: +だいやる ダイヤル 名6: +だいよう 代用 名6: +だいり 代理 名6: +だいりせき 大理石 名1: +だいりてん 代理店 名1: +だいれくと ダイレクト 名8: +だいわ 大和 苗字: +だいわ 大和 地名: +だう ダウ 名1: +だうん ダウン 名6: +だうんひる ダウンヒル 名1: +だえき 唾液 名1: +だえん 楕円 名1: +だおれ 倒れ 接尾2: +だか 高 接尾2: +だかい 打開 代4: +だから だから 接続: +だが だが 接続: +だきこ 抱き込 マ五7: +だきしめ 抱きしめ 一段1: +だきしめ 抱き締め 一段1: +だきょう 妥協 名6: +だく 諾 サ変: +だく 濁 単漢: +だくおん 濁音 名1: +だくすい 濁水 名1: +だくてん 濁点 名1: +だくりゅう 濁流 名1: +だけ 岳 接尾2: +だけつ 妥結 名6: +だけど だけど 接続: +だけん 打鍵 代4: +だげき 打撃 名1: +だこう 蛇行 名6: +ださく 駄作 名1: +ださん 打算 名6: +だざいふ 太宰府 地名: +だしあ 出し合 ワ五5: +だしいれ 出し入れ 代4: +だしき 出し切 ラ五1: +だしぬ 出し抜 カ五5: +だしもの 出し物 名1: +だしゃ 打者 名1: +だしん 打診 名6: +だせい 惰性 名1: +だせき 打席 名1: +だそく 蛇足 名1: +だだ だだ 代1: +だちん 駄賃 名2: +だっ 脱 サ変: +だっかい 奪回 名6: +だっかい 脱会 名6: +だっきゃく 脱却 名6: +だっきゅう 脱臼 名6: +だっこう 脱稿 名6: +だっし 脱脂 代1: +だっしゅ ダッシュ 代4: +だっしゅう 脱臭 名6: +だっしゅつ 脱出 名6: +だっしょく 脱色 名6: +だっすい 脱水 名6: +だっせん 脱線 名6: +だっそう 脱走 名6: +だったい 脱退 名6: +だっぴ 脱皮 名6: +だつ 奪 単漢: +だつ 脱 単漢: +だつい 脱衣 名1: +だつごく 脱獄 名6: +だつじ 脱字 名1: +だつぜい 脱税 名6: +だつぼう 脱帽 名6: +だつらく 脱落 名6: +だつりゃく 奪略 名6: +だて 伊達 苗字:代5: +だて 伊達 地名: +だてん 打点 助数2: +だでん 打電 名6: +だとう 妥当 名8:サ変: +だとう 打倒 名6: +だとうせい 妥当性 名1: +だに 谷 接尾4: +だは 打破 名6: +だびんぐ ダビング 名6: +だぶつ ダブつ カ五7: +だぶる ダブル 名1: +だぼく 打撲 名6: +だま 黙 ラ五8: +だま だま サ五7: +だみー ダミー 名1: +だむ ダム 名1: +だめ 駄目 代5: +だめ ダメ 代5: +だめーじ ダメージ 名1: +だらく 堕落 名6: +だらけ だらけ 一段1: +だらしな だらしな 形3: +だらす ダラス 地名: +だりょく 惰力 名1: +だる だる 形3: +だれ だれ 一段1: +だれ 誰 代1: +だん 団 接尾1: +だん 談 接尾1: +だん 談 ザ変: +だん 暖 代1: +だん 段 代1:助数: +だん 壇 代1: +だん 弾 ザ変:助数:接尾1: +だん 断 ザ変: +だん 男 単漢: +だん 椴 単漢: +だん 檀 単漢: +だん 騨 単漢: +だん 灘 単漢: +だん 團 単漢: +だんあつ 弾圧 名6: +だんかい 段階 名1:助数: +だんかい 団塊 名1: +だんがい 弾劾 名6: +だんがい 断崖 名1: +だんがん 弾丸 名1: +だんき 暖気 名1: +だんけつ 団結 名6: +だんげん 断言 名6: +だんこ 断固 代6: +だんこう 断交 名6: +だんこう 断行 名6: +だんご 団子 名2: +だんご だんご 名2: +だんごう 談合 名6: +だんし 男子 名1: +だんしゃく 男爵 名1: +だんじ 男児 名1: +だんじき 断食 名6: +だんじて 断じて 副1: +だんじょ 男女 名1: +だんじょう 壇上 名1: +だんす ダンス 代4: +だんせい 男性 名4: +だんせい 弾性 名1: +だんせん 断線 名6: +だんぜつ 断絶 名6: +だんぜん 断然 副1: +だんそう 断層 名1: +だんぞく 断続 名6: +だんたい 団体 名1: +だんだん だんだん 副2: +だんだん 段々 代6: +だんち 団地 名1: +だんちがい 段違い 代5: +だんちょう 団長 名1: +だんてい 断定 名6: +だんとう 暖冬 名1: +だんどり 段取り 代4: +だんな 旦那 代2: +だんねん 断念 名6: +だんぷ ダンプ 名1: +だんぺん 断片 名4: +だんぼう 暖房 名6: +だんめん 断面 名1: +だんゆう 男優 代2: +だんらく 段落 名1: +だんりゅう 暖流 名1: +だんりょく 弾力 名1: +だんろ 暖炉 名1: +だんわ 談話 名6: +ち 散 ラ五6: +ち 地 接尾1: +ち 値 接尾1: +ち 血 代1: +ち 知 代1: +ち 治 サ変:サ五1: +ち 池 代1: +ち 千 単漢: +ち 茅 単漢: +ち 弛 単漢: +ち 恥 単漢: +ち 智 単漢: +ち 痴 単漢: +ち 稚 単漢: +ち 置 単漢: +ち 致 単漢: +ち 蜘 単漢: +ち 遅 単漢: +ち 馳 単漢: +ち 薙 単漢: +ち 魑 単漢: +ちーず チーズ 名1: +ちーふ チーフ 名1: +ちーむ チーム 名1: +ちあき 千秋 苗字: +ちあん 治安 名1: +ちい 地位 名1: +ちいき 地域 名1: +ちいき 値域 名1: +ちいさ 小さ 形10: +ちいさがた 小県 地名: +ちいさな 小さな 連体: +ちぇーん チェーン 名1: +ちぇす チェス 名1: +ちぇっかー チェッカー 名1: +ちぇっく チェック 名6: +ちぇるのぶいり チェルノブイリ 地名: +ちぇんじ チェンジ 名6: +ちえ 知恵 名2: +ちえこ 千恵子 名前: +ちえこ 千枝子 名前: +ちえこ 智恵子 名前: +ちえん 遅延 名6: +ちえん 地縁 名1: +ちか 近 形10: +ちか 誓 ワ五8: +ちか 地下 名1: +ちか 地価 名1: +ちかい 地階 名1: +ちかく 近く 名2: +ちかく 地殻 名1: +ちかく 知覚 名6: +ちかごろ 近頃 代6: +ちかしつ 地下室 名1: +ちかぢか 近々 副7: +ちかづ 近付 カ五8: +ちかてつ 地下鉄 名1: +ちかみち 近道 名6: +ちかよ 近寄 ラ五7: +ちから 力 名2: +ちからぞえ 力添え 代4: +ちからづよ 力強 形3: +ちからもち 力持ち 代1: +ちかん 痴漢 名6: +ちかん 置換 名6: +ちが 違 ワ五3: +ちがいな 違いな 形2: +ちがえ 違え 一段1: +ちがさき 茅ヶ崎 地名: +ちき 知己 名1: +ちきゅう 地球 名4: +ちきん チキン 名1: +ちぎ 契 ラ五7: +ちく 地区 名1: +ちく 竹 単漢: +ちく 築 単漢: +ちく 畜 単漢: +ちく 蓄 単漢: +ちく 筑 単漢: +ちく 逐 単漢: +ちくいち 逐一 副1: +ちくご 筑後 地名: +ちくさ 千種 地名: +ちくさん 畜産 名1: +ちくし 筑紫 苗字: +ちくし 筑紫 地名: +ちくしの 筑紫野 地名: +ちくじ 逐次 副1: +ちくじょう 築上 地名: +ちくじょう 築城 代4: +ちくせき 蓄積 名6: +ちくぜん 筑前 地名: +ちくぞう 築造 名6: +ちくでん 蓄電 名6: +ちくほ 筑穂 地名: +ちくま 筑摩 地名: +ちくら 千倉 地名: +ちぐはぐ ちぐはぐ 形動4: +ちけい 地形 名1: +ちけっと チケット 名1: +ちけん 知見 名1: +ちこく 遅刻 名7: +ちご 稚児 名1: +ちさい 地裁 名1: +ちさと 千里 地名: +ちさと 千里 名前: +ちし 致死 名1: +ちしお 血潮 名1: +ちしき 知識 名1: +ちしつ 地質 名1: +ちじ 知事 代2: +ちじく 地軸 名1: +ちじょう 地上 名1: +ちじょく 恥辱 名1: +ちじん 知人 名1: +ちすい 治水 名6: +ちすじ 血筋 名1: +ちず 地図 名1: +ちず 智頭 地名: +ちせい 知性 名4: +ちせつ 稚拙 代5: +ちそう 地層 名1: +ちそう 馳走 名7: +ちた 知多 地名: +ちたい 地帯 名1: +ちたい 遅滞 名6: +ちだ 千田 苗字: +ちだい 地代 名1: +ちち 父 名1: +ちち 乳 名2: +ちち 遅々 形動2: +ちちおや 父親 代1: +ちちぶ 秩父 苗字: +ちちぶ 秩父 地名: +ちちゅう 地中 名4: +ちちゅうかい 地中海 地名: +ちぢ 縮 マ五7: +ちぢま 縮ま ラ五7: +ちぢわ 千々石 地名: +ちっそ 窒素 名1: +ちっそく 窒息 名6: +ちっとも ちっとも 副1: +ちっぷ チップ 名1: +ちっぷべつ 秩父別 地名: +ちつ 膣 代1: +ちつ 秩 単漢: +ちつ 窒 単漢: +ちつじょ 秩序 名1: +ちづこ 千鶴子 名前: +ちてい 地底 名1: +ちてき 知的 形動4: +ちてん 地点 名1: +ちとせ 千歳 地名: +ちどり 千鳥 代1: +ちな 因 マ五3: +ちな 知名 地名: +ちなつ 千夏 名前: +ちねつ 地熱 名1: +ちねん 知念 苗字: +ちねん 知念 地名: +ちの 茅野 地名: +ちの 千野 苗字: +ちのう 知能 名1: +ちはい 遅配 名6: +ちば 千葉 苗字: +ちば 千葉 地名: +ちばん 地番 名1: +ちひょう 地表 名1: +ちひろ 千尋 名前: +ちぶ 知夫 地名: +ちぶさ 乳房 代1: +ちへい 地平 名1: +ちへん 地変 名1: +ちべっと チベット 地名: +ちほう 地方 名1: +ちほう 痴呆 名1: +ちまた 巷 代1: +ちみつ 緻密 形動4: +ちみもうりょう 魑魅魍魎 名1: +ちめい 地名 名1: +ちめい 致命 名1: +ちめい 知名 代5: +ちゃ 茶 名2: +ちゃーじ チャージ 代4: +ちゃーたー チャーター 代4: +ちゃーと チャート 名1: +ちゃーはん チャーハン 名1: +ちゃーはん 炒飯 名1: +ちゃいな チャイナ 地名: +ちゃき 茶器 名1: +ちゃく 着 代4:助数2: +ちゃく 嫡 単漢: +ちゃくい 着衣 代4: +ちゃくがん 着眼 代4: +ちゃくしゅ 着手 名6: +ちゃくしゅつ 嫡出 名1: +ちゃくしょく 着色 名6: +ちゃくしん 着信 名6: +ちゃくじつ 着実 名8: +ちゃくすい 着水 名6: +ちゃくせき 着席 名6: +ちゃくそう 着想 名6: +ちゃくだつ 着脱 名6: +ちゃくち 着地 名6: +ちゃくちゃく 着々 副8: +ちゃくにん 着任 名6: +ちゃくばらい 着払 名1: +ちゃくもく 着目 名6: +ちゃくよう 着用 名6: +ちゃくりく 着陸 名6: +ちゃたん 北谷 地名: +ちゃっか 着火 名6: +ちゃっかり ちゃっかり 副3: +ちゃっこう 着工 名6: +ちゃねる チャネル 名1: +ちゃのま 茶の間 名2: +ちゃぺる チャペル 名1: +ちゃや 茶屋 名1: +ちゃりてぃ チャリティ 名1: +ちゃれんじ チャレンジ 名6: +ちゃわん 茶碗 名2: +ちゃん ちゃん 接尾1: +ちゃんす チャンス 名1: +ちゃんと ちゃんと 副4: +ちゃんねる チャンネル 名1: +ちゅーなー チューナー 名1: +ちゅーりんぐ チューリング 名1: +ちゅーん チューン 名1: +ちゅう 中 代1:接頭1:接尾9: +ちゅう 宙 代1: +ちゅう 忠 代1: +ちゅう 注 代1: +ちゅう 虫 代1: +ちゅう 沖 サ変: +ちゅう 厨 単漢: +ちゅう 仲 単漢: +ちゅう 抽 単漢: +ちゅう 昼 単漢: +ちゅう 柱 単漢: +ちゅう 衷 単漢: +ちゅう 註 単漢: +ちゅう 丑 単漢: +ちゅう 酎 単漢: +ちゅう 鋳 単漢: +ちゅう 駐 単漢: +ちゅう 紬 単漢: +ちゅう 肘 単漢: +ちゅう 紐 単漢: +ちゅうい 注意 名7: +ちゅういち 忠一 名前: +ちゅういぶか 注意深 形1: +ちゅういほう 注意報 名1: +ちゅうおう 中央 名1: +ちゅうか 中華 名1: +ちゅうか 中和 地名: +ちゅうかい 仲介 名6: +ちゅうかい 注解 名6: +ちゅうかく 中核 名1: +ちゅうかん 中間 名1: +ちゅうがえり 宙返り 代4: +ちゅうがく 中学 名1: +ちゅうがくせい 中学生 名1: +ちゅうがた 中型 名1: +ちゅうがっこう 中学校 名1: +ちゅうき 中期 名1: +ちゅうき 注記 名6: +ちゅうきぼ 中規模 名8: +ちゅうきゅう 中級 名1: +ちゅうきょう 中京 地名: +ちゅうきょり 中距離 名1: +ちゅうきん 忠勤 名1: +ちゅうきんとう 中近東 名1: +ちゅうぎ 忠義 名1: +ちゅうくう 中空 名1: +ちゅうけい 中継 名6: +ちゅうけん 中堅 名1: +ちゅうげん 中元 名2: +ちゅうこ 中古 名1: +ちゅうこく 忠告 名7: +ちゅうごく 中国 地名: +ちゅうごし 中腰 代1: +ちゅうさい 仲裁 名6: +ちゅうざ 中座 名6: +ちゅうざい 駐在 名6: +ちゅうし 中止 名6: +ちゅうし 注視 名6: +ちゅうしゃ 注射 名6: +ちゅうしゃ 駐車 名6: +ちゅうしゃく 注釈 名6: +ちゅうしゃじょう 駐車場 名1: +ちゅうしゅう 仲秋 名1: +ちゅうしゅつ 抽出 名6: +ちゅうしょう 抽象 名6: +ちゅうしょう 中傷 代4: +ちゅうしょう 中小 名1: +ちゅうしょく 昼食 名1: +ちゅうしん 中心 名4: +ちゅうしん 衷心 名1: +ちゅうじ 中耳 名1: +ちゅうじ 忠治 名前: +ちゅうじつ 忠実 名8: +ちゅうじゅん 中旬 名1: +ちゅうすい 注水 名6: +ちゅうすう 中枢 名1: +ちゅうず 中主 地名: +ちゅうせい 忠誠 名1: +ちゅうせい 中性 名4: +ちゅうせい 中世 名1: +ちゅうせいし 中性子 代1: +ちゅうせん 抽選 名6: +ちゅうぜつ 中絶 名6: +ちゅうそつ 中卒 名1: +ちゅうぞう 鋳造 名6: +ちゅうたい 中退 名6: +ちゅうたい 中隊 名1: +ちゅうだん 中断 名6: +ちゅうちょ 躊躇 名6: +ちゅうと 中途 名1: +ちゅうとう 中等 名1: +ちゅうどく 中毒 名6: +ちゅうなん 仲南 地名: +ちゅうなんべい 中南米 名1: +ちゅうにち 駐日 名6: +ちゅうにゅう 注入 名6: +ちゅうねん 中年 名1: +ちゅうふく 中腹 名1: +ちゅうぶ 中部 名1: +ちゅうぶう 中風 名1: +ちゅうべい 中米 名1: +ちゅうぼう 厨房 名1: +ちゅうもく 注目 名6: +ちゅうもん 注文 名7: +ちゅうや 昼夜 代6: +ちゅうりつ 中立 名6: +ちゅうりゃく 中略 名6: +ちゅうりゅう 中流 名1: +ちゅうるい 忠類 地名: +ちゅうわ 中和 名8:サ変: +ちゅにじあ チュニジア 地名: +ちゆ 治癒 名6: +ちょ 緒 代1: +ちょ 著 代1: +ちょ 樗 単漢: +ちょ 瀦 単漢: +ちょ 猪 単漢: +ちょ 苧 単漢: +ちょ 貯 単漢: +ちょ 箸 単漢: +ちょ 儲 単漢: +ちょーく チョーク 名1: +ちょいと ちょいと 副1: +ちょう 超 接頭5: +ちょう 長 接尾1: +ちょう 長 ザ変: +ちょう 帳 接尾1: +ちょう 庁 接尾1: +ちょう 町 接尾4: +ちょう 蝶 代1: +ちょう 腸 代1: +ちょう 朝 代1: +ちょう 調 接尾1: +ちょう 兆 数詞: +ちょう 丁 代1:助数2: +ちょう 鳥 代1: +ちょう 弔 サ変: +ちょう 徴 サ変: +ちょう 寵 サ変: +ちょう 張 単漢: +ちょう 彫 単漢: +ちょう 諜 単漢: +ちょう 跳 単漢: +ちょう 銚 単漢: +ちょう 帖 単漢: +ちょう 懲 単漢: +ちょう 挑 単漢: +ちょう 暢 単漢: +ちょう 眺 単漢: +ちょう 聴 単漢: +ちょう 凋 単漢: +ちょう 喋 単漢: +ちょう 潮 単漢: +ちょう 牒 単漢: +ちょう 脹 単漢: +ちょう 頂 単漢: +ちょう 蔦 単漢: +ちょう 挺 単漢: +ちょう 重 単漢: +ちょう 澄 単漢: +ちょうあい 寵愛 名6: +ちょうい 弔慰 名7: +ちょうい 弔意 名7: +ちょういん 調印 名7: +ちょうえい 町営 名1: +ちょうえき 懲役 名1: +ちょうえつ 超越 名6: +ちょうおんぱ 超音波 名1: +ちょうか 超過 名6: +ちょうかい 懲戒 名6: +ちょうかい 朝会 名1: +ちょうかい 町会 名1: +ちょうかい 鳥海 地名: +ちょうかく 聴覚 名1: +ちょうかん 朝刊 名1: +ちょうかん 長官 名1: +ちょうき 長期 名4: +ちょうきち 長吉 名前: +ちょうきょう 調教 名6: +ちょうきょり 長距離 名1: +ちょうきん 彫金 名1: +ちょうきん 超勤 名1: +ちょうけし 帳消し 代4: +ちょうこう 兆候 名1: +ちょうこう 聴講 名6: +ちょうこうそく 超高速 名8: +ちょうこく 彫刻 名6: +ちょうごう 調合 名6: +ちょうさ 調査 名7: +ちょうし 調子 名1: +ちょうし 銚子 地名: +ちょうしゃ 庁舎 名1: +ちょうしゅう 徴収 名6: +ちょうしゅう 聴衆 名1: +ちょうしょ 調書 名1: +ちょうしょ 長所 名1: +ちょうしょく 朝食 名1: +ちょうしん 長身 名1: +ちょうじ 弔辞 名1: +ちょうじかん 長時間 名1: +ちょうじゃ 長者 名1: +ちょうじゅ 長寿 名1: +ちょうじょ 長女 名1: +ちょうじょう 頂上 代1: +ちょうじょう 重畳 代4: +ちょうじり 帳尻 代1: +ちょうじん 超人 名4: +ちょうせい 調整 名6: +ちょうせい 調製 名6: +ちょうせい 長生 地名: +ちょうせつ 調節 名6: +ちょうせん 挑戦 名6: +ちょうせん 朝鮮 地名: +ちょうぜん 超然 形動2: +ちょうたつ 調達 名6: +ちょうたん 長短 名1: +ちょうだい 頂戴 代4: +ちょうちょう 町長 代2: +ちょうちょう 蝶々 名1: +ちょうちょう 長調 名1: +ちょうてい 朝廷 名1: +ちょうてい 調停 名6: +ちょうてん 頂点 名1: +ちょうでん 弔電 名1: +ちょうでんどう 超電導 名1: +ちょうど ちょうど 副1: +ちょうど 丁度 副1: +ちょうど 調度 名1: +ちょうない 町内 名1: +ちょうなん 長男 名3: +ちょうなん 長南 苗字: +ちょうなん 長南 地名: +ちょうは 長波 名1: +ちょうはつ 挑発 名6: +ちょうば 帳場 名1: +ちょうばつ 懲罰 名6: +ちょうひょう 帳票 名1: +ちょうふ 調布 地名: +ちょうふく 重複 名6: +ちょうぶつ 長物 名1: +ちょうぶん 長文 名1: +ちょうへい 徴兵 名6: +ちょうへん 長編 名1: +ちょうほう 重宝 名8:サ変: +ちょうほうけい 長方形 名1: +ちょうぼ 帳簿 名1: +ちょうみ 調味 名1: +ちょうみりょう 調味料 代1: +ちょうみん 町民 名1: +ちょうめ 丁目 助数2: +ちょうもん 弔問 名6: +ちょうり 調理 名6: +ちょうりつ 町立 名1: +ちょうりつ 調律 名6: +ちょうりゅう 潮流 名1: +ちょうりょく 張力 名1: +ちょうりょく 聴力 名1: +ちょうれい 朝礼 名1: +ちょうれいぼかい 朝令暮改 代4: +ちょうろう 長老 名1: +ちょうわ 調和 名6: +ちょきん 貯金 名6: +ちょく 直 代5: +ちょく 勅 代1: +ちょく 捗 単漢: +ちょくえい 直営 名6: +ちょくげき 直撃 名6: +ちょくご 直後 代6: +ちょくし 直視 名6: +ちょくしゃ 直射 名6: +ちょくしん 直進 名6: +ちょくせつ 直接 名8: +ちょくせん 直線 名4: +ちょくぜん 直前 代6: +ちょくそう 直送 名6: +ちょくぞく 直属 名6: +ちょくちょく ちょくちょく 副8: +ちょくつう 直通 名6: +ちょくはん 直販 名6: +ちょくばい 直売 名6: +ちょくほうたい 直方体 名1: +ちょくめん 直面 名6: +ちょくやく 直訳 名6: +ちょくりつ 直立 名6: +ちょくりゅう 直流 名6: +ちょくれつ 直列 名1: +ちょこ チョコ 名1: +ちょこ 猪口 名2: +ちょこれーと チョコレート 名1: +ちょさく 著作 名6: +ちょしゃ 著者 名1: +ちょしょ 著書 名1: +ちょじゅつ 著述 名6: +ちょぞう 貯蔵 名6: +ちょちく 貯蓄 名6: +ちょっか 直下 名6: +ちょっかく 直角 名1: +ちょっかつ 直轄 名6: +ちょっかん 直感 名6: +ちょっかん 直観 名6: +ちょっけい 直径 名1: +ちょっけい 直系 名1: +ちょっけつ 直結 名6: +ちょっこう 直行 名6: +ちょっこう 直交 名6: +ちょっと ちょっと 代6: +ちょっぴり ちょっぴり 副1: +ちょめい 著名 形動4: +ちよ 千代 名前: +ちよかわ 千代川 地名: +ちよこ 千代子 名前: +ちよだ 千代田 地名: +ちらか 散らか サ五7:ラ五1: +ちらし チラシ 代1: +ちらつ ちらつ カ五7: +ちらば 散らば ラ五3: +ちらり ちらり 副1: +ちらりと ちらりと 副6: +ちらん 知覧 地名: +ちり 地理 名1: +ちり 塵 名1: +ちり チリ 地名: +ちりばめ 散りばめ 一段1: +ちりゅう 知立 地名: +ちりょう 治療 名6: +ちわ 痴話 名1: +ちん 珍 接頭1:代1: +ちん 賃 接尾1: +ちん 朕 代1: +ちん 鎮 代1: +ちん 陳 ザ変: +ちん 砧 単漢: +ちん 沈 単漢: +ちん 椿 単漢: +ちんあげ 賃上げ 名6: +ちんあつ 鎮圧 名6: +ちんか 沈下 名6: +ちんか 鎮火 名6: +ちんきゃく 珍客 名1: +ちんぎん 賃金 名1: +ちんこう 沈降 名6: +ちんさげ 賃下げ 名6: +ちんざ 鎮座 代4: +ちんしゃ 陳謝 名6: +ちんしゃく 賃借 名6: +ちんじゅ 鎮守 名1: +ちんじゅつ 陳述 名6: +ちんじょう 陳情 名6: +ちんせい 鎮静 名6: +ちんぜい 鎮西 地名: +ちんたい 沈滞 名6: +ちんたい 賃貸 名6: +ちんちょう 珍重 名6: +ちんつう 鎮痛 名1: +ちんでん 沈殿 名6: +ちんぼつ 沈没 名6: +ちんみ 珍味 名1: +ちんもく 沈黙 名6: +ちんれつ 陳列 名6: +つ つ 助数2:カ五2:ラ五3: +つ 継 ガ五7: +つ 次 ガ五1: +つ 接 ガ五3: +つ 注 ガ五1: +つ 付 カ五3: +つ 着 カ五2: +つ 就 カ五7: +つ 突 カ五7: +つ 積 マ五7: +つ 摘 マ五7: +つ 釣 ラ五4: +つ 吊 ラ五4: +つ 津 地名: +つ 都 単漢: +つーりすと ツーリスト 名1: +つーりんぐ ツーリング 名1: +つーる ツール 名1: +つあー ツアー 名1: +つい つい 副1: +つい 対 代1: +つい 墜 単漢: +つい 堆 単漢: +つい 椎 単漢: +つい 槌 単漢: +つい 追 単漢: +つい 鎚 単漢: +ついおく 追憶 名6: +ついか 追加 名6: +ついき 追記 名6: +ついき 築城 地名: +ついきゅう 追及 名6: +ついきゅう 追求 名6: +ついきゅう 追究 名6: +ついげき 追撃 名6: +ついし 追試 名6: +ついしけん 追試験 名1: +ついしん 追伸 名6: +ついじゅう 追従 名6: +ついずい 追随 名6: +ついせき 追跡 名6: +ついそ 追訴 名6: +ついたち 一日 代6: +ついちょう 追徴 名6: +ついで ついで 名1: +ついとう 追悼 名6: +ついとつ 追突 名6: +ついに 遂に 副1: +ついにん 追認 名6: +ついば 啄 マ五7: +ついほう 追放 名6: +ついや 費や サ五5: +ついらく 墜落 名6: +ついろく 追録 名6: +ついん ツイン 名1: +つう 痛 接尾1: +つう 通 接尾1:助数2: +つう 通 ザ変: +つういん 通院 名6: +つうえん 通園 名6: +つうか 通過 名6: +つうか 通貨 名1: +つうかい 痛快 名8: +つうかん 痛感 名6: +つうかん 通関 名6: +つうがく 通学 名6: +つうき 通気 名1: +つうきん 通勤 名6: +つうこう 通行 名6: +つうこく 通告 名6: +つうこん 痛恨 名6: +つうさん 通算 名6: +つうさん 通産 名1: +つうさんしょう 通産省 名1: +つうしょう 通商 名6: +つうしょう 通称 名1: +つうしん 通信 名6: +つうじょう 通常 名1: +つうせつ 通説 名6: +つうせつ 痛切 名8: +つうぞく 通俗 名8: +つうたつ 通達 名6: +つうち 通知 名7: +つうちょう 通帳 名1: +つうどく 通読 名6: +つうねん 通念 名1: +つうふう 通風 名6: +つうほう 通報 名7: +つうやく 通訳 名6: +つうよう 通用 名6: +つうれい 通例 代6: +つうれつ 痛烈 名8: +つうろ 通路 名1: +つうわ 通話 名6: +つえ 杖 代1: +つか 使 ワ五8: +つか 遣 ワ五8: +つか 掴 マ五7: +つか 浸か ラ五5: +つか 漬か ラ五5: +つか 塚 代1: +つか 束 単漢: +つかいこ 使い込 マ五7: +つかいこな 使いこな サ五7: +つかいわけ 使い分け 一段3: +つかえ 仕え 一段1: +つかぐち 塚口 苗字: +つかこし 塚越 苗字: +つかごし 塚越 苗字: +つかさ 司 代1: +つかさど 司 ラ五5: +つかだ 塚田 苗字: +つかはら 塚原 苗字: +つかま 捕ま ラ五2: +つかまえ 捕まえ 一段2: +つかみあ つかみ合 ワ五7: +つかもと 塚本 苗字: +つかれ 疲れ 一段4: +つが 栂 代1: +つが 都賀 地名: +つがる 津軽 地名: +つがわ 津川 苗字: +つき 月 代1: +つき 尽き 一段3: +つき つき 一段1: +つき 槻 単漢: +つきあ 付き合 ワ五8: +つきあげ 突き上げ 一段3: +つきあわせ 突き合わせ 一段1: +つきがけ 月掛け 代1: +つきがせ 月ヶ瀬 地名: +つきがた 月形 地名: +つきぎめ 月極め 名1: +つきさ 突き刺 サ五7: +つきじ 築地 地名: +つきそ 付き添 ワ五7: +つきそい 付添い 名1: +つきそい 付添 名1: +つきたて 月舘 地名: +つきだ 突き出 サ五7: +つきだて 築館 地名: +つきつけ 突き付け 一段3: +つきつめ 突き詰め 一段1: +つきづき 月々 代6: +つきとめ 突き止め 一段1: +つきはな 突き放 サ五5: +つきばらい 月払い 名1: +つきひ 月日 代1: +つきべつ 月別 名1: +つきまと 付きまと ワ五1: +つきよ 月夜 名1: +つきよの 月夜野 地名: +つぎ 次 代1: +つぎお 次男 名前: +つぎこ つぎこ マ五7: +つぎた 継ぎ足 サ五7: +つぎつぎ 次々 副2: +つぎめ 継目 代1: +つく 尽く サ五6: +つく 作 ラ五8: +つく 造 ラ五8: +つく 創 ラ五8: +つくい 津久井 地名: +つくいこ 津久井湖 地名: +つくえ 机 代1: +つくし 筑紫 名1: +つくだ 佃 単漢: +つくづく つくづく 副2: +つくで 作手 地名: +つくば 筑波 地名: +つくば つくば 地名: +つくぼ 都窪 地名: +つくみ 津久見 地名: +つくり 旁 単漢: +つくりあげ 作り上げ 一段3: +つくりあげ 造り上げ 一段3: +つくりかた 作り方 代1: +つくりだ 作り出 サ五5: +つくろ 繕 ワ五5: +つぐ 津具 地名: +つぐな 償 ワ五7: +つけ 付け 一段4: +つけ つけ 一段1: +つけ 漬け 一段3: +つけくわえ 付け加え 一段3: +つけこ 付け込 マ五7: +つけた 付け足 サ五7: +つけち 付知 地名: +つけねら 付け狙 ワ五1: +つけもの 漬物 名2: +つげ 告げ 一段2: +つげ 都祁 地名: +つげ 柘 単漢: +つごう 都合 名7: +つしま 対馬 地名: +つしま 津島 苗字: +つしま 津島 地名: +つじ 辻 苗字:代1: +つじい 辻井 苗字: +つじつま つじつま 代1: +つじつま 辻褄 代1: +つじの 辻野 苗字: +つた 蔦 名1: +つた 蔦 地名: +つたえ 伝え 一段2: +つたな 拙 形2: +つたわ 伝わ ラ五3: +つだ 津田 苗字: +つだぬま 津田沼 地名: +つち 土 代1: +つち 槌 代1: +つち 鎚 代1: +つち 椎 単漢: +つち 壌 単漢: +つちうら 土浦 地名: +つちか 培 ワ五1: +つちだ 土田 苗字: +つちのえ 戊 代1: +つちや 土屋 苗字: +つちやま 土山 地名: +つっかえ 突っ返 サ五5: +つっかか 突っかか ラ五3: +つっこ 突っ込 マ五7: +つっつ 突っつ カ五7: +つっぱ 突っ張 ラ五7: +つっぱし つっ走 ラ五7: +つつ 筒 代1: +つつ 包 マ五8: +つつい 筒井 苗字: +つつが 筒賀 地名: +つつがな つつがな 形2: +つつし 謹 マ五7: +つつし 慎 マ五7: +つつしんで 謹んで 副1: +つつみ 堤 代1: +つつみ 包 代1: +つつみこ 包み込 マ五7: +つづ つづ ラ五7: +つづ 続 カ五4: +つづ 綴 ラ五7: +つづき 綴喜 地名: +つづき 都築 苗字: +つづけ 続け 一段2: +つづみ 鼓 代1: +つとに つとに 副1: +つとま 勤ま ラ五2: +つとむ 努 名前: +つとむ 勉 名前: +つとむ 務 名前: +つとむ 力 名前: +つとむ 勤 名前: +つとめ 努め 一段4: +つとめ 勤め 一段4: +つとめ 務め 一段4: +つとめ 勉め 一段3: +つとめさき 勤め先 代1: +つど 集 ワ五7: +つど 都度 名1: +つな つな ガ五4: +つな 繋 ガ五4: +つな 綱 名1: +つな 津名 地名: +つなが つなが ラ五3: +つなが 繋が ラ五3: +つなぎ 津奈木 地名: +つなげ 繋げ 一段1: +つなしま 綱島 地名: +つなみ 津波 名1: +つなん 津南 地名: +つね つね ラ五3: +つね 常 代1: +つね 恒 単漢: +つねあき 常明 名前: +つねお 恒男 名前: +つねお 恒夫 名前: +つねお 恒雄 名前: +つねお 常男 名前: +つねお 常夫 名前: +つねお 常雄 名前: +つねずみ 常澄 地名: +つねづね 常々 副1: +つの 角 名1: +つの 都濃 地名: +つの 都農 地名: +つの つの ラ五7: +つの 募 ラ五7: +つのだ 角田 苗字: +つば 唾 代1: +つば 鍔 代1: +つばき 椿 代1: +つばさ 翼 代1: +つばた 津幡 地名: +つばめ 燕 代1: +つぶ つぶ サ五7:ラ五7: +つぶ 潰 サ五8: +つぶ 粒 代1:助数2: +つぶや つぶや カ五7: +つぶれ 潰れ 一段2: +つべつ 津別 地名: +つぼ 坪 代1:助数2: +つぼ 壷 代1: +つぼい 坪井 苗字: +つぼすう 坪数 名1: +つぼた 坪田 苗字: +つま つま マ五8:ラ五1: +つま 摘 マ五7: +つま 詰ま ラ五1: +つま 妻 代1: +つま 都万 地名: +つま 嬬 単漢: +つまごい 嬬恋 地名: +つまさき 爪先 名1: +つまず つまず カ五7: +つまみだ つまみ出 サ五7: +つまらな つまらな 形5: +つまり つまり 代6: +つみ 罪 名8: +つみあげ 積み上げ 一段3: +つみかえ 積み替え 一段3: +つみかさな 積み重な ラ五3: +つみかさね 積み重ね 一段3: +つみき 積木 名1: +つみこ 積み込 マ五7: +つみたて 積み立て 一段3: +つみたて 積立て 名1: +つみだ 積み出 サ五7: +つみに 積荷 名1: +つみのこ 積み残 サ五7: +つみほろぼし 罪滅ぼし 代1: +つむ 紡 ガ五3: +つむぎ 紬 代1: +つむら 津村 苗字: +つめ 詰め 一段4: +つめ つめ 一段4: +つめ 爪 代1: +つめあわせ 詰合わせ 一段3: +つめかえ 詰め替え 一段3: +つめかけ 詰めかけ 一段1: +つめこ 詰め込 マ五7: +つめしょ 詰所 名1: +つめた 冷た 形7: +つも 積も ラ五7: +つもり つもり 代1: +つや 艶 代1: +つや 通夜 名2: +つやざき 津屋崎 地名: +つやま 津山 苗字: +つやま 津山 地名: +つゆ 梅雨 代1: +つゆ 露 代1: +つよ 強 形10: +つよき 強気 代5: +つよし 毅 名前: +つよし 強 名前: +つよし 剛 名前: +つよま 強ま ラ五3: +つよめ 強め 一段3: +つら つら 形9: +つら 辛 形9: +つら 面 代1: +つらな 連な ラ五3: +つらぬ 貫 カ五7: +つらぬきとお 貫き通 サ五1: +つらね 連ね 一段1: +つり 釣 代1: +つりー ツリー 名1: +つりあ 釣り合 ワ五7: +つりあが つり上が ラ五3: +つりあげ つり上げ 一段3: +つる 鶴 名1: +つる 蔓 名1: +つる 吊 サ五7: +つる 都留 地名: +つるい 鶴居 地名: +つるおか 鶴岡 苗字: +つるおか 鶴岡 地名: +つるが 敦賀 地名: +つるがしま 鶴ヶ島 地名: +つるぎ 剣 代1: +つるぎ 鶴来 地名: +つるた 鶴田 苗字: +つるだ 鶴田 地名: +つるはし 鶴橋 地名: +つるみ 鶴見 地名: +つれ つれ 一段2: +つれ 連れ 一段4: +つれこ 連れ込 マ五7: +つれそ 連れ添 ワ五3: +つれだ 連れ出 サ五7: +つわの 津和野 地名: +つんぼ 聾 名1: +づかい 使い 接尾2: +づくえ 机 接尾2: +づくり 作り 接尾2: +づけ 付 接尾2: +づけ 漬け 接尾2: +づめ 詰め 接尾2: +づら づら 接尾5: +て 手 名2: +て 手 助数: +て 照 ラ五7: +てーぶる テーブル 名1: +てーぷ テープ 名1: +てーま テーマ 名1: +てあし 手足 代1: +てあつ 手厚 形2: +てあて 手当 名6: +てあら 手荒 形動4: +てあらい 手洗い 名2: +てぃー ティー 名1: +てぃっしゅ ティッシュ 名1: +てい 低 接頭5: +てい 邸 接尾1: +てい 艇 接尾1: +てい 体 代1: +てい 亭 代1: +てい 鼎 代1: +てい 底 代1: +てい 丁 代1: +てい 庭 代1: +てい 呈 代4:サ五1: +てい 訂 サ変: +てい 堤 代1: +てい 停 単漢: +てい 偵 単漢: +てい 剃 単漢: +てい 貞 単漢: +てい 綴 単漢: +てい 鵜 単漢: +てい 定 単漢: +てい 帝 単漢: +てい 廷 単漢: +てい 弟 単漢: +てい 悌 単漢: +てい 抵 単漢: +てい 挺 単漢: +てい 提 単漢: +てい 梯 単漢: +てい 汀 単漢: +てい 碇 単漢: +てい 禎 単漢: +てい 程 単漢: +てい 締 単漢: +てい 諦 単漢: +てい 蹄 単漢: +てい 逓 単漢: +てい 鄭 単漢: +てい 釘 単漢: +てい 薙 単漢: +ていあん 提案 名7: +ていいん 定員 名1: +ていえん 庭園 名1: +ていおう 帝王 名1: +ていおん 低温 名1: +ていおん 低音 名1: +ていか 低下 名6: +ていか 定価 名1: +ていかん 定款 名1: +ていがく 低額 名1: +ていがく 定額 名1: +ていがくねん 低学年 名1: +ていき 定期 名4: +ていき 提起 代4: +ていきあつ 低気圧 名1: +ていきゅう 低級 名8: +ていきゅうび 定休日 名1: +ていきょう 提供 名7: +ていぎ 定義 名6: +ていくう 低空 名1: +ていけい 提携 名6: +ていけい 定型 名1: +ていけつ 締結 名6: +ていげん 提言 名6: +ていげん 低減 名6: +ていこ 貞子 名前: +ていこう 抵抗 名6: +ていこく 定刻 名1: +ていこく 帝国 名1: +ていさい 体裁 名2: +ていさつ 偵察 名6: +ていし 停止 名6: +ていしき 定式 名4: +ていしつ 低湿 名8: +ていしゃ 停車 名6: +ていしゅ 亭主 名1: +ていしゅく 貞淑 名8: +ていしゅつ 提出 名7: +ていしょう 提唱 名6: +ていしょく 定職 名1: +ていしょく 定食 名1: +ていしょく 抵触 名6: +ていじ 提示 名6: +ていじ 呈示 名6: +ていじ 定時 名1: +ていじ 貞治 名前: +ていじせい 定時制 名1: +ていじゅう 定住 名6: +ていじょう 定常 名8: +ていすう 定数 名1: +ていせい 訂正 名7: +ていせい 定性 名1: +ていせつ 定説 名1: +ていせん 停戦 名6: +ていそ 提訴 名6: +ていそう 貞操 名1: +ていそく 低速 名1: +ていぞく 低俗 名8: +ていたい 停滞 名6: +ていたく 邸宅 名3: +ていち 定置 名6: +ていち 低地 名1: +ていちゃく 定着 名6: +ていちょう 低調 名8: +ていちょう 丁重 名10: +ていてん 定点 名1: +ていでん 停電 名6: +ていとう 抵当 名1: +ていど 程度 名1: +ていね 手稲 地名: +ていね テイネ 地名: +ていねい 丁寧 名10: +ていねん 定年 名1: +ていのう 低能 名8: +ていはく 停泊 名6: +ていひょう 定評 名1: +ていへん 底辺 名1: +ていぼう 堤防 名1: +ていめい 低迷 名6: +ていめん 底面 名1: +ていらく 低落 名6: +ていり 低利 名8: +ていり 定理 名1: +ていりつ 低率 名8: +ていりゅう 停留 名1: +ていりゅう 底流 名1: +ていりょう 定量 名4: +ていれ 手入れ 代4: +ていれい 定例 名1: +てうす 手薄 名8: +ておくれ 手遅れ 代1: +ておち 手落ち 代1: +てかげん 手加減 代4: +てがかり 手がかり 代1: +てがき 手書き 代4: +てがけ 手掛け 一段1: +てがた 手形 名1: +てがた 手堅 形3: +てがみ 手紙 名1: +てがら 手柄 名2: +てがる 手軽 名9: +てき 適 サ変:サ五1: +てき 敵 代4: +てき 滴 助数2: +てき 的 接尾6: +てき 笛 単漢: +てき 鏑 単漢: +てき 嫡 単漢: +てき 摘 単漢: +てき 擢 単漢: +てきい 敵意 名1: +てきおう 適応 名6: +てきかく 的確 名8: +てきかく 適格 名8: +てきぎ 適宜 形動1: +てきごう 適合 名6: +てきさす テキサス 地名: +てきざい 適材 名1: +てきし 敵視 名6: +てきしゅつ 摘出 名6: +てきじ 適時 名11: +てきすと テキスト 名1: +てきせい 適正 名8: +てきせい 適性 名1: +てきせつ 適切 名8: +てきたい 敵対 名6: +てきち 適地 名1: +てきちゅう 的中 名6: +てきとう 適当 名8:サ変: +てきど 適度 名8: +てきにん 適任 名8: +てきはつ 摘発 名6: +てきぱき てきぱき 副3: +てきひ 適否 名1: +てきびし 手厳し 形2: +てきほう 適法 名8: +てきやく 適役 名1: +てきよう 摘要 名1: +てきよう 適用 名6: +てきりょう 適量 名1: +てきれい 適齢 名1: +てきれいき 適齢期 名1: +てぎわ 手際 代1: +てくにかる テクニカル 名8: +てくにっく テクニック 名1: +てくの テクノ 名1: +てくのろじー テクノロジー 名1: +てくび 手首 代1: +てぐすね てぐすね 名1: +てぐち 手口 代1: +てこ 梃 代1: +てごろ 手ごろ 形動7: +てごろ 手頃 形動7: +てごわ 手強 形3: +てさき 手先 代1: +てざわり 手触り 代1: +てしお 天塩 地名: +てしかが 弟子屈 地名: +てした 手下 代1: +てじな 手品 代1: +てじま 手島 苗字: +てじゅん 手順 名1: +てじょう 手錠 名1: +てすう 手数 名2: +てすと テスト 名6: +てすり てすり 代1: +てぜま 手狭 代5: +てだすけ 手助け 代4: +てだて 手立て 代1: +てちがい 手違い 代1: +てちょう 手帳 名1: +てぢか 手近 名9: +てっ 徹 サ変:サ五1: +てっかい 撤回 名6: +てっかん 鉄管 名1: +てっきょ 撤去 名6: +てっきょう 鉄橋 名1: +てっきり てっきり 副2: +てっきん 鉄筋 名1: +てっこう 鉄工 名1: +てっこう 鉄鉱 名1: +てっこう 鉄鋼 名1: +てっこつ 鉄骨 名1: +てっしゅう 撤収 名6: +てっせい 哲西 地名: +てっせい 鉄製 名1: +てっせん 鉄線 名1: +てっそく 鉄則 名1: +てったい 撤退 名6: +てってい 徹底 名6: +てっとう 鉄塔 名1: +てっとりばや 手っ取り早 形2: +てっぱい 撤廃 名6: +てっぱん 鉄板 名1: +てっぺい 撤兵 名6: +てっぽう 鉄砲 名1: +てつ 鉄 代1: +てつ 轍 代1: +てつ 綴 単漢: +てつ 哲 単漢: +てつ 徹 単漢: +てつ 撤 単漢: +てつ 迭 単漢: +てつ 姪 単漢: +てつお 哲男 名前: +てつお 哲夫 名前: +てつお 哲雄 名前: +てつお 鉄男 名前: +てつお 鉄夫 名前: +てつお 鉄雄 名前: +てつがく 哲学 名4: +てつけきん 手付金 名1: +てつこ 徹子 名前: +てつごうし 鉄格子 名1: +てつざい 鉄材 名1: +てつた 哲多 地名: +てつだ 手伝 ワ五8: +てつづき 手続き 名6: +てつどう 鉄道 名1: +てつや 哲也 名前: +てつや 徹夜 名6: +てつろう 哲郎 名前: +てづか 手塚 苗字: +てづくり 手作り 代4: +てづま 手詰ま ラ五3: +てどり 手取り 代1: +てなおし 手直し 代4: +てにす テニス 代4: +てぬき 手抜き 代4: +てぬぐい 手ぬぐい 名1: +てのひら 手の平 代1: +てはい 手配 名6: +てはじめ 手始め 代1: +てばな 手放 サ五7: +てびき 手引 名6: +てぶくろ 手袋 代1: +てべんとう 手弁当 代1: +てほん 手本 名2: +てま 手間 代1: +てまえ 手前 名2: +てまど 手間取 ラ五3: +てまわし 手回し 代4: +てみじか 手短 形動4: +てむか 手向か ワ五3: +てもと 手元 名2: +てら てら ワ五1: +てら 寺 名2: +てら 衒 単漢: +てらい 寺井 苗字: +てらうち 寺内 苗字: +てらお 寺尾 苗字: +てらおか 寺岡 苗字: +てらさか 寺坂 苗字: +てらさき 寺崎 苗字: +てらさわ 寺沢 苗字: +てらしま 寺島 苗字: +てらしま 寺島 地名: +てらだ 寺田 苗字: +てらだ 寺田 地名: +てらどまり 寺泊 地名: +てらもと 寺本 苗字: +てらやま 寺山 苗字: +てりつけ 照りつけ 一段3: +てる 輝 名前: +てる 照 単漢: +てるお 輝男 名前: +てるお 輝夫 名前: +てるお 輝雄 名前: +てるお 照男 名前: +てるお 照夫 名前: +てるお 照雄 名前: +てるこ 輝子 名前: +てるこ 照子 名前: +てるみ 照美 名前: +てれ 照れ 一段3: +てれっくす テレックス 名1: +てれぱしー テレパシー 名1: +てれび テレビ 名1: +てれびきょく テレビ局 名1: +てれびじょん テレビジョン 名1: +てわけ 手分け 代4: +てわた 手渡 サ五7: +てん 点 代1:助数2:ザ変: +てん 天 代1: +てん 転 代1:ザ変: +てん 典 代1: +てん 店 接尾1: +てん 店 助数2: +てん 展 接尾1: +てん ・ 代1: +てん 添 単漢: +てん 纏 単漢: +てん 辿 単漢: +てん 甜 単漢: +てん 填 単漢: +てん 貼 単漢: +てん 顛 単漢: +てん 殿 単漢: +てん 槙 単漢: +てんい 転移 名6: +てんいむほう 天衣無縫 代5: +てんいん 店員 代2: +てんえい 天栄 地名: +てんか 天下 名1: +てんか 添加 名6: +てんか 転化 名6: +てんか 転嫁 名6: +てんか 点火 名6: +てんかい 展開 名6: +てんかい 転回 名6: +てんかん 転換 名6: +てんき 天気 名2: +てんき 転機 名1: +てんき 転記 名6: +てんきー テンキー 名1: +てんきょ 転居 名6: +てんきん 転勤 名6: +てんぎょう 転業 名6: +てんぐ 天狗 代1: +てんけい 典型 名4: +てんけん 点検 名6: +てんこ 点呼 名6: +てんこう 天候 名1: +てんこう 転向 名6: +てんこう 転校 名6: +てんごく 天国 名1: +てんさい 天才 名1: +てんさい 天災 名1: +てんさい 転載 代4: +てんさく 添削 名6: +てんざい 点在 名6: +てんし 天使 名1: +てんしゃ 転写 名6: +てんしゅ 店主 名1: +てんしゅつ 転出 名6: +てんしょ 添書 名6: +てんしょく 転職 名6: +てんしょく 天職 名1: +てんしん 転身 名6: +てんしん 転進 名6: +てんしんらんまん 天真爛漫 名8: +てんじ 展示 名6: +てんじ 点字 名1: +てんじょう 天井 名1: +てんじん 天神 名1: +てんじん 天神 地名: +てんすい 天水 地名: +てんすう 点数 名1: +てんせい 天性 名1: +てんせき 転籍 名6: +てんせん 点線 名1: +てんそう 転送 名6: +てんそる テンソル 名1: +てんぞく 転属 名6: +てんたい 天体 名1: +てんち 天地 名1: +てんち 転地 名6: +てんてき 点滴 名6: +てんてこまい てんてこまい 代4: +てんと テント 名1: +てんとう 店頭 名1: +てんとう 転倒 名6: +てんとう 点灯 名6: +てんどう 天童 地名: +てんない 店内 名1: +てんにゅう 転入 名6: +てんにょ 天女 名1: +てんにん 転任 名7: +てんねん 天然 名1: +てんねんとう 天然痘 名1: +てんのう 天皇 名1: +てんのう 天王 地名: +てんのうじ 天王寺 苗字: +てんのうじ 天王寺 地名: +てんのうせい 天王星 名1: +てんばい 転売 名6: +てんぱく 天白 地名: +てんびき 天引き 代4: +てんぴ 天火 名1: +てんぷ 添付 名6: +てんぷく 転覆 名6: +てんぷら てんぷら 名1: +てんぷれーと テンプレート 名1: +てんぺん 転変 名6: +てんぼう 展望 名6: +てんぽ テンポ 名1: +てんぽ 店舗 名1: +てんぽらり テンポラリ 代5: +てんま 天満 苗字: +てんま 天満 地名: +てんまつ 顛末 名1: +てんまばやし 天間林 地名: +てんまんぐう 天満宮 名1: +てんめい 天明 地名: +てんめつ 点滅 名6: +てんもん 天文 名1: +てんよう 転用 名6: +てんらく 転落 名6: +てんらん 展覧 名6: +てんり 天理 名1: +てんり 天理 地名: +てんりゅう 天竜 地名: +てんりゅう 天龍 地名: +で で 接続: +で 出 一段3: +でーた データ 名4: +でーと デート 名6: +でーもん デーモン 名1: +であ 出会 ワ五7: +であし 出足 名1: +である 出歩 カ五5: +でぃくしょなり ディクショナリ 名1: +でぃじたる ディジタル 名1: +でぃすかっしょん ディスカッション 名1: +でぃすく ディスク 名1: +でぃすくりぷた ディスクリプタ 名1: +でぃすけっと ディスケット 名1: +でぃすこ ディスコ 名1: +でぃすてぃねーしょん ディスティネーション 代1: +でぃすぷれー ディスプレー 名1: +でぃすぷれい ディスプレイ 名1: +でぃずにー ディズニー 名1: +でぃっしゅ ディッシュ 名1: +でぃなー ディナー 名1: +でぃれくたー ディレクター 名1: +でぃれくとり ディレクトリ 名1: +でい 泥 単漢: +でいすい 泥酔 名6: +でいり 出入り 代4: +でいりぐち 出入口 代1: +でか でか 形2: +でかけ 出かけ 一段4: +でかせぎ 出稼ぎ 代4: +でき 出来 一段4: +でき でき 一段3: +でき 溺 単漢: +できあい 溺愛 名6: +できあが 出来上が ラ五3: +できごと 出来事 名1: +できし 溺死 名6: +できだか 出来高 名1: +できばえ 出来栄え 代1: +でぐち 出口 名2: +でこーだ デコーダ 名1: +でこーど デコード 名6: +でこぼこ 凸凹 代5:サ変: +でさき 出先 名1: +でざいなー デザイナー 名1: +でざいなーず デザイナーズ 名1: +でざいん デザイン 名6: +でし 弟子 名1: +でじたる デジタル 名8: +でじま 出島 苗字: +でじま 出島 地名: +ですから ですから 接続: +ですく デスク 名1: +でそろ 出そろ ワ五5: +でっか でっか 形6: +でっき デッキ 名1: +でっぱ 出っ歯 代1: +でっぱ 出っぱ ラ五3: +でなお 出直 サ五5: +では では 接続: +でばいす デバイス 名1: +でばっが デバッガ 名1: +でばっぐ デバッグ 名6: +でばん 出番 名1: +でぱーと デパート 名1: +でびゅー デビュー 名6: +でふぉると デフォルト 代1: +でふれ デフレ 名1: +でま デマ 名1: +でま 手間 接尾2: +でまわ 出回 ラ五3: +でむ 出向 カ五2: +でむかえ 出迎え 一段4: +でむら 出村 苗字: +でも でも 接続: +でも デモ 代1: +でもんすとれーしょん デモンストレーション 名1: +でらっくす デラックス 名8: +でりーと デリート 名6: +でるた デルタ 名1: +でわ 出羽 地名: +でん 伝 代1: +でん 田 代1: +でん 殿 代1: +でん 電 代1: +でん 澱 単漢: +でんあつ 電圧 名1: +でんい 電位 名1: +でんえん 田園 名1: +でんか 電化 代4: +でんか 電荷 名1: +でんか 殿下 名1: +でんき 電気 名1: +でんき 電機 名1: +でんき 電器 名1: +でんきゅう 電球 名1: +でんきょく 電極 名1: +でんげき 電撃 名4: +でんげん 電源 名1: +でんこう 電工 名1: +でんごん 伝言 名7: +でんさん 電算 名1: +でんさんき 電算機 名1: +でんし 電子 名1: +でんしゃ 電車 名1: +でんしょう 伝承 名6: +でんしん 電信 名1: +でんじき 電磁気 名1: +でんじは 電磁波 名1: +でんじゅ 伝授 名7: +でんせつ 伝説 名1: +でんせん 電線 名1: +でんせん 伝染 名6: +でんそう 伝送 名6: +でんそう 電装 名1: +でんそう 電送 名6: +でんたく 電卓 名1: +でんたつ 伝達 名7: +でんち 電池 名1: +でんちゅう 電柱 名1: +でんてつ 電鉄 名1: +でんでん 電々 企業: +でんとう 伝統 名4: +でんとう 電灯 名1: +でんどう 電動 名1: +でんねつ 電熱 名1: +でんぱ 電波 名1: +でんぱ 伝播 名6: +でんぱん 伝搬 名6: +でんぴょう 伝票 名1: +でんぶん 伝聞 名6: +でんぶん 電文 名1: +でんぽう 電報 名1: +でんらい 伝来 名6: +でんりゅう 電流 名1: +でんりょく 電力 名1: +でんわ 電話 名5: +でんわきょく 電話局 名1: +と 解 カ五5: +と 溶 カ五1: +と 説 カ五5: +と 研 ガ五6: +と 飛 バ五4: +と 跳 バ五8: +と 富 マ五7: +と 取 ラ五8: +と 捕 ラ五8: +と 採 ラ五8: +と 撮 ラ五8: +と 問 ワ五7: +と と 代1:ラ五8: +と 戸 代1: +と 途 代1: +と 都 代1: +と 徒 代1: +と 兎 単漢: +と 吐 単漢: +と 図 単漢: +と 堵 単漢: +と 塗 単漢: +と 妬 単漢: +と 屠 単漢: +と 斗 単漢: +と 杜 単漢: +と 渡 単漢: +と 登 単漢: +と 菟 単漢: +と 賭 単漢: +と 鍍 単漢: +と 砥 単漢: +と 土 単漢: +とーくん トークン 名1: +とーたる トータル 名8: +とある とある 連体: +とい 問 代1: +とい 樋 代1: +とい 戸井 地名: +とい 土肥 地名: +といあわせ 問い合わせ 一段4: +といかけ 問いかけ 一段3: +といき 吐息 代1: +といれ トイレ 名1: +といれっと トイレット 名1: +とう 当 代1:接頭1: +とう 等 接尾3:助数2: +とう 頭 助数2: +とう 党 接尾1:助数2: +とう 刀 接尾1: +とう 灯 接尾1: +とう 燈 接尾1: +とう 塔 代1: +とう 唐 代1: +とう 島 接尾1: +とう 糖 接尾1: +とう 投 ザ変: +とう 棟 代1: +とう 稲 単漢: +とう 桶 単漢: +とう 兜 単漢: +とう 桐 単漢: +とう 沓 単漢: +とう 十 単漢: +とう 逗 単漢: +とう 登 単漢: +とう 倒 単漢: +とう 搭 単漢: +とう 東 単漢: +とう 嶋 単漢: +とう 悼 単漢: +とう 冬 単漢: +とう 塘 単漢: +とう 套 単漢: +とう 宕 単漢: +とう 凍 単漢: +とう 桃 単漢: +とう 梼 単漢: +とう 盗 単漢: +とう 淘 単漢: +とう 湯 単漢: +とう 涛 単漢: +とう 痘 単漢: +とう 祷 単漢: +とう 統 単漢: +とう 答 単漢: +とう 筒 単漢: +とう 到 単漢: +とう 董 単漢: +とう 蕩 単漢: +とう 藤 単漢: +とう 討 単漢: +とう 謄 単漢: +とう 豆 単漢: +とう 踏 単漢: +とう 逃 単漢: +とう 透 単漢: +とう 鐙 単漢: +とう 陶 単漢: +とう 騰 単漢: +とう 闘 単漢: +とう 読 単漢: +とう 樋 単漢: +とうあん 答案 名1: +とういつ 統一 名6: +とういん 党員 名1: +とういん 東員 地名: +とうえい 投影 名6: +とうえい 東映 企業: +とうえい 東栄 地名: +とうおう 東欧 名1: +とうおんせん 等温線 名1: +とうか 投下 名6: +とうか 等価 名1: +とうか 透過 名6: +とうかい 東海 地名: +とうかい 倒壊 名6: +とうかいどう 東海道 名1: +とうかく 頭角 名1: +とうかつ 統括 名6: +とうかん 投函 名6: +とうがい 当該 名1: +とうがね 東金 地名: +とうき 登記 名6: +とうき 投棄 名6: +とうき 騰貴 名6: +とうき 陶器 名1: +とうき 冬期 名1: +とうき 冬季 名1: +とうき 当期 名1: +とうきゅう 東急 企業: +とうきゅう 投球 名6: +とうきゅう 等級 名1: +とうきょう 東京 地名: +とうきょうと 東京都 県区: +とうきょく 当局 名1: +とうぎ 討議 名6: +とうぎゅう 闘牛 名6: +とうけい 統計 名6: +とうけい 東経 名1: +とうけつ 凍結 名6: +とうげ 峠 代1: +とうげい 陶芸 名1: +とうこう 登校 名6: +とうこう 投稿 名6: +とうこう 投降 名6: +とうこうせん 等高線 名1: +とうこうだい 東工大 名1: +とうこん 闘魂 名1: +とうご 統語 名1: +とうごう 統合 名6: +とうごう 東郷 苗字: +とうごう 東郷 地名: +とうごう 等号 名1: +とうさい 搭載 名6: +とうさく 盗作 名6: +とうさま 父様 名2: +とうさん 倒産 名6: +とうさん 父さん 名2: +とうざ 当座 名1: +とうざい 東西 名1: +とうし 投資 名6: +とうし 凍死 名6: +とうし 透視 名6: +とうし 闘士 名1: +とうし 闘志 名1: +とうしき 等式 名1: +とうしば 東芝 企業: +とうしゃ 当社 名1: +とうしゃ 透写 代4: +とうしゃ 投射 代4: +とうしゃばん 謄写版 名1: +とうしゅ 党首 名1: +とうしゅ 投手 名1: +とうしゅ 当主 名1: +とうしゅう 踏襲 名6: +とうしょ 投書 名6: +とうしょ 当初 名1: +とうしょう 凍傷 名1: +とうしん 答申 名6: +とうしん 投身 名6: +とうしん 等親 助数2: +とうしん 頭身 助数2: +とうしんだい 等身大 代1: +とうじ 当時 名11: +とうじ 冬至 名1: +とうじ 湯治 名6: +とうじき 陶磁器 名1: +とうじしゃ 当事者 名1: +とうじつ 当日 名1: +とうじょう 登場 名6: +とうじょう 搭乗 名6: +とうじょう 東城 地名: +とうじょう 東条 苗字: +とうすい 陶酔 名6: +とうすう 頭数 名1: +とうせい 統制 名6: +とうせい 当世 名1: +とうせい 陶製 名1: +とうせき 投石 名6: +とうせき 透析 名6: +とうせん 当選 名6: +とうぜん 当然 代5: +とうそう 逃走 名6: +とうそう 闘争 名6: +とうそつ 統率 名6: +とうぞく 盗賊 名1: +とうた 淘汰 名6: +とうたつ 到達 名7: +とうだい 灯台 名1: +とうだい 東大 名1: +とうだい 当代 名1: +とうだいじ 東大寺 代1: +とうち 当地 名1: +とうち 倒置 名6: +とうち 統治 名6: +とうちゃく 到着 名7: +とうちゃん 父ちゃん 名2: +とうちょう 登頂 名6: +とうちょう 盗聴 名6: +とうちょく 当直 名6: +とうてい 到底 副1: +とうてん 当店 名1: +とうてん 読点 名1: +とうと 尊 形5:バ五3: +とうと 貴 形5:バ五3: +とうとう とうとう 形動2: +とうとう 等々 接尾1: +とうとつ 唐突 形動4: +とうどり 頭取 名1: +とうない 党内 名1: +とうなん 東南 名1: +とうなん 盗難 名1: +とうにゅう 投入 名6: +とうにん 当人 名1: +とうねん 当年 名1: +とうの 東野 苗字: +とうのしょう 東庄 地名: +とうは 党派 名1: +とうはく 東伯 地名: +とうはつ 頭髪 名1: +とうばん 当番 名2: +とうひ 逃避 名6: +とうひ 当否 名1: +とうひょう 投票 名6: +とうびょう 闘病 名3: +とうふ 豆腐 名2: +とうぶ 頭部 名1: +とうぶ 東部 名1: +とうぶん 当分 代6: +とうぶん 等分 代4:助数2: +とうぶん 糖分 代1: +とうへき 盗癖 名1: +とうへん 等辺 助数2: +とうべつ 当別 地名: +とうべん 答弁 名6: +とうほう 東方 名1: +とうほう 当方 名1: +とうほう 東邦 名1: +とうほう 東宝 企業: +とうほく 東北 名1: +とうほん 謄本 名1: +とうほんせいそう 東奔西走 名6: +とうぼう 逃亡 名6: +とうま 当麻 苗字: +とうま 当麻 地名: +とうみん 冬眠 名6: +とうめい 東名 地名: +とうめい 透明 名8: +とうめん 当面 名6: +とうや 洞爺 地名: +とうやく 投薬 名6: +とうゆ 灯油 名1: +とうよ 投与 名6: +とうよ 東予 地名: +とうよう 東洋 名1: +とうよう 登用 名6: +とうよう 東陽 地名: +とうよう 当用 名1: +とうよこ 東横 名1: +とうらい 到来 名6: +とうらく 当落 名1: +とうりつ 倒立 名6: +とうりゅうもん 登竜門 名1: +とうりょう 等量 名1: +とうろく 登録 名6: +とうろん 討論 名6: +とうわ 東和 地名: +とうわく 当惑 名6: +とえい 都営 名1: +とお 遠 形7: +とお 十 数詞:代1: +とお 通 サ五8:ラ五8: +とおあさ 遠浅 代1: +とおかまち 十日町 地名: +とおく 遠く 代1: +とおざか 遠ざか ラ五3: +とおざけ 遠ざけ 一段1: +とおだ 遠田 苗字: +とおだ 遠田 地名: +とおで 遠出 名6: +とおの 遠の カ五5: +とおの 遠野 地名: +とおやま 遠山 苗字: +とおり とおり 接尾1: +とおり 通り 助数2: +とおりすぎ 通り過ぎ 一段3: +とおる 亨 名前: +とおる 徹 名前: +とおわ 十和 地名: +とか 溶か サ五3: +とか 都下 名1: +とかい 都会 名1: +とかく とかく 副1: +とかしき 渡嘉敷 地名: +とかち 十勝 地名: +とが 尖 ラ五3: +とが 利賀 地名: +とがうち 戸河内 地名: +とがくし 戸隠 地名: +とがし 富樫 苗字: +とがめ 咎め 一段1: +とがわ 戸川 苗字: +とき とき 代1: +とき 時 代1: +とき 鴇 代1: +とき 土岐 地名: +ときえだ 時枝 苗字: +ときお 時男 名前: +ときお 時夫 苗字: +ときお 時雄 名前: +ときおり 時折 代6: +ときがわ 都幾川 地名: +ときた 時田 苗字: +ときどき ときどき 代6: +ときどき 時々 代6: +ときわ 常盤 地名: +ときわ 常葉 地名: +とぎ 富来 地名: +とぎつ 時津 地名: +とぎれ 途切れ 一段3: +とぎん 都銀 名1: +とく 得 代5:サ変: +とく 徳 代1: +とく 特 単漢: +とく 涜 単漢: +とく 匿 単漢: +とく 督 単漢: +とく 禿 単漢: +とく 篤 単漢: +とくい 得意 名9: +とくい 特異 形動4: +とくいげ 得意気 代5: +とくお 徳雄 名前: +とくがわ 徳川 名1:苗字: +とくぎ 特技 名1: +とくさく 得策 名1: +とくさん 特産 名1: +とくしつ 特質 名1: +とくしま 徳島 苗字: +とくしま 徳島 地名: +とくしゅ 特殊 名8: +とくしゅう 特集 名6: +とくしょう 特賞 名1: +とくしょく 特色 名1: +とくしん 特進 名6: +とくしん 得心 代4: +とくじ 徳治 名前: +とくじ 徳地 地名: +とくじゅ 特需 名1: +とくじろう 徳次郎 名前: +とくせい 特性 名1: +とくせい 特製 名6: +とくせつ 特設 名6: +とくせん 特選 名6: +とくそう 特捜 名1: +とくそく 督促 名6: +とくたろう 徳太郎 名前: +とくだ 徳田 苗字: +とくだい 特大 名1: +とくちょう 特徴 名1: +とくちょう 特長 名1: +とくてい 特定 名6: +とくてん 特典 名1: +とくてん 得点 代4: +とくとう 特等 名1: +とくなが 徳永 苗字: +とくに 特に 副1: +とくのしま 徳之島 地名: +とくは 特派 代4: +とくばい 特売 名6: +とくひつ 特筆 代4: +とくべつ 特別 名8: +とくめい 匿名 名1: +とくめい 特命 名1: +とくやく 特約 代4: +とくやま 徳山 苗字: +とくやま 徳山 地名: +とくゆう 特有 名8: +とくよう 徳用 名9: +とくら 都倉 苗字: +とくれい 特例 名1: +とくれい 督励 名6: +とぐら 戸倉 地名: +とけ 融け 一段1: +とけい 時計 名1: +とけつ 吐血 名6: +とげ 刺 代1: +とげ 遂げ 一段2: +とこ 床 代1: +とこ 常 単漢: +とこう 渡航 名6: +とことん とことん 副1: +とこなつ 常夏 名1: +とこなめ 常滑 地名: +とこや 床屋 代2: +ところ ところ 名1: +ところ 所 名1: +ところ 処 名1: +ところ 常呂 地名: +ところが ところが 接続: +ところざわ 所沢 地名: +ところで ところで 接続: +ところどころ 所々 代6: +とさ 土佐 地名: +とさしみず 土佐清水 地名: +とさやま 土佐山 地名: +とさやまだ 土佐山田 地名: +とざ 閉ざ サ五5: +とざわ 戸沢 苗字: +とざん 登山 名6: +とし 都市 名4: +とし 年 名2: +とし 歳 名2: +とし 敏 単漢: +とし 利 単漢: +とし 俊 単漢: +とし 稔 単漢: +としあき 俊昭 名前: +としあき 俊明 名前: +としあき 敏明 名前: +としあき 利昭 名前: +としあき 利明 名前: +としうえ 年上 代1: +としお 俊男 名前: +としお 俊夫 名前: +としお 俊雄 名前: +としお 敏男 名前: +としお 敏夫 名前: +としお 敏雄 名前: +としお 利男 名前: +としお 利夫 名前: +としお 寿男 名前: +としかず 俊一 名前: +としかず 利一 名前: +としかつ 利勝 名前: +としこ 寿子 名前: +としこ 淑子 名前: +としこ 俊子 名前: +としこ 敏子 名前: +としこ 利子 名前: +としごろ 年頃 名2: +としただ 利忠 名前: +としつき 年月 代1: +としはる 俊治 名前: +としはる 利治 名前: +としひこ 俊彦 名前: +としひこ 敏彦 名前: +としひこ 利彦 名前: +としひろ 俊博 名前: +としひろ 敏宏 名前: +としひろ 敏弘 名前: +としふみ 俊文 名前: +としま 年増 代1: +としま 豊島 地名: +としま 利島 地名: +としま 十島 地名: +としみつ 俊光 名前: +としや 俊哉 名前: +としゆき 俊幸 名前: +としゆき 俊行 名前: +としゆき 俊之 名前: +としゆき 敏行 名前: +としゆき 敏之 名前: +としゆき 利幸 名前: +としゆき 利之 名前: +としょ 図書 名1: +としょかん 図書館 名1: +としろう 俊郎 名前: +としろう 敏郎 名前: +としろう 利郎 名前: +としん 都心 名1: +とじ 閉じ 一段2: +とじ 綴じ 一段2: +とじこめ 閉じ込め 一段1: +とじまり 戸締り 代1: +とじょう 途上 名1: +とじょうこく 途上国 名1: +とす 鳥栖 地名: +とぜつ 途絶 名6: +とそう 塗装 名6: +とたん 途端 名1: +とだ 戸田 苗字: +とだ 戸田 地名: +とだえ 途絶え 一段1: +とだな 戸棚 名1: +とち 土地 名1: +とち 栃 代1: +とち 橡 代1: +とちお 栃尾 地名: +とちぎ 栃木 地名: +とちゅう 途中 名1: +とちょう 都庁 名1: +とっかん 突貫 名6: +とっき 突起 名6: +とっきゅう 特急 名1: +とっきょ 特許 名1: +とっくに とっくに 副1: +とっくり 徳利 名1: +とっくん 特訓 名6: +とっけん 特権 名1: +とっこうやく 特効薬 名1: +とっしゅつ 突出 名6: +とっしん 突進 名6: +とっとり 鳥取 地名: +とっぱ 突破 名6: +とっぱつ 突発 名6: +とっぱん 凸版 名1: +とっぷ トップ 名1: +とっぷう 突風 名1: +とつ 嫁 ガ五7: +とつ 凸 代1: +とつ 突 単漢: +とつか 戸塚 苗字: +とつか 戸塚 地名: +とつかわ 十津川 地名: +とつじょ 突如 代6: +とつぜん 突然 代5: +とつにゅう 突入 名6: +とても とても 副1: +ととの 整 ワ五1: +ととの 調 ワ五1: +ととのえ 整え 一段1: +ととのえ 調え 一段1: +とど 届 カ五8: +とどうふけん 都道府県 名1: +とどけ 届 接尾1: +とどけ 届け 一段4: +とどけで 届出 名6: +とどこお 滞 ラ五7: +とどほっけ 椴法華 地名: +とどま 留ま ラ五7: +とどまつ 椴 単漢: +とどめ とどめ 一段3: +とどろ 轟 カ五7: +とどろき 等々力 地名: +とない 都内 名1: +となえ 唱え 一段2: +となき 渡名喜 地名: +となみ 砺波 地名: +となみ 礪波 地名: +となり 隣 代1: +となりあわせ 隣合わせ 一段3: +となん 都南 地名: +とにかく とにかく 副1: +とね 利根 地名: +との 殿 代1: +とのしょう 土庄 地名: +とば 飛ば サ五1: +とば 鳥羽 苗字: +とば 鳥羽 地名: +とばく 賭博 名6: +とばた 戸畑 苗字: +とび 鳶 代1: +とびおり 飛び降り 一段3: +とびか 飛び交 ワ五5: +とびこ 飛び越 サ五7: +とびこ 飛び込 マ五7: +とびこえ 飛び越え 一段3: +とびしま 飛島 苗字: +とびしま 飛島 地名: +とびた 飛田 苗字: +とびだ 飛び出 サ五7: +とびち 飛び散 ラ五7: +とびつ 飛びつ カ五5: +とびの 飛び乗 ラ五7: +とびはね 飛び跳ね 一段1: +とびまわ 飛び回 ラ五5: +とびら 扉 代1: +とぴっくす トピックス 名1: +とべ 砥部 地名: +とべい 渡米 名6: +とほ 徒歩 名1: +とほう 途方 代1: +とぼし 乏し 形5: +とま 止ま ラ五8: +とま 泊ま ラ五8: +とま 留ま ラ五1: +とま 苫 単漢: +とまこまい 苫小牧 地名: +とまた 苫田 地名: +とまと トマト 名1: +とまど 戸惑 ワ五7: +とままえ 苫前 地名: +とまむ トマム 地名: +とまり 泊 地名: +とまりこ 泊り込 マ五7: +とみ 富 代1: +とみ 登美 名前: +とみあい 富合 地名: +とみうら 富浦 苗字: +とみえ 富江 地名: +とみお 富男 名前: +とみお 富夫 名前: +とみお 富雄 名前: +とみおか 富岡 苗字: +とみおか 富岡 地名: +とみおか 冨岡 苗字: +とみか 富加 地名: +とみかわ 富川 苗字: +とみぐすく 豊見城 地名: +とみこ 富子 名前: +とみこ 富美子 名前: +とみさと 富里 苗字: +とみさと 富里 地名: +とみさわ 富沢 苗字: +とみざわ 富沢 苗字: +とみた 富田 苗字: +とみた 冨田 苗字: +とみなが 富永 苗字: +とみに とみに 副1: +とみや 富谷 地名: +とみやま 富山 苗字: +とみん 都民 名1: +とむら 外村 苗字: +とむら 戸村 苗字: +とむら 弔 ワ五3: +とめ 止め 一段4: +とめ 登米 地名: +とめ 泊め 一段2: +とめ 留め 一段1: +とも とも ラ五3: +とも 友 代1: +とも 供 代1: +とも 共 代1: +とも 朋 単漢: +とも 智 単漢: +ともあれ ともあれ 接続: +ともえ 巴 単漢: +ともかく ともかく 代6: +ともかず 友和 名前: +ともこ 知子 名前: +ともこ 智子 名前: +ともこ 朝子 名前: +ともこ 朋子 名前: +ともこ 友子 名前: +ともだち 友達 名2: +ともち 砥用 地名: +ともども 共々 副5: +ともな 伴 ワ五5: +ともに ともに 副1: +ともばたらき 共働き 代4: +ともひこ 友彦 名前: +ともべ 友部 苗字: +ともゆき 智之 名前: +とや 戸谷 苗字: +とやま 富山 地名: +とやま 富山 苗字: +とやま 外山 苗字: +とやまけん 富山県 県区: +とよ 豊 単漢: +とよあき 豊明 名前: +とよあけ 豊明 地名: +とよあけ 豊明 名前: +とようら 豊浦 地名: +とよおか 豊岡 苗字: +とよおか 豊岡 地名: +とよおか 豊丘 地名: +とよかず 豊和 名前: +とよかわ 豊川 苗字: +とよかわ 豊川 地名: +とよこ 豊子 名前: +とよころ 豊頃 地名: +とよさか 豊栄 地名: +とよさと 豊郷 地名: +とよさと 豊里 地名: +とよしな 豊科 地名: +とよしま 豊島 苗字: +とよた 豊田 苗字: +とよた 豊田 地名: +とよた トヨタ 企業: +とよたま 豊玉 地名: +とよだ 豊田 苗字: +とよだ 豊田 地名: +とよつ 豊津 地名: +とよとみ 豊富 地名: +とよなか 豊中 苗字: +とよなか 豊中 地名: +とよね 豊根 地名: +とよの 豊能 地名: +とよの 豊野 地名: +とよはし 豊橋 苗字: +とよはし 豊橋 地名: +とよはま 豊浜 地名: +とよひら 豊平 地名: +とよま 登米 地名: +とよまつ 豊松 地名: +とよやま 豊山 地名: +とら 虎 代1: +とら 寅 代1: +とらい トライ 名6: +とらい 渡来 名6: +とらえ 捉え 一段1: +とらえ 捕らえ 一段1: +とらお 虎雄 名前: +とらお 寅男 名前: +とらお 寅雄 名前: +とらくたー トラクター 名1: +とらっきんぐ トラッキング 名1: +とらっく トラック 名1: +とらっぷ トラップ 名6: +とらのもん 虎ノ門 地名: +とらひめ 虎姫 地名: +とらふぃっく トラフィック 名1: +とらぶる トラブル 名1: +とらわれ 捕らわれ 一段3: +とらんく トランク 名1: +とらんざくしょん トランザクション 名1: +とらんしーばー トランシーバー 名1: +とらんじすた トランジスタ 名1: +とらんぷ トランプ 代4: +とり 鳥 代1: +とり 酉 代1: +とり 禽 単漢: +とりあ 取り合 ワ五7: +とりあえず とりあえず 代6: +とりあえず 取り敢えず 代6: +とりあげ 取り上げ 一段4: +とりあげ とり上げ 一段4: +とりあつか 取り扱 ワ五8: +とりあつかい 取扱 名1: +とりい 鳥居 苗字:名1: +とりいそぎ 取り急ぎ 副1: +とりいれ 取り入れ 一段3: +とりうみ 鳥海 苗字: +とりえ 取り柄 代1: +とりお トリオ 名1: +とりおこな 執り行 ワ五1: +とりおと 取り落と サ五7: +とりかえ 取り替え 一段4: +とりかえ 取り返 サ五7: +とりかか 取り掛か ラ五7: +とりかこ 取り囲 マ五7: +とりかわ 取り交わ サ五7: +とりが トリガ 代1: +とりがー トリガー 代1: +とりきめ 取り決め 一段4: +とりく 取り組 マ五7: +とりくず 取り崩 サ五1: +とりけ 取り消 サ五8: +とりけし 取消 名2: +とりこ 取り込 マ五7: +とりこ 虜 代1: +とりこわ 取り壊 サ五7: +とりごえ 鳥越 苗字: +とりごえ 鳥越 地名: +とりさ 取り去 ラ五1: +とりさげ 取り下げ 一段4: +とりざた 取りざた 代4: +とりしき 取り仕切 ラ五7: +とりしま 取り締ま ラ五7: +とりしまり 取締り 名1: +とりしまりやく 取締役 名1: +とりしらべ 取り調べ 一段3: +とりそろえ 取り揃え 一段1: +とりたて 取り立て 一段3: +とりたて 取立 名1: +とりたに 鳥谷 苗字: +とりだ 取り出 サ五7: +とりちがえ 取り違え 一段3: +とりつ 取り次 ガ五7: +とりつ 取り付 カ五1: +とりつ 都立 名1: +とりつくろ 取り繕 ワ五3: +とりつけ 取り付け 一段4: +とりつけ 取付 名1: +とりで 砦 代1: +とりで 取手 地名: +とりとめ 取り留め 一段3: +とりな 執り成 サ五5: +とりのこ 取り残 サ五7: +とりのぞ 取り除 カ五5: +とりはから 取り計ら ワ五4: +とりはず 取り外 サ五7: +とりはだ 鳥肌 代1: +とりはら 取り払 ワ五5: +とりひき 取引 名5: +とりひきさき 取引先 名2: +とりぷる トリプル 名1: +とりま 取り巻 カ五7: +とりまぜ 取り混ぜ 一段1: +とりまとめ 取りまとめ 一段3: +とりみだ 取り乱 サ五7: +とりも 取り持 タ五7: +とりもど 取り戻 サ五7: +とりもの 捕物 名1: +とりや 鳥屋 地名: +とりやま 鳥山 苗字: +とりょう 塗料 名1: +とりよせ 取り寄せ 一段4: +とりわけ とりわけ 接続: +とるこ トルコ 地名: +とれーしんぐ トレーシング 名1: +とれーす トレース 名6: +とれーど トレード 名6: +とれーなー トレーナー 名1: +とれーにんぐ トレーニング 名6: +とれい トレイ 代1: +とれんど トレンド 名1: +とろ 吐露 代4: +とろう 徒労 名1: +とろけ とろけ 一段1: +とろふぃー トロフィー 代1: +とろんと トロント 地名: +とわだ 十和田 地名: +とわだこ 十和田湖 地名: +とん トン 助数2: +とん 噸 単漢: +とん 屯 単漢: +とん 豚 単漢: +とん 惇 単漢: +とん 敦 単漢: +とん 沌 単漢: +とん 遁 単漢: +とん 頓 単漢: +とんだばやし 富田林 地名: +とんちゃく 頓着 名6: +とんちんかん 頓珍漢 代5: +とんねる トンネル 名1: +とんばら 頓原 地名: +とんび 鳶 代1: +とんぼ とんぼ 名1: +ど 度 接尾1:助数2:サ変: +ど ° 助数2: +ど 戸 接尾2: +ど 土 代1: +ど 奴 単漢: +ど 怒 単漢: +ど 努 単漢: +どーなつ ドーナツ 代1: +どーむ ドーム 名1: +どあ ドア 名1: +どあい 度合 代1: +どい 土井 苗字: +どい 土居 苗字: +どいつ ドイツ 地名: +どいつご ドイツ語 名1: +どう どう 特殊副: +どう 動 ザ変: +どう 胴 代1: +どう 銅 代1: +どう 同 代1:接頭1:ザ変: +どう 道 接尾2: +どう 堂 接尾2: +どう 桐 単漢: +どう 働 単漢: +どう 導 単漢: +どう 憧 単漢: +どう 撞 単漢: +どう 洞 単漢: +どう 瞳 単漢: +どう 童 単漢: +どう 萄 単漢: +どうい 同意 名6: +どうい 同位 名1: +どういう どういう 連体: +どういつ 同一 名8: +どういつし 同一視 代4: +どういん 動員 名6: +どうおん 同音 名1: +どうか どうか 副1: +どうか 銅貨 名1: +どうか 同化 代4: +どうかく 同格 名1: +どうかん 同感 代4: +どうが 動画 名1: +どうがく 同額 名1: +どうがん 童顔 名1: +どうき 動機 名1: +どうき 同期 代4: +どうきゅう 同級 名1: +どうきょ 同居 名6: +どうきょう 同郷 名1: +どうぎ 動議 名1: +どうぎ 同義 名1: +どうぎょう 同業 名3: +どうくつ 洞窟 名1: +どうぐ 道具 名1: +どうけ 道化 名1: +どうけい 同型 名1: +どうけい 同形 名1: +どうけん 同県 名1: +どうげつ 同月 名1: +どうげんざか 道玄坂 地名: +どうこう 動向 名1: +どうこう 同好 名1: +どうこう 同行 名6: +どうこく 同国 名1: +どうさ 動作 名6: +どうさつ 洞察 名6: +どうさん 動産 名1: +どうし 動詞 名4: +どうし 同士 名1: +どうし 同志 名1: +どうし 同氏 名1: +どうし 同市 名1: +どうし 道志 地名: +どうししゃ 同志社 名1: +どうしつ 同室 代4: +どうしつ 同質 名1: +どうして どうして 代6: +どうしゃ 同社 名1: +どうしゅ 同種 名1: +どうしょく 同色 代5: +どうしょくぶつ 動植物 名1: +どうしん 童心 名1: +どうしんえん 同心円 名1: +どうじ 同時 名1: +どうじく 同軸 名1: +どうじつ 同日 名1: +どうじま 堂島 苗字: +どうじま 堂島 地名: +どうじょう 同情 名6: +どうじょう 同乗 代4: +どうじょう 同上 名1: +どうじょう 道場 名1: +どうじん 同人 名1: +どうすう 同数 名1: +どうせ どうせ 副1: +どうせい 同姓 名1: +どうせい 同性 名1: +どうせい 同棲 名6: +どうせい 銅製 名1: +どうせき 同席 名6: +どうせん 導線 名1: +どうぜん 同然 名8: +どうそう 同窓 名1: +どうぞ どうぞ 副1: +どうぞう 銅像 名1: +どうたい 動態 名1: +どうたい 導体 名1: +どうたい 胴体 名1: +どうだん 同断 名8: +どうち 同値 名1: +どうち 同地 名1: +どうちゅう 道中 名1: +どうちょう 同調 名6: +どうちょう 道庁 名1: +どうてい 道程 名1: +どうてい 童貞 名1: +どうてき 動的 形動4: +どうてん 動転 名6: +どうてん 同点 名1: +どうとう 同等 名8: +どうとく 道徳 名4: +どうとんぼり 道頓堀 地名: +どうどう 堂々 形動2: +どうにか どうにか 副4: +どうにゅう 導入 名6: +どうねん 同年 名1: +どうはい 同輩 名1: +どうはん 同伴 名7: +どうひょう 道標 代1: +どうふう 同封 名6: +どうぶつ 動物 名4: +どうみゃく 動脈 名1: +どうめい 同盟 名1: +どうめい 同名 名1: +どうも どうも 副1: +どうやら どうやら 副1: +どうゆう 同友 名1: +どうよう 同様 名8: +どうよう 動揺 名6: +どうよう 童謡 名1: +どうらく 道楽 名1: +どうらん 動乱 名6: +どうり 道理 代1: +どうりょう 同僚 名1: +どうりょく 動力 名1: +どうるい 同類 名1: +どうれつ 同列 名1: +どうろ 道路 名1: +どうわ 童話 名1: +どうわ 同和 名1: +どおり 通り 接尾2: +どかた 土方 名1: +どき 時 接尾2: +どき 土器 名1: +どきどき ドキドキ 副9: +どきゅめんと ドキュメント 名1: +どきょう 度胸 名1: +どく 毒 代4: +どく 独 代1: +どく 読 単漢: +どくえん 独演 名6: +どくがく 独学 名6: +どくさい 独裁 名6: +どくしゃ 読者 名1: +どくしょ 読書 名6: +どくしょう 独唱 代4: +どくしん 独身 名1: +どくじ 独自 名8: +どくせい 毒性 名1: +どくせん 独占 名6: +どくそ 毒素 名1: +どくそう 独創 名6: +どくそう 独走 名6: +どくそう 独奏 名6: +どくたー ドクター 名1: +どくだん 独断 名6: +どくとく 独特 名8: +どくどくし 毒々し 形3: +どくは 読破 名6: +どくはく 独白 名6: +どくほん 読本 名1: +どくやく 毒薬 名1: +どくりつ 独立 名6: +どくりょく 独力 名1: +どけん 土建 名1: +どこ どこ 代1: +どこ 何処 代1: +どこか どこか 代6: +どしどし どしどし 副2: +どしゃ 土砂 名1: +どじょう 土壌 名1: +どじょう どじょう 名1: +どじょう 鯲 単漢: +どじょう 鰌 単漢: +どすう 度数 名1: +どせい 土星 名1: +どそく 土足 名1: +どぞう 土蔵 名1: +どだい 土台 名1: +どちら どちら 代1: +どっか どっか 代6: +どっかい 読解 名6: +どっく ドック 名1: +どっさり どっさり 副2: +どっしり どっしり 副3: +どっち どっち 代1: +どっと どっと 副1: +どっと ドット 名1: +どて 土手 名1: +どとう 怒涛 名1: +どな 怒鳴 ラ五7: +どなた どなた 代1: +どなべ 土鍋 名1: +どなり 土成 地名: +どにち 土日 代1: +どの どの 代6: +どの 殿 接尾2: +どばし 土橋 苗字: +どひょう 土俵 名1: +どびゅっしー ドビュッシー 代1: +どべい 土塀 代1: +どぼく 土木 名1: +どま 土間 名1: +どめいん ドメイン 名1: +ども ども 接尾2: +ども ども ラ五3: +ども 吃 ラ五7: +ども 共 接尾2: +どよう 土曜 名1: +どよう 土用 名1: +どようび 土曜日 名1: +どらい ドライ 名8: +どらいば ドライバ 名1: +どらいばー ドライバー 名1: +どらいぶ ドライブ 名6: +どらっぐ ドラッグ 名1: +どらふと ドラフト 名1: +どらま ドラマ 名1: +どりあ ドリア 名1: +どりょく 努力 名7: +どる ドル 助数2: +どるびー ドルビー 名1: +どれ どれ 代1: +どれい 奴隷 名1: +どれっしんぐ ドレッシング 名1: +どろ 泥 代1: +どろっぷ ドロップ 名1: +どろどろ 泥々 副9: +どろぬま 泥沼 名1: +どん 鈍 代1: +どん 丼 代1: +どん 呑 代1: +どん 曇 単漢: +どん 貪 単漢: +どんか 鈍化 代4: +どんかん 鈍感 名8: +どんぐり ドングリ 代1: +どんこう 鈍行 名1: +どんてん 曇天 名1: +どんどん どんどん 副2: +どんな どんな 代1:連体: +どんよく 貪欲 代5: +な な 形2:サ五7:ラ五7: +な 成 サ五5:ラ五5: +な 為 サ五5: +な 泣 カ五7: +な 鳴 カ五7:ラ五2: +な 凪 ガ五3: +な 無 形2: +な 名 代1: +な 菜 代1: +な 奈 単漢: +な 那 単漢: +な 納 単漢: +ない 内 接尾1: +ないーぶ ナイーブ 名8: +ないえ 奈井江 地名: +ないか 内科 名1: +ないかく 内閣 名1: +ないがい 内外 名1: +ないがしろ 蔑ろ 形動1: +ないきょく 内局 名1: +ないきん 内勤 名6: +ないこう 内向 代4: +ないこく 内国 名1: +ないざい 内在 名6: +ないしゅっけつ 内出血 代4: +ないしょ 内緒 名1: +ないしょく 内職 名6: +ないしん 内心 名1: +ないしん 内申 名6: +ないしん 内診 名6: +ないじ 内示 名6: +ないじゅ 内需 名1: +ないじょう 内情 名1: +ないせい 内政 名1: +ないせい 内省 名6: +ないせき 内積 名1: +ないせつ 内接 名6: +ないせん 内戦 名1: +ないせん 内線 名1: +ないそう 内装 名1: +ないぞう 内蔵 名6: +ないぞう 内臓 名1: +ないだく 内諾 名6: +ないち 内地 名1: +ないてい 内定 名6: +ないと ナイト 名1: +ないとう 内藤 苗字: +ないふ ナイフ 名1: +ないふん 内紛 名1: +ないぶ 内部 名1: +ないみつ 内密 名8: +ないめん 内面 名4: +ないやく 内約 代4: +ないよう 内容 名4: +ないらん 内乱 名1: +ないりく 内陸 名1: +ないろん ナイロン 名1: +なう ナウ 形1: +なえ 苗 代1: +なえ 萎え 一段1: +なえば 苗場 地名: +なお 直 サ五8:ラ五3: +なお 治 サ五7:ラ五8: +なお なお 副1:サ五7:ラ五3: +なお 尚 副1: +なお 猶 副1: +なお 奈緒 名前: +なおい 直井 苗字: +なおいり 直入 地名: +なおえ 直江 名前: +なおえつ 直江津 地名: +なおかわ 直川 地名: +なおき 直樹 名前: +なおこ 尚子 名前: +なおこ 直子 名前: +なおこ 奈保子 名前: +なおさら なおさら 副8: +なおしま 直島 地名: +なおじ 直治 名前: +なおと 直人 名前: +なおみ 尚美 名前: +なおみ 直美 名前: +なおや 直也 名前: +なおゆき 直行 名前: +なおよし 直義 名前: +なか 中 名1: +なか 仲 名1: +なか 那珂 地名: +なか 那賀 地名: +なかい 中井 苗字: +なかいず 中伊豆 地名: +なかうおぬま 中魚沼 地名: +なかお 中尾 苗字: +なかかわね 中川根 地名: +なかかんばら 中蒲原 地名: +なかがい 仲買 名1: +なかがみ 中頭 地名: +なかがわ 中川 苗字: +なかがわ 中川 地名: +なかがわ 那賀川 地名: +なかぎょう 中京 地名: +なかくびき 中頚城 地名: +なかぐすく 中城 地名: +なかこま 中巨摩 地名: +なかごう 中郷 地名: +なかごめ 中込 苗字: +なかごろ 中ごろ 名1: +なかさつない 中札内 地名: +なかさと 中里 地名: +なかざと 中里 苗字: +なかざと 中里 地名: +なかざと 仲里 名1: +なかざわ 中沢 苗字: +なかしべつ 中標津 地名: +なかしま 中島 苗字: +なかしま 中島 地名: +なかじま 中島 苗字: +なかじま 中嶋 苗字: +なかじょう 中条 苗字: +なかすじ 中筋 苗字: +なかせん 中仙 地名: +なかそね 中曽根 苗字: +なかた 中田 苗字: +なかたがい 仲たがい 代4: +なかたど 仲多度 地名: +なかたに 中谷 苗字: +なかたに 仲谷 苗字: +なかたね 中種子 地名: +なかだ 中田 苗字: +なかだ 仲田 苗字: +なかだいら 中平 苗字: +なかだち 仲立ち 代4: +なかだるみ 中だるみ 代4: +なかつ 中津 地名: +なかつえ 中津江 地名: +なかつがる 中津軽 地名: +なかつがわ 中津川 地名: +なかつぎ 中継ぎ 代4: +なかとさ 中土佐 地名: +なかとみ 中富 地名: +なかとんべつ 中頓別 地名: +なかなおり 仲直り 代4: +なかなか なかなか 副7: +なかにいかわ 中新川 地名: +なかにいだ 中新田 地名: +なかにし 中西 苗字: +なかには 中には 副1: +なかにも 中にも 副1: +なかにわ 中庭 名1: +なかね 中根 苗字: +なかの 中野 苗字: +なかの 中野 地名: +なかのくち 中之口 地名: +なかのしま 中之島 地名: +なかのじょう 中之条 地名: +なかはら 中原 苗字: +なかはら 中原 地名: +なかば 半ば 代6: +なかばやし 中林 苗字: +なかばる 中原 地名: +なかふらの 中富良野 地名: +なかへじ 中辺路 地名: +なかほど 中程 名1: +なかま 仲間 名2: +なかま 中間 地名: +なかまち 中町 苗字: +なかみ 中身 代1: +なかみち 中道 苗字: +なかみち 中道 地名: +なかみなと 那珂湊 地名: +なかむら 中村 苗字: +なかむら 中村 地名: +なかむら 仲村 苗字: +なかもと 中本 苗字: +なかや 中谷 苗字: +なかやま 中山 苗字: +なかよし 仲良し 代1: +なかんずく なかんずく 副1: +なが 流 サ五8: +なが 長 形11:接頭1: +なが 永 形11: +なが 那賀 地名: +なが 名賀 地名: +ながあめ 長雨 代1: +ながい 永井 苗字: +ながい 長井 苗字: +ながい 長井 地名: +ながい 長居 代4: +ながいき 長生き 代4: +ながいずみ 長泉 地名: +ながうた 長唄 代1: +ながお 長尾 苗字: +ながお 長尾 地名: +ながおか 長岡 苗字: +ながおか 長岡 地名: +ながおかきょう 長岡京 地名: +ながくて 長久手 地名: +ながぐつ 長靴 代1: +ながさか 長坂 苗字: +ながさき 長崎 苗字: +ながさき 長崎 地名: +ながさわ 長沢 苗字: +ながしこ 流し込 マ五7: +ながしま 長島 苗字: +ながしま 長嶋 苗字: +ながしま 永島 苗字: +ながす 長洲 地名: +ながせ 永瀬 苗字: +ながせ 長瀬 苗字: +ながそで 長袖 代1: +ながた 永田 苗字: +ながた 長田 苗字: +ながたらし 長たらし 形3: +ながつだ 長津田 苗字: +ながつだ 長津田 地名: +ながつづき 長続き 代4: +ながと 長門 苗字: +ながと 長門 地名: +ながとろ 長瀞 地名: +ながなが 長々 副2: +ながぬま 長沼 苗字: +ながねん 長年 代6: +ながねん 永年 代6: +ながの 長野 苗字: +ながの 長野 地名: +ながの 永野 苗字: +ながのはら 長野原 地名: +ながはま 長浜 苗字: +ながはま 長浜 地名: +ながび 長引 カ五7: +ながまつ 永松 苗字: +ながめ 眺め 一段3: +ながもち 長持ち 代4: +ながや 長屋 名1: +ながやま 永山 苗字: +ながよ 長与 地名: +ながら 長柄 地名: +ながら 乍 単漢: +ながらく 長らく 代6: +ながれ 流れ 一段4: +ながれこ 流れ込 マ五7: +ながれだ 流れ出 サ五7: +ながれやま 流山 苗字: +ながれやま 流山 地名: +ながわ 奈川 地名: +ながわ 名川 地名: +なきじん 今帰仁 地名: +なぎ 凪 名1: +なぎ 奈義 地名: +なぎさ 渚 代1: +なぎそ 南木曾 地名: +なく なく サ五5: +なく 無く サ五5: +なく 亡く サ五5: +なぐ 殴 ラ五8: +なぐさ 慰 マ五4: +なぐさめ 慰め 一段4: +なぐも 南雲 苗字: +なぐり 名栗 地名: +なげ 嘆 カ五4: +なげ 投げ 接尾1:一段2: +なげいれ 投げ入れ 一段1: +なげかけ 投げかけ 一段1: +なげかわし 嘆かわし 形3: +なげこ 投げ込 マ五7: +なげだ 投げ出 サ五5: +なげつけ 投げつけ 一段1: +なげやり 投げやり 代5: +なこうど 仲人 名2: +なご 名護 地名: +なご 和 マ五7: +なごや 名古屋 地名: +なごやか 和やか 形動4: +なごり 名残 名2: +なさ なさ ラ五1: +なさけ 情け 代1: +なさけな 情けな 形5: +なさけぶか 情け深 形3: +なさそう なさそう 形動4: +なし 梨 代1: +なし 無し 代1: +なしとげ 成し遂げ 一段1: +なしょなる ナショナル 名1: +なじ なじ マ五8: +なじ 馴染 マ五8: +なじ 詰 ラ五7: +なす なす ラ五5:代1: +なす 那須 地名: +なぜ なぜ 形動1:一段1: +なぜ 何故 形動1: +なぜ 名瀬 地名: +なぞ 謎 代1: +なたしょう 名田庄 地名: +なだ 灘 地名: +なだか 名高 形2: +なださき 灘崎 地名: +なだち 名立 地名: +なだめ なだめ 一段1: +なだれ 雪崩 名1: +なちかつうら 那智勝浦 地名: +なちす ナチス 地名: +なっとう 納豆 名1: +なっとく 納得 代4: +なつ 夏 代1: +なつ 夏 接頭1: +なつ 捺 単漢: +なついん 捺印 名7: +なつかし 懐かし 形9:マ五7: +なつこ 夏子 名前: +なつば 夏場 名1: +なつふく 夏服 名1: +なつむき 夏向き 名1: +なつめ 棗 名1: +なつもの 夏物 名1: +なつやすみ 夏休み 名1: +なつやま 夏山 苗字: +なつやま 夏山 名1: +なづけ 名付け 一段3: +なで 撫で 一段2: +なでおろ なでおろ サ五5: +なとり 名取 苗字: +なとり 名取 地名: +なとりうむ ナトリウム 名1: +など など 接尾1: +など 等 接尾1: +ななえ 七飯 地名: +ななお 七尾 地名: +ななかい 七会 地名: +ななつか 七塚 地名: +ななめ 斜め 代1: +ななやま 七山 地名: +なに 何 代3: +なにげな 何気な 形2: +なにごと 何事 代1: +なにしろ なにしろ 副1: +なにしろ 何しろ 副1: +なにせ 何せ 副1: +なにとぞ 何卒 副1: +なにぶん 何分 副1: +なにもの 何者 代1: +なにゆえ 何故 副7: +なにわ 浪速 地名: +なの 名乗 ラ五7: +なのか 七日 代6: +なは 那覇 地名: +なはり 奈半利 地名: +なばり 名張 地名: +なふだ 名札 名1: +なべ 鍋 名2: +なべもの 鍋物 名1: +なま 生 代1: +なま 鈍 ラ五3: +なまいき 生意気 名8: +なまえ 名前 名2: +なまぐさ 生臭 形4: +なまけ 怠け 一段3: +なまず 鯰 代1: +なまなまし 生々し 形3: +なまみ 生身 代1: +なまり 鉛 代1: +なみ 波 代1: +なみ 並 代1: +なみ 浪 単漢: +なみあい 浪合 地名: +なみあし 並足 名1: +なみえ 浪江 地名: +なみおか 浪岡 地名: +なみかぜ 波風 名1: +なみかた 波方 地名: +なみかわ 並河 苗字: +なみき 並木 名1: +なみだ 波立 タ五7: +なみだ 涙 名1: +なみだぐ 涙ぐ マ五5: +なみだぐまし 涙ぐまし 形2: +なみなみ 並々 代1: +なみの 波野 地名: +なみはずれ 並外れ 一段1: +なみま 波間 代1: +なむ 南無 名1: +なめ なめ 一段2:サ五7: +なめ 嘗め 一段2: +なめかた 行方 苗字: +なめかわ 滑川 苗字: +なめがた 行方 地名: +なめらか なめらか 形動4: +なめらか 滑らか 形動4: +なめりかわ 滑川 苗字: +なめりかわ 滑川 地名: +なや 悩 マ五8: +なよろ 名寄 地名: +なら 慣ら サ五7: +なら 均 サ五7: +なら 鳴ら サ五3: +なら 並 バ五4: +なら 習 ワ五8: +なら 奈良 地名: +なら 楢 代1: +ならいごと 習い事 名1: +ならお 奈良尾 地名: +ならかわ 楢川 地名: +ならしの 習志野 地名: +ならでは ならでは 副7: +ならは 楢葉 地名: +ならびに ならびに 接続: +ならべ 並べ 一段1: +ならわ 慣わ サ五7: +なり 也 単漢: +なりきん 成金 名1: +なりた 成り立 タ五7: +なりた 成田 苗字: +なりた 成田 地名: +なりひび 鳴り響 カ五1: +なります 成増 地名: +なりゆ 成り行 カ五3: +なりわ 成羽 地名: +なりわい 生業 代1: +なる 奈留 地名: +なるこ 鳴子 地名: +なるさわ 鳴沢 地名: +なるせ 成瀬 苗字: +なるたけ なるたけ 副1: +なると 鳴門 地名: +なるとう 成東 地名: +なるべく なるべく 代6: +なるほど なるほど 代6: +なれ 慣れ 一段4: +なれ 馴れ 一段4: +なれなれし なれなれし 形3: +なわ 縄 代1: +なわ 名和 地名: +なわて 畷 単漢: +なわばり 縄張 代1: +なん 何 代1:数詞: +なん 難 接尾1:ザ変: +なん 男 代1: +なん 軟 代1: +なん 南 単漢: +なん 楠 単漢: +なんい 難易 名1: +なんい 南緯 名1: +なんか 南下 代4: +なんか 軟化 代4: +なんかい 難解 代5: +なんかい 南海 名1: +なんかん 難関 名1: +なんかん 南関 地名: +なんがい 南外 地名: +なんきょく 南極 名1: +なんきょく 難局 名1: +なんきん 南京 地名: +なんぎ 難儀 名8:サ変: +なんこう 難航 名6: +なんこう 軟膏 名1: +なんこう 南光 地名: +なんこく 南国 地名: +なんこつ 軟骨 名1: +なんごう 南郷 地名: +なんごく 南国 名1: +なんごく 南国 地名: +なんざん 南山 地名: +なんしき 軟式 名1: +なんしつ 軟質 名1: +なんしょ 難所 名1: +なんしょく 難色 名1: +なんじ 何時 一括: +なんじ 難事 名1: +なんじ 汝 名1: +なんじ 爾 単漢: +なんじゃく 軟弱 名8: +なんじゅう 難渋 代5:サ変: +なんじょう 南条 苗字: +なんじょう 南条 地名: +なんすい 軟水 名1: +なんせい 南西 名1: +なんせい 軟性 名1: +なんせい 南勢 地名: +なんせんす ナンセンス 代5: +なんぞ 何ぞ 副1: +なんたん 南端 名1: +なんだい 難題 名1: +なんだん 南淡 地名: +なんちょう 難聴 名1: +なんて なんて 接尾1:副1: +なんてん 難点 名1: +なんで なんで 副1: +なんでも なんでも 副1: +なんと なんと 副1: +なんとう 南島 地名: +なんとう 南東 名1: +なんとか 何とか 副1: +なんとなく なんとなく 副1: +なんど 何度 一括: +なんど 納戸 代1: +なんなく 難なく 副1: +なんねん 何年 一括: +なんのう 南濃 地名: +なんば 難波 苗字: +なんば 難波 地名: +なんばー ナンバー 名1: +なんぱ 軟派 名6: +なんぱ 難破 名6: +なんびょう 難病 名1: +なんぴと 何人 代1: +なんぴょうよう 南氷洋 名1: +なんぶ 南部 名1: +なんべい 南米 名1: +なんぼく 南北 名1: +なんぽう 南方 名1: +なんぽろ 南幌 地名: +なんみん 難民 名1: +なんもく 南牧 地名: +なんもん 難問 名1: +なんよう 南陽 地名: +なんら なんら 代6: +なんら 何ら 代6: +なんら 何等 代6: +に 荷 代1: +に 似 一段3: +に 煮 一段3: +に 二 一括: +に 児 単漢: +に 爾 単漢: +に 丹 単漢: +に 尼 単漢: +に 迩 単漢: +に 邇 単漢: +にーず ニーズ 名1: +にあ 似合 ワ五4: +にあげ 荷揚げ 代4: +にあみす ニアミス 名1: +にい 新 単漢: +にいかっぷ 新冠 地名: +にいかわ 新川 苗字: +にいがた 新潟 地名: +にいさと 新里 苗字: +にいさと 新里 地名: +にいさん 兄さん 名2: +にいざ 新座 地名: +にいざと 新里 苗字: +にいじま 新島 苗字: +にいじま 新島 地名: +にいつ 新津 苗字: +にいつ 新津 地名: +にいつる 新鶴 地名: +にいはま 新居浜 地名: +にいはり 新治 地名: +にいはる 新治 地名: +にいみ 新見 地名: +にいみ 新美 苗字: +にう 丹生 苗字: +にう 丹生 地名: +にうけ 荷受け 代4: +にえ 煮え 一段1: +にお 臭 ワ五7: +にお 匂 ワ五7: +にお 仁尾 地名: +にかほ 仁賀保 地名: +にかよ 似通 ワ五1: +にからぐあ ニカラグア 地名: +にが 苦 形8:ラ五3: +にが 逃が サ五7: +にがおえ 似顔絵 代1: +にがて 苦手 名8: +にがにがし 苦々し 形3: +にがわ 仁川 地名: +にがわらい 苦笑い 代4: +にき 仁木 苗字: +にぎ 握 ラ五8: +にぎやか 賑やか 形動4: +にぎりつぶ 握りつぶ サ五7: +にぎわ 賑わ サ五7:ワ五8: +にく にく 形5:マ五7: +にく 憎 形5:マ五7: +にく 肉 名2: +にくがん 肉眼 名1: +にくぎゅう 肉牛 名1: +にくしみ 憎しみ 代1: +にくしょく 肉食 名6: +にくしん 肉親 名1: +にくせい 肉声 名1: +にくたい 肉体 名4: +にくはく 肉薄 名6: +にくらし 憎らし 形5: +にぐるま 荷車 代1: +にげ 逃げ 一段4: +にげこ 逃げ込 マ五7: +にげだ 逃げ出 サ五7: +にげみち 逃げ道 代1: +にこ 煮込 マ五7: +にこちん ニコチン 名1: +にこにこ ニコニコ 副9: +にこやか にこやか 形動4: +にご 濁 サ五3:ラ五3: +にごら 濁ら サ五1: +にし 西 苗字:代1: +にし 西 接頭2: +にし 爾志 地名: +にしあいづ 西会津 地名: +にしあざい 西浅井 地名: +にしありえ 西有家 地名: +にしありた 西有田 地名: +にしあわくら 西粟倉 地名: +にしいず 西伊豆 地名: +にしいばらき 西茨城 地名: +にしいややま 西祖谷山 地名: +にしいわい 西磐井 地名: +にしうすき 西臼杵 地名: +にしうみ 西海 地名: +にしうわ 西宇和 地名: +にしお 西尾 苗字: +にしお 西尾 地名: +にしおおじ 西大路 地名: +にしおか 西岡 苗字: +にしおきたま 西置賜 地名: +にしおこっぺ 西興部 地名: +にしかいがん 西海岸 代1: +にしかすがい 西春日井 地名: +にしかぜ 西風 名1: +にしかた 西方 苗字: +にしかつら 西桂 地名: +にしかも 西加茂 地名: +にしかわ 西川 苗字: +にしかんばら 西蒲原 地名: +にしがわ 西側 名1: +にしき 錦 名1: +にしき 西木 地名: +にしき 西紀 地名: +にしきょう 西京 地名: +にしくにさき 西国東 地名: +にしくびき 西頚城 地名: +にしぐち 西口 名1: +にしごう 西郷 地名: +にしごうし 西合志 地名: +にしざき 西崎 苗字: +にしざわ 西沢 苗字: +にししらかわ 西白河 地名: +にしじま 西島 苗字: +にしじん 西陣 地名: +にしせんぼく 西仙北 地名: +にしそのぎ 西彼杵 地名: +にしたがわ 西田川 地名: +にしたま 西多摩 地名: +にしだ 西田 苗字: +にしつがる 西津軽 地名: +にしとさ 西土佐 地名: +にしとなみ 西砺波 地名: +にしな 仁科 苗字: +にしなり 西成 地名: +にしね 西根 地名: +にしの 西野 苗字: +にしのおもて 西之表 地名: +にしのしま 西ノ島 地名: +にしのみや 西宮 地名: +にしはら 西原 苗字: +にしはる 西春 地名: +にしび 西日 代1: +にしびわじま 西枇杷島 地名: +にしまつうら 西松浦 地名: +にしむら 西村 苗字: +にしむらやま 西村山 地名: +にしむろ 西牟婁 地名: +にしめ 西目 地名: +にしめや 西目屋 地名: +にしめら 西米良 地名: +にしもと 西本 苗字: +にしもろかた 西諸県 地名: +にしゃたくいつ 二者択一 代1: +にしやつしろ 西八代 地名: +にしやま 西山 苗字: +にしやま 西山 地名: +にしよしの 西吉野 地名: +にしよどがわ 西淀川 地名: +にしわき 西脇 苗字: +にしわき 西脇 地名: +にしん 二進 代4: +にしん 鰊 代1: +にじ 虹 代1: +にじゅう 二重 一括: +にじゅう 廿 単漢: +にじゅうまる ◎ 代1: +にじょう 二丈 地名: +にじょう 二乗 代4: +にせ 似せ 一段1: +にせ 偽 代1: +にせこ ニセコ 地名: +にせもの 偽物 名1: +にた 仁多 地名: +にち 日 代1:助数: +にちげん 日限 名1: +にちじ 日時 名1: +にちじょう 日常 名4: +にちづけ 日付 助数2: +にちどく 日独 名1: +にちなん 日南 地名: +にちはら 日原 地名: +にちふつ 日仏 名1: +にちぶ 日舞 名1: +にちぶり 日ぶり 助数2: +にちべい 日米 名1: +にちぼつ 日没 名1: +にちや 日夜 名1: +にちよう 日曜 名1: +にちようひん 日用品 名1: +にちようび 日曜日 名1: +にっか 日課 名1: +にっかん 日刊 名1: +にっかん 日韓 名1: +にっき 日記 名1: +にっきゅう 日給 名1: +にっきょうそ 日教組 代1: +にっきん 日勤 名6: +にっけい 日系 名1: +にっけい 日計 名1: +にっけい 日経 企業: +にっこう 日光 地名: +にっこう 日航 企業: +にっこう 日興 企業: +にっこり にっこり 代4: +にっさん 日産 企業: +にっさん 日参 名6: +にっし 日誌 名1: +にっしゃ 日射 名1: +にっしょう 日照 名1: +にっしょう 日商 名1: +にっしょく 日食 名1: +にっしん 日進 地名: +にっしんげっぽ 日進月歩 代4: +にっすう 日数 名1: +にっそ 日ソ 名1: +にった 新田 苗字: +にった 新田 地名: +にっちゅう 日中 名1: +にっちょく 日直 名6: +にってい 日程 名1: +にっとう 日当 名1: +にっぽう 日報 名1: +にっぽり 日暮里 地名: +にっぽん 日本 名1: +にっぽんばし 日本橋 地名: +につ 似つ カ五1: +につま 煮詰ま ラ五1: +にづくり 荷造り 代4: +にづくり 荷作り 代4: +にとろ ニトロ 名1: +にな 担 ワ五6: +にぬし 荷主 名1: +にのへ 二戸 地名: +にのみや 二宮 苗字: +にふだ 荷札 名1: +にぶ 鈍 形6:ラ五3: +にへい 二瓶 苗字: +にほん 日本 名4: +にほんいち 日本一 代6: +にほんかい 日本海 名1: +にほんご 日本語 名4: +にほんしょき 日本書紀 代1: +にほんじん 日本人 名1: +にほんまつ 二本松 地名: +にぼし 煮干 名1: +にま 迩摩 地名: +にもつ 荷物 名2: +にもの 煮物 代1: +にゅー ニュー 名2: +にゅーす ニュース 名1: +にゅーよーく ニューヨーク 地名: +にゅあんす ニュアンス 名1: +にゅう 入 単漢: +にゅう 乳 単漢: +にゅう 柔 単漢: +にゅういん 入院 名7: +にゅうえき 乳液 名1: +にゅうえん 入園 名7: +にゅうか 乳化 名6: +にゅうか 入荷 名7: +にゅうかい 入会 名7: +にゅうかく 入閣 名7: +にゅうかわ 丹生川 地名: +にゅうがく 入学 名7: +にゅうがくきん 入学金 名1: +にゅうきょ 入居 名7: +にゅうきん 入金 名7: +にゅうぎょう 乳業 名1: +にゅうこ 入庫 代4: +にゅうこう 入構 名6: +にゅうこう 入港 名6: +にゅうこく 入国 名7: +にゅうさつ 入札 名7: +にゅうさん 乳酸 名1: +にゅうし 入試 名1: +にゅうしつ 入室 名7: +にゅうしゃ 入社 名7: +にゅうしゅ 入手 名6: +にゅうしゅつりょく 入出力 名1: +にゅうしょ 入所 名6: +にゅうしょう 入賞 名7: +にゅうじ 乳児 名1: +にゅうじょう 入場 名7: +にゅうせいひん 乳製品 名1: +にゅうせき 入籍 名7: +にゅうせん 入選 名7: +にゅうぜん 入善 地名: +にゅうたい 入隊 名7: +にゅうだん 入団 名7: +にゅうてい 入廷 名7: +にゅうでん 入電 名7: +にゅうとう 入党 名6: +にゅうとう 乳頭 名1: +にゅうねん 入念 名8: +にゅうばい 入梅 名1: +にゅうぶ 入部 名6: +にゅうもん 入門 名6: +にゅうよう 入用 名10: +にゅうようじ 乳幼児 名1: +にゅうよく 入浴 名7: +にゅうりょう 入寮 名6: +にゅうりょく 入力 名7: +にゅうわ 柔和 形動3: +にょ 女 単漢: +にょ 如 単漢: +にょう 尿 代1: +にょうぼう 女房 名1: +にょらい 如来 名1: +によど 仁淀 地名: +にら 睨 マ五7: +にら 韮 代1: +にらさき 韮崎 地名: +にらやま 韮山 地名: +にわ 庭 名2: +にわ 丹羽 苗字: +にわ 丹羽 地名: +にわか にわか 接頭1:形動1: +にわか 俄 接頭1:形動1: +にわかあめ にわか雨 代1: +にわき 庭木 代1: +にわさき 庭先 代1: +にわとり 鶏 代1: +にん 人 接尾1: +にん 人 助数2: +にん 任 代1:ザ変: +にん 忍 単漢: +にん 認 単漢: +にん 仁 単漢: +にん 妊 単漢: +にんい 任意 名8: +にんか 認可 名6: +にんき 人気 名1: +にんき 任期 名1: +にんぎょう 人形 名1: +にんぐみ 人組 助数2: +にんげつ 人月 名1:助数2: +にんげん 人間 名4: +にんげんみ 人間味 名1: +にんしき 認識 名6: +にんしょう 人称 名1: +にんしょう 認証 名6: +にんしん 妊娠 名6: +にんじゃ 忍者 名1: +にんじゅう 忍従 名6: +にんじょう 人情 名1: +にんじん 人参 代1: +にんずう 人数 名1: +にんそう 人相 名1: +にんたい 忍耐 名6: +にんち 任地 名1: +にんち 認知 名6: +にんてい 認定 名6: +にんぴ 認否 名1: +にんぷ 人夫 名1: +にんぷ 妊婦 名1: +にんむ 任務 名1: +にんめい 任命 名6: +にんめん 任免 名6: +ぬ 抜 カ五2: +ぬ 脱 ガ五6: +ぬ 塗 ラ五8: +ぬ 縫 ワ五8: +ぬいぐるみ ぬいぐるみ 代1: +ぬいこ 縫い込 マ五7: +ぬいつけ 縫いつけ 一段3: +ぬか 抜か サ五3:ラ五7: +ぬか 糠 代1: +ぬかた 額田 地名: +ぬき 抜き 接尾1: +ぬき 貫 単漢: +ぬきさし 抜き差し 代1: +ぬきと 抜き取 ラ五5: +ぬきんで 抜きん出 一段1: +ぬくぬく ぬくぬく 副2: +ぬぐ ぬぐ ワ五5: +ぬぐ 拭 ワ五5: +ぬけ 抜け 一段1: +ぬけだ 抜け出 サ五5: +ぬけめ 抜目 名1: +ぬし 主 接尾1: +ぬす 盗 マ五7: +ぬの 布 代1: +ぬま 沼 代1: +ぬまくま 沼隈 地名: +ぬまた 沼田 苗字 +ぬまた 沼田 地名: +ぬまづ 沼津 地名: +ぬら 濡ら サ五7: +ぬり 塗 接尾1: +ぬりつけ 塗り付け 一段3: +ぬりつぶ 塗りつぶ サ五7: +ぬる ぬる 形4:マ五3: +ぬる 温 形4:マ五3: +ぬるまゆ ぬるま湯 名1: +ぬれ 濡れ 一段1: +ね 寝 一段1: +ね 練 ラ五7: +ね 根 代1: +ね 音 代1: +ね 子 代1: +ね 値 接尾1: +ね 禰 単漢: +ね 祢 単漢: +ねーむ ネーム 名1: +ねあがり 値上がり 代4: +ねあがり 根上 地名: +ねあげ 値上げ 代4: +ねい 寝入 ラ五3: +ねい 婦負 地名: +ねい 寧 単漢: +ねいき 寝息 代1: +ねいてぃぶ ネイティブ 代5: +ねいろ 音色 代1: +ねうち 値打ち 代1: +ねえ ねえ 感動: +ねえさん 姉さん 名2: +ねお 根尾 地名: +ねおん ネオン 名1: +ねか 寝か サ五1: +ねが 願 ワ五8: +ねがい 願 接尾1: +ねがいさげ 願い下げ 一段3: +ねぎ 値切 ラ五7: +ねぎ 葱 代1: +ねぎし 根岸 苗字: +ねぎし 根岸 地名: +ねぎら 労 ワ五3: +ねくたい ネクタイ 名1: +ねぐりじぇ ネグリジェ 名1: +ねこ 寝込 マ五3: +ねこ 猫 代1: +ねごこち 寝心地 代1: +ねごと 寝言 代1: +ねさがり 値下がり 代4: +ねさげ 値下げ 代4: +ねじ ねじ 代1:ラ五3: +ねじ 捻 ラ五7: +ねじ 螺 代1: +ねじめ 根占 地名: +ねすと ネスト 代1: +ねず 根津 地名: +ねずみ 鼠 代1: +ねた ねた 代1: +ねた 妬 マ五7: +ねだ ねだ ラ五8: +ねだん 値段 名2: +ねっき 熱気 名1: +ねっきょう 熱狂 名6: +ねっく ネック 名1: +ねっしゃびょう 熱射病 名1: +ねっしょう 熱唱 名6: +ねっしん 熱心 名8: +ねっせん 熱戦 名1: +ねったい 熱帯 名1: +ねっちゅう 熱中 代4: +ねっと ネット 名1: +ねっとう 熱湯 名1: +ねっとわーく ネットワーク 名4: +ねっぷう 熱風 名1: +ねつ 熱 接尾1: +ねつ 寝つ カ五7: +ねつい 熱意 名1: +ねつえん 熱演 名6: +ねつべん 熱弁 名1: +ねつぼう 熱望 名6: +ねつりょう 熱量 名1: +ねつれつ 熱烈 名8: +ねづ 根津 苗字: +ねづ 根津 地名: +ねづ 根付 カ五3: +ねづよ 根強 形2: +ねどこ 寝床 代1: +ねはば 値幅 名1: +ねはん 涅槃 名1: +ねば 粘 ラ五8: +ねば 根羽 地名: +ねばりづよ 粘り強 形2: +ねびえ 寝冷え 代4: +ねふだ 値札 代1: +ねぶか 根深 代1:形2: +ねぶそく 寝不足 代1: +ねまわし 根回し 代4: +ねむ 眠 形7:ラ五8: +ねむけ 眠気 代1: +ねむた 眠た 形5: +ねむろ 根室 地名: +ねもと 根本 苗字: +ねやがわ 寝屋川 地名: +ねら 狙 ワ五7: +ねりあわせ 練り合わせ 一段3: +ねりなお 練り直 サ五7: +ねりま 練馬 地名: +ねん 年 代1:助数2: +ねん 念 代1:ザ変: +ねん 然 単漢: +ねん 捻 単漢: +ねん 撚 単漢: +ねん 燃 単漢: +ねん 粘 単漢: +ねん 稔 単漢: +ねんかん 年間 名1:助数2: +ねんかん 年刊 名1: +ねんが 年賀 名2: +ねんがく 年額 名1: +ねんがじょう 年賀状 名2: +ねんがっぴ 年月日 名1: +ねんがん 念願 名6: +ねんき 年期 名1: +ねんき 年忌 名1:助数2: +ねんきん 年金 名1: +ねんぐ 年貢 代1: +ねんげつ 年月 名1: +ねんこう 年功 名1: +ねんご 年後 助数2: +ねんごう 年号 名1: +ねんさん 年産 名1: +ねんざ 捻挫 代4: +ねんし 年始 名2: +ねんしゅう 年収 名1: +ねんしゅつ 捻出 名6: +ねんしょ 念書 名1: +ねんしょう 燃焼 名6: +ねんしょう 年商 名1: +ねんしょう 年少 名8: +ねんじ 年次 名1:助数2: +ねんじゅう 年中 代1: +ねんすう 年数 名1: +ねんせい 年生 助数2: +ねんだい 年代 名1:助数2: +ねんちゃく 粘着 名6: +ねんちょう 年長 代5: +ねんてん 捻転 代4: +ねんとう 年頭 名1: +ねんとう 念頭 名1: +ねんど 年度 名1:助数2: +ねんど 粘土 名1: +ねんどまつ 年度末 名1: +ねんない 年内 名1: +ねんねん 年々 代6: +ねんぱい 年輩 名3: +ねんぱい 年配 名3: +ねんぴ 燃費 名1: +ねんぴょう 年表 名1: +ねんぶつ 念仏 名1: +ねんぶり 年ぶり 助数2: +ねんべつ 年別 名1: +ねんぽう 年俸 名1: +ねんぽう 年報 名1: +ねんまく 粘膜 名1: +ねんまつ 年末 名1: +ねんらい 年来 名1: +ねんり 年利 名1: +ねんりき 念力 名1: +ねんりょう 燃料 名1: +ねんりん 年輪 名1: +ねんれい 年齢 名1: +の 退 カ五1: +の 飲 マ五6: +の 呑 マ五6: +の 乗 ラ五8: +の 載 ラ五7: +の の 代1: +の 野 代1: +の 乃 単漢: +の 廼 単漢: +の 之 単漢: +の 埜 単漢: +のー ノー 名1: +のーと ノート 名1: +のーど ノード 名1: +のーまる ノーマル 名8: +のいず ノイズ 名1: +のいち 野市 地名: +のいまん ノイマン 名1: +のいろーぜ ノイローゼ 名1: +のう 脳 名1: +のう 膿 代1: +のう 農 代1: +のう 能 接尾1: +のう 能生 地名: +のう 嚢 単漢: +のう 悩 単漢: +のう 濃 単漢: +のう 納 単漢: +のういっけつ 脳溢血 名1: +のうえん 農園 名1: +のうか 農家 名1: +のうかい 納会 名1: +のうがく 農学 名1: +のうがた 直方 地名: +のうき 納期 名1: +のうきぐ 農機具 名1: +のうきょう 農協 名1: +のうきん 納金 名6: +のうぎょう 農業 名6: +のうこう 濃厚 形動4: +のうこう 農耕 名1: +のうさぎょう 農作業 代4: +のうさん 農産 名1: +のうしゃ 納車 名6: +のうしゅく 濃縮 名6: +のうじょう 農場 名1: +のうずい 脳髄 名1: +のうぜい 納税 名6: +のうそっちゅう 脳卒中 名1: +のうそん 農村 名1: +のうたん 濃淡 名1: +のうち 農地 名1: +のうど 濃度 名1: +のうどう 能動 名4: +のうにゅう 納入 名6: +のうは 脳波 名1: +のうはう ノウハウ 名1: +のうひん 納品 名6: +のうふ 納付 名6: +のうふ 農夫 名1: +のうまく 脳膜 名1: +のうみ 能美 苗字: +のうみ 能美 地名: +のうみつ 濃密 名8: +のうみん 農民 名1: +のうむ 濃霧 名1: +のうやく 農薬 名1: +のうり 脳裏 名1: +のうりつ 能率 名4: +のうりょう 納涼 名1: +のうりょく 能力 名1: +のうりん 農林 名1: +のうりんすいさんしょう 農林水産省 名1: +のおがた 直方 地名: +のかみ 野上 地名: +のが 逃 サ五5: +のがた 野方 地名: +のがみ 野上 苗字: +のがれ 逃れ 一段1:接尾8: +のき 軒 代1: +のぎ 野木 苗字: +のぎ 能義 地名: +のぎ 禾 単漢: +のぐち 野口 苗字: +のけ 除け 一段1: +のけ 退け 一段1: +のこ 残 サ五6:ラ五8: +のこぎり 鋸 代1: +のさか 野栄 地名: +のざき 野崎 苗字: +のざき 野崎 地名: +のざわ 野沢 苗字: +のざわ 野沢 地名: +のざわおんせん 野沢温泉 地名: +のしろ 能代 地名: +のじま 野島 苗字: +のじゅく 野宿 代4: +のじり 野尻 苗字: +のじり 野尻 地名: +のせ 乗せ 一段2: +のせ 載せ 一段2: +のせ 能勢 地名: +のせがわ 野迫川 地名: +のぞ 除 カ五7: +のぞ 覗 カ五7: +のぞ 望 マ五8: +のぞ 臨 マ五8: +のぞきこ のぞき込 マ五7: +のぞまし 望まし 形3: +のたま のたま ワ五1: +のだ 野田 苗字: +のだ 野田 地名: +のだがわ 野田川 地名: +のち 後 代1: +のちのち 後々 代6: +のっと 乗っ取 ラ五7: +のっと 則 ラ五1: +のつ 野津 苗字: +のつけ 野付 地名: +のつはる 野津原 地名: +のと 能都 地名: +のとじま 能登島 地名: +のど 咽 代1: +のど 喉 代1: +のどか のどか 形動4: +のなか 野中 苗字: +ののいち 野々市 地名: +ののし 罵 ラ五7: +のはら 野原 代1: +のば 伸ば サ五7: +のば 延ば サ五7: +のばなし 野放し 代5: +のび 伸び 一段3: +のび 延び 一段3: +のびなや 伸び悩 マ五7: +のびのび のびのび 副3: +のびのび 伸び伸び 副3: +のぶ 伸 単漢: +のぶ 延 単漢: +のぶ 宣 単漢: +のぶ 暢 単漢: +のぶあき 信明 名前: +のぶお 伸夫 名前: +のぶお 信男 名前: +のぶお 信夫 名前: +のぶお 信雄 名前: +のぶこ 伸子 名前: +のぶこ 信子 名前: +のぶたか 信孝 名前: +のぶなが 信長 名前: +のぶひこ 信彦 名前: +のぶひこ 宣彦 名前: +のぶひろ 伸浩 名前: +のぶゆき 信幸 名前: +のぶゆき 信行 名前: +のぶゆき 信之 名前: +のぶよし 信義 名前: +のへじ 野辺地 地名: +のべ 述べ 一段1: +のべ 伸べ 一段1: +のべ 延べ 一段3: +のべ 野辺 代1: +のべおか 延岡 地名: +のぼ 登 ラ五8: +のぼ 昇 ラ五8: +のぼ 上 ラ五8: +のぼせ のぼせ 一段3: +のぼりつめ 上り詰め 一段1: +のぼりべつ 登別 地名: +のぼる 昇 名前: +のぼる 登 名前: +のま 々 単漢: +のみ 蚤 代1: +のみ 能美 地名: +のみねーと ノミネート 代4: +のみほ 飲み干 サ五5: +のみもの 飲物 名2: +のみや 飲み屋 代1: +のむら 野村 苗字: +のもざき 野母崎 地名: +のもと 野本 苗字: +のやま 野山 代1: +のら 野良 代1: +のり 海苔 代1: +のり 糊 代1: +のり 則 代1: +のり 規 単漢: +のり 憲 単漢: +のり 徳 単漢: +のり 範 単漢: +のりあき 則明 名前: +のりあげ 乗り上げ 一段3: +のりいれ 乗り入れ 一段3: +のりうつ 乗り移 ラ五7: +のりお 紀男 名前: +のりお 紀夫 名前: +のりお 則夫 名前: +のりおくれ 乗り遅れ 一段4: +のりかえ 乗り換え 一段4: +のりかえ 乗換 名6: +のりかか 乗りかか ラ五7: +のりき 乗り切 ラ五7: +のりく 乗り組 マ五7: +のりくみいん 乗組員 名1: +のりくら 乗鞍 地名: +のりこ 乗り越 サ五8: +のりこ 乗り込 マ五7: +のりこ 紀子 名前: +のりこ 典子 名前: +のりこ 法子 名前: +のりこえ 乗り越え 一段1: +のりすて 乗り捨て 一段3: +のりだ 乗り出 サ五5: +のりつ 乗り継 ガ五7: +のりつけ 乗り付け 一段1: +のりづけ 糊付け 代4: +のりと 祝詞 名1: +のりば 乗り場 名1: +のりまわ 乗り回 サ五7: +のりもの 乗り物 名1: +のりゆき 紀之 名前: +のるうぇー ノルウェー 地名: +のるむ ノルム 名1: +のろ のろ 形2:ワ五7: +のろ 呪 ワ五7: +のろ 鈍 形2: +のろ 野呂 苗字: +のろわし 呪わし 形3: +のん ノン 接頭1: +のんき 暢気 代5: +のんびり のんびり 代4: +は 履 カ五6: +は 吐 カ五6: +は 掃 カ五8: +は 剥 ガ五8: +は 貼 ラ五7: +は 張 ラ五7: +は 這 ワ五5: +は 葉 代1: +は 歯 代1: +は 刃 代1: +は 羽 代1: +は 覇 代1: +は 端 代1: +は 派 接尾1: +は 波 代1: +は 頗 単漢: +は 巴 単漢: +は 把 単漢: +は 播 単漢: +は 杷 単漢: +は 琶 単漢: +は 破 単漢: +は 芭 単漢: +は 簸 単漢: +は 玻 単漢: +はーと ハート 名1: +はーど ハード 名8: +はーどうぇあ ハードウェア 名1: +はーどうえあ ハードウエア 名1: +はーふ ハーフ 名1: +はーぶ ハーブ 名1: +はあ はあ 感動: +はあく 把握 名6: +はい はい 感動: +はい 肺 代1: +はい 灰 代1: +はい 杯 代1:助数2: +はい 輩 代1: +はい 牌 代1: +はい ハイ 代1: +はい 拝 代4: +はい 敗 助数2: +はい 入 ラ五6: +はい 廃 サ変:サ五1: +はい 排 サ変:サ五1: +はい 配 サ変:サ五1: +はい 俳 単漢: +はい 盃 単漢: +はい 背 単漢: +はい 稗 単漢: +はいあん 廃案 名1: +はいいろ 灰色 名1: +はいいん 敗因 名1: +はいうぇい ハイウェイ 名1: +はいえん 肺炎 名1: +はいかい 俳諧 名1: +はいかん 配管 名6: +はいかん 廃刊 名6: +はいき 廃棄 名6: +はいき 排気 名6: +はいきゅう 配給 名6: +はいきょ 廃虚 名1: +はいきんぐ ハイキング 名6: +はいぎょう 廃業 名6: +はいく 俳句 代1: +はいぐうしゃ 配偶者 名1: +はいけい 拝啓 名1: +はいけい 背景 名1: +はいけん 拝見 名6: +はいご 背後 代1: +はいごう 配合 名6: +はいざら 灰皿 名1: +はいし 廃止 名6: +はいしゃ 歯医者 代2: +はいしゃ 廃車 代4: +はいしゃ 配車 代4: +はいしゃ 敗者 名1: +はいしゃく 拝借 名6: +はいしゅつ 排出 名6: +はいしょく 配色 名6: +はいじょ 排除 名6: +はいじん 俳人 名1: +はいじん 廃人 名1: +はいすい 排水 名6: +はいすい 配水 名6: +はいせき 排斥 名6: +はいせつ 排泄 名6: +はいせん 配線 名6: +はいせん 敗戦 名6: +はいぜん 配膳 名6: +はいそう 配送 名6: +はいぞく 配属 名6: +はいた 排他 名4: +はいたい 敗退 名6: +はいたつ 配達 名6: +はいち 配置 名6: +はいちょう 拝聴 名6: +はいつ ハイツ 代1: +はいてく ハイテク 名8: +はいでん 配電 名6: +はいとう 配当 名6: +はいはん 排反 名1: +はいばら 榛原 地名: +はいばん 廃盤 名1: +はいぱー ハイパー 名1: +はいひん 廃品 名1: +はいび 配備 名6: +はいふ 配布 名6: +はいふ 配付 名6: +はいふく 拝復 名1: +はいぶつ 廃物 名1: +はいぶん 配分 名6: +はいぼく 敗北 名6: +はいむ ハイム 名1: +はいめん 背面 名1: +はいゆう 俳優 代2: +はいりこ 入り込 マ五7: +はいりょ 配慮 名7: +はいれつ 配列 名6: +はいれべる ハイレベル 名8: +はうす ハウス 名1: +はえ 生え 一段1: +はえ 栄え 一段3: +はえ 映え 一段3: +はえ 蝿 代1: +はえばる 南風原 地名: +はお 羽織 ラ五7: +はおり 羽織 代1:  +はか 墓 代1: +はか 計 ラ五7: +はか 図 ラ五7: +はか 測 ラ五7: +はか 量 ラ五7: +はか 謀 ラ五7: +はか 諮 ラ五7: +はか はか ラ五8: +はかい 破壊 名6: +はかい 破戒 名1: +はかせ 博士 名1: +はかた 博多 地名: +はかた 伯方 地名: +はかど 捗 ラ五3: +はかな はかな 形3:マ五3: +はかま 袴 代1: +はから 計ら ワ五3: +はかり 秤 代1: +はかりごと 謀 代1: +はが 芳賀 苗字: +はが 芳賀 地名: +はが 波賀 地名: +はがき はがき 名2: +はがき 葉書 名2: +はがね 鋼 代1: +はき 破棄 名6: +はき 覇気 名1: +はき 杷木 地名: +はきだ 吐き出 サ五7: +はきもの 履物 名1: +はきゅう 波及 代4: +はきょく 破局 名1: +はぎ 萩 代1: +はぎ 萩 地名: +はぎ 矧 単漢: +はぎの 萩野 苗字: +はぎれ 歯切れ 代1: +はぎわら 萩原 苗字: +はく 箔 代1: +はく 伯 代1: +はく 白 代1: +はく 博 代4: +はく 泊 助数2: +はく 拍 助数2: +はく 栢 単漢: +はく 狛 単漢: +はく 剥 単漢: +はく 柏 単漢: +はく 粕 単漢: +はく 舶 単漢: +はく 薄 単漢: +はく 迫 単漢: +はくあ 白亜 名1: +はくあい 博愛 名1: +はくい 白衣 名1: +はくい 羽咋 地名: +はくがい 迫害 名6: +はくがく 博学 名1: +はくさい 白菜 名1: +はくさん 白山 地名: +はくし 博士 名1: +はくし 白紙 名1: +はくしき 博識 名1: +はくしゃ 薄謝 名1: +はくしゃく 伯爵 名1: +はくしゅ 拍手 名6: +はくしゅう 白州 地名: +はくしょ 白書 名1: +はくしょく 白色 名1: +はくしん 迫真 名1: +はくじつ 白日 名1: +はくじょう 薄情 名8: +はくじょう 白状 名6: +はくじん 白人 名1: +はくすい 白水 地名: +はくた 伯太 地名: +はくだつ 剥奪 名6: +はくち 白痴 名1: +はくちゅう 白昼 名1: +はくちょう 白鳥 代1: +はくねつ 白熱 名6: +はくば 白馬 地名: +はくぶつ 博物 名1: +はくぶつかん 博物館 名1: +はくぼく 白墨 名1: +はくまい 白米 名1: +はくらい 舶来 名6: +はくらんかい 博覧会 代1: +はくり 剥離 名6: +はくりょく 迫力 名1: +はくろ 白露 代1: +はぐく 育 マ五7: +はぐり 葉栗 地名: +はぐるま 歯車 名1: +はぐろ 羽黒 地名: +はけ 刷毛 名1: +はけ はけ 一段3: +はけ 捌け 一段3: +はけい 波形 名1: +はけん 派遣 名6: +はげ はげ 一段3: +はげ 剥げ 一段3: +はげ 禿げ 一段3: +はげ 励 マ五8: +はげ 禿 単漢: +はげし 激し 形4: +はげし 烈し 形4: +はこ 箱 代1:助数2: +はこ 運 バ五8: +はこ 函 単漢: +はこう 跛行 代4: +はこだて 函館 地名: +はこね 箱根 地名: +はこびこ 運び込 マ五7: +はこびだ 運び出 サ五7: +はさ 挟 マ五7: +はさ はさ マ五7: +はさき 波崎 地名: +はさま 挟間 地名: +はさま 迫 地名: +はさみ 波佐見 地名: +はさん 破産 名6: +はざかいき 端境期 名1: +はざま 狭間 名1: +はざま 間 苗字: +はざま 硲 単漢: +はし 橋 代1: +はし 端 代1: +はし 箸 名2: +はし 走 ラ五8: +はしかみ 階上 地名: +はしがき はしがき 代1: +はしぐち 橋口 苗字: +はしご 梯子 代1: +はしだ 橋田 苗字: +はしづめ 橋詰 苗字: +はしづめ 橋爪 苗字: +はしま 羽島 地名: +はしもと 橋本 苗字: +はしもと 橋本 地名: +はしゃ はしゃ ガ五8: +はしゃ 覇者 名1: +はしゅつ 派出 名6: +はしゅつじょ 派出所 名1: +はしら 柱 代1: +はしりがき 走り書き 代4: +はしりだ 走り出 サ五7: +はしりまわ 走り回 ラ五5: +はしわたし 橋渡し 代4: +はじ はじ カ五4:代1: +はじ 弾 カ五3: +はじ 恥 代1: +はじま 始ま ラ五3: +はじめ はじめ 一段2: +はじめ 始め 接尾1:一段2: +はじめ 初め 名1: +はじめ 一 名前: +はじめ 肇 名前: +はじめて 初めて 代6: +はす 蓮 代1: +はすいけ 蓮池 苗字: +はすう 端数 名1: +はすだ 蓮田 地名: +はすぬま 蓮沼 苗字: +はすぬま 蓮沼 地名: +はすみ 羽須美 地名: +はすみ 蓮見 苗字: +はず 外 サ五7: +はず 弾 マ五7: +はず はず 代1:マ五7:サ五7: +はず 筈 代1: +はず 幡豆 地名: +はずかし 恥ずかし 形10: +はずかしめ 辱め 一段3: +はずれ はずれ 一段3: +はずれ 外れ 一段3: +はせ 馳せ 一段1: +はせ 長谷 苗字: +はせい 派生 名6: +はせがわ 長谷川 苗字: +はせべ 長谷部 苗字: +はせん 波線 代1: +はせん 破線 代1: +はぜ 鯊 代1: +はぜ 櫨 単漢: +はそん 破損 名6: +はた 果た サ五7: +はた 旗 代1: +はた 機 代1: +はた 端 代1: +はた 幡 代1: +はた 畑 代1: +はた 畠 代1: +はた 波田 地名: +はた 幡多 地名: +はた 秦 苗字: +はたいろ 旗色 名1: +はたけ 畑 代1: +はたけ 畠 代1: +はたけやま 畠山 苗字: +はたしょう 秦荘 地名: +はたち 二十歳 名1: +はたと はたと 副1: +はたなか 畑中 苗字: +はたなか 畠中 苗字: +はたの 波多野 苗字: +はたの 畑野 苗字: +はたはた 鰰 代1: +はたやま 畑山 苗字: +はたら 働 カ五8: +はたらきかけ 働きかけ 一段3: +はたん 破綻 名6: +はだ 肌 名2: +はだ 膚 名1: +はだか 裸 代1: +はだぎ 肌着 名1: +はだざわり 肌触り 代1: +はだし 裸足 代1: +はだの 秦野 地名: +はだみ 肌身 代1: +はだん 破談 名1: +はち 蜂 代1: +はち 鉢 代1: +はちおうじ 八王子 地名: +はちかい 八開 地名: +はちく 破竹 代1: +はちじょう 八丈 地名: +はちのへ 八戸 地名: +はちまん 八幡 地名: +はちみつ 蜂蜜 名1: +はちもり 八森 地名: +はちょう 波長 名1: +はちりゅう 八竜 地名: +はちろう 八郎 名前: +はちろうがた 八郎潟 地名: +はっ 発 サ変:サ五1: +はっか 発火 名6: +はっかー ハッカー 名1: +はっかいさん 八海山 地名: +はっかく 発覚 名6: +はっかん 発刊 名6: +はっき 発揮 代4: +はっきょう 発狂 名6: +はっきり はっきり 副3: +はっく ハック 名6: +はっくつ 発掘 名6: +はっけん 発見 名6: +はっけん 発券 名6: +はっこう 発行 名6: +はっこう 発効 名6: +はっこう 発光 名6: +はっこつ 白骨 名4: +はっさん 発散 名6: +はっしゃ 発車 名6: +はっしゃ 発射 名6: +はっしょう 発祥 名1: +はっしん 発信 名6: +はっしん 発振 名6: +はっしん 発進 名6: +はっせい 発生 名6: +はっせい 発声 名6: +はっそう 発想 名1: +はっそう 発送 名6: +はった 八田 苗字: +はったつ 発達 名6: +はっちゃく 発着 名6: +はっちゅう 発注 名6: +はってん 発展 名7: +はっとう 八東 地名: +はっとり 服部 苗字: +はっとり 服部 地名: +はっぱ 葉っぱ 名1: +はっぴー ハッピー 名8: +はっぴょう 発表 名6: +はっぴょうかい 発表会 名1: +はっぷ 発布 名6: +はっぽう 発砲 名6: +はっぽう 八方 名1: +はつ 発 接尾4:助数2: +はつ 初 代1:接頭1: +はつ 髪 単漢: +はつ 溌 単漢: +はつ 醗 単漢: +はついく 発育 名6: +はつえ 初江 名前: +はつお 初男 名前: +はつおん 発音 名6: +はつか 二十日 代6: +はつかいち 廿日市 地名: +はつが 発芽 名6: +はつげん 発言 名6: +はつこい 初恋 名1: +はつじょう 発情 名6: +はつでん 発電 名6: +はつどう 発動 名6: +はつに 初荷 名1: +はつねつ 発熱 名6: +はつばい 発売 名6: +はつびょう 発病 名6: +はつみみ 初耳 名1: +はつめい 発明 名8:サ変: +はつもうで 初詣 名1: +はつれい 発令 名6: +はて はて 感動: +はて 果て 一段3: +はで 派手 名8: +はと 鳩 代1: +はとがや 鳩ヶ谷 地名: +はとやま 鳩山 苗字: +はとり 羽鳥 地名: +はどう 波動 代1: +はどめ 歯止め 代4: +はな 話 サ五8: +はな 放 サ五8:タ五5: +はな 離 サ五8: +はな 花 名1: +はな 鼻 名1: +はな 華 名1: +はない 花井 苗字: +はないずみ 花泉 地名: +はなおか 花岡 苗字: +はなげ 鼻毛 代1: +はなこ 花子 名前: +はなこ 華子 名前: +はなざかり 花盛り 名1: +はなざわ 花沢 苗字: +はなし 話 代4: +はなし 噺 代1: +はなしあ 話し合 ワ五8: +はなしこ 話し込 マ五7: +はなぞの 花園 代1: +はなたば 花束 名1: +はなだ 花田 苗字: +はなぢ 鼻血 代1: +はなてん 放出 地名: +はなはだ 甚だ 副1: +はなはだし 甚だし 形3: +はなばなし 華々し 形3: +はなび 花火 名1: +はなびら 花びら 代1: +はなまき 花巻 地名: +はなみ 花見 代3: +はなむこ 花婿 代2: +はなや 華や ガ五7: +はなや 花屋 名2: +はなやか 華やか 形動4: +はなやま 花山 苗字: +はなやま 花山 地名: +はなれ 離れ 一段4: +はなれ 放れ 一段2: +はなわ 塙 単漢: +はに 埴 代1: +はにしな 埴科 地名: +はにゅう 羽生 苗字: +はにゅう 羽生 地名: +はね 羽根 代1: +はね 羽 代1: +はね はね 一段1: +はね 跳ね 一段1: +はねかえ 跳ね返 サ五7:ラ五7: +はねだ 羽田 苗字: +はねだ 羽田 地名: +はねむーん ハネムーン 名1: +はのうら 羽ノ浦 地名: +はは 母 代1: +ははおや 母親 代1: +はば 幅 代1: +はば 巾 代1: +はば 阻 マ五7: +はばた 羽ばた カ五7: +はばつ 派閥 名1: +はばひろ 幅広 形2: +はびきの 羽曳野 地名: +はびこ はびこ ラ五1: +はぶ 省 カ五5: +はぶり 羽振り 代1: +はぼろ 羽幌 地名: +はま はま ラ五1: +はま 浜 代1: +はま 濱 単漢: +はまおか 浜岡 苗字: +はまおか 浜岡 地名: +はまき 葉巻 名1: +はまきた 浜北 苗字: +はまきた 浜北 地名: +はまぐち 浜口 苗字: +はまぐり 蛤 代1: +はまさか 浜坂 地名: +はまざき 浜崎 苗字: +はまじま 浜島 地名: +はまだ 浜田 苗字: +はまだ 浜田 地名: +はまとんべつ 浜頓別 地名: +はまな 浜名 苗字: +はまな 浜名 地名: +はまなか 浜中 苗字: +はまなか 浜中 地名: +はまの 浜野 苗字: +はまます 浜益 地名: +はままつ 浜松 地名: +はままつ 浜松 苗字: +はみがき 歯磨き 代4: +はみだ はみ出 サ五7: +はみんぐ ハミング 代4: +はむら 羽村 地名: +はめ はめ 一段1: +はめ 填め 一段1: +はめ 羽目 代1: +はめこ はめ込 マ五7: +はめつ 破滅 名6: +はも 鱧 代1: +はもの 刃物 名1: +はもん 波紋 名1: +はや はや 副1:ラ五7: +はや 逸 ラ五1: +はや 生や サ五5: +はや 早 副1:形9: +はや 速 形9: +はやかわ 早川 苗字: +はやがてん 早合点 代4: +はやきた 早来 地名: +はやさか 早坂 苗字: +はやし 林 苗字: +はやし 林 名1: +はやし 囃子 名2: +はやしだ 林田 苗字: +はやしま 早島 地名: +はやせ 早瀬 苗字: +はやと 隼人 名前: +はやと 勇人 名前: +はやとちり 早とちり 代4: +はやの 早野 苗字: +はやばや 早々 副2: +はやぶさ 隼 代1: +はやま 早ま ラ五3: +はやま 速ま ラ五3: +はやま 葉山 苗字: +はやま 葉山 地名: +はやみ 早見 苗字: +はやみ 速見 地名: +はやみず 速水 苗字: +はやめ 早め 形動6:一段3: +はやめ 速め 一段3: +はら 腹 代1: +はら 原 代1: +はら 原 苗字: +はら はら サ五5: +はら 晴ら サ五5: +はら 払 ワ五8: +はらいこ 払い込 マ五7: +はらいさげ 払い下げ 一段3: +はらいもど 払い戻 サ五7: +はらぐち 原口 苗字: +はらしま 原島 苗字: +はらじゅく 原宿 地名: +はらだ 原田 苗字: +はらまち 原町 地名: +はらわた 腸 代1: +はらん 波乱 名1: +はり 針 代1: +はり 梁 代1: +はり 播 単漢: +はりあ 張り合 ワ五7: +はりがね 針金 名1: +はりがみ 張り紙 代4: +はりがみ 貼紙 代4: +はりき 張り切 ラ五7: +はりこ 張り込 マ五7: +はりこ 張子 名1: +はりだ 張り出 サ五7: +はりつけ 張り付け 一段3: +はりま 播磨 苗字: +はりま 播磨 地名: +はる 春 代1:接頭1: +はるえ 春江 名前: +はるお 治男 名前: +はるお 治夫 名前: +はるお 治雄 名前: +はるお 春男 名前: +はるお 春夫 名前: +はるお 春雄 名前: +はるお 晴夫 名前: +はるお 晴雄 名前: +はるか はるか 副1:形動1: +はるか 遥か 副1:形動1: +はるこ 春子 名前: +はるな 榛名 地名: +はるの 春野 地名: +はるばる はるばる 副2: +はるひ 春日 地名: +はるひこ 春彦 名前: +はるひこ 晴彦 名前: +はるひさ 晴久 名前: +はるみ 晴海 地名: +はるみ 春美 名前: +はるめ 春め カ五3: +はるやすみ 春休み 名1: +はれ 晴れ 一段3: +はれ 腫れ 一段3: +はれあが 晴れ上が ラ五7: +はれぎ 晴れ着 代1: +はれすがた 晴れ姿 名1: +はれつ 破裂 名6: +はれわた 晴れ渡 ラ五7: +はろう 波浪 名1: +はわい ハワイ 地名: +はわい 羽合 地名: +はん 判 代1:ザ変: +はん 半 代1: +はん 版 代1:助数: +はん 犯 接尾1:助数2: +はん 班 接尾1:助数: +はん 反 接頭1:サ変:サ五1: +はん 藩 代1: +はん 範 代1: +はん 煩 代1: +はん 斑 代1: +はん 坂 単漢: +はん 阪 単漢: +はん 幡 単漢: +はん 伴 単漢: +はん 叛 単漢: +はん 帆 単漢: +はん 搬 単漢: +はん 板 単漢: +はん 氾 単漢: +はん 汎 単漢: +はん 畔 単漢: +はん 繁 単漢: +はん 般 単漢: +はん 販 単漢: +はん 釆 単漢: +はん 頒 単漢: +はん 飯 単漢: +はん 凡 単漢: +はんい 範囲 名1: +はんえい 繁栄 名7: +はんえい 反映 名6: +はんえん 半円 名1: +はんか 繁華 名8: +はんかい 半壊 名6: +はんかく 半角 名1: +はんかん 反感 名1: +はんがく 半額 名1: +はんき 半期 名1: +はんきゅう 阪急 企業: +はんきゅう 半球 名1: +はんきょう 反響 名6: +はんぎゃく 反逆 名6: +はんぐ ハング 代4:ラ五1: +はんけい 半径 名1: +はんけつ 判決 名6: +はんげき 反撃 名6: +はんげん 半減 名6: +はんこう 反抗 名6: +はんこう 犯行 名1: +はんご 反語 名1: +はんさよう 反作用 名1: +はんざい 犯罪 名1: +はんざつ 繁雑 名8: +はんざつ 煩雑 名8: +はんざん 飯山 地名: +はんしゃ 反射 名6: +はんしゅう 半周 名6: +はんしゅつ 搬出 名6: +はんしょう 半焼 名6: +はんしょく 繁殖 名6: +はんしん 阪神 企業: +はんしん 半身 名1: +はんじ 判事 名1: +はんじゅく 半熟 名8: +はんじょう 繁盛 名7: +はんすう 半数 名1: +はんすう 反芻 名6: +はんせい 反省 名6: +はんぜん 判然 代4:形動2: +はんそ 反訴 名1: +はんそう 搬送 名6: +はんそく 反則 名6: +はんそで 半袖 名1: +はんぞうもん 半蔵門 地名: +はんたい 反対 名8:サ変: +はんだ 半田 苗字: +はんだ 半田 地名: +はんだい 阪大 名1: +はんだん 判断 名6: +はんちゅう 範疇 名1: +はんちょう 班長 名1: +はんつき 半月 名1: +はんてい 判定 名6: +はんてん 反転 名6: +はんてん 斑点 名1: +はんとう 半島 名1: +はんとうめい 半透明 代5: +はんとし 半年 名1: +はんど ハンド 名1: +はんどう 反動 名4: +はんどうたい 半導体 名1: +はんどく 判読 名6: +はんどら ハンドラ 名1: +はんどりんぐ ハンドリング 名1: +はんどる ハンドル 名1: +はんなん 阪南 地名: +はんにち 半日 名1: +はんにち 反日 名4: +はんにゃ 般若 名1: +はんにゅう 搬入 名6: +はんにん 犯人 名1: +はんね 半値 名1: +はんのう 反応 名6: +はんのう 飯能 地名: +はんはん 半々 名1: +はんば 飯場 名1: +はんばい 販売 名7: +はんばいき 販売機 名1: +はんばく 反駁 名6: +はんぱ 半端 名8: +はんぱつ 反発 名6: +はんぶん 半分 代1: +はんぷ 頒布 名6: +はんぷく 反復 名6: +はんべつ 判別 名6: +はんぼう 繁忙 名10: +はんまー ハンマー 名1: +はんめい 判明 名6: +はんめん 反面 名1: +はんめん 半面 名1: +はんも 繁茂 代4: +はんもく 反目 名6: +はんもん 反問 名6: +はんよう 汎用 名4: +はんらく 反落 名6: +はんらん 氾濫 名6: +はんらん 反乱 名6: +はんりょ 伴侶 名1: +はんれい 判例 名1: +はんれい 凡例 名1: +はんろん 反論 名6: +ば 場 代1:接尾2: +ば 馬 接尾2: +ば 羽 助数2: +ば 婆 単漢: +ば 罵 単漢: +ば 芭 単漢: +ばー バー 名1: +ばーくれー バークレー 地名: +ばーくれい バークレイ 地名: +ばーじょん バージョン 名1: +ばーべきゅー バーベキュー 名1: +ばあい 場合 代1: +ばい 倍 代4:助数2: +ばい 培 単漢: +ばい 媒 単漢: +ばい 唄 単漢: +ばい 貝 単漢: +ばい 梅 単漢: +ばい 楳 単漢: +ばい 煤 単漢: +ばい 狽 単漢: +ばい 買 単漢: +ばい 売 単漢: +ばい 賠 単漢: +ばい 陪 単漢: +ばい 吠 単漢: +ばいあすろん バイアスロン 名1: +ばいう 梅雨 名1: +ばいお バイオ 名1: +ばいか 売価 名1: +ばいか 倍加 名6: +ばいかい 媒介 名6: +ばいがく 倍額 名1: +ばいきゃく 売却 名6: +ばいく バイク 名1: +ばいしゃく 媒酌 名7: +ばいしゅう 買収 名6: +ばいしゅん 売春 名6: +ばいしょう 賠償 名6: +ばいしん 陪審 名1: +ばいすう 倍数 名1: +ばいぞう 倍増 名6: +ばいたい 媒体 名1: +ばいてん 売店 名1: +ばいと バイト 助数: +ばいと バイト 名6: +ばいなり バイナリ 名1: +ばいばい 売買 名6: +ばいめい 売名 名1: +ばいやく 売約 名6: +ばいよう 培養 名6: +ばいようえき 培養液 名1: +ばいりつ 倍率 名1: +ばいんでぃんぐ バインディング 代1: +ばいんど バインド 代4: +ばか 化か サ五1: +ばか 馬鹿 名8: +ばかず 場数 名1: +ばかばかし ばかばかし 形5: +ばかばかし バカバカし 形5: +ばく 麦 代1: +ばく 曝 単漢: +ばく 爆 単漢: +ばく 漠 単漢: +ばく 幕 単漢: +ばく 縛 単漢: +ばく 莫 単漢: +ばく 駁 単漢: +ばく 暴 単漢: +ばくげき 爆撃 名6: +ばくしょう 爆笑 名6: +ばくぜん 漠然 形動2: +ばくだい 莫大 形動4: +ばくだん 爆弾 名1: +ばくてりあ バクテリア 名1: +ばくは 爆破 名6: +ばくはつ 爆発 名6: +ばくまつ 幕末 名1: +ばくやく 爆薬 名1: +ばくろ 暴露 名6: +ばぐ バグ 名1:ラ五1: +ばけ 化け 一段1: +ばけつ バケツ 名1: +ばこ 箱 接尾2: +ばし 橋 接尾2: +ばしょ 場所 名1: +ばしょう 芭蕉 名前: +ばしら 柱 接尾2: +ばす バス 名1: +ばすえ 場末 名1: +ばすけっと バスケット 代3: +ばすてい バス停 名1: +ばせい 罵声 名1: +ばたー バター 名1: +ばち 罰 代1: +ばっ 罰 サ変:サ五1: +ばっきん 罰金 名1: +ばっく バック 代4: +ばっじ バッジ 名1: +ばっすい 抜粋 名6: +ばっそく 罰則 名1: +ばっち バッチ 名1: +ばってき 抜擢 名6: +ばっと バット 名1: +ばっは バッハ 代1: +ばっふぁ バッファ 名1: +ばっぽん 抜本 名1: +ばつ 罰 代1: +ばつ 閥 代1: +ばつ × 代1: +ばつ 抜 単漢: +ばつ 筏 単漢: +ばつ 伐 単漢: +ばつ 末 単漢: +ばつぐん 抜群 名8: +ばとう 罵倒 名6: +ばとう 馬頭 地名: +ばどみんとん バドミントン 名1: +ばなし 話 接尾2: +ばなれ 離れ 接尾7: +ばにら バニラ 名1: +ばば 婆 代1: +ばば 馬場 苗字: +ばぶる バブル 名1: +ばめん 場面 名1: +ばら ばら 名1:サ五7: +ばらばら ばらばら 代6: +ばらばら バラバラ 代6: +ばらま ばらま カ五7: +ばらんす バランス 名1: +ばり 針 接尾2: +ばりえーしょん バリエーション 名1: +ばりき 馬力 名1: +ばりゅー バリュー 名1: +ばるく バルク 名1: +ばるぶ バルブ 名1: +ばれえ バレエ 名1: +ばれんたいん バレンタイン 名1: +ばろめーた バロメータ 名1: +ばん 晩 代1: +ばん 盤 代1: +ばん 番 接尾1:助数2: +ばん 判 接尾2: +ばん 板 接尾2: +ばん 版 接尾2: +ばん 播 単漢: +ばん 伴 単漢: +ばん 挽 単漢: +ばん 磐 単漢: +ばん 蕃 単漢: +ばん 蛮 単漢: +ばん 万 単漢: +ばんかい 挽回 名6: +ばんかん 万感 名1: +ばんがい 番外 名1: +ばんきん 板金 名1: +ばんく バンク 名6: +ばんぐみ 番組 名1: +ばんこく 万国 名1: +ばんこん 晩婚 名1: +ばんごう 番号 名1: +ばんさん 晩餐 名1: +ばんざい 万歳 名1: +ばんしゃく 晩酌 名6: +ばんしゅう 晩秋 名1: +ばんしゅん 晩春 名1: +ばんしょう 万障 名1: +ばんじ 万事 名1: +ばんせい 晩成 名6: +ばんせん 番線 名1:助数2: +ばんぜん 万全 名8: +ばんそう 伴奏 名6: +ばんだい 番台 名1: +ばんだい 磐梯 地名: +ばんち 番地 名1:助数2: +ばんて 番手 助数: +ばんとう 番頭 名1: +ばんど バンド 名1: +ばんどう 坂東 苗字: +ばんにん 番人 名1: +ばんにん 万人 名1: +ばんねん 晩年 名1: +ばんのう 万能 名1: +ばんばん ばんばん 副1: +ばんぱく 万博 名1: +ばんぶつ 万物 名1: +ばんぺい 番兵 名1: +ばんみん 万民 名1: +ばんゆう 万有 名1: +ぱ 波 単漢: +ぱーせんと パーセント 助数2: +ぱーせんと % 助数2: +ぱーそなりてぃ パーソナリティ 名1: +ぱーそなる パーソナル 名8: +ぱーてぃ パーティ 名1: +ぱーてぃー パーティー 名1: +ぱーてぃしょん パーティション 名1: +ぱーと パート 名1: +ぱーとなー パートナー 名1: +ぱーふぇくと パーフェクト 名8: +ぱーみっしょん パーミッション 名1: +ぱーる パール 名1: +ぱい パイ 名1: +ぱい 敗 助数2: +ぱい 杯 助数2: +ぱいおにあ パイオニア 企業: +ぱいぷ パイプ 名1: +ぱいろっと パイロット 名1: +ぱきすたん パキスタン 地名: +ぱく 泊 助数2: +ぱく 拍 助数2: +ぱけっと パケット 名1: +ぱこ 箱 助数2: +ぱじゃま パジャマ 名1: +ぱす パス 代4: +ぱすかる パスカル 名1: +ぱすた パスタ 名1: +ぱすてる パステル 名1: +ぱすわーど パスワード 名1: +ぱずる パズル 名1: +ぱそこん パソコン 名1: +ぱたーん パターン 名1: +ぱちんこ パチンコ 名1: +ぱっく パック 名6: +ぱっけーじ パッケージ 名1: +ぱっしんぐ パッシング 名6: +ぱっち パッチ 代4: +ぱっと パット 代3: +ぱっど パッド 名1: +ぱつ 発 助数2: +ぱなま パナマ 地名: +ぱにっく パニック 名1: +ぱねりすと パネリスト 名1: +ぱねる パネル 名1: +ぱのらま パノラマ 名1: +ぱぱ パパ 名1: +ぱふぉーまんす パフォーマンス 名1: +ぱぶりっく パブリック 名8: +ぱらぐらふ パラグラフ 名1: +ぱらふぃん パラフィン 名1: +ぱらめーた パラメータ 名1: +ぱらめとろん パラメトロン 名1: +ぱられる パラレル 名8: +ぱり パリ 地名: +ぱるす パルス 名1: +ぱるぷ パルプ 名1: +ぱれす パレス 名1: +ぱれすちな パレスチナ 地名: +ぱれっと パレット 名1: +ぱろでぃ パロディ 名1: +ぱわー パワー 名1: +ぱわふる パワフル 名8: +ぱん パン 名1: +ぱん 版 助数: +ぱんく パンク 代4: +ぱんだ パンダ 名1: +ぱんつ パンツ 名1: +ぱんふれっと パンフレット 名1: +ぱんぷす パンプス 名1: +ひ 日 代1: +ひ 火 代1: +ひ 碑 代1: +ひ 秘 代1: +ひ 非 代1:接頭5: +ひ 陽 代1: +ひ 灯 代1: +ひ 否 代1: +ひ 妃 代1: +ひ 比 接尾1: +ひ 費 接尾1: +ひ 引 カ五7: +ひ 惹 カ五1: +ひ 曳 カ五1: +ひ 退 カ五5: +ひ 弾 カ五5: +ひ ひ カ五5: +ひ 干 単漢: +ひ 卑 単漢: +ひ 轡 単漢: +ひ 庇 単漢: +ひ 彼 単漢: +ひ 悲 単漢: +ひ 匪 単漢: +ひ 扉 単漢: +ひ 批 単漢: +ひ 披 単漢: +ひ 斐 単漢: +ひ 泌 単漢: +ひ 疲 単漢: +ひ 皮 単漢: +ひ 緋 単漢: +ひ 罷 単漢: +ひ 肥 単漢: +ひ 被 単漢: +ひ 誹 単漢: +ひ 避 単漢: +ひ 飛 単漢: +ひ 樋 単漢: +ひ 簸 単漢: +ひ 毘 単漢: +ひ 桧 単漢: +ひ 氷 単漢: +ひーぷ ヒープ 名1: +ひーろー ヒーロー 名1: +ひあい 悲哀 名1: +ひいで 秀で 一段1: +ひいらぎ 柊 代1: +ひうん 非運 名1: +ひえ 稗 代1: +ひえ 冷え 一段3: +ひえこ 冷え込 マ五7: +ひえづ 日吉津 地名: +ひえぬき 稗貫 地名: +ひおき 日置 苗字: +ひおき 日置 地名: +ひか 光 ラ五3: +ひか 皮下 名1: +ひかえ 控え 一段3: +ひかく 比較 名6: +ひかげ 日陰 名1: +ひかた 干潟 地名: +ひかみ 氷上 地名: +ひからび 干からび 一段1: +ひかり 光 代1: +ひかり 光 地名: +ひかる 光 名前: +ひかわ 斐川 地名: +ひかわ 簸川 地名: +ひかん 悲観 名6: +ひが ひが マ五7: +ひが 僻 マ五7: +ひがい 被害 名1: +ひがいしゃ 被害者 名1: +ひがえり 日帰り 代4: +ひがし 東 苗字:接頭2: +ひがし 東 代1: +ひがしあざい 東浅井 地名: +ひがしあわくら 東粟倉 地名: +ひがしいけぶくろ 東池袋 地名: +ひがしいず 東伊豆 地名: +ひがしいずも 東出雲 地名: +ひがしいちき 東市来 地名: +ひがしいばらき 東茨城 地名: +ひがしいややま 東祖谷山 地名: +ひがしいわい 東磐井 地名: +ひがしうすき 東臼杵 地名: +ひがしうら 東浦 地名: +ひがしうわ 東宇和 地名: +ひがしおおさか 東大阪 地名: +ひがしおきたま 東置賜 地名: +ひがしかぐら 東神楽 地名: +ひがしかすがい 東春日井 地名: +ひがしかつしか 東葛飾 地名: +ひがしかも 東加茂 地名: +ひがしかわ 東川 苗字: +ひがしかわ 東川 地名: +ひがしかんばら 東蒲原 地名: +ひがしがわ 東側 名1: +ひがしくしら 東串良 地名: +ひがしくにさき 東国東 地名: +ひがしくびき 東頚城 地名: +ひがしくるめ 東久留米 地名: +ひがしぐち 東口 名1: +ひがししらかわ 東白川 地名: +ひがしすみよし 東住吉 地名: +ひがしせふり 東背振 地名: +ひがしそのぎ 東彼杵 地名: +ひがしたがわ 東田川 地名: +ひがしだ 東田 苗字: +ひがしちくま 東筑摩 地名: +ひがしちちぶ 東秩父 地名: +ひがしつがる 東津軽 地名: +ひがしつの 東津野 地名: +ひがしとなみ 東砺波 地名: +ひがしなだ 東灘 地名: +ひがしなり 東成 地名: +ひがしなるせ 東成瀬 地名: +ひがしね 東根 地名: +ひがしの 東野 苗字: +ひがしの 東野 地名: +ひがしひろしま 東広島 地名: +ひがしまつうら 東松浦 地名: +ひがしまつやま 東松山 地名: +ひがしむらやま 東村山 地名: +ひがしむろ 東牟婁 地名: +ひがしもろかた 東諸県 地名: +ひがしやつしろ 東八代 地名: +ひがしやま 東山 苗字: +ひがしやま 東山 地名: +ひがしやまと 東大和 地名: +ひがしやまなし 東山梨 地名: +ひがしゆり 東由利 地名: +ひがしよか 東与賀 地名: +ひがしよしの 東吉野 地名: +ひがしよどがわ 東淀川 地名: +ひがしりしり 東利尻 地名: +ひがん 彼岸 名2: +ひがん 悲願 名1: +ひき 比企 苗字: +ひき 比企 地名: +ひき 匹 助数2: +ひき 疋 単漢: +ひきあ 引き合 ワ五7: +ひきあげ 引き上げ 一段3: +ひきあげ 引き揚げ 一段3: +ひきあて 引当 名1: +ひきあわせ 引き合わせ 一段3: +ひきい 率い 一段1: +ひきうけ 引き受け 一段4: +ひきうけ 引受け 名1: +ひきおと 引き落と サ五7: +ひきかえ 引き替え 一段3: +ひきかえ 引き返 サ五7: +ひきかえ 引換 名1: +ひきがね 引金 名1: +ひきがわ 日置川 地名: +ひきこ 引き込 マ五7: +ひきさ 引き裂 カ五7: +ひきさ 引きさ カ五7: +ひきさが 引き下が ラ五7: +ひきさげ 引き下げ 一段3: +ひきさげ 引下げ 名1: +ひきざん 引き算 名1: +ひきざん 引算 名1: +ひきしま 引き締ま ラ五7: +ひきしめ 引き締め 一段3: +ひきすう 引数 名1: +ひきず ひきず ラ五3: +ひきた 引き立 タ五7: +ひきた 疋田 苗字: +ひきだ 引き出 サ五7: +ひきつ 引き継 ガ五7: +ひきつけ 引き付け 一段3: +ひきつづ 引き続 カ五3: +ひきでもの 引出物 代1: +ひきと 引き取 ラ五8: +ひきとめ 引き止め 一段1: +ひきぬ 引き抜 カ五3: +ひきのば 引き延ば サ五7: +ひきのば 引き伸ば サ五7: +ひきはな 引き離 サ五7: +ひきみ 匹見 地名: +ひきもど 引き戻 サ五7: +ひきゃく 飛脚 名1: +ひきょう 秘境 名1: +ひきょう 卑怯 代5: +ひきよせ 引き寄せ 一段1: +ひきわけ 引き分け 一段3: +ひきわた 引き渡 サ五8: +ひきわたし 引渡し 代4: +ひぎょう 罷業 名1: +ひく 低 形2: +ひくつ 卑屈 名8: +ひくめ 低め 一段3: +ひぐち 樋口 苗字: +ひぐま ひぐま 代1: +ひけた 引田 地名: +ひけつ 秘訣 名1: +ひけつ 否決 名6: +ひけんしゃ 被験者 名1: +ひげ 髭 代1: +ひげ 鬚 代1: +ひげ 卑下 名6: +ひげき 悲劇 名4: +ひこ 彦 代1: +ひこう 非行 名1: +ひこう 飛行 名6: +ひこうき 飛行機 名1: +ひこうじょう 飛行場 名1: +ひこく 被告 名1: +ひこね 彦根 地名: +ひご 庇護 代4: +ひご 肥後 地名: +ひごと 日毎 代6: +ひごろ 日頃 代1: +ひさ 久 単漢: +ひさい 被災 名6: +ひさい 久居 地名: +ひさお 久男 名前: +ひさお 久夫 名前: +ひさお 久雄 名前: +ひさこ 久子 名前: +ひさし 久し 形8: +ひさし 久 名前: +ひさし 寿 名前: +ひさし 尚 名前: +ひさし 庇 単漢: +ひさしぶり 久しぶり 名2: +ひさびさ 久々 名1: +ひさやま 久山 苗字: +ひさやま 久山 地名: +ひさん 悲惨 名8: +ひざ 膝 代1: +ひざし 日差し 代1: +ひし 菱 代1: +ひしかり 菱刈 地名: +ひしかわ 菱川 苗字: +ひしがた 菱形 名1: +ひしひし ひしひし 副2: +ひしゃたい 被写体 名1: +ひしょ 秘書 名1: +ひしょ 避暑 名6: +ひしょう 飛翔 名6: +ひじ 肘 代1: +ひじ 肱 代1: +ひじ 日出 苗字: +ひじ 日出 地名: +ひじかわ 肱川 地名: +ひじゅう 比重 名1: +ひじゅつ 秘術 名1: +ひじゅん 批准 名6: +ひじょう 非常 名8: +ひじょう 非情 名8: +ひじょうぐち 非常口 名1: +ひじょうしき 非常識 名8: +ひじり 聖 代1: +ひすてりー ヒステリー 名1: +ひすとりー ヒストリー 名1: +ひず ひず マ五3: +ひず 歪 マ五3: +ひぜん 肥前 地名: +ひそ 潜 マ五3: +ひそう 悲壮 名8: +ひそう 皮相 名8: +ひそか 秘か 形動4: +ひそか 密か 形動4: +ひそめ 潜め 一段1: +ひぞう 秘蔵 名6: +ひぞく 卑俗 代5: +ひた 浸 サ五8:ラ五7: +ひた 日田 地名: +ひたい 額 代1: +ひたすら ひたすら 形動1: +ひたち 常陸 地名: +ひたち 日立 苗字: +ひたち 日立 地名: +ひたちおおた 常陸太田 地名: +ひたん 悲嘆 名7: +ひだ 飛騨 地名: +ひだ 飛田 苗字: +ひだい 肥大 名8:サ変: +ひだか 日高 苗字: +ひだか 日高 地名: +ひだち 肥立ち 代1: +ひだり 左 代1:接頭1: +ひだりあし 左足 名1: +ひだりうえ 左上 代1: +ひだりうで 左腕 名1: +ひだりがわ 左側 名1: +ひだりした 左下 代1: +ひだりて 左手 名1: +ひだりめ 左目 名1: +ひちそう 七宗 地名: +ひちゅう 秘中 名1: +ひっか 引っか カ五7: +ひっかか 引っかか ラ五7: +ひっかけ 引っかけ 一段3: +ひっき 筆記 名6: +ひっくりかえ ひっくり返 サ五5:ラ五1: +ひっけい 必携 名1: +ひっけん 必見 名1: +ひっこ 引っ越 サ五8: +ひっこ 引っ込 マ五3: +ひっこし 引越し 名6: +ひっさつ 必殺 名1: +ひっし 必死 名8: +ひっし 必至 名1: +ひっしゃ 筆者 名1: +ひっしゃ 筆写 代4: +ひっしゅう 必修 名1: +ひっしょう 必勝 名1: +ひっす 必須 名8: +ひっせき 筆跡 名1: +ひっそり ひっそり 副3: +ひっち 筆致 名1: +ひっちゃく 必着 名1: +ひってき 匹敵 名6: +ひっと ヒット 名6: +ひっとう 筆頭 名1: +ひっぱ 引っ張 ラ五7: +ひっぱく 逼迫 名6: +ひつ 筆 代1: +ひつ 泌 単漢: +ひつ 匹 単漢: +ひつ 弼 単漢: +ひつ 必 単漢: +ひつ 畢 単漢: +ひつ 逼 単漢: +ひつ 疋 単漢: +ひつう 悲痛 名8: +ひつぎ 棺 代1: +ひつじ 羊 代1: +ひつじ 未 代1: +ひつじゅ 必需 名1: +ひつじゅん 筆順 名1: +ひつじょう 必定 代6: +ひつぜつ 筆舌 名1: +ひつぜん 必然 名4: +ひつだん 筆談 名6: +ひつどく 必読 名1: +ひつよう 必要 名8: +ひづけ 日付 名1: +ひづめ 蹄 代1: +ひてい 否定 名6: +ひてつ 非鉄 名1: +ひで 英 単漢: +ひで 秀 単漢: +ひであき 英明 名前: +ひであき 秀明 名前: +ひでお 英男 名前: +ひでお 英夫 名前: +ひでお 英雄 名前: +ひでお 秀男 名前: +ひでお 秀夫 名前: +ひでお 秀雄 名前: +ひでお 日出男 名前: +ひでお 日出夫 名前: +ひでき 秀樹 名前: +ひでき 英樹 名前: +ひでこ 秀子 名前: +ひでとし 英俊 名前: +ひでひこ 英彦 名前: +ひでみつ 英光 名前: +ひでゆき 秀幸 名前: +ひでり 日照り 名1: +ひでん 秘伝 名1: +ひと 人 代1: +ひと ひと 接頭1: +ひと 一 数詞: +ひとえ 一重 代1: +ひとえ 単 単漢: +ひとかげ 人影 代1: +ひとがら 人柄 名2: +ひとくち 一口 代1: +ひとこと 一言 代6: +ひところ 一頃 代1: +ひとごと 人事 代1: +ひとごみ 人混み 代1: +ひとさわがせ 人騒がせ 代5: +ひとざと 人里 代1: +ひとし 等 名前: +ひとし 仁 名前: +ひとし 均 名前: +ひとし 仁志 名前: +ひとし 等し 形2: +ひとじち 人質 名1: +ひとすじ 一筋 代5: +ひとたび 一度 代6: +ひとちがい 人違い 代4: +ひとつ ひとつ 代6: +ひとつ 一つ 代6: +ひとつばし 一ツ橋 地名: +ひとつばし 一橋 苗字: +ひとづま 人妻 代1: +ひとで 人手 代1: +ひとで 人出 代1: +ひととおり 一通り 代6: +ひととき ひととき 代6: +ひととき 一時 代6: +ひとなみ 人並 代5: +ひとばん 一晩 代6: +ひとびと 人々 代1: +ひとまえ 人前 代1: +ひとまく 一幕 名1: +ひとまず ひとまず 代6: +ひとまわり 一回り 代4: +ひとみ 瞳 代1: +ひとみ 仁美 名前: +ひとみ 人見 苗字: +ひとよし 人吉 地名: +ひとり 一人 名2: +ひとり 独り 名2: +ひとり ひとり 名2: +ひとりじめ 独り占め 代4: +ひとりっこ 一人っ子 代1: +ひど ひど 形2: +ひど 酷 形2: +ひどり 日取り 代1: +ひな 雛 代1: +ひない 比内 地名: +ひなせ 日生 地名: +ひなた 日向 苗字: +ひなん 避難 名6: +ひなん 非難 名6: +ひにく 皮肉 名8:ラ五1: +ひにち 日にち 代1: +ひにん 否認 名6: +ひにん 避妊 名6: +ひね ひね 一段1:ラ五7: +ひね 捻 ラ五7: +ひの 日野 苗字: +ひの 日野 地名: +ひのえ 丙 代1: +ひのえまた 桧枝岐 地名: +ひのかげ 日之影 地名: +ひのき 桧 代1: +ひので 日の出 代1: +ひのはら 桧原 地名: +ひはん 批判 名6: +ひば 比婆 地名: +ひばく 被曝 名6: +ひばち 火鉢 代1: +ひばな 火花 名1: +ひばん 非番 名1: +ひひょう 批評 名6: +ひび 日々 代6: +ひび ひび 代1: +ひび 響 カ五7: +ひびや 日比谷 地名: +ひびわれ ひび割れ 代4:一段1: +ひふ 皮膚 名1: +ひふく 被服 名1: +ひふく 被覆 名6: +ひふん 悲憤 名6: +ひぶ 日歩 名1: +ひほう 悲報 名1: +ひほう 秘宝 名1: +ひぼん 非凡 名8: +ひま 暇 名9: +ひま 隙 代1: +ひま 閑 単漢: +ひまく 皮膜 名1: +ひまらや ヒマラヤ 地名: +ひまわり 向日葵 名1: +ひまん 肥満 名6: +ひみ 氷見 地名: +ひみつ 秘密 名8: +ひめ 姫 名2: +ひめ 秘め 一段1: +ひめ 媛 単漢: +ひめい 悲鳴 名1: +ひめかわ 姫川 地名: +ひめしま 姫島 地名: +ひめじ 姫路 地名: +ひめど 姫戸 地名: +ひめん 罷免 名6: +ひも 紐 代1: +ひも 綬 単漢: +ひもく 費目 名1: +ひもと 火元 名1: +ひもの 干物 名1: +ひゃくしょう 百姓 名1: +ひゃくぶん 百聞 名1: +ひゃくぶんりつ 百分率 名1: +ひゃっか 百科 名1: +ひゃっかてん 百貨店 名1: +ひや 冷や サ五7: +ひやあせ 冷汗 代1: +ひやか 冷やか サ五7: +ひやく 飛躍 名6: +ひやま 桧山 苗字: +ひやま 桧山 地名: +ひややか 冷やか 形動4: +ひゅーすとん ヒューストン 地名: +ひゅーまん ヒューマン 名1: +ひゅーれっと ヒューレット 名1: +ひゅうが 日向 苗字: +ひゅうが 日向 地名: +ひゆ 比喩 名6: +ひょう 表 代1: +ひょう 表 サ変:サ五1: +ひょう 票 代1: +ひょう 票 助数2: +ひょう 標 代1: +ひょう 豹 代1: +ひょう 評 接尾1:サ変:サ五1: +ひょう 俵 助数2: +ひょう 雹 代1: +ひょう 兵 代1: +ひょう 拍 単漢: +ひょう 彪 単漢: +ひょう 氷 単漢: +ひょう 漂 単漢: +ひょう 瓢 単漢: +ひょう 平 単漢: +ひょうい 表意 名1: +ひょうか 評価 名6: +ひょうが 氷河 名1: +ひょうき 表記 名6: +ひょうき 標記 名6: +ひょうきん ひょうきん 代5: +ひょうぎ 評議 名6: +ひょうけい 表敬 名1: +ひょうけつ 票決 名6: +ひょうげん 表現 名6: +ひょうこう 標高 名1: +ひょうご 標語 名1: +ひょうご 兵庫 地名: +ひょうさつ 表札 名1: +ひょうざん 氷山 名1: +ひょうし 拍子 名1: +ひょうし 表紙 名1: +ひょうしき 標識 名1: +ひょうしゅつ 表出 名6: +ひょうしょう 表彰 名6: +ひょうしょう 表象 名1: +ひょうじ 表示 名6: +ひょうじゅん 標準 名4: +ひょうじょう 表情 代3: +ひょうそう 表層 名1: +ひょうだい 表題 名1: +ひょうちゃく 漂着 名6: +ひょうてい 評定 名6: +ひょうてき 標的 名1: +ひょうてん 氷点 名1: +ひょうてん 評点 名1: +ひょうど 表土 名1: +ひょうどう 兵藤 苗字: +ひょうはく 漂白 名6: +ひょうばん 評判 名6: +ひょうへん 豹変 名6: +ひょうほん 標本 名1: +ひょうめい 表明 名6: +ひょうめん 表面 名4: +ひょうり 表裏 名6: +ひょうりゅう 漂流 名6: +ひょうりょう 秤量 名6: +ひょうろん 評論 名6: +ひょっこり ひょっこり 副2: +ひょっと ひょっと 副4: +ひよう 費用 名1: +ひよし 日義 地名: +ひよし 日吉 苗字: +ひよし 日吉 地名: +ひより 日和 名1: +ひよわ ひ弱 形動4: +ひら 開 カ五8: +ひら 平 代1:接頭1: +ひらあやまり 平謝り 代1: +ひらい 平井 苗字: +ひらい 平井 地名: +ひらいしん 避雷針 名1: +ひらいずみ 平泉 地名: +ひらお 平生 地名: +ひらお 平尾 苗字: +ひらお 平尾 地名: +ひらおか 平岡 苗字: +ひらか 平賀 地名: +ひらか 平鹿 地名: +ひらかた 枚方 地名: +ひらかわ 平河 地名: +ひらかわ 平川 苗字: +ひらが 平賀 苗字: +ひらがな ひらがな 名1: +ひらがな 平仮名 名1: +ひらき 平木 苗字: +ひらきなお 開き直 ラ五7: +ひらきなお 開きなお ラ五7: +ひらさわ 平沢 苗字: +ひらた 平た 形2: +ひらた 平田 苗字: +ひらた 平田 地名: +ひらつか 平塚 苗字: +ひらつか 平塚 地名: +ひらとり 平取 地名: +ひらど 平戸 地名: +ひらない 平内 地名: +ひらの 平野 苗字: +ひらの 平野 地名: +ひらはら 平原 苗字: +ひらばやし 平林 苗字: +ひらまつ 平松 苗字: +ひらめ ひらめ カ五7:代1: +ひらめ 閃 カ五7: +ひらめ 鮃 代1: +ひらや 平谷 苗字: +ひらや 平谷 地名: +ひらやま 平山 苗字: +ひらら 平良 地名: +ひりつ 比率 名1: +ひりょう 肥料 名1: +ひる ひる マ五7: +ひる 怯 マ五7: +ひる 昼 名2: +ひる 蛭 代1: +ひる 蒜 単漢: +ひるい 比類 名1: +ひるかわ 蛭川 苗字: +ひるかわ 蛭川 地名: +ひるがえ 翻 サ五7:ラ五3: +ひるね 昼寝 名6: +ひるま 昼間 代6: +ひるめし 昼飯 名1: +ひるやすみ 昼休み 名2: +ひれ 鰭 代1: +ひれい 比例 名6: +ひれつ 卑劣 名8: +ひれふ ひれ伏 サ五1: +ひれん 悲恋 名1: +ひろ 拾 ワ五7: +ひろ 広 形6:単漢: +ひろ 弘 単漢: +ひろ 浩 単漢: +ひろ 寛 単漢: +ひろ 宏 単漢: +ひろ 尋 単漢: +ひろ 博 単漢: +ひろ 裕 単漢: +ひろあき 宏明 名前: +ひろあき 広明 名前: +ひろあき 弘明 名前: +ひろあき 博昭 名前: +ひろあき 博明 名前: +ひろう 疲労 名6: +ひろう 披露 名7: +ひろうえん 披露宴 名1: +ひろお 広尾 地名: +ひろかみ 広神 地名: +ひろかわ 広川 苗字: +ひろが 広が ラ五3: +ひろがわ 広川 地名: +ひろげ 広げ 一段1: +ひろこ 弘子 名前: +ひろこ 裕子 名前: +ひろこ 浩子 名前: +ひろこ 博子 名前: +ひろこ 寛子 名前: +ひろさき 弘前 地名: +ひろし 広志 名前: +ひろし 浩志 名前: +ひろし 博司 名前: +ひろし 博史 名前: +ひろし 寛 名前: +ひろし 宏 名前: +ひろし 広 名前: +ひろし 弘 名前: +ひろし 浩 名前: +ひろし 博 名前: +ひろし 裕 名前: +ひろし 洋 名前: +ひろしま 広島 地名: +ひろしま 広島 苗字: +ひろせ 広瀬 苗字: +ひろた 広田 苗字: +ひろなか 広中 苗字: +ひろの 広野 地名: +ひろの 広野 苗字: +ひろのみや 浩宮 苗字: +ひろば 広場 名1: +ひろひさ 博久 名前: +ひろひさ 裕久 名前: +ひろびろ 広々 副3: +ひろふみ 博文 苗字: +ひろま 広ま ラ五3: +ひろま 広間 名1: +ひろみ 宏美 名前: +ひろみ 広見 地名: +ひろみ 弘美 名前: +ひろみ 博美 名前: +ひろみ 裕美 名前: +ひろみち 博道 名前: +ひろみつ 博満 名前: +ひろめ 広め 一段1: +ひろゆき 浩之 名前: +ひろゆき 博之 名前: +ひろゆき 宏之 名前: +ひろゆき 弘之 名前: +ひろゆき 裕之 名前: +ひろゆき 寛之 名前: +ひろゆき 啓之 名前: +ひろゆき 宏行 名前: +ひわ 秘話 名1: +ひわ 比和 地名: +ひわき 樋脇 地名: +ひわさ 日和佐 地名: +ひわり 日割 名6: +ひわれ 干割れ 一段3: +ひん 品 代1:接尾1:助数2: +ひん 貧 代1: +ひん 賓 代1: +ひん 瀕 サ変:サ五1: +ひん 頻 単漢: +ひん 彬 単漢: +ひん 浜 単漢: +ひん 牝 単漢: +ひん 斌 単漢: +ひんい 品位 名1: +ひんかく 品格 名1: +ひんけつ 貧血 名1: +ひんこう 品行 名1: +ひんこん 貧困 名8: +ひんし 品詞 名1: +ひんし 瀕死 名1: +ひんしつ 品質 名1: +ひんしゅ 品種 名1: +ひんしゅく 顰蹙 代4: +ひんじゃく 貧弱 名8: +ひんずー ヒンズー 名1: +ひんと ヒント 名1: +ひんど 頻度 名1: +ひんぱつ 頻発 名6: +ひんぱん 頻繁 名8: +ひんぷ 貧富 名1: +ひんみん 貧民 名1: +ひんめい 品名 名1: +ひんもく 品目 名1: +ひんやり ひんやり 副3: +び 美 代1: +び 微 代1: +び 火 接尾2: +び 日 接尾2: +び 尾 代1: +び 備 単漢: +び 枇 単漢: +び 毘 単漢: +び 琵 単漢: +び 眉 単漢: +び 鼻 単漢: +び 媚 単漢: +びーかー ビーカー 名1: +びーとるず ビートルズ 名1: +びーなす ビーナス 名1: +びーる ビール 名1: +びえい 美瑛 地名: +びか 美化 名6: +びかん 美観 名1: +びがく 美学 名1: +びき 匹 助数2: +びこう 備考 名1: +びこう 尾行 名6: +びさい 尾西 地名: +びさい 微細 形動4: +びしゅ 美酒 名1: +びしょう 微笑 代4: +びしょう 微小 代5: +びじー ビジー 代1: +びじねす ビジネス 名1: +びじゃく 微弱 名8: +びじゅある ビジュアル 名8: +びじゅつ 美術 名1: +びじゅつかん 美術館 名1: +びじょ 美女 名1: +びじょん ビジョン 名1: +びじん 美人 名1: +びすます ビスマス 名1: +びせい 美星 地名: +びぜん 備前 地名: +びだん 美談 名1: +びっくり びっくり 代4: +びっぐ ビッグ 名8: +びっしょり びっしょり 副8: +びっしり びっしり 副8: +びっちゅう 備中 地名: +びっと ビット 代1:助数: +びてき 美的 名8: +びでお ビデオ 名4: +びとく 美徳 名1: +びなん 美男 代1: +びにーる ビニール 名1: +びばい 美唄 地名: +びひん 備品 名1: +びび 微々 形動2: +びふか 美深 地名: +びぶん 微分 名6: +びほろ 美幌 地名: +びみょう 微妙 形動4: +びゃく 百 単漢: +びゃくや 白夜 名1: +びやく 媚薬 名1: +びゅー ビュー 名1: +びゅう 謬 単漢: +びょう 鋲 代1: +びょう 秒 代1:助数2: +びょう 票 助数2: +びょう 病 接尾2: +びょう 廟 代1: +びょう 描 単漢: +びょう 猫 単漢: +びょう 苗 単漢: +びょう 錨 単漢: +びょう 平 単漢: +びょういん 病院 名1: +びょうが 描画 名6: +びょうき 病気 名7: +びょうけつ 病欠 名1: +びょうげん 病原 名1: +びょうし 拍子 助数2: +びょうし 病死 名6: +びょうしつ 病室 名1: +びょうしゃ 描写 名6: +びょうしょう 病床 名1: +びょうしん 病身 名1: +びょうしん 秒針 名1: +びょうじゃく 病弱 名8: +びょうじょう 病状 名3: +びょうそく 秒速 名1: +びょうたい 病態 名1: +びょうてき 病的 形動3: +びょうとう 病棟 名1: +びょうどう 平等 名8: +びょうにん 病人 名3: +びょうぼつ 病没 名6: +びょうま 病魔 名1: +びょうめい 病名 名1: +びょうりがく 病理学 名4: +びょうれき 病歴 名1: +びよう 美容 名1: +びよく 尾翼 名1: +びら ビラ 名1: +びらん 糜爛 名6: +びりやーど ビリヤード 名1: +びりょう 微量 名1: +びりょく 微力 名8: +びる ビル 名1: +びわ 琵琶 代1: +びわこ 琵琶湖 地名: +びん 便 代1:助数: +びん 瓶 代1: +びん 貧 単漢: +びん 敏 単漢: +びんかん 敏感 名8: +びんご 備後 地名: +びんしょう 敏捷 代5: +びんじょう 便乗 代4: +びんせん 便箋 名1: +びんそく 敏速 代5: +びんぼう 貧乏 代5:サ変: +びんらん 便覧 名1: +ぴーく ピーク 名1: +ぴーす ピース 名1: +ぴあにすと ピアニスト 名1: +ぴあの ピアノ 名1: +ぴき 匹 助数2: +ぴくせる ピクセル 名1: +ぴったり ぴったり 副3:形動9: +ぴっち ピッチ 名1: +ぴっぷ 比布 地名: +ぴゅあ ピュア 名8: +ぴょう 票 助数2: +ぴらふ ピラフ 名1: +ぴらみっど ピラミッド 名1: +ぴりおど ピリオド 名1: +ぴん ピン 名1: +ぴん 品 助数2: +ぴんく ピンク 名1: +ぴんせっと ピンセット 名1: +ぴんち ピンチ 名1: +ぴんと ピント 名1: +ふ 吹 カ五7: +ふ 拭 カ五7: +ふ 噴 カ五1: +ふ 葺 カ五1: +ふ 伏 サ五3: +ふ 臥 サ五1: +ふ 降 ラ五7: +ふ 振 ラ五7: +ふ 踏 マ五8: +ふ 符 代1: +ふ 府 代1: +ふ 譜 代1: +ふ 負 代1: +ふ 歩 代1: +ふ 賦 代4: +ふ 付 代4: +ふ 婦 接尾1: +ふ 夫 接尾1: +ふ 不 接頭5: +ふ 埠 単漢: +ふ 富 単漢: +ふ 冨 単漢: +ふ 布 単漢: +ふ 怖 単漢: +ふ 扶 単漢: +ふ 敷 単漢: +ふ 斧 単漢: +ふ 普 単漢: +ふ 浮 単漢: +ふ 父 単漢: +ふ 腐 単漢: +ふ 膚 単漢: +ふ 芙 単漢: +ふ 赴 単漢: +ふ 阜 単漢: +ふ 附 単漢: +ふ 風 単漢: +ふ 鮒 単漢: +ふ 訃 単漢: +ふ 麸 単漢: +ふーど フード 名1: +ふーりえ フーリエ 名1: +ふぁーすと ファースト 名1: +ふぁい φ 代1: +ふぁいる ファイル 名6: +ふぁいんだー ファインダー 名1: +ふぁくしみり ファクシミリ 名1: +ふぁくたー ファクター 名1: +ふぁくとりー ファクトリー 名1: +ふぁっくす ファックス 名1: +ふぁっしょん ファッション 名1: +ふぁみこん ファミコン 名1: +ふぁみりー ファミリー 名1: +ふぁん ファン 名1: +ふぁんくしょん ファンクション 名1: +ふぁんたじー ファンタジー 名1: +ふあん 不安 名8: +ふあんてい 不安定 代5: +ふぃーだ フィーダ 名1: +ふぃーと フィート 助数2: +ふぃーどばっく フィードバック 代4: +ふぃーるど フィールド 名1: +ふぃくしょん フィクション 名1: +ふぃじかる フィジカル 代5: +ふぃっくす フィックス 代4: +ふぃっと フィット 代4: +ふぃらめんと フィラメント 名1: +ふぃりぴん フィリピン 地名: +ふぃる フィル 名1: +ふぃるた フィルタ 名1: +ふぃるたー フィルター 名1: +ふぃるむ フィルム 名1: +ふい 不意 代5: +ふいちょう 吹聴 名6: +ふいっち 不一致 代1: +ふう 風 代5:接尾1: +ふう 封 代1:ザ変: +ふう ふう 代5:接尾1: +ふう 夫 単漢: +ふう 楓 単漢: +ふういん 封印 名6: +ふうう 風雨 名1: +ふううん 風雲 名1: +ふうか 風化 名6: +ふうかく 風格 名1: +ふうが 風雅 名1: +ふうがわり 風変わり 形動1: +ふうき 風紀 名1: +ふうきり 封切り 名6: +ふうけい 風景 名1: +ふうこう 風光 名1: +ふうこう 風向 名1: +ふうさ 封鎖 名6: +ふうさい 風采 名1: +ふうし 風刺 名6: +ふうしゃ 風車 名1: +ふうしゅう 風習 名1: +ふうしょ 封書 名1: +ふうしん 風疹 名1: +ふうじこ 封じ込 マ五3: +ふうせつ 風雪 名1: +ふうせん 風船 名1: +ふうそく 風速 名1: +ふうぞく 風俗 名1: +ふうちょう 風潮 名1: +ふうとう 封筒 名1: +ふうど 風土 名1: +ふうにゅう 封入 名6: +ふうふ 夫婦 名3: +ふうぶつ 風物 名1: +ふうぼう 風貌 名1: +ふうぼう 風防 名1: +ふうみ 風味 名1: +ふうりゅう 風流 名8: +ふうりょく 風力 名1: +ふうりん 風鈴 名1: +ふうれん 風連 地名: +ふうん 不運 名8: +ふぇーず フェーズ 名1: +ふぇあ フェア 代1: +ふぇいす フェイス 名1: +ふぇざー フェザー 名1: +ふぇすてぃばる フェスティバル 代1: +ふぇみにずむ フェミニズム 代1: +ふぇりー フェリー 代1: +ふぇんす フェンス 代1: +ふえ 増え 一段2: +ふえ 殖え 一段1: +ふえ 笛 代1: +ふぉーかす フォーカス 代4: +ふぉーく フォーク 代4: +ふぉーとらん フォートラン 名1: +ふぉーど フォード 名1: +ふぉーまっと フォーマット 名1: +ふぉーまる フォーマル 名8: +ふぉーむ フォーム 名1: +ふぉーらむ フォーラム 名1: +ふぉーると フォールト 名1: +ふぉあ フォア 名1: +ふぉるだー フォルダー 名1: +ふぉると フォルト 名1: +ふぉろー フォロー 代4: +ふぉわーど フォワード 名1: +ふぉんと フォント 名1: +ふおん 不穏 形動4: +ふか 更か サ五7: +ふか 深 形8: +ふか 付加 代4: +ふか 不可 名1: +ふか 府下 名1: +ふか 鱶 名1: +ふか 負荷 代4: +ふかい 不快 名10: +ふかい 深井 苗字: +ふかうら 深浦 地名: +ふかえ 深江 苗字: +ふかえ 深江 地名: +ふかお 深尾 苗字: +ふかかい 不可解 名8: +ふかがわ 深川 苗字: +ふかがわ 深川 地名: +ふかく 不覚 代1: +ふかけつ 不可欠 名8: +ふかさわ 深沢 苗字: +ふかざわ 深沢 苗字: +ふかざわ 深沢 地名: +ふかしん 不可侵 名1: +ふかせ 深瀬 苗字: +ふかだ 深田 苗字: +ふかだ 深田 地名: +ふかの 深野 苗字: +ふかのう 不可能 名8: +ふかひ 不可避 名8: +ふかぶん 不可分 名8: +ふかま 深ま ラ五3: +ふかめ 深め 一段3: +ふかや 深谷 苗字: +ふかや 深谷 地名: +ふかやす 深安 地名: +ふかわ 布川 苗字: +ふかんしょう 不感症 名1: +ふかんぜん 不完全 名8: +ふがいな ふがいな 形2: +ふき 付記 代4: +ふき 蕗 代1: +ふきあげ 吹上 地名: +ふきあれ 吹き荒れ 一段1: +ふきかえ 吹き返 サ五7: +ふきかえ 吹替え 一段3: +ふきげん 不機嫌 代5: +ふきこ 吹き込 マ五7: +ふきそ 不起訴 名1: +ふきそく 不規則 代5: +ふきつ 不吉 代5: +ふきつけ 吹き付け 一段3: +ふきでもの 吹出物 名1: +ふきと 拭き取 ラ五8: +ふきぬけ 吹抜け 一段3: +ふきゅう 普及 名6: +ふきゅう 不朽 名1: +ふきゅう 不休 名1: +ふきょう 不況 名8: +ふきょう 布教 名6: +ふきん 付近 名1: +ふきん 布巾 名1: +ふきんこう 不均衡 名8: +ふきんしん 不謹慎 名8: +ふぎ 不義 名1: +ふぎ 付議 名6: +ふく 含 マ五4: +ふく 服 代1: +ふく 服 サ五1:サ変: +ふく 副 代1:接頭5: +ふく 幅 代1: +ふく 福 代1: +ふく 複 代1: +ふく 伏 サ変:サ五1: +ふく 復 サ変:サ五1: +ふく 覆 単漢: +ふく 腹 単漢: +ふく 輻 単漢: +ふくい 福井 苗字: +ふくい 福井 地名: +ふくいん 福音 名1: +ふくえ 福栄 地名: +ふくえ 福江 地名: +ふくえき 服役 名6: +ふくえん 復縁 名6: +ふくおか 福岡 苗字: +ふくおか 福岡 地名: +ふくがく 復学 名6: +ふくぎょう 副業 名1: +ふくげん 復元 名6: +ふくごう 複合 名6: +ふくごう 復号 名6: +ふくさよう 副作用 名1: +ふくさんぶつ 副産物 名1: +ふくざき 福崎 苗字: +ふくざき 福崎 地名: +ふくざつ 複雑 名8: +ふくざわ 福沢 苗字: +ふくし 福祉 名1: +ふくし 副詞 名1: +ふくしき 複式 名1: +ふくしま 福島 苗字: +ふくしま 福島 地名: +ふくしまけん 福島県 県区: +ふくしゃ 複写 名6: +ふくしゅう 復習 名6: +ふくしゅう 復讐 名6: +ふくしょう 副賞 名1: +ふくしょう 復唱 名6: +ふくしょく 復職 名6: +ふくしょく 服飾 名1: +ふくしん 腹心 名1: +ふくじ 服地 名1: +ふくじゅう 服従 名6: +ふくすい 覆水 名1: +ふくすう 複数 名1: +ふくせい 複製 名6: +ふくせん 伏線 名1: +ふくせん 複線 名4: +ふくそう 服装 代3: +ふくそう 輻輳 代4: +ふくたろう 福太郎 名前: +ふくだ 福田 苗字: +ふくだい 副題 代1: +ふくち 福地 苗字: +ふくちやま 福知山 地名: +ふくちょう 復調 名6: +ふくつ 不屈 名8: +ふくつう 腹痛 名1: +ふくで 福田 地名: +ふくとみ 福富 苗字: +ふくとめ 福留 苗字: +ふくどく 服毒 名6: +ふくどみ 福富 苗字: +ふくどみ 福富 地名: +ふくなが 福永 苗字: +ふくの 福野 地名: +ふくはら 福原 苗字: +ふくびき 福引 名1: +ふくぶ 腹部 名1: +ふくべ 福部 地名: +ふくほん 副本 名1: +ふくま 福間 苗字: +ふくまく 腹膜 名1: +ふくみつ 福光 苗字: +ふくみつ 福光 地名: +ふくむ 服務 名6: +ふくめん 覆面 名6: +ふくもと 福本 苗字: +ふくやく 服薬 名6: +ふくやま 福山 苗字: +ふくやま 福山 地名: +ふくよう 服用 名6: +ふくら 膨ら サ五1:マ五7: +ふくり 複利 名1: +ふくり 福利 名1: +ふくれ 膨れ 一段1: +ふくろ 袋 名1: +ふくろ 復路 名1: +ふくろい 袋井 地名: +ふくろう 梟 代1: +ふくろう ふくろう 代1: +ふぐ 河豚 代1: +ふぐ 鰒 代1: +ふぐあい 不具合 代5: +ふぐたいてん 不倶載天 名1: +ふけ 更け 一段1: +ふけ 老け 一段1: +ふけ フケ ラ五2: +ふけい 父兄 名3: +ふけい 婦警 代2: +ふけいき 不景気 名8: +ふけいざい 不経済 名8: +ふけこ 老け込 マ五7: +ふけつ 不潔 名8: +ふけん 府県 名1: +ふけんこう 不健康 代5: +ふけんぜん 不健全 代5: +ふげし 鳳至 地名: +ふげん 付言 代4: +ふこう 不幸 名10: +ふこう 不孝 代5: +ふこうへい 不公平 代5: +ふこく 布告 代4: +ふこころえ 不心得 代5: +ふごう 富豪 名1: +ふごう 符号 名1: +ふごう 符合 代4: +ふごうかく 不合格 名1: +ふごうり 不合理 代5: +ふさ 塞 ガ五7: +ふさ 房 代1: +ふさい 夫妻 名3: +ふさい 負債 名1: +ふさが 塞が ラ五7: +ふさく 不作 名8: +ふさこ 房子 名前: +ふさわし ふさわし 形2: +ふさわし 相応し 形2: +ふさんか 不参加 名1: +ふざい 不在 名1: +ふざけ ふざけ 一段3: +ふし 節 代1: +ふしあわせ 不幸せ 代5: +ふしぎ 不思議 名8: +ふしぜん 不自然 名8: +ふしちょう 不死鳥 名1: +ふしぶし 節々 代1: +ふしまつ 不始末 名8: +ふしみ 伏見 苗字: +ふしみ 伏見 地名: +ふしめ 節目 代1: +ふしゅび 不首尾 代5: +ふしょう 負傷 名6: +ふしょう 不詳 名1: +ふしょうじ 不祥事 名1: +ふしょく 腐食 名6: +ふしん 不審 代5: +ふしん 不振 代5: +ふしん 不信 代1: +ふしんせつ 不親切 代5: +ふしんにん 不信任 名1: +ふじ 富士 地名: +ふじ 藤 代1: +ふじ 不治 代1: +ふじ 不時 代1: +ふじい 藤井 苗字: +ふじいでら 藤井寺 地名: +ふじうら 藤浦 苗字: +ふじえだ 藤枝 苗字: +ふじえだ 藤枝 地名: +ふじお 富士雄 名前: +ふじお 富士夫 名前: +ふじおか 藤岡 苗字: +ふじおか 藤岡 地名: +ふじかわ 藤川 苗字: +ふじかわ 藤川 地名: +ふじかわ 富士川 地名: +ふじき 藤木 苗字: +ふじこ 藤子 名前: +ふじさき 藤崎 苗字: +ふじさわ 藤沢 苗字: +ふじさわ 藤沢 地名: +ふじさん 富士山 代1: +ふじしま 藤島 苗字: +ふじしろ 藤城 苗字: +ふじしろ 藤代 苗字: +ふじた 藤田 苗字: +ふじたに 藤谷 苗字: +ふじちゃく 不時着 代4: +ふじつ 藤津 地名: +ふじつう 富士通 企業: +ふじなみ 藤波 苗字: +ふじの 藤野 苗字: +ふじの 藤野 地名: +ふじのみや 富士宮 地名: +ふじはし 藤橋 地名: +ふじまき 藤巻 苗字: +ふじみ 富士見 地名: +ふじみ 不死身 代5: +ふじむら 藤村 苗字: +ふじもと 藤本 苗字: +ふじもり 藤森 苗字: +ふじゅうぶん 不十分 名8: +ふじゅん 不純 名8: +ふじゅん 不順 名8: +ふじゆう 不自由 名8:サ変: +ふじょ 婦女 名1: +ふじょ 扶助 名6: +ふじょう 浮上 名6: +ふじょう 不浄 名10: +ふじよしだ 富士吉田 地名: +ふじわら 藤原 苗字: +ふじん 婦人 名3: +ふじん 夫人 名1: +ふすう 負数 名1: +ふすま 襖 代1: +ふず 付図 名1: +ふずい 不随 名1: +ふずい 付随 名6: +ふせ 防 ガ五7: +ふせ 布施 名2: +ふせい 不正 名8: +ふせい 不整 名8: +ふせいりつ 不成立 名1: +ふせき 布石 名1: +ふせつ 付設 名6: +ふせつ 敷設 名6: +ふぜい 風情 代1: +ふぜん 不全 名8: +ふそう 扶桑 地名: +ふそうおう 不相応 名8: +ふそく 不足 名8:サ変: +ふそく 付則 名1: +ふぞく 付属 名6: +ふぞく 附属 名6: +ふぞろい 不揃い 代5: +ふた 蓋 代1: +ふた 二 数詞: +ふたい 付帯 名6: +ふたく 付託 名6: +ふたく 負託 名6: +ふたご 双子 名1: +ふたござ 双子座 代1: +ふたたび 再び 代6: +ふたつ 二つ 代6: +ふたつい 二ツ井 地名: +ふたば 双葉 名1: +ふたば 双葉 地名: +ふたみ 双海 地名: +ふたみ 双三 地名: +ふたみ 二見 苗字: +ふたみ 二見 地名: +ふたり 二人 名2: +ふたん 負担 名6: +ふだ 札 名2: +ふだい 普代 地名: +ふだん 普段 名11: +ふだん 不断 名11: +ふち 縁 代1: +ふち 付置 代4: +ふち 淵 代1: +ふち 渕 単漢: +ふちゃく 付着 名6: +ふちゅう 府中 地名: +ふちゅう 婦中 地名: +ふちゅうい 不注意 名1: +ふちょう 不調 名8: +ふちょう 婦長 代2: +ふちょう 府庁 名1: +ふっかつ 復活 名6: +ふっき 復帰 名6: +ふっきゅう 復旧 名6: +ふっけん 復権 名6: +ふっこ 復古 名6: +ふっこう 復興 名7: +ふっこく 復刻 名6: +ふっさ 福生 地名: +ふっしょく 払拭 名6: +ふっつ 富津 地名: +ふってん 沸点 名1: +ふっとう 沸騰 名6: +ふつ 布津 地名: +ふつ 仏 代1: +ふつ 弗 単漢: +ふつ 払 単漢: +ふつ 沸 単漢: +ふつう 普通 名8: +ふつう 不通 名1: +ふつか 二日 代6: +ふつごう 不都合 名8: +ふつつか 不束か 代5: +ふづき 文月 代1: +ふてい 不貞 名8: +ふてい 不定 名8: +ふてき 不敵 名8: +ふてき 不適 名8: +ふてきせつ 不適切 名8: +ふてぎわ 不手際 名8: +ふで 筆 代1: +ふと ふと 副4: +ふと 太 形6:ラ五8: +ふとう 不当 名8: +ふとう 不等 名8: +ふとう 埠頭 名1: +ふとく 不徳 名8: +ふとくい 不得意 名8: +ふところ 懐 代1: +ふとじ 太字 名1: +ふとめ 太め 代5: +ふとん 布団 名2: +ふどう 不動 名8: +ふどう 不同 名8: +ふどう 浮動 名6: +ふどうさん 不動産 名1: +ふどうたい 不導体 名1: +ふどうとく 不道徳 名8: +ふどき 風土記 名1: +ふな 舟 代1: +ふな 船 代1: +ふな 鮒 代1: +ふない 船井 苗字: +ふない 船井 地名: +ふなおか 船岡 苗字: +ふなおか 船岡 地名: +ふながた 舟形 地名: +ふなたび 船旅 名1: +ふなで 船出 名6: +ふなに 船荷 名1: +ふなのり 船乗り 代1: +ふなはし 舟橋 地名: +ふなばし 船橋 苗字: +ふなばし 船橋 地名: +ふなびん 船便 名1: +ふなほ 船穂 地名: +ふなれ 不慣れ 代5: +ふにん 赴任 名6: +ふにん 不妊 名1: +ふね 船 名2: +ふね 舟 名2: +ふねひき 船引 地名: +ふねん 不燃 名1: +ふの 布野 地名: +ふのう 不能 名8: +ふはい 腐敗 名6: +ふはい 不敗 名1: +ふはつ 不発 名1: +ふひつよう 不必要 名8: +ふひょう 不評 名1: +ふび 不備 名8: +ふびょうどう 不平等 名8: +ふふく 不服 名8: +ふぶ 吹雪 カ五1: +ふぶき 吹雪 名1: +ふへい 不平 名1: +ふへん 不変 代5: +ふへん 普遍 名4: +ふべん 不便 名10: +ふほう 不法 名8: +ふほう 訃報 名3: +ふほんい 不本意 名8: +ふぼ 父母 代1: +ふまえ 踏まえ 一段1: +ふまん 不満 名10: +ふみ 文 代1: +ふみあき 文昭 名前: +ふみお 文男 名前: +ふみお 文夫 名前: +ふみお 文雄 名前: +ふみき 踏み切 ラ五7: +ふみきり 踏切 名1: +ふみこ 踏み込 マ五7: +ふみこ 富美子 名前: +ふみこ 冨美子 名前: +ふみこ 文子 名前: +ふみたお 踏み倒 サ五7: +ふみたか 文隆 名前: +ふみだい 踏台 名1: +ふみつけ 踏みつけ 一段3: +ふみとどま 踏みとどま ラ五5: +ふみにじ 踏みにじ ラ五5: +ふみはず 踏み外 サ五7: +ふみひこ 文彦 名前: +ふみん 不眠 名1: +ふむき 不向き 代5: +ふめい 不明 名10: +ふめいかく 不明確 名8: +ふめいよ 不名誉 代5: +ふめいりょう 不明瞭 代5: +ふめつ 不滅 名8: +ふめん 譜面 名1: +ふもう 不毛 名8: +ふもと 麓 代1: +ふや 増や サ五5: +ふや 殖や サ五5: +ふゆ 冬 代1:接頭1: +ふゆう 富裕 名8: +ふゆう 浮遊 名6: +ふゆかい 不愉快 名8: +ふゆきとどき 不行届き 代5: +ふゆば 冬場 名1: +ふゆふく 冬服 名1: +ふゆもの 冬物 名1: +ふゆやすみ 冬休み 名1: +ふゆやま 冬山 名1: +ふよ 付与 名6: +ふよう 不用 名8: +ふよう 不要 名8: +ふよう 扶養 名6: +ふようい 不用意 名8: +ふらい フライ 名1: +ふらいと フライト 名6: +ふらいんぐ フライング 代4: +ふらぐ フラグ 名1: +ふらっぐ フラッグ 名1: +ふらっしゅ フラッシュ 名1: +ふらっと フラット 代5: +ふらつ ふらつ カ五7: +ふらの 富良野 地名: +ふらり ふらり 副2: +ふらわー フラワー 名1: +ふらん フラン 代1:助数2: +ふらん 腐乱 名6: +ふらんく フランク 代5: +ふらんす フランス 地名: +ふらんすご フランス語 名1: +ふり 不利 名8: +ふり ふり 名1: +ふりー フリー 名8: +ふりーだむ フリーダム 名1: +ふりえき 不利益 代5: +ふりかえ 振り替え 一段3: +ふりかえ 振り返 ラ五7:サ五1: +ふりかえ 振替 代4: +ふりかけ 振りかけ 一段1: +ふりかた 振り方 名1: +ふりき 振り切 ラ五5: +ふりこ 振り込 マ五8: +ふりこみ 振込 名5: +ふりすびー フリスビー 名1: +ふりそそ 降り注 ガ五7: +ふりそで 振袖 代1: +ふりだ 降り出 サ五5: +ふりだ 振り出 サ五7: +ふりだし 振出 名1: +ふりつ 府立 名1:接尾4: +ふりつけ 振付け 一段3: +ふりま 振りま カ五1: +ふりまわ 振り回 サ五7: +ふりみだ 振り乱 サ五1: +ふりむ 振り向 カ五7: +ふりょ 不慮 名1: +ふりょう 不良 名8: +ふりょう 不漁 名8: +ふりょく 浮力 名1: +ふりわけ 振り分け 一段3: +ふりん 不倫 名8: +ふる 古 接頭1:形2:サ五1: +ふる フル 接頭1: +ふる 震 ワ五2: +ふる 奮 ワ五1: +ふる 振る ワ五3: +ふるーつ フルーツ 名1: +ふるいおこ 奮い起こ サ五5: +ふるいた 奮い立 タ五7: +ふるう 古宇 地名: +ふるえ 震え 一段3: +ふるえあが 震え上が ラ五7: +ふるかわ 古川 苗字: +ふるかわ 古川 地名: +ふるくさ 古くさ 形2: +ふるさと 古里 名1: +ふるさわ 古沢 苗字: +ふるた 古田 苗字: +ふるて 古手 代1: +ふるどの 古殿 地名: +ふるの 古野 苗字: +ふるはし 古橋 苗字: +ふるび 古び 一段1: +ふるびら 古平 地名: +ふるほん 古本 名1: +ふるま 振る舞 ワ五8: +ふるま 振舞 ワ五8: +ふるむら 古村 苗字: +ふるめかし 古めかし 形2: +ふるや 古屋 苗字: +ふるや 古谷 苗字: +ふるやま 古山 苗字: +ふるわ 震わ サ五1: +ふれ 触れ 一段1: +ふれーく フレーク 名1: +ふれーず フレーズ 名1: +ふれーむ フレーム 名1: +ふれあ 触れ合 ワ五7: +ふれこ 触れ込 マ五7: +ふれんぞく 不連続 代5: +ふれんち フレンチ 名1: +ふろ 風呂 名2: +ふろー フロー 名1: +ふろあ フロア 名1: +ふろう 不労 名1: +ふろう 不老 名1: +ふろう 浮浪 名6: +ふろく 付録 名1: +ふろしき 風呂敷 名1: +ふろっぴー フロッピー 名1: +ふろんと フロント 名1: +ふわ 不破 苗字: +ふわ 不破 地名: +ふわ 不和 代5: +ふわたり 不渡り 名1: +ふわふわ フワフワ 副9: +ふわらいどう 付和雷同 代4: +ふん 分 代1:助数2: +ふん 糞 代3: +ふん 粉 代1: +ふん 墳 代1: +ふん 憤 代1: +ふん 噴 代1: +ふん 吻 単漢: +ふん 扮 単漢: +ふん 焚 単漢: +ふん 奮 単漢: +ふん 紛 単漢: +ふん 雰 単漢: +ふんいき 雰囲気 名1: +ふんえん 噴煙 名1: +ふんか 噴火 名6: +ふんがい 憤慨 名6: +ふんき 奮起 名6: +ふんさい 粉砕 名6: +ふんしつ 紛失 名6: +ふんしゃ 噴射 名6: +ふんしゅつ 噴出 名6: +ふんしょく 粉飾 名6: +ふんすい 噴水 名1: +ふんぜん 奮然 形動2: +ふんそう 紛争 名6: +ふんそう 扮装 名6: +ふんとう 奮闘 名7: +ふんどう 分銅 名1: +ふんにゅう 粉乳 名1: +ふんぱつ 奮発 名6: +ふんべつ 分別 名6: +ふんまつ 粉末 名1: +ふんむ 噴霧 名6: +ふんわり ふんわり 副3: +ぶ 部 代1:助数: +ぶ 歩 代1: +ぶ 武 代1: +ぶ 分 助数2: +ぶ 不 単漢: +ぶ 侮 単漢: +ぶ 撫 単漢: +ぶ 舞 単漢: +ぶ 葡 単漢: +ぶ 蕪 単漢: +ぶ 無 単漢: +ぶーす ブース 名1: +ぶーすたー ブースター 名1: +ぶーつ ブーツ 名1: +ぶーと ブート 名6: +ぶーむ ブーム 名1: +ぶあい 歩合 名1: +ぶあいそう 無愛想 代5: +ぶあつ 分厚 形2:形動1: +ぶいん 部員 名1: +ぶえんりょ 無遠慮 名8: +ぶか 深 接尾5: +ぶか 部下 名1: +ぶかい 部会 名1: +ぶがい 部外 名1: +ぶき 武器 名1: +ぶきみ 不気味 形動4: +ぶきょく 部局 名1: +ぶきよう 不器用 代5: +ぶさほう 無作法 名8: +ぶざー ブザー 名1: +ぶし 武士 名1: +ぶし 節 接尾2: +ぶしつけ ぶしつけ 代5: +ぶしゅ 部首 名1: +ぶしょ 部署 名1: +ぶしょ 部所 名1: +ぶしょう 不精 名8:サ変: +ぶしょう 武将 名1: +ぶじ 無事 名10: +ぶじょく 侮辱 名6: +ぶす ブス 代1: +ぶすう 部数 名1: +ぶせい 部制 助数2: +ぶぜん 豊前 地名: +ぶそう 武装 名6: +ぶそく 不足 接尾2: +ぶぞく 部族 名1: +ぶた 豚 代1: +ぶた ぶた 接尾2: +ぶた 蓋 接尾2: +ぶたい 舞台 名1: +ぶたい 部隊 名1: +ぶたにく 豚肉 名1: +ぶち 斑 代1: +ぶちょう 部長 代2: +ぶっか 物価 名1: +ぶっきょう 仏教 名1: +ぶっく ブック 名1: +ぶっけん 物件 名1: +ぶっし 物資 名1: +ぶっしつ 物質 名4: +ぶっしょう 物証 名1: +ぶっしょく 物色 名6: +ぶっそう 物騒 形動4: +ぶったい 物体 名1: +ぶっだ 仏陀 名1: +ぶってき 物的 形動3: +ぶっぴん 物品 名1: +ぶつ 物 接尾2: +ぶつ 仏 接尾2: +ぶつ 勿 単漢: +ぶつか ぶつか ラ五7: +ぶつぎ 物議 名1: +ぶつけ ぶつけ 一段1: +ぶつぞう 仏像 名1: +ぶつだん 仏壇 名1: +ぶつぶつ ぶつぶつ 副8: +ぶつめつ 仏滅 名1: +ぶつり 物理 名4: +ぶつりょう 物量 名1: +ぶてぃっく ブティック 名1: +ぶどう 葡萄 代1: +ぶどう 武道 代1: +ぶどまり 歩留まり 名1: +ぶない 部内 名1: +ぶなん 無難 名8: +ぶひ 部費 名1: +ぶひん 部品 名1: +ぶぶん 部分 名4: +ぶもん 部門 名1: +ぶよう 舞踊 名1: +ぶようじん 不用心 名8: +ぶらいんど ブラインド 代1: +ぶらうす ブラウス 名1: +ぶらく 部落 名1: +ぶらさが ぶら下が ラ五7: +ぶらさげ ぶら下げ 一段1: +ぶらざー ブラザー 企業: +ぶらじゃー ブラジャー 代1: +ぶらじる ブラジル 地名: +ぶらっく ブラック 名1: +ぶらり ぶらり 副2: +ぶらんく ブランク 代1: +ぶらんでー ブランデー 名1: +ぶらんど ブランド 名1: +ぶり ぶり 接尾2: +ぶり 振り 接尾2: +ぶりっじ ブリッジ 名1: +ぶりょく 武力 名1: +ぶるー ブルー 名1: +ぶるい 部類 名1: +ぶるがりあ ブルガリア 地名: +ぶれーかー ブレーカー 名1: +ぶれーき ブレーキ 名1: +ぶれーく ブレーク 代4: +ぶれい 無礼 名8: +ぶろーかー ブローカー 名1: +ぶろっく ブロック 名6: +ぶん 文 代1: +ぶん 分 接尾1:助数2: +ぶん 蚊 単漢: +ぶん 聞 単漢: +ぶんい 文意 代1: +ぶんいち 文一 名前: +ぶんか 文化 名4: +ぶんか 分科 名1: +ぶんか 文科 名1: +ぶんか 分化 代4: +ぶんかい 分解 名6: +ぶんかざい 文化財 名1: +ぶんかつ 分割 名6: +ぶんかん 分館 名1: +ぶんがく 文学 名4: +ぶんき 分岐 名6: +ぶんきょう 文京 地名: +ぶんきょう 文教 名1: +ぶんぎょう 分業 名6: +ぶんぐ 文具 名1: +ぶんけ 分家 名6: +ぶんけん 文献 名1: +ぶんげい 文芸 名1: +ぶんこ 文庫 名1: +ぶんこう 分校 名1: +ぶんご 文語 名1: +ぶんご 豊後 地名: +ぶんごう 文豪 名1: +ぶんごたかだ 豊後高田 地名: +ぶんさん 分散 名6: +ぶんし 分子 名1: +ぶんしつ 分室 名1: +ぶんしゅう 文集 名1: +ぶんしょ 文書 名1: +ぶんしょう 文章 名1: +ぶんしん 分身 名1: +ぶんじょう 分譲 名6: +ぶんすい 分水 地名: +ぶんすう 分数 名1: +ぶんせき 分析 名6: +ぶんせき 文責 名1: +ぶんせつ 文節 名1: +ぶんたい 分隊 名1: +ぶんたい 文体 名1: +ぶんたん 分担 名6: +ぶんだん 分断 名6: +ぶんだん 文壇 名1: +ぶんつう 文通 名6: +ぶんど ぶんど ラ五5: +ぶんのう 分納 名6: +ぶんぱ 分派 名6: +ぶんぱい 分配 名6: +ぶんぴつ 分泌 名6: +ぶんぴつ 文筆 名1: +ぶんぶ 文武 名1: +ぶんぷ 分布 名6: +ぶんべつ 分別 名6: +ぶんべん 分娩 名7: +ぶんぼ 分母 名1: +ぶんぼうぐ 文房具 名1: +ぶんぽう 文法 名1: +ぶんまつ 文末 代1: +ぶんみゃく 文脈 名1: +ぶんめい 文明 名1: +ぶんめん 文面 名1: +ぶんや 分野 名1: +ぶんよ 分与 名6: +ぶんらく 文楽 名1: +ぶんり 分離 名6: +ぶんりつ 分立 名6: +ぶんりょう 分量 名1: +ぶんるい 分類 名6: +ぶんれい 文例 名1: +ぶんれつ 分裂 名6: +ぷーる プール 名1: +ぷっしゅ プッシュ 代4: +ぷらいおりてぃ プライオリティ 代1: +ぷらいど プライド 名1: +ぷらいばしー プライバシー 名1: +ぷらいべーと プライベート 名8: +ぷらぐ プラグ 名1: +ぷらざ プラザ 名1: +ぷらす プラス 名1: +ぷらす + 単漢: +ぷらすちっく プラスチック 名1: +ぷらすまいなす ± 単漢: +ぷらずま プラズマ 名1: +ぷらちな プラチナ 代1: +ぷらん プラン 名1: +ぷらんと プラント 名1: +ぷらんにんぐ プランニング 代4: +ぷりずむ プリズム 名1: +ぷりみてぃぶ プリミティブ 代5: +ぷりんす プリンス 名1: +ぷりんせす プリンセス 名1: +ぷりんた プリンタ 名1: +ぷりんと プリント 名6: +ぷるだうん プルダウン 名1: +ぷれー プレー 名6: +ぷれーと プレート 名1: +ぷれーやー プレーヤー 名1: +ぷれーん プレーン 名8: +ぷれいやー プレイヤー 名1: +ぷれじでんと プレジデント 名1: +ぷれす プレス 名6: +ぷれぜんてーしょん プレゼンテーション 名1: +ぷれぜんと プレゼント 名6: +ぷれりゅーど プレリュード 代1: +ぷろ プロ 代2: +ぷろーぶ プローブ 代1: +ぷろぐらま プログラマ 名1: +ぷろぐらみんぐ プログラミング 名1: +ぷろぐらむ プログラム 名6: +ぷろじぇくと プロジェクト 名1: +ぷろせしんぐ プロセシング 名1: +ぷろせす プロセス 名1: +ぷろせっさ プロセッサ 名1: +ぷろだくしょん プロダクション 代1: +ぷろだくと プロダクト 名1: +ぷろてくしょん プロテクション 名1: +ぷろてくと プロテクト 名1: +ぷろでゅーさー プロデューサー 名1: +ぷろでゅーす プロデュース 名6: +ぷろとこる プロトコル 名1: +ぷろとたいぷ プロトタイプ 名1: +ぷろぱん プロパン 名1: +ぷろふぃーる プロフィール 名1: +ぷろふぇっしょなる プロフェッショナル 代5: +ぷろぺら プロペラ 名1: +ぷろぽーず プロポーズ 名6: +ぷろもーと プロモート 名6: +ぷろんぷと プロンプト 名1: +ぷん 分 助数2: +へ 減 ラ五8: +へ 経 一段1: +へい 兵 代1: +へい 丙 代1: +へい 塀 代1: +へい 坪 単漢: +へい 瓶 単漢: +へい 併 単漢: +へい 幣 単漢: +へい 平 単漢: +へい 弊 単漢: +へい 柄 単漢: +へい 並 単漢: +へい 蔽 単漢: +へい 閉 単漢: +へい 陛 単漢: +へい 箆 単漢: +へい 餅 単漢: +へいあん 平安 名8: +へいい 平易 名8: +へいおん 平穏 名8: +へいか 陛下 名1: +へいか 平価 名1: +へいかい 閉会 名6: +へいかん 閉館 名6: +へいがい 弊害 名1: +へいき 平気 名8: +へいき 併記 名6: +へいき 兵器 名1: +へいきん 平均 名6: +へいきんち 平均値 名1: +へいきんてん 平均点 名1: +へいげん 平原 名1: +へいこう 平行 名6: +へいこう 平衡 名6: +へいこう 並行 名6: +へいこう 閉口 名6: +へいこうせん 平行線 名1: +へいごう 併合 名6: +へいさ 閉鎖 名6: +へいざん 閉山 名6: +へいし 兵士 名1: +へいし 斃死 名6: +へいしゃ 弊社 名1: +へいじ 平時 名1: +へいじつ 平日 名1: +へいじょう 平常 名1: +へいじょうきょう 平城京 代1: +へいせい 平成 名1: +へいせい 平静 名8: +へいせつ 併設 名6: +へいぜん 平然 形動2: +へいそ 平素 名1: +へいそく 閉塞 名6: +へいそん 併存 名6: +へいたい 兵隊 名1: +へいたん 平坦 名8: +へいち 平地 名1: +へいてい 平定 名6: +へいてい 閉廷 名6: +へいてん 弊店 名1: +へいてん 閉店 名6: +へいねつ 平熱 名1: +へいねん 平年 名1: +へいはつ 併発 名6: +へいべい 平米 助数2: +へいほう 平方 名6:助数2: +へいぼん 平凡 名8: +へいまく 閉幕 名6: +へいみん 平民 名1: +へいめん 平面 名4: +へいもん 閉門 名6: +へいや 平野 名1: +へいよう 併用 名6: +へいりつ 並立 名6: +へいりょく 兵力 名1: +へいれつ 並列 名6: +へいわ 平和 名8: +へき 壁 接尾1: +へき 癖 代1: +へき 僻 サ変: +へき 日置 地名: +へき 碧 単漢: +へきかい 碧海 地名: +へきが 壁画 名1: +へきち 僻地 名1: +へきなん 碧南 地名: +へきめん 壁面 名1: +へくたーる ヘクタール 助数2: +へぐり 平群 地名: +へた 下手 代5: +へだ 戸田 地名: +へだた 隔た ラ五3: +へだて 隔て 一段1: +へっだ ヘッダ 名1: +へっだー ヘッダー 名1: +へっど ヘッド 名1: +へっどほん ヘッドホン 名1: +へび 蛇 代1: +へぼん ヘボン 代1: +へもぐろびん ヘモグロビン 代1: +へや 部屋 名2: +へら 箆 代1: +へり 縁 代1: +へりうむ ヘリウム 名1: +へりくだ 遜 ラ五7: +へるつ ヘルツ 助数2: +へるぷ ヘルプ 名1: +へん 変 代5:ザ変: +へん 片 接尾1: +へん 編 接尾1:助数: +へん 辺 代1: +へん 篇 代1: +へん 偏 代4: +へん 返 代1: +へん 遍 代1: +へんあつき 変圧器 名1: +へんい 変移 名6: +へんか 変化 名6: +へんかく 変革 名6: +へんかん 変換 名6: +へんかん 返還 名6: +へんきゃく 返却 名7: +へんきょう 辺境 名1: +へんきょく 編曲 名6: +へんきん 返金 名6: +へんくつ 偏屈 代5: +へんけい 変形 名6: +へんけん 偏見 名1: +へんげ 変化 名6: +へんこう 変更 名7: +へんさ 偏差 名1: +へんさい 返済 名7: +へんざい 偏在 名6: +へんし 変死 名6: +へんしつ 変質 名6: +へんしゅう 編集 名6: +へんしゅう 編修 名6: +へんしょ 返書 名1: +へんしょく 偏食 名6: +へんしょく 変色 名6: +へんしん 変身 名6: +へんしん 返信 名1: +へんじ 返事 名5: +へんじょう 返上 名6: +へんじん 変人 名1: +へんすう 変数 名1: +へんせい 編成 名6: +へんせい 編制 名6: +へんせん 変遷 名6: +へんそう 変装 名6: +へんそう 返送 名7: +へんそく 変則 名8: +へんそく 変速 代4: +へんぞう 変造 代4: +へんたい 変態 代4: +へんたい 編隊 名1: +へんち 辺地 名1: +へんちょう 変調 代4: +へんとう 返答 名6: +へんどう 変動 名6: +へんにゅう 編入 名6: +へんのう 返納 名6: +へんぴん 返品 名6: +へんぼう 変貌 名6: +へんぽん 返本 名6: +へんよう 変容 名6: +へんれい 返礼 名6: +へんれい 返戻 名6: +へんれき 遍歴 名6: +へんろ 遍路 名1: +べ 部 単漢: +べ 辺 単漢: +べーこん ベーコン 名1: +べーしっく ベーシック 名8: +べーす ベース 名1: +べーた ベータ 代1: +べーた β 代1: +べあ ベア 代1: +べい 米 代1: +べいか 米価 名1: +べいこく 米国 名1: +べいさく 米作 名1: +べいしょく 米食 名6: +べいじゅ 米寿 名1: +べいそ 米ソ 名1: +べき 冪 単漢: +べくた ベクタ 名1: +べくたー ベクター 名1: +べくとる ベクトル 名1: +べすと ベスト 名8: +べすとせらー ベストセラー 名1: +べっかん 別館 名1: +べっき 別記 名6: +べっきょ 別居 名6: +べっけん 別件 名1: +べっこ 別個 名8: +べっこう 別項 名1: +べっさつ 別冊 名1: +べっし 別紙 名1: +べっし 蔑視 名6: +べっしつ 別室 名1: +べっしやま 別子山 地名: +べっしゅ 別種 名1: +べっしょう 別称 名1: +べっせい 別姓 名1: +べっそう 別荘 名1: +べっそう 別送 名6: +べったく 別宅 名1: +べっと 別途 名1: +べっど ベッド 名1: +べっぴょう 別表 名1: +べっぷ 別府 地名: +べっぽう 別報 名1: +べつ 別 名8:接頭1:接尾1: +べつ 瞥 単漢: +べつ 蔑 単漢: +べつ 捌 単漢: +べつかい 別海 地名: +べつくち 別口 名1: +べつじん 別人 名1: +べつだん 別段 副1: +べつのう 別納 名6: +べつばい 別売 名6: +べつびん 別便 名1: +べつべつ 別々 名8: +べつめい 別名 名1: +べつもの 別物 名1: +べつり 別離 名1: +べてらん ベテラン 名1: +べとなむ ベトナム 地名: +べに 紅 代1: +べびー ベビー 名1: +べや 部屋 接尾2: +べりふぁい ベリファイ 名6: +べる ベル 名1: +べるぎー ベルギー 地名: +べると ベルト 名1: +べるりん ベルリン 地名: +べん 便 代4:ザ変: +べん 弁 代1:ザ変: +べん 勉 代1: +べん 娩 代1: +べん 鞭 代1: +べんえき 便益 名1: +べんかい 弁解 名6: +べんがく 勉学 名6: +べんきょう 勉強 名5: +べんぎ 便宜 名10: +べんぎじょう 便宜上 副1: +べんご 弁護 名6: +べんごし 弁護士 代2: +べんさい 弁済 名6: +べんしょう 弁償 名6: +べんじょ 便所 名1: +べんだー ベンダー 代1: +べんち ベンチ 名1: +べんちゃー ベンチャー 名1: +べんてん 弁天 名1: +べんとう 弁当 名2: +べんぴ 便秘 名1: +べんぽう 便法 名1: +べんめい 弁明 名6: +べんもう 鞭毛 名1: +べんらん 便覧 名1: +べんり 便利 名8: +べんれい 勉励 名1: +べんろん 弁論 名6: +ぺーじ ページ 助数2: +ぺーじ 頁 助数2: +ぺーす ペース 名1: +ぺーすと ペースト 代4: +ぺーぱー ペーパー 名1: +ぺあ ペア 名1: +ぺきん 北京 地名: +ぺしみすと ペシミスト 名1: +ぺっと ペット 名1: +ぺなるてぃ ペナルティ 名1: +ぺなるてぃー ペナルティー 名1: +ぺん ペン 名1: +ぺんき ペンキ 名1: +ぺんぎん ペンギン 名1: +ぺんしょん ペンション 名1: +ぺんねーむ ペンネーム 代1: +ほ 干 サ五7: +ほ 掘 ラ五8: +ほ 彫 ラ五8: +ほ 帆 代1: +ほ 穂 代1: +ほ 輔 代1: +ほ 補 代1: +ほ 歩 助数: +ほ 保 代1: +ほ 浦 単漢: +ほ 蒲 単漢: +ほ 葡 単漢: +ほ 畝 単漢: +ほ 甫 単漢: +ほ 舗 単漢: +ほ 鋪 単漢: +ほ 圃 単漢: +ほ 捕 単漢: +ほーむ ホーム 名1: +ほーる ホール 名1: +ほーん ホーン 助数2: +ほあん 保安 名1: +ほい 宝飯 地名: +ほいく 保育 名6: +ほう 法 接尾3: +ほう 方 代1: +ほう 砲 代1: +ほう 報 接尾1:ザ変: +ほう ほう ラ五7:代1: +ほう 放 ラ五7:単漢: +ほう 奉 ザ変: +ほう 崩 ザ変: +ほう 宝 単漢: +ほう 訪 単漢: +ほう 豊 単漢: +ほう 邦 単漢: +ほう 保 単漢: +ほう 縫 単漢: +ほう 胞 単漢: +ほう 逢 単漢: +ほう 鞄 単漢: +ほう 蔀 単漢: +ほう 鴇 単漢: +ほう 倣 単漢: +ほう 俸 単漢: +ほう 包 単漢: +ほう 呆 単漢: +ほう 峰 単漢: +ほう 鳳 単漢: +ほう 鵬 単漢: +ほう 峯 単漢: +ほう 庖 単漢: +ほう 抱 単漢: +ほう 捧 単漢: +ほう 朋 単漢: +ほう 泡 単漢: +ほう 烹 単漢: +ほう 芳 単漢: +ほう 萌 単漢: +ほう 蓬 単漢: +ほう 蜂 単漢: +ほう 褒 単漢: +ほう 鋒 単漢: +ほう 飽 単漢: +ほうあん 法案 名1: +ほうい 包囲 名6: +ほうい 方位 名1: +ほうえい 放映 名6: +ほうおう 法王 名1: +ほうか 放火 名6: +ほうか 法科 名1: +ほうか 邦貨 名1: +ほうかい 崩壊 名6: +ほうかご 放課後 名1: +ほうかつ 包括 名6: +ほうが 邦画 代1: +ほうがい 法外 代5: +ほうがく 方角 名1: +ほうがく 法学 名1: +ほうがん 包含 名6: +ほうがんし 方眼紙 名1: +ほうき 放棄 名6: +ほうき 法規 名1: +ほうきゅう 俸給 名1: +ほうぎょ 崩御 名7: +ほうけ 惚け 一段1: +ほうけい 方形 名1: +ほうけん 封建 名4: +ほうげき 砲撃 名6: +ほうげん 放言 名6: +ほうげん 方言 名1: +ほうこ 宝庫 名1: +ほうこう 方向 名1: +ほうこう 芳香 名1: +ほうこう 奉公 名7: +ほうこく 報告 名7: +ほうごう 縫合 名6: +ほうさく 方策 名1: +ほうさく 豊作 名1: +ほうさん 放散 名6: +ほうし 奉仕 名6: +ほうし 法師 名1: +ほうし 胞子 名1: +ほうし 芳志 名3: +ほうしき 方式 名1: +ほうしゃ 放射 名6: +ほうしゃせん 放射線 名1: +ほうしゃのう 放射能 名1: +ほうしゅう 報酬 名1: +ほうしゅつ 放出 名6: +ほうしゅやま 宝珠山 地名: +ほうしょう 報償 名1: +ほうしょう 報奨 名6: +ほうしょう 褒賞 名1: +ほうしょく 奉職 名6: +ほうしん 方針 名1: +ほうしん 放心 名6: +ほうじ 法事 名1: +ほうじょう 北条 苗字: +ほうじょう 北条 地名: +ほうじょう 方城 地名: +ほうじん 法人 名1: +ほうじん 邦人 名1: +ほうすい 放水 名6: +ほうせい 縫製 代4: +ほうせい 方正 代5: +ほうせき 宝石 名1: +ほうそう 放送 名6: +ほうそう 包装 名6: +ほうそう 疱瘡 名1: +ほうそうかい 法曹界 名1: +ほうそうきょく 放送局 名1: +ほうそうし 包装紙 名1: +ほうそく 法則 名1: +ほうたい 包帯 名6: +ほうたく 飽託 地名: +ほうだい 放題 名1: +ほうだん 放談 名6: +ほうだん 砲弾 名1: +ほうち 放置 名6: +ほうち 法治 名1: +ほうちょう 包丁 名1: +ほうてい 法定 名1: +ほうてい 法廷 名1: +ほうていしき 方程式 名1: +ほうてき 法的 形動3: +ほうでん 放電 名6: +ほうどう 報道 名6: +ほうどうじん 報道陣 名1: +ほうにち 訪日 名6: +ほうにん 放任 名6: +ほうねん 豊年 名1: +ほうねん 放念 代4: +ほうのう 奉納 名6: +ほうび 褒美 名3: +ほうふ 豊富 名8: +ほうふ 抱負 名1: +ほうふ 防府 地名: +ほうふく 報復 名6: +ほうぶつせん 放物線 名1: +ほうぶん 邦文 名1: +ほうへい 砲兵 名1: +ほうべい 訪米 名6: +ほうほう 方法 名1: +ほうほく 豊北 地名: +ほうぼう 方々 名1: +ほうぼく 放牧 名6: +ほうまん 放漫 名8: +ほうまん 豊満 名8: +ほうむ 葬 ラ五7: +ほうむ 法務 名1: +ほうむしょう 法務省 名1: +ほうめい 芳名 名3: +ほうめん 方面 名1: +ほうめん 放免 名6: +ほうもつ 宝物 名1: +ほうもん 訪問 名6: +ほうもんぎ 訪問着 名1: +ほうや 保谷 地名: +ほうやく 邦訳 名6: +ほうよう 法要 名1: +ほうよう 抱擁 名6: +ほうよう 包容 名6: +ほうらい 鳳来 地名: +ほうりつ 法律 名4: +ほうりゅう 放流 名6: +ほうりゅうじ 法隆寺 名1: +ほうれい 法令 名1: +ほうろう 放浪 名6: +ほうわ 飽和 名6: +ほえ 吠え 一段1: +ほお 頬 代1: +ほおん 保温 名6: +ほか 他 代6: +ほか ほか 代1: +ほか 外 代1: +ほかく 捕獲 名6: +ほかく 保革 名1: +ほかん 保管 名6: +ほかん 補間 代4: +ほかん 補完 代4: +ほがらか 朗らか 形動4: +ほきゅう 補給 名6: +ほきょう 補強 名6: +ほく 北 代1: +ほくい 北緯 名1: +ほくおう 北欧 名1: +ほくげん 北限 名1: +ほくしん 北辰 名1: +ほくじょう 北上 名6: +ほくせい 北西 名1: +ほくせい 北勢 地名: +ほくたん 北端 名1: +ほくだい 北大 名1: +ほくだん 北淡 地名: +ほくと 北斗 名1: +ほくとう 北東 名1: +ほくぶ 北部 名1: +ほくべい 北米 名1: +ほくぼう 北房 地名: +ほくよう 北洋 名1: +ほくりく 北陸 名1: +ほくりゅう 北龍 地名: +ほくろ ほくろ 代1: +ほけつ 補欠 名1: +ほけん 保健 名1: +ほけん 保険 名1: +ほけんきん 保険金 名1: +ほけんふ 保健婦 代2: +ほげい 捕鯨 名1: +ほこ 誇 ラ五7: +ほこ 鉾 代1: +ほこ 矛 代1: +ほこう 歩行 名6: +ほこた 鉾田 地名: +ほこらし 誇らし 形3: +ほころ 綻 バ五7: +ほご 保護 名6: +ほご 補語 名1: +ほさ 補佐 名6: +ほさか 保坂 苗字: +ほし 星 代1: +ほし 欲し 形3: +ほし ☆ 単漢: +ほし ★ 単漢: +ほしが 欲しが ラ五1: +ほしぞら 星空 代1: +ほしな 保科 苗字: +ほしの 星野 苗字: +ほしゃく 保釈 名6: +ほしゅ 保守 名6: +ほしゅう 補修 名6: +ほしゅう 補習 名6: +ほしょう 保証 名6: +ほしょう 保障 名6: +ほしょう 補償 名6: +ほしょうきん 保証金 名1: +ほしょうきん 補償金 名1: +ほしょうにん 保証人 名1: +ほじ 保持 名6: +ほじゅう 補充 名6: +ほじょ 補助 名6: +ほじょきん 補助金 名1: +ほすう 補数 名1: +ほすてす ホステス 名1: +ほすと ホスト 名1: +ほせい 補整 名6: +ほせい 補正 名6: +ほせん 保線 名1: +ほぜん 保全 名6: +ほそ 細 形8:ラ五7: +ほそい 細井 苗字: +ほそいり 細入 地名: +ほそう 舗装 名6: +ほそえ 細江 苗字: +ほそえ 細江 地名: +ほそかわ 細川 苗字: +ほそく 補足 名6: +ほそく 捕捉 名6: +ほそく 補則 名1: +ほそだ 細田 苗字: +ほそなが 細長 形2: +ほその 細野 苗字: +ほそぼそ 細々 副2: +ほそめ 細め 代5:一段1: +ほそや 細谷 苗字: +ほぞん 保存 名6: +ほたか 穂高 地名: +ほたる 蛍 代1: +ほちきす ホチキス 名1: +ほちゅう 補注 名1: +ほちょう 歩調 名1: +ほちょうき 補聴器 名1: +ほっ 欲 サ変:サ五1: +ほっかいどう 北海道 県区: +ほっき 発起 名6: +ほっきょく 北極 名1: +ほっけー ホッケー 代3: +ほっさ 発作 名4: +ほっそく 発足 名6: +ほった 堀田 苗字: +ほったん 発端 名1: +ほっちきす ホッチキス 名1: +ほってんとっと ホッテントット 名1: +ほっと ほっと 副4:カ五7: +ほっと ホット 名8: +ほっぷ ホップ 名1: +ほっぽう 北方 名1: +ほつ 発 単漢: +ほづみ 穂積 苗字: +ほづみ 穂積 地名: +ほて 火照 ラ五3: +ほてる ホテル 名1: +ほてん 補填 名6: +ほとけ 仏 代1: +ほとほと ほとほと 副1: +ほとんど ほとんど 代6: +ほとんど 殆ど 代6: +ほど 解 カ五7: +ほど 程 代1: +ほどう 舗道 名1: +ほどう 歩道 名1: +ほどう 補導 名6: +ほどうきょう 歩道橋 名1: +ほどがや 保土ヶ谷 地名: +ほどこ 施 サ五7: +ほどほど ほどほど 代5: +ほない 保内 地名: +ほなみ 穂波 地名: +ほね 骨 代1: +ほねお 骨折 ラ五8: +ほねぐみ 骨組み 名1: +ほねみ 骨身 名1: +ほねやすめ 骨休め 代4: +ほのお 炎 代1: +ほのお 焔 代1: +ほのか ほのか 代5: +ほのぼの ほのぼの 副3: +ほのるる ホノルル 地名: +ほばら 保原 地名: +ほびー ホビー 名1: +ほへい 歩兵 名1: +ほべつ 穂別 地名: +ほほ 頬 代1: +ほほえ 微笑 マ五7: +ほほえまし ほほえまし 形5: +ほぼ ほぼ 副1: +ほぼ 保母 代2: +ほまれ 誉れ 代1: +ほめ 褒め 一段4: +ほめ 誉め 一段4: +ほゆう 保有 名6: +ほよう 保養 名6: +ほら ほら 代1: +ほら 洞 代1: +ほらー ホラー 名1: +ほらど 洞戸 地名: +ほり 濠 名2: +ほり 堀 苗字: +ほり 堀 名2: +ほり 壕 単漢: +ほりい 堀井 苗字: +ほりうち 堀内 苗字: +ほりえ 堀江 地名: +ほりえ 堀江 名前: +ほりかわ 堀川 苗字: +ほりかわ 堀川 地名: +ほりがね 堀金 地名: +ほりぐち 堀口 苗字: +ほりこし 堀越 苗字: +ほりだ 掘り出 サ五7: +ほりの 堀野 苗字: +ほりのうち 堀之内 苗字: +ほりのうち 堀之内 地名: +ほりゅう 保留 名6: +ほりょ 捕虜 名1: +ほるまりん ホルマリン 名1: +ほれ 惚れ 一段1: +ほれこ 惚れ込 マ五7: +ほろ 滅 バ五4: +ほろ 幌 代1: +ほろいずみ 幌泉 地名: +ほろかない 幌加内 地名: +ほろのべ 幌延 地名: +ほろび 亡び 一段4: +ほろび 滅び 一段4: +ほろぼ 滅ぼ サ五7: +ほわいと ホワイト 名1: +ほん 本 名3: +ほん 本 接頭1:助数2: +ほん 叛 単漢: +ほん 翻 単漢: +ほん 奔 単漢: +ほんあん 本案 名1: +ほんい 本位 名1: +ほんい 本意 名1: +ほんか 本科 名1: +ほんかい 本会 名1: +ほんかいぎ 本会議 名1: +ほんかく 本格 名4: +ほんかくは 本格派 名1: +ほんかわね 本川根 地名: +ほんかん 本館 名1: +ほんがわ 本川 地名: +ほんき 本気 名8: +ほんきゅう 本給 名1: +ほんきょ 本拠 名1: +ほんきょく 本局 名1: +ほんきょち 本拠地 名1: +ほんぎまり 本決まり 代1: +ほんぎょう 本業 名1: +ほんぐう 本宮 地名: +ほんけ 本家 名1: +ほんけん 本件 名1: +ほんこう 本校 名1: +ほんこう 本稿 名1: +ほんこん 香港 地名: +ほんごう 本郷 苗字: +ほんごう 本郷 地名: +ほんごく 本国 名1: +ほんさい 本妻 名1: +ほんざん 本山 名1: +ほんし 本旨 名1: +ほんし 本紙 名1: +ほんし 本誌 名1: +ほんしき 本式 名8: +ほんしつ 本質 名4: +ほんしゃ 本社 名1: +ほんしゅう 本州 名1: +ほんしょ 本書 名1: +ほんしょ 本署 名1: +ほんしょう 本性 名1: +ほんしょう 本省 名1: +ほんしょう 本章 名1: +ほんしょく 本職 名1: +ほんしん 本心 名1: +ほんじつ 本日 代6: +ほんじゅらす ホンジュラス 地名: +ほんじょう 本庄 苗字: +ほんじょう 本庄 地名: +ほんじょう 本城 苗字: +ほんじょう 本城 地名: +ほんじょう 本荘 地名: +ほんじょう 本匠 地名: +ほんすう 本数 名1: +ほんすじ 本筋 名1: +ほんせき 本籍 名1: +ほんせん 本線 名1: +ほんせん 本船 名1: +ほんそう 奔走 名6: +ほんそく 本則 名1: +ほんたい 本体 名1: +ほんたく 本宅 名1: +ほんだ 本田 苗字: +ほんだ 本多 苗字: +ほんだ ホンダ 企業: +ほんだい 本題 名1: +ほんだい 本代 名1: +ほんだな 本棚 名1: +ほんちょう 本庁 名1: +ほんてん 本店 名1: +ほんとう 本当 名8: +ほんとう 奔騰 代4: +ほんど 本土 名1: +ほんど 本渡 地名: +ほんどう 本堂 名1: +ほんどう 本道 名1: +ほんどおり 本通り 地名: +ほんにん 本人 名3: +ほんね 本音 名1: +ほんねん 本年 名1: +ほんの ほんの 連体: +ほんのう 本能 名4: +ほんば 本場 名1: +ほんばこ 本箱 名1: +ほんばん 本番 名1: +ほんぶ 本部 名1: +ほんぶん 本文 名1: +ほんべつ 本別 地名: +ほんぺん 本編 名1: +ほんぽう 奔放 名8: +ほんぽう 本邦 名1: +ほんま 本間 苗字: +ほんまち 本町 地名: +ほんみょう 本名 名1: +ほんむ 本務 名1: +ほんめい 本命 名1: +ほんもう 本望 代5: +ほんもと 本元 名1: +ほんもの 本物 名1: +ほんや 本屋 代2: +ほんやく 翻訳 名6: +ほんやばけい 本耶馬渓 地名: +ほんらい 本来 代6: +ほんりゅう 本流 名1: +ほんりょう 本領 名1: +ぼ 簿 接尾1: +ぼ 姥 単漢: +ぼ 牡 単漢: +ぼ 募 単漢: +ぼ 墓 単漢: +ぼ 慕 単漢: +ぼ 戊 単漢: +ぼ 暮 単漢: +ぼ 母 単漢: +ぼ 菩 単漢: +ぼ 模 単漢: +ぼーい ボーイ 代2: +ぼーかる ボーカル 名1: +ぼーと ボート 名1: +ぼーど ボード 名1: +ぼーなす ボーナス 名1: +ぼーりんぐ ボーリング 名6: +ぼーる ボール 名1: +ぼーん ボーン 名1: +ぼいこっと ボイコット 名6: +ぼいす ボイス 名1: +ぼいん 母音 名1: +ぼいん 拇印 名1: +ぼう 棒 代1: +ぼう 坊 代1: +ぼう 某 接頭5:代1: +ぼう 帽 接尾1: +ぼう 亡 代1: +ぼう 忙 代1: +ぼう 房 代1: +ぼう 暴 代1: +ぼう 望 単漢: +ぼう 傍 単漢: +ぼう 剖 単漢: +ぼう 虻 単漢: +ぼう 乏 単漢: +ぼう 妨 単漢: +ぼう 忘 単漢: +ぼう 冒 単漢: +ぼう 紡 単漢: +ぼう 肪 単漢: +ぼう 膨 単漢: +ぼう 謀 単漢: +ぼう 貌 単漢: +ぼう 貿 単漢: +ぼう 鉾 単漢: +ぼう 防 単漢: +ぼう 卯 単漢: +ぼう 牟 単漢: +ぼう 呆 単漢: +ぼう 茅 単漢: +ぼういん 暴飲 名6: +ぼうえい 防衛 名6: +ぼうえき 貿易 名6: +ぼうかん 傍観 名6: +ぼうかん 防寒 名1: +ぼうかん 暴漢 名1: +ぼうがい 妨害 名6: +ぼうがい 望外 代5: +ぼうきゃく 忘却 名6: +ぼうきょ 暴挙 名1: +ぼうきょう 望郷 名6: +ぼうぎゃく 暴虐 名1: +ぼうぎょ 防御 名6: +ぼうくう 防空 名1: +ぼうけい 傍系 名1: +ぼうけん 冒険 名6: +ぼうげん 暴言 名1: +ぼうこう 暴行 名6: +ぼうご 防護 名6: +ぼうさい 防災 名1: +ぼうし 防止 名6: +ぼうし 帽子 名1: +ぼうし 某氏 名1: +ぼうしょう 傍証 代4: +ぼうしょく 暴食 名6: +ぼうじゅ 傍受 名6: +ぼうじょう 棒状 名1: +ぼうすい 防水 名1: +ぼうず 坊主 代1: +ぼうぜん 呆然 形動2: +ぼうそう 暴走 名6: +ぼうそう 房総 地名: +ぼうだい 膨大 代5:サ変: +ぼうだち 棒立ち 名1: +ぼうちゅうざい 防虫剤 名1: +ぼうちょう 傍聴 名6: +ぼうちょう 膨張 名6: +ぼうとう 冒頭 名1: +ぼうとう 暴騰 名6: +ぼうどう 暴動 名1: +ぼうねんかい 忘年会 名1: +ぼうのつ 坊津 地名: +ぼうはつ 暴発 名6: +ぼうはてい 防波堤 名1: +ぼうび 防備 名6: +ぼうふう 暴風 名1: +ぼうふう 防風 名1: +ぼうふうう 暴風雨 名1: +ぼうへき 防壁 名1: +ぼうめい 亡命 名6: +ぼうや 坊や 名1: +ぼうよう 芒洋 形動2: +ぼうらく 暴落 名6: +ぼうりょく 暴力 名1: +ぼうる ボウル 名1: +ぼうれい 亡霊 名1: +ぼうろん 暴論 名1: +ぼか ぼか サ五7: +ぼか 暈 サ五7: +ぼかん 母艦 名1: +ぼき 簿記 名1: +ぼきん 募金 名6: +ぼく 僕 代1: +ぼく 木 代1: +ぼく 卜 代1: +ぼく 墨 単漢: +ぼく 撲 単漢: +ぼく 朴 単漢: +ぼく 牧 単漢: +ぼく 睦 単漢: +ぼく 穆 単漢: +ぼくさつ 撲殺 名6: +ぼくし 牧師 代2: +ぼくしんぐ ボクシング 代3: +ぼくじゅう 墨汁 名1: +ぼくじょう 牧場 名1: +ぼくそう 牧草 名1: +ぼくちく 牧畜 名1: +ぼくとう 木刀 名1: +ぼけ 惚け 一段3: +ぼけつ 墓穴 名1: +ぼこう 母校 名1: +ぼこう 母港 名1: +ぼこく 母国 名1: +ぼさつ 菩薩 名1: +ぼし 母子 名1: +ぼしゅう 募集 名6: +ぼしゅうだん 母集団 名1: +ぼす ボス 名1: +ぼすとん ボストン 地名: +ぼせい 母性 名1: +ぼせん 母船 名1: +ぼたい 母体 名1: +ぼたん ボタン 名1: +ぼたん 牡丹 名1: +ぼたん 釦 名1: +ぼち 墓地 名1: +ぼちぼち ぼちぼち 副8: +ぼっ 没 サ変:サ五1: +ぼっくす ボックス 名1: +ぼっしゅう 没収 名6: +ぼっちゃん 坊っちゃん 名2: +ぼっとう 没頭 名6: +ぼっぱつ 勃発 名6: +ぼつ 没 代1: +ぼつ 勃 単漢: +ぼつにゅう 没入 名6: +ぼつぼつ ぼつぼつ 副8: +ぼつらく 没落 名6: +ぼでぃ ボディ 名1: +ぼでぃー ボディー 名1: +ぼとむ ボトム 名1: +ぼとる ボトル 名1: +ぼにゅう 母乳 名1: +ぼひ 墓碑 名1: +ぼや ぼや 代1: +ぼや ぼや カ五7: +ぼら 鯔 代1: +ぼら 鰡 代1: +ぼらんてぃあ ボランティア 名1: +ぼりゅーむ ボリューム 名1: +ぼると ボルト 助数2: +ぼん 本 接尾1: +ぼん 本 助数2: +ぼん 凡 代1: +ぼん 盆 接尾1: +ぼん 梵 代1: +ぼんおどり 盆踊り 代1: +ぼんさい 凡才 名1: +ぼんさい 盆栽 名1: +ぼんじん 凡人 名1: +ぼんぞく 凡俗 名8: +ぼんち 盆地 名1: +ぼんど ボンド 名1: +ぼんのう 煩悩 名1: +ぼんやり ぼんやり 副3: +ぼんよう 凡庸 代5: +ぽ 歩 助数: +ぽーず ポーズ 名1: +ぽーたぶる ポータブル 名8: +ぽーと ポート 名1: +ぽーる ポール 名1: +ぽいんた ポインタ 名1: +ぽいんたー ポインター 代1: +ぽいんてぃんぐ ポインティング 代4: +ぽいんと ポイント 名6:助数2: +ぽう 包 単漢: +ぽけっと ポケット 名1: +ぽじしょん ポジション 名1: +ぽすたー ポスター 名1: +ぽすと ポスト 名6: +ぽっと ポット 名1: +ぽっぷ ポップ 名1: +ぽっぷす ポップス 名1: +ぽてと ポテト 名1: +ぽぴゅらー ポピュラー 名8: +ぽり ポリ 名1: +ぽりしー ポリシー 名1: +ぽん 本 助数2: +ぽんど ポンド 助数2: +ま 巻 カ五7: +ま 蒔 カ五7: +ま 撒 カ五7: +ま 増 サ五7: +ま 待 タ五8: +ま 舞 ワ五7: +ま 間 代1: +ま 真 代1: +ま 魔 接尾1: +ま 摩 単漢: +ま 磨 単漢: +ま 麻 単漢: +まーかー マーカー 名1: +まーく マーク 名6: +まーけっと マーケット 名1: +まーけてぃんぐ マーケティング 名1: +まーじ マージ 名6: +まーじゃん マージャン 代4: +まーじん マージン 名1: +まーらー マーラー 名1: +まあ まあ 感動: +まあい 間合い 代1: +まあたらし 真新し 形2: +まい まい ラ五3: +まい 参 ラ五8: +まい 舞 代1: +まい 枚 助数2: +まい 米 代1: +まい マイ 名1: +まい 埋 単漢: +まい 妹 単漢: +まい 昧 単漢: +まい 毎 単漢: +まいあさ 毎朝 名1: +まいかー マイカー 名1: +まいかい 毎回 名1: +まいき 毎期 名1: +まいきょ 枚挙 名6: +まいく マイク 名1: +まいくろ マイクロ 名1: +まいこ 舞い込 マ五7: +まいこん マイコン 名1: +まいご 迷子 名1: +まいさか 舞阪 地名: +まいしゅう 毎週 代6: +まいしん 邁進 名6: +まいじ 毎時 代6: +まいすう 枚数 名1: +まいせつ 埋設 名6: +まいそう 埋葬 名6: +まいぞう 埋蔵 名6: +まいつき 毎月 代6: +まいづる 舞鶴 地名: +まいとし 毎年 代6: +まいど 毎度 代6: +まいなー マイナー 代5: +まいなす マイナス 名1: +まいなす − 単漢: +まいにち 毎日 名11: +まいねん 毎年 代6: +まいはら 米原 地名: +まいばら 米原 苗字: +まいばら 米原 地名: +まいばん 毎晩 代6: +まいぺーす マイペース 名1: +まいほーむ マイホーム 名1: +まいぼつ 埋没 名6: +まいまい 毎々 代6: +まいよ 毎夜 代6: +まいる マイル 代1:助数2: +まいる 哩 単漢: +まうえ 真上 代1: +まうす マウス 名1: +まうんてん マウンテン 名1: +まうんと マウント 名6: +まえ 前 代1: +まえ 前 接尾1: +まえあし 前足 名1: +まえうり 前売 名6: +まえおき 前置き 代4: +まえかわ 前川 苗字: +まえがき 前書き 代4: +まえがし 前貸し 代4: +まえがり 前借り 代4: +まえきん 前金 名1: +まえさわ 前沢 地名: +まえざわ 前沢 苗字: +まえじま 前島 苗字: +まえじま 前島 地名: +まえだ 前田 苗字: +まえつえ 前津江 地名: +まえの 前野 苗字: +まえはら 前原 苗字: +まえば 前歯 名1: +まえばし 前橋 地名: +まえばらい 前払い 代4: +まえばる 前原 地名: +まえぶれ 前触れ 代1: +まえまえ 前々 代6: +まえむき 前向き 名8: +まえもって 前もって 副1: +まえやま 前山 苗字: +まか 任 サ五1: +まか 負か サ五1: +まかせ まかせ 一段3: +まかせ 任せ 一段4: +まかな 賄 ワ五7: +まかべ 真壁 苗字: +まかべ 真壁 地名: +まが 曲が ラ五8: +まが 紛 ワ五3: +まがお 真顔 代1: +まがじん マガジン 名1: +まがり 間借り 代4: +まがりかど 曲り角 名1: +まき 薪 代1: +まき 巻 代1: +まき 牧 代1: +まき 槙 代1: +まき 真紀 名前: +まきあげ 巻き上げ 一段3: +まきおか 牧丘 地名: +まきがみ 巻紙 代1: +まきこ 巻き込 マ五7: +まきじゃく 巻尺 代1: +まきぞの 牧園 地名: +まきた 牧田 苗字: +まきつ 巻き付 カ五7: +まきの 牧野 苗字: +まきの マキノ 地名: +まきば 牧場 名1: +まきもの 巻物 名1: +まぎら 紛ら サ五5: +まぎらわし 紛らわし 形2: +まぎれ 紛れ 一段1: +まぎれこ 紛れ込 マ五7: +まぎわ 間際 代1: +まく 幕 代1: +まく 幕 助数: +まく 膜 代1: +まくあけ 幕開け 代4: +まくぎれ 幕切れ 名1: +まくせる マクセル 企業: +まくどなるど マクドナルド 企業: +まくはり 幕張 地名: +まくべつ 幕別 地名: +まくら 枕 代1: +まくらざき 枕崎 地名: +まくろ マクロ 名8: +まぐろ 鮪 代1: +まぐろうひる マグロウヒル 企業: +まけ 負け 接尾1:一段2: +まけこ 負け越 サ五7: +まげ 曲げ 一段4: +まこと 誠 代1:名前: +まこと 真 名前: +まこと 信 名前: +まご 孫 名1: +まごころ 真心 代1: +まごまご まごまご 副4: +まさ 勝 ラ五7: +まさ 優 ラ五7: +まさ 雅 単漢: +まさ 昌 単漢: +まさ 政 単漢: +まさ 正 単漢: +まさ 柾 単漢: +まさあき 政昭 名前: +まさあき 正昭 名前: +まさあき 正明 名前: +まさいち 政一 名前: +まさお 雅夫 名前: +まさお 雅雄 名前: +まさお 昌男 名前: +まさお 政男 名前: +まさお 政夫 名前: +まさお 政雄 名前: +まさお 正男 名前: +まさお 正夫 名前: +まさお 正雄 名前: +まさか まさか 代6: +まさかず 正一 名前: +まさかず 正和 名前: +まさかつ 政勝 名前: +まさかつ 正勝 苗字: +まさき 正紀 名前: +まさき 正樹 名前: +まさき 正木 苗字: +まさき 松前 地名: +まさきち 政吉 名前: +まさこ 昌子 名前: +まさこ 雅子 名前: +まさこ 政子 名前: +まさこ 正子 名前: +まさし 雅史 名前: +まさし 政志 名前: +まさし 正 名前: +まさし 正志 名前: +まさしく 正しく 副1: +まさじ 正治 名前: +まさたか 正孝 名前: +まさちゅーせっつ マサチューセッツ 地名: +まさつ 摩擦 名6: +まさと 雅人 名前: +まさと 真人 名前: +まさと 正人 名前: +まさとし 雅俊 名前: +まさとし 雅敏 名前: +まさとし 政利 名前: +まさとし 正俊 名前: +まさとし 正利 名前: +まさなお 正直 名前: +まさに まさに 副1: +まさに 正に 副1: +まさのぶ 雅信 名前: +まさのぶ 昌信 名前: +まさのり 正則 名前: +まさのり 正徳 名前: +まさはる 雅春 名前: +まさはる 正治 名前: +まさはる 正春 名前: +まさはる 政春 名前: +まさひこ 雅彦 名前: +まさひこ 昌彦 名前: +まさひこ 正彦 名前: +まさひろ 雅博 名前: +まさひろ 昌宏 名前: +まさひろ 昌弘 名前: +まさひろ 正広 名前: +まさひろ 正弘 名前: +まさふみ 正文 名前: +まさみ 政美 名前: +まさみ 正美 名前: +まさみ 雅美 名前: +まさみち 正道 名前: +まさみつ 正光 名前: +まさめ 正目 名1: +まさや 昌也 名前: +まさゆき 雅之 名前: +まさゆき 昌幸 名前: +まさゆき 政幸 名前: +まさゆき 政行 名前: +まさゆき 正幸 名前: +まさゆき 正行 名前: +まさゆめ 正夢 代1: +まさよし 政義 名前: +まさよし 正義 名前: +まさる 勝 名前: +まさる 優 名前: +まざ 交ざ ラ五3: +まざ 混ざ ラ五3: +まざまざ まざまざ 副2: +ましき 益城 地名: +ましけ 増毛 地名: +ましこ 益子 苗字: +ましこ 益子 地名: +ました 益田 地名: +ました 真下 代1: +まして まして 副1: +ましょうめん 真正面 名1: +ましん マシン 名1: +まじ 交じ ラ五3: +まじ 混じ ラ五3: +まじえ 交え 一段1: +まじっく マジック 名1: +まじま 間島 苗字: +まじめ 真面目 代5: +まじゅつ 魔術 名1: +まじょ 魔女 名1: +まじわ 交わ ラ五7: +ます 鱒 代1: +ます 升 代1: +ます 桝 代1: +ます 舛 単漢: +ますい 麻酔 名1: +ますい 増井 苗字: +ますお 増尾 苗字: +ますお 増尾 地名: +ますく マスク 名6: +ますこ 益子 名前: +ますこ 増子 苗字: +ますこみ マスコミ 名1: +ますた マスタ 代1: +ますたー マスター 名6: +ますだ 増田 苗字: +ますだ 益田 苗字: +ますだ 益田 地名: +ますほ 増穂 地名: +ますます ますます 副7: +ますます 益々 副7: +ますみ 真澄 名前: +ますやま 増山 苗字: +まず まず 副1:形2: +まず 先ず 副1: +まずし 貧し 形5: +まずまず まずまず 代6: +まぜ 混ぜ 一段1: +まぜ 馬瀬 地名: +まぜあわせ 混ぜ合わせ 一段3: +また また 代6:ガ五5: +また 股 代1: +また 跨 ガ五5: +また 又 接続: +また 亦 接続: +また 俣 単漢: +またが 跨 ラ五3: +またた 瞬 カ五3: +またま 真玉 地名: +またまた またまた 副1: +まだ まだ 代6: +まだ 未だ 代6: +まだしも まだしも 副1: +まだまだ まだまだ 副1: +まだむ マダム 代1: +まだら 斑 代1: +まだらお 斑尾 地名: +まち 町 接尾4: +まち 街 代1: +まちあいしつ 待合室 代1: +まちあわ 待ち合わ サ五7: +まちかど 街角 代1: +まちが 間違 ワ五4: +まちじゅう 町中 名1: +まちだ 町田 苗字: +まちだ 町田 地名: +まちどおし 待ち遠し 形5: +まちなか 町中 名1: +まちなみ 町並み 名1: +まちのぞ 待ち望 マ五1: +まちまち まちまち 代5: +まぢか 間近 代5:形1: +まぢか まぢか 代5:形1: +まっか 真っ赤 代5: +まっかり 真狩 地名: +まっき 末期 名4: +まっきんとっしゅ マッキントッシュ 代1: +まっくす マックス 企業: +まっくろ 真っ黒 代5:形1: +まっさいちゅう 真最中 代1: +まっさお 真っ青 代5: +まっさき 真っ先 代1: +まっさつ 抹殺 名6: +まっしょう 抹消 名6: +まっしょう 末梢 名1: +まっしろ 真っ白 代5:形1: +まっすぐ まっすぐ 代5: +まっすぐ 真っ直 代5: +まっせ 末世 名1: +まっせき 末席 名1: +まったく 全く 代6: +まったん 末端 名1: +まっち マッチ 代4: +まっちゃ 抹茶 代1: +まっちんぐ マッチング 代4: +まっとう 全う サ変: +まっぴつ 末筆 名1: +まっぴら まっぴら 形動1: +まっぴるま 真っ昼間 代1: +まっぴんぐ マッピング 名6: +まっぷ マップ 名1: +まっぷたつ 真っ二つ 代1: +まつ 祭 ラ五8: +まつ 奉 ラ五1: +まつ 松 代1: +まつ 末 接尾1: +まつ 抹 単漢: +まつ 沫 単漢: +まつい 松井 苗字: +まついだ 松井田 地名: +まつうら 松浦 苗字: +まつうら 松浦 地名: +まつえ 松江 苗字: +まつえ 松江 地名: +まつえい 末裔 名1: +まつお 松尾 苗字: +まつお 松尾 地名: +まつお 松夫 苗字: +まつおか 松岡 苗字: +まつかた 松方 苗字: +まつかわ 松川 苗字: +まつかわ 松川 地名: +まつき 松木 苗字: +まつげ まつげ 代1: +まつご 末期 名1: +まつさか 松坂 苗字: +まつさか 松阪 地名: +まつさき 松崎 苗字: +まつざか 松坂 苗字: +まつざき 松崎 苗字: +まつざわ 松沢 苗字: +まつしげ 松茂 地名: +まつした 松下 名1:苗字: +まつしま 松島 苗字: +まつしま 松島 地名: +まつしろ 松代 苗字: +まつじつ 末日 名1: +まつだ 松田 苗字: +まつだ マツダ 企業: +まつだい 末代 名1: +まつだい 松代 地名: +まつとう 松任 地名: +まつとうや 松任谷 苗字: +まつど 松戸 苗字: +まつど 松戸 地名: +まつなが 松永 苗字: +まつの 松野 苗字: +まつのやま 松之山 地名: +まつば 松葉 苗字: +まつばせ 松橋 地名: +まつばづえ 松葉杖 代1: +まつばら 松原 苗字: +まつばら 松原 地名: +まつび 末尾 名1: +まつぶし 松伏 地名: +まつまえ 松前 苗字: +まつまえ 松前 地名: +まつまる 松丸 苗字: +まつむら 松村 苗字: +まつもと 松本 地名: +まつもと 松本 苗字: +まつもと 松元 地名: +まつもと 松元 苗字: +まつやま 松山 苗字: +まつやま 松山 地名: +まつり 祭 接尾1: +まつりごと 政 代1: +まつろ 末路 名1: +まつわ 纏わ ラ五3: +まで 迄 代1: +まと 纏 ワ五1: +まと 的 代1: +まとい 纏 代1: +まとば 的場 苗字: +まとま まとま ラ五7: +まとめ まとめ 一段3: +まとも まとも 形動4: +まとりっくす マトリックス 代1: +まど 窓 代1: +まど 惑 ワ五8: +まどがわ 窓側 名1: +まどぎわ 窓際 名1: +まどぐち 窓口 名1: +まどべ 窓辺 代1: +まどり 間取り 名1: +まどろ まどろ マ五7: +まどわ 惑わ サ五3: +まな 学 バ五8: +まなー マナー 名1: +まなこ 眼 代1: +まなざし 眼差し 代1: +まなつ 真夏 代1: +まなつる 真鶴 地名: +まなでし 愛弟子 代1: +まなぶ 学 名前: +まにあ マニア 名1: +まにあ 間に合 ワ五6: +まにあっく マニアック 名8: +まにゅある マニュアル 名4: +まにわ 真庭 地名: +まぬかれ 免れ 一段1: +まぬがれ 免れ 一段1: +まぬけ 間抜け 代5: +まね 招 カ五4: +まね 真似 一段3: +まねーじゃ マネージャ 名1: +まねーじゃー マネージャー 名1: +まねきん マネキン 名1: +まねじめんと マネジメント 名6: +まねじゃー マネジャー 名1: +まの 真野 苗字: +まのび 間延び 代4: +まばた 瞬 カ五1: +まばたき まばたき 代4: +まばたき 瞬き 代4: +まばら 疎ら 代5: +まひ 麻痺 名6: +まひる 真昼 代1: +まび 間引 カ五3: +まふゆ 真冬 代1: +まぶし まぶし 形5: +まぶた まぶた 代1: +まほう 魔法 名1: +まぼろし 幻 代1: +まま まま 代6: +まま 侭 代1: +まま ママ 代2: +まま 間々 副1: +ままはは 継母 代1: +まみず 真水 名1: +まみれ まみれ 一段1: +まむろがわ 真室川 地名: +まめ まめ 代5: +まめ 豆 名2: +まめつ 摩滅 名6: +まめつぶ 豆粒 代1: +まも 守 ラ五8: +まもう 摩耗 名6: +まもる 守 名前: +まもる 衛 名前: +まや 摩耶 地名: +まやく 麻薬 名1: +まゆ 眉 代1: +まゆ 繭 代1: +まゆげ 眉毛 名1: +まゆずみ 黛 苗字:代1: +まゆみ 真弓 名前: +まゆみ 真由美 名前: +まよ 迷 ワ五8: +まよなか 真夜中 代1: +まらそん マラソン 名6: +まり まり 代1: +まり 鞠 代1: +まり 真理 名前: +まり 麻理 名前: +まりこ 真理子 名前: +まりこ 麻里子 名前: +まりょく 魔力 代1: +まる 丸 代1:形11: +まる ○ 代1: +まる ◎ 代1: +まる ● 代1: +まるい 丸井 苗字: +まるいけ 丸池 地名: +まるお 丸尾 苗字: +まるお 丸尾 地名: +まるおか 丸岡 苗字: +まるがめ 丸亀 地名: +まるく マルク 助数2: +まるこ 丸子 地名: +まるごと まるごと 副1: +まるせっぷ 丸瀬布 地名: +まるぜん 丸善 企業: +まるた 丸太 名1: +まるたに 丸谷 苗字: +まるち マルチ 名1: +まるっきり まるっきり 代6: +まるで まるで 副1: +まるはだか 丸裸 代5: +まるまる まるまる 代6: +まるまる 丸々 代6: +まるめ 丸め 一段1: +まるめこ 丸め込 マ五7: +まるもり 丸森 苗字: +まるやま 円山 苗字: +まるやま 円山 地名: +まるやま 丸山 苗字: +まるやま 丸山 地名: +まるゆう マル優 名1: +まれ まれ 形動1: +まれ 希 形動1: +まれ 稀 形動1: +まれ 稀れ 形動1: +まろ 麿 代1: +まろやか 円やか 形動4: +まわ 回 サ五8:ラ五8: +まわ 廻 サ五8:ラ五8: +まわり 周り 接尾1: +まわりこ 回り込 マ五7: +まわりみち 回り道 代4: +まん 万 数詞: +まん マン 接尾1: +まん 満 接頭1:代1: +まん 饅 代1: +まん 鰻 単漢: +まん 慢 単漢: +まん 漫 単漢: +まん 蔓 単漢: +まん 瞞 単漢: +まん 萬 単漢: +まんいち 万一 代6: +まんいん 満員 名1: +まんえつ 満悦 名7: +まんえん 蔓延 名6: +まんかい 満開 名6: +まんが 漫画 名4: +まんがん 満貫 名1: +まんき 満期 名1: +まんきつ 満喫 名6: +まんげきょう 万華鏡 名1: +まんげつ 満月 名1: +まんさい 満載 名6: +まんざい 漫才 名1: +まんしつ 満室 代1: +まんしゃ 満車 名1: +まんしゅう 満州 地名: +まんしょん マンション 名1: +まんしん 満身 名1: +まんじ 卍 代1: +まんじゅう 饅頭 名2: +まんじゅう まんじゅう 名2: +まんじょう 満場 名1: +まんすい 満水 名6: +まんせい 慢性 名4: +まんぜん 漫然 形動2: +まんぞく 満足 名7:形動8: +まんちょう 満潮 名1: +まんてん 満点 名1: +まんなか 真ん中 名1: +まんねんひつ 万年筆 名1: +まんのう 満濃 地名: +まんば 万場 地名: +まんめん 満面 名1: +まんゆう 漫遊 名6: +まんよう 万葉 代1: +まんりょう 満了 名6: +み 見 一段3: +み 診 一段1: +み 看 一段1: +み 観 一段1: +み 満 タ五1: +み 実 代1: +み 身 代1: +み 味 接尾1: +み 未 接頭1: +み 魅 サ変: +み 巳 代1: +み 箕 代1: +み 御 代1: +み 三 単漢: +み 深 単漢: +み 美 単漢: +みーてぃんぐ ミーティング 名6: +みーはー ミーハー 代5: +みあ 見合 ワ五4: +みあげ 見上げ 一段1: +みあさ 美麻 地名: +みあた 見当た ラ五1: +みあわせ 見合わせ 一段1: +みい 見入 ラ五1: +みい 三井 地名: +みいけ 三池 地名: +みいだ 見い出 サ五5: +みいらく 三井楽 地名: +みうけ 見受け 一段1: +みうごき 身動き 代4: +みうしな 見失 ワ五5: +みうち 身内 名1: +みうら 三浦 苗字: +みうら 三浦 地名: +みえ 見え 一段1: +みえ 見栄 名1: +みえ 三重 地名: +みえかくれ 見えかくれ 代4: +みえこ 三枝子 名前: +みえこ 美恵子 名前: +みえこ 美枝子 名前: +みおく 見送 ラ五8: +みおと 見落と サ五8: +みおとり 見劣り 代4: +みおぼえ 見覚え 名1: +みおも 身重 名8: +みか 美香 名前: +みかい 未開 名8: +みかいけつ 未解決 名8: +みかえ 見返 サ五3: +みかえり 見返り 名1: +みかぎ 見限 ラ五2: +みかく 味覚 名1: +みかくにん 未確認 名8: +みかけ 見かけ 一段3: +みかさ 三笠 苗字: +みかさ 三笠 地名: +みかた 味方 代4: +みかた 見方 名1: +みかた 三方 地名: +みかた 美方 地名: +みかつき 三日月 地名: +みかづき 三日月 代1: +みかみ 三上 苗字: +みかめ 三瓶 地名: +みかも 三加茂 地名: +みかも 美甘 地名: +みかわ 三河 地名: +みかわ 三川 地名: +みかわ 美川 苗字: +みかわ 三加和 地名: +みかん 蜜柑 名1: +みかん 未刊 名1: +みかん 未完 名1: +みかん みかん 名1: +みかんせい 未完成 代5: +みが 磨 カ五7: +みがって 身勝手 名8: +みがまえ 身構え 一段3: +みがら 身柄 名1: +みがる 身軽 代5: +みがわり 身代り 名1: +みき 幹 代1: +みき 見切 ラ五3: +みき 三木 苗字: +みき 三木 地名: +みき 美樹 名前: +みきお 幹男 名前: +みきお 幹夫 名前: +みきお 幹雄 名前: +みきこ 美貴子 名前: +みきこ 美樹子 名前: +みぎ 右 代1: +みぎ 右 接頭1: +みぎあし 右足 名1: +みぎうえ 右上 代1: +みぎうで 右腕 名1: +みぎがわ 右側 名1: +みぎした 右下 代1: +みぎて 右手 名1: +みぎはし 右端 代1: +みぎめ 右目 名1: +みぎわ 汀 代1: +みくだ 見下 サ五7: +みくに 三国 苗字: +みくに 三国 地名: +みくも 三雲 苗字: +みくも 三雲 地名: +みくらしま 御蔵島 地名: +みくらべ 見比べ 一段3: +みくろ ミクロ 名1: +みぐるし 見苦し 形9: +みけつ 未決 名1: +みけん 眉間 代1: +みこ 見越 サ五5: +みこ 見込 マ五7: +みこし 御輿 名2: +みこと 尊 代1: +みことのり 詔 代1: +みことのり 勅 代1: +みこん 未婚 名1: +みごと 見事 名9: +みさい 未済 名1: +みさいる ミサイル 名1: +みさお 操 代1: +みさか 御坂 地名: +みさかい 見境 名1: +みさき 三崎 苗字: +みさき 三崎 地名: +みさき 岬 名1: +みさくぼ 水窪 地名: +みさげ 見下げ 一段1: +みささ 三朝 地名: +みさだめ 見定め 一段1: +みさと 三郷 地名: +みさと 美郷 地名: +みさと 美里 地名: +みさと 美里 名前: +みさと 箕郷 地名: +みさわ 三沢 苗字: +みさわ 三沢 地名: +みし 見知 ラ五3: +みしがん ミシガン 地名: +みしま 三島 苗字: +みしま 三島 地名: +みしゅう 未収 名1: +みしょう 御荘 地名: +みしん ミシン 名1: +みじか 短 形6: +みじたく 身支度 代4: +みじめ 惨め 形動4: +みじゅく 未熟 名8: +みす ミス 名1: +みすい 未遂 名1: +みすぎ 美杉 地名: +みすご 見過ご サ五7: +みすて 見捨て 一段1: +みすみ 三角 地名: +みすみ 三隅 地名: +みず 水 名2: +みず 瑞 単漢: +みずあらい 水洗い 代4: +みずいらず 水入らず 名1: +みずいろ 水色 名1: +みずうみ 湖 代1: +みずかさ 水かさ 名1: +みずかみ 水上 苗字: +みずから 自ら 代6: +みずぎ 水着 名1: +みずぎわ 水際 名1: +みずけ 水気 名1: +みずこし 水越 苗字: +みずさわ 水沢 苗字: +みずさわ 水沢 地名: +みずしま 水島 苗字: +みずしま 水島 地名: +みずた 水田 苗字: +みずたに 水谷 苗字: +みずたま 水玉 名1: +みずなみ 瑞浪 地名: +みずの 水野 苗字: +みずひき 水引 名1: +みずびたし 水浸し 名1: +みずぶそく 水不足 名1: +みずほ 瑞穂 地名: +みずほ 瑞穂 名前: +みずま 三瀦 地名: +みずまき 水巻 地名: +みずまし 水増し 代4: +みせ 店 名2: +みせ 見せ 一段2: +みせいねん 未成年 名1: +みせさき 店先 名1: +みせす ミセス 名1: +みせばん 店番 名2: +みせもの 見せ物 名1: +みぜん 未然 名1: +みそ 味噌 名2: +みそか 晦日 名1: +みそこな 見損な ワ五1: +みその 御園 苗字: +みそら 身空 代1: +みぞ 溝 代1: +みぞ 渠 単漢: +みぞぐち 溝口 苗字: +みぞべ 溝辺 地名: +みた 三田 苗字: +みた 三田 地名: +みた 満た サ五7: +みたか 三鷹 地名: +みたがわ 三田川 地名: +みたけ 御嵩 地名: +みたけ 三岳 地名: +みたけ 身丈 名1: +みたて 見立て 一段4: +みたに 三谷 苗字: +みたま 三珠 地名: +みだ 乱 サ五8: +みだし 見出し 名1: +みだしなみ 身だしなみ 代1: +みだら 淫ら 形動1: +みだり みだり 形動1: +みだれ 乱れ 一段3: +みち 道 名1: +みち 未知 名1: +みち 満ち 一段1: +みち 路 単漢: +みちお 道男 名前: +みちお 道夫 名前: +みちお 道雄 名前: +みちがえ 見違え 一段1: +みちこ 美智子 名前: +みちこ 道子 名前: +みちしお 満ち潮 名1: +みちじゅん 道順 名1: +みちすじ 道筋 名1: +みちづれ 道連れ 代4: +みちのく みちのく 名1: +みちのり 道のり 名1: +みちばた 道端 名1: +みちび 導 カ五8: +みちびきだ 導き出 サ五7: +みちゃく 未着 名1: +みちよ 美智代 名前: +みぢか 身近 代5: +みっか 三日 代6: +みっかい 密会 名6: +みっかび 三ヶ日 地名: +みっきょう 密教 名1: +みっくす ミックス 名6: +みっこう 密航 名6: +みっこく 密告 名6: +みっしつ 密室 名1: +みっしゅう 密集 名6: +みっせつ 密接 名8:サ変: +みっそう 密葬 名6: +みっちゃく 密着 名6: +みっつ 三つ 代6: +みっともな みっともな 形2: +みっぷう 密封 名6: +みっぺい 密閉 名6: +みつ 蜜 代1: +みつ 密 代5: +みつ 御津 地名: +みつ 貢 ガ五7: +みつ 三 数詞: +みつ 光 単漢: +みつあき 光昭 名前: +みつあき 光明 名前: +みつい 三井 苗字: +みついし 三石 地名: +みつえ 御杖 地名: +みつえ 光枝 名前: +みつお 光男 名前: +みつお 光夫 名前: +みつお 光雄 名前: +みつお 三男 名前: +みつお 三夫 名前: +みつお 三雄 名前: +みつお 満夫 名前: +みつお 満雄 名前: +みつか 見つか ラ五3: +みつかいどう 水海道 地名: +みつぎ 御調 地名: +みつくろ 見繕 ワ五5: +みつぐ 貢 名前: +みつけ 見つけ 一段1: +みつけ 見附 地名: +みつけだ 見つけ出 サ五5: +みつこ 美津子 名前: +みつこ 光子 名前: +みつこし 三越 企業: +みつしま 美津島 地名: +みつせ 三瀬 地名: +みつぞう 密造 名6: +みつだん 密談 名6: +みつど 密度 名1: +みつなり 光成 名前: +みつにゅうこく 密入国 代4: +みつのぶ 光信 名前: +みつはし 三橋 苗字: +みつはし 三橋 地名: +みつばい 密売 名6: +みつばち 蜜蜂 名1: +みつひこ 光彦 名前: +みつびし 三菱 企業: +みつまさ 光正 名前: +みつめ 見つめ 一段1: +みつも 見積も ラ五8: +みつもり 見積り 代4: +みつもり 三森 苗字: +みつもりしょ 見積書 名2: +みつゆ 密輸 名6: +みつよ 光代 名前: +みつよし 光義 名前: +みつりょう 密漁 名6: +みつりょう 密猟 名6: +みつりん 密林 名1: +みつる 充 名前: +みつる 満 名前: +みてい 未定 名8: +みていぎ 未定義 名1: +みと 看取 ラ五7: +みと 水戸 地名: +みと 水戸 苗字: +みと 美都 地名: +みと 御津 地名: +みとう 未踏 名1: +みとう 美東 地名: +みとどけ 見届け 一段1: +みとみ 三富 苗字: +みとみ 三富 地名: +みとめ 認め 一段4: +みとや 三刀屋 地名: +みとよ 三豊 地名: +みとりず 見取図 名1: +みどうすじ 御堂筋 地名: +みどころ 見所 名1: +みどり 緑 名1:名前: +みどり 碧 名前: +みどり 美土里 名前: +みどり 美土里 地名: +みどり 翠 名前: +みどり みどり 名前: +みどりかわ 緑川 苗字: +みな みな 代6: +みな 皆 代6: +みな 見な サ五7: +みなお 見直 サ五7: +みなかみ 水上 苗字: +みなかみ 水上 地名: +みながわ 皆川 苗字: +みなくち 水口 地名: +みなこ 美奈子 名前: +みなさま 皆様 代1: +みなさん 皆さん 代1: +みなと 港 代1: +みなと 湊 単漢: +みなの 皆野 地名: +みなべ 南部 地名: +みなべがわ 南部川 地名: +みなまた 水俣 地名: +みなみ 南 苗字:接頭2: +みなみ 美並 地名: +みなみあいき 南相木 地名: +みなみあいづ 南会津 地名: +みなみあきた 南秋田 地名: +みなみあしがら 南足柄 地名: +みなみあずみ 南安曇 地名: +みなみあまべ 南海部 地名: +みなみありま 南有馬 地名: +みなみいず 南伊豆 地名: +みなみうおぬま 南魚沼 地名: +みなみうわ 南宇和 地名: +みなみおぐに 南小国 地名: +みなみかた 南方 地名: +みなみかやべ 南茅部 地名: +みなみかわち 南河内 地名: +みなみかんばら 南蒲原 地名: +みなみがわ 南側 名1: +みなみくしやま 南串山 地名: +みなみこま 南巨摩 地名: +みなみさいたま 南埼玉 地名: +みなみさく 南佐久 地名: +みなみしたら 南設楽 地名: +みなみしなの 南信濃 地名: +みなみたかぎ 南高来 地名: +みなみたね 南種子 地名: +みなみたま 南多摩 地名: +みなみだいとう 南大東 地名: +みなみちた 南知多 地名: +みなみつがる 南津軽 地名: +みなみつる 南都留 地名: +みなみなか 南那珂 地名: +みなみなす 南那須 地名: +みなみの 南野 苗字: +みなみふらの 南富良野 地名: +みなみまき 南牧 地名: +みなみまつうら 南松浦 地名: +みなみまわり 南回り 名1: +みなみみのわ 南箕輪 地名: +みなみむろ 南牟婁 地名: +みなみやましろ 南山城 地名: +みなも 水面 代1: +みなもと 源 代1: +みなら 見習 ワ五7: +みなれ 見なれ 一段1: +みに ミニ 名1: +みにい 見に行 カ五7: +みにいっ 見に行っ カ五音便: +みにく 見にく 形2: +みにく 醜 形3: +みにこん ミニコン 代1: +みにまむ ミニマム 代5: +みぬ 見抜 カ五5: +みね 峰 代1: +みね 嶺 代1: +みね 美祢 苗字: +みね 三根 地名: +みね 美禰 地名: +みねお 峰雄 名前: +みねぎし 峰岸 苗字: +みねはま 峰浜 地名: +みねやま 峰山 地名: +みの 実 ラ五7: +みの 稔 ラ五7: +みの 蓑 代1: +みの 美濃 苗字: +みの 美濃 地名: +みの 三野 地名: +みのう 未納 名1: +みのう 美嚢 地名: +みのお 箕面 地名: +みのかも 美濃加茂 地名: +みのが 見逃 サ五8: +みのぶ 身延 地名: +みのまわり 身の回り 代1: +みのり 美野里 地名: +みのる 実 名前: +みのる 稔 名前: +みのわ 箕輪 苗字: +みのわ 箕輪 地名: +みは 見張 ラ五7: +みはし 三橋 苗字: +みはな 見放 サ五7: +みはま 美浜 地名: +みはま 御浜 地名: +みはら 三原 苗字: +みはら 三原 地名: +みはら 美原 苗字: +みはらい 未払い 名1: +みはる 三春 地名: +みばえ 見栄え 名1: +みひつ 未必 代1: +みひら 見開 カ五7: +みふね 御船 地名: +みぶ 壬生 苗字: +みぶ 壬生 地名: +みぶり 身振り 名1: +みぶん 身分 名3: +みほ 美浦 地名: +みほ 美穂 名前: +みほ 美保 苗字: +みほこ 美穂子 名前: +みほのせき 美保関 地名: +みほん 見本 名1: +みぼうじん 未亡人 名1: +みま 見舞 ワ五5: +みま 三間 地名: +みま 美馬 地名: +みまい 見舞い 名5: +みまいきん 見舞金 名2: +みまさか 美作 地名: +みまた 三股 地名: +みまも 見守 ラ五7: +みまわ 見回 ラ五7:サ五7: +みまん 未満 名1:助数2: +みみ 耳 名2: +みみうち 耳打ち 代4: +みみざわり 耳障り 形動1: +みみず ミミズ 代1: +みみより 耳寄り 形動1: +みむ 見向 カ五3: +みむら 三村 苗字: +みめい 未明 名1: +みもと 身元 名1: +みゃく 脈 代1: +みゃくはく 脈拍 名1: +みゃくらく 脈絡 名1: +みや 宮 代1: +みやうち 宮内 苗字: +みやがわ 宮川 苗字: +みやき 三養基 地名: +みやぎ 宮城 苗字: +みやぎ 宮城 地名: +みやくぼ 宮窪 地名: +みやけ 三宅 苗字: +みやけ 三宅 地名: +みやげ 土産 名2: +みやこ 宮古 地名: +みやこ 京都 地名: +みやこ 美也子 名前: +みやこじ 都路 地名: +みやこじま 都島 地名: +みやこのじょう 都城 地名: +みやさか 宮坂 苗字: +みやざき 宮崎 苗字: +みやざき 宮崎 地名: +みやざわ 宮沢 苗字: +みやした 宮下 苗字: +みやしろ 宮代 苗字: +みやしろ 宮代 地名: +みやじま 宮島 苗字: +みやじま 宮島 地名: +みやた 宮田 苗字: +みやた 宮田 地名: +みやたけ 宮武 苗字: +みやづ 宮津 地名: +みやの 宮野 苗字: +みやのじょう 宮之城 地名: +みやはら 宮原 苗字: +みやはら 宮原 地名: +みやぶ 見破 ラ五7: +みやべ 宮部 苗字: +みやま 美山 苗字: +みやま 美山 地名: +みやま 海山 地名: +みやまえ 宮前 苗字: +みやまえ 宮前 地名: +みやもと 宮本 苗字: +みやもり 宮守 地名: +みやわき 宮脇 苗字: +みゅーじあむ ミュージアム 名1: +みゅーじかる ミュージカル 名1: +みゅーじしゃん ミュージシャン 名1: +みゅーじっく ミュージック 名1: +みゆき 美幸 名前: +みゆき 美雪 名前: +みゆき 美由紀 名前: +みゆき 深雪 名前: +みょう 妙 代5: +みょう 明 代1: +みょう 名 代1: +みょう 命 代1: +みょう 冥 単漢: +みょうあん 妙案 名1: +みょうがた 明方 地名: +みょうぎ 妙技 名1: +みょうぎ 妙義 地名: +みょうこう 妙高 地名: +みょうごにち 明後日 代6: +みょうざい 名西 地名: +みょうじ 名字 名1: +みょうじょう 明星 名1: +みょうだい 名代 名1: +みょうちょう 明朝 代6: +みょうどう 名東 地名: +みょうにち 明日 代6: +みょうねん 明年 代6: +みょうばん 明晩 代6: +みょうり 冥利 名1: +みよ 美代 苗字: +みよこ 美代子 名前: +みよし 三好 地名: +みよし 三好 名前: +みよし 三次 地名: +みよし 三芳 地名: +みよた 御代田 地名: +みより 身寄り 代1: +みらい 未来 名1: +みらさか 三良坂 地名: +みり ミリ 助数2: +みりめーとる 粍 単漢: +みりょう 魅了 名6: +みりょう 未了 名1: +みりょく 魅力 名4: +みるく ミルク 名1: +みれん 未練 名8: +みろく 弥勒 名1: +みわ 三輪 苗字: +みわ 三輪 地名: +みわ 三和 苗字: +みわ 三和 地名: +みわ 美和 地名: +みわ 美和 名前: +みわく 魅惑 名6: +みわけ 見分け 一段3: +みわこ 美和子 名前: +みわた 見渡 サ五7: +みん 民 接尾1: +みん 明 代1: +みん 眠 代1: +みん 閔 単漢: +みんえい 民営 名4: +みんか 民家 名1: +みんかん 民間 名1: +みんけん 民権 名1: +みんげい 民芸 名1: +みんしゃとう 民社党 名1: +みんしゅ 民主 名4: +みんしゅう 民衆 名1: +みんしゅく 民宿 名1: +みんじ 民事 名1: +みんせい 民政 名1: +みんせい 民生 名1: +みんぞく 民族 名1: +みんぞく 民俗 名1: +みんちょうたい 明朝体 名1: +みんと ミント 代1: +みんな みんな 代6: +みんな 皆 代6: +みんぽう 民法 名1: +みんぽう 民放 名1: +みんゆう 民有 名1: +みんよう 民謡 名1: +みんわ 民話 名1: +む 向 カ五4: +む 蒸 サ五7: +む 剥 カ五6: +む 無 代1:接頭5: +む 務 代1: +む 夢 代1: +む 霧 代1: +む 六 単漢: +む 武 単漢: +む 牟 単漢: +む 矛 単漢: +む 鵡 単漢: +むーど ムード 名1: +むい 無為 名8: +むいか 六日 代6: +むいかいち 六日市 地名: +むいみ 無意味 名8: +むえき 無益 名8: +むえん 無縁 名1: +むえん 無鉛 名1: +むか 向か ワ五8: +むかい 向井 苗字: +むかいしま 向島 地名: +むかいはら 向原 苗字: +むかいはら 向原 地名: +むかえ 迎え 一段4: +むかえいれ 迎え入れ 一段3: +むかし 昔 代6: +むかしばなし 昔話 名1: +むかわ 武川 苗字: +むかわ 武川 地名: +むかわ 鵡川 地名: +むかん 無冠 名1: +むが 無我 名1: +むがい 無害 代5: +むがく 無学 代5: +むき 無期 名1: +むき 無機 名1: +むきあ 向き合 ワ五7: +むきず 無傷 名8: +むきだ むき出 サ五7: +むきゅう 無休 名1: +むきゅう 無給 名1: +むきん 無菌 名1: +むぎ 麦 名1: +むぎ 牟岐 地名: +むぎ 武儀 地名: +むぎばたけ 麦畑 名1: +むぎわら 麦藁 名1: +むぎわら 麦ワラ 名1: +むく 無垢 名8: +むく 椋 単漢: +むくい 報い 一段3: +むくち 無口 名8: +むくろ 骸 代1: +むけ 向け 一段4: +むけい 無形 名1: +むけつ 無欠 名8: +むげ 無碍 代5: +むげい 無芸 代1: +むげがわ 武芸川 地名: +むげん 無限 名8: +むこ 婿 代1: +むこう 無効 名8: +むこう 向こう 名1: +むこう 向日 地名: +むこうじま 向島 地名: +むこがわ 武庫川 地名: +むこん 無根 名8: +むご 酷 形2: +むご 惨 形2: +むごたらし むごたらし 形2: +むごん 無言 名1: +むさし 武蔵 地名: +むさし 武蔵 名前: +むさしの 武蔵野 地名: +むさしむらやま 武蔵村山 地名: +むさん 無産 名1: +むざい 無罪 名1: +むざむざ むざむざ 副2: +むざん 無惨 名8: +むざん 無残 名8: +むし 無視 名6: +むし 虫 名1: +むし 蟲 名1: +むしあつ 蒸し暑 形2: +むしば 蝕 マ五7: +むしば 虫歯 名1: +むしゃ 武者 名1: +むしゅう 無臭 名1: +むしょう 無償 名1: +むしょうに むしょうに 副1: +むしょく 無職 名1: +むしろ むしろ 副1: +むしろ 筵 代1: +むしん 無心 名8:サ変: +むじ 無地 名1: +むじつ 無実 名8: +むじゃき 無邪気 名8: +むじゅん 矛盾 名6: +むじょう 無情 名8: +むじん 無人 名4: +むじん 無尽 名1: +むす 結 バ五8: +むすう 無数 名8: +むすこ 息子 代2: +むすびつ 結び付 カ五7: +むすびつけ 結びつけ 一段1: +むすめ 娘 代2: +むずかし 難し 形6: +むせ むせ 一段1: +むせい 無声 名1: +むせきにん 無責任 名8: +むせん 無線 名1: +むせん 無銭 名1: +むぜい 無税 名1: +むそう 夢想 名6: +むぞうさ 無造作 名8: +むた 牟田 苗字: +むだ 無駄 代5: +むだ ムダ 代5: +むだん 無断 名1: +むち 無知 名8: +むち 鞭 代1: +むちゃ むちゃ 代5: +むちゃ 無茶 代5: +むちゃくちゃ むちゃくちゃ 代5: +むちゃくちゃ 無茶苦茶 代5: +むちゅう 夢中 名8: +むちん 無賃 名1: +むっつ 六つ 代6: +むつ むつ 地名: +むつ 陸奥 地名: +むつ 睦 単漢: +むつう 無痛 名1: +むつうら 六浦 地名: +むつお 睦夫 名前: +むつかし 難し 形6: +むつざわ 睦沢 地名: +むつまじ 睦まじ 形3: +むつみ 睦美 名前: +むつみ むつみ 地名: +むてき 無敵 名8: +むでん 無電 名1: +むとう 武藤 苗字: +むどく 無毒 名8: +むなかた 宗像 苗字: +むなかた 宗像 地名: +むなさわぎ 胸騒ぎ 代4: +むなし 虚し 形5: +むなし 空し 形5: +むにえる ムニエル 名1: +むね 胸 代1: +むね 旨 代1: +むね 棟 代1:助数2: +むね 宗 単漢: +むねあげ 棟上げ 名1: +むねお 宗雄 名前: +むねん 無念 名8: +むのう 無能 名8: +むはい 無敗 名1: +むひ 無比 形動9: +むびょう 無病 名8: +むふう 無風 代5: +むほう 無法 名8: +むぼう 無謀 名8: +むみ 無味 名8: +むめい 無名 名1: +むめい 無銘 名1: +むやみ 無闇 形動1: +むゆうびょう 夢遊病 代1: +むよう 無用 名10: +むよく 無欲 名8: +むら 村 接尾4: +むら 蒸ら サ五7: +むら 邑 単漢: +むら 群 単漢: +むらい 村井 苗字: +むらおか 村岡 苗字: +むらかみ 村上 苗字: +むらかみ 村上 地名: +むらが 群が ラ五3: +むらき 村木 苗字: +むらこし 村越 苗字: +むらさき 紫 名1: +むらせ 村瀬 苗字: +むらた 村田 苗字: +むらまつ 村松 苗字: +むらまつ 村松 地名: +むらやま 村山 苗字: +むらやま 村山 地名: +むり 無理 名7:形動8: +むりやり 無理矢理 副9: +むりょう 無料 名1: +むりょく 無力 名8: +むるい 無類 名8: +むれ 群 代1: +むれ 群れ 一段3: +むれ 蒸れ 一段1: +むれ 牟礼 地名: +むれい 牟礼 地名: +むろ 室 代1: +むろい 室井 苗字: +むろう 室生 地名: +むろた 室田 苗字: +むろと 室戸 地名: +むろね 室根 地名: +むろまち 室町 名1: +むろまち 室町 地名: +むろらん 室蘭 地名: +むろん 無論 代6: +め め カ五1: +め 召 サ五2: +め 目 代1: +め 眼 代1: +め 芽 代1: +め 女 代1: +めーかー メーカー 名1: +めーく メーク 名6: +めーたー メーター 名1: +めーでー メーデー 名1: +めーとる メートル 助数2: +めーる メール 名6: +めあたらし 目新し 形2: +めあて 目当て 名2: +めい 滅入 ラ五1: +めい 名 接頭1:助数2:接尾1: +めい 姪 代1: +めい 命 代1:ザ変: +めい 銘 代1:ザ変: +めい 明 代1: +めい 盟 代1: +めい 迷 代1: +めい 鳴 代1: +めい 謎 単漢: +めい 冥 単漢: +めいあん 明暗 名1: +めいあん 名案 名1: +めいい 名医 名1: +めいおうせい 冥王星 名1: +めいか 名家 名1: +めいか 銘菓 名1: +めいかい 明解 名8: +めいかい 明快 名8: +めいかく 明確 名8: +めいが 名画 名1: +めいがら 銘柄 名1: +めいき 明記 名6: +めいき 銘記 名6: +めいきゅう 迷宮 名1: +めいきょく 名曲 名1: +めいぎ 名義 名1: +めいく メイク 名6: +めいげん 名言 名1: +めいげん 明言 名6: +めいさい 明細 名8: +めいさく 名作 名1: +めいさま 名様 助数2: +めいさん 名産 名1: +めいし 名詞 名4: +めいし 名刺 名1: +めいしゅ 名手 名1: +めいしょ 名所 名1: +めいしょう 名称 名1: +めいしょう 名勝 名1: +めいしん 迷信 名1: +めいしん 名神 地名: +めいじ 明治 名1: +めいじ 明示 名6: +めいじつ 名実 名1: +めいじん 名人 代2: +めいせい 名声 名1: +めいせき 明晰 名8: +めいそう 瞑想 名6: +めいだい 命題 名1: +めいちゅう 命中 名6: +めいちょ 名著 名1: +めいとう 名答 名3: +めいとう 名東 地名: +めいとう 名糖 企業: +めいど 明度 名1: +めいにち 命日 名1: +めいはく 明白 名8: +めいび 明媚 代5: +めいふく 冥福 名3: +めいぶつ 名物 名1: +めいぶん 名文 名1: +めいぼ 名簿 名1: +めいめい 命名 名6: +めいもく 名目 名1: +めいもん 名門 名1: +めいよ 名誉 名8: +めいりょう 明瞭 名8: +めいりんぐ メイリング 名1: +めいる メイル 名6: +めいれい 命令 名7: +めいろ 迷路 名1: +めいろう 明朗 名8: +めいわ 明和 地名: +めいわく 迷惑 名10:サ変: +めいん メイン 名1: +めうえ 目上 名1: +めうつり 目移り 名6: +めおと 夫婦 名1: +めか メカ 名1: +めかけ 妾 代2: +めかた 目方 名1: +めかにずむ メカニズム 名1: +めが メガ 助数2: +めがしら 目頭 名1: +めがみ 女神 名1: +めきしこ メキシコ 地名: +めくら 盲 代1: +めぐ 恵 マ五4: +めぐ めぐ ラ五7: +めぐ 巡 ラ五7: +めぐすり 目薬 名1: +めぐみ 恵 名前: +めぐみ めぐみ 名前: +めぐりあ 巡り合 ワ五7: +めぐろ 目黒 地名: +めげ めげ 一段1: +めさき 目先 名1: +めざ 目指 サ五5: +めざと 目ざと 形2: +めざまし 目覚し 形2:代1: +めざめ 目覚め 一段3: +めざわり 目障り 代5: +めし 飯 名1: +めした 目下 名1: +めしつかい 召使 名1: +めじゃー メジャー 代5: +めじり 目尻 名1: +めじるし 目印 名1: +めじろ 目白 地名: +めす 雌 代1: +めす 雌 接頭1: +めす 牝 代1: +めす 牝 接頭1: +めす メス 代1: +めす ♀ 代1: +めずらし 珍し 形5: +めせん 目線 名1: +めそっど メソッド 名1: +めそぽたみあ メソポタミア 地名: +めぞねっと メゾネット 代1: +めた メタ 名1: +めたる メタル 名1: +めたん メタン 名1: +めだ 目立 タ五7: +めだま 目玉 名2: +めだる メダル 名1: +めちゃくちゃ めちゃくちゃ 代5: +めちゃめちゃ めちゃめちゃ 代5: +めちる メチル 代1: +めっしゅ メッシュ 名1: +めっせーじ メッセージ 名1: +めった 滅多 形動1: +めっぽう 滅法 名11: +めつ 滅 単漢: +めつぼう 滅亡 名6: +めでぃあ メディア 名1: +めでた めでた 形9: +めど 目処 代1: +めなし 目梨 地名: +めにゅー メニュー 名1: +めぬま 妻沼 地名: +めはな 目鼻 名1: +めばえ 芽生え 一段3: +めべり 目減り 代4: +めぼし 目星 名1: +めまぐるし 目まぐるし 形2: +めまんべつ 女満別 地名: +めむろ 芽室 地名: +めめし 女々し 形3: +めも メモ 代4: +めも メモ ラ五1: +めもと 目元 代1: +めもり 目盛 名1: +めもり 目盛り 名1: +めもり メモリ 名1: +めもりー メモリー 名1: +めやす 目安 名1: +めりっと メリット 名1: +めろでぃー メロディー 名1: +めん 面 代1:助数2:サ変: +めん 麺 代1: +めん 綿 代1: +めん 免 代4:ザ変: +めん 緬 代1: +めん 棉 単漢: +めんえき 免疫 名1: +めんかい 面会 名7: +めんきょ 免許 代4: +めんきょしょう 免許証 名1: +めんざい 免罪 名1: +めんし 綿糸 名1: +めんしき 面識 名1: +めんしょく 免職 名6: +めんじょ 免除 名6: +めんじょう 免状 名2: +めんせき 面積 名1: +めんせき 免責 名6: +めんせつ 面接 名6: +めんぜい 免税 名6: +めんぜん 面前 名1: +めんそ 免訴 名6: +めんそう 面相 助数2: +めんたる メンタル 代5: +めんだ 免田 地名: +めんだん 面談 名7: +めんつ 面子 名1: +めんてなんす メンテナンス 名6: +めんどう 面倒 名10: +めんどくさ めんどくさ 形5: +めんばー メンバー 名1: +めんぼく 面目 名1: +めんみつ 綿密 名8: +めんめん 面々 名1: +めんるい 麺類 名1: +も 燃 サ五6: +も 持 タ五8: +も 模 サ五5:単漢: +も 盛 ラ五3: +も 漏 ラ五3: +も 洩 ラ五3: +も も マ五7:ガ五7:ラ五7: +も 揉 マ五8: +も 藻 代1: +も 裳 代1: +も 喪 代1: +も 摸 単漢: +も 茂 単漢: +もーたー モーター 名1: +もーつぁると モーツァルト 代1: +もーど モード 名1: +もう もう 副1: +もう 申 サ五7: +もう 猛 接頭1: +もう 盲 代1: +もう 蒙 代1: +もう 網 接尾1: +もう 毛 助数2: +もう 亡 単漢: +もう 望 単漢: +もう 妄 単漢: +もう 孟 単漢: +もう 耗 単漢: +もう 魍 単漢: +もうい 猛威 名1: +もうか 儲か ラ五3: +もうきん 猛禽 名1: +もうけ 儲け 一段3: +もうけ 設け 一段3: +もうげん 妄言 名1: +もうしあげ 申し上げ 一段1: +もうしいれ 申し入れ 一段3: +もうしうけ 申し受け 一段3: +もうしこ 申し込 マ五8: +もうしこみ 申込 名1: +もうしこみしょ 申込書 名1: +もうしつけ 申しつけ 一段2: +もうしで 申し出 一段4: +もうしぶん 申し分 名1: +もうしょ 猛暑 名1: +もうしわけ 申し訳 代4: +もうしわけな 申し訳な 形2: +もうしわた 申し渡 サ五7: +もうしん 盲信 名6: +もうじゃ 亡者 名1: +もうじゅう 猛獣 名1: +もうじん 盲人 名1: +もうそう 妄想 名6: +もうちょう 盲腸 名1: +もうてん 盲点 名1: +もうで 詣で 一段3: +もうとう 毛頭 副1: +もうどく 猛毒 名8: +もうはつ 毛髪 名1: +もうひつ 毛筆 名1: +もうふ 毛布 名1: +もうまく 網膜 名1: +もうもく 盲目 名4: +もうら 網羅 名6: +もうり 毛利 苗字: +もうれつ 猛烈 名8: +もえ 燃え 一段1: +もえ 萌え 一段1: +もおか 真岡 地名: +もがみ 最上 苗字: +もがみ 最上 地名: +もぎ 模擬 名1: +もぎ 茂木 苗字: +もく 黙 サ変:サ五1: +もく 目 助数2:サ変:サ五1: +もく 木 代1: +もく 杢 単漢: +もくげき 目撃 名6: +もくさつ 黙殺 名6: +もくさん 目算 名6: +もくざい 木材 名1: +もくし 黙視 代4: +もくし 目視 代4: +もくじ 目次 名1: +もくせい 木星 名1: +もくぜん 目前 名1: +もくそく 目測 名6: +もくぞう 木造 名1: +もくたん 木炭 名1: +もくてき 目的 名1: +もくてきち 目的地 名1: +もくとう 黙祷 名6: +もくにん 黙認 名6: +もくば 木馬 名1: +もくひ 黙秘 代4: +もくひょう 目標 名1: +もくめ 木目 名1: +もくもく 黙々 形動2: +もくよう 木曜 名1: +もくようび 木曜日 名1: +もくれい 黙礼 代4: +もくろ 目論 マ五7: +もくろく 目録 名1: +もぐ 潜 ラ五7: +もぐりこ もぐり込 マ五7: +もけい 模型 名1: +もさく 模索 名6: +もし もし 副6: +もしか もしか 副4: +もしくは もしくは 接続: +もしもし もしもし 代1: +もしゃ 模写 名6: +もしや もしや 副4: +もしゅ 喪主 名1: +もしょう 喪章 名1: +もじ もじ ラ五7: +もじ 文字 名1: +もじ 文字 助数2: +もじ 門司 地名: +もじゅーる モジュール 名1: +もすくわ モスクワ 地名: +もず 百舌 代1: +もず 鵙 代1: +もせうし 妹背牛 地名: +もぞう 模造 代4: +もたげ もたげ 一段1: +もたら もたら サ五7: +もだえ 悶え 一段3: +もだん モダン 名8: +もち 餅 名2: +もち 勿 単漢: +もちーふ モチーフ 名1: +もちあげ 持ち上げ 一段3: +もちある 持ち歩 カ五7: +もちい 用い 一段1: +もちがせ 用瀬 地名: +もちこ 持ち越 サ五7: +もちこ 持ち込 マ五8: +もちさ 持ち去 ラ五5: +もちだ 持ち出 サ五7: +もちだ 持田 苗字: +もちづき 望月 苗字: +もちづき 望月 地名: +もちなお 持ち直 サ五7: +もちはこ 持ち運 バ五7: +もちまわ 持ち回 ラ五7: +もちゅう 喪中 名1: +もちよ 持ち寄 ラ五7: +もちろん もちろん 形動9: +もちろん 勿論 形動9: +もったい 勿体 名1: +もっと もっと 副1: +もっとー モットー 名1: +もっとも もっとも 副1:形動1: +もっとも 最も 副1: +もっとも 尤も 副1:形動1: +もっぱら もっぱら 副9: +もっぱら 専ら 副9: +もつれ もつれ 一段3: +もてあま 持て余 サ五7: +もてぎ 茂木 地名: +もでむ モデム 名1: +もでる モデル 名4: +もと もと 代1:ラ五1: +もと 下 代1: +もと 基 代1: +もと 元 接頭1:接尾1: +もと 素 代1: +もと 本 代1: +もとい 基 苗字: +もとき 本木 苗字: +もとこ 素子 名前: +もとじめ 元締め 代4: +もとす 本巣 地名: +もとせん 元栓 名1: +もとだ 元田 苗字: +もとちょう 元帳 名1: +もとづ 基づ カ五3: +もとで 元手 名1: +もとどおり 元通り 代6: +もとね 元値 名1: +もとの 本埜 地名: +もとはし 本橋 苗字: +もとぶ 本部 地名: +もとま 求ま ラ五1: +もとみや 本宮 苗字: +もとむ 求む 代1: +もとむら 本村 苗字: +もとめ 求め 一段4: +もともと もともと 代6: +もともと 元々 代6: +もとやま 本山 苗字: +もとやま 本山 地名: +もとゆき 基之 名前: +もとよし 本吉 地名: +もとよし 本吉 苗字: +もとろーら モトローラ 企業: +もど 戻 サ五8:ラ五8: +もにた モニタ 代4: +もにたー モニター 代4: +もの 者 接尾1: +もの 物 接尾1:サ変: +もの もの 代1: +もの モノ 代1: +ものう 桃生 地名: +ものおき 物置 名1: +ものおと 物音 名1: +ものがた 物語 ラ五1: +ものがたり 物語 名1: +ものがなし もの悲し 形3: +ものくろ モノクロ 代1: +ものごと 物事 名1: +ものさし 物差し 名1: +ものしり 物知り 名1: +ものずき 物好き 代5: +ものたりな 物足りな 形3: +もののけ もののけ 名1: +ものべ 物部 地名: +ものほし 物干し 名1: +もはや もはや 副1: +もはや 最早 副1: +もはん 模範 名4: +もばら 茂原 地名: +もふく 喪服 名1: +もほう 模倣 名6: +もみけ もみ消 サ五7: +もみじ 紅葉 代1: +もみじ 椛 単漢: +もめん 木綿 名1: +もも 桃 代1: +もも 股 代1: +もも 腿 代1: +もも 百 単漢: +ももいし 百石 地名: +ももせ 百瀬 苗字: +ももやま 桃山 苗字: +ももやま 桃山 地名: +もや 燃や サ五7: +もよう 模様 名6: +もよお 催 サ五7: +もより 最寄り 名1: +もら もら ワ五8: +もら 漏ら サ五3: +もら 貰 ワ五8: +もらる モラル 名1: +もり 森 苗字: +もり 森 代1: +もり 守 代1: +もり 杜 代1: +もりあが 盛り上が ラ五7: +もりあげ 盛り上げ 一段3: +もりおか 森岡 苗字: +もりおか 盛岡 地名: +もりかわ 森川 苗字: +もりぐち 守口 苗字: +もりぐち 守口 地名: +もりぐち 森口 苗字: +もりこ 盛り込 マ五7: +もりさき 森崎 苗字: +もりした 森下 苗字: +もりしま 森島 苗字: +もりた 盛田 苗字: +もりた 森田 苗字: +もりなが 森永 苗字: +もりの 森野 苗字: +もりひこ 守彦 名前: +もりひろ 守弘 名前: +もりもと 森本 苗字: +もりや 守屋 苗字: +もりや 守谷 苗字: +もりや 森谷 苗字: +もりやま 守山 苗字: +もりやま 守山 地名: +もりやま 森山 苗字: +もりよし 森吉 苗字: +もりよし 森吉 地名: +もるもっと モルモット 名1: +もれ 洩れ 一段4: +もろ 脆 形2: +もろ 諸 単漢: +もろつか 諸塚 地名: +もろどみ 諸富 地名: +もろぼし 諸星 苗字: +もろもろ 諸々 代6: +もろやま 毛呂山 地名: +もん 紋 代1: +もん 門 代1: +もん 文 助数2: +もん 問 助数: +もん 悶 代1: +もん 聞 単漢: +もんか 門下 名1: +もんがいかん 門外漢 代1: +もんきりがた 紋切り型 代5: +もんく 文句 名1: +もんげん 門限 名1: +もんしょう 紋章 名1: +もんしん 問診 名6: +もんすたー モンスター 名1: +もんぜん 門前 名1: +もんだい 問題 名1: +もんだいてん 問題点 名1: +もんちゃく 悶着 名6: +もんつき 紋付 名1: +もんてい 門弟 名1: +もんとりおーる モントリオール 地名: +もんどう 問答 代4: +もんばん 門番 名1: +もんぴょう 門標 名1: +もんぶ 文部 名1: +もんぶしょう 文部省 名1: +もんべつ 紋別 地名: +もんべつ 門別 地名: +もんめ 匁 助数2: +もんよう 文様 名1: +や や ラ五6:マ五1:形動1: +や 遣 ラ五5: +や 焼 カ五4: +や 病 マ五5: +や 矢 代1: +や 野 代1: +や 夜 助数: +や 屋 接尾1: +や 家 接尾1: +や 哉 単漢: +や 谷 単漢: +や 八 単漢: +や 也 単漢: +や 爺 単漢: +や 耶 単漢: +や 弥 単漢: +や 冶 単漢: +や 埜 単漢: +やーど ヤード 助数2: +やあ やあ 感動: +やいた 矢板 地名: +やいづ 焼津 地名: +やえこ 八重子 名前: +やえす 八重洲 地名: +やえば 八重歯 代1: +やえやま 八重山 地名: +やお 八尾 苗字: +やお 八尾 地名: +やおちょう 八百長 代4: +やおつ 八百津 地名: +やおもて 矢面 名1: +やおや 八百屋 代2: +やかげ 矢掛 地名: +やかた 屋形 代1: +やかた 館 代1: +やから 輩 代1: +やかん 夜間 名1: +やがい 野外 名1: +やがく 夜学 名1: +やがて やがて 代6: +やがみ 八神 苗字: +やきつ 焼き付 カ五1: +やきつけ 焼付け 名1: +やきにく 焼肉 名1: +やきもの 焼物 名1: +やきゅう 野球 代3: +やきん 夜勤 名6: +やきん 冶金 名1: +やぎ 山羊 代1: +やぎ 八木 苗字: +やぎ 八木 地名: +やぎざ 山羊座 代1: +やく 役 名2: +やく 訳 代1:サ変: +やく 訳 サ五5: +やく 約 接頭1:接頭4:サ変: +やく 薬 接尾1: +やく 厄 代1: +やく 屋久 地名: +やく 躍 代1: +やくいん 役員 代2: +やくがい 薬害 名1: +やくがく 薬学 名1: +やくがら 役柄 名1: +やくご 訳語 名1: +やくざい 薬剤 名1: +やくし 薬師 代2: +やくしまる 薬師丸 苗字: +やくしゃ 役者 名1: +やくしょ 役所 名2: +やくしょく 役職 名1: +やくしん 躍進 名6: +やくじょう 約定 代4: +やくすう 約数 名1: +やくそう 薬草 名1: +やくそく 約束 名5: +やくだ 役立 タ五1: +やくどう 躍動 名6: +やくどし 厄年 代1: +やくにん 役人 名2: +やくの 夜久野 地名: +やくば 役場 名1: +やくひん 薬品 名1: +やくぶつ 薬物 名1: +やくぶん 訳文 名1: +やくめ 役目 名2: +やくも 八雲 地名: +やくよう 薬用 名1: +やくわり 役割 名1: +やぐち 矢口 苗字: +やぐち 矢口 地名: +やぐら 櫓 代1: +やけ 焼け 一段3: +やけい 夜景 名1: +やけい 夜警 名1: +やけど 火傷 名6: +やこう 夜行 名1: +やこう 夜光 名1: +やごう 屋号 名1: +やさい 野菜 名2: +やさか 八坂 地名: +やさか 弥栄 地名: +やさき 矢先 名1: +やさく 矢作 名前: +やさし 優し 形9: +やさし やさし 形9: +やさし 易し 形9: +やさと 八郷 地名: +やざき 矢崎 苗字: +やざわ 矢沢 苗字: +やしお 八潮 地名: +やしき 屋敷 名2: +やしな 養 ワ五5: +やしま 矢島 地名: +やしょく 夜食 名1: +やしろ 社 代1: +やしん 野心 代1: +やじ 野次 名1:ラ五1: +やじま 矢島 苗字: +やじゅう 野獣 名1: +やじるし 矢印 名1: +やす 安 形10:接尾1: +やす 易 形9: +やす やす 形2: +やす 休 マ五4: +やす 夜須 地名: +やす 野洲 地名: +やす 康 単漢: +やす 泰 単漢: +やす 靖 単漢: +やすあがり 安上がり 代5: +やすい 安井 苗字: +やすうら 安浦 地名: +やすうり 安売り 名6: +やすお 安雄 名前: +やすお 康夫 名前: +やすお 康雄 名前: +やすお 保夫 名前: +やすお 保雄 名前: +やすお 靖夫 名前: +やすおか 泰阜 地名: +やすかわ 安川 苗字: +やすぎ 安来 地名: +やすこ 安子 名前: +やすこ 康子 名前: +やすこ 靖子 名前: +やすし 泰 名前: +やすし 靖 名前: +やすだ 安田 苗字: +やすづか 安塚 地名: +やすとみ 安富 苗字: +やすとみ 安富 地名: +やすね 安値 名1: +やすのり 安則 名前: +やすひこ 康彦 名前: +やすひこ 泰彦 名前: +やすひろ 安弘 名前: +やすひろ 康弘 名前: +やすひろ 泰弘 名前: +やすま 休ま ラ五7: +やすまさ 康正 名前: +やすみ 休み 名1: +やすもの 安物 名1: +やすゆき 康之 名前: +やすら 安ら ガ五7: +やすらか 安らか 形動4: +やず 八頭 地名: +やせ 痩せ 一段2: +やせい 野性 名1: +やせい 野生 名6: +やそうきょく 夜想曲 名1: +やた 矢田 地名: +やたい 屋台 名1: +やたべ 谷田部 苗字: +やたら やたら 形動1: +やたろう 弥太郎 名前: +やだ 矢田 苗字: +やだ 矢田 地名: +やちほ 八千穂 地名: +やちまた 八街 地名: +やちょう 野鳥 名1: +やちよ 八千代 地名:名前: +やちん 家賃 名1: +やっか 薬価 代1: +やっかい 厄介 名10: +やっき 躍起 名8: +やっきょく 薬局 名1: +やっこ 奴 代1: +やっつ 八つ 代6: +やっつけ やっつけ 一段1: +やっと やっと 副9: +やっぱり やっぱり 副8: +やつ やつ 代1:サ五1: +やつ 奴 代1: +やつ 八 単漢: +やつお 八尾 苗字: +やつお 八尾 地名: +やつか 八束 地名: +やつしろ 八代 苗字: +やつしろ 八代 地名: +やと 雇 ワ五8: +やといぬし 雇主 名1: +やとう 野党 名1: +やとみ 弥富 地名: +やど 宿 名2: +やど 宿 サ五1:ラ五1: +やな 梁 代1: +やない 柳井 苗字: +やない 柳井 地名: +やないづ 柳津 地名: +やながわ 柳川 苗字: +やながわ 柳川 地名: +やながわ 梁川 苗字: +やながわ 梁川 地名: +やなぎ 柳 代1: +やなぎさわ 柳沢 苗字: +やなぎだ 柳田 苗字: +やなぎはら 柳原 苗字: +やなぎもと 柳本 苗字: +やなだに 柳谷 地名: +やなはら 柵原 地名: +やぬし 家主 名1: +やね 屋根 名1: +やの 矢野 苗字: +やの 矢野 地名: +やはぎ 矢作 名前: +やはた 八幡 地名: +やはたにし 八幡西 地名: +やはたひがし 八幡東 地名: +やはば 矢巾 地名: +やはり やはり 副1: +やはん 夜半 名11: +やばけい 耶馬渓 地名: +やばん 野蛮 名8: +やひこ 弥彦 地名: +やぶ 破 ラ五1:カ五1: +やぶ 薮 名1: +やぶ 養父 地名: +やぶき 矢吹 苗字: +やぶき 矢吹 地名: +やぶさか やぶさか 形動3: +やぶづかほん 薮塚本 地名: +やぶれ 敗れ 一段3: +やべ 矢部 苗字: +やべ 矢部 地名: +やぼ 野暮 代5: +やぼう 野望 名1: +やぼった やぼった 形4: +やま 山 名2: +やま 耶麻 地名: +やまい 病 代1: +やまい 山井 苗字: +やまうち 山内 苗字: +やまうち 山内 地名: +やまえ 山江 地名: +やまおか 山岡 苗字: +やまおか 山岡 地名: +やまおく 山奥 代1: +やまかわ 山川 苗字: +やまかわ 山川 地名: +やまが 山鹿 地名: +やまが 山香 地名: +やまがた 山形 苗字: +やまがた 山形 地名: +やまがた 山県 苗字: +やまがた 山県 地名: +やまがた 山方 地名: +やまがみ 山上 苗字: +やまがわ 山側 名1: +やまがわ 山川 地名: +やまきた 山北 苗字: +やまきた 山北 地名: +やまぎし 山岸 苗字: +やまくずれ 山崩れ 代4: +やまくに 山国 地名: +やまぐち 山口 苗字: +やまぐち 山口 地名: +やまぐに 山国 名1: +やまこし 山越 地名: +やまこし 山古志 地名: +やまごや 山小屋 代1: +やまさき 山崎 苗字: +やまさき 山崎 地名: +やまざき 山崎 苗字: +やまざき 山崎 地名: +やまざくら 山桜 代1: +やまざと 山里 代1: +やました 山下 苗字: +やました 山下 地名: +やましな 山科 地名: +やましろ 山城 苗字: +やますそ 山裾 代1: +やまぞえ 山添 苗字: +やまぞえ 山添 地名: +やまだ 山田 苗字: +やまだ 山田 地名: +やまつり 矢祭 地名: +やまづみ 山積み 代4: +やまて 山手 名1: +やまと 大和 地名: +やまと 山門 地名: +やまと 山都 地名: +やまとこおりやま 大和郡山 地名: +やまとたかだ 大和高田 地名: +やまなか 山中 苗字: +やまなか 山中 地名: +やまなかこ 山中湖 地名: +やまなし 山梨 地名: +やまね 山根 苗字: +やまの 山野 苗字: +やまの 山野 地名: +やまのうち 山之内 苗字: +やまのうち 山ノ内 地名: +やまのくち 山之口 地名: +やまのて 山の手 名1: +やまのべ 山辺 地名: +やまのぼり 山登り 代4: +やまは ヤマハ 企業: +やまはだ 山肌 名1: +やまば 山場 名1: +やまべ 山辺 苗字: +やまむら 山村 苗字: +やまもと 山本 苗字: +やまもと 山本 地名: +やまもと 山元 苗字: +やまもと 山元 地名: +やまもり 山森 苗字: +やまもり 山盛り 代4: +やまやま 山々 代1: +やまわけ 山分け 名6: +やみ 闇 代1: +やみつき 病み付き 名1: +やむちゃ 飲茶 名1: +やむな やむな 形1: +やむをえず やむを得ず 副1: +やむをえな やむを得な 形1: +やめ 止め 一段4: +やめ 辞め 一段2: +やめ 八女 地名: +やもと 矢本 苗字: +やもと 矢本 地名: +やや やや 副1: +ややこし ややこし 形3: +やよい 弥生 名前: +やよい 弥生 地名: +やり 槍 代1: +やり 鑓 単漢: +やりがい やりがい 代1: +やりくり やりくり 代4: +やりだま やり玉 代1: +やりて やり手 代1: +やりとり やり取り 代4: +やりなお やり直 サ五7: +やろう 野郎 代1: +やわた 八幡 苗字: +やわた 八幡 地名: +やわたはま 八幡浜 地名: +やわはら 谷和原 地名: +やわら 和ら ガ五3: +やわらか 柔らか 形11:形動1: +やわらか 軟らか 形11:形動1: +やんぐ ヤング 名1: +ゆ 行 カ五8: +ゆ 逝 カ五7: +ゆ 往 カ五7: +ゆ 結 ワ五7: +ゆ 湯 代1: +ゆ 油 接尾1: +ゆ 愉 単漢: +ゆ 愈 単漢: +ゆ 癒 単漢: +ゆ 諭 単漢: +ゆ 輸 単漢: +ゆ 柚 単漢: +ゆ 由 単漢: +ゆ 喩 単漢: +ゆーくりっど ユークリッド 名1: +ゆーざ ユーザ 名1: +ゆーざー ユーザー 名1: +ゆーざーず ユーザーズ 名1: +ゆーてぃりてぃ ユーティリティ 名1: +ゆーもらす ユーモラス 代5: +ゆあさ 湯浅 苗字: +ゆあさ 湯浅 地名: +ゆい 唯 名前: +ゆい 由比 地名: +ゆい 遺 単漢: +ゆいいつ 唯一 名1: +ゆいがどくそん 唯我独尊 代1: +ゆいごん 遺言 名1: +ゆいしょ 由緒 名1: +ゆいのう 結納 名7: +ゆいぶつ 唯物 名1: +ゆう 優 代1:名前: +ゆう 夕 代1: +ゆう 有 サ変:サ五1: +ゆう 由宇 地名: +ゆう 友 代1: +ゆう 雄 代1: +ゆう 幽 代1: +ゆう 勇 代1: +ゆう 宥 単漢: +ゆう 佑 単漢: +ゆう 酉 単漢: +ゆう 右 単漢: +ゆう 悠 単漢: +ゆう 憂 単漢: +ゆう 揖 単漢: +ゆう 柚 単漢: +ゆう 湧 単漢: +ゆう 涌 単漢: +ゆう 猶 単漢: +ゆう 猷 単漢: +ゆう 由 単漢: +ゆう 祐 単漢: +ゆう 裕 単漢: +ゆう 誘 単漢: +ゆう 遊 単漢: +ゆう 邑 単漢: +ゆう 郵 単漢: +ゆう 融 単漢: +ゆうい 優位 名1: +ゆうい 有意 名8: +ゆういぎ 有意義 名8: +ゆういち 勇一 名前: +ゆういち 祐一 名前: +ゆういち 裕一 名前: +ゆういち 雄一 名前: +ゆういちろう 祐一郎 名前: +ゆううつ 憂鬱 名8: +ゆうえき 有益 名8: +ゆうえつ 優越 名6: +ゆうえんち 遊園地 名1: +ゆうか 有価 名1: +ゆうかい 誘拐 名6: +ゆうかい 融解 名6: +ゆうかい 有界 名1: +ゆうかん 勇敢 形動4: +ゆうかん 夕刊 名1: +ゆうが 優雅 名8: +ゆうがい 有害 名8: +ゆうがた 夕方 代6: +ゆうき 勇気 名1: +ゆうき 有機 名4: +ゆうき 結城 苗字: +ゆうき 結城 地名: +ゆうきち 勇吉 名前: +ゆうきゅう 有給 名1: +ゆうきゅう 有休 名1: +ゆうきゅう 遊休 名1: +ゆうきゅう 悠久 名1: +ゆうぐう 優遇 名6: +ゆうぐれ 夕暮れ 代1: +ゆうけんしゃ 有権者 名1: +ゆうげん 有限 名8: +ゆうげんがいしゃ 有限会社 名1: +ゆうこ 優子 名前: +ゆうこ 由子 名前: +ゆうこ 裕子 名前: +ゆうこう 友好 名4: +ゆうこう 有効 代5: +ゆうこく 夕刻 名1: +ゆうごう 融合 名6: +ゆうざい 有罪 名1: +ゆうし 融資 名7: +ゆうし 有志 名1: +ゆうしきしゃ 有識者 名1: +ゆうしゅう 優秀 名8: +ゆうしょう 優勝 名6: +ゆうしょう 有償 名1: +ゆうしょく 夕食 名1: +ゆうじ 雄二 名前: +ゆうじ 裕二 名前: +ゆうじ 勇二 名前: +ゆうじ 祐二 名前: +ゆうじ 裕司 名前: +ゆうじ 裕治 名前: +ゆうじ 勇次 名前: +ゆうじゅうふだん 優柔不断 代5: +ゆうじょう 友情 名1: +ゆうじろう 裕次郎 名前: +ゆうじろう 雄二郎 名前: +ゆうじん 友人 名3: +ゆうすう 有数 名1: +ゆうずう 融通 代4: +ゆうずうむげ 融通無碍 代1: +ゆうせい 郵政 名1: +ゆうせい 優勢 名8: +ゆうせいしょう 郵政省 名1: +ゆうせん 優先 名6: +ゆうせん 有線 名1: +ゆうぜい 遊説 名6: +ゆうぜい 有税 名1: +ゆうぜん 友禅 代1: +ゆうぜん 悠然 形動2: +ゆうそう 郵送 名7: +ゆうぞう 勇三 名前: +ゆうぞう 雄三 名前: +ゆうたい 優待 名7: +ゆうだい 雄大 名8: +ゆうだち 夕立ち 名1: +ゆうだん 勇断 名6: +ゆうち 誘致 名6: +ゆうちょう 悠長 形動4: +ゆうづう 融通 名7: +ゆうとう 優等 名8: +ゆうとう 雄踏 地名: +ゆうどう 誘導 名6: +ゆうどく 有毒 名8: +ゆうのう 有能 名8: +ゆうはん 夕飯 名1: +ゆうばり 夕張 地名: +ゆうひ 夕日 名1: +ゆうひ 夕陽 名1: +ゆうび 優美 名8: +ゆうびん 郵便 名1: +ゆうびんきょく 郵便局 名1: +ゆうびんぶつ 郵便物 名1: +ゆうふく 裕福 形動4: +ゆうふつ 勇払 地名: +ゆうべ 夕べ 代6: +ゆうべ 昨夜 代6: +ゆうべつ 湧別 地名: +ゆうべん 雄弁 名8: +ゆうほどう 遊歩道 名1: +ゆうぼう 有望 形動4: +ゆうぼく 遊牧 名6: +ゆうめい 有名 名8: +ゆうめし 夕飯 名1: +ゆうやけ 夕焼け 名1: +ゆうやみ 夕闇 名1: +ゆうゆうじてき 悠々自適 代4: +ゆうよ 猶予 名7: +ゆうよう 有用 形動1: +ゆうらくちょう 有楽町 地名: +ゆうらん 遊覧 名6: +ゆうり 有利 名8: +ゆうり 遊離 名6: +ゆうり 有理 名1: +ゆうりすう 有理数 名1: +ゆうりょ 憂慮 名6: +ゆうりょう 優良 名8: +ゆうりょう 有料 名1: +ゆうりょく 有力 名8: +ゆうれい 幽霊 名1: +ゆうれつ 優劣 名1: +ゆうわ 融和 代4: +ゆうわ 雄和 地名: +ゆうわく 誘惑 名6: +ゆえ 故 代1: +ゆか 床 名1: +ゆか 由佳 名前: +ゆか 由香 苗字: +ゆかい 愉快 名8: +ゆかうえ 床上 名1: +ゆかした 床下 名1: +ゆかた 浴衣 代1: +ゆかり ゆかり 代1: +ゆかわ 湯川 苗字: +ゆかわ 湯川 地名: +ゆが ゆが マ五7: +ゆが 歪 マ五7: +ゆがわ 湯川 苗字: +ゆがわ 湯川 地名: +ゆがわら 湯河原 地名: +ゆき 雪 名1: +ゆき 由紀 名前: +ゆき 由貴 名前: +ゆき 由岐 地名: +ゆき 湯来 地名: +ゆき 油木 地名: +ゆき 幸 単漢: +ゆき 之 単漢: +ゆきえ 雪絵 名前: +ゆきえ 由紀江 名前: +ゆきお 幸男 名前: +ゆきお 幸夫 名前: +ゆきお 幸雄 名前: +ゆきお 行夫 名前: +ゆきお 行雄 名前: +ゆきか 行き交 ワ五1: +ゆきき 行き来 代4: +ゆきぐに 雪国 名1: +ゆきこ 幸子 名前: +ゆきこ 雪子 名前: +ゆきこ 由紀子 名前: +ゆきち 諭吉 名前: +ゆきとど 行き届 カ五7: +ゆきどけ 雪解け 名1: +ゆくえ 行方 代1: +ゆくはし 行橋 地名: +ゆけつ 輸血 名6: +ゆげ 湯気 代1: +ゆげ 弓削 地名: +ゆさぶ 揺さぶ ラ五7: +ゆざわ 湯沢 苗字: +ゆざわ 湯沢 地名: +ゆし 油脂 名1: +ゆしゅつ 輸出 名6: +ゆしゅつにゅう 輸出入 名6: +ゆす ゆす ガ五7:ラ五8: +ゆす 濯 ガ五7: +ゆすはら 梼原 地名: +ゆず 譲 ラ五8: +ゆず 柚 単漢: +ゆずりあ 譲り合 ワ五7: +ゆずる 譲 名前: +ゆせい 油性 名1: +ゆそう 輸送 名6: +ゆたか 豊か 形動4: +ゆたか 豊 名前: +ゆたか 裕 名前: +ゆだ 湯田 苗字: +ゆだ 湯田 地名: +ゆだね 委ね 一段1: +ゆだん 油断 代4: +ゆちゃく 癒着 名6: +ゆっくり ゆっくり 副9: +ゆったり ゆったり 副9: +ゆづかみ 湯津上 地名: +ゆで ゆで 一段4: +ゆでん 油田 名1: +ゆとり ゆとり 代1: +ゆに 由仁 地名: +ゆにーく ユニーク 名8: +ゆにっくす ユニックス 名1: +ゆにっと ユニット 名1: +ゆにばーさる ユニバーサル 名8: +ゆにばーす ユニバース 名1: +ゆにふぉーむ ユニフォーム 名1: +ゆにゅう 輸入 名6: +ゆのたに 湯之谷 地名: +ゆのつ 温泉津 地名: +ゆのまえ 湯前 地名: +ゆのみ 湯飲み 名2: +ゆはら 湯原 苗字: +ゆはら 湯原 地名: +ゆばら 湯原 地名: +ゆび 指 代1: +ゆびさ 指さ サ五7: +ゆびさき 指先 名1: +ゆびわ 指輪 名1: +ゆふいん 湯布院 地名: +ゆみ 弓 代1: +ゆみ 由美 名前: +ゆみ 友美 名前: +ゆみこ 由美子 名前: +ゆみこ 弓子 名前: +ゆめ 夢 代1: +ゆめさき 夢前 地名: +ゆめみ 夢見 一段1: +ゆもと 湯本 苗字: +ゆや 油谷 地名: +ゆら 由良 地名: +ゆら 揺ら ガ五3:サ五5: +ゆらい 由来 代4: +ゆり 百合 名前: +ゆり 由利 苗字: +ゆり 由利 地名: +ゆりかご ゆりかご 代1: +ゆりこ 百合子 名前: +ゆりこ 由里子 名前: +ゆる 許 サ五8: +ゆる 緩 形2:マ五3: +ゆる 揺る ガ五5: +ゆるめ 緩め 一段3: +ゆるやか 緩やか 形動4: +ゆれ 揺れ 一段4: +ゆわえ 結わえ 一段1: +ゆわかし 湯沸し 名1: +よ よ 形2:サ五4:ラ五1: +よ 良 形2: +よ 好 形2: +よ 善 形2: +よ 止 サ五5: +よ 読 マ五8: +よ 詠 マ五8: +よ 寄 ラ五7: +よ 撚 ラ五7: +よ 依 ラ五1: +よ 因 ラ五1: +よ 選 ラ五1: +よ 呼 バ五8: +よ 酔 ワ五7: +よ 世 代1: +よ 夜 代1: +よ 代 代1: +よ 余 接尾1: +よ 予 代1: +よ 与 単漢: +よ 誉 単漢: +よ 輿 単漢: +よ 預 単漢: +よーぐると ヨーグルト 名1: +よーろっぱ ヨーロッパ 地名: +よあけ 夜明け 代1: +よい 宵 代1: +よいた 与板 地名: +よいち 余市 地名: +よいん 余韻 名1: +よう 様 形動1: +よう 用 名3:接尾3: +よう 陽 代1: +よう 幼 代1: +よう 要 代4:サ五1: +よう 洋 代1: +よう よう 代1: +よう 擁 サ変: +よう 葉 助数2: +よう 容 代1: +よう 曜 代1: +よう 傭 単漢: +よう 腰 単漢: +よう 妖 単漢: +よう 庸 単漢: +よう 揚 単漢: +よう 揺 単漢: +よう 楊 単漢: +よう 溶 単漢: +よう 熔 単漢: +よう 窯 単漢: +よう 羊 単漢: +よう 耀 単漢: +よう 蓉 単漢: +よう 謡 単漢: +よう 踊 単漢: +よう 遥 単漢: +よう 養 単漢: +よう 瘍 単漢: +よう 癰 単漢: +ようい 用意 名7: +ようい 容易 形動4: +よういく 養育 名6: +よういち 洋一 名前: +よういち 陽一 名前: +よういちろう 洋一郎 名前: +よういちろう 陽一郎 名前: +よういん 要因 名1: +よういん 要員 名1: +ようえき 溶液 名1: +ようか 八日 代6: +ようか 八鹿 地名: +ようかい 溶解 名6: +ようかいち 八日市 地名: +ようかいちば 八日市場 地名: +ようかん 洋館 名1: +ようが 洋画 名1: +ようが 用賀 地名: +ようき 容器 名1: +ようき 陽気 名8: +ようきゅう 要求 名6: +ようきょく 陽極 名1: +ようぎ 容疑 名1: +ようぐ 用具 名1: +ようけい 養鶏 代4: +ようけん 用件 名3: +ようけん 要件 名3: +ようげん 用言 代1: +ようこ 洋子 名前: +ようこ 陽子 名前: +ようこ 容子 名前: +ようこ 葉子 名前: +ようこう 要項 名1: +ようこう 陽光 名1: +ようこう 洋行 代4: +ようこうろ 溶鉱炉 名1: +ようご 用語 名1: +ようご 擁護 代4: +ようご 養護 代4: +ようさい 洋裁 名1: +ようさい 要塞 名1: +ようし 用紙 名1: +ようし 要旨 名1: +ようし 容姿 名1: +ようし 養子 名1: +ようし 陽子 名1: +ようしき 様式 名1: +ようしき 洋式 名1: +ようしつ 洋室 名1: +ようしゃ 容赦 名7: +ようしゅ 洋酒 名1: +ようしゅん 陽春 名1: +ようしょ 洋書 名1: +ようしょ 要所 名1: +ようしょう 幼少 名10: +ようしょう 要衝 名1: +ようしょく 養殖 名6: +ようしょく 洋食 名1: +ようしょく 要職 名1: +ようじ 用事 代3: +ようじ 幼児 名1: +ようじ 洋二 名前: +ようじょ 幼女 名1: +ようじょ 養女 名1: +ようじょう 養生 名7: +ようじょう 洋上 名1: +ようじん 用心 名7: +ようじん 要人 名1: +ようす 様子 名3: +ようすい 用水 名1: +ようせい 要請 名6: +ようせい 養成 名6: +ようせい 妖精 名1: +ようせい 陽性 名1: +ようせき 容積 名1: +ようせつ 溶接 名6: +ようせつ 夭折 名6: +ようそ 要素 名1: +ようそう 様相 名1: +ようだい 容体 名3: +ようち 用地 名1: +ようち 幼稚 名8: +ようちえん 幼稚園 名1: +ようちゅう 幼虫 名1: +ようてん 要点 名1: +ようと 用途 名1: +ようとん 養豚 名1: +ようど 用度 名1: +ようにん 容認 名6: +ようねん 幼年 名1: +ようひん 洋品 名1: +ようび 曜日 名1: +ようふ 養父 名1: +ようふう 洋風 名1: +ようふく 洋服 名2: +ようふぼ 養父母 名1: +ようぶん 養分 名1: +ようほう 用法 名1: +ようぼう 要望 名7: +ようま 洋間 名1: +ようむ 用務 名1: +ようめい 用命 名3: +ようもう 羊毛 名1: +ようやく 要約 名6: +ようやく ようやく 副1: +ようらん 要覧 名1: +ようりょう 容量 名1: +ようりょう 要領 名1: +ようれい 用例 名1: +ようれき 陽暦 名1: +ようろう 養老 名1: +ようろう 養老 地名: +よか 余暇 名1: +よかわ 吉川 地名: +よかん 予感 代4: +よき 予期 代4: +よきょう 余興 名1: +よきん 預金 名6: +よぎな 余儀な 形2: +よく よく 副1: +よく 欲 代1: +よく 慾 代1: +よく 翼 代1: +よく 浴 接尾1: +よく 翌 連体: +よく 抑 単漢: +よく 沃 単漢: +よくあつ 抑圧 名6: +よくげつ 翌月 名1: +よくし 抑止 代4: +よくしつ 浴室 名1: +よくしゅう 翌週 名1: +よくじつ 翌日 代6: +よくじょう 浴場 名1: +よくせい 抑制 名6: +よくそう 浴槽 名1: +よくちょう 翌朝 代6: +よくとし 翌年 代6: +よくねん 翌年 代6: +よくば 欲張 ラ五7: +よくぼう 欲望 名1: +よくよう 抑揚 名1: +よくよう 浴用 名1: +よくよく よくよく 副1: +よくよく 翌々 接頭1: +よくりゅう 抑留 名6: +よけ よけ 一段2: +よけい 余計 副1:形動1: +よげん 予言 名6: +よげん 預言 名6: +よこ 横 代1: +よこい 横井 苗字: +よこう 予行 名6: +よこう 予稿 名1: +よこお 横尾 苗字: +よこかわ 横河 苗字: +よこかわ 横川 苗字: +よこかわ 横川 地名: +よこがお 横顔 代1: +よこぎ 横切 ラ五7: +よこく 予告 名6: +よこごし 横越 地名: +よこしば 横芝 地名: +よこしま よこしま 代5: +よこしま 横島 苗字: +よこしま 横島 地名: +よこじま 横縞 名1: +よこすか 横須賀 地名: +よこせ 横瀬 苗字: +よこた 横田 苗字: +よこた 横田 地名: +よこたわ 横たわ ラ五3: +よこづな 横綱 代1: +よこて 横手 地名: +よこどり 横取り 代4: +よこなが 横長 名8: +よこはま 横浜 地名: +よこばい 横ばい 代4: +よこみぞ 横溝 苗字: +よこみち 横道 名1: +よこめ 横目 名1: +よこやま 横山 苗字: +よこやま 横山 地名: +よご 汚 サ五8: +よご 余呉 地名: +よごれ 汚れ 一段3: +よさ 与謝 地名: +よさそう 良さそう 形動4: +よさそう よさそう 形動4: +よさん 予算 名7: +よし 由 代1: +よし 葦 単漢: +よし 佳 単漢: +よし 義 単漢: +よし 吉 単漢: +よし 好 単漢: +よし 善 単漢: +よし 美 単漢: +よし 芳 単漢: +よし 良 単漢: +よしあき 義明 名前: +よしあき 吉明 名前: +よしあき 芳明 名前: +よしあき 良明 名前: +よしあし 善し悪し 代1: +よしい 吉井 苗字: +よしい 芳井 苗字: +よしい 芳井 地名: +よしうみ 吉海 地名: +よしお 嘉男 名前: +よしお 義雄 名前: +よしお 吉男 名前: +よしお 吉雄 名前: +よしお 好夫 名前: +よしお 善雄 名前: +よしお 芳夫 名前: +よしお 芳雄 名前: +よしお 良夫 名前: +よしお 良雄 名前: +よしおか 吉岡 苗字: +よしかず 義一 名前: +よしかず 義和 名前: +よしかず 良和 名前: +よしかわ 吉川 苗字: +よしき 吉城 地名: +よしき 吉敷 地名: +よしこ 佳子 名前: +よしこ 嘉子 名前: +よしこ 好子 名前: +よしこ 美子 名前: +よしこ 芳子 名前: +よしこ 良子 名前: +よしざき 吉崎 苗字: +よしざわ 吉沢 苗字: +よしずみ 吉住 苗字: +よしたか 義孝 名前: +よしだ 吉田 苗字: +よしだ 吉田 地名: +よしと 義人 名前: +よしとみ 吉富 苗字: +よしとみ 吉富 地名: +よしなが 吉永 苗字: +よしの 吉野 苗字: +よしの 吉野 地名: +よしのだに 吉野谷 地名: +よしのぶ 義信 名前: +よしのり 義則 名前: +よしひこ 義彦 名前: +よしひこ 吉彦 名前: +よしひこ 良彦 名前: +よしひさ 義久 名前: +よしひろ 義弘 名前: +よしまつ 吉松 苗字: +よしまつ 吉松 地名: +よしみ 義美 名前: +よしみ 吉見 苗字: +よしみ 吉見 地名: +よしみ 好美 名前: +よしみ 芳美 名前: +よしむら 吉村 苗字: +よしもと 吉本 苗字: +よしゅう 予習 名6: +よしゆき 義行 名前: +よしゆき 義之 名前: +よしろう 芳郎 名前: +よしわ 吉和 地名: +よしわら 吉原 苗字: +よしわら 吉原 地名: +よしん 余震 名1: +よじょう 余剰 名1: +よじょう 余情 名1: +よせ 寄席 名1: +よせ 寄せ 一段4: +よせい 余生 代1: +よせがき 寄書き 代1: +よせん 予選 名6: +よそ よそ 代1: +よそう 予想 名6: +よそうがい 予想外 名8: +よそお 装 ワ五7: +よそく 予測 名6: +よたく 預託 名6: +よだ 依田 苗字: +よだん 予断 代4: +よだん 余談 名1: +よち 予知 名6: +よち 余地 名1: +よちょきん 預貯金 名1: +よっか 四日 代6: +よっかいち 四日市 地名: +よっきゅう 欲求 名6: +よっつ 四つ 代6: +よっぱら 酔っ払 ワ五7: +よっぽど よっぽど 副7: +よつかいどう 四街道 地名: +よつかど 四つ角 名1: +よつや 四谷 苗字: +よつや 四谷 地名: +よつや 四ツ谷 地名: +よてい 予定 名7: +よとう 与党 名1: +よど 淀 マ五7:単漢: +よどえ 淀江 地名: +よどがわ 淀川 苗字: +よどがわ 淀川 地名: +よどやばし 淀屋橋 地名: +よなか 夜中 代1: +よなぐすく 与那城 地名: +よなぐに 与那国 地名: +よなご 米子 地名: +よなばる 与那原 地名: +よね 米 単漢: +よねきち 米吉 名前: +よねざき 米崎 苗字: +よねざわ 米沢 苗字: +よねざわ 米沢 地名: +よねだ 米田 苗字: +よねつ 余熱 名1: +よねやま 米山 苗字: +よねん 余念 名1: +よの 与野 地名: +よのうづ 米水津 地名: +よのなか 世の中 名1: +よは 余波 名1: +よはく 余白 名1: +よび 予備 名1: +よびかけ 呼びかけ 一段3: +よびこ 呼び込 マ五7: +よびこう 予備校 名1: +よびごえ 呼び声 代1: +よびだ 呼び出 サ五7: +よびだし 呼出し 名1: +よびもど 呼び戻 サ五7: +よびよせ 呼び寄せ 一段1: +よふけ 夜更け 名1: +よぶこ 呼子 地名: +よぶん 余分 名8: +よほう 予報 名6: +よほど よほど 副7: +よぼう 予防 名6: +よみあげ 読み上げ 一段3: +よみうり 読売 企業: +よみかき 読み書き 代4: +よみかた 読み方 名1: +よみがえ 蘇 ラ五7: +よみがえ 甦 ラ五7: +よみこ 読み込 マ五7: +よめ 嫁 代2: +よもぎ 蓬 代1: +よもぎた 蓬田 地名: +よやく 予約 名7: +よゆう 余裕 名1: +よよぎ 代々木 地名: +より より 代6: +よりい 寄居 地名: +よりかか 寄り掛か ラ五7: +よりこ 依子 名前: +よりこ 頼子 名前: +よりしま 寄島 地名: +よりそ 寄り添 ワ五5: +よりどころ 拠り所 名1: +よりみち 寄り道 代4: +よりょく 余力 名1: +よる 夜 代1 +よろい 鎧 代1: +よろく 余録 名1: +よろこ 喜 バ五8: +よろこ 慶 バ五8: +よろこ 歓 バ五8: +よろこ 悦 バ五8: +よろこばし 喜ばし 形9: +よろし よろし 形2: +よろし 宜し 形2: +よろず 万 代6: +よろん 世論 名1: +よろん 与論 地名: +よわ 弱 形9:ラ五7: +よわき 弱気 代5: +よわね 弱音 名1: +よわま 弱ま ラ五5: +よわみ 弱味 代1: +よわめ 弱め 一段3: +よわよわし 弱々し 形3: +ら ら 接尾1: +ら 等 接尾1: +ら 羅 単漢: +ら 螺 単漢: +ら 裸 単漢: +らーめん ラーメン 代1: +らい 来 接尾1: +らい 莱 単漢: +らい 頼 単漢: +らい 雷 単漢: +らい 磊 単漢: +らいう 雷雨 名1: +らいおん ライオン 名1: +らいか 来夏 名1: +らいかい 来会 代4: +らいかん 来館 名7: +らいき 来期 代6: +らいきゃく 来客 名1: +らいげつ 来月 名1: +らいこう 来航 名6: +らいこう 来校 名6: +らいさん 礼賛 名6: +らいしゃ 来社 名7: +らいしゅう 来週 代6: +らいしゅう 来秋 代1: +らいしゅう 来襲 代4: +らいしゅん 来春 名1: +らいしん 来診 名6: +らいしん 来信 名1: +らいじょう 来場 名7: +らいす ライス 名1: +らいせ 来世 名1: +らいせんす ライセンス 名1: +らいたー ライター 名1: +らいちょう 来聴 名7: +らいちょう 雷鳥 名1: +らいてぃんぐ ライティング 代1: +らいてん 来店 名7: +らいと ライト 名8: +らいにち 来日 名6: +らいねん 来年 代6: +らいねんど 来年度 名1: +らいはい 礼拝 名6: +らいばる ライバル 名1: +らいひん 来賓 名3: +らいふ ライフ 名1: +らいぶ ライブ 名1: +らいぶらり ライブラリ 名1: +らいほう 来訪 名7: +らいめい 雷鳴 名1: +らいん ライン 名1: +らうす 羅臼 地名: +らうんど ラウンド 名1: +らがん 裸眼 名1: +らく 楽 代5: +らく 酪 代1: +らく 洛 代1: +らく 絡 単漢: +らく 落 単漢: +らくえん 楽園 名1: +らくがき 落書 代4: +らくご 落語 名1: +らくご 落後 名6: +らくさ 落差 名1: +らくさつ 落札 名6: +らくしょう 楽勝 名6: +らくじつ 落日 名1: +らくせい 落成 名7: +らくせき 落石 名6: +らくせん 落選 名6: +らくたん 落胆 名7: +らくだい 落第 名6: +らくちゃく 落着 名6: +らくちょう 落丁 名1: +らくてん 楽天 名4: +らくのう 酪農 名1: +らくば 落馬 代4: +らくよう 洛陽 名1: +らくよう 落葉 代4: +らくらい 落雷 名1: +らぐびー ラグビー 名1: +らけっと ラケット 名1: +らじお ラジオ 名1: +らすと ラスト 名1: +らせん 螺旋 名1: +らっか 落下 代4: +らっかん 楽観 名6: +らっきー ラッキー 名8: +らっこ ラッコ 代1: +らっしゅ ラッシュ 名1: +らっち ラッチ 代1: +らっぱ ラッパ 名1: +らつ 辣 単漢: +らてん ラテン 名1: +らふぉーれ ラフォーレ 名1: +らぶ ラブ 名1: +らべる ラベル 名1: +らぼ ラボ 名1: +らりー ラリー 名1: +られつ 羅列 名6: +らん 欄 接尾1: +らん 乱 代1: +らん 蘭 代1: +らん 卵 代1: +らん 嵐 代1: +らん 濫 単漢: +らん 藍 単漢: +らん 覧 単漢: +らん 爛 単漢: +らん 鸞 単漢: +らんおう 卵黄 名1: +らんかく 乱獲 名6: +らんかん 欄干 名1: +らんがい 欄外 名1: +らんきりゅう 乱気流 名1: +らんく ランク 名6: +らんげーじ ランゲージ 代1: +らんこし 蘭越 地名: +らんざつ 乱雑 名8: +らんざん 嵐山 地名: +らんし 乱視 名1: +らんし 卵子 名1: +らんしゃ 乱射 名6: +らんじゅく 爛熟 名6: +らんすう 乱数 名1: +らんせん 乱戦 名1: +らんそう 卵巣 名1: +らんだむ ランダム 代5: +らんちょう 乱丁 名1: +らんちょん ランチョン 代1: +らんとう 乱闘 名6: +らんど ランド 名1: +らんどく 乱読 名6: +らんなー ランナー 名1: +らんにゅう 乱入 名6: +らんばつ 乱伐 名6: +らんぱく 卵白 名1: +らんぱつ 乱発 名6: +らんぴ 乱費 名6: +らんぶ 乱舞 名6: +らんぷ ランプ 名1: +らんぼう 乱暴 名8:サ変: +らんまん 爛漫 名1:形動2: +らんみゃく 乱脈 名8: +らんよう 乱用 名6: +らんよう 濫用 名6: +らんりつ 乱立 名6: +り 利 代4: +り 理 代1: +り 里 助数2: +り 裏 代1: +り 吏 代1: +り 痢 代1: +り 浬 単漢: +り 哩 単漢: +り 履 単漢: +り 李 単漢: +り 梨 単漢: +り 璃 単漢: +り 裡 単漢: +り 離 単漢: +りーぐ リーグ 名1: +りーじょん リージョン 代1: +りーす リース 名6: +りーずなぶる リーズナブル 名8: +りーだ リーダ 名1: +りーど リード 代4: +りありずむ リアリズム 名1: +りある リアル 代5: +りえ 理恵 名前: +りえき 利益 名3: +りか 理科 名1: +りかーしぶ リカーシブ 名1: +りかい 理解 名7: +りかばー リカバー 名6: +りがい 利害 名1: +りがく 理学 名1: +りき 力 代1:マ五1: +りきえん 力演 名6: +りきがく 力学 名1: +りきさく 力作 名1: +りきし 力士 名1: +りきせつ 力説 名6: +りきとう 力闘 名6: +りきゅう 離宮 名1: +りきりょう 力量 名1: +りく 陸 代1: +りくうん 陸運 名1: +りくえすと リクエスト 代4: +りくじょう 陸上 名1: +りくぜん 陸前 地名: +りくぜんたかた 陸前高田 地名: +りくち 陸地 名1: +りくつ 理屈 名1: +りくとう 陸稲 名1: +りくべつ 陸別 地名: +りくるーと リクルート 企業: +りくろ 陸路 名1: +りけん 利権 名1: +りこ 利己 名1: +りこー リコー 企業: +りこう 履行 代4: +りこう 理工 名1: +りこん 離婚 名6: +りごう 離合 代4: +りさーち リサーチ 名6: +りさいず リサイズ 名6: +りさん 離散 名6: +りざーぶ リザーブ 名6: +りざると リザルト 名1: +りし 利子 名1: +りしゅう 履修 名6: +りしょく 離職 名6: +りしり 利尻 地名: +りじ 理事 名1: +りじぇくと リジェクト 名6: +りじゅん 利潤 名1: +りす リス 代1: +りすく リスク 名1: +りすたーと リスタート 名6: +りすと リスト 名1: +りすとあ リストア 名6: +りずむ リズム 名1: +りせい 理性 名4: +りせっと リセット 名6: +りそーす リソース 代1: +りそう 理想 名4: +りそく 利息 名1: +りそん 離村 代4: +りぞーと リゾート 名1: +りぞっと リゾット 名1: +りた 利他 名1: +りたーん リターン 名6: +りたいあ リタイア 名6: +りだくしょん リダクション 代1: +りだつ 離脱 名6: +りち 理知 名4: +りちうむ リチウム 名1: +りちぎ 律義 名8: +りちゃくりく 離着陸 名6: +りっか 立夏 名1: +りっきゃく 立脚 名6: +りっきょう 陸橋 名1: +りっけん 立憲 名1: +りっこうほ 立候補 名6: +りっしゅう 立秋 名1: +りっしゅん 立春 名1: +りっしょう 立証 名6: +りっしょく 立食 名1: +りっしん 立身 名6: +りったい 立体 名4: +りっち リッチ 代5: +りっとう 立冬 名1: +りっとう 栗東 地名: +りっとる リットル 助数2: +りっぱ 立派 形動8: +りっぷく 立腹 名7: +りっぽう 立法 名6: +りっぽう 立方 代1:助数2: +りっぽうたい 立方体 名1: +りつ 率 接尾3: +りつ 律 接尾1: +りつ 立 代1: +りつ 葎 単漢: +りつ 慄 単漢: +りつあん 立案 名6: +りつこ 理津子 名前: +りつぞう 立像 名1: +りつどう 律動 名6: +りつめいかん 立命館 名1: +りつろん 立論 名6: +りてん 利点 名1: +りとう 離島 名6: +りとく 利得 名1: +りとる リトル 名1: +りにあ リニア 代5: +りにゅう 離乳 名6: +りねん 理念 名1: +りのう 離農 名6: +りはっちゃく 離発着 名6: +りはつ 理髪 名6: +りはつ 利発 名8: +りはびり リハビリ 名1: +りばーす リバース 代4: +りびじょん リビジョン 名1: +りぴーたー リピーター 名1: +りふ 利府 地名: +りふぁれんす リファレンス 代1: +りふじん 理不尽 名8: +りふと リフト 名6: +りぶーと リブート 名6: +りべつ 離別 名6: +りべん 利便 名1: +りぼん リボン 名1: +りぽーたー リポーター 名1: +りぽーと リポート 名6: +りまわり 利回り 名1: +りみったー リミッター 名1: +りみっと リミット 名1: +りめん 裏面 名1: +りもーと リモート 名1: +りもこん リモコン 名1: +りゃく 略 代4:サ五5: +りゃく 掠 単漢: +りゃくぎ 略儀 名1: +りゃくご 略語 名1: +りゃくしき 略式 名8: +りゃくしょう 略称 名6: +りゃくじ 略字 名1: +りゃくず 略図 名1: +りゃくそう 略装 名1: +りゃくだつ 略奪 名6: +りゃくひつ 略筆 名6: +りゃくれき 略歴 名1: +りゃっき 略記 名6: +りゅう 流 接尾1:助数2: +りゅう 竜 代1: +りゅう 龍 代1: +りゅう 粒 代1: +りゅう 柳 代1: +りゅう 留 代1: +りゅう 劉 単漢: +りゅう 溜 単漢: +りゅう 琉 単漢: +りゅう 硫 単漢: +りゅう 隆 単漢: +りゅう 瑠 単漢: +りゅうい 留意 名7: +りゅういき 流域 名1: +りゅういち 隆一 名前: +りゅういち 竜一 名前: +りゅういち 龍一 名前: +りゅうおう 竜王 地名: +りゅうか 硫化 名6: +りゅうかい 流会 名6: +りゅうかん 流感 名1: +りゅうがく 留学 名6: +りゅうがくせい 留学生 名1: +りゅうがさき 竜ヶ崎 地名: +りゅうがだけ 竜ヶ岳 地名: +りゅうき 隆起 名6: +りゅうぎ 流儀 名1: +りゅうけつ 流血 名6: +りゅうこう 流行 名6: +りゅうさん 硫酸 名1: +りゅうざん 流産 名6: +りゅうし 粒子 名1: +りゅうしつ 流失 名6: +りゅうしゅつ 流出 名6: +りゅうじん 龍神 地名: +りゅうすい 流水 名1: +りゅうすけ 隆介 名前: +りゅうせい 隆盛 名10: +りゅうそく 流速 名1: +りゅうぞう 隆三 名前: +りゅうたい 流体 名1: +りゅうち 留置 名6: +りゅうちょう 流暢 形動4: +りゅうつう 流通 名6: +りゅうどう 流動 名6: +りゅうにゅう 流入 名6: +りゅうにん 留任 名6: +りゅうねん 留年 名6: +りゅうは 流派 名1: +りゅうひょう 流氷 名1: +りゅうほ 留保 名6: +りゅうほく 竜北 地名: +りゅうよう 流用 名6: +りゅうよう 竜洋 地名: +りゅうりょう 流量 名1: +りゆう 理由 名1: +りょ 侶 単漢: +りょ 慮 単漢: +りょ 旅 単漢: +りょ 虜 単漢: +りょ 呂 単漢: +りょう 漁 代3: +りょう 猟 代3: +りょう 寮 代1: +りょう 量 代1:接尾1: +りょう 涼 代1: +りょう 良 代1: +りょう 両 接頭1:助数2: +りょう 料 接尾1: +りょう 陵 代1: +りょう 領 接尾1:サ変: +りょう 了 サ変: +りょう 諒 サ変: +りょう 梁 代1: +りょう 霊 代1: +りょう 糧 代1: +りょう 令 単漢: +りょう 綾 単漢: +りょう 菱 単漢: +りょう 椋 単漢: +りょう 亮 単漢: +りょう 僚 単漢: +りょう 凌 単漢: +りょう 療 単漢: +りょう 瞭 単漢: +りょう 稜 単漢: +りょう 遼 単漢: +りょう 嶺 単漢: +りょう 魎 単漢: +りょうあし 両足 名1: +りょういき 領域 名1: +りょういち 亮一 名前: +りょういち 良一 名前: +りょういん 両院 名1: +りょうえん 良縁 名3: +りょうかい 了解 名7: +りょうかい 領海 名1: +りょうかみ 両神 地名: +りょうかん 量感 名1: +りょうがえ 両替 名6: +りょうがわ 両側 名1: +りょうきち 良吉 名前: +りょうきょく 両極 名1: +りょうきん 料金 名1: +りょうくう 領空 名1: +りょうけ 両家 名3: +りょうけん 猟犬 名1: +りょうこう 良好 名8: +りょうこく 両国 名1: +りょうごく 両国 地名: +りょうさく 良策 名1: +りょうさん 量産 名6: +りょうし 漁師 代2: +りょうし 猟師 代2: +りょうし 量子 名1: +りょうし 両氏 名1: +りょうしき 良識 名1: +りょうしつ 良質 名8: +りょうしゃ 両社 名1: +りょうしゃ 両者 名1: +りょうしゅう 領収 名6: +りょうしょう 了承 名7: +りょうしん 両親 名3: +りょうしん 良心 名4: +りょうじ 療治 名6: +りょうじ 領事 名1: +りょうじ 良二 名前: +りょうじ 良治 名前: +りょうじつ 両日 名1: +りょうじゅう 猟銃 名1: +りょうせい 両性 名1: +りょうせい 良性 名1: +りょうせん 稜線 名1: +りょうぜん 霊山 地名: +りょうた 良太 名前: +りょうたん 両端 名1: +りょうち 領地 名1: +りょうつ 両津 苗字: +りょうつ 両津 地名: +りょうて 両手 名1: +りょうてい 料亭 名1: +りょうてき 量的 形動1: +りょうど 領土 名1: +りょうどう 糧道 名1: +りょうどう 両道 名1: +りょうない 領内 名1: +りょうなん 綾南 地名: +りょうにん 両人 名3: +りょうひ 良否 名1: +りょうぶん 領分 名1: +りょうへい 良平 名前: +りょうほう 両方 名1: +りょうほう 療法 名1: +りょうみ 涼味 名1: +りょうめ 両目 名1: +りょうめん 両面 名1: +りょうゆう 領有 代4: +りょうよう 療養 名7: +りょうよう 両様 名1: +りょうよう 両用 名1: +りょうり 料理 名5: +りょうりつ 両立 名6: +りょうろん 両論 名1: +りょかく 旅客 名1: +りょかん 旅館 名1: +りょく 力 接尾1: +りょく 緑 単漢: +りょくしょく 緑色 名1: +りょくち 緑地 名1: +りょくちゃ 緑茶 名1: +りょけん 旅券 名1: +りょこう 旅行 名7: +りょじょう 旅情 名1: +りょっか 緑化 名6: +りょてい 旅程 名1: +りょひ 旅費 名1: +りよう 利用 名7: +りよう 理容 名1: +りりーす リリース 名6: +りりく 離陸 名6: +りりし 凛々し 形3: +りりつ 利率 名1: +りれー リレー 名1: +りれき 履歴 名1: +りれきしょ 履歴書 名1: +りろん 理論 名4: +りん 燐 代1: +りん 倫 代1: +りん 鈴 代1: +りん 厘 代1:助数2: +りん 輪 助数2: +りん 林 接尾1: +りん 淋 単漢: +りん 琳 単漢: +りん 臨 単漢: +りん 隣 単漢: +りん 鱗 単漢: +りん 麟 単漢: +りん 稟 単漢: +りんか 隣家 名1: +りんかい 臨海 名1: +りんかい 臨界 名1: +りんかく 輪郭 名1: +りんかん 林間 名1: +りんきおうへん 臨機応変 代5: +りんぎ 稟議 名1: +りんぎょう 林業 名1: +りんく リンク 名6: +りんぐ リング 名1: +りんげつ 臨月 名1: +りんこう 輪講 名1: +りんご りんご 代1: +りんごく 隣国 名1: +りんしょう 臨床 名1: +りんじ 臨時 名1: +りんじゅう 臨終 名3: +りんじん 隣人 名1: +りんせき 臨席 名7: +りんせつ 隣接 名6: +りんどう 林道 代1: +りんどう 竜胆 代1: +りんぱ リンパ 名1: +りんや 林野 名1: +りんり 倫理 名1: +る 琉 単漢: +る 留 単漢: +る 屡 単漢: +る 瑠 単漢: +る 婁 単漢: +るーじゅ ルージュ 名1: +るーず ルーズ 代5: +るーちん ルーチン 名1: +るーと ルート 名1: +るーぶる ルーブル 助数2: +るーぷ ループ 代4: +るーまにあ ルーマニア 地名: +るーむ ルーム 名1: +るーる ルール 名1: +るい 類 代1:助数:サ変: +るい 塁 代1: +るい 累 代1: +るい 涙 単漢: +るいけい 累計 代4: +るいご 類語 代1: +るいさん 累算 代4: +るいしょ 類書 名1: +るいしょう 類焼 名6: +るいしん 累進 代4: +るいじ 類似 名6: +るいじ 類字 名1: +るいじょう 累乗 名1: +るいすい 類推 名6: +るいせき 累積 名6: +るいべつ 類別 名6: +るくす ルクス 助数2: +るす 留守 名2: +るすつ 留寿都 地名: +るすばん 留守番 名6: +るっくす ルックス 名1: +るてん 流転 名6: +るびー ルビー 名1: +るふ 流布 名6: +るべしべ 留辺蕊 地名: +るべつ 留別 地名: +るぽるたーじゅ ルポルタージュ 代1: +るみこ 留美子 名前: +るもい 留萌 地名: +るり 瑠璃 名1: +るろう 流浪 名6: +れーがん レーガン 代1: +れーざー レーザー 名1: +れーす レース 名1: +れーだー レーダー 名1: +れーと レート 名1: +れーべる レーベル 代1: +れーる レール 名1: +れい 例 代1:接尾1:助数2: +れい 礼 代3: +れい 霊 代1: +れい 零 代1: +れい 令 代1: +れい レイ 名1: +れい 鈴 代1: +れい 蛎 単漢: +れい 砺 単漢: +れい 戻 単漢: +れい 伶 単漢: +れい 冷 単漢: +れい 励 単漢: +れい 嶺 単漢: +れい 怜 単漢: +れい 玲 単漢: +れい 苓 単漢: +れい 隷 単漢: +れい 麗 単漢: +れい 齢 単漢: +れい 黎 単漢: +れいあうと レイアウト 名6: +れいえん 霊園 名1: +れいか 零下 名1: +れいか 冷夏 名1: +れいかい 例会 名1: +れいかん 霊感 名1: +れいがい 例外 名4: +れいがい 冷害 名1: +れいき 冷気 名1: +れいきゃく 冷却 名6: +れいきん 礼金 名1: +れいぎ 礼儀 名1: +れいぐう 冷遇 名6: +れいけつ 冷血 名8: +れいけつかん 冷血漢 名1: +れいこ 礼子 名前: +れいこ 令子 名前: +れいこ 玲子 名前: +れいこ 怜子 名前: +れいこう 励行 名6: +れいこく 冷酷 名8: +れいこん 霊魂 名1: +れいさい 零細 名8: +れいしょう 例証 名6: +れいしょう 冷笑 名6: +れいじ 例示 名6: +れいじ 零時 名1: +れいじ 玲二 名前: +れいじょう 令嬢 名3: +れいじょう 令状 名1: +れいじょう 礼状 名2: +れいすい 冷水 名1: +れいせい 冷静 名8: +れいせん 冷戦 名1: +れいぜん 霊前 名3: +れいそく 令息 名3: +れいぞうこ 冷蔵庫 名1: +れいたん 冷淡 名8: +れいだい 例題 名1: +れいとう 冷凍 名6: +れいど 零度 名1: +れいにゅう 戻入 名6: +れいねつ 冷熱 名1: +れいねん 例年 名1: +れいふく 礼服 名1: +れいぶん 例文 名1: +れいほう 礼法 名1: +れいほく 苓北 地名: +れいぼう 冷房 名6: +れいれいし 麗々し 形3: +れき 歴 接尾1: +れき 暦 接尾1: +れき 礫 単漢: +れきし 歴史 名4: +れきぜん 歴然 代1:形動2: +れきだい 歴代 名1: +れきほう 歴訪 名6: +れきれき 歴々 名5: +れぎゅらー レギュラー 名1: +れくいえむ レクイエム 名1: +れくちゃー レクチャー 名6: +れこーだ レコーダ 名1: +れこーでぃんぐ レコーディング 名6: +れこーど レコード 名1: +れしーと レシート 名1: +れしーば レシーバ 名1: +れじ レジ 名1: +れじすた レジスタ 名1: +れじゃー レジャー 名1: +れじゅめ レジュメ 名1: +れす レス 名1: +れすとらん レストラン 名1: +れすぽんす レスポンス 名1: +れすりんぐ レスリング 名1: +れせぷしょん レセプション 名1: +れたー レター 名1: +れっか 劣化 名6: +れっき 列記 名6: +れっきょ 列挙 名6: +れっこく 列国 名1: +れっしゃ 列車 名1: +れっしょう 裂傷 名1: +れっせい 劣勢 名8: +れっせい 劣性 名8: +れっせき 列席 名7: +れっとう 列島 名1: +れっとう 劣等 名1: +れっど レッド 名1: +れつ 列 代1:助数: +れつ 劣 代1: +れつ 烈 単漢: +れつ 裂 単漢: +れつあく 劣悪 代5: +れつでん 列伝 名1: +れとると レトルト 名1: +ればー レバー 名1: +れびゅー レビュー 名6: +れぶん 礼文 地名: +れべる レベル 名1: +れぽーと レポート 名6: +れもねーど レモネード 名1: +れもん レモン 代1: +れん 連 接尾1: +れん 鎌 単漢: +れん 廉 単漢: +れん 恋 単漢: +れん 憐 単漢: +れん 漣 単漢: +れん 煉 単漢: +れん 簾 単漢: +れん 練 単漢: +れん 聯 単漢: +れん 蓮 単漢: +れん 錬 単漢: +れんあい 恋愛 名6: +れんか 廉価 名8: +れんかん 連関 名6: +れんが 煉瓦 名1: +れんき 連記 名6: +れんきゅう 連休 名1: +れんきんじゅつ 錬金術 名1: +れんけい 連係 名6: +れんけい 連携 名6: +れんけつ 連結 名6: +れんこ 連呼 名6: +れんこう 連行 名6: +れんこん 蓮根 代1: +れんごう 連合 名6: +れんさ 連鎖 名1: +れんさい 連載 名6: +れんさく 連作 名6: +れんざ 連座 名6: +れんざん 連山 名1: +れんしゅう 練習 名6: +れんしょ 連署 名6: +れんしょう 連勝 名6: +れんじ レンジ 名1: +れんじつ 連日 代6: +れんせつ 連接 代4: +れんそう 連想 名6: +れんぞく 連続 名6: +れんたい 連帯 名6: +れんたい 連隊 名1:助数: +れんたい 連体 名1: +れんたつ 練達 名6: +れんたる レンタル 名6: +れんだ 連打 代4: +れんちゅう 連中 名1: +れんとう 連騰 代4: +れんとげん レントゲン 名1: +れんどう 連動 名6: +れんぱ 連破 名6: +れんぱい 連敗 名6: +れんぱつ 連発 名6: +れんぽう 連邦 名1: +れんぽう 連峰 名1: +れんめい 連盟 名1: +れんめい 連名 名1: +れんや 連夜 名1: +れんよう 連用 名6: +れんらく 連絡 名7: +れんりつ 連立 名6: +ろ 魯 代1: +ろ 櫓 代1: +ろ 路 接尾1: +ろ 炉 接尾1: +ろ 鷺 単漢: +ろ 櫨 単漢: +ろ 呂 単漢: +ろ 賂 単漢: +ろ 露 単漢: +ろ 蕗 単漢: +ろー ロー 名1: +ろーかる ローカル 名8: +ろーず ローズ 名1: +ろーど ロード 名6: +ろーま ローマ 地名: +ろーまじ ローマ字 名1: +ろーれべる ローレベル 名8: +ろーん ローン 名1: +ろう 労 代4:サ五1: +ろう 廊 代1: +ろう 弄 サ変:サ五1: +ろう 楼 代1: +ろう 漏 代1: +ろう 牢 代1: +ろう 老 代1:接頭1: +ろう 聾 代4: +ろう 蝋 代1: +ろう 滝 単漢: +ろう 糧 単漢: +ろう 婁 単漢: +ろう 朗 単漢: +ろう 榔 単漢: +ろう 浪 単漢: +ろう 狼 単漢: +ろう 篭 単漢: +ろう 郎 単漢: +ろう 籠 単漢: +ろうあ 聾唖 名1: +ろうえい 漏洩 名6: +ろうか 廊下 名1: +ろうか 老化 名6: +ろうがん 老眼 名1: +ろうきゅう 老朽 名6: +ろうきょく 浪曲 名1: +ろうく 労苦 名1: +ろうご 老後 名1: +ろうごく 牢獄 名1: +ろうさい 労災 名1: +ろうさく 労作 名6: +ろうし 労使 名1: +ろうしゅつ 漏出 名6: +ろうしょう 労相 名1: +ろうじゃく 老弱 名8: +ろうじん 老人 名1: +ろうすい 漏水 名6: +ろうすい 老衰 名6: +ろうそ 労組 名1: +ろうちん 労賃 名1: +ろうでん 漏電 名6: +ろうどう 労働 名6: +ろうどうしょう 労働省 名1: +ろうどく 朗読 名6: +ろうにゃく 老若 名1: +ろうにん 浪人 名1: +ろうはい 老廃 名6: +ろうば 老婆 名1: +ろうばい 狼狽 名6: +ろうひ 浪費 名6: +ろうほう 朗報 名3: +ろうむ 労務 名1: +ろうりょく 労力 名1: +ろうれい 老齢 名4: +ろうれん 老練 名8: +ろかた 路肩 名1: +ろく 録 接尾1:サ変: +ろく 禄 単漢: +ろく 漉 単漢: +ろく 鹿 単漢: +ろく 緑 単漢: +ろく 麓 単漢: +ろく 肋 単漢: +ろくおん 録音 名6: +ろくが 録画 名6: +ろくごう 六郷 地名: +ろくせい 鹿西 地名: +ろくな ろくな 連体: +ろくのへ 六戸 地名: +ろくまく 肋膜 名1: +ろくろ ろくろ 名1: +ろくろう 六郎 名前: +ろぐ ログ 名1: +ろぐいん ログイン 名6: +ろけっと ロケット 名1: +ろけん 露見 名6: +ろこつ 露骨 名8: +ろご ロゴ 名1: +ろさんぜるす ロサンゼルス 地名: +ろし 濾紙 名1: +ろしあ ロシア 地名: +ろしゅつ 露出 名6: +ろじ 路地 名1: +ろじ 露地 名1: +ろじっく ロジック 名1: +ろじょう 路上 名1: +ろせん 路線 名1: +ろっかー ロッカー 名1: +ろっきーど ロッキード 企業: +ろっく ロック 名6: +ろっこう 六甲 地名: +ろっこうさん 六甲山 代1: +ろっこつ 肋骨 名1: +ろって ロッテ 企業: +ろっぽう 六法 名1: +ろっぽんぎ 六本木 地名: +ろつかしょ 六ヶ所 地名: +ろてん 露天 名1: +ろてん 露店 名1: +ろばん 路盤 名1: +ろびんそん ロビンソン 名1: +ろぼっと ロボット 名4: +ろむ ロム 名1: +ろめん 路面 名1: +ろりこん ロリコン 名1: +ろん 論 接尾1:ザ変: +ろんがい 論外 名8: +ろんきゅう 論及 名6: +ろんきゅう 論究 名6: +ろんきょ 論拠 名1: +ろんぎ 論議 名6: +ろんぐ ロング 名8: +ろんこく 論告 名6: +ろんご 論語 名1: +ろんし 論旨 名1: +ろんしょう 論証 名6: +ろんじゅつ 論述 名6: +ろんそう 論争 名6: +ろんちょう 論調 名1: +ろんてん 論点 名1: +ろんどん ロンドン 地名: +ろんぴょう 論評 名6: +ろんぶん 論文 名1: +ろんぽう 論法 名1: +ろんり 論理 名4: +わ 沸 カ五3: +わ 湧 カ五1: +わ 涌 カ五1: +わ 割 ラ五4: +わ 和 代1: +わ 輪 代1: +わ 環 代1: +わ 話 助数: +わ 羽 助数2: +わ 把 助数2: +わ 我 代1: +わ 倭 代1: +わーく ワーク 名1: +わーど ワード 名1: +わーぷ ワープ 名6: +わーぷろ ワープロ 名1: +わーるど ワールド 名1: +わい 賄 単漢: +わい 歪 単漢: +わい 隈 単漢: +わいあー ワイアー 名1: +わいきょく 歪曲 名6: +わいしゃつ ワイシャツ 名1: +わいど ワイド 名8: +わいぱー ワイパー 名1: +わいや ワイヤ 名1: +わいやー ワイヤー 名1: +わいるど ワイルド 名8: +わいろ 賄賂 名1: +わいん ワイン 名1: +わか 若 接頭1:形10: +わか わか ラ五8: +わか 判 ラ五4: +わか 分か タ五7:ラ五4: +わか 沸か サ五3: +わか 和歌 名1: +わかい 和解 代4: +わかい 若井 苗字: +わかがえ 若返 ラ五7: +わかくさ 若草 名1: +わかこ 和歌子 名前: +わかさ 若桜 地名: +わかちがき わかち書き 名1: +わかつき 若月 苗字: +わかて 若手 名1: +わかば 若葉 名1: +わかばやし 若林 苗字: +わかまつ 若松 苗字: +わかまつ 若松 地名: +わかみ 若美 地名: +わかみや 若宮 苗字: +わかみや 若宮 地名: +わかめ 若布 代1: +わかもの 若者 名1: +わかやなぎ 若柳 地名: +わかやま 若山 苗字: +わかやま 和歌山 地名: +わかれ 別れ 一段4: +わかれ 分かれ 一段2: +わかわかし 若々し 形3: +わが わが 連体: +わが 我が 連体: +わが 和賀 地名: +わがくに 我が国 名1: +わがし 和菓子 名1: +わがまま わがまま 代5: +わがまま 我侭 代5: +わがや 我家 代1: +わき 脇 代1: +わきあいあい 和気藹々 形動2: +わきた 沸き立 タ五5: +わきのさわ 脇野沢 地名: +わきばら 脇腹 代1: +わきまえ 弁え 一段1: +わきみ わき見 名6: +わきみち 脇道 名1: +わぎ 和議 名1: +わぎ 和木 地名: +わぎゅう 和牛 名1: +わぎり 輪切り 名1: +わく 枠 代1: +わく 惑 単漢: +わくがい 枠外 名1: +わくぐみ 枠組 名1: +わくせい 惑星 名1: +わくちん ワクチン 代3: +わくない 枠内 名1: +わくや 涌谷 地名: +わけ わけ 代1: +わけ 分け 接尾1:一段2: +わけ 訳 代1: +わけ 和気 地名: +わけめ 分け目 名1: +わこーる ワコール 企業: +わこう 和光 地名: +わこうど 若人 名1: +わごう 和合 代4: +わごん ワゴン 名1: +わさい 和裁 名1: +わざ 技 代1: +わざ 業 代1: +わざ 術 単漢: +わざと わざと 副1: +わざわい 災い 代4: +わざわざ わざわざ 副1: +わし 鷲 代1: +わし 和紙 代1: +わしお 鷲尾 苗字: +わしき 和式 名1: +わしつ 和室 名1: +わしま 和島 地名: +わしみや 鷲宮 地名: +わしょく 和食 名1: +わしんとん ワシントン 地名: +わじき 鷲敷 地名: +わじま 輪島 苗字: +わじま 輪島 地名: +わすれ 忘れ 一段4: +わすれさ 忘れ去 ラ五5: +わずか わずか 形動9: +わずか 僅か 形動9: +わずら 患 ワ五7: +わずら 煩 ワ五7: +わずらわし 煩わし 形5: +わせ 早生 名1: +わせ 早稲 名1: +わせだ 早稲田 地名: +わた わた ラ五8: +わた 渡 サ五8:ラ五8: +わた 綿 代1: +わた 棉 単漢: +わたくし 私 代1: +わたくしごと 私事 名1: +わたし 私 代1: +わたし わたし 代1: +わたしたち 私たち 代1: +わたしども 私ども 代1: +わたしぶね 渡し船 代1: +わたなべ 渡辺 苗字: +わたなべ 渡辺 地名: +わたなべ 渡部 苗字: +わたぬき 綿貫 苗字: +わたべ 渡部 苗字: +わたらい 度会 地名: +わたり 亘理 地名: +わたりどり 渡り鳥 代1: +わたる 亘 名前: +わたる 亙 名前: +わだ 和田 苗字: +わだ 和田 地名: +わだい 話題 名1: +わだち 轍 代1: +わだやま 和田山 地名: +わち 和知 地名: +わっかない 稚内 地名: +わっさむ 和寒 地名: +わっと ワット 助数2: +わづか 和束 地名: +わどまり 和泊 地名: +わな 罠 代1: +わに 鰐 代1: +わのうち 輪之内 地名: +わび 詫び 一段4: +わふう 和風 名1: +わふく 和服 名1: +わぶん 和文 名1: +わへい 和平 名1: +わほう 話法 名1: +わぼく 和睦 名6: +わやく 和訳 名6: +わよう 和洋 名1: +わら 笑 ワ五8: +わら 藁 代1: +わら 和良 地名: +わら 稿 単漢: +わらび 蕨 地名: +わらべ 童 代1: +わり 割 助数2:接尾1: +わりあい 割合 名1: +わりあて 割り当て 一段3: +わりあて 割当 名1: +わりいん 割印 代4: +わりかん 割り勘 名1: +わりき 割り切 ラ五7: +わりこ 割り込 マ五7: +わりざん 割算 名1: +わりだか 割高 代5: +わりつけ 割り付け 一段3: +わりばし 割箸 代1: +わりび 割り引 カ五7: +わりびき 割引 名6:助数2: +わりふ 割り振 ラ五7: +わりまし 割増し 代4:助数2: +わりもど 割り戻 サ五7: +わりもどし 割戻し 名1: +わりやす 割安 代5: +わる 悪 代1:接頭1:形5: +わる ÷ 単漢: +わるぎ 悪気 代1: +わるくち 悪口 代1: +わるびれ 悪びれ 一段1: +わるもの 悪者 名1: +われ 割れ 一段3: +われ 我 代1: +われめ 割れ目 代1: +われら 我ら 代1: +われら われら 代1: +われわれ 我々 代1: +わん 湾 接尾1: +わん 椀 名2: +わん 碗 名2: +わん 腕 代1: +わんがん 湾岸 名1: +わんきょく 湾曲 名6: +わんしょう 腕章 名1: +わんたん ワンタン 代1: +わんない 湾内 名1: +わんぱく 腕白 名8: +わんまん ワンマン 名8: +わんりょく 腕力 名1: diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..7de06f2 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,2 @@ +SUBDIRS = man doc + diff --git a/doc/doc/Makefile.am b/doc/doc/Makefile.am new file mode 100644 index 0000000..24ff871 --- /dev/null +++ b/doc/doc/Makefile.am @@ -0,0 +1,29 @@ +EXTRA_DIST = +doc_DATA = + +if BUILDABLE_SJ3CLIENT + +EXTRA_DIST += \ + Nihongo.ps \ + sj3lib.ms + +doc_DATA += \ + Nihongo.ps \ + sj3lib.ms + +endif + +if BUILDABLE_SJ3SERV + +EXTRA_DIST += \ + hinsi.ms \ + makedict.ms \ + sj3serv.ms + +doc_DATA += \ + hinsi.ms \ + makedict.ms \ + sj3serv.ms + +endif + diff --git a/doc/doc/Nihongo.ps b/doc/doc/Nihongo.ps new file mode 100644 index 0000000..0e358b8 --- /dev/null +++ b/doc/doc/Nihongo.ps @@ -0,0 +1,18417 @@ +%! +%%BoundingBox: (atend) +%%Pages: (atend) +%%DocumentFonts: (atend) +%%DocumentSuppliedFonts: ? ?-H ?-V +%%EndComments +% +% FrameMaker PostScript Prolog 2.0, for use with FrameMaker 2.0 +% Copyright (c) 1986,87,89 by Frame Technology, Inc. All rights reserved. +% +% Known Problems: +% Due to bugs in Transcript, the 'PS-Adobe-' is omitted from line 1 +/FMversion (2.0) def +% Set up Color vs. Black-and-White + /FMPrintInColor systemdict /colorimage known def +% Uncomment this line to force b&w on color printer +% /FMPrintInColor false def +/FrameDict 190 dict def +systemdict /errordict known not {/errordict 10 dict def + errordict /rangecheck {stop} put} if +% The readline in 23.0 doesn't recognize cr's as nl's on AppleTalk +FrameDict /tmprangecheck errordict /rangecheck get put +errordict /rangecheck {FrameDict /bug true put} put +FrameDict /bug false put +mark +% Some PS machines read past the CR, so keep the following 3 lines together! +currentfile 5 string readline +00 +0000000000 +cleartomark +errordict /rangecheck FrameDict /tmprangecheck get put +FrameDict /bug get { + /readline { + /gstring exch def + /gfile exch def + /gindex 0 def + { + gfile read pop + dup 10 eq {exit} if + dup 13 eq {exit} if + gstring exch gindex exch put + /gindex gindex 1 add def + } loop + pop + gstring 0 gindex getinterval true + } def + } if +/FMVERSION { + FMversion ne { + /Times-Roman findfont 18 scalefont setfont + 100 100 moveto + (FrameMaker version does not match postscript_prolog!) + dup = + show showpage + } if + } def +/FMLOCAL { + FrameDict begin + 0 def + end + } def + /gstring FMLOCAL + /gfile FMLOCAL + /gindex FMLOCAL + /orgxfer FMLOCAL + /orgproc FMLOCAL + /organgle FMLOCAL + /orgfreq FMLOCAL + /yscale FMLOCAL + /xscale FMLOCAL + /manualfeed FMLOCAL + /paperheight FMLOCAL + /paperwidth FMLOCAL +/FMDOCUMENT { + array /FMfonts exch def + /#copies exch def + FrameDict begin + 0 ne dup {setmanualfeed} if + /manualfeed exch def + /paperheight exch def + /paperwidth exch def + setpapername + manualfeed {true} {papersize} ifelse + {manualpapersize} {false} ifelse + {desperatepapersize} if + /yscale exch def + /xscale exch def + currenttransfer cvlit /orgxfer exch def + currentscreen cvlit /orgproc exch def + /organgle exch def /orgfreq exch def + end + } def + /pagesave FMLOCAL + /orgmatrix FMLOCAL + /landscape FMLOCAL +/FMBEGINPAGE { + FrameDict begin + /pagesave save def + 3.86 setmiterlimit + /landscape exch 0 ne def + landscape { + 90 rotate 0 exch neg translate pop + } + {pop pop} + ifelse + xscale yscale scale + /orgmatrix matrix def + gsave + } def +/FMENDPAGE { + grestore + pagesave restore + end + showpage + } def +/FMDEFINEFONT { + FrameDict begin + findfont + ReEncode + 2 index exch + definefont exch + scalefont + FMfonts 3 1 roll + put + end + } bind def +/JFMDEFINEFONT { + FrameDict begin + findfont + 3 1 roll matrix translate makefont + ReEncode + 2 index exch + definefont exch + scalefont + FMfonts 3 1 roll + put + end + } bind def +/FMNORMALIZEGRAPHICS { + newpath + 0.0 0.0 moveto + 1 setlinewidth + 0 setlinecap + 0 0 0 sethsbcolor + 0 setgray + } bind def + /fx FMLOCAL + /fy FMLOCAL + /fh FMLOCAL + /fw FMLOCAL + /llx FMLOCAL + /lly FMLOCAL + /urx FMLOCAL + /ury FMLOCAL +/FMBEGINEPSF { + end + /FMEPSF save def + /showpage {} def + FMNORMALIZEGRAPHICS + [/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall + fx fy translate + rotate + fw urx llx sub div fh ury lly sub div scale + llx neg lly neg translate + } bind def +/FMENDEPSF { + FMEPSF restore + FrameDict begin + } bind def +FrameDict begin +/setmanualfeed { +%%BeginFeature *ManualFeed True + statusdict /manualfeed true put +%%EndFeature + } def +/max {2 copy lt {exch} if pop} bind def +/min {2 copy gt {exch} if pop} bind def +/inch {72 mul} def +/pagedimen { + paperheight sub abs 16 lt exch + paperwidth sub abs 16 lt and + {/papername exch def} {pop} ifelse + } def + /papersizedict FMLOCAL +/setpapername { + /papersizedict 14 dict def + papersizedict begin + /papername /unknown def + /Letter 8.5 inch 11.0 inch pagedimen + /LetterSmall 7.68 inch 10.16 inch pagedimen + /Tabloid 11.0 inch 17.0 inch pagedimen + /Ledger 17.0 inch 11.0 inch pagedimen + /Legal 8.5 inch 14.0 inch pagedimen + /Statement 5.5 inch 8.5 inch pagedimen + /Executive 7.5 inch 10.0 inch pagedimen + /A3 11.69 inch 16.5 inch pagedimen + /A4 8.26 inch 11.69 inch pagedimen + /A4Small 7.47 inch 10.85 inch pagedimen + /B4 10.125 inch 14.33 inch pagedimen + /B5 7.16 inch 10.125 inch pagedimen + end + } def +/papersize { + papersizedict begin + /Letter {lettertray} def + /LetterSmall {lettertray lettersmall} def + /Tabloid {11x17tray} def + /Ledger {ledgertray} def + /Legal {legaltray} def + /Statement {statementtray} def + /Executive {executivetray} def + /A3 {a3tray} def + /A4 {a4tray} def + /A4Small {a4tray a4small} def + /B4 {b4tray} def + /B5 {b5tray} def + /unknown {unknown} def + papersizedict dup papername known {papername} {/unknown} ifelse get + end + /FMdicttop countdictstack 1 add def + statusdict begin stopped end + countdictstack -1 FMdicttop {pop end} for + } def +/manualpapersize { + papersizedict begin + /Letter {letter} def + /LetterSmall {lettersmall} def + /Tabloid {11x17} def + /Ledger {ledger} def + /Legal {legal} def + /Statement {statement} def + /Executive {executive} def + /A3 {a3} def + /A4 {a4} def + /A4Small {a4small} def + /B4 {b4} def + /B5 {b5} def + /unknown {unknown} def + papersizedict dup papername known {papername} {/unknown} ifelse get + end + stopped + } def +/desperatepapersize { + statusdict /setpageparams known + { + paperwidth paperheight 0 1 + statusdict begin + {setpageparams} stopped pop + end + } if + } def +/savematrix { + orgmatrix currentmatrix pop + } bind def +/restorematrix { + orgmatrix setmatrix + } bind def +/dmatrix matrix def +/dpi 72 0 dmatrix defaultmatrix dtransform + dup mul exch dup mul add sqrt def +/freq dpi 18.75 div 8 div round dup 0 eq {pop 1} if 8 mul dpi exch div def +/sangle 1 0 dmatrix defaultmatrix dtransform exch atan def +/DiacriticEncoding [ +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl +/numbersign /dollar /percent /ampersand /quotesingle /parenleft +/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one +/two /three /four /five /six /seven /eight /nine /colon /semicolon +/less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K +/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash +/bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h +/i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar +/braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute +/Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis +/atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis +/iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve +/ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex +/udieresis /dagger /.notdef /cent /sterling /section /bullet +/paragraph /germandbls /registered /copyright /trademark /acute +/dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef +/yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef +/ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown +/exclamdown /logicalnot /.notdef /florin /.notdef /.notdef +/guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde +/Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright +/quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis +/fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl +/periodcentered /quotesinglbase /quotedblbase /perthousand +/Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute +/Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve +/Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron +/breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron +] def +/ReEncode { + dup + length + dict begin + { + 1 index /FID ne + {def} + {pop pop} ifelse + } forall + Encoding StandardEncoding eq + { + /Encoding DiacriticEncoding def + }if + currentdict + end + } bind def +/graymode true def + /bwidth FMLOCAL + /bpside FMLOCAL + /bstring FMLOCAL + /onbits FMLOCAL + /offbits FMLOCAL + /xindex FMLOCAL + /yindex FMLOCAL + /x FMLOCAL + /y FMLOCAL +/setpattern { + /bwidth exch def + /bpside exch def + /bstring exch def + /onbits 0 def /offbits 0 def + freq sangle landscape {90 add} if + {/y exch def + /x exch def + /xindex x 1 add 2 div bpside mul cvi def + /yindex y 1 add 2 div bpside mul cvi def + bstring yindex bwidth mul xindex 8 idiv add get + 1 7 xindex 8 mod sub bitshift and 0 ne + {/onbits onbits 1 add def 1} + {/offbits offbits 1 add def 0} + ifelse + } + setscreen + {} settransfer + offbits offbits onbits add div FMsetgray + /graymode false def + } bind def +/grayness { + FMsetgray + graymode not { + /graymode true def + orgxfer cvx settransfer + orgfreq organgle orgproc cvx setscreen + } if + } bind def + /HUE FMLOCAL + /SAT FMLOCAL + /BRIGHT FMLOCAL + /Colors FMLOCAL +FMPrintInColor + + { + /HUE 0 def + /SAT 0 def + /BRIGHT 0 def + % array of arrays Hue and Sat values for the separations [HUE BRIGHT] + /Colors + [[0 0 ] % black + [0 0 ] % white + [0.00 1.0] % red + [0.37 1.0] % green + [0.60 1.0] % blue + [0.50 1.0] % cyan + [0.83 1.0] % magenta + [0.16 1.0] % comment / yellow + ] def + + /BEGINBITMAPCOLOR { + BITMAPCOLOR} def + /BEGINBITMAPCOLORc { + BITMAPCOLORc} def + /K { + Colors exch get dup + 0 get /HUE exch store + 1 get /BRIGHT exch store + HUE 0 eq BRIGHT 0 eq and + {1.0 SAT sub setgray} + {HUE SAT BRIGHT sethsbcolor} + ifelse + } def + /FMsetgray { + /SAT exch 1.0 exch sub store + HUE 0 eq BRIGHT 0 eq and + {1.0 SAT sub setgray} + {HUE SAT BRIGHT sethsbcolor} + ifelse + } bind def + } + + { + /BEGINBITMAPCOLOR { + BITMAPGRAY} def + /BEGINBITMAPCOLORc { + BITMAPGRAYc} def + /FMsetgray {setgray} bind def + /K { + pop + } def + } +ifelse +/normalize { + transform round exch round exch itransform + } bind def +/dnormalize { + dtransform round exch round exch idtransform + } bind def +/lnormalize { + 0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop + } bind def +/H { + lnormalize setlinewidth + } bind def +/Z { + setlinecap + } bind def +/X { + fillprocs exch get exec + } bind def +/V { + gsave eofill grestore + } bind def +/N { + stroke + } bind def +/M {newpath moveto} bind def +/E {lineto} bind def +/D {curveto} bind def +/O {closepath} bind def + /n FMLOCAL +/L { + /n exch def + newpath + normalize + moveto + 2 1 n {pop normalize lineto} for + } bind def +/Y { + L + closepath + } bind def + /x1 FMLOCAL + /x2 FMLOCAL + /y1 FMLOCAL + /y2 FMLOCAL + /rad FMLOCAL +/R { + /y2 exch def + /x2 exch def + /y1 exch def + /x1 exch def + x1 y1 + x2 y1 + x2 y2 + x1 y2 + 4 Y + } bind def +/RR { + /rad exch def + normalize + /y2 exch def + /x2 exch def + normalize + /y1 exch def + /x1 exch def + newpath + x1 y1 rad add moveto + x1 y2 x2 y2 rad arcto + x2 y2 x2 y1 rad arcto + x2 y1 x1 y1 rad arcto + x1 y1 x1 y2 rad arcto + closepath + 16 {pop} repeat + } bind def +/C { + grestore + gsave + R + clip + } bind def +/U { + grestore + gsave + } bind def +/F { + FMfonts exch get + setfont + } bind def +% Operator `BUGFIX' is bug fix patch for JFM. +% This fixes composite font cache bug of LaserWriter NTX-J, PC-PR602PS. +% Here is test program of this bug. +% %! +% % ---- begin test ---- +% /Ryumin-Light-H findfont 10 scalefont setfont +% <2121> stringwidth pop pop +% gsave +% -71 rotate +% <242124222423> stringwidth pop pop +% grestore +% 100 100 moveto +% <24242425242124262427> show +% showpage +% % ---- end test ---- +/BUGFIXFONT /Courier findfont def +/BUGFIX { + currentfont + BUGFIXFONT setfont + setfont + } bind def +/T { + moveto show + } bind def +/RF { + rotate + 0 ne {-1 1 scale} if + } bind def +/TF { + gsave + moveto + RF + show + grestore + BUGFIX + } bind def +/P { + moveto + 0 32 3 2 roll widthshow + } bind def +/PV { % JFM + moveto + 0 3 1 roll 32 exch widthshow + } bind def +/PF { + gsave + moveto + RF + 0 32 3 2 roll widthshow + grestore + BUGFIX + } bind def +/PFV { % JFM + gsave + moveto + RF + 0 3 1 roll 32 exch widthshow + grestore + BUGFIX + } bind def +/S { + moveto + 0 exch ashow + } bind def +/SV { % JFM + moveto + 0 3 1 roll ashow + } bind def +/SF { + gsave + moveto + RF + 0 exch ashow + grestore + BUGFIX + } bind def +/SFV { % JFM + gsave + moveto + RF + 0 3 1 roll ashow + grestore + BUGFIX + } bind def +/B { + moveto + 0 32 4 2 roll 0 exch awidthshow + } bind def +/BV { % JFM + moveto + 0 4 1 roll 32 0 4 2 roll awidthshow + } bind def +/BF { + gsave + moveto + RF + 0 32 4 2 roll 0 exch awidthshow + grestore + BUGFIX + } bind def +/BFV { %JFM + gsave + moveto + RF + 0 4 1 roll 32 0 4 2 roll awidthshow + grestore + BUGFIX + } bind def + /x FMLOCAL + /y FMLOCAL + /dx FMLOCAL + /dy FMLOCAL + /dl FMLOCAL + /t FMLOCAL + /t2 FMLOCAL + /Cos FMLOCAL + /Sin FMLOCAL + /r FMLOCAL +/W { + dnormalize + /dy exch def + /dx exch def + normalize + /y exch def + /x exch def + /dl dx dx mul dy dy mul add sqrt def + dl 0.0 gt { + /t currentlinewidth def + savematrix + /Cos dx dl div def + /Sin dy dl div def + /r [Cos Sin Sin neg Cos 0.0 0.0] def + /t2 t 2.5 mul 3.5 max def + newpath + x y translate + r concat + 0.0 0.0 moveto + dl t 2.7 mul sub 0.0 rlineto + stroke + restorematrix + x dx add y dy add translate + r concat + t 0.67 mul setlinewidth + t 1.61 mul neg 0.0 translate + 0.0 0.0 moveto + t2 1.7 mul neg t2 2.0 div moveto + 0.0 0.0 lineto + t2 1.7 mul neg t2 2.0 div neg lineto + stroke + t setlinewidth + restorematrix + } if + } bind def +/G { + gsave + newpath + normalize translate 0.0 0.0 moveto + dnormalize scale + 0.0 0.0 1.0 5 3 roll arc + closepath fill + grestore + } bind def +/A { + gsave + savematrix + newpath + 2 index 2 div add exch 3 index 2 div sub exch + normalize 2 index 2 div sub exch 3 index 2 div add exch + translate + scale + 0.0 0.0 1.0 5 3 roll arc + restorematrix + stroke + grestore + } bind def + /x FMLOCAL + /y FMLOCAL + /w FMLOCAL + /h FMLOCAL + /xx FMLOCAL + /yy FMLOCAL + /ww FMLOCAL + /hh FMLOCAL + /FMsaveobject FMLOCAL + /FMoptop FMLOCAL + /FMdicttop FMLOCAL +/BEGINPRINTCODE { + /FMdicttop countdictstack 1 add def + /FMoptop count 4 sub def + /FMsaveobject save def + userdict begin + /showpage {} def + FMNORMALIZEGRAPHICS + 3 index neg 3 index neg translate + } bind def +/ENDPRINTCODE { + count -1 FMoptop {pop pop} for + countdictstack -1 FMdicttop {pop end} for + FMsaveobject restore + } bind def +/gn { + 0 + { 46 mul + cf read pop + 32 sub + dup 46 lt {exit} if + 46 sub add + } loop + add + } bind def + /str FMLOCAL +/cfs { + /str sl string def + 0 1 sl 1 sub {str exch val put} for + str def + } bind def +/ic [ + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 + 0 + {0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx} + {10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx} + {19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} + {13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh} + {4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh} + {13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl} + {7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl} + {0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl} + {10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl} + ] def + /sl FMLOCAL + /val FMLOCAL + /ws FMLOCAL + /im FMLOCAL + /bs FMLOCAL + /cs FMLOCAL + /len FMLOCAL + /pos FMLOCAL +/ms { + /sl exch def + /val 255 def + /ws cfs + /im cfs + /val 0 def + /bs cfs + /cs cfs + } bind def +400 ms +/ip { + is + 0 + cf cs readline pop + { ic exch get exec + add + } forall + pop + + } bind def +/wh { + /len exch def + /pos exch def + ws 0 len getinterval im pos len getinterval copy pop + pos len + } bind def +/bl { + /len exch def + /pos exch def + bs 0 len getinterval im pos len getinterval copy pop + pos len + } bind def +/s1 1 string def +/fl { + /len exch def + /pos exch def + /val cf s1 readhexstring pop 0 get def + pos 1 pos len add 1 sub {im exch val put} for + pos len + } bind def +/hx { + 3 copy getinterval + cf exch readhexstring pop pop + } bind def + /h FMLOCAL + /w FMLOCAL + /d FMLOCAL + /lb FMLOCAL + /bitmapsave FMLOCAL + /is FMLOCAL + /cf FMLOCAL +/wbytes { + dup + 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse + } bind def +/BEGINBITMAPBWc { + 1 {} COMMONBITMAPc + } bind def +/BEGINBITMAPGRAYc { + 8 {} COMMONBITMAPc + } bind def +/BEGINBITMAP2BITc { + 2 {} COMMONBITMAPc + } bind def +/COMMONBITMAPc { + /r exch def + /d exch def + gsave + translate rotate scale /h exch def /w exch def + /lb w d wbytes def + sl lb lt {lb ms} if + /bitmapsave save def + r + /is im 0 lb getinterval def + ws 0 lb getinterval is copy pop + /cf currentfile def + w h d [w 0 0 h neg 0 h] + {ip} image + bitmapsave restore + grestore + } bind def +/BEGINBITMAPBW { + 1 {} COMMONBITMAP + } bind def +/BEGINBITMAPGRAY { + 8 {} COMMONBITMAP + } bind def +/BEGINBITMAP2BIT { + 2 {} COMMONBITMAP + } bind def +/COMMONBITMAP { + /r exch def + /d exch def + gsave + translate rotate scale /h exch def /w exch def + /bitmapsave save def + r + /is w d wbytes string def + /cf currentfile def + w h d [w 0 0 h neg 0 h] + {cf is readhexstring pop} image + bitmapsave restore + grestore + } bind def + /proc1 FMLOCAL + /proc2 FMLOCAL + /newproc FMLOCAL +/Fmcc { + /proc2 exch cvlit def + /proc1 exch cvlit def + /newproc proc1 length proc2 length add array def + newproc 0 proc1 putinterval + newproc proc1 length proc2 putinterval + newproc cvx +} bind def +/ngrayt 256 array def +/nredt 256 array def +/nbluet 256 array def +/ngreent 256 array def + /gryt FMLOCAL + /blut FMLOCAL + /grnt FMLOCAL + /redt FMLOCAL + /indx FMLOCAL + /cynu FMLOCAL + /magu FMLOCAL + /yelu FMLOCAL + /k FMLOCAL + /u FMLOCAL +/colorsetup { + currentcolortransfer + /gryt exch def + /blut exch def + /grnt exch def + /redt exch def + 0 1 255 { + /indx exch def + /cynu 1 red indx get 255 div sub def + /magu 1 green indx get 255 div sub def + /yelu 1 blue indx get 255 div sub def + /k cynu magu min yelu min def + /u k currentundercolorremoval exec def + nredt indx 1 0 cynu u sub max sub redt exec put + ngreent indx 1 0 magu u sub max sub grnt exec put + nbluet indx 1 0 yelu u sub max sub blut exec put + ngrayt indx 1 k currentblackgeneration exec sub gryt exec put + } for + {255 mul cvi nredt exch get} + {255 mul cvi ngreent exch get} + {255 mul cvi nbluet exch get} + {255 mul cvi ngrayt exch get} + setcolortransfer + {pop 0} setundercolorremoval + {} setblackgeneration + } bind def + /tran FMLOCAL +/fakecolorsetup { + /tran 256 string def + 0 1 255 {/indx exch def + tran indx + red indx get 77 mul + green indx get 151 mul + blue indx get 28 mul + add add 256 idiv put} for + currenttransfer + {255 mul cvi tran exch get 255.0 div} + exch Fmcc settransfer +} bind def +/BITMAPCOLOR { + /d 8 def + gsave + translate rotate scale /h exch def /w exch def + /bitmapsave save def + colorsetup + /is w d wbytes string def + /cf currentfile def + w h d [w 0 0 h neg 0 h] + {cf is readhexstring pop} {is} {is} true 3 colorimage + bitmapsave restore + grestore + } bind def +/BITMAPCOLORc { + /d 8 def + gsave + translate rotate scale /h exch def /w exch def + /lb w d wbytes def + sl lb lt {lb ms} if + /bitmapsave save def + colorsetup + /is im 0 lb getinterval def + ws 0 lb getinterval is copy pop + /cf currentfile def + w h d [w 0 0 h neg 0 h] + {ip} {is} {is} true 3 colorimage + bitmapsave restore + grestore + } bind def +/BITMAPGRAY { + 8 {fakecolorsetup} COMMONBITMAP + } bind def +/BITMAPGRAYc { + 8 {fakecolorsetup} COMMONBITMAPc + } bind def +/ENDBITMAP { + } bind def +end + +% JFM - define illegal encoding font (named '?', '?-H', '?-V') +%%BeginFont: ? +11 dict dup begin + /FontType 3 def + /FontMatrix [.001 0 0 .001 0 0] def + /FontBBox [50 -70 830 950] def + /Encoding 256 array def + 0 1 255 { Encoding exch /illegalchar put } for + + /Metrics 1 dict def + Metrics begin + /illegalchar 1000 def + end + /Metrics2 1 dict def + Metrics2 begin + /illegalchar -1000 def + end + + /BBox 1 dict def + BBox begin + /illegalchar [50 -70 950 830] def + end + + /CharacterDefs 1 dict def + CharacterDefs begin + /illegalchar + { + newpath + 80 -40 moveto 80 800 lineto + 920 800 lineto 920 -40 lineto + closepath + 60 setlinewidth + stroke + } def + end + +/setcachedevice2 where { + pop + /BuildChar + { + 0 begin + /char exch def + /fontdict exch def + /charname fontdict /Encoding get char get def + fontdict begin + Metrics charname get 0 + BBox charname get aload pop + 0 Metrics2 charname get + 500 880 + setcachedevice2 + CharacterDefs charname get exec + end + end + } def +} { + /BuildChar + { + 0 begin + /char exch def + /fontdict exch def + /charname fontdict /Encoding get char get def + fontdict begin + Metrics charname get 0 + BBox charname get aload pop + setcachedevice + CharacterDefs charname get exec + end + end + } def +} ifelse + +/BuildChar load 0 3 dict put +/UniqueID 1 def +end + +/? exch definefont pop +%%EndFont + +%%BeginFont: ?-H +/cshow where { + pop + 12 dict begin + /FontName /?-H def + /FontType 0 def + /WMode 0 def + + /FMapType 2 def + + /FontMatrix matrix def + + /Encoding 256 array def + 0 1 255 { Encoding exch dup put } for + + /FDepVector 256 array def + 0 1 255 { FDepVector exch /? findfont put } for + + FontName currentdict + end + + definefont pop +} if +%%EndFont + +%%BeginFont: ?-V +/setcachedevice2 where { + pop + 12 dict begin + /FontName /?-V def + /FontType 0 def + /WMode 1 def + + /FMapType 2 def + + /FontMatrix matrix def + + /Encoding 256 array def + 0 1 255 { Encoding exch dup put } for + + /FDepVector 256 array def + 0 1 255 { FDepVector exch /? findfont put } for + + FontName currentdict + end + + definefont pop +} if +%%EndFont + +%%EndProlog +%%BeginSetup +(2.0) FMVERSION +1 1 595.3 841.9 0 1 33 FMDOCUMENT +/fillprocs 32 array def +fillprocs 0 { 0.000000 grayness } put +fillprocs 1 { 0.100000 grayness } put +fillprocs 2 { 0.300000 grayness } put +fillprocs 3 { 0.500000 grayness } put +fillprocs 4 { 0.700000 grayness } put +fillprocs 5 { 0.900000 grayness } put +fillprocs 6 { 0.970000 grayness } put +fillprocs 7 { 1.000000 grayness } put +fillprocs 8 {<0f87c3e1f0783c1e> 8 1 setpattern } put +fillprocs 9 {<0f1e3c78f0e1c387> 8 1 setpattern } put +fillprocs 10 { 8 1 setpattern } put +fillprocs 11 { 8 1 setpattern } put +fillprocs 12 {<8142241818244281> 8 1 setpattern } put +fillprocs 13 {<8040201008040201> 8 1 setpattern } put +fillprocs 14 {<03060c183060c081> 8 1 setpattern } put +fillprocs 15 {} put +fillprocs 16 { 1.000000 grayness } put +fillprocs 17 { 0.900000 grayness } put +fillprocs 18 { 0.700000 grayness } put +fillprocs 19 { 0.500000 grayness } put +fillprocs 20 { 0.300000 grayness } put +fillprocs 21 { 0.100000 grayness } put +fillprocs 22 { 0.030000 grayness } put +fillprocs 23 { 0.000000 grayness } put +fillprocs 24 { 8 1 setpattern } put +fillprocs 25 { 8 1 setpattern } put +fillprocs 26 {<3333333333333333> 8 1 setpattern } put +fillprocs 27 {<0000ffff0000ffff> 8 1 setpattern } put +fillprocs 28 {<7ebddbe7e7dbbd7e> 8 1 setpattern } put +fillprocs 29 {<7fbfdfeff7fbfdfe> 8 1 setpattern } put +fillprocs 30 { 8 1 setpattern } put +fillprocs 31 {} put +%%EndSetup +0 14 /Helvetica FMDEFINEFONT +1 28.35 0 -0.38 /GothicBBB-Medium-H JFMDEFINEFONT +2 14 0 -0.38 /GothicBBB-Medium-H JFMDEFINEFONT +%%Page: "1" 1 +%%BeginPaperSize: A4 +%%EndPaperSize +595.3 841.9 0 FMBEGINPAGE +-24.79 544.26 508.11 548.52 R +5 X +0 K +V +82.21 76.54 507.41 94.97 R +7 X +V +0 F +0 X +(Copyright \2511994-1996 Sony Corporation) 82.21 83.07 T +87.88 594.58 507.4 625.76 R +7 X +V +1 F +0 X +-2.83 (#S#J#3) 87.88 611.59 S +87.88 557.02 507.4 588.2 R +7 X +V +0 X +-3.4 (F|K\1348lF~NO%,%$%I) 87.88 574.03 S +94.8 498.69 186.43 519.26 R +7 X +V +0 F +0 X +(Version 1.03) 94.8 507.36 T +94.62 521.55 507.67 539.97 R +7 X +V +0 X +(1996) 94.62 528.07 T +2 F +(G/) 129.24 532.97 T +0 F +(5) 146.73 528.07 T +2 F +(7n) 158.01 532.97 T +0 F +(24) 175.5 528.07 T +2 F +(F|) 194.56 532.97 T +FMENDPAGE +%%EndPage: "1" 2 +0 10.63 /Helvetica FMDEFINEFONT +1 7.8 0 -0.38 /GothicBBB-Medium-H JFMDEFINEFONT +2 7 /Helvetica-Bold FMDEFINEFONT +%%Page: "2" 2 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(-) 87.88 92.59 T +(2) 91.42 92.59 T +1 F +(!!) 97.32 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +87.88 119.06 507.41 694.5 R +V +2 F +0 X +-0.28 (Copyright \050c\051 1994-1996 Sony Corporation) 87.88 267.7 S +-0.28 (Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files \050the ) 87.88 250.86 S +-0.28 (\322Software\323\051, to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, ) 87.88 242.44 S +-0.28 (distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to ) 87.88 234.03 S +-0.28 (the following conditions:) 87.88 225.61 S +-0.28 (The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.) 87.88 208.78 S +-0.28 (THE SOFTWARE IS PROVIDED \322AS IS\323, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED ) 87.88 191.94 S +-0.28 (TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT ) 87.88 183.53 S +-0.28 (SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF ) 87.88 175.11 S +-0.28 (CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ) 87.88 166.69 S +-0.28 (DEALINGS IN THE SOFTWARE.) 87.88 158.27 S +-0.28 (Except as contained in this notice, the name of Sony Corporation shall not be used in advertising or otherwise to promote the sale, use ) 87.88 141.44 S +-0.28 (or other dealings in this Software without prior written authorization from Sony Corporation.) 87.88 133.02 S +FMENDPAGE +%%EndPage: "2" 3 +2 10 /Times-Roman FMDEFINEFONT +3 10 0 -0.38 /Ryumin-Light-H JFMDEFINEFONT +%%Page: "3" 3 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +1 F +0 X +(!!) 490.19 95.32 T +0 F +(-3) 497.97 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +87.88 119.06 507.41 694.5 R +V +2 F +0 X +(1) 87.88 671 T +3 F +(>O) 95.38 674.5 T +(F|K\1348lF~NO) 107.87 674.5 T +2 F +(..............................................................................................................................) 162.13 671 T +( 7) 477.24 671 T +3 F +(F|K\1348lF~NO$N35MW) 87.88 659.5 T +2 F +(..........................................................................................................................) 172.12 656 T +( 8) 477.24 656 T +( sj3) 87.88 641 T +3 F +($NFCD') 122.04 644.5 T +2 F +(.................................................................................................................................) 154.63 641 T +( 9) 477.24 641 T +( ) 87.88 626 T +3 F +(O0l3gJQ49) 127.86 614.5 T +2 F +(................................................................................................................) 192.11 611 T +( 10) 472.24 611 T +( ) 87.88 596 T +3 F +(J8@aD93X=,5!G=) 127.86 599.5 T +2 F +(............................................................................................................) 202.11 596 T +( 11) 472.24 596 T +( ) 87.88 581 T +3 F +(C18l$NEPO?!?>C5n) 127.86 584.5 T +2 F +(........................................................................................................) 212.1 581 T +( 12) 472.24 581 T +( ) 87.88 566 T +3 F +(J8@a$NJT=8) 127.86 569.5 T +2 F +(....................................................................................................................) 182.12 566 T +( 13) 472.24 566 T +( ) 87.88 551 T +3 F +(F~NOJ8;zL>4A;zJQ49) 127.86 404.5 T +2 F +(................................................................................................................) 192.11 401 T +( 21) 472.24 401 T +( ) 87.88 386 T +3 F +(J8@a0\134F0) 127.86 389.5 T +2 F +(........................................................................................................................) 172.12 386 T +( 24) 472.24 386 T +( ) 87.88 371 T +3 F +(C18lEPO?) 127.86 374.5 T +2 F +(........................................................................................................................) 172.12 371 T +( 26) 472.24 371 T +( ) 87.88 356 T +3 F +(C18l>C5n) 127.86 359.5 T +2 F +(........................................................................................................................) 172.12 356 T +( 27) 472.24 356 T +( ) 87.88 341 T +3 F +(=$@5) 127.86 344.5 T +2 F +(................................................................................................................................) 152.13 341 T +( 28) 472.24 341 T +( ) 87.88 325.99 T +3 F +(%3!<%IF~NO) 127.86 329.49 T +2 F +(....................................................................................................................) 182.12 325.99 T +( 28) 472.24 325.99 T +( ) 87.88 310.99 T +3 F +(%P%C%U%!%b!<%I;~$NJ8;zF~NOA`:n) 127.86 314.49 T +2 F +(............................................................................) 282.06 310.99 T +( 30) 472.24 310.99 T +( ) 87.88 295.99 T +3 F +(%5!<%P:F@\134B3A`:n) 127.86 299.49 T +2 F +(........................................................................................................) 212.1 295.99 T +( 30) 472.24 295.99 T +( ) 87.88 280.99 T +3 F +(%+%?%+%J8l<+F0EPO?A`:n) 127.86 284.49 T +2 F +(............................................................................................) 242.08 280.99 T +( 31) 472.24 280.99 T +( ) 87.88 265.99 T +3 F +(2>L>4A;zJQ49$N$7$+$?$N$^$H$a) 107.87 269.49 T +2 F +(........................................................................................) 252.08 265.99 T +( 33) 472.24 265.99 T +( ) 87.88 250.99 T +3 F +(3F%b!<%I!?5!G=$N@bL@) 107.87 254.49 T +2 F +(........................................................................................................) 212.1 250.99 T +( 35) 472.24 250.99 T +( ) 87.88 235.99 T +3 F +(F~NO%b!<%I@Z$j49$\050) 127.86 239.49 T +2 F +(....................................................................................................) 222.1 235.99 T +( 35) 472.24 235.99 T +( etc. \050) 87.88 220.99 T +3 F +($=$NB>) 147.84 224.49 T +2 F +(\051 ) 177.82 220.99 T +3 F +(%-!<) 183.65 224.49 T +2 F +(..........................................................................................................) 207.1 220.99 T +( 35) 472.24 220.99 T +3 F +(=i4|@_Dj$NJQ99) 87.88 209.49 T +2 F +(............................................................................................................................) 162.13 205.99 T +( 38) 472.24 205.99 T +( .sjrc ) 87.88 190.99 T +3 F +($K$h$k%f!<%6%+%9%?%^%$%:) 127.3 194.49 T +2 F +(........................................................................................) 252.08 190.99 T +( 39) 472.24 190.99 T +( ) 87.88 175.99 T +3 F +(@_Dj2DG=$J%-!<%o!<%I) 127.86 179.49 T +2 F +(................................................................................................) 232.09 175.99 T +( 40) 472.24 175.99 T +( ) 87.88 160.99 T +3 F +(%\050%9%1!<%W%7!<%1%s%9$N%3%^%s%I%-!<$X$N3d$jEv$F) 127.86 164.49 T +2 F +(............................................) 362.02 160.99 T +( 43) 472.24 160.99 T +( ) 87.88 145.99 T +3 F +(!V$=$NB>%-!l9g$N%-!<3d$jEv$F$NJQ99) 127.86 149.49 T +2 F +(............................................) 362.02 145.99 T +( 48) 472.24 145.99 T +( ) 87.88 130.99 T +3 F +(%3%s%H%m!<%k%3!<%I$N%3%^%s%I%-!<$X$N3d$jEv$F) 127.86 134.49 T +2 F +(................................................) 352.02 130.99 T +( 49) 472.24 130.99 T +FMENDPAGE +%%EndPage: "3" 4 +%%Page: "4" 4 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(-) 87.88 92.59 T +(4) 91.42 92.59 T +1 F +(!!) 97.32 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +87.88 119.06 507.41 694.5 R +V +2 F +0 X +( ) 87.88 686 T +3 F +(%j%9%H$N;XDj) 127.86 524.5 T +2 F +(....................................................................................) 262.07 521 T +( 55) 472.24 521 T +( ) 87.88 506 T +3 F +(%5!<%P$H$J$k%[%9%HL>%j%9%H$N;XDj) 127.86 509.5 T +2 F +(........................................................................) 292.06 506 T +( 56) 472.24 506 T +( ) 87.88 491 T +3 F +(%m!<%^;z$+$JJQ49%\050%i!<=hM}$N@_Dj) 127.86 494.5 T +2 F +(........................................................................) 292.06 491 T +( 56) 472.24 491 T +( sj3 ) 87.88 476 T +3 F +($N%m!<%^;z2>L>JQ495,B'$N%+%9%?%^%$%:) 122.04 479.5 T +2 F +(...................................................................) 304.55 476 T +( 57) 472.24 476 T +( ) 87.88 461 T +3 F +(%U%!%$%k$N%U%\051!<%^%C%H$*$h$S@bL@) 127.86 464.5 T +2 F +(........................................................................) 292.06 461 T +( 57) 472.24 461 T +( sj3serv ) 87.88 446 T +3 F +($N%f!<%6%+%9%?%^%$%:) 138.69 449.5 T +2 F +(............................................................................................) 242.08 446 T +( 59) 472.24 446 T +( ) 87.88 431 T +3 F +(;HMQ$9$k%]!<%H$NJQ99) 127.86 434.5 T +2 F +(................................................................................................) 232.09 431 T +( 59) 472.24 431 T +( ) 87.88 416 T +3 F +(%;%C%H%"%C%W%U%!%$%k$N%U%\051!<%^%C%H) 127.86 419.5 T +2 F +(....................................................................) 302.05 416 T +( 59) 472.24 416 T +( ) 87.88 401 T +3 F +(%;%C%H%"%C%W%U%!%$%k) 127.86 404.5 T +2 F +(................................................................................................) 232.09 401 T +( 59) 472.24 401 T +( sj3 ) 87.88 386 T +3 F +($NF0:n$KI,MW$J%?!<%_%J%k$N5!G=) 122.04 389.5 T +2 F +(...............................................................................) 274.57 386 T +( 63) 472.24 386 T +( ) 87.88 371 T +3 F +(%Y%k) 127.86 374.5 T +2 F +(................................................................................................................................) 152.13 371 T +( 63) 472.24 371 T +( ) 87.88 356 T +3 F +(%"%s%@!<%i%$%s) 127.86 359.5 T +2 F +(............................................................................................................) 202.11 356 T +( 64) 472.24 356 T +( ) 87.88 341 T +3 F +(%j%P!<%9) 127.86 344.5 T +2 F +(........................................................................................................................) 172.12 341 T +( 64) 472.24 341 T +( ) 87.88 325.99 T +3 F +(%+!<%=%k%j%/%\050%9%H) 127.86 329.49 T +2 F +(....................................................................................................) 222.1 325.99 T +( 64) 472.24 325.99 T +( ) 87.88 310.99 T +3 F +(%+!<%=%k%`!<%V) 127.86 314.49 T +2 F +(............................................................................................................) 202.11 310.99 T +( 65) 472.24 310.99 T +( ) 87.88 295.99 T +3 F +(%/%j%"%\050%s%I%*%V%i%$%s) 127.86 299.49 T +2 F +(............................................................................................) 242.08 295.99 T +( 65) 472.24 295.99 T +3 F +(%m!<%^;zF~NO) 87.88 284.49 T +2 F +(................................................................................................................................) 152.13 280.99 T +( 66) 472.24 280.99 T +( ) 87.88 265.99 T +3 F +(%m!<%^;zF~NO$N%k!<%k) 107.87 269.49 T +2 F +(........................................................................................................) 212.1 265.99 T +( 67) 472.24 265.99 T +(2) 87.88 235.99 T +3 F +(>O) 95.38 239.49 T +(F|K\1348lF~NO%i%$%V%i%j) 107.87 239.49 T +2 F +(sj3lib ) 210.32 235.99 T +(..............................................................................................) 237.09 235.99 T +( 71) 472.24 235.99 T +3 F +(F|K\1348lF~NO%i%$%V%i%j$N35MW) 87.88 224.49 T +2 F +(....................................................................................................) 222.1 220.99 T +( 72) 472.24 220.99 T +( ) 87.88 205.99 T +3 F +(F|K\1348lF~NO%i%$%V%i%j$NFCD') 107.87 209.49 T +2 F +(............................................................................................) 242.08 205.99 T +( 73) 472.24 205.99 T +( sj3lib ) 87.88 190.99 T +3 F +(%i%$%V%i%j) 152.58 194.49 T +2 F +(..........................................................................................................) 207.1 190.99 T +( 73) 472.24 190.99 T +(sj3lib ) 87.88 175.99 T +3 F +(%i%$%V%i%j) 112.6 179.49 T +2 F +(..........................................................................................................................) 167.12 175.99 T +( 74) 472.24 175.99 T +( ) 87.88 160.99 T +3 F +($O$8$a$K) 107.87 164.49 T +2 F +(................................................................................................................................) 152.13 160.99 T +( 75) 472.24 160.99 T +( ) 87.88 145.99 T +3 F +($4;HMQA0$K) 127.86 149.49 T +2 F +(....................................................................................................................) 182.12 145.99 T +( 75) 472.24 145.99 T +( ) 87.88 130.99 T +3 F +(%W%m%0%i%`$r=q$/$K$"$?$C$F$NCm0UE@) 127.86 134.49 T +2 F +(....................................................................) 302.05 130.99 T +( 75) 472.24 130.99 T +FMENDPAGE +%%EndPage: "4" 5 +%%Page: "5" 5 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +1 F +0 X +(!!) 490.19 95.32 T +0 F +(-5) 497.97 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +87.88 119.06 507.41 694.5 R +V +2 F +0 X +( ) 87.88 686 T +3 F +(%i%$%V%i%j$N;HMQJ}K!) 127.86 689.5 T +2 F +(................................................................................................) 232.09 686 T +( 75) 472.24 686 T +( ) 87.88 671 T +3 F +(<-=q) 127.86 674.5 T +2 F +(................................................................................................................................) 152.13 671 T +( 75) 472.24 671 T +( ) 87.88 656 T +3 F +(9=B$BN$N@bL@) 127.86 659.5 T +2 F +(................................................................................................................) 192.11 656 T +( 76) 472.24 656 T +( ) 87.88 641 T +3 F +(4XO"%U%!%$%k) 127.86 644.5 T +2 F +(................................................................................................................) 192.11 641 T +( 76) 472.24 641 T +( sj3lib ) 87.88 626 T +3 F +(%i%$%V%i%j0lMw) 132.59 629.5 T +2 F +(..........................................................................................................) 207.1 626 T +( 77) 472.24 626 T +( ) 87.88 611 T +3 F +($O$8$a$K) 127.86 614.5 T +2 F +(........................................................................................................................) 172.12 611 T +( 77) 472.24 611 T +( sj3_open ) 87.88 596 T +(..........................................................................................................................) 167.12 596 T +( 78) 472.24 596 T +( sj3_open_with_list ) 87.88 581 T +(..........................................................................................................) 207.1 581 T +( 80) 472.24 581 T +( sj3_close ) 87.88 566 T +(.........................................................................................................................) 169.62 566 T +( 82) 472.24 566 T +( sj3_getkan ) 87.88 551 T +(.......................................................................................................................) 174.62 551 T +( 84) 472.24 551 T +( sj3_douoncnt ) 87.88 536 T +(...................................................................................................................) 184.62 536 T +( 86) 472.24 536 T +( sj3_getdouon ) 87.88 521 T +(...................................................................................................................) 184.62 521 T +( 87) 472.24 521 T +( sj3_gakusyuu ) 87.88 506 T +(..................................................................................................................) 187.11 506 T +( 89) 472.24 506 T +( sj3_gakusyuu2 ) 87.88 491 T +(................................................................................................................) 192.11 491 T +( 90) 472.24 491 T +( sj3_touroku ) 87.88 476 T +(.....................................................................................................................) 179.62 476 T +( 91) 472.24 476 T +( sj3_syoukyo ) 87.88 461 T +(....................................................................................................................) 182.12 461 T +( 94) 472.24 461 T +( ) 87.88 446 T +(................................................................................................................................................) 112.15 446 T +( 97) 472.24 446 T +( sj3_lockserv ) 87.88 431 T +(....................................................................................................................) 182.12 431 T +( 97) 472.24 431 T +( ) 87.88 416 T +(................................................................................................................................................) 112.15 416 T +( 98) 472.24 416 T +( sj3_unlockserv ) 87.88 401 T +(................................................................................................................) 192.11 401 T +( 98) 472.24 401 T +FMENDPAGE +%%EndPage: "5" 6 +%%Page: "6" 6 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(-) 87.88 92.59 T +(6) 91.42 92.59 T +1 F +(!!) 97.32 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +87.88 119.06 507.41 694.5 R +V +FMENDPAGE +%%EndPage: "6" 7 +2 18 0 -0.38 /GothicBBB-Medium-H JFMDEFINEFONT +3 24 0 -0.38 /GothicBBB-Medium-H JFMDEFINEFONT +4 9.21 0 -0.38 /Ryumin-Light-H JFMDEFINEFONT +5 9.21 /Times-Roman FMDEFINEFONT +6 9.21 0 -0.38 /GothicBBB-Medium-H JFMDEFINEFONT +7 72 /Helvetica-BoldOblique FMDEFINEFONT +%%Page: "7" 7 +595.3 841.9 0 FMBEGINPAGE +87.88 629.3 507.41 629.3 2 L +7 X +0 K +V +3 H +2 Z +0 X +N +2 F +(>O) 489.42 655.73 T +528.66 629.3 565.51 705.84 R +V +0.5 H +0 Z +N +3 F +(F|K\1348lF~NO) 387.48 603.13 T +4 F +(F|K\1348l$rF~NO$9$k>l9g$O!"2>L>4A;zJQ49%f!<%F%#%j%F%#$r;HMQ$7$^$9!#) 197.01 553.9 T +(2>L>4A;zJQ49%f!<%F%#%j%F%#$K$O!") 197.01 537.61 T +5 F +(sj3) 346.53 534.38 T +4 F +($,MQ0U$5$l$F$$$^$9!#) 359.57 537.61 T +($3$3$G$O!") 197.01 521.31 T +5 F +(sj3 ) 245.32 518.08 T +4 F +($N5!G=$*$h$S;HMQJ}K!$K$D$$$F@bL@$7$^$9!#) 258.36 521.31 T +6 F +(F|K\1348lF~NO$N35MW) 197.01 488.71 T +(#S#J#3F|K\1348lF~NO%U%m%s%H%\050%s%I%W%m%;%C%5) 197.01 472.41 T +(=i4|@_Dj$NJQ99) 197.01 456.12 T +7 F +( 1) 379.81 646.06 T +FMENDPAGE +%%EndPage: "7" 8 +8 19.84 0 -0.38 /GothicBBB-Medium-H JFMDEFINEFONT +9 9.21 /Times-Bold FMDEFINEFONT +%%Page: "8" 8 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 793.71 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-8) 87.88 92.59 T +1 F +(!!F|K\1348lF~NO$N35MW) 103.23 95.32 T +8 F +(F|K\1348lF~NO$N35MW) 87.88 741.27 T +87.88 119.06 507.41 694.5 R +7 X +V +4 F +0 X +(F|K\1348l$rF~NO$9$k>l9g$O!"2>L>4A;zJQ49%f!<%F%#%j%F%#$r;HMQ$7$F9T$$$^) 195.6 689.89 T +($9!#) 195.6 673.59 T +(2>L>4A;zJQ49%f!<%F%#%j%F%#$K$O!") 195.6 657.29 T +5 F +(sj3) 345.12 654.07 T +4 F +($,MQ0U$5$l$F$$$^$9!#) 358.16 657.29 T +9 F +(sj3 :) 195.6 637.77 T +4 F +(%?!<%_%J%k>e$GF0:n$7$^$9!#?7$7$$JQ498zN\050$NNI$$JQ49%\050%s) 252.29 641 T +(%8%s$r;HMQ$7$?!"%5!<%P!&%/%i%$%"%s%HJ}<0$N%U%m%s%H%\050%s) 252.29 624.7 T +(%I$G$9!#) 252.29 608.4 T +($3$3$G$O!") 195.6 592.1 T +5 F +(sj3 ) 243.91 588.88 T +4 F +($N5!G=$K$D$$$F@bL@$7$^$9!#) 256.95 592.1 T +FMENDPAGE +%%EndPage: "8" 9 +10 7.8 /Helvetica FMDEFINEFONT +11 14.17 /Helvetica-Bold FMDEFINEFONT +12 14.17 0 -0.38 /GothicBBB-Medium-H JFMDEFINEFONT +%%Page: "9" 9 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +1 F +0 X +(F|K\1348lF~NO$N35MW!!) 422.03 95.32 T +0 F +(1-9) 492.07 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3) 472.17 736.06 T +1 F +($NFCD') 484.07 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +11 F +0 X +(sj3) 87.88 682.45 T +12 F +($NFCD') 111.11 687.41 T +5 F +(sj3 ) 195.6 652.65 T +4 F +($O!"%5!<%P%/%i%$%"%s%HJ}<0$r:NMQ$7$?F|K\1348lF~NO%U%m%s%H%\050%s%I%W%m) 208.64 655.87 T +(%;%C%5$G$9!#) 195.6 639.58 T +5 F +(sj3 ) 195.6 620.05 T +4 F +($O!"/$J$/$F$9$_$^$9!#$^$?%f!<%6<-=q$b%5!<%PB&$@$1$K;}$F$P) 209.77 574.38 T +(NI$/!"0l?M$N%f!<%6$,B?$/$N%^%7%s$G;HMQ$9$k>l9g$KJXMx$G$9!#) 209.77 558.09 T +("") 195.6 525.49 T +5 F +(sj3 ) 209.77 522.27 T +4 F +($O%;%C%H%"%C%W%U%!%$%k) 222.81 525.49 T +5 F +(.sjrc ) 326.32 522.27 T +4 F +($r;H$&$3$H$K$h$j!"%3%^%s%I%-!O0l3gJQ49) 87.88 635.68 T +4 F +(F|K\1348lJQ49$G$O!"JQ49BP>]$NF~NOJ8;zNs$KBP$7$F!"J8>O0l3gJQ49$r9T$$$^) 195.6 619.03 T +($9!#JQ49$OJQ49%-!<$r2!$9$3$H$K$h$C$F9T$o$l!"JQ49BP>]Cf$NJ?2>L>$N$_) 195.6 602.73 T +($,JQ49$5$l$^$9!#$=$l0J30$NJ8;z]$K9T$$!"8=:_BP>]$H$J$C$F$$$kJ8@a$O%j%P!<%9) 195.6 553.83 T +5 F +(\050) 418.73 550.61 T +4 F +(H?E>) 421.79 553.83 T +5 F +(\051 ) 440.19 550.61 T +4 F +($GI=<\050$5$l$^) 445.56 553.83 T +($9!#8=:_BP>]$H$J$C$F$$$kJ8@a$r!V%+%l%s%HJ8@a!W$H8F$S$^$9!#) 195.6 537.54 T +5 F +(sj3 ) 195.6 518.01 T +4 F +($r;HMQ$7$F$$$k>l9g$NJQ49Nc!') 208.64 521.24 T +6 F +(J8@a$N0\134F0) 195.6 407.16 T +4 F +(%+%l%s%HJ8@a$N0\134F0$O!""*) 195.6 390.86 T +5 F +(\050) 308.32 387.64 T +4 F +(1&0\134F0) 311.38 390.86 T +5 F +(\051) 338.98 387.64 T +4 F +($*$h$S"+) 344.35 390.86 T +5 F +(\050) 383.46 387.64 T +4 F +(:80\134F0) 386.52 390.86 T +5 F +(\051) 414.12 387.64 T +4 F +(%-!<$G9T$$$^$9!#) 419.49 390.86 T +(1&!"$"$k$$$O:8$K%+%l%s%HJ8@a$,0\134F0$7$^$9!#) 195.6 374.56 T +6 F +(J8@a$N3HD%!"=L>.) 195.6 341.96 T +4 F +(%+%l%s%HJ8@a$N3HD%!"$*$h$S=L>.$O!"",) 195.6 325.67 T +5 F +(\050) 363.52 322.44 T +4 F +(3HD%) 366.59 325.67 T +5 F +(\051) 384.99 322.44 T +4 F +($*$h$S"-) 390.36 325.67 T +5 F +(\050) 429.46 322.44 T +4 F +(=L>.) 432.53 325.67 T +5 F +(\051) 450.93 322.44 T +4 F +(%-!<$G9T$$) 456.3 325.67 T +($^$9!#) 195.6 309.37 T +5 F +(1 ) 225.51 306.14 T +4 F +(J8;z$:$D%+%l%s%HJ8@a$,3HD%!"$"$k$$$O=L>.$7$^$9!#) 232.41 309.37 T +6 F +(J8@a$N:FJQ49) 195.6 276.77 T +4 F +(%+%l%s%HJ8@a$N:FJQ49$O!"JQ49%-!<$G9T$$$^$9!#) 195.6 260.47 T +(JQ49%-!<$r2!$9$H!"8uJd) 400.32 260.47 T +($,I=<\0502DG=J8;z$G$"$l$P0lEY$K) 195.6 244.18 T +5 F +(5) 326.72 240.95 T +4 F +($D$^$G%,%$%I%i%$%s$KI=<\050$5$l$^$9!#) 333.62 244.18 T +5 F +(1 ) 195.6 126.87 T +4 F +(!A) 202.5 130.1 T +5 F +(5 ) 214 126.87 T +4 F +($N?t;z$r2!$9$3$H$G!"$=$N8uJd$,A*Br$5$l$^$9!#)8$9(9%8$8$8$8#9"V" +403FFFC04008203FC8403FC03FD02000403FC03FFFC8423FC0403FC8423FC0403FC03FE18&<#8"8";"<#8"8"8&8"8(C" +1E00300030883E01BFC80180C402A000023FC4C0A000C03FC18003EF8(8*8"9%:"9)8.B" +02001000100008FFFF88443FCFFFBFFF08C4221FFF00441FFF3FC1101FFF4400403FC11000403FC0800080E8A+;%=,:#:$B" +C11008883FD49201103FC1FF1001C24400023FC20800023FC2C208840120EEA*<#@)8.B" +C9123F093FE4920912E2224900043FC40400044900423FC40400423FD1E211C2EF7)9585 +0F023E170F1E0E3F71108FFBFC49289113FCE3F0E803FD22200023FCE8E0F0E8DFFF00083FC80200083FDFFF0FFF3FC8020FFF3FCF110F017)8.8*85 +1082111890911108D27088A93FFFFF9270BFD10811C4220FFE3FD19111119C04000503FD7FD80503FC04000823FD7FD80823FC1110200BF*8#9):):'<$8% +7F808210908090A088E480C4922480BFE0882080403FE0A0A120BF603FE0400060E04000C210820D#9$9%9%8%:$;$8"<"=" +400F8F90BFC8880ACF08883FFF003FC9FF20A13F403FC040C0087"9%8%9&9%:#9"?#9) +109090A008C1FC0C8181FC3FE008C8280442203F80810201023FC41384083F7"9";*<"8"=#9#9#9#:" +20A0C20838103FDFFF8208F07EFFFFC7FCFFFFC7FC109#9-8)8"808$8$C" +111088BFFFC51009FFBFC000051088A0903FD0440440A0BFFFC04000803FC04000803FC04002C04002C81008E07(9/9"8%J%B" +21821E10A19110D8A008283FC92218A03FD08890B80AD09111106C92008FCEF7/8)8#8&9#9#9#9( +1EFFD039DEDE0F073FFFC07008241100703FCF070F388209CF0E0F8F3F01000100043404343FD0A0110B7$`85:":":#9#8% +0000108C38C08423FD088838C3FC00000103FD10110C03FC00000000686080C880C400088BF9"=+9(>"8$:.A" +3CFC03B981BFE088BC03BF003FD600A03FBF00FFFF8010003FFFFF90003FC00000783FEA"8";h9b9%8j8h" +00000000000010F +ENDBITMAP +%%EndBinary +188.93 442.24 500.74 498.93 R +0.5 H +0 Z +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 151 507.41 232.48 C +96.39 151 507.41 232.48 R +7 X +0 K +V +0 X +%%BeginBinary: 2312 +644 134 309.12 64.32 0 190.99 159.74 BEGINBITMAPBWc + + +=" +7F<" +E7<# +DAFFJ" +OBF0 +(J" +E4C608F0E4F1D9O;FF( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<"J" +6BO;F07& +7BEF5E5B6F( +C91BC6210930EB)J" +FFD7FFFFFFFFDCFFO:FF7":" +EFDF7":# +FFFF7F<" +E7<# +DAFF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F(J" +C91BC6210930EBO;F0)J" +FFD7FFFFFFFFDCFFO:FF7":" +EFDF7":# +FFFF7F<" +E7<# +DAFF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F( +C91BC6210930EB) +FFD7FFFFFFFFDCFF7":" +EFDF7":-8#<# +FFFF7FC04000023FBFFFFEFF7FFBFEC03F<"8*9"8" +E7A00FFF3BBDE0007F6F00FC<18" +DAFFC09008023B81EF7FF006EFFFF7FFFE>#9):" +C108BFEF7BFF7DF7C1EDE7>#:(9# +C2046E01FF7BF73FDDEE1F+8/ +E4C608F0E4F1D9FFC7FA00006DDFFF7777FFFBFF7FCFF1FF38& +DB6F676F5B6EE5FFC80188023FFFEBDFC000FA007E33FD75 +9776F7F5B5F7BFFF0000FFE2DB6EFDEFFBFEFFFF7FBE9FDFDF07&8+:"8" +76EF705B40C00408022EAEE800FF7FF78F7*8'8' +7AEF6F5B5FF4FFCFFE2802EFDFFC01E7FBFFFDFBFF7$8%8'8";" +7DEF5FF37FC0082EBEEFA7F1FDD7E3<"<);" +6B8EEF7BCDFDEB7FF7DD7&9"8)9$ +7BEF5E5B6F102DB6ECFDFC01EBBFF3F77F(;)8% +C91BC6210930EB2BBAEFFF7DFDF7C0FC0FF7BF19"8& +FFD7FFFFFFFFDCFFC0200FFE2FFEE000FFFFFFEFC0637":"9#j +EFDF080217":Z +FF8 + + +J" +OBF8J" +OBFF + + + + +J" +OBF9J" +OBFF +J" +OBFEJ" +OBFFJ" +OBFEJ" +OBFF +J" +OBF0J" +OBFF + + + + + + + + + + + + + + + + + + + + + + + + + + + +J" +OBF0j" +OB0F$85Z" +400080E3FF87FC3FFFFBFFFFDFFF87FC3FFFFFFFFF87FC3FFFBFFFFF87FC3FFF7FFFFF87FC3FFFFBFFEF*8(8-8&9"J" +440084040F3FFBFBFB5FF000FFFBF9FBF7FFFBF1FBFFE404FFFBFDFB087FFBC0FB7FEE6)9$8"8#8"8#8"8#8"8#J" +5C011C1C10BFFBE36FF7FDF6EFF6EEEDF6F9ED6BDFC000FEE&8"8#:#8"8#8"8"8"<$ +4401040411FBFEF7EF7BEEDF7B16F5DDFFFFFF7"8#:#:"8"<#;#<"J" +02203FFDFBE7EDE5F4EB0BFBFEC@#:"8#8"8#8"9%8#J" +F805FFEEDEFFED16ED6AFFFBD1F801FEF:";$9&8#8";"9"8# +2EF7FE77FEFBFFEF5EFEFB56F7CEFBFB7"8";%8"9"8"8#8"8#8# +0431CFFFF001FDBEF1E554DDF50ADF7B:#:%<"8"8#;& +20BFFFFBF7FD5EFEED16ED7B7FFBFF@#:"8#8#8"8%<# +F001FBEEEEFF7BF6C07BFFC1F8037">#:"8#8"<&8"8# +08FFF7F7EDF6DFFDFBFFFB5BCFFFBFG%;$>"8# +7BFFEBFEC0007FDFFBBB7"8#;":"8"9':#8#8" +10113FEFEFEFEEFBFFFEFFFFF74BEEFBBD&8">"<"8#8"9%8" +5F101F1F0EE0E0F1FDF3F028FFFBF1F7&8"9$8&8"8#8"8#8"8# +4020000000FFDFF001FFFBFFE000FFF3FCFFECEBFFEFBE<$95 +F87FC3>F7FDFFF87FC3FFEFFEFFF87FC3FFCFFF7FF87FC3FFDFFBFFF87FC3FFDC3E#9j" +0000O=0F +ENDBITMAP +%%EndBinary +190.95 160.25 500.32 224 R +0.5 H +0 Z +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "10" 11 +%%Page: "11" 11 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +1 F +0 X +(F|K\1348lF~NO$N35MW!!) 416.12 95.32 T +0 F +(1-11) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +1 F +0 X +(l9g$O!":F$S) 195.6 689.89 T +(JQ49$+"*) 253.11 689.89 T +5 F +(\050) 292.21 686.67 T +4 F +(1&0\134F0) 295.28 689.89 T +5 F +(\051) 322.88 686.67 T +4 F +(!"$b$7$/$O%9%Z!<%9%-!<$r2!$9$H!"B3$-$N) 325.95 689.89 T +(8uJd$rI=<\050$7$^$9!#) 195.6 673.59 T +(!VJ?2>L>!W!VA43QJR2>L>!W!VH>3QJR2>L>!W!VA43Q%"%k%U%!%Y%C%H!W!VH>3Q) 195.6 641 T +(%"%k%U%!%Y%C%H!W!V%3!<%I!W$N$=$l$>$l$N%-!<$r2!$9$H!"%+%l%s%HJ8@a) 195.6 624.7 T +($O!"$=$l$>$l$NJ8;zl$G) 195.6 608.4 T +(4A;zJQ49$5$l$^$9!#$^$?!"%+%l%s%HJ8@a$,4A;zJQ49$5$l$?J8@a$N$H$-$K) 195.6 592.1 T +(L5) 492.33 592.1 T +(JQ49%-!<$r2!$9$HJ?2>L>$K$J$j!":FEYL5JQ49%-!<$r2!$9$HA43QJR2>L>$K$J) 195.6 575.8 T +($j$^$9!#) 195.6 559.51 T +6 F +(JQ497k2L$N7hDj) 195.6 526.91 T +4 F +(JT=8$5$l$?JQ497k2L$O!"7hDj%-!<$r2!$9$H!"%"%W%j%1!<%7%g%s$KEO$5$l$^) 195.6 510.61 T +($9!#7hDj%-!<$r2!$5$J$/$F$b!"B3$1$F%m!<%^;zF~NO$9$l$P<+F0E*$K7hDj$5) 195.6 494.31 T +($l$^$9!#) 195.6 478.01 T +13 F +("#!!J8@aD93X=,5!G=) 87.88 428.76 T +4 F +(J8@aD93X=,5!G=$r%5%]!<%H$7$F$$$^$9!#Nc$\050$P!"L>4A;zJQ49) 195.6 412.11 T +($r9T$$!"J8@aD9$rJT=8$7$F7hDj$7$?$H$7$^$9!#) 195.6 395.81 T +(!N#12sL\134!O) 231.6 363.22 T +($-$g$&$O$$$7$c$K$$$C$?!#) 231.6 346.92 T +("-) 267.6 330.62 T +(JQ49) 267.6 314.32 T +("-) 267.6 298.03 T +(:#F|;u0eL>4A;zJQ49$5$l$?$H$-$K$O!"C5n) 87.88 526.55 T +4 F +(%a%$%s<-=q$K$O$J$$J8;z$r!"%f!<%6<-=q$KEPO?$G$-$^$9!#) 195.6 509.9 T +(%f!<%6<-=q$KEPO?$7$?$$J8;z$rJT=8$7=*$o$C$?>uBV$G) 195.6 493.6 T +5 F +(\050) 418.73 490.38 T +4 F +(7hDj$9$kA0$K) 421.79 493.6 T +5 F +(\051) 477 490.38 T +4 F +(!") 480.06 493.6 T +(!VEPO?!W$NA`:n$r$7$^$9!#) 195.6 477.3 T +(EPO?$5$l$kJ8;z$O!"%j%P!<%9) 195.6 379.52 T +5 F +(\050) 317.52 376.3 T +4 F +(H?E>) 320.58 379.52 T +5 F +(\051 ) 338.98 376.3 T +4 F +(I=<\050$5$l$F$$$^$9$N$G!""*) 344.35 379.52 T +5 F +(\050) 457.06 376.3 T +4 F +(1&0\134F0) 460.12 379.52 T +5 F +(\051) 487.73 376.3 T +4 F +(!") 490.79 379.52 T +("+) 195.6 363.23 T +5 F +(\050) 207.1 360 T +4 F +(:80\134F0) 210.17 363.23 T +5 F +(\051) 237.77 360 T +4 F +(!"",) 240.84 363.23 T +5 F +(\050) 261.54 360 T +4 F +(3HD%) 264.61 363.23 T +5 F +(\051) 283.01 360 T +4 F +(!""-) 286.07 363.23 T +5 F +(\050) 306.78 360 T +4 F +(=L>.) 309.84 363.23 T +5 F +(\051) 328.24 360 T +4 F +(%-!<$r;H$C$F;XDj$7$^$9!#) 333.61 363.23 T +(%j%P!<%9$7$F$$$kHO0O$O!"J8@aC10L$G0\134F0!"3HD%$*$h$S=L>.$G$-$^$9!#$J) 195.6 346.93 T +($*!"0lEY3HD%$5$l$?%j%P!<%9HO0O$O!"=L>.$7$F85$NHO0O$KLa$5$J$1$l$P0\134) 195.6 330.63 T +(F0$G$-$^$;$s!#) 195.6 314.33 T +(;XDj$7$?HO0O$NJ8;z$KBP$9$k!VFI$_!W$b<+M3$K@_Dj$G$-$^$9$N$G!"D9$$J8) 195.6 298.03 T +(;zNs$r!"C;$$FI$_$GEPO?$7$F$*$/$HJXMx$G$9!#) 195.6 281.74 T +(0lEYEPO?$7$?J8;z$r>C5n$9$k>l9g$b!"F1MM$K9T$&$3$H$,$G$-$^$9!#) 195.6 249.14 T +87.88 119.06 507.41 694.5 C +96.39 384.13 507.41 465.61 C +96.39 384.13 507.41 465.61 R +7 X +0 K +V +0 X +%%BeginBinary: 2112 +644 134 309.12 64.32 0 192.34 392.71 BEGINBITMAPBWc + + +=" +7F<" +E7<# +DAFFJ" +OBF0 +(J" +E4C608F0E4F1D9O;FF( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<"J" +6BO;F07& +7BEF5E5B6F( +C91BC6210930EB)J" +FFD7FFFFFFFFDCFFO:FF7":" +EFDF7":# +FFFF7F<" +E7<# +DAFF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F(J" +C91BC6210930EBO;F0)J" +FFD7FFFFFFFFDCFFO:FF7":" +EFDF7":# +FFFF7F<" +E7<# +DAFF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F( +C91BC6210930EB) +FFD7FFFFFFFFDCFF7":" +EFDF7":1 +FFFF7FC040108000823BFFFBF7F7F7C03F<"9+ +E78880A044BBFCFBEBF7EF- +C040010008102EDFFBBEDDBE>- +CFFE210000FF36DFE0FF6B805 +4E4C608F0E4F1D9FFC84212FF008135DF6E80F7BE(9* +DB6F676F5B6EE5009100FF00406EF7ED74 +776F7F5B5F7BFFCFFE089138813BDDE0F7DD807&8#8"9% +76EF705B40C84208EEF741F77'9, +7AEF6F5B5FF413FF88FF005DEE007713407$80 +7DEF5FF37FCFFE312208812BDDE0F7D5D4C0<&9$8" +6B7FC1501129DDFBB57&8#8) +7BEF5E5B6FC24888FF2ABDC077D5B65 +4C91BC6210930EB7FCC4613FF88001BBDFBF7D776.;$ +FFD7FFFFFFFFDCFFF041920216D6F7407":*a +EFDFFFC040101C21FF807":Z +FF0 + + +J" +OBF8J" +OBFF + + + + +J" +OBF9J" +OBFF +J" +OBFEJ" +OBFFJ" +OBFEJ" +OBFF +J" +OBF0J" +OBFF + + + + + + + + + + + + + + + + + + + + + + + + + + + +J" +OBF0j" +OB0F0Z" +400404023FF7EF7FFEFFFFFBBFFFBFO3EF.8":&J" +5FC80A7F3FF06040007F3FFBBEF3EFFCFEFE7FO)E618(J" +40B211023FEBD7DFFEFFBFFBB1E000F9C0FFF7FEFB7F7BO)EE$85 +5114205DDBBDEDEF767FB8FEFFEFBFFDC2FFFEFFECD7FA7DF/9+J" +4A08007E3FFDFEDED6F81FC0BF6FE3DFFFDFEE3DEF1FEFF7O'EC08+J" +44061F023FC0205802FEFDFBBF7FFDFFBFFF3FF1FFF0DFEFFBO'EF09* +4FFD8402BFFDEEDEDEFEFEFBC070017FFEFFFDFFFFEFEFFD(8':"8$ +700004FFBFE02EFD3DFAFFFFBFFDF0FFF7-="8& +47FC3F083FEDAEDEDAFDD3F9FB8FFF8BEFFE5 +:440404483FE02ED002FBCFF380FBBDFBFDFEFFFDFFFBFFFC73EE8.:"9# +252CBFEDAEDEDEF79FCBBEFB81FEFBFF(8$8$8#8$ +47FC151B3FE028FF5FFBBFFBFBFF7FF7FFF5/9'9" +4208142A3FFDEFDDDEFEDFFB80F5FF7FFF9FF77FFF29'J" +410804C93FC02F5BDEFDFFFBBEF6BFFDE7EFF7BFF9FFFBO(E07):-J" +108708BFFDEF5FFEEF3FFE1FFF9FFFF7EFC07E03O)EF5 +:7FFFB8383FFDF04000FE01E380DFC07FFFFFE3FFFBEFFFFFFFFFj" +OB0F +ENDBITMAP +%%EndBinary +190.95 393.38 500.95 457.75 R +0.5 H +0 Z +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +97.64 138.24 507.41 237.45 C +97.64 138.24 507.41 237.45 R +7 X +0 K +V +92.03 148.66 489.73 222.41 R +V +6 F +0 X +($4Cm0U) 208.96 217.8 T +4 F +(EPO?$G$-$kC18l$ND9$5$N8B3&$O!"EPO?$9$k4A;z!"FI$_!"$H$b$K) 208.96 203.59 T +5 F +(30) 468.89 200.37 T +4 F +(J8) 480.4 203.59 T +(;zDxEY$^$G$G$9!#$?$@$7!"%?!<%_%J%k$N%+%i%`?t$N@\0518B$K$h$j!"D9) 208.96 187.29 T +($$4A;zJ8;zNs$HFI$_$rF~NO$9$k>l9g$KITET9g$,5/$3$k$3$H$,$"$j$^) 208.96 170.99 T +($9!#) 208.96 154.7 T +195.95 143.58 496.57 227.95 R +0.5 H +0 Z +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "12" 13 +%%Page: "13" 13 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +1 F +0 X +(F|K\1348lF~NO$N35MW!!) 416.12 95.32 T +0 F +(1-13) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +1 F +0 X +(L>4A;zJQ498e$KF~NO$7$?J8;zNs$r!"J8@aC10L$KJT=8$G$-$^$9!#$3$l$K$h) 195.6 672.88 T +($j!"F~NO4V0c$\050$J$I$r=$@5$G$-$^$9!#) 195.6 656.58 T +(!VJT=8!W5!G=$rA*Br$9$k$H!"%,%$%I%i%$%s$NI=<\050$,!NJT=8!O$KJQ$o$j!"BP) 195.6 640.29 T +(>]$H$J$kJ8@a$NJQ49A0$KF~NO$5$l$?$R$i2>L>$,A43QJ8;z$GI=<\050$5$l$^$9!#) 195.6 623.99 T +($3$3$G) 195.6 509.91 T +5 F +(vi\0501\051 ) 225.5 506.69 T +4 F +($K=`5r$7$?e) 243.73 437.58 T +195.6 427.13 238.1 440.88 R +7 X +V +5 F +0 X +([n] space) 195.6 433.05 T +243.73 410.93 498.1 426.56 R +7 X +V +4 F +0 X +(%+!<%=%k$r) 243.73 421.95 T +5 F +([n) 292.03 418.73 T +4 F +(8D) 302 421.95 T +5 F +(] ) 311.2 418.73 T +4 F +(:8$K0\134F0$9$k) 316.57 421.95 T +195.6 411.51 238.1 425.26 R +7 X +V +5 F +0 X +([n] h) 195.6 417.43 T +243.73 395.31 498.1 410.93 R +7 X +V +4 F +0 X +(F1>e) 243.73 406.33 T +195.6 395.88 238.1 409.63 R +7 X +V +5 F +0 X +([n] BS) 195.6 401.8 T +243.73 379.68 498.1 395.31 R +7 X +V +4 F +0 X +(%+!<%=%k$r@hF,$K0\134F0$9$k) 243.73 390.7 T +195.6 380.26 238.1 394.01 R +7 X +V +5 F +0 X +(0) 195.6 386.18 T +243.89 364.18 498.27 379.81 R +7 X +V +4 F +0 X +(%+!<%=%k$r:G8e$K0\134F0$9$k) 243.89 375.2 T +195.76 364.76 238.26 378.51 R +7 X +V +5 F +0 X +($) 195.76 370.68 T +243.89 348.56 498.27 364.18 R +7 X +V +4 F +0 X +(DI2C) 243.89 359.58 T +5 F +(\050) 264.59 356.35 T +4 F +(%"%Z%s%I) 267.66 359.58 T +5 F +(\051 ) 304.46 356.35 T +4 F +(%b!<%I$K$J$k) 309.82 359.58 T +5 F +(\050ESC ) 367.33 356.35 T +4 F +($GJT=8%b!<%I$KLa$k) 389.57 359.58 T +5 F +(\051) 472.38 356.35 T +195.76 349.13 238.26 362.88 R +7 X +V +0 X +(a) 195.76 355.05 T +243.89 332.93 498.27 348.56 R +7 X +V +4 F +0 X +(A^F~) 243.89 343.95 T +5 F +(\050) 264.59 340.73 T +4 F +(%$%s%5!<%H) 267.66 343.95 T +5 F +(\051 ) 313.66 340.73 T +4 F +(%b!<%I$K$J$k) 319.02 343.95 T +5 F +(\050ESC ) 376.53 340.73 T +4 F +($GJT=8%b!<%I$KLa$k) 398.77 343.95 T +5 F +(\051) 481.58 340.73 T +195.76 333.51 238.26 347.26 R +7 X +V +0 X +(i) 195.76 339.43 T +243.89 317.31 498.27 332.93 R +7 X +V +4 F +0 X +(#1J8;z$rCV$-49$\050$k) 243.89 328.33 T +195.76 317.88 238.26 331.63 R +7 X +V +5 F +0 X +(r) 195.76 323.8 T +243.89 301.68 498.27 317.31 R +7 X +V +0 X +([n] ) 243.89 309.48 T +4 F +(J8;z$rCV$-49$\050$k) 256.92 312.7 T +5 F +(\050ESC ) 332.83 309.48 T +4 F +($GJT=8%b!<%I$KLa$k) 355.07 312.7 T +5 F +(\051) 437.87 309.48 T +195.76 302.26 238.26 316.01 R +7 X +V +0 X +([n] s) 195.76 308.18 T +243.89 286.06 498.27 301.68 R +7 X +V +0 X +([n] ) 243.89 293.85 T +4 F +(J8;z$r>C5n$9$k) 256.92 297.08 T +195.76 286.63 238.26 300.38 R +7 X +V +5 F +0 X +([n] x) 195.76 292.55 T +187.2 281.51 503.45 477.14 R +0.5 H +0 Z +N +239.7 476.27 239.7 280.89 2 L +2 Z +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "13" 14 +14 9.21 /Bookman-Demi FMDEFINEFONT +%%Page: "14" 14 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-) 87.88 92.59 T +(14) 97.32 92.59 T +1 F +(!!F|K\1348lF~NO$N35MW) 109.14 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +0 X +(e0\134) 444.79 354 T +(F0) 195.6 337.7 T +5 F +(\051) 204.8 334.48 T +4 F +(!""-!J2<0\134F0) 207.87 337.7 T +5 F +(\051 ) 263.07 334.48 T +4 F +($N$$$:$l$+$N%-!<$r2!$9$H!"5-9fA*BrF~NO$r9T$&$3$H$,) 268.44 337.7 T +($G$-$^$9!#) 195.6 321.4 T +(%,%$%I%i%$%s$NI=<\050$O) 195.6 305.11 T +(!N) 287.61 305.11 T +14 F +(EUC) 296.81 301.88 T +4 F +(!O) 317.05 305.11 T +($KJQ$o$j!"$5$i$K!"e5-$N) 195.6 181.79 T +5 F +(4 ) 225.5 178.57 T +4 F +($D$N0\134F0%-!<$K$h$C$F!"8=:_A*Br$7$F$$$k5-9f$r0\134F0$7$^$9!#) 232.4 181.79 T +(I=<\050$5$l$F$$$k) 195.6 165.49 T +(%7%U%H) 262.31 165.49 T +5 F +(JIS ) 292.21 162.27 T +4 F +(%3!<%I$O!"8=:_A*Br$7$F$$$k5-9f$r0\134F0$9$k$?) 306.27 165.49 T +($S$K$O99?7$5$l$^$;$s!#) 195.6 149.19 T +87.88 119.06 507.41 694.5 C +96.39 506 507.41 644.89 C +96.39 506 507.41 644.89 R +7 X +0 K +V +129.49 618.42 235.74 634.05 R +V +5 F +0 X +( ) 129.49 626.22 T +4 F +(J8;zL>F~NO) 129.49 611.32 T +(J?2>L>) 240.37 611.32 T +334.24 600.92 497.99 615.92 R +7 X +V +5 F +0 X +([) 334.24 608.09 T +4 F +(A4$R$i$,$J) 337.3 611.32 T +5 F +(]) 383.31 608.09 T +129.49 585.92 235.74 600.92 R +7 X +V +4 F +0 X +(A43QJR2>L>F~NO) 129.49 596.32 T +(A43QJR2>L>) 240.37 596.32 T +334.24 585.92 497.99 600.92 R +7 X +V +5 F +0 X +([) 334.24 593.09 T +4 F +(A4%+%?%+%J) 337.3 596.32 T +5 F +(]) 383.31 593.09 T +129.49 570.92 235.74 585.92 R +7 X +V +4 F +0 X +(H>3QJR2>L>F~NO) 129.49 581.32 T +(H>3QJR2>L>) 240.37 581.32 T +334.24 570.92 497.99 585.92 R +7 X +V +5 F +0 X +([) 334.24 578.09 T +4 F +(H>%+%?%+%J) 337.3 581.32 T +5 F +(]) 383.31 578.09 T +129.49 555.92 235.74 570.92 R +7 X +V +4 F +0 X +(A43Q%"%k%U%!%Y%C%HF~NO) 129.49 566.32 T +(A43Q%"%k%U%!%Y%C%H) 240.37 566.32 T +334.24 555.92 497.99 570.92 R +7 X +V +5 F +0 X +([) 334.24 563.09 T +4 F +(A4%"%k%U%!) 337.3 566.32 T +5 F +(]) 383.31 563.09 T +129.49 540.92 235.74 555.92 R +7 X +V +4 F +0 X +(H>3Q%"%k%U%!%Y%C%HF~NO) 129.49 551.32 T +(H>3Q%"%k%U%!%Y%C%H) 240.37 551.32 T +334.24 540.92 497.99 555.92 R +7 X +V +5 F +0 X +([) 334.24 548.09 T +4 F +(H>%"%k%U%!) 337.3 551.32 T +5 F +(]) 383.31 548.09 T +129.49 525.92 235.74 540.92 R +7 X +V +4 F +0 X +(%3!<%IF~NO) 129.49 536.31 T +(%3!<%I) 240.37 536.31 T +334.24 525.92 497.99 540.92 R +7 X +V +5 F +0 X +([ShiftJIS] / [EUC] / [EUC) 334.24 533.09 T +4 F +(Jd=u) 432.64 536.31 T +5 F +(] /) 451.04 533.09 T +129.49 510.92 235.74 525.92 R +7 X +V +334.24 510.92 497.99 525.92 R +V +0 X +([JIS] / [JIS) 334.24 518.09 T +4 F +(Jd=u) 376.41 521.31 T +5 F +(] / [) 394.81 518.09 T +4 F +(6hE@) 408.1 521.31 T +5 F +(] / [) 426.5 518.09 T +4 F +(6hE@Jd=u) 439.79 521.31 T +5 F +(]) 476.59 518.09 T +125.95 510.6 498.45 637.48 R +0.5 H +0 Z +N +125.95 622.48 498.45 622.48 2 L +2 Z +N +125.82 620.1 498.32 620.1 2 L +N +237.2 637.48 237.2 511.22 2 L +N +331.45 636.98 331.45 510.73 2 L +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 186.4 507.41 260.82 C +96.39 186.4 507.41 260.82 R +7 X +0 K +V +0 X +%%BeginBinary: 1713 +588 118 282.24 56.64 0 206.41 195.94 BEGINBITMAPBWc + + +="J" +7FO3FD<"J" +E7O4F2<#J" +DAFFO3FF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F( +C91BC6210930EB) +FFD7FFFFFFFFDCFF7":" +EFDF7":# +FFFF7F<" +E7<# +DAFF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F( +C91BC6210930EB) +FFD7FFFFFFFFDCFF7":" +EFDF7":# +FFFF7F<" +E7<# +DAFFJ" +O;F6J" +O;F1(J" +E4C608F0E4F1D9O4F7(J" +DB6F676F5B6EE5O4F27' +776F7F5B5F7B7&J" +76EF705B40O5FD7'J" +7AEF6F5B5FF4O4FE7$8#J" +7DEF5FF37FO3F3<"J" +6BO4F87&J" +7BEF5E5B6FO5F0(J" +C91BC6210930EBO4FE)J" +FFD7FFFFFFFFDCFFO3FF7":" +EFDF7":# +FFFF7F<"8" +E71F<#J" +DAFFO3FEJ" +O;F2J" +O;FF( +E4C608F0E4F1D9( +DB6F676F5B6EE57'8"J" +776F7F5B5F7BBFO1F77&J" +76EF705B40O5F47'J" +7AEF6F5B5FF4O4FF7$8#J" +7DEF5FF37FO3F4<"8"J" +6BFFO1F87&J" +7BEF5E5B6FO5FF(8" +C91BC6210930EBBF+ +FFD7FFFFFFFFDCFFFF1F7":& +EFDFFFC0003F7":P +FF + + + + + + + + + + + + + + + + + + + + +J" +O;F0J" +O;FF + +J" +O;F0J" +O;FEJ" +O;F5J" +O;FF + + + +j" +O;0F"I"Z5V" +403F54C00017FFE7FFFFCFFE7FFCE7FFFFF87FFFFFFFC3EF&='J-:$8"A" +7E000383801FFE3F1F81E46FE0FC0E02BFFDBFFFE3FFF8FFBFFFBFBEA&='J#";":"I%B" +9110060C0618DFC31FDE7BDE5EEF'<'>"9">&C& +7F0E5F1F0F3F1FFE01F001E0E7F39FFFBFC040E120E1213B"`(:(C& +40FBFFE3FFF7FFE7FFFFBFFF1FC0E0FFFFFFFFFBJ&<&B#9"A" +L>4A;zJQ49$N$^$H$a$*$h$S3F%b!<%I$H5!G=$K$D$$$F@bL@$7$^$9!#) 195.6 673.59 T +FMENDPAGE +%%EndPage: "16" 17 +15 8 /Courier FMDEFINEFONT +16 8 /Times-Italic FMDEFINEFONT +17 9.21 /Times-Italic FMDEFINEFONT +%%Page: "17" 17 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +10 F +0 X +(SJ3 ) 330.51 92.59 T +1 F +(F|K\1348lF~NO%U%m%s%H%\050%s%I%W%m%;%C%5!!) 346.08 95.32 T +0 F +(1-17) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3 ) 456.39 736.06 T +1 F +($N5/F0J}K!) 468.5 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +11 F +0 X +(sj3 ) 87.88 682.45 T +12 F +($N5/F0J}K!) 111.5 687.41 T +4 F +($3$3$G$O!"F|K\1348l2=$5$l$?) 195.6 655.87 T +5 F +(xterm) 308.32 652.65 T +4 F +(>e$G$N) 332.08 655.87 T +5 F +(sj3) 361.99 652.65 T +4 F +($N%G%U%\051%k%HA`:n$r@bL@$7$^) 375.03 655.87 T +($9!#) 195.6 639.58 T +5 F +(sj3) 216.31 636.35 T +4 F +($r5/F0$9$kA0$K$O!"4D6-JQ?t) 229.35 639.58 T +5 F +(TERM) 351.26 636.35 T +4 F +($N@_Dj$,I,MW$G$9!#) 379.13 639.58 T +5 F +(sj3 ) 195.6 620.05 T +4 F +($O%5!<%P$H%/%i%$%"%s%H$K$o$+$l$F$$$^$9$N$G!"$=$l$>$l$N5/F0J}K!$K) 208.64 623.28 T +($D$$$F@bL@$7$^$9!#) 195.6 606.98 T +13 F +("#!!%5!<%P$N5/F0) 87.88 557.73 T +5 F +(sj3 ) 195.6 537.85 T +4 F +($N%5!<%P$r5/F0$9$k$K$O!"H$7$^$9$,!"$3$N) 407.08 379.81 T +(%*%W%7%g%s$K$h$j!";2>H$9$k%U%!%$%k$rJQ99$G$-) 303.32 363.51 T +($^$9!#) 303.32 347.21 T +FMENDPAGE +%%EndPage: "17" 18 +%%Page: "18" 18 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-) 87.88 92.59 T +(18) 97.32 92.59 T +1 F +(!!) 109.14 95.32 T +10 F +(SJ3 ) 116.92 92.59 T +1 F +(F|K\1348lF~NO%U%m%s%H%\050%s%I%W%m%;%C%5) 132.49 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3 ) 87.88 736.06 T +1 F +($N5/F0J}K!) 99.99 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +13 F +0 X +("#!!%/%i%$%"%s%H$N5/F0) 87.88 689.54 T +5 F +(sj3 ) 195.6 669.66 T +4 F +($N%/%i%$%"%s%H$r5/F0$9$k$K$O!"5/F0$7$?$$2hLL) 208.64 672.88 T +5 F +(\050) 413.36 669.66 T +4 F +(Kt$O%&%$%s%I%&) 416.43 672.88 T +5 F +(\051) 480.84 669.66 T +4 F +(>e$G) 486.2 672.88 T +(l9g$G$b!"<+F0E*$K:n@.$5$l$^$9$N$G;vA0$K%3%T!<) 195.6 563.09 T +($7$F$*$/I,MW$O$"$j$^$;$s!#) 195.6 546.79 T +13 F +("#!!%*%W%7%g%s$N@bL@) 87.88 497.54 T +9 F +(\320f ) 195.6 477.67 T +5 F +(shell) 205.57 477.67 T +(sj3 ) 303.32 477.67 T +4 F +($,%j%9%H$r;XDj$7$^) 303.32 138.63 T +FMENDPAGE +%%EndPage: "18" 19 +%%Page: "19" 19 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +10 F +0 X +(SJ3 ) 330.51 92.59 T +1 F +(F|K\1348lF~NO%U%m%s%H%\050%s%I%W%m%;%C%5!!) 346.08 95.32 T +0 F +(1-19) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3 ) 456.39 736.06 T +1 F +($N5/F0J}K!) 468.5 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +4 F +0 X +($9!#%5!<%P$H$J$k%[%9%H$rJ#?t;XDj$7$?>l9g!"$=) 303.32 689.89 T +($N=gHV$K@\134B3$r;n$_$^$9!#$3$N%*%W%7%g%s$,>JN,) 303.32 673.59 T +($5$l!"4D6-JQ?t) 303.32 657.29 T +5 F +(SJ3SERV ) 370.02 654.07 T +4 F +($b$7$/$O%;%C%H%"%C%W) 409.14 657.29 T +(%U%!%$%k) 303.32 641 T +($G$b%5!<%P$N;XDj$,$J$1$l$P!") 342.42 641 T +5 F +(localhost) 473.54 637.77 T +4 F +(>e$N%5!<%P$H$N@\134B3$r;n$_$^$9!#$9$Y$F$N%5!<%P) 303.32 624.7 T +($H@\134B3$G$-$J$+$C$?>l9g$G$b) 303.32 608.4 T +5 F +(sj3 ) 425.23 605.18 T +4 F +($O5/F0$5$l$^$9) 438.27 608.4 T +($,!"2>L>4A;zJQ49$O$G$-$^$;$s!#) 303.32 592.1 T +FMENDPAGE +%%EndPage: "19" 20 +%%Page: "20" 20 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-) 87.88 92.59 T +(20) 97.32 92.59 T +1 F +(!!) 109.14 95.32 T +10 F +(SJ3 ) 116.92 92.59 T +1 F +(F|K\1348lF~NO%U%m%s%H%\050%s%I%W%m%;%C%5) 132.49 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +0 X +(;HMQJ}K!) 87.88 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +12 F +0 X +(;HMQJ}K!) 87.88 687.41 T +5 F +(sj3 ) 195.6 652.65 T +4 F +($,5/F0$5$l$k$H!"%,%$%I%i%$%s) 208.64 655.87 T +5 F +(\050) 339.76 652.65 T +4 F +(%?!<%_%J%k$N:G2<9T$+%9%F!<%?%9%i%$) 342.82 655.87 T +(%s) 195.6 639.58 T +5 F +(\051) 204.8 636.35 T +4 F +($KuBV$r!"!VJQ49A`:nIT2D>uBV!W$H8F$V$3$H$K$7$^$9!#$3$N>uBV$G$O!") 195.6 541.8 T +(!VJQ49A`:n2D) 195.6 525.5 T +5 F +(/) 253.11 522.27 T +4 F +(IT2D@Z$j49$\050%-!uBV$r!"!VJQ49A`:n2DG=>uBV!W$H8F$V$3) 195.6 476.6 T +($H$K$7$^$9!#) 195.6 460.31 T +(I=<\050$5$l$?%,%$%I%i%$%s$N:8C<$OF~NO%b!<%I$r<\050$7!">e5-$NI=<\050$O!"%"%s) 195.6 371.54 T +(%P%C%U%!) 195.6 355.25 T +5 F +(/) 234.71 352.02 T +4 F +(H>3Q%"%k%U%!%Y%C%H$NF~NO%b!<%I$G$"$k$3$H$r<\050$7$F$$$^$9!#) 237.27 355.25 T +(B3$$$F%-!<%\134!<%I$N%U%!%s%/%7%g%s%-!<) 195.6 338.95 T +5 F +(\050F1) 363.52 335.72 T +4 F +($+$i) 378.6 338.95 T +5 F +(F10\051 ) 399.31 335.72 T +4 F +($K3d$jEv$F$i$l$F$$) 418.99 338.95 T +($k5!G=$r<\050$7!"1&B&$N) 195.6 322.65 T +5 F +(5 ) 289.91 319.43 T +4 F +($D$NMs$OJ8;z$NuBV!W$G$O!"JQ49$KI,MW$J%3%^%s%I%-!<$r%H%i%C%W$7!";XDj$5) 195.6 257.46 T +($l$?JQ49$r9T$C$F$$$-$^$9!#) 195.6 241.16 T +87.88 119.06 507.41 694.5 C +96.39 546.4 507.41 627.88 C +96.39 546.4 507.41 627.88 R +7 X +0 K +V +0 X +%%BeginBinary: 3507 +588 118 282.24 57.25 0 195.6 560.07 BEGINBITMAPBWc + + +=% +7FFFFE7F<"9"J" +E771O0F2<&J" +DAFFFFFFEEO0FF@# +DF7F +, +E4C608F0E4F1D9FFF1707F- +DB6F676F5B6EE5FFEE7F7EFF7+ +776F7F5B5F7BFFEF7F717&9# +76EF705B40FF7E7, +7AEF6F5B5FF4FFF0FF7F7F7$8& +7DEF5FF37FFF7F5F<$ +6B7FDF7&8% +7BEF5E5B6FCF5F6EFF, +C91BC6210930EB7FD0DF71, +FFD7FFFFFFFFDCFFFFEEFF7":"8" +EFDFF17":%>"?#8"="8" +FFFFFFF9FF7FFE797FF9DF'<0F" +F2F831FFCE7FF9FFF9F9FFFEF2CE72C0405F7FCE7FEF&9"9/8&="8" +ECFF6EFFDFFFF6FFF6F6FFFDECDF6CDB6F4E7FDFFFFFFFFEFFFFF7%>#:$8" +DEFF5F7FEF7FDEEEDE55"A-="A"J" +DFE77FEF6F7FFBDFEEDFFBEFD5FDFB=F08"8)?":1J" +7F71C4F161F1C8FFFFEDF17061F17DF1CE717FCE71C4F161F1C8>FF/:$85 +E7FF7EFFEEEEF36E7DEEE77FFEFFE7F5E75DB7FEEFFEE7F7DEE7DEEEF6E7FDF6EF36E7DEEE77B$8);&:"8&8' +F9FF71DF776F7DDF6F7FFDF9F5F9FBE1EFEF7BDF6F5F5F776F7DDF6F$8%?&;"8#8' +FEFF7EC077EFFDFEFBFEFBEDFFFBC0FFEEC077EFFD):";'9"8%9$J" +DF5F7F7FEEDFF7F0FBDF7BDF7BEDDFF0F0FBDFEFDFF7F0AFC8$8#9"?+=# +5F7FF5FF7DF7EF5F7FF5FFFF7F7DFF77FF7D<#;"C"8"8(J" +77DF6FDFDF6F5F7FF5DF77DFAFA59+8(J" +6CEEEEEFFFBEF77CF7DEEEF7FEF47F6F6FFFDCEFBCEFBFBFFCF5F7DCF6FEF6E6FEF77CF7DEEEF77=FF$8);'92J" +D1F1F1F0C0D0C031C63FE0D1E0D1E0C04ED0DF4010EFF0F1B0FFFBF0C0D0C031C637=F0X&U%V" +EFF9F9FFFEEEFFFFDFEFCP"?"D"J" +7FF1DF=FF8"E"?"8"A" +F9FFFFFFFF#85 +C07F8C07FCFFFFBC0FFFBF9FFC0C0FFF1F9FFF832C07FFBF1F1FB5 +"8";#8"8% +FBFBDF765EFBDF5F7B7"9"<#:' +FFFFEF7F6F7FFF5FFBFF(8"9& +EDC4E1FFEDF1E1D171D1D1F1FF7#8#8":&8" +F37DEEEECECECEF1FEEF67#8(8&9"9# +E1F7E1DF6F7FFBDF7F7FDF5F7FF179EE6E'9":%9"9# +EDF7FDFFEDC0FFFF7F7FFE7EF171;#@'8# +DFEFFF6F7FDF5F7BFF7F"9":":%J" +EFEFCFCF4F7FDFO)F0<"8":#?#J" +6FDFDF5FDF5FO FF;38$J" +EF6EFFFBEEFFFBF6F1EEEEF1EEF6FFEECEFBEEEEFBMF0-8%8)J" +C3C0C03FC3F0E1FFE0F1FFE0F1F1F1F1F1D1E0FFE0F1F1E0MFEW"P"TJ" +F9F9MFFB";" +FFFF;";#J" +F97FDF8F9#;"80:# +F17FCFFEFFEFFFFBF1F1F9FFFBF1F1F1FFF2F17F":5:"<#J" +EE4FFFFEFF7FFFDFFF7FFE3EEEEF6FFE3EEEEEEFFECEEF7FFCF0"C,:"J" +EFFBDF5F76FFFBDF5F5F7FDEEFKF2#>$:#;":#J" +DFFFFBFFFB6F7FDFDFFFJFF7)8#?"80 +F1C1C604E1F128C0F17B7FF1C8C63FDFF1C4C1F1C4F0C0E1F1C87)8"@4 +EEEEEF737DEEE777EE7EFFE7EEE76F7FDFEEF36EEEF36F77FDEEE77F7%8"9"9.8'8#J" +DF6F7777EFDFEE6E6F407BEE6E71FFF9DF6F77DF776F5F777FDF6FAF79$<"8+8#9"8"J" +76F7FDFBF1716F7FFBF1717EFFFE76FFEFF0EF49"8">#9)="J" +7AF1FF7FFF7F7F7FDF5F6F7AEFEFF7$8"E":"8":"J" +5F6F7DEF5F7D5FDFEF4%8"8"8"8#9#="8#9"J" +EF5F6EFDE17F7BDF5FDF5FEFEEDF7DCFF7$8"9$8.8'8# +6EE1FBDEFDEF77EEEEF6FFFBEEEEEEFFCEEEEF7B6EF7E1EEF7DEEEEF285 +F0F1EFDBC0C01F4638FFFDF0F7FFE0F1F16E0F1F1F1FFD1F1C61BFFF0F1C0EFF1C0E138C031C63F3T'S +FFFFEFD7FFFFDF7FFFFFFEFFEFFFFFFFFFF9D7FFFFFFFFEF8#8#8$:"?":" +C3EFE0FFFF7FDFFFEFC38&:#D":" +FFFFFFF9FFFFFFFFFF&8"9"<#J" +FBE1E1FFC1CFC1FE7FO'FD*8"="J" +F5FDFDFFEEFFFFEFF7EEFFO'FF:#;#J" +EF7FEF7FO.F6J" +O;FF":/ +EE61F128C0F17FEF71F171C4CE71F0:0J" +EEFDEEE777EE7FEEEEEE6EF35F6EEEO(FD:"8-J" +E1EF77EF7FE1DF6F5F775F5F5EO(FF:";) +EDFFEDC06FC077EEC0"9$8+ +E0EEFDF1F0FFEEDFF0DFF7EEDFDE#:"8#8# +DF7DEFFF7FFF5F<"8"9' +E15F5F5F77F5DF5E:$8'8#J" +EF7DDE4F7FEF6F4F6FEF6EO(F65J" +4CE40003FC7001F4638D0FFC730D0F0C0FBF0F07FO'F7Q#W +DF7F<#J" +E0FFO3F1<%J" +FF7FC03FO1F0<"J" +E7O4FF<# +DAFF +J" +O;F3(J" +E4C608F0E4F1D9O4FF( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F( +C91BC6210930EB)J" +FFD7FFFFFFFFDCFFO3FC7":"J" +EFDFO4FF7":%J" +FFFFFFFFFFO1FCJ" +O;F4j" +O;03"I"Z" +403FO&EF' +43E400FF00F0' +441C00080108#8#J" +48040204O5E37"8"J" +0003O6EF"9"J" +4400O6E8#9"J" +438008O5EF#9" +4070707"9"J" +0C0CO5E0$8"J" +48020602O5EF8$J" +040806O6E3"9"J" +4C04O6EF'J" +4B0402100204O5E2'J" +48F801E001F8O5EF"` +40J" +O;E0"Ij" +00O'0F +ENDBITMAP +%%EndBinary +194.7 560.2 477.2 617.7 R +0.5 H +0 Z +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 376.15 507.41 448.61 C +96.39 376.15 507.41 448.61 R +7 X +0 K +V +0 X +%%BeginBinary: 2665 +588 134 282.24 64.32 0 197.03 379.73 BEGINBITMAPBWc + + +=" +7F<" +E7<# +DAFF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F( +C91BC6210930EB) +FFD7FFFFFFFFDCFF7":" +EFDF7":#J" +FFFF7FO3FD<"J" +E7O4F2<#J" +DAFFO3FF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F( +C91BC6210930EB) +FFD7FFFFFFFFDCFF7":" +EFDF7":# +FFFF7F<" +E7<# +DAFF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F( +C91BC6210930EB) +FFD7FFFFFFFFDCFF7":" +EFDF7":% +FFFF7FC03F<" +E7<# +DAFFJ" +O;F6J" +O;F1(J" +E4C608F0E4F1D9O4F7(J" +DB6F676F5B6EE5O4FF7'J" +776F7F5B5F7BO4F27&J" +76EF705B40O5FD7'J" +7AEF6F5B5FF4O4FE7$8#J" +7DEF5FF37FO3F0<"J" +6BO4FF7&J" +7BEF5E5B6FO5F0(J" +C91BC6210930EBO4FE)J" +FFD7FFFFFFFFDCFFO3FF7":" +EFDF7":% +FFFFFFFFFF +J" +O;F2 +J" +O;FF + +J" +O;F7J" +O;F4J" +O;FFJ" +O;F4J" +O;F0J" +O;FF + + + + + + + + + + + + + + + + + + + + + + + +J" +O;F9J" +O;FFJ" +O;FAJ" +O;FF + + + +J" +O;FC +J" +O;FFJ" +O;F0J" +O;FEj +O<"?#>)8$9(9%8$8$8$8#9# +4008423FFFC04008203FC8403FC03FD02000403FC03FFFC8423FC0403FC8423FC0403FC03FE1(9"8"@#8"8";"<#8"8"8&8"8(8" +79C030000383800402883E01BFC80180C402A000023FC4C0A000C03FC18003EF(:(:*8"9%:"9)80 +50801000044440441FFF00300002FFFF88443FCFFFBFFF08C4221FFF00441FFF3FC1101FFF4400403FC11000403FC08000803FE8;#9):+;%=,:#:& +04000244000206100FFFC11008883FD49201103FC1FF1001C24400023FC20800023FC2C2088401203FEEA(:*<#@)80 +49000402100002C9123F093FE4920912E2224900043FC40400044900423FC40400423FD1E211C23FEF7(8%;"9585 +B71E31BFBF8E3B1FFF00080471108FFBFC49289113FCE3F0E803FD22200023FCE8E0F0E8DFFF00083FC80200083FDFFF0FFF3FC8020FFF3FCF110F017.:#8.8*85 +9891108404110C8000004000500FFED27088A93FFFFF9270BFD10811C4220FFE3FD19111119C04000503FD7FD80503FC04000823FD7FD80823FC1110200BF7$8#;"8%8#9):):'<$8% +90909020886080020004E480C4922480BFE0882080403FE0A0A120BF603FE0400060E04000C210820D<$:"9$8%9%8%:$;$8"<"=" +3F880040040008C8880ACF08883FFF003FC9FF20A13F403FC040C008<#:&8"8%9&9%:#9"?#9) +2008804004110050C1FC0C8181FC3FE008C8280442203F80810201023FC41384083F@#;$8*<"8"=#9#9#9#:" +3FFF080040C20838103FDFFF8208F07EFFFFC7FCFFFFC7FC10="8):*8)8"808$8$ +880040008008120010C51009FFBFC000051088A0903FD0440440A0BFFFC04000803FC04000803FC04002C04002C810088#8">&8/9"8%J' +9111101400200080D8A008283FC92218A03FD08890B80AD09111106C92008FC3FE3):':%8)8#8&9#9#9#9* +4F39DE0E5F1F0F3F0100103800C0C07008241100703FCF070F388209CF0E0F8F3F01000100043404343FD0A0110B3FEF"b:)85:":":#9#8% +4006002010030001008C38C08423FD088838C3FC00000103FD10110C03FC00000000686080C880C400088BFBa"9+9(>"8$:. +02FC03B981BFE088BC03BF003FD600A03FBF00FFFF8010003FFFFF90003FC00000783F"@"(8/9"8%J' +9110080001092008FCD8A008283FC92218A03FD08890B80AD09111106C92008FC3FEF'<)8%8)8#8&9#9#9#9( +7F0E5F1F0F3F0418000610A0110BC07008241100703FCF070F388209CF0E0F8F3F01000100043404343FD0A0110B"`<5:":":#9#8% +40B83E003F810400088BFFFC38C08423FD088838C3FC00000103FD10110C03FC00000000686080C880C400088BF@$a.9(>"8$:/ +3FFF80783FFFFC03B981BFE088BC03BF003FD600A03FBF00FFFF8010003FFFFF90003FC00000783FEC"?$u) 292.47 641 T +(BV!W$KLa$j$^$9!#) 195.6 624.7 T +13 F +("#!!) 87.88 575.45 T +18 F +(sj3 ) 107.72 571.98 T +13 F +($N%-!<3d$jEv$F) 123.15 575.45 T +5 F +(sj3 ) 195.6 555.57 T +4 F +($NA`:n$KI,MW$J%-!<$O!"L>4A;zJQ49) 87.88 158.59 T +4 F +(Nc$r;H$C$F2>L>4A;zJQ49$N;EJ}$r@bL@$7$^$9!#) 195.6 141.94 T +(!VBgMN9R3$!W$HJQ49$7$F$_$^$9!#) 195.6 125.64 T +87.88 119.06 507.41 694.5 C +96.39 228.74 507.41 547.1 C +96.39 228.74 507.41 547.1 R +7 X +0 K +V +207.09 519.39 336.46 535.64 R +V +5 F +0 X +( ) 207.09 527.81 T +4 F +(5!G=) 250.79 531.04 T +341.34 519.39 474.46 535.64 R +7 X +V +5 F +0 X +( ) 341.34 527.81 T +4 F +(%-!<) 389.64 531.04 T +(!V2>L>4A;zJQ493+;O!?=*N;!W) 207.09 509.79 T +(!N) 341.34 509.79 T +5 F +(Ctrl+\134) 350.54 506.56 T +4 F +(!O%-!<) 372.6 509.79 T +(!VJQ49!W) 207.09 493.54 T +(!N#F#1!O) 341.34 493.54 T +(!VL5JQ49!W) 207.09 477.29 T +(!N#F#2!O) 341.34 477.29 T +(!V$=$NB>!W) 207.09 461.04 T +(!N#F#3!O) 341.34 461.04 T +(!V7hDj!W) 207.09 444.79 T +(!N#F#4!O) 341.34 444.79 T +(!V%3!<%I!W) 207.09 412.29 T +(!N#F#5!O) 341.34 412.29 T +(!VH>3Q%"%k%U%!%Y%C%H!W) 207.09 396.04 T +(!N#F#6!O) 341.34 396.04 T +(!VA43Q%"%k%U%!%Y%C%H!W) 207.09 379.79 T +(!N#F#7!O) 341.34 379.79 T +(!VH>3QJR2>L>!W) 207.09 363.54 T +(!N#F#8!O) 341.34 363.54 T +(!VA43QJR2>L>!W) 207.09 347.29 T +(!N#F#9!O) 341.34 347.29 T +(!VJ?2>L>!W) 207.09 331.04 T +(!N#F#1#0!O) 341.34 331.04 T +(!V1&0\134F0!W) 207.09 298.54 T +(!N"*!O%-!<) 341.34 298.54 T +(!V:80\134F0!W) 207.09 282.29 T +(!N"+!O%-!<) 341.34 282.29 T +(!VJ8@a3HD%!W!V>e0\134F0!W) 207.09 266.04 T +(!N",!O%-!<) 341.34 266.04 T +(!VJ8@a=L>.!W!V2<0\134F0!W) 207.09 249.79 T +(!N"-!O%-!<) 341.34 249.79 T +202.81 235.85 479.07 540.85 R +0.5 H +0 Z +N +338.44 540.85 338.44 235.85 2 L +2 Z +N +202.81 521.48 478.44 521.48 2 L +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "21" 22 +19 10.63 /Helvetica-Bold FMDEFINEFONT +%%Page: "22" 22 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-) 87.88 92.59 T +(22) 97.32 92.59 T +1 F +(!!) 109.14 95.32 T +10 F +(SJ3 ) 116.92 92.59 T +1 F +(F|K\1348lF~NO%U%m%s%H%\050%s%I%W%m%;%C%5) 132.49 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +0 X +(;HMQJ}K!) 87.88 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +19 F +0 X +(1) 195.6 686.67 T +4 F +(!V$?$$$h$&$3$&$+$$!W$HF~NO$7$^$9!#F~NO$7$?%F%-%9%H$,%&%#%s%I%&$K) 212.61 689.89 T +(I=<\050$5$l$^$9!#) 212.61 673.59 T +19 F +(2) 195.6 577.7 T +4 F +(JQ49$r2!$7$^$9!#) 212.61 580.92 T +(Bh) 212.61 513.77 T +5 F +(1 ) 224.11 510.54 T +4 F +(8uJd$N4A;z$KJQ49$5$l$^$9!#) 231.01 513.77 T +19 F +(3) 195.6 468.74 T +4 F +(JQ49$5$l$?7k2L$,L\134E*$N4A;z$G$O$J$$>l9g$O!"$b$&0lEYJQ49$r2!$7$^) 212.61 471.96 T +($9!#) 212.61 455.66 T +5 F +(sj3 ) 212.61 436.14 T +4 F +($N%,%$%I%i%$%s$K!"$N4A;z8uJd$,I=<\050$5$l$^$9!#) 225.65 439.36 T +($3$N$h$&$K!":G=i$NJQ49$G4uK>$N4A;z$K$J$i$J$+$C$?$H$-$O!"$b$&0lEY) 212.61 357.87 T +(JQ49$r2!$9$3$H$G!"B>$N4A;z8uJd$rI=<\050$G$-$^$9!#8uJd$O!"%&%#%s%I%&) 212.61 341.57 T +(>e$GH?E>I=<\050$7$F$$$kItJ,$KBP$9$k8uJd$G$9$N$G!"$^$:!"$3$NItJ,$r@h) 212.61 325.27 T +($K7hDj$7$^$9!#4A;z8uJd$,$?$/$5$s$"$k$H$-$O!"$5$i$KJQ49$r2!$9$4$H) 212.61 308.98 T +($K!"1J" +EE1FEFF7FF83FF87FC13FF87EE1DEFF7O#FF5 +8E4C608F0E4F1D9FFF1FFEFFBFFBFF67BFFEFF67BF0EEEFFB*8"8(8" +DB6F676F5B6EE5FFFDFDF9FBFFDFF9FBFEFD7'8":*J" +776F7F5B5F7BF0FFFDFFFFFFFDFDEF6FO$F77&9$A"J" +76EF705B408FEFFEFEO#F47+?$J" +7AEF6F5B5FF4FFFBFFEEFBEC6EO$FF7$8#:#="J" +7DEF5FF37FF83FEFO%F4<"9(8%J" +6BF5FEE78FFFFBF7FBF7EFF5O$F07&8'<%J" +7BEF5E5B6FF77FF5FFEFB3F6DFF5FFO#FF(8)8% +C91BC6210930EBBFFBFFF7BCFFF7F9F7EF5FFB5 +6FFD7FFFFFFFFDCFFEFC07BFFF83FFFCFFE00FFCFEFBF7":$j +EFDFFFC007":Z +FF4 + + + + + + + + + + + + + + + + +J" +O;F3J" +O;FAJ" +O;FFJ" +O;F0J" +O;FFJ" +O;F9J" +O;F0J" +O;FF + + +J" +O;FC +J" +O;FFJ" +O;F0J" +O;FEj +O<"@";"8)8$9(9%8$8$8$8#9# +4040093FFFC04008203FC8403FC03FD02000403FC03FFFC8423FC0403FC8423FC0403FC03FE1&<);#8"8";"<#8"8"8&8"8(8" +7E00038380A000080100018483883E01BFC80180C402A000023FC4C0A000C03FC18003EF&;+8*8"9%:"9)80 +51000444400110118800C000848080FFFF88443FCFFFBFFF08C4221FFF00441FFF3FC1101FFF4400403FC11000403FC08000803FE8&;+8+;%=,:#:& +508004040002080D04003000800120C11008883FD49201103FC1FF1001C24400023FC20800023FC2C2088401203FEE@+8*<#@)80 +04040204044011E211C2C9123F093FE4920912E2224900043FC40400044900423FC40400423FD1E211C23FEF7&:+9585 +B1BFBF8E3B0802020204000F110F0171108FFBFC49289113FCE3F0E803FD22200023FCE8E0F0E8DFFF00083FC80200083FDFFF0FFF3FC8020FFF3FCF110F01(9%848*85 +51108404110C8017FD840501110200BFFFD27088A93FFFFF9270BFD10811C4220FFE3FD19111119C04000503FD7FD80503FC04000823FD7FD80823FC1110200BF"9#:+8#9):):'<$8% +5E208820400404847C0210820DE480C4922480BFE0882080403FE0A0A120BF603FE0400060E04000C210820D"9$9'9"8%9%8%:$;$8"<"=" +513F880000400804098208C8880ACF08883FFF003FC9FF20A13F403FC040C008#8#>-9&9%:#9"?#9) +509020080A01041384083FFFC1FC0C8181FC3FE008C8280442203F80810201023FC41384083F@#8"8":*<"8"=#9#9#9#:" +07FC0C10C20838103FDFFF8208F07EFFFFC7FCFFFFC7FC10;":#8&9*8)8"808$8$8" +8800400801081008C51009FFBFC000051088A0903FD0440440A0BFFFC04000803FC04000803FC04002C04002C81008E07"8">(8/9"8%J' +9110080001092008FCD8A008283FC92218A03FD08890B80AD09111106C92008FC3FEF'<)8%8)8#8&9#9#9#9( +7F0E5F1F0F3F0418000610A0110BC07008241100703FCF070F388209CF0E0F8F3F01000100043404343FD0A0110B"`<5:":":#9#8% +40B83E003F810400088BFFFC38C08423FD088838C3FC00000103FD10110C03FC00000000686080C880C400088BF@$a.9(>"8$:/ +3FFF80783FFFFC03B981BFE088BC03BF003FD600A03FBF00FFFF8010003FFFFF90003FC00000783FEC"?$%8#J" +FFFFA442DEDEO+FC1J" +E4C608F0E4F1D9FFC0A028423BFBC0C0O+FF(9'J" +DB6F676F5B6EE5247E37FDDFFEO+FC7'8(J" +776F7F5B5F7B902200AF7ED806O+F77&8) +76EF705B40C11022FF9F7F5EDE7'8(J" +7AEF6F5B5FF40822203EFFDEDAO+F27$8$8&J" +7DEF5FF37FC27FBEF7D002O+F8<"8( +6B042C92BDFBDEDE7&8(J" +7BEF5E5B6FC5842322BDFDDDO,FD/J" +C91BC6210930EB7FC8422044BB81O-F30J" +FFD7FFFFFFFFDCFFD0212188A07ED3O,F27":'`J" +EFDFFFE000A033O*FF7":W +FF + + + + + + + + + + + +J" +O;F2J" +O;FF +J" +O;F1J" +O;F0 +J" +O;FBJ" +O;FF +J" +O;F0J" +O;FF + + + + +J" +O;FC +J" +O;FFJ" +O;F0J" +O;FEj +O<"@";"8)8$9(9%8$8$8$8#9# +4040093FFFC04008203FC8403FC03FD02000403FC03FFFC8423FC0403FC8423FC0403FC03FE2&<);#8"8";"<#8"8"8&8"8(8" +7E00038380A000080100018483883E01BFC80180C402A000023FC4C0A000C03FC18003EF&;+8*8"9%:"9)80 +51000444400110118800C000848080FFFF88443FCFFFBFFF08C4221FFF00441FFF3FC1101FFF4400403FC11000403FC08000803FEC&;+8+;%=,:#:& +508004040002080D04003000800120C11008883FD49201103FC1FF1001C24400023FC20800023FC2C2088401203FE2@+8*<#@)80 +04040204044011E211C2C9123F093FE4920912E2224900043FC40400044900423FC40400423FD1E211C23FEF7&:+9585 +B1BFBF8E3B0802020204000F110F0171108FFBFC49289113FCE3F0E803FD22200023FCE8E0F0E8DFFF00083FC80200083FDFFF0FFF3FC8020FFF3FCF110F01(9%848*85 +51108404110C8017FD840501110200BFFFD27088A93FFFFF9270BFD10811C4220FFE3FD19111119C04000503FD7FD80503FC04000823FD7FD80823FC1110200BF"9#:+8#9):):'<$8% +5E208820400404847C0210820DE480C4922480BFE0882080403FE0A0A120BF603FE0400060E04000C210820D"9$9'9"8%9%8%:$;$8"<"=" +513F880000400804098208C8880ACF08883FFF003FC9FF20A13F403FC040C008#8#>-9&9%:#9"?#9* +509020080A01041384083FFFC1FC0C8181FC3FE008C8280442203F80810201023FC41384083FED@#8"8":*<"8"=#9#9#9#:"9" +07FC0C10C20838103FDFFF8208F07EFFFFC7FCFFFFC7FC10E2;":#8&9*8)8"808$8$8" +8800400801081008C51009FFBFC000051088A0903FD0440440A0BFFFC04000803FC04000803FC04002C04002C81008EF7"8">(8/9"8%J' +9110080001092008FCD8A008283FC92218A03FD08890B80AD09111106C92008FC3FE3'<)8%8)8#8&9#9#9#9* +7F0E5F1F0F3F0418000610A0110BC07008241100703FCF070F388209CF0E0F8F3F01000100043404343FD0A0110B3FE0"`<5:":":#9#8% +40B83E003F810400088BFFFC38C08423FD088838C3FC00000103FD10110C03FC00000000686080C880C400088BF@$a.9(>"8$:/ +3FFF80783FFFFC03B981BFE088BC03BF003FD600A03FBF00FFFF8010003FFFFF90003FC00000783FEF"?$%8#J" +FFFFA442DEDEO+FC1J" +E4C608F0E4F1D9FFC0A028423BFBC0C0O+FF(9'J" +DB6F676F5B6EE5247E37FDDFFEO+FC7'8(J" +776F7F5B5F7B902200AF7ED806O+F77&8) +76EF705B40C11022FF9F7F5EDE7'8(J" +7AEF6F5B5FF40822203EFFDEDAO+F27$8$8&J" +7DEF5FF37FC27FBEF7D002O+F8<"8( +6B042C92BDFBDEDE7&8(J" +7BEF5E5B6FC5842322BDFDDDO,FD/J" +C91BC6210930EB7FC8422044BB81O-F30J" +FFD7FFFFFFFFDCFFD0212188A07ED3O,F27":'`J" +EFDFFFE000A033O*FF7":W +FF + + + + + + + + + + + + + + + + + + + + +J" +O;F0J" +O;FF + + + + +J" +O;FC +J" +O;FFJ" +O;F0J" +O;FEj +O<5Z" +O"4000803FF87FC3FFFFBFFF81FFF87FC3FFFBEEFB7BFFF87FC3FFFFBFDF7BFFF87FC3FFFFBFFFFF7FF87FC3FFFFFDFFFE9E1(909'9-J" +4400BF3FFBFBFBC1BDFFFBF9FBFFF769FBB6FFFBF1FBEFBBFFFBFDFBC0007FFBC0FBFFC07DF0007F8EF$8":"9"8%8":&:&8&J" +5C0120E3DDF6C0A77A00EEF7B77FFBF9FEEFFFFBDFFBFDF7BEFF8E8":":#8(8#9#8":#="J" +44FB5B81EF7BFFFFAF7BEFDF7BFE00F5E00077:EE7"<%8"8%=$<#;#J" +02C0005BBDE7E06040ED5FEFFF6EEEF7C0;EF8";$9"8%8"8$9"8#:"8% +2EFF5FD7FFEF7FFB00FFC0006BEDC000D1C07DF0008"=#8(8(;%8"8% +31DB81FEFBFFE06EFBEFFEFBFFFF5FFBEEFF5FE000CED57DF7BE7$;'8(:#8":#8#8" +0420BF6FDDFF7FFBFDEF69F1EF7FFBF1F600DDFF7FDF7B5D8";%;%8"9$<"8$9" +00FEEFDD00E0676A00FE6FF7EF6F7FFBFF6D?'8-9(<$ +F7DDDFFFFBFBEF6F6BEFFFFBFF7BFFFEEFEFC07BFFFEEFC00075F0007#;"8%8(9(8':# +0830FD807FFBF7EC605B677FFBDFF7CFEF7FFBFDFBF7FEF7FFFBCFF7BE8"<$9(:%;$9"9" +20FBD36D7BFFFFFFDBAAFFFDF7EC00FDF7FDDF7D7$:%8"8%8#8%;$8#J" +10113FFA7BDCDDEFFDBEFBCDEEFBFBEFEFFFFBF26FEEFB>E3$8"8%8"8%8"8#:"8%8":" +5F100EE0F7BDDFBBE0EDDB7B2EF1FBFDF0FBFDFF93F1EF$8"8%8#8'8#:"8%8"8" +402000FFEFDEDE77FFFBFB78EF7FFBFFF7FEFFF7FEFC7CFFD7:582J" +9F87FC3FFDFFF5FCCFFF87FC3FFDE03FB8FFFF87FC3FFCFFF6FF87FC3FFCFFF43FF7FF87FC3FFDC71DFB09E0j" +O;0F +ENDBITMAP +%%EndBinary +208.87 375.21 491.37 416.46 R +0.5 H +0 Z +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "22" 23 +%%Page: "23" 23 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +10 F +0 X +(SJ3 ) 330.51 92.59 T +1 F +(F|K\1348lF~NO%U%m%s%H%\050%s%I%W%m%;%C%5!!) 346.08 95.32 T +0 F +(1-23) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +1 F +0 X +(;HMQJ}K!) 476.28 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +4 F +0 X +($3$3$G$OL\134E*$N4A;z$O!VBgMN!W$J$N$G!"#3$r2!$7$^$9!#) 212.61 689.89 T +(!VBgMN!W$NItJ,$,@5$7$/JQ49$5$l$?$N$G!"$5$;$^$9!#) 212.61 564 T +(H?E>I=<\050$5$l$?ItJ,$r!VJQ49BP>]!W) 212.61 547.7 T +5 F +(\050) 362.13 544.48 T +4 F +(%+%l%s%HJ8@a) 365.19 547.7 T +5 F +(\051 ) 420.4 544.48 T +4 F +($H8F$S$^$9!#JQ49) 425.76 547.7 T +(BP>]$r0\134F0$9$k$K$O"+$^$?$O"*$r2!$7$^$9!#$3$3$G$O1&$K0\134F0$9$k$N) 212.61 531.41 T +($G!""*$r2!$7$^$9!#) 212.61 515.11 T +19 F +(6) 195.6 415.47 T +4 F +(JQ49BP>]$N!V8x3+!W$r:FJQ49$9$k$N$G!"JQ49$r2!$7$^$9!#) 212.61 418.69 T +(!V8x3+!W$NB>$N4A;z8uJd$,I=<\050$5$l$^$9!#) 212.61 402.39 T +19 F +(7) 195.6 302.13 T +4 F +(L\134E*$N4A;z$O!V9R3$!W$J$N$G!"#4$r2!$7$^$9!#) 212.61 305.35 T +19 F +(8) 195.6 203.83 T +4 F +(JQ49%&%#%s%I%&$NJ8;z$,$9$Y$F@5$7$/JQ49$5$l$?$N$G!"(8/9"8%J' +9110080001092008FCD8A008283FC92218A03FD08890B80AD09111106C92008FC3FEF'<)8%8)8#8&9#9#9#9( +7F0E5F1F0F3F0418000610A0110BC07008241100703FCF070F388209CF0E0F8F3F01000100043404343FD0A0110B"`<5:":":#9#8& +40B83E003F810400088BFFFC38C08423FD088838C3FC00000103FD10110C03FC00000000686080C880C400088BFED@$a.9(>"8$:/ +3FFF80783FFFFC03B981BFE088BC03BF003FD600A03FBF00FFFF8010003FFFFF90003FC00000783FEC"?$(8/9"8%J' +9110080001092008FCD8A008283FC92218A03FD08890B80AD09111106C92008FC3FEF'<)8%8)8#8&9#9#9#9( +7F0E5F1F0F3F0418000610A0110BC07008241100703FCF070F388209CF0E0F8F3F01000100043404343FD0A0110B"`<5:":":#9#8% +40B83E003F810400088BFFFC38C08423FD088838C3FC00000103FD10110C03FC00000000686080C880C400088BF@$a.9(>"8$:/ +3FFF80783FFFFC03B981BFE088BC03BF003FD600A03FBF00FFFF8010003FFFFF90003FC00000783FE8"?$#8"8#=&:$>#J" +02DEDEE7DDB6F7BDFDDDFFE6FFDEFBF99EF>%8"8%8";"8"8%8"8& +FBFBC0C0FFFBEED500FFBDEDEAFFED00D1FBFBF4067F8#:%8#8$8'=$8"8& +113FF7FDDFFEFEFBD856B6FEFBFFF001C1C1FF6ECEF7FDCFFFFF7#;%8"8$9"8%8"8$9' +040EEF7ED806FDF60757F1F7BDDD5DDDEE5DF7DF7BFFEF7EFF8";%;#:":#;#:"8% +11DF7F5EDEE7DFFEDFDDC0DDFFDF7F7FFE8#:%8"8,:):& +20BFFEFFDEDAFBD7C1F6007FFBFF7BFFF001C07BFFEEDDEC007FFEFFC0007F7"=$8"8(8%8+9% +08F7D002F7F7BDF76DFFFBDFF77DDEEBFDFBFFEADDCEDDFFFBCFF7FEFFFF>%9"8"=#?"9"8% +FDFBDEDE7B3BFD7FEEDFFDFBFDF77$;#9"8#8*='8$J" +10113FFDDDEFF4DB7FFBEEFBFFFEFFE0F76EDD7FFBEEFBFDFDFB9ED$8"8#:"8%8"8%8"9$8"8%J" +5F100EE0FB81E0F7E7F600F1FD3FFFEBF0BD6C00F1FB81FBF19EF$8"8$9#8'8%8"8(8%J" +402000FFE07ED3FFFB99F6FDFFFBFFF3C7FF9DFFDEBD6DFDFFFBFFE07EE00E9E5:5J" +LF87FC3FFF7FEDFF8FFF87FC3FFF47E77E3FFF87FC3FFCFF87E7E7FF87FC3FFD8BC6FE3FFF87FC3FFF7FEF7FE9EFj" +O;0F +ENDBITMAP +%%EndBinary +210.54 343.83 492.42 385.08 R +0.5 H +0 Z +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 237.18 507.41 293.66 C +96.39 237.18 507.41 293.66 R +7 X +0 K +V +0 X +%%BeginBinary: 2574 +588 86 282.24 41.28 0 211 245.26 BEGINBITMAPBWc +J" +O;F0J" +O;FF=" +7F<" +E7<# +DAFF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407'J" +7AEF6F5B5FF4O4F67$8#J" +7DEF5FF37FO3FF<" +6B7&J" +7BEF5E5B6FO5F0(J" +C91BC6210930EBO4FE)J" +FFD7FFFFFFFFDCFFO3FF7":" +EFDF7":- +FFFF7FFFBFDF7BC4081080003F<"9( +E7EFBBC808088080<#8'J" +DAFFF7B75F0884FFO+F1@(J" +FE00517F810000O*F2@&J" +5FEFD90021O,FC1J" +E4C608F0E4F1D9FFC0006BEFD50012FFO+FF1 +DB6F676F5B6EE5FFFF5FFBEED53E00917'9&J" +776F7F5B5F7BF600D1A208O,FE7&9&J" +76EF705B406FF7EFFF22O-FF71J" +7AEF6F5B5FF4FFFEEFEFEFD12213FF80O*FE7$8,J" +7DEF5FF37FFEF7CFEF5522312200O*F7<'8"J" +6B7FFDF7EC0011O,FB7&9)J" +7BEF5E5B6FFBEFEFD522912280O*FF+9$J" +C91BC6210930EB7FFBFD4293FFO+F0+8&J" +FFD7FFFFFFFFDCFFF7FEE142920200O*FB7":+J" +EFDFFFC00000002743901CO+FF7":W +FF + + + + + + + + + + + + + + + + + + + + +J" +O;F0J" +O;FF + + + + +J" +O;FC +J" +O;FFJ" +O;F0J" +O;FEj +O<"@";"8)8$9(9%8$8$8$8#9# +4040093FFFC04008203FC8403FC03FD02000403FC03FFFC8423FC0403FC8423FC0403FC03FE1&<);#8"8";"<#8"8"8&8"8(8" +7E00038380A000080100018483883E01BFC80180C402A000023FC4C0A000C03FC18003EF&;+8*8"9%:"9)80 +51000444400110118800C000848080FFFF88443FCFFFBFFF08C4221FFF00441FFF3FC1101FFF4400403FC11000403FC08000803FE8&;+8+;%=,:#:& +508004040002080D04003000800120C11008883FD49201103FC1FF1001C24400023FC20800023FC2C2088401203FEE@+8*<#@)80 +04040204044011E211C2C9123F093FE4920912E2224900043FC40400044900423FC40400423FD1E211C23FEF7&:+9585 +B1BFBF8E3B0802020204000F110F0171108FFBFC49289113FCE3F0E803FD22200023FCE8E0F0E8DFFF00083FC80200083FDFFF0FFF3FC8020FFF3FCF110F01(9%848*85 +51108404110C8017FD840501110200BFFFD27088A93FFFFF9270BFD10811C4220FFE3FD19111119C04000503FD7FD80503FC04000823FD7FD80823FC1110200BF"9#:+8#9):):'<$8% +5E208820400404847C0210820DE480C4922480BFE0882080403FE0A0A120BF603FE0400060E04000C210820D"9$9'9"8%9%8%:$;$8"<"=" +513F880000400804098208C8880ACF08883FFF003FC9FF20A13F403FC040C008#8#>-9&9%:#9"?#9) +509020080A01041384083FFFC1FC0C8181FC3FE008C8280442203F80810201023FC41384083F@#8"8":*<"8"=#9#9#9#:" +07FC0C10C20838103FDFFF8208F07EFFFFC7FCFFFFC7FC10;":#8&9*8)8"808$8$8" +8800400801081008C51009FFBFC000051088A0903FD0440440A0BFFFC04000803FC04000803FC04002C04002C81008E07"8">(8/9"8%J' +9110080001092008FCD8A008283FC92218A03FD08890B80AD09111106C92008FC3FEF'<)8%8)8#8&9#9#9#9( +7F0E5F1F0F3F0418000610A0110BC07008241100703FCF070F388209CF0E0F8F3F01000100043404343FD0A0110B"`<5:":":#9#8% +40B83E003F810400088BFFFC38C08423FD088838C3FC00000103FD10110C03FC00000000686080C880C400088BF@$a.9(>"8$:/ +3FFF80783FFFFC03B981BFE088BC03BF003FD600A03FBF00FFFF8010003FFFFF90003FC00000783FEC"?$]$NJ8@a$N0\134F0$N;EJ}$K$D$$$F@bL@$7$^$9!#) 195.6 672.88 T +(!V]$K$J$C$F$$$kJ8;z$r8:$i$9) 212.61 402.52 T +5 F +(\050) 362.12 399.3 T +4 F +(%+%l%s%HJ8@a$NJ8@aD9$rC;$/$9) 365.19 402.52 T +($k) 212.61 386.22 T +5 F +(\051 ) 221.81 383 T +4 F +($?$a$K!""-$r2!$7$^$9!#J8@aD9$rD9$/$9$k$H$-$O!"",$r2!$7$^$9!#) 227.17 386.22 T +19 F +(4) 195.6 283.46 T +4 F +($b$&) 212.61 286.68 T +5 F +(1 ) 233.31 283.46 T +4 F +(J8;z8:$i$7$?$$$N$G!"$5$i$K"-$r2!$7$^$9!#) 240.21 286.68 T +(JQ49BP>]$,!V$/$k$^!W$NItJ,$K$J$C$?$N$G!"<+F0E*$K!V + + + + + + + + + + + + + + + + + + + +J" +O;FEJ" +O;F0J" +O;FF + + + + +J" +O;FC +J" +O;FFJ" +O;F0J" +O;FEj +O<"@";"8)8$9(9%8$8$8$8#9# +4040093FFFC04008203FC8403FC03FD02000403FC03FFFC8423FC0403FC8423FC0403FC03FE1&<);#8"8";"<#8"8"8&8"8(8" +7E00038380A000080100018483883E01BFC80180C402A000023FC4C0A000C03FC18003EF&;+8*8"9%:"9)80 +51000444400110118800C000848080FFFF88443FCFFFBFFF08C4221FFF00441FFF3FC1101FFF4400403FC11000403FC08000803FE8&;+8+;%=,:#:& +508004040002080D04003000800120C11008883FD49201103FC1FF1001C24400023FC20800023FC2C2088401203FEE@+8*<#@)80 +04040204044011E211C2C9123F093FE4920912E2224900043FC40400044900423FC40400423FD1E211C23FEF7&:+9585 +B1BFBF8E3B0802020204000F110F0171108FFBFC49289113FCE3F0E803FD22200023FCE8E0F0E8DFFF00083FC80200083FDFFF0FFF3FC8020FFF3FCF110F01(9%848*85 +51108404110C8017FD840501110200BFFFD27088A93FFFFF9270BFD10811C4220FFE3FD19111119C04000503FD7FD80503FC04000823FD7FD80823FC1110200BF"9#:+8#9):):'<$8% +5E208820400404847C0210820DE480C4922480BFE0882080403FE0A0A120BF603FE0400060E04000C210820D"9$9'9"8%9%8%:$;$8"<"=" +513F880000400804098208C8880ACF08883FFF003FC9FF20A13F403FC040C008#8#>-9&9%:#9"?#9) +509020080A01041384083FFFC1FC0C8181FC3FE008C8280442203F80810201023FC41384083F@#8"8":*<"8"=#9#9#9#:"9" +07FC0C10C20838103FDFFF8208F07EFFFFC7FCFFFFC7FC10E3;":#8&9*8)8"808$8$8" +8800400801081008C51009FFBFC000051088A0903FD0440440A0BFFFC04000803FC04000803FC04002C04002C81008E07"8">(8/9"8%J' +9110080001092008FCD8A008283FC92218A03FD08890B80AD09111106C92008FC3FEF'<)8%8)8#8&9#9#9#9( +7F0E5F1F0F3F0418000610A0110BC07008241100703FCF070F388209CF0E0F8F3F01000100043404343FD0A0110B"`<5:":":#9#8% +40B83E003F810400088BFFFC38C08423FD088838C3FC00000103FD10110C03FC00000000686080C880C400088BF@$a.9(>"8$:/ +3FFF80783FFFFC03B981BFE088BC03BF003FD600A03FBF00FFFF8010003FFFFF90003FC00000783FEC"?$5J" +6DFFF0010103F23D008083FF7FCB3E00077C1FFBFFFEFKF2>39"J" +C84200600FE01C20090FBFEFFBBDEFBEF73F9FKFC5:"9"J" +5E4C608F0E4F1D9FFC44400800020004108F83FDFF7FF7FKFF5<#J" +6DB6F676F5B6EE5FFC2440138002E008490083FBFF7BEFEC7KFC7'8(:#8"8$J" +776F7F5B5F7B4882C607F000826F7EEF5FFD39KF77&8'8%># +76EF705B40FFFF8401002010080000FBFE7+9#8'9#J" +7AEF6F5B5FF4FFC1500801003FBFEF7EE0006FF7LF27$8&?%8$J" +7DEF5FF37FC24810EEFEEFBEFEEFEFLF8<"8&8#9* +6B4401E107F014FCFDEFBFEB7FFEF7FE1E7&8+8$8&J" +7BEF5E5B6FC4420211082C0080150BF5FDFFBFFDFBFDEEKFD/8'8'J" +C91BC6210930EB7FC841020E04230888BFBFFBF3F7C0FBFDFDF1KF359&J" +6FFD7FFFFFFFFDCFFF04081F803E0006008783FBFFFCFFFF7FEFE07KF27":%`"jJ" +EFDFFFC0401C/JFF7":Z +FF: + + + + + + + + + + + +J" +O;F3J" +O;FFJ" +O;FDJ" +O;FF + + + + +J" +O;F0J" +O;FF + + + + +J" +O;FC +J" +O;FFJ" +O;F0J" +O;FEj +O<"@";"8)8$9(9%8$8$8$8#9# +4040093FFFC04008203FC8403FC03FD02000403FC03FFFC8423FC0403FC8423FC0403FC03FE1&<);#8"8";"<#8"8"8&8"8(8" +7E00038380A000080100018483883E01BFC80180C402A000023FC4C0A000C03FC18003EF&;+8*8"9%:"9)80 +51000444400110118800C000848080FFFF88443FCFFFBFFF08C4221FFF00441FFF3FC1101FFF4400403FC11000403FC08000803FE8&;+8+;%=,:#:& +508004040002080D04003000800120C11008883FD49201103FC1FF1001C24400023FC20800023FC2C2088401203FEE@+8*<#@)80 +04040204044011E211C2C9123F093FE4920912E2224900043FC40400044900423FC40400423FD1E211C23FEF7&:+9585 +B1BFBF8E3B0802020204000F110F0171108FFBFC49289113FCE3F0E803FD22200023FCE8E0F0E8DFFF00083FC80200083FDFFF0FFF3FC8020FFF3FCF110F01(9%848*85 +51108404110C8017FD840501110200BFFFD27088A93FFFFF9270BFD10811C4220FFE3FD19111119C04000503FD7FD80503FC04000823FD7FD80823FC1110200BF"9#:+8#9):):'<$8% +5E208820400404847C0210820DE480C4922480BFE0882080403FE0A0A120BF603FE0400060E04000C210820D"9$9'9"8%9%8%:$;$8"<"=" +513F880000400804098208C8880ACF08883FFF003FC9FF20A13F403FC040C008#8#>-9&9%:#9"?#9) +509020080A01041384083FFFC1FC0C8181FC3FE008C8280442203F80810201023FC41384083F@#8"8":*<"8"=#9#9#9#:" +07FC0C10C20838103FDFFF8208F07EFFFFC7FCFFFFC7FC10;":#8&9*8)8"808$8$8" +8800400801081008C51009FFBFC000051088A0903FD0440440A0BFFFC04000803FC04000803FC04002C04002C81008E07"8">(8/9"8%J' +9110080001092008FCD8A008283FC92218A03FD08890B80AD09111106C92008FC3FE7'<)8%8)8#8&9#9#9#9* +7F0E5F1F0F3F0418000610A0110BC07008241100703FCF070F388209CF0E0F8F3F01000100043404343FD0A0110B3FEF"`<5:":":#9#8& +40B83E003F810400088BFFFC38C08423FD088838C3FC00000103FD10110C03FC00000000686080C880C400088BFE3@$a.9(>"8$:/ +3FFF80783FFFFC03B981BFE088BC03BF003FD600A03FBF00FFFF8010003FFFFF90003FC00000783FEB"?$5J" +6DFFF0010103F23D037F7FFF7FCB3E00077C1FFBFFFEFKF2>39"J" +C84200600FE01C2036F07FEFFBBDEFBEF73F9FKFC5:"9"J" +5E4C608F0E4F1D9FFC4440080002000413707FFDFF7FF7FKFF5<#J" +6DB6F676F5B6EE5FFC2440138002E0084AFF7FFBFF7BEFEC7KFC7'8(:#8"8$J" +776F7F5B5F7B4882C607F000826F7EEF5FFD39KF77&8'8%># +76EF705B40FFFF840100202FF7C000FBFE7+9#8'9#J" +7AEF6F5B5FF4FFC150080100FFBFEF7EE0006FF7LF27$8&?%8$J" +7DEF5FF37FC24810EEFEEFBEFEEFEFLF8<"8&8#9* +6B4401E107F02B03FDEFBFEB7FFEF7FE1E7&8+8$8&J" +7BEF5E5B6FC4420211082C00802AF4F5FDFFBFFDFBFDEEKFD/8'8'J" +C91BC6210930EB7FC841020E042337777FBFFBF3F7C0FBFDFDF1KF359&J" +6FFD7FFFFFFFFDCFFF04081F803E000603787FFBFFFCFFFF7FEFE07KF27":%`"jJ" +EFDFFFC0401C/JFF7":Z +FF: + + + + + + + + + + + + + + + + + + + + +J" +O;F0J" +O;FF + + + + +J" +O;FC +J" +O;FFJ" +O;F0J" +O;FEj +O<"@";"8)8$9(9%8$8$8$8#9# +4040093FFFC04008203FC8403FC03FD02000403FC03FFFC8423FC0403FC8423FC0403FC03FE1&<);#8"8";"<#8"8"8&8"8(8" +7E00038380A000080100018483883E01BFC80180C402A000023FC4C0A000C03FC18003EF&;+8*8"9%:"9)80 +51000444400110118800C000848080FFFF88443FCFFFBFFF08C4221FFF00441FFF3FC1101FFF4400403FC11000403FC08000803FE8&;+8+;%=,:#:& +508004040002080D04003000800120C11008883FD49201103FC1FF1001C24400023FC20800023FC2C2088401203FEE@+8*<#@)80 +04040204044011E211C2C9123F093FE4920912E2224900043FC40400044900423FC40400423FD1E211C23FEF7&:+9585 +B1BFBF8E3B0802020204000F110F0171108FFBFC49289113FCE3F0E803FD22200023FCE8E0F0E8DFFF00083FC80200083FDFFF0FFF3FC8020FFF3FCF110F01(9%848*85 +51108404110C8017FD840501110200BFFFD27088A93FFFFF9270BFD10811C4220FFE3FD19111119C04000503FD7FD80503FC04000823FD7FD80823FC1110200BF"9#:+8#9):):'<$8% +5E208820400404847C0210820DE480C4922480BFE0882080403FE0A0A120BF603FE0400060E04000C210820D"9$9'9"8%9%8%:$;$8"<"=" +513F880000400804098208C8880ACF08883FFF003FC9FF20A13F403FC040C008#8#>-9&9%:#9"?#9) +509020080A01041384083FFFC1FC0C8181FC3FE008C8280442203F80810201023FC41384083F@#8"8":*<"8"=#9#9#9#:" +07FC0C10C20838103FDFFF8208F07EFFFFC7FCFFFFC7FC10;":#8&9*8)8"808$8$ +8800400801081008C51009FFBFC000051088A0903FD0440440A0BFFFC04000803FC04000803FC04002C04002C810087"8">(8/9"8%J' +9110080001092008FCD8A008283FC92218A03FD08890B80AD09111106C92008FC3FED'<)8%8)8#8&9#9#9#9* +7F0E5F1F0F3F0418000610A0110BC07008241100703FCF070F388209CF0E0F8F3F01000100043404343FD0A0110B3FEF"`<5:":":#9#8& +40B83E003F810400088BFFFC38C08423FD088838C3FC00000103FD10110C03FC00000000686080C880C400088BFE0@$a.9(>"8$:/ +3FFF80783FFFFC03B981BFE088BC03BF003FD600A03FBF00FFFF8010003FFFFF90003FC00000783FEF"?$"<# +FFFF7FC0403FBFC03F<"8"9$=$ +E741E7FFFBBFFBC7<5J" +4DAFFDFFF3FC0EFF7F001FF0FFFBEEFFFFC1FFC37O!F1>3J" +C0401C2FF7F7FFF7FCB3E00077C1FFBFFFEFO!F2>/9"J" +CFFE23DFF6F07FEFFBBDEFBEF73F9FO!FC2:"9"J" +E4C608F0E4F1D9FFC8423FBEF707FFDFF7FF7FO!FF(:(<#J" +DB6F676F5B6EE57B6FF7FFBFF7BEFEC7O!FC7,:#8"8$J" +776F7F5B5F7BFFCFFE3F7D6F7EEF5FFD39O!F77&8#8%>#J" +76EF705B40C842EFF7C000FBFEO!FF7'9#8'9# +7AEF6F5B5FF43EFFFFBFEF7EE0006FF77$8%<%8$ +7DEF5FF37FCFFEEEFEEFBEFEEFEF<)9*J" +6B7FC040BEFFEB03FDEFBFEB7FFEF7FE1EO!F07&8'8$8&J" +7BEF5E5B6FFFFFBF7FEAF4F5FDFFBFFDFBFDEEO!F338' +C91BC6210930EB7FC0403F7FF7777FBFFBF3F7C0FBFDFDF1)9(9&J" +FFD7FFFFFFFFDCFF9FF787FFBFFFCFFFF7FEFE07O!F27":"9jJ" +EFDF1O FF7":Z +FF6 + + + + + + + + + + + + + + + + + + + + +J" +O;F0J" +O;FF + + + + +J" +O;FC +J" +O;FFJ" +O;F0J" +O;FEj +O<"@";"8)8$9(9%8$8$8$8#9# +4040093FFFC04008203FC8403FC03FD02000403FC03FFFC8423FC0403FC8423FC0403FC03FE1&<);#8"8";"<#8"8"8&8"8(8" +7E00038380A000080100018483883E01BFC80180C402A000023FC4C0A000C03FC18003EF&;+8*8"9%:"9)80 +51000444400110118800C000848080FFFF88443FCFFFBFFF08C4221FFF00441FFF3FC1101FFF4400403FC11000403FC08000803FE8&;+8+;%=,:#:& +508004040002080D04003000800120C11008883FD49201103FC1FF1001C24400023FC20800023FC2C2088401203FEE@+8*<#@)80 +04040204044011E211C2C9123F093FE4920912E2224900043FC40400044900423FC40400423FD1E211C23FEF7&:+9585 +B1BFBF8E3B0802020204000F110F0171108FFBFC49289113FCE3F0E803FD22200023FCE8E0F0E8DFFF00083FC80200083FDFFF0FFF3FC8020FFF3FCF110F01(9%848*85 +51108404110C8017FD840501110200BFFFD27088A93FFFFF9270BFD10811C4220FFE3FD19111119C04000503FD7FD80503FC04000823FD7FD80823FC1110200BF"9#:+8#9):):'<$8% +5E208820400404847C0210820DE480C4922480BFE0882080403FE0A0A120BF603FE0400060E04000C210820D"9$9'9"8%9%8%:$;$8"<"=" +513F880000400804098208C8880ACF08883FFF003FC9FF20A13F403FC040C008#8#>-9&9%:#9"?#9) +509020080A01041384083FFFC1FC0C8181FC3FE008C8280442203F80810201023FC41384083F@#8"8":*<"8"=#9#9#9#:" +07FC0C10C20838103FDFFF8208F07EFFFFC7FCFFFFC7FC10;":#8&9*8)8"808$8$ +8800400801081008C51009FFBFC000051088A0903FD0440440A0BFFFC04000803FC04000803FC04002C04002C810087"8">(8/9"8%J' +9110080001092008FCD8A008283FC92218A03FD08890B80AD09111106C92008FC3FE3'<)8%8)8#8&9#9#9#9( +7F0E5F1F0F3F0418000610A0110BC07008241100703FCF070F388209CF0E0F8F3F01000100043404343FD0A0110B"`<5:":":#9#8% +40B83E003F810400088BFFFC38C08423FD088838C3FC00000103FD10110C03FC00000000686080C880C400088BF@$a.9(>"8$:/ +3FFF80783FFFFC03B981BFE088BC03BF003FD600A03FBF00FFFF8010003FFFFF90003FC00000783FE0"?$]$r1&$K0\134F0$7$?$$$N$G!""*$r2!$7$^$9!#) 212.61 689.89 T +("*$OJQ49BP>]$r1&$K0\134F0$7$^$9!#"+$O:8$K0\134F0$7$^$9!#) 212.61 607.11 T +19 F +(6) 195.6 562.08 T +4 F +(JQ49BP>]$r) 212.61 565.3 T +5 F +(1 ) 260.91 562.08 T +4 F +(J8;z8:$i$7$?$$$N$G!""-$r2!$7$^$9!#) 267.82 565.3 T +19 F +(7) 195.6 451.91 T +4 F +(!V$G!W$OJ?2>L>$G$h$$$N$G!"L5JQ49$r2!$7$^$9!#) 212.61 455.13 T +19 F +(8) 195.6 337.37 T +4 F +(JQ49BP>]$r1&$K0\134F0$7$?$$$N$G!""*$r2!$7$^$9!#) 212.61 340.59 T +19 F +(9) 195.6 220.32 T +4 F +(JQ49BP>]$r) 212.61 223.55 T +5 F +(1 ) 260.91 220.32 T +4 F +(J8;zA}$d$7$?$$$N$G!"",$r2!$7$^$9!#) 267.82 223.55 T +87.88 119.06 507.41 694.5 C +96.39 611.71 507.41 678.2 C +96.39 611.71 507.41 678.2 R +7 X +0 K +V +0 X +%%BeginBinary: 2778 +588 86 282.24 41.28 0 211 625.64 BEGINBITMAPBWc + + +=" +7F<" +E7<# +DAFFJ" +O;F6J" +O;F1(J" +E4C608F0E4F1D9O4F7(J" +DB6F676F5B6EE5O4F27' +776F7F5B5F7B7&J" +76EF705B40O5FD7'J" +7AEF6F5B5FF4O4FE7$8#J" +7DEF5FF37FO3F3<"J" +6BO4F87&J" +7BEF5E5B6FO5F0(J" +C91BC6210930EBO4FE)J" +FFD7FFFFFFFFDCFFO3F07":"J" +EFDFO4FB7":*:"<# +FFFF7FFFBFC00000003FBFC03F<"8"9$=$ +E7BE183FFBBFFBC7<5J" +4DAFFE000C03F10083001FF0FFFBEEFFFFC1FFC37O!F1>3J" +FFBFE3D008083FF7FCB3E00077C1FFBFFFEFO!F2>/9"J" +F001DC20090FBFEFFBBDEFBEF73F9FO!FC2:"9"J" +E4C608F0E4F1D9FFF7BDC04108F83FDFF7FF7FO!FF(:(<#J" +DB6F676F5B6EE58490083FBFF7BEFEC7O!FC7,:#8"8$J" +776F7F5B5F7BFFF001C0826F7EEF5FFD39O!F77&8#8%>#J" +76EF705B40F7BD10080000FBFEO!FF7'9#8'9# +7AEF6F5B5FF4C1003FBFEF7EE0006FF77$8%<%8$ +7DEF5FF37FF001EEFEEFBEFEEFEF<)9*J" +6B7FFFBF410014FCFDEFBFEB7FFEF7FE1EO!F07&8'8$8&J" +7BEF5E5B6FC0004080150BF5FDFFBFFDFBFDEEO!F338' +C91BC6210930EB7FFFBFC0800888BFBFFBF3F7C0FBFDFDF1)9(9&J" +FFD7FFFFFFFFDCFF6008783FBFFFCFFFF7FEFE07O!F27":'jJ" +EFDFFFC000001C/O FF7":Z +FF6 + + + + + + + + + + + + + + + + + + + + +J" +O;F0J" +O;FF + + + + +J" +O;FC +J" +O;FFJ" +O;F0J" +O;FEj +O<"@";"8)8$9(9%8$8$8$8#9# +4040093FFFC04008203FC8403FC03FD02000403FC03FFFC8423FC0403FC8423FC0403FC03FE1&<);#8"8";"<#8"8"8&8"8(8" +7E00038380A000080100018483883E01BFC80180C402A000023FC4C0A000C03FC18003EF&;+8*8"9%:"9)80 +51000444400110118800C000848080FFFF88443FCFFFBFFF08C4221FFF00441FFF3FC1101FFF4400403FC11000403FC08000803FE8&;+8+;%=,:#:& +508004040002080D04003000800120C11008883FD49201103FC1FF1001C24400023FC20800023FC2C2088401203FEE@+8*<#@)80 +04040204044011E211C2C9123F093FE4920912E2224900043FC40400044900423FC40400423FD1E211C23FEF7&:+9585 +B1BFBF8E3B0802020204000F110F0171108FFBFC49289113FCE3F0E803FD22200023FCE8E0F0E8DFFF00083FC80200083FDFFF0FFF3FC8020FFF3FCF110F01(9%848*85 +51108404110C8017FD840501110200BFFFD27088A93FFFFF9270BFD10811C4220FFE3FD19111119C04000503FD7FD80503FC04000823FD7FD80823FC1110200BF"9#:+8#9):):'<$8% +5E208820400404847C0210820DE480C4922480BFE0882080403FE0A0A120BF603FE0400060E04000C210820D"9$9'9"8%9%8%:$;$8"<"=" +513F880000400804098208C8880ACF08883FFF003FC9FF20A13F403FC040C008#8#>-9&9%:#9"?#9) +509020080A01041384083FFFC1FC0C8181FC3FE008C8280442203F80810201023FC41384083F@#8"8":*<"8"=#9#9#9#:" +07FC0C10C20838103FDFFF8208F07EFFFFC7FCFFFFC7FC10;":#8&9*8)8"808$8$ +8800400801081008C51009FFBFC000051088A0903FD0440440A0BFFFC04000803FC04000803FC04002C04002C810087"8">(8/9"8%J' +9110080001092008FCD8A008283FC92218A03FD08890B80AD09111106C92008FC3FE3'<)8%8)8#8&9#9#9#9( +7F0E5F1F0F3F0418000610A0110BC07008241100703FCF070F388209CF0E0F8F3F01000100043404343FD0A0110B"`<5:":":#9#8% +40B83E003F810400088BFFFC38C08423FD088838C3FC00000103FD10110C03FC00000000686080C880C400088BF@$a.9(>"8$:/ +3FFF80783FFFFC03B981BFE088BC03BF003FD600A03FBF00FFFF8010003FFFFF90003FC00000783FE0"?$#8/J" +FFBF2EEEFFF7FCB3E00077C1FFBFFFEFO!F2>#8+9"J" +F0012000FFEFFBBDEFBEF73F9FO!FC+8&:"9"J" +E4C608F0E4F1D9FFF7BD377FFFDFF7FF7FO!FF(9)<#J" +DB6F676F5B6EE5CFFE00107FBFF7BEFEC7O!FC7.8#8"8$J" +776F7F5B5F7BFFF001C84237776F7EEF5FFD39O!F77&8)>#J" +76EF705B40F7BDC04030774000FBFEO!FF7';)9# +7AEF6F5B5FF43DF07FBFEF7EE0006FF77$8)8%8$ +7DEF5FF37FF001D0412037EEFEEFBEFEEFEF<)9*J" +6B7FFFBF50412DB7FDEFBFEB7FFEF7FE1EO!F07&8#8#8$8&J" +7BEF5E5B6FC0002030F5FDFFBFFDFBFDEEO!F3/8#8' +C91BC6210930EB7FFFBFD0413DF7FBF3F7C0FBFDFDF1)8%8#9&J" +FFD7FFFFFFFFDCFFDFFF0017FFCFFFF7FEFE07O!F27":'jJ" +EFDFFFC0001001/O FF7":Z +FF6 + + + + + + + + + + + + + + + +J" +O;F0J" +O;F3J" +O;FAJ" +O;FF +J" +O;F0J" +O;FF + + + + +J" +O;FC +J" +O;FFJ" +O;F0J" +O;FEj +O<"@";"8)8$9(9%8$8$8$8#9# +4040093FFFC04008203FC8403FC03FD02000403FC03FFFC8423FC0403FC8423FC0403FC03FE1&<);#8"8";"<#8"8"8&8"8(8" +7E00038380A000080100018483883E01BFC80180C402A000023FC4C0A000C03FC18003EF&;+8*8"9%:"9)80 +51000444400110118800C000848080FFFF88443FCFFFBFFF08C4221FFF00441FFF3FC1101FFF4400403FC11000403FC08000803FE8&;+8+;%=,:#:& +508004040002080D04003000800120C11008883FD49201103FC1FF1001C24400023FC20800023FC2C2088401203FEE@+8*<#@)80 +04040204044011E211C2C9123F093FE4920912E2224900043FC40400044900423FC40400423FD1E211C23FEF7&:+9585 +B1BFBF8E3B0802020204000F110F0171108FFBFC49289113FCE3F0E803FD22200023FCE8E0F0E8DFFF00083FC80200083FDFFF0FFF3FC8020FFF3FCF110F01(9%848*85 +51108404110C8017FD840501110200BFFFD27088A93FFFFF9270BFD10811C4220FFE3FD19111119C04000503FD7FD80503FC04000823FD7FD80823FC1110200BF"9#:+8#9):):'<$8% +5E208820400404847C0210820DE480C4922480BFE0882080403FE0A0A120BF603FE0400060E04000C210820D"9$9'9"8%9%8%:$;$8"<"=" +513F880000400804098208C8880ACF08883FFF003FC9FF20A13F403FC040C008#8#>-9&9%:#9"?#9) +509020080A01041384083FFFC1FC0C8181FC3FE008C8280442203F80810201023FC41384083F@#8"8":*<"8"=#9#9#9#:" +07FC0C10C20838103FDFFF8208F07EFFFFC7FCFFFFC7FC10;":#8&9*8)8"808$8$8" +8800400801081008C51009FFBFC000051088A0903FD0440440A0BFFFC04000803FC04000803FC04002C04002C81008E07"8">(8/9"8%J' +9110080001092008FCD8A008283FC92218A03FD08890B80AD09111106C92008FC3FEF'<)8%8)8#8&9#9#9#9( +7F0E5F1F0F3F0418000610A0110BC07008241100703FCF070F388209CF0E0F8F3F01000100043404343FD0A0110B"`<5:":":#9#8% +40B83E003F810400088BFFFC38C08423FD088838C3FC00000103FD10110C03FC00000000686080C880C400088BF@$a.9(>"8$:/ +3FFF80783FFFFC03B981BFE088BC03BF003FD600A03FBF00FFFF8010003FFFFF90003FC00000783FEC"?$3J" +FFBFE3D02EEEFFF7FCB3E00077C1FFBFFFEFO!F2>/9"J" +F001DC202000FFEFFBBDEFBEF73F9FO!FC2:"9"J" +E4C608F0E4F1D9FFF7BDC041377FFFDFF7FF7FO!FF(:(<#J" +DB6F676F5B6EE58480107FBFF7BEFEC7O!FC7.8#8"8$J" +776F7F5B5F7BFFF001C082B7776F7EEF5FFD39O!F77&8#8%>#J" +76EF705B40F7BD30774000FBFEO!FF7'9+9# +7AEF6F5B5FF4C1003DF07FBFEF7EE0006FF77$8%8#8%8$ +7DEF5FF37FF0012037EEFEEFBEFEEFEF<)9*J" +6B7FFFBF41002DB7FDEFBFEB7FFEF7FE1EO!F07&8'8$8&J" +7BEF5E5B6FC00040802030F5FDFFBFFDFBFDEEO!F9/8#8'J" +C91BC6210930EB7FFFBFC0803DF7FBF3F7C0FBFDFDF1O!F3)9$8#9&J" +FFD7FFFFFFFFDCFF600017FFCFFFF7FEFE07O!F27":'jJ" +EFDFFFC000001C/O FF7":Z +FF6 + + + + + + + + + + + + + + + + + + + + +J" +O;F0J" +O;FF + + + + +J" +O;FC +J" +O;FFJ" +O;F0J" +O;FEj +O<"@";"8)8$9(9%8$8$8$8#9# +4040093FFFC04008203FC8403FC03FD02000403FC03FFFC8423FC0403FC8423FC0403FC03FE1&<);#8"8";"<#8"8"8&8"8(8" +7E00038380A000080100018483883E01BFC80180C402A000023FC4C0A000C03FC18003EF&;+8*8"9%:"9)80 +51000444400110118800C000848080FFFF88443FCFFFBFFF08C4221FFF00441FFF3FC1101FFF4400403FC11000403FC08000803FE8&;+8+;%=,:#:& +508004040002080D04003000800120C11008883FD49201103FC1FF1001C24400023FC20800023FC2C2088401203FEE@+8*<#@)80 +04040204044011E211C2C9123F093FE4920912E2224900043FC40400044900423FC40400423FD1E211C23FEF7&:+9585 +B1BFBF8E3B0802020204000F110F0171108FFBFC49289113FCE3F0E803FD22200023FCE8E0F0E8DFFF00083FC80200083FDFFF0FFF3FC8020FFF3FCF110F01(9%848*85 +51108404110C8017FD840501110200BFFFD27088A93FFFFF9270BFD10811C4220FFE3FD19111119C04000503FD7FD80503FC04000823FD7FD80823FC1110200BF"9#:+8#9):):'<$8% +5E208820400404847C0210820DE480C4922480BFE0882080403FE0A0A120BF603FE0400060E04000C210820D"9$9'9"8%9%8%:$;$8"<"=" +513F880000400804098208C8880ACF08883FFF003FC9FF20A13F403FC040C008#8#>-9&9%:#9"?#9) +509020080A01041384083FFFC1FC0C8181FC3FE008C8280442203F80810201023FC41384083F@#8"8":*<"8"=#9#9#9#:" +07FC0C10C20838103FDFFF8208F07EFFFFC7FCFFFFC7FC10;":#8&9*8)8"808$8$8" +8800400801081008C51009FFBFC000051088A0903FD0440440A0BFFFC04000803FC04000803FC04002C04002C81008E07"8">(8/9"8%J' +9110080001092008FCD8A008283FC92218A03FD08890B80AD09111106C92008FC3FE7'<)8%8)8#8&9#9#9#9* +7F0E5F1F0F3F0418000610A0110BC07008241100703FCF070F388209CF0E0F8F3F01000100043404343FD0A0110B3FEF"`<5:":":#9#8% +40B83E003F810400088BFFFC38C08423FD088838C3FC00000103FD10110C03FC00000000686080C880C400088BF@$a.9(>"8$:/ +3FFF80783FFFFC03B981BFE088BC03BF003FD600A03FBF00FFFF8010003FFFFF90003FC00000783FEB"?$3J" +FFBFDC2FD1113FF7FCB3E00077C1FFBFFFEFO!F2>/9"J" +F001E3DFDFFF3FEFFBBDEFBEF73F9FO!FC2:"9"J" +E4C608F0E4F1D9FFF7BDFFBEC8803FDFF7FF7FO!FF(:(<#J" +DB6F676F5B6EE57B7FEFBFBFF7BEFEC7O!FC7.8#8"8$J" +776F7F5B5F7BFFF001FF7D48886F7EEF5FFD39O!F77&8#8%>#J" +76EF705B40F7BDCF888000FBFEO!FF7'9+9# +7AEF6F5B5FF4FEFFC20FBFBFEF7EE0006FF77$8%8#8%8$ +7DEF5FF37FF001DFC8EEFEEFBEFEEFEF<)9*J" +6B7FFFBF7EFFD248FDEFBFEB7FFEF7FE1EO!F07&8'8$8&J" +7BEF5E5B6FC0007F7FDFCFF5FDFFBFFDFBFDEEO!F9/8#8'J" +C91BC6210930EB7FFFBFFF7FC208FBF3F7C0FBFDFDF1O!F3)9$8#9&J" +FFD7FFFFFFFFDCFF9FFFE8FFCFFFF7FEFE07O!F27":*gJ" +EFDFFFC0000000021380O FF7":Z +FF6 + + + + + + + + + + + + + + + + + +J" +O;F0J" +O;FF + +J" +O;F5J" +O;FF + + + +J" +O;FC +J" +O;FFJ" +O;F0J" +O;FEj +O<"@";"8)8$9(9%8$8$8$8#9# +4040093FFFC04008203FC8403FC03FD02000403FC03FFFC8423FC0403FC8423FC0403FC03FE1&<);#8"8";"<#8"8"8&8"8(8" +7E00038380A000080100018483883E01BFC80180C402A000023FC4C0A000C03FC18003EF&;+8*8"9%:"9)80 +51000444400110118800C000848080FFFF88443FCFFFBFFF08C4221FFF00441FFF3FC1101FFF4400403FC11000403FC08000803FE8&;+8+;%=,:#:& +508004040002080D04003000800120C11008883FD49201103FC1FF1001C24400023FC20800023FC2C2088401203FEE@+8*<#@)80 +04040204044011E211C2C9123F093FE4920912E2224900043FC40400044900423FC40400423FD1E211C23FEF7&:+9585 +B1BFBF8E3B0802020204000F110F0171108FFBFC49289113FCE3F0E803FD22200023FCE8E0F0E8DFFF00083FC80200083FDFFF0FFF3FC8020FFF3FCF110F01(9%848*85 +51108404110C8017FD840501110200BFFFD27088A93FFFFF9270BFD10811C4220FFE3FD19111119C04000503FD7FD80503FC04000823FD7FD80823FC1110200BF"9#:+8#9):):'<$8% +5E208820400404847C0210820DE480C4922480BFE0882080403FE0A0A120BF603FE0400060E04000C210820D"9$9'9"8%9%8%:$;$8"<"=" +513F880000400804098208C8880ACF08883FFF003FC9FF20A13F403FC040C008#8#>-9&9%:#9"?#9) +509020080A01041384083FFFC1FC0C8181FC3FE008C8280442203F80810201023FC41384083F@#8"8":*<"8"=#9#9#9#:"9" +07FC0C10C20838103FDFFF8208F07EFFFFC7FCFFFFC7FC10EE;":#8&9*8)8"808$8$8" +8800400801081008C51009FFBFC000051088A0903FD0440440A0BFFFC04000803FC04000803FC04002C04002C81008E07"8">(8/9"8%J' +9110080001092008FCD8A008283FC92218A03FD08890B80AD09111106C92008FC3FEF'<)8%8)8#8&9#9#9#9( +7F0E5F1F0F3F0418000610A0110BC07008241100703FCF070F388209CF0E0F8F3F01000100043404343FD0A0110B"`<5:":":#9#8% +40B83E003F810400088BFFFC38C08423FD088838C3FC00000103FD10110C03FC00000000686080C880C400088BF@$a.9(>"8$:/ +3FFF80783FFFFC03B981BFE088BC03BF003FD600A03FBF00FFFF8010003FFFFF90003FC00000783FEC"?$1J" +FFBFDC2FD2221B6BE00077C1FFBFFFEFO#F2>-9"J" +F001E3DFE0400077EFBEF73F9FO#FC19"9"J" +E4C608F0E4F1D9FFF7BDFFBEC4011B7BFF7FO#FF(:';#J" +DB6F676F5B6EE57B443F9B006FFEC7O#FC708"8$J" +776F7F5B5F7BFFF001FF7D7FA10077EF5FFD39O#F77&8#8&;#J" +76EF705B40F7BDC4213BF6EFFBFEO#FF7'9)9# +7AEF6F5B5FF4FEFFCC3F3BF5E0006FF77$8%8'8$ +7DEF5FF37FF001D6210077EFBEFEEFEF<3J" +6B7FFFBF7EFFD5213BF7EFBFEB7FFEF7FE1EO#F07&8'8"8&J" +7BEF5E5B6FC0007F7FE53FFFBFFDFBFDEEO#F918'J" +C91BC6210930EB7FFFBFFF7FE4213877F7C0FBFDFDF1O#F3)9&9&J" +FFD7FFFFFFFFDCFF9FC42107F7FFF7FEFE07O#F27":)fJ" +EFDFFFC0000000043FO"FF7":Z +FF4 + + + + + + + + + + + + + + + + + + + + +J" +O;F0J" +O;FF + + + + +J" +O;FC +J" +O;FFJ" +O;F0J" +O;FEj +O<"@";"8)8$9(9%8$8$8$8#9# +4040093FFFC04008203FC8403FC03FD02000403FC03FFFC8423FC0403FC8423FC0403FC03FE1&<);#8"8";"<#8"8"8&8"8(8" +7E00038380A000080100018483883E01BFC80180C402A000023FC4C0A000C03FC18003EF&;+8*8"9%:"9)80 +51000444400110118800C000848080FFFF88443FCFFFBFFF08C4221FFF00441FFF3FC1101FFF4400403FC11000403FC08000803FE8&;+8+;%=,:#:& +508004040002080D04003000800120C11008883FD49201103FC1FF1001C24400023FC20800023FC2C2088401203FEE@+8*<#@)80 +04040204044011E211C2C9123F093FE4920912E2224900043FC40400044900423FC40400423FD1E211C23FEF7&:+9585 +B1BFBF8E3B0802020204000F110F0171108FFBFC49289113FCE3F0E803FD22200023FCE8E0F0E8DFFF00083FC80200083FDFFF0FFF3FC8020FFF3FCF110F01(9%848*85 +51108404110C8017FD840501110200BFFFD27088A93FFFFF9270BFD10811C4220FFE3FD19111119C04000503FD7FD80503FC04000823FD7FD80823FC1110200BF"9#:+8#9):):'<$8% +5E208820400404847C0210820DE480C4922480BFE0882080403FE0A0A120BF603FE0400060E04000C210820D"9$9'9"8%9%8%:$;$8"<"=" +513F880000400804098208C8880ACF08883FFF003FC9FF20A13F403FC040C008#8#>-9&9%:#9"?#9) +509020080A01041384083FFFC1FC0C8181FC3FE008C8280442203F80810201023FC41384083F@#8"8":*<"8"=#9#9#9#:" +07FC0C10C20838103FDFFF8208F07EFFFFC7FCFFFFC7FC10;":#8&9*8)8"808$8$8" +8800400801081008C51009FFBFC000051088A0903FD0440440A0BFFFC04000803FC04000803FC04002C04002C81008E07"8">(8/9"8%J' +9110080001092008FCD8A008283FC92218A03FD08890B80AD09111106C92008FC3FEF'<)8%8)8#8&9#9#9#9( +7F0E5F1F0F3F0418000610A0110BC07008241100703FCF070F388209CF0E0F8F3F01000100043404343FD0A0110B"`<5:":":#9#8% +40B83E003F810400088BFFFC38C08423FD088838C3FC00000103FD10110C03FC00000000686080C880C400088BF@$a.9(>"8$:/ +3FFF80783FFFFC03B981BFE088BC03BF003FD600A03FBF00FFFF8010003FFFFF90003FC00000783FEC"?$!K$r2!$7$F!") 225.39 387.14 T +5 F +(F1) 310.5 383.92 T +4 F +(!JC18lEPO?) 322.52 387.14 T +5 F +(\051 ) 368.52 383.92 T +4 F +($r2!$7$^$9!#) 373.89 387.14 T +19 F +(4) 195.6 342.11 T +4 F +(!VHO0O;XDj$r;XDj$7$F$/$@$5$$!W$H$$$&%a%C%;!<%8$,I=<\050$5$l$^$9$N) 212.61 345.33 T +($G!"%+!<%=%k%-!<$r;H$C$FL\134E*$N4A;z$,H?E>$9$k$h$&$K;XDj$7!"2~9T) 212.61 329.04 T +(%-!<$r2!$7$^$9!#) 212.61 312.74 T +5 F +(Esc) 212.61 293.22 T +4 F +(%-!<$r2!$9$H!"2?$b$;$:$K85$N>uBV$KLa$j$^$9!#) 228.2 296.44 T +19 F +(5) 195.6 251.41 T +4 F +(EPO?$9$k4A;z$KBP$9$k!VFI$_F~NO!W$rJ?2>L>$G;XDj$7$^$9!#) 212.61 254.63 T +($3$3$G$O!V$H!W$HF~NO$7!"2~9T%-!<$r2!$7$^$9!#) 212.61 238.33 T +19 F +(6) 195.6 193.3 T +4 F +(J8K!>pJs) 212.61 196.52 T +5 F +(\0501. ) 251.71 193.3 T +4 F +(L>;l) 263.98 196.52 T +5 F +(2. ) 284.68 193.3 T +4 F +(L>;z) 293.88 196.52 T +5 F +(3. ) 314.58 193.3 T +4 F +(L>A0) 323.79 196.52 T +5 F +(4. ) 344.49 193.3 T +4 F +(COL>) 353.69 196.52 T +5 F +(5. ) 374.39 193.3 T +4 F +(%5JQF0;l) 383.59 196.52 T +5 F +(\051 ) 422.7 193.3 T +4 F +($rEPO?$7$^$9!#$3) 428.06 196.52 T +($3$G$O) 212.61 180.23 T +5 F +(1) 242.51 177 T +4 F +($^$?$O2~9T%-!<$r2!$7$^$9!#) 249.42 180.23 T +19 F +(7) 195.6 135.19 T +4 F +(EPO?$9$k4A;z$HFI$_$HIJ;l$r3NG'$7!") 212.61 138.42 T +5 F +(y) 371.33 135.19 T +4 F +(!"2~9T$^$?$O1J" +FFBFDC2FD222034C200077C1FFBFFFEFO#F2>-9"J" +F001E3DFE04004422FBEF73F9FO#FC0:"9"J" +E4C608F0E4F1D9FFF7BDFFBEC40108FF7FO#FF(:&<#J" +DB6F676F5B6EE57B443F8841FEC7O#FC708"8$J" +776F7F5B5F7BFFF001FF7D7FA11081EF5FFD39O#F77&8#8#>#J" +76EF705B40F7BDC421FBFEO#FF7'9%8#9# +7AEF6F5B5FF4FEFFCC3F20006FF77$8%8'8$ +7DEF5FF37FF001D62111012FBEFEEFEF<(8*J" +6B7FFFBF7EFFD5022FBFEB7FFEF7FE1EO#F07&8*8&J" +7BEF5E5B6FC0007F7FE53F0A023FBFFDFBFDEEO#F918'J" +C91BC6210930EB7FFFBFFF7FE421040CF7C0FBFDFDF1O#F3)9&9&J" +FFD7FFFFFFFFDCFF9FC4210030FFF7FEFE07O#F27":)fJ" +EFDFFFC0000000043FO"FF7":Z +FF4 + + + + + + + + + + +J" +O;F0J" +O;F2J" +O;FF + + +J" +O;FCJ" +O;FAJ" +O;FFJ" +O;F0J" +O;FF + + + + + +J" +O;FC +J" +O;FFJ" +O;F0J" +O;FEj +O<"@";"8)8$9(9%8$8$8$8#9# +4040093FFFC04008203FC8403FC03FD02000403FC03FFFC8423FC0403FC8423FC0403FC03FE1&<);#8"8";"<#8"8"8&8"8(8" +7E00038380A000080100018483883E01BFC80180C402A000023FC4C0A000C03FC18003EF&;+8*8"9%:"9)80 +51000444400110118800C000848080FFFF88443FCFFFBFFF08C4221FFF00441FFF3FC1101FFF4400403FC11000403FC08000803FE8&;+8+;%=,:#:& +508004040002080D04003000800120C11008883FD49201103FC1FF1001C24400023FC20800023FC2C2088401203FEE@+8*<#@)80 +04040204044011E211C2C9123F093FE4920912E2224900043FC40400044900423FC40400423FD1E211C23FEF7&:+9585 +B1BFBF8E3B0802020204000F110F0171108FFBFC49289113FCE3F0E803FD22200023FCE8E0F0E8DFFF00083FC80200083FDFFF0FFF3FC8020FFF3FCF110F01(9%848*85 +51108404110C8017FD840501110200BFFFD27088A93FFFFF9270BFD10811C4220FFE3FD19111119C04000503FD7FD80503FC04000823FD7FD80823FC1110200BF"9#:+8#9):):'<$8% +5E208820400404847C0210820DE480C4922480BFE0882080403FE0A0A120BF603FE0400060E04000C210820D"9$9'9"8%9%8%:$;$8"<"=" +513F880000400804098208C8880ACF08883FFF003FC9FF20A13F403FC040C008#8#>-9&9%:#9"?#9) +509020080A01041384083FFFC1FC0C8181FC3FE008C8280442203F80810201023FC41384083F@#8"8":*<"8"=#9#9#9#:" +07FC0C10C20838103FDFFF8208F07EFFFFC7FCFFFFC7FC10;":#8&9*8)8"808$8$8" +8800400801081008C51009FFBFC000051088A0903FD0440440A0BFFFC04000803FC04000803FC04002C04002C81008E07"8">(8/9"8%J' +9110080001092008FCD8A008283FC92218A03FD08890B80AD09111106C92008FC3FEF'<)8%8)8#8&9#9#9#9( +7F0E5F1F0F3F0418000610A0110BC07008241100703FCF070F388209CF0E0F8F3F01000100043404343FD0A0110B"`<5:":":#9#8% +40B83E003F810400088BFFFC38C08423FD088838C3FC00000103FD10110C03FC00000000686080C880C400088BF@$a.9(>"8$:/ +3FFF80783FFFFC03B981BFE088BC03BF003FD600A03FBF00FFFF8010003FFFFF90003FC00000783FEC"?$$9$H$-$O!") 212.61 689.89 T +5 F +(n) 306.92 686.67 T +4 F +(%-!<$r2!$7$^$9!#EPO?$5$l$k$H!VEPO?$7$^$7) 313.83 689.89 T +($?!W$HI=<\050$5$l$^$9!#) 212.61 673.59 T +5 F +(Esc) 212.61 654.07 T +4 F +(%-!<$r2!$9$H!"2?$b$;$:$K85$N>uBV$KLa$j$^$9!#) 228.2 657.29 T +19 F +(8) 195.6 612.26 T +4 F +(G$0U$N%-!<$r2!$9$H!"DL>o$N>uBV$KLa$j$^$9!#) 212.61 615.48 T +6 F +(EPO?$7$?C18l$r;H$&$K$O) 195.6 582.89 T +19 F +(1) 195.6 537.85 T +4 F +(!V$H!W$HF~NO$7$^$9!#) 212.61 541.08 T +19 F +(2) 195.6 496.05 T +4 F +(JQ49$r2!$7$^$9!#!VEl3$F;?744@~!W$HJQ49$5$l$^$9!#) 212.61 499.27 T +13 F +("#!!C18l>C5n) 87.88 450.02 T +4 F +(!V$H!W$H$$$&FI$_$GEPO?$7$?!VEl3$F;?744@~!W$rC$7$F$_$^$9!#) 195.6 433.37 T +19 F +(1) 195.6 388.33 T +4 F +(!V$H!W$HF~NO$7$^$9!#) 212.61 391.56 T +19 F +(2) 195.6 346.52 T +4 F +(JQ49$r2!$7$^$9!#) 212.61 349.75 T +(!VEl3$F;?744@~!W$HJQ49$5$l$^$9!#) 212.61 333.45 T +19 F +(3) 195.6 288.42 T +5 F +(F3\050) 212.61 288.42 T +4 F +($=$NB>!K$r2!$7$F!") 225.39 291.64 T +5 F +(F2) 310.5 288.42 T +4 F +(!JC18l>C5n) 322.52 291.64 T +5 F +(\051 ) 368.52 288.42 T +4 F +($r2!$7$^$9!#) 373.89 291.64 T +19 F +(4) 195.6 246.61 T +4 F +(>C5n$7$?$$FI$_F~NO$r;XDj$7$^$9!#$3$3$G$O!V$H!W$HF~NO$7!"2~9T$r2!) 212.61 249.83 T +($7$^$9!#) 212.61 233.53 T +19 F +(5) 195.6 188.5 T +4 F +(>C5n$5$l$k4A;z$rFI$_$r3NG'$7!") 212.61 191.73 T +5 F +(y) 352.93 188.5 T +4 F +(!"2~9T$^$?$OC5n) 357.53 191.73 T +($5$l$k$H!V>C5n$7$^$7$?!W$HI=<\050$5$l$^$9!#) 212.61 175.43 T +19 F +(6) 195.6 130.39 T +4 F +(G$0U$N%-!<$r2!$9$H!"DL>o$N>uBV$KLa$j$^$9!#) 212.61 133.62 T +FMENDPAGE +%%EndPage: "27" 28 +%%Page: "28" 28 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-) 87.88 92.59 T +(28) 97.32 92.59 T +1 F +(!!) 109.14 95.32 T +10 F +(SJ3 ) 116.92 92.59 T +1 F +(F|K\1348lF~NO%U%m%s%H%\050%s%I%W%m%;%C%5) 132.49 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +0 X +(;HMQJ}K!) 87.88 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +13 F +0 X +("#!!=$@5) 87.88 689.54 T +4 F +(=$@55!G=$r;H$C$F!"8m$C$?F~NO$GJQ49$5$l$?J8@a$r=$@5$G$-$^$9!#) 195.6 672.88 T +19 F +(1) 195.6 627.85 T +4 F +(JQ49BP>]$r=$@5$7$?$$J8@a$K$7$^$9!#JQ49BP>]$N0\134F0$O!"H?E>ItJ,$r) 212.61 631.07 T +(%+!<%=%k%-!<$r;H$C$F0\134F0$9$k$3$H$G;XDj$7$^$9!#) 212.61 614.78 T +19 F +(2) 195.6 569.74 T +5 F +(F3) 212.61 569.74 T +4 F +(!J$=$NB>!K$r2!$7$F!") 224.63 572.97 T +5 F +(F5) 318.94 569.74 T +4 F +(!JJQ497k2L=$@5) 330.96 572.97 T +5 F +(\051 ) 395.37 569.74 T +4 F +($r2!$7$^$9!#JQ49BP>]) 400.73 572.97 T +($,!"J?2>L>$KJ,2r$5$l$F%,%$%I%i%$%s$KI=<\050$5$l!"%+!<%=%k$,8=$o$l$^) 212.61 556.67 T +($9!#) 212.61 540.37 T +19 F +(3) 195.6 495.34 T +4 F +(]$,=$@5$5$l$?@5$7$$F~NO$G:FJQ) 212.61 299.6 T +(49$5$l$^$9!#) 212.61 283.3 T +19 F +(5) 195.6 238.26 T +4 F +(F12;0[5D8lJQ49$J$I$r$7$F!"@5$7$/JQ49$7$^$9!#) 212.61 241.49 T +13 F +("#!!%3!<%IF~NO) 87.88 192.24 T +5 F +(EUC) 195.6 172.36 T +4 F +(!") 214 175.59 T +5 F +(\050EUC) 225.51 172.36 T +4 F +(Jd=u) 249.28 175.59 T +5 F +(\051) 267.68 172.36 T +4 F +(!") 270.74 175.59 T +5 F +(JIS) 282.25 172.36 T +4 F +(!") 294.01 175.59 T +5 F +(\050JIS) 305.51 172.36 T +4 F +(Jd=u) 322.63 175.59 T +5 F +(\051) 341.04 172.36 T +4 F +(!"%7%U%H) 344.1 175.59 T +5 F +(JIS) 383.21 172.36 T +4 F +(!"6hE@!") 394.97 175.59 T +5 F +(\050) 434.07 172.36 T +4 F +(6hE@Jd=u) 437.14 175.59 T +5 F +(\051) 473.94 172.36 T +4 F +($N) 479.31 175.59 T +5 F +(4\0507\051) 490.81 172.36 T +4 F +(o$NF~NO$KLa$k$K$O!") 212.61 515.57 T +5 F +(F6) 316.12 512.34 T +4 F +($+$i) 328.14 515.57 T +5 F +(F10) 348.85 512.34 T +4 F +($N$I$l$+$r2!$7$^$9!#) 365.47 515.57 T +6 F +(JXMx$J5!G=) 195.6 482.97 T +4 F +(%,%$%I%i%$%s$KJ8;z$d5-9f$rI=<\050$7$F!"$=$NCf$+$iL\134E*$NJ8;z$d5-9f$rA*) 195.6 466.67 T +($V$3$H$,$G$-$^$9!#) 195.6 450.38 T +19 F +(1) 195.6 405.34 T +5 F +(F5) 212.61 405.34 T +4 F +(!J%3!<%I) 224.63 408.57 T +5 F +(\051 ) 261.43 405.34 T +4 F +($r2!$7$^$9!#) 266.8 408.57 T +19 F +(2) 195.6 363.53 T +4 F +(%+!<%=%k%-!<$r2!$7$^$9!#%,%$%I%i%$%s$KJ8;z$d5-9f$,I=<\050$5$l$^$9!#) 212.61 366.76 T +19 F +(3) 195.6 241.63 T +4 F +(%+!<%=%k%-!<$r;H$C$FL\134E*$NJ8;z$d5-9f$rH?E>I=<\050$5$;$^$9!#) 212.61 244.85 T +87.88 119.06 507.41 694.5 C +96.39 274.97 507.41 338.77 C +96.39 274.97 507.41 338.77 R +7 X +0 K +V +0 X +%%BeginBinary: 1327 +588 86 282.24 41.28 0 210.23 285.53 BEGINBITMAPBWc + + +=" +7F<" +E7<# +DAFFJ" +O;F6J" +O;F1(J" +E4C608F0E4F1D9O4FF(J" +DB6F676F5B6EE5O4F07'J" +776F7F5B5F7BO4FB7&J" +76EF705B40O5FF7' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7&J" +7BEF5E5B6FO5F0(J" +C91BC6210930EBO4FE)J" +FFD7FFFFFFFFDCFFO3F07":"J" +EFDFO4FB7":# +FFFF7F<" +E7<#J" +DAFFO3F1J" +O;F2J" +O;FC(J" +E4C608F0E4F1D9O4FF(J" +DB6F676F5B6EE5O4FC7'J" +776F7F5B5F7BO4F77&J" +76EF705B40O5FF7' +7AEF6F5B5FF47$8# +7DEF5FF37F<"J" +6BO4F07&J" +7BEF5E5B6FO5F9(J" +C91BC6210930EBO4F3)J" +FFD7FFFFFFFFDCFFO3F27":"J" +EFDFO4FF7":" +FFFF + + + + + + + + + + + + + + + +J" +O;F8J" +O;F3J" +O;FAJ" +O;FF +J" +O;F0J" +O;FF + + + + +J" +O;FC +J" +O;FFJ" +O;F0J" +O;FEj +O<"I(Z3V" +403FFFFFFFC0003F1D7FFE7FFFFCFFE7FFCE7FFFFF87FFFFFFFC3E1&='J-:'A" +7E000383801FFE3F1F81E46FE0FFF1FEBFFDBFFFE3FFF8FFBFFFBFFFBFBEF&='J#";":"I$ +9110060C06181FC31FDE7BDE'<'>"9">&C% +7F0E5F1F0F3F1FFE01F001E027F39FFFBFFFBFE120E120"`(:(C% +403BFFE3FFF7FFE7FFFFBFFF1FFF1FFFFFFFFFJ&<&B#9" +I=<\050$5$;$?$i%9%Z!<%9%-!<$r2!$7$^$9!#) 212.61 689.89 T +($=$NJ8;z$,I=<\050$5$l$^$9!#) 212.61 673.59 T +13 F +("#!!%P%C%U%!%b!<%I;~$NJ8;zF~NOA`:n) 87.88 624.34 T +6 F +(%+!<%=%k0\134F0) 195.6 591.39 T +5 F +(sj3 ) 195.6 571.87 T +4 F +($G$O!"J8;zF~NO$K=@Fp@-$r;}$?$;$k$?$a!"%+!<%=%k$N0\134F05!G=$,$"$j$^) 208.64 575.09 T +($9!#:8%+!<%=%k0\134F0$O"+%-!$K!"%P%C%U%!$N:G=i$H:G8e$K0\134F0$9$k%-!<$b%;%C%H%"%C%W%U%!%$%k$G;X) 195.6 542.5 T +(Dj$9$k$3$H$,$G$-$^$9!#>\134$7$$;XDjJ}K!$O!") 195.6 526.2 T +5 F +(sj3 ) 381.92 522.97 T +4 F +($N%;%C%H%"%C%W%U%!%$%k$N) 394.96 526.2 T +(9`$r$4Mw$/$@$5$$!#J8;z$O>o$K$3$N%+!<%=%k$NA0$KA^F~$5$l$^$9!#) 195.6 509.9 T +6 F +(J8;z:o=|) 195.6 477.3 T +5 F +(sj3 ) 195.6 457.78 T +4 F +($O!"DL>o$NJ8;z:o=|$HF1MM$K) 208.64 461 T +5 F +(erase ) 330.55 457.78 T +4 F +(J8;z$G%+!<%=%k$NA0$NJ8;z$r:o=|$G) 351.75 461 T +($-$^$9!#$?$@$7D>A0$K%m!<%^;z$+$JJQ49$7$?J8;z$O!"%m!<%^;z%"%k%U%!%Y) 195.6 444.71 T +(%C%H$KJ,2r$7$F#1J8;z:o=|$5$l$^$9!#$^$?%;%C%H%"%C%W%U%!%$%k$G) 195.6 428.41 T +5 F +(delkey ) 473.93 425.18 T +4 F +($K;XDj$5$l$?J8;z$G$O!"%+!<%=%k>e$NJ8;z$r:o=|$G$-$^$9!#) 195.6 412.11 T +13 F +("#!!%5!<%P:F@\134B3A`:n) 87.88 362.86 T +5 F +(sj3 ) 195.6 342.98 T +4 F +($O!"%5!<%P%/%i%$%"%s%HJ}<0$K$J$C$F$$$^$9$+$i!"%5!<%P$,2?$i$+$N0[) 208.64 346.21 T +(>o$G%@%&%s$7$?$j!"%M%C%H%o!<%/$,@Z$l$?$j$9$k$H!") 195.6 329.91 T +5 F +(sj3 ) 418.73 326.68 T +4 F +(<+?H$OF0:n$7$^$9) 431.76 329.91 T +($,!"4A;zJQ49!"C18lEPO?>C5nA`:n$,$G$-$J$/$J$j$^$9!#$3$l$r2sHr$9$k$N) 195.6 313.61 T +($,%5!<%P:F@\134B3A`:n$G$9!#) 195.6 297.31 T +(4A;zJQ49$dC18lEPO?>C5n$r$7$h$&$H$7$?;~$K!"%5!<%P$H$N@\134B3$,@Z$l$F$$) 195.6 264.72 T +($k>l9g!"l9g$G$b%5!<%P$rJ#?t;XDj$7$F$$$k$H!"$=$N=gHV) 195.6 179.03 T +87.88 119.06 507.41 694.5 C +96.39 199.93 507.41 236.73 C +96.39 199.93 507.41 236.73 R +7 X +0 K +V +0 X +%%BeginBinary: 1710 +588 54 282.24 25.92 0 196.82 206.01 BEGINBITMAPBWc +J" +O;F9J" +O;FF=" +7F<" +E7<# +DAFF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7&J" +7BEF5E5B6FO5F0(J" +C91BC6210930EBO4F2)J" +FFD7FFFFFFFFDCFFO3FF7":" +EFDF7":#?"8#J" +FFFF7F9FC03FO%FE<"9+J" +E7FE7FFE7FFE7FFFDFFBC7O'F0<#8'8# +DAFFFFBFFF7FFFBFFC37A*J" +7FFF7BFF7FDE007FEFO'FB?"8#8%J" +7FEE1DE1DFFF9FO'FF28" +E4C608F0E4F1D9FFFEBFFEFFF0EEFEFFFF7F+8":$J" +DB6F676F5B6EE5FFFDDFFE1FFEC7O'F07'8,J" +776F7F5B5F7BEFFDFFFDEF7DFFFEDFFD39O'FF7&8"8"9& +76EF705B40FB3F3FFDEFFBFE708" +7AEF6F5B5FF4FFF7F7FADEFBEC7ADEF77$8&8' +7DEF5FF37FCFFBFBEF7BDEFECFEFF~NOBT$A>uBV$K$7$^$9!#) 195.6 595.76 T +(@\134B3$7$?$$%5!<%PL>$rF~NO$7$F2~9T%-!<$r2!$9$H!";XDj$7$?%5!<%P$H@\134B3) 195.6 528.61 T +($r;n$_$^$9!#@\134B3$K<:GT$9$k$H!"$b$&0lEYA`:n$9$k$+J9$$$F$-$^$9!#$3$N) 195.6 512.31 T +(A`:n$rESCf$G;_$a$?$1$l$P!"JQ49%-!<$r2!$7$F$/$@$5$$!#) 195.6 496.01 T +13 F +("#!!%+%?%+%J8l<+F0EPO?A`:n) 87.88 446.76 T +5 F +(sj3 ) 195.6 426.88 T +4 F +($O!"<-=q$KEPO?$5$l$F$$$J$$JR2>L>8l$r%f!<%6<-=qEPO?A`:n$r$9$k$3$H) 208.64 430.11 T +($J$/!"%f!<%6<-=q$KEPO?$9$k$3$H$,$G$-$k$h$&$K$J$C$F$$$^$9!#) 195.6 413.81 T +(Nc$\050$P!"!V$W$j$s$H$"$&$H!W$HF~NO$7$FJQ49$9$k$H!"0J2<$N$h$&$KJQ49$5) 195.6 381.21 T +($l$^$9!#) 195.6 364.92 T +($3$3$GJ8@a$r#1J8@a$K$7$?$N$A:F$SJQ49$r2!$9$H!"!V%W%j%s%H%"%&%H!W$H) 195.6 284.54 T +($$$&8uJd$,%,%$%I%i%$%s$K8=$l$^$9!#) 195.6 268.24 T +($3$3$G!V#1!W$r2!$7$F%,%$%I%i%$%s$K8=$l$?8uJd$rA*Br$7$?=V4V$K!"%f!<) 195.6 185.32 T +(%6<-=q$K!V%W%j%s%H%"%&%H!W$,EPO?$5$l$^$9!#IJ;l$OI,$:L>;l$K$J$j$^) 195.6 169.03 T +($9!#0J2<$O) 195.6 152.73 T +5 F +(sj3dic) 243.91 149.5 T +4 F +(%3%^%s%I$r"9$8"9$:#8#J" +480204F4EFE1FDEFEFBFFB0BF7D3F77FCEF9%8"85 +0C284480DF:DFFFFFFBEFC030C60030FBFFF7C0FBF3D7BB7DE7FBDCFDE7F7BF9#:"8":P9/ +33083FFFFFFBCCF7BB7E1FFC1FFE1FEFC07F7&9";#;*P$J" +1E1DC08987FFF843C3FFFFFFE23F76787FEFFFFFBECj" +O;0F +ENDBITMAP +%%EndBinary +196.37 644.65 477.62 670.27 R +0.5 H +0 Z +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 533.21 507.41 584.07 C +96.39 533.21 507.41 584.07 R +7 X +0 K +V +0 X +%%BeginBinary: 1534 +588 54 282.24 25.92 0 196.82 546.36 BEGINBITMAPBWc +J" +O;F2J" +O;FF=" +7F<" +E7<# +DAFF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F( +C91BC6210930EB) +FFD7FFFFFFFFDCFF7":" +EFDF7":# +FFFF7F<" +E7<# +DAFF + +( +E4C608F0E4F1D9(J" +DB6F676F5B6EE5O4F07'J" +776F7F5B5F7BO4FF7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F(J" +C91BC6210930EBO4FC) +FFD7FFFFFFFFDCFF7":"J" +EFDFO4FF7":"J" +FFFFO4F0J" +O;FEj +O<)P4X#Z" +400104080808003FFEFF7FFFF87FF9FFFFF9FFC3FFFFFFFBBFFFBFC03F:E1%8"8"9';"8$8":&J" +7FFF840980E7FB7F7BFFFBFFFB3FFBBEF3EFFCFEFE7F?EF'8#9$9"8":'8(J" +404004FF92FFF9F7FD7F01FFFFBFFBB1E000F9C0FFF7FEFB7F7B?E89';#@2J" +422208003FFDFEFBF767FB8FEFFEFBFFDC2FFFEFFECD7FA7DF>EE':'@&9+J" +4FFE3F2214097FFFFDF7FDF7F81FC0BF6FE3DFFFDFEE3DEF1FEFF7=EF'8#8$9/8+ +48420424887FFC00FEFBF9C1E1F148E1F17BFFFEFDFBBF7FFDFFBFFF3FF1FFF0DFEFFB9$8)8'9&9* +FF9200C1F7EFFDFEFDE6EFEEFDEE677DEEFEFBC070017FFEFFFDFFFFEFEFFD&9)8'8':"8$ +4FFE041022FDF7F000FDFDFF5FEF7DDF6F7DDFFD3DFAFFFFBFFDF0FFF7(9';"8"8#="8& +48420710BEFF80FFFFFDFEFFBFEFFBD3F9FB8FFF8BEFFE8%<&?2 +0CFF8880FBFEFE007FFBCFF380FBBDFBFDFEFFFDFFFBFFFC73EE8%8":$@':"9# +B4222AA4FFFF7CFFF79FCBBEFB81FEFBFF(8"8$9%8&8$8#8$J" +7FFF84422A2400EFF7FF72EEFDDF6F7BFFFF5FFBBFFBFBFF7FF7FFF5>E0%>$9$8"8&9'9"J" +480204F4EFFF4EE1FDEFEFFEDFFB80F5FF7FFF9FF77FFF=EF9%8"8$919' +0C284480DFDFFFFEEFC030C60030FBFFFDFFFBBEF6BFFDE7EFF7BFF9FFFB9#:"8"8"9P<- +33083FFF00EF3FFE1FFF9FFFF7EFC07E037&9";%;4J" +1E1DC08987FFFF7FF843C3FFFE01E380DFC07FFFFFE3FFFBEFFFFFFFFF>ECj" +O;0F +ENDBITMAP +%%EndBinary +196.37 546.77 478.87 571.77 R +0.5 H +0 Z +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +90.06 289.14 505.23 353.22 C +90.06 289.14 505.23 353.22 R +7 X +0 K +V +0 X +%%BeginBinary: 2750 +644 86 309.12 41.28 0 190.5 297.77 BEGINBITMAPBWc + + +=" +7F<" +E7<# +DAFF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<"J" +6BO;F07&J" +7BEF5E5B6FO&8( +CFFF020408003DF7FFFFFEF7>#8#8' +C00204013BF9FF87FEFB(;"9' +E4C608F0E4F1D9023406767BFEF3(<* +DB6F676F5B6EE50201C00FFFF9FBFECF7';"8( +776F7F5B5F7B00303FFFFFFDFF3F7&9"9&8# +76EF705B400404010C3FFEFEFF7'<) +7AEF6F5B5FF408010200007FFDFD7$80 +7DEF5FF37FC0080008001001003EFFFFFDFB<"8"9"8& +6B10603DF7FFFBF77&9&9" +7BEF5E5B6F2000101180FB(8&8& +C91BC6210930EBC000601E003BF1FFF7F3.9' +FFD7FFFFFFFFDCFFC300038000200EFFCFFC017":':b" +EFDFFFC00000003F7":Z +FF2 + + + + + + + + + + +J" +OBF4 + + +J" +OBF0J" +OBFFj" +OB0F"@";"8)8$9(9%8$8$8$8#9"R" +4040093FFFC04008203FC8403FC03FD02000403FC03FFFC8423FC0403FC8423FC0403FC03FEF&<);#8"8";"<#8"8"8&8"8(?" +7E00038380A000080100018483883E01BFC80180C402A000023FC4C0A000C03FC18003E0&;+8*8"9%:"9)8. +51000444400110118800C000848080FFFF88443FCFFFBFFF08C4221FFF00441FFF3FC1101FFF4400403FC11000403FC0800080&;+8+;%=,:#:$>" +508004040002080D04003000800120C11008883FD49201103FC1FF1001C24400023FC20800023FC2C208840120EF@+8*<#@)8. +04040204044011E211C2C9123F093FE4920912E2224900043FC40400044900423FC40400423FD1E211C27&:+9585 +B1BFBF8E3B0802020204000F110F0171108FFBFC49289113FCE3F0E803FD22200023FCE8E0F0E8DFFF00083FC80200083FDFFF0FFF3FC8020FFF3FCF110F01(9%848*85 +51108404110C8017FD840501110200BFFFD27088A93FFFFF9270BFD10811C4220FFE3FD19111119C04000503FD7FD80503FC04000823FD7FD80823FC1110200BF"9#:+8#9):):'<$8% +5E208820400404847C0210820DE480C4922480BFE0882080403FE0A0A120BF603FE0400060E04000C210820D"9$9'9"8%9%8%:$;$8"<"=">" +513F880000400804098208C8880ACF08883FFF003FC9FF20A13F403FC040C008E0#8#>-9&9%:#9"?#9)=" +509020080A01041384083FFFC1FC0C8181FC3FE008C8280442203F80810201023FC41384083FEF@#8"8":*<"8"=#9#9#9#:" +07FC0C10C20838103FDFFF8208F07EFFFFC7FCFFFFC7FC10;":#8&9*8)8"808$8$ +8800400801081008C51009FFBFC000051088A0903FD0440440A0BFFFC04000803FC04000803FC04002C04002C810087"8">(8/9"8%J% +9110080001092008FCD8A008283FC92218A03FD08890B80AD09111106C92008FC'<)8%8)8#8&9#9#9#9( +7F0E5F1F0F3F0418000610A0110BC07008241100703FCF070F388209CF0E0F8F3F01000100043404343FD0A0110B"`<5:":":#9#8%=" +40B83E003F810400088BFFFC38C08423FD088838C3FC00000103FD10110C03FC00000000686080C880C400088BFE0@$a.9(>"8$:.=" +3FFF80783FFFFC03B981BFE088BC03BF003FD600A03FBF00FFFF8010003FFFFF90003FC00000783FEF"?$&8( +CFFF02040800000208420100>#8#9$ +C0020401040FFF(;":$ +E4C608F0E4F1D902080802(<&9" +DB6F676F5B6EE50201C00050C07';"8$9" +776F7F5B5F7B00300060307&9"9&9" +76EF705B400404010C00400C7'<$;" +7AEF6F5B5FF4080102027$8+8% +7DEF5FF37FC00800080010010000040100<"8"9"9" +6B1060807&9&;" +7BEF5E5B6F200010118008(8&8% +C91BC6210930EBC000601E0001000010.9"8" +FFD7FFFFFFFFDCFFC30003800006607":':%8# +EFDFFFC000000000000180003F7":Z +FF2 + + + + + + + + + + +J" +OBF4 + + +J" +OBF0J" +OBFFj" +OB0F+Z" +4000803FF87FC3FFFFFCO8E7(8$8"8%J" +4400843FFBFBFBFB7FF3FCFDFF3FFCO-EF$8":#8)J" +5C011CE379FBFE7FE000FFBFFE7FO,E7$8"8&8(J" +440104FBF000FDFBF7FFFFFDF7BDFEFFO,EF7"<#8#9$ +02FFFDFBFEFBF000B":$ +FDF7F7FDC&9" +FDFE3FFFAF3F7"@"8$9" +04FFCFFF9FCF?"9&9"J" +FBFBFEF3FFBFF3O,E0C$;"J" +F7FEFDFDO,EF7"=(8% +08F7FFF7FFEFFEFFFFFBFEFF?"9"9" +EF9F7F7"=&;" +10DFFFEFEE7FF7$8"9&8% +5F101FE03FFF9FE1FFFEFFFFEF$8"8&9"8"J" +402000FFFCFFFC7FFFF99FO.E0:$P:%J" +F87FC3FFFFFE7FO.EFj" +OB0F +ENDBITMAP +%%EndBinary +189.7 201.49 498.7 243.2 R +0.5 H +0 Z +N +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "31" 32 +%%Page: "32" 32 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-) 87.88 92.59 T +(32) 97.32 92.59 T +1 F +(!!) 109.14 95.32 T +10 F +(SJ3 ) 116.92 92.59 T +1 F +(F|K\1348lF~NO%U%m%s%H%\050%s%I%W%m%;%C%5) 132.49 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +0 X +(;HMQJ}K!) 87.88 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +4 F +0 X +(%f!<%6<-=q$KEPO?$5$l$k$N$O!"%,%$%I%i%$%s$+$iJR2>L>$N8uJd$rA*Br$7$?) 195.6 626.82 T +(>l9g$@$1$G$9!#JR2>L>%-!<$r2!$9$3$H$K$h$C$FJR2>L>$K$7$?>l9g$OEPO?$5) 195.6 610.52 T +($l$^$;$s!#) 195.6 594.22 T +90.06 631.42 505.23 694.5 C +90.06 631.42 505.23 694.5 R +7 X +0 K +V +0 X +%%BeginBinary: 1810 +644 86 309.12 41.28 0 190.5 639.04 BEGINBITMAPBWc + + +=' +7FFFFE7FFFF9<"9$ +E771FE79<(9"8" +DAFFFFFFEEFEFFF7F7@# +DF7E +5 +4E4C608F0E4F1D9FFF1707F70E1F17FFFC0F1C440/8% +DB6F676F5B6EE5FFEE7F7EEEFDEEF7EEEEF773 +776F7F5B5F7BFFEF7F71DEFDDF7FC077DF757&9#9% +76EF705B40FF7EFFFFF7C07,;# +7AEF6F5B5FF4FFF0FF7F5EDFFB7$8&=" +7DEF5FF37FFF7F5FF5<$;"8% +6B7FDF7F5F75F77F7&8'9# +7BEF5E5B6FCF5F6EEEFDEF6F6E5 +5C91BC6210930EB7FD0DF71F04030FFFFF8F0C478FF/8% +FFD7FFFFFFFFDCFFFFEEFFFFFFFFFFFFFFFF7":"8" +EFDFF17":"8$C"J%J" +FCFFFFFE7FFC77FE1FF7F;F0.B$8"8%B%J" +FEFB7BF7FE7FF9FFFEFFFF8FF9FB7FF3FCFDFF3FFC7BFF003F;FF.C#8)A% +FF3B7DFBFFBFFEFFFF7FFF7FFE79FBFE7FE000FFBFFE7F01FFFF7F7#8*@&8(@$ +CCFD7FFEF7FF67FFFFFEF7F000FDFBF7FFFFFDF7BDFEFFFEFBC07";(@#8#9$B% +3FFBEE1FFF87FEFBFFFDFBFEFBF000FDF7FF83/D":$B"8# +FEFFFBFBFEFFFEF3F0FFF67BFEF3FDF7F7FDF9FF71=(E&9"@$ +CFFEFFF9FBFECFFDFE3FFFAF3FE6EFE0/D"8$9"@& +FF7FFAFBFDFFFF3FFE87FFFDFF3FFFCFFF9FCFFF5FFF837F7"9&8#A"9&9"A$ +A73FFEFFFC6BFEFFFBFBFEF3FFBFF3BFFFBB7*8"F$;"@$ +19FDFBFADEFDFFFAEDFDF7FEFDFDFE0060#8'8"B(8%@$ +FCEEFBDEFBFFF6DEFBF7FFF7FFEFFEFFFFFBFEFFFCFF7F.B"9"9"D"8" +FBF77FF7F7DEF7FFF75EFFFBF7EF9F7FF283"=#E&;"B& +D7EF3EDFFFEFEE7FF7CEFF60BF71.B&8%B% +EEEFFFEFEFDDF3FFEE7EFFF7F33FFF9FE1FFFEFFFFEFFEFF6EFF/@&9"8"C"8" +FF1FFF9FEFE3FC01F1F9FFCFFC01FCFFFC7FFFF99F007F7$P&@%:%C$ +FFFE7FC7FE3FFFFFFFFFFFFFFFFFFE7FFF60F88#9&H"9$AP +FFFF7FC03FFFFFFFFFFFFF<% +E77FDFBF<# +DAFF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F( +C91BC6210930EB) +FFD7FFFFFFFFDCFF7":% +EFDFFFC03F7":% +FFFFFFFFFF + + + + + + + + + + + +J" +OBF4 + +J" +OBF0J" +OBFFj" +OB0F"I"Z" +403FO-EF'J" +43E400FF00F0OL>4A;zJQ49$N$7$+$?$N$^$H$a) 398.46 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +12 F +0 X +(2>L>4A;zJQ49$N$7$+$?$N$^$H$a) 87.88 687.41 T +19 F +(1) 195.6 639.9 T +4 F +(J8$rF~NO$7$^$9!#) 212.61 643.12 T +(J?2>L>!"JR2>L>!"%"%k%U%!%Y%C%H$r:.$<$FF~NO$7$F$b9=$$$^$;$s!#$?$@) 212.61 626.82 T +($72>L>4A;zJQ49$G$-$k$N$O!"J?2>L>$NItJ,$@$1$G$9!#) 212.61 610.52 T +5 F +(F6) 435.74 607.3 T +4 F +($+$i) 447.76 610.52 T +5 F +(F10) 468.46 607.3 T +4 F +($^$G) 485.08 610.52 T +($N%-!<$r2!$9$HF~NO%b!<%I$,$=$l$>$lJQ$o$j$^$9!#F~NO$r4V0c$\050$?$H$-) 212.61 594.23 T +($O) 212.61 577.93 T +5 F +(Bs) 224.11 574.7 T +4 F +($d) 236.13 577.93 T +5 F +(Del) 247.63 574.7 T +4 F +($J$I$r;H$C$F=$@5$7$^$9!#) 263.23 577.93 T +19 F +(2) 195.6 532.89 T +4 F +(2>L>4A;zJQ49$r9T$$$^$9!#) 212.61 536.12 T +(JQ49$r2!$7$F2>L>4A;zJQ49$r9T$$$^$9!#2>L>4A;zJQ49$r9T$C$?8e$O!"JQ) 212.61 519.82 T +(49BP>]) 212.61 503.52 T +5 F +(\050) 242.51 500.3 T +4 F +(H?E>$7$F$$$kItJ,) 245.58 503.52 T +5 F +(\051 ) 319.18 500.3 T +4 F +($KBP$7$FJT=8:n6H$,$G$-$^$9!#) 324.55 503.52 T +19 F +(3) 195.6 458.49 T +4 F +(J8$,@5$7$/JQ49$5$l$F$$$k$+$I$&$+3NG'$7$^$9!#) 212.61 461.71 T +(JQ49$7D>$7$?$$ItJ,) 212.61 445.42 T +5 F +(\050) 297.72 442.19 T +4 F +(JQ49BP>]) 300.78 445.42 T +5 F +(\051 ) 337.59 442.19 T +4 F +($r!"%+!<%=%k%-!<$r;H$C$FH?E>I=<\050$5) 342.95 445.42 T +($;$^$9!#) 212.61 429.12 T +19 F +(4) 195.6 283.23 T +4 F +(JQ49BP>]$rJQ49$7D>$7$^$9!#) 212.61 286.45 T +87.88 119.06 507.41 694.5 C +96.39 316.57 507.41 417.43 C +96.39 316.57 507.41 417.43 R +7 X +0 K +V +5 F +0 X +( ) 245.07 403.55 T +4 F +(5!) 277.28 406.77 T +(G=) 311.78 406.77 T +(%-!<) 214.32 406.77 T +5 F +( ) 245.07 381.05 T +4 F +(JQ49BP>]$r1&$K0\134F0) 247.37 384.27 T +("*!!) 214.32 384.27 T +5 F +( ) 245.07 363.55 T +4 F +(JQ49BP>]$r:8$K0\134F0) 247.37 366.77 T +("+) 214.32 366.77 T +5 F +( ) 245.07 346.05 T +4 F +(JQ49BP>]$r) 247.37 349.27 T +5 F +(1 ) 295.68 346.05 T +4 F +(J8;zA}$d$9) 302.58 349.27 T +5 F +(\050) 350.89 346.05 T +4 F +(J8@a3HBg) 353.95 349.27 T +5 F +(\051) 390.75 346.05 T +4 F +(",) 214.32 349.27 T +5 F +( ) 245.07 328.55 T +4 F +(JQ49BP>]$r) 247.37 331.77 T +5 F +(1 ) 295.68 328.55 T +4 F +(J8;z8:$i$9) 302.58 331.77 T +5 F +(\050) 350.89 328.55 T +4 F +(J8@a=L>.) 353.95 331.77 T +5 F +(\051) 390.75 328.55 T +4 F +("-) 214.32 331.77 T +209.7 318.47 409.07 415.35 R +0.5 H +0 Z +N +240.95 414.72 240.95 319.1 2 L +2 Z +N +209.7 395.97 409.07 395.97 2 L +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 121.4 507.41 274.76 C +96.39 121.4 507.41 274.76 R +7 X +0 K +V +5 F +0 X +( ) 264.27 261.93 T +4 F +(5!) 298.77 265.15 T +(G=) 335.57 265.15 T +5 F +( ) 216.64 261.93 T +4 F +(%-!<) 221.24 265.15 T +(:o=|) 264.27 246.4 T +5 F +(Bs,Del) 216.64 243.18 T +4 F +(F12;0[5D8lJQ49) 264.27 230.78 T +5 F +(F1) 216.64 227.55 T +4 F +(J?2>L>$XJQ49!#$b$&0lEY2!$9$HJR2>L>$XJQ49) 264.27 215.15 T +5 F +(F2) 216.64 211.93 T +4 F +(H>3Q1Q?t;z$XJQ49) 264.27 199.53 T +5 F +(F6) 216.64 196.3 T +4 F +(A43Q1Q?t;z$XJQ49) 264.27 183.9 T +5 F +(F7) 216.64 180.68 T +4 F +(H>3QJR2>L>$XJQ49) 264.27 168.28 T +5 F +(F8) 216.64 165.05 T +4 F +(A43QJR2>L>$XJQ49) 264.27 152.65 T +5 F +(F9) 216.64 149.43 T +4 F +($R$i$,$J$XJQ49) 264.27 137.03 T +5 F +(F10) 216.64 133.8 T +212.2 126.45 464.7 272.08 R +0.5 H +0 Z +N +211.57 255.83 464.7 255.83 2 L +2 Z +N +258.45 272.7 258.45 127.08 2 L +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "33" 34 +%%Page: "34" 34 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-) 87.88 92.59 T +(34) 97.32 92.59 T +1 F +(!!) 109.14 95.32 T +10 F +(SJ3 ) 116.92 92.59 T +1 F +(F|K\1348lF~NO%U%m%s%H%\050%s%I%W%m%;%C%5) 132.49 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +0 X +(2>L>4A;zJQ49$N$7$+$?$N$^$H$a) 87.88 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +19 F +0 X +(5) 195.6 686.67 T +4 F +(F12;0[5D8lJQ49$N>l9g!"B>$N4A;z8uJd$rI=<\050$7$F!"L\134E*$N4A;z$rA*$S$^) 212.61 689.89 T +($9!#) 212.61 673.59 T +(L\134E*$N4A;z8uJd$,I=<\050$5$l$k$^$G!"JQ49$r2!$7$^$9!#) 212.61 657.29 T +(JQ49$N$+$o$j$K"*$b;H$\050$^$9!#) 212.61 641 T +(A0$N8uJd$rI=<\050$9$k$K$OL5JQ49$^$?$O"+$r2!$7$^$9!#) 212.61 624.7 T +(L\134E*$N4A;z8uJd$NHV9f$rF~NO$7$^$9!#) 212.61 608.4 T +5 F +( ) 212.61 588.88 T +4 F +(JQ49BP>]$,$=$N4A;z$KJQ$o$j$^$9!#) 214.91 592.1 T +19 F +(6) 195.6 547.07 T +4 F +(0J>e$r@5$7$/JQ49$5$l$k$^$G7+$jJV$7$^$9!#) 212.61 550.29 T +19 F +(7) 195.6 505.26 T +4 F +(@5$7$/JQ49$5$l$?$i!"l9g!"F~NO$7$?J8;z$O2?$bJQ49$5$l$:!"%P%C%U%!%j) 195.6 570.13 T +(%s%0$;$:$K%"%W%j%1!<%7%g%s$KEO$7$^$9$N$G!"%\050%G%#%?$d%7%'%k$KBP$7$F) 195.6 553.83 T +(DL>o$I$*$j$K%3%^%s%I$rAw$k$3$H$,$G$-$^$9!#) 195.6 537.54 T +6 F +(%P%C%U%!!?%"%s%P%C%U%!%b!<%I) 195.6 504.94 T +4 F +(%P%C%U%!!?%"%s%P%C%U%!$N%b!<%I@Z$j49$\050%-!<$O!"%G%U%\051%k%H$G$OAjEv$9) 195.6 488.64 T +($k%-!<$O$"$j$^$;$s!#) 195.6 472.34 T +5 F +(sj3 ) 289.91 469.12 T +4 F +($G$O!"%P%C%U%!$K2?$b$J$$>uBV$GJQ49%-!<$r2!$9) 302.95 472.34 T +($H!"%P%C%U%!!?$R$i$,$J%b!<%I$K$J$j$^$9!#%,%$%I%i%$%s$K!") 195.6 456.04 T +19 F +([Buffer) 195.6 436.52 T +6 F +(!!!!A4$R$i$,$J) 225.75 439.75 T +19 F +(]) 290.16 436.52 T +4 F +($,I=<\050$5$l$^$9!#$^$?!"%P%C%U%!$K2?$b$J$$>uBV$G7hDj%-!<$r2!$9$H!"%") 195.6 423.45 T +(%s%P%C%U%!!?H>3Q%"%k%U%!%Y%C%H%b!<%I$KJQ$o$j$^$9!#%,%$%I%i%$%s$K!") 195.6 407.15 T +19 F +([Unbuffer) 195.6 387.63 T +6 F +(!!H>%"%k%U%!) 237 390.85 T +19 F +(]) 292.2 387.63 T +4 F +($,I=<\050$5$l$^$9!#) 195.6 374.55 T +(2>L>4A;zJQ49$O!"%P%C%U%!%j%s%0$5$l$F$$$k2>L>$KBP$7$F9T$o$l$k$N$G!") 195.6 358.26 T +(2>L>4A;zJQ49$r$7$?$$>l9g$O!"$^$:JQ49%-!<$r2!$7$F!"%P%C%U%!!?J?2>L>) 195.6 341.96 T +(%b!<%I$K$7$^$9!#) 195.6 325.66 T +13 F +("#!!) 87.88 276.41 T +18 F +(etc. \050) 107.72 272.94 T +13 F +($=$NB>) 129.77 276.41 T +18 F +(\051 ) 159.52 272.94 T +13 F +(%-!<) 165.58 276.41 T +5 F +(sj3 ) 195.6 256.53 T +4 F +($G$O!"JQ49!"L5JQ49!"7hDj!"%3!<%IF~NO0J30$N5!G=$O!") 208.64 259.76 T +5 F +(etc.\050) 440.97 256.53 T +4 F +($=$NB>) 457.06 259.76 T +5 F +(\051 ) 484.66 256.53 T +4 F +(%-!<$r2!$9$3$H$G9T$&$3$H$,$G$-$^$9!#) 195.6 243.46 T +5 F +(etc.\050) 195.6 142.45 T +4 F +($=$NB>) 211.69 145.68 T +5 F +(\051 ) 239.3 142.45 T +4 F +(%-!<$K$h$C$F9T$\050$k5!G=$r$8%J" +42384DFC80A7F3FC888F9C01EFF8441FFFF84095EF'F.9#8%8&J" +41C800F00489C0B211023FC44900413FD080020000D2000FFFC04004FFBF4E8(E$8%A%;#J" +4010034C048B80D11420C0491FFFE27F1840423F4EE7'E*A%8%J" +200442088D00CA08007E3FE2080040D4412FFECFFE3F225EF7#8"F)9.8& +4008B9C4061F023FD2FF808E023E3FCE8FBB0EBFC8410840C8420424BF7&F(9/;" +8F884118C9CFFD8402BFC480DF9102113FD1808C91BFD27F0FFEFF'F%;08& +41F010812B89F00004FFBFD0A08210BFD08088A0BFE2400840CFFE04103F#8"G*8":)8& +5E2008C7FC3F083FC8FFBFFFBF0088203FFE7F8FFFC8420710BF#J%8(8":%:# +40404C40404488081003FD0A002CFC8AA88400CFF8#J%?#9&9$ +11014252CBFF0C080EAAA8040BFB4223F7&F*9%9&8% +801102088FC7FC151B3FD0FF820482113FE0BFEABFBFFFFFFF84428"8"F%8$8)8*J" +0A88C208142A80820290821E3FF0A08810AA81503FFFC80204F45E38#8"E%92;" +040C80C10804C9843D3FF9CF3FD03FEF20BF0F3FE8AA82480C7&G%82;" +6000300880108708BF9FC13FC00000103FC01100003FE92A8C46337&F+9"8"9&8%J" +1C0000087FFFFFB8383FD0878800BF3C0EC921B041BF1E1DC0BF4E0#8$Ch8%8h9#9#9#9# +000000000000000000000000000000000F +ENDBITMAP +%%EndBinary +196.37 159.27 478.24 223.64 R +0.5 H +0 Z +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "35" 36 +20 9.21 /Helvetica FMDEFINEFONT +%%Page: "36" 36 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-) 87.88 92.59 T +(36) 97.32 92.59 T +1 F +(!!) 109.14 95.32 T +10 F +(SJ3 ) 116.92 92.59 T +1 F +(F|K\1348lF~NO%U%m%s%H%\050%s%I%W%m%;%C%5) 132.49 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +0 X +(3F%b!<%I!?5!G=$N@bL@) 87.88 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +6 F +0 X +(>C5n) 195.6 689.89 T +4 F +(%f!<%6<-=q$NC18l$N>C5n$r9T$$$^$9!#) 252.29 689.89 T +9 F +(Help) 195.6 670.37 T +4 F +(%,%$%I%i%$%s$N%U%!%s%/%7%g%s%-!<$NItJ,$NI=<\050$r$9$k$+$7) 252.29 673.59 T +($J$$$+$r@Z$j49$\050$^$9!#) 252.29 657.29 T +9 F +(sjrc) 195.6 637.77 T +4 F +(5/F0;~$KFI$_9~$s$@%;%C%H%"%C%W%U%!%$%k$r$b$&0lEYFI$_9~) 252.29 641 T +($s$G%;%C%H%"%C%W$r$7D>$7$^$9) 252.29 624.7 T +5 F +(\050) 383.41 621.47 T +4 F +("*) 386.47 624.7 T +(%;%C%H%"%C%W%U%!%$%k$K) 397.97 624.7 T +($D$$$F$N>\134:Y$O!"!V%;%C%H%"%C%W%U%!%$%k$N@_Dj!W$N>O!!;2) 252.29 608.4 T +(>H) 252.29 592.1 T +5 F +(\051) 261.49 588.88 T +4 F +(!#) 264.56 592.1 T +6 F +(JT=8) 195.6 575.8 T +4 F +(%+%l%s%HJ8@a$NJT=8$r9T$$$^$9!#) 252.29 575.8 T +6 F +(:F@\134) 195.6 559.51 T +5 F +(sj3serv ) 252.29 556.28 T +4 F +($H$N:F@\134B3$r9T$$$^$9!#) 280.66 559.51 T +($=$l$>$l$N5!G=$O!"uBV$G!":F$S) 266.14 205.48 T +5 F +(Help\050) 332.85 202.26 T +4 F +(%X%k%W%b!<%I) 353.8 205.48 T +5 F +(\051 ) 409 202.26 T +4 F +(%-!<$r2!$9$H!"!V%,%$) 414.37 205.48 T +(%I!&%i%$%s) 195.6 189.18 T +5 F +(on ) 243.91 185.96 T +4 F +($K$J$j$^$7$?!W$HI=<\050$5$l!"0J9_%,%$%I%i%$%s$K%U%!%s%/) 255.41 189.18 T +(%7%g%s%-!<$N5!G=$,I=<\050$5$l$^$9!#) 195.6 172.88 T +20 F +(sjrc) 195.6 137.06 T +5 F +(sj3 ) 195.6 120.77 T +4 F +($O!"5/F0;~$K=i4|@_Dj$H$7$F4D6-JQ?t) 208.64 123.99 T +5 F +(SJRC ) 367.36 120.77 T +4 F +($G<\050$5$l$k%U%!%$%k!"$b$7) 390.63 123.99 T +87.88 119.06 507.41 694.5 C +96.39 389.36 507.41 515.22 C +96.39 389.36 507.41 515.22 R +7 X +0 K +V +5 F +0 X +( ) 266.35 498.21 T +4 F +(%-!<) 282.45 501.44 T +5 F +( ) 195.6 498.21 T +4 F +(5!) 209.4 501.44 T +(G=) 225.5 501.44 T +5 F +(F1 \050) 266.35 478.21 T +4 F +(JQ49) 281.43 481.44 T +5 F +(\051 ) 299.83 478.21 T +4 F +(%-!<) 305.2 481.44 T +5 F +( ) 195.6 478.21 T +4 F +(EPO?) 202.5 481.44 T +5 F +(F2 \050) 266.35 463.21 T +4 F +(L5JQ49) 281.43 466.44 T +5 F +(\051 ) 309.04 463.21 T +4 F +(%-!<) 314.4 466.44 T +5 F +( ) 195.6 463.21 T +4 F +(>C5n) 202.5 466.44 T +5 F +(F3 \050) 266.35 448.21 T +4 F +($=$NB>) 281.43 451.44 T +5 F +(\051 ) 309.04 448.21 T +4 F +(%-!<) 314.4 451.44 T +5 F +( ) 195.6 448.21 T +4 F +(%X%k%W%b!<%I) 197.9 451.44 T +5 F +(F4 \050) 266.35 433.21 T +4 F +(7hDj) 281.43 436.44 T +5 F +(\051) 299.83 433.21 T +4 F +(%-!<) 305.2 436.44 T +5 F +( sjrc) 195.6 433.21 T +(F5 \050) 266.35 418.21 T +4 F +(%3!<%I) 281.43 421.44 T +5 F +(\051 ) 309.04 418.21 T +4 F +(%-!<) 314.4 421.44 T +5 F +( ) 195.6 418.21 T +4 F +(JT=8) 202.5 421.44 T +5 F +(F6 \050) 266.35 403.21 T +4 F +(H>%") 281.43 406.44 T +5 F +(\051 ) 299.83 403.21 T +4 F +(%-!<) 305.2 406.44 T +5 F +( ) 195.6 403.21 T +4 F +(:F@\134) 202.5 406.44 T +192.2 395.2 346.57 509.58 R +0.5 H +0 Z +N +191.57 490.83 346.57 490.83 2 L +2 Z +N +259.07 508.95 259.07 395.2 2 L +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 226.38 507.41 307.87 C +96.39 226.38 507.41 307.87 R +7 X +0 K +V +0 X +%%BeginBinary: 1556 +588 134 282.24 64.32 0 196.82 235.13 BEGINBITMAPBWc + + +=" +7F<" +E7<# +DAFF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F( +C91BC6210930EB) +FFD7FFFFFFFFDCFF7":" +EFDF7":# +FFFF7F<"J" +E7O4F2<#J" +DAFFO3FF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F( +C91BC6210930EB) +FFD7FFFFFFFFDCFF7":" +EFDF7":# +FFFF7F<" +E7<#J" +DAFFO3F0J" +O;FF +( +E4C608F0E4F1D9( +DB6F676F5B6EE57'J" +776F7F5B5F7BO4F67&J" +76EF705B40O5F07'J" +7AEF6F5B5FF4O4FF7$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F( +C91BC6210930EB) +FFD7FFFFFFFFDCFF7":" +EFDF7":# +FFFF7F<" +E7<# +DAFF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7&J" +7BEF5E5B6FO5F0(J" +C91BC6210930EBO4FE)J" +FFD7FFFFFFFFDCFFO3FF7":" +EFDF7":% +FFFF7FC03F<" +E7<#J" +DAFFO3F1J" +O;F2J" +O;FF( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F( +C91BC6210930EB) +FFD7FFFFFFFFDCFF7":" +EFDF7":% +FFFFFFFFFF + + + + + + + + + + + + + + + +J" +O;F0 +J" +O;FBJ" +O;FF +J" +O;F0J" +O;F9J" +O;FF + + + +J" +O;FC +J" +O;FFJ" +O;F0J" +O;FEj +O<"?#>"Z" +4008423FO&E1&;"8"J" +7E000383800402O-EF&<(J" +5100044440441FFF00300002O)E8&;)J" +50800404000244000206100FFFO)EEA(J" +49000402100002O)EF7&:%;" +B1BFBF8E3B1FFF000804(9%:# +51108404110C80004000500FFE"9#="8% +5E20886080020004"9$<"9$ +513F880040040008#8#<&8" +50902008804004110050@#;$ +3FFF080040;":)J" +880040008008120010O)E07"8"@&J" +91101400200080O'EF'<' +7F0E5F1F0F3F0100103800C0"`<) +400600201003000100Ba"J" +02O(EC"@"l9g$O!") 195.6 689.89 T +5 F +(sj3 ) 317.52 686.67 T +4 F +($r5/F0$7D>$9$+!"$3$N) 330.55 689.89 T +5 F +(sjrc ) 424.87 686.67 T +4 F +($N5!G=$r;HMQ$7) 440.45 689.89 T +($F?7$7$$%;%C%H%"%C%W%U%!%$%k$rFI$_9~$_$^$9!#) 195.6 673.59 T +5 F +(sjrc) 195.6 637.77 T +4 F +(%-!<$r2!$9$H!"%;%C%H%"%C%W%U%!%$%k$rFI$_9~$_D>$7!"%,%$%I%i%$%s$K) 211.19 641 T +(!V) 195.6 624.7 T +5 F +(.sjrc ) 204.8 621.47 T +4 F +($rFI$_9~$_$^$7$?!W$HI=<\050$7$^$9!#) 222.69 624.7 T +6 F +(C18l$NEPO?!?>C5n) 195.6 592.1 T +4 F +(%f!<%6<-=q$KEPO?$7$?$$J8;z$rJT=8$7=*$o$C$?$i!"7hDj$9$kA0$K!VEPO?!W) 195.6 575.8 T +($rA*Br$7$^$9!#) 195.6 559.5 T +6 F +(J8@a$NJT=8) 195.6 526.91 T +4 F +(2>L>4A;zJQ498e$KF~NO$7$?J8;zNs$rJ8@aC10L$KJT=8$r9T$$$^$9!#$3$l$K$h) 195.6 510.61 T +($j!"F~NO4V0c$\050$J$I$r=$@5$G$-$^$9!#) 195.6 494.31 T +(JT=8$7$?$$J8@a$K0\134F0$7$F!") 195.6 478.01 T +5 F +(etc.\050) 317.52 474.79 T +4 F +($=$NB>) 333.61 478.01 T +5 F +(\051 ) 361.21 474.79 T +4 F +(%-!<$r2!$7!"%,%$%I%i%$%s$NI=<\050) 366.58 478.01 T +($,JQ$o$C$?$i!"!VJT=8!W$r2!$7$^$9) 195.6 461.72 T +5 F +(\050) 345.12 458.49 T +4 F +(%G%U%\051%k%H$G$O!"!V$=$NB>%-!e$N) 263.8 574.38 T +5 F +(.sjrc) 367.31 571.16 T +(.) 195.6 554.86 T +4 F +(%U%!%$%k$,B8:_$7$J$$>l9g$O!"%G%U%\051%k%H$NF0:n$r$7$^$9!#) 195.6 541.79 T +(%;%C%H%"%C%W%U%!%$%k$X$N@_Dj$O!"@_Dj$9$k5!G=$4$H$N%-!<%o!<%I$H$=$N) 195.6 509.19 T +(CM$K$h$C$F9T$$$^$9!#) 195.6 492.89 T +5 F +(.sjrc ) 287.61 489.67 T +4 F +(%U%!%$%k$N%5%s%W%k$,!") 305.5 492.89 T +5 F +(/usr/lib/sj3/sjrc) 409.01 489.67 T +4 F +($K$"$j$^) 466.53 492.89 T +($9$N$G!";29M$K$7$F$/$@$5$$!#) 195.6 476.6 T +(Nc!') 195.6 444 T +(>e5-$NNc$G$O!"1&0\134F0) 195.6 296.58 T +5 F +(\050right\051 ) 289.91 293.36 T +4 F +(MQ$N%-!<) 315.72 296.58 T +5 F +(\050key\051 ) 354.83 293.36 T +4 F +($r!") 376.54 296.58 T +5 F +(^F ) 394.94 293.36 T +4 F +($H$$$&%\050%9%1!<%W%7!<) 406.67 296.58 T +(%1%s%9$K3d$jIU$1$k!"$H$$$&@_Dj$G$9!#) 195.6 280.29 T +87.88 119.06 507.41 694.5 C +96.39 317.49 507.41 432.31 C +96.39 317.49 507.41 432.31 R +7 X +0 K +V +5 F +0 X +(.key.right ^F) 209.77 414.61 T +4 F +(%3%^%s%I%-!<%o!<%I) 223.95 357.78 T +(CM%-!<%o!<%I) 266.47 387.38 T +(5!G=%-!<%o!<%I) 209.77 331.31 T +211.7 401.88 214.7 407.08 217.7 401.88 214.7 401.88 4 Y +V +214.7 402.88 214.7 336.45 2 L +0.5 H +2 Z +N +230.45 401.88 233.45 407.08 236.45 401.88 233.45 401.88 4 Y +V +233.45 402.88 233.45 362.7 2 L +N +269.2 402.51 272.2 407.7 275.2 402.51 272.2 402.51 4 Y +V +272.2 403.51 272.2 393.33 2 L +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "39" 40 +%%Page: "40" 40 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-) 87.88 92.59 T +(40) 97.32 92.59 T +1 F +(!!=i4|@_Dj$NJQ99) 109.14 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(.sjrc ) 87.88 736.06 T +1 F +($K$h$k%f!<%6%+%9%?%^%$%:) 104.31 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +13 F +0 X +("#!!@_Dj2DG=$J%-!<%o!<%I) 87.88 689.54 T +4 F +(%;%C%H%"%C%W%U%!%$%k$G@_Dj!?JQ992DG=$J5!G=$*$h$S$=$N%-!<%o!<%I$O!") 195.6 672.88 T +(.J8;z$G$b9=$$$^$;$s!#) 195.6 239.9 T +(>e$NI=$G$O!"$o$+$j$d$9$/$9$k$?$a$KBgJ8;z$H>.J8;zN>J}$r;H$C$F$$$^) 195.6 223.6 T +($9!#) 195.6 207.3 T +87.88 119.06 507.41 694.5 C +96.39 260.8 507.41 644.89 C +96.39 260.8 507.41 644.89 R +7 X +0 K +V +5 F +0 X +( ) 228.86 627.21 T +4 F +(5!) 293.27 630.43 T +(G=) 357.68 630.43 T +5 F +( ) 130.61 627.21 T +4 F +(%-!<%o!<%I) 144.41 630.43 T +5 F +( ) 228.86 602.51 T +4 F +(%3%^%s%I%-!<$N%3%s%H%m!<%k%3!<%I$X$N%-!<3d$jIU$1) 233.46 605.73 T +5 F +(.key) 130.61 602.51 T +( code ) 228.86 582.19 T +4 F +(%-!<$r2!$7$?$H$-$N:G=i$N%G%U%\051%k%H%3!<%I) 253.13 585.41 T +5 F +(.DefaultCode) 130.61 582.19 T +( ) 228.86 561.86 T +4 F +(F~NO%b!<%I@Z$jBX$\050$G!"L5JQ49%-!<$r2!$7$?$H$-$N%b!<%I) 233.46 565.08 T +5 F +(.MuhenkanMode) 130.61 561.86 T +( ) 228.86 541.53 T +4 F +(JT=8;~$K!"L5JQ49%-!<$r2!$7$?$H$-$N%b!<%I) 233.46 544.76 T +5 F +(.MuhenkanInEdit) 130.61 541.53 T +( ) 228.86 521.21 T +4 F +(F~NO%b!<%I@Z$jBX$\050$G!"L5JQ49%-!<$r2!$7$?$H$-$N%H%0%kF0:n) 231.16 524.43 T +5 F +(.MuhenkanToggle) 130.61 521.21 T +( ) 228.86 500.89 T +4 F +(%,%$%I%i%$%s$NI=<\050$NJQ99) 233.46 504.11 T +5 F +(.guide) 130.61 500.89 T +( DEL\050) 228.86 480.56 T +4 F +(%G%j!<%H) 254.41 483.78 T +5 F +(\051) 291.22 480.56 T +4 F +(%-!<$N@_Dj) 296.58 483.78 T +5 F +(.delkey) 130.61 480.56 T +( ) 228.86 460.24 T +4 F +(F~NO%b!<%I@Z$jBX$\0507hDj) 233.46 463.46 T +5 F +(.FlushAfterConversion) 130.61 460.24 T +( vi ) 228.86 439.91 T +4 F +($G) 242.92 443.13 T +5 F +(ESC ) 254.42 439.91 T +4 F +(%-!<$r2!$7$?>l9gF0:n) 273.6 443.13 T +5 F +(.SetNormal) 130.61 439.91 T +( emacs ) 228.86 419.58 T +4 F +($G%3%s%H%m!<%k) 258.76 422.81 T +5 F +(- X ) 325.46 419.58 T +4 F +($r2!$7$?$H$-$NF0:n) 339.77 422.81 T +5 F +(.ThroughNext) 130.61 419.58 T +( ) 228.86 399.26 T +4 F +(%3%^%s%I%-!<$N%\050%9%1!<%W%7!<%1%s%9$X$N%P%$%s%I) 233.46 402.48 T +5 F +(.escape) 130.61 399.26 T +( ) 228.86 378.93 T +4 F +($=$NB>%-!<$,2!$5$l$?$H$-$N%3%^%s%I!&%-!<$N;XDj) 233.46 382.16 T +5 F +(.etckey) 130.61 378.93 T +( ) 228.86 358.61 T +4 F +(5/F0;~$K%j%9%H$N;XDj) 233.46 300.86 T +5 F +(.server) 130.61 297.63 T +( ) 228.86 277.31 T +4 F +(%m!<%^;z$+$JJQ49%\050%i!<=hM}$N@_Dj) 233.46 280.53 T +5 F +(.rkerrbell) 130.61 277.31 T +126.57 271.22 494.07 640.6 R +0.5 H +0 Z +N +126.35 619.38 493.23 619.38 2 L +2 Z +N +126.45 616.55 493.32 616.55 2 L +N +226.57 640.6 226.57 271.85 2 L +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "40" 41 +%%Page: "41" 41 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +1 F +0 X +(=i4|@_Dj$NJQ99!!) 423.9 95.32 T +0 F +(1-41) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(.sjrc ) 397.6 736.06 T +1 F +($K$h$k%f!<%6%+%9%?%^%$%:) 414.03 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +4 F +0 X +(3F5!G=$K$*$1$k%3%^%s%I%-!<$*$h$S$=$N%-!<%o!<%I$O!"0J2<$N$H$*$j$G) 195.6 689.89 T +($9!#) 195.6 673.59 T +87.88 119.06 507.41 694.5 C +96.39 127.58 507.41 661.9 C +96.39 127.58 507.41 661.9 R +7 X +0 K +V +5 F +0 X +( ) 189.98 634.9 T +4 F +(%3%^%s%I%-!<) 219.88 638.12 T +(%-!<%o!<%I) 322.35 638.12 T +(!VJQ492D) 189.98 616.87 T +5 F +(/) 229.08 613.65 T +4 F +(IT2D@Z$jBX$\050%-!%-!3Q%"%k%U%!%Y%C%H%-!3QJR2>L>%-!L>%-!L>%-!.%-!/$J$$%?!<%_%J%k) 195.6 397.68 T +($N$?$a$KMQ0U$7$?$b$N$G!"$3$N%-!<$r2!$9$HF~NO%b!<%I$,!VJ?2>L>!W!") 195.6 381.39 T +(!VA43QJR2>L>!W!"!VH>3QJR2>L>!W!"!VA43Q%"%k%U%!%Y%C%H!W!"!VH>3Q%"%k) 195.6 365.09 T +(%U%!%Y%C%H!W!"!V%3!<%I!W!"$H=gHV$KJQ$o$C$F$$$-$^$9!#) 195.6 348.79 T +(!V%i%C%W:FJQ49%-!l9g$KF~NO%b!<%I$r@Z$jBX$\050$^$;$s!#) 195.6 153.21 T +87.88 119.06 507.41 694.5 C +96.39 402.29 507.41 661.9 C +96.39 402.29 507.41 661.9 R +7 X +0 K +V +5 F +0 X +( ) 188.31 640.72 T +4 F +(%3%^%s%I%-!<) 245.82 643.95 T +(%-!<%o!<%I) 378.81 643.95 T +(!VF~NO@Z$jBX$\050%H%0%k%-!C5n%-!C5n%-!%-!$l$N%-!<) 195.6 673.59 T +($r2!$5$J$1$l$P$J$j$^$;$s$,!"IQHK$K;H$&%-!<$O$3$l$rDj5A$9$k$3$H$K$h) 195.6 657.29 T +($C$F!") 195.6 641 T +5 F +(1 ) 225.51 637.77 T +4 F +(EY2!$;$P:Q$`$h$&$K$J$j$^$9!#) 232.41 641 T +(!V%+!<%=%k%H%C%W%-!L>4A) 195.6 608.4 T +(;zJQ498e$G$"$l$P:G=i$NJ8@a$K0\134F0$7$^$9!#$^$?!V%+!<%=%k%\050%s%I%-!L>4A;zJQ49%5!<%P) 195.6 543.21 T +5 F +(sj3serv ) 363.52 539.98 T +4 F +($H$N:F@\134B3A`:n$r$7$^$9!#) 391.89 543.21 T +13 F +("#!!%\050%9%1!<%W%7!<%1%s%9$N%3%^%s%I%-!<$X$N3d$jEv$F) 87.88 493.96 T +5 F +(sj3 ) 195.6 474.08 T +4 F +($N%G%U%\051%k%H$N%3%^%s%I%-!<$O!"l9g$K!"%U%!%s%/%7%g%s%-!<$K%^%C%W) 333.1 134.84 T +87.88 119.06 507.41 694.5 C +96.39 188.34 507.41 433.02 C +96.39 188.34 507.41 433.02 R +7 X +0 K +V +5 F +0 X +( ) 192.51 414.14 T +4 F +(%3%^%s%I%-!<) 229.32 417.36 T +(%\050%9%1!<%W%7!<%1%s%9) 348.02 417.36 T +(!VJQ49A`:n2D!?IT2D@Z$jBX$\050%-!%-!3Q%"%k%U%!%Y%C%H%-!3QJR2>L>%-!L>%-!L>%-!.%-!$7!"<+J,MQ$K%-!<$rF~) 293.75 319.19 T +($lBX$\050$k$3$H$,$G$-$^$9!#$^$?!"0c$&%?!<%_%J%k$r;H$&>l9g$K!"$3$l$H$O) 195.6 302.89 T +(0[$J$k%\050%9%1!<%W%7!<%1%s%9$r3d$jEv$F$F;H$&$3$H$b$G$-$^$9!#) 195.6 286.59 T +(0J2<$K!"$$$/$D$+$N@_DjNc$r<\050$7$J$,$i!"@bL@$7$F$$$-$^$9!#) 195.6 253.99 T +(5-=RNc) 195.6 237.7 T +5 F +(:) 225.5 234.47 T +87.88 119.06 507.41 694.5 C +96.39 340.09 507.41 661.9 C +96.39 340.09 507.41 661.9 R +7 X +0 K +V +5 F +0 X +( ) 198.15 639.48 T +4 F +(%-) 225.75 642.7 T +(!<) 239.55 642.7 T +(%3%s%=!<%k) 289.15 642.7 T +5 F +(X Window xterm) 349.65 639.48 T +4 F +(!N) 198.15 622.08 T +5 F +(Shift + ) 207.35 618.85 T +4 F +(JQ49!O%-!<) 235.04 622.08 T +5 F +( ^[OH) 289.15 618.85 T +( ^[[7\367) 349.65 618.85 T +4 F +(!NL5JQ49!O%-!<) 198.15 590.83 T +5 F +( ^[OQ) 289.15 587.6 T +( ^[[8\367) 349.65 587.6 T +4 F +(!N#F#2!O%-!<) 198.15 543.95 T +5 F +( ^[OQ) 289.15 540.73 T +( ^[[12\367) 349.65 540.73 T +4 F +(!N#F#5!O%-!<) 198.15 497.08 T +5 F +( ^[OT) 289.15 493.85 T +( ^[[15\367) 349.65 493.85 T +4 F +(!N#F#9!O%-!<) 198.15 434.58 T +5 F +( ^[OX) 289.15 431.35 T +( ^[[20\367) 349.65 431.35 T +4 F +(!NJQ49!O%-!<) 198.15 606.45 T +5 F +( ^[OP) 289.15 603.23 T +( ^[[4\367) 349.65 603.23 T +4 F +(!N#F#1!O%-!<) 198.15 559.58 T +5 F +( ^[OP) 289.15 556.35 T +( ^[[11\367) 349.65 556.35 T +4 F +(!N#F#3!O%-!<) 198.15 528.33 T +5 F +( ^[OR) 289.15 525.1 T +( ^[[13\367) 349.65 525.1 T +4 F +(!N#F#6!O%-!<) 198.15 481.45 T +5 F +( ^[OU) 289.15 478.23 T +( ^[[16\367) 349.65 478.23 T +4 F +(!N#F#8!O%-!<) 198.15 450.2 T +5 F +( ^[OW) 289.15 446.98 T +( ^[[18\367) 349.65 446.98 T +4 F +(!N) 351.5 673.59 T +5 F +(\051 ) 379.1 670.37 T +4 F +(%-!<$O) 384.46 673.59 T +5 F +(^[OT ) 414.37 670.37 T +4 F +($K!") 436.31 673.59 T +5 F +(code\050) 457.02 670.37 T +4 F +(%3!<) 477.45 673.59 T +(%I) 195.6 657.29 T +5 F +(\051 ) 204.8 654.07 T +4 F +(%-!<$O) 210.17 657.29 T +5 F +(^[OU ) 240.07 654.07 T +4 F +($K) 263.04 657.29 T +5 F +(.... ) 274.54 654.07 T +4 F +($H$$$&6q9g$K!") 286.04 657.29 T +5 F +(7 ) 352.75 654.07 T +4 F +($D$N%\050%9%1!<%W%7!<%1%s%9$,3d$jEv) 359.65 657.29 T +($F$i$l$^$9!#) 195.6 641 T +($?$@$7!"%\050%9%1!<%W%3!<%I) 195.6 624.7 T +5 F +(^[ ) 308.31 621.47 T +4 F +($O!") 317.99 624.7 T +5 F +(.sjrc ) 336.39 621.47 T +4 F +($K$O) 354.28 624.7 T +5 F +(^ ) 374.98 621.47 T +4 F +($H) 381.6 624.7 T +5 F +([ ) 393.1 621.47 T +4 F +($N) 398.47 624.7 T +5 F +(2 ) 409.97 621.47 T +4 F +(J8;z$G=q$-I=$7$^) 416.87 624.7 T +($9!#$9$J$o$A!"J8;z) 195.6 608.4 T +5 F +(^ ) 280.71 605.18 T +4 F +($O) 287.33 608.4 T +5 F +(.sjrc ) 296.53 605.18 T +4 F +($G$OFC$l!V$=$NB>%-!3Q%"%k%U%!%Y%C%H) 195.6 510.61 T +(%-!3QJR2>L>%-!) 195.6 494.31 T +(L>%-!L>%-!l9g$O!"$=$N9T$O>o$K2rl9g$O!":G=i$N%-!<%o!<%I$r%?!<%_%J%kL>$H) 195.6 347.63 T +(H=CG$7$^$9!#$3$N%?!<%_%J%kL>$,4D6-JQ?t) 195.6 331.33 T +5 F +(TERM ) 372.72 328.11 T +4 F +($H0lCW$7$F$$$l$P2rl9g$K$O!"$b;H$\050$^$9!#) 195.6 513.44 T +(5-=RNc) 195.6 480.85 T +5 F +(:) 225.5 477.62 T +4 F +($3$NJLL>$O!"%?!<%_%J%k$4$H$K2rl9g$O!"%f!<%6Dj5A$NJ}$,M%@h$5$l$^$9!#) 198.41 635.45 T +189.94 621.5 502.78 674.82 R +0.5 H +0 Z +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 414.58 507.41 469.15 C +96.39 414.58 507.41 469.15 R +7 X +0 K +V +193.32 420.97 504.57 465.99 R +0.5 H +0 Z +0 X +N +198.43 426.64 425.2 460.65 R +7 X +V +15 F +0 X +(.escape.start Kanji) 198.43 453.85 T +(.escape.henkan Select) 198.43 441.85 T +(.escape.code F5) 198.43 429.85 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "46" 47 +%%Page: "47" 47 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +1 F +0 X +(=i4|@_Dj$NJQ99!!) 423.9 95.32 T +0 F +(1-47) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(.sjrc ) 397.6 736.06 T +1 F +($K$h$k%f!<%6%+%9%?%^%$%:) 414.03 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +4 F +0 X +(0J2<$NI=$,%-!<$H$=$l$KBP1~$9$k%\050%9%1!<%W%7!<%1%s%9$NJLL>$G$9!#) 195.6 689.89 T +87.88 119.06 507.41 694.5 C +96.39 349.16 507.41 678.2 C +96.39 349.16 507.41 678.2 R +7 X +0 K +V +5 F +0 X +( ) 195.6 661.62 T +4 F +(%-) 216.3 664.84 T +(!<) 232.4 664.84 T +5 F +( ) 289.23 661.62 T +4 F +(JL) 296.13 664.84 T +(L>) 309.93 664.84 T +(!N) 195.6 642.97 T +5 F +(Shift + ) 204.8 639.74 T +4 F +(JQ49!O%-!<) 232.49 642.97 T +5 F +( Kanji) 289.23 639.74 T +4 F +(!NJQ49!O%-!<) 195.6 626.72 T +5 F +( Select) 289.23 623.49 T +4 F +(!NL5JQ49!O%-!<) 195.6 610.47 T +5 F +( Cancel) 289.23 607.24 T +4 F +(!N7hDj!O%-!<) 195.6 594.22 T +5 F +( Execute) 289.23 590.99 T +4 F +(!N#F#1!O%-!<) 195.6 577.97 T +5 F +( F1) 289.23 574.74 T +4 F +(!N#F#2!O%-!<) 195.6 561.72 T +5 F +( F2) 289.23 558.49 T +4 F +(!N#F#3!O%-!<) 195.6 545.47 T +5 F +( F3) 289.23 542.24 T +4 F +(!N#F#4!O%-!<) 195.6 529.22 T +5 F +( F4) 289.23 525.99 T +4 F +(!N#F#5!O%-!<) 195.6 512.97 T +5 F +( F5) 289.23 509.74 T +4 F +(!N#F#6!O%-!<) 195.6 496.72 T +5 F +( F6) 289.23 493.49 T +4 F +(!N#F#7!O%-!<) 195.6 480.47 T +5 F +( F7) 289.23 477.24 T +4 F +(!N#F#8!O%-!<) 195.6 464.22 T +5 F +( F8) 289.23 460.99 T +4 F +(!N#F#9!O%-!<) 195.6 447.97 T +5 F +( F9) 289.23 444.74 T +4 F +(!N#F#1#0!O%-!<) 195.6 431.72 T +5 F +( F10) 289.23 428.49 T +4 F +(!N",!O%-!<) 195.6 415.47 T +5 F +( Up) 289.23 412.24 T +4 F +(!N"-!O%-!<) 195.6 399.22 T +5 F +( Down) 289.23 395.99 T +4 F +(!N"*!O%-!<) 195.6 382.97 T +5 F +( Right) 289.23 379.74 T +4 F +(!N"+!O%-!<) 195.6 366.72 T +5 F +( Left) 289.23 363.49 T +192.82 357.7 337.2 673.33 R +0.5 H +0 Z +N +192.82 655.52 337.2 655.52 2 L +2 Z +N +192.95 652.69 337.33 652.69 2 L +N +192.57 603.58 336.95 603.58 2 L +N +193.07 521.2 337.45 521.2 2 L +N +192.95 505.08 337.32 505.08 2 L +N +192.82 489.58 337.2 489.58 2 L +N +192.7 472.83 337.07 472.83 2 L +N +192.57 456.7 336.95 456.7 2 L +N +193.07 439.95 337.45 439.95 2 L +N +192.95 423.2 337.32 423.2 2 L +N +192.82 407.08 337.2 407.08 2 L +N +192.7 390.95 337.07 390.95 2 L +N +192.57 375.45 336.95 375.45 2 L +N +192.95 586.33 337.32 586.33 2 L +N +192.82 570.2 337.2 570.2 2 L +N +192.7 554.08 337.07 554.08 2 L +N +192.57 537.33 336.95 537.33 2 L +N +193.07 618.7 337.45 618.7 2 L +N +192.95 634.45 337.32 634.45 2 L +N +286.57 673.33 286.57 357.7 2 L +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 280.65 507.41 332.86 C +96.39 280.65 507.41 332.86 R +7 X +0 K +V +6 F +0 X +($4Cm0U) 199.15 318.62 T +4 F +(JLL>$N%"%k%U%!%Y%C%H$O!"BgJ8;z!?>.J8;z$N6hJL$r$7$F$$$^$9!#) 199.15 304.41 T +192.76 288.7 504.58 328.39 R +0.5 H +0 Z +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "47" 48 +%%Page: "48" 48 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-) 87.88 92.59 T +(48) 97.32 92.59 T +1 F +(!!=i4|@_Dj$NJQ99) 109.14 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(.sjrc ) 87.88 736.06 T +1 F +($K$h$k%f!<%6%+%9%?%^%$%:) 104.31 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +13 F +0 X +("#!!!V$=$NB>%-!l9g$N%-!<3d$jEv$F$NJQ99) 87.88 689.54 T +4 F +(%G%U%\051%k%H$G$O!"!V$=$NB>%-!l9g$K!"C5n) 195.6 607.69 T +4 F +(!V) 252.29 607.69 T +5 F +(F2 : ) 261.49 604.47 T +4 F +(L5JQ49%-!%-!3Q%"%k%U%!%Y%C%H%-!%-!e5-$NNc$N) 195.6 343.36 T +5 F +(1 ) 243.91 340.14 T +4 F +(9TL\134$O!"!VEPO?!W$O!VJ?2>L>%-!H) 460.89 294.47 T +5 F +(\051) 479.3 291.25 T +4 F +(!#) 482.36 294.47 T +87.88 119.06 507.41 694.5 C +96.39 396.86 507.41 465.61 C +96.39 396.86 507.41 465.61 R +7 X +0 K +V +194.35 400.42 506.16 460.19 R +0.5 H +0 Z +0 X +N +201.27 406.09 402.52 454.28 R +7 X +V +15 F +0 X +(.etckey.toroku) 201.27 447.48 T +(hira) 308.99 447.48 T +(.etckey.syoukyo) 201.27 435.48 T +(zkatakana) 308.99 435.48 T +(.etckey.help) 201.27 423.48 T +(hkatakana) 308.99 423.48 T +(.etckey.sjrc) 201.27 411.48 T +(zalpha) 308.99 411.48 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "48" 49 +%%Page: "49" 49 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +1 F +0 X +(=i4|@_Dj$NJQ99!!) 423.9 95.32 T +0 F +(1-49) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(.sjrc ) 397.6 736.06 T +1 F +($K$h$k%f!<%6%+%9%?%^%$%:) 414.03 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +13 F +0 X +("#!!%3%s%H%m!<%k%3!<%I$N%3%^%s%I%-!<$X$N3d$jEv$F) 87.88 689.54 T +4 F +(%3%s%H%m!<%k%3!<%I$r!") 195.6 672.88 T +5 F +(sj3 ) 299.11 669.66 T +4 F +($N%3%^%s%I%-!<$K3d$jEv$F$k$3$H$,$G$-$^$9!#) 312.15 672.88 T +(5-=RNc) 195.6 640.29 T +5 F +(:) 225.5 637.06 T +4 F +(%-!<%o!<%I) 195.6 517.69 T +5 F +(key ) 243.91 514.47 T +4 F +($O!"$=$N9T$,%3%s%H%m!<%k%3!<%I$N%3%^%s%I%-!<$N@_Dj$G) 259.49 517.69 T +($"$k$3$H$r<\050$7$F$$$^$9!#) 195.6 501.39 T +($3$3$G$O!") 195.6 485.09 T +5 F +(2 ) 243.91 481.87 T +4 F +(HVL\134$N%-!<%o!<%I$O!"%\050%9%1!<%W%7!<%1%s%9$N@_Dj$G;H$C$?) 250.81 485.09 T +($b$N$HF1$8%3%^%s%I%-!<$rI=$9%-!<%o!<%I$,;H$\050$^$9!#) 195.6 468.8 T +13 F +("#!!l9g) 425.12 402.89 T +($O!") 195.6 386.6 T +5 F +(.sjrc) 214 383.37 T +4 F +($Nl9g$O!") 195.6 279.87 T +5 F +(sj3) 381.92 276.65 T +4 F +($O4D6-JQ?t) 394.96 279.87 T +5 F +(SHELL) 443.27 276.65 T +4 F +($r8+) 474.2 279.87 T +($F!"$=$l$rl9g$O!"%G%U%\051) 366.85 263.57 T +(%k%H$N) 195.6 247.28 T +5 F +(/bin/csh) 225.51 244.05 T +4 F +($r$9$3$H$,$G$-$^$9!#) 195.6 181.37 T +(%,%$%I%i%$%sI=<\050$,) 195.6 165.08 T +5 F +(on ) 280.71 161.85 T +4 F +($G%-!<3d$jEv$F$rJQ99$7$?>l9g$J$I$O!"%,%$%I%i%$) 292.21 165.08 T +(%s$NI=<\050$b9g$o$;$FJQ99$9$k$H$h$$$G$7$g$&!#) 195.6 148.78 T +87.88 119.06 507.41 694.5 C +96.39 538.59 507.41 628.59 C +96.39 538.59 507.41 628.59 R +7 X +0 K +V +192.76 543.56 504.58 624.92 R +0.5 H +0 Z +0 X +N +198.43 549.23 428.04 620.09 R +7 X +V +15 F +0 X +(.key.right) 198.43 613.29 T +(^F) 280.64 613.29 T +(.key.left) 198.43 601.29 T +(^D) 280.64 601.29 T +(.key.kakucyou) 198.43 589.29 T +(^R) 280.64 589.29 T +(.key.syukusyou) 198.43 577.29 T +(^V) 280.64 577.29 T +(.key.henkan) 198.43 565.29 T +(^T) 280.64 565.29 T +(.key.flush) 198.43 553.29 T +(^M) 280.64 553.29 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 317.07 507.41 342.31 C +96.39 317.07 507.41 342.31 R +7 X +0 K +V +15 F +0 X +(.ExecShell /bin/csh) 198.43 329.46 T +192.76 320.59 504.58 339.56 R +0.5 H +0 Z +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "49" 50 +20 8 0 -0.38 /Ryumin-Light-H JFMDEFINEFONT +%%Page: "50" 50 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-) 87.88 92.59 T +(50) 97.32 92.59 T +1 F +(!!=i4|@_Dj$NJQ99) 109.14 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(.sjrc ) 87.88 736.06 T +1 F +($K$h$k%f!<%6%+%9%?%^%$%:) 104.31 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +4 F +0 X +(5-=RNc) 195.6 689.89 T +5 F +(:) 225.5 686.67 T +4 F +(l9g$K;H$$$?$$$H$-$K!"$=$N) 247.73 191.08 T +(A0$K=q$-$^$9!#) 195.6 174.78 T +5 F +(\325 \134 \324) 260.01 171.56 T +4 F +(<+?H$r;H$&>l9g$O) 273.29 174.78 T +5 F +(\134\134) 346.9 171.56 T +4 F +($HI=$7$^$9!#) 352.02 174.78 T +($=$l$>$l$N%U%!%s%/%7%g%s%-!<$N4V$K$O!"<+F0E*$KH>3Q%9%Z!<%9$,Jd$o$l) 195.6 158.49 T +($^$9!#%,%$%I%i%$%s$,I=<\050$5$l$k$H$-$O!"H>3Q%9%Z!<%90J30$O%j%P!<%9$G) 195.6 142.19 T +(I=<\050$5$l$^$9!#) 195.6 125.89 T +87.88 119.06 507.41 694.5 C +96.39 575.44 507.41 678.2 C +96.39 575.44 507.41 678.2 R +7 X +0 K +V +192.76 578.99 504.58 672.53 R +0.5 H +0 Z +0 X +N +198.43 584.66 450.71 666.86 R +7 X +V +15 F +0 X +(.guide.buffer) 198.43 660.06 T +(+) 308.99 660.06 T +(.guide.unbuffer) 198.43 648.06 T +(-) 308.99 648.06 T +(.guide.hiragana) 198.43 636.06 T +20 F +($R$i$,$J) 308.99 638.86 T +15 F +(.guide.zkatakana) 198.43 624.06 T +20 F +(%+%?%+%J) 308.99 626.86 T +15 F +(.guide.hkatakana) 198.43 612.06 T +20 F +(""""%+%?%+%J) 308.99 614.86 T +15 F +(.guide.zalpha) 198.43 600.06 T +20 F +(#A#L#P#H) 308.99 602.86 T +15 F +(.guide.halpha) 198.43 588.06 T +(alphabet) 308.99 588.06 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 483.29 507.41 559.15 C +96.39 483.29 507.41 559.15 R +7 X +0 K +V +0 X +%%BeginBinary: 2724 +588 134 282.24 64.32 0 196.82 488.28 BEGINBITMAPBWc + + +=" +7F<" +E7<# +DAFF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F( +C91BC6210930EB) +FFD7FFFFFFFFDCFF7":" +EFDF7":# +FFFF7F<"J" +E7O4F2<#J" +DAFFO3FF +J" +O;F8(J" +E4C608F0E4F1D9O4FC(J" +DB6F676F5B6EE5O4FF7' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F( +C91BC6210930EB) +FFD7FFFFFFFFDCFF7":" +EFDF7":# +FFFF7F<" +E7<# +DAFF + +( +E4C608F0E4F1D9(J" +DB6F676F5B6EE5O4F37'J" +776F7F5B5F7BO4F87&J" +76EF705B40O5F07'J" +7AEF6F5B5FF4O4F37$8# +7DEF5FF37F<"J" +6BO4FC7&J" +7BEF5E5B6FO5FF(J" +C91BC6210930EBO4F2)J" +FFD7FFFFFFFFDCFFO3FA7":"J" +EFDFO4F17":%J" +FFFF7FC03FO1F9<"J" +E7O4F2<#J" +DAFFO3FDJ" +O;F4J" +O;F6(J" +E4C608F0E4F1D9O4FE(J" +DB6F676F5B6EE5O4F17'J" +776F7F5B5F7BO4F87&J" +76EF705B40O5FC7'J" +7AEF6F5B5FF4O4FE7$8#J" +7DEF5FF37FO3F9<"J" +6BO4FE7&J" +7BEF5E5B6FO5F0(J" +C91BC6210930EBO4FE)J" +FFD7FFFFFFFFDCFFO3F27":"J" +EFDFO4F77":%J" +FFFFFFFFFFO1FEJ" +O;F1J" +O;F0J" +O;F2J" +O;F7J" +O;FFJ" +O;FEJ" +O;F1J" +O;FCJ" +O;FFJ" +O;FBJ" +O;FE +J" +O;F2 + +J" +O;F3 +J" +O;FFJ" +O;FCJ" +O;FAJ" +O;F4J" +O;FDJ" +O;FCJ" +O;F9J" +O;F7J" +O;FFJ" +O;F0J" +O;F5J" +O;F3J" +O;F2J" +O;F1J" +O;F0 + +J" +O;FBJ" +O;FF +J" +O;F0J" +O;FFJ" +O;F0J" +O;FF + + +J" +O;FC +J" +O;FFJ" +O;F0J" +O;FEj +O<">)8$9(9%8$8$8$8#9"V" +403FFFC04008203FC8403FC03FD02000403FC03FFFC8423FC0403FC8423FC0403FC03FE18&<#8"8";"<#8"8"8&8"8(C" +1E00300030883E01BFC80180C402A000023FC4C0A000C03FC18003EF8(8*8"9%:"9)8.B" +02001000100008FFFF88443FCFFFBFFF08C4221FFF00441FFF3FC1101FFF4400403FC11000403FC0800080E8A+;%=,:#:$B" +C11008883FD49201103FC1FF1001C24400023FC20800023FC2C208840120EEA*<#@)8.B" +C9123F093FE4920912E2224900043FC40400044900423FC40400423FD1E211C2EF7)9585 +0F023E170F1E0E3F71108FFBFC49289113FCE3F0E803FD22200023FCE8E0F0E8DFFF00083FC80200083FDFFF0FFF3FC8020FFF3FCF110F017)8.8*85 +1082111890911108D27088A93FFFFF9270BFD10811C4220FFE3FD19111119C04000503FD7FD80503FC04000823FD7FD80823FC1110200BF*8#9):):'<$8% +7F808210908090A088E480C4922480BFE0882080403FE0A0A120BF603FE0400060E04000C210820D#9$9%9%8%:$;$8"<"=" +400F8F90BFC8880ACF08883FFF003FC9FF20A13F403FC040C0087"9%8%9&9%:#9"?#9) +109090A008C1FC0C8181FC3FE008C8280442203F80810201023FC41384083F7"9";*<"8"=#9#9#9#:" +20A0C20838103FDFFF8208F07EFFFFC7FCFFFFC7FC109#9-8)8"808$8$C" +111088BFFFC51009FFBFC000051088A0903FD0440440A0BFFFC04000803FC04000803FC04002C04002C81008E07(9/9"8%J%B" +21821E10A19110D8A008283FC92218A03FD08890B80AD09111106C92008FCEF7/8)8#8&9#9#9#9( +1EFFD039DEDE0F073FFFC07008241100703FCF070F388209CF0E0F8F3F01000100043404343FD0A0110B7$`85:":":#9#8% +0000108C38C08423FD088838C3FC00000103FD10110C03FC00000000686080C880C400088BF9"=+9(>"8$:.A" +3CFC03B981BFE088BC03BF003FD600A03FBF00FFFF8010003FFFFF90003FC00000783FEA"8";h9b9%8j8h" +00000000000010F +ENDBITMAP +%%EndBinary +196.23 488.91 478.44 553.52 R +0.5 H +0 Z +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +144.57 340.22 507.41 369.2 C +144.57 340.22 507.41 369.2 R +7 X +0 K +V +150.25 344.6 506.57 366.37 R +0.5 H +0 Z +0 X +N +155.91 349.36 501.74 360.7 R +7 X +V +15 F +0 X +(.guide.function ) 155.91 353.9 T +20 F +(JQ49) 237.47 356.7 T +(L5JQ) 263.06 356.7 T +15 F +(ETC\134. ) 288.64 353.9 T +20 F +(7hDj) 322.22 356.7 T +15 F +(CODE alph AL ) 347.81 353.9 T +20 F +(%+""%J) 424.57 356.7 T +(%+%J) 458.15 356.7 T +($+$J) 483.73 356.7 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 228.28 507.41 307.62 C +96.39 228.28 507.41 307.62 R +7 X +0 K +V +0 X +%%BeginBinary: 2545 +588 134 282.24 64.32 0 196.82 236.76 BEGINBITMAPBWc + + +=" +7F<" +E7<# +DAFF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F( +C91BC6210930EB) +FFD7FFFFFFFFDCFF7":" +EFDF7":#J" +FFFF7FO3F0<"J" +E7O4F2<#J" +DAFFO3FF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F( +C91BC6210930EB) +FFD7FFFFFFFFDCFF7":" +EFDF7":# +FFFF7F<" +E7<# +DAFF + +( +E4C608F0E4F1D9( +DB6F676F5B6EE57' +776F7F5B5F7B7& +76EF705B407' +7AEF6F5B5FF47$8# +7DEF5FF37F<" +6B7& +7BEF5E5B6F( +C91BC6210930EB) +FFD7FFFFFFFFDCFF7":" +EFDF7":% +FFFF7FC03F<" +E7<# +DAFFJ" +O;F6J" +O;F1(J" +E4C608F0E4F1D9O4F7(J" +DB6F676F5B6EE5O4F27' +776F7F5B5F7B7&J" +76EF705B40O5FD7'J" +7AEF6F5B5FF4O4FE7$8#J" +7DEF5FF37FO3F3<"J" +6BO4F87&J" +7BEF5E5B6FO5F0(J" +C91BC6210930EBO4FE)J" +FFD7FFFFFFFFDCFFO3F07":"J" +EFDFO4FB7":% +FFFFFFFFFF +J" +O;F0J" +O;F2J" +O;FCJ" +O;FFJ" +O;FCJ" +O;F7 +J" +O;F2J" +O;F8 +J" +O;FDJ" +O;F3J" +O;F2J" +O;F9J" +O;F0J" +O;F3J" +O;FBJ" +O;F9J" +O;FBJ" +O;FDJ" +O;F0J" +O;F1J" +O;F4J" +O;FBJ" +O;F2J" +O;F8J" +O;F6J" +O;F7J" +O;F6J" +O;F9 +J" +O;FFJ" +O;FA +J" +O;FF + + +J" +O;F2J" +O;FF + + +J" +O;FC +J" +O;FFJ" +O;F0J" +O;FEj +O<">)8$9(9#9#9#9#9#9"W" +403FFFC04008203FC8403FC03FD02000403FC03FC03FC03FC03FC03FC03FE18&<#8"8(:*8&8"8(D" +1E00300030883E01BFFFBF8E803FC8CE8E3E3FBFC01E0030401F803FCC0CC000603FC18003EF8(8.8*8$8&8"8)C" +02001000100008FFFF88443FCFFFBFFFBFD0A491C4221FFF3FD1911110020010A004003FC4044000203FC0800080E8A+8"8)J$C" +C11008883FD49201103F90C1FF10013FD0A0917840120EEA*8'9&;#9"9+C" +C9123F093FE49209120420003FE222E02090903FC110C5BFC04200213FD1E211C2EF7)9+:%:'J,$KH>3Q%9%Z!<%9$rF~$l$F$$$^$9!#) 195.6 673.59 T +($^$?!"F1$8$h$&$K) 195.6 641 T +5 F +(etc.\050) 271.51 637.77 T +4 F +($=$NB>) 287.61 641 T +5 F +(\051 ) 315.21 637.77 T +4 F +(%-!<$r2!$7$?$H$-$N%,%$%I%i%$%s$b!"@_Dj$G) 320.57 641 T +($-$^$9!#) 195.6 624.7 T +13 F +("#!!) 87.88 575.45 T +18 F +(vi) 107.72 571.98 T +13 F +(!") 114.88 575.45 T +18 F +(emacs ) 127.28 571.98 T +13 F +(MQ$N%3%s%H%m!<%k%3!<%I$NFCJL$JF0:n) 159.25 575.45 T +4 F +(!VJQ492DG=>uBV!W$G%-!<%\134!<%I$+$i%3%s%H%m!<%k%3!<%I$,F~NO$5$l$?>l) 195.6 558.79 T +(9g!"%P%C%U%!%j%s%0Cf$NJ8;z$O7hDj$5$l%"%W%j%1!<%7%g%s$KEO$5$l!"$=$N) 195.6 542.5 T +(8e$=$N%3%s%H%m!<%k%3!<%I$bEO$5$l$^$9!#$3$N$H$-) 195.6 526.2 T +5 F +(.sjrc ) 407.23 522.97 T +4 F +($K) 425.11 526.2 T +5 F +(2) 436.62 522.97 T +4 F +($D$NFCJL$J) 443.52 526.2 T +(%3!<%I$r@_Dj$7$F$*$/$3$H$,$G$-$^$9!#) 195.6 509.9 T +(5-=RNc!') 195.6 477.3 T +(%-!<%o!<%I) 195.6 406.43 T +5 F +(setnormal ) 243.91 403.21 T +4 F +($K@_Dj$5$l$F$$$k%3%s%H%m!<%k%3!<%I$,$-$?>l9g!") 284.8 406.43 T +5 F +(sj3 ) 195.6 386.91 T +4 F +($O$=$N%3!<%I$r%"%W%j%1!<%7%g%s$KEO$9$HF1;~$K) 208.64 390.13 T +5 F +(sj3 ) 413.36 386.91 T +4 F +(<+BN$O%"%s%P%C) 426.4 390.13 T +(%U%!) 195.6 373.84 T +5 F +(/) 216.31 370.61 T +4 F +(H>3Q%"%k%U%!%Y%C%HF~NO%b!<%I$K$J$j$^$9!#$3$3$G$O!"%\050%9%1!<%W) 218.86 373.84 T +(%3!<%I$K@_Dj$7$F$"$j$^$9$,!"$3$l$O) 195.6 357.54 T +5 F +(vi ) 354.32 354.31 T +4 F +($r;H$&$H$-$KJXMx$G$9!#) 363.78 357.54 T +(%-!<%o!<%I) 195.6 341.24 T +5 F +(throughnext ) 243.91 338.02 T +4 F +($K@_Dj$5$l$F$$$k%3%s%H%m!<%k%3!<%I$,$-$?>l9g!") 292.98 341.24 T +($=$N%3!<%I$r%"%W%j%1!<%7%g%s$KEO$7!"$5$i$K$=$NuBV!W$N=i4|%b!<%I$r@_Dj$G$-$^$9!#) 195.6 226.44 T +(5-=RNc!') 195.6 193.85 T +($3$NNc$G$O!"%"%s%P%C%U%!) 195.6 131.02 T +5 F +(/) 308.32 127.79 T +4 F +(H>3Q%"%k%U%!%Y%C%HF~NO%b!<%I$K@_Dj$7$F$$$^) 310.87 131.02 T +87.88 119.06 507.41 694.5 C +96.39 427.34 507.41 465.61 C +96.39 427.34 507.41 465.61 R +7 X +0 K +V +192.76 429.21 504.58 462.78 R +0.5 H +0 Z +0 X +N +198.43 434.43 496.07 457.11 R +7 X +V +15 F +0 X +(.SetNormal) 198.43 450.31 T +(^[) 280.64 450.31 T +(.ThroughNext) 198.43 438.31 T +(^X) 280.64 438.31 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 151.92 507.41 182.15 C +96.39 151.92 507.41 182.15 R +7 X +0 K +V +192.76 156.51 504.58 177.36 R +0.5 H +0 Z +0 X +N +198.43 162.31 498.9 170.82 R +7 X +V +15 F +0 X +(.InitialMode unbuffer.halpha.direct) 198.43 164.02 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "51" 52 +%%Page: "52" 52 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-) 87.88 92.59 T +(52) 97.32 92.59 T +1 F +(!!=i4|@_Dj$NJQ99) 109.14 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(.sjrc ) 87.88 736.06 T +1 F +($K$h$k%f!<%6%+%9%?%^%$%:) 104.31 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +4 F +0 X +($9) 195.6 689.89 T +5 F +(\050) 207.1 686.67 T +4 F +($3$l$O%G%U%\051%k%H$HF1$8$G$9) 210.17 689.89 T +5 F +(\051) 329.78 686.67 T +4 F +(!#FC$K!"%-!<%o!<%I) 332.84 689.89 T +5 F +(direct ) 417.95 686.67 T +4 F +($r;XDj$9$k$H!") 441.2 689.89 T +5 F +(sj3 ) 195.6 670.37 T +4 F +($,5/F0$7$F$9$0!VJQ492DG=>uBV!W$K$J$j$^$9) 208.64 673.59 T +5 F +(\050) 394.96 670.37 T +4 F +(!VJQ49IT2DG=>uBV!W$K$O) 398.02 673.59 T +($J$j$^$;$s) 195.6 657.29 T +5 F +(\051) 241.61 654.07 T +4 F +(!#) 244.67 657.29 T +(2?$b;XDj$7$J$1$l$P!"%"%s%P%C%U%!) 195.6 641 T +5 F +(/) 345.12 637.77 T +4 F +(H>3Q%"%k%U%!%Y%C%HF~NO%b!<%I$G!") 347.68 641 T +5 F +(sj3 ) 195.6 621.47 T +4 F +(5/F0;~$O!VJQ49IT2D>uBV!W$K$J$j$^$9!#) 208.64 624.7 T +(;XDj$G$-$k%-!<%o!<%I) 195.6 592.1 T +5 F +(:) 287.61 588.88 T +(buffer) 195.6 572.58 T +4 F +(!") 218.08 575.8 T +5 F +(unbuffer) 229.58 572.58 T +4 F +(!") 261.26 575.8 T +5 F +(halpha) 272.77 572.58 T +4 F +(!") 297.3 575.8 T +5 F +(zalpha) 308.8 572.58 T +4 F +(!") 332.82 575.8 T +5 F +(hkatakana) 344.32 572.58 T +4 F +(!") 381.62 575.8 T +5 F +(zkatakana) 393.12 572.58 T +4 F +(!") 429.91 575.8 T +5 F +(hiragana) 441.41 572.58 T +4 F +(!") 473.09 575.8 T +5 F +(direct) 484.6 572.58 T +13 F +("#!!%X%k%W) 87.88 526.55 T +4 F +(%,%$%I%i%$%s$N%U%!%s%/%7%g%s%-!<$r%G%U%\051%k%H$GI=<\050$7$^$9!#uBV!W$N%G%U%\051%k%H$G$O!"L5JQ49%-!<$O%H%0%kF0:n$r$7!"@_Dj) 195.6 672.88 T +($5$l$F$$$k%b!<%I$H!VJ?2>L>!WF~NO%b!<%I$H$,%H%0%k$G@Z$jBX$o$j$^$9) 195.6 656.58 T +($,!"!VA43QJR2>L>!W!"!VH>3QJR2>L>!W!"!VA43Q%"%k%U%!%Y%C%H!W!"!VH>3Q) 195.6 640.29 T +(%"%k%U%!%Y%C%H!W$N$I$N%b!<%I$K@Z$jBX$\050$k$+$r;XDj$G$-$^$9!#) 195.6 623.99 T +(5-=RNc!') 195.6 591.39 T +($3$NNc$G$O!"L5JQ49%-!<$r2!$9$H!VA43Q%"%k%U%!%Y%C%H!WF~NO%b!<%I$K$J) 195.6 528.56 T +($j$^$9!#) 195.6 512.27 T +(%G%U%\051%k%H$O!"H>3Q%"%k%U%!%Y%C%H$G$9!#) 195.6 495.97 T +(;HMQ$G$-$k%-!<%o!<%I) 195.6 463.37 T +5 F +(:) 289.91 460.15 T +(hiragana) 195.6 443.85 T +4 F +(!") 227.28 447.07 T +5 F +(zkatakana) 238.78 443.85 T +4 F +(!") 275.57 447.07 T +5 F +(hkatakana) 287.07 443.85 T +4 F +(!") 324.37 447.07 T +5 F +(zalpha) 335.88 443.85 T +4 F +(!") 359.89 447.07 T +5 F +(halpha) 371.4 443.85 T +13 F +("#!!L5JQ49%-!<$NJT=8;~$N%b!<%I$N@_Dj) 87.88 397.82 T +4 F +(2>L>4A;zJQ498e!"%+%l%s%HJ8@a$r!"!VJ?2>L>!W!"!VA43QJR2>L>!W!"!VH>3Q) 195.6 381.17 T +(JR2>L>!W!"!VA43Q%"%k%U%!%Y%C%H!W!"!VH>3Q%"%k%U%!%Y%C%H!W$KJQ49$G$-) 195.6 364.87 T +($^$9$,!"%G%U%\051%k%H$G$O!"L5JQ49%-!<$r2!$9$HJ?2>L>$K$J$j!"$b$&) 195.6 348.57 T +5 F +(1 ) 473.93 345.35 T +4 F +(EY2!) 480.83 348.57 T +($9$HA43QJR2>L>$K$J$j$^$9!#$5$i$K$b$&) 195.6 332.28 T +5 F +(1 ) 363.52 329.05 T +4 F +(EY2!$9$H$I$N%b!<%I$K$J$k$+$r) 370.42 332.28 T +(;XDj$G$-$^$9!#) 195.6 315.98 T +(5-=RNc!') 195.6 283.38 T +($3$NNc$G$O!"$b$&) 195.6 220.55 T +5 F +(1 ) 271.51 217.33 T +4 F +(EYL5JQ49%-!<$r2!$9$H!VA43Q%"%k%U%!%Y%C%H!W$K$J$j) 278.41 220.55 T +($^$9!#) 195.6 204.26 T +(;HMQ$G$-$k%-!<%o!<%I) 195.6 171.66 T +5 F +(:) 289.91 168.43 T +(hkatakana) 195.6 152.14 T +4 F +(!") 232.9 155.36 T +5 F +(zalpha) 244.41 152.14 T +4 F +(!") 268.42 155.36 T +5 F +(halpha) 279.92 152.14 T +87.88 119.06 507.41 694.5 C +96.39 549.47 507.41 579.7 C +96.39 549.47 507.41 579.7 R +7 X +0 K +V +192.76 554.06 504.58 574.9 R +0.5 H +0 Z +0 X +N +198.43 559.86 498.9 568.36 R +7 X +V +15 F +0 X +(.MuhenkanMode zalpha) 198.43 561.56 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 241.46 507.41 271.69 C +96.39 241.46 507.41 271.69 R +7 X +0 K +V +192.76 246.05 504.58 266.89 R +0.5 H +0 Z +0 X +N +198.43 251.85 498.9 260.35 R +7 X +V +15 F +0 X +(.MuhenkanInEdit zalpha) 198.43 253.55 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "53" 54 +%%Page: "54" 54 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-) 87.88 92.59 T +(54) 97.32 92.59 T +1 F +(!!=i4|@_Dj$NJQ99) 109.14 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(.sjrc ) 87.88 736.06 T +1 F +($K$h$k%f!<%6%+%9%?%^%$%:) 104.31 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +13 F +0 X +("#!!F~NOJ8;z:o=|%-!<$NJQ99) 87.88 689.54 T +5 F +(sj3 ) 195.6 669.66 T +4 F +($G$O!") 208.64 672.88 T +5 F +(delkey ) 238.54 669.66 T +4 F +($H$$$&%-!<%o!<%I$N$_M-8z$G$9!#;XDj$5$l$?%-!<$G$O%+!<) 265.37 672.88 T +(%=%k>e$NJ8;z$r:o=|$7$^$9!#%G%U%\051%k%H$O@_Dj$5$l$F$$$^$;$s!#) 195.6 656.58 T +(5-=RNc!') 195.6 623.99 T +13 F +("#!!F~NO%b!<%I@Z$jBX$\0507hDj5!G=) 87.88 544.51 T +4 F +(F~NO%b!<%I@Z$jBX$\050%-!<$r2!$7$?$H$-$NF0:n$,JQ$o$j$^$9!#) 195.6 527.85 T +(5-=RNc!') 195.6 495.26 T +($3$NNc$N$h$&$K@_Dj$9$k$H!"$3$N5!G=$,;H$\050$k$h$&$K$J$j$^$9!#%G%U%\051%k) 195.6 432.43 T +(%H$O) 195.6 416.13 T +5 F +(off ) 216.3 412.91 T +4 F +($G$9!#$3$N5!G=$,;XDj$5$l$J$$>l9g!"J8>O0l3gJQ49$,9T$o$l$?D>8e) 229.33 416.13 T +($KJ8;z8e$O) 286.84 383.53 T +(%+%l%s%HJ8@a$,B8:_$;$:!"J8;zl9g$OJQ497k2L) 195.6 367.24 T +($O7hDj$5$l$F!"F~NO%b!<%I$,@Z$jBX$o$j$^$9!#%+%l%s%HJ8@a$N0\134F0%-!<$d) 195.6 350.94 T +(JQ49%-!<$,2!$5$l$?$H$-$K=i$a$F%+%l%s%HJ8@a$,%j%P!<%9$GI=<\050$5$l!"$=) 195.6 334.64 T +($NJ8@a$NJ8;zO0l3gJQ49) 195.6 318.34 T +($r$9$kA0$K!"J8;zl9g$b!"%P%C%U%!Fb$NJ8;zNs) 195.6 302.04 T +($O7hDj$5$l$^$9!#$?$@$7L5JQ49%-!<$O!"%P%C%U%!Fb$NJ8;zNs$rJ?2>L>!?JR) 195.6 285.74 T +(2>L>$K@Z$jBX$\050$k$h$&$KF0:n$7$^$9!#) 195.6 269.45 T +13 F +("#!!:FJQ495!G=) 87.88 220.2 T +4 F +(D>A0$K7hDj$7$?J8;zNs$r!":FJQ49$G$-$^$9!#) 195.6 203.54 T +(5-=RNc!') 195.6 170.95 T +87.88 119.06 507.41 694.5 C +96.39 582.06 507.41 612.3 C +96.39 582.06 507.41 612.3 R +7 X +0 K +V +192.76 586.65 504.58 607.5 R +0.5 H +0 Z +0 X +N +198.43 592.45 498.9 600.96 R +7 X +V +15 F +0 X +(.delkey ^H) 198.43 594.16 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 453.33 507.41 483.56 C +96.39 453.33 507.41 483.56 R +7 X +0 K +V +192.76 457.92 504.58 478.77 R +0.5 H +0 Z +0 X +N +198.43 463.72 498.9 472.23 R +7 X +V +15 F +0 X +(.FlushAfterConversion on) 198.43 465.43 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 129.02 507.41 159.26 C +96.39 129.02 507.41 159.26 R +7 X +0 K +V +192.76 133.61 504.58 154.46 R +0.5 H +0 Z +0 X +N +198.43 139.41 498.9 147.92 R +7 X +V +15 F +0 X +(.key.saihenka ^Y) 198.43 141.12 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "54" 55 +%%Page: "55" 55 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +1 F +0 X +(=i4|@_Dj$NJQ99!!) 423.9 95.32 T +0 F +(1-55) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(.sjrc ) 397.6 736.06 T +1 F +($K$h$k%f!<%6%+%9%?%^%$%:) 414.03 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +4 F +0 X +(%-!<%o!<%I) 195.6 689.89 T +5 F +(key ) 243.91 686.67 T +4 F +($O!"A0=R$N%3%s%H%m!<%k%3!<%I$N%3%^%s%I%-!<$N@_Dj$rI=) 259.49 689.89 T +($7$^$9!#) 195.6 673.59 T +5 F +(2 ) 234.71 670.37 T +4 F +(HVL\134$N%-!<%o!<%I) 241.61 673.59 T +5 F +(saihenkan ) 317.52 670.37 T +4 F +($O!":FJQ49$N%3%^%s%I%-!<$rI=$7$^) 356.61 673.59 T +($9!#$3$NNc$G$O!") 195.6 657.29 T +5 F +(Ctrl-Y ) 271.51 654.07 T +4 F +($K3d$jEv$F$F$$$^$9!#%P%C%U%!$K$J$K$b$J$$>uBV) 297.84 657.29 T +($G:FJQ49%-!<$,2!$5$l$k$H!"D>A0$K7hDj$5$l$?FbMF$,:FJQ49$5$l$^$9!#$?) 195.6 641 T +($@$7J8>O0l3gJQ49$7!"JT=8$7$F$+$i7hDj$7$?>l9g!":FJQ49$K$OJT=8A0$NFb) 195.6 624.7 T +(MF$,;H$o$l$^$9!#$^$?!"J8>O0l3gJQ49$7$F$^$@7hDj$7$F$$$J$$>uBV$G:FJQ) 195.6 608.4 T +(49%-!<$r2!$9$H!"$b$&0lEYJQ49$7D>$7$^$9!#$^$?!"J8>O0l3gJQ49A0$K%P%C) 195.6 592.1 T +(%U%!$KFbMF$,$"$k>uBV$G:FJQ49%-!<$,2!$5$l$?>l9g$O!"F0:n$7$^$;$s!#) 195.6 575.8 T +(%-%c%s%;%k%-!<$r;H$C$F!"%P%C%U%!$NFbMF$r>C$7$F$+$i!":FJQ49$7$F$/$@) 195.6 559.51 T +($5$$!#) 195.6 543.21 T +(%-%c%s%;%k%-!<$O%j%9%H$N;XDj) 87.88 365.94 T +4 F +(@\134B3$9$k%5!<%P$G;HMQ$9$k<-=qL>%j%9%H$r;HMQ$7$^$9!#) 195.6 349.28 T +(5-=RNc!') 195.6 316.69 T +(<-=qL>$O!"@\134B3$9$k%5!<%P$N) 195.6 253.86 T +5 F +(serverrc) 317.52 250.63 T +4 F +($N) 349.45 253.86 T +5 F +(DictDir) 360.95 250.63 T +4 F +($G;XDj$5$l$k%G%#%l%/%H%j) 391.36 253.86 T +($K$"$k<-=q$N%U%!%$%kL>$+$i) 195.6 237.56 T +5 F +(.dic) 315.21 234.34 T +4 F +($r$N$>$$$?L>A0$r;HMQ$7$^$9!#) 331.06 237.56 T +(<-=qL>$K) 195.6 221.26 T +5 F +(.\050) 232.4 218.04 T +4 F +(%T%j%*%I) 237.77 221.26 T +5 F +(\051) 274.57 218.04 T +4 F +($,4^$^$l$F$$$k$H!"$=$N<-=q$O;HMQ$G$-$^$;$s) 279.94 221.26 T +(J#?t$N<-=q$r;XDj$7$?>l9g!"4pK\134E*$K@hF,$K6a$$<-=q$N8uJd$,M%@h$5$l$^) 195.6 204.96 T +($9$,!"%f!<%6<-=q$N8uJd$d!"3X=,$5$l$?8uJd$h$jM%@h$5$l$k$3$H$O$"$j$^) 195.6 188.67 T +($;$s!#$^$?!"%5!<%P$N) 195.6 172.37 T +5 F +(serverrc) 289.91 169.14 T +4 F +($N) 321.84 172.37 T +5 F +(OpenDict) 333.35 169.14 T +4 F +($G;XDj$5$l$?<-=q$HF1$8<-=q$r) 371.42 172.37 T +(;XDj$9$k>l9g!") 195.6 156.07 T +5 F +(OpenDict) 262.31 152.85 T +4 F +($G;XDj$5$l$?M%@hEY$K$J$j$^$9!#) 300.39 156.07 T +5 F +(.dictionary) 195.6 136.55 T +4 F +($N;XDj$,$J$$>l9g$O!") 237.51 139.77 T +5 F +(sj3main.dic) 331.83 136.55 T +4 F +($,;HMQ$5$l$^$9!#) 376.81 139.77 T +5 F +(.dictionary) 450.42 136.55 T +4 F +($N) 492.34 139.77 T +87.88 119.06 507.41 694.5 C +96.39 436.09 507.41 466.32 C +96.39 436.09 507.41 466.32 R +7 X +0 K +V +192.76 440.68 504.58 461.53 R +0.5 H +0 Z +0 X +N +198.43 446.48 498.9 454.99 R +7 X +V +15 F +0 X +(.key.cancel ^U) 198.43 448.19 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 274.76 507.41 304.99 C +96.39 274.76 507.41 304.99 R +7 X +0 K +V +192.76 279.35 504.58 300.2 R +0.5 H +0 Z +0 X +N +198.43 285.15 498.9 293.66 R +7 X +V +15 F +0 X +(.dictionary sj3main dictname2 dictname3) 198.43 286.86 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "55" 56 +%%Page: "56" 56 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-) 87.88 92.59 T +(56) 97.32 92.59 T +1 F +(!!=i4|@_Dj$NJQ99) 109.14 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(.sjrc ) 87.88 736.06 T +1 F +($K$h$k%f!<%6%+%9%?%^%$%:) 104.31 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +4 F +0 X +(;XDj$,$"$k>l9g$OL@<\050E*$K) 195.6 689.89 T +5 F +(sj3main.dic) 308.32 686.67 T +4 F +($r;XDj$7$J$$$H) 353.3 689.89 T +5 F +(sj3main.dic) 420.01 686.67 T +4 F +($O;HMQ$5) 465 689.89 T +($l$^$;$s!#) 195.6 673.59 T +(%5!<%P$K) 195.6 657.29 T +5 F +(.dictionary) 232.4 654.07 T +4 F +($G;XDj$5$l$?<-=q$N$&$A) 274.32 657.29 T +5 F +(1) 377.83 654.07 T +4 F +($D$G$bB8:_$9$l$P@\134B3$O@.8y) 384.74 657.29 T +($7$^$9!#$h$C$F!"@\134B3$9$k%5!<%P$K$h$C$F$OK>$`8uJd$,=P$J$$$3$H$,$"$j) 195.6 641 T +($^$9!#) 195.6 624.7 T +(%F%-%9%H7A<0$N<-=q%U%!%$%k$+$i) 195.6 592.1 T +5 F +(sj3serv) 335.92 588.88 T +4 F +($G;HMQ$G$-$k<-=q$N7A<0$KJQ49$9) 364.29 592.1 T +($k$K$O) 195.6 575.8 T +5 F +(sj3mkdic\0501\051) 225.51 572.58 T +4 F +($r;HMQ$7$F$/$@$5$$!#) 272.28 575.8 T +13 F +("#!!%5!<%P$H$J$k%[%9%HL>%j%9%H$N;XDj) 87.88 526.55 T +4 F +(@\134B3$9$k%5!<%P$H$J$k%[%9%HL>%j%9%H$r;XDj$7$^$9!#) 195.6 509.9 T +(5-=RNc!') 195.6 477.3 T +($3$N%5!<%P$N;XDj$O!"5/F0;~$N%*%W%7%g%s!"4D6-JQ?t) 195.6 414.48 T +5 F +(SJ3SERV) 418.73 411.25 T +4 F +(!"%;%C%H%") 455.54 414.48 T +(%C%W%U%!%$%k$G$N;XDj$H$$$&=g$G7h$a$i$l$^$9!#) 195.6 398.18 T +13 F +("#!!%m!<%^;z$+$JJQ49%\050%i!<=hM}$N@_Dj) 87.88 348.93 T +4 F +(%m!<%^;z$+$JJQ49$G$-$J$$F~NOJ8;zNs$,$"$C$?;~$N=hM}) 195.6 332.27 T +5 F +(\050on/off\051 ) 427.93 329.05 T +4 F +($r@_Dj$7$^) 458.84 332.27 T +($9!#) 195.6 315.98 T +(5-=RNc!') 195.6 283.38 T +5 F +(on) 195.6 217.33 T +4 F +($G$OJQ49$G$-$J$$J8;zNs$K$J$C$?;~%Y%k$r$J$i$7!"$=$N;~$NF~NOJ8;z$O) 207.1 220.55 T +(=PNO$7$^$;$s!#) 195.6 204.25 T +5 F +(off) 262.31 201.03 T +4 F +($G$OJQ49$G$-$J$$J8;zNs$b$=$N$^$^=PNO$7$^$9!#%G%U%\051) 275.34 204.25 T +(%k%H$O) 195.6 187.96 T +5 F +(off) 225.51 184.73 T +4 F +($K$J$C$F$$$^$9!#) 238.54 187.96 T +87.88 119.06 507.41 694.5 C +96.39 435.38 507.41 465.61 C +96.39 435.38 507.41 465.61 R +7 X +0 K +V +192.76 439.97 504.58 460.81 R +0.5 H +0 Z +0 X +N +198.43 445.77 498.9 454.27 R +7 X +V +15 F +0 X +(.server host1 host2 host3) 198.43 447.47 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 241.46 507.41 271.69 C +96.39 241.46 507.41 271.69 R +7 X +0 K +V +192.76 246.04 504.58 266.89 R +0.5 H +0 Z +0 X +N +198.43 251.85 498.9 260.35 R +7 X +V +15 F +0 X +(.rkerrbell on) 198.43 253.55 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "56" 57 +%%Page: "57" 57 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +1 F +0 X +(=i4|@_Dj$NJQ99!!) 423.9 95.32 T +0 F +(1-57) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3 ) 355.23 736.06 T +1 F +($N%m!<%^;z2>L>JQ495,B'$N%+%9%?%^%$%:) 367.34 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +11 F +0 X +(sj3 ) 87.88 682.45 T +12 F +($N%m!<%^;z2>L>JQ495,B'$N%+%9%?%^%$%:) 111.5 687.41 T +5 F +(sj3 ) 195.6 652.65 T +4 F +($O!"%m!<%^;z$+$JJQ495,B'Dj5A%U%!%$%k$r=q$-49$\050$k$3$H$K$h$j!"<+M3) 208.64 655.87 T +($KJQ495,B'$r@_Dj$G$-$^$9!#) 195.6 639.58 T +(JQ495,B'Dj5A%U%!%$%k$O!"l9g!") 195.6 541.79 T +5 F +(sj3 ) 335.92 538.56 T +4 F +($O5/F0$9$k$,%m!<%^;z$+$JJQ49$O$G$-) 348.96 541.79 T +($^$;$s) 195.6 525.49 T +5 F +(\050) 225.5 522.27 T +4 F +(DL>o) 228.57 525.49 T +5 F +(3 ) 249.27 522.27 T +4 F +($N%U%!%$%k$,%G%U%\051%k%H$H$7$FMQ0U$5$l$F$$$^$9) 256.17 525.49 T +5 F +(\051) 458.59 522.27 T +4 F +(!#) 461.66 525.49 T +13 F +("#!!%U%!%$%k$N%U%\051!<%^%C%H$*$h$S@bL@) 87.88 476.24 T +4 F +(%U%!%$%k$N3F9T$O!") 195.6 398.64 T +(A0$K) 195.6 382.34 T +5 F +(\322\134\323 ) 216.3 379.12 T +4 F +($rIU$1$F$/$@$5$$!#3F9`L\134$NJ8;z?t$O) 229.33 382.34 T +5 F +(16 ) 388.05 379.12 T +4 F +($^$G$H$7!"$=$l$r1[$\050$k) 399.55 382.34 T +($b$N$OL5;k$5$l$^$9!#$^$?JQ49$K:]$7$F%m!<%^;z$NBgJ8;z!">.J8;z$N6hJL) 195.6 366.04 T +($O$7$^$;$s!#) 195.6 349.74 T +(!VF~NO%m!<%^;z!W$K$OJQ49BP>]$H$J$k%m!<%^;z$NDV$j) 195.6 317.15 T +5 F +(\050ASCII ) 418.73 313.92 T +4 F +(J8;z) 448.11 317.15 T +5 F +(\051 ) 466.52 313.92 T +4 F +($r5-=R) 471.88 317.15 T +($7!"!V=PNO$+$J!W$K$O$=$NDV$j$NJQ497k2L$H$J$k$R$i$,$J) 195.6 300.85 T +5 F +(\050) 437.13 297.62 T +4 F +(%+%?%+%J!"4A) 440.19 300.85 T +(;z!") 195.6 284.55 T +5 F +(ASCII ) 216.31 281.33 T +4 F +(J8;z$r4^$`) 242.63 284.55 T +5 F +(\051 ) 288.64 281.33 T +4 F +($r5-=R$7$^$9!#) 294 284.55 T +(5-=RNc!') 195.6 251.96 T +($3$N) 195.6 137.85 T +5 F +(2 ) 216.3 134.63 T +4 F +($D$N9`L\134$OI,$:5-=R$7$J$1$l$P$J$j$^$;$s$,!":G8e$N) 223.2 137.85 T +(!V=PNO%m!<%^) 446.33 137.85 T +87.88 119.06 507.41 694.5 C +123.7 419.54 507.41 447.9 C +123.7 419.54 507.41 447.9 R +7 X +0 K +V +194.56 422.38 497.87 445.06 R +V +0.5 H +0 Z +0 X +N +203.07 428.05 489.36 439.39 R +7 X +V +6 F +0 X +(!VF~NO%m!<%^;z!W) 203.07 434.79 T +(!V=PNO$+$J!W) 297.14 434.79 T +(!V=PNO%m!<%^;z!W) 362.58 434.79 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 158.76 507.41 240.26 C +96.39 158.76 507.41 240.26 R +7 X +0 K +V +192.76 163.73 504.58 235.47 R +0.5 H +0 Z +0 X +N +198.43 169.4 498.9 228.92 R +7 X +V +15 F +0 X +(A ) 198.43 222.12 T +6 F +($") 236.81 224.92 T +15 F +(I ) 198.43 210.12 T +6 F +($$) 236.81 212.92 T +15 F +(U ) 198.43 198.12 T +6 F +($&) 236.81 200.92 T +15 F +(E ) 198.43 186.12 T +6 F +($\050) 236.81 188.92 T +15 F +(O ) 198.43 174.12 T +6 F +($*) 236.81 176.92 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "57" 58 +%%Page: "58" 58 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-) 87.88 92.59 T +(58) 97.32 92.59 T +1 F +(!!=i4|@_Dj$NJQ99) 109.14 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3 ) 87.88 736.06 T +1 F +($N%m!<%^;z2>L>JQ495,B'$N%+%9%?%^%$%:) 99.99 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +4 F +0 X +(;z!W$O$J$/$F$b9=$$$^$;$s!#!V=PNO%m!<%^;z!W$K$O!"JQ497k2L$KIU2C$9$k) 195.6 689.89 T +(]$H$J$k%m!<%^;z$NDV$j$r5-=R$7$^$9!#Nc$\050$P) 195.6 673.59 T +5 F +(\322kekka\323 ) 437.13 670.37 T +4 F +($HF~NO$7) 469.57 673.59 T +($F) 195.6 657.29 T +5 F +(\322) 207.1 654.07 T +4 F +($1$C$+) 211.19 657.29 T +5 F +(\323 ) 238.79 654.07 T +4 F +($H$7$?$$>l9g$K$O!") 245.18 657.29 T +5 F +(\323kk\323 ) 327.98 654.07 T +4 F +($rF~NO$7$?;~$K) 347.66 657.29 T +5 F +(\322) 414.36 654.07 T +4 F +($C) 418.45 657.29 T +5 F +(k\323 ) 429.95 654.07 T +4 F +($HJQ49$5$;$k5,) 440.94 657.29 T +(B'$,I,MW$K$J$j$^$9!#$3$N5,B'$N5-=R$G$Ol9gA4BN$NJ8;z?t$NB?$$J}$NJQ49$,M%@h$5$l$^$9!#) 195.6 512.97 T +(!VF~NO%m!<%^;z!W$KF1$8%5%V%9%H%j%s%0$,4^$^$l$kNc) 195.6 480.38 T +(>e5-$N5,B'$G$O!") 195.6 404.31 T +5 F +(\323so\323 ) 269.21 401.08 T +4 F +(F~NO$7$F$b) 287.86 404.31 T +5 F +(\322so\323 ) 336.17 401.08 T +4 F +($H=PNO$5$l!"$C$?F0:n$r$7$^$9!#) 195.6 623.28 T +($^$?;HMQ$9$k%]!<%H$O) 195.6 606.98 T +9 F +(/etc/services) 289.91 603.76 T +4 F +($r;2>H$7$F7h$a$^$9!#) 339.23 606.98 T +13 F +("#!!;HMQ$9$k%]!<%H$NJQ99) 87.88 557.73 T +5 F +(sj3serv) 195.6 537.85 T +4 F +($G;HMQ$9$k%]!<%H$rJQ99$9$k$K$O) 223.97 541.08 T +5 F +(/etc/services) 364.29 537.85 T +4 F +($rJQ99$7$^$9!#) 412.07 541.08 T +(%]!<%HHV9f$r) 195.6 524.78 T +5 F +(4000 ) 253.11 521.56 T +4 F +($K$9$k$?$a$K$O) 273.81 524.78 T +5 F +(/etc/services) 340.52 521.56 T +4 F +($N) 388.3 524.78 T +5 F +(sj3serv) 399.81 521.56 T +4 F +($N9T$r.J8;z$G$b$+$^$$$^$;$s!#) 195.6 363.45 T +(3F9T$N) 195.6 347.15 T +5 F +(\324#\325 ) 225.5 343.93 T +4 F +(0J9_$O%3%a%s%H$H$7$FL5;k$5$l$^$9!#) 238.53 347.15 T +5 F +(\325#\325 ) 394.95 343.93 T +4 F +($r%3%a%s%H$N3+;O$H$7) 407.98 347.15 T +($J$$$?$a$K$O) 195.6 330.86 T +5 F +(\324\134\325 ) 253.11 327.63 T +4 F +($r@h9T$5$;$^$9!#) 264.09 330.86 T +(Nc!') 195.6 298.26 T +13 F +("#!!%;%C%H%"%C%W%U%!%$%k) 87.88 206.24 T +4 F +(%;%C%H%"%C%W%U%!%$%k$G$O!"l9g$O%+!<%M%k%Q%i%a!<%?$N) 195.6 529.27 T +5 F +(NUMTRW) 400.33 526.05 T +4 F +($NCM$rBg$-$/) 444.54 529.27 T +($7$F%+!<%M%k$r:F9=C[$9$kI,MW$,$"$j$^$9!#) 195.6 512.97 T +6 F +(<-=q%G%#%l%/%H%j$N;XDj) 195.6 480.38 T +4 F +(<-=q$NB8:_$9$k%G%#%l%/%H%j$r;XDj$7$^$9!#) 195.6 417.55 T +(%/%i%$%"%s%H$+$iM?$\050$i$l$?<-=q%U%!%$%kL>$,) 195.6 401.25 T +5 F +(\324/\325 ) 391.12 398.03 T +4 F +($G;O$^$k$H$-$K$O!"@dBP) 402.11 401.25 T +(%Q%9$H$7$F$=$N$^$^$N%U%!%$%kL>$G%"%/%;%9$5$l$^$9$,!") 195.6 384.95 T +5 F +(\325/\325 ) 434.83 381.73 T +4 F +(0J30$N$H$-$K) 445.81 384.95 T +($O!"$3$N%G%#%l%/%H%j$+$i$NAjBP%Q%9$H$7$F%"%/%;%9$5$l$^$9!#) 195.6 368.65 T +(%G%U%\051%k%H$O) 195.6 352.36 T +5 F +(/usr/dict/sj3 ) 253.11 349.13 T +4 F +($G$9!#) 298.86 352.36 T +6 F +(<-=q$N;vA0%j!<%I) 195.6 319.76 T +4 F +(%5!<%P$N5/F0;~$KFI$_9~$`<-=q$r;XDj$7$^$9!#) 195.6 256.93 T +(5pBg$J<-=q$O;vA0$KFI$_9~$s$G$*$/$3$H$K$h$j!"%/%i%$%"%s%H$N5/F0;~4V) 195.6 240.63 T +($rAa$/$G$-$^$9!#) 195.6 224.33 T +(J#?t9T$N) 195.6 208.04 T +5 F +(ReadDict ) 234.71 204.81 T +4 F +($r=q$/$3$H$,$G$-$^$9!#) 271.76 208.04 T +(%G%U%\051%k%H$GFI$_9~$^$l$k<-=q$O$"$j$^$;$s!#) 195.6 191.74 T +87.88 119.06 507.41 694.5 C +96.39 647.96 507.41 678.2 C +96.39 647.96 507.41 678.2 R +7 X +0 K +V +192.76 652.55 504.58 673.4 R +0.5 H +0 Z +0 X +N +198.43 658.36 498.9 666.86 R +7 X +V +15 F +0 X +(MaxClient ) 198.43 660.06 T +16 F +(number_of_client) 265.6 660.06 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 438.45 507.41 468.69 C +96.39 438.45 507.41 468.69 R +7 X +0 K +V +192.76 443.04 504.58 463.89 R +0.5 H +0 Z +0 X +N +198.43 448.84 498.9 457.35 R +7 X +V +15 F +0 X +(DictDir ) 198.43 450.55 T +16 F +(directory_name) 265.6 450.55 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 277.83 507.41 308.07 C +96.39 277.83 507.41 308.07 R +7 X +0 K +V +192.76 282.42 504.58 303.27 R +0.5 H +0 Z +0 X +N +198.43 288.23 498.9 296.73 R +7 X +V +15 F +0 X +(ReadDict ) 198.43 289.93 T +16 F +(dictionary_name) 260.8 289.93 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "60" 61 +%%Page: "61" 61 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +1 F +0 X +(=i4|@_Dj$NJQ99!!) 423.9 95.32 T +0 F +(1-61) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3serv ) 402.78 736.06 T +1 F +($N%f!<%6%+%9%?%^%$%:) 429.59 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +6 F +0 X +(;HMQ$9$k<-=q$N;XDj) 195.6 689.89 T +4 F +($3$N%5!<%P$G;HMQ$9$k<-=q$r;XDj$7$^$9!#) 195.6 627.06 T +(%G%U%\051%k%H$N<-=q$G$"$k) 195.6 610.76 T +5 F +(sj3main.dic) 299.11 607.54 T +4 F +($H9g$o$;$F;HMQ$9$k<-=q$r;XDj$7$^) 344.1 610.76 T +($9!#) 195.6 594.46 T +(J#?t9T$N) 195.6 578.17 T +5 F +(OpenDict ) 234.71 574.94 T +4 F +($r=q$/$3$H$,$G$-$^$9!#) 272.78 578.17 T +(J#?t9T$"$k>l9g$O!"4pK\134E*$K%U%!%$%k$N@hF,$K6a$$<-=q$N8uJd$,M%@h$5$l) 195.6 561.87 T +($^$9$,!"%f!<%6<-=q$N8uJd$d!"3X=,$5$l$?8uJd$h$jM%@h$5$l$k$3$H$O$"$j) 195.6 545.57 T +($^$;$s!#) 195.6 529.27 T +5 F +(OpenDict) 195.6 509.75 T +4 F +($K) 233.68 512.97 T +5 F +(sj3main.dic) 245.18 509.75 T +4 F +($r;XDj$9$k$3$H$K$h$jB>$K;XDj$5$l$?<-=q$N8uJd$H) 290.17 512.97 T +($NM%@hEY$rD4@a$9$k$3$H$,$G$-$^$9!#) 195.6 496.68 T +5 F +(OpenDict) 354.32 493.45 T +4 F +($G) 392.4 496.68 T +5 F +(sj3main.dic) 403.9 493.45 T +4 F +($,;XDj$5$l$F) 448.89 496.68 T +($$$J$$>l9g) 195.6 480.38 T +5 F +(sj3main.dic) 243.91 477.15 T +4 F +($N8uJd$NM%@hEY$,0lHVDc$/$J$j$^$9!#) 288.89 480.38 T +(%F%-%9%H7A<0$N<-=q%U%!%$%k$+$i) 195.6 447.78 T +5 F +(sj3serv) 335.92 444.56 T +4 F +($G;HMQ$G$-$k<-=q$N7A<0$KJQ49$9) 364.29 447.78 T +($k$K$O) 195.6 431.48 T +5 F +(sj3mkdic\0501\051) 225.51 428.26 T +4 F +($r;HMQ$7$F$/$@$5$$!#) 272.28 431.48 T +6 F +(%\050%i!<=PNO%U%!%$%k$N;XDj) 195.6 398.89 T +4 F +(%\050%i!<%a%C%;!<%8$r=PNO$9$k%U%!%$%k$r;XDj$7$^$9!#) 195.6 336.06 T +(%G%U%\051%k%H$O) 195.6 319.76 T +5 F +(/dev/null ) 253.11 316.54 T +4 F +($G$9!#) 288.13 319.76 T +6 F +(%5!<%P$K@\134B3$G$-$k%f!<%6$N;XDj) 195.6 287.16 T +4 F +(%5!<%P$K@\134B3$G$-$k%f!<%6$r@\0518B$7$^$9!#) 195.6 224.33 T +($3$N9T$r2C$\050$k$3$H$K$h$j%5!<%P$K@\134B3$G$-$k$N$O%[%9%H) 195.6 208.04 T +17 F +(hostname) 437.13 204.81 T +4 F +(>e$N) 474.7 208.04 T +(%f!<%6) 195.6 191.74 T +17 F +(username) 225.51 188.51 T +4 F +($@$1$K@\0518B$5$l$^$9!#) 263.58 191.74 T +17 F +(hostname) 195.6 172.22 T +4 F +($O>JN,$G$-$^$9$,!"$=$N;~$K$O%f!<%6L>$,) 233.17 175.44 T +17 F +(username) 410.29 172.22 T +4 F +($G$"$l$P$I$N) 448.37 175.44 T +(%[%9%H$+$i$G$bL5>r7o$G@\134B3$G$-$k$3$H$K$J$j$^$9!#) 195.6 159.14 T +17 F +(username) 195.6 139.62 T +4 F +(!") 231.37 142.84 T +17 F +(hostname) 242.88 139.62 T +4 F +($r5-=R$9$k:]$K$O!"J#?tJ8;z$H%^%C%A%s%0$9$k) 280.45 142.84 T +5 F +(\324*\325 ) 475.97 139.62 T +4 F +($H) 489 142.84 T +5 F +(1 ) 500.5 139.62 T +4 F +(J8;z$H%^%C%A%s%0$9$k) 195.6 126.55 T +5 F +(\324?\325 ) 289.91 123.32 T +4 F +($r;H$&$3$H$,$G$-$^$9!#) 302.42 126.55 T +87.88 119.06 507.41 694.5 C +96.39 647.96 507.41 678.2 C +96.39 647.96 507.41 678.2 R +7 X +0 K +V +192.76 652.55 504.58 673.4 R +0.5 H +0 Z +0 X +N +198.43 658.36 498.9 666.86 R +7 X +V +15 F +0 X +(OpenDict ) 198.43 660.06 T +16 F +(dictionary_name) 260.8 660.06 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 356.96 507.41 387.2 C +96.39 356.96 507.41 387.2 R +7 X +0 K +V +192.76 361.55 504.58 382.4 R +0.5 H +0 Z +0 X +N +198.43 367.35 498.9 375.86 R +7 X +V +15 F +0 X +(ErrorOut ) 198.43 369.06 T +16 F +(error_out_filename) 265.6 369.06 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 245.24 507.41 275.47 C +96.39 245.24 507.41 275.47 R +7 X +0 K +V +192.76 249.83 504.58 270.67 R +0.5 H +0 Z +0 X +N +198.43 255.63 498.9 264.13 R +7 X +V +15 F +0 X +(AllowUser ) 198.43 257.33 T +16 F +(username hostname) 279.99 257.33 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "61" 62 +%%Page: "62" 62 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-) 87.88 92.59 T +(62) 97.32 92.59 T +1 F +(!!=i4|@_Dj$NJQ99) 109.14 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3serv ) 87.88 736.06 T +1 F +($N%f!<%6%+%9%?%^%$%:) 114.69 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +5 F +0 X +(AllowUser ) 195.6 686.67 T +4 F +($OJ#?t9T=q$/$3$H$,$G$-$^$9!#) 238.27 689.89 T +(%G%U%\051%k%H$O$9$Y$F$N%f!<%6$r5v2D$7$F$$$^$9!#) 195.6 673.59 T +6 F +(%5!<%P$N;HMQ$9$k%]!<%HL>$N;XDj) 195.6 640.99 T +4 F +(%5!<%P$,%/%i%$%"%s%H$+$i$N@\134B3$rA0$r;XDj$7$^) 195.6 578.17 T +($9!#%G%U%\051%k%H$O) 195.6 561.87 T +5 F +(sj3 ) 271.51 558.64 T +4 F +($G$9!#) 284.55 561.87 T +6 F +(%5!<%P$N;HMQ$9$k%]!<%HHV9f$N;XDj) 195.6 529.27 T +4 F +(%5!<%P$,%/%i%$%"%s%H$+$i$N@\134B3$rl9g$O!") 235.21 450.14 T +5 F +(PortName ) 347.93 446.92 T +4 F +($rM%@h$7$^$9!#%G%U%\051%k%H) 387.54 450.14 T +($O) 195.6 433.85 T +5 F +(3000 ) 207.1 430.62 T +4 F +($G$9!#) 227.8 433.85 T +87.88 119.06 507.41 694.5 C +96.39 599.07 507.41 629.3 C +96.39 599.07 507.41 629.3 R +7 X +0 K +V +192.76 603.66 504.58 624.5 R +0.5 H +0 Z +0 X +N +198.43 609.46 498.9 617.96 R +7 X +V +15 F +0 X +(PortName ) 198.43 611.16 T +16 F +(portname) 265.6 611.16 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +96.39 487.35 507.41 517.58 C +96.39 487.35 507.41 517.58 R +7 X +0 K +V +192.76 491.93 504.58 512.78 R +0.5 H +0 Z +0 X +N +198.43 497.74 498.9 506.24 R +7 X +V +15 F +0 X +(PortNumber ) 198.43 499.44 T +16 F +( portnumber) 265.6 499.44 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "62" 63 +%%Page: "63" 63 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +1 F +0 X +(=i4|@_Dj$NJQ99!!) 423.9 95.32 T +0 F +(1-63) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3 ) 378.57 736.06 T +1 F +($NF0:n$KI,MW$J%?!<%_%J%k$N5!G=) 390.68 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +11 F +0 X +(sj3 ) 87.88 682.45 T +12 F +($NF0:n$KI,MW$J%?!<%_%J%k$N5!G=) 111.5 687.41 T +5 F +( sj3 ) 195.6 652.65 T +4 F +($O!") 210.94 655.87 T +5 F +(X Window System ) 231.64 652.65 T +4 F +(>e$NB?9q8l%?!<%_%J%k%\050%_%e%l!<%?) 303.97 655.87 T +5 F +(xterm) 453.49 652.65 T +4 F +($*$h) 477.26 655.87 T +($S!"4A;z%?!<%_%J%k$GF0:n$7$^$9!#) 195.6 639.58 T +($=$l0J30$N%?!<%_%J%k$G;HMQ$9$k>l9g$O!"$H!"%3!<%I!?%7!<%1%s%9$NNc) 348.95 460.29 T +($r<\050$7$^$9) 195.6 443.99 T +5 F +(\050ESC ) 243.91 440.77 T +4 F +($O%\050%9%1!<%W%3!<%I$rI=$7$^$9) 266.14 443.99 T +5 F +(\051) 394.96 440.77 T +4 F +(!#) 398.02 443.99 T +13 F +("#!!%Y%k) 87.88 394.74 T +4 F +($3$N) 195.6 283.93 T +5 F +(terminfo ) 216.3 280.71 T +4 F +(JQ?t$,EPO?$5$l$F$$$J$$>l9g) 250.29 283.93 T +5 F +(\050) 372.21 280.71 T +4 F +(%G%U%\051%k%H) 375.27 283.93 T +5 F +(\051 ) 421.27 280.71 T +4 F +($O!">e5-$N%3!<%I) 426.64 283.93 T +(Nc$GF0:n$7$^$9!#) 195.6 267.64 T +87.88 119.06 507.41 694.5 C +87.88 481.19 507.41 562.69 C +87.88 481.19 535.76 562.69 R +7 X +0 K +V +82.21 494.66 498.9 553.49 R +V +6 F +0 X +($4Cm0U) 199.14 548.88 T +4 F +(%P%C%/%9%Z!<%9$O) 199.14 534.67 T +5 F +(0x08 ) 275.05 531.45 T +4 F +($G$J$1$l$P$J$j$^$;$s!#) 295.76 534.67 T +($^$?!"%*!<%H%i%C%W5!G=$,$J$$>l9g$O!"O$O=hM}$G$-$^$;$s!#) 199.14 502.08 T +181.43 486.16 504.57 559.86 R +0.5 H +0 Z +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +87.88 288.54 507.41 366.4 C +87.88 288.54 507.41 366.4 R +7 X +0 K +V +5 F +0 X +(terminfo) 203.39 332.94 T +4 F +(JQ?t!') 237.38 336.17 T +5 F +( bel) 286.36 332.94 T +4 F +(5!G=!') 203.39 321.99 T +5 F +( ) 286.36 318.77 T +4 F +(%Y%k) 288.66 321.99 T +(%3!<%INc!') 203.39 307.82 T +5 F +( 0x07) 286.36 304.6 T +189.93 295.53 496.06 362.15 R +0.5 H +0 Z +N +(terminfo) 202.82 349.94 T +4 F +(JQ?t!') 236.81 353.17 T +5 F +( bl) 285.79 349.94 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "63" 64 +%%Page: "64" 64 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 793.71 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-64) 87.88 92.59 T +1 F +(!!=i4|@_Dj$NJQ99) 109.14 95.32 T +13 F +("#!!%"%s%@!<%i%$%s) 87.88 746.23 T +87.88 119.06 507.41 694.5 R +7 X +V +0 X +("#!!%j%P!<%9) 87.88 495.91 T +("#!!%+!<%=%k%j%/%\050%9%H) 87.88 289.53 T +4 F +(%?!<%_%J%k$O!") 195.6 176.01 T +5 F +(ESC [%d;%dR ) 262.31 172.78 T +4 F +($N%U%\051!<%^%C%H$GJs9p$7$J$1$l$P$J$j$^$;) 320.08 176.01 T +($s!#>e5-$N%3!<%INc$GF0:n$7$^$9!#) 195.6 159.71 T +87.88 119.06 507.41 694.5 C +87.88 533.47 507.41 678.2 C +87.88 533.47 507.85 678.2 R +7 X +0 K +V +5 F +0 X +(terminfo) 200.56 642.96 T +4 F +(JQ?t!') 234.55 646.18 T +5 F +(smul) 285.6 642.96 T +4 F +(5!G=!') 200.56 632.01 T +(%"%s%@!<%i%$%s$N3+;O) 285.6 632.01 T +(%3!<%INc!') 200.56 617.83 T +5 F +(ESC [4m) 285.6 614.61 T +187.1 540.89 498.91 672.42 R +0.5 H +0 Z +N +(terminfo) 200.56 581.35 T +4 F +(JQ?t!') 234.55 584.58 T +5 F +(rmul) 285.6 581.35 T +4 F +(5!G=!') 200.56 570.4 T +(%"%s%@!<%i%$%s$N=*N;) 285.6 570.4 T +(%3!<%INc!') 200.56 556.23 T +5 F +(ESC [m) 285.6 553.01 T +(termcap) 200.7 597.64 T +4 F +(JQ?t!') 232.64 600.86 T +5 F +(ue) 285.74 597.64 T +(termcap) 200.13 659.64 T +4 F +(JQ?t!') 232.07 662.86 T +5 F +(us) 285.17 659.64 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +87.88 327.09 507.41 467.57 C +87.88 327.09 508.47 467.57 R +7 X +0 K +V +5 F +0 X +(terminfo) 201.27 436.91 T +4 F +(JQ?t!') 235.26 440.13 T +5 F +( smso) 286.31 436.91 T +4 F +(5!G=!') 201.27 425.96 T +(%j%P!<%9$N3+;O) 286.31 425.96 T +(%3!<%INc!') 201.27 411.78 T +5 F +( ESC [7m) 286.31 408.56 T +(termcap) 201.27 391.62 T +4 F +(JQ?t!') 233.21 394.84 T +5 F +( se) 286.31 391.62 T +4 F +(5!G=!') 201.27 363.53 T +(%j%P!<%9$N=*N;) 286.31 363.53 T +(%3!<%INc!') 201.27 349.35 T +5 F +( ESC [m) 286.31 346.13 T +187.1 333.19 498.91 464.08 R +0.5 H +0 Z +N +(terminfo) 201.41 375.05 T +4 F +(JQ?t!') 235.4 378.27 T +5 F +( rmso) 286.45 375.05 T +(termcap) 200.7 454.33 T +4 F +(JQ?t!') 232.64 457.56 T +5 F +( so) 285.74 454.33 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +87.88 180.61 507.41 261.18 C +87.88 180.61 507.41 261.18 R +7 X +0 K +V +5 F +0 X +(terminfo) 201.27 225.89 T +4 F +(JQ?t!') 235.26 229.11 T +5 F +( ) 286.31 225.89 T +4 F +(5!G=!') 201.27 215.47 T +(%+!<%=%k0LCV$NMW5a) 286.31 215.47 T +(%3!<%INc!') 201.27 201.84 T +5 F +( ESC [6n) 286.31 198.61 T +187.1 186.93 498.91 254.34 R +0.5 H +0 Z +N +(termcap) 200.7 242.17 T +4 F +(JQ?t!') 232.64 245.4 T +5 F +( RP) 285.74 242.17 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "64" 65 +%%Page: "65" 65 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +1 F +0 X +(=i4|@_Dj$NJQ99!!) 423.9 95.32 T +0 F +(1-65) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3 ) 378.57 736.06 T +1 F +($NF0:n$KI,MW$J%?!<%_%J%k$N5!G=) 390.68 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +13 F +0 X +("#!!%+!<%=%k%`!<%V) 87.88 689.54 T +("#!!%/%j%"%\050%s%I%*%V%i%$%s) 87.88 535.92 T +87.88 119.06 507.41 694.5 C +87.88 573.48 507.41 661.19 C +87.88 573.48 507.41 661.19 R +7 X +0 K +V +5 F +0 X +(termcap) 196.32 644.25 T +4 F +(JQ?t!') 228.26 647.47 T +5 F +( cm) 281.35 644.25 T +4 F +(5!G=!') 195.6 613.3 T +(%+!<%=%k$N0\134F0) 280.64 613.3 T +(%3!<%INc!') 195.6 599.13 T +5 F +( ESC [%d;%dH) 280.64 595.9 T +181.43 581.28 493.24 653.69 R +0.5 H +0 Z +N +(terminfo) 195.74 626.96 T +4 F +(JQ?t!') 229.74 630.19 T +5 F +( cup) 280.78 626.96 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +87.88 434.73 507.41 523.87 C +87.88 434.73 507.41 523.87 R +7 X +0 K +V +5 F +0 X +(terminfo) 201.27 486.21 T +4 F +(JQ?t!') 235.26 489.44 T +5 F +( el) 286.31 486.21 T +4 F +(5!G=!') 201.27 475.26 T +(%+!<%=%k0LCV$+$i9TKv$^$G>C5n) 286.31 475.26 T +(%3!<%INc!') 201.27 461.09 T +5 F +( ESC [K) 286.31 457.87 T +187.1 442.54 498.91 516.37 R +0.5 H +0 Z +N +(termcap) 201.41 503.21 T +4 F +(JQ?t!') 233.35 506.44 T +5 F +( ce) 286.45 503.21 T +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "65" 66 +%%Page: "66" 66 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-) 87.88 92.59 T +(66) 97.32 92.59 T +1 F +(!!%m!<%^;zF~NO) 109.14 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3 ) 87.88 736.06 T +1 F +($NF0:n$KI,MW$J%?!<%_%J%k$N5!G=) 99.99 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +8 F +0 X +(%m!<%^;zF~NO) 87.88 684.57 T +4 F +($3$3$G$O!"F|K\1348lF~NO%U%m%s%H%\050%s%I!J) 195.6 665.05 T +5 F +(sj3) 361.22 661.82 T +4 F +(!K$G%m!<%^;zF~NO$r$9$k>l9g) 371.96 665.05 T +($N!"DV$j$N%k!<%k$K$D$$$F@bL@$7$^$9!#) 195.6 648.75 T +FMENDPAGE +%%EndPage: "66" 67 +%%Page: "67" 67 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +1 F +0 X +(%m!<%^;zF~NO!!) 431.69 95.32 T +0 F +(1-67) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +1 F +0 X +(%m!<%^;zF~NO$N%k!<%k) 429.59 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +12 F +0 X +(%m!<%^;zF~NO$N%k!<%k) 87.88 687.41 T +5 F +(sj3 ) 195.6 652.65 T +4 F +($G$O!"J?2>L>!&JR2>L>F~NO%b!<%I$K$*$$$F!"0J2<$N%m!<%^;zJQ49%k!<%k) 208.64 655.87 T +($K4p$E$$$FJQ49$r9T$C$F$$$^$9!#) 195.6 639.58 T +($^$?!") 195.6 623.28 T +5 F +(sj3 ) 225.51 620.05 T +4 F +($G$O!"$3$l$i$NK!B'$r<+J,MQ$K%+%9%?%^%$%:$G$-$^$9) 238.54 623.28 T +5 F +(\050) 461.67 620.05 T +4 F +("*!V=i4|) 464.73 623.28 T +(@_Dj$NJQ99!W$N9`) 195.6 606.98 T +(;2>H) 271.51 606.98 T +5 F +(\051) 289.91 603.76 T +4 F +(!#) 292.98 606.98 T +87.88 119.06 507.41 694.5 C +87.88 127.58 507.41 578.99 C +87.88 127.58 508.47 578.99 R +7 X +0 K +V +4 F +0 X +($") 201.27 560.21 T +5 F +( a ) 229.62 556.99 T +( ) 259.73 556.99 T +4 F +($$) 262.03 560.21 T +5 F +( i ) 288.08 556.99 T +( ) 318.2 556.99 T +4 F +($&) 320.5 560.21 T +5 F +( u) 346.55 556.99 T +( ) 376.66 556.99 T +4 F +($\050) 378.96 560.21 T +5 F +( e) 405.01 556.99 T +( ) 435.13 556.99 T +4 F +($*) 437.43 560.21 T +5 F +( o) 463.47 556.99 T +( yi) 288.08 542.81 T +( wu) 346.55 542.81 T +4 F +($+) 201.27 531.87 T +5 F +( ka) 229.62 528.64 T +( ) 259.73 528.64 T +4 F +($-) 262.03 531.87 T +5 F +( ki) 288.08 528.64 T +( ) 318.2 528.64 T +4 F +($/) 320.5 531.87 T +5 F +( ku) 346.55 528.64 T +( ) 376.66 528.64 T +4 F +($1!!) 378.96 531.87 T +5 F +( ke) 405.01 528.64 T +( ) 435.13 528.64 T +4 F +($3) 437.43 531.87 T +5 F +( ko) 463.47 528.64 T +( ca) 229.62 514.47 T +( ci) 288.08 514.47 T +( cu) 346.55 514.47 T +( ce) 405.01 514.47 T +( co) 463.47 514.47 T +( kyi) 288.08 500.29 T +( qyi) 288.08 486.12 T +4 F +($5) 201.27 475.17 T +5 F +( sa) 229.62 471.95 T +( ) 259.73 471.95 T +4 F +($7) 262.03 475.17 T +5 F +( si) 288.08 471.95 T +( ) 318.2 471.95 T +4 F +($9) 320.5 475.17 T +5 F +( su) 346.55 471.95 T +( ) 376.66 471.95 T +4 F +($;) 378.96 475.17 T +5 F +( se) 405.01 471.95 T +( ) 435.13 471.95 T +4 F +($=) 437.43 475.17 T +5 F +( so) 463.47 471.95 T +( syi) 288.08 457.77 T +( shi) 288.08 443.6 T +4 F +($?) 201.27 432.65 T +5 F +( ta) 229.62 429.43 T +( ) 259.73 429.43 T +4 F +($A) 262.03 432.65 T +5 F +( ti) 288.08 429.43 T +( ) 318.2 429.43 T +4 F +($D) 320.5 432.65 T +5 F +( tu) 346.55 429.43 T +( ) 376.66 429.43 T +4 F +($F) 378.96 432.65 T +5 F +( te) 405.01 429.43 T +( ) 435.13 429.43 T +4 F +($H) 437.43 432.65 T +5 F +( to) 463.47 429.43 T +( tsa) 229.62 415.26 T +( tsi) 288.08 415.26 T +( tsu) 346.55 415.26 T +( tse) 405.01 415.26 T +( tso) 463.47 415.26 T +( tyi) 288.08 401.08 T +( tsyi) 288.08 386.91 T +( cyi) 288.08 372.74 T +( chi) 288.08 358.56 T +4 F +($J) 201.27 347.61 T +5 F +( na) 229.62 344.39 T +( ) 259.73 344.39 T +4 F +($K) 262.03 347.61 T +5 F +( ni) 288.08 344.39 T +( ) 318.2 344.39 T +4 F +($L) 320.5 347.61 T +5 F +( nu) 346.55 344.39 T +( ) 376.66 344.39 T +4 F +($M) 378.96 347.61 T +5 F +( ne) 405.01 344.39 T +( ) 435.13 344.39 T +4 F +($N) 437.43 347.61 T +5 F +( no) 463.47 344.39 T +( nyi) 288.08 330.22 T +4 F +($O) 201.27 319.27 T +5 F +( ha) 229.62 316.04 T +( ) 259.73 316.04 T +4 F +($R) 262.03 319.27 T +5 F +( hi) 288.08 316.04 T +( ) 318.2 316.04 T +4 F +($U) 320.5 319.27 T +5 F +( hu) 346.55 316.04 T +( ) 376.66 316.04 T +4 F +($X) 378.96 319.27 T +5 F +( he) 405.01 316.04 T +( ) 435.13 316.04 T +4 F +($[) 437.43 319.27 T +5 F +( ho) 463.47 316.04 T +( hyi) 288.08 301.87 T +( fu) 346.55 301.87 T +4 F +($^) 201.27 290.92 T +5 F +( ma) 229.62 287.7 T +( ) 259.73 287.7 T +4 F +($_) 262.03 290.92 T +5 F +( mi) 288.08 287.7 T +( ) 318.2 287.7 T +4 F +($`) 320.5 290.92 T +5 F +( mu) 346.55 287.7 T +( ) 376.66 287.7 T +4 F +($a) 378.96 290.92 T +5 F +( me) 405.01 287.7 T +( ) 435.13 287.7 T +4 F +($b) 437.43 290.92 T +5 F +( mo) 463.47 287.7 T +( myi) 288.08 273.52 T +4 F +($d) 201.27 262.57 T +5 F +( ya) 229.62 259.35 T +( ) 318.2 259.35 T +4 F +($f) 320.5 262.57 T +5 F +( yu) 346.55 259.35 T +( ) 435.13 259.35 T +4 F +($h) 437.43 262.57 T +5 F +( yo) 463.47 259.35 T +4 F +($i) 201.27 248.4 T +5 F +( ra) 229.62 245.18 T +( ) 259.73 245.18 T +4 F +($j) 262.03 248.4 T +5 F +( ri) 288.08 245.18 T +( ) 318.2 245.18 T +4 F +($k) 320.5 248.4 T +5 F +( ru) 346.55 245.18 T +( ) 376.66 245.18 T +4 F +($l) 378.96 248.4 T +5 F +( re) 405.01 245.18 T +( ) 435.13 245.18 T +4 F +($m) 437.43 248.4 T +5 F +( ro) 463.47 245.18 T +( la) 229.62 231 T +( li) 288.08 231 T +( lu) 346.55 231 T +( le) 405.01 231 T +( lo) 463.47 231 T +( ryi) 288.08 216.83 T +( lyi ) 288.08 202.66 T +4 F +($o) 201.27 191.71 T +5 F +( wa) 229.62 188.48 T +( ) 435.13 188.48 T +4 F +($r) 437.43 191.71 T +5 F +( wo) 463.47 188.48 T +4 F +($s) 201.27 177.53 T +5 F +( nn) 229.62 174.31 T +( n) 229.62 160.14 T +195.02 153.79 492.66 571.07 R +0.5 H +0 Z +N +195.95 538.33 492.82 538.33 2 L +2 Z +N +195.82 254.08 492.82 254.08 2 L +N +195.7 198.58 492.82 198.58 2 L +N +195.57 183.08 492.82 183.08 2 L +N +195.7 326.08 492.82 326.08 2 L +N +195.57 296.83 492.82 296.83 2 L +N +195.45 268.2 492.82 268.2 2 L +N +195.57 480.58 492.82 480.58 2 L +N +195.45 438.2 492.82 438.2 2 L +N +195.95 353.33 492.82 353.33 2 L +N +226.57 570.83 226.57 153.95 2 L +N +285.82 570.95 285.82 154.08 2 L +N +344.95 569.95 344.95 153.08 2 L +N +402.95 571.33 402.95 154.45 2 L +N +433.45 570.83 433.45 153.95 2 L +N +431.45 570.95 431.45 154.08 2 L +N +460.7 571.08 460.7 154.2 2 L +N +257.7 570.95 257.7 154.08 2 L +N +255.7 571.08 255.7 154.2 2 L +N +316.32 570.45 316.32 153.58 2 L +N +314.32 570.58 314.32 153.7 2 L +N +374.95 570.58 374.95 153.7 2 L +N +372.95 570.7 372.95 153.83 2 L +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "67" 68 +%%Page: "68" 68 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-) 87.88 92.59 T +(68) 97.32 92.59 T +1 F +(!!%m!<%^;zF~NO) 109.14 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +0 X +(%m!<%^;zF~NO$N%k!<%k) 87.88 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +87.88 119.06 507.41 694.5 C +87.88 119.06 507.41 678.2 C +87.88 119.06 507.41 678.2 R +7 X +0 K +V +4 F +0 X +($!) 201.27 659.42 T +5 F +( xa) 229.62 656.19 T +( ) 259.73 656.19 T +4 F +($#) 262.03 659.42 T +5 F +( xi ) 288.08 656.19 T +( ) 318.2 656.19 T +4 F +($%) 320.5 659.42 T +5 F +( xu) 346.55 656.19 T +( ) 376.66 656.19 T +4 F +($') 378.96 659.42 T +5 F +( xe) 405.01 656.19 T +( ) 435.13 656.19 T +4 F +($\051) 437.43 659.42 T +5 F +( xo) 463.47 656.19 T +( xyi) 288.08 642.02 T +( xye ) 405.01 642.02 T +( ) 318.2 627.85 T +4 F +($C) 320.5 631.07 T +5 F +( xtu) 346.55 627.85 T +( xtsu) 346.55 613.68 T +4 F +($c) 201.27 602.73 T +5 F +( xya) 229.62 599.5 T +( ) 318.2 599.5 T +4 F +($e) 320.5 602.73 T +5 F +( xyu) 346.55 599.5 T +( ) 435.13 599.5 T +4 F +($g) 437.43 602.73 T +5 F +( xyo ) 463.47 599.5 T +4 F +($n) 201.27 588.55 T +5 F +( xwa) 229.62 585.33 T +4 F +($Q) 201.27 556.46 T +5 F +( pa) 229.62 553.23 T +( ) 259.73 553.23 T +4 F +($T) 262.03 556.46 T +5 F +( pi ) 288.08 553.23 T +( ) 318.2 553.23 T +4 F +($W) 320.5 556.46 T +5 F +( pu ) 346.55 553.23 T +( ) 376.66 553.23 T +4 F +($Z) 378.96 556.46 T +5 F +( pe) 405.01 553.23 T +( ) 435.13 553.23 T +4 F +($]) 437.43 556.46 T +5 F +( po ) 463.47 553.23 T +4 F +($,) 201.27 523.11 T +5 F +( ga) 229.62 519.89 T +( ) 259.73 519.89 T +4 F +($.) 262.03 523.11 T +5 F +( gi ) 288.08 519.89 T +( ) 318.2 519.89 T +4 F +($0) 320.5 523.11 T +5 F +( gu) 346.55 519.89 T +( ) 376.66 519.89 T +4 F +($2) 378.96 523.11 T +5 F +( ge) 405.01 519.89 T +( ) 435.13 519.89 T +4 F +($4) 437.43 523.11 T +5 F +( go ) 463.47 519.89 T +( gyi ) 288.08 505.71 T +4 F +($6) 201.27 494.76 T +5 F +( za) 229.62 491.54 T +( ) 259.73 491.54 T +4 F +($8) 262.03 494.76 T +5 F +( zi) 288.08 491.54 T +( ) 318.2 491.54 T +4 F +($:) 320.5 494.76 T +5 F +( zu) 346.55 491.54 T +( ) 376.66 491.54 T +4 F +($<) 378.96 494.76 T +5 F +( ze) 405.01 491.54 T +( ) 435.13 491.54 T +4 F +($>) 437.43 494.76 T +5 F +( zo) 463.47 491.54 T +( ji) 288.08 477.37 T +( zyi) 288.08 463.19 T +( jyi) 288.08 449.02 T +4 F +($@) 201.27 438.07 T +5 F +( da) 229.62 434.85 T +( ) 259.73 434.85 T +4 F +($B) 262.03 438.07 T +5 F +( di) 288.08 434.85 T +( ) 318.2 434.85 T +4 F +($E) 320.5 438.07 T +5 F +( du) 346.55 434.85 T +( ) 376.66 434.85 T +4 F +($G) 378.96 438.07 T +5 F +( de) 405.01 434.85 T +( ) 435.13 434.85 T +4 F +($I) 437.43 438.07 T +5 F +( do) 463.47 434.85 T +( dyi) 288.08 420.67 T +4 F +($P) 201.27 409.72 T +5 F +( ba) 229.62 406.5 T +( ) 259.73 406.5 T +4 F +($S) 262.03 409.72 T +5 F +( bi) 288.08 406.5 T +( ) 318.2 406.5 T +4 F +($V) 320.5 409.72 T +5 F +( bu) 346.55 406.5 T +( ) 376.66 406.5 T +4 F +($Y) 378.96 409.72 T +5 F +( be) 405.01 406.5 T +( ) 435.13 406.5 T +4 F +($\134) 437.43 409.72 T +5 F +( bo) 463.47 406.5 T +( byi) 288.08 392.33 T +( vyi) 288.08 378.15 T +4 F +($-$c) 201.27 347.61 T +5 F +( kya) 229.62 344.38 T +( ) 318.2 344.38 T +4 F +($-$e) 320.5 347.61 T +5 F +( kyu ) 346.55 344.38 T +( ) 376.66 344.38 T +4 F +($-$') 378.96 347.61 T +5 F +( kye) 405.01 344.38 T +( ) 435.13 344.38 T +4 F +($-$g) 437.43 347.61 T +5 F +( kyo) 463.47 344.38 T +( qya) 229.62 330.21 T +( qyu) 346.55 330.21 T +( qye) 405.01 330.21 T +( qyo) 463.47 330.21 T +4 F +($7$c) 201.27 319.26 T +5 F +( sya) 229.62 316.04 T +( ) 318.2 316.04 T +4 F +($7$e) 320.5 319.26 T +5 F +( syu) 346.55 316.04 T +( ) 376.66 316.04 T +4 F +($7$') 378.96 319.26 T +5 F +( sye) 405.01 316.04 T +( ) 435.13 316.04 T +4 F +($7$g) 437.43 319.26 T +5 F +( syo) 463.47 316.04 T +( sha) 229.62 301.86 T +( shu) 346.55 301.86 T +( she) 405.01 301.86 T +( sho) 463.47 301.86 T +4 F +($A$c) 201.27 290.92 T +5 F +( cha) 229.62 287.69 T +( ) 318.2 287.69 T +4 F +($A$e) 320.5 290.92 T +5 F +( chu) 346.55 287.69 T +4 F +($A$') 376.66 290.92 T +5 F +( che) 405.01 287.69 T +( ) 435.13 287.69 T +4 F +($A$g) 437.43 290.92 T +5 F +( cho) 463.47 287.69 T +( cya) 229.62 273.52 T +( cyu) 346.55 273.52 T +( cye) 405.01 273.52 T +( cyo) 463.47 273.52 T +( tya) 229.62 259.34 T +( tyu) 346.55 259.34 T +( tye) 405.01 259.34 T +( tyo) 463.47 259.34 T +( tsya) 229.62 245.17 T +( tsyu) 346.55 245.17 T +( tsye) 405.01 245.17 T +( tsyo) 463.47 245.17 T +4 F +($K$c) 201.27 234.22 T +5 F +( nya) 229.62 231 T +( ) 318.2 231 T +4 F +($K$e) 320.5 234.22 T +5 F +( nyu) 346.55 231 T +( ) 376.66 231 T +4 F +($K$') 378.96 234.22 T +5 F +( nye) 405.01 231 T +( ) 435.13 231 T +4 F +($K$g) 437.43 234.22 T +5 F +( nyo) 463.47 231 T +4 F +($R$c) 201.27 220.05 T +5 F +( hya) 229.62 216.82 T +( ) 318.2 216.82 T +4 F +($R$e) 320.5 220.05 T +5 F +( hyu) 346.55 216.82 T +( ) 376.66 216.82 T +4 F +($R$') 378.96 220.05 T +5 F +( hye) 405.01 216.82 T +( ) 435.13 216.82 T +4 F +($R$g) 437.43 220.05 T +5 F +( hyo) 463.47 216.82 T +4 F +($_$c) 201.27 205.87 T +5 F +( mya) 229.62 202.65 T +( ) 318.2 202.65 T +4 F +($_$e) 320.5 205.87 T +5 F +( myu) 346.55 202.65 T +( ) 376.66 202.65 T +4 F +($_$') 378.96 205.87 T +5 F +( mye) 405.01 202.65 T +( ) 435.13 202.65 T +4 F +($_$g) 437.43 205.87 T +5 F +( myo) 463.47 202.65 T +4 F +($j$c) 201.27 191.7 T +5 F +( lya) 229.62 188.48 T +( ) 318.2 188.48 T +4 F +($j$e) 320.5 191.7 T +5 F +( lyu) 346.55 188.48 T +( ) 376.66 188.48 T +4 F +($j$') 378.96 191.7 T +5 F +( lye) 405.01 188.48 T +( ) 435.13 188.48 T +4 F +($j$g) 437.43 191.7 T +5 F +( lyo) 463.47 188.48 T +( rya) 229.62 174.31 T +( ryu) 346.55 174.31 T +( rye) 405.01 174.31 T +( ryo) 463.47 174.31 T +4 F +($T$c) 201.27 149.18 T +5 F +( pya) 229.62 145.96 T +( ) 318.2 145.96 T +4 F +($T$e) 320.5 149.18 T +5 F +( pyu) 346.55 145.96 T +4 F +($T$') 376.66 149.18 T +5 F +( pye) 405.01 145.96 T +( ) 435.13 145.96 T +4 F +($T$g) 437.43 149.18 T +5 F +( pyo) 463.47 145.96 T +194.4 578.99 492.03 665.9 R +0.5 H +0 Z +N +194.7 608.33 492.2 608.33 2 L +2 Z +N +194.57 594.7 492.07 594.7 2 L +N +227.82 665.76 227.82 579.51 2 L +N +285.2 665.33 285.2 579.08 2 L +N +258.2 665.51 258.2 579.26 2 L +N +255.7 665.51 255.7 579.26 2 L +N +343.82 665.45 343.82 579.2 2 L +N +403.63 665.51 403.63 579.26 2 L +N +461.07 665.7 461.07 579.45 2 L +N +194.4 546.89 492.03 563.56 R +0 Z +N +227.2 563.33 227.2 547.08 2 L +2 Z +N +255.82 563.45 255.82 547.2 2 L +N +257.57 563.58 257.57 547.33 2 L +N +402.57 563.58 402.57 547.33 2 L +N +462.45 563.08 462.45 546.83 2 L +N +315.57 563.08 315.57 546.83 2 L +N +317.32 563.2 317.32 546.95 2 L +N +431.7 563.2 431.7 546.95 2 L +N +433.45 563.33 433.45 547.08 2 L +N +374.58 563.27 374.58 547.02 2 L +N +285.2 563.45 285.2 547.2 2 L +N +344.45 563.58 344.45 547.33 2 L +N +194.4 371.81 492.03 530.84 R +0 Z +N +194.7 501.88 492.2 501.88 2 L +2 Z +N +194.57 443.88 492.07 443.88 2 L +N +194.45 415.88 491.95 415.88 2 L +N +227.82 530.63 227.82 371.88 2 L +N +285.82 530.75 285.82 372 2 L +N +433.75 530.91 433.75 372.16 2 L +N +431.88 530.91 431.88 372.16 2 L +N +374.32 530.9 374.32 372.15 2 L +N +372.45 530.9 372.45 372.15 2 L +N +316.63 531.09 316.63 372.34 2 L +N +314.75 531.09 314.75 372.34 2 L +N +257.75 530.59 257.75 371.84 2 L +N +255.88 530.59 255.88 371.84 2 L +N +402.57 530.88 402.57 372.13 2 L +N +344.95 530.38 344.95 371.63 2 L +N +461.7 530.5 461.7 371.75 2 L +N +194.4 167.96 492.03 355.96 R +0 Z +N +194.7 325.83 492.2 325.83 2 L +2 Z +N +194.57 297.2 492.07 297.2 2 L +N +194.45 226.08 491.95 226.08 2 L +N +194.95 211.2 492.45 211.2 2 L +N +194.82 197.58 492.32 197.58 2 L +N +194.95 240.58 492.45 240.58 2 L +N +228.45 355.83 228.45 167.7 2 L +N +344.57 355.95 344.57 167.83 2 L +N +257.7 355.96 257.7 167.84 2 L +N +255.2 355.96 255.2 167.84 2 L +N +316.33 356.02 316.33 167.89 2 L +N +313.83 356.02 313.83 167.89 2 L +N +374.95 355.96 374.95 167.96 2 L +N +372.45 355.96 372.45 167.96 2 L +N +433.58 355.96 433.58 167.96 2 L +N +431.08 355.96 431.08 167.96 2 L +N +402.57 356.08 402.57 167.95 2 L +N +461.82 355.58 461.82 167.45 2 L +N +286.25 355.59 286.25 167.46 2 L +N +194.4 139.62 492.03 156.29 R +0 Z +N +228.45 156.29 228.45 139.62 2 L +2 Z +N +285.82 156.29 285.82 139.62 2 L +N +258.75 156.29 258.75 139.62 2 L +N +257.08 156.29 257.08 139.93 2 L +N +344.45 156.29 344.45 139.62 2 L +N +403.07 156.29 403.07 139.62 2 L +N +462.32 156.29 462.32 139.62 2 L +N +316.2 665.84 316.2 579.59 2 L +N +313.7 665.84 313.7 579.59 2 L +N +374.75 665.62 374.75 579.37 2 L +N +372.25 665.62 372.25 579.37 2 L +N +433.6 665.69 433.6 579.44 2 L +N +431.1 665.69 431.1 579.44 2 L +N +373.18 563.27 373.18 547.02 2 L +N +316.2 156.29 316.2 139.62 2 L +N +314.53 156.29 314.53 139.93 2 L +N +374.75 156.29 374.75 139.62 2 L +N +373.08 156.29 373.08 139.93 2 L +N +433.86 156.29 433.86 139.62 2 L +N +432.2 156.29 432.2 139.93 2 L +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "68" 69 +%%Page: "69" 69 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +1 F +0 X +(%m!<%^;zF~NO!!) 431.69 95.32 T +0 F +(1-69) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +1 F +0 X +(%m!<%^;zF~NO$N%k!<%k) 429.59 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +4 F +0 X +($^$?!"J?2>L>!&JR2>L>F~NO%b!<%I$G$O!"L>!"$^$?$O!"JR2>L>F~NO%b!<%I$K$*$$$F!"l9g$KJQ49%k!<%k$,0[) 190.64 399.26 T +($J$C$F$$$^$9!#) 190.64 382.96 T +5 F +( ) 190.64 347.14 T +4 F +(J?2>L>%b!<%I$N>l9g!') 206.74 350.36 T +(%t$!) 215.31 332.6 T +5 F +( va) 242.94 329.38 T +4 F +(%t$#) 272.3 332.6 T +5 F +( vi ) 299.93 329.38 T +4 F +(%t) 329.29 332.6 T +5 F +( vu ) 356.92 329.38 T +4 F +(%t$') 386.28 332.6 T +5 F +( ve) 413.92 329.38 T +4 F +(%t$\051) 443.28 332.6 T +5 F +( vo) 470.91 329.38 T +4 F +(%u) 215.31 318.43 T +5 F +( xka) 242.94 315.21 T +4 F +(%v) 386.28 318.43 T +5 F +( xke) 413.92 315.21 T +210.43 308.86 500.58 340.33 R +0.5 H +0 Z +N +210.02 325.22 500.16 325.22 2 L +2 Z +N +239.7 340.33 239.7 308.86 2 L +N +297.7 340.33 297.7 308.86 2 L +N +440.07 340.33 440.07 308.86 2 L +N +438.07 340.33 438.07 308.86 2 L +N +384.32 340.33 384.32 308.86 2 L +N +382.32 340.33 382.32 308.86 2 L +N +327.32 340.33 327.32 308.86 2 L +N +325.32 340.33 325.32 308.86 2 L +N +270.32 340.33 270.32 308.86 2 L +N +268.32 340.33 268.32 308.86 2 L +N +355.07 340.33 355.07 308.86 2 L +N +413.07 340.33 413.07 308.86 2 L +N +469.2 340.33 469.2 308.86 2 L +N +181.43 295.52 504.57 423.08 R +0 Z +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +87.88 119.06 507.41 694.5 C +87.88 194.25 507.41 240.62 C +87.88 194.25 507.85 240.62 R +7 X +0 K +V +5 F +0 X +( ) 206.56 223.08 T +4 F +(!&) 208.86 226.3 T +5 F +( @) 234.19 223.08 T +( ) 263.55 223.08 T +4 F +(!<) 265.85 226.3 T +5 F +( -) 291.18 223.08 T +( ) 320.54 223.08 T +4 F +(!V) 322.84 226.3 T +5 F +( [ ) 348.17 223.08 T +( ) 206.56 208.9 T +4 F +(!#) 213.46 212.13 T +5 F +( . ) 234.19 208.9 T +( ) 263.55 208.9 T +4 F +(!") 270.45 212.13 T +5 F +( ,) 291.18 208.9 T +( ) 320.54 208.9 T +4 F +(!W) 325.14 212.13 T +5 F +( ]) 348.17 208.9 T +201.68 202.56 377.4 234.03 R +0.5 H +0 Z +N +201.27 218.92 376.57 218.92 2 L +2 Z +N +289.36 234.03 289.36 202.56 2 L +N +261.8 234.03 261.8 202.56 2 L +N +259.8 234.03 259.8 202.56 2 L +N +318.45 234.03 318.45 202.56 2 L +N +316.45 234.03 316.45 202.56 2 L +N +231.65 234.03 231.65 202.56 2 L +N +346.43 234.03 346.43 202.56 2 L +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "69" 70 +%%Page: "70" 70 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(1-) 87.88 92.59 T +(70) 97.32 92.59 T +1 F +(!!%m!<%^;zF~NO) 109.14 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +0 X +(%m!<%^;zF~NO$N%k!<%k) 87.88 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +FMENDPAGE +%%EndPage: "70" 71 +9 24 /Helvetica-Bold FMDEFINEFONT +%%Page: "71" 71 +595.3 841.9 0 FMBEGINPAGE +87.88 629.3 507.41 629.3 2 L +7 X +0 K +V +3 H +2 Z +0 X +N +2 F +(>O) 489.42 655.73 T +528.66 629.3 565.51 705.84 R +V +0.5 H +0 Z +N +3 F +(F|K\1348lF~NO%i%$%V%i%j) 200.21 603.13 T +9 F +(sj3lib) 446.08 594.73 T +4 F +(F|K\1348l$rF~NO$9$k>l9g$O!"2>L>4A;zJQ49%f!<%F%#%j%F%#$r;HMQ$7$F9T$$$^) 197.01 553.9 T +($9!#2>L>4A;zJQ49MQ%f!<%F%#%j%F%#$K$O!") 197.01 537.61 T +5 F +(sj3) 374.14 534.38 T +4 F +($,MQ0U$5$l$F$$$^$9!#) 387.18 537.61 T +($^$?!"%"%W%j%1!<%7%g%s$,F|K\1348lF~NO$N$?$a$K;HMQ$9$k%i%$%V%i%j$K$O!") 197.01 521.31 T +5 F +(sj3lib ) 197.01 501.79 T +4 F +($,MQ0U$5$l$F$$$^$9!#) 219.77 505.01 T +($3$3$G$O!") 197.01 488.71 T +5 F +(sj3lib ) 245.32 485.49 T +4 F +($K$D$$$F@bL@$7$^$9!#) 268.08 488.71 T +6 F +(F|K\1348lF~NO%i%$%V%i%j$N35MW) 197.01 456.12 T +19 F +(sj3lib ) 197.01 436.59 T +6 F +(%i%$%V%i%j) 223.1 439.82 T +19 F +(sj3lib ) 197.01 420.3 T +6 F +(%5%s%W%k%W%m%0%i%`) 223.1 423.52 T +7 F +(2) 402.32 646.06 T +FMENDPAGE +%%EndPage: "71" 72 +%%Page: "72" 72 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 793.71 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(2-72) 87.88 92.59 T +1 F +(!!F|K\1348lF~NO%i%$%V%i%j$N35MW) 109.14 95.32 T +8 F +(F|K\1348lF~NO%i%$%V%i%j$N35MW) 87.88 741.27 T +87.88 119.06 507.41 694.5 R +7 X +V +4 F +0 X +(F|K\1348lF~NO$r$9$k>l9g!") 195.6 689.89 T +17 F +(sj3) 299.11 686.67 T +4 F +(2>L>4A;zJQ49%f!<%F%#%j%F%#$r;HMQ$7$^$9!#) 312.16 689.89 T +5 F +(sj3 :) 195.6 670.37 T +4 F +(%?!<%_%J%k>e$GF0:n$7$^$9!#%/%i%$%"%s%H%5!<%PJ}<0$G$9!#) 252.29 673.59 T +(%?!<%_%J%kMQ$N%"%W%j%1!<%7%g%s$OFC$KF|K\1348lF~NO%i%$%V%i%j$r;HMQ$7$J) 195.6 657.29 T +($/$F$b!") 195.6 641 T +16 F +(sj3) 234.71 637.77 T +5 F +( ) 244.04 637.77 T +4 F +($r;H$C$FMF0W$KF|K\1348lJ8;zNs$rF@$k$3$H$,$G$-$^$9!#) 246.34 641 T +5 F +(sj3lib) 195.6 605.18 T +4 F +($N%i%$%V%i%j$rMQ$$$F!"%"%W%j%1!<%7%g%s$,D>@\1342>L>4A;zJQ49$r9T$&) 218.36 608.4 T +($3$H$b$G$-$^$9!#) 195.6 592.1 T +($^$?!"F|K\1348lF~NO%W%m%;%C%5$N2>L>4A;zJQ49%f!<%F%#%j%F%#5!G=$K$D$$$F) 195.6 559.51 T +($O!"!X%f!<%6!<%:%,%$%I!Y) 195.6 543.21 T +($r$4Mw$/$@$5$$!#) 308.31 543.21 T +FMENDPAGE +%%EndPage: "72" 73 +%%Page: "73" 73 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +1 F +0 X +(F|K\1348lF~NO%i%$%V%i%j$N35MW!!) 377.21 95.32 T +0 F +(2-73) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +1 F +0 X +(F|K\1348lF~NO%i%$%V%i%j$NFCD') 406.25 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +12 F +0 X +(F|K\1348lF~NO%i%$%V%i%j$NFCD') 87.88 687.41 T +13 F +("#!!) 87.88 635.68 T +18 F +(sj3lib ) 107.72 632.21 T +13 F +(%i%$%V%i%j) 133.07 635.68 T +4 F +(%"%W%j%1!<%7%g%s$,D>@\1342>L>4A;zJQ49$r9T$&$?$a$N%i%$%V%i%j$G$9!#) 195.6 619.03 T +16 F +(sj3) 482.83 615.8 T +5 F +( ) 492.16 615.8 T +4 F +(F|) 494.46 619.03 T +(K\1348lF~NO%U%m%s%H%\050%s%I%W%m%;%C%5$O) 195.6 602.73 T +19 F +(sj3lib) 354.32 599.5 T +5 F +( ) 377.85 599.5 T +4 F +($r;H$C$FL>$"$k$$$O4A;z$KJQ49$7!"JQ49$5) 195.6 673.59 T +($l$?J8;zNs$r3F%"%W%j%1!<%7%g%s$KEO$9%W%m%0%i%`$G$9!#) 195.6 657.29 T +($3$3$G$O!") 195.6 624.7 T +16 F +(sj3) 243.61 621.47 T +4 F +($N$+$J4A;zJQ49$G;HMQ$5$l$k) 255.24 624.7 T +19 F +(sj3lib) 377.16 621.47 T +4 F +(%i%$%V%i%j$K$D$$$F@bL@) 402.99 624.7 T +($7$^$9!#) 195.6 608.4 T +19 F +(sj3lib) 195.6 572.58 T +4 F +($O!"$+$J4A;zJQ49%5!<%P!<$N) 221.43 575.8 T +17 F +(sj3serv) 343.35 572.58 T +4 F +($HDL?.$9$k$3$H$K$h$j!"$+$J4A) 371.72 575.8 T +(;zJQ49$N5!G=$rDs6!$7$^$9!#) 195.6 559.51 T +FMENDPAGE +%%EndPage: "74" 75 +2 8 /Helvetica-Bold FMDEFINEFONT +%%Page: "75" 75 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +10 F +0 X +(sj3lib ) 419.58 92.59 T +1 F +(%i%$%V%i%j!!) 439.47 95.32 T +0 F +(2-75) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +1 F +0 X +($O$8$a$K) 476.28 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +12 F +0 X +($O$8$a$K) 87.88 687.41 T +13 F +("#!!$4;HMQA0$K) 87.88 635.68 T +4 F +(I,MW$J%U%!%$%k$O0J2<$N$H$*$j$G$9!#) 195.6 619.03 T +5 F +(/usr/lib/libsj3lib.a) 231.6 599.5 T +(/usr/bin/sj3serv) 231.6 583.21 T +(/usr/dict/sj3/sj3main.dic) 231.6 566.91 T +4 F +(B>$N%^%7%s>e$N) 195.6 553.83 T +16 F +(sj3serv) 262.01 550.61 T +4 F +($rMxMQ$9$k$H$-$K$O!") 286.96 553.83 T +5 F +(/usr/bin/sj3serv) 381.28 550.61 T +4 F +($H) 440.32 553.83 T +5 F +(/usr/dict/sj3/) 449.52 550.61 T +(sj3main.dic) 195.6 534.31 T +4 F +($O!"FC$KI,MW$"$j$^$;$s!#) 240.59 537.54 T +13 F +("#!!%W%m%0%i%`$r=q$/$K$"$?$C$F$NCm0UE@) 87.88 488.29 T +19 F +(sj3lib) 195.6 468.41 T +4 F +($G$O!"4X?t$dJQ?t$K) 221.43 471.63 T +5 F +(sj3_ ) 306.54 468.41 T +4 F +($G;O$^$kL>A0$r;HMQ$7$F$$$^$9!#) 324.18 471.63 T +5 F +(sj3_ ) 195.6 452.11 T +4 F +($G;O$^$k4X?tL>!"JQ?tL>$N;HMQ$O$*Hr$1$/$@$5$$!#) 213.24 455.33 T +13 F +("#!!%i%$%V%i%j$N;HMQJ}K!) 87.88 406.08 T +19 F +(sj3lib) 195.6 386.21 T +4 F +($rMxMQ$7$?%W%m%0%i%`$r:n@.$9$k$H$-$K$O!"0J2<$N%X%C%@%U%!%$%k$r) 221.43 389.43 T +(%$%s%/%k!<%I$7$F$/$@$5$$!#) 195.6 373.13 T +($^$?!"%W%m%0%i%`$N%j%s%/;~$K) 195.6 307.87 T +19 F +(\320lsj3lib) 324.42 304.65 T +4 F +($H) 357.92 307.87 T +19 F +(\320lnsl\050SVR4) 367.12 304.65 T +6 F +($N>l9g) 417.49 307.87 T +19 F +(\051) 445.09 304.65 T +4 F +(%*%W%7%g%s$r) 450.46 307.87 T +(;XDj$7$F$/$@$5$$!#) 195.6 291.57 T +(%j%s%/J}K!$NNc!') 195.6 275.28 T +15 F +(%) 195.6 256.78 T +2 F +( ) 200.4 256.78 T +204.84 255.07 219.24 255.59 R +V +15 F +(cc ) 204.84 256.78 T +219.24 255.01 247.44 255.59 R +V +16 F +(sample.c) 219.24 256.78 T +247.44 255.07 333.79 255.59 R +V +15 F +( \320lsj3lib \050\320lnsl\051 ) 247.44 256.78 T +13 F +("#!!<-=q) 87.88 214.02 T +4 F +(%a%$%s<-=q!"%f!<%6<-=q!"3X=,%U%!%$%k$O!"@\134B3$9$k) 195.6 197.37 T +16 F +(sj3serv) 418.43 194.15 T +4 F +($NF0:n$7$F$$) 443.38 197.37 T +($k%^%7%s>e$N$b$N$,;HMQ$5$l$^$9!#$3$l$i$N%U%!%$%k$,CV$+$l$k>l=j$O!") 195.6 181.07 T +(%G%U%\051%k%H$G$O%G%#%l%/%H%j) 195.6 164.78 T +19 F +(/usr/dict/sj3) 315.21 161.55 T +4 F +($N2<$G$9$,!") 368.66 164.78 T +16 F +(sj3serv) 425.86 161.55 T +4 F +($N%;%C%H%"%C) 450.82 164.78 T +(%W%U%!%$%k$K$h$jJQ99$9$k$3$H$,=PMh$^$9!#) 195.6 148.48 T +19 F +(sj3lib) 381.92 145.25 T +4 F +($+$i;XDj$5$l$k<-=q) 407.76 148.48 T +(%U%!%$%k!"3X=,%U%!%$%k$O!"$=$N%G%#%l%/%H%j$+$i$NAjBP%Q%9$G$9!#) 195.6 132.18 T +87.88 119.06 507.41 694.5 C +87.88 328.77 507.41 361.44 C +87.88 328.77 507.41 361.44 R +7 X +0 K +V +201.27 337.1 513.08 348.78 R +V +15 F +0 X +(#include ) 201.27 341.98 T +197.27 331.2 504.36 354.77 R +0.5 H +0 Z +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "75" 76 +%%Page: "76" 76 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(2-) 87.88 92.59 T +(76) 97.32 92.59 T +1 F +(!!) 109.14 95.32 T +10 F +(sj3lib ) 116.92 92.59 T +1 F +(%i%$%V%i%j) 136.81 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +0 X +($O$8$a$K) 87.88 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +4 F +0 X +(%a%$%s<-=q$O) 195.6 689.89 T +19 F +(sj3main.dic) 253.11 686.67 T +4 F +($G$9!#) 305.53 689.89 T +(%f!<%6<-=q$H3X=,%U%!%$%k$O!"4X?t) 195.6 673.59 T +5 F +(sj3_open ) 345.12 670.37 T +4 F +($G;XDj$5$l$?%f!<%6L>$r) 380.64 673.59 T +5 F +(USER ) 195.6 654.07 T +4 F +($H$9$l$P!") 221.42 657.29 T +19 F +(user/USER/private.dic) 269.73 654.07 T +4 F +($H) 368.16 657.29 T +19 F +(user/USER/study.dat) 379.67 654.07 T +4 F +($G$9!#) 472.98 657.29 T +(%G%#%l%/%H%j) 195.6 624.7 T +19 F +(user) 253.11 621.47 T +6 F +($d) 274.85 624.7 T +4 F +(%f!<%6L>$r;}$D%G%#%l%/%H%j!"%f!<%6<-=q!"3X=,%U%!) 284.05 624.7 T +(%$%k$O!"I,MW$J$H$-$K<+F0E*$K:n@.$5$l$^$9!#) 195.6 608.4 T +13 F +("#!!9=B$BN$N@bL@) 87.88 559.15 T +5 F +(struct studyrec) 195.6 539.27 T +4 F +(3X=,%G!<%?) 267.6 542.5 T +5 F +(struct bunsetu) 195.6 522.97 T +4 F +(J8@a9=B$BN) 267.6 526.2 T +5 F +(struct douon) 195.6 506.68 T +4 F +(F12;0[5A8l9=B$BN) 267.6 509.9 T +13 F +("#!!4XO"%U%!%$%k) 87.88 460.65 T +5 F +(/usr/bin/sj3) 195.6 440.77 T +4 F +(F|K\1348lF~NO%U%m%s%H%\050%s%I%W%m%;%C%5) 303.6 444 T +5 F +(/usr/dict/sj3/) 195.6 424.48 T +4 F +(%G%U%\051%k%H<-=q%G%#%l%/%H%j) 303.6 427.7 T +5 F +( sj3main.dic) 195.6 408.18 T +4 F +(2>L>4A;zJQ49%a%$%s<-=q) 303.6 411.4 T +5 F +( user/$USER/private.dic) 195.6 391.88 T +4 F +(2>L>4A;zJQ49%f!<%6<-=q) 303.6 395.1 T +5 F +( user/$USER/study.dat) 195.6 375.58 T +4 F +(2>L>4A;zJQ493X=,%U%!%$%k) 303.6 378.81 T +5 F +(/usr/include/sj3lib.h) 195.6 359.28 T +4 F +(2>L>4A;zJQ49%i%$%V%i%jMQ%$%s%/%k!<%I%U%!%$%k) 303.6 362.51 T +5 F +(/usr/lib/libsj3lib.a) 195.6 342.99 T +4 F +(2>L>4A;zJQ49%i%$%V%i%j) 303.6 346.21 T +FMENDPAGE +%%EndPage: "76" 77 +%%Page: "77" 77 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +10 F +0 X +(sj3lib ) 419.58 92.59 T +1 F +(%i%$%V%i%j!!) 439.47 95.32 T +0 F +(2-77) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3lib ) 433.05 736.06 T +1 F +(%i%$%V%i%j0lMw) 452.94 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +11 F +0 X +(sj3lib ) 87.88 682.45 T +12 F +(%i%$%V%i%j0lMw) 128.03 687.41 T +5 F +(sj3_open) 195.6 652.65 T +(sj3_open_with_list) 195.6 636.35 T +(sj3_close) 195.6 620.05 T +(sj3_getkan\050_euc/_mb\051) 195.6 603.76 T +(sj3_douoncnt\050_euc/_mb\051) 195.6 587.46 T +(sj3_getdouon\050_euc/_mb\051) 195.6 571.16 T +(sj3_gakusyuu) 195.6 554.86 T +(sj3_gakusyuu2\050_euc/_mb\051) 195.6 538.56 T +(sj3_touroku\050_euc/_mb\051) 195.6 522.27 T +(sj3_syoukyo\050_euc/_mb\051) 195.6 505.97 T +(sj3_lockserv) 195.6 489.67 T +(sj3_unlockserv) 195.6 473.37 T +13 F +("#!!$O$8$a$K) 87.88 427.35 T +4 F +(4X?tL>$N:G8e$K) 195.6 410.69 T +5 F +(\322_euc\323 ) 262.31 407.47 T +4 F +($,$D$$$F$$$k$H$-$O!"0z?t$NJ8;z%3!<%I$K) 290.15 410.69 T +5 F +(EUC ) 467.27 407.47 T +4 F +($r;H) 487.97 410.69 T +(MQ$7$^$9!#) 195.6 394.4 T +5 F +(\323_mb\323) 241.61 391.17 T +4 F +($,$D$$$F$$$k>l9g$O!"0z?t$NJ8;z%3!<%I$,%W%m%0%i%`>N) 87.88 652.33 T +5 F +(sj3_open \321 ) 195.6 647.69 T +4 F +(%5!<%P$H$N@\134B3) 242.63 650.91 T +2 F +(!!!!7A<0) 87.88 614.07 T +5 F +(sj3_open\050sname, uname\051) 195.6 609.42 T +(char) 195.6 593.13 T +(*sname;) 231.6 593.13 T +(/* ) 303.6 593.13 T +4 F +(%[%9%HL>$X$N%]%$%s%?) 313.06 596.35 T +5 F +(*/) 407.37 593.13 T +(char) 195.6 576.83 T +(*uname;) 231.6 576.83 T +(/* ) 303.6 576.83 T +4 F +(%f!<%6L>$X$N%]%$%s%?) 313.06 580.05 T +5 F +(*/) 407.37 576.83 T +2 F +(!!!!2r@b) 87.88 543.2 T +4 F +(%5!<%P$K@\134B3$r;n$_$^$9!#) 195.6 541.79 T +(J8;zNs$X$N%]%$%s%?) 195.6 509.19 T +5 F +(sname) 280.71 505.97 T +4 F +($G;XDj$5$l$?%5!<%P) 306.52 509.19 T +16 F +(sj3serv) 391.33 505.97 T +4 F +($KBP$7!"%f!<%6L>$H) 416.29 509.19 T +($7$F%]%$%s%?) 195.6 492.89 T +5 F +(uname) 253.11 489.67 T +4 F +($G;XDj$5$l$kJ8;zNs$r;HMQ$7@\134B3$r;n$_$^$9!#) 279.94 492.89 T +5 F +(s) 475.47 489.67 T +4 F +(@\134B3) 481.35 492.89 T +($K$O!"%[%9%HL>$X$N%]%$%s%?) 195.6 476.59 T +5 F +(sname) 317.52 473.37 T +4 F +($,%J%k%]%$%s%?!"$"$k$$$O!"6u$NJ8;z) 343.33 476.59 T +(Ns$N;~$K$O) 195.6 460.3 T +5 F +(\322localhost\323 ) 243.91 457.07 T +4 F +($r%[%9%HL>$H$7$F;HMQ$7$^$9!#) 287.6 460.3 T +(@\134B3$G$-$?$H$-$K$O!"%5!<%P$NN\051$A>e$2;~$K;XDj$5$l$?<-=q%G%#%l%/%H%j) 195.6 427.7 T +(Fb$K$"$k%a%$%s<-=q) 195.6 411.4 T +5 F +(sj3main.dic) 280.71 408.18 T +4 F +(!"%f!<%6<-=q) 323.39 411.4 T +5 F +(user/uname/private.dic) 380.9 408.18 T +4 F +(!"3X=,) 464.97 411.4 T +(%U%!%$%k) 195.6 395.1 T +5 F +(user/uname/study.dat ) 234.71 391.88 T +4 F +($r%*!<%W%s$7$^$9!#) 315.46 395.1 T +(;XDj$5$l$?%f!<%6MQ$N%G%#%l%/%H%j!"%f!<%6<-=q!"3X=,%U%!%$%k$,B8:_$7) 195.6 378.81 T +($J$$$H$-$K$O!"$=$l$i$N@8@.$r;n$_$^$9!#) 195.6 362.51 T +($3$N4X?t$O!"$+$J4A;zJQ49%k!<%A%s$r;HMQ$9$k0JA0$KI,$:8F$P$J$1$l$P$J) 195.6 329.91 T +($j$^$;$s!#) 195.6 313.61 T +2 F +(!!!!%j%?!<%sCM) 87.88 276.77 T +4 F +(%5!<%P$H@5>o$K@\134B3$G$-$?$H$-$K$O) 195.6 275.35 T +5 F +(0 ) 345.12 272.12 T +4 F +($r!"2?$+%\050%i!<$N$"$C$?$H$-$K$O) 352.02 275.35 T +5 F +(0 ) 492.33 272.12 T +4 F +(0J30$N%\050%i!<%9%F!<%?%9$rJV$7$^$9!#) 195.6 259.05 T +(%\050%i!<%9%F!<%?%9$O%X%C%@%U%!%$%k) 195.6 226.45 T +19 F +(/usr/include/sj3lib.h) 342.82 223.23 T +4 F +($GDj5A$5$l$k%S%C) 431.03 226.45 T +(%H%"%5%$%s$5$l$?CM$G!">\134:Y$O0J2<$N$H$*$j$G$9!#) 195.6 210.16 T +5 F +(SJ3_SERVER_DEAD) 195.6 174.34 T +4 F +(@\134B3=hM}Cf$K%5!<%P$,%@%&%s$7$^$7$?!#) 231.6 161.26 T +5 F +(SJ3_CONNECT_ERROR) 195.6 141.74 T +4 F +(%5!<%P$,$J$$!"$"$k$$$O@\134B3$G$-$^$;$s!#) 231.6 128.67 T +FMENDPAGE +%%EndPage: "78" 79 +%%Page: "79" 79 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +10 F +0 X +(sj3lib ) 419.58 92.59 T +1 F +(%i%$%V%i%j!!) 439.47 95.32 T +0 F +(2-79) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3lib ) 433.05 736.06 T +1 F +(%i%$%V%i%j0lMw) 452.94 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +5 F +0 X +(SJ3_ALREADY_CONNECTED) 195.6 686.67 T +4 F +($9$G$K%5!<%P$H@\134B3:Q$G$9!#) 231.6 673.59 T +5 F +(SJ3_CANNOT_OPEN_MDICT) 195.6 654.07 T +4 F +(%a%$%s<-=q$,%*!<%W%s$G$-$^$;$s!#) 231.6 641 T +5 F +(SJ3_CANNOT_OPEN_UDICT) 195.6 621.47 T +4 F +(%f!<%6<-=q$,%*!<%W%s$G$-$^$;$s!#) 231.6 608.4 T +5 F +(SJ3_CANNOT_OPEN_STUDY) 195.6 588.88 T +4 F +(3X=,%U%!%$%k$,%*!<%W%s$G$$$^$;$s!#) 231.6 575.8 T +5 F +(SJ3_CANNOT_MAKE_UDIR) 195.6 556.28 T +4 F +(8D?M%U%!%$%k$N$?$a$N%G%#%l%/%H%j$,:n@.$G$-$^$;$s!#) 231.6 543.21 T +5 F +(SJ3_CANNOT_MAKE_UDICT) 195.6 523.69 T +4 F +(%f!<%6<-=q$,:n@.$G$-$^$;$s!#) 231.6 510.61 T +5 F +(SJ3_CANNOT_MAKE_STUDY) 195.6 491.09 T +4 F +(3X=,%U%!%$%k$,:n@.$G$-$^$;$s!#) 231.6 478.02 T +(%\050%i!<%9%F!<%?%9$K$O!"$3$l$i$N$&$A>/$J$/$H$b) 195.6 445.42 T +5 F +(1 ) 400.32 442.2 T +4 F +(%S%C%H$,N\051$C$F$$$^) 407.23 445.42 T +($9!#) 195.6 429.12 T +(%\050%i!<%9%F!<%?%9$N$&$A) 195.6 412.82 T +19 F +(SJ3_SERVER_DEAD) 299.11 409.6 T +4 F +($"$k$$$O) 391.92 412.82 T +19 F +(SJ3_CONNECT_ERROR) 195.6 393.3 T +4 F +($,JV$5$l$?$H$-0J30$O!"%5!<%P$H$N@\134B3$,3NN\051$5) 303.22 396.53 T +($l$F$$$^$9!#) 195.6 380.23 T +FMENDPAGE +%%EndPage: "79" 80 +%%Page: "80" 80 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(2-) 87.88 92.59 T +(80) 97.32 92.59 T +1 F +(!!) 109.14 95.32 T +10 F +(sj3lib ) 116.92 92.59 T +1 F +(%i%$%V%i%j) 136.81 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3lib ) 87.88 736.06 T +1 F +(%i%$%V%i%j0lMw) 107.78 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +13 F +0 X +("#!!) 87.88 689.54 T +18 F +(sj3_open_with_list) 107.72 686.06 T +2 F +(!!!!L>>N) 87.88 652.33 T +5 F +(sj3_open_with_list \321 ) 195.6 647.69 T +4 F +(<-=q$r;XDj$7$F%5!<%P$H$N@\134B3) 279.44 650.91 T +2 F +(!!!!7A<0) 87.88 614.07 T +5 F +(sj3_open_with_list\050sname, uname, dict_num, dict_list, err_num, err_index\051) 195.6 609.42 T +(char) 195.6 593.13 T +(*sname;) 231.6 593.13 T +(/* ) 303.6 593.13 T +4 F +(%[%9%HL>$X$N%]%$%s%?) 313.06 596.35 T +5 F +(*/) 407.37 593.13 T +(char) 195.6 576.83 T +(*uname;) 231.6 576.83 T +(/* ) 303.6 576.83 T +4 F +(%f!<%6L>$X$N%]%$%s%?) 313.06 580.05 T +5 F +(*/) 407.37 576.83 T +(int) 195.6 560.53 T +(dict_num;) 231.6 560.53 T +(/* dict_list) 303.6 560.53 T +4 F +($N<-=q$N?t) 345.02 563.75 T +5 F +(*/) 393.32 560.53 T +(char) 195.6 544.23 T +(**dict_list;) 231.6 544.23 T +(/* ) 303.6 544.23 T +4 F +(;HMQ$9$k<-=qL>$NG[Ns) 313.06 547.46 T +5 F +(*/) 407.37 544.23 T +(int) 195.6 527.93 T +(*err_num;) 231.6 527.93 T +(/* ) 303.6 527.93 T +4 F +(%*!<%W%s$G$-$J$+$C$?<-=q$N?t) 313.06 531.16 T +5 F +(*/) 444.17 527.93 T +(int) 195.6 511.64 T +(**err_index;) 231.6 511.64 T +(/* ) 303.6 511.64 T +4 F +(<-=qL>$X$N%$%s%G%C%/%9) 313.06 514.86 T +5 F +(*/) 416.57 511.64 T +2 F +(!!!!2r@b) 87.88 478.01 T +4 F +(;HMQ$9$k<-=q$r;XDj$7$F!"%5!<%P$K@\134B3$r;n$_$^$9!#) 195.6 476.59 T +(J8;zNs$X$N%]%$%s%?) 195.6 444 T +5 F +(sname) 280.71 440.77 T +4 F +($G;XDj$5$l$?%5!<%P) 306.52 444 T +16 F +(sj3serv) 391.33 440.77 T +4 F +($KBP$7!"%f!<%6L>$H) 416.29 444 T +($7$F%]%$%s%?) 195.6 427.7 T +5 F +(uname) 253.11 424.48 T +4 F +($G;XDj$5$l$kJ8;zNs$r;HMQ$7@\134B3$r;n$_$^$9!#) 279.94 427.7 T +5 F +(sname) 475.47 424.48 T +4 F +($O!"0J2<$N%U%\051!<%^%C%H$K$J$C$F$$$^$9!#) 195.6 411.4 T +5 F +(< ) 195.6 391.88 T +4 F +(%W%m%H%3%kL>) 203.09 395.1 T +5 F +(/> ) 260.6 391.88 T +4 F +(%[%9%HL>) 270.64 395.1 T +5 F +(<: ) 309.75 391.88 T +4 F +(%]!<%HL>) 319.8 395.1 T +5 F +(\050) 358.9 391.88 T +4 F +($b$7$/$OHV9f) 361.96 395.1 T +5 F +(\051>) 419.47 391.88 T +4 F +(%G%U%\051%k%H$G$O!"%W%m%H%3%kL>$,) 195.6 378.81 T +5 F +(tcp) 335.92 375.58 T +4 F +(!"%]!<%HL>$,) 347.16 378.81 T +5 F +(sj3 ) 404.67 375.58 T +4 F +($H$J$C$F$$$k$N$G!") 417.7 378.81 T +(DL>o$O%[%9%HL>$@$1$r;XDj$9$l$P==J,$G$9!#@\134B3$K$O!"%[%9%HL>$X$N%]%$) 195.6 362.51 T +(%s%?) 195.6 346.21 T +5 F +(sname) 216.31 342.99 T +4 F +($,%J%k%]%$%s%?!"$"$k$$$O!"6u$NJ8;zNs$N;~$K$O) 242.12 346.21 T +5 F +(\322localhost\323 ) 446.84 342.99 T +4 F +($r) 490.54 346.21 T +(%[%9%HL>$H$7$F;HMQ$7$^$9!#) 195.6 329.91 T +(@\134B3$G$-$?$H$-$K$O!"%5!<%P$NN\051$A>e$2;~$K;XDj$5$l$?<-=q%G%#%l%/%H%j) 195.6 297.32 T +(Fb$K$"$k) 195.6 281.02 T +5 F +(dict_list) 234.71 277.79 T +4 F +($G;XDj$5$l$k<-=q!"%f!<%6<-=q) 266.67 281.02 T +5 F +(user/uname/private.dic) 397.78 277.79 T +4 F +(!"3X) 481.85 281.02 T +(=,%U%!%$%k) 195.6 264.72 T +5 F +(user/uname/study.dat ) 243.91 261.5 T +4 F +($r%*!<%W%s$7$^$9!#) 324.66 264.72 T +5 F +(dict_list) 195.6 245.2 T +4 F +($G;XDj$5$l$?<-=q$N) 227.56 248.42 T +5 F +(1) 312.67 245.2 T +4 F +($D$G$b%*!<%W%s$G$-$l$P@\134B3$O@.8y$7$^$9!#) 319.57 248.42 T +(%*!<%W%s$G$-$J$+$C$?<-=q$,$"$k>l9g$O!") 195.6 232.12 T +5 F +(err_num) 372.72 228.9 T +4 F +($K%*!<%W%s$G$-$J$+$C$?) 406.2 232.12 T +(<-=q$N?t$,!") 195.6 215.83 T +5 F +(err_index) 253.11 212.6 T +4 F +($K$O) 290.67 215.83 T +5 F +(dict_list) 311.38 212.6 T +4 F +($X$N%$%s%G%C%/%9$,JV$j$^$9!#$?$H$\050) 343.33 215.83 T +($P!") 195.6 199.53 T +5 F +(dict_list[2]) 216.31 196.3 T +4 F +($N<-=q$,%*!<%W%s$G$-$J$$>l9g$O!") 256.69 199.53 T +5 F +(err_num) 406.21 196.3 T +4 F +($,) 439.68 199.53 T +5 F +(1) 451.19 196.3 T +4 F +(!") 455.79 199.53 T +5 F +(err_index[0]) 195.6 180.01 T +4 F +($,) 241.59 183.23 T +5 F +(2) 253.09 180.01 T +4 F +($K$J$j$^$9!#) 259.99 183.23 T +5 F +(err_index) 195.6 163.71 T +4 F +($No$K@\134B3$G$-$?$H$-$K$O) 195.6 602.73 T +5 F +(0 ) 345.12 599.51 T +4 F +($r!"2?$+%\050%i!<$N$"$C$?$H$-$K$O) 352.02 602.73 T +5 F +(0 ) 492.33 599.51 T +4 F +(0J30$N%\050%i!<%9%F!<%?%9$rJV$7$^$9!#) 195.6 586.43 T +(%\050%i!<%9%F!<%?%9$O%X%C%@%U%!%$%k) 195.6 553.84 T +19 F +(/usr/include/sj3lib.h) 342.82 550.61 T +4 F +($GDj5A$5$l$k%S%C) 431.03 553.84 T +(%H%"%5%$%s$5$l$?CM$G!">\134:Y$O0J2<$N9`L\134$N0UL#$,) 195.6 537.54 T +5 F +(sj3_open\050\051) 409.53 534.31 T +4 F +($H0c$&$@$1$G) 451.18 537.54 T +($9!#) 195.6 521.24 T +5 F +(SJ3_CANNOT_OPEN_MDICT) 195.6 501.72 T +4 F +(;XDj$5$l$?<-=q$,) 231.6 488.64 T +5 F +(1) 307.51 485.42 T +4 F +($D$b%*!<%W%s$G$-$^$;$s!#) 314.42 488.64 T +FMENDPAGE +%%EndPage: "81" 82 +%%Page: "82" 82 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(2-) 87.88 92.59 T +(82) 97.32 92.59 T +1 F +(!!) 109.14 95.32 T +10 F +(sj3lib ) 116.92 92.59 T +1 F +(%i%$%V%i%j) 136.81 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3lib ) 87.88 736.06 T +1 F +(%i%$%V%i%j0lMw) 107.78 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +13 F +0 X +("#!!) 87.88 689.54 T +18 F +(sj3_close) 107.72 686.06 T +2 F +(!!!!L>>N) 87.88 652.33 T +5 F +(sj3_close \321 ) 195.6 647.69 T +4 F +(%5!<%P$H$N@\134B3$N@Z$jJ|$7) 243.65 650.91 T +2 F +(!!!!7A<0) 87.88 614.07 T +5 F +(sj3_close\050\051) 195.6 609.42 T +2 F +(!!!!2r@b) 87.88 575.8 T +5 F +(sj3_open) 195.6 571.16 T +4 F +($K$h$C$F3NN\051$5$l$?%5!<%P$H$N@\134B3$r@Z$jJ|$7$^$9!#) 231.13 574.38 T +(%a%$%s<-=q!"%f!<%6<-=q!"3X=,%U%!%$%k$N$9$Y$F$,%*!<%W%s$5$l$F$$$k$b) 195.6 558.08 T +($N$H$7$F!"$=$l$i$N%/%m!<%:$r;n$_$^$9!#) 195.6 541.79 T +($3$N4X?t$O!"$+$J4A;zJQ49%k!<%A%s$N;HMQ$r=*$\050$k$H$-$K8F$P$J$1$l$P$J) 195.6 509.19 T +($j$^$;$s!#) 195.6 492.89 T +2 F +(!!!!%j%?!<%sCM) 87.88 456.04 T +4 F +(%5!<%P$H$N@\134B3$r@5>o$K@Z$jJ|$;$?$H$-$K$O) 195.6 454.63 T +5 F +(0 ) 381.92 451.4 T +4 F +($r!"2?$+%\050%i!<$N$"$C$?$H) 388.82 454.63 T +($-$K$O) 195.6 438.33 T +5 F +(0 ) 225.5 435.1 T +4 F +(0J30$N%\050%i!<%9%F!<%?%9$rJV$7$^$9!#) 232.4 438.33 T +(%\050%i!<%9%F!<%?%9$O%X%C%@%U%!%$%k) 195.6 405.73 T +19 F +(/usr/include/sj3lib.h) 342.82 402.51 T +4 F +($GDj5A$5$l$k%S%C) 431.03 405.73 T +(%H%"%5%$%s$5$l$?CM$G!">\134:Y$O0J2<$N$H$*$j$G$9!#) 195.6 389.43 T +19 F +(SJ3_SERVER_DEAD) 195.6 353.61 T +4 F +(@Z$jJ|$7=hM}Cf$K%5!<%P$,%@%&%s$7$^$7$?!#) 231.6 340.54 T +19 F +(SJ3_DISCONNECT_ERROR) 195.6 321.02 T +4 F +(%5!<%P$GFbIt%\050%i!<$,$"$j$^$7$?!#) 231.6 307.94 T +19 F +(SJ3_NOT_CONNECTED) 195.6 288.42 T +4 F +(%5!<%P$H@\134B3$5$l$F$$$^$;$s!#) 231.6 275.35 T +19 F +(SJ3_NOT_OPENED_MDICT) 195.6 255.83 T +4 F +(%a%$%s<-=q$,%*!<%W%s$5$l$F$$$^$;$s!#) 231.6 242.75 T +19 F +(SJ3_NOT_OPENED_UDICT) 195.6 223.23 T +4 F +(%f!<%6<-=q$,%*!<%W%s$5$l$F$$$^$;$s!#) 231.6 210.16 T +19 F +(SJ3_NOT_OPENED_STUDY) 195.6 190.63 T +4 F +(3X=,%U%!%$%k$,%*!<%W%s$5$l$F$$$^$;$s!#) 231.6 177.56 T +19 F +(SJ3_CLOSE_MDICT_ERROR) 195.6 158.04 T +4 F +(%a%$%s<-=q$,%/%m!<%:$G$-$^$;$s!#) 231.6 144.96 T +19 F +(SJ3_CLOSE_UDICT_ERROR) 195.6 125.44 T +FMENDPAGE +%%EndPage: "82" 83 +%%Page: "83" 83 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +10 F +0 X +(sj3lib ) 419.58 92.59 T +1 F +(%i%$%V%i%j!!) 439.47 95.32 T +0 F +(2-83) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3lib ) 433.05 736.06 T +1 F +(%i%$%V%i%j0lMw) 452.94 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +4 F +0 X +(%f!<%6<-=q$,%/%m!<%:$G$-$^$;$s!#) 231.6 689.89 T +19 F +(SJ3_CLOSE_STUDY_ERROR) 195.6 670.37 T +4 F +(3X=,%U%!%$%k$,%/%m!<%:$G$-$^$;$s!#) 231.6 657.29 T +(%\050%i!<%9%F!<%?%9$K$O!"$3$l$i$N$&$A>/$J$/$H$b) 195.6 624.7 T +5 F +(1 ) 400.32 621.47 T +4 F +(%S%C%H$,N\051$C$F$$$^) 407.23 624.7 T +($9!#) 195.6 608.4 T +($I$N%\050%i!<%9%F!<%?%9$,JV$C$F$b!"%5!<%P$H$N@\134B3$O@Z$l$F$$$^$9!#) 195.6 592.1 T +FMENDPAGE +%%EndPage: "83" 84 +%%Page: "84" 84 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(2-) 87.88 92.59 T +(84) 97.32 92.59 T +1 F +(!!) 109.14 95.32 T +10 F +(sj3lib ) 116.92 92.59 T +1 F +(%i%$%V%i%j) 136.81 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3lib ) 87.88 736.06 T +1 F +(%i%$%V%i%j0lMw) 107.78 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +13 F +0 X +("#!!) 87.88 689.54 T +18 F +(sj3_getkan) 107.72 686.06 T +2 F +(!!!!L>>N) 87.88 652.33 T +5 F +(sj3_getkan) 195.6 647.69 T +4 F +(!") 235.47 650.91 T +5 F +(sj3_getkan_euc) 246.97 647.69 T +4 F +(!") 304.21 650.91 T +5 F +(sj3_getkan_mb \321) 315.72 647.69 T +4 F +(J8>O0l3gJQ49) 385.75 650.91 T +2 F +(!!!!7A<0) 87.88 614.07 T +5 F +(sj3_getkan\050yomi, bun, knjbuf, knjsiz\051) 195.6 609.42 T +(sj3_getkan_euc\050yomi, bun, knjbuf, knjsiz\051) 195.6 593.13 T +(sj3_getkan_mb\050yomi, bun, knjbuf, knjsiz\051) 195.6 576.83 T +(unsigned char *yomi;) 195.6 560.53 T +(/* ) 303.6 560.53 T +4 F +(FI$_J8;zNs$X$N%]%$%s%?) 313.06 563.75 T +5 F +(*/) 416.57 560.53 T +(struct bunsetu bun[];) 195.6 544.23 T +(/* ) 303.6 544.23 T +4 F +(J8@a9=B$BN$X$N%]%$%s%?) 313.06 547.46 T +5 F +(*/) 416.57 544.23 T +(unsigned char *knjbuf;) 195.6 527.93 T +(/* ) 303.6 527.93 T +4 F +(4A;zJ8;zNs3JGO0l3gJQ49$7!"$=$N7k2L$rJV$7$^$9!#) 195.6 476.59 T +(%]%$%s%?) 195.6 460.3 T +5 F +(yomi) 234.71 457.07 T +4 F +($G;XDj$5$l$?FI$_J8;zNs$r$+$J4A;zJQ49$7!"%]%$%s%?) 255.93 460.3 T +5 F +(knjbuf) 479.06 457.07 T +4 F +($G<\050$5$l$kBg$-$5) 195.6 444 T +5 F +(knjsiz) 271.51 440.77 T +4 F +($NNN0h$KJQ497k2L$N4A;zJ8;zNs$r!"G[Ns) 295.8 444 T +5 F +(struct ) 463.72 440.77 T +(bunsetu bun[]) 195.6 424.48 T +4 F +($K3FJ8@a$K4X$9$k>pJs$r%;%C%H$7$^$9!#) 246.46 427.7 T +5 F +(struct bunsetu) 414.38 424.48 T +4 F +($O%X%C%@) 468.05 427.7 T +(%U%!%$%k) 195.6 411.4 T +19 F +(/usr/include/sj3lib.h) 232.4 408.18 T +4 F +($G@k8@$5$l$F$$$k0J2<$N$h$&$J9=B$BN$G$9!#) 320.62 411.4 T +5 F +( struct bunsetu {) 195.6 375.58 T +( int srclen;) 195.6 359.28 T +(/* ) 339.6 359.28 T +4 F +(FI$_$ND9$5) 349.06 362.51 T +5 F +(*/) 415.77 359.28 T +( int destlen;) 195.6 342.99 T +(/* ) 339.6 342.99 T +4 F +(4A;z$ND9$5) 349.06 346.21 T +5 F +(*/) 415.77 342.99 T +( unsigned char *srcstr;) 195.6 326.69 T +(/* ) 339.6 326.69 T +4 F +(FI$_$X$N%]%$%s%?) 349.06 329.91 T +5 F +(*/) 429.57 326.69 T +( unsigned char *deststr;) 195.6 310.39 T +(/* ) 339.6 310.39 T +4 F +(4A;z$X$N%]%$%s%?) 349.06 313.61 T +5 F +(*/) 429.57 310.39 T +( struct studyrec dcid;) 195.6 294.09 T +(/* ) 339.6 294.09 T +4 F +(3X=,$N$?$a$N%G!<%?) 349.06 297.32 T +5 F +(*/) 434.17 294.09 T +( };) 195.6 277.79 T +4 F +(FI$_$,4A;zJ8;zNs$KJQ49$G$-$?$H$-$K$O!"$3$l$i$NMWAG$O$-$A$s$H@_Dj$5) 195.6 248.42 T +($l$^$9$,!"%]%$%s%?) 195.6 232.12 T +5 F +(knjbuf) 280.71 228.9 T +4 F +($G<\050$5$l$kNN0h$NBg$-$5) 307.04 232.12 T +5 F +(bufsiz) 410.55 228.9 T +4 F +($,>.$5$$$J$I$N) 435.35 232.12 T +(860x$G4A;zJ8;zNs$rJV$;$J$$J8@a$,@8$8$?$H$-$K$O!"$=$NFI$_J8;zNs$X$N) 195.6 215.83 T +(%]%$%s%?$r) 195.6 199.53 T +5 F +(srcstr) 243.91 196.3 T +4 F +($K!"$^$?$=$ND9$5$r) 266.14 199.53 T +5 F +(srclen) 351.25 196.3 T +4 F +($K;}$A!") 375.53 199.53 T +5 F +(destlen) 414.64 196.3 T +4 F +($,) 443.01 199.53 T +5 F +(0 ) 454.51 196.3 T +4 F +($G) 461.41 199.53 T +5 F +(deststr) 472.91 196.3 T +4 F +($,%J%k%]%$%s%?$N9=B$BN$,@8@.$5$l$^$9!#) 195.6 183.23 T +(FI$_$H$7$FM?$\050$i$l$kJ8;zNs$O!"%7%U%H) 195.6 150.63 T +5 F +(JIS) 363.52 147.41 T +4 F +($^$?$O) 377.58 150.63 T +5 F +(EUC ) 407.49 147.41 T +4 F +($N) 428.19 150.63 T +5 F +(2 ) 439.69 147.41 T +4 F +(%P%$%H%3!<%I) 446.6 150.63 T +($G9=@.$5$l$F$$$k$3$H$,86B'$G$9$,!") 195.6 134.34 T +5 F +(1 ) 354.32 131.11 T +4 F +(%P%$%H%3!<%I$,:.$8$C$F$$$F$b$+) 361.22 134.34 T +FMENDPAGE +%%EndPage: "84" 85 +%%Page: "85" 85 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +10 F +0 X +(sj3lib ) 419.58 92.59 T +1 F +(%i%$%V%i%j!!) 439.47 95.32 T +0 F +(2-85) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3lib ) 433.05 736.06 T +1 F +(%i%$%V%i%j0lMw) 452.94 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +4 F +0 X +($^$$$^$;$s!#$?$@$7$=$N:]$K$O!") 195.6 689.89 T +5 F +(1) 335.92 686.67 T +4 F +(%P%$%H%3!<%I$O4A;z$KJQ49$5$l$k$3$H) 342.82 689.89 T +($O$"$j$^$;$s!#) 195.6 673.59 T +(FI$_J8;zNs$O%J%k$G=*N;$7$F$$$J$1$l$P$J$i$:!":GBg$G$b) 195.6 657.29 T +5 F +(256 ) 437.13 654.07 T +4 F +(J8;z$r1[$\050) 453.23 657.29 T +($F$O$J$j$^$;$s!#) 195.6 641 T +(G[Ns) 195.6 624.7 T +5 F +(struct bunsetu bun[]) 216.31 621.47 T +4 F +($No=*N;$7$?$H$-$K$O!"G[Ns) 195.6 456.05 T +5 F +(struct sj3bunsetu bun[]) 317.52 452.82 T +4 F +($K%;%C%H$5$l$?J8@a?t$,) 401.85 456.05 T +(JV$5$l$^$9!#) 195.6 439.75 T +FMENDPAGE +%%EndPage: "85" 86 +%%Page: "86" 86 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(2-) 87.88 92.59 T +(86) 97.32 92.59 T +1 F +(!!) 109.14 95.32 T +10 F +(sj3lib ) 116.92 92.59 T +1 F +(%i%$%V%i%j) 136.81 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3lib ) 87.88 736.06 T +1 F +(%i%$%V%i%j0lMw) 107.78 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +13 F +0 X +("#!!) 87.88 689.54 T +18 F +(sj3_douoncnt) 107.72 686.06 T +2 F +(!!!!L>>N) 87.88 652.33 T +5 F +(sj3_douoncnt) 195.6 647.69 T +4 F +(!") 245.18 650.91 T +5 F +(sj3_douoncnt_euc) 256.69 647.69 T +4 F +(!") 323.64 650.91 T +5 F +(sj3_douoncnt_mb \321 ) 335.15 647.69 T +4 F +(F12;0U5A8l?t$No=*N;$7$?$H$-$K$OF12;8l?t$,JV$5$l$^$9!#) 195.6 291.65 T +FMENDPAGE +%%EndPage: "86" 87 +%%Page: "87" 87 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +10 F +0 X +(sj3lib ) 419.58 92.59 T +1 F +(%i%$%V%i%j!!) 439.47 95.32 T +0 F +(2-87) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3lib ) 433.05 736.06 T +1 F +(%i%$%V%i%j0lMw) 452.94 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +13 F +0 X +("#!!) 87.88 689.54 T +18 F +(sj3_getdouon) 107.72 686.06 T +2 F +(!!!!L>>N) 87.88 652.33 T +5 F +(sj3_getdouon) 195.6 647.69 T +4 F +(!") 245.18 650.91 T +5 F +(sj3_getdouon_euc) 256.69 647.69 T +4 F +(!") 323.64 650.91 T +5 F +(sj3_getdouon_mb \321 ) 335.15 647.69 T +4 F +(F12;0U5A8l$NpJs$,%;%C%H$5$l$^$9!#9=B$) 284.28 346.21 T +(BN) 195.6 329.91 T +5 F +(struct douon) 207.1 326.69 T +4 F +($O) 255.15 329.91 T +19 F +(sj3lib.h) 266.66 326.69 T +4 F +($G@k8@$5$l$F$$$k0J2<$N$h$&$J9=B$BN$G$9!#) 300.67 329.91 T +5 F +( struct douon {) 195.6 294.09 T +( unsigned char ddata[512];) 195.6 277.79 T +(/* ) 339.6 277.79 T +4 F +(F12;0U5A8l$N%G!<%?) 349.06 281.02 T +5 F +(*/) 434.17 277.79 T +( int dlen;) 195.6 261.5 T +(/* ) 339.6 261.5 T +4 F +(F12;0U5A8l$ND9$5) 349.06 264.72 T +5 F +(*/) 429.57 261.5 T +( struct studyrec dcid;) 195.6 245.2 T +(/* ) 339.6 245.2 T +4 F +(3X=,$N$?$a$N%G!<%?) 349.06 248.42 T +5 F +(*/) 434.17 245.2 T +( };) 195.6 228.9 T +4 F +(G[Ns) 195.6 199.53 T +5 F +(struct douon dou[]) 216.31 196.3 T +4 F +($No=*N;$7$?$H$-$K$O!"G[Ns) 195.6 657.29 T +5 F +(struct douon dou[]) 317.52 654.07 T +4 F +($K%;%C%H$5$l$?F12;8l?t$,JV) 385.49 657.29 T +($5$l$^$9!#) 195.6 641 T +FMENDPAGE +%%EndPage: "88" 89 +%%Page: "89" 89 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +10 F +0 X +(sj3lib ) 419.58 92.59 T +1 F +(%i%$%V%i%j!!) 439.47 95.32 T +0 F +(2-89) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3lib ) 433.05 736.06 T +1 F +(%i%$%V%i%j0lMw) 452.94 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +13 F +0 X +("#!!) 87.88 689.54 T +18 F +(sj3_gakusyuu ) 107.72 686.06 T +2 F +(!!!!L>>N) 87.88 652.33 T +5 F +(sj3_gakusyuu \321 ) 195.6 647.69 T +4 F +(J8@a3X=,) 260.01 650.91 T +2 F +(!!!!7A<0) 87.88 614.07 T +5 F +(sj_gakusyuu\050dcid\051) 195.6 609.42 T +(struct studyrec *dcid;) 195.6 593.13 T +(/* ) 303.6 593.13 T +4 F +(3X=,%G!<%?$X$N%]%$%s%?) 313.06 596.35 T +5 F +(*/) 416.57 593.13 T +2 F +(!!!!2r@b) 87.88 559.5 T +4 F +(3X=,%G!<%?$X$N%]%$%s%?) 195.6 558.08 T +5 F +(dcid) 299.11 554.86 T +4 F +($N<\050$9!") 317.26 558.08 T +5 F +(sj3_getkan_mb) 356.37 554.86 T +4 F +($d) 414.9 558.08 T +5 F +(sj3_getdouon_mb) 426.4 554.86 T +4 F +($K) 494.65 558.08 T +($h$jF@$i$l$?3X=,%G!<%?$r;HMQ$7$F!"J8@a3X=,$r9T$$$^$9!#) 195.6 541.79 T +2 F +(!!!!%j%?!<%sCM) 87.88 504.94 T +4 F +(%5!<%P$H@\134B3$5$l$F$$$J$$$H$-!"$"$k$$$O%5!<%P$,%@%&%s$7$?$H$-$K$O) 195.6 503.52 T +5 F +(\3201 ) 490.03 500.3 T +4 F +($,JV$5$l$^$9!#) 195.6 487.22 T +(@5>o$K3X=,$G$-$?$H$-$K$O) 195.6 470.92 T +5 F +(0) 308.32 467.7 T +4 F +($,!"3X=,$G$-$J$+$C$?$H$-$K$O$=$l0J30$NCM) 315.22 470.92 T +($,JV$5$l$^$9!#) 195.6 454.63 T +FMENDPAGE +%%EndPage: "89" 90 +%%Page: "90" 90 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(2-) 87.88 92.59 T +(90) 97.32 92.59 T +1 F +(!!) 109.14 95.32 T +10 F +(sj3lib ) 116.92 92.59 T +1 F +(%i%$%V%i%j) 136.81 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3lib ) 87.88 736.06 T +1 F +(%i%$%V%i%j0lMw) 107.78 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +13 F +0 X +("#!!) 87.88 689.54 T +18 F +(sj3_gakusyuu2) 107.72 686.06 T +2 F +(!!!!L>>N) 87.88 652.33 T +5 F +(sj3_gakusyuu2) 195.6 647.69 T +4 F +(!") 250.81 650.91 T +5 F +(sj3_gakusyuu2_euc) 262.31 647.69 T +4 F +(!") 334.89 650.91 T +5 F +(sj3_gakusyuu2_mb \321 ) 346.39 647.69 T +4 F +(J8@aD93X=,) 431.76 650.91 T +2 F +(!!!!7A<0) 87.88 614.07 T +5 F +(sj_gakusyuu2\050yomi1, yomi2, dcid\051) 195.6 609.42 T +(sj_gakusyuu2_euc\050yomi1, yomi2, dcid\051) 195.6 593.13 T +(sj_gakusyuu2_mb\050yomi1, yomi2, dcid\051) 195.6 576.83 T +(unsigned char *yomi1;) 195.6 560.53 T +(/* ) 303.6 560.53 T +4 F +(Bh#1J8@a$NFI$_J8;zNs$X$N%]%$%s%?) 313.06 563.75 T +5 F +(*/) 462.58 560.53 T +(unsigned char *yomi2;) 195.6 544.23 T +(/* ) 303.6 544.23 T +4 F +(Bh#2J8@a$NFI$_J8;zNs$X$N%]%$%s%?) 313.06 547.46 T +5 F +(*/) 462.58 544.23 T +(struct studyrec *dcid;) 195.6 527.93 T +(/* ) 303.6 527.93 T +4 F +(Bh#2J8@a$N3X=,%G!<%?$X$N%]%$%s%?) 313.06 531.16 T +5 F +(*/) 462.58 527.93 T +2 F +(!!!!2r@b) 87.88 494.31 T +4 F +(J8@aD93X=,$r9T$$$^$9!#) 195.6 492.89 T +(#1J8@a$H$7$FJQ49$5$l$?J8;zNs$,#2J8@a$KJ,$1$i$l$?$h$&$J>l9g!"$"$k$$) 195.6 460.3 T +($O#2J8@a$N4V$G$=$N6-3&$,JQ99$5$l$?$h$&$J$H$-$K$O!") 195.6 444 T +5 F +(yomi1) 427.93 440.77 T +4 F +($K?7$?$JBh) 453.75 444 T +(#1J8@a$NFI$_$X$N%]%$%s%?$r!") 195.6 427.7 T +5 F +(yomi2) 326.72 424.48 T +4 F +($K?7$?$JBh#2J8@a$NFI$_$X$N%]%$%s) 352.54 427.7 T +(%?$r!") 195.6 411.4 T +5 F +(dcid) 225.51 408.18 T +4 F +($K?7$?$JBh#2J8@a$N3X=,%G!<%?$rM?$\050$k$3$H$K$h$j!"J8@aD93X) 243.65 411.4 T +(=,$r9T$$$^$9!#) 195.6 395.1 T +(#2J8@a$H$7$FJQ49$5$l$?J8;zNs$,#1J8@a$K$J$C$?>l9g$K$O!") 195.6 362.51 T +5 F +(yomi1) 446.33 359.28 T +4 F +($K?7$?) 472.15 362.51 T +($K$G$-$?#1J8@a$NFI$_$X$N%]%$%s%?$r!") 195.6 346.21 T +5 F +(yomi2) 363.52 342.99 T +4 F +($K$O%J%k%]%$%s%?$^$?$O%J) 389.34 346.21 T +(%kJ8;zNs$X$N%]%$%s%?$rM?$\050$k$3$H$K$h$j!"J8@aD93X=,$r9T$$$^$9!#$3$N) 195.6 329.91 T +($H$-!") 195.6 313.61 T +5 F +(dcid) 225.51 310.39 T +4 F +($K$O@_Dj$9$Y$-%G!<%?$OFC$K$"$j$^$;$s!#) 243.65 313.61 T +2 F +(!!!!%j%?!<%sCM) 87.88 276.77 T +4 F +(%5!<%P$H@\134B3$5$l$F$$$J$$$H$-!"$"$k$$$O%5!<%P$,%@%&%s$7$?$H$-$K$O) 195.6 275.35 T +5 F +(\3201 ) 490.03 272.12 T +4 F +($,JV$5$l$^$9!#) 195.6 259.05 T +(@5>o$K3X=,$G$-$?$H$-$K$O) 195.6 242.75 T +5 F +(0) 308.32 239.53 T +4 F +($,!"3X=,$G$-$J$+$C$?$H$-$K$O$=$l0J30$NCM) 315.22 242.75 T +($,JV$5$l$^$9!#) 195.6 226.45 T +FMENDPAGE +%%EndPage: "90" 91 +%%Page: "91" 91 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +10 F +0 X +(sj3lib ) 419.58 92.59 T +1 F +(%i%$%V%i%j!!) 439.47 95.32 T +0 F +(2-91) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3lib ) 433.05 736.06 T +1 F +(%i%$%V%i%j0lMw) 452.94 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +13 F +0 X +("#!!) 87.88 689.54 T +18 F +(sj3_touroku) 107.72 686.06 T +2 F +(!!!!L>>N) 87.88 652.33 T +5 F +(sj3_touroku) 195.6 647.69 T +4 F +(!") 239.56 650.91 T +5 F +(sj3_touroku_euc) 251.07 647.69 T +4 F +(!") 312.4 650.91 T +5 F +(sj3_touroku_mb \321 ) 323.9 647.69 T +4 F +(C18lEPO?) 398.03 650.91 T +2 F +(!!!!7A<0) 87.88 614.07 T +5 F +(sj3_touroku\050yomi, kanji, hinsi\051) 195.6 609.42 T +(sj3_touroku_euc\050yomi, kanji, hinsi\051) 195.6 593.13 T +(sj3_touroku_mb\050yomi, kanji, hinsi\051) 195.6 576.83 T +(unsigned char *yomi;) 195.6 560.53 T +(/* ) 303.6 560.53 T +4 F +(FI$_J8;zNs$X$N%]%$%s%?) 313.06 563.75 T +5 F +(*/) 416.57 560.53 T +(unsigned char *kanji;) 195.6 544.23 T +(/* ) 303.6 544.23 T +4 F +(4A;zJ8;zNs$X$N%]%$%s%?) 313.06 547.46 T +5 F +(*/) 416.57 544.23 T +(int) 195.6 527.93 T +(hinsi;) 231.6 527.93 T +(/* ) 303.6 527.93 T +4 F +(IJ;l%3!<%I) 313.06 531.16 T +5 F +(*/) 388.97 527.93 T +2 F +(!!!!2r@b) 87.88 494.31 T +4 F +(FI$_J8;zNs$X$N%]%$%s%?) 195.6 492.89 T +5 F +(yomi) 299.11 489.67 T +4 F +(!"4A;zJ8;zNs$X$N%]%$%s%?) 318.03 492.89 T +5 F +(kanji) 430.75 489.67 T +4 F +(!"IJ;l%3!<%I) 449.15 492.89 T +5 F +(hinsi) 195.6 473.37 T +4 F +($G;XDj$5$l$?8l$r%f!<%6<-=q$KEPO?$7$^$9!#) 215.8 476.59 T +(FI$_$O0J2<$N%7%U%H) 195.6 444 T +5 F +(JIS) 280.71 440.77 T +4 F +($^$?$O) 294.77 444 T +5 F +(EUC) 324.68 440.77 T +4 F +(%3!<%I$G9=@.$5$l!"$+$D%J%k$G=*N;$7) 345.39 444 T +($F$$$J$1$l$P$J$j$^$;$s!#$^$?$=$ND9$5$O!":GBg$G$b) 195.6 427.7 T +5 F +(31) 418.73 424.48 T +4 F +(J8;z$r1[$\050$F$O$J) 430.23 427.7 T +($j$^$;$s!#) 195.6 411.4 T +5 F +( ) 195.6 375.58 T +4 F +(!) 253.11 281.02 T +($@$B$E$G$I) 301.41 281.02 T +($P$S$V$Y$\134) 349.72 281.02 T +($Q$T$W$Z$]) 398.02 281.02 T +5 F +( ) 195.6 261.5 T +4 F +($!$#$%$'$\051) 204.8 264.72 T +(!!!!$C!!!!) 253.11 264.72 T +($c!!$e!!$g) 301.41 264.72 T +($n) 349.72 264.72 T +5 F +( ) 195.6 245.2 T +4 F +(%t%u%v) 204.8 248.42 T +($?$@$70J2<$NJ8;z$OFI$_$N@hF,$K$J$k$3$H$,=PMh$^$;$s!#) 195.6 215.83 T +5 F +( ) 195.6 180.01 T +4 F +(!<) 204.8 183.23 T +($r) 216.3 183.23 T +($!$#$%$'$\051) 227.8 183.23 T +($C) 276.11 183.23 T +($c$e$g) 287.61 183.23 T +($n) 317.52 183.23 T +(%u%v) 329.02 183.23 T +(4A;z$O%7%U%H) 195.6 150.63 T +5 F +(JIS) 253.11 147.41 T +4 F +($^$?$O) 267.17 150.63 T +5 F +(EUC) 297.08 147.41 T +4 F +(%3!<%I$G9=@.$5$l!"$+$D%J%k$G=*N;$7$F$$$J) 317.78 150.63 T +($1$l$P$J$j$^$;$s!#$^$?$=$ND9$5$O!":GBg$G$b) 195.6 134.34 T +5 F +(32) 391.13 131.11 T +4 F +(J8;z$r1[$\050$F$O$J$j$^$;) 402.63 134.34 T +FMENDPAGE +%%EndPage: "91" 92 +%%Page: "92" 92 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(2-) 87.88 92.59 T +(92) 97.32 92.59 T +1 F +(!!) 109.14 95.32 T +10 F +(sj3lib ) 116.92 92.59 T +1 F +(%i%$%V%i%j) 136.81 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3lib ) 87.88 736.06 T +1 F +(%i%$%V%i%j0lMw) 107.78 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +4 F +0 X +($s!#) 195.6 689.89 T +(IJ;l%3!<%I$O%X%C%@%U%!%$%k) 195.6 657.29 T +19 F +(/usr/include/sj3lib.h) 315.21 654.07 T +4 F +($GDj5A$5$l$k0J2<$NIJ;l) 403.43 657.29 T +($N$&$A$N0l$D$G$9!#) 195.6 641 T +2 F +(!!!!%j%?!<%sCM) 87.88 297.45 T +4 F +(%5!<%P$H@\134B3$5$l$F$$$J$$$H$-!"$"$k$$$O%5!<%P$,%@%&%s$7$?$H$-$K$O) 195.6 296.03 T +5 F +(\3201 ) 492.33 292.8 T +4 F +($,JV$5$l$^$9!#) 195.6 279.73 T +(EPO?$G$-$?$H$-$K$O) 195.6 263.43 T +5 F +(0) 280.71 260.21 T +4 F +($,!"EPO?$G$-$J$+$C$?$H$-$K$O$=$l0J30$N%\050%i!<%9) 287.62 263.43 T +(%F!<%?%9$,JV$5$l$^$9!#) 195.6 247.13 T +(%\050%i!<%9%F!<%?%9$O%X%C%@%U%!%$%k) 195.6 214.54 T +19 F +(/usr/include/sj3lib.h) 342.82 211.31 T +4 F +($GDj5A$5$l!">\134:Y) 431.03 214.54 T +($O0J2<$N$H$*$j$G$9!#) 195.6 198.24 T +19 F +(SJ3_DICT_ERROR) 195.6 162.42 T +4 F +(<-=q$,B8:_$7$J$$!"$"$k$$$OEPO?$G$-$J$$<-=q$G$9!#) 231.6 149.35 T +19 F +(SJ3_DICT_LOCKED) 195.6 129.82 T +87.88 119.06 507.41 694.5 C +103.31 322.6 507.41 613.01 C +103.31 322.6 507.41 613.01 R +7 X +0 K +V +131.65 425.21 216.69 439.38 R +V +5 F +0 X +(SJ3_H_SUBNUM) 131.65 431.55 T +223.78 425.21 308.82 439.38 R +7 X +V +4 F +0 X +(!!!!=u?t;l) 223.78 434.78 T +322.99 425.21 408.03 439.38 R +7 X +V +5 F +0 X +(SJ3_H_NAVERB) 322.99 431.55 T +415.12 425.21 500.16 439.38 R +7 X +V +4 F +0 X +(!!%J9T8^CJF0;l) 415.12 434.78 T +131.65 407.49 216.69 421.67 R +7 X +V +5 F +0 X +(SJ3_H_NUMERAL) 131.65 413.84 T +223.78 407.49 308.82 421.67 R +7 X +V +4 F +0 X +(!!!!!!?t;l) 223.78 417.06 T +322.99 407.49 408.03 421.67 R +7 X +V +5 F +0 X +(SJ3_H_BAVERB) 322.99 413.84 T +415.12 407.49 500.16 421.67 R +7 X +V +4 F +0 X +(!!%P9T8^CJF0;l) 415.12 417.06 T +131.65 389.78 216.69 403.95 R +7 X +V +5 F +0 X +(SJ3_H_PREFIX) 131.65 396.12 T +223.78 389.78 308.82 403.95 R +7 X +V +4 F +0 X +(!!!!@\134F,8l) 223.78 399.35 T +322.99 389.78 408.03 403.95 R +7 X +V +5 F +0 X +(SJ3_H_MAVERB) 322.99 396.12 T +415.12 389.78 500.16 403.95 R +7 X +V +4 F +0 X +(!!%^9T8^CJF0;l) 415.12 399.35 T +131.65 372.06 216.69 386.24 R +7 X +V +5 F +0 X +(SJ3_H_POSTFIX) 131.65 378.41 T +223.78 372.06 308.82 386.24 R +7 X +V +4 F +0 X +(!!!!@\134Hx8l) 223.78 381.63 T +322.99 372.06 408.03 386.24 R +7 X +V +5 F +0 X +(SJ3_H_RAVERB) 322.99 378.41 T +415.12 372.06 500.16 386.24 R +7 X +V +4 F +0 X +(!!%i9T8^CJF0;l) 415.12 381.63 T +131.65 354.35 216.69 368.52 R +7 X +V +5 F +0 X +(SJ3_H_ADVERB) 131.65 360.69 T +223.78 354.35 308.82 368.52 R +7 X +V +4 F +0 X +(!!!!!!I{;l) 223.78 363.91 T +322.99 354.35 408.03 368.52 R +7 X +V +5 F +0 X +(SJ3_H_WAVERB) 322.99 360.69 T +415.12 354.35 500.16 368.52 R +7 X +V +4 F +0 X +(!!%o9T8^CJF0;l) 415.12 363.91 T +131.65 336.63 216.69 350.8 R +7 X +V +5 F +0 X +(SJ3_H_ADJECT) 131.65 342.97 T +223.78 336.63 308.82 350.8 R +7 X +V +4 F +0 X +(!!!!7AMF;l) 223.78 346.2 T +322.99 336.63 408.03 350.8 R +7 X +V +5 F +0 X +(SJ3_H_SINGLE) 322.99 342.97 T +415.12 336.63 500.16 350.8 R +7 X +V +4 F +0 X +(!!!!C14A;z) 415.12 346.2 T +131.65 478.36 216.69 492.53 R +7 X +V +5 F +0 X +(SJ3_H_PREFIC) 131.65 484.7 T +223.78 478.36 308.82 492.53 R +7 X +V +4 F +0 X +(!!!!8\051!?6hL>) 223.78 487.93 T +322.99 478.36 408.03 492.53 R +7 X +V +5 F +0 X +(SJ3_H_GAVERB) 322.99 484.7 T +415.12 478.36 500.16 492.53 R +7 X +V +4 F +0 X +(!!%,9T8^CJF0;l) 415.12 487.93 T +131.65 460.64 216.69 474.82 R +7 X +V +5 F +0 X +(SJ3_H_RENTAI) 131.65 466.99 T +223.78 460.64 308.82 474.82 R +7 X +V +4 F +0 X +(!!!!O"BN;l) 223.78 470.21 T +322.99 460.64 408.03 474.82 R +7 X +V +5 F +0 X +(SJ3_H_SAVERB) 322.99 466.99 T +415.12 460.64 500.16 474.82 R +7 X +V +4 F +0 X +(!!%59T8^CJF0;l) 415.12 470.21 T +131.65 442.93 216.69 457.1 R +7 X +V +5 F +0 X +(SJ3_H_CONJUNC) 131.65 449.27 T +223.78 442.93 308.82 457.1 R +7 X +V +4 F +0 X +(!!!!@\134B3;l) 223.78 452.5 T +322.99 442.93 408.03 457.1 R +7 X +V +5 F +0 X +(SJ3_H_TAVERB) 322.99 449.27 T +415.12 442.93 500.16 457.1 R +7 X +V +4 F +0 X +(!!%?9T8^CJF0;l) 415.12 452.5 T +131.65 531.51 216.69 545.68 R +7 X +V +5 F +0 X +(SJ3_H_LNAME) 131.65 537.85 T +223.78 531.51 308.82 545.68 R +7 X +V +4 F +0 X +(!!!!!!ID;z) 223.78 541.08 T +322.99 531.51 408.03 545.68 R +7 X +V +5 F +0 X +(SJ3_H_ZILVERB) 322.99 537.85 T +415.12 531.51 500.16 545.68 R +7 X +V +4 F +0 X +(!!!!%6JQF0;l) 415.12 541.08 T +131.65 513.79 216.69 527.97 R +7 X +V +5 F +0 X +(SJ3_H_FNAME) 131.65 520.14 T +223.78 513.79 308.82 527.97 R +7 X +V +4 F +0 X +(!!!!!!L>A0) 223.78 523.36 T +322.99 513.79 408.03 527.97 R +7 X +V +5 F +0 X +(SJ3_H_ONEVERB) 322.99 520.14 T +415.12 513.79 500.16 527.97 R +7 X +V +4 F +0 X +(!!!!0lCJF0;l) 415.12 523.36 T +131.65 496.08 216.69 510.25 R +7 X +V +5 F +0 X +(SJ3_H_LOCNAME) 131.65 502.42 T +223.78 496.08 308.82 510.25 R +7 X +V +4 F +0 X +(!!!!!!COL>) 223.78 505.64 T +322.99 496.08 408.03 510.25 R +7 X +V +5 F +0 X +(SJ3_H_KAVERB) 322.99 502.42 T +415.12 496.08 500.16 510.25 R +7 X +V +4 F +0 X +(!!%+9T8^CJF0;l) 415.12 505.64 T +131.03 590.91 216.07 605.08 R +7 X +V +0 X +(!!!!%7%s%\134%k) 131.03 600.48 T +223.15 590.91 308.19 605.08 R +7 X +V +5 F +0 X +( ) 223.15 597.25 T +4 F +(@b) 243.86 600.48 T +(L@) 259.96 600.48 T +322.37 590.91 407.41 605.08 R +7 X +V +0 X +(!!!!%7%s%\134%k) 322.37 600.48 T +414.49 590.91 499.53 605.08 R +7 X +V +0 X +(!!!!@b!!L@) 414.49 600.48 T +131.65 566.94 216.69 581.12 R +7 X +V +5 F +0 X +(SJ3_H_NRMNOUN) 131.65 573.29 T +223.78 566.94 308.82 581.12 R +7 X +V +0 X +( ) 223.78 573.29 T +4 F +(!!IaDLL>;l) 232.98 576.51 T +322.99 566.94 408.03 581.12 R +7 X +V +5 F +0 X +(SJ3_H_ADJVERB) 322.99 573.29 T +415.12 566.94 500.16 581.12 R +7 X +V +4 F +0 X +(!!!!7AMFF0;l) 415.12 576.51 T +131.65 549.23 216.69 563.4 R +7 X +V +5 F +0 X +(SJ3_H_PRONOUN) 131.65 555.57 T +223.78 549.23 308.82 563.4 R +7 X +V +4 F +0 X +(!!!!BeL>;l) 223.78 558.79 T +322.99 549.23 408.03 563.4 R +7 X +V +5 F +0 X +(SJ3_H_ADJVERB) 322.99 555.57 T +415.12 549.23 500.16 563.4 R +7 X +V +4 F +0 X +(!!!!7AMFF0;l) 415.12 558.79 T +126.57 332.61 504.07 608.86 R +0.5 H +0 Z +N +127.2 588.36 503.95 588.36 2 L +2 Z +N +126.45 584.11 503.2 584.11 2 L +N +220.32 608.86 220.32 332.61 2 L +N +315.9 607.92 315.9 331.67 2 L +N +313.07 609.11 313.07 332.86 2 L +N +411.82 608.61 411.82 332.36 2 L +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "92" 93 +%%Page: "93" 93 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +10 F +0 X +(sj3lib ) 419.58 92.59 T +1 F +(%i%$%V%i%j!!) 439.47 95.32 T +0 F +(2-93) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3lib ) 433.05 736.06 T +1 F +(%i%$%V%i%j0lMw) 452.94 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +4 F +0 X +(<-=q$,FI$_=P$7$N$?$a$K%m%C%/$5$l$F$$$^$9!#) 231.6 689.89 T +19 F +(SJ3_BAD_YOMI_STR) 195.6 670.37 T +4 F +(FI$_J8;zNs$,IT@5$G$9!#) 231.6 657.29 T +19 F +(SJ3_BAD_KANJI_STR) 195.6 637.77 T +4 F +(4A;zJ8;zNs$,IT@5$G$9!#) 231.6 624.7 T +19 F +(SJ3_BAD_HINSI_CODE) 195.6 605.18 T +4 F +(IJ;l%3!<%I$,IT@5$G$9!#) 231.6 592.1 T +19 F +(SJ3_WORD_EXIST) 195.6 572.58 T +4 F +($9$G$KEPO?:Q$G$9!#) 231.6 559.51 T +19 F +(SJ3_DOUON_FULL) 195.6 539.98 T +4 F +($3$l0J>eF12;8l$rEPO?$G$-$^$;$s!#) 231.6 526.91 T +19 F +(SJ3_DICT_FULL) 195.6 507.39 T +4 F +($3$l0J>e<-=q$KEPO?$G$-$^$;$s!#) 231.6 494.31 T +19 F +(SJ3_INDEX_FULL) 195.6 474.79 T +4 F +($3$l0J>e%$%s%G%C%/%9$KEPO?$G$-$^$;$s!#) 231.6 461.72 T +19 F +(SJ3_TOUROKU_FAILED) 195.6 442.2 T +4 F +(B>$N860x$G<-=q$X$NEPO?$r<:GT$7$^$7$?!#) 231.6 429.12 T +FMENDPAGE +%%EndPage: "93" 94 +%%Page: "94" 94 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(2-) 87.88 92.59 T +(94) 97.32 92.59 T +1 F +(!!) 109.14 95.32 T +10 F +(sj3lib ) 116.92 92.59 T +1 F +(%i%$%V%i%j) 136.81 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3lib ) 87.88 736.06 T +1 F +(%i%$%V%i%j0lMw) 107.78 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +13 F +0 X +("#!!) 87.88 689.54 T +18 F +(sj3_syoukyo) 107.72 686.06 T +2 F +(!!!!L>>N) 87.88 652.33 T +5 F +(sj3_syoukyo) 195.6 647.69 T +4 F +(!") 242.12 650.91 T +5 F +(sj3_syoukyo_euc) 253.62 647.69 T +4 F +(!") 317.52 650.91 T +5 F +(sj3_syoukyo_mb \321 ) 329.02 647.69 T +4 F +(C18l:o=|) 405.7 650.91 T +2 F +(!!!!7A<0) 87.88 614.07 T +5 F +(sj3_syoukyo\050yomi, kanji, hinsi\051) 195.6 609.42 T +(sj3_syoukyo_euc\050yomi, kanji, hinsi\051) 195.6 593.13 T +(sj3_syoukyo_mb\050yomi, kanji, hinsi\051) 195.6 576.83 T +(unsigned char *yomi;) 195.6 560.53 T +(/* ) 303.6 560.53 T +4 F +(FI$_J8;zNs$X$N%]%$%s%?) 313.06 563.75 T +5 F +(*/) 416.57 560.53 T +(unsigned char *kanji;) 195.6 544.23 T +(/* ) 303.6 544.23 T +4 F +(4A;zJ8;zNs$X$N%]%$%s%?) 313.06 547.46 T +5 F +(*/) 416.57 544.23 T +(int) 195.6 527.93 T +(hinsi;) 231.6 527.93 T +(/* ) 303.6 527.93 T +4 F +(IJ;l%3!<%I) 313.06 531.16 T +5 F +(*/) 361.36 527.93 T +2 F +(!!!!2r@b) 87.88 494.31 T +4 F +(%f!<%6<-=q$KEPO?$5$l$F$$$kFI$_J8;zNs$X$N%]%$%s%?) 195.6 492.89 T +5 F +(yomi) 418.73 489.67 T +4 F +(!"4A;zJ8;zNs$X) 437.65 492.89 T +($N%]%$%s%?) 195.6 476.59 T +5 F +(kanji) 243.91 473.37 T +4 F +(!"IJ;l%3!<%I) 262.31 476.59 T +5 F +(hinsi) 319.82 473.37 T +4 F +($G;XDj$5$l$?8l$r>C5n$7$^$9!#) 340.02 476.59 T +(FI$_$O0J2<$N%7%U%H) 195.6 444 T +5 F +(JIS) 280.71 440.77 T +4 F +($^$?$O) 294.77 444 T +5 F +(EUC) 324.68 440.77 T +4 F +(%3!<%I$G9=@.$5$l!"$+$D%J%k$G=*N;$7) 345.39 444 T +($F$$$J$1$l$P$J$j$^$;$s!#$^$?$=$ND9$5$O!":GBg$G$b) 195.6 427.7 T +5 F +(31) 418.73 424.48 T +4 F +(J8;z$r1[$\050$F$O$J) 430.23 427.7 T +($j$^$;$s!#) 195.6 411.4 T +5 F +( ) 195.6 375.58 T +4 F +(!) 253.11 281.02 T +($@$B$E$G$I) 301.41 281.02 T +($P$S$V$Y$\134) 349.72 281.02 T +($Q$T$W$Z$]) 398.02 281.02 T +5 F +( ) 195.6 261.5 T +4 F +($!$#$%$'$\051) 204.8 264.72 T +(!!!!$C!!!!) 253.11 264.72 T +($c!!$e!!$g) 301.41 264.72 T +($n) 349.72 264.72 T +5 F +( ) 195.6 245.2 T +4 F +(%t%u%v) 204.8 248.42 T +($?$@$70J2<$NJ8;z$OFI$_$N@hF,$K$J$k$3$H$,=PMh$^$;$s!#) 195.6 215.83 T +5 F +( ) 195.6 180.01 T +4 F +(!<) 204.8 183.23 T +($r) 216.3 183.23 T +($!$#$%$'$\051) 227.8 183.23 T +($C) 276.11 183.23 T +($c$e$g) 287.61 183.23 T +($n) 317.52 183.23 T +(%u%v) 329.02 183.23 T +(4A;z$O$^$?$O%7%U%H) 195.6 150.63 T +5 F +(JIS) 280.71 147.41 T +4 F +($^$?$O) 294.77 150.63 T +5 F +(EUC) 324.68 147.41 T +4 F +(%3!<%I$G9=@.$5$l!"$+$D%J%k$G=*N;$7) 345.39 150.63 T +($F$$$J$1$l$P$J$j$^$;$s!#$^$?$=$ND9$5$O!":GBg$G$b) 195.6 134.34 T +5 F +(32) 418.73 131.11 T +4 F +(J8;z$r1[$\050$F$O$J) 430.23 134.34 T +FMENDPAGE +%%EndPage: "94" 95 +%%Page: "95" 95 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +10 F +0 X +(sj3lib ) 419.58 92.59 T +1 F +(%i%$%V%i%j!!) 439.47 95.32 T +0 F +(2-95) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3lib ) 433.05 736.06 T +1 F +(%i%$%V%i%j0lMw) 452.94 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +4 F +0 X +($j$^$;$s!#) 195.6 689.89 T +(IJ;l%3!<%I$O) 195.6 657.29 T +19 F +(/usr/include/sj3lib.h) 250.81 654.07 T +4 F +($GDj5A$5$l$k0J2<$NIJ;l$N$&$A$N0l$D$G) 339.02 657.29 T +($9!#) 195.6 641 T +2 F +(!!!!%j%?!<%sCM) 87.88 301.2 T +4 F +(%5!<%P$H@\134B3$5$l$F$$$J$$$H$-!"$"$k$$$O%5!<%P$,%@%&%s$7$?$H$-$K$O) 195.6 299.78 T +5 F +(\3201 ) 490.03 296.55 T +4 F +($,JV$5$l$^$9!#) 195.6 283.48 T +(:o=|$G$-$?$H$-$K$O) 195.6 267.18 T +5 F +(0) 280.71 263.96 T +4 F +($,!":o=|$G$-$J$+$C$?$H$-$K$O$=$l0J30$N%\050%i!<%9) 287.62 267.18 T +(%F!<%?%9$,JV$5$l$^$9!#) 195.6 250.88 T +(%\050%i!<%9%F!<%?%9$O) 195.6 218.29 T +19 F +(/usr/include/sj3lib.h) 278.41 215.06 T +4 F +($GDj5A$5$l!">\134:Y$O0J2<$N$H$*$j) 366.62 218.29 T +($G$9!#) 195.6 201.99 T +19 F +(SJ3_DICT_ERROR) 195.6 166.17 T +4 F +(<-=q$,B8:_$7$J$$!"$"$k$$$OEPO?$G$-$J$$<-=q$G$9!#) 231.6 153.1 T +19 F +(SJ3_DICT_LOCKED) 195.6 133.57 T +87.88 119.06 507.41 694.5 C +103.93 326.35 507.41 613.01 C +103.93 326.35 507.41 613.01 R +7 X +0 K +V +130.92 424.84 215.96 439.01 R +V +5 F +0 X +(SJ3_H_SUBNUM) 130.92 431.18 T +223.04 424.84 308.08 439.01 R +7 X +V +4 F +0 X +(!!!!=u?t;l) 223.04 434.4 T +322.26 424.84 407.3 439.01 R +7 X +V +5 F +0 X +(SJ3_H_NAVERB) 322.26 431.18 T +414.38 424.84 499.42 439.01 R +7 X +V +4 F +0 X +(!!%J9T8^CJF0;l) 414.38 434.4 T +130.92 407.12 215.96 421.29 R +7 X +V +5 F +0 X +(SJ3_H_NUMERAL) 130.92 413.46 T +223.04 407.12 308.08 421.29 R +7 X +V +4 F +0 X +(!!!!!!?t;l) 223.04 416.69 T +322.26 407.12 407.3 421.29 R +7 X +V +5 F +0 X +(SJ3_H_BAVERB) 322.26 413.46 T +414.38 407.12 499.42 421.29 R +7 X +V +4 F +0 X +(!!%P9T8^CJF0;l) 414.38 416.69 T +130.92 389.4 215.96 403.58 R +7 X +V +5 F +0 X +(SJ3_H_PREFIX) 130.92 395.75 T +223.04 389.4 308.08 403.58 R +7 X +V +4 F +0 X +(!!!!@\134F,8l) 223.04 398.97 T +322.26 389.4 407.3 403.58 R +7 X +V +5 F +0 X +(SJ3_H_MAVERB) 322.26 395.75 T +414.38 389.4 499.42 403.58 R +7 X +V +4 F +0 X +(!!%^9T8^CJF0;l) 414.38 398.97 T +130.92 371.69 215.96 385.86 R +7 X +V +5 F +0 X +(SJ3_H_POSTFIX) 130.92 378.03 T +223.04 371.69 308.08 385.86 R +7 X +V +4 F +0 X +(!!!!@\134Hx8l) 223.04 381.25 T +322.26 371.69 407.3 385.86 R +7 X +V +5 F +0 X +(SJ3_H_RAVERB) 322.26 378.03 T +414.38 371.69 499.42 385.86 R +7 X +V +4 F +0 X +(!!%i9T8^CJF0;l) 414.38 381.25 T +130.92 353.97 215.96 368.14 R +7 X +V +5 F +0 X +(SJ3_H_ADVERB) 130.92 360.31 T +223.04 353.97 308.08 368.14 R +7 X +V +4 F +0 X +(!!!!!!I{;l) 223.04 363.54 T +322.26 353.97 407.3 368.14 R +7 X +V +5 F +0 X +(SJ3_H_WAVERB) 322.26 360.31 T +414.38 353.97 499.42 368.14 R +7 X +V +4 F +0 X +(!!%o9T8^CJF0;l) 414.38 363.54 T +130.92 336.25 215.96 350.43 R +7 X +V +5 F +0 X +(SJ3_H_ADJECT) 130.92 342.6 T +223.04 336.25 308.08 350.43 R +7 X +V +4 F +0 X +(!!!!7AMF;l) 223.04 345.82 T +322.26 336.25 407.3 350.43 R +7 X +V +5 F +0 X +(SJ3_H_SINGLE) 322.26 342.6 T +414.38 336.25 499.42 350.43 R +7 X +V +4 F +0 X +(!!!!C14A;z) 414.38 345.82 T +130.92 477.99 215.96 492.16 R +7 X +V +5 F +0 X +(SJ3_H_PREFIC) 130.92 484.33 T +223.04 477.99 308.08 492.16 R +7 X +V +4 F +0 X +(!!!!8\051!?6hL>) 223.04 487.55 T +322.26 477.99 407.3 492.16 R +7 X +V +5 F +0 X +(SJ3_H_GAVERB) 322.26 484.33 T +414.38 477.99 499.42 492.16 R +7 X +V +4 F +0 X +(!!%,9T8^CJF0;l) 414.38 487.55 T +130.92 460.27 215.96 474.44 R +7 X +V +5 F +0 X +(SJ3_H_RENTAI) 130.92 466.61 T +223.04 460.27 308.08 474.44 R +7 X +V +4 F +0 X +(!!!!O"BN;l) 223.04 469.84 T +322.26 460.27 407.3 474.44 R +7 X +V +5 F +0 X +(SJ3_H_SAVERB) 322.26 466.61 T +414.38 460.27 499.42 474.44 R +7 X +V +4 F +0 X +(!!%59T8^CJF0;l) 414.38 469.84 T +130.92 442.55 215.96 456.73 R +7 X +V +5 F +0 X +(SJ3_H_CONJUNC) 130.92 448.9 T +223.04 442.55 308.08 456.73 R +7 X +V +4 F +0 X +(!!!!@\134B3;l) 223.04 452.12 T +322.26 442.55 407.3 456.73 R +7 X +V +5 F +0 X +(SJ3_H_TAVERB) 322.26 448.9 T +414.38 442.55 499.42 456.73 R +7 X +V +4 F +0 X +(!!%?9T8^CJF0;l) 414.38 452.12 T +130.92 531.14 215.96 545.31 R +7 X +V +5 F +0 X +(SJ3_H_LNAME) 130.92 537.48 T +223.04 531.14 308.08 545.31 R +7 X +V +4 F +0 X +(!!!!!!ID;z) 223.04 540.7 T +322.26 531.14 407.3 545.31 R +7 X +V +5 F +0 X +(SJ3_H_ZILVERB) 322.26 537.48 T +414.38 531.14 499.42 545.31 R +7 X +V +4 F +0 X +(!!!!%6JQF0;l) 414.38 540.7 T +130.92 513.42 215.96 527.59 R +7 X +V +5 F +0 X +(SJ3_H_FNAME) 130.92 519.76 T +223.04 513.42 308.08 527.59 R +7 X +V +4 F +0 X +(!!!!!!L>A0) 223.04 522.99 T +322.26 513.42 407.3 527.59 R +7 X +V +5 F +0 X +(SJ3_H_ONEVERB) 322.26 519.76 T +414.38 513.42 499.42 527.59 R +7 X +V +4 F +0 X +(!!!!0lCJF0;l) 414.38 522.99 T +130.92 495.7 215.96 509.88 R +7 X +V +5 F +0 X +(SJ3_H_LOCNAME) 130.92 502.05 T +223.04 495.7 308.08 509.88 R +7 X +V +4 F +0 X +(!!!!!!COL>) 223.04 505.27 T +322.26 495.7 407.3 509.88 R +7 X +V +5 F +0 X +(SJ3_H_KAVERB) 322.26 502.05 T +414.38 495.7 499.42 509.88 R +7 X +V +4 F +0 X +(!!%+9T8^CJF0;l) 414.38 505.27 T +130.29 590.53 215.33 604.71 R +7 X +V +0 X +(!!!!%7%s%\134%k) 130.29 600.1 T +222.42 590.53 307.46 604.71 R +7 X +V +0 X +(!!!!@b!!L@) 222.42 600.1 T +321.63 590.53 406.67 604.71 R +7 X +V +0 X +(!!!!%7%s%\134%k) 321.63 600.1 T +413.76 590.53 498.8 604.71 R +7 X +V +0 X +(!!!!!!@b!!L@) 413.76 600.1 T +130.92 566.57 215.96 580.74 R +7 X +V +5 F +0 X +(SJ3_H_NRMNOUN) 130.92 572.91 T +223.04 566.57 308.08 580.74 R +7 X +V +4 F +0 X +(!!!!IaDLL>;l) 223.04 576.14 T +322.26 566.57 407.3 580.74 R +7 X +V +5 F +0 X +(SJ3_H_ADJVERB) 322.26 572.91 T +414.38 566.57 499.42 580.74 R +7 X +V +4 F +0 X +(!!!!7AMFF0;l) 414.38 576.14 T +130.92 548.85 215.96 563.02 R +7 X +V +5 F +0 X +(SJ3_H_PRONOUN) 130.92 555.19 T +223.04 548.85 308.08 563.02 R +7 X +V +4 F +0 X +(!!!!BeL>;l) 223.04 558.42 T +322.26 548.85 407.3 563.02 R +7 X +V +5 F +0 X +(SJ3_H_ADJVERB) 322.26 555.19 T +414.38 548.85 499.42 563.02 R +7 X +V +4 F +0 X +(!!!!7AMFF0;l) 414.38 558.42 T +125.83 332.23 503.34 608.48 R +0.5 H +0 Z +N +126.46 587.98 503.21 587.98 2 L +2 Z +N +125.71 583.73 502.46 583.73 2 L +N +219.59 608.48 219.59 332.23 2 L +N +411.09 608.23 411.09 331.98 2 L +N +311.34 607.98 311.34 331.73 2 L +N +314.4 608.11 314.4 331.86 2 L +N +87.88 119.06 507.41 694.5 C +39.69 56.7 555.6 785.2 C +FMENDPAGE +%%EndPage: "95" 96 +%%Page: "96" 96 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(2-) 87.88 92.59 T +(96) 97.32 92.59 T +1 F +(!!) 109.14 95.32 T +10 F +(sj3lib ) 116.92 92.59 T +1 F +(%i%$%V%i%j) 136.81 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +10 F +0 X +(sj3lib ) 87.88 736.06 T +1 F +(%i%$%V%i%j0lMw) 107.78 738.79 T +87.88 119.06 507.41 694.5 R +7 X +V +4 F +0 X +(<-=q$,FI$_=P$7$N$?$a$K%m%C%/$5$l$F$$$^$9!#) 231.6 689.89 T +19 F +(SJ3_BAD_YOMI_STR) 195.6 670.37 T +4 F +(FI$_J8;zNs$,IT@5$G$9!#) 231.6 657.29 T +19 F +(SJ3_BAD_KANJI_STR) 195.6 637.77 T +4 F +(4A;zJ8;zNs$,IT@5$G$9!#) 231.6 624.7 T +19 F +(SJ3_BAD_HINSI_CODE) 195.6 605.18 T +4 F +(IJ;l%3!<%I$,IT@5$G$9!#) 231.6 592.1 T +19 F +(SJ3_WORD_NOT_EXIST) 195.6 572.58 T +4 F +(;XDj$5$l$?8l$OEPO?$5$l$F$$$^$;$s!#) 231.6 559.51 T +19 F +(SJ3_SYOUKYO_FAILED) 195.6 539.98 T +4 F +(B>$N860x$G<-=q$+$i$N>C5n$r<:GT$7$^$7$?!#) 231.6 526.91 T +FMENDPAGE +%%EndPage: "96" 97 +%%Page: "97" 97 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +10 F +0 X +(sj3lib ) 419.58 92.59 T +1 F +(%i%$%V%i%j!!) 439.47 95.32 T +0 F +(2-97) 486.16 92.59 T +87.88 728.51 507.41 742.68 R +7 X +V +87.88 119.06 507.41 694.5 R +V +87.88 119.06 507.41 694.5 R +V +13 F +0 X +("#!!) 87.88 689.54 T +18 F +(sj3_lockserv) 107.72 686.06 T +5 F +(sj3_lockserv \321 ) 195.6 669.66 T +4 F +(<-=q$N%m%C%/) 255.91 672.88 T +2 F +(!!!!7A<0) 87.88 636.03 T +5 F +(sj3_lockserv\050\051) 195.6 631.39 T +2 F +(!!!!2r@b) 87.88 597.77 T +4 F +(8=:_%*!<%W%s$5$l$F$$$k<-=q$KC18l$rEPO?!?:o=|$G$-$J$$$h$&$K%m%C%/$7) 195.6 596.35 T +($^$9!#) 195.6 580.05 T +(3X=,#I#D$OC18l$N<-=qFb$G$N0LCV$r<\050$7$F$$$^$9!#$3$N$?$a!"%/%i%$%"%s) 195.6 547.46 T +(%H$,3X=,#I#D$rJ];}$7$F$$$k4V$K<-=qEPO?!?:o=|$,9T$o$l$k$H!"%/%i%$%") 195.6 531.16 T +(%s%H$NJ];}$7$F$$$k3X=,#I#D$H<-=q$N4V$GIT@09g$r5/$3$92DG=@-$,$"$j$^) 195.6 514.86 T +($9!#$=$l$rHr$1$k$?$a$K!"%/%i%$%"%s%H$,3X=,#I#D$rJ];}$7$F$$$k4V$O<-) 195.6 498.56 T +(=q%U%!%$%k$r%m%C%/$9$kI,MW$,$"$j$^$9!#) 195.6 482.26 T +2 F +(!!!!%j%?!<%sCM) 87.88 445.42 T +4 F +(%5!<%P$H@\134B3$5$l$F$$$J$$$H$-!"$"$k$$$O%5!<%P$,%@%&%s$7$?$H$-$K$O) 195.6 444 T +5 F +(\3201 ) 490.03 440.77 T +4 F +($,JV$5$l$^$9!#%m%C%/$G$-$?$H$-$K$O) 195.6 427.7 T +5 F +(0 ) 354.32 424.48 T +4 F +($,!"%m%C%/$G$-$J$+$C$?$H$-$K$O) 361.22 427.7 T +($=$l0J30$NCM$,JV$5$l$^$9!#) 195.6 411.4 T +FMENDPAGE +%%EndPage: "97" 98 +%%Page: "98" 98 +595.3 841.9 0 FMBEGINPAGE +31.19 708.67 564.09 714.34 R +5 X +0 K +V +87.88 85.05 507.41 99.22 R +7 X +V +0 F +0 X +(2-) 87.88 92.59 T +(98) 97.32 92.59 T +1 F +(!!) 109.14 95.32 T +10 F +(sj3lib ) 116.92 92.59 T +1 F +(%i%$%V%i%j) 136.81 95.32 T +87.88 728.51 507.41 742.68 R +7 X +V +87.88 119.06 507.41 694.5 R +V +87.88 119.06 507.41 694.5 R +V +13 F +0 X +("#!!) 87.88 689.54 T +18 F +(sj3_unlockserv) 107.72 686.06 T +2 F +(!!!!L>>N) 87.88 652.33 T +5 F +(sj3_unlockserv \321 ) 195.6 647.69 T +4 F +(<-=q$N%"%s%m%C%/) 265.11 650.91 T +2 F +(!!!!7A<0) 87.88 614.07 T +5 F +(sj3_unlockserv\050\051) 195.6 609.42 T +2 F +(!!!!2r@b) 87.88 575.8 T +5 F +(sj3_lockserv ) 195.6 571.16 T +4 F +(4X?t$G%m%C%/$5$l$F$$$k<-=q$KC18l$rEPO?!?:o=|$G$-$k$h$&$K) 244.41 574.38 T +(%"%s%m%C%/$7$^$9!#) 195.6 558.08 T +(3X=,#I#D$OC18l$N<-=qFb$G$N0LCV$r<\050$7$F$$$^$9!#$3$N$?$a!"%/%i%$%"%s) 195.6 525.49 T +(%H$,3X=,#I#D$rJ];}$7$F$$$k4V$K<-=qEPO?!?:o=|$,9T$o$l$k$H!"%/%i%$%") 195.6 509.19 T +(%s%H$NJ];}$7$F$$$k3X=,#I#D$H<-=q$N4V$GIT@09g$r5/$3$92DG=@-$,$"$j$^) 195.6 492.89 T +($9!#$=$l$rHr$1$k$?$a$K!"%/%i%$%"%s%H$,3X=,#I#D$rJ];}$7$F$$$k4V$O<-) 195.6 476.59 T +(=q%U%!%$%k$r%m%C%/$9$kI,MW$,$"$j$^$9!#) 195.6 460.3 T +(%/%i%$%"%s%H$,<-=q$r%m%C%/$7$F$$$k4V$O!"<-=qEPO?!?:o=|$9$k$3$H$,$G) 195.6 444 T +($-$^$;$s!#%/%i%$%"%s%H$O3X=,#I#D$rJ];}$9$kI,MW$,$J$/$J$C$?$H$-$K) 195.6 427.7 T +($O!"$?$@$A$K<-=q$r%"%s%m%C%/$9$k$Y$-$G$9!#) 195.6 411.4 T +2 F +(!!!!%j%?!<%sCM) 87.88 374.55 T +4 F +(%5!<%P$H@\134B3$5$l$F$$$J$$$H$-!"$"$k$$$O%5!<%P$,%@%&%s$7$?$H$-$K$O) 195.6 373.14 T +5 F +(\3201 ) 490.03 369.91 T +4 F +($,JV$5$l$^$9!#) 195.6 356.84 T +(%"%s%m%C%/$G$-$?$H$-$K$O) 195.6 340.54 T +5 F +(0 ) 308.31 337.32 T +4 F +($,!"%"%s%m%C%/$G$-$J$+$C$?$H$-$K$O$=$l0J) 315.21 340.54 T +(30$NCM$,JV$5$l$^$9!#) 195.6 324.24 T +FMENDPAGE +%%EndPage: "98" 99 +%%Trailer +%%BoundingBox: 0 0 595.3 841.9 +%%Pages: 98 1 +%%DocumentFonts: Helvetica +%%+ GothicBBB-Medium-H +%%+ Helvetica-Bold +%%+ Times-Roman +%%+ Ryumin-Light-H +%%+ Helvetica-BoldOblique +%%+ Times-Bold +%%+ Bookman-Demi +%%+ Courier +%%+ Times-Italic diff --git a/doc/doc/hinsi.ms b/doc/doc/hinsi.ms new file mode 100644 index 0000000..ec0bd06 --- /dev/null +++ b/doc/doc/hinsi.ms @@ -0,0 +1,489 @@ +.\" +.\"Copyright (c) 1991-1994 Sony Corporation +.\" +.\"Permission is hereby granted, free of charge, to any person obtaining +.\"a copy of this software and associated documentation files (the +.\""Software"), to deal in the Software without restriction, including +.\"without limitation the rights to use, copy, modify, merge, publish, +.\"distribute, sublicense, and/or sell copies of the Software, and to +.\"permit persons to whom the Software is furnished to do so, subject to +.\"the following conditions: +.\" +.\"The above copyright notice and this permission notice shall be +.\"included in all copies or substantial portions of the Software. +.\" +.\"THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +.\"EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +.\"MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +.\"IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, +.\"DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +.\"OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +.\"THE USE OR OTHER DEALINGS IN THE SOFTWARE. +.\" +.\"Except as contained in this notice, the name of Sony Corporation +.\"shall not be used in advertising or otherwise to promote the sale, use +.\"or other dealings in this Software without prior written authorization +.\"from Sony Corporation. +.\" +.\"Author: Noriyuki Hosoe, Sony Corporation +.\" +.\"$SonyRCSfile: hinsi.ms,v $ +.\"$SonyRevision: 1.1 $ +.\"$SonyDate: 1994/06/03 08:00:46 $ +.\" +.TL +\fBsj3serv\fP で使用される品詞 +.RS +.LP +ここでは \fBsj3serv\fP で使用している品詞分けについて説明します。 +.RE + +.SH +**注意点** +.RS +.SH +上一段・下一段動詞の扱い +.RS +例えば、カ行上一段動詞 "起きる" の場合、 +.RS +語幹は     "お" +.br +活用語尾は   "き、きる、きれ、きろ、きよ" +.RE +となります。 +.br +活用語尾の1字目に注目すると、いずれの活用形においても共通なので、 +便宜的に "おき" までを語幹として扱うことにします。 +これによって "行" 及び "上下"の区別は必要なくなり、 +ただ "一段動詞" だけの分類分けで済ませています。 +.RE +.RE + +.NH +名詞 +.RS +.LP +固有名詞を除いた名詞です。 +.br +これらは複合名詞を作りやすいか否かによって2つに分けられます。 +.br +複合名詞を作りやすいか否かは、主観によって判断しています。 +.RE +.NH 2 +複合名詞を作りやすい名詞 +.RS +.IP 名1(MEISI_1) \w'            'u +他の分類に含まれない、複合名詞を作りやすい名詞 +.IP 名2(MEISI_2) +接頭語 "お" +.IP 名3(MEISI_3) +接頭語 "ご" +.IP 名4(MEISI_4) +接尾語 "的" "化" のどちらか +.IP 名5(MEISI_5) +名詞+サ変動詞、接頭語 "お" +.IP 名6(MEISI_6) +名詞+サ変動詞 +.IP 名7(MEISI_7) +名詞+サ変動詞、接頭語 "ご" +.IP 名8(MEISI_8) +名詞+形容動詞 +.IP 名9(MEISI_9) +名詞+形容動詞、接頭語 "お" +.IP 名10(MEISI_10) +名詞+形容動詞、接頭語 "ご" +.IP 名11(MEISI_11) +名詞+副詞 +.RE +.RE +.NH 2 +複合名詞を作りにくい名詞 +.RS +.IP 代1(D_MEISI_1) \w'            'u +他の分類に含まれない、複合名詞を作りにくい名詞 +.IP 代2(D_MEISI_2) +接尾語 "さん" +.IP 代3(D_MEISI_3) +"〜をする" +.IP 代4(D_MEISI_4) +名詞+サ変動詞 +.IP 代5(D_MEISI_5) +名詞+形容動詞 +.IP 代6(D_MEISI_6) +名詞+副詞 +.RE +.RE + +.NH +固有名詞 +.RS +.IP 苗字(MYOUJI) \w'            'u +人名の姓 +.IP 名前(NAMAE) +人名の名 +.IP 企業(KIGYOU) +企業名 +.IP 地名(TIMEI) +都道府県・区郡・市町村 および主要都市の駅名 +.IP 県区(KEN_KU) +都道府県・区の・・県(都,府,区)付き +.RE +.RE + +.NH +その他体言 +.RS +.IP 連体(RENTAISI) \w'            'u +連体詞 +.IP 接続(SETUZOKU) +接続詞 +.IP 感動(KANDOUSI) +感動詞 +.IP 助数(JOSUUSI1) +"第〜" が接続できる +.IP 助数2(JOSUUSI2) +"第〜”が接続できない +.IP 数詞(SUUSI) +数詞 +.RE +.RE + +.NH +接頭語 +.RS +.IP 接頭1(SETTOU_1) \w'            'u +名詞(サ変名詞・刑動名詞含む)に接続 +.IP 接頭2(SETTOU_2) +地名に接続(北、南、西、東 等) +.IP 接頭3(SETTOU_3) +人名に接続(故 など) +.IP 接頭4(SETTOU_4) +数詞に接続(第、計 等) +.IP 接頭5(SETTOU_5) +接頭1 より接続が強い +.RE +.RE + +.NH +接尾語 +.RS +.IP 接尾1(SETUBI_1) \w'            'u +名詞に接続、名詞扱い +.IP 接尾2(SETUBI_2) +名詞に接続、名詞扱い。ただし連濁形 +.IP 接尾3(SETUBI_3) +接尾1 より接続が強い +.IP 接尾4(SETUBI_4) +地名に接続、名詞扱い +.IP 接尾5(SETUBI_5) +名詞に接続、形容詞扱い +.IP 接尾6(SETUBI_6) +名詞に接続、形容動詞扱い +.IP 接尾7(SETUBI_7) +名詞に接続、サ変名詞扱い +.IP 接尾8(SETUBI_8) +名詞に接続、一段動詞扱い +.IP 接尾9(SETUBI_9) +接尾語+副詞 +.RE +.RE + +.NH +副詞 +.RS +.IP 副1(FUKUSI_1) \w'            'u +接続なし +.IP 副2(FUKUSI_2) +"〜と" 接続 +.IP 副3(FUKUSI_3) +"〜と", サ変動詞語尾が接続 +.IP 副4(FUKUSI_4) +サ変動詞語尾が接続 +.IP 副5(FUKUSI_5) +"〜に" 接続 +.IP 副6(FUKUSI_6) +"〜も" 接続 +.IP 副7(FUKUSI_7) +"〜の" 接続 +.IP 副8(FUKUSI_8) +"〜と", "〜です、〜だ" 接続 +.IP 副9(FUKUSI_9) +"〜と", サ変動詞語尾, "〜です、〜だ" 接続 +.RE +.RE + +.NH +形容詞 +.RS +.RS +.DS +[さ]  "さ" が接続して名詞化する +[げ]  "げ" が接続して形容動詞化する +[め]  "め" が接続して形容動詞化する +[み]  "み" が接続して名詞化する +[がる] "がる" が接続して動詞化する +.DE +.RE +.sp +.IP 形1(KEIYOUSI_1) \w'            'u +上記付属語接続なし +.IP 形2(KEIYOUSI_2) +[さ] +.IP 形3(KEIYOUSI_3) +[さ、げ] +.IP 形4(KEIYOUSI_4) +[さ、がる] +.IP 形5(KEIYOUSI_5) +[さ、げ、がる] +.IP 形6(KEIYOUSI_6) +[さ、め、げ] +.IP 形7(KEIYOUSI_7) +[さ、め、げ、がる] +.IP 形8(KEIYOUSI_8) +[さ、み、め、げ、がる] +.IP 形9(KEIYOUSI_9) +接頭語 "お", [さ、げ、がる] +.IP 形10(KEIYOUSI_10) +接頭語 "お", [さ、め、げ、がる] +.IP 形11(KEIYOUSI_11) +[さ、み、め] +.RE +.RE + +.NH +形容動詞 +.RS +.IP 形動1(KE_DOUSI_1) \w'            'u +ダ活用 +.IP 形動2(KE_DOUSI_2) +タリ活用 +.IP 形動3(KE_DOUSI_3) +ダ活用、語幹で連体修飾 +.IP 形動4(KE_DOUSI_4) +ダ活用、"〜さ" +.IP 形動5(KE_DOUSI_5) +ダ活用、"〜さ"、語幹で連体修飾 +.IP 形動6(KE_DOUSI_6) +ダ活用、接頭語 "お" が接続 +.IP 形動7(KE_DOUSI_7) +ダ活用、"〜さ"、接頭語 "お" が接続 +.IP 形動8(KE_DOUSI_8) +ダ活用、接頭語 "ご" が接続 +.IP 形動9(KE_DOUSI_9) +ダ活用、"〜の" +.RE +.RE + +.NH +動詞 +.RS +.IP サ変(DO_SAHEN) \w'            'u +サ変動詞、連用名詞扱いできない +.IP ザ変(DO_ZAHEN) +ザ変動詞。連用名詞扱いできない + +.IP 一段1(DO_1DAN_1) \w'            'u +連用名詞扱いできない +.IP 一段2(DO_1DAN_2) +連用名詞扱いできない、接頭語 "お" +.IP 一段3(DO_1DAN_3) +連用名詞扱いできる +.IP 一段4(DO_1DAN_4) +連用名詞扱いできる、接頭語 "お" + +.IP カ五1(DO_KAGO_1) \w'            'u +連用名詞扱いできない、 +.IP カ五2(DO_KAGO_2) +連用名詞扱いできない、接頭語 "お" +.IP カ五3(DO_KAGO_3) +連用名詞扱いできる +.IP カ五4(DO_KAGO_4) +連用名詞扱いできる、接頭語 "お" +.IP カ五5(DO_KAGO_5) +連用名詞扱いできない、[け、ける、けれ] +.IP カ五6(DO_KAGO_6) +連用名詞扱いできない、[け、ける、けれ]、接頭語 "お" +.IP カ五7(DO_KAGO_7) +連用名詞扱いできる、[け、ける、けれ] +.IP カ五8(DO_KAGO_8) +連用名詞扱いできる、[け、ける、けれ]、接頭語 "お" + +.IP ガ五1(DO_GAGO_1) \w'            'u +連用名詞扱いできない +.IP ガ五2(DO_GAGO_2) +連用名詞扱いできない、接頭語 "お" +.IP ガ五3(DO_GAGO_3) +連用名詞扱いできる +.IP ガ五4(DO_GAGO_4) +連用名詞扱いできる、接頭語 "お" +.IP ガ五5(DO_GAGO_5) +連用名詞扱いできない、[げ、げる、げれ] +.IP ガ五6(DO_GAGO_6) +連用名詞扱いできない、[げ、げる、げれ]、接頭語 "お" +.IP ガ五7(DO_GAGO_7) +連用名詞扱いできる、[げ、げる、げれ] +.IP ガ五8(DO_GAGO_8) +連用名詞扱いできる、[げ、げる、げれ]、接頭語 "お" + +.IP サ五1(DO_SAGO_1) \w'            'u +連用名詞扱いできない +.IP サ五2(DO_SAGO_2) +連用名詞扱いできない、接頭語 "お" +.IP サ五3(DO_SAGO_3) +連用名詞扱いできる +.IP サ五4(DO_SAGO_4) +連用名詞扱いできる、接頭語 "お" +.IP サ五5(DO_SAGO_5) +連用名詞扱いできない、[せ、せる、せれ] +.IP サ五6(DO_SAGO_6) +連用名詞扱いできない、[せ、せる、せれ]、接頭語 "お" +.IP サ五7(DO_SAGO_7) +連用名詞扱いできる、[せ、せる、せれ] +.IP サ五8(DO_SAGO_8) +連用名詞扱いできる、[せ、せる、せれ]、接頭語 "お" + +.IP タ五1(DO_TAGO_1) \w'            'u +連用名詞扱いできない +.IP タ五2(DO_TAGO_2) +連用名詞扱いできない、接頭語 "お" +.IP タ五3(DO_TAGO_3) +連用名詞扱いできる +.IP タ五4(DO_TAGO_4) +連用名詞扱いできる、接頭語"お" +.IP タ五5(DO_TAGO_5) +連用名詞扱いできない、[て、てる、てれ] +.IP タ五6(DO_TAGO_6) +連用名詞扱いできない、[て、てる、てれ]、接頭語 "お" +.IP タ五7(DO_TAGO_7) +連用名詞扱いできる、[て、てる、てれ] +.IP タ五8(DO_TAGO_8) +連用名詞扱いできる、[て、てる、てれ]、接頭語 "お" + +.IP ナ五(DO_NAGO) \w'            'u +連用名詞扱いできない + +.IP バ五1(DO_BAGO_1) \w'            'u +連用名詞扱いできない +.IP バ五2(DO_BAGO_2) +連用名詞扱いできない、"お" +.IP バ五3(DO_BAGO_3) +連用名詞扱いできる +.IP バ五4(DO_BAGO_4) +連用名詞扱いできる、"お" +.IP バ五5(DO_BAGO_5) +連用名詞扱いできない、[べ、べる、べれ] +.IP バ五6(DO_BAGO_6) +連用名詞扱いできない、[べ、べる、べれ]、接頭語 "お" +.IP バ五7(DO_BAGO_7) +連用名詞扱いできる、[べ、べる、べれ] +.IP バ五8(DO_BAGO_8) +連用名詞扱いできる、[べ、べる、べれ]、接頭語 "お" + +.IP マ五1(DO_MAGO_1) \w'            'u +連用名詞扱いできない、 +.IP マ五2(DO_MAGO_2) +連用名詞扱いできない、"お" +.IP マ五3(DO_MAGO_3) +連用名詞扱いできる +.IP マ五4(DO_MAGO_4) +連用名詞扱いできる、"お" +.IP マ五5(DO_MAGO_5) +連用名詞扱いできない、[め、める、めれ] +.IP マ五6(DO_MAGO_6) +連用名詞扱いできない、[め、める、めれ]、接頭語 "お" +.IP マ五7(DO_MAGO_7) +連用名詞扱いできる、[め、める、めれ] +.IP マ五8(DO_MAGO_8) +連用名詞扱いできる、[め、める、めれ]、接頭語 "お" + +.IP ラ五1(DO_RAGO_1) \w'            'u +連用名詞扱いできない +.IP ラ五2(DO_RAGO_2) +連用名詞扱いできない、"お" +.IP ラ五3(DO_RAGO_3) +連用名詞扱いできる +.IP ラ五4(DO_RAGO_4) +連用名詞扱いできる、接頭語 "お" +.IP ラ五5(DO_RAGO_5) +連用名詞扱いできない、[れ、れる、れれ] +.IP ラ五6(DO_RAGO_6) +連用名詞扱いできない、[れ、れる、れれ]、接頭語 "お" +.IP ラ五7(DO_RAGO_7) +連用名詞扱いできる、[れ、れる、れれ] +.IP ラ五8(DO_RAGO_8) +連用名詞扱いできる、[れ、れる、れれ]、接頭語 "お" + +.IP ワ五1(DO_WAGO_1) \w'            'u +連用名詞扱いできない +.IP ワ五2(DO_WAGO_1) +連用名詞扱いできない、"お" +.IP ワ五3(DO_WAGO_1) +連用名詞扱いできる +.IP ワ五4(DO_WAGO_1) +連用名詞扱いできる、接頭語 "お" +.IP ワ五5(DO_WAGO_1) +連用名詞扱いできない、[え、える、えれ] +.IP ワ五6(DO_WAGO_1) +連用名詞扱いできない、[え、える、えれ]、接頭語 "お" +.IP ワ五7(DO_WAGO_1) +連用名詞扱いできる、[え、える、えれ] +.IP ワ五8(DO_WAGO_1) +連用名詞扱いできる、[え、える、えれ]、接頭語 "お" +.RE +.RE + +.NH +特殊品詞 +.RS +分類不可能な語、特殊な活用をする語句など +.sp +.IP 単漢(TANKANJI) \w'            'u +単漢字 +.sp +.IP サ変未1(SP_SA_MI1) \w'            'u +さ +.IP サ変未2(SP_SA_MI2) +せ +.IP サ変未用(SP_SA_YOU) +し +.IP サ変終体(SP_SA_SYU) +する +.IP サ変仮(SP_SA_KAT) +すれ +.IP サ変命1(SP_SA_ME1) +しろ +.IP サ変命2(SP_SA_ME2) +せよ +.sp +.IP カ変未(SP_KA_MIZ) +こ +.IP カ変用(SP_KA_YOU) +き +.IP カ変終体(SP_KA_SYU) +くる +.IP カ変仮(SP_KA_KAT) +くれ +.IP カ変命(SP_KA_ME1) +こい +.sp +.IP 丁寧1(TEINEI1) +いらっしゃい、おっしゃい、ください、なさい +.IP 丁寧2(TEINEI2) +ござい +.sp +.IP カ五音便(SP_KA_ONB) +いっ +.sp +.IP 特殊副(SP_FUKUSI) +こう、そう、どう +.sp +.IP 挨拶(AISATU) +ありがとう、おめでとう、おはよう +.sp +.IP 特殊形容(SP_KEIYOUSI) +いい +.sp +.IP 一括(IKKATU) \w'            'u +文節変換では参照されない語。"関連辞書" で関連を定義するために存在する語。 +.RE +.RE diff --git a/doc/doc/makedict.ms b/doc/doc/makedict.ms new file mode 100644 index 0000000..35a5d09 --- /dev/null +++ b/doc/doc/makedict.ms @@ -0,0 +1,91 @@ +.\" +.\"Copyright (c) 1991-1994 Sony Corporation +.\" +.\"Permission is hereby granted, free of charge, to any person obtaining +.\"a copy of this software and associated documentation files (the +.\""Software"), to deal in the Software without restriction, including +.\"without limitation the rights to use, copy, modify, merge, publish, +.\"distribute, sublicense, and/or sell copies of the Software, and to +.\"permit persons to whom the Software is furnished to do so, subject to +.\"the following conditions: +.\" +.\"The above copyright notice and this permission notice shall be +.\"included in all copies or substantial portions of the Software. +.\" +.\"THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +.\"EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +.\"MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +.\"IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, +.\"DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +.\"OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +.\"THE USE OR OTHER DEALINGS IN THE SOFTWARE. +.\" +.\"Except as contained in this notice, the name of Sony Corporation +.\"shall not be used in advertising or otherwise to promote the sale, use +.\"or other dealings in this Software without prior written authorization +.\"from Sony Corporation. +.\" +.\"Author: Noriyuki Hosoe, Sony Corporation +.\" +.\"$SonyRCSfile: makedict.ms,v $ +.\"$SonyRevision: 1.1 $ +.\"$SonyDate: 1994/06/03 08:00:47 $ +.\" +.TL +辞書生成ツール makedict +.RS +.LP +\fBmakedict\fP は、仮名漢字変換サーバ \fBsj3serv\fP で使用する辞書を +作成するためのツールです。 +.sp +このツールを使用することにより、エディタで編集された辞書を \fBsj3serv\fP で +使用可能な形態に変換することが出来ます。 +.sp +編集可能ファイルは、以下のような形式をしています。 +.RS +.DS +あ           亜           接頭1: +あ           開           カ五2: +あ           空           カ五4: +あ           明           カ五2: +あ           飽           カ五3: +            : +.DE +.RE +それぞれのフィールドは以下の意味を持ちます。 +.RS +.DS +第1フィールド  読み(全角ひらがな) +第2フィールド  目的の出力 +第3フィールド  品詞の並び +.DE +.RE +ここで各フィールド間は、1つ以上のスペースあるいはタブで区切られている +必要があります。また各行は、読みでソートされていなければなりません。 +.sp +第3フィールド(品詞のフィールド)には、別紙で定義されている品詞を記述します。 +.sp +1つの熟語にたいして複数の品詞を指定するときには、以下のようにします。 +.RS +.DS +あい          愛           代4:サ五5: +あえ          あえ          ガ五3:一段1: +あお          青           代1:形11: +            : +.DE +.RE +なおこの辞書では、体言(名詞・副詞・連体詞など非活用のもの)については +熟語そのままを、用言(動詞・形容詞・形容動詞など活用するもの)に +関しては語幹のみを登録しなければなりません。 +.sp +このような編集可能ファイルから \fBsj3serv\fP で使用可能な辞書を生成するには、 +\fBmakedict\fP を使用して以下のようにします。 +.RS +.DS +makedict \fIsrc_file_name\fP \fIdst_file_name\fP +.DE +.RE +エラーがなく実行が終了したときには、\fIsrc_file_name\fP で指定された +編集可能ファイルが変換され、\fIdst_file_name\fP で指定されたファイルに +格納されています。 +.RE diff --git a/doc/doc/sj3lib.ms b/doc/doc/sj3lib.ms new file mode 100644 index 0000000..706a71e --- /dev/null +++ b/doc/doc/sj3lib.ms @@ -0,0 +1,619 @@ +.\" +.\"Copyright (c) 1991-1994 Sony Corporation +.\" +.\"Permission is hereby granted, free of charge, to any person obtaining +.\"a copy of this software and associated documentation files (the +.\""Software"), to deal in the Software without restriction, including +.\"without limitation the rights to use, copy, modify, merge, publish, +.\"distribute, sublicense, and/or sell copies of the Software, and to +.\"permit persons to whom the Software is furnished to do so, subject to +.\"the following conditions: +.\" +.\"The above copyright notice and this permission notice shall be +.\"included in all copies or substantial portions of the Software. +.\" +.\"THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +.\"EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +.\"MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +.\"IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, +.\"DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +.\"OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +.\"THE USE OR OTHER DEALINGS IN THE SOFTWARE. +.\" +.\"Except as contained in this notice, the name of Sony Corporation +.\"shall not be used in advertising or otherwise to promote the sale, use +.\"or other dealings in this Software without prior written authorization +.\"from Sony Corporation. +.\" +.\"Author: Noriyuki Hosoe, Sony Corporation +.\"Modifier: Nobuyuki Tanaka, Sony Corporation +.\" +.\"$SonyRCSfile: sj3lib.ms,v $ +.\"$SonyRevision: 1.1 $ +.\"$SonyDate: 1994/06/03 08:00:48 $ +.\" +.TL +sj3lib ライブラリ +.AB +.LP +\fBsj3lib\fP は、ソニー(株)で開発された仮名漢字変換サーバ \fIsj3serv\fP と +通信し仮名漢字変換を行う、クライアント用ライブラリです。 +.sp +アプリケーションプログラムは、\fBsj3lib\fP を使用することにより +\& \fIsj3serv\fP を使用した仮名漢字変換を行うことが可能となります。 +.AE +.SH +はじめに +.RS +.IP ・ +\fBsj3lib\fP では、関数や変数に sj3_ で始まる名前を使用していますので、 +sj3_ で始まる関数名、変数名の使用はお避けください。 +.IP ・ +\fBsj3lib\fP で扱う文字コードは、関数名の最後に "_euc" がついているときは、 +EUC です。"_mb" がついている場合は、引数の文字コードがプログラム実行時の +ロケールに依存します。なにも付いてないときには、引数の文字コードにシフト +JIS を使用します。 +.IP ・ +メイン辞書、ユーザ辞書、学習ファイルは、接続するサーバの動作しているマシン上のものが使用されます。 +.br +これらのファイルは、デフォルトではディレクトリ \fB/usr/local/lib/sj3/dict\fP の下におかれますが、サーバのセットアップファイルにより変更が可能です。 +.IP ・ +ユーザ辞書と学習ファイルは、関数 sj3_open で指定されたユーザ名を USER と +すれば、\fBuser/USER/private.dic\fP と \fBuser/USER/study.dat\fP です。 +.RE +.NH +サーバの使用開始 +.RS +.LP +.DS +sj3_open(hname, uname) +char *hname; /* ホスト名へのポインタ */ +char *uname; /* ユーザ名へのポインタ */ +.DE +.sp +文字列へのポインタ \fBhname\fP で指定されたホスト上のサーバ \fIsj3serv\fP に +対し、ユーザ名としてポインタ \fBuname\fP で指定される文字列を使用し、 +接続を試みます。 +.sp +接続には、ホスト名へのポインタ \fBhname\fP がナルポインタ、あるいは、 +空の文字列または文字列 unix へのポインタの時には AF_UNIX ソケットを、 +それ以外のときには AF_INET ソケットを使用します。 +.sp +接続できたときには、サーバの立ち上げ時に指定された辞書ディレクトリ内にある +メイン辞書 sj3main.dic、ユーザ辞書 user/\fBuname\fP/private.dic、 +学習ファイル user/\fBuname\fP/study.dat をオープンします。 +.br +指定されたユーザ用のディレクトリ、ユーザ辞書、学習ファイルが +存在しないときには、それらの生成を試みます。 +.sp +この関数は、かな漢字変換ルーチンを使用する以前に必ず呼ばなければなりません。 +.sp +サーバと正常に接続できたときには 0 を、何かエラーのあったときには 0 以外の +エラーステータスを返します。 +.sp +エラーステータスはヘッダファイル \fB/usr/local/include/sj3lib.h\fP で +定義されるビットアサインされた値で、詳細は以下のとおりです。 +.sp +.IP "\fBSJ3_SERVER_DEAD\fP +接続処理中にサーバがダウンしました。 +.IP "\fBSJ3_CONNECT_ERROR\fP +サーバがない、あるいは接続できません。 +.IP "\fBSJ3_ALREADY_CONNECTED\fP +すでにサーバと接続済です。 +.IP "\fBSJ3_CANNOT_OPEN_MDICT\fP +メイン辞書がオープンできません。 +.IP "\fBSJ3_CANNOT_OPEN_UDICT\fP +ユーザ辞書がオープンできません。 +.IP "\fBSJ3_CANNOT_OPEN_STUDY\fP +学習ファイルがオープンでいません。 +.IP "\fBSJ3_CANNOT_MAKE_UDIR\fP +個人ファイルのためのディレクトリが作成できません。 +.IP "\fBSJ3_CANNOT_MAKE_UDICT\fP +ユーザ辞書が作成できません。 +.IP "\fBSJ3_CANNOT_MAKE_STUDY\fP +学習ファイルが作成できません。 +.RE +.sp +エラーステータスには、これらのうち少なくとも 1 ビットが立っています。 +.br +エラーステータスのうち \fBSJ3_SERVER_DEAD\fP あるいは \fBSJ3_CONNECT_ERROR\fP が +返されたとき以外は、サーバとの接続が確立されています。 +.RE + +.NH +サーバの使用終了 +.RS +.LP +.DS +sj3_close() +.DE +.sp +\fIsj3_open\fP によって確立されたサーバとの接続を切り放します。 +.br +メイン辞書、ユーザ辞書、学習ファイルのすべてがオープンされているものとして、 +それらのクローズを試みます。 +.sp +この関数は、かな漢字変換ルーチンの使用を終えるときに呼ばなければなりません。 +.sp +サーバとの使用を正常に終了できたときには 0 を、 +何かエラーのあったときには 0 以外のエラーステータスを返します。 +.sp +エラーステータスはヘッダファイル \fB/usr/local/include/sj3lib.h\fP で +定義されるビットアサインされた値で、詳細は以下のとおりです。 +.sp +.IP "\fBSJ3_SERVER_DEAD\fP +切り放し処理中にサーバがダウンしました。 +.IP "\fBSJ3_DISCONNECT_ERROR\fP +サーバで内部エラーがありました。 +.IP "\fBSJ3_NOT_CONNECTED\fP +サーバと接続されていません。 +.IP "\fBSJ3_NOT_OPENED_MDICT\fP +メイン辞書がオープンされていません。 +.IP "\fBSJ3_NOT_OPENED_UDICT\fP +ユーザ辞書がオープンされていません。 +.IP "\fBSJ3_NOT_OPENED_STUDY\fP +学習ファイルがオープンされていません。 +.IP "\fBSJ3_CLOSE_MDICT_ERROR\fP +メイン辞書がクローズできません。 +.IP "\fBSJ3_CLOSE_UDICT_ERROR\fP +ユーザ辞書がクローズできません。 +.IP "\fBSJ3_CLOSE_STUDY_ERROR\fP +学習ファイルがクローズできません。 +.RE +.sp +エラーステータスには、これらのうち少なくとも 1 ビットが立っています。 +.br +どのエラーステータスが返っても、サーバとの接続は切れています。 +.RE + +.NH +文章一括変換 +.RS +.LP +.DS +sj3_getkan(yomi, bun, knjbuf, knjsiz) +sj3_getkan_euc(yomi, bun, knjbuf, knjsiz) +sj3_getkan_mb(yomi, bun, knjbuf, knjsiz) +unsigned char *yomi; /* 読み文字列へのポインタ */ +struct bunsetu bun[]; /* 文節構造体へのポインタ */ +unsigned char *knjbuf; /* 漢字文字列格納領域へのポインタ */ +int knjsiz; /* 漢字文字列格納領域の大きさ */ +.DE +.sp +与えられた読みを文章一括変換し、その結果を返します。 +.br +ポインタ \fByomi\fP で指定された読み文字列をかな漢字変換し、 +ポインタ \fBknjbuf\fP で示される大きさ \fBknjsiz\fP の領域に +変換結果の漢字文字列を、配列 \fBstruct bunsetu bun[]\fP に +各文節に関する情報をセットします。 +.br +\fBstruct bunsetu\fP はヘッダファイル \fB/usr/local/include/sj3lib.h\fP で +宣言されている以下のような構造体です。 +.sp +.RS +.DS +struct bunsetu { + int srclen; /* 読みの長さ */ + int destlen; /* 漢字の長さ */ + unsigned char *srcstr; /* 読みへのポインタ */ + unsigned char *deststr; /* 漢字へのポインタ */ + struct studyrec dcid; /* 学習のためのデータ */ +}; +.DE +.RE +.sp +読みが漢字文字列に変換できたときには、これらの要素はきちんと設定されますが、 +ポインタ \fBknjbuf\fP で示される領域の大きさ \fBbufsiz\fP が小さいなどの +原因で漢字文字列を返せない文節が生じたときには、その読み文字列への +ポインタを \fBsrcstr\fP に、またその長さを \fBsrclen\fP に持ち、 +\fBdestlen\fP が 0 で \fBdeststr\fP がナルポインタの構造体が生成されます。 +.sp +読みとして与えられる文字列は、 +シフト JIS または EUC の 2 バイトコードで構成されていることが原則ですが、 +1 バイトコードが混じっていてもかまいません。 +ただしその際には、1 バイトコードは漢字に変換されることはありません。 +.br +読み文字列はナルで終了していなければならず、 +最大でも 256 文字を越えてはなりません。 +.br +配列 \fBstruct bunsetu bun[]\fP の実体は、ユーザプログラム側で +取らなければなりません。 +その大きさは最大で読み文字数分必要となります。 +.br +変換時に必要とされるポインタ \fBknjbuf\fP で示される領域の大きさは、 +変換する文字数や登録されている単語の長さなどによって +変化します。最低でも 1024 バイト程度はあったほうが良いでしょう。 +.sp +サーバと接続されていないとき、あるいはサーバがダウンしたときには \-1 が +返されます。 +.br +読みがナル文字列だった、あるいは読みが長すぎたときには 0 が返されます。 +.br +正常終了したときには、配列 \fBstruct sj3bunsetu bun[]\fP にセットされた +文節数が返されます。 +.RE + +.NH +同音意義語数の取得 +.RS +.LP +.DS +sj3_douoncnt(yomi) +sj3_douoncnt_euc(yomi) +sj3_douoncnt_mb(yomi) +unsigned char *yomi; /* 読み文字列へのポインタ */ +.DE +.sp +与えられた読みを文節変換し、リターン値として同音意義語数を返します。 +.sp +ポインタ \fByomi\fP によって読みとして与えられる文字列は、 +シフト JIS または EUC の 2 バイトコードで構成されていることが原則ですが、 +1 バイトコードが混じっていてもかまいません。 +ただしその際には、1 バイトコードは漢字に変換されることはありません。 +.br +読み文字列はナルで終了していなければならず、 +最大でも 64 文字を越えてはなりません。 +.sp +サーバと接続されていないとき、あるいはサーバがダウンしたときには \-1 が +返されます。 +.br +読みがナル文字列だった、あるいは読みが長すぎた、または与えられた +読みで 1 文節が構成されなかったときには 0 が返されます。 +.br +正常終了したときには同音語数が返されます。 +.RE + +.NH +同音意義語の取得 +.RS +.LP +.DS +sj3_getdouon(yomi, dou) +sj3_getdouon_euc(yomi, dou) +sj3_getdouon_mb(yomi, dou) +unsigned char *yomi; /* 読み文字列へのポインタ */ +struct douon *dou; /* 同音意義語構造体へのポインタ */ +.DE +.sp +与えられた読みを文節変換し、同音意義語を与えられた構造体にセットす +るとともに、リターン値として同音意義語数を返します。 +.sp +ポインタ \fByomi\fP によって読みとして与えられる文字列は、 +シフト JIS または EUC の 2 バイトコードで構成されていることが原則ですが、 +1 バイトコードが混じっていてもかまいません。 +ただしその際には、1 バイトコードは漢字に変換されることはありません。 +.br +読み文字列はナルで終了していなければならず、 +最大でも 64 文字を越えてはなりません。 +.sp +配列 \fBstruct douon dou[]\fP には同音意義語に関する情報がセットされます。 +構造体 \fBstruct douon\fP は \fBsj3lib.h\fP で宣言されている +以下のような構造体です。 +.sp +.RS +.DS +struct douon { + unsigned char ddata[512]; /* 同音意義語のデータ */ + int dlen; /* 同音意義語の長さ */ + struct studyrec dcid; /* 学習のためのデータ */ +}; +.DE +.RE +.sp +配列 \fBstruct douon dou[]\fP の実体はユーザプログラム側で +取らなければなりません。 +.sp +構造体 \fBstruct douon\fP の \fBddata\fP は、ナルで終了する文字列です。 +.sp +サーバと接続されていないとき、あるいはサーバがダウンしたときには \-1 が +返されます。 +.br +読みがナル文字列だった、あるいは読みが長すぎた、または与えられた +読みで 1 文節が構成されなかったときには 0 が返されます。 +.br +正常終了したときには、配列 \fBstruct douon dou[]\fP に +セットされた同音語数が返されます。 +.RE + +.NH +文節学習 +.RS +.LP +.DS +sj_gakusyuu(dcid) +struct studyrec *dcid; /* 学習データへのポインタ */ +.DE +.sp +学習データへのポインタ \fBdcid\fP の示す、 +\fIsj3_getkan\fP や \fIsj_getdouon\fP により得られた学習データ +を使用して、文節学習を行います。 +.sp +サーバと接続されていないとき、あるいはサーバがダウンしたときには \-1 が +返されます。 +.br +正常に学習できたときには 0 が、学習できなかったときにはそれ以外の値が +返されます。 +.RE + +.NH +文節長学習 +.RS +.LP +.DS +sj_gakusyuu2(yomi1, yomi2, dcid) +sj_gakusyuu2_euc(yomi1, yomi2, dcid) +sj_gakusyuu2_mb(yomi1, yomi2, dcid) +unsigned char *yomi1; /* 第1文節の読み文字列へのポインタ */ +unsigned char *yomi2; /* 第2文節の読み文字列へのポインタ */ +struct studyrec *dcid; /* 第2文節の学習データへのポインタ */ +.DE +.sp +文節長学習を行います。 +.sp +1文節として変換された文字列が2文節に分けられたような場合、 +あるいは2文節の間でその境界が変更されたようなときには、 +\fByomi1\fP に新たな第1文節の読みへのポインタを、 +\fByomi2\fP に新たな第2文節の読みへのポインタを、 +\fBdcid\fP に新たな第2文節の学習データを与えることにより、 +文節長学習を行います。 +.sp +2文節として変換された文字列が1文節になった場合には、 +\fByomi1\fP に新たにできた1文節の読みへのポインタを、 +\fByomi2\fP にはナルポインタまたはナル文字列へのポインタを与えることにより、 +文節長学習を行います。このとき、\fBdcid\fP には設定すべきデータは +特にありません。 +.sp +サーバと接続されていないとき、あるいはサーバがダウンしたときには \-1 が +返されます。 +.br +正常に学習できたときには 0 が、学習できなかったときにはそれ以外の値が +返されます。 +.RE + +.NH +単語登録 +.RS +.LP +.DS +sj3_touroku(yomi, kanji, hinsi) +sj3_touroku_euc(yomi, kanji, hinsi) +sj3_touroku_mb(yomi, kanji, hinsi) +unsigned char *yomi; /* 読み文字列へのポインタ */ +unsigned char *kanji; /* 漢字文字列へのポインタ */ +int hinsi; /* 品詞コード */ +.DE +.sp +読み文字列へのポインタ \fByomi\fP、 +漢字文字列へのポインタ \fBkanji\fP、 +品詞コード \fBhinsi\fP で指定された語をユーザ辞書に登録します。 +.sp +読みは以下のシフト JIS または EUC コードで構成され、 +かつナルで終了していなければなりません。 +またその長さは、最大でも 31 文字を越えてはなりません。 +.sp +.RS +.DS +ー#@〒 +01234 56789 +ABCDE FGHIJ KLMNO PQRST UVWXY Z +abcde fghij klmno pqrst uvwxy z +あいうえお かきくけこ さしすせそ たちつてと なにぬねの +はひふへほ まみむめも や ゆ よ らりるれろ わゐ ゑを ん +がぎぐげご ざじずぜぞ だぢづでど ばびぶべぼ ぱぴぷぺぽ +ぁぃぅぇぉ   っ   ゃ ゅ ょ ゎ +ヴヵヶ +.DE +.RE +.sp +ただし以下の文字は読みの先頭になることが出来ません。 +.sp +.RS +.DS +ー を ぁぃぅぇぉ っ ゃゅょ ゎ ヵヶ +.DE +.RE +.sp +漢字はシフト JIS または EUC コードで構成され、かつナルで終了していなければ +なりません。 +またその長さは、最大でも 32 文字を越えてはなりません。 +.sp +品詞コードはヘッダファイル \fB/usr/local/include/sj3lib.h\fP で +定義される以下の品詞のうちの一つです。 +.sp +.RS +.DS +SJ3_H_NRMNOUN 普通名詞 SJ3_H_ADJVERB 形容動詞 +SJ3_H_PRONOUN 代名詞 SJ3_H_SILVERB サ変動詞 +SJ3_H_LNAME 苗字 SJ3_H_ZILVERB ザ変動詞 +SJ3_H_FNAME 名前 SJ3_H_ONEVERB 一段動詞 +SJ3_H_LOCNAME 地名 SJ3_H_KAVERB カ行五段動詞 +SJ3_H_PREFIC 県/区名 SJ3_H_GAVERB ガ行五段動詞 +SJ3_H_RENTAI 連体詞 SJ3_H_SAVERB サ行五段動詞 +SJ3_H_CONJUNC 接続詞 SJ3_H_TAVERB タ行五段動詞 +SJ3_H_SUBNUM 助数詞 SJ3_H_NAVERB ナ行五段動詞 +SJ3_H_NUMERAL 数詞 SJ3_H_BAVERB バ行五段動詞 +SJ3_H_PREFIX 接頭語 SJ3_H_MAVERB マ行五段動詞 +SJ3_H_POSTFIX 接尾語 SJ3_H_RAVERB ラ行五段動詞 +SJ3_H_ADVERB 副詞 SJ3_H_WAVERB ワ行五段動詞 +SJ3_H_ADJECT 形容詞 SJ3_H_SINGLE 単漢字 +.DE +.RE +.sp +サーバと接続されていないとき、あるいはサーバがダウンしたときには \-1 が +返されます。 +.br +登録できたときには 0 が、登録できなかったときにはそれ以外の +エラーステータスが返されます。 +.sp +エラーステータスはヘッダファイル \fB/usr/local/include/sj3lib.h\fP で +定義され、詳細は以下のとおりです。 +.sp +.IP "\fBSJ3_DICT_ERROR\fP +辞書が存在しない、あるいは登録できない辞書です。 +.IP "\fBSJ3_DICT_LOCKED\fP +辞書が読み出しのためにロックされています。 +.IP "\fBSJ3_BAD_YOMI_STR\fP +読み文字列が不正です。 +.IP "\fBSJ3_BAD_KANJI_STR\fP +漢字文字列が不正です。 +.IP "\fBSJ3_BAD_HINSI_CODE\fP +品詞コードが不正です。 +.IP "\fBSJ3_WORD_EXIST\fP +すでに登録済です。 +.IP "\fBSJ3_DOUON_FULL\fP +これ以上同音語を登録できません。 +.IP "\fBSJ3_DICT_FULL\fP +これ以上辞書に登録できません。 +.IP "\fBSJ3_INDEX_FULL\fP +これ以上インデックスに登録できません。 +.IP "\fBSJ3_TOUROKU_FAILED\fP +他の原因で辞書への登録を失敗しました。 +.RE +.RE + +.NH +単語削除 +.RS +.LP +.DS +sj3_syoukyo(yomi, kanji, hinsi) +sj3_syoukyo_euc(yomi, kanji, hinsi) +sj3_syoukyo_mb(yomi, kanji, hinsi) +unsigned char *yomi; /* 読み文字列へのポインタ */ +unsigned char *kanji; /* 漢字文字列へのポインタ */ +int hinsi; /* 品詞コード */ +.DE +.sp +ユーザ辞書に登録されている +読み文字列へのポインタ \fByomi\fP、 +漢字文字列へのポインタ \fBkanji\fP、 +品詞コード \fBhinsi\fP で指定された語を消去します。 +.sp +読みは以下のシフト JIS または EUC コードで構成され、 +かつナルで終了していなければなりません。 +またその長さは、最大でも 31 文字を越えてはなりません。 +.sp +.RS +.DS +ー#@〒 +01234 56789 +ABCDE FGHIJ KLMNO PQRST UVWXY Z +abcde fghij klmno pqrst uvwxy z +あいうえお かきくけこ さしすせそ たちつてと なにぬねの +はひふへほ まみむめも や ゆ よ らりるれろ わゐ ゑを ん +がぎぐげご ざじずぜぞ だぢづでど ばびぶべぼ ぱぴぷぺぽ +ぁぃぅぇぉ   っ   ゃ ゅ ょ ゎ +ヴヵヶ +.DE +.RE +.sp +ただし以下の文字は読みの先頭になることが出来ません。 +.sp +.RS +.DS +ー を ぁぃぅぇぉ っ ゃゅょ ゎ ヵヶ +.DE +.RE +.sp +漢字はシフト JIS または EUC コードで構成され、かつナルで終了していなければ +なりません。 +またその長さは、最大でも 32 文字を越えてはなりません。 +.sp +品詞コードは \fB/usr/local/include/sj3lib.h\fP で定義される以下の品詞の +うちの一つです。 +.sp +.RS +.DS +SJ3_H_NRMNOUN 普通名詞 SJ3_H_ADJVERB 形容動詞 +SJ3_H_PRONOUN 代名詞 SJ3_H_SILVERB サ変動詞 +SJ3_H_LNAME 苗字 SJ3_H_ZILVERB ザ変動詞 +SJ3_H_FNAME 名前 SJ3_H_ONEVERB 一段動詞 +SJ3_H_LOCNAME 地名 SJ3_H_KAVERB カ行五段動詞 +SJ3_H_PREFIC 県/区名 SJ3_H_GAVERB ガ行五段動詞 +SJ3_H_RENTAI 連体詞 SJ3_H_SAVERB サ行五段動詞 +SJ3_H_CONJUNC 接続詞 SJ3_H_TAVERB タ行五段動詞 +SJ3_H_SUBNUM 助数詞 SJ3_H_NAVERB ナ行五段動詞 +SJ3_H_NUMERAL 数詞 SJ3_H_BAVERB バ行五段動詞 +SJ3_H_PREFIX 接頭語 SJ3_H_MAVERB マ行五段動詞 +SJ3_H_POSTFIX 接尾語 SJ3_H_RAVERB ラ行五段動詞 +SJ3_H_ADVERB 副詞 SJ3_H_WAVERB ワ行五段動詞 +SJ3_H_ADJECT 形容詞 SJ3_H_SINGLE 単漢字 +.DE +.RE +.sp +サーバと接続されていないとき、あるいはサーバがダウンしたときには \-1 が +返されます。 +.br +削除できたときには 0 が、削除できなかったときにはそれ以外の +エラーステータスが返されます。 +.sp +エラーステータスは \fB/usr/local/include/sj3lib.h\fP で定義され、 +詳細は以下のとおりです。 +.sp +.IP "\fBSJ3_DICT_ERROR\fP +辞書が存在しない、あるいは登録できない辞書です。 +.IP "\fBSJ3_DICT_LOCKED\fP +辞書が読み出しのためにロックされています。 +.IP "\fBSJ3_BAD_YOMI_STR\fP +読み文字列が不正です。 +.IP "\fBSJ3_BAD_KANJI_STR\fP +漢字文字列が不正です。 +.IP "\fBSJ3_BAD_HINSI_CODE\fP +品詞コードが不正です。 +.IP "\fBSJ3_WORD_NOT_EXIST\fP +指定された語は登録されていません。 +.IP "\fBSJ3_SYOUKYO_FAILED\fP +他の原因で辞書からの消去を失敗しました。 +.RE +.RE + +.NH +辞書のロック +.RS +.LP +.DS +sj3_lockserv() +.DE +.sp +現在オープンされている辞書に単語を登録/削除できないようにロックします。 +.sp +学習IDは単語の辞書内での位置を示しています。このため、クライアントが +学習IDを保持している間に辞書登録/削除が行われると、クライアントの +保持している学習IDと辞書の間で不整合を起こす可能性があります。 +それを避けるために、クライアントが学習IDを保持している間は辞書ファイルを +ロックする必要があります。 +.sp +サーバと接続されていないとき、あるいはサーバがダウンしたときには \-1 が +返されます。 +.br +ロックできたときには 0 が、 +ロックできなかったときにはそれ以外の値が返されます。 +.RE + +.NH +辞書のアンロック +.RS +.LP +.DS +sj3_unlockserv() +.DE +.sp +sj3_lockserv 関数でロックされている辞書に単語を登録/削除できるように +アンロックします。 +.sp +学習IDは単語の辞書内での位置を示しています。このため、クライアントが +学習IDを保持している間に辞書登録/削除が行われると、クライアントの +保持している学習IDと辞書の間で不整合を起こす可能性があります。 +それを避けるために、クライアントが学習IDを保持している間は辞書ファイルを +ロックする必要があります。 +.br +クライアントが辞書をロックしている間は、辞書登録/削除することができません。 +クライアントは学習IDを保持する必要がなくなったときには、ただちに辞書を +アンロックするべきです。 +.sp +サーバと接続されていないとき、あるいはサーバがダウンしたときには \-1 が +返されます。 +.br +アンロックできたときには 0 が、 +アンロックできなかったときにはそれ以外の値が返されます。 +.RE diff --git a/doc/doc/sj3serv.ms b/doc/doc/sj3serv.ms new file mode 100644 index 0000000..ffd6eb2 --- /dev/null +++ b/doc/doc/sj3serv.ms @@ -0,0 +1,170 @@ +.\" +.\"Copyright (c) 1991-1994 Sony Corporation +.\" +.\"Permission is hereby granted, free of charge, to any person obtaining +.\"a copy of this software and associated documentation files (the +.\""Software"), to deal in the Software without restriction, including +.\"without limitation the rights to use, copy, modify, merge, publish, +.\"distribute, sublicense, and/or sell copies of the Software, and to +.\"permit persons to whom the Software is furnished to do so, subject to +.\"the following conditions: +.\" +.\"The above copyright notice and this permission notice shall be +.\"included in all copies or substantial portions of the Software. +.\" +.\"THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +.\"EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +.\"MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +.\"IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, +.\"DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +.\"OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +.\"THE USE OR OTHER DEALINGS IN THE SOFTWARE. +.\" +.\"Except as contained in this notice, the name of Sony Corporation +.\"shall not be used in advertising or otherwise to promote the sale, use +.\"or other dealings in this Software without prior written authorization +.\"from Sony Corporation. +.\" +.\"Author: Noriyuki Hosoe, Sony Corporation +.\"Modifier: Nobuyuki Tanaka, Sony Corporation +.\" +.\"$SonyRCSfile: sj3serv.ms,v $ +.\"$SonyRevision: 1.1 $ +.\"$SonyDate: 1994/06/03 08:00:49 $ +.\" +.TL +仮名漢字変換サーバ sj3serv +.SH +はじめに +.RS +\fBsj3serv\fP は、ソニー(株)で開発された仮名漢字変換サーバです。 +.br +クライアントはこのサーバと通信することにより、仮名漢字変換を行うことが +可能となります。 +.RE + +.NH +使用するポート +.RS +.LP +sj3serv は \fB/etc/servives\fP のエントリ sj3serv を参照して、通信で使用する +ポート番号を取得します。 +.RE + +.NH +セットアップファイル +.NH 2 +フォーマット +.RS +.LP +セットアップファイルの設定は、設定する機能毎のキーワードとその値により +行います。 +キーワードと値、値と値の区切りにはスペースあるいはタブを使用します。 +キーワードを構成するアルファベットは、大文字と小文字の区別を行いません。 +.br +各行の '#' 以降はコメントとして無視されます。'#' をコメントの開始記号としないためには '\\' を先行させます。 +.sp +.RS +.IP 例: +.DS +MaxClient 32 # 最大クライアント数 +DictDir /var/dict/\e#dict +.DE +.RE +.RE +.RE +.sp +.NH 2 +再設定可能な機能 +.RS +.LP +セットアップファイルでは、以下の動作を指定できます。 +.RE +.NH 3 +最大クライアント数の設定 +.RS +.LP +.RS +MaxClient \fInumber_of_client\fP +.RE +.sp +サーバーに接続してよいクライアントの数を10進数で指定します。 +ただし、いくら大きな値を設定しても、64を越えるクライアントから +接続されることはありません。 +また、システムで許される最大数を越えてファイルがオープンされることも +ありませんから、指定された最大数のクライアントが接続できないこともあります。 +.br +デフォルトは64です。 +.RE +.sp +.NH 3 +辞書ディレクトリの設定 +.RS +.LP +.RS +DictDir \fIdirectory_name\fP +.RE +.sp +辞書の存在するディレクトリを指定します。 +.br +クライアントから指定される辞書ファイル名が\'/\'で始まるときには、 +そのファイル名を絶対パスとして辞書にアクセスしますが、\'/\'以外のときには、 +ここで指定されるディレクトリからの相対パスとして辞書にアクセスします。 +.br +デフォルトは /usr/local/lib/sj3/dict です。 +.RE +.sp +.NH 3 +辞書の事前リード +.RS +.LP +.RS +ReadDict \fIdictionary_name\fP +.RE +.sp +サーバの立ち上がり時に読み込む辞書を指定します。 +.br +巨大な辞書は事前に読み込んでおくことにより、クライアントの立ち上がる時間を短縮することが出来ます。 +.br +事前に読み込んでおく辞書は、複数指定することが出来ますが、 +1行で指定できるのは1つの辞書名です。 +.br +デフォルトで読み込まれる辞書はありません。 +.RE +.sp +.NH 3 +エラー出力ファイルの指定 +.RS +.LP +.RS +ErrorOut \fIerror_out_filename\fP +.RE +.sp +エラーやワーニングを出力するファイルを指定します。 +.br +デフォルトは /dev/null です。 +.RE +.sp +.NH 3 +接続可能なユーザの指定 +.RS +.LP +.RS +AllowUser \fIusername\fP \fIhostname\fP +.RE +.sp +サーバに接続できるユーザを制限します。 +.br +この行を指定することにより、サーバに接続できるのはホスト \fIhostname\fP 上の +ユーザ \fIusername\fP だけに制限されます。 +.br +\fIhostname\fP は省略できますが、その場合にはユーザ名が \fIusername\fP であれば +どのホストからでも無条件で接続できることになります。 +\fIusername\fP、\fIhostname\fP を記述するときには、複数文字とマッチングする +\'*\'と1文字とマッチングする\'.\'を使うことが出来ます。 +.br +AllowUser は複数行書くことが出来ます。 +.br +デフォルトでは全てのユーザを許可しています。 +.RE +.sp diff --git a/doc/man/Makefile.am b/doc/man/Makefile.am new file mode 100644 index 0000000..b4f4b97 --- /dev/null +++ b/doc/man/Makefile.am @@ -0,0 +1,25 @@ +EXTRA_DIST = +man_MANS = + +if BUILDABLE_SJ3CLIENT + +EXTRA_DIST += \ + sj3dic.1 + +man_MANS += \ + sj3dic.1 + +endif + +if BUILDABLE_SJ3SERV + +EXTRA_DIST += \ + sj3mkdic.1 \ + sj3serv.1 + +man_MANS += \ + sj3mkdic.1 \ + sj3serv.1 + +endif + diff --git a/doc/man/sj3dic.1 b/doc/man/sj3dic.1 new file mode 100644 index 0000000..9ce92ec --- /dev/null +++ b/doc/man/sj3dic.1 @@ -0,0 +1,141 @@ +.\" +.\"Copyright (c) 1991-1994 Sony Corporation +.\" +.\"Permission is hereby granted, free of charge, to any person obtaining +.\"a copy of this software and associated documentation files (the +.\""Software"), to deal in the Software without restriction, including +.\"without limitation the rights to use, copy, modify, merge, publish, +.\"distribute, sublicense, and/or sell copies of the Software, and to +.\"permit persons to whom the Software is furnished to do so, subject to +.\"the following conditions: +.\" +.\"The above copyright notice and this permission notice shall be +.\"included in all copies or substantial portions of the Software. +.\" +.\"THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +.\"EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +.\"MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +.\"IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, +.\"DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +.\"OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +.\"THE USE OR OTHER DEALINGS IN THE SOFTWARE. +.\" +.\"Except as contained in this notice, the name of Sony Corporation +.\"shall not be used in advertising or otherwise to promote the sale, use +.\"or other dealings in this Software without prior written authorization +.\"from Sony Corporation. +.\" +.\"Author: Noriyuki Hosoe, Sony Corporation +.\" +.\"$SonyRCSfile: sj3dic.1,v $ +.\"$SonyRevision: 1.1 $ +.\"$SonyDate: 1994/06/03 08:00:51 $ +.\" +.TH SJ3DIC 1 +.SH 名称 +sj3dic \- sj3 ユーザ辞書メンテナンスツール +.SH 形式 +\fBsj3dic\fP \fB\-text\fP [ \fB\-H\fP host_name ] [ output_file ] +.br +\fBsj3dic\fP \fB\-dict\fP [ \fB\-H\fP host_name ] [ input_file ] +.SH 解説 +\fIsj3dic\fP は、仮名漢字変換サーバ \fIsj3serv(1)\fP とソケットを +使用したプロセス間通信をすることにより、サーバの動作しているマシン上の +ユーザ辞書をメンテナンスするツールです。 +.sp +接続するホストは \fIhost_name\fP で指定します。このオプションが +省略され、環境変数 \fBSJ3SERV\fP もしくは \fIsj3(1)\fP のセットアップ +ファイルでもサーバの指定がないときには、localhost 上のサーバとの接続を +試みます。 +.sp +.in +.B 1)ビジュアル辞書ファイルの作成 +.sp +.in +0.2i + \fBsj3dic\fP \fB\-text\fP [ \fB\-H\fP host_name ] [ output_file ] +.sp +サーバマシン上のユーザ辞書の内容を編集可能なテキストに変換し +\fIoutput_file\fP に出力します。\fIoutput_file\fP が指定されないときには +標準出力に出力されます。 +.sp +ビジュアルファイルは以下のようなものです。 +.sp + うぃんどう ウィンドウ       名詞: +.br + そにー ソニー(株)      名詞: +.br + ゆーびん 〒           名詞: +.br + わーく ワークステーション   名詞: +.sp +各フィールドは以下のようになっています。 +.sp + 第一フィールド  読み(全角ひらがな) +.br + 第二フィールド  目的の出力 +.br + 第三フィールド  品詞 +.sp + ここで、フィールド間は、1個以上の半角スペースまたはタブで区切られます。 +また各フィールドには、半角スペースおよびタブを記述することは許されません。 +品詞のフィールド(第三フィールド)には、以下の品詞を記述します。 +.sp +  名詞:   苗字:   地名:   代名詞:  名前: +.br +  県/区名: 数詞:   接頭語:  接尾語:  助数詞: +.br +  副詞:   接続詞:  連体詞:  形容詞:  形容動詞: +.br +  動・サ変: 動・ザ変: 動・一段: 動・カ五: 動・ガ五: +.br +  動・サ五: 動・タ五: 動・ナ五: 動・バ五: 動・マ五: +.br +  動・ラ五: 動・ワ五: 単漢字: +.sp +.in +.B 2)ユーザ辞書ファイルへの追加登録 +.in +0.2i +.sp + \fBsj3dic\fP \fB\-dict\fP [ \fB\-H\fP host_name ] [ input_file ] +.sp +ビジュアル辞書ファイルである \fIinput_file\fP の内容をサーバマシン上の +ユーザ辞書に追加登録します。\fIinput_file\fP が指定されないときには +標準入力が読み込まれます。 +.in +.SH 関連ファイル +.PD 0 +.TP \w'\ \ \ \ user/\fIusername\fP/private.dic'u+2n +/usr/local/bin/sj3serv +かな漢字変換サーバ +.TP +/usr/local/lib/sj3/serverrc +かな漢字変換サーバ セットアップファイル +.TP +/usr/local/bin/sj3 +日本語入力フロントエンドプロセッサ +.TP +/usr/local/lib/sj3/dict/ +かな漢字変換サーバ デフォルト辞書ディレクトリ +.TP + sj3main.dic +かな漢字変換メイン辞書 +.TP + user/\fIusername\fP/private.dic +かな漢字変換ユーザ辞書 +.TP + user/\fIusername\fP/study.dat +かな漢字変換学習ファイル +.TP +/usr/local/include/sj3lib.h +かな漢字変換ライブラリ用インクルードファイル +.TP +/usr/local/lib/libsj3lib.a +かな漢字変換ライブラリ +.\".TP +.\"/usr/sony/demo/sj3/* +.\"かな漢字変換ライブラリ 使用法サンプル + +.SH 関連事項 +sj3(1), sj3serv(1), sj3lib(3) + +.SH バグ diff --git a/doc/man/sj3mkdic.1 b/doc/man/sj3mkdic.1 new file mode 100644 index 0000000..95ad00f --- /dev/null +++ b/doc/man/sj3mkdic.1 @@ -0,0 +1,576 @@ +.\" +.\"Copyright (c) 1991-1994 Sony Corporation +.\" +.\"Permission is hereby granted, free of charge, to any person obtaining +.\"a copy of this software and associated documentation files (the +.\""Software"), to deal in the Software without restriction, including +.\"without limitation the rights to use, copy, modify, merge, publish, +.\"distribute, sublicense, and/or sell copies of the Software, and to +.\"permit persons to whom the Software is furnished to do so, subject to +.\"the following conditions: +.\" +.\"The above copyright notice and this permission notice shall be +.\"included in all copies or substantial portions of the Software. +.\" +.\"THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +.\"EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +.\"MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +.\"IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, +.\"DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +.\"OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +.\"THE USE OR OTHER DEALINGS IN THE SOFTWARE. +.\" +.\"Except as contained in this notice, the name of Sony Corporation +.\"shall not be used in advertising or otherwise to promote the sale, use +.\"or other dealings in this Software without prior written authorization +.\"from Sony Corporation. +.\" +.\"$SonyRCSfile: sj3mkdic.1,v $ +.\"$SonyRevision: 1.2 $ +.\"$SonyDate: 1996/09/05 12:08:20 $ +.\" +.TH SJ3MKDIC 1 +.SH 名前 +\f4sj3mkdic\f1 \- sj3 辞書変換ツール +.SH 形式 +.B sj3mkdic +.I word_dict_text +.I output.dic +.SH 機能説明 +.B sj3mkdic +は、EUC のテキスト単語辞書ファイルから +.BR "sj3serv" (1) +で使用できるバイナリ形式の辞書ファイルに変換するツールです。 +変換された辞書のファイル名は必ず ".dic" で終わるようにしてください。 +.sp +このツールを使用することにより、エディタで編集された辞書を \fBsj3serv\fP で +使用可能な形態に変換することが出来ます。 + +.PP +単語辞書のテキストファイルのフォーマットは以下のようになっています。 +.sp +.nf + あーかんそー アーカンソー 地名:[州]:[都市]:[所]: + あいらし 愛らし 形3: + あお あお ガ五5:ラ五5: + あがた 県 単漢: +.fi +.sp +各フィールドは以下のようになっています。 +.sp +.nf + 第一フィールド  読み(全角ひらがな) + 第二フィールド  目的の出力 + 第三フィールド  品詞の並び +.fi +.sp +ここで、フィールド間は、1 個以上の半角スペースまたはタブで区切られます。 +また各フィールドには、半角スペースおよびタブを記述することは許されません。 +また各行は、読みでソートされていなければなりません。 +なおこの辞書では、体言(名詞・副詞・連体詞など非活用のもの)については +熟語そのままを、用言(動詞・形容詞・形容動詞など活用するもの)に +関しては語幹のみを登録しなければなりません。 +品詞のフィールド(第三フィールド)には、以下の品詞を記述します。 +.sp +.nf + カ五1: カ五2: カ五3: カ五4: カ五5: + カ五6: カ五7: カ五8: カ五音便: カ変仮: + カ変終体: カ変未: カ変命: カ変用: ガ五1: + ガ五2: ガ五3: ガ五4: ガ五5: ガ五6: + ガ五7: ガ五8: サ五1: サ五2: サ五3: + サ五4: サ五5: サ五6: サ五7: サ五8: + サ変: サ変仮: サ変終体: サ変未1: サ変未2: + サ変未用: サ変命1: サ変命2: ザ変: タ五1: + タ五2: タ五3: タ五4: タ五5: タ五6: + タ五7: タ五8: ナ五: バ五1: バ五2: + バ五3: バ五4: バ五5: バ五6: バ五7: + バ五8: マ五1: マ五2: マ五3: マ五4: + マ五5: マ五6: マ五7: マ五8: ラ五1: + ラ五2: ラ五3: ラ五4: ラ五5: ラ五6: + ラ五7: ラ五8: ワ五1: ワ五2: ワ五3: + ワ五4: ワ五5: ワ五6: ワ五7: ワ五8: + 挨拶: 一括: 一段1: 一段2: 一段3: + 一段4: 感動: 企業: 形1: 形10: + 形11: 形2: 形3: 形4: 形5: + 形6: 形7: 形8: 形9: 形動1: + 形動2: 形動3: 形動4: 形動5: 形動6: + 形動7: 形動8: 形動9: 県区: 助数: + 助数2: 数詞: 数詞2: 接続: 接頭1: + 接頭2: 接頭3: 接頭4: 接頭5: 接尾1: + 接尾2: 接尾3: 接尾4: 接尾5: 接尾6: + 接尾7: 接尾8: 接尾9: 代1: 代2: + 代3: 代4: 代5: 代6: 単漢: + 地名: 丁寧1: 丁寧2: 特殊形容: 特殊副: + 苗字: 副1: 副2: 副3: 副4: + 副5: 副6: 副7: 副8: 副9: + 名1: 名10: 名11: 名2: 名20: + 名3: 名4: 名5: 名6: 名7: + 名8: 名9: 名前: 連体: +.fi +.sp +\f3品詞について\f1 +.SH +**注意点** +.RS +.SH +上一段・下一段動詞の扱い +.RS +例えば、カ行上一段動詞 "起きる" の場合、 +.RS +語幹は     "お" +.br +活用語尾は   "き、きる、きれ、きろ、きよ" +.RE +となります。 +.br +活用語尾の1字目に注目すると、いずれの活用形においても共通なので、 +便宜的に "おき" までを語幹として扱うことにします。 +これによって "行" 及び "上下"の区別は必要なくなり、 +ただ "一段動詞" だけの分類分けで済ませています。 +.RE +.RE +名詞 +.RS +.LP +固有名詞を除いた名詞です。 +.br +これらは複合名詞を作りやすいか否かによって2つに分けられます。 +.br +複合名詞を作りやすいか否かは、主観によって判断しています。 +.RE + +複合名詞を作りやすい名詞 +.RS +.IP 名1(MEISI_1) \w'            'u +他の分類に含まれない、複合名詞を作りやすい名詞 +.IP 名2(MEISI_2) +接頭語 "お" +.IP 名3(MEISI_3) +接頭語 "ご" +.IP 名4(MEISI_4) +接尾語 "的" "化" のどちらか +.IP 名5(MEISI_5) +名詞+サ変動詞、接頭語 "お" +.IP 名6(MEISI_6) +名詞+サ変動詞 +.IP 名7(MEISI_7) +名詞+サ変動詞、接頭語 "ご" +.IP 名8(MEISI_8) +名詞+形容動詞 +.IP 名9(MEISI_9) +名詞+形容動詞、接頭語 "お" +.IP 名10(MEISI_10) +名詞+形容動詞、接頭語 "ご" +.IP 名11(MEISI_11) +名詞+副詞 +.RE + +複合名詞を作りにくい名詞 +.RS +.IP 代1(D_MEISI_1) \w'            'u +他の分類に含まれない、複合名詞を作りにくい名詞 +.IP 代2(D_MEISI_2) +接尾語 "さん" +.IP 代3(D_MEISI_3) +"〜をする" +.IP 代4(D_MEISI_4) +名詞+サ変動詞 +.IP 代5(D_MEISI_5) +名詞+形容動詞 +.IP 代6(D_MEISI_6) +名詞+副詞 +.RE + +固有名詞 +.RS +.IP 苗字(MYOUJI) \w'            'u +人名の姓 +.IP 名前(NAMAE) +人名の名 +.IP 企業(KIGYOU) +企業名 +.IP 地名(TIMEI) +都道府県・区郡・市町村 および主要都市の駅名 +.IP 県区(KEN_KU) +都道府県・区の・・県(都,府,区)付き +.RE + +その他体言 +.RS +.IP 連体(RENTAISI) \w'            'u +連体詞 +.IP 接続(SETUZOKU) +接続詞 +.IP 感動(KANDOUSI) +感動詞 +.IP 助数(JOSUUSI1) +"第〜" が接続できる +.IP 助数2(JOSUUSI2) +"第〜”が接続できない +.IP 数詞(SUUSI) +数詞 +.RE + +接頭語 +.RS +.IP 接頭1(SETTOU_1) \w'            'u +名詞(サ変名詞・刑動名詞含む)に接続 +.IP 接頭2(SETTOU_2) +地名に接続(北、南、西、東 等) +.IP 接頭3(SETTOU_3) +人名に接続(故 など) +.IP 接頭4(SETTOU_4) +数詞に接続(第、計 等) +.IP 接頭5(SETTOU_5) +接頭1 より接続が強い +.RE + +接尾語 +.RS +.IP 接尾1(SETUBI_1) \w'            'u +名詞に接続、名詞扱い +.IP 接尾2(SETUBI_2) +名詞に接続、名詞扱い。ただし連濁形 +.IP 接尾3(SETUBI_3) +接尾1 より接続が強い +.IP 接尾4(SETUBI_4) +地名に接続、名詞扱い +.IP 接尾5(SETUBI_5) +名詞に接続、形容詞扱い +.IP 接尾6(SETUBI_6) +名詞に接続、形容動詞扱い +.IP 接尾7(SETUBI_7) +名詞に接続、サ変名詞扱い +.IP 接尾8(SETUBI_8) +名詞に接続、一段動詞扱い +.IP 接尾9(SETUBI_9) +接尾語+副詞 +.RE + +副詞 +.RS +.IP 副1(FUKUSI_1) \w'            'u +接続なし +.IP 副2(FUKUSI_2) +"〜と" 接続 +.IP 副3(FUKUSI_3) +"〜と", サ変動詞語尾が接続 +.IP 副4(FUKUSI_4) +サ変動詞語尾が接続 +.IP 副5(FUKUSI_5) +"〜に" 接続 +.IP 副6(FUKUSI_6) +"〜も" 接続 +.IP 副7(FUKUSI_7) +"〜の" 接続 +.IP 副8(FUKUSI_8) +"〜と", "〜です、〜だ" 接続 +.IP 副9(FUKUSI_9) +"〜と", サ変動詞語尾, "〜です、〜だ" 接続 +.RE + +形容詞 +.RS +.RS +.DS +[さ]  "さ" が接続して名詞化する +[げ]  "げ" が接続して形容動詞化する +[め]  "め" が接続して形容動詞化する +[み]  "み" が接続して名詞化する +[がる] "がる" が接続して動詞化する +.DE +.RE +.sp +.IP 形1(KEIYOUSI_1) \w'            'u +上記付属語接続なし +.IP 形2(KEIYOUSI_2) +[さ] +.IP 形3(KEIYOUSI_3) +[さ、げ] +.IP 形4(KEIYOUSI_4) +[さ、がる] +.IP 形5(KEIYOUSI_5) +[さ、げ、がる] +.IP 形6(KEIYOUSI_6) +[さ、め、げ] +.IP 形7(KEIYOUSI_7) +[さ、め、げ、がる] +.IP 形8(KEIYOUSI_8) +[さ、み、め、げ、がる] +.IP 形9(KEIYOUSI_9) +接頭語 "お", [さ、げ、がる] +.IP 形10(KEIYOUSI_10) +接頭語 "お", [さ、め、げ、がる] +.IP 形11(KEIYOUSI_11) +[さ、み、め] +.RE + +形容動詞 +.RS +.IP 形動1(KE_DOUSI_1) \w'            'u +ダ活用 +.IP 形動2(KE_DOUSI_2) +タリ活用 +.IP 形動3(KE_DOUSI_3) +ダ活用、語幹で連体修飾 +.IP 形動4(KE_DOUSI_4) +ダ活用、"〜さ" +.IP 形動5(KE_DOUSI_5) +ダ活用、"〜さ"、語幹で連体修飾 +.IP 形動6(KE_DOUSI_6) +ダ活用、接頭語 "お" が接続 +.IP 形動7(KE_DOUSI_7) +ダ活用、"〜さ"、接頭語 "お" が接続 +.IP 形動8(KE_DOUSI_8) +ダ活用、接頭語 "ご" が接続 +.IP 形動9(KE_DOUSI_9) +ダ活用、"〜の" +.RE + +動詞 +.RS +.IP サ変(DO_SAHEN) \w'            'u +サ変動詞、連用名詞扱いできない +.IP ザ変(DO_ZAHEN) +ザ変動詞。連用名詞扱いできない + +.IP 一段1(DO_1DAN_1) \w'            'u +連用名詞扱いできない +.IP 一段2(DO_1DAN_2) +連用名詞扱いできない、接頭語 "お" +.IP 一段3(DO_1DAN_3) +連用名詞扱いできる +.IP 一段4(DO_1DAN_4) +連用名詞扱いできる、接頭語 "お" + +.IP カ五1(DO_KAGO_1) \w'            'u +連用名詞扱いできない、 +.IP カ五2(DO_KAGO_2) +連用名詞扱いできない、接頭語 "お" +.IP カ五3(DO_KAGO_3) +連用名詞扱いできる +.IP カ五4(DO_KAGO_4) +連用名詞扱いできる、接頭語 "お" +.IP カ五5(DO_KAGO_5) +連用名詞扱いできない、[け、ける、けれ] +.IP カ五6(DO_KAGO_6) +連用名詞扱いできない、[け、ける、けれ]、接頭語 "お" +.IP カ五7(DO_KAGO_7) +連用名詞扱いできる、[け、ける、けれ] +.IP カ五8(DO_KAGO_8) +連用名詞扱いできる、[け、ける、けれ]、接頭語 "お" + +.IP ガ五1(DO_GAGO_1) \w'            'u +連用名詞扱いできない +.IP ガ五2(DO_GAGO_2) +連用名詞扱いできない、接頭語 "お" +.IP ガ五3(DO_GAGO_3) +連用名詞扱いできる +.IP ガ五4(DO_GAGO_4) +連用名詞扱いできる、接頭語 "お" +.IP ガ五5(DO_GAGO_5) +連用名詞扱いできない、[げ、げる、げれ] +.IP ガ五6(DO_GAGO_6) +連用名詞扱いできない、[げ、げる、げれ]、接頭語 "お" +.IP ガ五7(DO_GAGO_7) +連用名詞扱いできる、[げ、げる、げれ] +.IP ガ五8(DO_GAGO_8) +連用名詞扱いできる、[げ、げる、げれ]、接頭語 "お" + +.IP サ五1(DO_SAGO_1) \w'            'u +連用名詞扱いできない +.IP サ五2(DO_SAGO_2) +連用名詞扱いできない、接頭語 "お" +.IP サ五3(DO_SAGO_3) +連用名詞扱いできる +.IP サ五4(DO_SAGO_4) +連用名詞扱いできる、接頭語 "お" +.IP サ五5(DO_SAGO_5) +連用名詞扱いできない、[せ、せる、せれ] +.IP サ五6(DO_SAGO_6) +連用名詞扱いできない、[せ、せる、せれ]、接頭語 "お" +.IP サ五7(DO_SAGO_7) +連用名詞扱いできる、[せ、せる、せれ] +.IP サ五8(DO_SAGO_8) +連用名詞扱いできる、[せ、せる、せれ]、接頭語 "お" + +.IP タ五1(DO_TAGO_1) \w'            'u +連用名詞扱いできない +.IP タ五2(DO_TAGO_2) +連用名詞扱いできない、接頭語 "お" +.IP タ五3(DO_TAGO_3) +連用名詞扱いできる +.IP タ五4(DO_TAGO_4) +連用名詞扱いできる、接頭語"お" +.IP タ五5(DO_TAGO_5) +連用名詞扱いできない、[て、てる、てれ] +.IP タ五6(DO_TAGO_6) +連用名詞扱いできない、[て、てる、てれ]、接頭語 "お" +.IP タ五7(DO_TAGO_7) +連用名詞扱いできる、[て、てる、てれ] +.IP タ五8(DO_TAGO_8) +連用名詞扱いできる、[て、てる、てれ]、接頭語 "お" + +.IP ナ五(DO_NAGO) \w'            'u +連用名詞扱いできない + +.IP バ五1(DO_BAGO_1) \w'            'u +連用名詞扱いできない +.IP バ五2(DO_BAGO_2) +連用名詞扱いできない、"お" +.IP バ五3(DO_BAGO_3) +連用名詞扱いできる +.IP バ五4(DO_BAGO_4) +連用名詞扱いできる、"お" +.IP バ五5(DO_BAGO_5) +連用名詞扱いできない、[べ、べる、べれ] +.IP バ五6(DO_BAGO_6) +連用名詞扱いできない、[べ、べる、べれ]、接頭語 "お" +.IP バ五7(DO_BAGO_7) +連用名詞扱いできる、[べ、べる、べれ] +.IP バ五8(DO_BAGO_8) +連用名詞扱いできる、[べ、べる、べれ]、接頭語 "お" + +.IP マ五1(DO_MAGO_1) \w'            'u +連用名詞扱いできない、 +.IP マ五2(DO_MAGO_2) +連用名詞扱いできない、"お" +.IP マ五3(DO_MAGO_3) +連用名詞扱いできる +.IP マ五4(DO_MAGO_4) +連用名詞扱いできる、"お" +.IP マ五5(DO_MAGO_5) +連用名詞扱いできない、[め、める、めれ] +.IP マ五6(DO_MAGO_6) +連用名詞扱いできない、[め、める、めれ]、接頭語 "お" +.IP マ五7(DO_MAGO_7) +連用名詞扱いできる、[め、める、めれ] +.IP マ五8(DO_MAGO_8) +連用名詞扱いできる、[め、める、めれ]、接頭語 "お" + +.IP ラ五1(DO_RAGO_1) \w'            'u +連用名詞扱いできない +.IP ラ五2(DO_RAGO_2) +連用名詞扱いできない、"お" +.IP ラ五3(DO_RAGO_3) +連用名詞扱いできる +.IP ラ五4(DO_RAGO_4) +連用名詞扱いできる、接頭語 "お" +.IP ラ五5(DO_RAGO_5) +連用名詞扱いできない、[れ、れる、れれ] +.IP ラ五6(DO_RAGO_6) +連用名詞扱いできない、[れ、れる、れれ]、接頭語 "お" +.IP ラ五7(DO_RAGO_7) +連用名詞扱いできる、[れ、れる、れれ] +.IP ラ五8(DO_RAGO_8) +連用名詞扱いできる、[れ、れる、れれ]、接頭語 "お" + +.IP ワ五1(DO_WAGO_1) \w'            'u +連用名詞扱いできない +.IP ワ五2(DO_WAGO_1) +連用名詞扱いできない、"お" +.IP ワ五3(DO_WAGO_1) +連用名詞扱いできる +.IP ワ五4(DO_WAGO_1) +連用名詞扱いできる、接頭語 "お" +.IP ワ五5(DO_WAGO_1) +連用名詞扱いできない、[え、える、えれ] +.IP ワ五6(DO_WAGO_1) +連用名詞扱いできない、[え、える、えれ]、接頭語 "お" +.IP ワ五7(DO_WAGO_1) +連用名詞扱いできる、[え、える、えれ] +.IP ワ五8(DO_WAGO_1) +連用名詞扱いできる、[え、える、えれ]、接頭語 "お" +.RE + +特殊品詞 +.RS +分類不可能な語、特殊な活用をする語句など +.sp +.IP 単漢(TANKANJI) \w'            'u +単漢字 +.sp +.IP サ変未1(SP_SA_MI1) \w'            'u +さ +.IP サ変未2(SP_SA_MI2) +せ +.IP サ変未用(SP_SA_YOU) +し +.IP サ変終体(SP_SA_SYU) +する +.IP サ変仮(SP_SA_KAT) +すれ +.IP サ変命1(SP_SA_ME1) +しろ +.IP サ変命2(SP_SA_ME2) +せよ +.sp +.IP カ変未(SP_KA_MIZ) +こ +.IP カ変用(SP_KA_YOU) +き +.IP カ変終体(SP_KA_SYU) +くる +.IP カ変仮(SP_KA_KAT) +くれ +.IP カ変命(SP_KA_ME1) +こい +.sp +.IP 丁寧1(TEINEI1) +いらっしゃい、おっしゃい、ください、なさい +.IP 丁寧2(TEINEI2) +ござい +.sp +.IP カ五音便(SP_KA_ONB) +いっ +.sp +.IP 特殊副(SP_FUKUSI) +こう、そう、どう +.sp +.IP 挨拶(AISATU) +ありがとう、おめでとう、おはよう +.sp +.IP 特殊形容(SP_KEIYOUSI) +いい +.sp +.IP 一括(IKKATU) \w'            'u +文節変換では参照されない語。"関連辞書" で関連を定義するために存在する語。 +.RE +.SH ファイル +.PD 0 +.TP \w'\ \ \ \ user/\f2username\f1/private.dic'u+2n +.B /usr/local/bin/sj3serv +かな漢字変換サーバ +.TP +.B /usr/local/lib/sj3/serverrc +かな漢字変換サーバ セットアップファイル +.TP +.B /usr/local/bin/sj3 +日本語入力フロントエンドプロセッサ +.TP +.B /usr/local/lib/sj3/dict/ +かな漢字変換サーバ デフォルト辞書ディレクトリ +.TP +.B " sj3main.dic +かな漢字変換メイン辞書 +.TP +.B " user/\f2username\f1/private.dic +かな漢字変換ユーザ辞書 +.TP +.B " user/\f2username\f1/study.dat +かな漢字変換学習ファイル +.TP +.B /usr/local/include/sj3lib.h +かな漢字変換ライブラリ用インクルードファイル +.TP +.B /usr/local/lib/libsj3lib.a +かな漢字変換ライブラリ +.\".TP +.\"\f3/usr/local/demo/sj3/ *\f1 +.\"かな漢字変換ライブラリ 使用法サンプル +.PD +.SH 関連項目 +\f4sj3\f1 (1), +\f4sj3serv\f1 (1), +\f4sj3dic\f1 (1), +\f4sj3lib\f1 (3) diff --git a/doc/man/sj3serv.1 b/doc/man/sj3serv.1 new file mode 100644 index 0000000..5b4335f --- /dev/null +++ b/doc/man/sj3serv.1 @@ -0,0 +1,78 @@ +.\" +.\"Copyright (c) 1991-1994 Sony Corporation +.\" +.\"Permission is hereby granted, free of charge, to any person obtaining +.\"a copy of this software and associated documentation files (the +.\""Software"), to deal in the Software without restriction, including +.\"without limitation the rights to use, copy, modify, merge, publish, +.\"distribute, sublicense, and/or sell copies of the Software, and to +.\"permit persons to whom the Software is furnished to do so, subject to +.\"the following conditions: +.\" +.\"The above copyright notice and this permission notice shall be +.\"included in all copies or substantial portions of the Software. +.\" +.\"THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +.\"EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +.\"MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +.\"IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, +.\"DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +.\"OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +.\"THE USE OR OTHER DEALINGS IN THE SOFTWARE. +.\" +.\"Except as contained in this notice, the name of Sony Corporation +.\"shall not be used in advertising or otherwise to promote the sale, use +.\"or other dealings in this Software without prior written authorization +.\"from Sony Corporation. +.\" +.\"Author: Noriyuki Hosoe, Sony Corporation +.\" +.\"$SonyRCSfile: sj3serv.1,v $ +.\"$SonyRevision: 1.1 $ +.\"$SonyDate: 1994/06/03 08:00:52 $ +.\" +.\" Server of Japanese input frontent processor +.TH SJ3SERV 1 "October 1990" +.SH 名称 +sj3serv \- 仮名漢字変換サーバ +.SH 形式 +.B sj3serv +[ \fB\-f\fP filename ] +.SH 解説 +\fIsj3serv\fP は、ソケットを使用したプロセス間通信により仮名漢字変換を +行なう、仮名漢字変換サーバです。 +.SH オプション +.TP +.BI \-f " filename" +このオプションは、\fIsj3serv\fP の読み込むセットアップファイルを指定します。 +.br +\fIsj3serv\fP はデフォルトではセットアップファイル +‘/usr/local/lib/sj3/serverrc’を読み込みますが、 +このオプションが指定されたときにはかわりに +コマンドラインで指定されたセットアップファイルを読み込みます。 +.br +.SH 関連ファイル +.PD 0 +.TP \w'\ \ \ \ user/\fIusername\fP/private.dic'u+2n +/usr/local/lib/sj3/serverrc +デフォルト仮名変換サーバ セットアップファイル +.TP +/usr/local/lib/sj3/dict/ +かな漢字変換サーバ デフォルト辞書ディレクトリ +.TP + sj3main.dic +仮名漢字変換メイン辞書 +.TP + user/\fIusername\fP/private.dic +仮名漢字変換ユーザ辞書 +.TP + user/\fIusername\fP/study.dat +仮名漢字変換学習ファイル + +.SH 関連事項 +sj3(1), sj3lib(3) + +.SH バグ +変換ルーチン内での辞書の識別には、辞書ファイルの inode 番号を +使用しています。コピーなどにより辞書ファイルの inode 番号が +変更されると、文節学習データは失われます。 diff --git a/include/Makefile.am b/include/Makefile.am new file mode 100644 index 0000000..b501b41 --- /dev/null +++ b/include/Makefile.am @@ -0,0 +1,6 @@ +SUBDIRS = \ + sj3common \ + sj3compat \ + sj3core \ + sj3lib \ + sj3rkcv diff --git a/include/sj3common/Const.h b/include/sj3common/Const.h new file mode 100644 index 0000000..9ef6f42 --- /dev/null +++ b/include/sj3common/Const.h @@ -0,0 +1,99 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: Const.h,v $ + * $SonyRevision: 1.4 $ + * $SonyDate: 1997/01/23 11:20:52 $ + */ + +#ifndef CONST_H +#define CONST_H + +/* + * Change some default values. + * Patched by Hidekazu Kuroki(hidekazu@cs.titech.ac.jp) 1996/8/10 + */ + +#define PASSWORDLEN 16 + +#define YOMIBUFSIZE 1024 +#define KANJIBUFSIZE 2048 + +#define MINIDXLEN 512 +#define MINSEGLEN 512 +#define MINSEGNUM 1 +#define MINSTYNUM 512 +#define MAXSTYNUM 0x7fff +#define MINCLSTEP 1 +#define MAXCLSTEP 256 +#define MINCLLEN 512 +#define MAXCLLEN 0x7fff + +#define DEBUGOUTFILE NULL +#define DEBUGLEVEL 0 +#define FORKFLAG 1 +#define MAXCLIENTNUM 512 +#define LOGOUTFILE NULL +#define ERROROUTFILE "/dev/null" +#define ADDRESSFAMILY "unspec" +#define PORTNAME "sj3" +#define LOCALHOST "localhost" +#define CHROOTFLAG 1 + +#define MAINDICTIONARY "sj3main.dic" +#define USERDICTIONARY "private.dic" +#define STUDYFILE "study.dat" + +/* + * Change the default Port number of sj3 for FreeBSD. + * Patched by Hidekazu Kuroki(hidekazu@cs.titech.ac.jp) 1996/8/20 + */ +#define PORTNUMBER "3086" +#define DIRECTRYMODE 0755 +#define DICTFILEMODE 0644 +#define MODE_MASK 0777 + +#define DEFIDXLEN 2048 +#define DEFSEGLEN 2048 +#define DEFSEGNUM 256 +#define DEFSTYNUM 2048 +#define DEFCLSTEP 1 +#define DEFCLLEN 2048 + +#define NOTLOCKED -1 + +#define ERROR -1 + +#ifndef FALSE +# define TRUE -1 +# define FALSE (!TRUE) +#endif + +#endif /* CONST_H */ diff --git a/include/sj3common/Makefile.am b/include/sj3common/Makefile.am new file mode 100644 index 0000000..dc86ea8 --- /dev/null +++ b/include/sj3common/Makefile.am @@ -0,0 +1,9 @@ +EXTRA_DIST = \ + Const.h \ + sj3cmd.h \ + sj3err.h \ + sj_const.h \ + sj_euc.h \ + sj_hinsi.h \ + sj_string.h + diff --git a/include/sj3common/sj3cmd.h b/include/sj3common/sj3cmd.h new file mode 100644 index 0000000..ed80664 --- /dev/null +++ b/include/sj3common/sj3cmd.h @@ -0,0 +1,107 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj3cmd.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:00:57 $ + */ + + + + + + + +#define SJ3SERV_VERSION_NO 2 + + + +#define SJ3_CONNECT 1 +#define SJ3_DISCONNECT 2 + +#define SJ3_OPENDICT 11 +#define SJ3_CLOSEDICT 12 + +#define SJ3_OPENSTDY 21 +#define SJ3_CLOSESTDY 22 +#define SJ3_STDYSIZE 23 + +#define SJ3_LOCK 31 +#define SJ3_UNLOCK 32 + +#define SJ3_PH2KNJ 41 + +#define SJ3_CL2KNJ 51 +#define SJ3_NEXTCL 52 +#define SJ3_PREVCL 53 +#define SJ3_CL2KNJ_ALL 54 +#define SJ3_CL2KNJ_CNT 55 + +#define SJ3_STUDY 61 +#define SJ3_CLSTUDY 62 + +#define SJ3_ADDDICT 71 +#define SJ3_DELDICT 72 + +#define SJ3_MAKEDICT 81 +#define SJ3_MAKESTDY 82 +#define SJ3_MAKEDIR 83 +#define SJ3_ACCESS 84 + +#define SJ3_GETDICT 91 +#define SJ3_NEXTDICT 92 +#define SJ3_PREVDICT 93 + +#define SJ3_WHO 100 +#define SJ3_QUIT 101 +#define SJ3_KILL 102 +#define SJ3_VERSION 103 +#define SJ3_DICTPASS 104 +#define SJ3_DICTCMNT 105 +#define SJ3_STDYPASS 106 +#define SJ3_STDYCMNT 107 + +#define SJ3_SETCVER 110 +#define SJ3_PH2KNJ_EUC 111 + +#define SJ3_CL2KNJ_EUC 112 +#define SJ3_NEXTCL_EUC 113 +#define SJ3_PREVCL_EUC 114 +#define SJ3_CL2KNJ_ALL_EUC 115 +#define SJ3_CL2KNJ_CNT_EUC 116 + +#define SJ3_CLSTUDY_EUC 117 + +#define SJ3_ADDDICT_EUC 118 +#define SJ3_DELDICT_EUC 119 + +#define SJ3_GETDICT_EUC 120 +#define SJ3_NEXTDICT_EUC 121 +#define SJ3_PREVDICT_EUC 122 diff --git a/include/sj3common/sj3err.h b/include/sj3common/sj3err.h new file mode 100644 index 0000000..8dc4af4 --- /dev/null +++ b/include/sj3common/sj3err.h @@ -0,0 +1,107 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj3err.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:00:58 $ + */ + + + + + +#define SJ3_InternalError -1 + +#define SJ3_NormalEnd 0 + +#define SJ3_ServerDown 1 +#define SJ3_OpenSocket 2 +#define SJ3_ConnectSocket 3 +#define SJ3_GetHostByName 4 +#define SJ3_NotOpened 5 +#define SJ3_NotEnoughMemory 6 +#define SJ3_IllegalCommand 7 + +#define SJ3_DifferentVersion 11 +#define SJ3_NoHostName 12 +#define SJ3_NoUserName 13 +#define SJ3_NotAllowedUser 14 +#define SJ3_AlreadyConnected 15 +#define SJ3_NotConnected 16 + +#define SJ3_TooLongParameter 21 +#define SJ3_IllegalParameter 22 + +#define SJ3_BadDictID 31 +#define SJ3_IllegalDictFile 32 +#define SJ3_IllegalStdyFile 33 +#define SJ3_IncorrectPasswd 34 +#define SJ3_FileNotExist 35 +#define SJ3_CannotAccessFile 36 +#define SJ3_CannotOpenFile 37 +#define SJ3_CannotCreateFile 38 +#define SJ3_FileReadError 39 +#define SJ3_FileWriteError 40 +#define SJ3_FileSeekError 41 + +#define SJ3_StdyAlreadyOpened 51 +#define SJ3_StdyFileNotOpened 52 +#define SJ3_TooSmallStdyArea 53 + +#define SJ3_LockedByOther 61 +#define SJ3_NotLocked 62 + +#define SJ3_NoSuchDict 71 +#define SJ3_ReadOnlyDict 72 +#define SJ3_DictLocked 73 +#define SJ3_BadYomiString 74 +#define SJ3_BadKanjiString 75 +#define SJ3_BadHinsiCode 76 + +#define SJ3_AddDictFailed 81 +#define SJ3_AlreadyExistWord 82 +#define SJ3_NoMoreDouonWord 83 +#define SJ3_NoMoreUserDict 84 +#define SJ3_NoMoreIndexBlock 85 + +#define SJ3_DelDictFailed 91 +#define SJ3_NoSuchWord 92 + +#define SJ3_DirAlreadyExist 101 +#define SJ3_CannotCreateDir 102 + +#define SJ3_NoMoreDictData 111 + +#define SJ3_UserConnected 121 + +#define SJ3_TooLongPasswd 131 +#define SJ3_TooLongComment 132 + +#define SJ3_CannotCodeConvert 133 diff --git a/include/sj3common/sj_const.h b/include/sj3common/sj_const.h new file mode 100644 index 0000000..90c4808 --- /dev/null +++ b/include/sj3common/sj_const.h @@ -0,0 +1,155 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj_const.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:01 $ + */ + +#ifndef _SJ_CONST + +#define _SJ_CONST +#include "sj_euc.h" + +#define MATCH 0 +#define OVER 1 +#define PARTLY 2 +#define CONT 3 +#define UNDER 4 + +#define FALSE 0 +#define TRUE -1 + +#define AD_DONE 0x0000 +#define AD_NOTUSERDICT 0x0001 +#define AD_BADYOMI 0x0002 +#define AD_BADKANJI 0x0004 +#define AD_BADHINSI 0x0008 + +#define AD_AREXIST 0x0010 +#define AD_OVFLWDOUBLK 0x0020 +#define AD_OVFLWDOUNUM 0x0040 +#define AD_OVFLWUSRDIC 0x0080 +#define AD_OVFLWINDEX 0x0100 + +#define AD_NOMIDASI 0x0010 +#define AD_NOHINSI 0x0020 +#define AD_NOKANJI 0x0040 + +#define C_WAKACHI 0x00 +#define C_MINASI 0x01 +#define C_BUNSETU 0x02 +#define C_DICT 0x03 +#define C_N_ARABIA 0x04 +#define C_N_ARACMA 0x05 +#define C_N_KAZU 0x06 +#define C_N_SUUJI 0x07 +#define C_N_NANSUU 0x08 +#define C_N_KANKURA 0x09 +#define C_N_ARAKURA 0x0a +#define C_N_KAZULONG 0x0b +#define C_N_KAZULCMA 0x0c +#define C_N_SUUJILONG 0x0d + +#define JFLAG_N10 (1 << 15) +#define JFLAG_N_1 (1 << 14) +#define JFLAG_NS1 (1 << 13) +#define JFLAG_N01 (1 << 12) +#define JFLAG_N23 (1 << 11) +#define JFLAG_NK2 (1 << 10) +#define JFLAG_NK4 (1 << 9) +#define JFLAG_NN0 (1 << 8) +#define JFLAG_NSN (1 << 7) +#define JFLAG_KA (1 << 0) + +#define DO_CLSTUDY 0x01 +#define DO_IKKATU 0x02 + +#define K_DOUSHI 1 +#define K_YOUGEN 2 +#define K_TAIGEN 3 +#define K_FUKUSI 4 +#define K_RENTAISI 5 +#define K_SONOTA 6 + +#define EUC_a1 (u_char)0xa1 +#define EUC_a2 (u_char)0xa2 +#define EUC_a3 (u_char)0xa3 +#define EUC_a4 (u_char)0xa4 +#define EUC_a5 (u_char)0xa5 + + +#define EUC_START (u_char)0xa1 +#define EUC_END (u_char)0xfe +#define EUC_END_KIGOU (u_char)0xae +#define EUC_0 (u_char)0xb0 +#define EUC_END_0 (u_char)0xb9 +#define EUC_A (u_char)0xc1 +#define EUC_END_A (u_char)0xda +#define EUC_a (u_char)0xe1 +#define EUC_END_a (u_char)0xfa +#define EUC_END_HIRA (u_char)0xf3 +#define EUC_VU (u_char)0xf4 +#define EUC_XKA (u_char)0xf5 +#define EUC_XKE (u_char)0xf6 + +#define isknj1(c) (((c) == SS2) || (((c) & 0x80) && ((c) != SS3))) + +#define SHU 0x01 +#define T_KANOU 0x80 +#define T_SHUUJO 0x40 + +#define DICTOP 0x01 +#define FZKTOP 0x02 +#define DEPEND 0x04 +#define NUMBER 0x08 +#define FZK_KGU 0x10 +#define TAI_KGU 0x20 +#define BEFORNUM 0x40 +#define MIDNUM 0x80 +#define NOTNRM 0xFE + +#define CNJEND 0xff +#define TYOUONFLG 0x80 + +#define MAXFREC 32 +#define MAXFLVL 10 +#define FZKEND 0xff + +#define SETTOU_O 1 +#define SETTOU_GO 2 +#define SETTOU_DAI 3 +#define SETTOU_KIGOU 4 + +#define NUMKETALENGTH 16 +#define NUMWORDBUF ((NUMKETALENGTH+3)/4) + + +#endif diff --git a/include/sj3common/sj_euc.h b/include/sj3common/sj_euc.h new file mode 100644 index 0000000..9dc87e0 --- /dev/null +++ b/include/sj3common/sj_euc.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj_euc.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:05 $ + */ + +#ifndef _SJ_EUC + +#define _SJ_EUC + +#ifndef SS2 +#define SS2 0x8e +#endif +#ifndef SS3 +#define SS3 0x8f +#endif + +#endif diff --git a/include/sj3common/sj_hinsi.h b/include/sj3common/sj_hinsi.h new file mode 100644 index 0000000..101125f --- /dev/null +++ b/include/sj3common/sj_hinsi.h @@ -0,0 +1,231 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj_hinsi.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:07 $ + */ + + + + + +#ifndef _SJ_HINSHI + +#define _SJ_HINSHI + +#define MEISI_1 1 +#define MEISI_2 2 +#define MEISI_3 3 +#define MEISI_4 4 +#define MEISI_5 5 +#define MEISI_6 6 +#define MEISI_7 7 +#define MEISI_8 8 +#define MEISI_9 9 +#define MEISI_10 10 +#define MEISI_11 11 +#define D_MEISI_1 12 +#define D_MEISI_2 13 +#define D_MEISI_3 14 +#define D_MEISI_4 15 +#define D_MEISI_5 16 +#define D_MEISI_6 17 +#define MEISI_20 18 + +#define MYOUJI 21 +#define NAMAE 22 +#define KIGYOU 23 +#define TIMEI 24 +#define KEN_KU 25 +#define RENTAISI 26 +#define SETUZOKU 27 +#define KANDOUSI 28 +#define JOSUUSI 29 +#define SUUSI 30 +#define SETTOU_1 31 +#define SETTOU_2 32 +#define SETTOU_3 33 +#define SETTOU_4 34 +#define SETTOU_5 35 +#define SETUBI_1 36 +#define SETUBI_2 37 +#define SETUBI_3 38 +#define SETUBI_4 39 +#define SETUBI_5 40 +#define SETUBI_6 41 +#define SETUBI_7 42 +#define SETUBI_8 43 +#define SETUBI_9 44 +#define FUKUSI_1 45 +#define FUKUSI_2 46 +#define FUKUSI_3 47 +#define FUKUSI_4 48 +#define FUKUSI_5 49 +#define FUKUSI_6 50 +#define FUKUSI_7 51 +#define FUKUSI_8 52 +#define FUKUSI_9 53 +#define JOSUUSI2 54 + + +#define KEIYOUSI_1 60 +#define KEIYOUSI_2 61 +#define KEIYOUSI_3 62 +#define KEIYOUSI_4 63 +#define KEIYOUSI_5 64 +#define KEIYOUSI_6 65 +#define KEIYOUSI_7 66 +#define KEIYOUSI_8 67 +#define KEIYOUSI_9 68 +#define KEIYOUSI_10 69 +#define KEIYOUSI_11 70 +#define KE_DOUSI_1 71 +#define KE_DOUSI_2 72 +#define KE_DOUSI_3 73 +#define KE_DOUSI_4 74 +#define KE_DOUSI_5 75 +#define KE_DOUSI_6 76 +#define KE_DOUSI_7 77 +#define KE_DOUSI_8 78 +#define KE_DOUSI_9 79 + +#define DO_SAHEN 80 +#define DO_ZAHEN 81 + + +#define DO_1DAN_1 90 +#define DO_KAGO_1 91 +#define DO_GAGO_1 92 +#define DO_SAGO_1 93 +#define DO_TAGO_1 94 +#define DO_NAGO_1 95 +#define DO_BAGO_1 96 +#define DO_MAGO_1 97 +#define DO_RAGO_1 98 +#define DO_WAGO_1 99 + +#define DO_1DAN_2 100 +#define DO_KAGO_2 101 +#define DO_GAGO_2 102 +#define DO_SAGO_2 103 +#define DO_TAGO_2 104 +#define DO_BAGO_2 105 +#define DO_MAGO_2 106 +#define DO_RAGO_2 107 +#define DO_WAGO_2 108 + + +#define DO_KAGO_5 111 +#define DO_GAGO_5 112 +#define DO_SAGO_5 113 +#define DO_TAGO_5 114 +#define DO_BAGO_5 115 +#define DO_MAGO_5 116 +#define DO_RAGO_5 117 +#define DO_WAGO_5 118 + + +#define DO_KAGO_6 121 +#define DO_GAGO_6 122 +#define DO_SAGO_6 123 +#define DO_TAGO_6 124 +#define DO_BAGO_6 125 +#define DO_MAGO_6 126 +#define DO_RAGO_6 127 +#define DO_WAGO_6 128 + + +#define DO_1DAN_3 130 +#define DO_KAGO_3 131 +#define DO_GAGO_3 132 +#define DO_SAGO_3 133 +#define DO_TAGO_3 134 +#define DO_BAGO_3 135 +#define DO_MAGO_3 136 +#define DO_RAGO_3 137 +#define DO_WAGO_3 138 + + +#define DO_1DAN_4 140 +#define DO_KAGO_4 141 +#define DO_GAGO_4 142 +#define DO_SAGO_4 143 +#define DO_TAGO_4 144 +#define DO_BAGO_4 145 +#define DO_MAGO_4 146 +#define DO_RAGO_4 147 +#define DO_WAGO_4 148 + + +#define DO_KAGO_7 151 +#define DO_GAGO_7 152 +#define DO_SAGO_7 153 +#define DO_TAGO_7 154 +#define DO_BAGO_7 155 +#define DO_MAGO_7 156 +#define DO_RAGO_7 157 +#define DO_WAGO_7 158 + + +#define DO_KAGO_8 161 +#define DO_GAGO_8 162 +#define DO_SAGO_8 163 +#define DO_TAGO_8 164 +#define DO_BAGO_8 165 +#define DO_MAGO_8 166 +#define DO_RAGO_8 167 +#define DO_WAGO_8 168 + + +#define SP_SA_MI1 171 +#define SP_SA_MI2 172 +#define SP_SA_YOU 173 +#define SP_SA_SYU 174 +#define SP_SA_KAT 175 +#define SP_SA_ME1 176 +#define SP_SA_ME2 177 +#define SP_KA_MIZ 178 +#define SP_KA_YOU 179 +#define SP_KA_SYU 180 +#define SP_KA_KAT 181 +#define SP_KA_MEI 182 +#define TEINEI1 183 + +#define TEINEI2 184 +#define SP_KA_ONB 185 +#define SP_FUKUSI 186 +#define AISATU 187 +#define SP_KEIYOUSI 188 +#define TANKANJI 189 + +#define IKKATU 200 + +#endif diff --git a/include/sj3common/sj_string.h b/include/sj3common/sj_string.h new file mode 100644 index 0000000..8c07651 --- /dev/null +++ b/include/sj3common/sj_string.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2004 Iwata + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef SJ_STRING_H +#define SJ_STRING_H + +/* string.c */ +int sj3_str_sjistoeuc(unsigned char *, int, unsigned char *, unsigned char *, int *); +int sj3_str_euctosjis(unsigned char *, int, unsigned char *, unsigned char *, int *); +int sj3_sjistoeuclen(unsigned char *, int); + +int sj3_sjistoeuc(unsigned char *s, int, unsigned char *, int); +int sj3_euctosjis(unsigned char *s, int, unsigned char *, int); +void sj_euc2sjis(unsigned char *); +void sj_jis2sjis(unsigned char *); +void sj_sjis2euc(unsigned char *); +void sj_sjis2jis(unsigned char *); +unsigned short sj3_jis2sjis(unsigned short); +unsigned short sj3_jis2euc(unsigned short); +unsigned short sj3_sjis2jis(unsigned short); +unsigned short sj3_euc2sjis(unsigned short); +unsigned short sj3_sjis2euc(unsigned short); + +#endif /* SJ3INTERN_H */ diff --git a/include/sj3compat/Makefile.am b/include/sj3compat/Makefile.am new file mode 100644 index 0000000..58c6f47 --- /dev/null +++ b/include/sj3compat/Makefile.am @@ -0,0 +1,2 @@ +EXTRA_DIST = sj3compat.h sys-queue.h + diff --git a/include/sj3compat/sj3compat.h b/include/sj3compat/sj3compat.h new file mode 100644 index 0000000..dc625f0 --- /dev/null +++ b/include/sj3compat/sj3compat.h @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2004 Iwata + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef SJ3COMPAT_H +#define SJ3COMPAT_H + +#include + +#include +#include +#include +#include +#include + +#ifdef HAVE_SYS_PARAM_H +#include +#endif + +#ifndef MAXHOSTNAMELEN +#define MAXHOSTNAMELEN 128 +#endif + +#ifndef MAXLOGNAME +#define MAXLOGNAME 32 +#endif + +#ifndef FILENAME_MAX +#define FILENAME_MAX 1024 +#endif + +/* bsd-asprintf.c */ +#ifndef HAVE_VASPRINTF +#define vasprintf sj3_vasprintf +int sj3_vasprintf(char **ret, const char *format, va_list ap); +#endif +#ifndef HAVE_ASPRINTF +#define asprintf sj3_asprintf +int sj3_asprintf(char **ret, const char *format, ...); +#endif + +/* getopt.c */ +#ifndef HAVE_GETOPT_OPTRESET +# undef getopt +# undef opterr +# undef optind +# undef optopt +# undef optreset +# undef optarg +# define getopt(ac, av, o) BSDgetopt(ac, av, o) +# define opterr BSDopterr +# define optind BSDoptind +# define optopt BSDoptopt +# define optreset BSDoptreset +# define optarg BSDoptarg +#endif + +/* bsd-getpeereid.c */ +#ifndef HAVE_GETPEEREID +#define getpeereid sj3_getpeereid +int sj3_getpeereid(int s, uid_t *euid, gid_t *egid); +#endif + +/* bsd-misc.c */ +#if !defined(HAVE_STRERROR) && defined(HAVE_SYS_ERRLIST) && defined(HAVE_SYS_NERR) +#define strerror sj3_strerror +const char *sj3_strerror(int e); +#endif +#ifndef HAVE_STRDUP +#define strdup sj3_strdup +char *sj3_strdup(const char *str); +#endif + +/* bsd-snprintf.c */ +#ifndef HAVE_VSNPRINTF +#define vsnprintf sj3_vsnprintf +int sj3_vsnprintf(char *str, size_t size, const char *format, va_list ap); +#endif +#ifndef HAVE_SNPRINTF +#define snprintf sj3_snprintf +int sj3_snprintf(char *str, size_t size, const char *format, ...); +#endif + +/* daemon.c */ +#ifndef HAVE_DAEMON +#define daemon sj3_daemon +int sj3_daemon(int, int); +#endif + +/* #include "fake-rfc2553.h" */ + +/* inet_ntoa.c */ +#if defined(BROKEN_INET_NTOA) || !defined(HAVE_INET_NTOA) +#define inet_ntoa sj3_inet_ntoa +char* sj3_inet_ntoa(struct in_addr in); +#endif + +/* setproctitle.c */ +#ifndef HAVE_SETPROCTITLE +#define setproctitle sj3_setproctitle +void setproctitle(const char *fmt, ...); +#endif + +/* strlcat.c */ +#ifndef HAVE_STRLCAT +#define strlcat sj3_strlcat +size_t sj3_strlcat(char *, const char *, size_t); +#endif + +/* strlcpy.c */ +#ifndef HAVE_STRLCPY +#define strlcpy sj3_strlcpy +size_t sj3_strlcpy(char *, const char *, size_t); +#endif + +#endif /* SJ3COMPAT_H */ diff --git a/include/sj3compat/sys-queue.h b/include/sj3compat/sys-queue.h new file mode 100644 index 0000000..5c3e6ed --- /dev/null +++ b/include/sj3compat/sys-queue.h @@ -0,0 +1,610 @@ +/* $OpenBSD: queue.h,v 1.32 2007/04/30 18:42:34 pedro Exp $ */ +/* $NetBSD: queue.h,v 1.11 1996/05/16 05:17:14 mycroft Exp $ */ + +/* + * Copyright (c) 1991, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)queue.h 8.5 (Berkeley) 8/20/94 + */ + +#ifndef _FAKE_QUEUE_H_ +#define _FAKE_QUEUE_H_ + +/* + * Require for OS/X and other platforms that have old/broken/incomplete + * . + */ +#undef SLIST_HEAD +#undef SLIST_HEAD_INITIALIZER +#undef SLIST_ENTRY +#undef SLIST_FOREACH_PREVPTR +#undef SLIST_FIRST +#undef SLIST_END +#undef SLIST_EMPTY +#undef SLIST_NEXT +#undef SLIST_FOREACH +#undef SLIST_INIT +#undef SLIST_INSERT_AFTER +#undef SLIST_INSERT_HEAD +#undef SLIST_REMOVE_HEAD +#undef SLIST_REMOVE +#undef SLIST_REMOVE_NEXT +#undef LIST_HEAD +#undef LIST_HEAD_INITIALIZER +#undef LIST_ENTRY +#undef LIST_FIRST +#undef LIST_END +#undef LIST_EMPTY +#undef LIST_NEXT +#undef LIST_FOREACH +#undef LIST_INIT +#undef LIST_INSERT_AFTER +#undef LIST_INSERT_BEFORE +#undef LIST_INSERT_HEAD +#undef LIST_REMOVE +#undef LIST_REPLACE +#undef SIMPLEQ_HEAD +#undef SIMPLEQ_HEAD_INITIALIZER +#undef SIMPLEQ_ENTRY +#undef SIMPLEQ_FIRST +#undef SIMPLEQ_END +#undef SIMPLEQ_EMPTY +#undef SIMPLEQ_NEXT +#undef SIMPLEQ_FOREACH +#undef SIMPLEQ_INIT +#undef SIMPLEQ_INSERT_HEAD +#undef SIMPLEQ_INSERT_TAIL +#undef SIMPLEQ_INSERT_AFTER +#undef SIMPLEQ_REMOVE_HEAD +#undef TAILQ_HEAD +#undef TAILQ_HEAD_INITIALIZER +#undef TAILQ_ENTRY +#undef TAILQ_FIRST +#undef TAILQ_END +#undef TAILQ_NEXT +#undef TAILQ_LAST +#undef TAILQ_PREV +#undef TAILQ_EMPTY +#undef TAILQ_FOREACH +#undef TAILQ_FOREACH_REVERSE +#undef TAILQ_INIT +#undef TAILQ_INSERT_HEAD +#undef TAILQ_INSERT_TAIL +#undef TAILQ_INSERT_AFTER +#undef TAILQ_INSERT_BEFORE +#undef TAILQ_REMOVE +#undef TAILQ_REPLACE +#undef CIRCLEQ_HEAD +#undef CIRCLEQ_HEAD_INITIALIZER +#undef CIRCLEQ_ENTRY +#undef CIRCLEQ_FIRST +#undef CIRCLEQ_LAST +#undef CIRCLEQ_END +#undef CIRCLEQ_NEXT +#undef CIRCLEQ_PREV +#undef CIRCLEQ_EMPTY +#undef CIRCLEQ_FOREACH +#undef CIRCLEQ_FOREACH_REVERSE +#undef CIRCLEQ_INIT +#undef CIRCLEQ_INSERT_AFTER +#undef CIRCLEQ_INSERT_BEFORE +#undef CIRCLEQ_INSERT_HEAD +#undef CIRCLEQ_INSERT_TAIL +#undef CIRCLEQ_REMOVE +#undef CIRCLEQ_REPLACE + +/* + * This file defines five types of data structures: singly-linked lists, + * lists, simple queues, tail queues, and circular queues. + * + * + * A singly-linked list is headed by a single forward pointer. The elements + * are singly linked for minimum space and pointer manipulation overhead at + * the expense of O(n) removal for arbitrary elements. New elements can be + * added to the list after an existing element or at the head of the list. + * Elements being removed from the head of the list should use the explicit + * macro for this purpose for optimum efficiency. A singly-linked list may + * only be traversed in the forward direction. Singly-linked lists are ideal + * for applications with large datasets and few or no removals or for + * implementing a LIFO queue. + * + * A list is headed by a single forward pointer (or an array of forward + * pointers for a hash table header). The elements are doubly linked + * so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before + * or after an existing element or at the head of the list. A list + * may only be traversed in the forward direction. + * + * A simple queue is headed by a pair of pointers, one the head of the + * list and the other to the tail of the list. The elements are singly + * linked to save space, so elements can only be removed from the + * head of the list. New elements can be added to the list before or after + * an existing element, at the head of the list, or at the end of the + * list. A simple queue may only be traversed in the forward direction. + * + * A tail queue is headed by a pair of pointers, one to the head of the + * list and the other to the tail of the list. The elements are doubly + * linked so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before or + * after an existing element, at the head of the list, or at the end of + * the list. A tail queue may be traversed in either direction. + * + * A circle queue is headed by a pair of pointers, one to the head of the + * list and the other to the tail of the list. The elements are doubly + * linked so that an arbitrary element can be removed without a need to + * traverse the list. New elements can be added to the list before or after + * an existing element, at the head of the list, or at the end of the list. + * A circle queue may be traversed in either direction, but has a more + * complex end of list detection. + * + * For details on the use of these macros, see the queue(3) manual page. + */ + +#if defined(QUEUE_MACRO_DEBUG) || (defined(_KERNEL) && defined(DIAGNOSTIC)) +#define _Q_INVALIDATE(a) (a) = ((void *)-1) +#else +#define _Q_INVALIDATE(a) +#endif + +/* + * Singly-linked List definitions. + */ +#define SLIST_HEAD(name, type) \ +struct name { \ + struct type *slh_first; /* first element */ \ +} + +#define SLIST_HEAD_INITIALIZER(head) \ + { NULL } + +#define SLIST_ENTRY(type) \ +struct { \ + struct type *sle_next; /* next element */ \ +} + +/* + * Singly-linked List access methods. + */ +#define SLIST_FIRST(head) ((head)->slh_first) +#define SLIST_END(head) NULL +#define SLIST_EMPTY(head) (SLIST_FIRST(head) == SLIST_END(head)) +#define SLIST_NEXT(elm, field) ((elm)->field.sle_next) + +#define SLIST_FOREACH(var, head, field) \ + for((var) = SLIST_FIRST(head); \ + (var) != SLIST_END(head); \ + (var) = SLIST_NEXT(var, field)) + +#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \ + for ((varp) = &SLIST_FIRST((head)); \ + ((var) = *(varp)) != SLIST_END(head); \ + (varp) = &SLIST_NEXT((var), field)) + +/* + * Singly-linked List functions. + */ +#define SLIST_INIT(head) { \ + SLIST_FIRST(head) = SLIST_END(head); \ +} + +#define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ + (elm)->field.sle_next = (slistelm)->field.sle_next; \ + (slistelm)->field.sle_next = (elm); \ +} while (0) + +#define SLIST_INSERT_HEAD(head, elm, field) do { \ + (elm)->field.sle_next = (head)->slh_first; \ + (head)->slh_first = (elm); \ +} while (0) + +#define SLIST_REMOVE_NEXT(head, elm, field) do { \ + (elm)->field.sle_next = (elm)->field.sle_next->field.sle_next; \ +} while (0) + +#define SLIST_REMOVE_HEAD(head, field) do { \ + (head)->slh_first = (head)->slh_first->field.sle_next; \ +} while (0) + +#define SLIST_REMOVE(head, elm, type, field) do { \ + if ((head)->slh_first == (elm)) { \ + SLIST_REMOVE_HEAD((head), field); \ + } else { \ + struct type *curelm = (head)->slh_first; \ + \ + while (curelm->field.sle_next != (elm)) \ + curelm = curelm->field.sle_next; \ + curelm->field.sle_next = \ + curelm->field.sle_next->field.sle_next; \ + _Q_INVALIDATE((elm)->field.sle_next); \ + } \ +} while (0) + +/* + * List definitions. + */ +#define LIST_HEAD(name, type) \ +struct name { \ + struct type *lh_first; /* first element */ \ +} + +#define LIST_HEAD_INITIALIZER(head) \ + { NULL } + +#define LIST_ENTRY(type) \ +struct { \ + struct type *le_next; /* next element */ \ + struct type **le_prev; /* address of previous next element */ \ +} + +/* + * List access methods + */ +#define LIST_FIRST(head) ((head)->lh_first) +#define LIST_END(head) NULL +#define LIST_EMPTY(head) (LIST_FIRST(head) == LIST_END(head)) +#define LIST_NEXT(elm, field) ((elm)->field.le_next) + +#define LIST_FOREACH(var, head, field) \ + for((var) = LIST_FIRST(head); \ + (var)!= LIST_END(head); \ + (var) = LIST_NEXT(var, field)) + +/* + * List functions. + */ +#define LIST_INIT(head) do { \ + LIST_FIRST(head) = LIST_END(head); \ +} while (0) + +#define LIST_INSERT_AFTER(listelm, elm, field) do { \ + if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \ + (listelm)->field.le_next->field.le_prev = \ + &(elm)->field.le_next; \ + (listelm)->field.le_next = (elm); \ + (elm)->field.le_prev = &(listelm)->field.le_next; \ +} while (0) + +#define LIST_INSERT_BEFORE(listelm, elm, field) do { \ + (elm)->field.le_prev = (listelm)->field.le_prev; \ + (elm)->field.le_next = (listelm); \ + *(listelm)->field.le_prev = (elm); \ + (listelm)->field.le_prev = &(elm)->field.le_next; \ +} while (0) + +#define LIST_INSERT_HEAD(head, elm, field) do { \ + if (((elm)->field.le_next = (head)->lh_first) != NULL) \ + (head)->lh_first->field.le_prev = &(elm)->field.le_next;\ + (head)->lh_first = (elm); \ + (elm)->field.le_prev = &(head)->lh_first; \ +} while (0) + +#define LIST_REMOVE(elm, field) do { \ + if ((elm)->field.le_next != NULL) \ + (elm)->field.le_next->field.le_prev = \ + (elm)->field.le_prev; \ + *(elm)->field.le_prev = (elm)->field.le_next; \ + _Q_INVALIDATE((elm)->field.le_prev); \ + _Q_INVALIDATE((elm)->field.le_next); \ +} while (0) + +#define LIST_REPLACE(elm, elm2, field) do { \ + if (((elm2)->field.le_next = (elm)->field.le_next) != NULL) \ + (elm2)->field.le_next->field.le_prev = \ + &(elm2)->field.le_next; \ + (elm2)->field.le_prev = (elm)->field.le_prev; \ + *(elm2)->field.le_prev = (elm2); \ + _Q_INVALIDATE((elm)->field.le_prev); \ + _Q_INVALIDATE((elm)->field.le_next); \ +} while (0) + +/* + * Simple queue definitions. + */ +#define SIMPLEQ_HEAD(name, type) \ +struct name { \ + struct type *sqh_first; /* first element */ \ + struct type **sqh_last; /* addr of last next element */ \ +} + +#define SIMPLEQ_HEAD_INITIALIZER(head) \ + { NULL, &(head).sqh_first } + +#define SIMPLEQ_ENTRY(type) \ +struct { \ + struct type *sqe_next; /* next element */ \ +} + +/* + * Simple queue access methods. + */ +#define SIMPLEQ_FIRST(head) ((head)->sqh_first) +#define SIMPLEQ_END(head) NULL +#define SIMPLEQ_EMPTY(head) (SIMPLEQ_FIRST(head) == SIMPLEQ_END(head)) +#define SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next) + +#define SIMPLEQ_FOREACH(var, head, field) \ + for((var) = SIMPLEQ_FIRST(head); \ + (var) != SIMPLEQ_END(head); \ + (var) = SIMPLEQ_NEXT(var, field)) + +/* + * Simple queue functions. + */ +#define SIMPLEQ_INIT(head) do { \ + (head)->sqh_first = NULL; \ + (head)->sqh_last = &(head)->sqh_first; \ +} while (0) + +#define SIMPLEQ_INSERT_HEAD(head, elm, field) do { \ + if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \ + (head)->sqh_last = &(elm)->field.sqe_next; \ + (head)->sqh_first = (elm); \ +} while (0) + +#define SIMPLEQ_INSERT_TAIL(head, elm, field) do { \ + (elm)->field.sqe_next = NULL; \ + *(head)->sqh_last = (elm); \ + (head)->sqh_last = &(elm)->field.sqe_next; \ +} while (0) + +#define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ + if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\ + (head)->sqh_last = &(elm)->field.sqe_next; \ + (listelm)->field.sqe_next = (elm); \ +} while (0) + +#define SIMPLEQ_REMOVE_HEAD(head, field) do { \ + if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \ + (head)->sqh_last = &(head)->sqh_first; \ +} while (0) + +/* + * Tail queue definitions. + */ +#define TAILQ_HEAD(name, type) \ +struct name { \ + struct type *tqh_first; /* first element */ \ + struct type **tqh_last; /* addr of last next element */ \ +} + +#define TAILQ_HEAD_INITIALIZER(head) \ + { NULL, &(head).tqh_first } + +#define TAILQ_ENTRY(type) \ +struct { \ + struct type *tqe_next; /* next element */ \ + struct type **tqe_prev; /* address of previous next element */ \ +} + +/* + * tail queue access methods + */ +#define TAILQ_FIRST(head) ((head)->tqh_first) +#define TAILQ_END(head) NULL +#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) +#define TAILQ_LAST(head, headname) \ + (*(((struct headname *)((head)->tqh_last))->tqh_last)) +/* XXX */ +#define TAILQ_PREV(elm, headname, field) \ + (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) +#define TAILQ_EMPTY(head) \ + (TAILQ_FIRST(head) == TAILQ_END(head)) + +#define TAILQ_FOREACH(var, head, field) \ + for((var) = TAILQ_FIRST(head); \ + (var) != TAILQ_END(head); \ + (var) = TAILQ_NEXT(var, field)) + +#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ + for((var) = TAILQ_LAST(head, headname); \ + (var) != TAILQ_END(head); \ + (var) = TAILQ_PREV(var, headname, field)) + +/* + * Tail queue functions. + */ +#define TAILQ_INIT(head) do { \ + (head)->tqh_first = NULL; \ + (head)->tqh_last = &(head)->tqh_first; \ +} while (0) + +#define TAILQ_INSERT_HEAD(head, elm, field) do { \ + if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \ + (head)->tqh_first->field.tqe_prev = \ + &(elm)->field.tqe_next; \ + else \ + (head)->tqh_last = &(elm)->field.tqe_next; \ + (head)->tqh_first = (elm); \ + (elm)->field.tqe_prev = &(head)->tqh_first; \ +} while (0) + +#define TAILQ_INSERT_TAIL(head, elm, field) do { \ + (elm)->field.tqe_next = NULL; \ + (elm)->field.tqe_prev = (head)->tqh_last; \ + *(head)->tqh_last = (elm); \ + (head)->tqh_last = &(elm)->field.tqe_next; \ +} while (0) + +#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ + if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\ + (elm)->field.tqe_next->field.tqe_prev = \ + &(elm)->field.tqe_next; \ + else \ + (head)->tqh_last = &(elm)->field.tqe_next; \ + (listelm)->field.tqe_next = (elm); \ + (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \ +} while (0) + +#define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ + (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ + (elm)->field.tqe_next = (listelm); \ + *(listelm)->field.tqe_prev = (elm); \ + (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \ +} while (0) + +#define TAILQ_REMOVE(head, elm, field) do { \ + if (((elm)->field.tqe_next) != NULL) \ + (elm)->field.tqe_next->field.tqe_prev = \ + (elm)->field.tqe_prev; \ + else \ + (head)->tqh_last = (elm)->field.tqe_prev; \ + *(elm)->field.tqe_prev = (elm)->field.tqe_next; \ + _Q_INVALIDATE((elm)->field.tqe_prev); \ + _Q_INVALIDATE((elm)->field.tqe_next); \ +} while (0) + +#define TAILQ_REPLACE(head, elm, elm2, field) do { \ + if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL) \ + (elm2)->field.tqe_next->field.tqe_prev = \ + &(elm2)->field.tqe_next; \ + else \ + (head)->tqh_last = &(elm2)->field.tqe_next; \ + (elm2)->field.tqe_prev = (elm)->field.tqe_prev; \ + *(elm2)->field.tqe_prev = (elm2); \ + _Q_INVALIDATE((elm)->field.tqe_prev); \ + _Q_INVALIDATE((elm)->field.tqe_next); \ +} while (0) + +/* + * Circular queue definitions. + */ +#define CIRCLEQ_HEAD(name, type) \ +struct name { \ + struct type *cqh_first; /* first element */ \ + struct type *cqh_last; /* last element */ \ +} + +#define CIRCLEQ_HEAD_INITIALIZER(head) \ + { CIRCLEQ_END(&head), CIRCLEQ_END(&head) } + +#define CIRCLEQ_ENTRY(type) \ +struct { \ + struct type *cqe_next; /* next element */ \ + struct type *cqe_prev; /* previous element */ \ +} + +/* + * Circular queue access methods + */ +#define CIRCLEQ_FIRST(head) ((head)->cqh_first) +#define CIRCLEQ_LAST(head) ((head)->cqh_last) +#define CIRCLEQ_END(head) ((void *)(head)) +#define CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next) +#define CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev) +#define CIRCLEQ_EMPTY(head) \ + (CIRCLEQ_FIRST(head) == CIRCLEQ_END(head)) + +#define CIRCLEQ_FOREACH(var, head, field) \ + for((var) = CIRCLEQ_FIRST(head); \ + (var) != CIRCLEQ_END(head); \ + (var) = CIRCLEQ_NEXT(var, field)) + +#define CIRCLEQ_FOREACH_REVERSE(var, head, field) \ + for((var) = CIRCLEQ_LAST(head); \ + (var) != CIRCLEQ_END(head); \ + (var) = CIRCLEQ_PREV(var, field)) + +/* + * Circular queue functions. + */ +#define CIRCLEQ_INIT(head) do { \ + (head)->cqh_first = CIRCLEQ_END(head); \ + (head)->cqh_last = CIRCLEQ_END(head); \ +} while (0) + +#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \ + (elm)->field.cqe_next = (listelm)->field.cqe_next; \ + (elm)->field.cqe_prev = (listelm); \ + if ((listelm)->field.cqe_next == CIRCLEQ_END(head)) \ + (head)->cqh_last = (elm); \ + else \ + (listelm)->field.cqe_next->field.cqe_prev = (elm); \ + (listelm)->field.cqe_next = (elm); \ +} while (0) + +#define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \ + (elm)->field.cqe_next = (listelm); \ + (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \ + if ((listelm)->field.cqe_prev == CIRCLEQ_END(head)) \ + (head)->cqh_first = (elm); \ + else \ + (listelm)->field.cqe_prev->field.cqe_next = (elm); \ + (listelm)->field.cqe_prev = (elm); \ +} while (0) + +#define CIRCLEQ_INSERT_HEAD(head, elm, field) do { \ + (elm)->field.cqe_next = (head)->cqh_first; \ + (elm)->field.cqe_prev = CIRCLEQ_END(head); \ + if ((head)->cqh_last == CIRCLEQ_END(head)) \ + (head)->cqh_last = (elm); \ + else \ + (head)->cqh_first->field.cqe_prev = (elm); \ + (head)->cqh_first = (elm); \ +} while (0) + +#define CIRCLEQ_INSERT_TAIL(head, elm, field) do { \ + (elm)->field.cqe_next = CIRCLEQ_END(head); \ + (elm)->field.cqe_prev = (head)->cqh_last; \ + if ((head)->cqh_first == CIRCLEQ_END(head)) \ + (head)->cqh_first = (elm); \ + else \ + (head)->cqh_last->field.cqe_next = (elm); \ + (head)->cqh_last = (elm); \ +} while (0) + +#define CIRCLEQ_REMOVE(head, elm, field) do { \ + if ((elm)->field.cqe_next == CIRCLEQ_END(head)) \ + (head)->cqh_last = (elm)->field.cqe_prev; \ + else \ + (elm)->field.cqe_next->field.cqe_prev = \ + (elm)->field.cqe_prev; \ + if ((elm)->field.cqe_prev == CIRCLEQ_END(head)) \ + (head)->cqh_first = (elm)->field.cqe_next; \ + else \ + (elm)->field.cqe_prev->field.cqe_next = \ + (elm)->field.cqe_next; \ + _Q_INVALIDATE((elm)->field.cqe_prev); \ + _Q_INVALIDATE((elm)->field.cqe_next); \ +} while (0) + +#define CIRCLEQ_REPLACE(head, elm, elm2, field) do { \ + if (((elm2)->field.cqe_next = (elm)->field.cqe_next) == \ + CIRCLEQ_END(head)) \ + (head).cqh_last = (elm2); \ + else \ + (elm2)->field.cqe_next->field.cqe_prev = (elm2); \ + if (((elm2)->field.cqe_prev = (elm)->field.cqe_prev) == \ + CIRCLEQ_END(head)) \ + (head).cqh_first = (elm2); \ + else \ + (elm2)->field.cqe_prev->field.cqe_next = (elm2); \ + _Q_INVALIDATE((elm)->field.cqe_prev); \ + _Q_INVALIDATE((elm)->field.cqe_next); \ +} while (0) + +#endif /* !_SYS_QUEUE_H_ */ diff --git a/include/sj3core/Dict.h b/include/sj3core/Dict.h new file mode 100644 index 0000000..cd54ef1 --- /dev/null +++ b/include/sj3core/Dict.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: Dict.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:00:55 $ + */ + + + + +#define VERSIONPOS 0 + +#define PASSWDPOS 16 +#define PASSWDLEN 16 + + +#define STDYNORMPOS 32 +#define STDYNORMLEN 36 +#define STDYNORMNUM 40 +#define STDYNORMCNT 44 + +#define STDYCLIDXPOS 48 +#define STDYCLIDXLEN 52 +#define STDYCLIDXSTEP 56 + +#define STDYCLSEGPOS 64 +#define STDYCLSEGLEN 68 + + +#define DICTIDXPOS 32 +#define DICTIDXLEN 36 + +#define DICTSEGPOS 48 +#define DICTSEGLEN 52 +#define DICTSEGNUM 56 +#define DICTSEGMAX 60 + +#define DICTAIDXPOS 64 +#define DICTAIDXLEN 68 + +#define DICTASEGPOS 80 +#define DICTASEGLEN 84 + + +#define HEADERPOS 0 +#define HEADERLENGTH 128 +#define COMMENTPOS 128 +#define COMMENTLENGTH 128 + + +#define Byte2Long(c3,c2,c1,c0) (((c3) << (8*3)) | ((c2) << (8*2)) | \ + ((c1) << (8*1)) | ((c0) << (8*0))) +#define STDYVERSION Byte2Long('S', 2, 0, 0) +#define DICTVERSION Byte2Long('D', 2, 0, 0) diff --git a/include/sj3core/Makefile.am b/include/sj3core/Makefile.am new file mode 100644 index 0000000..dc1ecdb --- /dev/null +++ b/include/sj3core/Makefile.am @@ -0,0 +1,21 @@ +EXTRA_DIST = \ + Dict.h \ + Struct.h \ + sj3lowlib.h \ + sj_connect.h \ + sj_const.h \ + sj_dict.h \ + sj_global.h \ + sj_kanakan.h \ + sj_kcnv.h \ + sj_left.h \ + sj_prty.h \ + sj_rename.h \ + sj_right.h \ + sj_struct.h \ + sj_study.h \ + sj_suuji.h \ + sj_table.h \ + sj_typedef.h \ + sj_var.h \ + sj_yomi.h diff --git a/include/sj3core/Struct.h b/include/sj3core/Struct.h new file mode 100644 index 0000000..ac9499f --- /dev/null +++ b/include/sj3core/Struct.h @@ -0,0 +1,173 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: Struct.h,v $ + * $SonyRevision: 1.3 $ + * $SonyDate: 1994/10/21 05:13:34 $ + */ + +#ifndef STRUCT_H +#define STRUCT_H + +typedef struct global { + JREC *Jmaxjptr; + CLREC *Jmaxclptr; + JREC *Jjrt1st; + CLREC *Jclt1st; + JREC *Jjrt2nd; + CLREC *Jclt2nd; + CLREC *Jselcl; + + short Jselectid; + short Jtrank; + short Jnrank; + + u_char *Jinputyomi; + u_char *Jcnvstart; + short Jcnvlen; + u_char *Jystart; + u_char Jhyomi[MAXPHINPUTLEN + 1]; + u_char Jorgyomi[MAXCLINPUTLEN*2 + 1]; + + u_char Jkanjibuf[MINPHOUTPUTLEN]; + u_char *Jkanjipos; + u_char *Jkanjitmp; + short Jkanjilen; + + u_char Jdicinl; + u_char Jdicsaml; + TypeDicSeg Jprevseg; + + u_char Jfzkcount; + u_char Jfzk_ka_flg; + FREC Jfzktbl[MAXFREC]; + + u_char Jheadcode; + u_char Jheadlen; + + u_char Jgobilen; + + TypeGram Jprevclgrm; + TypeCnct Jprevclrow; + u_char Jnextcllen; + + short Jkhcount; + short Jnkhcount; + KHREC Jkouhotbl[MAXKOUHONUMBER]; + STDYIN *Jstdytop; + + DICT *Jcurdict; + DICTL *Jdictlist; + u_char *Jdicbuf; + u_char *Jidxbuf; + TypeIdxOfs *Jidxofs; + u_char *Jaskknj[MAXKNJASKNUMBER]; + u_char *Jaskknj_k[MAXKNJASKNUMBER]; + + STDY *Jcurstdy; + + u_short Jsuuji_wbuf[NUMWORDBUF]; + u_char Jsuuji_ubuf[NUMKETALENGTH]; + TypeClass Jsuuji_class; + u_char Jsuuji_comma; + u_char Jsuuji_keta; + u_char *Jsuuji_yptr; + u_char Jsuuji_len; + u_char Jsuuji_exit; + u_short *Jsuuji_wkeep; + u_char *Jsuuji_ukeep; + + u_char Jpeepyomi[MAXWDYOMILEN * 2 + 1]; + u_char Jpeepknj[MAXWDKANJILEN + 1]; + TypeGram Jpeepgrm; + u_char *Jpeepdptr; + u_char *Jpeephptr; + u_char *Jpeepkptr; + TypeDicSeg Jpeepidx; +} Global; + + +typedef struct dictfile { + DICT dict; + int refcnt; + fd_set lock; + FILE *fp; + int fd; + + u_char *buffer; + long bufsiz; + + long idxstrt; + long segstrt; + + TypeIdxOfs *ofsptr; + + struct dictfile *link; +} DictFile; + +typedef struct stdyfile { + STDY stdy; + int refcnt; + ino_t inode; + FILE *fp; + int fd; + + u_char *header; + + struct stdyfile *link; +} StdyFile; + +typedef struct workarea { + int refcnt; + int lock; + + struct workarea *link; + + Global global; +} WorkArea; + +typedef struct client { + int fd; + char host[MAXHOSTNAMELEN]; + char user[MAXLOGNAME]; + char prog[FILENAME_MAX]; + + WorkArea *work; + StdyFile *stdy; + short version; + unsigned char def_char[2]; +#if (defined(TLI) && defined(SOCK_UNIX)) + int unix_flag; +#endif + uid_t uid; + struct client *next; +} Client; + +#endif diff --git a/include/sj3core/sj3lowlib.h b/include/sj3core/sj3lowlib.h new file mode 100644 index 0000000..84c8a75 --- /dev/null +++ b/include/sj3core/sj3lowlib.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj3lowlib.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:00:59 $ + */ + +#ifndef SJ3LOWLIB_H +#define SJ3LOWLIB_H + + + + + +typedef struct sj3_client_env { + int fd; + int serv_dead_flg; + int stdy_size; + short svr_version; + short cli_version; + char default_char[2]; +} SJ3_CLIENT_ENV; + + + + +#ifndef SJ3_NAME_LENGTH +# define SJ3_NAME_LENGTH 128 +#endif +typedef struct sj3_who_struct { + int fd; + char hostname[SJ3_NAME_LENGTH]; + char username[SJ3_NAME_LENGTH]; + char progname[SJ3_NAME_LENGTH]; +} SJ3_WHO_STRUCT; + + +#define MBCODE_SJIS 1 +#define MBCODE_EUC 2 + +#endif /* SJ3LOWLIB_H */ diff --git a/include/sj3core/sj_connect.h b/include/sj3core/sj_connect.h new file mode 100644 index 0000000..9523245 --- /dev/null +++ b/include/sj3core/sj_connect.h @@ -0,0 +1,524 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj_connect.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:00 $ + */ + + + + + +#ifndef _SJ_CONNECT + +#define _SJ_CONNECT + +#define wo_x 0 +#define ttatte_x 0 +#define ttara_x 0 +#define tte1_x 0 +#define tte2_x 0 +#define ppanasi_x 0 +#define ppoi_x 0 +#define ue_x 0 + +#define uti_x 0 +#define oite_x 0 +#define okeru_x 0 +#define ori_x 0 +#define ka1_x 0 +#define ka2_x 0 +#define kai_x 0 +#define kasira_x 0 + +#define katagata_x 0 +#define kadouka_x 0 +#define kana_x 0 +#define kane_x 0 +#define kamo_x 0 +#define kara1_x 0 +#define kara2_x 0 +#define ga1_x 0 + +#define ga2_x 0 +#define gatera_x 0 +#define kiri_x 0 +#define kuseni_x 0 +#define kurai_x 0 +#define gurumi_x 0 +#define kedo_x 0 +#define koso_x 0 + +#define koto_x 0 +#define sa2_x 0 +#define sae_x 0 +#define si2_x 0 +#define sika_x 0 +#define sura_x 0 +#define zutu_x 0 +#define zo_x 0 + +#define tame_x 0 +#define dake_x 0 +#define dano_x 0 +#define darake_x 0 +#define tuite_x 0 +#define tuki_x 0 +#define tutu_x 0 +#define tumori_x 0 + +#define te1_x 0 +#define te2_x 0 +#define teru_x 0 +#define dearou_x 0 +#define deru_x 0 +#define to1_x 0 +#define to2_x 0 +#define totte_x 0 + +#define toiu_x 0 +#define toori_x 0 +#define toki_x 0 +#define tokoro_x 0 +#define tote_x 0 +#define tohaie_x 0 +#define tomo_x 0 +#define do_x 0 + +#define doori_x 0 +#define dokoro_x 0 +#define dokoroka_x 0 +#define domo_x 0 +#define na1_x 0 +#define naa_x 0 +#define nagara_x 0 +#define nazo_x 0 + +#define nado_x 0 +#define nari_x 0 +#define nanka_x 0 +#define nanzo_x 0 +#define nante_x 0 +#define ni1_x 0 +#define ni2_x 0 +#define ni3_x 0 + +#define nite_x 0 +#define nimo_x 0 +#define ne1_x 0 +#define nee_x 0 +#define no1_x 0 +#define no2_x 0 +#define node_x 0 +#define noni_x 0 + +#define nomi_x 0 +#define nominrz_x 0 +#define ha_x 0 +#define hazu_x 0 +#define ba_x 0 +#define bakari_x 0 +#define he_x 0 +#define hou_x 0 + +#define hoka_x 0 +#define hodo_x 0 +#define made_x 0 +#define mama_x 0 +#define mo1_x 0 +#define mo2_x 0 +#define motte_x 0 +#define mono_x 0 + +#define ya1_x 0 +#define ya2_x 0 +#define yara_x 0 +#define yue_x 0 +#define yo_x 0 +#define yori_x 0 +#define wa_x 0 +#define wake_x 0 + +#define wane_x 0 +#define wayo_x 0 +#define nn1_x 0 +#define jya_x 0 +#define tya_x 0 +#define nagara2_x 0 +#define wo_s_x 0 + +#define ze_x 0 +#define kke_x 0 +#define n_si_x 0 +#define deha_x 0 + +#define gotosi_x 0 +#define saseru_x 0 +#define zaru_x 0 +#define zu_x 0 +#define zunba_x 0 +#define seru_x 0 +#define souda_x 0 +#define youtai_x 0 + +#define denbun_x 0 +#define ta_x 0 +#define tai_x 0 +#define tagaru_x 0 +#define taru_x 0 +#define da1_x 0 +#define da2_x 0 +#define daxtu_x 0 + +#define darou_x 0 +#define de_x 0 +#define desi_x 0 +#define desho_x 0 +#define desu_x 0 +#define na2_x 0 +#define nara_x 0 +#define nai_x 0 + +#define nu_x 0 +#define ne2_x 0 +#define nn2_x 0 +#define fuuda_x 0 +#define besi_x 0 +#define mai_x 0 +#define masu_x 0 +#define masure_x 0 + +#define mase_x 0 +#define mitaida_x 0 +#define you_x 0 +#define youda_x 0 +#define rasii_x 0 +#define rareru_x 0 +#define reru_x 0 +#define site_x 0 + +#define yougen_x 0 +#define aru_x 0 +#define ara_x 0 +#define ari1_x 0 +#define ari2_x 0 +#define ari3_x 0 +#define are1_x 0 +#define are2_x 0 + +#define arou_x 0 +#define ii_x 0 +#define itasi_x 0 +#define itadaku_x 0 +#define iru_x 0 +#define eru_x 0 +#define kakeru_x 0 +#define kaneru_x 0 + +#define karazu_x 0 +#define gatai_x 0 +#define gatida_x 0 +#define kudasaru_x 0 +#define gozai_x 0 +#define sa1_x 0 +#define si1_x 0 +#define siro_x 0 + +#define jyau_x 0 +#define jimau_x 0 +#define sugiru_x 0 +#define subesi_x 0 +#define suru_x 0 +#define sure_x 0 +#define se_x 0 +#define seyo_x 0 + +#define tamau_x 0 +#define tayu_x 0 +#define timau_x 0 +#define dekiru_x 0 +#define naru_x 0 +#define nasai_x 0 +#define nasaru_x 0 +#define nikui_x 0 + +#define yasui_x 0 +#define yoi_x 0 +#define yaru_x 0 +#ifdef HORI + \244\303\244\277\244\351\244\267\244\244\244\316 \244\316\276\360\312\363\244\362\304\311\262\303 1/31 +#endif + +#define ttarasii_x 0 + + +#define wo_o 0x80 +#define ttatte_o 0x40 +#define ttara_o 0x20 +#define tte1_o 0x10 +#define tte2_o 0x08 +#define ppanasi_o 0x04 +#define ppoi_o 0x02 +#define ue_o 0x01 + +#define uti_o 0x80 +#define oite_o 0x40 +#define okeru_o 0x20 +#define ori_o 0x10 +#define ka1_o 0x08 +#define ka2_o 0x04 +#define kai_o 0x02 +#define kasira_o 0x01 + +#define katagata_o 0x80 +#define kadouka_o 0x40 +#define kana_o 0x20 +#define kane_o 0x10 +#define kamo_o 0x08 +#define kara1_o 0x04 +#define kara2_o 0x02 +#define ga1_o 0x01 + +#define ga2_o 0x80 +#define gatera_o 0x40 +#define kiri_o 0x20 +#define kuseni_o 0x10 +#define kurai_o 0x08 +#define gurumi_o 0x04 +#define kedo_o 0x02 +#define koso_o 0x01 + +#define koto_o 0x80 +#define sa2_o 0x40 +#define sae_o 0x20 +#define si2_o 0x10 +#define sika_o 0x08 +#define sura_o 0x04 +#define zutu_o 0x02 +#define zo_o 0x01 + +#define tame_o 0x80 +#define dake_o 0x40 +#define dano_o 0x20 +#define darake_o 0x10 +#define tuite_o 0x08 +#define tuki_o 0x04 +#define tutu_o 0x02 +#define tumori_o 0x01 + +#define te1_o 0x80 +#define te2_o 0x40 +#define teru_o 0x20 +#define dearou_o 0x10 +#define deru_o 0x08 +#define to1_o 0x04 +#define to2_o 0x02 +#define totte_o 0x01 + +#define toiu_o 0x80 +#define toori_o 0x40 +#define toki_o 0x20 +#define tokoro_o 0x10 +#define tote_o 0x08 +#define tohaie_o 0x04 +#define tomo_o 0x02 +#define do_o 0x01 + +#define doori_o 0x80 +#define dokoro_o 0x40 +#define dokoroka_o 0x20 +#define domo_o 0x10 +#define na1_o 0x08 +#define naa_o 0x04 +#define nagara_o 0x02 +#define nazo_o 0x01 + +#define nado_o 0x80 +#define nari_o 0x40 +#define nanka_o 0x20 +#define nanzo_o 0x10 +#define nante_o 0x08 +#define ni1_o 0x04 +#define ni2_o 0x02 +#define ni3_o 0x01 + +#define nite_o 0x80 +#define nimo_o 0x40 +#define ne1_o 0x20 +#define nee_o 0x10 +#define no1_o 0x08 +#define no2_o 0x04 +#define node_o 0x02 +#define noni_o 0x01 + +#define nomi_o 0x80 +#define nominrz_o 0x40 +#define ha_o 0x20 +#define hazu_o 0x10 +#define ba_o 0x08 +#define bakari_o 0x04 +#define he_o 0x02 +#define hou_o 0x01 + +#define hoka_o 0x80 +#define hodo_o 0x40 +#define made_o 0x20 +#define mama_o 0x10 +#define mo1_o 0x08 +#define mo2_o 0x04 +#define motte_o 0x02 +#define mono_o 0x01 + +#define ya1_o 0x80 +#define ya2_o 0x40 +#define yara_o 0x20 +#define yue_o 0x10 +#define yo_o 0x08 +#define yori_o 0x04 +#define wa_o 0x02 +#define wake_o 0x01 + +#define wane_o 0x80 +#define wayo_o 0x40 +#define nn1_o 0x20 +#define jya_o 0x10 +#define tya_o 0x08 +#define nagara2_o 0x04 +#define wo_s_o 0x02 + +#define ze_o 0x80 +#define kke_o 0x40 +#define n_si_o 0x20 +#define deha_o 0x10 + + +#define gotosi_o 0x80 +#define saseru_o 0x40 +#define zaru_o 0x20 +#define zu_o 0x10 +#define zunba_o 0x08 +#define seru_o 0x04 +#define souda_o 0x02 +#define youtai_o 0x01 + +#define denbun_o 0x80 +#define ta_o 0x40 +#define tai_o 0x20 +#define tagaru_o 0x10 +#define taru_o 0x08 +#define da1_o 0x04 +#define da2_o 0x02 +#define daxtu_o 0x01 + +#define darou_o 0x80 +#define de_o 0x40 +#define desi_o 0x20 +#define desho_o 0x10 +#define desu_o 0x08 +#define na2_o 0x04 +#define nara_o 0x02 +#define nai_o 0x01 + +#define nu_o 0x80 +#define ne2_o 0x40 +#define nn2_o 0x20 +#define fuuda_o 0x10 +#define besi_o 0x08 +#define mai_o 0x04 +#define masu_o 0x02 +#define masure_o 0x01 + +#define mase_o 0x80 +#define mitaida_o 0x40 +#define you_o 0x20 +#define youda_o 0x10 +#define rasii_o 0x08 +#define rareru_o 0x04 +#define reru_o 0x02 +#define site_o 0x01 + +#define yougen_o 0x80 +#define aru_o 0x40 +#define ara_o 0x20 +#define ari1_o 0x10 +#define ari2_o 0x08 +#define ari3_o 0x04 +#define are1_o 0x02 +#define are2_o 0x01 + +#define arou_o 0x80 +#define ii_o 0x40 +#define itasi_o 0x20 +#define itadaku_o 0x10 +#define iru_o 0x08 +#define eru_o 0x04 +#define kakeru_o 0x02 +#define kaneru_o 0x01 + +#define karazu_o 0x80 +#define gatai_o 0x40 +#define gatida_o 0x20 +#define kudasaru_o 0x10 +#define gozai_o 0x08 +#define sa1_o 0x04 +#define si1_o 0x02 +#define siro_o 0x01 + +#define jyau_o 0x80 +#define jimau_o 0x40 +#define sugiru_o 0x20 +#define subesi_o 0x10 +#define suru_o 0x08 +#define sure_o 0x04 +#define se_o 0x02 +#define seyo_o 0x01 + +#define tamau_o 0x80 +#define tayu_o 0x40 +#define timau_o 0x20 +#define dekiru_o 0x10 +#define naru_o 0x08 +#define nasai_o 0x04 +#define nasaru_o 0x02 +#define nikui_o 0x01 + +#define yasui_o 0x80 +#define yoi_o 0x40 +#define yaru_o 0x20 + +#ifdef HORI + \244\303\244\277\244\351\244\267\244\244\244\316 \244\316\276\360\312\363\244\362\304\311\262\303 1/31 +#endif + +#define ttarasii_o 0x10 + + +#endif diff --git a/include/sj3core/sj_const.h b/include/sj3core/sj_const.h new file mode 100644 index 0000000..90c4808 --- /dev/null +++ b/include/sj3core/sj_const.h @@ -0,0 +1,155 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj_const.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:01 $ + */ + +#ifndef _SJ_CONST + +#define _SJ_CONST +#include "sj_euc.h" + +#define MATCH 0 +#define OVER 1 +#define PARTLY 2 +#define CONT 3 +#define UNDER 4 + +#define FALSE 0 +#define TRUE -1 + +#define AD_DONE 0x0000 +#define AD_NOTUSERDICT 0x0001 +#define AD_BADYOMI 0x0002 +#define AD_BADKANJI 0x0004 +#define AD_BADHINSI 0x0008 + +#define AD_AREXIST 0x0010 +#define AD_OVFLWDOUBLK 0x0020 +#define AD_OVFLWDOUNUM 0x0040 +#define AD_OVFLWUSRDIC 0x0080 +#define AD_OVFLWINDEX 0x0100 + +#define AD_NOMIDASI 0x0010 +#define AD_NOHINSI 0x0020 +#define AD_NOKANJI 0x0040 + +#define C_WAKACHI 0x00 +#define C_MINASI 0x01 +#define C_BUNSETU 0x02 +#define C_DICT 0x03 +#define C_N_ARABIA 0x04 +#define C_N_ARACMA 0x05 +#define C_N_KAZU 0x06 +#define C_N_SUUJI 0x07 +#define C_N_NANSUU 0x08 +#define C_N_KANKURA 0x09 +#define C_N_ARAKURA 0x0a +#define C_N_KAZULONG 0x0b +#define C_N_KAZULCMA 0x0c +#define C_N_SUUJILONG 0x0d + +#define JFLAG_N10 (1 << 15) +#define JFLAG_N_1 (1 << 14) +#define JFLAG_NS1 (1 << 13) +#define JFLAG_N01 (1 << 12) +#define JFLAG_N23 (1 << 11) +#define JFLAG_NK2 (1 << 10) +#define JFLAG_NK4 (1 << 9) +#define JFLAG_NN0 (1 << 8) +#define JFLAG_NSN (1 << 7) +#define JFLAG_KA (1 << 0) + +#define DO_CLSTUDY 0x01 +#define DO_IKKATU 0x02 + +#define K_DOUSHI 1 +#define K_YOUGEN 2 +#define K_TAIGEN 3 +#define K_FUKUSI 4 +#define K_RENTAISI 5 +#define K_SONOTA 6 + +#define EUC_a1 (u_char)0xa1 +#define EUC_a2 (u_char)0xa2 +#define EUC_a3 (u_char)0xa3 +#define EUC_a4 (u_char)0xa4 +#define EUC_a5 (u_char)0xa5 + + +#define EUC_START (u_char)0xa1 +#define EUC_END (u_char)0xfe +#define EUC_END_KIGOU (u_char)0xae +#define EUC_0 (u_char)0xb0 +#define EUC_END_0 (u_char)0xb9 +#define EUC_A (u_char)0xc1 +#define EUC_END_A (u_char)0xda +#define EUC_a (u_char)0xe1 +#define EUC_END_a (u_char)0xfa +#define EUC_END_HIRA (u_char)0xf3 +#define EUC_VU (u_char)0xf4 +#define EUC_XKA (u_char)0xf5 +#define EUC_XKE (u_char)0xf6 + +#define isknj1(c) (((c) == SS2) || (((c) & 0x80) && ((c) != SS3))) + +#define SHU 0x01 +#define T_KANOU 0x80 +#define T_SHUUJO 0x40 + +#define DICTOP 0x01 +#define FZKTOP 0x02 +#define DEPEND 0x04 +#define NUMBER 0x08 +#define FZK_KGU 0x10 +#define TAI_KGU 0x20 +#define BEFORNUM 0x40 +#define MIDNUM 0x80 +#define NOTNRM 0xFE + +#define CNJEND 0xff +#define TYOUONFLG 0x80 + +#define MAXFREC 32 +#define MAXFLVL 10 +#define FZKEND 0xff + +#define SETTOU_O 1 +#define SETTOU_GO 2 +#define SETTOU_DAI 3 +#define SETTOU_KIGOU 4 + +#define NUMKETALENGTH 16 +#define NUMWORDBUF ((NUMKETALENGTH+3)/4) + + +#endif diff --git a/include/sj3core/sj_dict.h b/include/sj3core/sj_dict.h new file mode 100644 index 0000000..9334180 --- /dev/null +++ b/include/sj3core/sj_dict.h @@ -0,0 +1,98 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj_dict.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:03 $ + */ + + + + + +#ifndef _SJ_DICT + +#define _SJ_DICT + + + +#define DIC_MAIN 0 +#define DIC_USER 1 + +#define DICSEGBASE 0 +#define MAXDOUONBLK 0xfff +#define DOUONBLKSIZENUMBER 3 +#define DICSEGTERM 0xff +#define DOUONBLKTERM 0xff +#define HINSIBLKTERM 0xff +#define MAXSEGMENTNUMBER 0xffff + + + +#define NORMALKANJIMASK 0x7f +#define SS3KANJI 0x0080 +#define ZENHIRAASSYUKU 0x80 +#define OFFSETASSYUKU 0x90 +#define ZENKATAASSYUKU 0xa0 +#define AIATTRIBUTE 0xb0 +#define KANJIASSYUKU 0xc0 +#define LEADINGHANKAKU 0xd0 +#define KANJISTREND 0x00 +#define ISASSYUKU 0x80 +#define ASSUKUUSE2BYTE 0x90 +#define KNJASSYUKUMASK 0x0f +#define KANJICODEMASK 0x0f +#define KANJIMODEMASK 0xf0 +#define ATRMSKANJIOFS 0xc0c0 + +#define MAXKNJASKNUMBER 16 +#define MAXYOMIASKNUMBER 16 + +#define MAXWDYOMILEN 31 +#define MAXWDKANJILEN 64 + +#define ASSYUKUYOMITOP 0x80 +#define NOKORIYOMITOP 0x40 + + +#define getsize(p) (((int)(*(p) & 0x0f) * 0x100) + *((p) + 1)) + +#define getntag(p) ((*(p) == DICSEGTERM) ? (p) : (p) + getsize(p)) + +#define getplen(p) (((*(p) & ASSYUKUYOMITOP) ? 0x10 : 0) + (*((p) + 2) >> 4)) + +#define getnlen(p) (((*(p) & NOKORIYOMITOP) ? 0x10 : 0) + (*((p) + 2) & 0x0f)) + +#define segtop() (dicbuf + *dicbuf + 1) + +#define segend(p) (*(p) == DICSEGTERM || (p) >= dicbuf + curdict->seglen) + +#endif + diff --git a/include/sj3core/sj_global.h b/include/sj3core/sj_global.h new file mode 100644 index 0000000..74ada74 --- /dev/null +++ b/include/sj3core/sj_global.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj_global.h,v $ + * $SonyRevision: 1.2 $ + * $SonyDate: 1994/12/09 11:27:06 $ + */ + +#ifndef SJ_GLOBAL_H +#define SJ_GLOBAL_H + +extern Global *global_work_base; +extern Global *work_base; +extern STDY *stdy_base; +extern int serv_errno; + +#endif diff --git a/include/sj3core/sj_kanakan.h b/include/sj3core/sj_kanakan.h new file mode 100644 index 0000000..59a5125 --- /dev/null +++ b/include/sj3core/sj_kanakan.h @@ -0,0 +1,332 @@ +/* + * Copyright (c) 2004 Iwata + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef KANAKAN_H +#define KANAKAN_H + +#include "sj_kcnv.h" +#include "sj_struct.h" + +/* + * NOTE: + * All of these funtions calling rule are not following + * ANSI like arguement lists, fun(dest, src, ...). + * There are fun(src, dest, ...). + */ + +/* adddic.c */ +u_int adddic(u_char *, u_char *, TypeGram); + +/* addelcmn.c */ +void set_size(u_char *, int, int, int); +u_int addel_arg(u_char *, u_char *, TypeGram, u_char *, int); +int cvtknj(u_char *, u_char *, u_char *); +int srchkana(u_char **, int *); +int srchgram(u_char *, u_char **, TypeGram); +int srchkanji(u_char **, u_char *, int); +TypeIdxOfs count_uidx(void); +void chg_uidx(TypeDicSeg, u_char *, int); + +/* alloc.c */ +JREC *alloc_jrec(void); +void free_jrec(JREC *); +CLREC *alloc_clrec(void); +void free_clrec(CLREC *); + +/* charsize.c */ +int codesize(u_char); + +/* chrtbl.c */ +extern u_char chrtbl[256]; + +/* cl2knj.c */ +int cl2knj(u_char *, int, u_char *); +int nextcl(u_char *, int); +int prevcl(u_char *, int); +int selectnum(void); + +/* clstudy.c */ +int clstudy(u_char *, u_char *, STDYOUT *); +void delclsub(u_char *); +void mkclidx(void); + +/* cmpstr.c */ +int cmpstr(u_char *, u_char *); + +/* conjunc.c */ +extern u_char *conjadr[]; + +/* connect.c */ +extern u_char connadr[]; +extern u_char *rigtadr[]; + +/* cvtclknj.c */ +void cvtclknj(void); + +/* cvtdict.c */ +void cvtdict(KHREC *, CLREC *, int); +void cvtminasi(int); +void cvtwakachi(CLREC *); + +/* cvtkanji.c */ +void cvtphknj(void); +void cvtkouho(KHREC *); +void setstyrec(KHREC *); + +/* deldic.c */ +u_int deldic(u_char *, u_char *, TypeGram); + +/* dict.c */ +void get_askknj(void); +int seldict(TypeDicID); +u_char *get_idxptr(TypeDicSeg); + +/* functbl.c */ +extern VFunc cvtnum_func[]; +extern UCPFunc getkan_func[]; +extern IFunc setjrec_func[]; +extern IFunc hiraknj_func[]; + +/* fuzoku.c */ +void setclrec(JREC *, u_char *, TypeCnct); +RECURS void srchfzk(JREC *, u_char *, TypeCnct, int); + +/* fzkyomi.c */ +extern u_char *fzkadr[]; + +/* getkanji.c */ +u_char *getkan_none(u_char *, u_char *, u_char *, int, int); +u_char *getkan_hira(u_char *, u_char *, u_char *, int, int); +u_char *getkan_kata(u_char *, u_char *, u_char *, int, int); +u_char *getkan_knj(u_char *, u_char *, u_char *, int, int); +u_char *getkan_ofs(u_char *, u_char *, u_char *, int, int); +u_char *getkan_norm(u_char *, u_char *, u_char *, int, int); +u_char *getkan_ascii(u_char *, u_char *, u_char *, int, int); +int getkanji(u_char *, int, u_char *, u_char *); + +/* getrank.c */ +void getrank(void); + +/* hzstrlen.c */ +int euc_codesize(u_char c); +int hzstrlen(u_char *, int); + +/* init.c */ +void seg_count(DICT *); +void mkidxtbl(DICT *); +void initwork(void); + +/* istrcmp.c */ +int istrcmp(u_char *, u_char *, int, int); + +/* memcpy.c */ +void sstrncpy(u_char *, u_char *, int); + +/* memory.c */ +JREC *free_jlst(JREC *); +CLREC *free_clst(CLREC *, int); +void free_clall(CLREC *); +void free_jall(JREC *); +void freework(void); + +/* mk2claus.c */ +void mk2claus(void); + +/* mkbunset.c */ +void mkbunsetu(void); +CLREC *argclrec(int); + +/* mkjiritu.c */ +void mkjiritu(int); +JREC *argjrec(int, JREC *); + +/* mkkouho.c */ +void mkkouho(void); +u_char *makekan_none(u_char *, u_char *, int); +u_char *makekan_1byte(u_char *, u_char *, int); +u_char *makekan_knj(u_char *, u_char *, int); +u_char *makekan_ofs(u_char *, u_char *, int); +u_char *makekan_norm(u_char *, u_char *, int); +u_char *makekan_ascii(u_char *, u_char *, int); +int sel_sjmode(JREC *); + +/* mknumber.c */ +void num_type00(u_char *, u_char *, JREC *); +void num_type01(u_char *, u_char *, JREC *); +void num_type02(u_char *, u_char *, JREC *); +void num_type03(u_char *, u_char *, JREC *); +void num_type04(u_char *, u_char *, JREC *); +void num_type05(u_char *, u_char *, JREC *); +void num_type06(u_char *, u_char *, JREC *); +void num_type07(u_char *, u_char *, JREC *); +void num_type08(u_char *, u_char *, JREC *); +void num_type09(u_char *, u_char *, JREC *); +void num_type10(u_char *, u_char *, JREC *); +void num_type11(u_char *, u_char *, JREC *); +void num_type12(u_char *, u_char *, JREC *); +void num_type13(u_char *, u_char *, JREC *); +void num_type14(u_char *, u_char *, JREC *); + +/* mvmemd.c */ +void mvmemd(u_char *, u_char *, int); + +/* mvmemi.c */ +void mvmemi(u_char *, u_char *, int); + +/* peepdic.c */ +int getusr(u_char *); +int nextusr(u_char *); +int prevusr(u_char *); + +/* ph2knj.c */ +int ph2knj(u_char *, u_char *, int); + +/* ph_khtbl.c */ +int ph_khtbl(CLREC *); + +/* priority.c */ +int priority(CLREC *); +void pritiny(void); + +/* prtytbl.c */ +extern u_char taipri[7][45]; +extern u_char sttpri[5][31]; + +/* s2ctbl.c */ +extern u_char kigou[]; + +/* sdepend.c */ +DictFile *opendict(char *, char *); +int closedict(DictFile *); +void lock_dict(DictFile *, int); +void unlock_dict(DictFile *, int); +int is_dict_locked(DictFile *); +StdyFile *openstdy(char *, char *); +int closestdy(StdyFile *); +int putstydic(void); +int putcldic(void); +int makedict(char *, int, int, int); +int makestdy(char *, int, int, int); +void sj_closeall(void); +int set_dictpass(DictFile *, char *); +int set_stdypass(char *); +int set_dictcmnt(DictFile *, char *); +int set_stdycmnt(char *); +int get_stdysize(int *, int *, int *); + +/* selclrec.c */ +void selclrec(void); + +/* selsuuji.c */ +extern u_short *selsjadrs[]; + +/* setconj.c */ +int setconj(TypeGram, JREC *, CREC *); + +/* setjrec.c */ +int setj_atrb(u_char *); +int setj_ofs(u_char *); +int setj_knj(u_char *); +int setj_norm1(u_char *); +int setj_norm2(u_char *); +int setj_norm3(u_char *); /* unused??? */ +void setjrec(u_char *, int); +void setnumrec(u_char *, JREC *, TypeGram); +void setcrec(u_char *); + +/* setkouho.c */ +void setkouho(CLREC *, TypeDicOfs, int); +void ph_setkouho(CLREC *, TypeDicOfs, STDYIN *); +int hiraknj_atrb(u_char *, int *); +int hiraknj_ofs(u_char *, int *); +int hiraknj_knj(u_char *, int *); +int hiraknj_hask(u_char *, int *); +int hiraknj_kask(u_char *, int *); +int hiraknj_norm(u_char *, int *); +int hiraknj_hira(u_char *, int *); + +/* setubi.c */ +u_char *getstb(TypeGram); +void setubi(JREC *, u_char *); + +/* sj2code.c */ +int sj2cd_chr(u_char *, u_char *); +int sj2cd_str(u_char *, u_char *, int); + +/* skiphblk.c */ +u_char *skiphblk(u_char *); + +/* skipkstr.c */ +u_char *skipkstr(u_char *); + +/* srchdict.c */ +int yomicmp(u_char *, u_char *, u_char *); +u_char *srchdict(u_char *); + +/* srchhead.c */ +int srchhead(void); + +/* srchidx.c */ +TypeDicSeg srchidx(TypeDicSeg, int); + +/* srchnum.c*/ +void srchnum(void); +void setwdnum(u_char *, int, u_short *); +int setucnum(u_char *, int, u_char *); + +/* sstrcmp.c */ +int sstrcmp(u_char *, u_char *); + +/* sstrlen.c */ +int sstrlen(u_char *); + +/* sstrncmp.c */ +int sstrncmp(u_char *, u_char *dst, int); + +/* stbtbl.c */ +extern u_char *stbadr[]; + +/* stttbl.c */ +extern u_char *settou_ptr[]; +extern u_char scncttbl[2][24]; + +/* study.c */ +int study(STDYOUT *); +STDYIN *srchstdy(TypeDicSeg, TypeDicOfs, TypeDicID); + +/* suujitbl.c */ +extern u_char suuji_tbl[]; +extern u_char kurai1_tbl[]; +extern u_char kurai2_tbl[]; +extern u_char num1tbl[]; +extern u_char num2tbl[]; +extern u_char num3tbl[]; +extern u_char num4tbl[]; +extern u_char num5tbl[]; +extern u_char num6tbl[]; + +/* terminat.c */ +int terminate(TypeCnct, u_char *); + +/* termtbl.c */ +extern u_char termtbl[]; + +/* wakachi.c */ +void wakachi(void); + + +#endif /* KANAKAN_H */ + diff --git a/include/sj3core/sj_kcnv.h b/include/sj3core/sj_kcnv.h new file mode 100644 index 0000000..5039f81 --- /dev/null +++ b/include/sj3core/sj_kcnv.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj_kcnv.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:10 $ + */ + +#include +#include +#include "sj_typedef.h" +#include "sj_rename.h" +#include "sj_const.h" +#include "sj_var.h" +#include "sj_dict.h" +#include "sj_study.h" +#include "sj_table.h" +#include "sj_struct.h" +#include "Const.h" +#include "Struct.h" +#include "sj_global.h" diff --git a/include/sj3core/sj_left.h b/include/sj3core/sj_left.h new file mode 100644 index 0000000..4b86da8 --- /dev/null +++ b/include/sj3core/sj_left.h @@ -0,0 +1,286 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj_left.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:12 $ + */ + + + + + +#ifndef _SJ_LEFT + +#define _SJ_LEFT + + + + +#define L_WO 0x01 +#define L_TTATTE 0x02 +#define L_TTARA 0x03 +#define L_TTE1 0x04 +#define L_TTE2 0x05 +#define L_PPANASI 0x06 +#define L_PPOI 0x07 +#define L_UE 0x08 + +#define L_UTI 0x09 +#define L_OITE 0x0a +#define L_OKERU 0x0b +#define L_ORI 0x0c +#define L_KA1 0x0d +#define L_KA2 0x0e +#define L_KAI 0x0f +#define L_KASIRA 0x10 + +#define L_KATAGATA 0x11 +#define L_KADOUKA 0x12 +#define L_KANA 0x13 +#define L_KANE 0x14 +#define L_KAMO 0x15 +#define L_KARA1 0x16 +#define L_KARA2 0x17 +#define L_GA1 0x18 + +#define L_GA2 0x19 +#define L_GATERA 0x1a +#define L_KIRI 0x1b +#define L_KUSENI 0x1c +#define L_KURAI 0x1d +#define L_GURUMI 0x1e +#define L_KEDO 0x1f +#define L_KOSO 0x20 + +#define L_KOTO 0x21 +#define L_SA2 0x22 +#define L_SAE 0x23 +#define L_SI2 0x24 +#define L_SIKA 0x25 +#define L_SURA 0x26 +#define L_ZUTU 0x27 +#define L_ZO 0x28 + +#define L_TAME 0x29 +#define L_DAKE 0x2a +#define L_DANO 0x2b +#define L_DARAKE 0x2c +#define L_TUITE 0x2d +#define L_TUKI 0x2e +#define L_TUTU 0x2f +#define L_TUMORI 0x30 + +#define L_TE1 0x31 +#define L_TE2 0x32 +#define L_TERU 0x33 +#define L_DEAROU 0x34 +#define L_DERU 0x35 +#define L_TO1 0x36 +#define L_TO2 0x37 +#define L_TOTTE 0x38 + +#define L_TOIU 0x39 +#define L_TOORI 0x3a +#define L_TOKI 0x3b +#define L_TOKORO 0x3c +#define L_TOTE 0x3d +#define L_TOHAIE 0x3e +#define L_TOMO 0x3f +#define L_DO 0x40 + +#define L_DOORI 0x41 +#define L_DOKORO 0x42 +#define L_DOKOROKA 0x43 +#define L_DOMO 0x44 +#define L_NA1 0x45 +#define L_NAA 0x46 +#define L_NAGARA 0x47 +#define L_NAZO 0x48 + +#define L_NADO 0x49 +#define L_NARI 0x4a +#define L_NANKA 0x4b +#define L_NANZO 0x4c +#define L_NANTE 0x4d +#define L_NI1 0x4e +#define L_NI2 0x4f +#define L_NI3 0x50 + +#define L_NITE 0x51 +#define L_NIMO 0x52 +#define L_NE1 0x53 +#define L_NEE 0x54 +#define L_NO1 0x55 +#define L_NO2 0x56 +#define L_NODE 0x57 +#define L_NONI 0x58 + +#define L_NOMI 0x59 +#define L_NOMINRZ 0x5a +#define L_HA 0x5b +#define L_HAZU 0x5c +#define L_BA 0x5d +#define L_BAKARI 0x5e +#define L_HE 0x5f +#define L_HOU 0x60 + +#define L_HOKA 0x61 +#define L_HODO 0x62 +#define L_MADE 0x63 +#define L_MAMA 0x64 +#define L_MO1 0x65 +#define L_MO2 0x66 +#define L_MOTTE 0x67 +#define L_MONO 0x68 + +#define L_YA1 0x69 +#define L_YA2 0x6a +#define L_YARA 0x6b +#define L_YUE 0x6c +#define L_YO 0x6d +#define L_YORI 0x6e +#define L_WA 0x6f +#define L_WAKE 0x70 + +#define L_WANE 0x71 +#define L_WAYO 0x72 +#define L_NN1 0x73 +#define L_JYA 0x74 +#define L_TYA 0x75 +#define L_NAGARA2 0x76 +#define L_WO_S 0x77 + +#define L_ZE 0x79 +#define L_KKE 0x7a +#define L_N_SI 0x7b +#define L_DEHA 0x7c + + + +#define L_GOTOSI 0x81 +#define L_SASERU 0x82 +#define L_ZARU 0x83 +#define L_ZU 0x84 +#define L_ZUNBA 0x85 +#define L_SERU 0x86 +#define L_SOUDA 0x87 +#define L_YOUTAI 0x88 + +#define L_DENBUN 0x89 +#define L_TA 0x8a +#define L_TAI 0x8b +#define L_TAGARU 0x8c +#define L_TARU 0x8d +#define L_DA1 0x8e +#define L_DA2 0x8f +#define L_DAXTU 0x90 + +#define L_DAROU 0x91 +#define L_DE 0x92 +#define L_DESI 0x93 +#define L_DESHO 0x94 +#define L_DESU 0x95 +#define L_NA2 0x96 +#define L_NARA 0x97 +#define L_NAI 0x98 + +#define L_NU 0x99 +#define L_NE2 0x9a +#define L_NN2 0x9b +#define L_FUUDA 0x9c +#define L_BESI 0x9d +#define L_MAI 0x9e +#define L_MASU 0x9f +#define L_MASURE 0xa0 + +#define L_MASE 0xa1 +#define L_MITAIDA 0xa2 +#define L_YOU 0xa3 +#define L_YOUDA 0xa4 +#define L_RASII 0xa5 +#define L_RARERU 0xa6 +#define L_RERU 0xa7 +#define L_SITE 0xa8 + + + + +#define L_YOUGEN 0xa9 +#define L_ARU 0xaa +#define L_ARA 0xab +#define L_ARI1 0xac +#define L_ARI2 0xad +#define L_ARI3 0xae +#define L_ARE1 0xaf +#define L_ARE2 0xb0 + +#define L_AROU 0xb1 +#define L_II 0xb2 +#define L_ITASI 0xb3 +#define L_ITADAKU 0xb4 +#define L_IRU 0xb5 +#define L_ERU 0xb6 +#define L_KAKERU 0xb7 +#define L_KANERU 0xb8 + +#define L_KARAZU 0xb9 +#define L_GATAI 0xba +#define L_GATIDA 0xbb +#define L_KUDASARU 0xbc +#define L_GOZAI 0xbd +#define L_SA1 0xbe +#define L_SI1 0xbf +#define L_SIRO 0xc0 + +#define L_JYAU 0xc1 +#define L_JIMAU 0xc2 +#define L_SUGIRU 0xc3 +#define L_SUBESI 0xc4 +#define L_SURU 0xc5 +#define L_SURE 0xc6 +#define L_SE 0xc7 +#define L_SEYO 0xc8 + +#define L_TAMAU 0xc9 +#define L_TYAU 0xca +#define L_TIMAU 0xcb +#define L_DEKIRU 0xcc +#define L_NARU 0xcd +#define L_NASAI 0xce +#define L_NASARU 0xcf +#define L_NIKUI 0xd0 + +#define L_YASUI 0xd1 +#define L_YOI 0xd2 +#define L_YORU 0xd3 +#define L_TTARASII 0xd4 + +#endif diff --git a/include/sj3core/sj_prty.h b/include/sj3core/sj_prty.h new file mode 100644 index 0000000..243d2d4 --- /dev/null +++ b/include/sj3core/sj_prty.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj_prty.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:13 $ + */ + + + + + +#ifndef _SJ_PRIORITY + +#define _SJ_PRIORITY + + + + +#define RENTAI 0x10 +#define GETPRI 0x0f + +#define P_FUKA 1 +#define P_TANKAN 1 +#define P_SHUUSI 2 +#define P_MEIREI 2 +#define P_KATEI 2 +#define P_KAMEI 2 + +#define P_DAIMEISI 4 +#define P_MEISI 6 +#define P_KEISIKI 4 +#define P_RENYOU_F 3 +#define P_RENYOU_J 11 +#define P_RENYOU_M 12 +#define P_JOSHI_F 3 +#define P_JOSHI_E 4 +#define P_JOSHI_D 6 +#define P_JOSHI_C 7 +#define P_JOSHI_B 8 +#define P_JOSHI_A 9 + +#define P_SETTOU 6 +#define P_SETUBI 6 +#define P_SUUSI 4 +#define P_FUKUSI 13 +#define P_F_FUKUSI 10 +#define P_RENTAISI 10 +#define P_KANDOU 6 +#define P_SETUZOKU 14 +#define P_FZKKGU 9 +#define P_JOSUUSI 10 + +#endif diff --git a/include/sj3core/sj_rename.h b/include/sj3core/sj_rename.h new file mode 100644 index 0000000..9b0b71c --- /dev/null +++ b/include/sj3core/sj_rename.h @@ -0,0 +1,563 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj_rename.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:14 $ + */ + + +#ifndef _SJ_RENAME + +#define _SJ_RENAME + +#include + +#define adddic Jadddic +#define checksub Jchecksub +#define checkdict Jcheckdict +#define cal_nextym Jcal_nextym +#define cmpknj Jcmpknj +#define usr_freelen Jusr_freelen +#define sprt_seg Jsprt_seg +#define apnd_uidx Japnd_uidx + + + +#define set_size Jset_size +#define isvyomi Jisvyomi +#define isvknj Jisvknj +#define isgrm Jisgrm +#define addel_arg Jaddel_arg +#define yomi2kata Jyomi2kata +#define top_strcmp Jtop_strcmp +#define last_strcmp Jlast_strcmp +#define cvtknj Jcvtknj +#define srchkana Jsrchkana +#define srchgram Jsrchgram +#define srchkanji Jsrchkanji +#define count_uidx Jcount_uidx +#define chg_uidx Jchg_uidx + + + +#define cl2knj Jcl2knj +#define nextcl Jnextcl +#define nextrecblk Jnextrecblk +#define prevcl Jprevcl +#define prevrecblk Jprevrecblk +#define initkbuf Jinitkbuf +#define selectnum Jselectnum +#define kouhonum Jkouhonum + + + +#define clstudy Jclstudy +#define delcldata Jdelcldata +#define delclsub Jdelclsub +#define delclold Jdelclold +#define srchclpos Jsrchclpos +#define mkclidx Jmkclidx + + + +#define cvtclknj Jcvtclknj + + + +#define cvtdict Jcvtdict +#define cvtminasi Jcvtminasi +#define cvtwakachi Jcvtwakachi + + + +#define cvtphknj Jcvtphknj +#define cvtkouho Jcvtkouho +#define setstyrec Jsetstyrec + + + +#define deldic Jdeldic +#define del_douon Jdel_douon +#define del_segment Jdel_segment +#define del_uidx Jdel_uidx +#define del_stdy Jdel_stdy + + + +#define get_askknj Jget_askknj +#define seldict Jseldict +#define sel_udict Jsel_udict +#define get_idxofs Jget_idxofs +#define get_idxptr Jget_idxptr + + + +#define fzkstrcmp Jfzkstrcmp +#define setclrec Jsetclrec +#define fzkcnct Jfzkcnct +#define srchfzk Jsrchfzk + + + +#define getkan_none Jgetkan_none +#define getkan_hira Jgetkan_hira +#define getkan_kata Jgetkan_kata +#define getkan_knj Jgetkan_knj +#define getkan_ofs Jgetkan_ofs +#define getkan_norm Jgetkan_norm +#define code2kanji Jcode2kanji +#define getkanji Jgetkanji + + + +#define getrank Jgetrank +#define setstynum Jsetstynum +#define setnspr Jsetnspr +#define regetrank Jregetrank + + + +#define work_base Jwork_base +#define stdy_base Jstdy_base + + +#define maxjptr (work_base -> Jmaxjptr) +#define maxclptr (work_base -> Jmaxclptr) +#define jrt1st (work_base -> Jjrt1st) +#define clt1st (work_base -> Jclt1st) +#define jrt2nd (work_base -> Jjrt2nd) +#define clt2nd (work_base -> Jclt2nd) +#define selcl (work_base -> Jselcl) +#define selectid (work_base -> Jselectid) +#define trank (work_base -> Jtrank) +#define nrank (work_base -> Jnrank) +#define buninf (work_base -> Jbuninf) +#define buncnt (work_base -> Jbuncnt) +#define knjnew (work_base -> Jknjnew) +#define knjidx (work_base -> Jknjidx) +#define knjmax (work_base -> Jknjmax) +#define score (work_base -> Jscore) +#define pathnum (work_base -> Jpathnum) +#define usedpath (work_base -> Jusedpath) +#define inputyomi (work_base -> Jinputyomi) +#define cnvstart (work_base -> Jcnvstart) +#define cnvlen (work_base -> Jcnvlen) +#define ystart (work_base -> Jystart) +#define hyomi (work_base -> Jhyomi) +#define orgyomi (work_base -> Jorgyomi) +#define kanjibuf (work_base -> Jkanjibuf) +#define kanjipos (work_base -> Jkanjipos) +#define kanjitmp (work_base -> Jkanjitmp) +#define kanjilen (work_base -> Jkanjilen) +#define dicinl (work_base -> Jdicinl) +#define dicsaml (work_base -> Jdicsaml) +#define prevseg (work_base -> Jprevseg) +#define fzkcount (work_base -> Jfzkcount) +#define fzk_ka_flg (work_base -> Jfzk_ka_flg) +#define fzktbl (work_base -> Jfzktbl) +#define headcode (work_base -> Jheadcode) +#define headlen (work_base -> Jheadlen) +#define gobilen (work_base -> Jgobilen) +#define prevclgrm (work_base -> Jprevclgrm) +#define prevclrow (work_base -> Jprevclrow) +#define nextcllen (work_base -> Jnextcllen) +#define khcount (work_base -> Jkhcount) +#define nkhcount (work_base -> Jnkhcount) +#define kouhotbl (work_base -> Jkouhotbl) +#define stdytop (work_base -> Jstdytop) +#define curdict (work_base -> Jcurdict) +#define dictlist (work_base -> Jdictlist) +#define dicbuf (work_base -> Jdicbuf) +#define idxbuf (work_base -> Jidxbuf) +#define idxofs (work_base -> Jidxofs) +#define askknj (work_base -> Jaskknj) +#define askknj_k (work_base -> Jaskknj_k) + +#define grp_ptr (work_base -> Jgrp_ptr) +#define grp_seg (work_base -> Jgrp_seg) +#define grp_grp (work_base -> Jgrp_grp) +#define suuji_wbuf (work_base -> Jsuuji_wbuf) +#define suuji_ubuf (work_base -> Jsuuji_ubuf) +#define suuji_class (work_base -> Jsuuji_class) +#define suuji_comma (work_base -> Jsuuji_comma) +#define suuji_keta (work_base -> Jsuuji_keta) +#define suuji_yptr (work_base -> Jsuuji_yptr) +#define suuji_len (work_base -> Jsuuji_len) +#define suuji_exit (work_base -> Jsuuji_exit) +#define suuji_wkeep (work_base -> Jsuuji_wkeep) +#define suuji_ukeep (work_base -> Jsuuji_ukeep) +#define peepyomi (work_base -> Jpeepyomi) +#define peepknj (work_base -> Jpeepknj) +#define peepgrm (work_base -> Jpeepgrm) +#define peepdptr (work_base -> Jpeepdptr) +#define peephptr (work_base -> Jpeephptr) +#define peepkptr (work_base -> Jpeepkptr) +#define peepidx (work_base -> Jpeepidx) + + + +#define seg_count Jseg_count +#define mkidxtbl Jmkidxtbl +#define initwork Jinitwork + + + +#define free_jlst Jfree_jlst +#define free_clst Jfree_clst +#define free_clall Jfree_clall +#define free_jall Jfree_jall +#define freework Jfreework +#define free_kjall Jfree_kjall + + + +#define set2nd Jset2nd +#define mk2claus Jmk2claus + + + +#define mkbunsetu Jmkbunsetu +#define argclrec Jargclrec + + + +#define mkjiritu Jmkjiritu +#define dic_mu Jdic_mu +#define argjrec Jargjrec +#define dic_cl Jdic_cl + + + +#define mkkouho Jmkkouho +#define getkhtbl Jgetkhtbl +#define cl_kanji Jcl_kanji +#define sameknj Jsameknj +#define skipatr Jskipatr +#define diffknj Jdiffknj +#define chrck_numtbl Jchrck_numtbl +#define sel_sjmode Jsel_sjmode +#define cl_numcmn Jcl_numcmn + + + +#define word2char Jword2char +#define words2num Jwords2num +#define num_type00 Jnum_type00 +#define num_type01 Jnum_type01 +#define num_type02 Jnum_type02 +#define num_type03 Jnum_type03 +#define num_type04 Jnum_type04 +#define num_type05 Jnum_type05 +#define num_type06 Jnum_type06 +#define num_type07 Jnum_type07 +#define kan_num Jkan_num +#define num_type08 Jnum_type08 +#define num_type09 Jnum_type09 +#define num_type10 Jnum_type10 +#define num_type11 Jnum_type11 +#define num_type12 Jnum_type12 +#define num_kurai Jnum_kurai +#define num_type13 Jnum_type13 +#define num_type14 Jnum_type14 + + + +#define getusr Jgetusr +#define nextusr Jnextusr +#define prevusr Jprevusr +#define set_kanji Jset_kanji +#define set_buf Jset_buf +#define prev_kanji Jprev_kanji +#define prev_hinsi Jprev_hinsi +#define prev_douon Jprev_douon +#define next_kanji Jnext_kanji +#define next_hinsi Jnext_hinsi +#define next_douon Jnext_douon +#define add_yomi Jadd_yomi +#define cd2sjh_chr Jcd2sjh_chr + + + +#define ph2knj Jph2knj + + + +#define ph_setsty Jph_setsty +#define nextkptr Jnextkptr +#define maxpset Jmaxpset +#define mkknjmax Jmkknjmax +#define ph_khtbl Jph_khtbl + + + +#define isfukusi Jisfukusi +#define istaigen Jistaigen +#define taicnt Jtaicnt +#define sttcnt Jsttcnt +#define priority Jpriority +#define pritiny Jpritiny + + + +#define selclrec Jselclrec + + + +#define initknjall Jinitknjall +#define knjtouroku Jknjtouroku +#define knjitti Jknjitti +#define hikakusub Jhikakusub +#define knjhikaku Jknjhikaku +#define setgroupai Jsetgroupai +#define select_dsub Jselect_dsub +#define select_tsub Jselect_tsub +#define select_ysub Jselect_ysub +#define selectknj Jselectknj +#define selknj Jselknj + + + +#define cnjstrcmp Jcnjstrcmp +#define cnvrow Jcnvrow +#define setconj Jsetconj + + + +#define setj_atrb Jsetj_atrb +#define setj_ofs Jsetj_ofs +#define setj_knj Jsetj_knj +#define setj_norm1 Jsetj_norm1 +#define setj_norm2 Jsetj_norm2 +#define chkhead Jchkhead +#define setjrec Jsetjrec +#define setnumrec Jsetnumrec +#define setcrec Jsetcrec + + + +#define setkouho Jsetkouho +#define ph_setkouho Jph_setkouho +#define hiraknj Jhiraknj +#define hiraknj_atrb Jhiraknj_atrb +#define hiraknj_ofs Jhiraknj_ofs +#define hiraknj_knj Jhiraknj_knj +#define hiraknj_hask Jhiraknj_hask +#define hiraknj_kask Jhiraknj_kask +#define hiraknj_norm Jhiraknj_norm +#define hiraknj_hira Jhiraknj_hira + + + +#define getstb Jgetstb +#define setubi Jsetubi + + + +#define sj2cd_chr Jsj2cd_chr +#define sj2cd_str Jsj2cd_str + + + +#define retaiofs Jretaiofs +#define srchai2nd Jsrchai2nd +#define srchai1st Jsrchai1st +#define srchai4th Jsrchai4th +#define srchai3rd Jsrchai3rd +#define srchai6th Jsrchai6th +#define srchai5th Jsrchai5th + + + +#define yomicmp_sub Jyomicmp_sub +#define yomicmp Jyomicmp +#define srchdict Jsrchdict + + + +#define srchg_atrb Jsrchg_atrb +#define srchg_ofs Jsrchg_ofs +#define srchg_knj Jsrchg_knj +#define srchg_norm1 Jsrchg_norm1 +#define srchg_norm2 Jsrchg_norm2 +#define srchgrp2nd Jsrchgrp2nd +#define srchgrp1st Jsrchgrp1st + + + +#define srchhead Jsrchhead + + + +#define srchidx Jsrchidx + + + +#define srch_josuu_sub Jsrch_josuu_sub +#define srch_josuu Jsrch_josuu +#define setnrec_sub Jsetnrec_sub +#define setnrec Jsetnrec +#define srchtbl Jsrchtbl +#define isconnect Jisconnect +#define string_cmp Jstring_cmp +#define check_num Jcheck_num +#define srch_number1 Jsrch_number1 +#define srch_kurai1 Jsrch_kurai1 +#define srch_kurai2 Jsrch_kurai2 +#define srch_number2 Jsrch_number2 +#define srchnum_sub Jsrchnum_sub +#define srchnum Jsrchnum +#define setwdnum Jsetwdnum +#define setucnum Jsetucnum + + + +#define study Jstudy +#define srchstdy Jsrchstdy + + + +#define terminate Jterminate + + + +#define wakachi Jwakachi + + + + +#define cmpstr Jcmpstr + + + +#define hzstrlen Jhzstrlen + + + +#define istrcmp Jistrcmp + + + + +#define mvmemd Jmvmemd + + + +#define mvmemi Jmvmemi + + + +#define skiphblk Jskiphblk + + + +#define skipkstr Jskipkstr + + + +#define sstrcmp Jsstrcmp + + + +#define sstrlen Jsstrlen + + + +#define sstrncmp Jsstrncmp + + + + +#define charsize Jcharsize + + + +#define chrtbl Jchrtbl + + + +#define conjadr Jconjadr + + + +#define connadr Jconnadr +#define rigtadr Jrigtadr + + + +#define cvtnum_func Jcvtnum_func +#define getkan_func Jgetkan_func +#define setjrec_func Jsetjrec_func +#define srchg_func Jsrchg_func +#define hiraknj_func Jhiraknj_func + + + +#define fzkadr Jfzkadr + + + +#define taipri Jtaipri +#define sttpri Jsttpri + + + +#define kigou Jkigou + + + +#define selsjadrs Jselsjadrs + + + +#define stbadr Jstbadr + + + +#define settou_ptr Jsettou_ptr +#define scncttbl Jscncttbl + + + +#define suuji_tbl Jsuuji_tbl +#define kurai1_tbl Jkurai1_tbl +#define kurai2_tbl Jkurai2_tbl +#define num1tbl Jnum1tbl +#define num2tbl Jnum2tbl +#define num3tbl Jnum3tbl +#define num4tbl Jnum4tbl +#define num5tbl Jnum5tbl +#define num6tbl Jnum6tbl + + + +#define termtbl Jtermtbl + +#endif diff --git a/include/sj3core/sj_right.h b/include/sj3core/sj_right.h new file mode 100644 index 0000000..e67af14 --- /dev/null +++ b/include/sj3core/sj_right.h @@ -0,0 +1,373 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj_right.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:15 $ + */ + + + + + +#ifndef _SJ_RIGHT + +#define _SJ_RIGHT + +#define R_DE 1 +#define R_WO 2 +#define R_KARA1 3 +#define R_GA1 4 +#define R_TO1 5 +#define R_NI1 6 +#define R_NO1 7 +#define R_HA 8 +#define R_HE 9 +#define R_MO1 10 +#define R_YA1 11 +#define R_YORI1 12 +#define R_SAE 13 +#define R_SIKA 14 +#define R_DAKE 15 + +#define R_I 16 +#define R_E 17 +#define R_KAKE 18 +#define R_KANE2 19 +#define R_SUGI 20 +#define R_DEKI 21 +#define R_MI 22 +#define R_SASE 23 +#define R_RARE 24 + + + + +#define R_ITADAKE 25 + + + + +#define R_EXP 26 + + + + +#define R_RENYOU1 27 +#define R_RENYOU5 28 +#define R_SA5RENYOU1 29 + +#define R_RENYOU3 30 +#define R_RENYOU7 31 +#define R_SA5RENYOU3 32 +#define R_RENYOU4 33 +#define R_RENYOU8 34 +#define R_SA5RENYOU4 35 + +#define R_KRENYOU 39 +#define R_DRENYOU1 40 +#define R_DRENYOU2 41 +#define R_DRENYOU3 42 +#define R_ONBIN1 43 +#define R_ONBIN2 44 +#define R_ONBIN3 45 + +#define R_DESHI 46 +#define R_AXTU 47 +#define R_ONBIN6 48 +#define R_ONBIN8 49 +#define R_ARI1 50 +#define R_ARI2 51 +#define R_ARI3 52 +#define R_IKI 53 +#define R_ITASI 54 +#define R_ITADAKI 55 +#define R_ORI2 56 +#define R_GATAKU 57 +#define R_KI 58 +#define R_KUDASAI 59 +#define R_GOZAI 60 +#define R_GOTOKU 61 +#define R_BEKU 62 +#define R_SOUDE 63 +#define R_SOUNI 64 +#define R_TAGARI 65 +#define R_TAKU 66 +#define R_MIZEN1 67 +#define R_NAIDE 68 +#define R_NAKU 69 +#define R_NASAI 70 +#define R_FUUNI 71 +#define R_YORI2 72 +#define R_RASHUU 73 + + + + +#define R_DSHUUSI1 74 +#define R_DSHUUSI2 75 +#define R_GOTOSI 76 +#define R_BESI 77 +#define R_ZU 78 +#define R_SOUDA 79 +#define R_MAI 80 +#define R_MITAIDA 81 + + + + +#define R_SHUUSI 82 +#define R_KSHUUSI 83 +#define R_ZARU 84 +#define R_SOUDESU 85 +#define R_TA 86 +#define R_TAI 87 +#define R_DESU 88 +#define R_NAI 89 +#define R_NU 90 +#define R_MASU 91 +#define R_NN2 92 +#define R_RASII 93 + + + + +#define R_DRENTAI1 94 +#define R_DRENTAI2 95 +#define R_DRENTAI3 96 +#define R_KRENTAI 97 +#define R_GOTOKI 98 +#define R_BEKI 99 +#define R_SOUNA1 100 +#define R_SOUNA2 101 +#define R_NA2 102 + + + + +#define R_KATEI1 103 +#define R_KATEI2 104 +#define R_KATEI3 105 + + + + + +#define R_KAMEI 106 + + + + +#define R_IKE 107 + + + + +#define R_KURE 108 + + + + +#define R_MEIREI1 109 +#define R_MEIREI2 110 + + + + +#define R_DGOKAN 111 +#define R_KGOKAN 112 +#define R_SGOKAN 113 +#define R_GATI 114 +#define R_JYA 115 +#define R_SOU 116 +#define R_MITAI 117 +#define R_YOTTE 118 +#define R_YOU2 119 +#define R_SHO 120 + + + + +#define R_FZKMEISI 121 + + + + +#define R_AISATU 122 +#define R_KOSODO 123 + +#define R_YOU1 124 +#define R_HASI 125 + +#define R_DAIMEISI 126 +#define R_DAIMEISI6 127 + +#define R_FZKKI 128 +#define R_DEHA 129 +#define R_NAGARA2 130 +#define R_WO_S 131 +#define R_WO_MEISI 132 +#define R_SITE 133 +#define R_N_SI 134 +#define R_F_FUKUSI 135 +#define R_CUT 137 + + +#define R_MIZEN2 140 +#define R_MIZEN3 141 +#define R_MIZEN4 142 +#define R_SI1 143 +#define R_JI 144 +#define R_AGE 145 +#define R_MIZEN5 146 +#define R_AROU 147 +#define R_KAROU 148 +#define R_DAROU 149 +#define R_DESHOU 150 +#define R_KO 151 +#define R_BEKARA 152 +#define R_TAGARA 153 + +#define R_SHUUJO 154 +#define R_TTATTE 155 +#define R_TTARA 156 +#define R_TTE1 157 +#define R_TTE2 158 +#define R_PPANASI 159 + +#define R_PPOI 160 +#define R_UE 161 +#define R_UTI 162 +#define R_OITE 163 +#define R_OKERU 164 +#define R_ORI1 165 +#define R_KA1 166 +#define R_KA2 167 +#define R_KATAGATA 168 +#define R_KADOUKA 169 + +#define R_KAMO 170 +#define R_KARA2 171 +#define R_GA2 172 +#define R_GATERA 173 +#define R_KIRI 174 +#define R_KUSENI 175 +#define R_KURAI 176 +#define R_GURUMI 177 +#define R_KEDO 178 +#define R_KOSO 179 + +#define R_KOTO 180 +#define R_SI2 181 +#define R_SURA 182 +#define R_ZUTU 183 +#define R_TAME 184 +#define R_TARI 185 +#define R_DANO 186 +#define R_DARAKE 187 +#define R_TUITE 188 +#define R_TUKI 189 + +#define R_TUTU 190 +#define R_TUMORI 191 +#define R_TE1 192 +#define R_TE2 193 +#define R_TERU 194 +#define R_TO2 195 +#define R_TOTTE 196 +#define R_TOIU 197 +#define R_TOORI 198 +#define R_TOKI 199 + +#define R_TOKORO 200 +#define R_TOTE 201 +#define R_TOHAIE 202 +#define R_TOMO 203 +#define R_DO 204 +#define R_DOORI 205 +#define R_DOKORO 206 +#define R_DOKOROKA 207 +#define R_DOMO 208 +#define R_NAGARA 209 + +#define R_NAZO 210 +#define R_NADO 211 +#define R_NARI 212 +#define R_NANKA 213 +#define R_NANZO 214 +#define R_NANTE 215 +#define R_NI2 216 +#define R_NI3 217 +#define R_NITE 218 +#define R_NIMO 219 + +#define R_NO2 220 +#define R_NODE 221 +#define R_NONI 222 +#define R_NOMI 223 +#define R_NOMINRZ 224 +#define R_HAZU 225 +#define R_BA 226 +#define R_BAKARI 227 +#define R_HOU 228 +#define R_HOKA 229 + +#define R_HODO 230 +#define R_MADE 231 +#define R_MAMA 232 +#define R_MO2 233 +#define R_MOTTE 234 +#define R_MONO 235 +#define R_YA2 236 +#define R_YARA 237 +#define R_YUE 238 +#define R_WAKE 239 + +#define R_NN1 240 + + + +#define R_SUUSI 241 +#define R_SETUZOKU 242 +#define R_KANDOU 243 +#define R_SETTOU 244 +#define R_FUKUSI 245 +#define R_FZKKGU 246 +#define R_MEISI 247 +#define R_DMEISI 248 +#define R_SMEISI1 249 +#define R_SMEISI2 250 +#define R_KSTB 251 +#define R_ICHISETUBI 252 +#define R_JOSUUSI 253 +#define R_RENTAISI 254 +#define R_TANKAN 255 + +#endif diff --git a/include/sj3core/sj_struct.h b/include/sj3core/sj_struct.h new file mode 100644 index 0000000..8b84d1c --- /dev/null +++ b/include/sj3core/sj_struct.h @@ -0,0 +1,200 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj_struct.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:16 $ + */ + + + + + +#ifndef _SJ_STRUCT + +#define _SJ_STRUCT + + + +typedef struct jiritu { + struct jiritu *jsort; + TypeDicSeg jseg; + TypeDicOfs jofsst; + TypeDicOfs jofsed; + u_short flags; + TypeClass class; + TypeDicID dicid; + u_char jlen; + TypeGram hinsi; + u_char sttofs; + u_char stbofs; + u_char count; + u_char numlen; +} JREC; + + + + +typedef struct bunsetu { + JREC *jnode; + struct bunsetu *clsort; + u_char gobiln; + u_char cllen; + + TypeCnct right; + u_char cl2len; + u_char kubun; +#if __STDC__ + unsigned fzk_ka : 1; +#else + u_char fzk_ka : 1; +#endif +} CLREC; + + + + +typedef struct kouho { + CLREC *clrec; + TypeDicOfs offs; + TypeStyNum styno; + u_char rank; +#if __STDC__ + unsigned sttfg : 1; + unsigned sttkj : 1; + unsigned ka_fg : 1; + unsigned ka_kj : 1; + unsigned mode : 4; +#else + u_char sttfg : 1; + u_char sttkj : 1; + u_char ka_fg : 1; + u_char ka_kj : 1; + u_char mode : 4; +#endif +} KHREC; + + + + +typedef struct conj { + u_char len; + TypeCnct right; +} CREC; + + + + +typedef struct fuzoku { + u_char *yomip; + u_char *fzkp; + +} FREC; + + + +typedef struct study_in { + TypeDicOfs offset; + TypeDicSeg seg; + TypeStyNum styno; + TypeDicID dicid; +#if __STDC__ + unsigned sttkj : 1; + unsigned ka_kj : 1; + unsigned nmflg : 1; +#else + u_char sttkj : 1; + u_char ka_kj : 1; + u_char nmflg : 1; +#endif +} STDYIN; + + + + +typedef struct study_out { + STDYIN stdy1; + TypeGram hinshi; + u_char len; +#if __STDC__ + unsigned sttlen : 2; + unsigned sttfg : 1; + unsigned ka_fg : 1; +#else + u_char sttlen : 2; + u_char sttfg : 1; + u_char ka_fg : 1; +#endif +} STDYOUT; + + + + +typedef struct dict { + TypeDicID dicid; + + TypeIdxOfs idxlen; + + TypeDicOfs seglen; + TypeDicSeg segunit; + TypeDicSeg maxunit; + + IFunc getofs; + IFunc getidx; + IFunc getdic; + IFunc putidx; + IFunc putdic; + IFunc rszdic; +} DICT; + + + + +typedef struct dictl { + DICT *dict; + struct dictl *next; +} DICTL; + + + + +typedef struct stdy { + short stdycnt; + short stdymax; + STDYIN *stdydic; + + short clstdystep; + u_short *clstdyidx; + + short clstdylen; + u_char *clstdydic; +} STDY; + +#endif diff --git a/include/sj3core/sj_study.h b/include/sj3core/sj_study.h new file mode 100644 index 0000000..a9efb10 --- /dev/null +++ b/include/sj3core/sj_study.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj_study.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:18 $ + */ + +#ifndef _SJ_STUDY + +#define _SJ_STUDY + +#define StudyExist() (stdy_base) + +#define STUDYCOUNT (stdy_base -> stdycnt) +#define STUDYMAX (stdy_base -> stdymax) +#define STUDYDICT (stdy_base -> stdydic) + +#define CLSTUDYIDX (stdy_base -> clstdyidx) +#define CLSTUDYSTEP (stdy_base -> clstdystep) +#define CLSTUDYLEN (stdy_base -> clstdylen) +#define CLSTUDYDICT (stdy_base -> clstdydic) + +#define STUDYTAIL (STUDYDICT + STUDYMAX) +#define STUDYRECSIZE (sizeof(STDYIN)) + +#define CLSTUDYTAIL (CLSTUDYDICT + CLSTUDYLEN) + +#define STUDYNORMEND 0 +#define STUDYNODICT 1 +#define STUDYFULLAREA 2 +#define STUDYNOTSTUDY 3 +#define STUDYERROR 4 + +#define CLSTDY_TMPLEN 256 +#define CLSTUDYNORMEND 0 +#define CLSTUDYNODICT 1 +#define CLSTUDYPARAERR 2 +#define CLSTUDYYOMIERR 3 +#define CLSTUDYNOAREA 4 + +#define CL_YLEN 0 +#define CL_GRAM2 1 +#define CL_Y1LEN 2 +#define CL_NUMH 3 +#define CL_NUML 4 +#define CL_YDATA 5 +#define CL_HDLEN 5 + + + +#define iseocl(p) (!ClYomiLen(p) || (u_char *)(p) >= CLSTUDYTAIL) + +#define ClGramCode(p) *((p) + CL_GRAM2) +#define ClYomiLen(p) *((p) + CL_YLEN) +#define ClYomi1Len(p) *((p) + CL_Y1LEN) +#define ClHighNum(p) *(p + CL_NUMH) +#define ClLowNum(p) *(p + CL_NUML) +#define ClGetNum(p) (ClHighNum(p) * 0x100 + ClLowNum(p)) +#define ClSetNum(p, n) (ClHighNum(p)=(u_char)((n) >> 8), ClLowNum(p)=(u_char)(n)) +#define ClYomiPos(p) ((p) + CL_YDATA) +#define ClBlkLen(p) (ClYomiLen(p) + CL_HDLEN) +#define ClNextTag(p) ((p) + ClBlkLen(p)) + +#endif diff --git a/include/sj3core/sj_suuji.h b/include/sj3core/sj_suuji.h new file mode 100644 index 0000000..ab64224 --- /dev/null +++ b/include/sj3core/sj_suuji.h @@ -0,0 +1,137 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj_suuji.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:19 $ + */ + + + + + +#ifndef _SJ_SUUJI + +#define _SJ_SUUJI + + + +#define SJTBLRECLEN 6 +#define SJTBLRECNUM 34 +#define SjTblYPos(p) (p) +#define SJTBLYLEN 3 +#define SjTblModeP(p) ((p) + 3) +#define SjTblNumber(md) ((md) & 0x0f) +#define SJTBLNARABIAF 0x80 +#define SJTBLNYOMIF 0x40 +#define SJTBLNNARABIF 0x20 +#define SJTBLNNANSUUF 0x10 +#define SjTblNCont(md) ((md) & SJTBLNCONTF) +#define SjTblCnctP(p) ((p) + 4) + +#define KR1TBLRECLEN 5 +#define KR1TBLRECNUM 10 +#define Kr1TblYPos(p) (p) +#define KR1TBLYLEN 3 +#define Kr1TblModeP(p) ((p) + 3) +#define KR1TBLTOPF 0x80 +#define Kr1TblTop(md) ((md) & KR1TBLTOPF) +#define Kr1TblKeta(md) (((md) >> 4) & 7) +#define Kr1TblCnct(md) ((md) & 0x0f) +#define Kr1TblCnctP(p) ((p) + 3) + +#define KR2TBLRECLEN 4 +#define KR2TBLRECNUM 3 +#define Kr2TblYPos(p) (p) +#define KR2TBLYLEN 3 +#define Kr2TblModeP(p) ((p) + 3) +#define Kr2TblCnct(md) ((md) & 0x0f) +#define Kr2TblKeta(md) (((md) >> 4) & 0x0f) + +#define _NUM0 0x01 +#define _NUM1 0x02 +#define _NUM2 0x03 +#define _NUM3 0x04 +#define _NUM4 0x05 +#define _NUM5 0x06 +#define _NUM6 0x07 +#define _NUM7 0x08 +#define _NUM8 0x09 +#define _NUM9 0x0a +#define _NUM1S 0x0b +#define _NUMS 0x0c +#define _NUMN 0x0d + +#define COMMAHIGH 0xa1 +#define COMMALOW 0xa4 + +#define SELARB 1 +#define SELARB0 2 +#define SELARBCMA 3 +#define SELKANSJ0 5 +#define SELKANSJ20 8 +#define SELKANSJYM 9 +#define SELKANSJYM2 10 +#define SELLONGARB 11 +#define SELLONGARBCMA 12 +#define SELLONGSJ 13 +#define SELARBKR 14 +#define SELKANSJKR 15 +#define SELNUMTERM 0xffff + +#define SELKANSJ 4 +#define SELKANSJ2 7 +#define SELKANSJCMA 6 + +#define SELNUM0123 (JFLAG_N01 | JFLAG_N23) +#define SELNUM1_23_10_1 (JFLAG_N_1 | JFLAG_N23 | JFLAG_N10 | JFLAG_NS1) +#define SELNUMMUST (JFLAG_NK2 | JFLAG_NK4 | JFLAG_NN0 | JFLAG_NSN) +#define SELNUMALL (JFLAG_N10 | JFLAG_N_1 | JFLAG_NS1 | JFLAG_N01 \ + | JFLAG_N23 | JFLAG_NK2 | JFLAG_NK4 \ + | JFLAG_NN0 | JFLAG_NSN) + + + +#define SelNumFunc(c) ((c) & (~SELNUMALL)) +#define SelNumCond(c) ((c) & SELNUMALL) + + + +#define NUMBER123456789NS ((1<<_NUM1)|(1<<_NUM2)|(1<<_NUM3)|(1<<_NUM4) \ + |(1<<_NUM5)|(1<<_NUM6)|(1<<_NUM7)|(1<<_NUM8) \ + |(1<<_NUM9)|(1<<_NUM1S)\ + |(1<<_NUMN)|(1<<_NUMS)) +#define NUMBER0 (1<<_NUM0) +#define NUMBER1 ((1<<_NUM1)|(1<<_NUM1S)) +#define NUMBERS1 (1<<_NUM1S) +#define NUMBER01 (NUMBER0|NUMBER1) +#define NUMBER23 ((1<<_NUM2)|(1<<_NUM3)) + +#endif diff --git a/include/sj3core/sj_table.h b/include/sj3core/sj_table.h new file mode 100644 index 0000000..25e582c --- /dev/null +++ b/include/sj3core/sj_table.h @@ -0,0 +1,124 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj_table.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:21 $ + */ + +#ifndef _SJ_TABLE + +#define _SJ_TABLE + + +#define isdpnd(c) (Chrtbl[c] & DEPEND) + + +#define CnjAskLen(p) (((unsigned int) *(p) & 0x70) >> 4) + + +#define CnjNkrLen(p) (*(p) & 0x0f) + + +#define CnjRight(p) *(p + CnjNkrLen(p) + 1) + + +#define CnjRecLen(p) (CnjNkrLen(p) + 2) + + +#define FzkAskLen(p) ((unsigned int) *(p) >> 5) + + +#define FzkNkrLen(p) (*(p) & 0x07) + + +#define FzkStrKa(p) (((unsigned int) *(p) >> 3) & 1) + + +#define FzkHasCode(p) (*(p) & 0x10) + + +#define FzkLeft(p) (*((p) + nlen + 1)) + + +#define FzkRight(p) (*((p) + nlen + 2)) + + +#define SttYomiLen(p) (*(p) & 0x0f) + + +#define SttHiraKnj(p) (*(p) & 0x80) + + +#define StbKnjLen(p) (*(p) & 0x07) + + +#define StbYomiLen(p) (*(p) >> 4) + + +#define StbYomiTop(p) ((p) + 2) + + +#define StbBakeru(p) (*(p) & 0x08) + + +#define StbHinsi(p) (*((p) + 1)) + +#define Charsize charsize +#define Chrtbl chrtbl +#define Conjadr(i) conjadr[i] +#define Connadr connadr +#define Cvtnum_func cvtnum_func +#define Fzkadr(i) fzkadr[i] +#define Getkan_func getkan_func +#define Hiraknj_func hiraknj_func +#define Kigou kigou +#define Kurai1_tbl kurai1_tbl +#define Kurai2_tbl kurai2_tbl +#define Makekan_func makekan_func +#define Num1tbl num1tbl +#define Num2tbl num2tbl +#define Num3tbl num3tbl +#define Num4tbl num4tbl +#define Num5tbl num5tbl +#define Num6tbl num6tbl +#define Rigtadr(i) rigtadr[i] +#define Scncttbl(i, j) scncttbl[i][j] +#define Selsjadrs(i) selsjadrs[i] +#define Setjrec_func setjrec_func +#define Settou_ptr(i) settou_ptr[i] +#define Srchg_func srchg_func +#define Stbadr(i) stbadr[i] +#define Sttpri(i, j) sttpri[i][j] +#define Suuji_tbl suuji_tbl +#define Taipri(i, j) taipri[i][j] +#define Termtbl termtbl + +#endif diff --git a/include/sj3core/sj_typedef.h b/include/sj3core/sj_typedef.h new file mode 100644 index 0000000..548218a --- /dev/null +++ b/include/sj3core/sj_typedef.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj_typedef.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:22 $ + */ + +#ifndef _SJ_TYPEDEF + +#define _SJ_TYPEDEF + +#include +#include + + +#define RECURS + + +typedef void (*VFunc)(); +typedef u_char *(*UCPFunc)(); +typedef int (*IFunc)(); + +#include + +typedef u_char TypeGroup; +typedef u_char TypeGram; +typedef u_short TypeIdxOfs; +typedef short TypeDicSeg; +typedef u_short TypeDicOfs; +typedef ino_t TypeDicID; +typedef u_char TypeCnct; +typedef short TypeStyNum; +typedef u_char TypeClass; +typedef u_char TypeBunNum; + +#endif + diff --git a/include/sj3core/sj_var.h b/include/sj3core/sj_var.h new file mode 100644 index 0000000..51b9927 --- /dev/null +++ b/include/sj3core/sj_var.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj_var.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:23 $ + */ + +#ifndef _SJ_VAR +#define _SJ_VAR + +#define MAXKOUHONUMBER 255 + +#define MAXPHINPUTLEN 256 +#define MAXCLINPUTLEN 64 + +#define MINCLOUTPUTLEN 512 +#define MINPHOUTPUTLEN 288 + +#endif diff --git a/include/sj3core/sj_yomi.h b/include/sj3core/sj_yomi.h new file mode 100644 index 0000000..79f507a --- /dev/null +++ b/include/sj3core/sj_yomi.h @@ -0,0 +1,217 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj_yomi.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:24 $ + */ + + + + + +#ifndef _SJ_YOMICODE + +#define _SJ_YOMICODE + +#define _TYOUON 0x01 +#define _IGETA 0x02 +#define _ATTO 0x03 +#define _YUUBIN 0x04 + +#define N_0 0x10 +#define N_1 0x11 +#define N_2 0x12 +#define N_3 0x13 +#define N_4 0x14 +#define N_5 0x15 +#define N_6 0x16 +#define N_7 0x17 +#define N_8 0x18 +#define N_9 0x19 + +#define A_A 0x1A +#define A_B 0x1B +#define A_C 0x1C +#define A_D 0x1D +#define A_E 0x1E +#define A_F 0x1F +#define A_G 0x20 +#define A_H 0x21 +#define A_I 0x22 +#define A_J 0x23 +#define A_K 0x24 +#define A_L 0x25 +#define A_M 0x26 +#define A_N 0x27 +#define A_O 0x28 +#define A_P 0x29 +#define A_Q 0x2A +#define A_R 0x2B +#define A_S 0x2C +#define A_T 0x2D +#define A_U 0x2E +#define A_V 0x2F +#define A_W 0x30 +#define A_X 0x31 +#define A_Y 0x32 +#define A_Z 0x33 + +#define A_a 0x34 +#define A_b 0x35 +#define A_c 0x36 +#define A_d 0x37 +#define A_e 0x38 +#define A_f 0x39 +#define A_g 0x3A +#define A_h 0x3B +#define A_i 0x3C +#define A_j 0x3D +#define A_k 0x3E +#define A_l 0x3F +#define A_m 0x40 +#define A_n 0x41 +#define A_o 0x42 +#define A_p 0x43 +#define A_q 0x44 +#define A_r 0x45 +#define A_s 0x46 +#define A_t 0x47 +#define A_u 0x48 +#define A_v 0x49 +#define A_w 0x4A +#define A_x 0x4B +#define A_y 0x4C +#define A_z 0x4D + +#define _XA 0x4E +#define _A 0x4F +#define _XI 0x50 +#define _I 0x51 +#define _XU 0x52 +#define _U 0x53 +#define _XE 0x54 +#define _E 0x55 +#define _XO 0x56 +#define _O 0x57 +#define _KA 0x58 +#define _GA 0x59 +#define _KI 0x5A +#define _GI 0x5B +#define _KU 0x5C +#define _GU 0x5D +#define _KE 0x5E +#define _GE 0x5F +#define _KO 0x60 +#define _GO 0x61 +#define _SA 0x62 +#define _ZA 0x63 +#define _SI 0x64 +#define _ZI 0x65 +#define _SU 0x66 +#define _ZU 0x67 +#define _SE 0x68 +#define _ZE 0x69 +#define _SO 0x6A +#define _ZO 0x6B +#define _TA 0x6C +#define _DA 0x6D +#define _TI 0x6E +#define _DI 0x6F +#define _XTU 0x70 +#define _TU 0x71 +#define _DU 0x72 +#define _TE 0x73 +#define _DE 0x74 +#define _TO 0x75 +#define _DO 0x76 +#define _NA 0x77 +#define _NI 0x78 +#define _NU 0x79 +#define _NE 0x7A +#define _NO 0x7B +#define _HA 0x7C +#define _BA 0x7D +#define _PA 0x7E +#define _HI 0x7F +#define _BI 0x80 +#define _PI 0x81 +#define _HU 0x82 +#define _BU 0x83 +#define _PU 0x84 +#define _HE 0x85 +#define _BE 0x86 +#define _PE 0x87 +#define _HO 0x88 +#define _BO 0x89 +#define _PO 0x8A +#define _MA 0x8B +#define _MI 0x8C +#define _MU 0x8D +#define _ME 0x8E +#define _MO 0x8F +#define _XYA 0x90 +#define _YA 0x91 +#define _XYU 0x92 +#define _YU 0x93 +#define _XYO 0x94 +#define _YO 0x95 +#define _RA 0x96 +#define _RI 0x97 +#define _RU 0x98 +#define _RE 0x99 +#define _RO 0x9A +#define _XWA 0x9B +#define _WA 0x9C +#define _WI 0x9D +#define _WE 0x9E +#define _WO 0x9F +#define _NN 0xA0 +#define _VU 0xA1 +#define _XKA 0xA2 +#define _XKE 0xA3 + +#define Y_KUTEN 0xF2 +#define Y_TOUTEN 0xF3 +#define Y_COMMA 0xF4 +#define Y_PERIOD 0xF5 +#define Y_QUOTA 0xF6 +#define Y_BIKKURI 0xF7 +#define Y_S_KIGOU1 0xF8 +#define Y_S_KIGOU2 0xF9 +#define Y_L_KAKKO 0xFA +#define Y_R_KAKKO 0xFB +#define Y_KIGOU 0xFC +#define Y_HANKAKU 0xFD +#define Y_ZENKAKU 0xFE + +#define _NIL 0 + +#endif diff --git a/include/sj3lib/Makefile.am b/include/sj3lib/Makefile.am new file mode 100644 index 0000000..9e6d3e3 --- /dev/null +++ b/include/sj3lib/Makefile.am @@ -0,0 +1,6 @@ +EXTRA_DIST = \ + sj3intern.h \ + sj3lowlib.h + + +include_HEADERS = sj3lib.h diff --git a/include/sj3lib/sj3intern.h b/include/sj3lib/sj3intern.h new file mode 100644 index 0000000..8a56324 --- /dev/null +++ b/include/sj3lib/sj3intern.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2004 Iwata + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef SJ3INTERN_H +#define SJ3INTERN_H + +#include "sj3lowlib.h" + +/* level1.c */ +void sj3_set_timeout(int); +int sj3_make_connection(SJ3_CLIENT_ENV *, char *, char *, char *); +int sj3_erase_connection(SJ3_CLIENT_ENV *); +long sj3_open_dictionary(SJ3_CLIENT_ENV *, char *, char *); +int sj3_close_dictionary(SJ3_CLIENT_ENV *, long); +int sj3_open_study_file(SJ3_CLIENT_ENV *, char *, char *); +int sj3_close_study_file(SJ3_CLIENT_ENV *); +int sj3_get_id_size(SJ3_CLIENT_ENV *); +int sj3_lock_server(SJ3_CLIENT_ENV *); +int sj3_unlock_server(SJ3_CLIENT_ENV *); +int sj3_ikkatu_henkan(SJ3_CLIENT_ENV *, u_char *, u_char *, int, int); +int sj3_bunsetu_henkan(SJ3_CLIENT_ENV *, u_char *, int, u_char *, int); +int sj3_bunsetu_jikouho(SJ3_CLIENT_ENV *, u_char *, int, int); +int sj3_bunsetu_maekouho(SJ3_CLIENT_ENV *, u_char *, int, int); +int sj3_bunsetu_kouhosuu(SJ3_CLIENT_ENV *, u_char *, int, int); +int sj3_bunsetu_zenkouho(SJ3_CLIENT_ENV *, u_char *, int, SJ3_DOUON *, int); +int sj3_tango_gakusyuu(SJ3_CLIENT_ENV *, SJ3_STUDYREC *); +int sj3_bunsetu_gakusyuu(SJ3_CLIENT_ENV *, u_char *, u_char *, SJ3_STUDYREC *, int); +int sj3_tango_touroku(SJ3_CLIENT_ENV *, long, u_char *, u_char *, int, int); +int sj3_tango_sakujo(SJ3_CLIENT_ENV *, long, u_char *, u_char *, int, int); +int sj3_tango_syutoku(SJ3_CLIENT_ENV *, int, u_char *, int); +int sj3_tango_jikouho(SJ3_CLIENT_ENV *, int, u_char *, int); +int sj3_tango_maekouho(SJ3_CLIENT_ENV *, int, u_char *, int); +int sj3_make_dict_file(SJ3_CLIENT_ENV *, char *, int, int, int); +int sj3_make_study_file(SJ3_CLIENT_ENV *, char *, int, int, int); +int sj3_make_directory(SJ3_CLIENT_ENV *, char *); +int sj3_access(SJ3_CLIENT_ENV *, char *, int); +int sj3_who(SJ3_CLIENT_ENV *, SJ3_WHO_STRUCT *, int); +int sj3_quit(SJ3_CLIENT_ENV *); +int sj3_kill(SJ3_CLIENT_ENV *); +int sj3_version(SJ3_CLIENT_ENV *, char *, int); + +#endif /* SJ3INTERN_H */ diff --git a/include/sj3lib/sj3lib.h b/include/sj3lib/sj3lib.h new file mode 100644 index 0000000..e21d7ee --- /dev/null +++ b/include/sj3lib/sj3lib.h @@ -0,0 +1,207 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj3lib.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:03:57 $ + */ + + +#ifndef SJ3LIB_H +#define SJ3LIB_H + +#include + +#define SJ3_NORMAL_END 0 +#define SJ3_SERVER_DEAD (1 << 0) + + + +#define SJ3_CONNECT_ERROR (1 << 1) +#define SJ3_ALREADY_CONNECTED (1 << 2) +#define SJ3_CANNOT_OPEN_MDICT (1 << 3) +#define SJ3_CANNOT_OPEN_UDICT (1 << 4) +#define SJ3_CANNOT_OPEN_STUDY (1 << 5) +#define SJ3_CANNOT_MAKE_UDIR (1 << 6) +#define SJ3_CANNOT_MAKE_UDICT (1 << 7) +#define SJ3_CANNOT_MAKE_STUDY (1 << 8) + + + +#define SJ3_DISCONNECT_ERROR (1 << 1) +#define SJ3_NOT_CONNECTED (1 << 2) +#define SJ3_NOT_OPENED_MDICT (1 << 3) +#define SJ3_NOT_OPENED_UDICT (1 << 4) +#define SJ3_NOT_OPENED_STUDY (1 << 5) +#define SJ3_CLOSE_MDICT_ERROR (1 << 6) +#define SJ3_CLOSE_UDICT_ERROR (1 << 7) +#define SJ3_CLOSE_STUDY_ERROR (1 << 8) + + + +#define SJ3_DICT_ERROR 1 +#define SJ3_DICT_LOCKED 2 +#define SJ3_BAD_YOMI_STR 3 +#define SJ3_BAD_KANJI_STR 4 +#define SJ3_BAD_HINSI_CODE 5 + +#define SJ3_WORD_EXIST 6 +#define SJ3_DOUON_FULL 7 +#define SJ3_DICT_FULL 8 +#define SJ3_INDEX_FULL 9 +#define SJ3_TOUROKU_FAILED 10 + +#define SJ3_WORD_NOT_EXIST 6 +#define SJ3_SYOUKYO_FAILED 10 + + + + +#define SJ3_IKKATU_YOMI 512 + + + + +#define SJ3_BUNSETU_YOMI 128 +#define SJ3_BUNSETU_KANJI 512 + + + + +#ifndef SJ3_WORD_ID_SIZE +# define SJ3_WORD_ID_SIZE 32 +#endif + +typedef struct studyrec { + unsigned char dummy[SJ3_WORD_ID_SIZE]; +} SJ3_STUDYREC; + + + + +typedef struct bunsetu { + int srclen; + int destlen; + unsigned char *srcstr; + unsigned char *deststr; + struct studyrec dcid; +} SJ3_BUNSETU; + + + +typedef struct douon { + unsigned char ddata[SJ3_BUNSETU_KANJI]; + int dlen; + SJ3_STUDYREC dcid; +} SJ3_DOUON; + + + +#define SJ3_H_NRMNOUN 1 +#define SJ3_H_PRONOUN 12 +#define SJ3_H_LNAME 21 +#define SJ3_H_FNAME 22 +#define SJ3_H_LOCNAME 24 +#define SJ3_H_PREFIC 25 +#define SJ3_H_RENTAI 26 +#define SJ3_H_CONJUNC 27 +#define SJ3_H_SUBNUM 29 +#define SJ3_H_NUMERAL 30 +#define SJ3_H_PREFIX 31 +#define SJ3_H_POSTFIX 36 +#define SJ3_H_ADVERB 45 +#define SJ3_H_ADJECT 60 +#define SJ3_H_ADJVERB 71 +#define SJ3_H_SILVERB 80 +#define SJ3_H_ZILVERB 81 +#define SJ3_H_ONEVERB 90 +#define SJ3_H_KAVERB 91 +#define SJ3_H_GAVERB 92 +#define SJ3_H_SAVERB 93 +#define SJ3_H_TAVERB 94 +#define SJ3_H_NAVERB 95 +#define SJ3_H_BAVERB 96 +#define SJ3_H_MAVERB 97 +#define SJ3_H_RAVERB 98 +#define SJ3_H_WAVERB 99 +#define SJ3_H_SINGLE 189 + +/* sj3.c */ +int sj3_open(char *, char *); + +int sj3_open_with_list(char *, char *, int, char **, int *, int **); + +int sj3_close(); + +int sj3_getkan(u_char *, SJ3_BUNSETU *, u_char *, int); +int sj3_getkan_euc(u_char *, SJ3_BUNSETU *, u_char *, int); +int sj3_getkan_mb(u_char *, SJ3_BUNSETU *, u_char *, int); + +int sj3_douoncnt(u_char *); +int sj3_douoncnt_euc(u_char *); +int sj3_douoncnt_mb(u_char *); + +int sj3_getdouon(u_char *, SJ3_DOUON *); +int sj3_getdouon_euc(u_char *, SJ3_DOUON *); +int sj3_getdouon_mb(u_char *, SJ3_DOUON *); + +int sj3_gakusyuu(SJ3_STUDYREC *); + +int sj3_gakusyuu2(u_char *, u_char *, SJ3_STUDYREC *); +int sj3_gakusyuu2_euc(u_char *, u_char *, SJ3_STUDYREC *); +int sj3_gakusyuu2_mb(u_char *, u_char *, SJ3_STUDYREC *); + +int sj3_touroku(u_char *, u_char *, int); +int sj3_touroku_euc(u_char *, u_char *, int); +int sj3_touroku_mb(u_char *, u_char *, int); + +int sj3_syoukyo(u_char *, u_char *, int); +int sj3_syoukyo_euc(u_char *, u_char *, int); +int sj3_syoukyo_mb(u_char *, u_char *, int); + +int sj3_getdict(u_char *); +int sj3_getdict_euc(u_char *); +int sj3_getdict_mb(u_char *); + +int sj3_nextdict(u_char *); +int sj3_nextdict_euc(u_char *); +int sj3_nextdict_mb(u_char *); + +int sj3_prevdict(u_char *); +int sj3_prevdict_euc(u_char *); +int sj3_prevdict_mb(u_char *); + +int sj3_lockserv(); + +int sj3_unlockserv(); + +extern int sj3_error_number; + +#endif /* SJ3LIB_H */ diff --git a/include/sj3lib/sj3lowlib.h b/include/sj3lib/sj3lowlib.h new file mode 100644 index 0000000..84c8a75 --- /dev/null +++ b/include/sj3lib/sj3lowlib.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj3lowlib.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:00:59 $ + */ + +#ifndef SJ3LOWLIB_H +#define SJ3LOWLIB_H + + + + + +typedef struct sj3_client_env { + int fd; + int serv_dead_flg; + int stdy_size; + short svr_version; + short cli_version; + char default_char[2]; +} SJ3_CLIENT_ENV; + + + + +#ifndef SJ3_NAME_LENGTH +# define SJ3_NAME_LENGTH 128 +#endif +typedef struct sj3_who_struct { + int fd; + char hostname[SJ3_NAME_LENGTH]; + char username[SJ3_NAME_LENGTH]; + char progname[SJ3_NAME_LENGTH]; +} SJ3_WHO_STRUCT; + + +#define MBCODE_SJIS 1 +#define MBCODE_EUC 2 + +#endif /* SJ3LOWLIB_H */ diff --git a/include/sj3rkcv/Makefile.am b/include/sj3rkcv/Makefile.am new file mode 100644 index 0000000..f070351 --- /dev/null +++ b/include/sj3rkcv/Makefile.am @@ -0,0 +1,8 @@ +EXTRA_DIST = \ + kana.h \ + kctype.h \ + key.h \ + rk.h \ + wchar16.h + +include_HEADERS = sj3rkcv.h diff --git a/include/sj3rkcv/kana.h b/include/sj3rkcv/kana.h new file mode 100644 index 0000000..2017501 --- /dev/null +++ b/include/sj3rkcv/kana.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: kana.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:03:45 $ + */ + + + + +#define ZKATA1 0xa5 +#define ZHIRA1 0xa4 +#define ZKATAF2 0xa1 +#define ZKATAE2 0xf6 +#define ZHIRAF2 0xa1 +#define ZHIRAE2 0xf3 +#define ZKATAMU 0xe0 +#define ZHIRAMU 0xe0 + +#define ZKATAn (ZKATAE2-ZKATAF2+1) + + + +#define ZEN_SPACE 0xa1a1 +#define ZEN_KTEN 0xa1a3 +#define ZEN_FKAKKO 0xa1d6 +#define ZEN_EKAKKO 0xa1d7 +#define ZEN_TTEN 0xa1a2 +#define ZEN_CTEN 0xa1a6 +#define ZEN_CHOUON 0xa1bc +#define ZEN_DTEN 0xa1ab +#define ZEN_HDTEN 0xa1ac +#define ZEN_VU 0xa5f4 + +#define KANA_KTEN 0xa1 +#define KANA_FKAKKO 0xa2 +#define KANA_EKAKKO 0xa3 +#define KANA_TTEN 0xa4 +#define KANA_CTEN 0xa5 +#define KANA_CHOUON 0xb0 +#define KANA_DTEN 0xde +#define KANA_HDTEN 0xdf + +#define KANA_XA 0xa7 +#define KANA_XYA 0xac +#define KANA_XTSU 0xaf + +#define KANA_A 0xb1 +#define KANA_KA 0xb6 +#define KANA_SA 0xbb +#define KANA_TA 0xc0 +#define KANA_NA 0xc5 +#define KANA_HA 0xca +#define KANA_MA 0xcf +#define KANA_YA 0xd4 +#define KANA_RA 0xd7 +#define KANA_WA 0xdc +#define KANA_WO 0xa6 + +#define KANA_GA (KANA_KA << 8) + KANA_DTEN +#define KANA_ZA (KANA_SA << 8) + KANA_DTEN +#define KANA_DA (KANA_TA << 8) + KANA_DTEN +#define KANA_BA (KANA_HA << 8) + KANA_DTEN +#define KANA_PA (KANA_HA << 8) + KANA_HDTEN diff --git a/include/sj3rkcv/kctype.h b/include/sj3rkcv/kctype.h new file mode 100644 index 0000000..e1940a7 --- /dev/null +++ b/include/sj3rkcv/kctype.h @@ -0,0 +1,115 @@ +/* + * Copyright (c) 1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: kctype.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:03:46 $ + */ + + + +#if !defined(__sony_news) || (defined(__sony_news) && !defined(SVR4)) +#ifndef __KCTYPE +#define __KCTYPE + +#define sjis2euc sj3_sjis2euc +#define jis2sjis sj3_jis2sjis +#define euctosjis sj3_euctosjis +#define sjis2jis sj3_sjis2jis +#define euc2sjis sj3_euc2sjis +#define jis2euc sj3_jis2euc +#define sjistoeuc sj3_sjistoeuc + +#ifdef issjis1 +#undef issjis1 +#endif +#define issjis1(c) (((0x81 <= (c)) && ((c) <= 0x9f)) || \ + ((0xe0 <= (c)) && ((c) <= 0xfc))) + +#ifdef issjis2 +#undef issjis2 +#endif +#define issjis2(c) (((0x40 <= (c)) && ((c) <= 0xfc)) && ((c) != 0x7f)) + +#ifdef iseuc +#undef iseuc +#endif +#define iseuc(c) ((0xa1 <= (c)) && ((c) <= 0xfe)) + +#ifdef iseuckana +#undef iseuckana +#endif +#define iseuckana(c) ((c) == 0x8e) + +#ifdef iskana2 +#undef iskana2 +#endif +#define iskana2(c) ((0xa1 <= (c)) && ((c) <= 0xdf)) + +#ifdef jiszen +#undef jiszen +#endif +#define jiszen(c) (issjis1(((c) >> 8) & 0xff) && issjis2((c) & 0xff)) + +#ifdef isjjis +#undef isjjis +#endif +#define isjjis(c) ((0x21 <= (c)) && ((c) <= 0x7e)) + +#ifdef jstrlen +#undef jstrlen +#endif +#define jstrlen(s) euclen(s, 65535) + +#ifdef iseuc3byte +#undef iseuc3byte +#endif +#define iseuc3byte(c) ((c) == 0x8f) + +#ifdef iseuc2byte +#undef iseuc2byte +#endif +#define iseuc2byte(c) (iseuc(c) || ((c) == 0x8e)) + +#ifdef iskanji +#undef iskanji +#endif +#define iskanji issjis1 +#ifdef iskanji2 +#undef iskanji2 +#endif +#define iskanji2 issjis2 +#ifdef iskana +#undef iskana +#endif +#define iskana iskana2 +#endif +#endif + diff --git a/include/sj3rkcv/key.h b/include/sj3rkcv/key.h new file mode 100644 index 0000000..192b805 --- /dev/null +++ b/include/sj3rkcv/key.h @@ -0,0 +1,98 @@ +/* + * Copyright (c) 1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: key.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:03:47 $ + */ + + + + + +#define KEY_NORMAL 0 +#define KEY_CONV 1 +#define KEY_HENKAN 2 +#define KEY_MUHENKAN 3 +#define KEY_KETTEI 4 +#define KEY_ZHIRA 5 +#define KEY_HALPHA 6 +#define KEY_ZALPHA 7 +#define KEY_HKATA 8 +#define KEY_ZKATA 9 +#define KEY_CODE 10 +#define KEY_ETC 11 +#define KEY_RIGHT 12 +#define KEY_LEFT 13 +#define KEY_UP 14 +#define KEY_DOWN 15 +#define KEY_TOGGLE 16 +#define KEY_EDIT 17 + +#define KEY_WRAP 18 +#define KEY_WRAPBACK 19 +#define KEY_HELP 20 +#define KEY_TOROKU 21 +#define KEY_SYOUKYO 22 +#define KEY_SJRC 23 + +#define KEY_HA_KET 24 +#define KEY_FLUSH 25 +#define KEY_BUFFER 26 + +#define KEY_HANKAKU 27 +#define KEY_ZENKAKU 28 + +#define KEY_HIRAGANA 29 +#define KEY_KATAKANA 30 +#define KEY_EISUU 31 +#define KEY_EIDAI 32 +#define KEY_ROMA 33 + +#define KEY_CANCEL 34 +#define KEY_RECONV 35 + +#define KEY_IGNORE 36 +#define KEY_DEBUG 37 + +#define KEY_TOP 38 +#define KEY_END 39 +#define KEY_RECONNECT 40 +#define KEY_KILL 41 +#define KEY_OTHER 42 + +#define KEY_MORE 43 + + + +#define UKEYNUM 64 +#define SEQLEN 8 +#define COMNUM 64 + diff --git a/include/sj3rkcv/rk.h b/include/sj3rkcv/rk.h new file mode 100644 index 0000000..3ac192a --- /dev/null +++ b/include/sj3rkcv/rk.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: rk.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:03:48 $ + */ + +#ifndef RK_H +#define RK_H + +#include +#include "wchar16.h" + +#define SPACE 0x20 +#define TAB 0x09 +#define EOL 0x0a +#define NSTR '\0' +#ifndef ESC +#define ESC 0x1b +#endif +#define QUOTA '\'' +#define BSL '\\' +#define MASK 0xff + +#define MAXLEN 256 +#define MAXWLEN 16 +#define MAXLLEN 64 +#define MAXCODE 256 + +#define CONTINUE 0 +#define NOMACH -1 +#define FAIL -1 +#define RKEND 0xffffffff +#define ERRBEL 0xfffffffc +#define ERRCODE 0x80000000 +#define RKMASK 0x0000ffff +#define RKZEN 0xff00 + +#define SetMojilen(c) ((c << 16) & 0x00ff0000) +#define GetMojilen(c) ((c & ERRCODE) ? (1) : ((c >> 16) & 0xff)) + +typedef struct rktable_w16 { + wchar16_t *r_key; + u_short *k_yomi; + wchar16_t *r_str; + struct rktable_w16 *next; +} RkTablW16; + +typedef struct rktable { + u_char *r_key; + u_short *k_yomi; + u_char *r_str; + struct rktable *next; +} RkTabl; + +#endif /* RK_H */ + diff --git a/include/sj3rkcv/sj3rkcv.h b/include/sj3rkcv/sj3rkcv.h new file mode 100644 index 0000000..e071d3f --- /dev/null +++ b/include/sj3rkcv/sj3rkcv.h @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2004 Iwata + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef SJ3RKCV_H +#define SJ3RKCV_H + +#include "rk.h" + +/* rk_conv.c */ +#define RKSIZE 256 +#define RKINCZ 32 +typedef struct rkbufrec { + RkTablW16 *rkbuf; + RkTablW16 *rkend; + struct rkbufrec *rkbufp; +} RkbufRec; + +#define STRSIZE 1024 +#define STRINCZ 256 +typedef struct strbufrec { + wchar16_t *strbuf; + wchar16_t *strend; + struct strbufrec *strbufp; +} StrbufRec; + +#define YMISIZE 512 +#define YMIINCZ 64 +typedef struct ymibufrec { + wchar16_t *ymibuf; + wchar16_t *ymiend; + struct ymibufrec *ymibufp; +} YmibufRec; +extern RkTabl *sj3_rcode[MAXCODE]; +extern RkTablW16 *sj3_rcode_w16[MAXCODE]; +extern RkTablW16 *rktblp; +extern wchar16_t rline[MAXLLEN]; +extern wchar16_t lstr[MAXLLEN]; + +void sj3_rkcode(int); +int sj3_rkinit2(char *, int); +int rcode_sjis_init(); +int rcode_euc_init(); +int sj3_rkinit(char *); +int sj3_rkinit_euc(char *); +int sj3_rkinit_mb(char *); +int sj3_rkinit_sub(char *rkfile, int (*)()); +char *rkgetyomi(char *, wchar16_t *, int *); +char *getkey(char *, wchar16_t *, int *); +void cltable(); +int chk_rstr(wchar16_t *, wchar16_t *, int, int); +RkTablW16 *rkalloc(); +int stradd(wchar16_t **, wchar16_t *, int); +int kstradd(wchar16_t **, wchar16_t *, int); +RkTablW16 * mktable(wchar16_t *, int); +void sj3_rkebell(int); +void sj3_rkclear(); +void sj3_rkreset(); +void sj3_rkconvc(wchar16_t, u_int *); +int sj3_rkconv2(wchar16_t *, u_int *, int); +int sj3_rkconv(u_char *, u_char *); +int sj3_rkconv_euc(u_char *, u_char *); +int sj3_rkconv_mb(u_char *, u_char *); +int sj3_rkconv_w16(wchar16_t *, wchar16_t *); +int rkmatch(wchar16_t *, wchar16_t *, int); + +/* sj3_rkcv.h */ +#ifdef ADDHK +void setl_hktozh(); +#endif +void mkkigou(); +int sj_addten(u_short, u_short); +int sj_han2zen(u_short); +int sj3_hantozen_euc(u_char *, u_char *); +int sj3_hantozen_mb(u_char *, u_char *); +int sj3_hantozen_w16(wchar16_t *, wchar16_t *); +int sj_hantozen(wchar16_t *, wchar16_t *, int); +int sj_zen2han(u_short); +int sj3_zentohan(u_char *, u_char *); +int sj3_zentohan_euc(u_char *, u_char *); +int sj3_zentohan_mb(u_char *, u_char *); +int sj3_zentohan_w16(wchar16_t *, wchar16_t *); +int sj_zentohan(wchar16_t *, wchar16_t *, int); +int sj_tokata(wchar16_t); +int sj_tohira(wchar16_t); +int sj_htok(wchar16_t *, wchar16_t *); +int sj_ktoh(wchar16_t *, wchar16_t *); + +/* wc16_str.c */ +int sj3_iswcntrl16(wchar16_t); +int sj3_iswupper16(wchar16_t); +int sj3_iswdigit16(wchar16_t); +int sj3_iswxdigit16(wchar16_t); +int sj3_wslen16(wchar16_t *); +int sj3_wscmp16(wchar16_t *, wchar16_t *); +int sj3_wsncmp16(wchar16_t *, wchar16_t *, int); +wchar16_t *sj3_wscpy16(wchar16_t *, wchar16_t *); +wchar16_t *sj3_wsncpy16(wchar16_t *, wchar16_t *, int); +wchar16_t *sj3_wscat16(wchar16_t *, wchar16_t *); +wchar16_t sj3_euc2wc16(unsigned int); +wchar16_t sj3_sjis2wc16(unsigned int); +unsigned int sj3_wc2euc16(wchar16_t); +unsigned int sj3_wc2sjis16(wchar16_t); +int sj3_wcs2eucs16(unsigned char *, wchar16_t *, int); +int sj3_wcs2sjiss16(unsigned char *, wchar16_t *, int); +int sj3_eucs2wcs16(wchar16_t *, unsigned char *, int); +int sj3_sjiss2wcs16(wchar16_t *, unsigned char *, int); +int sj3_mbstowcs16(wchar16_t *, unsigned char *, int); +int sj3_wcstombs16(unsigned char *, unsigned char *, int); + +/* XXX */ +extern int current_locale; + +#endif + diff --git a/include/sj3rkcv/wchar16.h b/include/sj3rkcv/wchar16.h new file mode 100644 index 0000000..5ad83e8 --- /dev/null +++ b/include/sj3rkcv/wchar16.h @@ -0,0 +1,392 @@ +/* + * Copyright (c) 1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: wchar16.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:03:52 $ + */ + + + +#ifndef _WCHARH +#define _WCHARH + + +#if defined(__sony_news) && defined(SVR4) +#define _WCHAR_T +typedef unsigned short wchar_t; +#include +#include +#include +#include +typedef wchar_t wchar16_t; +#else +#include +#include +typedef unsigned short wchar16_t; +#endif +#include "key.h" + +#ifndef SS2 +#define SS2 0x8e +#define SS3 0x8f +#endif + +#if !defined(__sony_news) || (defined(__sony_news) && !defined(SVR4)) + +#ifdef iswcntrl +#undef iswcntrl +#endif +#define iswcntrl(wc) sj3_iswcntrl16(wc) +#ifdef iswupper +#undef iswupper +#endif +#define iswupper(wc) sj3_iswupper16(wc) +#ifdef iswdigit +#undef iswdigit +#endif +#define iswdigit(wc) sj3_iswdigit16(wc) +#ifdef iswxdigit +#undef iswxdigit +#endif +#define iswxdigit(wc) sj3_iswxdigit16(wc) +#ifdef wslen +#undef wslen +#endif +#define wslen(ws) sj3_wslen16(ws) +#ifdef wscmp +#undef wscmp +#endif +#define wscmp(ws1, ws2) sj3_wscmp16(ws1, ws2) +#ifdef wsncmp +#undef wsncmp +#endif +#define wsncmp(ws1, ws2, n) sj3_wsncmp16(ws1, ws2, n) +#ifdef wscpy +#undef wscpy +#endif +#define wscpy(ws1, ws2) sj3_wscpy16(ws1, ws2) +#ifdef wsncpy +#undef wsncpy +#endif +#define wsncpy(ws1, ws2, n) sj3_wsncpy16(ws1, ws2, n) +#ifdef wscat +#undef wscat +#endif +#define wscat(ws1, ws2) sj3_wscat16(ws1, ws2) +#ifdef mbstowcs +#undef mbstowcs +#endif +#define mbstowcs(mb, ws, n) sj3_mbstowcs16(mb, ws, n) +#ifdef wcstombs +#undef wcstombs +#endif +#define wcstombs(ws, mb, n) sj3_wcstombs16(ws, mb, n) +#endif + + +#define LC_CTYPE_SHIFTJIS 1 +#define LC_CTYPE_EUC 2 + +#define IsEUCHojo(x) (((unsigned char) (x)) == SS3) + + + + +#define WcX0208MASK 0xffff +#define WcX0212MASK 0xff7f +#define WcJISMASK 0x7f7f +#define WcLowMASK 0x00ff +#define WcHighMASK 0xff00 + +#define WcASCIIFLAG 0x0000 +#define WcX0208FLAG 0x8080 +#define WcX0212FLAG 0x8000 +#define WcX0201FLAG 0x0080 + +#define WcLowByte(w) ((w) & 0xff) +#define WcHighByte(w) (((w) >> 8) & 0xff) + +#define WcIsASCII(w) ((((wchar16_t) (w)) & WcX0208FLAG) == WcASCIIFLAG) +#define WcIsX0208(w) ((((wchar16_t) (w)) & WcX0208FLAG) == WcX0208FLAG) +#define WcIsX0201(w) ((((wchar16_t) (w)) & WcX0208FLAG) == WcX0201FLAG) +#define WcIsX0212(w) ((((wchar16_t) (w)) & WcX0208FLAG) == WcX0212FLAG) + +#define WcIsZENKAKU(w) ((((wchar16_t) (w)) & WcX0212FLAG) == WcX0212FLAG) +#define WcIsHANKAKU(w) ((((wchar16_t) (w)) & WcX0212FLAG) == WcASCIIFLAG) +#define WcIsKANJI(w) WcIsZENKAKU(w) +#define WcIsKANA(w) WcIsX0201(w) + +#define WcSetX0212(c1, c2) ((((c1) & 0xff) << 8) + ((c2) & 0x7f)) +#define WcJIS2X0208(w) ((w) | WcX0208FLAG) +#define WcJIS2X0212(w) ((w) | WcX0212FLAG) +#define Wc2JIS(w) ((w) & WcJISMASK) + + +#define WCSJrun WcMessages[0] + +#define WCMode_buff WcMessages[1] +#define WCMode_unbuff WcMessages[2] + +#define WCMode_Zhira WcMessages[3] +#define WCMode_Zkata WcMessages[4] +#define WCMode_Hkata WcMessages[5] +#define WCMode_Zalpha WcMessages[6] +#define WCMode_Halpha WcMessages[7] + +#define WCGmode WcMessages[8] +#define WCGEtc WcMessages[9] +#define WCGetc WcMessages[10] + +#define WCGHelp WcMessages[11] +#define WCMHelp WcMessages[12] + + + +#define WCGCshift WcMessages[13] +#define WCGCeuc WcMessages[14] +#define WCGCeuc2 WcMessages[15] +#define WCGCjis WcMessages[16] +#define WCGCjis2 WcMessages[17] +#define WCGCkuten WcMessages[18] +#define WCGCkuten2 WcMessages[19] + + + +#define WCGtoroku WcMessages[20] +#define WCMhani WcMessages[21] +#define WCMyomi WcMessages[22] +#define WCTOUROKU_OK WcMessages[23] +#define WCSYOUKYO_OK WcMessages[24] +#define WCTOUROKU_HIN WcMessages[25] +#define WCTOUROKU_SUCC WcMessages[26] +#define WCYomi WcMessages[27] +#define WCOne WcMessages[28] +#define WCY WcMessages[29] +#define WCExist WcMessages[30] +#define WCYomiTouroku WcMessages[31] +#define WCKanjiTouroku WcMessages[32] +#define WCOnajiTouroku WcMessages[33] +#define WCUserTouroku WcMessages[34] +#define WCJishoLock WcMessages[35] +#define WCSystemError WcMessages[36] +#define WCKanma WcMessages[37] + + +#define WCGsyoukyo WcMessages[38] +#define WCSYOUKYO_SUCC WcMessages[39] +#define WCNotExist WcMessages[40] +#define WCUserLock WcMessages[41] +#define WCYomiShokyo WcMessages[42] +#define WCKanjiShokyo WcMessages[43] +#define WCShokyoError WcMessages[44] + + + +#define WCSUCCsjrc WcMessages[45] +#define WCFAILsjrc WcMessages[46] +#define WCNOTHsjrc WcMessages[47] + + +#define WCWeight_mes WcMessages[48] + + + +#define WCGrcon WcMessages[49] +#define WCRserv WcMessages[50] +#define WCRserv_OK WcMessages[51] +#define WCDiscon WcMessages[52] + +#define WCSpace WcMessages[53] +#define WCSpace2 WcMessages[54] +#define WCContinue WcMessages[55] + + +#define WCServer_Dead WcMessages[56] +#define WCConnected WcMessages[57] +#define WCNconnect WcMessages[58] +#define WCNopen_Mdic WcMessages[59] +#define WCNmake_Udir WcMessages[60] +#define WCNmake_Udic WcMessages[61] +#define WCNopen_Udic WcMessages[62] +#define WCNmake_Study WcMessages[63] +#define WCNopen_Study WcMessages[64] + + + +#define WCGedit WcMessages[65] + + +#define WCTooLong WcMessages[67] +#define WCDollar WcMessages[68] + + +#define WCOn WcMessages[69] +#define WCOff WcMessages[70] + + +#define WCMeishi WcMessages[71] +#define WCMyouji WcMessages[72] +#define WCNamae WcMessages[73] +#define WCTimei WcMessages[74] +#define WCSahen WcMessages[75] + + +#define WCKara WcMessages[76] +#define WCF1 WcMessages[77] +#define WCF2 WcMessages[78] +#define WCF3 WcMessages[79] +#define WCF4 WcMessages[80] +#define WCF5 WcMessages[81] +#define WCF6 WcMessages[82] +#define WCF7 WcMessages[83] +#define WCF8 WcMessages[84] +#define WCF9 WcMessages[85] +#define WCF10 WcMessages[86] +#define WCF11 WcMessages[87] +#define WCF12 WcMessages[88] +#define WCF13 WcMessages[89] +#define WCF14 WcMessages[90] +#define WCF15 WcMessages[91] +#define WCF16 WcMessages[92] +#define WCF17 WcMessages[93] +#define WCF18 WcMessages[94] +#define WCF19 WcMessages[95] +#define WCF20 WcMessages[96] +#define WCSelect WcMessages[97] +#define WCKanji WcMessages[98] +#define WCCancel WcMessages[99] +#define WCExecute WcMessages[100] +#define WCUp WcMessages[101] +#define WCDown WcMessages[102] +#define WCRight WcMessages[103] +#define WCLeft WcMessages[104] + +#define WCStart WcMessages[105] +#define WCHenkan WcMessages[106] +#define WCMuhen WcMessages[107] +#define WCKettei WcMessages[108] +#define WCHira WcMessages[109] +#define WCHalpha WcMessages[110] +#define WCZalpha WcMessages[111] +#define WCHkata WcMessages[112] +#define WCZkata WcMessages[113] +#define WCCode WcMessages[114] +#define WCEtc WcMessages[115] +#define WCRightl WcMessages[116] +#define WCLeftl WcMessages[117] +#define WCKaku WcMessages[118] +#define WCSyuku WcMessages[119] +#define WCEdit WcMessages[120] +#define WCToggle WcMessages[121] +#define WCWrapback WcMessages[122] +#define WCWrap WcMessages[123] +#define WCSjrc WcMessages[124] +#define WCBuffer WcMessages[125] +#define WCToroku WcMessages[126] +#define WCSyoukyo WcMessages[127] +#define WCHelp WcMessages[128] +#define WCHaKettei WcMessages[129] +#define WCFlush WcMessages[130] +#define WCDebug WcMessages[131] +#define WCCancell WcMessages[132] +#define WCSaihenkan WcMessages[133] +#define WCIgnore WcMessages[134] +#define WCTop WcMessages[135] +#define WCEnd WcMessages[136] +#define WCReconnect WcMessages[137] +#define WCKill WcMessages[138] + + +#define WCKey WcMessages[139] +#define WCEscape WcMessages[140] +#define WCSjxkey WcMessages[141] +#define WCEtckey WcMessages[142] +#define WCIntr WcMessages[143] +#define WCBskey WcMessages[144] +#define WCDelkey WcMessages[145] +#define WCSetnormal WcMessages[146] +#define WCThroughnext WcMessages[147] +#define WCInitialmode WcMessages[148] +#define WCHelpmode WcMessages[149] +#define WCDefaultcode WcMessages[150] +#define WCMuhenkanmode WcMessages[151] +#define WCMuhenkaninedit WcMessages[152] +#define WCMuhenkantoggle WcMessages[153] +#define WCGuide WcMessages[154] +#define WCForkshell WcMessages[155] +#define WCExecshell WcMessages[156] +#define WCDictionary WcMessages[157] +#define WCUserdic WcMessages[158] +#define WCMaindic WcMessages[159] +#define WCRomaji WcMessages[160] +#define WCBstudy WcMessages[161] +#define WCSilent WcMessages[162] +#define WCFlushafterconversion WcMessages[163] +#define WCRkerrbell WcMessages[164] +#define WCServer WcMessages[165] + +#define WCShiftjis WcMessages[166] +#define WCSjis WcMessages[167] +#define WCEuc WcMessages[168] +#define WCEuc2 WcMessages[169] +#define WCJis WcMessages[170] +#define WCJis2 WcMessages[171] +#define WCKuten WcMessages[172] +#define WCKuten2 WcMessages[173] + +#define WCBuff WcMessages[174] +#define WCUnbuff WcMessages[175] +#define WCDirect WcMessages[176] + +#define WCSj2 WcMessages[177] +#define WCShift WcMessages[178] + +#define WCFunction WcMessages[179] + +#define WCUnbuffer WcMessages[180] +#define WCFuncetc WcMessages[181] + +extern wchar16_t *WcMessages[]; + + + +struct wcvtkey { + wchar16_t *key_word; + wchar16_t key_seq[SEQLEN]; +}; + + +struct functbl { + wchar16_t *keyword; + int (*func)(); +}; + +#endif diff --git a/lib/Makefile.am b/lib/Makefile.am new file mode 100644 index 0000000..e775da0 --- /dev/null +++ b/lib/Makefile.am @@ -0,0 +1,11 @@ +SUBDIRS = \ + sj3compat \ + sj3core \ + sj3lib \ + sj3rkcv + +if SJ3_INTERNAL_LUA +SUBDIRS += lua +endif + + diff --git a/lib/lua/COPYRIGHT b/lib/lua/COPYRIGHT new file mode 100644 index 0000000..a54a16e --- /dev/null +++ b/lib/lua/COPYRIGHT @@ -0,0 +1,34 @@ +Lua License +----------- + +Lua is licensed under the terms of the MIT license reproduced below. +This means that Lua is free software and can be used for both academic +and commercial purposes at absolutely no cost. + +For details and rationale, see http://www.lua.org/license.html . + +=============================================================================== + +Copyright (C) 1994-2007 Lua.org, PUC-Rio. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=============================================================================== + +(end of COPYRIGHT) diff --git a/lib/lua/HISTORY b/lib/lua/HISTORY new file mode 100644 index 0000000..ce0c95b --- /dev/null +++ b/lib/lua/HISTORY @@ -0,0 +1,183 @@ +HISTORY for Lua 5.1 + +* Changes from version 5.0 to 5.1 + ------------------------------- + Language: + + new module system. + + new semantics for control variables of fors. + + new semantics for setn/getn. + + new syntax/semantics for varargs. + + new long strings and comments. + + new `mod' operator (`%') + + new length operator #t + + metatables for all types + API: + + new functions: lua_createtable, lua_get(set)field, lua_push(to)integer. + + user supplies memory allocator (lua_open becomes lua_newstate). + + luaopen_* functions must be called through Lua. + Implementation: + + new configuration scheme via luaconf.h. + + incremental garbage collection. + + better handling of end-of-line in the lexer. + + fully reentrant parser (new Lua function `load') + + better support for 64-bit machines. + + native loadlib support for Mac OS X. + + standard distribution in only one library (lualib.a merged into lua.a) + +* Changes from version 4.0 to 5.0 + ------------------------------- + Language: + + lexical scoping. + + Lua coroutines. + + standard libraries now packaged in tables. + + tags replaced by metatables and tag methods replaced by metamethods, + stored in metatables. + + proper tail calls. + + each function can have its own global table, which can be shared. + + new __newindex metamethod, called when we insert a new key into a table. + + new block comments: --[[ ... ]]. + + new generic for. + + new weak tables. + + new boolean type. + + new syntax "local function". + + (f()) returns the first value returned by f. + + {f()} fills a table with all values returned by f. + + \n ignored in [[\n . + + fixed and-or priorities. + + more general syntax for function definition (e.g. function a.x.y:f()...end). + + more general syntax for function calls (e.g. (print or write)(9)). + + new functions (time/date, tmpfile, unpack, require, load*, etc.). + API: + + chunks are loaded by using lua_load; new luaL_loadfile and luaL_loadbuffer. + + introduced lightweight userdata, a simple "void*" without a metatable. + + new error handling protocol: the core no longer prints error messages; + all errors are reported to the caller on the stack. + + new lua_atpanic for host cleanup. + + new, signal-safe, hook scheme. + Implementation: + + new license: MIT. + + new, faster, register-based virtual machine. + + support for external multithreading and coroutines. + + new and consistent error message format. + + the core no longer needs "stdio.h" for anything (except for a single + use of sprintf to convert numbers to strings). + + lua.c now runs the environment variable LUA_INIT, if present. It can + be "@filename", to run a file, or the chunk itself. + + support for user extensions in lua.c. + sample implementation given for command line editing. + + new dynamic loading library, active by default on several platforms. + + safe garbage-collector metamethods. + + precompiled bytecodes checked for integrity (secure binary dostring). + + strings are fully aligned. + + position capture in string.find. + + read('*l') can read lines with embedded zeros. + +* Changes from version 3.2 to 4.0 + ------------------------------- + Language: + + new "break" and "for" statements (both numerical and for tables). + + uniform treatment of globals: globals are now stored in a Lua table. + + improved error messages. + + no more '$debug': full speed *and* full debug information. + + new read form: read(N) for next N bytes. + + general read patterns now deprecated. + (still available with -DCOMPAT_READPATTERNS.) + + all return values are passed as arguments for the last function + (old semantics still available with -DLUA_COMPAT_ARGRET) + + garbage collection tag methods for tables now deprecated. + + there is now only one tag method for order. + API: + + New API: fully re-entrant, simpler, and more efficient. + + New debug API. + Implementation: + + faster than ever: cleaner virtual machine and new hashing algorithm. + + non-recursive garbage-collector algorithm. + + reduced memory usage for programs with many strings. + + improved treatment for memory allocation errors. + + improved support for 16-bit machines (we hope). + + code now compiles unmodified as both ANSI C and C++. + + numbers in bases other than 10 are converted using strtoul. + + new -f option in Lua to support #! scripts. + + luac can now combine text and binaries. + +* Changes from version 3.1 to 3.2 + ------------------------------- + + redirected all output in Lua's core to _ERRORMESSAGE and _ALERT. + + increased limit on the number of constants and globals per function + (from 2^16 to 2^24). + + debugging info (lua_debug and hooks) moved into lua_state and new API + functions provided to get and set this info. + + new debug lib gives full debugging access within Lua. + + new table functions "foreachi", "sort", "tinsert", "tremove", "getn". + + new io functions "flush", "seek". + +* Changes from version 3.0 to 3.1 + ------------------------------- + + NEW FEATURE: anonymous functions with closures (via "upvalues"). + + new syntax: + - local variables in chunks. + - better scope control with DO block END. + - constructors can now be also written: { record-part; list-part }. + - more general syntax for function calls and lvalues, e.g.: + f(x).y=1 + o:f(x,y):g(z) + f"string" is sugar for f("string") + + strings may now contain arbitrary binary data (e.g., embedded zeros). + + major code re-organization and clean-up; reduced module interdependecies. + + no arbitrary limits on the total number of constants and globals. + + support for multiple global contexts. + + better syntax error messages. + + new traversal functions "foreach" and "foreachvar". + + the default for numbers is now double. + changing it to use floats or longs is easy. + + complete debug information stored in pre-compiled chunks. + + sample interpreter now prompts user when run interactively, and also + handles control-C interruptions gracefully. + +* Changes from version 2.5 to 3.0 + ------------------------------- + + NEW CONCEPT: "tag methods". + Tag methods replace fallbacks as the meta-mechanism for extending the + semantics of Lua. Whereas fallbacks had a global nature, tag methods + work on objects having the same tag (e.g., groups of tables). + Existing code that uses fallbacks should work without change. + + new, general syntax for constructors {[exp] = exp, ... }. + + support for handling variable number of arguments in functions (varargs). + + support for conditional compilation ($if ... $else ... $end). + + cleaner semantics in API simplifies host code. + + better support for writing libraries (auxlib.h). + + better type checking and error messages in the standard library. + + luac can now also undump. + +* Changes from version 2.4 to 2.5 + ------------------------------- + + io and string libraries are now based on pattern matching; + the old libraries are still available for compatibility + + dofile and dostring can now return values (via return statement) + + better support for 16- and 64-bit machines + + expanded documentation, with more examples + +* Changes from version 2.2 to 2.4 + ------------------------------- + + external compiler creates portable binary files that can be loaded faster + + interface for debugging and profiling + + new "getglobal" fallback + + new functions for handling references to Lua objects + + new functions in standard lib + + only one copy of each string is stored + + expanded documentation, with more examples + +* Changes from version 2.1 to 2.2 + ------------------------------- + + functions now may be declared with any "lvalue" as a name + + garbage collection of functions + + support for pipes + +* Changes from version 1.1 to 2.1 + ------------------------------- + + object-oriented support + + fallbacks + + simplified syntax for tables + + many internal improvements + +(end of HISTORY) diff --git a/lib/lua/INSTALL b/lib/lua/INSTALL new file mode 100644 index 0000000..17eb8ae --- /dev/null +++ b/lib/lua/INSTALL @@ -0,0 +1,99 @@ +INSTALL for Lua 5.1 + +* Building Lua + ------------ + Lua is built in the src directory, but the build process can be + controlled from the top-level Makefile. + + Building Lua on Unix systems should be very easy. First do "make" and + see if your platform is listed. If so, just do "make xxx", where xxx + is your platform name. The platforms currently supported are: + aix ansi bsd freebsd generic linux macosx mingw posix solaris + + If your platform is not listed, try the closest one or posix, generic, + ansi, in this order. + + See below for customization instructions and for instructions on how + to build with other Windows compilers. + + If you want to check that Lua has been built correctly, do "make test" + after building Lua. Also, have a look at the example programs in test. + +* Installing Lua + -------------- + Once you have built Lua, you may want to install it in an official + place in your system. In this case, do "make install". The official + place and the way to install files are defined in Makefile. You must + have the right permissions to install files. + + If you want to build and install Lua in one step, do "make xxx install", + where xxx is your platform name. + + If you want to install Lua locally, then do "make local". This will + create directories bin, include, lib, man, and install Lua there as + follows: + + bin: lua luac + include: lua.h luaconf.h lualib.h lauxlib.h lua.hpp + lib: liblua.a + man/man1: lua.1 luac.1 + + These are the only directories you need for development. + + There are man pages for lua and luac, in both nroff and html, and a + reference manual in html in doc, some sample code in test, and some + useful stuff in etc. You don't need these directories for development. + + If you want to install Lua locally, but in some other directory, do + "make install INSTALL_TOP=xxx", where xxx is your chosen directory. + + See below for instructions for Windows and other systems. + +* Customization + ------------- + Three things can be customized by editing a file: + - Where and how to install Lua -- edit Makefile. + - How to build Lua -- edit src/Makefile. + - Lua features -- edit src/luaconf.h. + + You don't actually need to edit the Makefiles because you may set the + relevant variables when invoking make. + + On the other hand, if you need to select some Lua features, you'll need + to edit src/luaconf.h. The edited file will be the one installed, and + it will be used by any Lua clients that you build, to ensure consistency. + + We strongly recommend that you enable dynamic loading. This is done + automatically for all platforms listed above that have this feature + (and also Windows). See src/luaconf.h and also src/Makefile. + +* Building Lua on Windows and other systems + ----------------------------------------- + If you're not using the usual Unix tools, then the instructions for + building Lua depend on the compiler you use. You'll need to create + projects (or whatever your compiler uses) for building the library, + the interpreter, and the compiler, as follows: + + library: lapi.c lcode.c ldebug.c ldo.c ldump.c lfunc.c lgc.c llex.c + lmem.c lobject.c lopcodes.c lparser.c lstate.c lstring.c + ltable.c ltm.c lundump.c lvm.c lzio.c + lauxlib.c lbaselib.c ldblib.c liolib.c lmathlib.c loslib.c + ltablib.c lstrlib.c loadlib.c linit.c + + interpreter: library, lua.c + + compiler: library, luac.c print.c + + If you use Visual Studio .NET, you can use etc/luavs.bat in its + "Command Prompt". + + If all you want is to build the Lua interpreter, you may put all .c files + in a single project, except for luac.c and print.c. Or just use etc/all.c. + + To use Lua as a library in your own programs, you'll need to know how to + create and use libraries with your compiler. + + As mentioned above, you may edit luaconf.h to select some features before + building Lua. + +(end of INSTALL) diff --git a/lib/lua/Makefile b/lib/lua/Makefile new file mode 100644 index 0000000..2bfa2f3 --- /dev/null +++ b/lib/lua/Makefile @@ -0,0 +1,531 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# lib/lua/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +srcdir = . +top_srcdir = ../.. + +pkgdatadir = $(datadir)/sj3 +pkglibdir = $(libdir)/sj3 +pkgincludedir = $(includedir)/sj3 +top_builddir = ../.. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = /usr/bin/install -c +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i386-unknown-openbsd4.2 +host_triplet = i386-unknown-openbsd4.2 +subdir = lib/lua +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + INSTALL +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/config/pkg.m4 \ + $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-exec-recursive install-info-recursive \ + install-recursive installcheck-recursive installdirs-recursive \ + pdf-recursive ps-recursive uninstall-info-recursive \ + uninstall-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /home/braindead/src/sj3/config/missing --run aclocal-1.9 +AMDEP_FALSE = # +AMDEP_TRUE = +AMTAR = ${SHELL} /home/braindead/src/sj3/config/missing --run tar +AR = ar +AS = as +AUTOCONF = ${SHELL} /home/braindead/src/sj3/config/missing --run autoconf +AUTOHEADER = ${SHELL} /home/braindead/src/sj3/config/missing --run autoheader +AUTOMAKE = ${SHELL} /home/braindead/src/sj3/config/missing --run automake-1.9 +AWK = nawk +BUILDABLE_SJ3CLIENT_FALSE = # +BUILDABLE_SJ3CLIENT_TRUE = +BUILDABLE_SJ3DEMO_FALSE = # +BUILDABLE_SJ3DEMO_TRUE = +BUILDABLE_SJ3DICT_FALSE = # +BUILDABLE_SJ3DICT_TRUE = +BUILDABLE_SJ3SERV_FALSE = # +BUILDABLE_SJ3SERV_TRUE = +CC = cc +CCDEPMODE = depmode=gcc3 +CFLAGS = -O2 -g -Wall +CPP = cc -E +CPPFLAGS = +CXX = c++ +CXXCPP = c++ -E +CXXDEPMODE = depmode=gcc3 +CXXFLAGS = -O2 -pipe -Wall +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DLLTOOL = dlltool +ECHO = /bin/echo +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /usr/bin/grep -E +EXEEXT = +F77 = g77 +FFLAGS = -O2 -pipe -Wall +GREP = /usr/bin/grep +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s +LDFLAGS = +LIBM = -lm +LIBOBJS = ${LIBOBJDIR}error$U.o +LIBS = +LIBSJ3CORE_MAJOR_VERSION = 2 +LIBSJ3CORE_MICRO_VERSION = 121 +LIBSJ3CORE_MICRO_VERSION_SUFFIX = +LIBSJ3CORE_MINOR_VERSION = 0 +LIBSJ3CORE_VERSION = 2.0.121 +LIBSJ3CORE_VERSION_EXTRA = +LIBSJ3CORE_VERSION_INFO = 2:121:0 +LIBSJ3CORE_VERSION_NUMBER = 20121 +LIBSJ3LIB_MAJOR_VERSION = 2 +LIBSJ3LIB_MICRO_VERSION = 121 +LIBSJ3LIB_MICRO_VERSION_SUFFIX = +LIBSJ3LIB_MINOR_VERSION = 0 +LIBSJ3LIB_VERSION = 2.0.121 +LIBSJ3LIB_VERSION_EXTRA = +LIBSJ3LIB_VERSION_INFO = 2:121:0 +LIBSJ3LIB_VERSION_NUMBER = 20121 +LIBSJ3RKCV_MAJOR_VERSION = 2 +LIBSJ3RKCV_MICRO_VERSION = 121 +LIBSJ3RKCV_MICRO_VERSION_SUFFIX = +LIBSJ3RKCV_MINOR_VERSION = 0 +LIBSJ3RKCV_VERSION = 2.0.121 +LIBSJ3RKCV_VERSION_EXTRA = +LIBSJ3RKCV_VERSION_INFO = 2:121:0 +LIBSJ3RKCV_VERSION_NUMBER = 20121 +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LN_S = ln -s +LTLIBOBJS = ${LIBOBJDIR}error$U.lo +LUA_CFLAGS = -I/usr/local//include +LUA_LIBS = -L/usr/local//lib -llua -lm +MAKEINFO = ${SHELL} /home/braindead/src/sj3/config/missing --run makeinfo +OBJDUMP = objdump +OBJEXT = o +PACKAGE = sj3 +PACKAGE_BUGREPORT = iwata@quasiquote.org +PACKAGE_NAME = sj3 +PACKAGE_STRING = sj3 2.0.1.21 +PACKAGE_TARNAME = sj3 +PACKAGE_VERSION = 2.0.1.21 +PATH_SEPARATOR = : +PKG_CONFIG = /usr/bin/pkg-config +RANLIB = ranlib +SET_MAKE = +SHELL = /bin/sh +SJ3DICTDIR = /var/spool/sj3 +SJ3GROUP = _sj3 +SJ3OWNER = _sj3 +SJ3SYSCONFDIR = /etc/sj3 +SJ3VARDIR = /var +SJ3_INTERNAL_LUA_FALSE = +SJ3_INTERNAL_LUA_TRUE = # +STRIP = strip +VERSION = 2.0.1.21 +WRAP_LIB = -lwrap +ac_ct_CC = cc +ac_ct_CXX = +ac_ct_F77 = g77 +am__fastdepCC_FALSE = # +am__fastdepCC_TRUE = +am__fastdepCXX_FALSE = # +am__fastdepCXX_TRUE = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = i386-unknown-openbsd4.2 +build_alias = +build_cpu = i386 +build_os = openbsd4.2 +build_vendor = unknown +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE_TARNAME} +dvidir = ${docdir} +exec_prefix = /usr/opt/sj3 +host = i386-unknown-openbsd4.2 +host_alias = +host_cpu = i386 +host_os = openbsd4.2 +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = /home/braindead/src/sj3/config/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = /var +mandir = ${datarootdir}/man +mkdir_p = $(SHELL) $(install_sh) -d +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/opt/sj3 +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +sysconfdir = /etc +target_alias = +SUBDIRS = \ + doc \ + etc \ + src \ + test + +EXTRA_DIST = \ + COPYRIGHT + +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/lua/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu lib/lua/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(mkdir_p) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-libtool \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-recursive + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-info-am + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ + clean clean-generic clean-libtool clean-recursive ctags \ + ctags-recursive distclean distclean-generic distclean-libtool \ + distclean-recursive distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-exec install-exec-am install-info \ + install-info-am install-man install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic maintainer-clean-recursive \ + mostlyclean mostlyclean-generic mostlyclean-libtool \ + mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-info-am + + HISTORY + INSTALL + README +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/lib/lua/Makefile.am b/lib/lua/Makefile.am new file mode 100644 index 0000000..b2e11f1 --- /dev/null +++ b/lib/lua/Makefile.am @@ -0,0 +1,11 @@ +SUBDIRS = \ + doc \ + etc \ + src \ + test + +EXTRA_DIST = \ + COPYRIGHT + HISTORY + INSTALL + README diff --git a/lib/lua/README b/lib/lua/README new file mode 100644 index 0000000..11b4dff --- /dev/null +++ b/lib/lua/README @@ -0,0 +1,37 @@ +README for Lua 5.1 + +See INSTALL for installation instructions. +See HISTORY for a summary of changes since the last released version. + +* What is Lua? + ------------ + Lua is a powerful, light-weight programming language designed for extending + applications. Lua is also frequently used as a general-purpose, stand-alone + language. Lua is free software. + + For complete information, visit Lua's web site at http://www.lua.org/ . + For an executive summary, see http://www.lua.org/about.html . + + Lua has been used in many different projects around the world. + For a short list, see http://www.lua.org/uses.html . + +* Availability + ------------ + Lua is freely available for both academic and commercial purposes. + See COPYRIGHT and http://www.lua.org/license.html for details. + Lua can be downloaded at http://www.lua.org/download.html . + +* Installation + ------------ + Lua is implemented in pure ANSI C, and compiles unmodified in all known + platforms that have an ANSI C compiler. In most Unix-like platforms, simply + do "make" with a suitable target. See INSTALL for detailed instructions. + +* Origin + ------ + Lua is developed at Lua.org, a laboratory of the Department of Computer + Science of PUC-Rio (the Pontifical Catholic University of Rio de Janeiro + in Brazil). + For more information about the authors, see http://www.lua.org/authors.html . + +(end of README) diff --git a/lib/lua/doc/Makefile.am b/lib/lua/doc/Makefile.am new file mode 100644 index 0000000..b340ece --- /dev/null +++ b/lib/lua/doc/Makefile.am @@ -0,0 +1,13 @@ +EXTRA_DIST = \ + amazon.gif \ + contents.html \ + cover.png \ + logo.gif \ + lua.1 \ + lua.css \ + lua.html \ + luac.1 \ + luac.html \ + manual.css \ + manual.html \ + readme.html diff --git a/lib/lua/doc/amazon.gif b/lib/lua/doc/amazon.gif new file mode 100644 index 0000000000000000000000000000000000000000..f2586d5765361bb8a33a72401449f3abdefe4e16 GIT binary patch literal 797 zcmV+&1LFKgNk%w1VOjtj0K^&q@9)h50%r{k3;+NBK0Y<5t#HiDnQw1j_x9wkua=aQ zf8O4{J3ExYz@^dAvgzr__o-L@ehvGQF7LT?@$1I#;Ij3_g2%_+^3u}mmw|9dEECm0Kc!X!@|#@3&?4Fr)=|m57&HqxlCDW&_KZ+1;`8vSj33YC_e@b zLW(B90kQ_n9Ds8N3z4jU4HiAyWz9`JYknO6suY&Mn*c`+`V13=EEIuKH*uwDKrGlz zo{tDTNaHR5yf%>5cyj}g-^zXgiM@QV=g%Gh303A)7B84EpbPvE-6X=O$DmxJ`b(9|4E82-m%Ds!U< zI=HL8TMx@{~>s4%C(a0wK8Wjd@n+|5vxOvSr(vuAh- z5-e0mzlK5u3lKm6pnB`22G3HYpfaDDC`;MbMg*4 b)M@9Pc;4WH3w-wJ=bwNED(Iksh5!INDePJ9 literal 0 HcmV?d00001 diff --git a/lib/lua/doc/contents.html b/lib/lua/doc/contents.html new file mode 100644 index 0000000..01b069f --- /dev/null +++ b/lib/lua/doc/contents.html @@ -0,0 +1,456 @@ + + +Lua 5.1 reference manual - contents + + + + + + +
+

+ +Lua 5.1 Reference Manual +

+ +This is an online version of +
+ + + +Lua 5.1 Reference Manual +
by R. Ierusalimschy, L. H. de Figueiredo, W. Celes +
Lua.org, August 2006 +
ISBN 85-903798-3-3 +
+[Buy from Amazon] +
+
+

+ +Buy a paper copy and +help to support +the Lua project. +

+ +start +· +contents +· +index +· +errata +


+ +Copyright © 2006-2007 Lua.org, PUC-Rio. +Freely available under the terms of the +Lua license. + +

+ +

Contents

+ + +

Index

+ + + + + + + +
+

Lua functions

+_G
+_VERSION
+assert
+collectgarbage
+dofile
+error
+getfenv
+getmetatable
+ipairs
+load
+loadfile
+loadstring
+module
+next
+pairs
+pcall
+print
+rawequal
+rawget
+rawset
+require
+select
+setfenv
+setmetatable
+tonumber
+tostring
+type
+unpack
+xpcall
+ +
+

 

+coroutine.create
+coroutine.resume
+coroutine.running
+coroutine.status
+coroutine.wrap
+coroutine.yield
+debug.debug
+debug.getfenv
+debug.gethook
+debug.getinfo
+debug.getlocal
+debug.getmetatable
+debug.getregistry
+debug.getupvalue
+debug.setfenv
+debug.sethook
+debug.setlocal
+debug.setmetatable
+debug.setupvalue
+debug.traceback
+file:close
+file:flush
+file:lines
+file:read
+file:seek
+file:setvbuf
+file:write
+io.close
+io.flush
+io.input
+io.lines
+io.open
+io.output
+io.popen
+io.read
+io.tmpfile
+io.type
+io.write
+math.abs
+math.acos
+math.asin
+math.atan2
+math.atan
+math.ceil
+math.cosh
+math.cos
+math.deg
+math.exp
+math.floor
+math.fmod
+math.frexp
+math.huge
+math.ldexp
+math.log10
+math.log
+math.max
+math.min
+math.modf
+math.pi
+math.pow
+math.rad
+math.random
+math.randomseed
+math.sinh
+math.sin
+math.sqrt
+math.tanh
+math.tan
+os.clock
+os.date
+os.difftime
+os.execute
+os.exit
+os.getenv
+os.remove
+os.rename
+os.setlocale
+os.time
+os.tmpname
+package.cpath
+package.loaded
+package.loadlib
+package.path
+package.preload
+package.seeall
+string.byte
+string.char
+string.dump
+string.find
+string.format
+string.gmatch
+string.gsub
+string.len
+string.lower
+string.match
+string.rep
+string.reverse
+string.sub
+string.upper
+table.concat
+table.insert
+table.maxn
+table.remove
+table.sort
+ +
+

C API

+lua_Alloc
+lua_CFunction
+lua_Debug
+lua_Hook
+lua_Integer
+lua_Number
+lua_Reader
+lua_State
+lua_Writer
+lua_atpanic
+lua_call
+lua_checkstack
+lua_close
+lua_concat
+lua_cpcall
+lua_createtable
+lua_dump
+lua_equal
+lua_error
+lua_gc
+lua_getallocf
+lua_getfenv
+lua_getfield
+lua_getglobal
+lua_gethook
+lua_gethookcount
+lua_gethookmask
+lua_getinfo
+lua_getlocal
+lua_getmetatable
+lua_getstack
+lua_gettable
+lua_gettop
+lua_getupvalue
+lua_insert
+lua_isboolean
+lua_iscfunction
+lua_isfunction
+lua_islightuserdata
+lua_isnil
+lua_isnumber
+lua_isstring
+lua_istable
+lua_isthread
+lua_isuserdata
+lua_lessthan
+lua_load
+lua_newstate
+lua_newtable
+lua_newthread
+lua_newuserdata
+lua_next
+lua_objlen
+lua_pcall
+lua_pop
+lua_pushboolean
+lua_pushcclosure
+lua_pushcfunction
+lua_pushfstring
+lua_pushinteger
+lua_pushlightuserdata
+lua_pushlstring
+lua_pushnil
+lua_pushnumber
+lua_pushstring
+lua_pushthread
+lua_pushvalue
+lua_pushvfstring
+lua_rawequal
+lua_rawget
+lua_rawgeti
+lua_rawset
+lua_rawseti
+lua_register
+lua_remove
+lua_replace
+lua_resume
+lua_setallocf
+lua_setfenv
+lua_setfield
+lua_setglobal
+lua_sethook
+lua_setlocal
+lua_setmetatable
+lua_settable
+lua_settop
+lua_setupvalue
+lua_status
+lua_toboolean
+lua_tocfunction
+lua_tointeger
+lua_tolstring
+lua_tonumber
+lua_topointer
+lua_tostring
+lua_tothread
+lua_touserdata
+lua_type
+lua_typename
+lua_upvalueindex
+lua_xmove
+lua_yield
+ +
+

auxiliary library

+luaL_Buffer
+luaL_Reg
+luaL_addchar
+luaL_addlstring
+luaL_addsize
+luaL_addstring
+luaL_addvalue
+luaL_argcheck
+luaL_argerror
+luaL_buffinit
+luaL_callmeta
+luaL_checkany
+luaL_checkint
+luaL_checkinteger
+luaL_checklong
+luaL_checklstring
+luaL_checknumber
+luaL_checkoption
+luaL_checkstack
+luaL_checkstring
+luaL_checktype
+luaL_checkudata
+luaL_dofile
+luaL_dostring
+luaL_error
+luaL_getmetafield
+luaL_getmetatable
+luaL_gsub
+luaL_loadbuffer
+luaL_loadfile
+luaL_loadstring
+luaL_newmetatable
+luaL_newstate
+luaL_openlibs
+luaL_optint
+luaL_optinteger
+luaL_optlong
+luaL_optlstring
+luaL_optnumber
+luaL_optstring
+luaL_prepbuffer
+luaL_pushresult
+luaL_ref
+luaL_register
+luaL_typename
+luaL_typerror
+luaL_unref
+luaL_where
+ +
+

+ +


+ +Last update: +Fri Mar 23 08:33:19 BRT 2007 + + + + + diff --git a/lib/lua/doc/cover.png b/lib/lua/doc/cover.png new file mode 100644 index 0000000000000000000000000000000000000000..2dbb198123f03a7250bfa57c8253739962d69afb GIT binary patch literal 3305 zcmVNc=P)V>IGcGYOVIUw=dB=aTYv^*htKxL4xjCf9X{I|EBQ!hu?+M>5oT>TE}0ye97P9R7S8qXycMFZ&6rBQl2xq6d5z1RT?1tMWggH(oGfxZ3MRwMW* zhWcm<0o+gGDNJLnwySJIYqTbnA(cT&JjHAh%b?&;aM%-PVunbF`4oU{acLCOU~~ed z=Xys9YZpo#i8bMPc#43D)u4sMGKqI^_da6LW&~0K*cO4+ z_PRNFEtj+pK65RYy#Eh+iK_)|A>ml%LRW(G?uWEPuP@)V__gB&q{E^1Drx0`;n)|1&{JZ#-e7eMcd1S~0(ChdB8 zS0!Ap-8R#X^0X5R7@pQ0wmH~jKhYj`l%C2tznfmz5?4vXD&s9-{r%L{8o|B1n{hn> zX-7F)1C|g{Fjw^QO3xSEM8WF{nF8))ijLB@AziK0j<-dAU&NHQAw-4j8oelO%2Dg_ z37hiyuBd>qbbcrr0xb~*rLW9q2cyBcq8kgCW9j_Jd}=!9R2g|I=9{KHXtr2}hFHKH zPZ!2Bg|$47mFu;Duqg$YQfQ4vD~-}9t!+atHYg~SbM=?ElxgB&vnLeLny@Jo1@}ra zw-%pO_5&GLRc)GAp8w;^w0pr+)}6{$xN2*=h1(z&s0B5@zOQ2Cj<++EgPm6D*KdLp^Jc$%i(A&wq1mn{*M;Pu$%2I-|s;8_q`68Jd zLJ$dITeas|8_h>+9GB??ksz(jj7@SsNq-j_f;Mf@l8W*L-v0vui)W9N64OhM7aV?n zo{!IxNC9-U@zPPgc8EYtsn)ggZ<}BOc#01{#gH6*gjm!cMXYMFiJ5! z$8SI7^a#mxl?1n2Bwr+veIkV`2fdd@*by0Naq>o!4A;Y!nrTV7gj#l-OAs* zvT_zQj8DKsyvuDrVn7=m8 z&;O0T{VN_DroW5Nu5jxvQZU%ZlLv@3)#xH@icfQd{R930nH<0P?=qQ<5s3ufc;l~s z^rLTdbhJn*9LK$Q@z$Gf{__VPoYQ~*AN<{S=xOJbXHXg;Sjdpd5Nq1FU!ZP(bkV*K z5BX<_uE(!VaN&B59T#f)0@ixmc3_}Kkful!<-+AYa=bk&rr9RA^GG2#cH|o2Jo3*;M^C0Z#I`l`S@(jjq^e|^t7&J*rAXei$y>%zrcxe zzKVokW{ylvDyoN%5F8rxOC(&6ljrfOA4aT&iHZA4RiB-iOg@n)*W;YNOgdZoU&C~Q zYvZ-d>YDjzn4Be*DQQDPBE@KZ$^kz7@cjMzsnv(*TI*A%M(*BC03b*t8J+ZR_jR(6 zttGy#T|b&jH^^6g-e(O?=xBjqSdb8D)Kd$tjjQa}6Izo*l=AOHBZzP@%TWj?-Z2yYmt`$ryp=SGWT>kg8zlLgEEs(4iVm;4Q>56I~!I5E_!W;Hjvwox?Uqoq) z@&EyI&Dg6UFbzN8)tb&2Y&=@c`Y|NW9`Pe8A!)AFN8A)Nk)Urp8ZM1e+_>zsWuw3Gwz#h*<|ZTYWyBV&rD^+OOrPXFnaE_T4H3gMI7NJvIPCeSU~lbZRURtjFJ3 zOtR_n9@p1NEV@-WX*<9pdwg@TE&lANPj7A1!>6YW%k<@shB-1^pOm#iGtfhChrf42 zsVsLR)XYafILOn7Dzbrs7oH##T<@vPK}ueH!cSN`F26lfqvKnrf9<;5xmTWYf?eG_ zeX!9}PBYlclLvflOw3@&T9Q?4=KSZAi+(6#NWSqr9j%R{qzT%*cARj9+M7Z={YZ`Z zkUIHTCXWs=UG`IipsSVd{5f`@zJAseNAl`14({FT2Xbx{9&lM)RVZ}_{lVes;w@a^N+fz49V zNXZM2^W9f`Rcp=JFX(8gt1f+0`B4G4?=d#PKzC_k7?Qz0y4x6=B$uz#sndjmeCtJC zJ5DgL%uYf!d*Z&jYQX0B2)f!R6lrVmT}CPC?c~T_GI?g_YxBM}hQWc|eD9k)^C*Fe z?D1?8AQoMD2D71Pn?G+{G@(R_)@FY(T|5yQo#5loxID%}wj5$qei{Hm5DK!lj~Ach z@X#`~XwB_uPF>*Z&(R#ISEvU#FA)Nz`TQED$+JgFvs?%)ll=n>_cNbnY=Y|(+?{11 zL&3o^iG=8GW2ldzK00F6PjxbRUOh&1<7lUfP!D<@?6{2FWT>x{XIvqi2CY#FPoWf2 zVo0P!tZu2v=D9u1zJZdTwyAHS9=M*uGC8uBNRUK|GgrvwmU;C8q`)+=EkZW7g=ru~ z6RQpkqkiq>Ru+?vAkXbSVK7dSLn?*gy_ zjjN{!SUh^+iEFRr=;K9At8qQ=c=~M}HT#)sT^Fg(`nT>?C{y%_^R>wBb&6$ nh%8`n`v3p{2XskIMF-Xh6%#iZwFs;u00000NkvXXu0mjfd@Wp4 literal 0 HcmV?d00001 diff --git a/lib/lua/doc/logo.gif b/lib/lua/doc/logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..2f5e4ac2e742fbb7675e739879211553758aea9c GIT binary patch literal 4232 zcmeH``9G8i;K!fm@ywWE@XWZzZ5SF?A>^uN#>^O6HI%DVL*tw8h1>$H%uPC0$QQ=txe!o}PX)Ev+jn>*nFZ-TC=<^76WcLZL(=DJm)| zEiIKwrInSHXU?3duCC_u@5try#>U2`rlw1mF15F}U%!66tE;QKyIUmcDJ<+QF77*W zFJd#&)VAl)kJ6K zi<>tmZ{3>g>+2gB7#JQNe(>OdLh;A=`1q42PbMZNCMPF*dXxhLZw3aYhlZwyhu@Bj z%#4n{d-Q1b$&i4QMce4L#8^!oMdw{PDnm4D66&3*dxX=-YIX6DQL_g`jbzkd4k zZDCoLf=%jL&vIeE zO=XcZ9fxt`f}-DQ^%H*PHMUs(JN%UWkI|Y8h9#6~I$Cw@{RqzO4&P-x;jHCPJ6Ks2 zoU%foi)nXd_sdkiuJa@@5J4RrreKfWSnz5>eMa5yTP=)16uu)TIdx~Fhho))6jZl) z($*i>QrIX4u}u3>m{WSn_ehkUGQ& zs})aUlTH1Cj1g3ZE3=MPXsSniEwJ{e6C3N#HjD=B4`8rWIsz!a7ecYpec?WuH+y?Wsm18^$cS4WmHhH3_=r zh*ILlm*X1dB^E5($KVl&zT524%l}vpHg%;Y+LezV_&TAJCmH`idhuj-n$4FZ)UE|jXLayXa-&O3Q z?Iyo!x*$5hD_HfFnDfGYj-RD|eIb7I?%>Y_kf%}Nbd`BXb4l1(Pc+}zoUR|9%_!7f zum2T;wbx&pohtI+&@~wm3nH9xLbOYkg*`phY~TK5iC#3tZNXo9s`cahx+8j2)rh5C zQgZh6D7Ekgib|hpdhxYf{r!PTJc z!vsYG@{hA}l5kL)g)0N_)(nC<*L0qdUi*3fD5<0sn58>zklX@6Tyv3*X^}m=Cqc40 zQ6GfjG@kd1mFIm`qaubWunm_?P>WUZ`9|f_z%gGHi{n|uu(N8!L=aw5(qAcDj$-QK zu;D#j6e42OXTQD>)i zlvM$LX`$n9EEjxM$_QDF&a z7cme_rat}aXmiN&7`6Q98}dh4Z@8L_uAb#nK&GQiZOOUnA9kAEVb-csuN1AWL=sXt z{z9GCN%%l0N9QvJM;tl1nf?rrhT{*sE%4WqR?{0~aIrfCcCPxf4eh_*jjQ=`$p53Y z@_|Rsx2i}|3dNFetMQQ5y8agTK-E0D&7;@3-LUxfvZ7 z7~!p@&mFe^oca2^F|CBt+4Ly?^ViUVSAhAH>JH1GN{^TQb3QnM*x0ZiZgDyNI@_c3 z@{}(WH4*e3T~}n_^0}da4ElIxAf9B!IaL7z9X0Icvj@cIkE*~W--17&WN`Ea5)Gn> z#gpfRb#44;jVTOS{FuaZgd(-ZD848=fQzgST2MxR>wSLc1P=2HDvByz$B$IsNCC6L zCM?nK*OHj6JA9gz4|b<~2%RqelN^1Y)jIqnRs!mDKV^BQTfo@hOtz7*Ug}Ee^cbsj zNNlumRgAmt`1$b5MO;&X#5-EP<}AaY;52ihIpem&MTea$?3!DrwbYa?V`NjEfWF3z zUq5JY8Ch;L{kx&J<1K&Fe_Vn;8gk{%c;n?nA2(%(f%DCRHko3uT~VI7RE^JWEqaCq z)i|%nfj(*4|V*XhY3W%M# z*yn6SN4eUOHFxAD7B&9E_PO`G5bqgs^@J{9bk>&;PlUAiqo`j3rjQDgD!}mqLUtb` zCB}ZD@m@s#pf7bV4jreOC*JVfHZ|hyHkX!rauVdd_I9FL45d{gWH!DNYu;i(|8wVx z!)eLY6YXxZ2{Coae0xuTnxo1ACb5wtED?VJAz&@114$Ao6uG9YSy*!K;m5_mj=0^j zw%?b%AOs}ql@$TGC-!^^*_#RT5+y_kTzQG9?LPPZNAtt6cJ%d2$q(I)ws21*?xF%p zN+NeGnWRQ<5w70Rc(bl|S0Xr&5@WrmdurS|IgPB|EyuZO#=tf!35)G!HJ`E1jh^lH zTBu~rL#DhQO*XAWtBt}JHH$lc>3%r0yD|maW_(W=B_J+y164F>O4dO|@&@N3Z3p=B zmVl{|^Z&#atHY|9n&la)SBo}=3AFIF=_~LDJk6MTlA73CXtX+4bnn+c!}N}IPa5pp zwyqbqIkN|I3j_3vD6$zlu{Ps(N-J|*qzEt<$5Soh;s^AuKv_ z-Tz+O1_~6*9CJh4r}`}mbUtjbf#fX58RIIkP6&@*y9kI|5fK*_eZ%jv3U$5*x<>D_ za2M(TV8?XY+9xy>0En#Te<6X4$0&dbyd(go$~eq4u(u)EA2msyF<5ssLZ zDP|I}=~Bi_q)whWv=Ri~L1TYaNrR;5cMB@s78HF1{w&r(6GJ;_2@bD?#1p&P4n_?n0#9Vx~$qjMX=Lk?*!@aKo8m&$iPO7S{g3sFUwr`*<53(68xx7?z`2xf# zGSicy_zI(PJ|%qc2VxT+6bOE--a{k&aq7$<<= zFt)C<@|TPs`+eycPGoGL1Wn9|Ed&a2JyAmjnkm3DQBECX&`bt~odH9cUPq4M{#$-q?G3!)qO-it*&YHw+j-O* zYy78V*`4Q=kQ@^Yz*b6Tal4(Me7BGeS^;phWAW8+L^5A(=D)t?k!rLIwVAKtq=f7h z&^n&VX1-T$ScvN~639QLZ^d@niMaS{C-Q)8oHHBhwD*r~-1Ze#Q)GFOFptW32a-uF z;M@ux%i%a25NwIgXt*=GHX$3~aZfwovGL!}sf?j9TsVo^cn(%&a<--0mIXYqGe>c PWz_J}_#7St0k8iB@FZjZ literal 0 HcmV?d00001 diff --git a/lib/lua/doc/lua.1 b/lib/lua/doc/lua.1 new file mode 100644 index 0000000..24809cc --- /dev/null +++ b/lib/lua/doc/lua.1 @@ -0,0 +1,163 @@ +.\" $Id: lua.man,v 1.11 2006/01/06 16:03:34 lhf Exp $ +.TH LUA 1 "$Date: 2006/01/06 16:03:34 $" +.SH NAME +lua \- Lua interpreter +.SH SYNOPSIS +.B lua +[ +.I options +] +[ +.I script +[ +.I args +] +] +.SH DESCRIPTION +.B lua +is the stand-alone Lua interpreter. +It loads and executes Lua programs, +either in textual source form or +in precompiled binary form. +(Precompiled binaries are output by +.BR luac , +the Lua compiler.) +.B lua +can be used as a batch interpreter and also interactively. +.LP +The given +.I options +(see below) +are executed and then +the Lua program in file +.I script +is loaded and executed. +The given +.I args +are available to +.I script +as strings in a global table named +.BR arg . +If these arguments contain spaces or other characters special to the shell, +then they should be quoted +(but note that the quotes will be removed by the shell). +The arguments in +.B arg +start at 0, +which contains the string +.RI ' script '. +The index of the last argument is stored in +.BR arg.n . +The arguments given in the command line before +.IR script , +including the name of the interpreter, +are available in negative indices in +.BR arg . +.LP +At the very start, +before even handling the command line, +.B lua +executes the contents of the environment variable +.BR LUA_INIT , +if it is defined. +If the value of +.B LUA_INIT +is of the form +.RI '@ filename ', +then +.I filename +is executed. +Otherwise, the string is assumed to be a Lua statement and is executed. +.LP +Options start with +.B '\-' +and are described below. +You can use +.B "'\--'" +to signal the end of options. +.LP +If no arguments are given, +then +.B "\-v \-i" +is assumed when the standard input is a terminal; +otherwise, +.B "\-" +is assumed. +.LP +In interactive mode, +.B lua +prompts the user, +reads lines from the standard input, +and executes them as they are read. +If a line does not contain a complete statement, +then a secondary prompt is displayed and +lines are read until a complete statement is formed or +a syntax error is found. +So, one way to interrupt the reading of an incomplete statement is +to force a syntax error: +adding a +.B ';' +in the middle of a statement is a sure way of forcing a syntax error +(except inside multiline strings and comments; these must be closed explicitly). +If a line starts with +.BR '=' , +then +.B lua +displays the values of all the expressions in the remainder of the +line. The expressions must be separated by commas. +The primary prompt is the value of the global variable +.BR _PROMPT , +if this value is a string; +otherwise, the default prompt is used. +Similarly, the secondary prompt is the value of the global variable +.BR _PROMPT2 . +So, +to change the prompts, +set the corresponding variable to a string of your choice. +You can do that after calling the interpreter +or on the command line +(but in this case you have to be careful with quotes +if the prompt string contains a space; otherwise you may confuse the shell.) +The default prompts are "> " and ">> ". +.SH OPTIONS +.TP +.B \- +load and execute the standard input as a file, +that is, +not interactively, +even when the standard input is a terminal. +.TP +.BI \-e " stat" +execute statement +.IR stat . +You need to quote +.I stat +if it contains spaces, quotes, +or other characters special to the shell. +.TP +.B \-i +enter interactive mode after +.I script +is executed. +.TP +.BI \-l " name" +call +.BI require(' name ') +before executing +.IR script . +Typically used to load libraries. +.TP +.B \-v +show version information. +.SH "SEE ALSO" +.BR luac (1) +.br +http://www.lua.org/ +.SH DIAGNOSTICS +Error messages should be self explanatory. +.SH AUTHORS +R. Ierusalimschy, +L. H. de Figueiredo, +and +W. Celes +.\" EOF diff --git a/lib/lua/doc/lua.css b/lib/lua/doc/lua.css new file mode 100644 index 0000000..039cf11 --- /dev/null +++ b/lib/lua/doc/lua.css @@ -0,0 +1,41 @@ +body { + color: #000000 ; + background-color: #FFFFFF ; + font-family: sans-serif ; + text-align: justify ; + margin-right: 20px ; + margin-left: 20px ; +} + +h1, h2, h3, h4 { + font-weight: normal ; + font-style: italic ; +} + +a:link { + color: #000080 ; + background-color: inherit ; + text-decoration: none ; +} + +a:visited { + background-color: inherit ; + text-decoration: none ; +} + +a:link:hover, a:visited:hover { + color: #000080 ; + background-color: #E0E0FF ; +} + +a:link:active, a:visited:active { + color: #FF0000 ; +} + +hr { + border: 0 ; + height: 1px ; + color: #a0a0a0 ; + background-color: #a0a0a0 ; +} + diff --git a/lib/lua/doc/lua.html b/lib/lua/doc/lua.html new file mode 100644 index 0000000..1d435ab --- /dev/null +++ b/lib/lua/doc/lua.html @@ -0,0 +1,172 @@ + + + +LUA man page + + + + + +

NAME

+lua - Lua interpreter +

SYNOPSIS

+lua +[ +options +] +[ +script +[ +args +] +] +

DESCRIPTION

+lua +is the stand-alone Lua interpreter. +It loads and executes Lua programs, +either in textual source form or +in precompiled binary form. +(Precompiled binaries are output by +luac, +the Lua compiler.) +lua +can be used as a batch interpreter and also interactively. +

+The given +options +(see below) +are executed and then +the Lua program in file +script +is loaded and executed. +The given +args +are available to +script +as strings in a global table named +arg. +If these arguments contain spaces or other characters special to the shell, +then they should be quoted +(but note that the quotes will be removed by the shell). +The arguments in +arg +start at 0, +which contains the string +'script'. +The index of the last argument is stored in +arg.n. +The arguments given in the command line before +script, +including the name of the interpreter, +are available in negative indices in +arg. +

+At the very start, +before even handling the command line, +lua +executes the contents of the environment variable +LUA_INIT, +if it is defined. +If the value of +LUA_INIT +is of the form +'@filename', +then +filename +is executed. +Otherwise, the string is assumed to be a Lua statement and is executed. +

+Options start with +'-' +and are described below. +You can use +'--' +to signal the end of options. +

+If no arguments are given, +then +"-v -i" +is assumed when the standard input is a terminal; +otherwise, +"-" +is assumed. +

+In interactive mode, +lua +prompts the user, +reads lines from the standard input, +and executes them as they are read. +If a line does not contain a complete statement, +then a secondary prompt is displayed and +lines are read until a complete statement is formed or +a syntax error is found. +So, one way to interrupt the reading of an incomplete statement is +to force a syntax error: +adding a +';' +in the middle of a statement is a sure way of forcing a syntax error +(except inside multiline strings and comments; these must be closed explicitly). +If a line starts with +'=', +then +lua +displays the values of all the expressions in the remainder of the +line. The expressions must be separated by commas. +The primary prompt is the value of the global variable +_PROMPT, +if this value is a string; +otherwise, the default prompt is used. +Similarly, the secondary prompt is the value of the global variable +_PROMPT2. +So, +to change the prompts, +set the corresponding variable to a string of your choice. +You can do that after calling the interpreter +or on the command line +(but in this case you have to be careful with quotes +if the prompt string contains a space; otherwise you may confuse the shell.) +The default prompts are "> " and ">> ". +

OPTIONS

+

+- +load and execute the standard input as a file, +that is, +not interactively, +even when the standard input is a terminal. +

+-e stat +execute statement +stat. +You need to quote +stat +if it contains spaces, quotes, +or other characters special to the shell. +

+-i +enter interactive mode after +script +is executed. +

+-l name +call +require('name') +before executing +script. +Typically used to load libraries. +

+-v +show version information. +

SEE ALSO

+luac(1) +
+http://www.lua.org/ +

DIAGNOSTICS

+Error messages should be self explanatory. +

AUTHORS

+R. Ierusalimschy, +L. H. de Figueiredo, +and +W. Celes + + + diff --git a/lib/lua/doc/luac.1 b/lib/lua/doc/luac.1 new file mode 100644 index 0000000..d814678 --- /dev/null +++ b/lib/lua/doc/luac.1 @@ -0,0 +1,136 @@ +.\" $Id: luac.man,v 1.28 2006/01/06 16:03:34 lhf Exp $ +.TH LUAC 1 "$Date: 2006/01/06 16:03:34 $" +.SH NAME +luac \- Lua compiler +.SH SYNOPSIS +.B luac +[ +.I options +] [ +.I filenames +] +.SH DESCRIPTION +.B luac +is the Lua compiler. +It translates programs written in the Lua programming language +into binary files that can be later loaded and executed. +.LP +The main advantages of precompiling chunks are: +faster loading, +protecting source code from accidental user changes, +and +off-line syntax checking. +.LP +Pre-compiling does not imply faster execution +because in Lua chunks are always compiled into bytecodes before being executed. +.B luac +simply allows those bytecodes to be saved in a file for later execution. +.LP +Pre-compiled chunks are not necessarily smaller than the corresponding source. +The main goal in pre-compiling is faster loading. +.LP +The binary files created by +.B luac +are portable only among architectures with the same word size and byte order. +.LP +.B luac +produces a single output file containing the bytecodes +for all source files given. +By default, +the output file is named +.BR luac.out , +but you can change this with the +.B \-o +option. +.LP +In the command line, +you can mix +text files containing Lua source and +binary files containing precompiled chunks. +This is useful to combine several precompiled chunks, +even from different (but compatible) platforms, +into a single precompiled chunk. +.LP +You can use +.B "'\-'" +to indicate the standard input as a source file +and +.B "'\--'" +to signal the end of options +(that is, +all remaining arguments will be treated as files even if they start with +.BR "'\-'" ). +.LP +The internal format of the binary files produced by +.B luac +is likely to change when a new version of Lua is released. +So, +save the source files of all Lua programs that you precompile. +.LP +.SH OPTIONS +Options must be separate. +.TP +.B \-l +produce a listing of the compiled bytecode for Lua's virtual machine. +Listing bytecodes is useful to learn about Lua's virtual machine. +If no files are given, then +.B luac +loads +.B luac.out +and lists its contents. +.TP +.BI \-o " file" +output to +.IR file , +instead of the default +.BR luac.out . +(You can use +.B "'\-'" +for standard output, +but not on platforms that open standard output in text mode.) +The output file may be a source file because +all files are loaded before the output file is written. +Be careful not to overwrite precious files. +.TP +.B \-p +load files but do not generate any output file. +Used mainly for syntax checking and for testing precompiled chunks: +corrupted files will probably generate errors when loaded. +Lua always performs a thorough integrity test on precompiled chunks. +Bytecode that passes this test is completely safe, +in the sense that it will not break the interpreter. +However, +there is no guarantee that such code does anything sensible. +(None can be given, because the halting problem is unsolvable.) +If no files are given, then +.B luac +loads +.B luac.out +and tests its contents. +No messages are displayed if the file passes the integrity test. +.TP +.B \-s +strip debug information before writing the output file. +This saves some space in very large chunks, +but if errors occur when running a stripped chunk, +then the error messages may not contain the full information they usually do. +For instance, +line numbers and names of local variables are lost. +.TP +.B \-v +show version information. +.SH FILES +.TP 15 +.B luac.out +default output file +.SH "SEE ALSO" +.BR lua (1) +.br +http://www.lua.org/ +.SH DIAGNOSTICS +Error messages should be self explanatory. +.SH AUTHORS +L. H. de Figueiredo, +R. Ierusalimschy and +W. Celes +.\" EOF diff --git a/lib/lua/doc/luac.html b/lib/lua/doc/luac.html new file mode 100644 index 0000000..179ffe8 --- /dev/null +++ b/lib/lua/doc/luac.html @@ -0,0 +1,145 @@ + + + +LUAC man page + + + + + +

NAME

+luac - Lua compiler +

SYNOPSIS

+luac +[ +options +] [ +filenames +] +

DESCRIPTION

+luac +is the Lua compiler. +It translates programs written in the Lua programming language +into binary files that can be later loaded and executed. +

+The main advantages of precompiling chunks are: +faster loading, +protecting source code from accidental user changes, +and +off-line syntax checking. +

+Precompiling does not imply faster execution +because in Lua chunks are always compiled into bytecodes before being executed. +luac +simply allows those bytecodes to be saved in a file for later execution. +

+Precompiled chunks are not necessarily smaller than the corresponding source. +The main goal in precompiling is faster loading. +

+The binary files created by +luac +are portable only among architectures with the same word size and byte order. +

+luac +produces a single output file containing the bytecodes +for all source files given. +By default, +the output file is named +luac.out, +but you can change this with the +-o +option. +

+In the command line, +you can mix +text files containing Lua source and +binary files containing precompiled chunks. +This is useful because several precompiled chunks, +even from different (but compatible) platforms, +can be combined into a single precompiled chunk. +

+You can use +'-' +to indicate the standard input as a source file +and +'--' +to signal the end of options +(that is, +all remaining arguments will be treated as files even if they start with +'-'). +

+The internal format of the binary files produced by +luac +is likely to change when a new version of Lua is released. +So, +save the source files of all Lua programs that you precompile. +

+

OPTIONS

+Options must be separate. +

+-l +produce a listing of the compiled bytecode for Lua's virtual machine. +Listing bytecodes is useful to learn about Lua's virtual machine. +If no files are given, then +luac +loads +luac.out +and lists its contents. +

+-o file +output to +file, +instead of the default +luac.out. +(You can use +'-' +for standard output, +but not on platforms that open standard output in text mode.) +The output file may be a source file because +all files are loaded before the output file is written. +Be careful not to overwrite precious files. +

+-p +load files but do not generate any output file. +Used mainly for syntax checking and for testing precompiled chunks: +corrupted files will probably generate errors when loaded. +Lua always performs a thorough integrity test on precompiled chunks. +Bytecode that passes this test is completely safe, +in the sense that it will not break the interpreter. +However, +there is no guarantee that such code does anything sensible. +(None can be given, because the halting problem is unsolvable.) +If no files are given, then +luac +loads +luac.out +and tests its contents. +No messages are displayed if the file passes the integrity test. +

+-s +strip debug information before writing the output file. +This saves some space in very large chunks, +but if errors occur when running a stripped chunk, +then the error messages may not contain the full information they usually do. +For instance, +line numbers and names of local variables are lost. +

+-v +show version information. +

FILES

+

+luac.out +default output file +

SEE ALSO

+lua(1) +
+http://www.lua.org/ +

DIAGNOSTICS

+Error messages should be self explanatory. +

AUTHORS

+L. H. de Figueiredo, +R. Ierusalimschy and +W. Celes + + + diff --git a/lib/lua/doc/manual.css b/lib/lua/doc/manual.css new file mode 100644 index 0000000..93f1ab2 --- /dev/null +++ b/lib/lua/doc/manual.css @@ -0,0 +1,7 @@ +h3 code { + font-family: inherit ; +} + +pre { + font-size: 105% ; +} diff --git a/lib/lua/doc/manual.html b/lib/lua/doc/manual.html new file mode 100644 index 0000000..6b137ff --- /dev/null +++ b/lib/lua/doc/manual.html @@ -0,0 +1,8521 @@ + + + + +Lua 5.1 Reference Manual + + + + + + +
+

+ +Lua 5.1 Reference Manual +

+ +by Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes +

+ +Copyright © 2006-2007 Lua.org, PUC-Rio. +Freely available under the terms of the +Lua license. + +


+

+ +contents +· +index + + +

+ + + + + +

1 - Introduction

+ +

+Lua is an extension programming language designed to support +general procedural programming with data description +facilities. +It also offers good support for object-oriented programming, +functional programming, and data-driven programming. +Lua is intended to be used as a powerful, light-weight +scripting language for any program that needs one. +Lua is implemented as a library, written in clean C +(that is, in the common subset of ANSI C and C++). + + +

+Being an extension language, Lua has no notion of a "main" program: +it only works embedded in a host client, +called the embedding program or simply the host. +This host program can invoke functions to execute a piece of Lua code, +can write and read Lua variables, +and can register C functions to be called by Lua code. +Through the use of C functions, Lua can be augmented to cope with +a wide range of different domains, +thus creating customized programming languages sharing a syntactical framework. +The Lua distribution includes a sample host program called lua, +which uses the Lua library to offer a complete, stand-alone Lua interpreter. + + +

+Lua is free software, +and is provided as usual with no guarantees, +as stated in its license. +The implementation described in this manual is available +at Lua's official web site, www.lua.org. + + +

+Like any other reference manual, +this document is dry in places. +For a discussion of the decisions behind the design of Lua, +see the technical papers available at Lua's web site. +For a detailed introduction to programming in Lua, +see Roberto's book, Programming in Lua (Second Edition). + + + +

2 - The Language

+ +

+This section describes the lexis, the syntax, and the semantics of Lua. +In other words, +this section describes +which tokens are valid, +how they can be combined, +and what their combinations mean. + + +

+The language constructs will be explained using the usual extended BNF notation, +in which +{a} means 0 or more a's, and +[a] means an optional a. +Non-terminals are shown like non-terminal, +keywords are shown like kword, +and other terminal symbols are shown like `=´. +The complete syntax of Lua can be found at the end of this manual. + + + +

2.1 - Lexical Conventions

+ +

+Names +(also called identifiers) +in Lua can be any string of letters, +digits, and underscores, +not beginning with a digit. +This coincides with the definition of names in most languages. +(The definition of letter depends on the current locale: +any character considered alphabetic by the current locale +can be used in an identifier.) +Identifiers are used to name variables and table fields. + + +

+The following keywords are reserved +and cannot be used as names: + + +

+     and       break     do        else      elseif
+     end       false     for       function  if
+     in        local     nil       not       or
+     repeat    return    then      true      until     while
+
+ +

+Lua is a case-sensitive language: +and is a reserved word, but And and AND +are two different, valid names. +As a convention, names starting with an underscore followed by +uppercase letters (such as _VERSION) +are reserved for internal global variables used by Lua. + + +

+The following strings denote other tokens: + +

+     +     -     *     /     %     ^     #
+     ==    ~=    <=    >=    <     >     =
+     (     )     {     }     [     ]
+     ;     :     ,     .     ..    ...
+
+ +

+Literal strings +can be delimited by matching single or double quotes, +and can contain the following C-like escape sequences: +'\a' (bell), +'\b' (backspace), +'\f' (form feed), +'\n' (newline), +'\r' (carriage return), +'\t' (horizontal tab), +'\v' (vertical tab), +'\\' (backslash), +'\"' (quotation mark [double quote]), +and '\'' (apostrophe [single quote]). +Moreover, a backslash followed by a real newline +results in a newline in the string. +A character in a string may also be specified by its numerical value +using the escape sequence \ddd, +where ddd is a sequence of up to three decimal digits. +(Note that if a numerical escape is to be followed by a digit, +it must be expressed using exactly three digits.) +Strings in Lua may contain any 8-bit value, including embedded zeros, +which can be specified as '\0'. + + +

+To put a double (single) quote, a newline, a backslash, +or an embedded zero +inside a literal string enclosed by double (single) quotes +you must use an escape sequence. +Any other character may be directly inserted into the literal. +(Some control characters may cause problems for the file system, +but Lua has no problem with them.) + + +

+Literal strings can also be defined using a long format +enclosed by long brackets. +We define an opening long bracket of level n as an opening +square bracket followed by n equal signs followed by another +opening square bracket. +So, an opening long bracket of level 0 is written as [[, +an opening long bracket of level 1 is written as [=[, +and so on. +A closing long bracket is defined similarly; +for instance, a closing long bracket of level 4 is written as ]====]. +A long string starts with an opening long bracket of any level and +ends at the first closing long bracket of the same level. +Literals in this bracketed form may run for several lines, +do not interpret any escape sequences, +and ignore long brackets of any other level. +They may contain anything except a closing bracket of the proper level. + + +

+For convenience, +when the opening long bracket is immediately followed by a newline, +the newline is not included in the string. +As an example, in a system using ASCII +(in which 'a' is coded as 97, +newline is coded as 10, and '1' is coded as 49), +the five literals below denote the same string: + +

+     a = 'alo\n123"'
+     a = "alo\n123\""
+     a = '\97lo\10\04923"'
+     a = [[alo
+     123"]]
+     a = [==[
+     alo
+     123"]==]
+
+ +

+A numerical constant may be written with an optional decimal part +and an optional decimal exponent. +Lua also accepts integer hexadecimal constants, +by prefixing them with 0x. +Examples of valid numerical constants are + +

+     3   3.0   3.1416   314.16e-2   0.31416E1   0xff   0x56
+
+ +

+A comment starts with a double hyphen (--) +anywhere outside a string. +If the text immediately after -- is not an opening long bracket, +the comment is a short comment, +which runs until the end of the line. +Otherwise, it is a long comment, +which runs until the corresponding closing long bracket. +Long comments are frequently used to disable code temporarily. + + + + + +

2.2 - Values and Types

+ +

+Lua is a dynamically typed language. +This means that +variables do not have types; only values do. +There are no type definitions in the language. +All values carry their own type. + + +

+All values in Lua are first-class values. +This means that all values can be stored in variables, +passed as arguments to other functions, and returned as results. + + +

+There are eight basic types in Lua: +nil, boolean, number, +string, function, userdata, +thread, and table. +Nil is the type of the value nil, +whose main property is to be different from any other value; +it usually represents the absence of a useful value. +Boolean is the type of the values false and true. +Both nil and false make a condition false; +any other value makes it true. +Number represents real (double-precision floating-point) numbers. +(It is easy to build Lua interpreters that use other +internal representations for numbers, +such as single-precision float or long integers; +see file luaconf.h.) +String represents arrays of characters. + +Lua is 8-bit clean: +strings may contain any 8-bit character, +including embedded zeros ('\0') (see §2.1). + + +

+Lua can call (and manipulate) functions written in Lua and +functions written in C +(see §2.5.8). + + +

+The type userdata is provided to allow arbitrary C data to +be stored in Lua variables. +This type corresponds to a block of raw memory +and has no pre-defined operations in Lua, +except assignment and identity test. +However, by using metatables, +the programmer can define operations for userdata values +(see §2.8). +Userdata values cannot be created or modified in Lua, +only through the C API. +This guarantees the integrity of data owned by the host program. + + +

+The type thread represents independent threads of execution +and it is used to implement coroutines (see §2.11). +Do not confuse Lua threads with operating-system threads. +Lua supports coroutines on all systems, +even those that do not support threads. + + +

+The type table implements associative arrays, +that is, arrays that can be indexed not only with numbers, +but with any value (except nil). +Tables can be heterogeneous; +that is, they can contain values of all types (except nil). +Tables are the sole data structuring mechanism in Lua; +they may be used to represent ordinary arrays, +symbol tables, sets, records, graphs, trees, etc. +To represent records, Lua uses the field name as an index. +The language supports this representation by +providing a.name as syntactic sugar for a["name"]. +There are several convenient ways to create tables in Lua +(see §2.5.7). + + +

+Like indices, +the value of a table field can be of any type (except nil). +In particular, +because functions are first-class values, +table fields may contain functions. +Thus tables may also carry methods (see §2.5.9). + + +

+Tables, functions, threads, and (full) userdata values are objects: +variables do not actually contain these values, +only references to them. +Assignment, parameter passing, and function returns +always manipulate references to such values; +these operations do not imply any kind of copy. + + +

+The library function type returns a string describing the type +of a given value. + + + +

2.2.1 - Coercion

+ +

+Lua provides automatic conversion between +string and number values at run time. +Any arithmetic operation applied to a string tries to convert +this string to a number, following the usual conversion rules. +Conversely, whenever a number is used where a string is expected, +the number is converted to a string, in a reasonable format. +For complete control over how numbers are converted to strings, +use the format function from the string library +(see string.format). + + + + + + + +

2.3 - Variables

+ +

+Variables are places that store values. + +There are three kinds of variables in Lua: +global variables, local variables, and table fields. + + +

+A single name can denote a global variable or a local variable +(or a function's formal parameter, +which is a particular kind of local variable): + +

+	var ::= Name
+

+Name denotes identifiers, as defined in §2.1. + + +

+Any variable is assumed to be global unless explicitly declared +as a local (see §2.4.7). +Local variables are lexically scoped: +local variables can be freely accessed by functions +defined inside their scope (see §2.6). + + +

+Before the first assignment to a variable, its value is nil. + + +

+Square brackets are used to index a table: + +

+	var ::= prefixexp `[´ exp `]´
+

+The meaning of accesses to global variables +and table fields can be changed via metatables. +An access to an indexed variable t[i] is equivalent to +a call gettable_event(t,i). +(See §2.8 for a complete description of the +gettable_event function. +This function is not defined or callable in Lua. +We use it here only for explanatory purposes.) + + +

+The syntax var.Name is just syntactic sugar for +var["Name"]: + +

+	var ::= prefixexp `.´ Name
+
+ +

+All global variables live as fields in ordinary Lua tables, +called environment tables or simply +environments (see §2.9). +Each function has its own reference to an environment, +so that all global variables in this function +will refer to this environment table. +When a function is created, +it inherits the environment from the function that created it. +To get the environment table of a Lua function, +you call getfenv. +To replace it, +you call setfenv. +(You can only manipulate the environment of C functions +through the debug library; (see §5.9).) + + +

+An access to a global variable x +is equivalent to _env.x, +which in turn is equivalent to + +

+     gettable_event(_env, "x")
+

+where _env is the environment of the running function. +(See §2.8 for a complete description of the +gettable_event function. +This function is not defined or callable in Lua. +Similarly, the _env variable is not defined in Lua. +We use them here only for explanatory purposes.) + + + + + +

2.4 - Statements

+ +

+Lua supports an almost conventional set of statements, +similar to those in Pascal or C. +This set includes +assignment, control structures, function calls, +and variable declarations. + + + +

2.4.1 - Chunks

+ +

+The unit of execution of Lua is called a chunk. +A chunk is simply a sequence of statements, +which are executed sequentially. +Each statement can be optionally followed by a semicolon: + +

+	chunk ::= {stat [`;´]}
+

+There are no empty statements and thus ';;' is not legal. + + +

+Lua handles a chunk as the body of an anonymous function +with a variable number of arguments +(see §2.5.9). +As such, chunks can define local variables, +receive arguments, and return values. + + +

+A chunk may be stored in a file or in a string inside the host program. +When a chunk is executed, first it is pre-compiled into instructions for +a virtual machine, +and then the compiled code is executed +by an interpreter for the virtual machine. + + +

+Chunks may also be pre-compiled into binary form; +see program luac for details. +Programs in source and compiled forms are interchangeable; +Lua automatically detects the file type and acts accordingly. + + + + + + +

2.4.2 - Blocks

+A block is a list of statements; +syntactically, a block is the same as a chunk: + +

+	block ::= chunk
+
+ +

+A block may be explicitly delimited to produce a single statement: + +

+	stat ::= do block end
+

+Explicit blocks are useful +to control the scope of variable declarations. +Explicit blocks are also sometimes used to +add a return or break statement in the middle +of another block (see §2.4.4). + + + + + +

2.4.3 - Assignment

+ +

+Lua allows multiple assignment. +Therefore, the syntax for assignment +defines a list of variables on the left side +and a list of expressions on the right side. +The elements in both lists are separated by commas: + +

+	stat ::= varlist1 `=´ explist1
+	varlist1 ::= var {`,´ var}
+	explist1 ::= exp {`,´ exp}
+

+Expressions are discussed in §2.5. + + +

+Before the assignment, +the list of values is adjusted to the length of +the list of variables. +If there are more values than needed, +the excess values are thrown away. +If there are fewer values than needed, +the list is extended with as many nil's as needed. +If the list of expressions ends with a function call, +then all values returned by this call enter in the list of values, +before the adjustment +(except when the call is enclosed in parentheses; see §2.5). + + +

+The assignment statement first evaluates all its expressions +and only then are the assignments performed. +Thus the code + +

+     i = 3
+     i, a[i] = i+1, 20
+

+sets a[3] to 20, without affecting a[4] +because the i in a[i] is evaluated (to 3) +before it is assigned 4. +Similarly, the line + +

+     x, y = y, x
+

+exchanges the values of x and y. + + +

+The meaning of assignments to global variables +and table fields can be changed via metatables. +An assignment to an indexed variable t[i] = val is equivalent to +settable_event(t,i,val). +(See §2.8 for a complete description of the +settable_event function. +This function is not defined or callable in Lua. +We use it here only for explanatory purposes.) + + +

+An assignment to a global variable x = val +is equivalent to the assignment +_env.x = val, +which in turn is equivalent to + +

+     settable_event(_env, "x", val)
+

+where _env is the environment of the running function. +(The _env variable is not defined in Lua. +We use it here only for explanatory purposes.) + + + + + +

2.4.4 - Control Structures

+The control structures +if, while, and repeat have the usual meaning and +familiar syntax: + + + + +

+	stat ::= while exp do block end
+	stat ::= repeat block until exp
+	stat ::= if exp then block {elseif exp then block} [else block] end
+

+Lua also has a for statement, in two flavors (see §2.4.5). + + +

+The condition expression of a +control structure may return any value. +Both false and nil are considered false. +All values different from nil and false are considered true +(in particular, the number 0 and the empty string are also true). + + +

+In the repeatuntil loop, +the inner block does not end at the until keyword, +but only after the condition. +So, the condition can refer to local variables +declared inside the loop block. + + +

+The return statement is used to return values +from a function or a chunk (which is just a function). + +Functions and chunks may return more than one value, +so the syntax for the return statement is + +

+	stat ::= return [explist1]
+
+ +

+The break statement is used to terminate the execution of a +while, repeat, or for loop, +skipping to the next statement after the loop: + + +

+	stat ::= break
+

+A break ends the innermost enclosing loop. + + +

+The return and break +statements can only be written as the last statement of a block. +If it is really necessary to return or break in the +middle of a block, +then an explicit inner block can be used, +as in the idioms +do return end and do break end, +because now return and break are the last statements in +their (inner) blocks. + + + + + +

2.4.5 - For Statement

+ +

+ +The for statement has two forms: +one numeric and one generic. + + +

+The numeric for loop repeats a block of code while a +control variable runs through an arithmetic progression. +It has the following syntax: + +

+	stat ::= for Name `=´ exp `,´ exp [`,´ exp] do block end
+

+The block is repeated for name starting at the value of +the first exp, until it passes the second exp by steps of the +third exp. +More precisely, a for statement like + +

+     for v = e1, e2, e3 do block end
+

+is equivalent to the code: + +

+     do
+       local var, limit, step = tonumber(e1), tonumber(e2), tonumber(e3)
+       if not (var and limit and step) then error() end
+       while (step > 0 and var <= limit) or (step <= 0 and var >= limit) do
+         local v = var
+         block
+         var = var + step
+       end
+     end
+

+Note the following: + +

    + +
  • +All three control expressions are evaluated only once, +before the loop starts. +They must all result in numbers. +
  • + +
  • +var, limit, and step are invisible variables. +The names are here for explanatory purposes only. +
  • + +
  • +If the third expression (the step) is absent, +then a step of 1 is used. +
  • + +
  • +You can use break to exit a for loop. +
  • + +
  • +The loop variable v is local to the loop; +you cannot use its value after the for ends or is broken. +If you need this value, +assign it to another variable before breaking or exiting the loop. +
  • + +
+ +

+The generic for statement works over functions, +called iterators. +On each iteration, the iterator function is called to produce a new value, +stopping when this new value is nil. +The generic for loop has the following syntax: + +

+	stat ::= for namelist in explist1 do block end
+	namelist ::= Name {`,´ Name}
+

+A for statement like + +

+     for var_1, ···, var_n in explist do block end
+

+is equivalent to the code: + +

+     do
+       local f, s, var = explist
+       while true do
+         local var_1, ···, var_n = f(s, var)
+         var = var_1
+         if var == nil then break end
+         block
+       end
+     end
+

+Note the following: + +

    + +
  • +explist is evaluated only once. +Its results are an iterator function, +a state, +and an initial value for the first iterator variable. +
  • + +
  • +f, s, and var are invisible variables. +The names are here for explanatory purposes only. +
  • + +
  • +You can use break to exit a for loop. +
  • + +
  • +The loop variables var_i are local to the loop; +you cannot use their values after the for ends. +If you need these values, +then assign them to other variables before breaking or exiting the loop. +
  • + +
+ + + + +

2.4.6 - Function Calls as Statements

+To allow possible side-effects, +function calls can be executed as statements: + +

+	stat ::= functioncall
+

+In this case, all returned values are thrown away. +Function calls are explained in §2.5.8. + + + + + +

2.4.7 - Local Declarations

+Local variables may be declared anywhere inside a block. +The declaration may include an initial assignment: + +

+	stat ::= local namelist [`=´ explist1]
+

+If present, an initial assignment has the same semantics +of a multiple assignment (see §2.4.3). +Otherwise, all variables are initialized with nil. + + +

+A chunk is also a block (see §2.4.1), +and so local variables can be declared in a chunk outside any explicit block. +The scope of such local variables extends until the end of the chunk. + + +

+The visibility rules for local variables are explained in §2.6. + + + + + + + +

2.5 - Expressions

+ +

+The basic expressions in Lua are the following: + +

+	exp ::= prefixexp
+	exp ::= nil | false | true
+	exp ::= Number
+	exp ::= String
+	exp ::= function
+	exp ::= tableconstructor
+	exp ::= `...´
+	exp ::= exp binop exp
+	exp ::= unop exp
+	prefixexp ::= var | functioncall | `(´ exp `)´
+
+ +

+Numbers and literal strings are explained in §2.1; +variables are explained in §2.3; +function definitions are explained in §2.5.9; +function calls are explained in §2.5.8; +table constructors are explained in §2.5.7. +Vararg expressions, +denoted by three dots ('...'), can only be used when +directly inside a vararg function; +they are explained in §2.5.9. + + +

+Binary operators comprise arithmetic operators (see §2.5.1), +relational operators (see §2.5.2), logical operators (see §2.5.3), +and the concatenation operator (see §2.5.4). +Unary operators comprise the unary minus (see §2.5.1), +the unary not (see §2.5.3), +and the unary length operator (see §2.5.5). + + +

+Both function calls and vararg expressions may result in multiple values. +If the expression is used as a statement (see §2.4.6) +(only possible for function calls), +then its return list is adjusted to zero elements, +thus discarding all returned values. +If the expression is used as the last (or the only) element +of a list of expressions, +then no adjustment is made +(unless the call is enclosed in parentheses). +In all other contexts, +Lua adjusts the result list to one element, +discarding all values except the first one. + + +

+Here are some examples: + +

+     f()                -- adjusted to 0 results
+     g(f(), x)          -- f() is adjusted to 1 result
+     g(x, f())          -- g gets x plus all results from f()
+     a,b,c = f(), x     -- f() is adjusted to 1 result (c gets nil)
+     a,b = ...          -- a gets the first vararg parameter, b gets
+                        -- the second (both a and b may get nil if there
+                        -- is no corresponding vararg parameter)
+     
+     a,b,c = x, f()     -- f() is adjusted to 2 results
+     a,b,c = f()        -- f() is adjusted to 3 results
+     return f()         -- returns all results from f()
+     return ...         -- returns all received vararg parameters
+     return x,y,f()     -- returns x, y, and all results from f()
+     {f()}              -- creates a list with all results from f()
+     {...}              -- creates a list with all vararg parameters
+     {f(), nil}         -- f() is adjusted to 1 result
+
+ +

+An expression enclosed in parentheses always results in only one value. +Thus, +(f(x,y,z)) is always a single value, +even if f returns several values. +(The value of (f(x,y,z)) is the first value returned by f +or nil if f does not return any values.) + + + +

2.5.1 - Arithmetic Operators

+Lua supports the usual arithmetic operators: +the binary + (addition), +- (subtraction), * (multiplication), +/ (division), % (modulo), and ^ (exponentiation); +and unary - (negation). +If the operands are numbers, or strings that can be converted to +numbers (see §2.2.1), +then all operations have the usual meaning. +Exponentiation works for any exponent. +For instance, x^(-0.5) computes the inverse of the square root of x. +Modulo is defined as + +

+     a % b == a - math.floor(a/b)*b
+

+That is, it is the remainder of a division that rounds +the quotient towards minus infinity. + + + + + +

2.5.2 - Relational Operators

+The relational operators in Lua are + +

+     ==    ~=    <     >     <=    >=
+

+These operators always result in false or true. + + +

+Equality (==) first compares the type of its operands. +If the types are different, then the result is false. +Otherwise, the values of the operands are compared. +Numbers and strings are compared in the usual way. +Objects (tables, userdata, threads, and functions) +are compared by reference: +two objects are considered equal only if they are the same object. +Every time you create a new object +(a table, userdata, thread, or function), +this new object is different from any previously existing object. + + +

+You can change the way that Lua compares tables and userdata +by using the "eq" metamethod (see §2.8). + + +

+The conversion rules of §2.2.1 +do not apply to equality comparisons. +Thus, "0"==0 evaluates to false, +and t[0] and t["0"] denote different +entries in a table. + + +

+The operator ~= is exactly the negation of equality (==). + + +

+The order operators work as follows. +If both arguments are numbers, then they are compared as such. +Otherwise, if both arguments are strings, +then their values are compared according to the current locale. +Otherwise, Lua tries to call the "lt" or the "le" +metamethod (see §2.8). + + + + + +

2.5.3 - Logical Operators

+The logical operators in Lua are +and, or, and not. +Like the control structures (see §2.4.4), +all logical operators consider both false and nil as false +and anything else as true. + + +

+The negation operator not always returns false or true. +The conjunction operator and returns its first argument +if this value is false or nil; +otherwise, and returns its second argument. +The disjunction operator or returns its first argument +if this value is different from nil and false; +otherwise, or returns its second argument. +Both and and or use short-cut evaluation; +that is, +the second operand is evaluated only if necessary. +Here are some examples: + +

+     10 or 20            --> 10
+     10 or error()       --> 10
+     nil or "a"          --> "a"
+     nil and 10          --> nil
+     false and error()   --> false
+     false and nil       --> false
+     false or nil        --> nil
+     10 and 20           --> 20
+

+(In this manual, +--> indicates the result of the preceding expression.) + + + + + +

2.5.4 - Concatenation

+The string concatenation operator in Lua is +denoted by two dots ('..'). +If both operands are strings or numbers, then they are converted to +strings according to the rules mentioned in §2.2.1. +Otherwise, the "concat" metamethod is called (see §2.8). + + + + + +

2.5.5 - The Length Operator

+ +

+The length operator is denoted by the unary operator #. +The length of a string is its number of bytes +(that is, the usual meaning of string length when each +character is one byte). + + +

+The length of a table t is defined to be any +integer index n +such that t[n] is not nil and t[n+1] is nil; +moreover, if t[1] is nil, n may be zero. +For a regular array, with non-nil values from 1 to a given n, +its length is exactly that n, +the index of its last value. +If the array has "holes" +(that is, nil values between other non-nil values), +then #t may be any of the indices that +directly precedes a nil value +(that is, it may consider any such nil value as the end of +the array). + + + + + +

2.5.6 - Precedence

+Operator precedence in Lua follows the table below, +from lower to higher priority: + +

+     or
+     and
+     <     >     <=    >=    ~=    ==
+     ..
+     +     -
+     *     /     %
+     not   #     - (unary)
+     ^
+

+As usual, +you can use parentheses to change the precedences of an expression. +The concatenation ('..') and exponentiation ('^') +operators are right associative. +All other binary operators are left associative. + + + + + +

2.5.7 - Table Constructors

+Table constructors are expressions that create tables. +Every time a constructor is evaluated, a new table is created. +Constructors can be used to create empty tables, +or to create a table and initialize some of its fields. +The general syntax for constructors is + +

+	tableconstructor ::= `{´ [fieldlist] `}´
+	fieldlist ::= field {fieldsep field} [fieldsep]
+	field ::= `[´ exp `]´ `=´ exp | Name `=´ exp | exp
+	fieldsep ::= `,´ | `;´
+
+ +

+Each field of the form [exp1] = exp2 adds to the new table an entry +with key exp1 and value exp2. +A field of the form name = exp is equivalent to +["name"] = exp. +Finally, fields of the form exp are equivalent to +[i] = exp, where i are consecutive numerical integers, +starting with 1. +Fields in the other formats do not affect this counting. +For example, + +

+     a = { [f(1)] = g; "x", "y"; x = 1, f(x), [30] = 23; 45 }
+

+is equivalent to + +

+     do
+       local t = {}
+       t[f(1)] = g
+       t[1] = "x"         -- 1st exp
+       t[2] = "y"         -- 2nd exp
+       t.x = 1            -- t["x"] = 1
+       t[3] = f(x)        -- 3rd exp
+       t[30] = 23
+       t[4] = 45          -- 4th exp
+       a = t
+     end
+
+ +

+If the last field in the list has the form exp +and the expression is a function call or a vararg expression, +then all values returned by this expression enter the list consecutively +(see §2.5.8). +To avoid this, +enclose the function call (or the vararg expression) +in parentheses (see §2.5). + + +

+The field list may have an optional trailing separator, +as a convenience for machine-generated code. + + + + + +

2.5.8 - Function Calls

+A function call in Lua has the following syntax: + +

+	functioncall ::= prefixexp args
+

+In a function call, +first prefixexp and args are evaluated. +If the value of prefixexp has type function, +then this function is called +with the given arguments. +Otherwise, the prefixexp "call" metamethod is called, +having as first parameter the value of prefixexp, +followed by the original call arguments +(see §2.8). + + +

+The form + +

+	functioncall ::= prefixexp `:´ Name args
+

+can be used to call "methods". +A call v:name(args) +is syntactic sugar for v.name(v,args), +except that v is evaluated only once. + + +

+Arguments have the following syntax: + +

+	args ::= `(´ [explist1] `)´
+	args ::= tableconstructor
+	args ::= String
+

+All argument expressions are evaluated before the call. +A call of the form f{fields} is +syntactic sugar for f({fields}); +that is, the argument list is a single new table. +A call of the form f'string' +(or f"string" or f[[string]]) +is syntactic sugar for f('string'); +that is, the argument list is a single literal string. + + +

+As an exception to the free-format syntax of Lua, +you cannot put a line break before the '(' in a function call. +This restriction avoids some ambiguities in the language. +If you write + +

+     a = f
+     (g).x(a)
+

+Lua would see that as a single statement, a = f(g).x(a). +So, if you want two statements, you must add a semi-colon between them. +If you actually want to call f, +you must remove the line break before (g). + + +

+A call of the form return functioncall is called +a tail call. +Lua implements proper tail calls +(or proper tail recursion): +in a tail call, +the called function reuses the stack entry of the calling function. +Therefore, there is no limit on the number of nested tail calls that +a program can execute. +However, a tail call erases any debug information about the +calling function. +Note that a tail call only happens with a particular syntax, +where the return has one single function call as argument; +this syntax makes the calling function return exactly +the returns of the called function. +So, none of the following examples are tail calls: + +

+     return (f(x))        -- results adjusted to 1
+     return 2 * f(x)
+     return x, f(x)       -- additional results
+     f(x); return         -- results discarded
+     return x or f(x)     -- results adjusted to 1
+
+ + + + +

2.5.9 - Function Definitions

+ +

+The syntax for function definition is + +

+	function ::= function funcbody
+	funcbody ::= `(´ [parlist1] `)´ block end
+
+ +

+The following syntactic sugar simplifies function definitions: + +

+	stat ::= function funcname funcbody
+	stat ::= local function Name funcbody
+	funcname ::= Name {`.´ Name} [`:´ Name]
+

+The statement + +

+     function f () body end
+

+translates to + +

+     f = function () body end
+

+The statement + +

+     function t.a.b.c.f () body end
+

+translates to + +

+     t.a.b.c.f = function () body end
+

+The statement + +

+     local function f () body end
+

+translates to + +

+     local f; f = function () body end
+

+not to + +

+     local f = function () body end
+

+(This only makes a difference when the body of the function +contains references to f.) + + +

+A function definition is an executable expression, +whose value has type function. +When Lua pre-compiles a chunk, +all its function bodies are pre-compiled too. +Then, whenever Lua executes the function definition, +the function is instantiated (or closed). +This function instance (or closure) +is the final value of the expression. +Different instances of the same function +may refer to different external local variables +and may have different environment tables. + + +

+Parameters act as local variables that are +initialized with the argument values: + +

+	parlist1 ::= namelist [`,´ `...´] | `...´
+

+When a function is called, +the list of arguments is adjusted to +the length of the list of parameters, +unless the function is a variadic or vararg function, +which is +indicated by three dots ('...') at the end of its parameter list. +A vararg function does not adjust its argument list; +instead, it collects all extra arguments and supplies them +to the function through a vararg expression, +which is also written as three dots. +The value of this expression is a list of all actual extra arguments, +similar to a function with multiple results. +If a vararg expression is used inside another expression +or in the middle of a list of expressions, +then its return list is adjusted to one element. +If the expression is used as the last element of a list of expressions, +then no adjustment is made +(unless the call is enclosed in parentheses). + + +

+As an example, consider the following definitions: + +

+     function f(a, b) end
+     function g(a, b, ...) end
+     function r() return 1,2,3 end
+

+Then, we have the following mapping from arguments to parameters and +to the vararg expression: + +

+     CALL            PARAMETERS
+     
+     f(3)             a=3, b=nil
+     f(3, 4)          a=3, b=4
+     f(3, 4, 5)       a=3, b=4
+     f(r(), 10)       a=1, b=10
+     f(r())           a=1, b=2
+     
+     g(3)             a=3, b=nil, ... -->  (nothing)
+     g(3, 4)          a=3, b=4,   ... -->  (nothing)
+     g(3, 4, 5, 8)    a=3, b=4,   ... -->  5  8
+     g(5, r())        a=5, b=1,   ... -->  2  3
+
+ +

+Results are returned using the return statement (see §2.4.4). +If control reaches the end of a function +without encountering a return statement, +then the function returns with no results. + + +

+The colon syntax +is used for defining methods, +that is, functions that have an implicit extra parameter self. +Thus, the statement + +

+     function t.a.b.c:f (params) body end
+

+is syntactic sugar for + +

+     t.a.b.c.f = function (self, params) body end
+
+ + + + + + +

2.6 - Visibility Rules

+ +

+ +Lua is a lexically scoped language. +The scope of variables begins at the first statement after +their declaration and lasts until the end of the innermost block that +includes the declaration. +Consider the following example: + +

+     x = 10                -- global variable
+     do                    -- new block
+       local x = x         -- new 'x', with value 10
+       print(x)            --> 10
+       x = x+1
+       do                  -- another block
+         local x = x+1     -- another 'x'
+         print(x)          --> 12
+       end
+       print(x)            --> 11
+     end
+     print(x)              --> 10  (the global one)
+
+ +

+Notice that, in a declaration like local x = x, +the new x being declared is not in scope yet, +and so the second x refers to the outside variable. + + +

+Because of the lexical scoping rules, +local variables can be freely accessed by functions +defined inside their scope. +A local variable used by an inner function is called +an upvalue, or external local variable, +inside the inner function. + + +

+Notice that each execution of a local statement +defines new local variables. +Consider the following example: + +

+     a = {}
+     local x = 20
+     for i=1,10 do
+       local y = 0
+       a[i] = function () y=y+1; return x+y end
+     end
+

+The loop creates ten closures +(that is, ten instances of the anonymous function). +Each of these closures uses a different y variable, +while all of them share the same x. + + + + + +

2.7 - Error Handling

+ +

+Because Lua is an embedded extension language, +all Lua actions start from C code in the host program +calling a function from the Lua library (see lua_pcall). +Whenever an error occurs during Lua compilation or execution, +control returns to C, +which can take appropriate measures +(such as printing an error message). + + +

+Lua code can explicitly generate an error by calling the +error function. +If you need to catch errors in Lua, +you can use the pcall function. + + + + + +

2.8 - Metatables

+ +

+Every value in Lua may have a metatable. +This metatable is an ordinary Lua table +that defines the behavior of the original value +under certain special operations. +You can change several aspects of the behavior +of operations over a value by setting specific fields in its metatable. +For instance, when a non-numeric value is the operand of an addition, +Lua checks for a function in the field "__add" in its metatable. +If it finds one, +Lua calls this function to perform the addition. + + +

+We call the keys in a metatable events +and the values metamethods. +In the previous example, the event is "add" +and the metamethod is the function that performs the addition. + + +

+You can query the metatable of any value +through the getmetatable function. + + +

+You can replace the metatable of tables +through the setmetatable +function. +You cannot change the metatable of other types from Lua +(except using the debug library); +you must use the C API for that. + + +

+Tables and userdata have individual metatables +(although multiple tables and userdata can share their metatables); +values of all other types share one single metatable per type. +So, there is one single metatable for all numbers, +and for all strings, etc. + + +

+A metatable may control how an object behaves in arithmetic operations, +order comparisons, concatenation, length operation, and indexing. +A metatable can also define a function to be called when a userdata +is garbage collected. +For each of these operations Lua associates a specific key +called an event. +When Lua performs one of these operations over a value, +it checks whether this value has a metatable with the corresponding event. +If so, the value associated with that key (the metamethod) +controls how Lua will perform the operation. + + +

+Metatables control the operations listed next. +Each operation is identified by its corresponding name. +The key for each operation is a string with its name prefixed by +two underscores, '__'; +for instance, the key for operation "add" is the +string "__add". +The semantics of these operations is better explained by a Lua function +describing how the interpreter executes the operation. + + +

+The code shown here in Lua is only illustrative; +the real behavior is hard coded in the interpreter +and it is much more efficient than this simulation. +All functions used in these descriptions +(rawget, tonumber, etc.) +are described in §5.1. +In particular, to retrieve the metamethod of a given object, +we use the expression + +

+     metatable(obj)[event]
+

+This should be read as + +

+     rawget(getmetatable(obj) or {}, event)
+

+ +That is, the access to a metamethod does not invoke other metamethods, +and the access to objects with no metatables does not fail +(it simply results in nil). + + + +

    + +
  • "add": +the + operation. + + + +

    +The function getbinhandler below defines how Lua chooses a handler +for a binary operation. +First, Lua tries the first operand. +If its type does not define a handler for the operation, +then Lua tries the second operand. + +

    +     function getbinhandler (op1, op2, event)
    +       return metatable(op1)[event] or metatable(op2)[event]
    +     end
    +

    +By using this function, +the behavior of the op1 + op2 is + +

    +     function add_event (op1, op2)
    +       local o1, o2 = tonumber(op1), tonumber(op2)
    +       if o1 and o2 then  -- both operands are numeric?
    +         return o1 + o2   -- '+' here is the primitive 'add'
    +       else  -- at least one of the operands is not numeric
    +         local h = getbinhandler(op1, op2, "__add")
    +         if h then
    +           -- call the handler with both operands
    +           return h(op1, op2)
    +         else  -- no handler available: default behavior
    +           error(···)
    +         end
    +       end
    +     end
    +

    +

  • + +
  • "sub": +the - operation. + +Behavior similar to the "add" operation. +
  • + +
  • "mul": +the * operation. + +Behavior similar to the "add" operation. +
  • + +
  • "div": +the / operation. + +Behavior similar to the "add" operation. +
  • + +
  • "mod": +the % operation. + +Behavior similar to the "add" operation, +with the operation +o1 - floor(o1/o2)*o2 as the primitive operation. +
  • + +
  • "pow": +the ^ (exponentiation) operation. + +Behavior similar to the "add" operation, +with the function pow (from the C math library) +as the primitive operation. +
  • + +
  • "unm": +the unary - operation. + + +
    +     function unm_event (op)
    +       local o = tonumber(op)
    +       if o then  -- operand is numeric?
    +         return -o  -- '-' here is the primitive 'unm'
    +       else  -- the operand is not numeric.
    +         -- Try to get a handler from the operand
    +         local h = metatable(op).__unm
    +         if h then
    +           -- call the handler with the operand
    +           return h(op)
    +         else  -- no handler available: default behavior
    +           error(···)
    +         end
    +       end
    +     end
    +

    +

  • + +
  • "concat": +the .. (concatenation) operation. + + +
    +     function concat_event (op1, op2)
    +       if (type(op1) == "string" or type(op1) == "number") and
    +          (type(op2) == "string" or type(op2) == "number") then
    +         return op1 .. op2  -- primitive string concatenation
    +       else
    +         local h = getbinhandler(op1, op2, "__concat")
    +         if h then
    +           return h(op1, op2)
    +         else
    +           error(···)
    +         end
    +       end
    +     end
    +

    +

  • + +
  • "len": +the # operation. + + +
    +     function len_event (op)
    +       if type(op) == "string" then
    +         return strlen(op)         -- primitive string length
    +       elseif type(op) == "table" then
    +         return #op                -- primitive table length
    +       else
    +         local h = metatable(op).__len
    +         if h then
    +           -- call the handler with the operand
    +           return h(op)
    +         else  -- no handler available: default behavior
    +           error(···)
    +         end
    +       end
    +     end
    +

    +See §2.5.5 for a description of the length of a table. +

  • + +
  • "eq": +the == operation. + +The function getcomphandler defines how Lua chooses a metamethod +for comparison operators. +A metamethod only is selected when both objects +being compared have the same type +and the same metamethod for the selected operation. + +
    +     function getcomphandler (op1, op2, event)
    +       if type(op1) ~= type(op2) then return nil end
    +       local mm1 = metatable(op1)[event]
    +       local mm2 = metatable(op2)[event]
    +       if mm1 == mm2 then return mm1 else return nil end
    +     end
    +

    +The "eq" event is defined as follows: + +

    +     function eq_event (op1, op2)
    +       if type(op1) ~= type(op2) then  -- different types?
    +         return false   -- different objects
    +       end
    +       if op1 == op2 then   -- primitive equal?
    +         return true   -- objects are equal
    +       end
    +       -- try metamethod
    +       local h = getcomphandler(op1, op2, "__eq")
    +       if h then
    +         return h(op1, op2)
    +       else
    +         return false
    +       end
    +     end
    +

    +a ~= b is equivalent to not (a == b). +

  • + +
  • "lt": +the < operation. + + +
    +     function lt_event (op1, op2)
    +       if type(op1) == "number" and type(op2) == "number" then
    +         return op1 < op2   -- numeric comparison
    +       elseif type(op1) == "string" and type(op2) == "string" then
    +         return op1 < op2   -- lexicographic comparison
    +       else
    +         local h = getcomphandler(op1, op2, "__lt")
    +         if h then
    +           return h(op1, op2)
    +         else
    +           error(···);
    +         end
    +       end
    +     end
    +

    +a > b is equivalent to b < a. +

  • + +
  • "le": +the <= operation. + + +
    +     function le_event (op1, op2)
    +       if type(op1) == "number" and type(op2) == "number" then
    +         return op1 <= op2   -- numeric comparison
    +       elseif type(op1) == "string" and type(op2) == "string" then
    +         return op1 <= op2   -- lexicographic comparison
    +       else
    +         local h = getcomphandler(op1, op2, "__le")
    +         if h then
    +           return h(op1, op2)
    +         else
    +           h = getcomphandler(op1, op2, "__lt")
    +           if h then
    +             return not h(op2, op1)
    +           else
    +             error(···);
    +           end
    +         end
    +       end
    +     end
    +

    +a >= b is equivalent to b <= a. +Note that, in the absence of a "le" metamethod, +Lua tries the "lt", assuming that a <= b is +equivalent to not (b < a). +

  • + +
  • "index": +The indexing access table[key]. + + +
    +     function gettable_event (table, key)
    +       local h
    +       if type(table) == "table" then
    +         local v = rawget(table, key)
    +         if v ~= nil then return v end
    +         h = metatable(table).__index
    +         if h == nil then return nil end
    +       else
    +         h = metatable(table).__index
    +         if h == nil then
    +           error(···);
    +         end
    +       end
    +       if type(h) == "function" then
    +         return h(table, key)      -- call the handler
    +       else return h[key]          -- or repeat operation on it
    +       end
    +     end
    +

    +

  • + +
  • "newindex": +The indexing assignment table[key] = value. + + +
    +     function settable_event (table, key, value)
    +       local h
    +       if type(table) == "table" then
    +         local v = rawget(table, key)
    +         if v ~= nil then rawset(table, key, value); return end
    +         h = metatable(table).__newindex
    +         if h == nil then rawset(table, key, value); return end
    +       else
    +         h = metatable(table).__newindex
    +         if h == nil then
    +           error(···);
    +         end
    +       end
    +       if type(h) == "function" then
    +         return h(table, key,value)    -- call the handler
    +       else h[key] = value             -- or repeat operation on it
    +       end
    +     end
    +

    +

  • + +
  • "call": +called when Lua calls a value. + + +
    +     function function_event (func, ...)
    +       if type(func) == "function" then
    +         return func(...)   -- primitive call
    +       else
    +         local h = metatable(func).__call
    +         if h then
    +           return h(func, ...)
    +         else
    +           error(···)
    +         end
    +       end
    +     end
    +

    +

  • + +
+ + + + +

2.9 - Environments

+ +

+Besides metatables, +objects of types thread, function, and userdata +have another table associated with them, +called their environment. +Like metatables, environments are regular tables and +multiple objects can share the same environment. + + +

+Environments associated with userdata have no meaning for Lua. +It is only a convenience feature for programmers to associate a table to +a userdata. + + +

+Environments associated with threads are called +global environments. +They are used as the default environment for their threads and +non-nested functions created by the thread +(through loadfile, loadstring or load) +and can be directly accessed by C code (see §3.3). + + +

+Environments associated with C functions can be directly +accessed by C code (see §3.3). +They are used as the default environment for other C functions +created by the function. + + +

+Environments associated with Lua functions are used to resolve +all accesses to global variables within the function (see §2.3). +They are used as the default environment for other Lua functions +created by the function. + + +

+You can change the environment of a Lua function or the +running thread by calling setfenv. +You can get the environment of a Lua function or the running thread +by calling getfenv. +To manipulate the environment of other objects +(userdata, C functions, other threads) you must +use the C API. + + + + + +

2.10 - Garbage Collection

+ +

+Lua performs automatic memory management. +This means that +you have to worry neither about allocating memory for new objects +nor about freeing it when the objects are no longer needed. +Lua manages memory automatically by running +a garbage collector from time to time +to collect all dead objects +(that is, these objects that are no longer accessible from Lua). +All objects in Lua are subject to automatic management: +tables, userdata, functions, threads, and strings. + + +

+Lua implements an incremental mark-and-sweep collector. +It uses two numbers to control its garbage-collection cycles: +the garbage-collector pause and +the garbage-collector step multiplier. + + +

+The garbage-collector pause +controls how long the collector waits before starting a new cycle. +Larger values make the collector less aggressive. +Values smaller than 1 mean the collector will not wait to +start a new cycle. +A value of 2 means that the collector waits for the total memory in use +to double before starting a new cycle. + + +

+The step multiplier +controls the relative speed of the collector relative to +memory allocation. +Larger values make the collector more aggressive but also increase +the size of each incremental step. +Values smaller than 1 make the collector too slow and +may result in the collector never finishing a cycle. +The default, 2, means that the collector runs at "twice" +the speed of memory allocation. + + +

+You can change these numbers by calling lua_gc in C +or collectgarbage in Lua. +Both get percentage points as arguments +(so an argument of 100 means a real value of 1). +With these functions you can also control +the collector directly (e.g., stop and restart it). + + + +

2.10.1 - Garbage-Collection Metamethods

+ +

+Using the C API, +you can set garbage-collector metamethods for userdata (see §2.8). +These metamethods are also called finalizers. +Finalizers allow you to coordinate Lua's garbage collection +with external resource management +(such as closing files, network or database connections, +or freeing your own memory). + + +

+Garbage userdata with a field __gc in their metatables are not +collected immediately by the garbage collector. +Instead, Lua puts them in a list. +After the collection, +Lua does the equivalent of the following function +for each userdata in that list: + +

+     function gc_event (udata)
+       local h = metatable(udata).__gc
+       if h then
+         h(udata)
+       end
+     end
+
+ +

+At the end of each garbage-collection cycle, +the finalizers for userdata are called in reverse +order of their creation, +among those collected in that cycle. +That is, the first finalizer to be called is the one associated +with the userdata created last in the program. + + + + + +

2.10.2 - Weak Tables

+ +

+A weak table is a table whose elements are +weak references. +A weak reference is ignored by the garbage collector. +In other words, +if the only references to an object are weak references, +then the garbage collector will collect this object. + + +

+A weak table can have weak keys, weak values, or both. +A table with weak keys allows the collection of its keys, +but prevents the collection of its values. +A table with both weak keys and weak values allows the collection of +both keys and values. +In any case, if either the key or the value is collected, +the whole pair is removed from the table. +The weakness of a table is controlled by the +__mode field of its metatable. +If the __mode field is a string containing the character 'k', +the keys in the table are weak. +If __mode contains 'v', +the values in the table are weak. + + +

+After you use a table as a metatable, +you should not change the value of its field __mode. +Otherwise, the weak behavior of the tables controlled by this +metatable is undefined. + + + + + + + +

2.11 - Coroutines

+ +

+Lua supports coroutines, +also called collaborative multithreading. +A coroutine in Lua represents an independent thread of execution. +Unlike threads in multithread systems, however, +a coroutine only suspends its execution by explicitly calling +a yield function. + + +

+You create a coroutine with a call to coroutine.create. +Its sole argument is a function +that is the main function of the coroutine. +The create function only creates a new coroutine and +returns a handle to it (an object of type thread); +it does not start the coroutine execution. + + +

+When you first call coroutine.resume, +passing as its first argument +the thread returned by coroutine.create, +the coroutine starts its execution, +at the first line of its main function. +Extra arguments passed to coroutine.resume are passed on +to the coroutine main function. +After the coroutine starts running, +it runs until it terminates or yields. + + +

+A coroutine can terminate its execution in two ways: +normally, when its main function returns +(explicitly or implicitly, after the last instruction); +and abnormally, if there is an unprotected error. +In the first case, coroutine.resume returns true, +plus any values returned by the coroutine main function. +In case of errors, coroutine.resume returns false +plus an error message. + + +

+A coroutine yields by calling coroutine.yield. +When a coroutine yields, +the corresponding coroutine.resume returns immediately, +even if the yield happens inside nested function calls +(that is, not in the main function, +but in a function directly or indirectly called by the main function). +In the case of a yield, coroutine.resume also returns true, +plus any values passed to coroutine.yield. +The next time you resume the same coroutine, +it continues its execution from the point where it yielded, +with the call to coroutine.yield returning any extra +arguments passed to coroutine.resume. + + +

+Like coroutine.create, +the coroutine.wrap function also creates a coroutine, +but instead of returning the coroutine itself, +it returns a function that, when called, resumes the coroutine. +Any arguments passed to this function +go as extra arguments to coroutine.resume. +coroutine.wrap returns all the values returned by coroutine.resume, +except the first one (the boolean error code). +Unlike coroutine.resume, +coroutine.wrap does not catch errors; +any error is propagated to the caller. + + +

+As an example, +consider the following code: + +

+     function foo (a)
+       print("foo", a)
+       return coroutine.yield(2*a)
+     end
+     
+     co = coroutine.create(function (a,b)
+           print("co-body", a, b)
+           local r = foo(a+1)
+           print("co-body", r)
+           local r, s = coroutine.yield(a+b, a-b)
+           print("co-body", r, s)
+           return b, "end"
+     end)
+            
+     print("main", coroutine.resume(co, 1, 10))
+     print("main", coroutine.resume(co, "r"))
+     print("main", coroutine.resume(co, "x", "y"))
+     print("main", coroutine.resume(co, "x", "y"))
+

+When you run it, it produces the following output: + +

+     co-body 1       10
+     foo     2
+     
+     main    true    4
+     co-body r
+     main    true    11      -9
+     co-body x       y
+     main    true    10      end
+     main    false   cannot resume dead coroutine
+
+ + + + +

3 - The Application Program Interface

+ +

+ +This section describes the C API for Lua, that is, +the set of C functions available to the host program to communicate +with Lua. +All API functions and related types and constants +are declared in the header file lua.h. + + +

+Even when we use the term "function", +any facility in the API may be provided as a macro instead. +All such macros use each of their arguments exactly once +(except for the first argument, which is always a Lua state), +and so do not generate any hidden side-effects. + + +

+As in most C libraries, +the Lua API functions do not check their arguments for validity or consistency. +However, you can change this behavior by compiling Lua +with a proper definition for the macro luai_apicheck, +in file luaconf.h. + + + +

3.1 - The Stack

+ +

+Lua uses a virtual stack to pass values to and from C. +Each element in this stack represents a Lua value +(nil, number, string, etc.). + + +

+Whenever Lua calls C, the called function gets a new stack, +which is independent of previous stacks and of stacks of +C functions that are still active. +This stack initially contains any arguments to the C function +and it is where the C function pushes its results +to be returned to the caller (see lua_CFunction). + + +

+For convenience, +most query operations in the API do not follow a strict stack discipline. +Instead, they can refer to any element in the stack +by using an index: +A positive index represents an absolute stack position +(starting at 1); +a negative index represents an offset relative to the top of the stack. +More specifically, if the stack has n elements, +then index 1 represents the first element +(that is, the element that was pushed onto the stack first) +and +index n represents the last element; +index -1 also represents the last element +(that is, the element at the top) +and index -n represents the first element. +We say that an index is valid +if it lies between 1 and the stack top +(that is, if 1 ≤ abs(index) ≤ top). + + + + + + +

3.2 - Stack Size

+ +

+When you interact with Lua API, +you are responsible for ensuring consistency. +In particular, +you are responsible for controlling stack overflow. +You can use the function lua_checkstack +to grow the stack size. + + +

+Whenever Lua calls C, +it ensures that at least LUA_MINSTACK stack positions are available. +LUA_MINSTACK is defined as 20, +so that usually you do not have to worry about stack space +unless your code has loops pushing elements onto the stack. + + +

+Most query functions accept as indices any value inside the +available stack space, that is, indices up to the maximum stack size +you have set through lua_checkstack. +Such indices are called acceptable indices. +More formally, we define an acceptable index +as follows: + +

+     (index < 0 && abs(index) <= top) ||
+     (index > 0 && index <= stackspace)
+

+Note that 0 is never an acceptable index. + + + + + +

3.3 - Pseudo-Indices

+ +

+Unless otherwise noted, +any function that accepts valid indices can also be called with +pseudo-indices, +which represent some Lua values that are accessible to C code +but which are not in the stack. +Pseudo-indices are used to access the thread environment, +the function environment, +the registry, +and the upvalues of a C function (see §3.4). + + +

+The thread environment (where global variables live) is +always at pseudo-index LUA_GLOBALSINDEX. +The environment of the running C function is always +at pseudo-index LUA_ENVIRONINDEX. + + +

+To access and change the value of global variables, +you can use regular table operations over an environment table. +For instance, to access the value of a global variable, do + +

+     lua_getfield(L, LUA_GLOBALSINDEX, varname);
+
+ + + + +

3.4 - C Closures

+ +

+When a C function is created, +it is possible to associate some values with it, +thus creating a C closure; +these values are called upvalues and are +accessible to the function whenever it is called +(see lua_pushcclosure). + + +

+Whenever a C function is called, +its upvalues are located at specific pseudo-indices. +These pseudo-indices are produced by the macro +lua_upvalueindex. +The first value associated with a function is at position +lua_upvalueindex(1), and so on. +Any access to lua_upvalueindex(n), +where n is greater than the number of upvalues of the +current function, +produces an acceptable (but invalid) index. + + + + + +

3.5 - Registry

+ +

+Lua provides a registry, +a pre-defined table that can be used by any C code to +store whatever Lua value it needs to store. +This table is always located at pseudo-index +LUA_REGISTRYINDEX. +Any C library can store data into this table, +but it should take care to choose keys different from those used +by other libraries, to avoid collisions. +Typically, you should use as key a string containing your library name +or a light userdata with the address of a C object in your code. + + +

+The integer keys in the registry are used by the reference mechanism, +implemented by the auxiliary library, +and therefore should not be used for other purposes. + + + + + +

3.6 - Error Handling in C

+ +

+Internally, Lua uses the C longjmp facility to handle errors. +(You can also choose to use exceptions if you use C++; +see file luaconf.h.) +When Lua faces any error +(such as memory allocation errors, type errors, syntax errors, +and runtime errors) +it raises an error; +that is, it does a long jump. +A protected environment uses setjmp +to set a recover point; +any error jumps to the most recent active recover point. + + +

+Almost any function in the API may raise an error, +for instance due to a memory allocation error. +The following functions run in protected mode +(that is, they create a protected environment to run), +so they never raise an error: +lua_newstate, lua_close, lua_load, +lua_pcall, and lua_cpcall. + + +

+Inside a C function you can raise an error by calling lua_error. + + + + + +

3.7 - Functions and Types

+ +

+Here we list all functions and types from the C API in +alphabetical order. + + + +


lua_Alloc

+
typedef void * (*lua_Alloc) (void *ud,
+                             void *ptr,
+                             size_t osize,
+                             size_t nsize);
+ +

+The type of the memory-allocation function used by Lua states. +The allocator function must provide a +functionality similar to realloc, +but not exactly the same. +Its arguments are +ud, an opaque pointer passed to lua_newstate; +ptr, a pointer to the block being allocated/reallocated/freed; +osize, the original size of the block; +nsize, the new size of the block. +ptr is NULL if and only if osize is zero. +When nsize is zero, the allocator must return NULL; +if osize is not zero, +it should free the block pointed to by ptr. +When nsize is not zero, the allocator returns NULL +if and only if it cannot fill the request. +When nsize is not zero and osize is zero, +the allocator should behave like malloc. +When nsize and osize are not zero, +the allocator behaves like realloc. +Lua assumes that the allocator never fails when +osize >= nsize. + + +

+Here is a simple implementation for the allocator function. +It is used in the auxiliary library by luaL_newstate. + +

+     static void *l_alloc (void *ud, void *ptr, size_t osize,
+                                                size_t nsize) {
+       (void)ud;  (void)osize;  /* not used */
+       if (nsize == 0) {
+         free(ptr);
+         return NULL;
+       }
+       else
+         return realloc(ptr, nsize);
+     }
+

+This code assumes +that free(NULL) has no effect and that +realloc(NULL, size) is equivalent to malloc(size). +ANSI C ensures both behaviors. + + + + + +


lua_atpanic

+
lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf);
+ +

+Sets a new panic function and returns the old one. + + +

+If an error happens outside any protected environment, +Lua calls a panic function +and then calls exit(EXIT_FAILURE), +thus exiting the host application. +Your panic function may avoid this exit by +never returning (e.g., doing a long jump). + + +

+The panic function can access the error message at the top of the stack. + + + + + +


lua_call

+
void lua_call (lua_State *L, int nargs, int nresults);
+ +

+Calls a function. + + +

+To call a function you must use the following protocol: +first, the function to be called is pushed onto the stack; +then, the arguments to the function are pushed +in direct order; +that is, the first argument is pushed first. +Finally you call lua_call; +nargs is the number of arguments that you pushed onto the stack. +All arguments and the function value are popped from the stack +when the function is called. +The function results are pushed onto the stack when the function returns. +The number of results is adjusted to nresults, +unless nresults is LUA_MULTRET. +In this case, all results from the function are pushed. +Lua takes care that the returned values fit into the stack space. +The function results are pushed onto the stack in direct order +(the first result is pushed first), +so that after the call the last result is on the top of the stack. + + +

+Any error inside the called function is propagated upwards +(with a longjmp). + + +

+The following example shows how the host program may do the +equivalent to this Lua code: + +

+     a = f("how", t.x, 14)
+

+Here it is in C: + +

+     lua_getfield(L, LUA_GLOBALSINDEX, "f"); /* function to be called */
+     lua_pushstring(L, "how");                        /* 1st argument */
+     lua_getfield(L, LUA_GLOBALSINDEX, "t");   /* table to be indexed */
+     lua_getfield(L, -1, "x");        /* push result of t.x (2nd arg) */
+     lua_remove(L, -2);                  /* remove 't' from the stack */
+     lua_pushinteger(L, 14);                          /* 3rd argument */
+     lua_call(L, 3, 1);     /* call 'f' with 3 arguments and 1 result */
+     lua_setfield(L, LUA_GLOBALSINDEX, "a");        /* set global 'a' */
+

+Note that the code above is "balanced": +at its end, the stack is back to its original configuration. +This is considered good programming practice. + + + + + +


lua_CFunction

+
typedef int (*lua_CFunction) (lua_State *L);
+ +

+Type for C functions. + + +

+In order to communicate properly with Lua, +a C function must use the following protocol, +which defines the way parameters and results are passed: +a C function receives its arguments from Lua in its stack +in direct order (the first argument is pushed first). +So, when the function starts, +lua_gettop(L) returns the number of arguments received by the function. +The first argument (if any) is at index 1 +and its last argument is at index lua_gettop(L). +To return values to Lua, a C function just pushes them onto the stack, +in direct order (the first result is pushed first), +and returns the number of results. +Any other value in the stack below the results will be properly +discarded by Lua. +Like a Lua function, a C function called by Lua can also return +many results. + + +

+As an example, the following function receives a variable number +of numerical arguments and returns their average and sum: + +

+     static int foo (lua_State *L) {
+       int n = lua_gettop(L);    /* number of arguments */
+       lua_Number sum = 0;
+       int i;
+       for (i = 1; i <= n; i++) {
+         if (!lua_isnumber(L, i)) {
+           lua_pushstring(L, "incorrect argument");
+           lua_error(L);
+         }
+         sum += lua_tonumber(L, i);
+       }
+       lua_pushnumber(L, sum/n);        /* first result */
+       lua_pushnumber(L, sum);         /* second result */
+       return 2;                   /* number of results */
+     }
+
+ + + + +

lua_checkstack

+
int lua_checkstack (lua_State *L, int extra);
+ +

+Ensures that there are at least extra free stack slots in the stack. +It returns false if it cannot grow the stack to that size. +This function never shrinks the stack; +if the stack is already larger than the new size, +it is left unchanged. + + + + + +


lua_close

+
void lua_close (lua_State *L);
+ +

+Destroys all objects in the given Lua state +(calling the corresponding garbage-collection metamethods, if any) +and frees all dynamic memory used by this state. +On several platforms, you may not need to call this function, +because all resources are naturally released when the host program ends. +On the other hand, long-running programs, +such as a daemon or a web server, +might need to release states as soon as they are not needed, +to avoid growing too large. + + + + + +


lua_concat

+
void lua_concat (lua_State *L, int n);
+ +

+Concatenates the n values at the top of the stack, +pops them, and leaves the result at the top. +If n is 1, the result is the single string on the stack +(that is, the function does nothing); +if n is 0, the result is the empty string. +Concatenation is done following the usual semantics of Lua +(see §2.5.4). + + + + + +


lua_cpcall

+
int lua_cpcall (lua_State *L, lua_CFunction func, void *ud);
+ +

+Calls the C function func in protected mode. +func starts with only one element in its stack, +a light userdata containing ud. +In case of errors, +lua_cpcall returns the same error codes as lua_pcall, +plus the error object on the top of the stack; +otherwise, it returns zero, and does not change the stack. +All values returned by func are discarded. + + + + + +


lua_createtable

+
void lua_createtable (lua_State *L, int narr, int nrec);
+ +

+Creates a new empty table and pushes it onto the stack. +The new table has space pre-allocated +for narr array elements and nrec non-array elements. +This pre-allocation is useful when you know exactly how many elements +the table will have. +Otherwise you can use the function lua_newtable. + + + + + +


lua_dump

+
int lua_dump (lua_State *L, lua_Writer writer, void *data);
+ +

+Dumps a function as a binary chunk. +Receives a Lua function on the top of the stack +and produces a binary chunk that, +if loaded again, +results in a function equivalent to the one dumped. +As it produces parts of the chunk, +lua_dump calls function writer (see lua_Writer) +with the given data +to write them. + + +

+The value returned is the error code returned by the last +call to the writer; +0 means no errors. + + +

+This function does not pop the Lua function from the stack. + + + + + +


lua_equal

+
int lua_equal (lua_State *L, int index1, int index2);
+ +

+Returns 1 if the two values in acceptable indices index1 and +index2 are equal, +following the semantics of the Lua == operator +(that is, may call metamethods). +Otherwise returns 0. +Also returns 0 if any of the indices is non valid. + + + + + +


lua_error

+
int lua_error (lua_State *L);
+ +

+Generates a Lua error. +The error message (which can actually be a Lua value of any type) +must be on the stack top. +This function does a long jump, +and therefore never returns. +(see luaL_error). + + + + + +


lua_gc

+
int lua_gc (lua_State *L, int what, int data);
+ +

+Controls the garbage collector. + + +

+This function performs several tasks, +according to the value of the parameter what: + +

    + +
  • LUA_GCSTOP: +stops the garbage collector. +
  • + +
  • LUA_GCRESTART: +restarts the garbage collector. +
  • + +
  • LUA_GCCOLLECT: +performs a full garbage-collection cycle. +
  • + +
  • LUA_GCCOUNT: +returns the current amount of memory (in Kbytes) in use by Lua. +
  • + +
  • LUA_GCCOUNTB: +returns the remainder of dividing the current amount of bytes of +memory in use by Lua by 1024. +
  • + +
  • LUA_GCSTEP: +performs an incremental step of garbage collection. +The step "size" is controlled by data +(larger values mean more steps) in a non-specified way. +If you want to control the step size +you must experimentally tune the value of data. +The function returns 1 if the step finished a +garbage-collection cycle. +
  • + +
  • LUA_GCSETPAUSE: +sets data/100 as the new value +for the pause of the collector (see §2.10). +The function returns the previous value of the pause. +
  • + +
  • LUA_GCSETSTEPMUL: +sets data/100 as the new value for the step multiplier of +the collector (see §2.10). +The function returns the previous value of the step multiplier. +
  • + +
+ + + + +

lua_getallocf

+
lua_Alloc lua_getallocf (lua_State *L, void **ud);
+ +

+Returns the memory-allocation function of a given state. +If ud is not NULL, Lua stores in *ud the +opaque pointer passed to lua_newstate. + + + + + +


lua_getfenv

+
void lua_getfenv (lua_State *L, int index);
+ +

+Pushes onto the stack the environment table of +the value at the given index. + + + + + +


lua_getfield

+
void lua_getfield (lua_State *L, int index, const char *k);
+ +

+Pushes onto the stack the value t[k], +where t is the value at the given valid index index. +As in Lua, this function may trigger a metamethod +for the "index" event (see §2.8). + + + + + +


lua_getglobal

+
void lua_getglobal (lua_State *L, const char *name);
+ +

+Pushes onto the stack the value of the global name. +It is defined as a macro: + +

+     #define lua_getglobal(L,s)  lua_getfield(L, LUA_GLOBALSINDEX, s)
+
+ + + + +

lua_getmetatable

+
int lua_getmetatable (lua_State *L, int index);
+ +

+Pushes onto the stack the metatable of the value at the given +acceptable index. +If the index is not valid, +or if the value does not have a metatable, +the function returns 0 and pushes nothing on the stack. + + + + + +


lua_gettable

+
void lua_gettable (lua_State *L, int index);
+ +

+Pushes onto the stack the value t[k], +where t is the value at the given valid index index +and k is the value at the top of the stack. + + +

+This function pops the key from the stack +(putting the resulting value in its place). +As in Lua, this function may trigger a metamethod +for the "index" event (see §2.8). + + + + + +


lua_gettop

+
int lua_gettop (lua_State *L);
+ +

+Returns the index of the top element in the stack. +Because indices start at 1, +this result is equal to the number of elements in the stack +(and so 0 means an empty stack). + + + + + +


lua_insert

+
void lua_insert (lua_State *L, int index);
+ +

+Moves the top element into the given valid index, +shifting up the elements above this index to open space. +Cannot be called with a pseudo-index, +because a pseudo-index is not an actual stack position. + + + + + +


lua_Integer

+
typedef ptrdiff_t lua_Integer;
+ +

+The type used by the Lua API to represent integral values. + + +

+By default it is a ptrdiff_t, +which is usually the largest signed integral type the machine handles +"comfortably". + + + + + +


lua_isboolean

+
int lua_isboolean (lua_State *L, int index);
+ +

+Returns 1 if the value at the given acceptable index has type boolean, +and 0 otherwise. + + + + + +


lua_iscfunction

+
int lua_iscfunction (lua_State *L, int index);
+ +

+Returns 1 if the value at the given acceptable index is a C function, +and 0 otherwise. + + + + + +


lua_isfunction

+
int lua_isfunction (lua_State *L, int index);
+ +

+Returns 1 if the value at the given acceptable index is a function +(either C or Lua), and 0 otherwise. + + + + + +


lua_islightuserdata

+
int lua_islightuserdata (lua_State *L, int index);
+ +

+Returns 1 if the value at the given acceptable index is a light userdata, +and 0 otherwise. + + + + + +


lua_isnil

+
int lua_isnil (lua_State *L, int index);
+ +

+Returns 1 if the value at the given acceptable index is nil, +and 0 otherwise. + + + + + +


lua_isnone

+
int lua_isnone (lua_State *L, int index);
+ +

+Returns 1 if the the given acceptable index is not valid +(that is, it refers to an element outside the current stack), +and 0 otherwise. + + + + + +


lua_isnoneornil

+
int lua_isnoneornil (lua_State *L, int index);
+ +

+Returns 1 if the the given acceptable index is not valid +(that is, it refers to an element outside the current stack) +or if the value at this index is nil, +and 0 otherwise. + + + + + +


lua_isnumber

+
int lua_isnumber (lua_State *L, int index);
+ +

+Returns 1 if the value at the given acceptable index is a number +or a string convertible to a number, +and 0 otherwise. + + + + + +


lua_isstring

+
int lua_isstring (lua_State *L, int index);
+ +

+Returns 1 if the value at the given acceptable index is a string +or a number (which is always convertible to a string), +and 0 otherwise. + + + + + +


lua_istable

+
int lua_istable (lua_State *L, int index);
+ +

+Returns 1 if the value at the given acceptable index is a table, +and 0 otherwise. + + + + + +


lua_isthread

+
int lua_isthread (lua_State *L, int index);
+ +

+Returns 1 if the value at the given acceptable index is a thread, +and 0 otherwise. + + + + + +


lua_isuserdata

+
int lua_isuserdata (lua_State *L, int index);
+ +

+Returns 1 if the value at the given acceptable index is a userdata +(either full or light), and 0 otherwise. + + + + + +


lua_lessthan

+
int lua_lessthan (lua_State *L, int index1, int index2);
+ +

+Returns 1 if the value at acceptable index index1 is smaller +than the value at acceptable index index2, +following the semantics of the Lua < operator +(that is, may call metamethods). +Otherwise returns 0. +Also returns 0 if any of the indices is non valid. + + + + + +


lua_load

+
int lua_load (lua_State *L,
+              lua_Reader reader,
+              void *data,
+              const char *chunkname);
+ +

+Loads a Lua chunk. +If there are no errors, +lua_load pushes the compiled chunk as a Lua +function on top of the stack. +Otherwise, it pushes an error message. +The return values of lua_load are: + +

    + +
  • 0: no errors;
  • + +
  • LUA_ERRSYNTAX: +syntax error during pre-compilation;
  • + +
  • LUA_ERRMEM: +memory allocation error.
  • + +
+ +

+This function only loads a chunk; +it does not run it. + + +

+lua_load automatically detects whether the chunk is text or binary, +and loads it accordingly (see program luac). + + +

+The lua_load function uses a user-supplied reader function +to read the chunk (see lua_Reader). +The data argument is an opaque value passed to the reader function. + + +

+The chunkname argument gives a name to the chunk, +which is used for error messages and in debug information (see §3.8). + + + + + +


lua_newstate

+
lua_State *lua_newstate (lua_Alloc f, void *ud);
+ +

+Creates a new, independent state. +Returns NULL if cannot create the state +(due to lack of memory). +The argument f is the allocator function; +Lua does all memory allocation for this state through this function. +The second argument, ud, is an opaque pointer that Lua +simply passes to the allocator in every call. + + + + + +


lua_newtable

+
void lua_newtable (lua_State *L);
+ +

+Creates a new empty table and pushes it onto the stack. +It is equivalent to lua_createtable(L, 0, 0). + + + + + +


lua_newthread

+
lua_State *lua_newthread (lua_State *L);
+ +

+Creates a new thread, pushes it on the stack, +and returns a pointer to a lua_State that represents this new thread. +The new state returned by this function shares with the original state +all global objects (such as tables), +but has an independent execution stack. + + +

+There is no explicit function to close or to destroy a thread. +Threads are subject to garbage collection, +like any Lua object. + + + + + +


lua_newuserdata

+
void *lua_newuserdata (lua_State *L, size_t size);
+ +

+This function allocates a new block of memory with the given size, +pushes onto the stack a new full userdata with the block address, +and returns this address. + + +

+Userdata represent C values in Lua. +A full userdata represents a block of memory. +It is an object (like a table): +you must create it, it can have its own metatable, +and you can detect when it is being collected. +A full userdata is only equal to itself (under raw equality). + + +

+When Lua collects a full userdata with a gc metamethod, +Lua calls the metamethod and marks the userdata as finalized. +When this userdata is collected again then +Lua frees its corresponding memory. + + + + + +


lua_next

+
int lua_next (lua_State *L, int index);
+ +

+Pops a key from the stack, +and pushes a key-value pair from the table at the given index +(the "next" pair after the given key). +If there are no more elements in the table, +then lua_next returns 0 (and pushes nothing). + + +

+A typical traversal looks like this: + +

+     /* table is in the stack at index 't' */
+     lua_pushnil(L);  /* first key */
+     while (lua_next(L, t) != 0) {
+       /* uses 'key' (at index -2) and 'value' (at index -1) */
+       printf("%s - %s\n",
+              lua_typename(L, lua_type(L, -2)),
+              lua_typename(L, lua_type(L, -1)));
+       /* removes 'value'; keeps 'key' for next iteration */
+       lua_pop(L, 1);
+     }
+
+ +

+While traversing a table, +do not call lua_tolstring directly on a key, +unless you know that the key is actually a string. +Recall that lua_tolstring changes +the value at the given index; +this confuses the next call to lua_next. + + + + + +


lua_Number

+
typedef double lua_Number;
+ +

+The type of numbers in Lua. +By default, it is double, but that can be changed in luaconf.h. + + +

+Through the configuration file you can change +Lua to operate with another type for numbers (e.g., float or long). + + + + + +


lua_objlen

+
size_t lua_objlen (lua_State *L, int index);
+ +

+Returns the "length" of the value at the given acceptable index: +for strings, this is the string length; +for tables, this is the result of the length operator ('#'); +for userdata, this is the size of the block of memory allocated +for the userdata; +for other values, it is 0. + + + + + +


lua_pcall

+
int lua_pcall (lua_State *L, int nargs, int nresults, int errfunc);
+ +

+Calls a function in protected mode. + + +

+Both nargs and nresults have the same meaning as +in lua_call. +If there are no errors during the call, +lua_pcall behaves exactly like lua_call. +However, if there is any error, +lua_pcall catches it, +pushes a single value on the stack (the error message), +and returns an error code. +Like lua_call, +lua_pcall always removes the function +and its arguments from the stack. + + +

+If errfunc is 0, +then the error message returned on the stack +is exactly the original error message. +Otherwise, errfunc is the stack index of an +error handler function. +(In the current implementation, this index cannot be a pseudo-index.) +In case of runtime errors, +this function will be called with the error message +and its return value will be the message returned on the stack by lua_pcall. + + +

+Typically, the error handler function is used to add more debug +information to the error message, such as a stack traceback. +Such information cannot be gathered after the return of lua_pcall, +since by then the stack has unwound. + + +

+The lua_pcall function returns 0 in case of success +or one of the following error codes +(defined in lua.h): + +

    + +
  • LUA_ERRRUN: +a runtime error. +
  • + +
  • LUA_ERRMEM: +memory allocation error. +For such errors, Lua does not call the error handler function. +
  • + +
  • LUA_ERRERR: +error while running the error handler function. +
  • + +
+ + + + +

lua_pop

+
void lua_pop (lua_State *L, int n);
+ +

+Pops n elements from the stack. + + + + + +


lua_pushboolean

+
void lua_pushboolean (lua_State *L, int b);
+ +

+Pushes a boolean value with value b onto the stack. + + + + + +


lua_pushcclosure

+
void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n);
+ +

+Pushes a new C closure onto the stack. + + +

+When a C function is created, +it is possible to associate some values with it, +thus creating a C closure (see §3.4); +these values are then accessible to the function whenever it is called. +To associate values with a C function, +first these values should be pushed onto the stack +(when there are multiple values, the first value is pushed first). +Then lua_pushcclosure +is called to create and push the C function onto the stack, +with the argument n telling how many values should be +associated with the function. +lua_pushcclosure also pops these values from the stack. + + + + + +


lua_pushcfunction

+
void lua_pushcfunction (lua_State *L, lua_CFunction f);
+ +

+Pushes a C function onto the stack. +This function receives a pointer to a C function +and pushes onto the stack a Lua value of type function that, +when called, invokes the corresponding C function. + + +

+Any function to be registered in Lua must +follow the correct protocol to receive its parameters +and return its results (see lua_CFunction). + + +

+lua_pushcfunction is defined as a macro: + +

+     #define lua_pushcfunction(L,f)  lua_pushcclosure(L,f,0)
+
+ + + + +

lua_pushfstring

+
const char *lua_pushfstring (lua_State *L, const char *fmt, ...);
+ +

+Pushes onto the stack a formatted string +and returns a pointer to this string. +It is similar to the C function sprintf, +but has some important differences: + +

    + +
  • +You do not have to allocate space for the result: +the result is a Lua string and Lua takes care of memory allocation +(and deallocation, through garbage collection). +
  • + +
  • +The conversion specifiers are quite restricted. +There are no flags, widths, or precisions. +The conversion specifiers can only be +'%%' (inserts a '%' in the string), +'%s' (inserts a zero-terminated string, with no size restrictions), +'%f' (inserts a lua_Number), +'%p' (inserts a pointer as a hexadecimal numeral), +'%d' (inserts an int), and +'%c' (inserts an int as a character). +
  • + +
+ + + + +

lua_pushinteger

+
void lua_pushinteger (lua_State *L, lua_Integer n);
+ +

+Pushes a number with value n onto the stack. + + + + + +


lua_pushlightuserdata

+
void lua_pushlightuserdata (lua_State *L, void *p);
+ +

+Pushes a light userdata onto the stack. + + +

+Userdata represent C values in Lua. +A light userdata represents a pointer. +It is a value (like a number): +you do not create it, it has no individual metatable, +and it is not collected (as it was never created). +A light userdata is equal to "any" +light userdata with the same C address. + + + + + +


lua_pushlstring

+
void lua_pushlstring (lua_State *L, const char *s, size_t len);
+ +

+Pushes the string pointed to by s with size len +onto the stack. +Lua makes (or reuses) an internal copy of the given string, +so the memory at s can be freed or reused immediately after +the function returns. +The string can contain embedded zeros. + + + + + +


lua_pushnil

+
void lua_pushnil (lua_State *L);
+ +

+Pushes a nil value onto the stack. + + + + + +


lua_pushnumber

+
void lua_pushnumber (lua_State *L, lua_Number n);
+ +

+Pushes a number with value n onto the stack. + + + + + +


lua_pushstring

+
void lua_pushstring (lua_State *L, const char *s);
+ +

+Pushes the zero-terminated string pointed to by s +onto the stack. +Lua makes (or reuses) an internal copy of the given string, +so the memory at s can be freed or reused immediately after +the function returns. +The string cannot contain embedded zeros; +it is assumed to end at the first zero. + + + + + +


lua_pushthread

+
int lua_pushthread (lua_State *L);
+ +

+Pushes the thread represented by L onto the stack. +Returns 1 if this thread is the main thread of its state. + + + + + +


lua_pushvalue

+
void lua_pushvalue (lua_State *L, int index);
+ +

+Pushes a copy of the element at the given valid index +onto the stack. + + + + + +


lua_pushvfstring

+
const char *lua_pushvfstring (lua_State *L,
+                              const char *fmt,
+                              va_list argp);
+ +

+Equivalent to lua_pushfstring, except that it receives a va_list +instead of a variable number of arguments. + + + + + +


lua_rawequal

+
int lua_rawequal (lua_State *L, int index1, int index2);
+ +

+Returns 1 if the two values in acceptable indices index1 and +index2 are primitively equal +(that is, without calling metamethods). +Otherwise returns 0. +Also returns 0 if any of the indices are non valid. + + + + + +


lua_rawget

+
void lua_rawget (lua_State *L, int index);
+ +

+Similar to lua_gettable, but does a raw access +(i.e., without metamethods). + + + + + +


lua_rawgeti

+
void lua_rawgeti (lua_State *L, int index, int n);
+ +

+Pushes onto the stack the value t[n], +where t is the value at the given valid index index. +The access is raw; +that is, it does not invoke metamethods. + + + + + +


lua_rawset

+
void lua_rawset (lua_State *L, int index);
+ +

+Similar to lua_settable, but does a raw assignment +(i.e., without metamethods). + + + + + +


lua_rawseti

+
void lua_rawseti (lua_State *L, int index, int n);
+ +

+Does the equivalent of t[n] = v, +where t is the value at the given valid index index +and v is the value at the top of the stack, + + +

+This function pops the value from the stack. +The assignment is raw; +that is, it does not invoke metamethods. + + + + + +


lua_Reader

+
typedef const char * (*lua_Reader) (lua_State *L,
+                                    void *data,
+                                    size_t *size);
+ +

+The reader function used by lua_load. +Every time it needs another piece of the chunk, +lua_load calls the reader, +passing along its data parameter. +The reader must return a pointer to a block of memory +with a new piece of the chunk +and set size to the block size. +The block must exist until the reader function is called again. +To signal the end of the chunk, the reader must return NULL. +The reader function may return pieces of any size greater than zero. + + + + + +


lua_register

+
void lua_register (lua_State *L,
+                   const char *name,
+                   lua_CFunction f);
+ +

+Sets the C function f as the new value of global name. +It is defined as a macro: + +

+     #define lua_register(L,n,f) \
+            (lua_pushcfunction(L, f), lua_setglobal(L, n))
+
+ + + + +

lua_remove

+
void lua_remove (lua_State *L, int index);
+ +

+Removes the element at the given valid index, +shifting down the elements above this index to fill the gap. +Cannot be called with a pseudo-index, +because a pseudo-index is not an actual stack position. + + + + + +


lua_replace

+
void lua_replace (lua_State *L, int index);
+ +

+Moves the top element into the given position (and pops it), +without shifting any element +(therefore replacing the value at the given position). + + + + + +


lua_resume

+
int lua_resume (lua_State *L, int narg);
+ +

+Starts and resumes a coroutine in a given thread. + + +

+To start a coroutine, you first create a new thread +(see lua_newthread); +then you push onto its stack the main function plus any arguments; +then you call lua_resume, +with narg being the number of arguments. +This call returns when the coroutine suspends or finishes its execution. +When it returns, the stack contains all values passed to lua_yield, +or all values returned by the body function. +lua_resume returns +LUA_YIELD if the coroutine yields, +0 if the coroutine finishes its execution +without errors, +or an error code in case of errors (see lua_pcall). +In case of errors, +the stack is not unwound, +so you can use the debug API over it. +The error message is on the top of the stack. +To restart a coroutine, you put on its stack only the values to +be passed as results from yield, +and then call lua_resume. + + + + + +


lua_setallocf

+
void lua_setallocf (lua_State *L, lua_Alloc f, void *ud);
+ +

+Changes the allocator function of a given state to f +with user data ud. + + + + + +


lua_setfenv

+
int lua_setfenv (lua_State *L, int index);
+ +

+Pops a table from the stack and sets it as +the new environment for the value at the given index. +If the value at the given index is +neither a function nor a thread nor a userdata, +lua_setfenv returns 0. +Otherwise it returns 1. + + + + + +


lua_setfield

+
void lua_setfield (lua_State *L, int index, const char *k);
+ +

+Does the equivalent to t[k] = v, +where t is the value at the given valid index index +and v is the value at the top of the stack, + + +

+This function pops the value from the stack. +As in Lua, this function may trigger a metamethod +for the "newindex" event (see §2.8). + + + + + +


lua_setglobal

+
void lua_setglobal (lua_State *L, const char *name);
+ +

+Pops a value from the stack and +sets it as the new value of global name. +It is defined as a macro: + +

+     #define lua_setglobal(L,s)   lua_setfield(L, LUA_GLOBALSINDEX, s)
+
+ + + + +

lua_setmetatable

+
int lua_setmetatable (lua_State *L, int index);
+ +

+Pops a table from the stack and +sets it as the new metatable for the value at the given +acceptable index. + + + + + +


lua_settable

+
void lua_settable (lua_State *L, int index);
+ +

+Does the equivalent to t[k] = v, +where t is the value at the given valid index index, +v is the value at the top of the stack, +and k is the value just below the top. + + +

+This function pops both the key and the value from the stack. +As in Lua, this function may trigger a metamethod +for the "newindex" event (see §2.8). + + + + + +


lua_settop

+
void lua_settop (lua_State *L, int index);
+ +

+Accepts any acceptable index, or 0, +and sets the stack top to this index. +If the new top is larger than the old one, +then the new elements are filled with nil. +If index is 0, then all stack elements are removed. + + + + + +


lua_State

+
typedef struct lua_State lua_State;
+ +

+Opaque structure that keeps the whole state of a Lua interpreter. +The Lua library is fully reentrant: +it has no global variables. +All information about a state is kept in this structure. + + +

+A pointer to this state must be passed as the first argument to +every function in the library, except to lua_newstate, +which creates a Lua state from scratch. + + + + + +


lua_status

+
int lua_status (lua_State *L);
+ +

+Returns the status of the thread L. + + +

+The status can be 0 for a normal thread, +an error code if the thread finished its execution with an error, +or LUA_YIELD if the thread is suspended. + + + + + +


lua_toboolean

+
int lua_toboolean (lua_State *L, int index);
+ +

+Converts the Lua value at the given acceptable index to a C boolean +value (0 or 1). +Like all tests in Lua, +lua_toboolean returns 1 for any Lua value +different from false and nil; +otherwise it returns 0. +It also returns 0 when called with a non-valid index. +(If you want to accept only actual boolean values, +use lua_isboolean to test the value's type.) + + + + + +


lua_tocfunction

+
lua_CFunction lua_tocfunction (lua_State *L, int index);
+ +

+Converts a value at the given acceptable index to a C function. +That value must be a C function; +otherwise, returns NULL. + + + + + +


lua_tointeger

+
lua_Integer lua_tointeger (lua_State *L, int idx);
+ +

+Converts the Lua value at the given acceptable index +to the signed integral type lua_Integer. +The Lua value must be a number or a string convertible to a number +(see §2.2.1); +otherwise, lua_tointeger returns 0. + + +

+If the number is not an integer, +it is truncated in some non-specified way. + + + + + +


lua_tolstring

+
const char *lua_tolstring (lua_State *L, int index, size_t *len);
+ +

+Converts the Lua value at the given acceptable index to a C string. +If len is not NULL, +it also sets *len with the string length. +The Lua value must be a string or a number; +otherwise, the function returns NULL. +If the value is a number, +then lua_tolstring also +changes the actual value in the stack to a string. +(This change confuses lua_next +when lua_tolstring is applied to keys during a table traversal.) + + +

+lua_tolstring returns a fully aligned pointer +to a string inside the Lua state. +This string always has a zero ('\0') +after its last character (as in C), +but may contain other zeros in its body. +Because Lua has garbage collection, +there is no guarantee that the pointer returned by lua_tolstring +will be valid after the corresponding value is removed from the stack. + + + + + +


lua_tonumber

+
lua_Number lua_tonumber (lua_State *L, int index);
+ +

+Converts the Lua value at the given acceptable index +to the C type lua_Number (see lua_Number). +The Lua value must be a number or a string convertible to a number +(see §2.2.1); +otherwise, lua_tonumber returns 0. + + + + + +


lua_topointer

+
const void *lua_topointer (lua_State *L, int index);
+ +

+Converts the value at the given acceptable index to a generic +C pointer (void*). +The value may be a userdata, a table, a thread, or a function; +otherwise, lua_topointer returns NULL. +Different objects will give different pointers. +There is no way to convert the pointer back to its original value. + + +

+Typically this function is used only for debug information. + + + + + +


lua_tostring

+
const char *lua_tostring (lua_State *L, int index);
+ +

+Equivalent to lua_tolstring with len equal to NULL. + + + + + +


lua_tothread

+
lua_State *lua_tothread (lua_State *L, int index);
+ +

+Converts the value at the given acceptable index to a Lua thread +(represented as lua_State*). +This value must be a thread; +otherwise, the function returns NULL. + + + + + +


lua_touserdata

+
void *lua_touserdata (lua_State *L, int index);
+ +

+If the value at the given acceptable index is a full userdata, +returns its block address. +If the value is a light userdata, +returns its pointer. +Otherwise, returns NULL. + + + + + +


lua_type

+
int lua_type (lua_State *L, int index);
+ +

+Returns the type of the value in the given acceptable index, +or LUA_TNONE for a non-valid index +(that is, an index to an "empty" stack position). +The types returned by lua_type are coded by the following constants +defined in lua.h: +LUA_TNIL, +LUA_TNUMBER, +LUA_TBOOLEAN, +LUA_TSTRING, +LUA_TTABLE, +LUA_TFUNCTION, +LUA_TUSERDATA, +LUA_TTHREAD, +and +LUA_TLIGHTUSERDATA. + + + + + +


lua_typename

+
const char *lua_typename  (lua_State *L, int tp);
+ +

+Returns the name of the type encoded by the value tp, +which must be one the values returned by lua_type. + + + + + +


lua_Writer

+
typedef int (*lua_Writer) (lua_State *L,
+                           const void* p,
+                           size_t sz,
+                           void* ud);
+ +

+The writer function used by lua_dump. +Every time it produces another piece of chunk, +lua_dump calls the writer, +passing along the buffer to be written (p), +its size (sz), +and the data parameter supplied to lua_dump. + + +

+The writer returns an error code: +0 means no errors; +any other value means an error and stops lua_dump from +calling the writer again. + + + + + +


lua_xmove

+
void lua_xmove (lua_State *from, lua_State *to, int n);
+ +

+Exchange values between different threads of the same global state. + + +

+This function pops n values from the stack from, +and pushes them onto the stack to. + + + + + +


lua_yield

+
int lua_yield  (lua_State *L, int nresults);
+ +

+Yields a coroutine. + + +

+This function should only be called as the +return expression of a C function, as follows: + +

+     return lua_yield (L, nresults);
+

+When a C function calls lua_yield in that way, +the running coroutine suspends its execution, +and the call to lua_resume that started this coroutine returns. +The parameter nresults is the number of values from the stack +that are passed as results to lua_resume. + + + + + + + +

3.8 - The Debug Interface

+ +

+Lua has no built-in debugging facilities. +Instead, it offers a special interface +by means of functions and hooks. +This interface allows the construction of different +kinds of debuggers, profilers, and other tools +that need "inside information" from the interpreter. + + + +


lua_Debug

+
typedef struct lua_Debug {
+  int event;
+  const char *name;           /* (n) */
+  const char *namewhat;       /* (n) */
+  const char *what;           /* (S) */
+  const char *source;         /* (S) */
+  int currentline;            /* (l) */
+  int nups;                   /* (u) number of upvalues */
+  int linedefined;            /* (S) */
+  int lastlinedefined;        /* (S) */
+  char short_src[LUA_IDSIZE]; /* (S) */
+  /* private part */
+  other fields
+} lua_Debug;
+ +

+A structure used to carry different pieces of +information about an active function. +lua_getstack fills only the private part +of this structure, for later use. +To fill the other fields of lua_Debug with useful information, +call lua_getinfo. + + +

+The fields of lua_Debug have the following meaning: + +

    + +
  • source: +If the function was defined in a string, +then source is that string. +If the function was defined in a file, +then source starts with a '@' followed by the file name. +
  • + +
  • short_src: +a "printable" version of source, to be used in error messages. +
  • + +
  • linedefined: +the line number where the definition of the function starts. +
  • + +
  • lastlinedefined: +the line number where the definition of the function ends. +
  • + +
  • what: +the string "Lua" if the function is a Lua function, +"C" if it is a C function, +"main" if it is the main part of a chunk, +and "tail" if it was a function that did a tail call. +In the latter case, +Lua has no other information about the function. +
  • + +
  • currentline: +the current line where the given function is executing. +When no line information is available, +currentline is set to -1. +
  • + +
  • name: +a reasonable name for the given function. +Because functions in Lua are first-class values, +they do not have a fixed name: +some functions may be the value of multiple global variables, +while others may be stored only in a table field. +The lua_getinfo function checks how the function was +called to find a suitable name. +If it cannot find a name, +then name is set to NULL. +
  • + +
  • namewhat: +explains the name field. +The value of namewhat can be +"global", "local", "method", +"field", "upvalue", or "" (the empty string), +according to how the function was called. +(Lua uses the empty string when no other option seems to apply.) +
  • + +
  • nups: +the number of upvalues of the function. +
  • + +
+ + + + +

lua_gethook

+
lua_Hook lua_gethook (lua_State *L);
+ +

+Returns the current hook function. + + + + + +


lua_gethookcount

+
int lua_gethookcount (lua_State *L);
+ +

+Returns the current hook count. + + + + + +


lua_gethookmask

+
int lua_gethookmask (lua_State *L);
+ +

+Returns the current hook mask. + + + + + +


lua_getinfo

+
int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar);
+ +

+Returns information about a specific function or function invocation. + + +

+To get information about a function invocation, +the parameter ar must be a valid activation record that was +filled by a previous call to lua_getstack or +given as argument to a hook (see lua_Hook). + + +

+To get information about a function you push it onto the stack +and start the what string with the character '>'. +(In that case, +lua_getinfo pops the function in the top of the stack.) +For instance, to know in which line a function f was defined, +you can write the following code: + +

+     lua_Debug ar;
+     lua_getfield(L, LUA_GLOBALSINDEX, "f");  /* get global 'f' */
+     lua_getinfo(L, ">S", &ar);
+     printf("%d\n", ar.linedefined);
+
+ +

+Each character in the string what +selects some fields of the structure ar to be filled or +a value to be pushed on the stack: + +

    + +
  • 'n': fills in the field name and namewhat; +
  • + +
  • 'S': +fills in the fields source, short_src, +linedefined, lastlinedefined, and what; +
  • + +
  • 'l': fills in the field currentline; +
  • + +
  • 'u': fills in the field nups; +
  • + +
  • 'f': +pushes onto the stack the function that is +running at the given level; +
  • + +
  • 'L': +pushes onto the stack a table whose indices are the +numbers of the lines that are valid on the function. +(A valid line is a line with some associated code, +that is, a line where you can put a break point. +Non-valid lines include empty lines and comments.) +
  • + +
+ +

+This function returns 0 on error +(for instance, an invalid option in what). + + + + + +


lua_getlocal

+
const char *lua_getlocal (lua_State *L, lua_Debug *ar, int n);
+ +

+Gets information about a local variable of a given activation record. +The parameter ar must be a valid activation record that was +filled by a previous call to lua_getstack or +given as argument to a hook (see lua_Hook). +The index n selects which local variable to inspect +(1 is the first parameter or active local variable, and so on, +until the last active local variable). +lua_getlocal pushes the variable's value onto the stack +and returns its name. + + +

+Variable names starting with '(' (open parentheses) +represent internal variables +(loop control variables, temporaries, and C function locals). + + +

+Returns NULL (and pushes nothing) +when the index is greater than +the number of active local variables. + + + + + +


lua_getstack

+
int lua_getstack (lua_State *L, int level, lua_Debug *ar);
+ +

+Get information about the interpreter runtime stack. + + +

+This function fills parts of a lua_Debug structure with +an identification of the activation record +of the function executing at a given level. +Level 0 is the current running function, +whereas level n+1 is the function that has called level n. +When there are no errors, lua_getstack returns 1; +when called with a level greater than the stack depth, +it returns 0. + + + + + +


lua_getupvalue

+
const char *lua_getupvalue (lua_State *L, int funcindex, int n);
+ +

+Gets information about a closure's upvalue. +(For Lua functions, +upvalues are the external local variables that the function uses, +and that are consequently included in its closure.) +lua_getupvalue gets the index n of an upvalue, +pushes the upvalue's value onto the stack, +and returns its name. +funcindex points to the closure in the stack. +(Upvalues have no particular order, +as they are active through the whole function. +So, they are numbered in an arbitrary order.) + + +

+Returns NULL (and pushes nothing) +when the index is greater than the number of upvalues. +For C functions, this function uses the empty string "" +as a name for all upvalues. + + + + + +


lua_Hook

+
typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);
+ +

+Type for debugging hook functions. + + +

+Whenever a hook is called, its ar argument has its field +event set to the specific event that triggered the hook. +Lua identifies these events with the following constants: +LUA_HOOKCALL, LUA_HOOKRET, +LUA_HOOKTAILRET, LUA_HOOKLINE, +and LUA_HOOKCOUNT. +Moreover, for line events, the field currentline is also set. +To get the value of any other field in ar, +the hook must call lua_getinfo. +For return events, event may be LUA_HOOKRET, +the normal value, or LUA_HOOKTAILRET. +In the latter case, Lua is simulating a return from +a function that did a tail call; +in this case, it is useless to call lua_getinfo. + + +

+While Lua is running a hook, it disables other calls to hooks. +Therefore, if a hook calls back Lua to execute a function or a chunk, +this execution occurs without any calls to hooks. + + + + + +


lua_sethook

+
int lua_sethook (lua_State *L, lua_Hook f, int mask, int count);
+ +

+Sets the debugging hook function. + + +

+Argument f is the hook function. +mask specifies on which events the hook will be called: +it is formed by a bitwise or of the constants +LUA_MASKCALL, +LUA_MASKRET, +LUA_MASKLINE, +and LUA_MASKCOUNT. +The count argument is only meaningful when the mask +includes LUA_MASKCOUNT. +For each event, the hook is called as explained below: + +

    + +
  • The call hook: is called when the interpreter calls a function. +The hook is called just after Lua enters the new function, +before the function gets its arguments. +
  • + +
  • The return hook: is called when the interpreter returns from a function. +The hook is called just before Lua leaves the function. +You have no access to the values to be returned by the function. +
  • + +
  • The line hook: is called when the interpreter is about to +start the execution of a new line of code, +or when it jumps back in the code (even to the same line). +(This event only happens while Lua is executing a Lua function.) +
  • + +
  • The count hook: is called after the interpreter executes every +count instructions. +(This event only happens while Lua is executing a Lua function.) +
  • + +
+ +

+A hook is disabled by setting mask to zero. + + + + + +


lua_setlocal

+
const char *lua_setlocal (lua_State *L, lua_Debug *ar, int n);
+ +

+Sets the value of a local variable of a given activation record. +Parameters ar and n are as in lua_getlocal +(see lua_getlocal). +lua_setlocal assigns the value at the top of the stack +to the variable and returns its name. +It also pops the value from the stack. + + +

+Returns NULL (and pops nothing) +when the index is greater than +the number of active local variables. + + + + + +


lua_setupvalue

+
const char *lua_setupvalue (lua_State *L, int funcindex, int n);
+ +

+Sets the value of a closure's upvalue. +It assigns the value at the top of the stack +to the upvalue and returns its name. +It also pops the value from the stack. +Parameters funcindex and n are as in the lua_getupvalue +(see lua_getupvalue). + + +

+Returns NULL (and pops nothing) +when the index is greater than the number of upvalues. + + + + + + + +

4 - The Auxiliary Library

+ +

+ +The auxiliary library provides several convenient functions +to interface C with Lua. +While the basic API provides the primitive functions for all +interactions between C and Lua, +the auxiliary library provides higher-level functions for some +common tasks. + + +

+All functions from the auxiliary library +are defined in header file lauxlib.h and +have a prefix luaL_. + + +

+All functions in the auxiliary library are built on +top of the basic API, +and so they provide nothing that cannot be done with this API. + + +

+Several functions in the auxiliary library are used to +check C function arguments. +Their names are always luaL_check* or luaL_opt*. +All of these functions raise an error if the check is not satisfied. +Because the error message is formatted for arguments +(e.g., "bad argument #1"), +you should not use these functions for other stack values. + + + +

4.1 - Functions and Types

+ +

+Here we list all functions and types from the auxiliary library +in alphabetical order. + + + +


luaL_addchar

+
void luaL_addchar (luaL_Buffer *B, char c);
+ +

+Adds the character c to the buffer B +(see luaL_Buffer). + + + + + +


luaL_addlstring

+
void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l);
+ +

+Adds the string pointed to by s with length l to +the buffer B +(see luaL_Buffer). +The string may contain embedded zeros. + + + + + +


luaL_addsize

+
void luaL_addsize (luaL_Buffer *B, size_t n);
+ +

+Adds to the buffer B (see luaL_Buffer) +a string of length n previously copied to the +buffer area (see luaL_prepbuffer). + + + + + +


luaL_addstring

+
void luaL_addstring (luaL_Buffer *B, const char *s);
+ +

+Adds the zero-terminated string pointed to by s +to the buffer B +(see luaL_Buffer). +The string may not contain embedded zeros. + + + + + +


luaL_addvalue

+
void luaL_addvalue (luaL_Buffer *B);
+ +

+Adds the value at the top of the stack +to the buffer B +(see luaL_Buffer). +Pops the value. + + +

+This is the only function on string buffers that can (and must) +be called with an extra element on the stack, +which is the value to be added to the buffer. + + + + + +


luaL_argcheck

+
void luaL_argcheck (lua_State *L,
+                    int cond,
+                    int narg,
+                    const char *extramsg);
+ +

+Checks whether cond is true. +If not, raises an error with the following message, +where func is retrieved from the call stack: + +

+     bad argument #<narg> to <func> (<extramsg>)
+
+ + + + +

luaL_argerror

+
int luaL_argerror (lua_State *L, int narg, const char *extramsg);
+ +

+Raises an error with the following message, +where func is retrieved from the call stack: + +

+     bad argument #<narg> to <func> (<extramsg>)
+
+ +

+This function never returns, +but it is an idiom to use it in C functions +as return luaL_argerror(args). + + + + + +


luaL_Buffer

+
typedef struct luaL_Buffer luaL_Buffer;
+ +

+Type for a string buffer. + + +

+A string buffer allows C code to build Lua strings piecemeal. +Its pattern of use is as follows: + +

    + +
  • First you declare a variable b of type luaL_Buffer.
  • + +
  • Then you initialize it with a call luaL_buffinit(L, &b).
  • + +
  • +Then you add string pieces to the buffer calling any of +the luaL_add* functions. +
  • + +
  • +You finish by calling luaL_pushresult(&b). +This call leaves the final string on the top of the stack. +
  • + +
+ +

+During its normal operation, +a string buffer uses a variable number of stack slots. +So, while using a buffer, you cannot assume that you know where +the top of the stack is. +You can use the stack between successive calls to buffer operations +as long as that use is balanced; +that is, +when you call a buffer operation, +the stack is at the same level +it was immediately after the previous buffer operation. +(The only exception to this rule is luaL_addvalue.) +After calling luaL_pushresult the stack is back to its +level when the buffer was initialized, +plus the final string on its top. + + + + + +


luaL_buffinit

+
void luaL_buffinit (lua_State *L, luaL_Buffer *B);
+ +

+Initializes a buffer B. +This function does not allocate any space; +the buffer must be declared as a variable +(see luaL_Buffer). + + + + + +


luaL_callmeta

+
int luaL_callmeta (lua_State *L, int obj, const char *e);
+ +

+Calls a metamethod. + + +

+If the object at index obj has a metatable and this +metatable has a field e, +this function calls this field and passes the object as its only argument. +In this case this function returns 1 and pushes onto the +stack the value returned by the call. +If there is no metatable or no metamethod, +this function returns 0 (without pushing any value on the stack). + + + + + +


luaL_checkany

+
void luaL_checkany (lua_State *L, int narg);
+ +

+Checks whether the function has an argument +of any type (including nil) at position narg. + + + + + +


luaL_checkint

+
int luaL_checkint (lua_State *L, int narg);
+ +

+Checks whether the function argument narg is a number +and returns this number cast to an int. + + + + + +


luaL_checkinteger

+
lua_Integer luaL_checkinteger (lua_State *L, int narg);
+ +

+Checks whether the function argument narg is a number +and returns this number cast to a lua_Integer. + + + + + +


luaL_checklong

+
long luaL_checklong (lua_State *L, int narg);
+ +

+Checks whether the function argument narg is a number +and returns this number cast to a long. + + + + + +


luaL_checklstring

+
const char *luaL_checklstring (lua_State *L, int narg, size_t *l);
+ +

+Checks whether the function argument narg is a string +and returns this string; +if l is not NULL fills *l +with the string's length. + + + + + +


luaL_checknumber

+
lua_Number luaL_checknumber (lua_State *L, int narg);
+ +

+Checks whether the function argument narg is a number +and returns this number. + + + + + +


luaL_checkoption

+
int luaL_checkoption (lua_State *L,
+                      int narg,
+                      const char *def,
+                      const char *const lst[]);
+ +

+Checks whether the function argument narg is a string and +searches for this string in the array lst +(which must be NULL-terminated). +Returns the index in the array where the string was found. +Raises an error if the argument is not a string or +if the string cannot be found. + + +

+If def is not NULL, +the function uses def as a default value when +there is no argument narg or if this argument is nil. + + +

+This is a useful function for mapping strings to C enums. +(The usual convention in Lua libraries is +to use strings instead of numbers to select options.) + + + + + +


luaL_checkstack

+
void luaL_checkstack (lua_State *L, int sz, const char *msg);
+ +

+Grows the stack size to top + sz elements, +raising an error if the stack cannot grow to that size. +msg is an additional text to go into the error message. + + + + + +


luaL_checkstring

+
const char *luaL_checkstring (lua_State *L, int narg);
+ +

+Checks whether the function argument narg is a string +and returns this string. + + + + + +


luaL_checktype

+
void luaL_checktype (lua_State *L, int narg, int t);
+ +

+Checks whether the function argument narg has type t. + + + + + +


luaL_checkudata

+
void *luaL_checkudata (lua_State *L, int narg, const char *tname);
+ +

+Checks whether the function argument narg is a userdata +of the type tname (see luaL_newmetatable). + + + + + +


luaL_dofile

+
int luaL_dofile (lua_State *L, const char *filename);
+ +

+Loads and runs the given file. +It is defined as the following macro: + +

+     (luaL_loadfile(L, filename) || lua_pcall(L, 0, LUA_MULTRET, 0))
+

+It returns 0 if there are no errors +or 1 in case of errors. + + + + + +


luaL_dostring

+
int luaL_dostring (lua_State *L, const char *str);
+ +

+Loads and runs the given string. +It is defined as the following macro: + +

+     (luaL_loadstring(L, str) || lua_pcall(L, 0, LUA_MULTRET, 0))
+

+It returns 0 if there are no errors +or 1 in case of errors. + + + + + +


luaL_error

+
int luaL_error (lua_State *L, const char *fmt, ...);
+ +

+Raises an error. +The error message format is given by fmt +plus any extra arguments, +following the same rules of lua_pushfstring. +It also adds at the beginning of the message the file name and +the line number where the error occurred, +if this information is available. + + +

+This function never returns, +but it is an idiom to use it in C functions +as return luaL_error(args). + + + + + +


luaL_getmetafield

+
int luaL_getmetafield (lua_State *L, int obj, const char *e);
+ +

+Pushes onto the stack the field e from the metatable +of the object at index obj. +If the object does not have a metatable, +or if the metatable does not have this field, +returns 0 and pushes nothing. + + + + + +


luaL_getmetatable

+
void luaL_getmetatable (lua_State *L, const char *tname);
+ +

+Pushes onto the stack the metatable associated with name tname +in the registry (see luaL_newmetatable). + + + + + +


luaL_gsub

+
const char *luaL_gsub (lua_State *L,
+                       const char *s,
+                       const char *p,
+                       const char *r);
+ +

+Creates a copy of string s by replacing +any occurrence of the string p +with the string r. +Pushes the resulting string on the stack and returns it. + + + + + +


luaL_loadbuffer

+
int luaL_loadbuffer (lua_State *L,
+                     const char *buff,
+                     size_t sz,
+                     const char *name);
+ +

+Loads a buffer as a Lua chunk. +This function uses lua_load to load the chunk in the +buffer pointed to by buff with size sz. + + +

+This function returns the same results as lua_load. +name is the chunk name, +used for debug information and error messages. + + + + + +


luaL_loadfile

+
int luaL_loadfile (lua_State *L, const char *filename);
+ +

+Loads a file as a Lua chunk. +This function uses lua_load to load the chunk in the file +named filename. +If filename is NULL, +then it loads from the standard input. +The first line in the file is ignored if it starts with a #. + + +

+This function returns the same results as lua_load, +but it has an extra error code LUA_ERRFILE +if it cannot open/read the file. + + +

+As lua_load, this function only loads the chunk; +it does not run it. + + + + + +


luaL_loadstring

+
int luaL_loadstring (lua_State *L, const char *s);
+ +

+Loads a string as a Lua chunk. +This function uses lua_load to load the chunk in +the zero-terminated string s. + + +

+This function returns the same results as lua_load. + + +

+Also as lua_load, this function only loads the chunk; +it does not run it. + + + + + +


luaL_newmetatable

+
int luaL_newmetatable (lua_State *L, const char *tname);
+ +

+If the registry already has the key tname, +returns 0. +Otherwise, +creates a new table to be used as a metatable for userdata, +adds it to the registry with key tname, +and returns 1. + + +

+In both cases pushes onto the stack the final value associated +with tname in the registry. + + + + + +


luaL_newstate

+
lua_State *luaL_newstate (void);
+ +

+Creates a new Lua state. +It calls lua_newstate with an +allocator based on the standard C realloc function +and then sets a panic function (see lua_atpanic) that prints +an error message to the standard error output in case of fatal +errors. + + +

+Returns the new state, +or NULL if there is a memory allocation error. + + + + + +


luaL_openlibs

+
void luaL_openlibs (lua_State *L);
+ +

+Opens all standard Lua libraries into the given state. + + + + + +


luaL_optint

+
int luaL_optint (lua_State *L, int narg, int d);
+ +

+If the function argument narg is a number, +returns this number cast to an int. +If this argument is absent or is nil, +returns d. +Otherwise, raises an error. + + + + + +


luaL_optinteger

+
lua_Integer luaL_optinteger (lua_State *L,
+                             int narg,
+                             lua_Integer d);
+ +

+If the function argument narg is a number, +returns this number cast to a lua_Integer. +If this argument is absent or is nil, +returns d. +Otherwise, raises an error. + + + + + +


luaL_optlong

+
long luaL_optlong (lua_State *L, int narg, long d);
+ +

+If the function argument narg is a number, +returns this number cast to a long. +If this argument is absent or is nil, +returns d. +Otherwise, raises an error. + + + + + +


luaL_optlstring

+
const char *luaL_optlstring (lua_State *L,
+                             int narg,
+                             const char *d,
+                             size_t *l);
+ +

+If the function argument narg is a string, +returns this string. +If this argument is absent or is nil, +returns d. +Otherwise, raises an error. + + +

+If l is not NULL, +fills the position *l with the results's length. + + + + + +


luaL_optnumber

+
lua_Number luaL_optnumber (lua_State *L, int narg, lua_Number d);
+ +

+If the function argument narg is a number, +returns this number. +If this argument is absent or is nil, +returns d. +Otherwise, raises an error. + + + + + +


luaL_optstring

+
const char *luaL_optstring (lua_State *L,
+                            int narg,
+                            const char *d);
+ +

+If the function argument narg is a string, +returns this string. +If this argument is absent or is nil, +returns d. +Otherwise, raises an error. + + + + + +


luaL_prepbuffer

+
char *luaL_prepbuffer (luaL_Buffer *B);
+ +

+Returns an address to a space of size LUAL_BUFFERSIZE +where you can copy a string to be added to buffer B +(see luaL_Buffer). +After copying the string into this space you must call +luaL_addsize with the size of the string to actually add +it to the buffer. + + + + + +


luaL_pushresult

+
void luaL_pushresult (luaL_Buffer *B);
+ +

+Finishes the use of buffer B leaving the final string on +the top of the stack. + + + + + +


luaL_ref

+
int luaL_ref (lua_State *L, int t);
+ +

+Creates and returns a reference, +in the table at index t, +for the object at the top of the stack (and pops the object). + + +

+A reference is a unique integer key. +As long as you do not manually add integer keys into table t, +luaL_ref ensures the uniqueness of the key it returns. +You can retrieve an object referred by reference r +by calling lua_rawgeti(L, t, r). +Function luaL_unref frees a reference and its associated object. + + +

+If the object at the top of the stack is nil, +luaL_ref returns the constant LUA_REFNIL. +The constant LUA_NOREF is guaranteed to be different +from any reference returned by luaL_ref. + + + + + +


luaL_Reg

+
typedef struct luaL_Reg {
+  const char *name;
+  lua_CFunction func;
+} luaL_Reg;
+ +

+Type for arrays of functions to be registered by +luaL_register. +name is the function name and func is a pointer to +the function. +Any array of luaL_Reg must end with an sentinel entry +in which both name and func are NULL. + + + + + +


luaL_register

+
void luaL_register (lua_State *L,
+                    const char *libname,
+                    const luaL_Reg *l);
+ +

+Opens a library. + + +

+When called with libname equal to NULL, +it simply registers all functions in the list l +(see luaL_Reg) into the table on the top of the stack. + + +

+When called with a non-null libname, +luaL_register creates a new table t, +sets it as the value of the global variable libname, +sets it as the value of package.loaded[libname], +and registers on it all functions in the list l. +If there is a table in package.loaded[libname] or in +variable libname, +reuses this table instead of creating a new one. + + +

+In any case the function leaves the table +on the top of the stack. + + + + + +


luaL_typename

+
const char *luaL_typename (lua_State *L, int idx);
+ +

+Returns the name of the type of the value at index idx. + + + + + +


luaL_typerror

+
int luaL_typerror (lua_State *L, int narg, const char *tname);
+ +

+Generates an error with a message like the following: + +

+     location: bad argument narg to 'func' (tname expected, got rt)
+

+where location is produced by luaL_where, +func is the name of the current function, +and rt is the type name of the actual argument. + + + + + +


luaL_unref

+
void luaL_unref (lua_State *L, int t, int ref);
+ +

+Releases reference ref from the table at index t +(see luaL_ref). +The entry is removed from the table, +so that the referred object can be collected. +The reference ref is also freed to be used again. + + +

+If ref is LUA_NOREF or LUA_REFNIL, +luaL_unref does nothing. + + + + + +


luaL_where

+
void luaL_where (lua_State *L, int lvl);
+ +

+Pushes onto the stack a string identifying the current position +of the control at level lvl in the call stack. +Typically this string has the following format: + +

+     chunkname:currentline:
+

+Level 0 is the running function, +level 1 is the function that called the running function, +etc. + + +

+This function is used to build a prefix for error messages. + + + + + + + +

5 - Standard Libraries

+ +

+The standard Lua libraries provide useful functions +that are implemented directly through the C API. +Some of these functions provide essential services to the language +(e.g., type and getmetatable); +others provide access to "outside" services (e.g., I/O); +and others could be implemented in Lua itself, +but are quite useful or have critical performance requirements that +deserve an implementation in C (e.g., sort). + + +

+All libraries are implemented through the official C API +and are provided as separate C modules. +Currently, Lua has the following standard libraries: + +

    + +
  • basic library;
  • + +
  • package library;
  • + +
  • string manipulation;
  • + +
  • table manipulation;
  • + +
  • mathematical functions (sin, log, etc.);
  • + +
  • input and output;
  • + +
  • operating system facilities;
  • + +
  • debug facilities.
  • + +

+Except for the basic and package libraries, +each library provides all its functions as fields of a global table +or as methods of its objects. + + +

+To have access to these libraries, +the C host program should call the luaL_openlibs function, +which opens all standard libraries. +Alternatively, +it can open them individually by calling +luaopen_base (for the basic library), +luaopen_package (for the package library), +luaopen_string (for the string library), +luaopen_table (for the table library), +luaopen_math (for the mathematical library), +luaopen_io (for the I/O and the Operating System libraries), +and luaopen_debug (for the debug library). +These functions are declared in lualib.h +and should not be called directly: +you must call them like any other Lua C function, +e.g., by using lua_call. + + + +

5.1 - Basic Functions

+ +

+The basic library provides some core functions to Lua. +If you do not include this library in your application, +you should check carefully whether you need to provide +implementations for some of its facilities. + + +

+


assert (v [, message])

+Issues an error when +the value of its argument v is false (i.e., nil or false); +otherwise, returns all its arguments. +message is an error message; +when absent, it defaults to "assertion failed!" + + + + +

+


collectgarbage (opt [, arg])

+ + +

+This function is a generic interface to the garbage collector. +It performs different functions according to its first argument, opt: + +

    + +
  • "stop": +stops the garbage collector. +
  • + +
  • "restart": +restarts the garbage collector. +
  • + +
  • "collect": +performs a full garbage-collection cycle. +
  • + +
  • "count": +returns the total memory in use by Lua (in Kbytes). +
  • + +
  • "step": +performs a garbage-collection step. +The step "size" is controlled by arg +(larger values mean more steps) in a non-specified way. +If you want to control the step size +you must experimentally tune the value of arg. +Returns true if the step finished a collection cycle. +
  • + +
  • "setpause": +sets arg/100 as the new value for the pause of +the collector (see §2.10). +
  • + +
  • "setstepmul": +sets arg/100 as the new value for the step multiplier of +the collector (see §2.10). +
  • + +
+ + + +

+


dofile (filename)

+Opens the named file and executes its contents as a Lua chunk. +When called without arguments, +dofile executes the contents of the standard input (stdin). +Returns all values returned by the chunk. +In case of errors, dofile propagates the error +to its caller (that is, dofile does not run in protected mode). + + + + +

+


error (message [, level])

+Terminates the last protected function called +and returns message as the error message. +Function error never returns. + + +

+Usually, error adds some information about the error position +at the beginning of the message. +The level argument specifies how to get the error position. +With level 1 (the default), the error position is where the +error function was called. +Level 2 points the error to where the function +that called error was called; and so on. +Passing a level 0 avoids the addition of error position information +to the message. + + + + +

+


_G

+A global variable (not a function) that +holds the global environment (that is, _G._G = _G). +Lua itself does not use this variable; +changing its value does not affect any environment, +nor vice-versa. +(Use setfenv to change environments.) + + + + +

+


getfenv ([f])

+Returns the current environment in use by the function. +f can be a Lua function or a number +that specifies the function at that stack level: +Level 1 is the function calling getfenv. +If the given function is not a Lua function, +or if f is 0, +getfenv returns the global environment. +The default for f is 1. + + + + +

+


getmetatable (object)

+ + +

+If object does not have a metatable, returns nil. +Otherwise, +if the object's metatable has a "__metatable" field, +returns the associated value. +Otherwise, returns the metatable of the given object. + + + + +

+


ipairs (t)

+ + +

+Returns three values: an iterator function, the table t, and 0, +so that the construction + +

+     for i,v in ipairs(t) do body end
+

+will iterate over the pairs (1,t[1]), (2,t[2]), ···, +up to the first integer key absent from the table. + + + + +

+


load (func [, chunkname])

+ + +

+Loads a chunk using function func to get its pieces. +Each call to func must return a string that concatenates +with previous results. +A return of nil (or no value) signals the end of the chunk. + + +

+If there are no errors, +returns the compiled chunk as a function; +otherwise, returns nil plus the error message. +The environment of the returned function is the global environment. + + +

+chunkname is used as the chunk name for error messages +and debug information. + + + + +

+


loadfile ([filename])

+ + +

+Similar to load, +but gets the chunk from file filename +or from the standard input, +if no file name is given. + + + + +

+


loadstring (string [, chunkname])

+ + +

+Similar to load, +but gets the chunk from the given string. + + +

+To load and run a given string, use the idiom + +

+     assert(loadstring(s))()
+
+ + + +

+


next (table [, index])

+ + +

+Allows a program to traverse all fields of a table. +Its first argument is a table and its second argument +is an index in this table. +next returns the next index of the table +and its associated value. +When called with nil as its second argument, +next returns an initial index +and its associated value. +When called with the last index, +or with nil in an empty table, +next returns nil. +If the second argument is absent, then it is interpreted as nil. +In particular, +you can use next(t) to check whether a table is empty. + + +

+The order in which the indices are enumerated is not specified, +even for numeric indices. +(To traverse a table in numeric order, +use a numerical for or the ipairs function.) + + +

+The behavior of next is undefined if, +during the traversal, +you assign any value to a non-existent field in the table. +You may however modify existing fields. +In particular, you may clear existing fields. + + + + +

+


pairs (t)

+ + +

+Returns three values: the next function, the table t, and nil, +so that the construction + +

+     for k,v in pairs(t) do body end
+

+will iterate over all key–value pairs of table t. + + +

+See function next for the caveats of modifying +the table during its traversal. + + + + +

+


pcall (f, arg1, ···)

+ + +

+Calls function f with +the given arguments in protected mode. +This means that any error inside f is not propagated; +instead, pcall catches the error +and returns a status code. +Its first result is the status code (a boolean), +which is true if the call succeeds without errors. +In such case, pcall also returns all results from the call, +after this first result. +In case of any error, pcall returns false plus the error message. + + + + +

+


print (···)

+Receives any number of arguments, +and prints their values to stdout, +using the tostring function to convert them to strings. +print is not intended for formatted output, +but only as a quick way to show a value, +typically for debugging. +For formatted output, use string.format. + + + + +

+


rawequal (v1, v2)

+Checks whether v1 is equal to v2, +without invoking any metamethod. +Returns a boolean. + + + + +

+


rawget (table, index)

+Gets the real value of table[index], +without invoking any metamethod. +table must be a table; +index may be any value. + + + + +

+


rawset (table, index, value)

+Sets the real value of table[index] to value, +without invoking any metamethod. +table must be a table, +index any value different from nil, +and value any Lua value. + + +

+This function returns table. + + + + +

+


select (index, ···)

+ + +

+If index is a number, +returns all arguments after argument number index. +Otherwise, index must be the string "#", +and select returns the total number of extra arguments it received. + + + + +

+


setfenv (f, table)

+ + +

+Sets the environment to be used by the given function. +f can be a Lua function or a number +that specifies the function at that stack level: +Level 1 is the function calling setfenv. +setfenv returns the given function. + + +

+As a special case, when f is 0 setfenv changes +the environment of the running thread. +In this case, setfenv returns no values. + + + + +

+


setmetatable (table, metatable)

+ + +

+Sets the metatable for the given table. +(You cannot change the metatable of other types from Lua, only from C.) +If metatable is nil, +removes the metatable of the given table. +If the original metatable has a "__metatable" field, +raises an error. + + +

+This function returns table. + + + + +

+


tonumber (e [, base])

+Tries to convert its argument to a number. +If the argument is already a number or a string convertible +to a number, then tonumber returns this number; +otherwise, it returns nil. + + +

+An optional argument specifies the base to interpret the numeral. +The base may be any integer between 2 and 36, inclusive. +In bases above 10, the letter 'A' (in either upper or lower case) +represents 10, 'B' represents 11, and so forth, +with 'Z' representing 35. +In base 10 (the default), the number may have a decimal part, +as well as an optional exponent part (see §2.1). +In other bases, only unsigned integers are accepted. + + + + +

+


tostring (e)

+Receives an argument of any type and +converts it to a string in a reasonable format. +For complete control of how numbers are converted, +use string.format. + + +

+If the metatable of e has a "__tostring" field, +then tostring calls the corresponding value +with e as argument, +and uses the result of the call as its result. + + + + +

+


type (v)

+Returns the type of its only argument, coded as a string. +The possible results of this function are +"nil" (a string, not the value nil), +"number", +"string", +"boolean", +"table", +"function", +"thread", +and "userdata". + + + + +

+


unpack (list [, i [, j]])

+Returns the elements from the given table. +This function is equivalent to + +
+     return list[i], list[i+1], ···, list[j]
+

+except that the above code can be written only for a fixed number +of elements. +By default, i is 1 and j is the length of the list, +as defined by the length operator (see §2.5.5). + + + + +

+


_VERSION

+A global variable (not a function) that +holds a string containing the current interpreter version. +The current contents of this variable is "Lua 5.1". + + + + +

+


xpcall (f, err)

+ + +

+This function is similar to pcall, +except that you can set a new error handler. + + +

+xpcall calls function f in protected mode, +using err as the error handler. +Any error inside f is not propagated; +instead, xpcall catches the error, +calls the err function with the original error object, +and returns a status code. +Its first result is the status code (a boolean), +which is true if the call succeeds without errors. +In this case, xpcall also returns all results from the call, +after this first result. +In case of any error, +xpcall returns false plus the result from err. + + + + + + + +

5.2 - Coroutine Manipulation

+ +

+The operations related to coroutines comprise a sub-library of +the basic library and come inside the table coroutine. +See §2.11 for a general description of coroutines. + + +

+


coroutine.create (f)

+ + +

+Creates a new coroutine, with body f. +f must be a Lua function. +Returns this new coroutine, +an object with type "thread". + + + + +

+


coroutine.resume (co [, val1, ···])

+ + +

+Starts or continues the execution of coroutine co. +The first time you resume a coroutine, +it starts running its body. +The values val1, ··· are passed +as the arguments to the body function. +If the coroutine has yielded, +resume restarts it; +the values val1, ··· are passed +as the results from the yield. + + +

+If the coroutine runs without any errors, +resume returns true plus any values passed to yield +(if the coroutine yields) or any values returned by the body function +(if the coroutine terminates). +If there is any error, +resume returns false plus the error message. + + + + +

+


coroutine.running ()

+ + +

+Returns the running coroutine, +or nil when called by the main thread. + + + + +

+


coroutine.status (co)

+ + +

+Returns the status of coroutine co, as a string: +"running", +if the coroutine is running (that is, it called status); +"suspended", if the coroutine is suspended in a call to yield, +or if it has not started running yet; +"normal" if the coroutine is active but not running +(that is, it has resumed another coroutine); +and "dead" if the coroutine has finished its body function, +or if it has stopped with an error. + + + + +

+


coroutine.wrap (f)

+ + +

+Creates a new coroutine, with body f. +f must be a Lua function. +Returns a function that resumes the coroutine each time it is called. +Any arguments passed to the function behave as the +extra arguments to resume. +Returns the same values returned by resume, +except the first boolean. +In case of error, propagates the error. + + + + +

+


coroutine.yield (···)

+ + +

+Suspends the execution of the calling coroutine. +The coroutine cannot be running a C function, +a metamethod, or an iterator. +Any arguments to yield are passed as extra results to resume. + + + + + + + +

5.3 - Modules

+ +

+The package library provides basic +facilities for loading and building modules in Lua. +It exports two of its functions directly in the global environment: +require and module. +Everything else is exported in a table package. + + +

+


module (name [, ···])

+ + +

+Creates a module. +If there is a table in package.loaded[name], +this table is the module. +Otherwise, if there is a global table t with the given name, +this table is the module. +Otherwise creates a new table t and +sets it as the value of the global name and +the value of package.loaded[name]. +This function also initializes t._NAME with the given name, +t._M with the module (t itself), +and t._PACKAGE with the package name +(the full module name minus last component; see below). +Finally, module sets t as the new environment +of the current function and the new value of package.loaded[name], +so that require returns t. + + +

+If name is a compound name +(that is, one with components separated by dots), +module creates (or reuses, if they already exist) +tables for each component. +For instance, if name is a.b.c, +then module stores the module table in field c of +field b of global a. + + +

+This function may receive optional options after +the module name, +where each option is a function to be applied over the module. + + + + +

+


require (modname)

+ + +

+Loads the given module. +The function starts by looking into the package.loaded table +to determine whether modname is already loaded. +If it is, then require returns the value stored +at package.loaded[modname]. +Otherwise, it tries to find a loader for the module. + + +

+To find a loader, +first require queries package.preload[modname]. +If it has a value, +this value (which should be a function) is the loader. +Otherwise require searches for a Lua loader using the +path stored in package.path. +If that also fails, it searches for a C loader using the +path stored in package.cpath. +If that also fails, +it tries an all-in-one loader (see below). + + +

+When loading a C library, +require first uses a dynamic link facility to link the +application with the library. +Then it tries to find a C function inside this library to +be used as the loader. +The name of this C function is the string "luaopen_" +concatenated with a copy of the module name where each dot +is replaced by an underscore. +Moreover, if the module name has a hyphen, +its prefix up to (and including) the first hyphen is removed. +For instance, if the module name is a.v1-b.c, +the function name will be luaopen_b_c. + + +

+If require finds neither a Lua library nor a +C library for a module, +it calls the all-in-one loader. +This loader searches the C path for a library for +the root name of the given module. +For instance, when requiring a.b.c, +it will search for a C library for a. +If found, it looks into it for an open function for +the submodule; +in our example, that would be luaopen_a_b_c. +With this facility, a package can pack several C submodules +into one single library, +with each submodule keeping its original open function. + + +

+Once a loader is found, +require calls the loader with a single argument, modname. +If the loader returns any value, +require assigns the returned value to package.loaded[modname]. +If the loader returns no value and +has not assigned any value to package.loaded[modname], +then require assigns true to this entry. +In any case, require returns the +final value of package.loaded[modname]. + + +

+If there is any error loading or running the module, +or if it cannot find any loader for the module, +then require signals an error. + + + + +

+


package.cpath

+ + +

+The path used by require to search for a C loader. + + +

+Lua initializes the C path package.cpath in the same way +it initializes the Lua path package.path, +using the environment variable LUA_CPATH +(plus another default path defined in luaconf.h). + + + + +

+ +


package.loaded

+ + +

+A table used by require to control which +modules are already loaded. +When you require a module modname and +package.loaded[modname] is not false, +require simply returns the value stored there. + + + + +

+


package.loadlib (libname, funcname)

+ + +

+Dynamically links the host program with the C library libname. +Inside this library, looks for a function funcname +and returns this function as a C function. +(So, funcname must follow the protocol (see lua_CFunction)). + + +

+This is a low-level function. +It completely bypasses the package and module system. +Unlike require, +it does not perform any path searching and +does not automatically adds extensions. +libname must be the complete file name of the C library, +including if necessary a path and extension. +funcname must be the exact name exported by the C library +(which may depend on the C compiler and linker used). + + +

+This function is not supported by ANSI C. +As such, it is only available on some platforms +(Windows, Linux, Mac OS X, Solaris, BSD, +plus other Unix systems that support the dlfcn standard). + + + + +

+


package.path

+ + +

+The path used by require to search for a Lua loader. + + +

+At start-up, Lua initializes this variable with +the value of the environment variable LUA_PATH or +with a default path defined in luaconf.h, +if the environment variable is not defined. +Any ";;" in the value of the environment variable +is replaced by the default path. + + +

+A path is a sequence of templates separated by semicolons. +For each template, require will change each interrogation +mark in the template by filename, +which is modname with each dot replaced by a +"directory separator" (such as "/" in Unix); +then it will try to load the resulting file name. +So, for instance, if the Lua path is + +

+     "./?.lua;./?.lc;/usr/local/?/init.lua"
+

+the search for a Lua loader for module foo +will try to load the files +./foo.lua, ./foo.lc, and +/usr/local/foo/init.lua, in that order. + + + + +

+


package.preload

+ + +

+A table to store loaders for specific modules +(see require). + + + + +

+


package.seeall (module)

+ + +

+Sets a metatable for module with +its __index field referring to the global environment, +so that this module inherits values +from the global environment. +To be used as an option to function module. + + + + + + + +

5.4 - String Manipulation

+ +

+This library provides generic functions for string manipulation, +such as finding and extracting substrings, and pattern matching. +When indexing a string in Lua, the first character is at position 1 +(not at 0, as in C). +Indices are allowed to be negative and are interpreted as indexing backwards, +from the end of the string. +Thus, the last character is at position -1, and so on. + + +

+The string library provides all its functions inside the table +string. +It also sets a metatable for strings +where the __index field points to the string table. +Therefore, you can use the string functions in object-oriented style. +For instance, string.byte(s, i) +can be written as s:byte(i). + + +

+


string.byte (s [, i [, j]])

+Returns the internal numerical codes of the characters s[i], +s[i+1], ···, s[j]. +The default value for i is 1; +the default value for j is i. + + +

+Note that numerical codes are not necessarily portable across platforms. + + + + +

+


string.char (···)

+Receives zero or more integers. +Returns a string with length equal to the number of arguments, +in which each character has the internal numerical code equal +to its corresponding argument. + + +

+Note that numerical codes are not necessarily portable across platforms. + + + + +

+


string.dump (function)

+ + +

+Returns a string containing a binary representation of the given function, +so that a later loadstring on this string returns +a copy of the function. +function must be a Lua function without upvalues. + + + + +

+


string.find (s, pattern [, init [, plain]])

+Looks for the first match of +pattern in the string s. +If it finds a match, then find returns the indices of s +where this occurrence starts and ends; +otherwise, it returns nil. +A third, optional numerical argument init specifies +where to start the search; +its default value is 1 and may be negative. +A value of true as a fourth, optional argument plain +turns off the pattern matching facilities, +so the function does a plain "find substring" operation, +with no characters in pattern being considered "magic". +Note that if plain is given, then init must be given as well. + + +

+If the pattern has captures, +then in a successful match +the captured values are also returned, +after the two indices. + + + + +

+


string.format (formatstring, ···)

+Returns a formatted version of its variable number of arguments +following the description given in its first argument (which must be a string). +The format string follows the same rules as the printf family of +standard C functions. +The only differences are that the options/modifiers +*, l, L, n, p, +and h are not supported +and that there is an extra option, q. +The q option formats a string in a form suitable to be safely read +back by the Lua interpreter: +the string is written between double quotes, +and all double quotes, newlines, embedded zeros, +and backslashes in the string +are correctly escaped when written. +For instance, the call + +
+     string.format('%q', 'a string with "quotes" and \n new line')
+

+will produce the string: + +

+     "a string with \"quotes\" and \
+      new line"
+
+ +

+The options c, d, E, e, f, +g, G, i, o, u, X, and x all +expect a number as argument, +whereas q and s expect a string. + + +

+This function does not accept string values +containing embedded zeros, +except as arguments to the q option. + + + + +

+


string.gmatch (s, pattern)

+Returns an iterator function that, +each time it is called, +returns the next captures from pattern over string s. +If pattern specifies no captures, +then the whole match is produced in each call. + + +

+As an example, the following loop + +

+     s = "hello world from Lua"
+     for w in string.gmatch(s, "%a+") do
+       print(w)
+     end
+

+will iterate over all the words from string s, +printing one per line. +The next example collects all pairs key=value from the +given string into a table: + +

+     t = {}
+     s = "from=world, to=Lua"
+     for k, v in string.gmatch(s, "(%w+)=(%w+)") do
+       t[k] = v
+     end
+
+ +

+For this function, a '^' at the start of a pattern does not +work as an anchor, as this would prevent the iteration. + + + + +

+


string.gsub (s, pattern, repl [, n])

+Returns a copy of s +in which all occurrences of the pattern have been +replaced by a replacement string specified by repl, +which may be a string, a table, or a function. +gsub also returns, as its second value, +the total number of substitutions made. + + +

+If repl is a string, then its value is used for replacement. +The character % works as an escape character: +any sequence in repl of the form %n, +with n between 1 and 9, +stands for the value of the n-th captured substring (see below). +The sequence %0 stands for the whole match. +The sequence %% stands for a single %. + + +

+If repl is a table, then the table is queried for every match, +using the first capture as the key; +if the pattern specifies no captures, +then the whole match is used as the key. + + +

+If repl is a function, then this function is called every time a +match occurs, with all captured substrings passed as arguments, +in order; +if the pattern specifies no captures, +then the whole match is passed as a sole argument. + + +

+If the value returned by the table query or by the function call +is a string or a number, +then it is used as the replacement string; +otherwise, if it is false or nil, +then there is no replacement +(that is, the original match is kept in the string). + + +

+The optional last parameter n limits +the maximum number of substitutions to occur. +For instance, when n is 1 only the first occurrence of +pattern is replaced. + + +

+Here are some examples: + +

+     x = string.gsub("hello world", "(%w+)", "%1 %1")
+     --> x="hello hello world world"
+     
+     x = string.gsub("hello world", "%w+", "%0 %0", 1)
+     --> x="hello hello world"
+     
+     x = string.gsub("hello world from Lua", "(%w+)%s*(%w+)", "%2 %1")
+     --> x="world hello Lua from"
+     
+     x = string.gsub("home = $HOME, user = $USER", "%$(%w+)", os.getenv)
+     --> x="home = /home/roberto, user = roberto"
+     
+     x = string.gsub("4+5 = $return 4+5$", "%$(.-)%$", function (s)
+           return loadstring(s)()
+         end)
+     --> x="4+5 = 9"
+     
+     local t = {name="lua", version="5.1"}
+     x = string.gsub("$name-$version.tar.gz", "%$(%w+)", t)
+     --> x="lua-5.1.tar.gz"
+
+ + + +

+


string.len (s)

+Receives a string and returns its length. +The empty string "" has length 0. +Embedded zeros are counted, +so "a\000bc\000" has length 5. + + + + +

+


string.lower (s)

+Receives a string and returns a copy of this string with all +uppercase letters changed to lowercase. +All other characters are left unchanged. +The definition of what an uppercase letter is depends on the current locale. + + + + +

+


string.match (s, pattern [, init])

+Looks for the first match of +pattern in the string s. +If it finds one, then match returns +the captures from the pattern; +otherwise it returns nil. +If pattern specifies no captures, +then the whole match is returned. +A third, optional numerical argument init specifies +where to start the search; +its default value is 1 and may be negative. + + + + +

+


string.rep (s, n)

+Returns a string that is the concatenation of n copies of +the string s. + + + + +

+


string.reverse (s)

+Returns a string that is the string s reversed. + + + + +

+


string.sub (s, i [, j])

+Returns the substring of s that +starts at i and continues until j; +i and j may be negative. +If j is absent, then it is assumed to be equal to -1 +(which is the same as the string length). +In particular, +the call string.sub(s,1,j) returns a prefix of s +with length j, +and string.sub(s, -i) returns a suffix of s +with length i. + + + + +

+


string.upper (s)

+Receives a string and returns a copy of this string with all +lowercase letters changed to uppercase. +All other characters are left unchanged. +The definition of what a lowercase letter is depends on the current locale. + + + +

5.4.1 - Patterns

+ + +

Character Class:

+A character class is used to represent a set of characters. +The following combinations are allowed in describing a character class: + +

    + +
  • x: +(where x is not one of the magic characters +^$()%.[]*+-?) +represents the character x itself. +
  • + +
  • .: (a dot) represents all characters.
  • + +
  • %a: represents all letters.
  • + +
  • %c: represents all control characters.
  • + +
  • %d: represents all digits.
  • + +
  • %l: represents all lowercase letters.
  • + +
  • %p: represents all punctuation characters.
  • + +
  • %s: represents all space characters.
  • + +
  • %u: represents all uppercase letters.
  • + +
  • %w: represents all alphanumeric characters.
  • + +
  • %x: represents all hexadecimal digits.
  • + +
  • %z: represents the character with representation 0.
  • + +
  • %x: (where x is any non-alphanumeric character) +represents the character x. +This is the standard way to escape the magic characters. +Any punctuation character (even the non magic) +can be preceded by a '%' +when used to represent itself in a pattern. +
  • + +
  • [set]: +represents the class which is the union of all +characters in set. +A range of characters may be specified by +separating the end characters of the range with a '-'. +All classes %x described above may also be used as +components in set. +All other characters in set represent themselves. +For example, [%w_] (or [_%w]) +represents all alphanumeric characters plus the underscore, +[0-7] represents the octal digits, +and [0-7%l%-] represents the octal digits plus +the lowercase letters plus the '-' character. + + +

    +The interaction between ranges and classes is not defined. +Therefore, patterns like [%a-z] or [a-%%] +have no meaning. +

  • + +
  • [^set]: +represents the complement of set, +where set is interpreted as above. +
  • + +

+For all classes represented by single letters (%a, %c, etc.), +the corresponding uppercase letter represents the complement of the class. +For instance, %S represents all non-space characters. + + +

+The definitions of letter, space, and other character groups +depend on the current locale. +In particular, the class [a-z] may not be equivalent to %l. + + + + + +

Pattern Item:

+A pattern item may be + +

    + +
  • +a single character class, +which matches any single character in the class; +
  • + +
  • +a single character class followed by '*', +which matches 0 or more repetitions of characters in the class. +These repetition items will always match the longest possible sequence; +
  • + +
  • +a single character class followed by '+', +which matches 1 or more repetitions of characters in the class. +These repetition items will always match the longest possible sequence; +
  • + +
  • +a single character class followed by '-', +which also matches 0 or more repetitions of characters in the class. +Unlike '*', +these repetition items will always match the shortest possible sequence; +
  • + +
  • +a single character class followed by '?', +which matches 0 or 1 occurrence of a character in the class; +
  • + +
  • +%n, for n between 1 and 9; +such item matches a substring equal to the n-th captured string +(see below); +
  • + +
  • +%bxy, where x and y are two distinct characters; +such item matches strings that start with x, end with y, +and where the x and y are balanced. +This means that, if one reads the string from left to right, +counting +1 for an x and -1 for a y, +the ending y is the first y where the count reaches 0. +For instance, the item %b() matches expressions with +balanced parentheses. +
  • + +
+ + + + +

Pattern:

+A pattern is a sequence of pattern items. +A '^' at the beginning of a pattern anchors the match at the +beginning of the subject string. +A '$' at the end of a pattern anchors the match at the +end of the subject string. +At other positions, +'^' and '$' have no special meaning and represent themselves. + + + + + +

Captures:

+A pattern may contain sub-patterns enclosed in parentheses; +they describe captures. +When a match succeeds, the substrings of the subject string +that match captures are stored (captured) for future use. +Captures are numbered according to their left parentheses. +For instance, in the pattern "(a*(.)%w(%s*))", +the part of the string matching "a*(.)%w(%s*)" is +stored as the first capture (and therefore has number 1); +the character matching "." is captured with number 2, +and the part matching "%s*" has number 3. + + +

+As a special case, the empty capture () captures +the current string position (a number). +For instance, if we apply the pattern "()aa()" on the +string "flaaap", there will be two captures: 3 and 5. + + +

+A pattern cannot contain embedded zeros. Use %z instead. + + + + + + + + + + + +

5.5 - Table Manipulation

+This library provides generic functions for table manipulation. +It provides all its functions inside the table table. + + +

+Most functions in the table library assume that the table +represents an array or a list. +For these functions, when we talk about the "length" of a table +we mean the result of the length operator. + + +

+


table.concat (table [, sep [, i [, j]]])

+Given an array where all elements are strings or numbers, +returns table[i]..sep..table[i+1] ··· sep..table[j]. +The default value for sep is the empty string, +the default for i is 1, +and the default for j is the length of the table. +If i is greater than j, returns the empty string. + + + + +

+


table.insert (table, [pos,] value)

+ + +

+Inserts element value at position pos in table, +shifting up other elements to open space, if necessary. +The default value for pos is n+1, +where n is the length of the table (see §2.5.5), +so that a call table.insert(t,x) inserts x at the end +of table t. + + + + +

+


table.maxn (table)

+ + +

+Returns the largest positive numerical index of the given table, +or zero if the table has no positive numerical indices. +(To do its job this function does a linear traversal of +the whole table.) + + + + +

+


table.remove (table [, pos])

+ + +

+Removes from table the element at position pos, +shifting down other elements to close the space, if necessary. +Returns the value of the removed element. +The default value for pos is n, +where n is the length of the table, +so that a call table.remove(t) removes the last element +of table t. + + + + +

+


table.sort (table [, comp])

+Sorts table elements in a given order, in-place, +from table[1] to table[n], +where n is the length of the table. +If comp is given, +then it must be a function that receives two table elements, +and returns true +when the first is less than the second +(so that not comp(a[i+1],a[i]) will be true after the sort). +If comp is not given, +then the standard Lua operator < is used instead. + + +

+The sort algorithm is not stable; +that is, elements considered equal by the given order +may have their relative positions changed by the sort. + + + + + + + +

5.6 - Mathematical Functions

+ +

+This library is an interface to the standard C math library. +It provides all its functions inside the table math. + + +

+


math.abs (x)

+ + +

+Returns the absolute value of x. + + + + +

+


math.acos (x)

+ + +

+Returns the arc cosine of x (in radians). + + + + +

+


math.asin (x)

+ + +

+Returns the arc sine of x (in radians). + + + + +

+


math.atan (x)

+ + +

+Returns the arc tangent of x (in radians). + + + + +

+


math.atan2 (x, y)

+ + +

+Returns the arc tangent of x/y (in radians), +but uses the signs of both parameters to find the +quadrant of the result. +(It also handles correctly the case of y being zero.) + + + + +

+


math.ceil (x)

+ + +

+Returns the smallest integer larger than or equal to x. + + + + +

+


math.cos (x)

+ + +

+Returns the cosine of x (assumed to be in radians). + + + + +

+


math.cosh (x)

+ + +

+Returns the hyperbolic cosine of x. + + + + +

+


math.deg (x)

+ + +

+Returns the angle x (given in radians) in degrees. + + + + +

+


math.exp (x)

+ + +

+Returns the the value ex. + + + + +

+


math.floor (x)

+ + +

+Returns the largest integer smaller than or equal to x. + + + + +

+


math.fmod (x, y)

+ + +

+Returns the remainder of the division of x by y. + + + + +

+


math.frexp (x)

+ + +

+Returns m and e such that x = m2e, +e is an integer and the absolute value of m is +in the range [0.5, 1) +(or zero when x is zero). + + + + +

+


math.huge

+ + +

+The value HUGE_VAL, +a value larger than or equal to any other numerical value. + + + + +

+


math.ldexp (m, e)

+ + +

+Returns m2e (e should be an integer). + + + + +

+


math.log (x)

+ + +

+Returns the natural logarithm of x. + + + + +

+


math.log10 (x)

+ + +

+Returns the base-10 logarithm of x. + + + + +

+


math.max (x, ···)

+ + +

+Returns the maximum value among its arguments. + + + + +

+


math.min (x, ···)

+ + +

+Returns the minimum value among its arguments. + + + + +

+


math.modf (x)

+ + +

+Returns two numbers, +the integral part of x and the fractional part of x. + + + + +

+


math.pi

+ + +

+The value of pi. + + + + +

+


math.pow (x, y)

+ + +

+Returns xy. +(You can also use the expression x^y to compute this value.) + + + + +

+


math.rad (x)

+ + +

+Returns the angle x (given in degrees) in radians. + + + + +

+


math.random ([m [, n]])

+ + +

+This function is an interface to the simple +pseudo-random generator function rand provided by ANSI C. +(No guarantees can be given for its statistical properties.) + + +

+When called without arguments, +returns a pseudo-random real number +in the range [0,1). +When called with a number m, +math.random returns +a pseudo-random integer in the range [1, m]. +When called with two numbers m and n, +math.random returns a pseudo-random +integer in the range [m, n]. + + + + +

+


math.randomseed (x)

+ + +

+Sets x as the "seed" +for the pseudo-random generator: +equal seeds produce equal sequences of numbers. + + + + +

+


math.sin (x)

+ + +

+Returns the sine of x (assumed to be in radians). + + + + +

+


math.sinh (x)

+ + +

+Returns the hyperbolic sine of x. + + + + +

+


math.sqrt (x)

+ + +

+Returns the square root of x. +(You can also use the expression x^0.5 to compute this value.) + + + + +

+


math.tan (x)

+ + +

+Returns the tangent of x (assumed to be in radians). + + + + +

+


math.tanh (x)

+ + +

+Returns the hyperbolic tangent of x. + + + + + + + +

5.7 - Input and Output Facilities

+ +

+The I/O library provides two different styles for file manipulation. +The first one uses implicit file descriptors; +that is, there are operations to set a default input file and a +default output file, +and all input/output operations are over these default files. +The second style uses explicit file descriptors. + + +

+When using implicit file descriptors, +all operations are supplied by table io. +When using explicit file descriptors, +the operation io.open returns a file descriptor +and then all operations are supplied as methods of the file descriptor. + + +

+The table io also provides +three predefined file descriptors with their usual meanings from C: +io.stdin, io.stdout, and io.stderr. + + +

+Unless otherwise stated, +all I/O functions return nil on failure +(plus an error message as a second result and +a system-dependent error code as a third result) +and some value different from nil on success. + + +

+


io.close ([file])

+ + +

+Equivalent to file:close(). +Without a file, closes the default output file. + + + + +

+


io.flush ()

+ + +

+Equivalent to file:flush over the default output file. + + + + +

+


io.input ([file])

+ + +

+When called with a file name, it opens the named file (in text mode), +and sets its handle as the default input file. +When called with a file handle, +it simply sets this file handle as the default input file. +When called without parameters, +it returns the current default input file. + + +

+In case of errors this function raises the error, +instead of returning an error code. + + + + +

+


io.lines ([filename])

+ + +

+Opens the given file name in read mode +and returns an iterator function that, +each time it is called, +returns a new line from the file. +Therefore, the construction + +

+     for line in io.lines(filename) do body end
+

+will iterate over all lines of the file. +When the iterator function detects the end of file, +it returns nil (to finish the loop) and automatically closes the file. + + +

+The call io.lines() (with no file name) is equivalent +to io.input():lines(); +that is, it iterates over the lines of the default input file. +In this case it does not close the file when the loop ends. + + + + +

+


io.open (filename [, mode])

+ + +

+This function opens a file, +in the mode specified in the string mode. +It returns a new file handle, +or, in case of errors, nil plus an error message. + + +

+The mode string can be any of the following: + +

    +
  • "r": read mode (the default);
  • +
  • "w": write mode;
  • +
  • "a": append mode;
  • +
  • "r+": update mode, all previous data is preserved;
  • +
  • "w+": update mode, all previous data is erased;
  • +
  • "a+": append update mode, previous data is preserved, + writing is only allowed at the end of file.
  • +

+The mode string may also have a 'b' at the end, +which is needed in some systems to open the file in binary mode. +This string is exactly what is used in the +standard C function fopen. + + + + +

+


io.output ([file])

+ + +

+Similar to io.input, but operates over the default output file. + + + + +

+


io.popen (prog [, mode])

+ + +

+Starts program prog in a separated process and returns +a file handle that you can use to read data from this program +(if mode is "r", the default) +or to write data to this program +(if mode is "w"). + + +

+This function is system dependent and is not available +on all platforms. + + + + +

+


io.read (···)

+ + +

+Equivalent to io.input():read. + + + + +

+


io.tmpfile ()

+ + +

+Returns a handle for a temporary file. +This file is opened in update mode +and it is automatically removed when the program ends. + + + + +

+


io.type (obj)

+ + +

+Checks whether obj is a valid file handle. +Returns the string "file" if obj is an open file handle, +"closed file" if obj is a closed file handle, +or nil if obj is not a file handle. + + + + +

+


io.write (···)

+ + +

+Equivalent to io.output():write. + + + + +

+


file:close ()

+ + +

+Closes file. +Note that files are automatically closed when +their handles are garbage collected, +but that takes an unpredictable amount of time to happen. + + + + +

+


file:flush ()

+ + +

+Saves any written data to file. + + + + +

+


file:lines ()

+ + +

+Returns an iterator function that, +each time it is called, +returns a new line from the file. +Therefore, the construction + +

+     for line in file:lines() do body end
+

+will iterate over all lines of the file. +(Unlike io.lines, this function does not close the file +when the loop ends.) + + + + +

+


file:read (···)

+ + +

+Reads the file file, +according to the given formats, which specify what to read. +For each format, +the function returns a string (or a number) with the characters read, +or nil if it cannot read data with the specified format. +When called without formats, +it uses a default format that reads the entire next line +(see below). + + +

+The available formats are + +

    + +
  • "*n": +reads a number; +this is the only format that returns a number instead of a string. +
  • + +
  • "*a": +reads the whole file, starting at the current position. +On end of file, it returns the empty string. +
  • + +
  • "*l": +reads the next line (skipping the end of line), +returning nil on end of file. +This is the default format. +
  • + +
  • number: +reads a string with up to this number of characters, +returning nil on end of file. +If number is zero, +it reads nothing and returns an empty string, +or nil on end of file. +
  • + +
+ + + +

+


file:seek ([whence] [, offset])

+ + +

+Sets and gets the file position, +measured from the beginning of the file, +to the position given by offset plus a base +specified by the string whence, as follows: + +

    +
  • "set": base is position 0 (beginning of the file);
  • +
  • "cur": base is current position;
  • +
  • "end": base is end of file;
  • +

+In case of success, function seek returns the final file position, +measured in bytes from the beginning of the file. +If this function fails, it returns nil, +plus a string describing the error. + + +

+The default value for whence is "cur", +and for offset is 0. +Therefore, the call file:seek() returns the current +file position, without changing it; +the call file:seek("set") sets the position to the +beginning of the file (and returns 0); +and the call file:seek("end") sets the position to the +end of the file, and returns its size. + + + + +

+


file:setvbuf (mode [, size])

+ + +

+Sets the buffering mode for an output file. +There are three available modes: + +

    + +
  • "no": +no buffering; the result of any output operation appears immediately. +
  • + +
  • "full": +full buffering; output operation is performed only +when the buffer is full (or when you explicitly flush the file +(see io.flush)). +
  • + +
  • "line": +line buffering; output is buffered until a newline is output +or there is any input from some special files +(such as a terminal device). +
  • + +

+For the last two cases, size +specifies the size of the buffer, in bytes. +The default is an appropriate size. + + + + +

+


file:write (···)

+ + +

+Writes the value of each of its arguments to +the file. +The arguments must be strings or numbers. +To write other values, +use tostring or string.format before write. + + + + + + + +

5.8 - Operating System Facilities

+ +

+This library is implemented through table os. + + +

+


os.clock ()

+ + +

+Returns an approximation of the amount in seconds of CPU time +used by the program. + + + + +

+


os.date ([format [, time]])

+ + +

+Returns a string or a table containing date and time, +formatted according to the given string format. + + +

+If the time argument is present, +this is the time to be formatted +(see the os.time function for a description of this value). +Otherwise, date formats the current time. + + +

+If format starts with '!', +then the date is formatted in Coordinated Universal Time. +After this optional character, +if format is the string "*t", +then date returns a table with the following fields: +year (four digits), month (1--12), day (1--31), +hour (0--23), min (0--59), sec (0--61), +wday (weekday, Sunday is 1), +yday (day of the year), +and isdst (daylight saving flag, a boolean). + + +

+If format is not "*t", +then date returns the date as a string, +formatted according to the same rules as the C function strftime. + + +

+When called without arguments, +date returns a reasonable date and time representation that depends on +the host system and on the current locale +(that is, os.date() is equivalent to os.date("%c")). + + + + +

+


os.difftime (t2, t1)

+ + +

+Returns the number of seconds from time t1 to time t2. +In POSIX, Windows, and some other systems, +this value is exactly t2-t1. + + + + +

+


os.execute ([command])

+ + +

+This function is equivalent to the C function system. +It passes command to be executed by an operating system shell. +It returns a status code, which is system-dependent. +If command is absent, then it returns nonzero if a shell is available +and zero otherwise. + + + + +

+


os.exit ([code])

+ + +

+Calls the C function exit, +with an optional code, +to terminate the host program. +The default value for code is the success code. + + + + +

+


os.getenv (varname)

+ + +

+Returns the value of the process environment variable varname, +or nil if the variable is not defined. + + + + +

+


os.remove (filename)

+ + +

+Deletes the file or directory with the given name. +Directories must be empty to be removed. +If this function fails, it returns nil, +plus a string describing the error. + + + + +

+


os.rename (oldname, newname)

+ + +

+Renames file or directory named oldname to newname. +If this function fails, it returns nil, +plus a string describing the error. + + + + +

+


os.setlocale (locale [, category])

+ + +

+Sets the current locale of the program. +locale is a string specifying a locale; +category is an optional string describing which category to change: +"all", "collate", "ctype", +"monetary", "numeric", or "time"; +the default category is "all". +The function returns the name of the new locale, +or nil if the request cannot be honored. + + +

+If locale is the empty string, +the current locate is set to an implementation-defined native locale. +If locate is the string "C", +the current locate is set to the standard C locale. + + +

+When called with nil as the first argument, +this function only returns the name of the current locale +for the given category. + + + + +

+


os.time ([table])

+ + +

+Returns the current time when called without arguments, +or a time representing the date and time specified by the given table. +This table must have fields year, month, and day, +and may have fields hour, min, sec, and isdst +(for a description of these fields, see the os.date function). + + +

+The returned value is a number, whose meaning depends on your system. +In POSIX, Windows, and some other systems, this number counts the number +of seconds since some given start time (the "epoch"). +In other systems, the meaning is not specified, +and the number returned by time can be used only as an argument to +date and difftime. + + + + +

+


os.tmpname ()

+ + +

+Returns a string with a file name that can +be used for a temporary file. +The file must be explicitly opened before its use +and explicitly removed when no longer needed. + + + + + + + +

5.9 - The Debug Library

+ +

+This library provides +the functionality of the debug interface to Lua programs. +You should exert care when using this library. +The functions provided here should be used exclusively for debugging +and similar tasks, such as profiling. +Please resist the temptation to use them as a +usual programming tool: +they can be very slow. +Moreover, several of its functions +violate some assumptions about Lua code +(e.g., that variables local to a function +cannot be accessed from outside or +that userdata metatables cannot be changed by Lua code) +and therefore can compromise otherwise secure code. + + +

+All functions in this library are provided +inside the debug table. +All functions that operate over a thread +have an optional first argument which is the +thread to operate over. +The default is always the current thread. + + +

+


debug.debug ()

+ + +

+Enters an interactive mode with the user, +running each string that the user enters. +Using simple commands and other debug facilities, +the user can inspect global and local variables, +change their values, evaluate expressions, and so on. +A line containing only the word cont finishes this function, +so that the caller continues its execution. + + +

+Note that commands for debug.debug are not lexically nested +within any function, and so have no direct access to local variables. + + + + +

+


debug.getfenv (o)

+Returns the environment of object o. + + + + +

+


debug.gethook ([thread])

+ + +

+Returns the current hook settings of the thread, as three values: +the current hook function, the current hook mask, +and the current hook count +(as set by the debug.sethook function). + + + + +

+


debug.getinfo ([thread,] function [, what])

+ + +

+Returns a table with information about a function. +You can give the function directly, +or you can give a number as the value of function, +which means the function running at level function of the call stack +of the given thread: +level 0 is the current function (getinfo itself); +level 1 is the function that called getinfo; +and so on. +If function is a number larger than the number of active functions, +then getinfo returns nil. + + +

+The returned table may contain all the fields returned by lua_getinfo, +with the string what describing which fields to fill in. +The default for what is to get all information available, +except the table of valid lines. +If present, +the option 'f' +adds a field named func with the function itself. +If present, +the option 'L' +adds a field named activelines with the table of +valid lines. + + +

+For instance, the expression debug.getinfo(1,"n").name returns +a name of the current function, if a reasonable name can be found, +and the expression debug.getinfo(print) +returns a table with all available information +about the print function. + + + + +

+


debug.getlocal ([thread,] level, local)

+ + +

+This function returns the name and the value of the local variable +with index local of the function at level level of the stack. +(The first parameter or local variable has index 1, and so on, +until the last active local variable.) +The function returns nil if there is no local +variable with the given index, +and raises an error when called with a level out of range. +(You can call debug.getinfo to check whether the level is valid.) + + +

+Variable names starting with '(' (open parentheses) +represent internal variables +(loop control variables, temporaries, and C function locals). + + + + +

+


debug.getmetatable (object)

+ + +

+Returns the metatable of the given object +or nil if it does not have a metatable. + + + + +

+


debug.getregistry ()

+ + +

+Returns the registry table (see §3.5). + + + + +

+


debug.getupvalue (func, up)

+ + +

+This function returns the name and the value of the upvalue +with index up of the function func. +The function returns nil if there is no upvalue with the given index. + + + + +

+


debug.setfenv (object, table)

+ + +

+Sets the environment of the given object to the given table. +Returns object. + + + + +

+


debug.sethook ([thread,] hook, mask [, count])

+ + +

+Sets the given function as a hook. +The string mask and the number count describe +when the hook will be called. +The string mask may have the following characters, +with the given meaning: + +

    +
  • "c": The hook is called every time Lua calls a function;
  • +
  • "r": The hook is called every time Lua returns from a function;
  • +
  • "l": The hook is called every time Lua enters a new line of code.
  • +

+With a count different from zero, +the hook is called after every count instructions. + + +

+When called without arguments, +debug.sethook turns off the hook. + + +

+When the hook is called, its first parameter is a string +describing the event that has triggered its call: +"call", "return" (or "tail return"), +"line", and "count". +For line events, +the hook also gets the new line number as its second parameter. +Inside a hook, +you can call getinfo with level 2 to get more information about +the running function +(level 0 is the getinfo function, +and level 1 is the hook function), +unless the event is "tail return". +In this case, Lua is only simulating the return, +and a call to getinfo will return invalid data. + + + + +

+


debug.setlocal ([thread,] level, local, value)

+ + +

+This function assigns the value value to the local variable +with index local of the function at level level of the stack. +The function returns nil if there is no local +variable with the given index, +and raises an error when called with a level out of range. +(You can call getinfo to check whether the level is valid.) +Otherwise, it returns the name of the local variable. + + + + +

+


debug.setmetatable (object, table)

+ + +

+Sets the metatable for the given object to the given table +(which can be nil). + + + + +

+


debug.setupvalue (func, up, value)

+ + +

+This function assigns the value value to the upvalue +with index up of the function func. +The function returns nil if there is no upvalue +with the given index. +Otherwise, it returns the name of the upvalue. + + + + +

+


debug.traceback ([thread,] [message] [, level])

+ + +

+Returns a string with a traceback of the call stack. +An optional message string is appended +at the beginning of the traceback. +An optional level number tells at which level +to start the traceback +(default is 1, the function calling traceback). + + + + + + + +

6 - Lua Stand-alone

+ +

+Although Lua has been designed as an extension language, +to be embedded in a host C program, +it is also frequently used as a stand-alone language. +An interpreter for Lua as a stand-alone language, +called simply lua, +is provided with the standard distribution. +The stand-alone interpreter includes +all standard libraries, including the debug library. +Its usage is: + +

+     lua [options] [script [args]]
+

+The options are: + +

    +
  • -e stat: executes string stat;
  • +
  • -l mod: "requires" mod;
  • +
  • -i: enters interactive mode after running script;
  • +
  • -v: prints version information;
  • +
  • --: stops handling options;
  • +
  • -: executes stdin as a file and stops handling options.
  • +

+After handling its options, lua runs the given script, +passing to it the given args as string arguments. +When called without arguments, +lua behaves as lua -v -i +when the standard input (stdin) is a terminal, +and as lua - otherwise. + + +

+Before running any argument, +the interpreter checks for an environment variable LUA_INIT. +If its format is @filename, +then lua executes the file. +Otherwise, lua executes the string itself. + + +

+All options are handled in order, except -i. +For instance, an invocation like + +

+     $ lua -e'a=1' -e 'print(a)' script.lua
+

+will first set a to 1, then print the value of a (which is '1'), +and finally run the file script.lua with no arguments. +(Here $ is the shell prompt. Your prompt may be different.) + + +

+Before starting to run the script, +lua collects all arguments in the command line +in a global table called arg. +The script name is stored at index 0, +the first argument after the script name goes to index 1, +and so on. +Any arguments before the script name +(that is, the interpreter name plus the options) +go to negative indices. +For instance, in the call + +

+     $ lua -la b.lua t1 t2
+

+the interpreter first runs the file a.lua, +then creates a table + +

+     arg = { [-2] = "lua", [-1] = "-la",
+             [0] = "b.lua",
+             [1] = "t1", [2] = "t2" }
+

+and finally runs the file b.lua. +The script is called with arg[1], arg[2], ··· +as arguments; +it can also access these arguments with the vararg expression '...'. + + +

+In interactive mode, +if you write an incomplete statement, +the interpreter waits for its completion +by issuing a different prompt. + + +

+If the global variable _PROMPT contains a string, +then its value is used as the prompt. +Similarly, if the global variable _PROMPT2 contains a string, +its value is used as the secondary prompt +(issued during incomplete statements). +Therefore, both prompts can be changed directly on the command line. +For instance, + +

+     $ lua -e"_PROMPT='myprompt> '" -i
+

+(the outer pair of quotes is for the shell, +the inner pair is for Lua), +or in any Lua programs by assigning to _PROMPT. +Note the use of -i to enter interactive mode; otherwise, +the program would just end silently right after the assignment to _PROMPT. + + +

+To allow the use of Lua as a +script interpreter in Unix systems, +the stand-alone interpreter skips +the first line of a chunk if it starts with #. +Therefore, Lua scripts can be made into executable programs +by using chmod +x and the #! form, +as in + +

+     #!/usr/local/bin/lua
+

+(Of course, +the location of the Lua interpreter may be different in your machine. +If lua is in your PATH, +then + +

+     #!/usr/bin/env lua
+

+is a more portable solution.) + + + +

7 - Incompatibilities with the Previous Version

+ +

+Here we list the incompatibilities that you may found when moving a program +from Lua 5.0 to Lua 5.1. +You can avoid most of the incompatibilities compiling Lua with +appropriate options (see file luaconf.h). +However, +all these compatibility options will be removed in the next version of Lua. + + + +

7.1 - Changes in the Language

+
    + +
  • +The vararg system changed from the pseudo-argument arg with a +table with the extra arguments to the vararg expression. +(See compile-time option LUA_COMPAT_VARARG in luaconf.h.) +
  • + +
  • +There was a subtle change in the scope of the implicit +variables of the for statement and for the repeat statement. +
  • + +
  • +The long string/long comment syntax ([[string]]) +does not allow nesting. +You can use the new syntax ([=[string]=]) in these cases. +(See compile-time option LUA_COMPAT_LSTR in luaconf.h.) +
  • + +
+ + + + +

7.2 - Changes in the Libraries

+
    + +
  • +Function string.gfind was renamed string.gmatch. +(See compile-time option LUA_COMPAT_GFIND in luaconf.h.) +
  • + +
  • +When string.gsub is called with a function as its +third argument, +whenever this function returns nil or false the +replacement string is the whole match, +instead of the empty string. +
  • + +
  • +Function table.setn was deprecated. +Function table.getn corresponds +to the new length operator (#); +use the operator instead of the function. +(See compile-time option LUA_COMPAT_GETN in luaconf.h.) +
  • + +
  • +Function loadlib was renamed package.loadlib. +(See compile-time option LUA_COMPAT_LOADLIB in luaconf.h.) +
  • + +
  • +Function math.mod was renamed math.fmod. +(See compile-time option LUA_COMPAT_MOD in luaconf.h.) +
  • + +
  • +Functions table.foreach and table.foreachi are deprecated. +You can use a for loop with pairs or ipairs instead. +
  • + +
  • +There were substantial changes in function require due to +the new module system. +However, the new behavior is mostly compatible with the old, +but require gets the path from package.path instead +of from LUA_PATH. +
  • + +
  • +Function collectgarbage has different arguments. +Function gcinfo is deprecated; +use collectgarbage("count") instead. +
  • + +
+ + + + +

7.3 - Changes in the API

+
    + +
  • +The luaopen_* functions (to open libraries) +cannot be called directly, +like a regular C function. +They must be called through Lua, +like a Lua function. +
  • + +
  • +Function lua_open was replaced by lua_newstate to +allow the user to set a memory-allocation function. +You can use luaL_newstate from the standard library to +create a state with a standard allocation function +(based on realloc). +
  • + +
  • +Functions luaL_getn and luaL_setn +(from the auxiliary library) are deprecated. +Use lua_objlen instead of luaL_getn +and nothing instead of luaL_setn. +
  • + +
  • +Function luaL_openlib was replaced by luaL_register. +
  • + +
  • +Function luaL_checkudata now throws an error when the given value +is not a userdata of the expected type. +(In Lua 5.0 it returned NULL.) +
  • + +
+ + + + +

8 - The Complete Syntax of Lua

+ +

+Here is the complete syntax of Lua in extended BNF. +(It does not describe operator precedences.) + + + + +

+
+	chunk ::= {stat [`;´]} [laststat [`;´]]
+
+	block ::= chunk
+
+	stat ::=  varlist1 `=´ explist1 | 
+		 functioncall | 
+		 do block end | 
+		 while exp do block end | 
+		 repeat block until exp | 
+		 if exp then block {elseif exp then block} [else block] end | 
+		 for Name `=´ exp `,´ exp [`,´ exp] do block end | 
+		 for namelist in explist1 do block end | 
+		 function funcname funcbody | 
+		 local function Name funcbody | 
+		 local namelist [`=´ explist1] 
+
+	laststat ::= return [explist1] | break
+
+	funcname ::= Name {`.´ Name} [`:´ Name]
+
+	varlist1 ::= var {`,´ var}
+
+	var ::=  Name | prefixexp `[´ exp `]´ | prefixexp `.´ Name 
+
+	namelist ::= Name {`,´ Name}
+
+	explist1 ::= {exp `,´} exp
+
+	exp ::=  nil | false | true | Number | String | `...´ | function | 
+		 prefixexp | tableconstructor | exp binop exp | unop exp 
+
+	prefixexp ::= var | functioncall | `(´ exp `)´
+
+	functioncall ::=  prefixexp args | prefixexp `:´ Name args 
+
+	args ::=  `(´ [explist1] `)´ | tableconstructor | String 
+
+	function ::= function funcbody
+
+	funcbody ::= `(´ [parlist1] `)´ block end
+
+	parlist1 ::= namelist [`,´ `...´] | `...´
+
+	tableconstructor ::= `{´ [fieldlist] `}´
+
+	fieldlist ::= field {fieldsep field} [fieldsep]
+
+	field ::= `[´ exp `]´ `=´ exp | Name `=´ exp | exp
+
+	fieldsep ::= `,´ | `;´
+
+	binop ::= `+´ | `-´ | `*´ | `/´ | `^´ | `%´ | `..´ | 
+		 `<´ | `<=´ | `>´ | `>=´ | `==´ | `~=´ | 
+		 and | or
+
+	unop ::= `-´ | not | `#´
+
+
+ +

+ + + + + + +


+ +Last update: +Mon Mar 26 12:59:26 BRT 2007 + + + + + diff --git a/lib/lua/doc/readme.html b/lib/lua/doc/readme.html new file mode 100644 index 0000000..28b1d14 --- /dev/null +++ b/lib/lua/doc/readme.html @@ -0,0 +1,40 @@ + + +Lua documentation + + + + + +
+

+Lua +Documentation +

+ +This is the documentation included in the source distribution of Lua 5.1.2. + + + +Lua's +official web site +contains updated documentation, +especially the +reference manual. +

+ +


+ +Last update: +Fri Mar 23 14:19:36 BRT 2007 + + + + diff --git a/lib/lua/etc/Makefile.am b/lib/lua/etc/Makefile.am new file mode 100644 index 0000000..811cb75 --- /dev/null +++ b/lib/lua/etc/Makefile.am @@ -0,0 +1,10 @@ +EXTRA_DIST = \ + README \ + all.c \ + lua.hpp \ + lua.ico \ + lua.pc \ + luavs.bat \ + min.c \ + noparser.c \ + strict.lua diff --git a/lib/lua/etc/README b/lib/lua/etc/README new file mode 100644 index 0000000..5149fc9 --- /dev/null +++ b/lib/lua/etc/README @@ -0,0 +1,37 @@ +This directory contains some useful files and code. +Unlike the code in ../src, everything here is in the public domain. + +If any of the makes fail, you're probably not using the same libraries +used to build Lua. Set MYLIBS in Makefile accordingly. + +all.c + Full Lua interpreter in a single file. + Do "make one" for a demo. + +lua.hpp + Lua header files for C++ using 'extern "C"'. + +lua.ico + A Lua icon for Windows (and web sites: save as favicon.ico). + Drawn by hand by Markus Gritsch . + +lua.pc + pkg-config data for Lua + +luavs.bat + Script to build Lua under "Visual Studio .NET Command Prompt". + Run it from the toplevel as etc\luavs.bat. + +min.c + A minimal Lua interpreter. + Good for learning and for starting your own. + Do "make min" for a demo. + +noparser.c + Linking with noparser.o avoids loading the parsing modules in lualib.a. + Do "make noparser" for a demo. + +strict.lua + Traps uses of undeclared global variables. + Do "make strict" for a demo. + diff --git a/lib/lua/etc/all.c b/lib/lua/etc/all.c new file mode 100644 index 0000000..dab68fa --- /dev/null +++ b/lib/lua/etc/all.c @@ -0,0 +1,38 @@ +/* +* all.c -- Lua core, libraries and interpreter in a single file +*/ + +#define luaall_c + +#include "lapi.c" +#include "lcode.c" +#include "ldebug.c" +#include "ldo.c" +#include "ldump.c" +#include "lfunc.c" +#include "lgc.c" +#include "llex.c" +#include "lmem.c" +#include "lobject.c" +#include "lopcodes.c" +#include "lparser.c" +#include "lstate.c" +#include "lstring.c" +#include "ltable.c" +#include "ltm.c" +#include "lundump.c" +#include "lvm.c" +#include "lzio.c" + +#include "lauxlib.c" +#include "lbaselib.c" +#include "ldblib.c" +#include "liolib.c" +#include "linit.c" +#include "lmathlib.c" +#include "loadlib.c" +#include "loslib.c" +#include "lstrlib.c" +#include "ltablib.c" + +#include "lua.c" diff --git a/lib/lua/etc/lua.hpp b/lib/lua/etc/lua.hpp new file mode 100644 index 0000000..ec417f5 --- /dev/null +++ b/lib/lua/etc/lua.hpp @@ -0,0 +1,9 @@ +// lua.hpp +// Lua header files for C++ +// <> not supplied automatically because Lua also compiles as C++ + +extern "C" { +#include "lua.h" +#include "lualib.h" +#include "lauxlib.h" +} diff --git a/lib/lua/etc/lua.ico b/lib/lua/etc/lua.ico new file mode 100644 index 0000000000000000000000000000000000000000..ccbabc4e2004683f29598a991006d7caff6d837d GIT binary patch literal 1078 zcma)5y>7xl4E|D3VJbX9VX7GW1~6FSw!BIQq_T0tNo32b^bxZ4H5fZGR7xh?&v!Y3 zDh3=J`#b+#Yy%W{!g4u>(a#g`Mme7+yefc~5wPOflDr`o81qe{?|t$BfABsDzNw;V z8cH*0{6W<;G9Np#7ik(qoR4aR5-A@{5)}DJ9&}FRBA#X_5+im4-kQSzMF^)-t2(Vi ztw-^|Sn8@O_lM9`oos+0wMZGt&`Bq(aK&XCv1Gfr&Jtd6%lKPdD{s=unqGWyb3%y{X9SS{jB~HMh0oKMISQrDC zJ;K?)>ElnpmN^UNE-rXxtyk{c#rCe~`P=qnFT7 bCxwx*w%~s~=?o*z_6Fk4@7l(poWF`cPpA(! literal 0 HcmV?d00001 diff --git a/lib/lua/etc/lua.pc b/lib/lua/etc/lua.pc new file mode 100644 index 0000000..225ca0f --- /dev/null +++ b/lib/lua/etc/lua.pc @@ -0,0 +1,31 @@ +# lua.pc -- pkg-config data for Lua + +# vars from install Makefile + +# grep '^V=' ../Makefile +V= 5.1 +# grep '^R=' ../Makefile +R= 5.1.2 + +# grep '^INSTALL_.*=' ../Makefile | sed 's/INSTALL_TOP/prefix/' +prefix= @prefix@ +INSTALL_BIN= ${prefix}/bin +INSTALL_INC= ${prefix}/include +INSTALL_LIB= ${prefix}/lib +INSTALL_MAN= ${prefix}/man/man1 +INSTALL_LMOD= ${prefix}/share/lua/${V} +INSTALL_CMOD= ${prefix}/lib/lua/${V} + +# canonical vars +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include + +Name: Lua +Description: An Extensible Extension Language +Version: ${R} +Requires: +Libs: -L${libdir} -llua -lm +Cflags: -I${includedir} + +# (end of lua.pc) diff --git a/lib/lua/etc/luavs.bat b/lib/lua/etc/luavs.bat new file mode 100644 index 0000000..6b1120b --- /dev/null +++ b/lib/lua/etc/luavs.bat @@ -0,0 +1,15 @@ +rem script to build Lua under "Visual Studio .NET Command Prompt". +rem do not run it from this directory, run it from the toplevel: etc\luavs.bat +rem it creates lua51.dll, lua51.lib, lua.exe, and luac.exe in src. + +cd src +cl /MD /O2 /W3 /c /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE /DLUA_BUILD_AS_DLL l*.c +del lua.obj luac.obj +link /DLL /out:lua51.dll l*.obj +cl /MD /O2 /W3 /c /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE /DLUA_BUILD_AS_DLL lua.c +link /out:lua.exe lua.obj lua51.lib +cl /MD /O2 /W3 /c /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_DEPRECATE l*.c print.c +del lua.obj linit.obj lbaselib.obj ldblib.obj liolib.obj lmathlib.obj loslib.obj ltablib.obj lstrlib.obj loadlib.obj +link /out:luac.exe *.obj +del *.obj +cd .. diff --git a/lib/lua/etc/min.c b/lib/lua/etc/min.c new file mode 100644 index 0000000..404bd50 --- /dev/null +++ b/lib/lua/etc/min.c @@ -0,0 +1,39 @@ +/* +* min.c -- a minimal Lua interpreter +* loads stdin only with minimal error handling. +* no interaction, and no standard library, only a "print" function. +*/ + +#include + +#include "lua.h" +#include "lauxlib.h" + +static int print(lua_State *L) +{ + int n=lua_gettop(L); + int i; + for (i=1; i<=n; i++) + { + if (i>1) printf("\t"); + if (lua_isstring(L,i)) + printf("%s",lua_tostring(L,i)); + else if (lua_isnil(L,i)==2) + printf("%s","nil"); + else if (lua_isboolean(L,i)) + printf("%s",lua_toboolean(L,i) ? "true" : "false"); + else + printf("%s:%p",luaL_typename(L,i),lua_topointer(L,i)); + } + printf("\n"); + return 0; +} + +int main(void) +{ + lua_State *L=lua_open(); + lua_register(L,"print",print); + if (luaL_dofile(L,NULL)!=0) fprintf(stderr,"%s\n",lua_tostring(L,-1)); + lua_close(L); + return 0; +} diff --git a/lib/lua/etc/noparser.c b/lib/lua/etc/noparser.c new file mode 100644 index 0000000..13ba546 --- /dev/null +++ b/lib/lua/etc/noparser.c @@ -0,0 +1,50 @@ +/* +* The code below can be used to make a Lua core that does not contain the +* parsing modules (lcode, llex, lparser), which represent 35% of the total core. +* You'll only be able to load binary files and strings, precompiled with luac. +* (Of course, you'll have to build luac with the original parsing modules!) +* +* To use this module, simply compile it ("make noparser" does that) and list +* its object file before the Lua libraries. The linker should then not load +* the parsing modules. To try it, do "make luab". +* +* If you also want to avoid the dump module (ldump.o), define NODUMP. +* #define NODUMP +*/ + +#define LUA_CORE + +#include "llex.h" +#include "lparser.h" +#include "lzio.h" + +LUAI_FUNC void luaX_init (lua_State *L) { + UNUSED(L); +} + +LUAI_FUNC Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, const char *name) { + UNUSED(z); + UNUSED(buff); + UNUSED(name); + lua_pushliteral(L,"parser not loaded"); + lua_error(L); + return NULL; +} + +#ifdef NODUMP +#include "lundump.h" + +LUAI_FUNC int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip) { + UNUSED(f); + UNUSED(w); + UNUSED(data); + UNUSED(strip); +#if 1 + UNUSED(L); + return 0; +#else + lua_pushliteral(L,"dumper not loaded"); + lua_error(L); +#endif +} +#endif diff --git a/lib/lua/etc/strict.lua b/lib/lua/etc/strict.lua new file mode 100644 index 0000000..16ee26b --- /dev/null +++ b/lib/lua/etc/strict.lua @@ -0,0 +1,39 @@ +-- +-- strict.lua +-- checks uses of undeclared global variables +-- All global variables must be 'declared' through a regular assignment +-- (even assigning nil will do) in a main chunk before being used +-- anywhere or assigned to inside a function. +-- + +local mt = getmetatable(_G) +if mt == nil then + mt = {} + setmetatable(_G, mt) +end + +mt.__declared = {} + +local function what () + local d = debug.getinfo(3, "S") + return d and d.what or "C" +end + +mt.__newindex = function (t, n, v) + if not mt.__declared[n] then + local w = what() + if w ~= "main" and w ~= "C" then + error("assign to undeclared variable '"..n.."'", 2) + end + mt.__declared[n] = true + end + rawset(t, n, v) +end + +mt.__index = function (t, n) + if not mt.__declared[n] and what() ~= "C" then + error("variable '"..n.."' is not declared", 2) + end + return rawget(t, n) +end + diff --git a/lib/lua/src/Makefile.am b/lib/lua/src/Makefile.am new file mode 100644 index 0000000..16f7db6 --- /dev/null +++ b/lib/lua/src/Makefile.am @@ -0,0 +1,64 @@ +AM_CFLAGS = $(lua_CFLAGS) + +EXTRA_DIST = \ + lua.c \ + luac.c \ + print.c + +INCLUDES = -I$(top_srcdir)/include/sj3compat + +noinst_LTLIBRARIES = liblua.la + +liblua_la_SOURCES = \ + lapi.h \ + ldebug.h \ + lgc.h \ + lmem.h \ + lparser.h \ + ltable.h \ + luaconf.h \ + lvm.h \ + lauxlib.h \ + ldo.h \ + llex.h \ + lobject.h \ + lstate.h \ + ltm.h \ + lualib.h \ + lzio.h \ + lcode.h \ + lfunc.h \ + llimits.h \ + lopcodes.h \ + lstring.h \ + lua.h \ + lundump.h \ + lapi.c \ + lcode.c \ + ldebug.c \ + ldo.c \ + ldump.c \ + lfunc.c \ + lgc.c \ + llex.c \ + lmem.c \ + lobject.c \ + lopcodes.c \ + lparser.c \ + lstate.c \ + lstring.c \ + ltable.c \ + ltm.c \ + lundump.c \ + lvm.c \ + lzio.c \ + lauxlib.c \ + lbaselib.c \ + ldblib.c \ + liolib.c \ + lmathlib.c \ + loslib.c \ + ltablib.c \ + lstrlib.c \ + loadlib.c \ + linit.c diff --git a/lib/lua/src/lapi.c b/lib/lua/src/lapi.c new file mode 100644 index 0000000..7c532b8 --- /dev/null +++ b/lib/lua/src/lapi.c @@ -0,0 +1,1080 @@ +/* +** $Id: lapi.c,v 2.55 2006/06/07 12:37:17 roberto Exp $ +** Lua API +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include +#include + +#define lapi_c +#define LUA_CORE + +#include "lua.h" + +#include "lapi.h" +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" +#include "lundump.h" +#include "lvm.h" + + + +const char lua_ident[] = + "$Lua: " LUA_RELEASE " " LUA_COPYRIGHT " $\n" + "$Authors: " LUA_AUTHORS " $\n" + "$URL: www.lua.org $\n"; + + + +#define api_checknelems(L, n) api_check(L, (n) <= (L->top - L->base)) + +#define api_checkvalidindex(L, i) api_check(L, (i) != luaO_nilobject) + +#define api_incr_top(L) {api_check(L, L->top < L->ci->top); L->top++;} + + + +static TValue *index2adr (lua_State *L, int idx) { + if (idx > 0) { + TValue *o = L->base + (idx - 1); + api_check(L, idx <= L->ci->top - L->base); + if (o >= L->top) return cast(TValue *, luaO_nilobject); + else return o; + } + else if (idx > LUA_REGISTRYINDEX) { + api_check(L, idx != 0 && -idx <= L->top - L->base); + return L->top + idx; + } + else switch (idx) { /* pseudo-indices */ + case LUA_REGISTRYINDEX: return registry(L); + case LUA_ENVIRONINDEX: { + Closure *func = curr_func(L); + sethvalue(L, &L->env, func->c.env); + return &L->env; + } + case LUA_GLOBALSINDEX: return gt(L); + default: { + Closure *func = curr_func(L); + idx = LUA_GLOBALSINDEX - idx; + return (idx <= func->c.nupvalues) + ? &func->c.upvalue[idx-1] + : cast(TValue *, luaO_nilobject); + } + } +} + + +static Table *getcurrenv (lua_State *L) { + if (L->ci == L->base_ci) /* no enclosing function? */ + return hvalue(gt(L)); /* use global table as environment */ + else { + Closure *func = curr_func(L); + return func->c.env; + } +} + + +void luaA_pushobject (lua_State *L, const TValue *o) { + setobj2s(L, L->top, o); + api_incr_top(L); +} + + +LUA_API int lua_checkstack (lua_State *L, int size) { + int res; + lua_lock(L); + if ((L->top - L->base + size) > LUAI_MAXCSTACK) + res = 0; /* stack overflow */ + else { + luaD_checkstack(L, size); + if (L->ci->top < L->top + size) + L->ci->top = L->top + size; + res = 1; + } + lua_unlock(L); + return res; +} + + +LUA_API void lua_xmove (lua_State *from, lua_State *to, int n) { + int i; + if (from == to) return; + lua_lock(to); + api_checknelems(from, n); + api_check(from, G(from) == G(to)); + api_check(from, to->ci->top - to->top >= n); + from->top -= n; + for (i = 0; i < n; i++) { + setobj2s(to, to->top++, from->top + i); + } + lua_unlock(to); +} + + +LUA_API lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf) { + lua_CFunction old; + lua_lock(L); + old = G(L)->panic; + G(L)->panic = panicf; + lua_unlock(L); + return old; +} + + +LUA_API lua_State *lua_newthread (lua_State *L) { + lua_State *L1; + lua_lock(L); + luaC_checkGC(L); + L1 = luaE_newthread(L); + setthvalue(L, L->top, L1); + api_incr_top(L); + lua_unlock(L); + luai_userstatethread(L, L1); + return L1; +} + + + +/* +** basic stack manipulation +*/ + + +LUA_API int lua_gettop (lua_State *L) { + return cast_int(L->top - L->base); +} + + +LUA_API void lua_settop (lua_State *L, int idx) { + lua_lock(L); + if (idx >= 0) { + api_check(L, idx <= L->stack_last - L->base); + while (L->top < L->base + idx) + setnilvalue(L->top++); + L->top = L->base + idx; + } + else { + api_check(L, -(idx+1) <= (L->top - L->base)); + L->top += idx+1; /* `subtract' index (index is negative) */ + } + lua_unlock(L); +} + + +LUA_API void lua_remove (lua_State *L, int idx) { + StkId p; + lua_lock(L); + p = index2adr(L, idx); + api_checkvalidindex(L, p); + while (++p < L->top) setobjs2s(L, p-1, p); + L->top--; + lua_unlock(L); +} + + +LUA_API void lua_insert (lua_State *L, int idx) { + StkId p; + StkId q; + lua_lock(L); + p = index2adr(L, idx); + api_checkvalidindex(L, p); + for (q = L->top; q>p; q--) setobjs2s(L, q, q-1); + setobjs2s(L, p, L->top); + lua_unlock(L); +} + + +LUA_API void lua_replace (lua_State *L, int idx) { + StkId o; + lua_lock(L); + /* explicit test for incompatible code */ + if (idx == LUA_ENVIRONINDEX && L->ci == L->base_ci) + luaG_runerror(L, "no calling environment"); + api_checknelems(L, 1); + o = index2adr(L, idx); + api_checkvalidindex(L, o); + if (idx == LUA_ENVIRONINDEX) { + Closure *func = curr_func(L); + api_check(L, ttistable(L->top - 1)); + func->c.env = hvalue(L->top - 1); + luaC_barrier(L, func, L->top - 1); + } + else { + setobj(L, o, L->top - 1); + if (idx < LUA_GLOBALSINDEX) /* function upvalue? */ + luaC_barrier(L, curr_func(L), L->top - 1); + } + L->top--; + lua_unlock(L); +} + + +LUA_API void lua_pushvalue (lua_State *L, int idx) { + lua_lock(L); + setobj2s(L, L->top, index2adr(L, idx)); + api_incr_top(L); + lua_unlock(L); +} + + + +/* +** access functions (stack -> C) +*/ + + +LUA_API int lua_type (lua_State *L, int idx) { + StkId o = index2adr(L, idx); + return (o == luaO_nilobject) ? LUA_TNONE : ttype(o); +} + + +LUA_API const char *lua_typename (lua_State *L, int t) { + UNUSED(L); + return (t == LUA_TNONE) ? "no value" : luaT_typenames[t]; +} + + +LUA_API int lua_iscfunction (lua_State *L, int idx) { + StkId o = index2adr(L, idx); + return iscfunction(o); +} + + +LUA_API int lua_isnumber (lua_State *L, int idx) { + TValue n; + const TValue *o = index2adr(L, idx); + return tonumber(o, &n); +} + + +LUA_API int lua_isstring (lua_State *L, int idx) { + int t = lua_type(L, idx); + return (t == LUA_TSTRING || t == LUA_TNUMBER); +} + + +LUA_API int lua_isuserdata (lua_State *L, int idx) { + const TValue *o = index2adr(L, idx); + return (ttisuserdata(o) || ttislightuserdata(o)); +} + + +LUA_API int lua_rawequal (lua_State *L, int index1, int index2) { + StkId o1 = index2adr(L, index1); + StkId o2 = index2adr(L, index2); + return (o1 == luaO_nilobject || o2 == luaO_nilobject) ? 0 + : luaO_rawequalObj(o1, o2); +} + + +LUA_API int lua_equal (lua_State *L, int index1, int index2) { + StkId o1, o2; + int i; + lua_lock(L); /* may call tag method */ + o1 = index2adr(L, index1); + o2 = index2adr(L, index2); + i = (o1 == luaO_nilobject || o2 == luaO_nilobject) ? 0 : equalobj(L, o1, o2); + lua_unlock(L); + return i; +} + + +LUA_API int lua_lessthan (lua_State *L, int index1, int index2) { + StkId o1, o2; + int i; + lua_lock(L); /* may call tag method */ + o1 = index2adr(L, index1); + o2 = index2adr(L, index2); + i = (o1 == luaO_nilobject || o2 == luaO_nilobject) ? 0 + : luaV_lessthan(L, o1, o2); + lua_unlock(L); + return i; +} + + + +LUA_API lua_Number lua_tonumber (lua_State *L, int idx) { + TValue n; + const TValue *o = index2adr(L, idx); + if (tonumber(o, &n)) + return nvalue(o); + else + return 0; +} + + +LUA_API lua_Integer lua_tointeger (lua_State *L, int idx) { + TValue n; + const TValue *o = index2adr(L, idx); + if (tonumber(o, &n)) { + lua_Integer res; + lua_Number num = nvalue(o); + lua_number2integer(res, num); + return res; + } + else + return 0; +} + + +LUA_API int lua_toboolean (lua_State *L, int idx) { + const TValue *o = index2adr(L, idx); + return !l_isfalse(o); +} + + +LUA_API const char *lua_tolstring (lua_State *L, int idx, size_t *len) { + StkId o = index2adr(L, idx); + if (!ttisstring(o)) { + lua_lock(L); /* `luaV_tostring' may create a new string */ + if (!luaV_tostring(L, o)) { /* conversion failed? */ + if (len != NULL) *len = 0; + lua_unlock(L); + return NULL; + } + luaC_checkGC(L); + o = index2adr(L, idx); /* previous call may reallocate the stack */ + lua_unlock(L); + } + if (len != NULL) *len = tsvalue(o)->len; + return svalue(o); +} + + +LUA_API size_t lua_objlen (lua_State *L, int idx) { + StkId o = index2adr(L, idx); + switch (ttype(o)) { + case LUA_TSTRING: return tsvalue(o)->len; + case LUA_TUSERDATA: return uvalue(o)->len; + case LUA_TTABLE: return luaH_getn(hvalue(o)); + case LUA_TNUMBER: { + size_t l; + lua_lock(L); /* `luaV_tostring' may create a new string */ + l = (luaV_tostring(L, o) ? tsvalue(o)->len : 0); + lua_unlock(L); + return l; + } + default: return 0; + } +} + + +LUA_API lua_CFunction lua_tocfunction (lua_State *L, int idx) { + StkId o = index2adr(L, idx); + return (!iscfunction(o)) ? NULL : clvalue(o)->c.f; +} + + +LUA_API void *lua_touserdata (lua_State *L, int idx) { + StkId o = index2adr(L, idx); + switch (ttype(o)) { + case LUA_TUSERDATA: return (rawuvalue(o) + 1); + case LUA_TLIGHTUSERDATA: return pvalue(o); + default: return NULL; + } +} + + +LUA_API lua_State *lua_tothread (lua_State *L, int idx) { + StkId o = index2adr(L, idx); + return (!ttisthread(o)) ? NULL : thvalue(o); +} + + +LUA_API const void *lua_topointer (lua_State *L, int idx) { + StkId o = index2adr(L, idx); + switch (ttype(o)) { + case LUA_TTABLE: return hvalue(o); + case LUA_TFUNCTION: return clvalue(o); + case LUA_TTHREAD: return thvalue(o); + case LUA_TUSERDATA: + case LUA_TLIGHTUSERDATA: + return lua_touserdata(L, idx); + default: return NULL; + } +} + + + +/* +** push functions (C -> stack) +*/ + + +LUA_API void lua_pushnil (lua_State *L) { + lua_lock(L); + setnilvalue(L->top); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_pushnumber (lua_State *L, lua_Number n) { + lua_lock(L); + setnvalue(L->top, n); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_pushinteger (lua_State *L, lua_Integer n) { + lua_lock(L); + setnvalue(L->top, cast_num(n)); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_pushlstring (lua_State *L, const char *s, size_t len) { + lua_lock(L); + luaC_checkGC(L); + setsvalue2s(L, L->top, luaS_newlstr(L, s, len)); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_pushstring (lua_State *L, const char *s) { + if (s == NULL) + lua_pushnil(L); + else + lua_pushlstring(L, s, strlen(s)); +} + + +LUA_API const char *lua_pushvfstring (lua_State *L, const char *fmt, + va_list argp) { + const char *ret; + lua_lock(L); + luaC_checkGC(L); + ret = luaO_pushvfstring(L, fmt, argp); + lua_unlock(L); + return ret; +} + + +LUA_API const char *lua_pushfstring (lua_State *L, const char *fmt, ...) { + const char *ret; + va_list argp; + lua_lock(L); + luaC_checkGC(L); + va_start(argp, fmt); + ret = luaO_pushvfstring(L, fmt, argp); + va_end(argp); + lua_unlock(L); + return ret; +} + + +LUA_API void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n) { + Closure *cl; + lua_lock(L); + luaC_checkGC(L); + api_checknelems(L, n); + cl = luaF_newCclosure(L, n, getcurrenv(L)); + cl->c.f = fn; + L->top -= n; + while (n--) + setobj2n(L, &cl->c.upvalue[n], L->top+n); + setclvalue(L, L->top, cl); + lua_assert(iswhite(obj2gco(cl))); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_pushboolean (lua_State *L, int b) { + lua_lock(L); + setbvalue(L->top, (b != 0)); /* ensure that true is 1 */ + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_pushlightuserdata (lua_State *L, void *p) { + lua_lock(L); + setpvalue(L->top, p); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API int lua_pushthread (lua_State *L) { + lua_lock(L); + setthvalue(L, L->top, L); + api_incr_top(L); + lua_unlock(L); + return (G(L)->mainthread == L); +} + + + +/* +** get functions (Lua -> stack) +*/ + + +LUA_API void lua_gettable (lua_State *L, int idx) { + StkId t; + lua_lock(L); + t = index2adr(L, idx); + api_checkvalidindex(L, t); + luaV_gettable(L, t, L->top - 1, L->top - 1); + lua_unlock(L); +} + + +LUA_API void lua_getfield (lua_State *L, int idx, const char *k) { + StkId t; + TValue key; + lua_lock(L); + t = index2adr(L, idx); + api_checkvalidindex(L, t); + setsvalue(L, &key, luaS_new(L, k)); + luaV_gettable(L, t, &key, L->top); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_rawget (lua_State *L, int idx) { + StkId t; + lua_lock(L); + t = index2adr(L, idx); + api_check(L, ttistable(t)); + setobj2s(L, L->top - 1, luaH_get(hvalue(t), L->top - 1)); + lua_unlock(L); +} + + +LUA_API void lua_rawgeti (lua_State *L, int idx, int n) { + StkId o; + lua_lock(L); + o = index2adr(L, idx); + api_check(L, ttistable(o)); + setobj2s(L, L->top, luaH_getnum(hvalue(o), n)); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API void lua_createtable (lua_State *L, int narray, int nrec) { + lua_lock(L); + luaC_checkGC(L); + sethvalue(L, L->top, luaH_new(L, narray, nrec)); + api_incr_top(L); + lua_unlock(L); +} + + +LUA_API int lua_getmetatable (lua_State *L, int objindex) { + const TValue *obj; + Table *mt = NULL; + int res; + lua_lock(L); + obj = index2adr(L, objindex); + switch (ttype(obj)) { + case LUA_TTABLE: + mt = hvalue(obj)->metatable; + break; + case LUA_TUSERDATA: + mt = uvalue(obj)->metatable; + break; + default: + mt = G(L)->mt[ttype(obj)]; + break; + } + if (mt == NULL) + res = 0; + else { + sethvalue(L, L->top, mt); + api_incr_top(L); + res = 1; + } + lua_unlock(L); + return res; +} + + +LUA_API void lua_getfenv (lua_State *L, int idx) { + StkId o; + lua_lock(L); + o = index2adr(L, idx); + api_checkvalidindex(L, o); + switch (ttype(o)) { + case LUA_TFUNCTION: + sethvalue(L, L->top, clvalue(o)->c.env); + break; + case LUA_TUSERDATA: + sethvalue(L, L->top, uvalue(o)->env); + break; + case LUA_TTHREAD: + setobj2s(L, L->top, gt(thvalue(o))); + break; + default: + setnilvalue(L->top); + break; + } + api_incr_top(L); + lua_unlock(L); +} + + +/* +** set functions (stack -> Lua) +*/ + + +LUA_API void lua_settable (lua_State *L, int idx) { + StkId t; + lua_lock(L); + api_checknelems(L, 2); + t = index2adr(L, idx); + api_checkvalidindex(L, t); + luaV_settable(L, t, L->top - 2, L->top - 1); + L->top -= 2; /* pop index and value */ + lua_unlock(L); +} + + +LUA_API void lua_setfield (lua_State *L, int idx, const char *k) { + StkId t; + TValue key; + lua_lock(L); + api_checknelems(L, 1); + t = index2adr(L, idx); + api_checkvalidindex(L, t); + setsvalue(L, &key, luaS_new(L, k)); + luaV_settable(L, t, &key, L->top - 1); + L->top--; /* pop value */ + lua_unlock(L); +} + + +LUA_API void lua_rawset (lua_State *L, int idx) { + StkId t; + lua_lock(L); + api_checknelems(L, 2); + t = index2adr(L, idx); + api_check(L, ttistable(t)); + setobj2t(L, luaH_set(L, hvalue(t), L->top-2), L->top-1); + luaC_barriert(L, hvalue(t), L->top-1); + L->top -= 2; + lua_unlock(L); +} + + +LUA_API void lua_rawseti (lua_State *L, int idx, int n) { + StkId o; + lua_lock(L); + api_checknelems(L, 1); + o = index2adr(L, idx); + api_check(L, ttistable(o)); + setobj2t(L, luaH_setnum(L, hvalue(o), n), L->top-1); + luaC_barriert(L, hvalue(o), L->top-1); + L->top--; + lua_unlock(L); +} + + +LUA_API int lua_setmetatable (lua_State *L, int objindex) { + TValue *obj; + Table *mt; + lua_lock(L); + api_checknelems(L, 1); + obj = index2adr(L, objindex); + api_checkvalidindex(L, obj); + if (ttisnil(L->top - 1)) + mt = NULL; + else { + api_check(L, ttistable(L->top - 1)); + mt = hvalue(L->top - 1); + } + switch (ttype(obj)) { + case LUA_TTABLE: { + hvalue(obj)->metatable = mt; + if (mt) + luaC_objbarriert(L, hvalue(obj), mt); + break; + } + case LUA_TUSERDATA: { + uvalue(obj)->metatable = mt; + if (mt) + luaC_objbarrier(L, rawuvalue(obj), mt); + break; + } + default: { + G(L)->mt[ttype(obj)] = mt; + break; + } + } + L->top--; + lua_unlock(L); + return 1; +} + + +LUA_API int lua_setfenv (lua_State *L, int idx) { + StkId o; + int res = 1; + lua_lock(L); + api_checknelems(L, 1); + o = index2adr(L, idx); + api_checkvalidindex(L, o); + api_check(L, ttistable(L->top - 1)); + switch (ttype(o)) { + case LUA_TFUNCTION: + clvalue(o)->c.env = hvalue(L->top - 1); + break; + case LUA_TUSERDATA: + uvalue(o)->env = hvalue(L->top - 1); + break; + case LUA_TTHREAD: + sethvalue(L, gt(thvalue(o)), hvalue(L->top - 1)); + break; + default: + res = 0; + break; + } + luaC_objbarrier(L, gcvalue(o), hvalue(L->top - 1)); + L->top--; + lua_unlock(L); + return res; +} + + +/* +** `load' and `call' functions (run Lua code) +*/ + + +#define adjustresults(L,nres) \ + { if (nres == LUA_MULTRET && L->top >= L->ci->top) L->ci->top = L->top; } + + +#define checkresults(L,na,nr) \ + api_check(L, (nr) == LUA_MULTRET || (L->ci->top - L->top >= (nr) - (na))) + + +LUA_API void lua_call (lua_State *L, int nargs, int nresults) { + StkId func; + lua_lock(L); + api_checknelems(L, nargs+1); + checkresults(L, nargs, nresults); + func = L->top - (nargs+1); + luaD_call(L, func, nresults); + adjustresults(L, nresults); + lua_unlock(L); +} + + + +/* +** Execute a protected call. +*/ +struct CallS { /* data to `f_call' */ + StkId func; + int nresults; +}; + + +static void f_call (lua_State *L, void *ud) { + struct CallS *c = cast(struct CallS *, ud); + luaD_call(L, c->func, c->nresults); +} + + + +LUA_API int lua_pcall (lua_State *L, int nargs, int nresults, int errfunc) { + struct CallS c; + int status; + ptrdiff_t func; + lua_lock(L); + api_checknelems(L, nargs+1); + checkresults(L, nargs, nresults); + if (errfunc == 0) + func = 0; + else { + StkId o = index2adr(L, errfunc); + api_checkvalidindex(L, o); + func = savestack(L, o); + } + c.func = L->top - (nargs+1); /* function to be called */ + c.nresults = nresults; + status = luaD_pcall(L, f_call, &c, savestack(L, c.func), func); + adjustresults(L, nresults); + lua_unlock(L); + return status; +} + + +/* +** Execute a protected C call. +*/ +struct CCallS { /* data to `f_Ccall' */ + lua_CFunction func; + void *ud; +}; + + +static void f_Ccall (lua_State *L, void *ud) { + struct CCallS *c = cast(struct CCallS *, ud); + Closure *cl; + cl = luaF_newCclosure(L, 0, getcurrenv(L)); + cl->c.f = c->func; + setclvalue(L, L->top, cl); /* push function */ + api_incr_top(L); + setpvalue(L->top, c->ud); /* push only argument */ + api_incr_top(L); + luaD_call(L, L->top - 2, 0); +} + + +LUA_API int lua_cpcall (lua_State *L, lua_CFunction func, void *ud) { + struct CCallS c; + int status; + lua_lock(L); + c.func = func; + c.ud = ud; + status = luaD_pcall(L, f_Ccall, &c, savestack(L, L->top), 0); + lua_unlock(L); + return status; +} + + +LUA_API int lua_load (lua_State *L, lua_Reader reader, void *data, + const char *chunkname) { + ZIO z; + int status; + lua_lock(L); + if (!chunkname) chunkname = "?"; + luaZ_init(L, &z, reader, data); + status = luaD_protectedparser(L, &z, chunkname); + lua_unlock(L); + return status; +} + + +LUA_API int lua_dump (lua_State *L, lua_Writer writer, void *data) { + int status; + TValue *o; + lua_lock(L); + api_checknelems(L, 1); + o = L->top - 1; + if (isLfunction(o)) + status = luaU_dump(L, clvalue(o)->l.p, writer, data, 0); + else + status = 1; + lua_unlock(L); + return status; +} + + +LUA_API int lua_status (lua_State *L) { + return L->status; +} + + +/* +** Garbage-collection function +*/ + +LUA_API int lua_gc (lua_State *L, int what, int data) { + int res = 0; + global_State *g; + lua_lock(L); + g = G(L); + switch (what) { + case LUA_GCSTOP: { + g->GCthreshold = MAX_LUMEM; + break; + } + case LUA_GCRESTART: { + g->GCthreshold = g->totalbytes; + break; + } + case LUA_GCCOLLECT: { + luaC_fullgc(L); + break; + } + case LUA_GCCOUNT: { + /* GC values are expressed in Kbytes: #bytes/2^10 */ + res = cast_int(g->totalbytes >> 10); + break; + } + case LUA_GCCOUNTB: { + res = cast_int(g->totalbytes & 0x3ff); + break; + } + case LUA_GCSTEP: { + lu_mem a = (cast(lu_mem, data) << 10); + if (a <= g->totalbytes) + g->GCthreshold = g->totalbytes - a; + else + g->GCthreshold = 0; + while (g->GCthreshold <= g->totalbytes) + luaC_step(L); + if (g->gcstate == GCSpause) /* end of cycle? */ + res = 1; /* signal it */ + break; + } + case LUA_GCSETPAUSE: { + res = g->gcpause; + g->gcpause = data; + break; + } + case LUA_GCSETSTEPMUL: { + res = g->gcstepmul; + g->gcstepmul = data; + break; + } + default: res = -1; /* invalid option */ + } + lua_unlock(L); + return res; +} + + + +/* +** miscellaneous functions +*/ + + +LUA_API int lua_error (lua_State *L) { + lua_lock(L); + api_checknelems(L, 1); + luaG_errormsg(L); + lua_unlock(L); + return 0; /* to avoid warnings */ +} + + +LUA_API int lua_next (lua_State *L, int idx) { + StkId t; + int more; + lua_lock(L); + t = index2adr(L, idx); + api_check(L, ttistable(t)); + more = luaH_next(L, hvalue(t), L->top - 1); + if (more) { + api_incr_top(L); + } + else /* no more elements */ + L->top -= 1; /* remove key */ + lua_unlock(L); + return more; +} + + +LUA_API void lua_concat (lua_State *L, int n) { + lua_lock(L); + api_checknelems(L, n); + if (n >= 2) { + luaC_checkGC(L); + luaV_concat(L, n, cast_int(L->top - L->base) - 1); + L->top -= (n-1); + } + else if (n == 0) { /* push empty string */ + setsvalue2s(L, L->top, luaS_newlstr(L, "", 0)); + api_incr_top(L); + } + /* else n == 1; nothing to do */ + lua_unlock(L); +} + + +LUA_API lua_Alloc lua_getallocf (lua_State *L, void **ud) { + lua_Alloc f; + lua_lock(L); + if (ud) *ud = G(L)->ud; + f = G(L)->frealloc; + lua_unlock(L); + return f; +} + + +LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud) { + lua_lock(L); + G(L)->ud = ud; + G(L)->frealloc = f; + lua_unlock(L); +} + + +LUA_API void *lua_newuserdata (lua_State *L, size_t size) { + Udata *u; + lua_lock(L); + luaC_checkGC(L); + u = luaS_newudata(L, size, getcurrenv(L)); + setuvalue(L, L->top, u); + api_incr_top(L); + lua_unlock(L); + return u + 1; +} + + + + +static const char *aux_upvalue (StkId fi, int n, TValue **val) { + Closure *f; + if (!ttisfunction(fi)) return NULL; + f = clvalue(fi); + if (f->c.isC) { + if (!(1 <= n && n <= f->c.nupvalues)) return NULL; + *val = &f->c.upvalue[n-1]; + return ""; + } + else { + Proto *p = f->l.p; + if (!(1 <= n && n <= p->sizeupvalues)) return NULL; + *val = f->l.upvals[n-1]->v; + return getstr(p->upvalues[n-1]); + } +} + + +LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n) { + const char *name; + TValue *val; + lua_lock(L); + name = aux_upvalue(index2adr(L, funcindex), n, &val); + if (name) { + setobj2s(L, L->top, val); + api_incr_top(L); + } + lua_unlock(L); + return name; +} + + +LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n) { + const char *name; + TValue *val; + StkId fi; + lua_lock(L); + fi = index2adr(L, funcindex); + api_checknelems(L, 1); + name = aux_upvalue(fi, n, &val); + if (name) { + L->top--; + setobj(L, val, L->top); + luaC_barrier(L, clvalue(fi), L->top); + } + lua_unlock(L); + return name; +} + diff --git a/lib/lua/src/lapi.h b/lib/lua/src/lapi.h new file mode 100644 index 0000000..9d1d435 --- /dev/null +++ b/lib/lua/src/lapi.h @@ -0,0 +1,16 @@ +/* +** $Id: lapi.h,v 2.2 2005/04/25 19:24:10 roberto Exp $ +** Auxiliary functions from Lua API +** See Copyright Notice in lua.h +*/ + +#ifndef lapi_h +#define lapi_h + + +#include "lobject.h" + + +LUAI_FUNC void luaA_pushobject (lua_State *L, const TValue *o); + +#endif diff --git a/lib/lua/src/lauxlib.c b/lib/lua/src/lauxlib.c new file mode 100644 index 0000000..96a6b85 --- /dev/null +++ b/lib/lua/src/lauxlib.c @@ -0,0 +1,653 @@ +/* +** $Id: lauxlib.c,v 1.159 2006/03/21 19:31:09 roberto Exp $ +** Auxiliary functions for building Lua libraries +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include +#include +#include +#include + + +/* This file uses only the official API of Lua. +** Any function declared here could be written as an application function. +*/ + +#define lauxlib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" + + +#define FREELIST_REF 0 /* free list of references */ + + +/* convert a stack index to positive */ +#define abs_index(L, i) ((i) > 0 || (i) <= LUA_REGISTRYINDEX ? (i) : \ + lua_gettop(L) + (i) + 1) + + +/* +** {====================================================== +** Error-report functions +** ======================================================= +*/ + + +LUALIB_API int luaL_argerror (lua_State *L, int narg, const char *extramsg) { + lua_Debug ar; + if (!lua_getstack(L, 0, &ar)) /* no stack frame? */ + return luaL_error(L, "bad argument #%d (%s)", narg, extramsg); + lua_getinfo(L, "n", &ar); + if (strcmp(ar.namewhat, "method") == 0) { + narg--; /* do not count `self' */ + if (narg == 0) /* error is in the self argument itself? */ + return luaL_error(L, "calling " LUA_QS " on bad self (%s)", + ar.name, extramsg); + } + if (ar.name == NULL) + ar.name = "?"; + return luaL_error(L, "bad argument #%d to " LUA_QS " (%s)", + narg, ar.name, extramsg); +} + + +LUALIB_API int luaL_typerror (lua_State *L, int narg, const char *tname) { + const char *msg = lua_pushfstring(L, "%s expected, got %s", + tname, luaL_typename(L, narg)); + return luaL_argerror(L, narg, msg); +} + + +static void tag_error (lua_State *L, int narg, int tag) { + luaL_typerror(L, narg, lua_typename(L, tag)); +} + + +LUALIB_API void luaL_where (lua_State *L, int level) { + lua_Debug ar; + if (lua_getstack(L, level, &ar)) { /* check function at level */ + lua_getinfo(L, "Sl", &ar); /* get info about it */ + if (ar.currentline > 0) { /* is there info? */ + lua_pushfstring(L, "%s:%d: ", ar.short_src, ar.currentline); + return; + } + } + lua_pushliteral(L, ""); /* else, no information available... */ +} + + +LUALIB_API int luaL_error (lua_State *L, const char *fmt, ...) { + va_list argp; + va_start(argp, fmt); + luaL_where(L, 1); + lua_pushvfstring(L, fmt, argp); + va_end(argp); + lua_concat(L, 2); + return lua_error(L); +} + +/* }====================================================== */ + + +LUALIB_API int luaL_checkoption (lua_State *L, int narg, const char *def, + const char *const lst[]) { + const char *name = (def) ? luaL_optstring(L, narg, def) : + luaL_checkstring(L, narg); + int i; + for (i=0; lst[i]; i++) + if (strcmp(lst[i], name) == 0) + return i; + return luaL_argerror(L, narg, + lua_pushfstring(L, "invalid option " LUA_QS, name)); +} + + +LUALIB_API int luaL_newmetatable (lua_State *L, const char *tname) { + lua_getfield(L, LUA_REGISTRYINDEX, tname); /* get registry.name */ + if (!lua_isnil(L, -1)) /* name already in use? */ + return 0; /* leave previous value on top, but return 0 */ + lua_pop(L, 1); + lua_newtable(L); /* create metatable */ + lua_pushvalue(L, -1); + lua_setfield(L, LUA_REGISTRYINDEX, tname); /* registry.name = metatable */ + return 1; +} + + +LUALIB_API void *luaL_checkudata (lua_State *L, int ud, const char *tname) { + void *p = lua_touserdata(L, ud); + if (p != NULL) { /* value is a userdata? */ + if (lua_getmetatable(L, ud)) { /* does it have a metatable? */ + lua_getfield(L, LUA_REGISTRYINDEX, tname); /* get correct metatable */ + if (lua_rawequal(L, -1, -2)) { /* does it have the correct mt? */ + lua_pop(L, 2); /* remove both metatables */ + return p; + } + } + } + luaL_typerror(L, ud, tname); /* else error */ + return NULL; /* to avoid warnings */ +} + + +LUALIB_API void luaL_checkstack (lua_State *L, int space, const char *mes) { + if (!lua_checkstack(L, space)) + luaL_error(L, "stack overflow (%s)", mes); +} + + +LUALIB_API void luaL_checktype (lua_State *L, int narg, int t) { + if (lua_type(L, narg) != t) + tag_error(L, narg, t); +} + + +LUALIB_API void luaL_checkany (lua_State *L, int narg) { + if (lua_type(L, narg) == LUA_TNONE) + luaL_argerror(L, narg, "value expected"); +} + + +LUALIB_API const char *luaL_checklstring (lua_State *L, int narg, size_t *len) { + const char *s = lua_tolstring(L, narg, len); + if (!s) tag_error(L, narg, LUA_TSTRING); + return s; +} + + +LUALIB_API const char *luaL_optlstring (lua_State *L, int narg, + const char *def, size_t *len) { + if (lua_isnoneornil(L, narg)) { + if (len) + *len = (def ? strlen(def) : 0); + return def; + } + else return luaL_checklstring(L, narg, len); +} + + +LUALIB_API lua_Number luaL_checknumber (lua_State *L, int narg) { + lua_Number d = lua_tonumber(L, narg); + if (d == 0 && !lua_isnumber(L, narg)) /* avoid extra test when d is not 0 */ + tag_error(L, narg, LUA_TNUMBER); + return d; +} + + +LUALIB_API lua_Number luaL_optnumber (lua_State *L, int narg, lua_Number def) { + return luaL_opt(L, luaL_checknumber, narg, def); +} + + +LUALIB_API lua_Integer luaL_checkinteger (lua_State *L, int narg) { + lua_Integer d = lua_tointeger(L, narg); + if (d == 0 && !lua_isnumber(L, narg)) /* avoid extra test when d is not 0 */ + tag_error(L, narg, LUA_TNUMBER); + return d; +} + + +LUALIB_API lua_Integer luaL_optinteger (lua_State *L, int narg, + lua_Integer def) { + return luaL_opt(L, luaL_checkinteger, narg, def); +} + + +LUALIB_API int luaL_getmetafield (lua_State *L, int obj, const char *event) { + if (!lua_getmetatable(L, obj)) /* no metatable? */ + return 0; + lua_pushstring(L, event); + lua_rawget(L, -2); + if (lua_isnil(L, -1)) { + lua_pop(L, 2); /* remove metatable and metafield */ + return 0; + } + else { + lua_remove(L, -2); /* remove only metatable */ + return 1; + } +} + + +LUALIB_API int luaL_callmeta (lua_State *L, int obj, const char *event) { + obj = abs_index(L, obj); + if (!luaL_getmetafield(L, obj, event)) /* no metafield? */ + return 0; + lua_pushvalue(L, obj); + lua_call(L, 1, 1); + return 1; +} + + +LUALIB_API void (luaL_register) (lua_State *L, const char *libname, + const luaL_Reg *l) { + luaI_openlib(L, libname, l, 0); +} + + +static int libsize (const luaL_Reg *l) { + int size = 0; + for (; l->name; l++) size++; + return size; +} + + +LUALIB_API void luaI_openlib (lua_State *L, const char *libname, + const luaL_Reg *l, int nup) { + if (libname) { + int size = libsize(l); + /* check whether lib already exists */ + luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", size); + lua_getfield(L, -1, libname); /* get _LOADED[libname] */ + if (!lua_istable(L, -1)) { /* not found? */ + lua_pop(L, 1); /* remove previous result */ + /* try global variable (and create one if it does not exist) */ + if (luaL_findtable(L, LUA_GLOBALSINDEX, libname, size) != NULL) + luaL_error(L, "name conflict for module " LUA_QS, libname); + lua_pushvalue(L, -1); + lua_setfield(L, -3, libname); /* _LOADED[libname] = new table */ + } + lua_remove(L, -2); /* remove _LOADED table */ + lua_insert(L, -(nup+1)); /* move library table to below upvalues */ + } + for (; l->name; l++) { + int i; + for (i=0; ifunc, nup); + lua_setfield(L, -(nup+2), l->name); + } + lua_pop(L, nup); /* remove upvalues */ +} + + + +/* +** {====================================================== +** getn-setn: size for arrays +** ======================================================= +*/ + +#if defined(LUA_COMPAT_GETN) + +static int checkint (lua_State *L, int topop) { + int n = (lua_type(L, -1) == LUA_TNUMBER) ? lua_tointeger(L, -1) : -1; + lua_pop(L, topop); + return n; +} + + +static void getsizes (lua_State *L) { + lua_getfield(L, LUA_REGISTRYINDEX, "LUA_SIZES"); + if (lua_isnil(L, -1)) { /* no `size' table? */ + lua_pop(L, 1); /* remove nil */ + lua_newtable(L); /* create it */ + lua_pushvalue(L, -1); /* `size' will be its own metatable */ + lua_setmetatable(L, -2); + lua_pushliteral(L, "kv"); + lua_setfield(L, -2, "__mode"); /* metatable(N).__mode = "kv" */ + lua_pushvalue(L, -1); + lua_setfield(L, LUA_REGISTRYINDEX, "LUA_SIZES"); /* store in register */ + } +} + + +LUALIB_API void luaL_setn (lua_State *L, int t, int n) { + t = abs_index(L, t); + lua_pushliteral(L, "n"); + lua_rawget(L, t); + if (checkint(L, 1) >= 0) { /* is there a numeric field `n'? */ + lua_pushliteral(L, "n"); /* use it */ + lua_pushinteger(L, n); + lua_rawset(L, t); + } + else { /* use `sizes' */ + getsizes(L); + lua_pushvalue(L, t); + lua_pushinteger(L, n); + lua_rawset(L, -3); /* sizes[t] = n */ + lua_pop(L, 1); /* remove `sizes' */ + } +} + + +LUALIB_API int luaL_getn (lua_State *L, int t) { + int n; + t = abs_index(L, t); + lua_pushliteral(L, "n"); /* try t.n */ + lua_rawget(L, t); + if ((n = checkint(L, 1)) >= 0) return n; + getsizes(L); /* else try sizes[t] */ + lua_pushvalue(L, t); + lua_rawget(L, -2); + if ((n = checkint(L, 2)) >= 0) return n; + return (int)lua_objlen(L, t); +} + +#endif + +/* }====================================================== */ + + + +LUALIB_API const char *luaL_gsub (lua_State *L, const char *s, const char *p, + const char *r) { + const char *wild; + size_t l = strlen(p); + luaL_Buffer b; + luaL_buffinit(L, &b); + while ((wild = strstr(s, p)) != NULL) { + luaL_addlstring(&b, s, wild - s); /* push prefix */ + luaL_addstring(&b, r); /* push replacement in place of pattern */ + s = wild + l; /* continue after `p' */ + } + luaL_addstring(&b, s); /* push last suffix */ + luaL_pushresult(&b); + return lua_tostring(L, -1); +} + + +LUALIB_API const char *luaL_findtable (lua_State *L, int idx, + const char *fname, int szhint) { + const char *e; + lua_pushvalue(L, idx); + do { + e = strchr(fname, '.'); + if (e == NULL) e = fname + strlen(fname); + lua_pushlstring(L, fname, e - fname); + lua_rawget(L, -2); + if (lua_isnil(L, -1)) { /* no such field? */ + lua_pop(L, 1); /* remove this nil */ + lua_createtable(L, 0, (*e == '.' ? 1 : szhint)); /* new table for field */ + lua_pushlstring(L, fname, e - fname); + lua_pushvalue(L, -2); + lua_settable(L, -4); /* set new table into field */ + } + else if (!lua_istable(L, -1)) { /* field has a non-table value? */ + lua_pop(L, 2); /* remove table and value */ + return fname; /* return problematic part of the name */ + } + lua_remove(L, -2); /* remove previous table */ + fname = e + 1; + } while (*e == '.'); + return NULL; +} + + + +/* +** {====================================================== +** Generic Buffer manipulation +** ======================================================= +*/ + + +#define bufflen(B) ((B)->p - (B)->buffer) +#define bufffree(B) ((size_t)(LUAL_BUFFERSIZE - bufflen(B))) + +#define LIMIT (LUA_MINSTACK/2) + + +static int emptybuffer (luaL_Buffer *B) { + size_t l = bufflen(B); + if (l == 0) return 0; /* put nothing on stack */ + else { + lua_pushlstring(B->L, B->buffer, l); + B->p = B->buffer; + B->lvl++; + return 1; + } +} + + +static void adjuststack (luaL_Buffer *B) { + if (B->lvl > 1) { + lua_State *L = B->L; + int toget = 1; /* number of levels to concat */ + size_t toplen = lua_strlen(L, -1); + do { + size_t l = lua_strlen(L, -(toget+1)); + if (B->lvl - toget + 1 >= LIMIT || toplen > l) { + toplen += l; + toget++; + } + else break; + } while (toget < B->lvl); + lua_concat(L, toget); + B->lvl = B->lvl - toget + 1; + } +} + + +LUALIB_API char *luaL_prepbuffer (luaL_Buffer *B) { + if (emptybuffer(B)) + adjuststack(B); + return B->buffer; +} + + +LUALIB_API void luaL_addlstring (luaL_Buffer *B, const char *s, size_t l) { + while (l--) + luaL_addchar(B, *s++); +} + + +LUALIB_API void luaL_addstring (luaL_Buffer *B, const char *s) { + luaL_addlstring(B, s, strlen(s)); +} + + +LUALIB_API void luaL_pushresult (luaL_Buffer *B) { + emptybuffer(B); + lua_concat(B->L, B->lvl); + B->lvl = 1; +} + + +LUALIB_API void luaL_addvalue (luaL_Buffer *B) { + lua_State *L = B->L; + size_t vl; + const char *s = lua_tolstring(L, -1, &vl); + if (vl <= bufffree(B)) { /* fit into buffer? */ + memcpy(B->p, s, vl); /* put it there */ + B->p += vl; + lua_pop(L, 1); /* remove from stack */ + } + else { + if (emptybuffer(B)) + lua_insert(L, -2); /* put buffer before new value */ + B->lvl++; /* add new value into B stack */ + adjuststack(B); + } +} + + +LUALIB_API void luaL_buffinit (lua_State *L, luaL_Buffer *B) { + B->L = L; + B->p = B->buffer; + B->lvl = 0; +} + +/* }====================================================== */ + + +LUALIB_API int luaL_ref (lua_State *L, int t) { + int ref; + t = abs_index(L, t); + if (lua_isnil(L, -1)) { + lua_pop(L, 1); /* remove from stack */ + return LUA_REFNIL; /* `nil' has a unique fixed reference */ + } + lua_rawgeti(L, t, FREELIST_REF); /* get first free element */ + ref = (int)lua_tointeger(L, -1); /* ref = t[FREELIST_REF] */ + lua_pop(L, 1); /* remove it from stack */ + if (ref != 0) { /* any free element? */ + lua_rawgeti(L, t, ref); /* remove it from list */ + lua_rawseti(L, t, FREELIST_REF); /* (t[FREELIST_REF] = t[ref]) */ + } + else { /* no free elements */ + ref = (int)lua_objlen(L, t); + ref++; /* create new reference */ + } + lua_rawseti(L, t, ref); + return ref; +} + + +LUALIB_API void luaL_unref (lua_State *L, int t, int ref) { + if (ref >= 0) { + t = abs_index(L, t); + lua_rawgeti(L, t, FREELIST_REF); + lua_rawseti(L, t, ref); /* t[ref] = t[FREELIST_REF] */ + lua_pushinteger(L, ref); + lua_rawseti(L, t, FREELIST_REF); /* t[FREELIST_REF] = ref */ + } +} + + + +/* +** {====================================================== +** Load functions +** ======================================================= +*/ + +typedef struct LoadF { + int extraline; + FILE *f; + char buff[LUAL_BUFFERSIZE]; +} LoadF; + + +static const char *getF (lua_State *L, void *ud, size_t *size) { + LoadF *lf = (LoadF *)ud; + (void)L; + if (lf->extraline) { + lf->extraline = 0; + *size = 1; + return "\n"; + } + if (feof(lf->f)) return NULL; + *size = fread(lf->buff, 1, LUAL_BUFFERSIZE, lf->f); + return (*size > 0) ? lf->buff : NULL; +} + + +static int errfile (lua_State *L, const char *what, int fnameindex) { + const char *serr = strerror(errno); + const char *filename = lua_tostring(L, fnameindex) + 1; + lua_pushfstring(L, "cannot %s %s: %s", what, filename, serr); + lua_remove(L, fnameindex); + return LUA_ERRFILE; +} + + +LUALIB_API int luaL_loadfile (lua_State *L, const char *filename) { + LoadF lf; + int status, readstatus; + int c; + int fnameindex = lua_gettop(L) + 1; /* index of filename on the stack */ + lf.extraline = 0; + if (filename == NULL) { + lua_pushliteral(L, "=stdin"); + lf.f = stdin; + } + else { + lua_pushfstring(L, "@%s", filename); + lf.f = fopen(filename, "r"); + if (lf.f == NULL) return errfile(L, "open", fnameindex); + } + c = getc(lf.f); + if (c == '#') { /* Unix exec. file? */ + lf.extraline = 1; + while ((c = getc(lf.f)) != EOF && c != '\n') ; /* skip first line */ + if (c == '\n') c = getc(lf.f); + } + if (c == LUA_SIGNATURE[0] && lf.f != stdin) { /* binary file? */ + fclose(lf.f); + lf.f = fopen(filename, "rb"); /* reopen in binary mode */ + if (lf.f == NULL) return errfile(L, "reopen", fnameindex); + /* skip eventual `#!...' */ + while ((c = getc(lf.f)) != EOF && c != LUA_SIGNATURE[0]) ; + lf.extraline = 0; + } + ungetc(c, lf.f); + status = lua_load(L, getF, &lf, lua_tostring(L, -1)); + readstatus = ferror(lf.f); + if (lf.f != stdin) fclose(lf.f); /* close file (even in case of errors) */ + if (readstatus) { + lua_settop(L, fnameindex); /* ignore results from `lua_load' */ + return errfile(L, "read", fnameindex); + } + lua_remove(L, fnameindex); + return status; +} + + +typedef struct LoadS { + const char *s; + size_t size; +} LoadS; + + +static const char *getS (lua_State *L, void *ud, size_t *size) { + LoadS *ls = (LoadS *)ud; + (void)L; + if (ls->size == 0) return NULL; + *size = ls->size; + ls->size = 0; + return ls->s; +} + + +LUALIB_API int luaL_loadbuffer (lua_State *L, const char *buff, size_t size, + const char *name) { + LoadS ls; + ls.s = buff; + ls.size = size; + return lua_load(L, getS, &ls, name); +} + + +LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s) { + return luaL_loadbuffer(L, s, strlen(s), s); +} + + + +/* }====================================================== */ + + +static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) { + (void)ud; + (void)osize; + if (nsize == 0) { + free(ptr); + return NULL; + } + else + return realloc(ptr, nsize); +} + + +static int panic (lua_State *L) { + (void)L; /* to avoid warnings */ + fprintf(stderr, "PANIC: unprotected error in call to Lua API (%s)\n", + lua_tostring(L, -1)); + return 0; +} + + +LUALIB_API lua_State *luaL_newstate (void) { + lua_State *L = lua_newstate(l_alloc, NULL); + if (L) lua_atpanic(L, &panic); + return L; +} + diff --git a/lib/lua/src/lauxlib.h b/lib/lua/src/lauxlib.h new file mode 100644 index 0000000..1f34308 --- /dev/null +++ b/lib/lua/src/lauxlib.h @@ -0,0 +1,174 @@ +/* +** $Id: lauxlib.h,v 1.88 2006/04/12 20:31:15 roberto Exp $ +** Auxiliary functions for building Lua libraries +** See Copyright Notice in lua.h +*/ + + +#ifndef lauxlib_h +#define lauxlib_h + + +#include +#include + +#include "lua.h" + + +#if defined(LUA_COMPAT_GETN) +LUALIB_API int (luaL_getn) (lua_State *L, int t); +LUALIB_API void (luaL_setn) (lua_State *L, int t, int n); +#else +#define luaL_getn(L,i) ((int)lua_objlen(L, i)) +#define luaL_setn(L,i,j) ((void)0) /* no op! */ +#endif + +#if defined(LUA_COMPAT_OPENLIB) +#define luaI_openlib luaL_openlib +#endif + + +/* extra error code for `luaL_load' */ +#define LUA_ERRFILE (LUA_ERRERR+1) + + +typedef struct luaL_Reg { + const char *name; + lua_CFunction func; +} luaL_Reg; + + + +LUALIB_API void (luaI_openlib) (lua_State *L, const char *libname, + const luaL_Reg *l, int nup); +LUALIB_API void (luaL_register) (lua_State *L, const char *libname, + const luaL_Reg *l); +LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e); +LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e); +LUALIB_API int (luaL_typerror) (lua_State *L, int narg, const char *tname); +LUALIB_API int (luaL_argerror) (lua_State *L, int numarg, const char *extramsg); +LUALIB_API const char *(luaL_checklstring) (lua_State *L, int numArg, + size_t *l); +LUALIB_API const char *(luaL_optlstring) (lua_State *L, int numArg, + const char *def, size_t *l); +LUALIB_API lua_Number (luaL_checknumber) (lua_State *L, int numArg); +LUALIB_API lua_Number (luaL_optnumber) (lua_State *L, int nArg, lua_Number def); + +LUALIB_API lua_Integer (luaL_checkinteger) (lua_State *L, int numArg); +LUALIB_API lua_Integer (luaL_optinteger) (lua_State *L, int nArg, + lua_Integer def); + +LUALIB_API void (luaL_checkstack) (lua_State *L, int sz, const char *msg); +LUALIB_API void (luaL_checktype) (lua_State *L, int narg, int t); +LUALIB_API void (luaL_checkany) (lua_State *L, int narg); + +LUALIB_API int (luaL_newmetatable) (lua_State *L, const char *tname); +LUALIB_API void *(luaL_checkudata) (lua_State *L, int ud, const char *tname); + +LUALIB_API void (luaL_where) (lua_State *L, int lvl); +LUALIB_API int (luaL_error) (lua_State *L, const char *fmt, ...); + +LUALIB_API int (luaL_checkoption) (lua_State *L, int narg, const char *def, + const char *const lst[]); + +LUALIB_API int (luaL_ref) (lua_State *L, int t); +LUALIB_API void (luaL_unref) (lua_State *L, int t, int ref); + +LUALIB_API int (luaL_loadfile) (lua_State *L, const char *filename); +LUALIB_API int (luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, + const char *name); +LUALIB_API int (luaL_loadstring) (lua_State *L, const char *s); + +LUALIB_API lua_State *(luaL_newstate) (void); + + +LUALIB_API const char *(luaL_gsub) (lua_State *L, const char *s, const char *p, + const char *r); + +LUALIB_API const char *(luaL_findtable) (lua_State *L, int idx, + const char *fname, int szhint); + + + + +/* +** =============================================================== +** some useful macros +** =============================================================== +*/ + +#define luaL_argcheck(L, cond,numarg,extramsg) \ + ((void)((cond) || luaL_argerror(L, (numarg), (extramsg)))) +#define luaL_checkstring(L,n) (luaL_checklstring(L, (n), NULL)) +#define luaL_optstring(L,n,d) (luaL_optlstring(L, (n), (d), NULL)) +#define luaL_checkint(L,n) ((int)luaL_checkinteger(L, (n))) +#define luaL_optint(L,n,d) ((int)luaL_optinteger(L, (n), (d))) +#define luaL_checklong(L,n) ((long)luaL_checkinteger(L, (n))) +#define luaL_optlong(L,n,d) ((long)luaL_optinteger(L, (n), (d))) + +#define luaL_typename(L,i) lua_typename(L, lua_type(L,(i))) + +#define luaL_dofile(L, fn) \ + (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0)) + +#define luaL_dostring(L, s) \ + (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0)) + +#define luaL_getmetatable(L,n) (lua_getfield(L, LUA_REGISTRYINDEX, (n))) + +#define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n))) + +/* +** {====================================================== +** Generic Buffer manipulation +** ======================================================= +*/ + + + +typedef struct luaL_Buffer { + char *p; /* current position in buffer */ + int lvl; /* number of strings in the stack (level) */ + lua_State *L; + char buffer[LUAL_BUFFERSIZE]; +} luaL_Buffer; + +#define luaL_addchar(B,c) \ + ((void)((B)->p < ((B)->buffer+LUAL_BUFFERSIZE) || luaL_prepbuffer(B)), \ + (*(B)->p++ = (char)(c))) + +/* compatibility only */ +#define luaL_putchar(B,c) luaL_addchar(B,c) + +#define luaL_addsize(B,n) ((B)->p += (n)) + +LUALIB_API void (luaL_buffinit) (lua_State *L, luaL_Buffer *B); +LUALIB_API char *(luaL_prepbuffer) (luaL_Buffer *B); +LUALIB_API void (luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l); +LUALIB_API void (luaL_addstring) (luaL_Buffer *B, const char *s); +LUALIB_API void (luaL_addvalue) (luaL_Buffer *B); +LUALIB_API void (luaL_pushresult) (luaL_Buffer *B); + + +/* }====================================================== */ + + +/* compatibility with ref system */ + +/* pre-defined references */ +#define LUA_NOREF (-2) +#define LUA_REFNIL (-1) + +#define lua_ref(L,lock) ((lock) ? luaL_ref(L, LUA_REGISTRYINDEX) : \ + (lua_pushstring(L, "unlocked references are obsolete"), lua_error(L), 0)) + +#define lua_unref(L,ref) luaL_unref(L, LUA_REGISTRYINDEX, (ref)) + +#define lua_getref(L,ref) lua_rawgeti(L, LUA_REGISTRYINDEX, (ref)) + + +#define luaL_reg luaL_Reg + +#endif + + diff --git a/lib/lua/src/lbaselib.c b/lib/lua/src/lbaselib.c new file mode 100644 index 0000000..147a727 --- /dev/null +++ b/lib/lua/src/lbaselib.c @@ -0,0 +1,643 @@ +/* +** $Id: lbaselib.c,v 1.191a 2006/06/02 15:34:00 roberto Exp $ +** Basic library +** See Copyright Notice in lua.h +*/ + + + +#include +#include +#include +#include + +#define lbaselib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + + + +/* +** If your system does not support `stdout', you can just remove this function. +** If you need, you can define your own `print' function, following this +** model but changing `fputs' to put the strings at a proper place +** (a console window or a log file, for instance). +*/ +static int luaB_print (lua_State *L) { + int n = lua_gettop(L); /* number of arguments */ + int i; + lua_getglobal(L, "tostring"); + for (i=1; i<=n; i++) { + const char *s; + lua_pushvalue(L, -1); /* function to be called */ + lua_pushvalue(L, i); /* value to print */ + lua_call(L, 1, 1); + s = lua_tostring(L, -1); /* get result */ + if (s == NULL) + return luaL_error(L, LUA_QL("tostring") " must return a string to " + LUA_QL("print")); + if (i>1) fputs("\t", stdout); + fputs(s, stdout); + lua_pop(L, 1); /* pop result */ + } + fputs("\n", stdout); + return 0; +} + + +static int luaB_tonumber (lua_State *L) { + int base = luaL_optint(L, 2, 10); + if (base == 10) { /* standard conversion */ + luaL_checkany(L, 1); + if (lua_isnumber(L, 1)) { + lua_pushnumber(L, lua_tonumber(L, 1)); + return 1; + } + } + else { + const char *s1 = luaL_checkstring(L, 1); + char *s2; + unsigned long n; + luaL_argcheck(L, 2 <= base && base <= 36, 2, "base out of range"); + n = strtoul(s1, &s2, base); + if (s1 != s2) { /* at least one valid digit? */ + while (isspace((unsigned char)(*s2))) s2++; /* skip trailing spaces */ + if (*s2 == '\0') { /* no invalid trailing characters? */ + lua_pushnumber(L, (lua_Number)n); + return 1; + } + } + } + lua_pushnil(L); /* else not a number */ + return 1; +} + + +static int luaB_error (lua_State *L) { + int level = luaL_optint(L, 2, 1); + lua_settop(L, 1); + if (lua_isstring(L, 1) && level > 0) { /* add extra information? */ + luaL_where(L, level); + lua_pushvalue(L, 1); + lua_concat(L, 2); + } + return lua_error(L); +} + + +static int luaB_getmetatable (lua_State *L) { + luaL_checkany(L, 1); + if (!lua_getmetatable(L, 1)) { + lua_pushnil(L); + return 1; /* no metatable */ + } + luaL_getmetafield(L, 1, "__metatable"); + return 1; /* returns either __metatable field (if present) or metatable */ +} + + +static int luaB_setmetatable (lua_State *L) { + int t = lua_type(L, 2); + luaL_checktype(L, 1, LUA_TTABLE); + luaL_argcheck(L, t == LUA_TNIL || t == LUA_TTABLE, 2, + "nil or table expected"); + if (luaL_getmetafield(L, 1, "__metatable")) + luaL_error(L, "cannot change a protected metatable"); + lua_settop(L, 2); + lua_setmetatable(L, 1); + return 1; +} + + +static void getfunc (lua_State *L, int opt) { + if (lua_isfunction(L, 1)) lua_pushvalue(L, 1); + else { + lua_Debug ar; + int level = opt ? luaL_optint(L, 1, 1) : luaL_checkint(L, 1); + luaL_argcheck(L, level >= 0, 1, "level must be non-negative"); + if (lua_getstack(L, level, &ar) == 0) + luaL_argerror(L, 1, "invalid level"); + lua_getinfo(L, "f", &ar); + if (lua_isnil(L, -1)) + luaL_error(L, "no function environment for tail call at level %d", + level); + } +} + + +static int luaB_getfenv (lua_State *L) { + getfunc(L, 1); + if (lua_iscfunction(L, -1)) /* is a C function? */ + lua_pushvalue(L, LUA_GLOBALSINDEX); /* return the thread's global env. */ + else + lua_getfenv(L, -1); + return 1; +} + + +static int luaB_setfenv (lua_State *L) { + luaL_checktype(L, 2, LUA_TTABLE); + getfunc(L, 0); + lua_pushvalue(L, 2); + if (lua_isnumber(L, 1) && lua_tonumber(L, 1) == 0) { + /* change environment of current thread */ + lua_pushthread(L); + lua_insert(L, -2); + lua_setfenv(L, -2); + return 0; + } + else if (lua_iscfunction(L, -2) || lua_setfenv(L, -2) == 0) + luaL_error(L, + LUA_QL("setfenv") " cannot change environment of given object"); + return 1; +} + + +static int luaB_rawequal (lua_State *L) { + luaL_checkany(L, 1); + luaL_checkany(L, 2); + lua_pushboolean(L, lua_rawequal(L, 1, 2)); + return 1; +} + + +static int luaB_rawget (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + luaL_checkany(L, 2); + lua_settop(L, 2); + lua_rawget(L, 1); + return 1; +} + +static int luaB_rawset (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + luaL_checkany(L, 2); + luaL_checkany(L, 3); + lua_settop(L, 3); + lua_rawset(L, 1); + return 1; +} + + +static int luaB_gcinfo (lua_State *L) { + lua_pushinteger(L, lua_getgccount(L)); + return 1; +} + + +static int luaB_collectgarbage (lua_State *L) { + static const char *const opts[] = {"stop", "restart", "collect", + "count", "step", "setpause", "setstepmul", NULL}; + static const int optsnum[] = {LUA_GCSTOP, LUA_GCRESTART, LUA_GCCOLLECT, + LUA_GCCOUNT, LUA_GCSTEP, LUA_GCSETPAUSE, LUA_GCSETSTEPMUL}; + int o = luaL_checkoption(L, 1, "collect", opts); + int ex = luaL_optint(L, 2, 0); + int res = lua_gc(L, optsnum[o], ex); + switch (optsnum[o]) { + case LUA_GCCOUNT: { + int b = lua_gc(L, LUA_GCCOUNTB, 0); + lua_pushnumber(L, res + ((lua_Number)b/1024)); + return 1; + } + case LUA_GCSTEP: { + lua_pushboolean(L, res); + return 1; + } + default: { + lua_pushnumber(L, res); + return 1; + } + } +} + + +static int luaB_type (lua_State *L) { + luaL_checkany(L, 1); + lua_pushstring(L, luaL_typename(L, 1)); + return 1; +} + + +static int luaB_next (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + lua_settop(L, 2); /* create a 2nd argument if there isn't one */ + if (lua_next(L, 1)) + return 2; + else { + lua_pushnil(L); + return 1; + } +} + + +static int luaB_pairs (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + lua_pushvalue(L, lua_upvalueindex(1)); /* return generator, */ + lua_pushvalue(L, 1); /* state, */ + lua_pushnil(L); /* and initial value */ + return 3; +} + + +static int ipairsaux (lua_State *L) { + int i = luaL_checkint(L, 2); + luaL_checktype(L, 1, LUA_TTABLE); + i++; /* next value */ + lua_pushinteger(L, i); + lua_rawgeti(L, 1, i); + return (lua_isnil(L, -1)) ? 0 : 2; +} + + +static int luaB_ipairs (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + lua_pushvalue(L, lua_upvalueindex(1)); /* return generator, */ + lua_pushvalue(L, 1); /* state, */ + lua_pushinteger(L, 0); /* and initial value */ + return 3; +} + + +static int load_aux (lua_State *L, int status) { + if (status == 0) /* OK? */ + return 1; + else { + lua_pushnil(L); + lua_insert(L, -2); /* put before error message */ + return 2; /* return nil plus error message */ + } +} + + +static int luaB_loadstring (lua_State *L) { + size_t l; + const char *s = luaL_checklstring(L, 1, &l); + const char *chunkname = luaL_optstring(L, 2, s); + return load_aux(L, luaL_loadbuffer(L, s, l, chunkname)); +} + + +static int luaB_loadfile (lua_State *L) { + const char *fname = luaL_optstring(L, 1, NULL); + return load_aux(L, luaL_loadfile(L, fname)); +} + + +/* +** Reader for generic `load' function: `lua_load' uses the +** stack for internal stuff, so the reader cannot change the +** stack top. Instead, it keeps its resulting string in a +** reserved slot inside the stack. +*/ +static const char *generic_reader (lua_State *L, void *ud, size_t *size) { + (void)ud; /* to avoid warnings */ + luaL_checkstack(L, 2, "too many nested functions"); + lua_pushvalue(L, 1); /* get function */ + lua_call(L, 0, 1); /* call it */ + if (lua_isnil(L, -1)) { + *size = 0; + return NULL; + } + else if (lua_isstring(L, -1)) { + lua_replace(L, 3); /* save string in a reserved stack slot */ + return lua_tolstring(L, 3, size); + } + else luaL_error(L, "reader function must return a string"); + return NULL; /* to avoid warnings */ +} + + +static int luaB_load (lua_State *L) { + int status; + const char *cname = luaL_optstring(L, 2, "=(load)"); + luaL_checktype(L, 1, LUA_TFUNCTION); + lua_settop(L, 3); /* function, eventual name, plus one reserved slot */ + status = lua_load(L, generic_reader, NULL, cname); + return load_aux(L, status); +} + + +static int luaB_dofile (lua_State *L) { + const char *fname = luaL_optstring(L, 1, NULL); + int n = lua_gettop(L); + if (luaL_loadfile(L, fname) != 0) lua_error(L); + lua_call(L, 0, LUA_MULTRET); + return lua_gettop(L) - n; +} + + +static int luaB_assert (lua_State *L) { + luaL_checkany(L, 1); + if (!lua_toboolean(L, 1)) + return luaL_error(L, "%s", luaL_optstring(L, 2, "assertion failed!")); + return lua_gettop(L); +} + + +static int luaB_unpack (lua_State *L) { + int i, e, n; + luaL_checktype(L, 1, LUA_TTABLE); + i = luaL_optint(L, 2, 1); + e = luaL_opt(L, luaL_checkint, 3, luaL_getn(L, 1)); + n = e - i + 1; /* number of elements */ + if (n <= 0) return 0; /* empty range */ + luaL_checkstack(L, n, "table too big to unpack"); + for (; i<=e; i++) /* push arg[i...e] */ + lua_rawgeti(L, 1, i); + return n; +} + + +static int luaB_select (lua_State *L) { + int n = lua_gettop(L); + if (lua_type(L, 1) == LUA_TSTRING && *lua_tostring(L, 1) == '#') { + lua_pushinteger(L, n-1); + return 1; + } + else { + int i = luaL_checkint(L, 1); + if (i < 0) i = n + i; + else if (i > n) i = n; + luaL_argcheck(L, 1 <= i, 1, "index out of range"); + return n - i; + } +} + + +static int luaB_pcall (lua_State *L) { + int status; + luaL_checkany(L, 1); + status = lua_pcall(L, lua_gettop(L) - 1, LUA_MULTRET, 0); + lua_pushboolean(L, (status == 0)); + lua_insert(L, 1); + return lua_gettop(L); /* return status + all results */ +} + + +static int luaB_xpcall (lua_State *L) { + int status; + luaL_checkany(L, 2); + lua_settop(L, 2); + lua_insert(L, 1); /* put error function under function to be called */ + status = lua_pcall(L, 0, LUA_MULTRET, 1); + lua_pushboolean(L, (status == 0)); + lua_replace(L, 1); + return lua_gettop(L); /* return status + all results */ +} + + +static int luaB_tostring (lua_State *L) { + luaL_checkany(L, 1); + if (luaL_callmeta(L, 1, "__tostring")) /* is there a metafield? */ + return 1; /* use its value */ + switch (lua_type(L, 1)) { + case LUA_TNUMBER: + lua_pushstring(L, lua_tostring(L, 1)); + break; + case LUA_TSTRING: + lua_pushvalue(L, 1); + break; + case LUA_TBOOLEAN: + lua_pushstring(L, (lua_toboolean(L, 1) ? "true" : "false")); + break; + case LUA_TNIL: + lua_pushliteral(L, "nil"); + break; + default: + lua_pushfstring(L, "%s: %p", luaL_typename(L, 1), lua_topointer(L, 1)); + break; + } + return 1; +} + + +static int luaB_newproxy (lua_State *L) { + lua_settop(L, 1); + lua_newuserdata(L, 0); /* create proxy */ + if (lua_toboolean(L, 1) == 0) + return 1; /* no metatable */ + else if (lua_isboolean(L, 1)) { + lua_newtable(L); /* create a new metatable `m' ... */ + lua_pushvalue(L, -1); /* ... and mark `m' as a valid metatable */ + lua_pushboolean(L, 1); + lua_rawset(L, lua_upvalueindex(1)); /* weaktable[m] = true */ + } + else { + int validproxy = 0; /* to check if weaktable[metatable(u)] == true */ + if (lua_getmetatable(L, 1)) { + lua_rawget(L, lua_upvalueindex(1)); + validproxy = lua_toboolean(L, -1); + lua_pop(L, 1); /* remove value */ + } + luaL_argcheck(L, validproxy, 1, "boolean or proxy expected"); + lua_getmetatable(L, 1); /* metatable is valid; get it */ + } + lua_setmetatable(L, 2); + return 1; +} + + +static const luaL_Reg base_funcs[] = { + {"assert", luaB_assert}, + {"collectgarbage", luaB_collectgarbage}, + {"dofile", luaB_dofile}, + {"error", luaB_error}, + {"gcinfo", luaB_gcinfo}, + {"getfenv", luaB_getfenv}, + {"getmetatable", luaB_getmetatable}, + {"loadfile", luaB_loadfile}, + {"load", luaB_load}, + {"loadstring", luaB_loadstring}, + {"next", luaB_next}, + {"pcall", luaB_pcall}, + {"print", luaB_print}, + {"rawequal", luaB_rawequal}, + {"rawget", luaB_rawget}, + {"rawset", luaB_rawset}, + {"select", luaB_select}, + {"setfenv", luaB_setfenv}, + {"setmetatable", luaB_setmetatable}, + {"tonumber", luaB_tonumber}, + {"tostring", luaB_tostring}, + {"type", luaB_type}, + {"unpack", luaB_unpack}, + {"xpcall", luaB_xpcall}, + {NULL, NULL} +}; + + +/* +** {====================================================== +** Coroutine library +** ======================================================= +*/ + +static int auxresume (lua_State *L, lua_State *co, int narg) { + int status; + if (!lua_checkstack(co, narg)) + luaL_error(L, "too many arguments to resume"); + if (lua_status(co) == 0 && lua_gettop(co) == 0) { + lua_pushliteral(L, "cannot resume dead coroutine"); + return -1; /* error flag */ + } + lua_xmove(L, co, narg); + status = lua_resume(co, narg); + if (status == 0 || status == LUA_YIELD) { + int nres = lua_gettop(co); + if (!lua_checkstack(L, nres)) + luaL_error(L, "too many results to resume"); + lua_xmove(co, L, nres); /* move yielded values */ + return nres; + } + else { + lua_xmove(co, L, 1); /* move error message */ + return -1; /* error flag */ + } +} + + +static int luaB_coresume (lua_State *L) { + lua_State *co = lua_tothread(L, 1); + int r; + luaL_argcheck(L, co, 1, "coroutine expected"); + r = auxresume(L, co, lua_gettop(L) - 1); + if (r < 0) { + lua_pushboolean(L, 0); + lua_insert(L, -2); + return 2; /* return false + error message */ + } + else { + lua_pushboolean(L, 1); + lua_insert(L, -(r + 1)); + return r + 1; /* return true + `resume' returns */ + } +} + + +static int luaB_auxwrap (lua_State *L) { + lua_State *co = lua_tothread(L, lua_upvalueindex(1)); + int r = auxresume(L, co, lua_gettop(L)); + if (r < 0) { + if (lua_isstring(L, -1)) { /* error object is a string? */ + luaL_where(L, 1); /* add extra info */ + lua_insert(L, -2); + lua_concat(L, 2); + } + lua_error(L); /* propagate error */ + } + return r; +} + + +static int luaB_cocreate (lua_State *L) { + lua_State *NL = lua_newthread(L); + luaL_argcheck(L, lua_isfunction(L, 1) && !lua_iscfunction(L, 1), 1, + "Lua function expected"); + lua_pushvalue(L, 1); /* move function to top */ + lua_xmove(L, NL, 1); /* move function from L to NL */ + return 1; +} + + +static int luaB_cowrap (lua_State *L) { + luaB_cocreate(L); + lua_pushcclosure(L, luaB_auxwrap, 1); + return 1; +} + + +static int luaB_yield (lua_State *L) { + return lua_yield(L, lua_gettop(L)); +} + + +static int luaB_costatus (lua_State *L) { + lua_State *co = lua_tothread(L, 1); + luaL_argcheck(L, co, 1, "coroutine expected"); + if (L == co) lua_pushliteral(L, "running"); + else { + switch (lua_status(co)) { + case LUA_YIELD: + lua_pushliteral(L, "suspended"); + break; + case 0: { + lua_Debug ar; + if (lua_getstack(co, 0, &ar) > 0) /* does it have frames? */ + lua_pushliteral(L, "normal"); /* it is running */ + else if (lua_gettop(co) == 0) + lua_pushliteral(L, "dead"); + else + lua_pushliteral(L, "suspended"); /* initial state */ + break; + } + default: /* some error occured */ + lua_pushliteral(L, "dead"); + break; + } + } + return 1; +} + + +static int luaB_corunning (lua_State *L) { + if (lua_pushthread(L)) + return 0; /* main thread is not a coroutine */ + else + return 1; +} + + +static const luaL_Reg co_funcs[] = { + {"create", luaB_cocreate}, + {"resume", luaB_coresume}, + {"running", luaB_corunning}, + {"status", luaB_costatus}, + {"wrap", luaB_cowrap}, + {"yield", luaB_yield}, + {NULL, NULL} +}; + +/* }====================================================== */ + + +static void auxopen (lua_State *L, const char *name, + lua_CFunction f, lua_CFunction u) { + lua_pushcfunction(L, u); + lua_pushcclosure(L, f, 1); + lua_setfield(L, -2, name); +} + + +static void base_open (lua_State *L) { + /* set global _G */ + lua_pushvalue(L, LUA_GLOBALSINDEX); + lua_setglobal(L, "_G"); + /* open lib into global table */ + luaL_register(L, "_G", base_funcs); + lua_pushliteral(L, LUA_VERSION); + lua_setglobal(L, "_VERSION"); /* set global _VERSION */ + /* `ipairs' and `pairs' need auxliliary functions as upvalues */ + auxopen(L, "ipairs", luaB_ipairs, ipairsaux); + auxopen(L, "pairs", luaB_pairs, luaB_next); + /* `newproxy' needs a weaktable as upvalue */ + lua_createtable(L, 0, 1); /* new table `w' */ + lua_pushvalue(L, -1); /* `w' will be its own metatable */ + lua_setmetatable(L, -2); + lua_pushliteral(L, "kv"); + lua_setfield(L, -2, "__mode"); /* metatable(w).__mode = "kv" */ + lua_pushcclosure(L, luaB_newproxy, 1); + lua_setglobal(L, "newproxy"); /* set global `newproxy' */ +} + + +LUALIB_API int luaopen_base (lua_State *L) { + base_open(L); + luaL_register(L, LUA_COLIBNAME, co_funcs); + return 2; +} + diff --git a/lib/lua/src/lcode.c b/lib/lua/src/lcode.c new file mode 100644 index 0000000..9ce515a --- /dev/null +++ b/lib/lua/src/lcode.c @@ -0,0 +1,839 @@ +/* +** $Id: lcode.c,v 2.25a 2006/03/21 19:28:49 roberto Exp $ +** Code generator for Lua +** See Copyright Notice in lua.h +*/ + + +#include + +#define lcode_c +#define LUA_CORE + +#include "lua.h" + +#include "lcode.h" +#include "ldebug.h" +#include "ldo.h" +#include "lgc.h" +#include "llex.h" +#include "lmem.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lparser.h" +#include "ltable.h" + + +#define hasjumps(e) ((e)->t != (e)->f) + + +static int isnumeral(expdesc *e) { + return (e->k == VKNUM && e->t == NO_JUMP && e->f == NO_JUMP); +} + + +void luaK_nil (FuncState *fs, int from, int n) { + Instruction *previous; + if (fs->pc > fs->lasttarget) { /* no jumps to current position? */ + if (fs->pc == 0) { /* function start? */ + if (from >= fs->nactvar) + return; /* positions are already clean */ + } + else { + previous = &fs->f->code[fs->pc-1]; + if (GET_OPCODE(*previous) == OP_LOADNIL) { + int pfrom = GETARG_A(*previous); + int pto = GETARG_B(*previous); + if (pfrom <= from && from <= pto+1) { /* can connect both? */ + if (from+n-1 > pto) + SETARG_B(*previous, from+n-1); + return; + } + } + } + } + luaK_codeABC(fs, OP_LOADNIL, from, from+n-1, 0); /* else no optimization */ +} + + +int luaK_jump (FuncState *fs) { + int jpc = fs->jpc; /* save list of jumps to here */ + int j; + fs->jpc = NO_JUMP; + j = luaK_codeAsBx(fs, OP_JMP, 0, NO_JUMP); + luaK_concat(fs, &j, jpc); /* keep them on hold */ + return j; +} + + +void luaK_ret (FuncState *fs, int first, int nret) { + luaK_codeABC(fs, OP_RETURN, first, nret+1, 0); +} + + +static int condjump (FuncState *fs, OpCode op, int A, int B, int C) { + luaK_codeABC(fs, op, A, B, C); + return luaK_jump(fs); +} + + +static void fixjump (FuncState *fs, int pc, int dest) { + Instruction *jmp = &fs->f->code[pc]; + int offset = dest-(pc+1); + lua_assert(dest != NO_JUMP); + if (abs(offset) > MAXARG_sBx) + luaX_syntaxerror(fs->ls, "control structure too long"); + SETARG_sBx(*jmp, offset); +} + + +/* +** returns current `pc' and marks it as a jump target (to avoid wrong +** optimizations with consecutive instructions not in the same basic block). +*/ +int luaK_getlabel (FuncState *fs) { + fs->lasttarget = fs->pc; + return fs->pc; +} + + +static int getjump (FuncState *fs, int pc) { + int offset = GETARG_sBx(fs->f->code[pc]); + if (offset == NO_JUMP) /* point to itself represents end of list */ + return NO_JUMP; /* end of list */ + else + return (pc+1)+offset; /* turn offset into absolute position */ +} + + +static Instruction *getjumpcontrol (FuncState *fs, int pc) { + Instruction *pi = &fs->f->code[pc]; + if (pc >= 1 && testTMode(GET_OPCODE(*(pi-1)))) + return pi-1; + else + return pi; +} + + +/* +** check whether list has any jump that do not produce a value +** (or produce an inverted value) +*/ +static int need_value (FuncState *fs, int list) { + for (; list != NO_JUMP; list = getjump(fs, list)) { + Instruction i = *getjumpcontrol(fs, list); + if (GET_OPCODE(i) != OP_TESTSET) return 1; + } + return 0; /* not found */ +} + + +static int patchtestreg (FuncState *fs, int node, int reg) { + Instruction *i = getjumpcontrol(fs, node); + if (GET_OPCODE(*i) != OP_TESTSET) + return 0; /* cannot patch other instructions */ + if (reg != NO_REG && reg != GETARG_B(*i)) + SETARG_A(*i, reg); + else /* no register to put value or register already has the value */ + *i = CREATE_ABC(OP_TEST, GETARG_B(*i), 0, GETARG_C(*i)); + + return 1; +} + + +static void removevalues (FuncState *fs, int list) { + for (; list != NO_JUMP; list = getjump(fs, list)) + patchtestreg(fs, list, NO_REG); +} + + +static void patchlistaux (FuncState *fs, int list, int vtarget, int reg, + int dtarget) { + while (list != NO_JUMP) { + int next = getjump(fs, list); + if (patchtestreg(fs, list, reg)) + fixjump(fs, list, vtarget); + else + fixjump(fs, list, dtarget); /* jump to default target */ + list = next; + } +} + + +static void dischargejpc (FuncState *fs) { + patchlistaux(fs, fs->jpc, fs->pc, NO_REG, fs->pc); + fs->jpc = NO_JUMP; +} + + +void luaK_patchlist (FuncState *fs, int list, int target) { + if (target == fs->pc) + luaK_patchtohere(fs, list); + else { + lua_assert(target < fs->pc); + patchlistaux(fs, list, target, NO_REG, target); + } +} + + +void luaK_patchtohere (FuncState *fs, int list) { + luaK_getlabel(fs); + luaK_concat(fs, &fs->jpc, list); +} + + +void luaK_concat (FuncState *fs, int *l1, int l2) { + if (l2 == NO_JUMP) return; + else if (*l1 == NO_JUMP) + *l1 = l2; + else { + int list = *l1; + int next; + while ((next = getjump(fs, list)) != NO_JUMP) /* find last element */ + list = next; + fixjump(fs, list, l2); + } +} + + +void luaK_checkstack (FuncState *fs, int n) { + int newstack = fs->freereg + n; + if (newstack > fs->f->maxstacksize) { + if (newstack >= MAXSTACK) + luaX_syntaxerror(fs->ls, "function or expression too complex"); + fs->f->maxstacksize = cast_byte(newstack); + } +} + + +void luaK_reserveregs (FuncState *fs, int n) { + luaK_checkstack(fs, n); + fs->freereg += n; +} + + +static void freereg (FuncState *fs, int reg) { + if (!ISK(reg) && reg >= fs->nactvar) { + fs->freereg--; + lua_assert(reg == fs->freereg); + } +} + + +static void freeexp (FuncState *fs, expdesc *e) { + if (e->k == VNONRELOC) + freereg(fs, e->u.s.info); +} + + +static int addk (FuncState *fs, TValue *k, TValue *v) { + lua_State *L = fs->L; + TValue *idx = luaH_set(L, fs->h, k); + Proto *f = fs->f; + int oldsize = f->sizek; + if (ttisnumber(idx)) { + lua_assert(luaO_rawequalObj(&fs->f->k[cast_int(nvalue(idx))], v)); + return cast_int(nvalue(idx)); + } + else { /* constant not found; create a new entry */ + setnvalue(idx, cast_num(fs->nk)); + luaM_growvector(L, f->k, fs->nk, f->sizek, TValue, + MAXARG_Bx, "constant table overflow"); + while (oldsize < f->sizek) setnilvalue(&f->k[oldsize++]); + setobj(L, &f->k[fs->nk], v); + luaC_barrier(L, f, v); + return fs->nk++; + } +} + + +int luaK_stringK (FuncState *fs, TString *s) { + TValue o; + setsvalue(fs->L, &o, s); + return addk(fs, &o, &o); +} + + +int luaK_numberK (FuncState *fs, lua_Number r) { + TValue o; + setnvalue(&o, r); + return addk(fs, &o, &o); +} + + +static int boolK (FuncState *fs, int b) { + TValue o; + setbvalue(&o, b); + return addk(fs, &o, &o); +} + + +static int nilK (FuncState *fs) { + TValue k, v; + setnilvalue(&v); + /* cannot use nil as key; instead use table itself to represent nil */ + sethvalue(fs->L, &k, fs->h); + return addk(fs, &k, &v); +} + + +void luaK_setreturns (FuncState *fs, expdesc *e, int nresults) { + if (e->k == VCALL) { /* expression is an open function call? */ + SETARG_C(getcode(fs, e), nresults+1); + } + else if (e->k == VVARARG) { + SETARG_B(getcode(fs, e), nresults+1); + SETARG_A(getcode(fs, e), fs->freereg); + luaK_reserveregs(fs, 1); + } +} + + +void luaK_setoneret (FuncState *fs, expdesc *e) { + if (e->k == VCALL) { /* expression is an open function call? */ + e->k = VNONRELOC; + e->u.s.info = GETARG_A(getcode(fs, e)); + } + else if (e->k == VVARARG) { + SETARG_B(getcode(fs, e), 2); + e->k = VRELOCABLE; /* can relocate its simple result */ + } +} + + +void luaK_dischargevars (FuncState *fs, expdesc *e) { + switch (e->k) { + case VLOCAL: { + e->k = VNONRELOC; + break; + } + case VUPVAL: { + e->u.s.info = luaK_codeABC(fs, OP_GETUPVAL, 0, e->u.s.info, 0); + e->k = VRELOCABLE; + break; + } + case VGLOBAL: { + e->u.s.info = luaK_codeABx(fs, OP_GETGLOBAL, 0, e->u.s.info); + e->k = VRELOCABLE; + break; + } + case VINDEXED: { + freereg(fs, e->u.s.aux); + freereg(fs, e->u.s.info); + e->u.s.info = luaK_codeABC(fs, OP_GETTABLE, 0, e->u.s.info, e->u.s.aux); + e->k = VRELOCABLE; + break; + } + case VVARARG: + case VCALL: { + luaK_setoneret(fs, e); + break; + } + default: break; /* there is one value available (somewhere) */ + } +} + + +static int code_label (FuncState *fs, int A, int b, int jump) { + luaK_getlabel(fs); /* those instructions may be jump targets */ + return luaK_codeABC(fs, OP_LOADBOOL, A, b, jump); +} + + +static void discharge2reg (FuncState *fs, expdesc *e, int reg) { + luaK_dischargevars(fs, e); + switch (e->k) { + case VNIL: { + luaK_nil(fs, reg, 1); + break; + } + case VFALSE: case VTRUE: { + luaK_codeABC(fs, OP_LOADBOOL, reg, e->k == VTRUE, 0); + break; + } + case VK: { + luaK_codeABx(fs, OP_LOADK, reg, e->u.s.info); + break; + } + case VKNUM: { + luaK_codeABx(fs, OP_LOADK, reg, luaK_numberK(fs, e->u.nval)); + break; + } + case VRELOCABLE: { + Instruction *pc = &getcode(fs, e); + SETARG_A(*pc, reg); + break; + } + case VNONRELOC: { + if (reg != e->u.s.info) + luaK_codeABC(fs, OP_MOVE, reg, e->u.s.info, 0); + break; + } + default: { + lua_assert(e->k == VVOID || e->k == VJMP); + return; /* nothing to do... */ + } + } + e->u.s.info = reg; + e->k = VNONRELOC; +} + + +static void discharge2anyreg (FuncState *fs, expdesc *e) { + if (e->k != VNONRELOC) { + luaK_reserveregs(fs, 1); + discharge2reg(fs, e, fs->freereg-1); + } +} + + +static void exp2reg (FuncState *fs, expdesc *e, int reg) { + discharge2reg(fs, e, reg); + if (e->k == VJMP) + luaK_concat(fs, &e->t, e->u.s.info); /* put this jump in `t' list */ + if (hasjumps(e)) { + int final; /* position after whole expression */ + int p_f = NO_JUMP; /* position of an eventual LOAD false */ + int p_t = NO_JUMP; /* position of an eventual LOAD true */ + if (need_value(fs, e->t) || need_value(fs, e->f)) { + int fj = (e->k == VJMP) ? NO_JUMP : luaK_jump(fs); + p_f = code_label(fs, reg, 0, 1); + p_t = code_label(fs, reg, 1, 0); + luaK_patchtohere(fs, fj); + } + final = luaK_getlabel(fs); + patchlistaux(fs, e->f, final, reg, p_f); + patchlistaux(fs, e->t, final, reg, p_t); + } + e->f = e->t = NO_JUMP; + e->u.s.info = reg; + e->k = VNONRELOC; +} + + +void luaK_exp2nextreg (FuncState *fs, expdesc *e) { + luaK_dischargevars(fs, e); + freeexp(fs, e); + luaK_reserveregs(fs, 1); + exp2reg(fs, e, fs->freereg - 1); +} + + +int luaK_exp2anyreg (FuncState *fs, expdesc *e) { + luaK_dischargevars(fs, e); + if (e->k == VNONRELOC) { + if (!hasjumps(e)) return e->u.s.info; /* exp is already in a register */ + if (e->u.s.info >= fs->nactvar) { /* reg. is not a local? */ + exp2reg(fs, e, e->u.s.info); /* put value on it */ + return e->u.s.info; + } + } + luaK_exp2nextreg(fs, e); /* default */ + return e->u.s.info; +} + + +void luaK_exp2val (FuncState *fs, expdesc *e) { + if (hasjumps(e)) + luaK_exp2anyreg(fs, e); + else + luaK_dischargevars(fs, e); +} + + +int luaK_exp2RK (FuncState *fs, expdesc *e) { + luaK_exp2val(fs, e); + switch (e->k) { + case VKNUM: + case VTRUE: + case VFALSE: + case VNIL: { + if (fs->nk <= MAXINDEXRK) { /* constant fit in RK operand? */ + e->u.s.info = (e->k == VNIL) ? nilK(fs) : + (e->k == VKNUM) ? luaK_numberK(fs, e->u.nval) : + boolK(fs, (e->k == VTRUE)); + e->k = VK; + return RKASK(e->u.s.info); + } + else break; + } + case VK: { + if (e->u.s.info <= MAXINDEXRK) /* constant fit in argC? */ + return RKASK(e->u.s.info); + else break; + } + default: break; + } + /* not a constant in the right range: put it in a register */ + return luaK_exp2anyreg(fs, e); +} + + +void luaK_storevar (FuncState *fs, expdesc *var, expdesc *ex) { + switch (var->k) { + case VLOCAL: { + freeexp(fs, ex); + exp2reg(fs, ex, var->u.s.info); + return; + } + case VUPVAL: { + int e = luaK_exp2anyreg(fs, ex); + luaK_codeABC(fs, OP_SETUPVAL, e, var->u.s.info, 0); + break; + } + case VGLOBAL: { + int e = luaK_exp2anyreg(fs, ex); + luaK_codeABx(fs, OP_SETGLOBAL, e, var->u.s.info); + break; + } + case VINDEXED: { + int e = luaK_exp2RK(fs, ex); + luaK_codeABC(fs, OP_SETTABLE, var->u.s.info, var->u.s.aux, e); + break; + } + default: { + lua_assert(0); /* invalid var kind to store */ + break; + } + } + freeexp(fs, ex); +} + + +void luaK_self (FuncState *fs, expdesc *e, expdesc *key) { + int func; + luaK_exp2anyreg(fs, e); + freeexp(fs, e); + func = fs->freereg; + luaK_reserveregs(fs, 2); + luaK_codeABC(fs, OP_SELF, func, e->u.s.info, luaK_exp2RK(fs, key)); + freeexp(fs, key); + e->u.s.info = func; + e->k = VNONRELOC; +} + + +static void invertjump (FuncState *fs, expdesc *e) { + Instruction *pc = getjumpcontrol(fs, e->u.s.info); + lua_assert(testTMode(GET_OPCODE(*pc)) && GET_OPCODE(*pc) != OP_TESTSET && + GET_OPCODE(*pc) != OP_TEST); + SETARG_A(*pc, !(GETARG_A(*pc))); +} + + +static int jumponcond (FuncState *fs, expdesc *e, int cond) { + if (e->k == VRELOCABLE) { + Instruction ie = getcode(fs, e); + if (GET_OPCODE(ie) == OP_NOT) { + fs->pc--; /* remove previous OP_NOT */ + return condjump(fs, OP_TEST, GETARG_B(ie), 0, !cond); + } + /* else go through */ + } + discharge2anyreg(fs, e); + freeexp(fs, e); + return condjump(fs, OP_TESTSET, NO_REG, e->u.s.info, cond); +} + + +void luaK_goiftrue (FuncState *fs, expdesc *e) { + int pc; /* pc of last jump */ + luaK_dischargevars(fs, e); + switch (e->k) { + case VK: case VKNUM: case VTRUE: { + pc = NO_JUMP; /* always true; do nothing */ + break; + } + case VFALSE: { + pc = luaK_jump(fs); /* always jump */ + break; + } + case VJMP: { + invertjump(fs, e); + pc = e->u.s.info; + break; + } + default: { + pc = jumponcond(fs, e, 0); + break; + } + } + luaK_concat(fs, &e->f, pc); /* insert last jump in `f' list */ + luaK_patchtohere(fs, e->t); + e->t = NO_JUMP; +} + + +static void luaK_goiffalse (FuncState *fs, expdesc *e) { + int pc; /* pc of last jump */ + luaK_dischargevars(fs, e); + switch (e->k) { + case VNIL: case VFALSE: { + pc = NO_JUMP; /* always false; do nothing */ + break; + } + case VTRUE: { + pc = luaK_jump(fs); /* always jump */ + break; + } + case VJMP: { + pc = e->u.s.info; + break; + } + default: { + pc = jumponcond(fs, e, 1); + break; + } + } + luaK_concat(fs, &e->t, pc); /* insert last jump in `t' list */ + luaK_patchtohere(fs, e->f); + e->f = NO_JUMP; +} + + +static void codenot (FuncState *fs, expdesc *e) { + luaK_dischargevars(fs, e); + switch (e->k) { + case VNIL: case VFALSE: { + e->k = VTRUE; + break; + } + case VK: case VKNUM: case VTRUE: { + e->k = VFALSE; + break; + } + case VJMP: { + invertjump(fs, e); + break; + } + case VRELOCABLE: + case VNONRELOC: { + discharge2anyreg(fs, e); + freeexp(fs, e); + e->u.s.info = luaK_codeABC(fs, OP_NOT, 0, e->u.s.info, 0); + e->k = VRELOCABLE; + break; + } + default: { + lua_assert(0); /* cannot happen */ + break; + } + } + /* interchange true and false lists */ + { int temp = e->f; e->f = e->t; e->t = temp; } + removevalues(fs, e->f); + removevalues(fs, e->t); +} + + +void luaK_indexed (FuncState *fs, expdesc *t, expdesc *k) { + t->u.s.aux = luaK_exp2RK(fs, k); + t->k = VINDEXED; +} + + +static int constfolding (OpCode op, expdesc *e1, expdesc *e2) { + lua_Number v1, v2, r; + if (!isnumeral(e1) || !isnumeral(e2)) return 0; + v1 = e1->u.nval; + v2 = e2->u.nval; + switch (op) { + case OP_ADD: r = luai_numadd(v1, v2); break; + case OP_SUB: r = luai_numsub(v1, v2); break; + case OP_MUL: r = luai_nummul(v1, v2); break; + case OP_DIV: + if (v2 == 0) return 0; /* do not attempt to divide by 0 */ + r = luai_numdiv(v1, v2); break; + case OP_MOD: + if (v2 == 0) return 0; /* do not attempt to divide by 0 */ + r = luai_nummod(v1, v2); break; + case OP_POW: r = luai_numpow(v1, v2); break; + case OP_UNM: r = luai_numunm(v1); break; + case OP_LEN: return 0; /* no constant folding for 'len' */ + default: lua_assert(0); r = 0; break; + } + if (luai_numisnan(r)) return 0; /* do not attempt to produce NaN */ + e1->u.nval = r; + return 1; +} + + +static void codearith (FuncState *fs, OpCode op, expdesc *e1, expdesc *e2) { + if (constfolding(op, e1, e2)) + return; + else { + int o2 = (op != OP_UNM && op != OP_LEN) ? luaK_exp2RK(fs, e2) : 0; + int o1 = luaK_exp2RK(fs, e1); + if (o1 > o2) { + freeexp(fs, e1); + freeexp(fs, e2); + } + else { + freeexp(fs, e2); + freeexp(fs, e1); + } + e1->u.s.info = luaK_codeABC(fs, op, 0, o1, o2); + e1->k = VRELOCABLE; + } +} + + +static void codecomp (FuncState *fs, OpCode op, int cond, expdesc *e1, + expdesc *e2) { + int o1 = luaK_exp2RK(fs, e1); + int o2 = luaK_exp2RK(fs, e2); + freeexp(fs, e2); + freeexp(fs, e1); + if (cond == 0 && op != OP_EQ) { + int temp; /* exchange args to replace by `<' or `<=' */ + temp = o1; o1 = o2; o2 = temp; /* o1 <==> o2 */ + cond = 1; + } + e1->u.s.info = condjump(fs, op, cond, o1, o2); + e1->k = VJMP; +} + + +void luaK_prefix (FuncState *fs, UnOpr op, expdesc *e) { + expdesc e2; + e2.t = e2.f = NO_JUMP; e2.k = VKNUM; e2.u.nval = 0; + switch (op) { + case OPR_MINUS: { + if (e->k == VK) + luaK_exp2anyreg(fs, e); /* cannot operate on non-numeric constants */ + codearith(fs, OP_UNM, e, &e2); + break; + } + case OPR_NOT: codenot(fs, e); break; + case OPR_LEN: { + luaK_exp2anyreg(fs, e); /* cannot operate on constants */ + codearith(fs, OP_LEN, e, &e2); + break; + } + default: lua_assert(0); + } +} + + +void luaK_infix (FuncState *fs, BinOpr op, expdesc *v) { + switch (op) { + case OPR_AND: { + luaK_goiftrue(fs, v); + break; + } + case OPR_OR: { + luaK_goiffalse(fs, v); + break; + } + case OPR_CONCAT: { + luaK_exp2nextreg(fs, v); /* operand must be on the `stack' */ + break; + } + case OPR_ADD: case OPR_SUB: case OPR_MUL: case OPR_DIV: + case OPR_MOD: case OPR_POW: { + if (!isnumeral(v)) luaK_exp2RK(fs, v); + break; + } + default: { + luaK_exp2RK(fs, v); + break; + } + } +} + + +void luaK_posfix (FuncState *fs, BinOpr op, expdesc *e1, expdesc *e2) { + switch (op) { + case OPR_AND: { + lua_assert(e1->t == NO_JUMP); /* list must be closed */ + luaK_dischargevars(fs, e2); + luaK_concat(fs, &e2->f, e1->f); + *e1 = *e2; + break; + } + case OPR_OR: { + lua_assert(e1->f == NO_JUMP); /* list must be closed */ + luaK_dischargevars(fs, e2); + luaK_concat(fs, &e2->t, e1->t); + *e1 = *e2; + break; + } + case OPR_CONCAT: { + luaK_exp2val(fs, e2); + if (e2->k == VRELOCABLE && GET_OPCODE(getcode(fs, e2)) == OP_CONCAT) { + lua_assert(e1->u.s.info == GETARG_B(getcode(fs, e2))-1); + freeexp(fs, e1); + SETARG_B(getcode(fs, e2), e1->u.s.info); + e1->k = VRELOCABLE; e1->u.s.info = e2->u.s.info; + } + else { + luaK_exp2nextreg(fs, e2); /* operand must be on the 'stack' */ + codearith(fs, OP_CONCAT, e1, e2); + } + break; + } + case OPR_ADD: codearith(fs, OP_ADD, e1, e2); break; + case OPR_SUB: codearith(fs, OP_SUB, e1, e2); break; + case OPR_MUL: codearith(fs, OP_MUL, e1, e2); break; + case OPR_DIV: codearith(fs, OP_DIV, e1, e2); break; + case OPR_MOD: codearith(fs, OP_MOD, e1, e2); break; + case OPR_POW: codearith(fs, OP_POW, e1, e2); break; + case OPR_EQ: codecomp(fs, OP_EQ, 1, e1, e2); break; + case OPR_NE: codecomp(fs, OP_EQ, 0, e1, e2); break; + case OPR_LT: codecomp(fs, OP_LT, 1, e1, e2); break; + case OPR_LE: codecomp(fs, OP_LE, 1, e1, e2); break; + case OPR_GT: codecomp(fs, OP_LT, 0, e1, e2); break; + case OPR_GE: codecomp(fs, OP_LE, 0, e1, e2); break; + default: lua_assert(0); + } +} + + +void luaK_fixline (FuncState *fs, int line) { + fs->f->lineinfo[fs->pc - 1] = line; +} + + +static int luaK_code (FuncState *fs, Instruction i, int line) { + Proto *f = fs->f; + dischargejpc(fs); /* `pc' will change */ + /* put new instruction in code array */ + luaM_growvector(fs->L, f->code, fs->pc, f->sizecode, Instruction, + MAX_INT, "code size overflow"); + f->code[fs->pc] = i; + /* save corresponding line information */ + luaM_growvector(fs->L, f->lineinfo, fs->pc, f->sizelineinfo, int, + MAX_INT, "code size overflow"); + f->lineinfo[fs->pc] = line; + return fs->pc++; +} + + +int luaK_codeABC (FuncState *fs, OpCode o, int a, int b, int c) { + lua_assert(getOpMode(o) == iABC); + lua_assert(getBMode(o) != OpArgN || b == 0); + lua_assert(getCMode(o) != OpArgN || c == 0); + return luaK_code(fs, CREATE_ABC(o, a, b, c), fs->ls->lastline); +} + + +int luaK_codeABx (FuncState *fs, OpCode o, int a, unsigned int bc) { + lua_assert(getOpMode(o) == iABx || getOpMode(o) == iAsBx); + lua_assert(getCMode(o) == OpArgN); + return luaK_code(fs, CREATE_ABx(o, a, bc), fs->ls->lastline); +} + + +void luaK_setlist (FuncState *fs, int base, int nelems, int tostore) { + int c = (nelems - 1)/LFIELDS_PER_FLUSH + 1; + int b = (tostore == LUA_MULTRET) ? 0 : tostore; + lua_assert(tostore != 0); + if (c <= MAXARG_C) + luaK_codeABC(fs, OP_SETLIST, base, b, c); + else { + luaK_codeABC(fs, OP_SETLIST, base, b, 0); + luaK_code(fs, cast(Instruction, c), fs->ls->lastline); + } + fs->freereg = base + 1; /* free registers with list values */ +} + diff --git a/lib/lua/src/lcode.h b/lib/lua/src/lcode.h new file mode 100644 index 0000000..c02cb2b --- /dev/null +++ b/lib/lua/src/lcode.h @@ -0,0 +1,76 @@ +/* +** $Id: lcode.h,v 1.48 2006/03/21 19:28:03 roberto Exp $ +** Code generator for Lua +** See Copyright Notice in lua.h +*/ + +#ifndef lcode_h +#define lcode_h + +#include "llex.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lparser.h" + + +/* +** Marks the end of a patch list. It is an invalid value both as an absolute +** address, and as a list link (would link an element to itself). +*/ +#define NO_JUMP (-1) + + +/* +** grep "ORDER OPR" if you change these enums +*/ +typedef enum BinOpr { + OPR_ADD, OPR_SUB, OPR_MUL, OPR_DIV, OPR_MOD, OPR_POW, + OPR_CONCAT, + OPR_NE, OPR_EQ, + OPR_LT, OPR_LE, OPR_GT, OPR_GE, + OPR_AND, OPR_OR, + OPR_NOBINOPR +} BinOpr; + + +typedef enum UnOpr { OPR_MINUS, OPR_NOT, OPR_LEN, OPR_NOUNOPR } UnOpr; + + +#define getcode(fs,e) ((fs)->f->code[(e)->u.s.info]) + +#define luaK_codeAsBx(fs,o,A,sBx) luaK_codeABx(fs,o,A,(sBx)+MAXARG_sBx) + +#define luaK_setmultret(fs,e) luaK_setreturns(fs, e, LUA_MULTRET) + +LUAI_FUNC int luaK_codeABx (FuncState *fs, OpCode o, int A, unsigned int Bx); +LUAI_FUNC int luaK_codeABC (FuncState *fs, OpCode o, int A, int B, int C); +LUAI_FUNC void luaK_fixline (FuncState *fs, int line); +LUAI_FUNC void luaK_nil (FuncState *fs, int from, int n); +LUAI_FUNC void luaK_reserveregs (FuncState *fs, int n); +LUAI_FUNC void luaK_checkstack (FuncState *fs, int n); +LUAI_FUNC int luaK_stringK (FuncState *fs, TString *s); +LUAI_FUNC int luaK_numberK (FuncState *fs, lua_Number r); +LUAI_FUNC void luaK_dischargevars (FuncState *fs, expdesc *e); +LUAI_FUNC int luaK_exp2anyreg (FuncState *fs, expdesc *e); +LUAI_FUNC void luaK_exp2nextreg (FuncState *fs, expdesc *e); +LUAI_FUNC void luaK_exp2val (FuncState *fs, expdesc *e); +LUAI_FUNC int luaK_exp2RK (FuncState *fs, expdesc *e); +LUAI_FUNC void luaK_self (FuncState *fs, expdesc *e, expdesc *key); +LUAI_FUNC void luaK_indexed (FuncState *fs, expdesc *t, expdesc *k); +LUAI_FUNC void luaK_goiftrue (FuncState *fs, expdesc *e); +LUAI_FUNC void luaK_storevar (FuncState *fs, expdesc *var, expdesc *e); +LUAI_FUNC void luaK_setreturns (FuncState *fs, expdesc *e, int nresults); +LUAI_FUNC void luaK_setoneret (FuncState *fs, expdesc *e); +LUAI_FUNC int luaK_jump (FuncState *fs); +LUAI_FUNC void luaK_ret (FuncState *fs, int first, int nret); +LUAI_FUNC void luaK_patchlist (FuncState *fs, int list, int target); +LUAI_FUNC void luaK_patchtohere (FuncState *fs, int list); +LUAI_FUNC void luaK_concat (FuncState *fs, int *l1, int l2); +LUAI_FUNC int luaK_getlabel (FuncState *fs); +LUAI_FUNC void luaK_prefix (FuncState *fs, UnOpr op, expdesc *v); +LUAI_FUNC void luaK_infix (FuncState *fs, BinOpr op, expdesc *v); +LUAI_FUNC void luaK_posfix (FuncState *fs, BinOpr op, expdesc *v1, expdesc *v2); +LUAI_FUNC void luaK_setlist (FuncState *fs, int base, int nelems, int tostore); + + +#endif diff --git a/lib/lua/src/ldblib.c b/lib/lua/src/ldblib.c new file mode 100644 index 0000000..26a19b6 --- /dev/null +++ b/lib/lua/src/ldblib.c @@ -0,0 +1,397 @@ +/* +** $Id: ldblib.c,v 1.104 2005/12/29 15:32:11 roberto Exp $ +** Interface from Lua to its debug API +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include + +#define ldblib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + + +static int db_getregistry (lua_State *L) { + lua_pushvalue(L, LUA_REGISTRYINDEX); + return 1; +} + + +static int db_getmetatable (lua_State *L) { + luaL_checkany(L, 1); + if (!lua_getmetatable(L, 1)) { + lua_pushnil(L); /* no metatable */ + } + return 1; +} + + +static int db_setmetatable (lua_State *L) { + int t = lua_type(L, 2); + luaL_argcheck(L, t == LUA_TNIL || t == LUA_TTABLE, 2, + "nil or table expected"); + lua_settop(L, 2); + lua_pushboolean(L, lua_setmetatable(L, 1)); + return 1; +} + + +static int db_getfenv (lua_State *L) { + lua_getfenv(L, 1); + return 1; +} + + +static int db_setfenv (lua_State *L) { + luaL_checktype(L, 2, LUA_TTABLE); + lua_settop(L, 2); + if (lua_setfenv(L, 1) == 0) + luaL_error(L, LUA_QL("setfenv") + " cannot change environment of given object"); + return 1; +} + + +static void settabss (lua_State *L, const char *i, const char *v) { + lua_pushstring(L, v); + lua_setfield(L, -2, i); +} + + +static void settabsi (lua_State *L, const char *i, int v) { + lua_pushinteger(L, v); + lua_setfield(L, -2, i); +} + + +static lua_State *getthread (lua_State *L, int *arg) { + if (lua_isthread(L, 1)) { + *arg = 1; + return lua_tothread(L, 1); + } + else { + *arg = 0; + return L; + } +} + + +static void treatstackoption (lua_State *L, lua_State *L1, const char *fname) { + if (L == L1) { + lua_pushvalue(L, -2); + lua_remove(L, -3); + } + else + lua_xmove(L1, L, 1); + lua_setfield(L, -2, fname); +} + + +static int db_getinfo (lua_State *L) { + lua_Debug ar; + int arg; + lua_State *L1 = getthread(L, &arg); + const char *options = luaL_optstring(L, arg+2, "flnSu"); + if (lua_isnumber(L, arg+1)) { + if (!lua_getstack(L1, (int)lua_tointeger(L, arg+1), &ar)) { + lua_pushnil(L); /* level out of range */ + return 1; + } + } + else if (lua_isfunction(L, arg+1)) { + lua_pushfstring(L, ">%s", options); + options = lua_tostring(L, -1); + lua_pushvalue(L, arg+1); + lua_xmove(L, L1, 1); + } + else + return luaL_argerror(L, arg+1, "function or level expected"); + if (!lua_getinfo(L1, options, &ar)) + return luaL_argerror(L, arg+2, "invalid option"); + lua_createtable(L, 0, 2); + if (strchr(options, 'S')) { + settabss(L, "source", ar.source); + settabss(L, "short_src", ar.short_src); + settabsi(L, "linedefined", ar.linedefined); + settabsi(L, "lastlinedefined", ar.lastlinedefined); + settabss(L, "what", ar.what); + } + if (strchr(options, 'l')) + settabsi(L, "currentline", ar.currentline); + if (strchr(options, 'u')) + settabsi(L, "nups", ar.nups); + if (strchr(options, 'n')) { + settabss(L, "name", ar.name); + settabss(L, "namewhat", ar.namewhat); + } + if (strchr(options, 'L')) + treatstackoption(L, L1, "activelines"); + if (strchr(options, 'f')) + treatstackoption(L, L1, "func"); + return 1; /* return table */ +} + + +static int db_getlocal (lua_State *L) { + int arg; + lua_State *L1 = getthread(L, &arg); + lua_Debug ar; + const char *name; + if (!lua_getstack(L1, luaL_checkint(L, arg+1), &ar)) /* out of range? */ + return luaL_argerror(L, arg+1, "level out of range"); + name = lua_getlocal(L1, &ar, luaL_checkint(L, arg+2)); + if (name) { + lua_xmove(L1, L, 1); + lua_pushstring(L, name); + lua_pushvalue(L, -2); + return 2; + } + else { + lua_pushnil(L); + return 1; + } +} + + +static int db_setlocal (lua_State *L) { + int arg; + lua_State *L1 = getthread(L, &arg); + lua_Debug ar; + if (!lua_getstack(L1, luaL_checkint(L, arg+1), &ar)) /* out of range? */ + return luaL_argerror(L, arg+1, "level out of range"); + luaL_checkany(L, arg+3); + lua_settop(L, arg+3); + lua_xmove(L, L1, 1); + lua_pushstring(L, lua_setlocal(L1, &ar, luaL_checkint(L, arg+2))); + return 1; +} + + +static int auxupvalue (lua_State *L, int get) { + const char *name; + int n = luaL_checkint(L, 2); + luaL_checktype(L, 1, LUA_TFUNCTION); + if (lua_iscfunction(L, 1)) return 0; /* cannot touch C upvalues from Lua */ + name = get ? lua_getupvalue(L, 1, n) : lua_setupvalue(L, 1, n); + if (name == NULL) return 0; + lua_pushstring(L, name); + lua_insert(L, -(get+1)); + return get + 1; +} + + +static int db_getupvalue (lua_State *L) { + return auxupvalue(L, 1); +} + + +static int db_setupvalue (lua_State *L) { + luaL_checkany(L, 3); + return auxupvalue(L, 0); +} + + + +static const char KEY_HOOK = 'h'; + + +static void hookf (lua_State *L, lua_Debug *ar) { + static const char *const hooknames[] = + {"call", "return", "line", "count", "tail return"}; + lua_pushlightuserdata(L, (void *)&KEY_HOOK); + lua_rawget(L, LUA_REGISTRYINDEX); + lua_pushlightuserdata(L, L); + lua_rawget(L, -2); + if (lua_isfunction(L, -1)) { + lua_pushstring(L, hooknames[(int)ar->event]); + if (ar->currentline >= 0) + lua_pushinteger(L, ar->currentline); + else lua_pushnil(L); + lua_assert(lua_getinfo(L, "lS", ar)); + lua_call(L, 2, 0); + } +} + + +static int makemask (const char *smask, int count) { + int mask = 0; + if (strchr(smask, 'c')) mask |= LUA_MASKCALL; + if (strchr(smask, 'r')) mask |= LUA_MASKRET; + if (strchr(smask, 'l')) mask |= LUA_MASKLINE; + if (count > 0) mask |= LUA_MASKCOUNT; + return mask; +} + + +static char *unmakemask (int mask, char *smask) { + int i = 0; + if (mask & LUA_MASKCALL) smask[i++] = 'c'; + if (mask & LUA_MASKRET) smask[i++] = 'r'; + if (mask & LUA_MASKLINE) smask[i++] = 'l'; + smask[i] = '\0'; + return smask; +} + + +static void gethooktable (lua_State *L) { + lua_pushlightuserdata(L, (void *)&KEY_HOOK); + lua_rawget(L, LUA_REGISTRYINDEX); + if (!lua_istable(L, -1)) { + lua_pop(L, 1); + lua_createtable(L, 0, 1); + lua_pushlightuserdata(L, (void *)&KEY_HOOK); + lua_pushvalue(L, -2); + lua_rawset(L, LUA_REGISTRYINDEX); + } +} + + +static int db_sethook (lua_State *L) { + int arg; + lua_State *L1 = getthread(L, &arg); + if (lua_isnoneornil(L, arg+1)) { + lua_settop(L, arg+1); + lua_sethook(L1, NULL, 0, 0); /* turn off hooks */ + } + else { + const char *smask = luaL_checkstring(L, arg+2); + int count = luaL_optint(L, arg+3, 0); + luaL_checktype(L, arg+1, LUA_TFUNCTION); + lua_sethook(L1, hookf, makemask(smask, count), count); + } + gethooktable(L1); + lua_pushlightuserdata(L1, L1); + lua_pushvalue(L, arg+1); + lua_xmove(L, L1, 1); + lua_rawset(L1, -3); /* set new hook */ + lua_pop(L1, 1); /* remove hook table */ + return 0; +} + + +static int db_gethook (lua_State *L) { + int arg; + lua_State *L1 = getthread(L, &arg); + char buff[5]; + int mask = lua_gethookmask(L1); + lua_Hook hook = lua_gethook(L1); + if (hook != NULL && hook != hookf) /* external hook? */ + lua_pushliteral(L, "external hook"); + else { + gethooktable(L1); + lua_pushlightuserdata(L1, L1); + lua_rawget(L1, -2); /* get hook */ + lua_remove(L1, -2); /* remove hook table */ + lua_xmove(L1, L, 1); + } + lua_pushstring(L, unmakemask(mask, buff)); + lua_pushinteger(L, lua_gethookcount(L1)); + return 3; +} + + +static int db_debug (lua_State *L) { + for (;;) { + char buffer[250]; + fputs("lua_debug> ", stderr); + if (fgets(buffer, sizeof(buffer), stdin) == 0 || + strcmp(buffer, "cont\n") == 0) + return 0; + if (luaL_loadbuffer(L, buffer, strlen(buffer), "=(debug command)") || + lua_pcall(L, 0, 0, 0)) { + fputs(lua_tostring(L, -1), stderr); + fputs("\n", stderr); + } + lua_settop(L, 0); /* remove eventual returns */ + } +} + + +#define LEVELS1 12 /* size of the first part of the stack */ +#define LEVELS2 10 /* size of the second part of the stack */ + +static int db_errorfb (lua_State *L) { + int level; + int firstpart = 1; /* still before eventual `...' */ + int arg; + lua_State *L1 = getthread(L, &arg); + lua_Debug ar; + if (lua_isnumber(L, arg+2)) { + level = (int)lua_tointeger(L, arg+2); + lua_pop(L, 1); + } + else + level = (L == L1) ? 1 : 0; /* level 0 may be this own function */ + if (lua_gettop(L) == arg) + lua_pushliteral(L, ""); + else if (!lua_isstring(L, arg+1)) return 1; /* message is not a string */ + else lua_pushliteral(L, "\n"); + lua_pushliteral(L, "stack traceback:"); + while (lua_getstack(L1, level++, &ar)) { + if (level > LEVELS1 && firstpart) { + /* no more than `LEVELS2' more levels? */ + if (!lua_getstack(L1, level+LEVELS2, &ar)) + level--; /* keep going */ + else { + lua_pushliteral(L, "\n\t..."); /* too many levels */ + while (lua_getstack(L1, level+LEVELS2, &ar)) /* find last levels */ + level++; + } + firstpart = 0; + continue; + } + lua_pushliteral(L, "\n\t"); + lua_getinfo(L1, "Snl", &ar); + lua_pushfstring(L, "%s:", ar.short_src); + if (ar.currentline > 0) + lua_pushfstring(L, "%d:", ar.currentline); + if (*ar.namewhat != '\0') /* is there a name? */ + lua_pushfstring(L, " in function " LUA_QS, ar.name); + else { + if (*ar.what == 'm') /* main? */ + lua_pushfstring(L, " in main chunk"); + else if (*ar.what == 'C' || *ar.what == 't') + lua_pushliteral(L, " ?"); /* C function or tail call */ + else + lua_pushfstring(L, " in function <%s:%d>", + ar.short_src, ar.linedefined); + } + lua_concat(L, lua_gettop(L) - arg); + } + lua_concat(L, lua_gettop(L) - arg); + return 1; +} + + +static const luaL_Reg dblib[] = { + {"debug", db_debug}, + {"getfenv", db_getfenv}, + {"gethook", db_gethook}, + {"getinfo", db_getinfo}, + {"getlocal", db_getlocal}, + {"getregistry", db_getregistry}, + {"getmetatable", db_getmetatable}, + {"getupvalue", db_getupvalue}, + {"setfenv", db_setfenv}, + {"sethook", db_sethook}, + {"setlocal", db_setlocal}, + {"setmetatable", db_setmetatable}, + {"setupvalue", db_setupvalue}, + {"traceback", db_errorfb}, + {NULL, NULL} +}; + + +LUALIB_API int luaopen_debug (lua_State *L) { + luaL_register(L, LUA_DBLIBNAME, dblib); + return 1; +} + diff --git a/lib/lua/src/ldebug.c b/lib/lua/src/ldebug.c new file mode 100644 index 0000000..9c8bdf2 --- /dev/null +++ b/lib/lua/src/ldebug.c @@ -0,0 +1,622 @@ +/* +** $Id: ldebug.c,v 2.29a 2005/12/22 16:19:56 roberto Exp $ +** Debug Interface +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include + + +#define ldebug_c +#define LUA_CORE + +#include "lua.h" + +#include "lapi.h" +#include "lcode.h" +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" +#include "lvm.h" + + + +static const char *getfuncname (lua_State *L, CallInfo *ci, const char **name); + + +static int currentpc (lua_State *L, CallInfo *ci) { + if (!isLua(ci)) return -1; /* function is not a Lua function? */ + if (ci == L->ci) + ci->savedpc = L->savedpc; + return pcRel(ci->savedpc, ci_func(ci)->l.p); +} + + +static int currentline (lua_State *L, CallInfo *ci) { + int pc = currentpc(L, ci); + if (pc < 0) + return -1; /* only active lua functions have current-line information */ + else + return getline(ci_func(ci)->l.p, pc); +} + + +/* +** this function can be called asynchronous (e.g. during a signal) +*/ +LUA_API int lua_sethook (lua_State *L, lua_Hook func, int mask, int count) { + if (func == NULL || mask == 0) { /* turn off hooks? */ + mask = 0; + func = NULL; + } + L->hook = func; + L->basehookcount = count; + resethookcount(L); + L->hookmask = cast_byte(mask); + return 1; +} + + +LUA_API lua_Hook lua_gethook (lua_State *L) { + return L->hook; +} + + +LUA_API int lua_gethookmask (lua_State *L) { + return L->hookmask; +} + + +LUA_API int lua_gethookcount (lua_State *L) { + return L->basehookcount; +} + + +LUA_API int lua_getstack (lua_State *L, int level, lua_Debug *ar) { + int status; + CallInfo *ci; + lua_lock(L); + for (ci = L->ci; level > 0 && ci > L->base_ci; ci--) { + level--; + if (f_isLua(ci)) /* Lua function? */ + level -= ci->tailcalls; /* skip lost tail calls */ + } + if (level == 0 && ci > L->base_ci) { /* level found? */ + status = 1; + ar->i_ci = cast_int(ci - L->base_ci); + } + else if (level < 0) { /* level is of a lost tail call? */ + status = 1; + ar->i_ci = 0; + } + else status = 0; /* no such level */ + lua_unlock(L); + return status; +} + + +static Proto *getluaproto (CallInfo *ci) { + return (isLua(ci) ? ci_func(ci)->l.p : NULL); +} + + +static const char *findlocal (lua_State *L, CallInfo *ci, int n) { + const char *name; + Proto *fp = getluaproto(ci); + if (fp && (name = luaF_getlocalname(fp, n, currentpc(L, ci))) != NULL) + return name; /* is a local variable in a Lua function */ + else { + StkId limit = (ci == L->ci) ? L->top : (ci+1)->func; + if (limit - ci->base >= n && n > 0) /* is 'n' inside 'ci' stack? */ + return "(*temporary)"; + else + return NULL; + } +} + + +LUA_API const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n) { + CallInfo *ci = L->base_ci + ar->i_ci; + const char *name = findlocal(L, ci, n); + lua_lock(L); + if (name) + luaA_pushobject(L, ci->base + (n - 1)); + lua_unlock(L); + return name; +} + + +LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n) { + CallInfo *ci = L->base_ci + ar->i_ci; + const char *name = findlocal(L, ci, n); + lua_lock(L); + if (name) + setobjs2s(L, ci->base + (n - 1), L->top - 1); + L->top--; /* pop value */ + lua_unlock(L); + return name; +} + + +static void funcinfo (lua_Debug *ar, Closure *cl) { + if (cl->c.isC) { + ar->source = "=[C]"; + ar->linedefined = -1; + ar->lastlinedefined = -1; + ar->what = "C"; + } + else { + ar->source = getstr(cl->l.p->source); + ar->linedefined = cl->l.p->linedefined; + ar->lastlinedefined = cl->l.p->lastlinedefined; + ar->what = (ar->linedefined == 0) ? "main" : "Lua"; + } + luaO_chunkid(ar->short_src, ar->source, LUA_IDSIZE); +} + + +static void info_tailcall (lua_Debug *ar) { + ar->name = ar->namewhat = ""; + ar->what = "tail"; + ar->lastlinedefined = ar->linedefined = ar->currentline = -1; + ar->source = "=(tail call)"; + luaO_chunkid(ar->short_src, ar->source, LUA_IDSIZE); + ar->nups = 0; +} + + +static void collectvalidlines (lua_State *L, Closure *f) { + if (f == NULL || f->c.isC) { + setnilvalue(L->top); + } + else { + Table *t = luaH_new(L, 0, 0); + int *lineinfo = f->l.p->lineinfo; + int i; + for (i=0; il.p->sizelineinfo; i++) + setbvalue(luaH_setnum(L, t, lineinfo[i]), 1); + sethvalue(L, L->top, t); + } + incr_top(L); +} + + +static int auxgetinfo (lua_State *L, const char *what, lua_Debug *ar, + Closure *f, CallInfo *ci) { + int status = 1; + if (f == NULL) { + info_tailcall(ar); + return status; + } + for (; *what; what++) { + switch (*what) { + case 'S': { + funcinfo(ar, f); + break; + } + case 'l': { + ar->currentline = (ci) ? currentline(L, ci) : -1; + break; + } + case 'u': { + ar->nups = f->c.nupvalues; + break; + } + case 'n': { + ar->namewhat = (ci) ? getfuncname(L, ci, &ar->name) : NULL; + if (ar->namewhat == NULL) { + ar->namewhat = ""; /* not found */ + ar->name = NULL; + } + break; + } + case 'L': + case 'f': /* handled by lua_getinfo */ + break; + default: status = 0; /* invalid option */ + } + } + return status; +} + + +LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar) { + int status; + Closure *f = NULL; + CallInfo *ci = NULL; + lua_lock(L); + if (*what == '>') { + StkId func = L->top - 1; + luai_apicheck(L, ttisfunction(func)); + what++; /* skip the '>' */ + f = clvalue(func); + L->top--; /* pop function */ + } + else if (ar->i_ci != 0) { /* no tail call? */ + ci = L->base_ci + ar->i_ci; + lua_assert(ttisfunction(ci->func)); + f = clvalue(ci->func); + } + status = auxgetinfo(L, what, ar, f, ci); + if (strchr(what, 'f')) { + if (f == NULL) setnilvalue(L->top); + else setclvalue(L, L->top, f); + incr_top(L); + } + if (strchr(what, 'L')) + collectvalidlines(L, f); + lua_unlock(L); + return status; +} + + +/* +** {====================================================== +** Symbolic Execution and code checker +** ======================================================= +*/ + +#define check(x) if (!(x)) return 0; + +#define checkjump(pt,pc) check(0 <= pc && pc < pt->sizecode) + +#define checkreg(pt,reg) check((reg) < (pt)->maxstacksize) + + + +static int precheck (const Proto *pt) { + check(pt->maxstacksize <= MAXSTACK); + lua_assert(pt->numparams+(pt->is_vararg & VARARG_HASARG) <= pt->maxstacksize); + lua_assert(!(pt->is_vararg & VARARG_NEEDSARG) || + (pt->is_vararg & VARARG_HASARG)); + check(pt->sizeupvalues <= pt->nups); + check(pt->sizelineinfo == pt->sizecode || pt->sizelineinfo == 0); + check(GET_OPCODE(pt->code[pt->sizecode-1]) == OP_RETURN); + return 1; +} + + +#define checkopenop(pt,pc) luaG_checkopenop((pt)->code[(pc)+1]) + +int luaG_checkopenop (Instruction i) { + switch (GET_OPCODE(i)) { + case OP_CALL: + case OP_TAILCALL: + case OP_RETURN: + case OP_SETLIST: { + check(GETARG_B(i) == 0); + return 1; + } + default: return 0; /* invalid instruction after an open call */ + } +} + + +static int checkArgMode (const Proto *pt, int r, enum OpArgMask mode) { + switch (mode) { + case OpArgN: check(r == 0); break; + case OpArgU: break; + case OpArgR: checkreg(pt, r); break; + case OpArgK: + check(ISK(r) ? INDEXK(r) < pt->sizek : r < pt->maxstacksize); + break; + } + return 1; +} + + +static Instruction symbexec (const Proto *pt, int lastpc, int reg) { + int pc; + int last; /* stores position of last instruction that changed `reg' */ + last = pt->sizecode-1; /* points to final return (a `neutral' instruction) */ + check(precheck(pt)); + for (pc = 0; pc < lastpc; pc++) { + Instruction i = pt->code[pc]; + OpCode op = GET_OPCODE(i); + int a = GETARG_A(i); + int b = 0; + int c = 0; + check(op < NUM_OPCODES); + checkreg(pt, a); + switch (getOpMode(op)) { + case iABC: { + b = GETARG_B(i); + c = GETARG_C(i); + check(checkArgMode(pt, b, getBMode(op))); + check(checkArgMode(pt, c, getCMode(op))); + break; + } + case iABx: { + b = GETARG_Bx(i); + if (getBMode(op) == OpArgK) check(b < pt->sizek); + break; + } + case iAsBx: { + b = GETARG_sBx(i); + if (getBMode(op) == OpArgR) { + int dest = pc+1+b; + check(0 <= dest && dest < pt->sizecode); + if (dest > 0) { + /* cannot jump to a setlist count */ + Instruction d = pt->code[dest-1]; + check(!(GET_OPCODE(d) == OP_SETLIST && GETARG_C(d) == 0)); + } + } + break; + } + } + if (testAMode(op)) { + if (a == reg) last = pc; /* change register `a' */ + } + if (testTMode(op)) { + check(pc+2 < pt->sizecode); /* check skip */ + check(GET_OPCODE(pt->code[pc+1]) == OP_JMP); + } + switch (op) { + case OP_LOADBOOL: { + check(c == 0 || pc+2 < pt->sizecode); /* check its jump */ + break; + } + case OP_LOADNIL: { + if (a <= reg && reg <= b) + last = pc; /* set registers from `a' to `b' */ + break; + } + case OP_GETUPVAL: + case OP_SETUPVAL: { + check(b < pt->nups); + break; + } + case OP_GETGLOBAL: + case OP_SETGLOBAL: { + check(ttisstring(&pt->k[b])); + break; + } + case OP_SELF: { + checkreg(pt, a+1); + if (reg == a+1) last = pc; + break; + } + case OP_CONCAT: { + check(b < c); /* at least two operands */ + break; + } + case OP_TFORLOOP: { + check(c >= 1); /* at least one result (control variable) */ + checkreg(pt, a+2+c); /* space for results */ + if (reg >= a+2) last = pc; /* affect all regs above its base */ + break; + } + case OP_FORLOOP: + case OP_FORPREP: + checkreg(pt, a+3); + /* go through */ + case OP_JMP: { + int dest = pc+1+b; + /* not full check and jump is forward and do not skip `lastpc'? */ + if (reg != NO_REG && pc < dest && dest <= lastpc) + pc += b; /* do the jump */ + break; + } + case OP_CALL: + case OP_TAILCALL: { + if (b != 0) { + checkreg(pt, a+b-1); + } + c--; /* c = num. returns */ + if (c == LUA_MULTRET) { + check(checkopenop(pt, pc)); + } + else if (c != 0) + checkreg(pt, a+c-1); + if (reg >= a) last = pc; /* affect all registers above base */ + break; + } + case OP_RETURN: { + b--; /* b = num. returns */ + if (b > 0) checkreg(pt, a+b-1); + break; + } + case OP_SETLIST: { + if (b > 0) checkreg(pt, a + b); + if (c == 0) pc++; + break; + } + case OP_CLOSURE: { + int nup, j; + check(b < pt->sizep); + nup = pt->p[b]->nups; + check(pc + nup < pt->sizecode); + for (j = 1; j <= nup; j++) { + OpCode op1 = GET_OPCODE(pt->code[pc + j]); + check(op1 == OP_GETUPVAL || op1 == OP_MOVE); + } + if (reg != NO_REG) /* tracing? */ + pc += nup; /* do not 'execute' these pseudo-instructions */ + break; + } + case OP_VARARG: { + check((pt->is_vararg & VARARG_ISVARARG) && + !(pt->is_vararg & VARARG_NEEDSARG)); + b--; + if (b == LUA_MULTRET) check(checkopenop(pt, pc)); + checkreg(pt, a+b-1); + break; + } + default: break; + } + } + return pt->code[last]; +} + +#undef check +#undef checkjump +#undef checkreg + +/* }====================================================== */ + + +int luaG_checkcode (const Proto *pt) { + return (symbexec(pt, pt->sizecode, NO_REG) != 0); +} + + +static const char *kname (Proto *p, int c) { + if (ISK(c) && ttisstring(&p->k[INDEXK(c)])) + return svalue(&p->k[INDEXK(c)]); + else + return "?"; +} + + +static const char *getobjname (lua_State *L, CallInfo *ci, int stackpos, + const char **name) { + if (isLua(ci)) { /* a Lua function? */ + Proto *p = ci_func(ci)->l.p; + int pc = currentpc(L, ci); + Instruction i; + *name = luaF_getlocalname(p, stackpos+1, pc); + if (*name) /* is a local? */ + return "local"; + i = symbexec(p, pc, stackpos); /* try symbolic execution */ + lua_assert(pc != -1); + switch (GET_OPCODE(i)) { + case OP_GETGLOBAL: { + int g = GETARG_Bx(i); /* global index */ + lua_assert(ttisstring(&p->k[g])); + *name = svalue(&p->k[g]); + return "global"; + } + case OP_MOVE: { + int a = GETARG_A(i); + int b = GETARG_B(i); /* move from `b' to `a' */ + if (b < a) + return getobjname(L, ci, b, name); /* get name for `b' */ + break; + } + case OP_GETTABLE: { + int k = GETARG_C(i); /* key index */ + *name = kname(p, k); + return "field"; + } + case OP_GETUPVAL: { + int u = GETARG_B(i); /* upvalue index */ + *name = p->upvalues ? getstr(p->upvalues[u]) : "?"; + return "upvalue"; + } + case OP_SELF: { + int k = GETARG_C(i); /* key index */ + *name = kname(p, k); + return "method"; + } + default: break; + } + } + return NULL; /* no useful name found */ +} + + +static const char *getfuncname (lua_State *L, CallInfo *ci, const char **name) { + Instruction i; + if ((isLua(ci) && ci->tailcalls > 0) || !isLua(ci - 1)) + return NULL; /* calling function is not Lua (or is unknown) */ + ci--; /* calling function */ + i = ci_func(ci)->l.p->code[currentpc(L, ci)]; + if (GET_OPCODE(i) == OP_CALL || GET_OPCODE(i) == OP_TAILCALL || + GET_OPCODE(i) == OP_TFORLOOP) + return getobjname(L, ci, GETARG_A(i), name); + else + return NULL; /* no useful name can be found */ +} + + +/* only ANSI way to check whether a pointer points to an array */ +static int isinstack (CallInfo *ci, const TValue *o) { + StkId p; + for (p = ci->base; p < ci->top; p++) + if (o == p) return 1; + return 0; +} + + +void luaG_typeerror (lua_State *L, const TValue *o, const char *op) { + const char *name = NULL; + const char *t = luaT_typenames[ttype(o)]; + const char *kind = (isinstack(L->ci, o)) ? + getobjname(L, L->ci, cast_int(o - L->base), &name) : + NULL; + if (kind) + luaG_runerror(L, "attempt to %s %s " LUA_QS " (a %s value)", + op, kind, name, t); + else + luaG_runerror(L, "attempt to %s a %s value", op, t); +} + + +void luaG_concaterror (lua_State *L, StkId p1, StkId p2) { + if (ttisstring(p1)) p1 = p2; + lua_assert(!ttisstring(p1)); + luaG_typeerror(L, p1, "concatenate"); +} + + +void luaG_aritherror (lua_State *L, const TValue *p1, const TValue *p2) { + TValue temp; + if (luaV_tonumber(p1, &temp) == NULL) + p2 = p1; /* first operand is wrong */ + luaG_typeerror(L, p2, "perform arithmetic on"); +} + + +int luaG_ordererror (lua_State *L, const TValue *p1, const TValue *p2) { + const char *t1 = luaT_typenames[ttype(p1)]; + const char *t2 = luaT_typenames[ttype(p2)]; + if (t1[2] == t2[2]) + luaG_runerror(L, "attempt to compare two %s values", t1); + else + luaG_runerror(L, "attempt to compare %s with %s", t1, t2); + return 0; +} + + +static void addinfo (lua_State *L, const char *msg) { + CallInfo *ci = L->ci; + if (isLua(ci)) { /* is Lua code? */ + char buff[LUA_IDSIZE]; /* add file:line information */ + int line = currentline(L, ci); + luaO_chunkid(buff, getstr(getluaproto(ci)->source), LUA_IDSIZE); + luaO_pushfstring(L, "%s:%d: %s", buff, line, msg); + } +} + + +void luaG_errormsg (lua_State *L) { + if (L->errfunc != 0) { /* is there an error handling function? */ + StkId errfunc = restorestack(L, L->errfunc); + if (!ttisfunction(errfunc)) luaD_throw(L, LUA_ERRERR); + setobjs2s(L, L->top, L->top - 1); /* move argument */ + setobjs2s(L, L->top - 1, errfunc); /* push function */ + incr_top(L); + luaD_call(L, L->top - 2, 1); /* call it */ + } + luaD_throw(L, LUA_ERRRUN); +} + + +void luaG_runerror (lua_State *L, const char *fmt, ...) { + va_list argp; + va_start(argp, fmt); + addinfo(L, luaO_pushvfstring(L, fmt, argp)); + va_end(argp); + luaG_errormsg(L); +} + diff --git a/lib/lua/src/ldebug.h b/lib/lua/src/ldebug.h new file mode 100644 index 0000000..9c76aa1 --- /dev/null +++ b/lib/lua/src/ldebug.h @@ -0,0 +1,33 @@ +/* +** $Id: ldebug.h,v 2.3 2005/04/25 19:24:10 roberto Exp $ +** Auxiliary functions from Debug Interface module +** See Copyright Notice in lua.h +*/ + +#ifndef ldebug_h +#define ldebug_h + + +#include "lstate.h" + + +#define pcRel(pc, p) (cast(int, (pc) - (p)->code) - 1) + +#define getline(f,pc) (((f)->lineinfo) ? (f)->lineinfo[pc] : 0) + +#define resethookcount(L) (L->hookcount = L->basehookcount) + + +LUAI_FUNC void luaG_typeerror (lua_State *L, const TValue *o, + const char *opname); +LUAI_FUNC void luaG_concaterror (lua_State *L, StkId p1, StkId p2); +LUAI_FUNC void luaG_aritherror (lua_State *L, const TValue *p1, + const TValue *p2); +LUAI_FUNC int luaG_ordererror (lua_State *L, const TValue *p1, + const TValue *p2); +LUAI_FUNC void luaG_runerror (lua_State *L, const char *fmt, ...); +LUAI_FUNC void luaG_errormsg (lua_State *L); +LUAI_FUNC int luaG_checkcode (const Proto *pt); +LUAI_FUNC int luaG_checkopenop (Instruction i); + +#endif diff --git a/lib/lua/src/ldo.c b/lib/lua/src/ldo.c new file mode 100644 index 0000000..ab86fb7 --- /dev/null +++ b/lib/lua/src/ldo.c @@ -0,0 +1,516 @@ +/* +** $Id: ldo.c,v 2.38 2006/06/05 19:36:14 roberto Exp $ +** Stack and Call structure of Lua +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include + +#define ldo_c +#define LUA_CORE + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lparser.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" +#include "lundump.h" +#include "lvm.h" +#include "lzio.h" + + + + +/* +** {====================================================== +** Error-recovery functions +** ======================================================= +*/ + + +/* chain list of long jump buffers */ +struct lua_longjmp { + struct lua_longjmp *previous; + luai_jmpbuf b; + volatile int status; /* error code */ +}; + + +void luaD_seterrorobj (lua_State *L, int errcode, StkId oldtop) { + switch (errcode) { + case LUA_ERRMEM: { + setsvalue2s(L, oldtop, luaS_newliteral(L, MEMERRMSG)); + break; + } + case LUA_ERRERR: { + setsvalue2s(L, oldtop, luaS_newliteral(L, "error in error handling")); + break; + } + case LUA_ERRSYNTAX: + case LUA_ERRRUN: { + setobjs2s(L, oldtop, L->top - 1); /* error message on current top */ + break; + } + } + L->top = oldtop + 1; +} + + +static void restore_stack_limit (lua_State *L) { + lua_assert(L->stack_last - L->stack == L->stacksize - EXTRA_STACK - 1); + if (L->size_ci > LUAI_MAXCALLS) { /* there was an overflow? */ + int inuse = cast_int(L->ci - L->base_ci); + if (inuse + 1 < LUAI_MAXCALLS) /* can `undo' overflow? */ + luaD_reallocCI(L, LUAI_MAXCALLS); + } +} + + +static void resetstack (lua_State *L, int status) { + L->ci = L->base_ci; + L->base = L->ci->base; + luaF_close(L, L->base); /* close eventual pending closures */ + luaD_seterrorobj(L, status, L->base); + L->nCcalls = 0; + L->allowhook = 1; + restore_stack_limit(L); + L->errfunc = 0; + L->errorJmp = NULL; +} + + +void luaD_throw (lua_State *L, int errcode) { + if (L->errorJmp) { + L->errorJmp->status = errcode; + LUAI_THROW(L, L->errorJmp); + } + else { + L->status = cast_byte(errcode); + if (G(L)->panic) { + resetstack(L, errcode); + lua_unlock(L); + G(L)->panic(L); + } + exit(EXIT_FAILURE); + } +} + + +int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud) { + struct lua_longjmp lj; + lj.status = 0; + lj.previous = L->errorJmp; /* chain new error handler */ + L->errorJmp = &lj; + LUAI_TRY(L, &lj, + (*f)(L, ud); + ); + L->errorJmp = lj.previous; /* restore old error handler */ + return lj.status; +} + +/* }====================================================== */ + + +static void correctstack (lua_State *L, TValue *oldstack) { + CallInfo *ci; + GCObject *up; + L->top = (L->top - oldstack) + L->stack; + for (up = L->openupval; up != NULL; up = up->gch.next) + gco2uv(up)->v = (gco2uv(up)->v - oldstack) + L->stack; + for (ci = L->base_ci; ci <= L->ci; ci++) { + ci->top = (ci->top - oldstack) + L->stack; + ci->base = (ci->base - oldstack) + L->stack; + ci->func = (ci->func - oldstack) + L->stack; + } + L->base = (L->base - oldstack) + L->stack; +} + + +void luaD_reallocstack (lua_State *L, int newsize) { + TValue *oldstack = L->stack; + int realsize = newsize + 1 + EXTRA_STACK; + lua_assert(L->stack_last - L->stack == L->stacksize - EXTRA_STACK - 1); + luaM_reallocvector(L, L->stack, L->stacksize, realsize, TValue); + L->stacksize = realsize; + L->stack_last = L->stack+newsize; + correctstack(L, oldstack); +} + + +void luaD_reallocCI (lua_State *L, int newsize) { + CallInfo *oldci = L->base_ci; + luaM_reallocvector(L, L->base_ci, L->size_ci, newsize, CallInfo); + L->size_ci = newsize; + L->ci = (L->ci - oldci) + L->base_ci; + L->end_ci = L->base_ci + L->size_ci - 1; +} + + +void luaD_growstack (lua_State *L, int n) { + if (n <= L->stacksize) /* double size is enough? */ + luaD_reallocstack(L, 2*L->stacksize); + else + luaD_reallocstack(L, L->stacksize + n); +} + + +static CallInfo *growCI (lua_State *L) { + if (L->size_ci > LUAI_MAXCALLS) /* overflow while handling overflow? */ + luaD_throw(L, LUA_ERRERR); + else { + luaD_reallocCI(L, 2*L->size_ci); + if (L->size_ci > LUAI_MAXCALLS) + luaG_runerror(L, "stack overflow"); + } + return ++L->ci; +} + + +void luaD_callhook (lua_State *L, int event, int line) { + lua_Hook hook = L->hook; + if (hook && L->allowhook) { + ptrdiff_t top = savestack(L, L->top); + ptrdiff_t ci_top = savestack(L, L->ci->top); + lua_Debug ar; + ar.event = event; + ar.currentline = line; + if (event == LUA_HOOKTAILRET) + ar.i_ci = 0; /* tail call; no debug information about it */ + else + ar.i_ci = cast_int(L->ci - L->base_ci); + luaD_checkstack(L, LUA_MINSTACK); /* ensure minimum stack size */ + L->ci->top = L->top + LUA_MINSTACK; + lua_assert(L->ci->top <= L->stack_last); + L->allowhook = 0; /* cannot call hooks inside a hook */ + lua_unlock(L); + (*hook)(L, &ar); + lua_lock(L); + lua_assert(!L->allowhook); + L->allowhook = 1; + L->ci->top = restorestack(L, ci_top); + L->top = restorestack(L, top); + } +} + + +static StkId adjust_varargs (lua_State *L, Proto *p, int actual) { + int i; + int nfixargs = p->numparams; + Table *htab = NULL; + StkId base, fixed; + for (; actual < nfixargs; ++actual) + setnilvalue(L->top++); +#if defined(LUA_COMPAT_VARARG) + if (p->is_vararg & VARARG_NEEDSARG) { /* compat. with old-style vararg? */ + int nvar = actual - nfixargs; /* number of extra arguments */ + lua_assert(p->is_vararg & VARARG_HASARG); + luaC_checkGC(L); + htab = luaH_new(L, nvar, 1); /* create `arg' table */ + for (i=0; itop - nvar + i); + /* store counter in field `n' */ + setnvalue(luaH_setstr(L, htab, luaS_newliteral(L, "n")), cast_num(nvar)); + } +#endif + /* move fixed parameters to final position */ + fixed = L->top - actual; /* first fixed argument */ + base = L->top; /* final position of first argument */ + for (i=0; itop++, fixed+i); + setnilvalue(fixed+i); + } + /* add `arg' parameter */ + if (htab) { + sethvalue(L, L->top++, htab); + lua_assert(iswhite(obj2gco(htab))); + } + return base; +} + + +static StkId tryfuncTM (lua_State *L, StkId func) { + const TValue *tm = luaT_gettmbyobj(L, func, TM_CALL); + StkId p; + ptrdiff_t funcr = savestack(L, func); + if (!ttisfunction(tm)) + luaG_typeerror(L, func, "call"); + /* Open a hole inside the stack at `func' */ + for (p = L->top; p > func; p--) setobjs2s(L, p, p-1); + incr_top(L); + func = restorestack(L, funcr); /* previous call may change stack */ + setobj2s(L, func, tm); /* tag method is the new function to be called */ + return func; +} + + + +#define inc_ci(L) \ + ((L->ci == L->end_ci) ? growCI(L) : \ + (condhardstacktests(luaD_reallocCI(L, L->size_ci)), ++L->ci)) + + +int luaD_precall (lua_State *L, StkId func, int nresults) { + LClosure *cl; + ptrdiff_t funcr; + if (!ttisfunction(func)) /* `func' is not a function? */ + func = tryfuncTM(L, func); /* check the `function' tag method */ + funcr = savestack(L, func); + cl = &clvalue(func)->l; + L->ci->savedpc = L->savedpc; + if (!cl->isC) { /* Lua function? prepare its call */ + CallInfo *ci; + StkId st, base; + Proto *p = cl->p; + luaD_checkstack(L, p->maxstacksize); + func = restorestack(L, funcr); + if (!p->is_vararg) { /* no varargs? */ + base = func + 1; + if (L->top > base + p->numparams) + L->top = base + p->numparams; + } + else { /* vararg function */ + int nargs = cast_int(L->top - func) - 1; + base = adjust_varargs(L, p, nargs); + func = restorestack(L, funcr); /* previous call may change the stack */ + } + ci = inc_ci(L); /* now `enter' new function */ + ci->func = func; + L->base = ci->base = base; + ci->top = L->base + p->maxstacksize; + lua_assert(ci->top <= L->stack_last); + L->savedpc = p->code; /* starting point */ + ci->tailcalls = 0; + ci->nresults = nresults; + for (st = L->top; st < ci->top; st++) + setnilvalue(st); + L->top = ci->top; + if (L->hookmask & LUA_MASKCALL) { + L->savedpc++; /* hooks assume 'pc' is already incremented */ + luaD_callhook(L, LUA_HOOKCALL, -1); + L->savedpc--; /* correct 'pc' */ + } + return PCRLUA; + } + else { /* if is a C function, call it */ + CallInfo *ci; + int n; + luaD_checkstack(L, LUA_MINSTACK); /* ensure minimum stack size */ + ci = inc_ci(L); /* now `enter' new function */ + ci->func = restorestack(L, funcr); + L->base = ci->base = ci->func + 1; + ci->top = L->top + LUA_MINSTACK; + lua_assert(ci->top <= L->stack_last); + ci->nresults = nresults; + if (L->hookmask & LUA_MASKCALL) + luaD_callhook(L, LUA_HOOKCALL, -1); + lua_unlock(L); + n = (*curr_func(L)->c.f)(L); /* do the actual call */ + lua_lock(L); + if (n < 0) /* yielding? */ + return PCRYIELD; + else { + luaD_poscall(L, L->top - n); + return PCRC; + } + } +} + + +static StkId callrethooks (lua_State *L, StkId firstResult) { + ptrdiff_t fr = savestack(L, firstResult); /* next call may change stack */ + luaD_callhook(L, LUA_HOOKRET, -1); + if (f_isLua(L->ci)) { /* Lua function? */ + while (L->ci->tailcalls--) /* call hook for eventual tail calls */ + luaD_callhook(L, LUA_HOOKTAILRET, -1); + } + return restorestack(L, fr); +} + + +int luaD_poscall (lua_State *L, StkId firstResult) { + StkId res; + int wanted, i; + CallInfo *ci; + if (L->hookmask & LUA_MASKRET) + firstResult = callrethooks(L, firstResult); + ci = L->ci--; + res = ci->func; /* res == final position of 1st result */ + wanted = ci->nresults; + L->base = (ci - 1)->base; /* restore base */ + L->savedpc = (ci - 1)->savedpc; /* restore savedpc */ + /* move results to correct place */ + for (i = wanted; i != 0 && firstResult < L->top; i--) + setobjs2s(L, res++, firstResult++); + while (i-- > 0) + setnilvalue(res++); + L->top = res; + return (wanted - LUA_MULTRET); /* 0 iff wanted == LUA_MULTRET */ +} + + +/* +** Call a function (C or Lua). The function to be called is at *func. +** The arguments are on the stack, right after the function. +** When returns, all the results are on the stack, starting at the original +** function position. +*/ +void luaD_call (lua_State *L, StkId func, int nResults) { + if (++L->nCcalls >= LUAI_MAXCCALLS) { + if (L->nCcalls == LUAI_MAXCCALLS) + luaG_runerror(L, "C stack overflow"); + else if (L->nCcalls >= (LUAI_MAXCCALLS + (LUAI_MAXCCALLS>>3))) + luaD_throw(L, LUA_ERRERR); /* error while handing stack error */ + } + if (luaD_precall(L, func, nResults) == PCRLUA) /* is a Lua function? */ + luaV_execute(L, 1); /* call it */ + L->nCcalls--; + luaC_checkGC(L); +} + + +static void resume (lua_State *L, void *ud) { + StkId firstArg = cast(StkId, ud); + CallInfo *ci = L->ci; + if (L->status == 0) { /* start coroutine? */ + lua_assert(ci == L->base_ci && firstArg > L->base); + if (luaD_precall(L, firstArg - 1, LUA_MULTRET) != PCRLUA) + return; + } + else { /* resuming from previous yield */ + lua_assert(L->status == LUA_YIELD); + L->status = 0; + if (!f_isLua(ci)) { /* `common' yield? */ + /* finish interrupted execution of `OP_CALL' */ + lua_assert(GET_OPCODE(*((ci-1)->savedpc - 1)) == OP_CALL || + GET_OPCODE(*((ci-1)->savedpc - 1)) == OP_TAILCALL); + if (luaD_poscall(L, firstArg)) /* complete it... */ + L->top = L->ci->top; /* and correct top if not multiple results */ + } + else /* yielded inside a hook: just continue its execution */ + L->base = L->ci->base; + } + luaV_execute(L, cast_int(L->ci - L->base_ci)); +} + + +static int resume_error (lua_State *L, const char *msg) { + L->top = L->ci->base; + setsvalue2s(L, L->top, luaS_new(L, msg)); + incr_top(L); + lua_unlock(L); + return LUA_ERRRUN; +} + + +LUA_API int lua_resume (lua_State *L, int nargs) { + int status; + lua_lock(L); + if (L->status != LUA_YIELD) { + if (L->status != 0) + return resume_error(L, "cannot resume dead coroutine"); + else if (L->ci != L->base_ci) + return resume_error(L, "cannot resume non-suspended coroutine"); + } + luai_userstateresume(L, nargs); + lua_assert(L->errfunc == 0 && L->nCcalls == 0); + status = luaD_rawrunprotected(L, resume, L->top - nargs); + if (status != 0) { /* error? */ + L->status = cast_byte(status); /* mark thread as `dead' */ + luaD_seterrorobj(L, status, L->top); + L->ci->top = L->top; + } + else + status = L->status; + lua_unlock(L); + return status; +} + + +LUA_API int lua_yield (lua_State *L, int nresults) { + luai_userstateyield(L, nresults); + lua_lock(L); + if (L->nCcalls > 0) + luaG_runerror(L, "attempt to yield across metamethod/C-call boundary"); + L->base = L->top - nresults; /* protect stack slots below */ + L->status = LUA_YIELD; + lua_unlock(L); + return -1; +} + + +int luaD_pcall (lua_State *L, Pfunc func, void *u, + ptrdiff_t old_top, ptrdiff_t ef) { + int status; + unsigned short oldnCcalls = L->nCcalls; + ptrdiff_t old_ci = saveci(L, L->ci); + lu_byte old_allowhooks = L->allowhook; + ptrdiff_t old_errfunc = L->errfunc; + L->errfunc = ef; + status = luaD_rawrunprotected(L, func, u); + if (status != 0) { /* an error occurred? */ + StkId oldtop = restorestack(L, old_top); + luaF_close(L, oldtop); /* close eventual pending closures */ + luaD_seterrorobj(L, status, oldtop); + L->nCcalls = oldnCcalls; + L->ci = restoreci(L, old_ci); + L->base = L->ci->base; + L->savedpc = L->ci->savedpc; + L->allowhook = old_allowhooks; + restore_stack_limit(L); + } + L->errfunc = old_errfunc; + return status; +} + + + +/* +** Execute a protected parser. +*/ +struct SParser { /* data to `f_parser' */ + ZIO *z; + Mbuffer buff; /* buffer to be used by the scanner */ + const char *name; +}; + +static void f_parser (lua_State *L, void *ud) { + int i; + Proto *tf; + Closure *cl; + struct SParser *p = cast(struct SParser *, ud); + int c = luaZ_lookahead(p->z); + luaC_checkGC(L); + tf = ((c == LUA_SIGNATURE[0]) ? luaU_undump : luaY_parser)(L, p->z, + &p->buff, p->name); + cl = luaF_newLclosure(L, tf->nups, hvalue(gt(L))); + cl->l.p = tf; + for (i = 0; i < tf->nups; i++) /* initialize eventual upvalues */ + cl->l.upvals[i] = luaF_newupval(L); + setclvalue(L, L->top, cl); + incr_top(L); +} + + +int luaD_protectedparser (lua_State *L, ZIO *z, const char *name) { + struct SParser p; + int status; + p.z = z; p.name = name; + luaZ_initbuffer(L, &p.buff); + status = luaD_pcall(L, f_parser, &p, savestack(L, L->top), L->errfunc); + luaZ_freebuffer(L, &p.buff); + return status; +} + + diff --git a/lib/lua/src/ldo.h b/lib/lua/src/ldo.h new file mode 100644 index 0000000..b2de92b --- /dev/null +++ b/lib/lua/src/ldo.h @@ -0,0 +1,57 @@ +/* +** $Id: ldo.h,v 2.7 2005/08/24 16:15:49 roberto Exp $ +** Stack and Call structure of Lua +** See Copyright Notice in lua.h +*/ + +#ifndef ldo_h +#define ldo_h + + +#include "lobject.h" +#include "lstate.h" +#include "lzio.h" + + +#define luaD_checkstack(L,n) \ + if ((char *)L->stack_last - (char *)L->top <= (n)*(int)sizeof(TValue)) \ + luaD_growstack(L, n); \ + else condhardstacktests(luaD_reallocstack(L, L->stacksize - EXTRA_STACK - 1)); + + +#define incr_top(L) {luaD_checkstack(L,1); L->top++;} + +#define savestack(L,p) ((char *)(p) - (char *)L->stack) +#define restorestack(L,n) ((TValue *)((char *)L->stack + (n))) + +#define saveci(L,p) ((char *)(p) - (char *)L->base_ci) +#define restoreci(L,n) ((CallInfo *)((char *)L->base_ci + (n))) + + +/* results from luaD_precall */ +#define PCRLUA 0 /* initiated a call to a Lua function */ +#define PCRC 1 /* did a call to a C function */ +#define PCRYIELD 2 /* C funtion yielded */ + + +/* type of protected functions, to be ran by `runprotected' */ +typedef void (*Pfunc) (lua_State *L, void *ud); + +LUAI_FUNC int luaD_protectedparser (lua_State *L, ZIO *z, const char *name); +LUAI_FUNC void luaD_callhook (lua_State *L, int event, int line); +LUAI_FUNC int luaD_precall (lua_State *L, StkId func, int nresults); +LUAI_FUNC void luaD_call (lua_State *L, StkId func, int nResults); +LUAI_FUNC int luaD_pcall (lua_State *L, Pfunc func, void *u, + ptrdiff_t oldtop, ptrdiff_t ef); +LUAI_FUNC int luaD_poscall (lua_State *L, StkId firstResult); +LUAI_FUNC void luaD_reallocCI (lua_State *L, int newsize); +LUAI_FUNC void luaD_reallocstack (lua_State *L, int newsize); +LUAI_FUNC void luaD_growstack (lua_State *L, int n); + +LUAI_FUNC void luaD_throw (lua_State *L, int errcode); +LUAI_FUNC int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud); + +LUAI_FUNC void luaD_seterrorobj (lua_State *L, int errcode, StkId oldtop); + +#endif + diff --git a/lib/lua/src/ldump.c b/lib/lua/src/ldump.c new file mode 100644 index 0000000..f08277d --- /dev/null +++ b/lib/lua/src/ldump.c @@ -0,0 +1,164 @@ +/* +** $Id: ldump.c,v 1.15 2006/02/16 15:53:49 lhf Exp $ +** save precompiled Lua chunks +** See Copyright Notice in lua.h +*/ + +#include + +#define ldump_c +#define LUA_CORE + +#include "lua.h" + +#include "lobject.h" +#include "lstate.h" +#include "lundump.h" + +typedef struct { + lua_State* L; + lua_Writer writer; + void* data; + int strip; + int status; +} DumpState; + +#define DumpMem(b,n,size,D) DumpBlock(b,(n)*(size),D) +#define DumpVar(x,D) DumpMem(&x,1,sizeof(x),D) + +static void DumpBlock(const void* b, size_t size, DumpState* D) +{ + if (D->status==0) + { + lua_unlock(D->L); + D->status=(*D->writer)(D->L,b,size,D->data); + lua_lock(D->L); + } +} + +static void DumpChar(int y, DumpState* D) +{ + char x=(char)y; + DumpVar(x,D); +} + +static void DumpInt(int x, DumpState* D) +{ + DumpVar(x,D); +} + +static void DumpNumber(lua_Number x, DumpState* D) +{ + DumpVar(x,D); +} + +static void DumpVector(const void* b, int n, size_t size, DumpState* D) +{ + DumpInt(n,D); + DumpMem(b,n,size,D); +} + +static void DumpString(const TString* s, DumpState* D) +{ + if (s==NULL || getstr(s)==NULL) + { + size_t size=0; + DumpVar(size,D); + } + else + { + size_t size=s->tsv.len+1; /* include trailing '\0' */ + DumpVar(size,D); + DumpBlock(getstr(s),size,D); + } +} + +#define DumpCode(f,D) DumpVector(f->code,f->sizecode,sizeof(Instruction),D) + +static void DumpFunction(const Proto* f, const TString* p, DumpState* D); + +static void DumpConstants(const Proto* f, DumpState* D) +{ + int i,n=f->sizek; + DumpInt(n,D); + for (i=0; ik[i]; + DumpChar(ttype(o),D); + switch (ttype(o)) + { + case LUA_TNIL: + break; + case LUA_TBOOLEAN: + DumpChar(bvalue(o),D); + break; + case LUA_TNUMBER: + DumpNumber(nvalue(o),D); + break; + case LUA_TSTRING: + DumpString(rawtsvalue(o),D); + break; + default: + lua_assert(0); /* cannot happen */ + break; + } + } + n=f->sizep; + DumpInt(n,D); + for (i=0; ip[i],f->source,D); +} + +static void DumpDebug(const Proto* f, DumpState* D) +{ + int i,n; + n= (D->strip) ? 0 : f->sizelineinfo; + DumpVector(f->lineinfo,n,sizeof(int),D); + n= (D->strip) ? 0 : f->sizelocvars; + DumpInt(n,D); + for (i=0; ilocvars[i].varname,D); + DumpInt(f->locvars[i].startpc,D); + DumpInt(f->locvars[i].endpc,D); + } + n= (D->strip) ? 0 : f->sizeupvalues; + DumpInt(n,D); + for (i=0; iupvalues[i],D); +} + +static void DumpFunction(const Proto* f, const TString* p, DumpState* D) +{ + DumpString((f->source==p || D->strip) ? NULL : f->source,D); + DumpInt(f->linedefined,D); + DumpInt(f->lastlinedefined,D); + DumpChar(f->nups,D); + DumpChar(f->numparams,D); + DumpChar(f->is_vararg,D); + DumpChar(f->maxstacksize,D); + DumpCode(f,D); + DumpConstants(f,D); + DumpDebug(f,D); +} + +static void DumpHeader(DumpState* D) +{ + char h[LUAC_HEADERSIZE]; + luaU_header(h); + DumpBlock(h,LUAC_HEADERSIZE,D); +} + +/* +** dump Lua function as precompiled chunk +*/ +int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip) +{ + DumpState D; + D.L=L; + D.writer=w; + D.data=data; + D.strip=strip; + D.status=0; + DumpHeader(&D); + DumpFunction(f,NULL,&D); + return D.status; +} diff --git a/lib/lua/src/lfunc.c b/lib/lua/src/lfunc.c new file mode 100644 index 0000000..05bd5ff --- /dev/null +++ b/lib/lua/src/lfunc.c @@ -0,0 +1,174 @@ +/* +** $Id: lfunc.c,v 2.12a 2005/12/22 16:19:56 roberto Exp $ +** Auxiliary functions to manipulate prototypes and closures +** See Copyright Notice in lua.h +*/ + + +#include + +#define lfunc_c +#define LUA_CORE + +#include "lua.h" + +#include "lfunc.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" + + + +Closure *luaF_newCclosure (lua_State *L, int nelems, Table *e) { + Closure *c = cast(Closure *, luaM_malloc(L, sizeCclosure(nelems))); + luaC_link(L, obj2gco(c), LUA_TFUNCTION); + c->c.isC = 1; + c->c.env = e; + c->c.nupvalues = cast_byte(nelems); + return c; +} + + +Closure *luaF_newLclosure (lua_State *L, int nelems, Table *e) { + Closure *c = cast(Closure *, luaM_malloc(L, sizeLclosure(nelems))); + luaC_link(L, obj2gco(c), LUA_TFUNCTION); + c->l.isC = 0; + c->l.env = e; + c->l.nupvalues = cast_byte(nelems); + while (nelems--) c->l.upvals[nelems] = NULL; + return c; +} + + +UpVal *luaF_newupval (lua_State *L) { + UpVal *uv = luaM_new(L, UpVal); + luaC_link(L, obj2gco(uv), LUA_TUPVAL); + uv->v = &uv->u.value; + setnilvalue(uv->v); + return uv; +} + + +UpVal *luaF_findupval (lua_State *L, StkId level) { + global_State *g = G(L); + GCObject **pp = &L->openupval; + UpVal *p; + UpVal *uv; + while (*pp != NULL && (p = ngcotouv(*pp))->v >= level) { + lua_assert(p->v != &p->u.value); + if (p->v == level) { /* found a corresponding upvalue? */ + if (isdead(g, obj2gco(p))) /* is it dead? */ + changewhite(obj2gco(p)); /* ressurect it */ + return p; + } + pp = &p->next; + } + uv = luaM_new(L, UpVal); /* not found: create a new one */ + uv->tt = LUA_TUPVAL; + uv->marked = luaC_white(g); + uv->v = level; /* current value lives in the stack */ + uv->next = *pp; /* chain it in the proper position */ + *pp = obj2gco(uv); + uv->u.l.prev = &g->uvhead; /* double link it in `uvhead' list */ + uv->u.l.next = g->uvhead.u.l.next; + uv->u.l.next->u.l.prev = uv; + g->uvhead.u.l.next = uv; + lua_assert(uv->u.l.next->u.l.prev == uv && uv->u.l.prev->u.l.next == uv); + return uv; +} + + +static void unlinkupval (UpVal *uv) { + lua_assert(uv->u.l.next->u.l.prev == uv && uv->u.l.prev->u.l.next == uv); + uv->u.l.next->u.l.prev = uv->u.l.prev; /* remove from `uvhead' list */ + uv->u.l.prev->u.l.next = uv->u.l.next; +} + + +void luaF_freeupval (lua_State *L, UpVal *uv) { + if (uv->v != &uv->u.value) /* is it open? */ + unlinkupval(uv); /* remove from open list */ + luaM_free(L, uv); /* free upvalue */ +} + + +void luaF_close (lua_State *L, StkId level) { + UpVal *uv; + global_State *g = G(L); + while (L->openupval != NULL && (uv = ngcotouv(L->openupval))->v >= level) { + GCObject *o = obj2gco(uv); + lua_assert(!isblack(o) && uv->v != &uv->u.value); + L->openupval = uv->next; /* remove from `open' list */ + if (isdead(g, o)) + luaF_freeupval(L, uv); /* free upvalue */ + else { + unlinkupval(uv); + setobj(L, &uv->u.value, uv->v); + uv->v = &uv->u.value; /* now current value lives here */ + luaC_linkupval(L, uv); /* link upvalue into `gcroot' list */ + } + } +} + + +Proto *luaF_newproto (lua_State *L) { + Proto *f = luaM_new(L, Proto); + luaC_link(L, obj2gco(f), LUA_TPROTO); + f->k = NULL; + f->sizek = 0; + f->p = NULL; + f->sizep = 0; + f->code = NULL; + f->sizecode = 0; + f->sizelineinfo = 0; + f->sizeupvalues = 0; + f->nups = 0; + f->upvalues = NULL; + f->numparams = 0; + f->is_vararg = 0; + f->maxstacksize = 0; + f->lineinfo = NULL; + f->sizelocvars = 0; + f->locvars = NULL; + f->linedefined = 0; + f->lastlinedefined = 0; + f->source = NULL; + return f; +} + + +void luaF_freeproto (lua_State *L, Proto *f) { + luaM_freearray(L, f->code, f->sizecode, Instruction); + luaM_freearray(L, f->p, f->sizep, Proto *); + luaM_freearray(L, f->k, f->sizek, TValue); + luaM_freearray(L, f->lineinfo, f->sizelineinfo, int); + luaM_freearray(L, f->locvars, f->sizelocvars, struct LocVar); + luaM_freearray(L, f->upvalues, f->sizeupvalues, TString *); + luaM_free(L, f); +} + + +void luaF_freeclosure (lua_State *L, Closure *c) { + int size = (c->c.isC) ? sizeCclosure(c->c.nupvalues) : + sizeLclosure(c->l.nupvalues); + luaM_freemem(L, c, size); +} + + +/* +** Look for n-th local variable at line `line' in function `func'. +** Returns NULL if not found. +*/ +const char *luaF_getlocalname (const Proto *f, int local_number, int pc) { + int i; + for (i = 0; isizelocvars && f->locvars[i].startpc <= pc; i++) { + if (pc < f->locvars[i].endpc) { /* is variable active? */ + local_number--; + if (local_number == 0) + return getstr(f->locvars[i].varname); + } + } + return NULL; /* not found */ +} + diff --git a/lib/lua/src/lfunc.h b/lib/lua/src/lfunc.h new file mode 100644 index 0000000..2e02419 --- /dev/null +++ b/lib/lua/src/lfunc.h @@ -0,0 +1,34 @@ +/* +** $Id: lfunc.h,v 2.4 2005/04/25 19:24:10 roberto Exp $ +** Auxiliary functions to manipulate prototypes and closures +** See Copyright Notice in lua.h +*/ + +#ifndef lfunc_h +#define lfunc_h + + +#include "lobject.h" + + +#define sizeCclosure(n) (cast(int, sizeof(CClosure)) + \ + cast(int, sizeof(TValue)*((n)-1))) + +#define sizeLclosure(n) (cast(int, sizeof(LClosure)) + \ + cast(int, sizeof(TValue *)*((n)-1))) + + +LUAI_FUNC Proto *luaF_newproto (lua_State *L); +LUAI_FUNC Closure *luaF_newCclosure (lua_State *L, int nelems, Table *e); +LUAI_FUNC Closure *luaF_newLclosure (lua_State *L, int nelems, Table *e); +LUAI_FUNC UpVal *luaF_newupval (lua_State *L); +LUAI_FUNC UpVal *luaF_findupval (lua_State *L, StkId level); +LUAI_FUNC void luaF_close (lua_State *L, StkId level); +LUAI_FUNC void luaF_freeproto (lua_State *L, Proto *f); +LUAI_FUNC void luaF_freeclosure (lua_State *L, Closure *c); +LUAI_FUNC void luaF_freeupval (lua_State *L, UpVal *uv); +LUAI_FUNC const char *luaF_getlocalname (const Proto *func, int local_number, + int pc); + + +#endif diff --git a/lib/lua/src/lgc.c b/lib/lua/src/lgc.c new file mode 100644 index 0000000..2d24a12 --- /dev/null +++ b/lib/lua/src/lgc.c @@ -0,0 +1,711 @@ +/* +** $Id: lgc.c,v 2.38 2006/05/24 14:34:06 roberto Exp $ +** Garbage Collector +** See Copyright Notice in lua.h +*/ + +#include + +#define lgc_c +#define LUA_CORE + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" + + +#define GCSTEPSIZE 1024u +#define GCSWEEPMAX 40 +#define GCSWEEPCOST 10 +#define GCFINALIZECOST 100 + + +#define maskmarks cast_byte(~(bitmask(BLACKBIT)|WHITEBITS)) + +#define makewhite(g,x) \ + ((x)->gch.marked = cast_byte(((x)->gch.marked & maskmarks) | luaC_white(g))) + +#define white2gray(x) reset2bits((x)->gch.marked, WHITE0BIT, WHITE1BIT) +#define black2gray(x) resetbit((x)->gch.marked, BLACKBIT) + +#define stringmark(s) reset2bits((s)->tsv.marked, WHITE0BIT, WHITE1BIT) + + +#define isfinalized(u) testbit((u)->marked, FINALIZEDBIT) +#define markfinalized(u) l_setbit((u)->marked, FINALIZEDBIT) + + +#define KEYWEAK bitmask(KEYWEAKBIT) +#define VALUEWEAK bitmask(VALUEWEAKBIT) + + + +#define markvalue(g,o) { checkconsistency(o); \ + if (iscollectable(o) && iswhite(gcvalue(o))) reallymarkobject(g,gcvalue(o)); } + +#define markobject(g,t) { if (iswhite(obj2gco(t))) \ + reallymarkobject(g, obj2gco(t)); } + + +#define setthreshold(g) (g->GCthreshold = (g->estimate/100) * g->gcpause) + + +static void removeentry (Node *n) { + lua_assert(ttisnil(gval(n))); + if (iscollectable(gkey(n))) + setttype(gkey(n), LUA_TDEADKEY); /* dead key; remove it */ +} + + +static void reallymarkobject (global_State *g, GCObject *o) { + lua_assert(iswhite(o) && !isdead(g, o)); + white2gray(o); + switch (o->gch.tt) { + case LUA_TSTRING: { + return; + } + case LUA_TUSERDATA: { + Table *mt = gco2u(o)->metatable; + gray2black(o); /* udata are never gray */ + if (mt) markobject(g, mt); + markobject(g, gco2u(o)->env); + return; + } + case LUA_TUPVAL: { + UpVal *uv = gco2uv(o); + markvalue(g, uv->v); + if (uv->v == &uv->u.value) /* closed? */ + gray2black(o); /* open upvalues are never black */ + return; + } + case LUA_TFUNCTION: { + gco2cl(o)->c.gclist = g->gray; + g->gray = o; + break; + } + case LUA_TTABLE: { + gco2h(o)->gclist = g->gray; + g->gray = o; + break; + } + case LUA_TTHREAD: { + gco2th(o)->gclist = g->gray; + g->gray = o; + break; + } + case LUA_TPROTO: { + gco2p(o)->gclist = g->gray; + g->gray = o; + break; + } + default: lua_assert(0); + } +} + + +static void marktmu (global_State *g) { + GCObject *u = g->tmudata; + if (u) { + do { + u = u->gch.next; + makewhite(g, u); /* may be marked, if left from previous GC */ + reallymarkobject(g, u); + } while (u != g->tmudata); + } +} + + +/* move `dead' udata that need finalization to list `tmudata' */ +size_t luaC_separateudata (lua_State *L, int all) { + global_State *g = G(L); + size_t deadmem = 0; + GCObject **p = &g->mainthread->next; + GCObject *curr; + while ((curr = *p) != NULL) { + if (!(iswhite(curr) || all) || isfinalized(gco2u(curr))) + p = &curr->gch.next; /* don't bother with them */ + else if (fasttm(L, gco2u(curr)->metatable, TM_GC) == NULL) { + markfinalized(gco2u(curr)); /* don't need finalization */ + p = &curr->gch.next; + } + else { /* must call its gc method */ + deadmem += sizeudata(gco2u(curr)); + markfinalized(gco2u(curr)); + *p = curr->gch.next; + /* link `curr' at the end of `tmudata' list */ + if (g->tmudata == NULL) /* list is empty? */ + g->tmudata = curr->gch.next = curr; /* creates a circular list */ + else { + curr->gch.next = g->tmudata->gch.next; + g->tmudata->gch.next = curr; + g->tmudata = curr; + } + } + } + return deadmem; +} + + +static int traversetable (global_State *g, Table *h) { + int i; + int weakkey = 0; + int weakvalue = 0; + const TValue *mode; + if (h->metatable) + markobject(g, h->metatable); + mode = gfasttm(g, h->metatable, TM_MODE); + if (mode && ttisstring(mode)) { /* is there a weak mode? */ + weakkey = (strchr(svalue(mode), 'k') != NULL); + weakvalue = (strchr(svalue(mode), 'v') != NULL); + if (weakkey || weakvalue) { /* is really weak? */ + h->marked &= ~(KEYWEAK | VALUEWEAK); /* clear bits */ + h->marked |= cast_byte((weakkey << KEYWEAKBIT) | + (weakvalue << VALUEWEAKBIT)); + h->gclist = g->weak; /* must be cleared after GC, ... */ + g->weak = obj2gco(h); /* ... so put in the appropriate list */ + } + } + if (weakkey && weakvalue) return 1; + if (!weakvalue) { + i = h->sizearray; + while (i--) + markvalue(g, &h->array[i]); + } + i = sizenode(h); + while (i--) { + Node *n = gnode(h, i); + lua_assert(ttype(gkey(n)) != LUA_TDEADKEY || ttisnil(gval(n))); + if (ttisnil(gval(n))) + removeentry(n); /* remove empty entries */ + else { + lua_assert(!ttisnil(gkey(n))); + if (!weakkey) markvalue(g, gkey(n)); + if (!weakvalue) markvalue(g, gval(n)); + } + } + return weakkey || weakvalue; +} + + +/* +** All marks are conditional because a GC may happen while the +** prototype is still being created +*/ +static void traverseproto (global_State *g, Proto *f) { + int i; + if (f->source) stringmark(f->source); + for (i=0; isizek; i++) /* mark literals */ + markvalue(g, &f->k[i]); + for (i=0; isizeupvalues; i++) { /* mark upvalue names */ + if (f->upvalues[i]) + stringmark(f->upvalues[i]); + } + for (i=0; isizep; i++) { /* mark nested protos */ + if (f->p[i]) + markobject(g, f->p[i]); + } + for (i=0; isizelocvars; i++) { /* mark local-variable names */ + if (f->locvars[i].varname) + stringmark(f->locvars[i].varname); + } +} + + + +static void traverseclosure (global_State *g, Closure *cl) { + markobject(g, cl->c.env); + if (cl->c.isC) { + int i; + for (i=0; ic.nupvalues; i++) /* mark its upvalues */ + markvalue(g, &cl->c.upvalue[i]); + } + else { + int i; + lua_assert(cl->l.nupvalues == cl->l.p->nups); + markobject(g, cl->l.p); + for (i=0; il.nupvalues; i++) /* mark its upvalues */ + markobject(g, cl->l.upvals[i]); + } +} + + +static void checkstacksizes (lua_State *L, StkId max) { + int ci_used = cast_int(L->ci - L->base_ci); /* number of `ci' in use */ + int s_used = cast_int(max - L->stack); /* part of stack in use */ + if (L->size_ci > LUAI_MAXCALLS) /* handling overflow? */ + return; /* do not touch the stacks */ + if (4*ci_used < L->size_ci && 2*BASIC_CI_SIZE < L->size_ci) + luaD_reallocCI(L, L->size_ci/2); /* still big enough... */ + condhardstacktests(luaD_reallocCI(L, ci_used + 1)); + if (4*s_used < L->stacksize && + 2*(BASIC_STACK_SIZE+EXTRA_STACK) < L->stacksize) + luaD_reallocstack(L, L->stacksize/2); /* still big enough... */ + condhardstacktests(luaD_reallocstack(L, s_used)); +} + + +static void traversestack (global_State *g, lua_State *l) { + StkId o, lim; + CallInfo *ci; + markvalue(g, gt(l)); + lim = l->top; + for (ci = l->base_ci; ci <= l->ci; ci++) { + lua_assert(ci->top <= l->stack_last); + if (lim < ci->top) lim = ci->top; + } + for (o = l->stack; o < l->top; o++) + markvalue(g, o); + for (; o <= lim; o++) + setnilvalue(o); + checkstacksizes(l, lim); +} + + +/* +** traverse one gray object, turning it to black. +** Returns `quantity' traversed. +*/ +static l_mem propagatemark (global_State *g) { + GCObject *o = g->gray; + lua_assert(isgray(o)); + gray2black(o); + switch (o->gch.tt) { + case LUA_TTABLE: { + Table *h = gco2h(o); + g->gray = h->gclist; + if (traversetable(g, h)) /* table is weak? */ + black2gray(o); /* keep it gray */ + return sizeof(Table) + sizeof(TValue) * h->sizearray + + sizeof(Node) * sizenode(h); + } + case LUA_TFUNCTION: { + Closure *cl = gco2cl(o); + g->gray = cl->c.gclist; + traverseclosure(g, cl); + return (cl->c.isC) ? sizeCclosure(cl->c.nupvalues) : + sizeLclosure(cl->l.nupvalues); + } + case LUA_TTHREAD: { + lua_State *th = gco2th(o); + g->gray = th->gclist; + th->gclist = g->grayagain; + g->grayagain = o; + black2gray(o); + traversestack(g, th); + return sizeof(lua_State) + sizeof(TValue) * th->stacksize + + sizeof(CallInfo) * th->size_ci; + } + case LUA_TPROTO: { + Proto *p = gco2p(o); + g->gray = p->gclist; + traverseproto(g, p); + return sizeof(Proto) + sizeof(Instruction) * p->sizecode + + sizeof(Proto *) * p->sizep + + sizeof(TValue) * p->sizek + + sizeof(int) * p->sizelineinfo + + sizeof(LocVar) * p->sizelocvars + + sizeof(TString *) * p->sizeupvalues; + } + default: lua_assert(0); return 0; + } +} + + +static size_t propagateall (global_State *g) { + size_t m = 0; + while (g->gray) m += propagatemark(g); + return m; +} + + +/* +** The next function tells whether a key or value can be cleared from +** a weak table. Non-collectable objects are never removed from weak +** tables. Strings behave as `values', so are never removed too. for +** other objects: if really collected, cannot keep them; for userdata +** being finalized, keep them in keys, but not in values +*/ +static int iscleared (const TValue *o, int iskey) { + if (!iscollectable(o)) return 0; + if (ttisstring(o)) { + stringmark(rawtsvalue(o)); /* strings are `values', so are never weak */ + return 0; + } + return iswhite(gcvalue(o)) || + (ttisuserdata(o) && (!iskey && isfinalized(uvalue(o)))); +} + + +/* +** clear collected entries from weaktables +*/ +static void cleartable (GCObject *l) { + while (l) { + Table *h = gco2h(l); + int i = h->sizearray; + lua_assert(testbit(h->marked, VALUEWEAKBIT) || + testbit(h->marked, KEYWEAKBIT)); + if (testbit(h->marked, VALUEWEAKBIT)) { + while (i--) { + TValue *o = &h->array[i]; + if (iscleared(o, 0)) /* value was collected? */ + setnilvalue(o); /* remove value */ + } + } + i = sizenode(h); + while (i--) { + Node *n = gnode(h, i); + if (!ttisnil(gval(n)) && /* non-empty entry? */ + (iscleared(key2tval(n), 1) || iscleared(gval(n), 0))) { + setnilvalue(gval(n)); /* remove value ... */ + removeentry(n); /* remove entry from table */ + } + } + l = h->gclist; + } +} + + +static void freeobj (lua_State *L, GCObject *o) { + switch (o->gch.tt) { + case LUA_TPROTO: luaF_freeproto(L, gco2p(o)); break; + case LUA_TFUNCTION: luaF_freeclosure(L, gco2cl(o)); break; + case LUA_TUPVAL: luaF_freeupval(L, gco2uv(o)); break; + case LUA_TTABLE: luaH_free(L, gco2h(o)); break; + case LUA_TTHREAD: { + lua_assert(gco2th(o) != L && gco2th(o) != G(L)->mainthread); + luaE_freethread(L, gco2th(o)); + break; + } + case LUA_TSTRING: { + G(L)->strt.nuse--; + luaM_freemem(L, o, sizestring(gco2ts(o))); + break; + } + case LUA_TUSERDATA: { + luaM_freemem(L, o, sizeudata(gco2u(o))); + break; + } + default: lua_assert(0); + } +} + + + +#define sweepwholelist(L,p) sweeplist(L,p,MAX_LUMEM) + + +static GCObject **sweeplist (lua_State *L, GCObject **p, lu_mem count) { + GCObject *curr; + global_State *g = G(L); + int deadmask = otherwhite(g); + while ((curr = *p) != NULL && count-- > 0) { + if (curr->gch.tt == LUA_TTHREAD) /* sweep open upvalues of each thread */ + sweepwholelist(L, &gco2th(curr)->openupval); + if ((curr->gch.marked ^ WHITEBITS) & deadmask) { /* not dead? */ + lua_assert(!isdead(g, curr) || testbit(curr->gch.marked, FIXEDBIT)); + makewhite(g, curr); /* make it white (for next cycle) */ + p = &curr->gch.next; + } + else { /* must erase `curr' */ + lua_assert(isdead(g, curr) || deadmask == bitmask(SFIXEDBIT)); + *p = curr->gch.next; + if (curr == g->rootgc) /* is the first element of the list? */ + g->rootgc = curr->gch.next; /* adjust first */ + freeobj(L, curr); + } + } + return p; +} + + +static void checkSizes (lua_State *L) { + global_State *g = G(L); + /* check size of string hash */ + if (g->strt.nuse < cast(lu_int32, g->strt.size/4) && + g->strt.size > MINSTRTABSIZE*2) + luaS_resize(L, g->strt.size/2); /* table is too big */ + /* check size of buffer */ + if (luaZ_sizebuffer(&g->buff) > LUA_MINBUFFER*2) { /* buffer too big? */ + size_t newsize = luaZ_sizebuffer(&g->buff) / 2; + luaZ_resizebuffer(L, &g->buff, newsize); + } +} + + +static void GCTM (lua_State *L) { + global_State *g = G(L); + GCObject *o = g->tmudata->gch.next; /* get first element */ + Udata *udata = rawgco2u(o); + const TValue *tm; + /* remove udata from `tmudata' */ + if (o == g->tmudata) /* last element? */ + g->tmudata = NULL; + else + g->tmudata->gch.next = udata->uv.next; + udata->uv.next = g->mainthread->next; /* return it to `root' list */ + g->mainthread->next = o; + makewhite(g, o); + tm = fasttm(L, udata->uv.metatable, TM_GC); + if (tm != NULL) { + lu_byte oldah = L->allowhook; + lu_mem oldt = g->GCthreshold; + L->allowhook = 0; /* stop debug hooks during GC tag method */ + g->GCthreshold = 2*g->totalbytes; /* avoid GC steps */ + setobj2s(L, L->top, tm); + setuvalue(L, L->top+1, udata); + L->top += 2; + luaD_call(L, L->top - 2, 0); + L->allowhook = oldah; /* restore hooks */ + g->GCthreshold = oldt; /* restore threshold */ + } +} + + +/* +** Call all GC tag methods +*/ +void luaC_callGCTM (lua_State *L) { + while (G(L)->tmudata) + GCTM(L); +} + + +void luaC_freeall (lua_State *L) { + global_State *g = G(L); + int i; + g->currentwhite = WHITEBITS | bitmask(SFIXEDBIT); /* mask to collect all elements */ + sweepwholelist(L, &g->rootgc); + for (i = 0; i < g->strt.size; i++) /* free all string lists */ + sweepwholelist(L, &g->strt.hash[i]); +} + + +static void markmt (global_State *g) { + int i; + for (i=0; imt[i]) markobject(g, g->mt[i]); +} + + +/* mark root set */ +static void markroot (lua_State *L) { + global_State *g = G(L); + g->gray = NULL; + g->grayagain = NULL; + g->weak = NULL; + markobject(g, g->mainthread); + /* make global table be traversed before main stack */ + markvalue(g, gt(g->mainthread)); + markvalue(g, registry(L)); + markmt(g); + g->gcstate = GCSpropagate; +} + + +static void remarkupvals (global_State *g) { + UpVal *uv; + for (uv = g->uvhead.u.l.next; uv != &g->uvhead; uv = uv->u.l.next) { + lua_assert(uv->u.l.next->u.l.prev == uv && uv->u.l.prev->u.l.next == uv); + if (isgray(obj2gco(uv))) + markvalue(g, uv->v); + } +} + + +static void atomic (lua_State *L) { + global_State *g = G(L); + size_t udsize; /* total size of userdata to be finalized */ + /* remark occasional upvalues of (maybe) dead threads */ + remarkupvals(g); + /* traverse objects cautch by write barrier and by 'remarkupvals' */ + propagateall(g); + /* remark weak tables */ + g->gray = g->weak; + g->weak = NULL; + lua_assert(!iswhite(obj2gco(g->mainthread))); + markobject(g, L); /* mark running thread */ + markmt(g); /* mark basic metatables (again) */ + propagateall(g); + /* remark gray again */ + g->gray = g->grayagain; + g->grayagain = NULL; + propagateall(g); + udsize = luaC_separateudata(L, 0); /* separate userdata to be finalized */ + marktmu(g); /* mark `preserved' userdata */ + udsize += propagateall(g); /* remark, to propagate `preserveness' */ + cleartable(g->weak); /* remove collected objects from weak tables */ + /* flip current white */ + g->currentwhite = cast_byte(otherwhite(g)); + g->sweepstrgc = 0; + g->sweepgc = &g->rootgc; + g->gcstate = GCSsweepstring; + g->estimate = g->totalbytes - udsize; /* first estimate */ +} + + +static l_mem singlestep (lua_State *L) { + global_State *g = G(L); + /*lua_checkmemory(L);*/ + switch (g->gcstate) { + case GCSpause: { + markroot(L); /* start a new collection */ + return 0; + } + case GCSpropagate: { + if (g->gray) + return propagatemark(g); + else { /* no more `gray' objects */ + atomic(L); /* finish mark phase */ + return 0; + } + } + case GCSsweepstring: { + lu_mem old = g->totalbytes; + sweepwholelist(L, &g->strt.hash[g->sweepstrgc++]); + if (g->sweepstrgc >= g->strt.size) /* nothing more to sweep? */ + g->gcstate = GCSsweep; /* end sweep-string phase */ + lua_assert(old >= g->totalbytes); + g->estimate -= old - g->totalbytes; + return GCSWEEPCOST; + } + case GCSsweep: { + lu_mem old = g->totalbytes; + g->sweepgc = sweeplist(L, g->sweepgc, GCSWEEPMAX); + if (*g->sweepgc == NULL) { /* nothing more to sweep? */ + checkSizes(L); + g->gcstate = GCSfinalize; /* end sweep phase */ + } + lua_assert(old >= g->totalbytes); + g->estimate -= old - g->totalbytes; + return GCSWEEPMAX*GCSWEEPCOST; + } + case GCSfinalize: { + if (g->tmudata) { + GCTM(L); + if (g->estimate > GCFINALIZECOST) + g->estimate -= GCFINALIZECOST; + return GCFINALIZECOST; + } + else { + g->gcstate = GCSpause; /* end collection */ + g->gcdept = 0; + return 0; + } + } + default: lua_assert(0); return 0; + } +} + + +void luaC_step (lua_State *L) { + global_State *g = G(L); + l_mem lim = (GCSTEPSIZE/100) * g->gcstepmul; + if (lim == 0) + lim = (MAX_LUMEM-1)/2; /* no limit */ + g->gcdept += g->totalbytes - g->GCthreshold; + do { + lim -= singlestep(L); + if (g->gcstate == GCSpause) + break; + } while (lim > 0); + if (g->gcstate != GCSpause) { + if (g->gcdept < GCSTEPSIZE) + g->GCthreshold = g->totalbytes + GCSTEPSIZE; /* - lim/g->gcstepmul;*/ + else { + g->gcdept -= GCSTEPSIZE; + g->GCthreshold = g->totalbytes; + } + } + else { + lua_assert(g->totalbytes >= g->estimate); + setthreshold(g); + } +} + + +void luaC_fullgc (lua_State *L) { + global_State *g = G(L); + if (g->gcstate <= GCSpropagate) { + /* reset sweep marks to sweep all elements (returning them to white) */ + g->sweepstrgc = 0; + g->sweepgc = &g->rootgc; + /* reset other collector lists */ + g->gray = NULL; + g->grayagain = NULL; + g->weak = NULL; + g->gcstate = GCSsweepstring; + } + lua_assert(g->gcstate != GCSpause && g->gcstate != GCSpropagate); + /* finish any pending sweep phase */ + while (g->gcstate != GCSfinalize) { + lua_assert(g->gcstate == GCSsweepstring || g->gcstate == GCSsweep); + singlestep(L); + } + markroot(L); + while (g->gcstate != GCSpause) { + singlestep(L); + } + setthreshold(g); +} + + +void luaC_barrierf (lua_State *L, GCObject *o, GCObject *v) { + global_State *g = G(L); + lua_assert(isblack(o) && iswhite(v) && !isdead(g, v) && !isdead(g, o)); + lua_assert(g->gcstate != GCSfinalize && g->gcstate != GCSpause); + lua_assert(ttype(&o->gch) != LUA_TTABLE); + /* must keep invariant? */ + if (g->gcstate == GCSpropagate) + reallymarkobject(g, v); /* restore invariant */ + else /* don't mind */ + makewhite(g, o); /* mark as white just to avoid other barriers */ +} + + +void luaC_barrierback (lua_State *L, Table *t) { + global_State *g = G(L); + GCObject *o = obj2gco(t); + lua_assert(isblack(o) && !isdead(g, o)); + lua_assert(g->gcstate != GCSfinalize && g->gcstate != GCSpause); + black2gray(o); /* make table gray (again) */ + t->gclist = g->grayagain; + g->grayagain = o; +} + + +void luaC_link (lua_State *L, GCObject *o, lu_byte tt) { + global_State *g = G(L); + o->gch.next = g->rootgc; + g->rootgc = o; + o->gch.marked = luaC_white(g); + o->gch.tt = tt; +} + + +void luaC_linkupval (lua_State *L, UpVal *uv) { + global_State *g = G(L); + GCObject *o = obj2gco(uv); + o->gch.next = g->rootgc; /* link upvalue into `rootgc' list */ + g->rootgc = o; + if (isgray(o)) { + if (g->gcstate == GCSpropagate) { + gray2black(o); /* closed upvalues need barrier */ + luaC_barrier(L, uv, uv->v); + } + else { /* sweep phase: sweep it (turning it into white) */ + makewhite(g, o); + lua_assert(g->gcstate != GCSfinalize && g->gcstate != GCSpause); + } + } +} + diff --git a/lib/lua/src/lgc.h b/lib/lua/src/lgc.h new file mode 100644 index 0000000..5f69acb --- /dev/null +++ b/lib/lua/src/lgc.h @@ -0,0 +1,110 @@ +/* +** $Id: lgc.h,v 2.15 2005/08/24 16:15:49 roberto Exp $ +** Garbage Collector +** See Copyright Notice in lua.h +*/ + +#ifndef lgc_h +#define lgc_h + + +#include "lobject.h" + + +/* +** Possible states of the Garbage Collector +*/ +#define GCSpause 0 +#define GCSpropagate 1 +#define GCSsweepstring 2 +#define GCSsweep 3 +#define GCSfinalize 4 + + +/* +** some userful bit tricks +*/ +#define resetbits(x,m) ((x) &= cast(lu_byte, ~(m))) +#define setbits(x,m) ((x) |= (m)) +#define testbits(x,m) ((x) & (m)) +#define bitmask(b) (1<<(b)) +#define bit2mask(b1,b2) (bitmask(b1) | bitmask(b2)) +#define l_setbit(x,b) setbits(x, bitmask(b)) +#define resetbit(x,b) resetbits(x, bitmask(b)) +#define testbit(x,b) testbits(x, bitmask(b)) +#define set2bits(x,b1,b2) setbits(x, (bit2mask(b1, b2))) +#define reset2bits(x,b1,b2) resetbits(x, (bit2mask(b1, b2))) +#define test2bits(x,b1,b2) testbits(x, (bit2mask(b1, b2))) + + + +/* +** Layout for bit use in `marked' field: +** bit 0 - object is white (type 0) +** bit 1 - object is white (type 1) +** bit 2 - object is black +** bit 3 - for userdata: has been finalized +** bit 3 - for tables: has weak keys +** bit 4 - for tables: has weak values +** bit 5 - object is fixed (should not be collected) +** bit 6 - object is "super" fixed (only the main thread) +*/ + + +#define WHITE0BIT 0 +#define WHITE1BIT 1 +#define BLACKBIT 2 +#define FINALIZEDBIT 3 +#define KEYWEAKBIT 3 +#define VALUEWEAKBIT 4 +#define FIXEDBIT 5 +#define SFIXEDBIT 6 +#define WHITEBITS bit2mask(WHITE0BIT, WHITE1BIT) + + +#define iswhite(x) test2bits((x)->gch.marked, WHITE0BIT, WHITE1BIT) +#define isblack(x) testbit((x)->gch.marked, BLACKBIT) +#define isgray(x) (!isblack(x) && !iswhite(x)) + +#define otherwhite(g) (g->currentwhite ^ WHITEBITS) +#define isdead(g,v) ((v)->gch.marked & otherwhite(g) & WHITEBITS) + +#define changewhite(x) ((x)->gch.marked ^= WHITEBITS) +#define gray2black(x) l_setbit((x)->gch.marked, BLACKBIT) + +#define valiswhite(x) (iscollectable(x) && iswhite(gcvalue(x))) + +#define luaC_white(g) cast(lu_byte, (g)->currentwhite & WHITEBITS) + + +#define luaC_checkGC(L) { \ + condhardstacktests(luaD_reallocstack(L, L->stacksize - EXTRA_STACK - 1)); \ + if (G(L)->totalbytes >= G(L)->GCthreshold) \ + luaC_step(L); } + + +#define luaC_barrier(L,p,v) { if (valiswhite(v) && isblack(obj2gco(p))) \ + luaC_barrierf(L,obj2gco(p),gcvalue(v)); } + +#define luaC_barriert(L,t,v) { if (valiswhite(v) && isblack(obj2gco(t))) \ + luaC_barrierback(L,t); } + +#define luaC_objbarrier(L,p,o) \ + { if (iswhite(obj2gco(o)) && isblack(obj2gco(p))) \ + luaC_barrierf(L,obj2gco(p),obj2gco(o)); } + +#define luaC_objbarriert(L,t,o) \ + { if (iswhite(obj2gco(o)) && isblack(obj2gco(t))) luaC_barrierback(L,t); } + +LUAI_FUNC size_t luaC_separateudata (lua_State *L, int all); +LUAI_FUNC void luaC_callGCTM (lua_State *L); +LUAI_FUNC void luaC_freeall (lua_State *L); +LUAI_FUNC void luaC_step (lua_State *L); +LUAI_FUNC void luaC_fullgc (lua_State *L); +LUAI_FUNC void luaC_link (lua_State *L, GCObject *o, lu_byte tt); +LUAI_FUNC void luaC_linkupval (lua_State *L, UpVal *uv); +LUAI_FUNC void luaC_barrierf (lua_State *L, GCObject *o, GCObject *v); +LUAI_FUNC void luaC_barrierback (lua_State *L, Table *t); + + +#endif diff --git a/lib/lua/src/linit.c b/lib/lua/src/linit.c new file mode 100644 index 0000000..483d9c8 --- /dev/null +++ b/lib/lua/src/linit.c @@ -0,0 +1,38 @@ +/* +** $Id: linit.c,v 1.14 2005/12/29 15:32:11 roberto Exp $ +** Initialization of libraries for lua.c +** See Copyright Notice in lua.h +*/ + + +#define linit_c +#define LUA_LIB + +#include "lua.h" + +#include "lualib.h" +#include "lauxlib.h" + + +static const luaL_Reg lualibs[] = { + {"", luaopen_base}, + {LUA_LOADLIBNAME, luaopen_package}, + {LUA_TABLIBNAME, luaopen_table}, + {LUA_IOLIBNAME, luaopen_io}, + {LUA_OSLIBNAME, luaopen_os}, + {LUA_STRLIBNAME, luaopen_string}, + {LUA_MATHLIBNAME, luaopen_math}, + {LUA_DBLIBNAME, luaopen_debug}, + {NULL, NULL} +}; + + +LUALIB_API void luaL_openlibs (lua_State *L) { + const luaL_Reg *lib = lualibs; + for (; lib->func; lib++) { + lua_pushcfunction(L, lib->func); + lua_pushstring(L, lib->name); + lua_call(L, 1, 0); + } +} + diff --git a/lib/lua/src/liolib.c b/lib/lua/src/liolib.c new file mode 100644 index 0000000..be60972 --- /dev/null +++ b/lib/lua/src/liolib.c @@ -0,0 +1,532 @@ +/* +** $Id: liolib.c,v 2.73 2006/05/08 20:14:16 roberto Exp $ +** Standard I/O (and system) library +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include +#include + +#define liolib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + + +#define IO_INPUT 1 +#define IO_OUTPUT 2 + + +static const char *const fnames[] = {"input", "output"}; + + +static int pushresult (lua_State *L, int i, const char *filename) { + int en = errno; /* calls to Lua API may change this value */ + if (i) { + lua_pushboolean(L, 1); + return 1; + } + else { + lua_pushnil(L); + if (filename) + lua_pushfstring(L, "%s: %s", filename, strerror(en)); + else + lua_pushfstring(L, "%s", strerror(en)); + lua_pushinteger(L, en); + return 3; + } +} + + +static void fileerror (lua_State *L, int arg, const char *filename) { + lua_pushfstring(L, "%s: %s", filename, strerror(errno)); + luaL_argerror(L, arg, lua_tostring(L, -1)); +} + + +#define topfile(L) ((FILE **)luaL_checkudata(L, 1, LUA_FILEHANDLE)) + + +static int io_type (lua_State *L) { + void *ud; + luaL_checkany(L, 1); + ud = lua_touserdata(L, 1); + lua_getfield(L, LUA_REGISTRYINDEX, LUA_FILEHANDLE); + if (ud == NULL || !lua_getmetatable(L, 1) || !lua_rawequal(L, -2, -1)) + lua_pushnil(L); /* not a file */ + else if (*((FILE **)ud) == NULL) + lua_pushliteral(L, "closed file"); + else + lua_pushliteral(L, "file"); + return 1; +} + + +static FILE *tofile (lua_State *L) { + FILE **f = topfile(L); + if (*f == NULL) + luaL_error(L, "attempt to use a closed file"); + return *f; +} + + + +/* +** When creating file handles, always creates a `closed' file handle +** before opening the actual file; so, if there is a memory error, the +** file is not left opened. +*/ +static FILE **newfile (lua_State *L) { + FILE **pf = (FILE **)lua_newuserdata(L, sizeof(FILE *)); + *pf = NULL; /* file handle is currently `closed' */ + luaL_getmetatable(L, LUA_FILEHANDLE); + lua_setmetatable(L, -2); + return pf; +} + + +/* +** this function has a separated environment, which defines the +** correct __close for 'popen' files +*/ +static int io_pclose (lua_State *L) { + FILE **p = topfile(L); + int ok = lua_pclose(L, *p); + *p = NULL; + return pushresult(L, ok, NULL); +} + + +static int io_fclose (lua_State *L) { + FILE **p = topfile(L); + int ok = (fclose(*p) == 0); + *p = NULL; + return pushresult(L, ok, NULL); +} + + +static int aux_close (lua_State *L) { + lua_getfenv(L, 1); + lua_getfield(L, -1, "__close"); + return (lua_tocfunction(L, -1))(L); +} + + +static int io_close (lua_State *L) { + if (lua_isnone(L, 1)) + lua_rawgeti(L, LUA_ENVIRONINDEX, IO_OUTPUT); + tofile(L); /* make sure argument is a file */ + return aux_close(L); +} + + +static int io_gc (lua_State *L) { + FILE *f = *topfile(L); + /* ignore closed files and standard files */ + if (f != NULL && f != stdin && f != stdout && f != stderr) + aux_close(L); + return 0; +} + + +static int io_tostring (lua_State *L) { + FILE *f = *topfile(L); + if (f == NULL) + lua_pushstring(L, "file (closed)"); + else + lua_pushfstring(L, "file (%p)", f); + return 1; +} + + +static int io_open (lua_State *L) { + const char *filename = luaL_checkstring(L, 1); + const char *mode = luaL_optstring(L, 2, "r"); + FILE **pf = newfile(L); + *pf = fopen(filename, mode); + return (*pf == NULL) ? pushresult(L, 0, filename) : 1; +} + + +static int io_popen (lua_State *L) { + const char *filename = luaL_checkstring(L, 1); + const char *mode = luaL_optstring(L, 2, "r"); + FILE **pf = newfile(L); + *pf = lua_popen(L, filename, mode); + return (*pf == NULL) ? pushresult(L, 0, filename) : 1; +} + + +static int io_tmpfile (lua_State *L) { + FILE **pf = newfile(L); + *pf = tmpfile(); + return (*pf == NULL) ? pushresult(L, 0, NULL) : 1; +} + + +static FILE *getiofile (lua_State *L, int findex) { + FILE *f; + lua_rawgeti(L, LUA_ENVIRONINDEX, findex); + f = *(FILE **)lua_touserdata(L, -1); + if (f == NULL) + luaL_error(L, "standard %s file is closed", fnames[findex - 1]); + return f; +} + + +static int g_iofile (lua_State *L, int f, const char *mode) { + if (!lua_isnoneornil(L, 1)) { + const char *filename = lua_tostring(L, 1); + if (filename) { + FILE **pf = newfile(L); + *pf = fopen(filename, mode); + if (*pf == NULL) + fileerror(L, 1, filename); + } + else { + tofile(L); /* check that it's a valid file handle */ + lua_pushvalue(L, 1); + } + lua_rawseti(L, LUA_ENVIRONINDEX, f); + } + /* return current value */ + lua_rawgeti(L, LUA_ENVIRONINDEX, f); + return 1; +} + + +static int io_input (lua_State *L) { + return g_iofile(L, IO_INPUT, "r"); +} + + +static int io_output (lua_State *L) { + return g_iofile(L, IO_OUTPUT, "w"); +} + + +static int io_readline (lua_State *L); + + +static void aux_lines (lua_State *L, int idx, int toclose) { + lua_pushvalue(L, idx); + lua_pushboolean(L, toclose); /* close/not close file when finished */ + lua_pushcclosure(L, io_readline, 2); +} + + +static int f_lines (lua_State *L) { + tofile(L); /* check that it's a valid file handle */ + aux_lines(L, 1, 0); + return 1; +} + + +static int io_lines (lua_State *L) { + if (lua_isnoneornil(L, 1)) { /* no arguments? */ + /* will iterate over default input */ + lua_rawgeti(L, LUA_ENVIRONINDEX, IO_INPUT); + return f_lines(L); + } + else { + const char *filename = luaL_checkstring(L, 1); + FILE **pf = newfile(L); + *pf = fopen(filename, "r"); + if (*pf == NULL) + fileerror(L, 1, filename); + aux_lines(L, lua_gettop(L), 1); + return 1; + } +} + + +/* +** {====================================================== +** READ +** ======================================================= +*/ + + +static int read_number (lua_State *L, FILE *f) { + lua_Number d; + if (fscanf(f, LUA_NUMBER_SCAN, &d) == 1) { + lua_pushnumber(L, d); + return 1; + } + else return 0; /* read fails */ +} + + +static int test_eof (lua_State *L, FILE *f) { + int c = getc(f); + ungetc(c, f); + lua_pushlstring(L, NULL, 0); + return (c != EOF); +} + + +static int read_line (lua_State *L, FILE *f) { + luaL_Buffer b; + luaL_buffinit(L, &b); + for (;;) { + size_t l; + char *p = luaL_prepbuffer(&b); + if (fgets(p, LUAL_BUFFERSIZE, f) == NULL) { /* eof? */ + luaL_pushresult(&b); /* close buffer */ + return (lua_strlen(L, -1) > 0); /* check whether read something */ + } + l = strlen(p); + if (l == 0 || p[l-1] != '\n') + luaL_addsize(&b, l); + else { + luaL_addsize(&b, l - 1); /* do not include `eol' */ + luaL_pushresult(&b); /* close buffer */ + return 1; /* read at least an `eol' */ + } + } +} + + +static int read_chars (lua_State *L, FILE *f, size_t n) { + size_t rlen; /* how much to read */ + size_t nr; /* number of chars actually read */ + luaL_Buffer b; + luaL_buffinit(L, &b); + rlen = LUAL_BUFFERSIZE; /* try to read that much each time */ + do { + char *p = luaL_prepbuffer(&b); + if (rlen > n) rlen = n; /* cannot read more than asked */ + nr = fread(p, sizeof(char), rlen, f); + luaL_addsize(&b, nr); + n -= nr; /* still have to read `n' chars */ + } while (n > 0 && nr == rlen); /* until end of count or eof */ + luaL_pushresult(&b); /* close buffer */ + return (n == 0 || lua_strlen(L, -1) > 0); +} + + +static int g_read (lua_State *L, FILE *f, int first) { + int nargs = lua_gettop(L) - 1; + int success; + int n; + clearerr(f); + if (nargs == 0) { /* no arguments? */ + success = read_line(L, f); + n = first+1; /* to return 1 result */ + } + else { /* ensure stack space for all results and for auxlib's buffer */ + luaL_checkstack(L, nargs+LUA_MINSTACK, "too many arguments"); + success = 1; + for (n = first; nargs-- && success; n++) { + if (lua_type(L, n) == LUA_TNUMBER) { + size_t l = (size_t)lua_tointeger(L, n); + success = (l == 0) ? test_eof(L, f) : read_chars(L, f, l); + } + else { + const char *p = lua_tostring(L, n); + luaL_argcheck(L, p && p[0] == '*', n, "invalid option"); + switch (p[1]) { + case 'n': /* number */ + success = read_number(L, f); + break; + case 'l': /* line */ + success = read_line(L, f); + break; + case 'a': /* file */ + read_chars(L, f, ~((size_t)0)); /* read MAX_SIZE_T chars */ + success = 1; /* always success */ + break; + default: + return luaL_argerror(L, n, "invalid format"); + } + } + } + } + if (ferror(f)) + return pushresult(L, 0, NULL); + if (!success) { + lua_pop(L, 1); /* remove last result */ + lua_pushnil(L); /* push nil instead */ + } + return n - first; +} + + +static int io_read (lua_State *L) { + return g_read(L, getiofile(L, IO_INPUT), 1); +} + + +static int f_read (lua_State *L) { + return g_read(L, tofile(L), 2); +} + + +static int io_readline (lua_State *L) { + FILE *f = *(FILE **)lua_touserdata(L, lua_upvalueindex(1)); + int sucess; + if (f == NULL) /* file is already closed? */ + luaL_error(L, "file is already closed"); + sucess = read_line(L, f); + if (ferror(f)) + return luaL_error(L, "%s", strerror(errno)); + if (sucess) return 1; + else { /* EOF */ + if (lua_toboolean(L, lua_upvalueindex(2))) { /* generator created file? */ + lua_settop(L, 0); + lua_pushvalue(L, lua_upvalueindex(1)); + aux_close(L); /* close it */ + } + return 0; + } +} + +/* }====================================================== */ + + +static int g_write (lua_State *L, FILE *f, int arg) { + int nargs = lua_gettop(L) - 1; + int status = 1; + for (; nargs--; arg++) { + if (lua_type(L, arg) == LUA_TNUMBER) { + /* optimization: could be done exactly as for strings */ + status = status && + fprintf(f, LUA_NUMBER_FMT, lua_tonumber(L, arg)) > 0; + } + else { + size_t l; + const char *s = luaL_checklstring(L, arg, &l); + status = status && (fwrite(s, sizeof(char), l, f) == l); + } + } + return pushresult(L, status, NULL); +} + + +static int io_write (lua_State *L) { + return g_write(L, getiofile(L, IO_OUTPUT), 1); +} + + +static int f_write (lua_State *L) { + return g_write(L, tofile(L), 2); +} + + +static int f_seek (lua_State *L) { + static const int mode[] = {SEEK_SET, SEEK_CUR, SEEK_END}; + static const char *const modenames[] = {"set", "cur", "end", NULL}; + FILE *f = tofile(L); + int op = luaL_checkoption(L, 2, "cur", modenames); + long offset = luaL_optlong(L, 3, 0); + op = fseek(f, offset, mode[op]); + if (op) + return pushresult(L, 0, NULL); /* error */ + else { + lua_pushinteger(L, ftell(f)); + return 1; + } +} + + +static int f_setvbuf (lua_State *L) { + static const int mode[] = {_IONBF, _IOFBF, _IOLBF}; + static const char *const modenames[] = {"no", "full", "line", NULL}; + FILE *f = tofile(L); + int op = luaL_checkoption(L, 2, NULL, modenames); + lua_Integer sz = luaL_optinteger(L, 3, LUAL_BUFFERSIZE); + int res = setvbuf(f, NULL, mode[op], sz); + return pushresult(L, res == 0, NULL); +} + + + +static int io_flush (lua_State *L) { + return pushresult(L, fflush(getiofile(L, IO_OUTPUT)) == 0, NULL); +} + + +static int f_flush (lua_State *L) { + return pushresult(L, fflush(tofile(L)) == 0, NULL); +} + + +static const luaL_Reg iolib[] = { + {"close", io_close}, + {"flush", io_flush}, + {"input", io_input}, + {"lines", io_lines}, + {"open", io_open}, + {"output", io_output}, + {"popen", io_popen}, + {"read", io_read}, + {"tmpfile", io_tmpfile}, + {"type", io_type}, + {"write", io_write}, + {NULL, NULL} +}; + + +static const luaL_Reg flib[] = { + {"close", io_close}, + {"flush", f_flush}, + {"lines", f_lines}, + {"read", f_read}, + {"seek", f_seek}, + {"setvbuf", f_setvbuf}, + {"write", f_write}, + {"__gc", io_gc}, + {"__tostring", io_tostring}, + {NULL, NULL} +}; + + +static void createmeta (lua_State *L) { + luaL_newmetatable(L, LUA_FILEHANDLE); /* create metatable for file handles */ + lua_pushvalue(L, -1); /* push metatable */ + lua_setfield(L, -2, "__index"); /* metatable.__index = metatable */ + luaL_register(L, NULL, flib); /* file methods */ +} + + +static void createstdfile (lua_State *L, FILE *f, int k, const char *fname) { + *newfile(L) = f; + if (k > 0) { + lua_pushvalue(L, -1); + lua_rawseti(L, LUA_ENVIRONINDEX, k); + } + lua_setfield(L, -2, fname); +} + + +LUALIB_API int luaopen_io (lua_State *L) { + createmeta(L); + /* create (private) environment (with fields IO_INPUT, IO_OUTPUT, __close) */ + lua_createtable(L, 2, 1); + lua_replace(L, LUA_ENVIRONINDEX); + /* open library */ + luaL_register(L, LUA_IOLIBNAME, iolib); + /* create (and set) default files */ + createstdfile(L, stdin, IO_INPUT, "stdin"); + createstdfile(L, stdout, IO_OUTPUT, "stdout"); + createstdfile(L, stderr, 0, "stderr"); + /* create environment for 'popen' */ + lua_getfield(L, -1, "popen"); + lua_createtable(L, 0, 1); + lua_pushcfunction(L, io_pclose); + lua_setfield(L, -2, "__close"); + lua_setfenv(L, -2); + lua_pop(L, 1); /* pop 'popen' */ + /* set default close function */ + lua_pushcfunction(L, io_fclose); + lua_setfield(L, LUA_ENVIRONINDEX, "__close"); + return 1; +} + diff --git a/lib/lua/src/llex.c b/lib/lua/src/llex.c new file mode 100644 index 0000000..1c07cad --- /dev/null +++ b/lib/lua/src/llex.c @@ -0,0 +1,461 @@ +/* +** $Id: llex.c,v 2.20 2006/03/09 18:14:31 roberto Exp $ +** Lexical Analyzer +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include + +#define llex_c +#define LUA_CORE + +#include "lua.h" + +#include "ldo.h" +#include "llex.h" +#include "lobject.h" +#include "lparser.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "lzio.h" + + + +#define next(ls) (ls->current = zgetc(ls->z)) + + + + +#define currIsNewline(ls) (ls->current == '\n' || ls->current == '\r') + + +/* ORDER RESERVED */ +const char *const luaX_tokens [] = { + "and", "break", "do", "else", "elseif", + "end", "false", "for", "function", "if", + "in", "local", "nil", "not", "or", "repeat", + "return", "then", "true", "until", "while", + "..", "...", "==", ">=", "<=", "~=", + "", "", "", "", + NULL +}; + + +#define save_and_next(ls) (save(ls, ls->current), next(ls)) + + +static void save (LexState *ls, int c) { + Mbuffer *b = ls->buff; + if (b->n + 1 > b->buffsize) { + size_t newsize; + if (b->buffsize >= MAX_SIZET/2) + luaX_lexerror(ls, "lexical element too long", 0); + newsize = b->buffsize * 2; + luaZ_resizebuffer(ls->L, b, newsize); + } + b->buffer[b->n++] = cast(char, c); +} + + +void luaX_init (lua_State *L) { + int i; + for (i=0; itsv.reserved = cast_byte(i+1); /* reserved word */ + } +} + + +#define MAXSRC 80 + + +const char *luaX_token2str (LexState *ls, int token) { + if (token < FIRST_RESERVED) { + lua_assert(token == cast(unsigned char, token)); + return (iscntrl(token)) ? luaO_pushfstring(ls->L, "char(%d)", token) : + luaO_pushfstring(ls->L, "%c", token); + } + else + return luaX_tokens[token-FIRST_RESERVED]; +} + + +static const char *txtToken (LexState *ls, int token) { + switch (token) { + case TK_NAME: + case TK_STRING: + case TK_NUMBER: + save(ls, '\0'); + return luaZ_buffer(ls->buff); + default: + return luaX_token2str(ls, token); + } +} + + +void luaX_lexerror (LexState *ls, const char *msg, int token) { + char buff[MAXSRC]; + luaO_chunkid(buff, getstr(ls->source), MAXSRC); + msg = luaO_pushfstring(ls->L, "%s:%d: %s", buff, ls->linenumber, msg); + if (token) + luaO_pushfstring(ls->L, "%s near " LUA_QS, msg, txtToken(ls, token)); + luaD_throw(ls->L, LUA_ERRSYNTAX); +} + + +void luaX_syntaxerror (LexState *ls, const char *msg) { + luaX_lexerror(ls, msg, ls->t.token); +} + + +TString *luaX_newstring (LexState *ls, const char *str, size_t l) { + lua_State *L = ls->L; + TString *ts = luaS_newlstr(L, str, l); + TValue *o = luaH_setstr(L, ls->fs->h, ts); /* entry for `str' */ + if (ttisnil(o)) + setbvalue(o, 1); /* make sure `str' will not be collected */ + return ts; +} + + +static void inclinenumber (LexState *ls) { + int old = ls->current; + lua_assert(currIsNewline(ls)); + next(ls); /* skip `\n' or `\r' */ + if (currIsNewline(ls) && ls->current != old) + next(ls); /* skip `\n\r' or `\r\n' */ + if (++ls->linenumber >= MAX_INT) + luaX_syntaxerror(ls, "chunk has too many lines"); +} + + +void luaX_setinput (lua_State *L, LexState *ls, ZIO *z, TString *source) { + ls->decpoint = '.'; + ls->L = L; + ls->lookahead.token = TK_EOS; /* no look-ahead token */ + ls->z = z; + ls->fs = NULL; + ls->linenumber = 1; + ls->lastline = 1; + ls->source = source; + luaZ_resizebuffer(ls->L, ls->buff, LUA_MINBUFFER); /* initialize buffer */ + next(ls); /* read first char */ +} + + + +/* +** ======================================================= +** LEXICAL ANALYZER +** ======================================================= +*/ + + + +static int check_next (LexState *ls, const char *set) { + if (!strchr(set, ls->current)) + return 0; + save_and_next(ls); + return 1; +} + + +static void buffreplace (LexState *ls, char from, char to) { + size_t n = luaZ_bufflen(ls->buff); + char *p = luaZ_buffer(ls->buff); + while (n--) + if (p[n] == from) p[n] = to; +} + + +static void trydecpoint (LexState *ls, SemInfo *seminfo) { + /* format error: try to update decimal point separator */ + struct lconv *cv = localeconv(); + char old = ls->decpoint; + ls->decpoint = (cv ? cv->decimal_point[0] : '.'); + buffreplace(ls, old, ls->decpoint); /* try updated decimal separator */ + if (!luaO_str2d(luaZ_buffer(ls->buff), &seminfo->r)) { + /* format error with correct decimal point: no more options */ + buffreplace(ls, ls->decpoint, '.'); /* undo change (for error message) */ + luaX_lexerror(ls, "malformed number", TK_NUMBER); + } +} + + +/* LUA_NUMBER */ +static void read_numeral (LexState *ls, SemInfo *seminfo) { + lua_assert(isdigit(ls->current)); + do { + save_and_next(ls); + } while (isdigit(ls->current) || ls->current == '.'); + if (check_next(ls, "Ee")) /* `E'? */ + check_next(ls, "+-"); /* optional exponent sign */ + while (isalnum(ls->current) || ls->current == '_') + save_and_next(ls); + save(ls, '\0'); + buffreplace(ls, '.', ls->decpoint); /* follow locale for decimal point */ + if (!luaO_str2d(luaZ_buffer(ls->buff), &seminfo->r)) /* format error? */ + trydecpoint(ls, seminfo); /* try to update decimal point separator */ +} + + +static int skip_sep (LexState *ls) { + int count = 0; + int s = ls->current; + lua_assert(s == '[' || s == ']'); + save_and_next(ls); + while (ls->current == '=') { + save_and_next(ls); + count++; + } + return (ls->current == s) ? count : (-count) - 1; +} + + +static void read_long_string (LexState *ls, SemInfo *seminfo, int sep) { + int cont = 0; + (void)(cont); /* avoid warnings when `cont' is not used */ + save_and_next(ls); /* skip 2nd `[' */ + if (currIsNewline(ls)) /* string starts with a newline? */ + inclinenumber(ls); /* skip it */ + for (;;) { + switch (ls->current) { + case EOZ: + luaX_lexerror(ls, (seminfo) ? "unfinished long string" : + "unfinished long comment", TK_EOS); + break; /* to avoid warnings */ +#if defined(LUA_COMPAT_LSTR) + case '[': { + if (skip_sep(ls) == sep) { + save_and_next(ls); /* skip 2nd `[' */ + cont++; +#if LUA_COMPAT_LSTR == 1 + if (sep == 0) + luaX_lexerror(ls, "nesting of [[...]] is deprecated", '['); +#endif + } + break; + } +#endif + case ']': { + if (skip_sep(ls) == sep) { + save_and_next(ls); /* skip 2nd `]' */ +#if defined(LUA_COMPAT_LSTR) && LUA_COMPAT_LSTR == 2 + cont--; + if (sep == 0 && cont >= 0) break; +#endif + goto endloop; + } + break; + } + case '\n': + case '\r': { + save(ls, '\n'); + inclinenumber(ls); + if (!seminfo) luaZ_resetbuffer(ls->buff); /* avoid wasting space */ + break; + } + default: { + if (seminfo) save_and_next(ls); + else next(ls); + } + } + } endloop: + if (seminfo) + seminfo->ts = luaX_newstring(ls, luaZ_buffer(ls->buff) + (2 + sep), + luaZ_bufflen(ls->buff) - 2*(2 + sep)); +} + + +static void read_string (LexState *ls, int del, SemInfo *seminfo) { + save_and_next(ls); + while (ls->current != del) { + switch (ls->current) { + case EOZ: + luaX_lexerror(ls, "unfinished string", TK_EOS); + continue; /* to avoid warnings */ + case '\n': + case '\r': + luaX_lexerror(ls, "unfinished string", TK_STRING); + continue; /* to avoid warnings */ + case '\\': { + int c; + next(ls); /* do not save the `\' */ + switch (ls->current) { + case 'a': c = '\a'; break; + case 'b': c = '\b'; break; + case 'f': c = '\f'; break; + case 'n': c = '\n'; break; + case 'r': c = '\r'; break; + case 't': c = '\t'; break; + case 'v': c = '\v'; break; + case '\n': /* go through */ + case '\r': save(ls, '\n'); inclinenumber(ls); continue; + case EOZ: continue; /* will raise an error next loop */ + default: { + if (!isdigit(ls->current)) + save_and_next(ls); /* handles \\, \", \', and \? */ + else { /* \xxx */ + int i = 0; + c = 0; + do { + c = 10*c + (ls->current-'0'); + next(ls); + } while (++i<3 && isdigit(ls->current)); + if (c > UCHAR_MAX) + luaX_lexerror(ls, "escape sequence too large", TK_STRING); + save(ls, c); + } + continue; + } + } + save(ls, c); + next(ls); + continue; + } + default: + save_and_next(ls); + } + } + save_and_next(ls); /* skip delimiter */ + seminfo->ts = luaX_newstring(ls, luaZ_buffer(ls->buff) + 1, + luaZ_bufflen(ls->buff) - 2); +} + + +static int llex (LexState *ls, SemInfo *seminfo) { + luaZ_resetbuffer(ls->buff); + for (;;) { + switch (ls->current) { + case '\n': + case '\r': { + inclinenumber(ls); + continue; + } + case '-': { + next(ls); + if (ls->current != '-') return '-'; + /* else is a comment */ + next(ls); + if (ls->current == '[') { + int sep = skip_sep(ls); + luaZ_resetbuffer(ls->buff); /* `skip_sep' may dirty the buffer */ + if (sep >= 0) { + read_long_string(ls, NULL, sep); /* long comment */ + luaZ_resetbuffer(ls->buff); + continue; + } + } + /* else short comment */ + while (!currIsNewline(ls) && ls->current != EOZ) + next(ls); + continue; + } + case '[': { + int sep = skip_sep(ls); + if (sep >= 0) { + read_long_string(ls, seminfo, sep); + return TK_STRING; + } + else if (sep == -1) return '['; + else luaX_lexerror(ls, "invalid long string delimiter", TK_STRING); + } + case '=': { + next(ls); + if (ls->current != '=') return '='; + else { next(ls); return TK_EQ; } + } + case '<': { + next(ls); + if (ls->current != '=') return '<'; + else { next(ls); return TK_LE; } + } + case '>': { + next(ls); + if (ls->current != '=') return '>'; + else { next(ls); return TK_GE; } + } + case '~': { + next(ls); + if (ls->current != '=') return '~'; + else { next(ls); return TK_NE; } + } + case '"': + case '\'': { + read_string(ls, ls->current, seminfo); + return TK_STRING; + } + case '.': { + save_and_next(ls); + if (check_next(ls, ".")) { + if (check_next(ls, ".")) + return TK_DOTS; /* ... */ + else return TK_CONCAT; /* .. */ + } + else if (!isdigit(ls->current)) return '.'; + else { + read_numeral(ls, seminfo); + return TK_NUMBER; + } + } + case EOZ: { + return TK_EOS; + } + default: { + if (isspace(ls->current)) { + lua_assert(!currIsNewline(ls)); + next(ls); + continue; + } + else if (isdigit(ls->current)) { + read_numeral(ls, seminfo); + return TK_NUMBER; + } + else if (isalpha(ls->current) || ls->current == '_') { + /* identifier or reserved word */ + TString *ts; + do { + save_and_next(ls); + } while (isalnum(ls->current) || ls->current == '_'); + ts = luaX_newstring(ls, luaZ_buffer(ls->buff), + luaZ_bufflen(ls->buff)); + if (ts->tsv.reserved > 0) /* reserved word? */ + return ts->tsv.reserved - 1 + FIRST_RESERVED; + else { + seminfo->ts = ts; + return TK_NAME; + } + } + else { + int c = ls->current; + next(ls); + return c; /* single-char tokens (+ - / ...) */ + } + } + } + } +} + + +void luaX_next (LexState *ls) { + ls->lastline = ls->linenumber; + if (ls->lookahead.token != TK_EOS) { /* is there a look-ahead token? */ + ls->t = ls->lookahead; /* use this one */ + ls->lookahead.token = TK_EOS; /* and discharge it */ + } + else + ls->t.token = llex(ls, &ls->t.seminfo); /* read next token */ +} + + +void luaX_lookahead (LexState *ls) { + lua_assert(ls->lookahead.token == TK_EOS); + ls->lookahead.token = llex(ls, &ls->lookahead.seminfo); +} + diff --git a/lib/lua/src/llex.h b/lib/lua/src/llex.h new file mode 100644 index 0000000..ff07e83 --- /dev/null +++ b/lib/lua/src/llex.h @@ -0,0 +1,81 @@ +/* +** $Id: llex.h,v 1.58 2006/03/23 18:23:32 roberto Exp $ +** Lexical Analyzer +** See Copyright Notice in lua.h +*/ + +#ifndef llex_h +#define llex_h + +#include "lobject.h" +#include "lzio.h" + + +#define FIRST_RESERVED 257 + +/* maximum length of a reserved word */ +#define TOKEN_LEN (sizeof("function")/sizeof(char)) + + +/* +* WARNING: if you change the order of this enumeration, +* grep "ORDER RESERVED" +*/ +enum RESERVED { + /* terminal symbols denoted by reserved words */ + TK_AND = FIRST_RESERVED, TK_BREAK, + TK_DO, TK_ELSE, TK_ELSEIF, TK_END, TK_FALSE, TK_FOR, TK_FUNCTION, + TK_IF, TK_IN, TK_LOCAL, TK_NIL, TK_NOT, TK_OR, TK_REPEAT, + TK_RETURN, TK_THEN, TK_TRUE, TK_UNTIL, TK_WHILE, + /* other terminal symbols */ + TK_CONCAT, TK_DOTS, TK_EQ, TK_GE, TK_LE, TK_NE, TK_NUMBER, + TK_NAME, TK_STRING, TK_EOS +}; + +/* number of reserved words */ +#define NUM_RESERVED (cast(int, TK_WHILE-FIRST_RESERVED+1)) + + +/* array with token `names' */ +LUAI_DATA const char *const luaX_tokens []; + + +typedef union { + lua_Number r; + TString *ts; +} SemInfo; /* semantics information */ + + +typedef struct Token { + int token; + SemInfo seminfo; +} Token; + + +typedef struct LexState { + int current; /* current character (charint) */ + int linenumber; /* input line counter */ + int lastline; /* line of last token `consumed' */ + Token t; /* current token */ + Token lookahead; /* look ahead token */ + struct FuncState *fs; /* `FuncState' is private to the parser */ + struct lua_State *L; + ZIO *z; /* input stream */ + Mbuffer *buff; /* buffer for tokens */ + TString *source; /* current source name */ + char decpoint; /* locale decimal point */ +} LexState; + + +LUAI_FUNC void luaX_init (lua_State *L); +LUAI_FUNC void luaX_setinput (lua_State *L, LexState *ls, ZIO *z, + TString *source); +LUAI_FUNC TString *luaX_newstring (LexState *ls, const char *str, size_t l); +LUAI_FUNC void luaX_next (LexState *ls); +LUAI_FUNC void luaX_lookahead (LexState *ls); +LUAI_FUNC void luaX_lexerror (LexState *ls, const char *msg, int token); +LUAI_FUNC void luaX_syntaxerror (LexState *ls, const char *s); +LUAI_FUNC const char *luaX_token2str (LexState *ls, int token); + + +#endif diff --git a/lib/lua/src/llimits.h b/lib/lua/src/llimits.h new file mode 100644 index 0000000..b03221a --- /dev/null +++ b/lib/lua/src/llimits.h @@ -0,0 +1,128 @@ +/* +** $Id: llimits.h,v 1.69 2005/12/27 17:12:00 roberto Exp $ +** Limits, basic types, and some other `installation-dependent' definitions +** See Copyright Notice in lua.h +*/ + +#ifndef llimits_h +#define llimits_h + + +#include +#include + + +#include "lua.h" + + +typedef LUAI_UINT32 lu_int32; + +typedef LUAI_UMEM lu_mem; + +typedef LUAI_MEM l_mem; + + + +/* chars used as small naturals (so that `char' is reserved for characters) */ +typedef unsigned char lu_byte; + + +#define MAX_SIZET ((size_t)(~(size_t)0)-2) + +#define MAX_LUMEM ((lu_mem)(~(lu_mem)0)-2) + + +#define MAX_INT (INT_MAX-2) /* maximum value of an int (-2 for safety) */ + +/* +** conversion of pointer to integer +** this is for hashing only; there is no problem if the integer +** cannot hold the whole pointer value +*/ +#define IntPoint(p) ((unsigned int)(lu_mem)(p)) + + + +/* type to ensure maximum alignment */ +typedef LUAI_USER_ALIGNMENT_T L_Umaxalign; + + +/* result of a `usual argument conversion' over lua_Number */ +typedef LUAI_UACNUMBER l_uacNumber; + + +/* internal assertions for in-house debugging */ +#ifdef lua_assert + +#define check_exp(c,e) (lua_assert(c), (e)) +#define api_check(l,e) lua_assert(e) + +#else + +#define lua_assert(c) ((void)0) +#define check_exp(c,e) (e) +#define api_check luai_apicheck + +#endif + + +#ifndef UNUSED +#define UNUSED(x) ((void)(x)) /* to avoid warnings */ +#endif + + +#ifndef cast +#define cast(t, exp) ((t)(exp)) +#endif + +#define cast_byte(i) cast(lu_byte, (i)) +#define cast_num(i) cast(lua_Number, (i)) +#define cast_int(i) cast(int, (i)) + + + +/* +** type for virtual-machine instructions +** must be an unsigned with (at least) 4 bytes (see details in lopcodes.h) +*/ +typedef lu_int32 Instruction; + + + +/* maximum stack for a Lua function */ +#define MAXSTACK 250 + + + +/* minimum size for the string table (must be power of 2) */ +#ifndef MINSTRTABSIZE +#define MINSTRTABSIZE 32 +#endif + + +/* minimum size for string buffer */ +#ifndef LUA_MINBUFFER +#define LUA_MINBUFFER 32 +#endif + + +#ifndef lua_lock +#define lua_lock(L) ((void) 0) +#define lua_unlock(L) ((void) 0) +#endif + +#ifndef luai_threadyield +#define luai_threadyield(L) {lua_unlock(L); lua_lock(L);} +#endif + + +/* +** macro to control inclusion of some hard tests on stack reallocation +*/ +#ifndef HARDSTACKTESTS +#define condhardstacktests(x) ((void)0) +#else +#define condhardstacktests(x) x +#endif + +#endif diff --git a/lib/lua/src/lmathlib.c b/lib/lua/src/lmathlib.c new file mode 100644 index 0000000..0ab49fb --- /dev/null +++ b/lib/lua/src/lmathlib.c @@ -0,0 +1,271 @@ +/* +** $Id: lmathlib.c,v 1.67 2005/08/26 17:36:32 roberto Exp $ +** Standard mathematical library +** See Copyright Notice in lua.h +*/ + + +#include +#include + +#define lmathlib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +#undef PI +#define PI (3.14159265358979323846) +#define RADIANS_PER_DEGREE (PI/180.0) + + + +static int math_abs (lua_State *L) { + lua_pushnumber(L, fabs(luaL_checknumber(L, 1))); + return 1; +} + +static int math_sin (lua_State *L) { + lua_pushnumber(L, sin(luaL_checknumber(L, 1))); + return 1; +} + +static int math_sinh (lua_State *L) { + lua_pushnumber(L, sinh(luaL_checknumber(L, 1))); + return 1; +} + +static int math_cos (lua_State *L) { + lua_pushnumber(L, cos(luaL_checknumber(L, 1))); + return 1; +} + +static int math_cosh (lua_State *L) { + lua_pushnumber(L, cosh(luaL_checknumber(L, 1))); + return 1; +} + +static int math_tan (lua_State *L) { + lua_pushnumber(L, tan(luaL_checknumber(L, 1))); + return 1; +} + +static int math_tanh (lua_State *L) { + lua_pushnumber(L, tanh(luaL_checknumber(L, 1))); + return 1; +} + +static int math_asin (lua_State *L) { + lua_pushnumber(L, asin(luaL_checknumber(L, 1))); + return 1; +} + +static int math_acos (lua_State *L) { + lua_pushnumber(L, acos(luaL_checknumber(L, 1))); + return 1; +} + +static int math_atan (lua_State *L) { + lua_pushnumber(L, atan(luaL_checknumber(L, 1))); + return 1; +} + +static int math_atan2 (lua_State *L) { + lua_pushnumber(L, atan2(luaL_checknumber(L, 1), luaL_checknumber(L, 2))); + return 1; +} + +static int math_ceil (lua_State *L) { + lua_pushnumber(L, ceil(luaL_checknumber(L, 1))); + return 1; +} + +static int math_floor (lua_State *L) { + lua_pushnumber(L, floor(luaL_checknumber(L, 1))); + return 1; +} + +static int math_fmod (lua_State *L) { + lua_pushnumber(L, fmod(luaL_checknumber(L, 1), luaL_checknumber(L, 2))); + return 1; +} + +static int math_modf (lua_State *L) { + double ip; + double fp = modf(luaL_checknumber(L, 1), &ip); + lua_pushnumber(L, ip); + lua_pushnumber(L, fp); + return 2; +} + +static int math_sqrt (lua_State *L) { + lua_pushnumber(L, sqrt(luaL_checknumber(L, 1))); + return 1; +} + +static int math_pow (lua_State *L) { + lua_pushnumber(L, pow(luaL_checknumber(L, 1), luaL_checknumber(L, 2))); + return 1; +} + +static int math_log (lua_State *L) { + lua_pushnumber(L, log(luaL_checknumber(L, 1))); + return 1; +} + +static int math_log10 (lua_State *L) { + lua_pushnumber(L, log10(luaL_checknumber(L, 1))); + return 1; +} + +static int math_exp (lua_State *L) { + lua_pushnumber(L, exp(luaL_checknumber(L, 1))); + return 1; +} + +static int math_deg (lua_State *L) { + lua_pushnumber(L, luaL_checknumber(L, 1)/RADIANS_PER_DEGREE); + return 1; +} + +static int math_rad (lua_State *L) { + lua_pushnumber(L, luaL_checknumber(L, 1)*RADIANS_PER_DEGREE); + return 1; +} + +static int math_frexp (lua_State *L) { + int e; + lua_pushnumber(L, frexp(luaL_checknumber(L, 1), &e)); + lua_pushinteger(L, e); + return 2; +} + +static int math_ldexp (lua_State *L) { + lua_pushnumber(L, ldexp(luaL_checknumber(L, 1), luaL_checkint(L, 2))); + return 1; +} + + + +static int math_min (lua_State *L) { + int n = lua_gettop(L); /* number of arguments */ + lua_Number dmin = luaL_checknumber(L, 1); + int i; + for (i=2; i<=n; i++) { + lua_Number d = luaL_checknumber(L, i); + if (d < dmin) + dmin = d; + } + lua_pushnumber(L, dmin); + return 1; +} + + +static int math_max (lua_State *L) { + int n = lua_gettop(L); /* number of arguments */ + lua_Number dmax = luaL_checknumber(L, 1); + int i; + for (i=2; i<=n; i++) { + lua_Number d = luaL_checknumber(L, i); + if (d > dmax) + dmax = d; + } + lua_pushnumber(L, dmax); + return 1; +} + + +static int math_random (lua_State *L) { + /* the `%' avoids the (rare) case of r==1, and is needed also because on + some systems (SunOS!) `rand()' may return a value larger than RAND_MAX */ +#ifdef HAVE_ARC4RANDOM + lua_Number r = (lua_Number)(arc4random()%RAND_MAX) / (lua_Number)RAND_MAX; +#else + lua_Number r = (lua_Number)(rand()%RAND_MAX) / (lua_Number)RAND_MAX; +#endif + switch (lua_gettop(L)) { /* check number of arguments */ + case 0: { /* no arguments */ + lua_pushnumber(L, r); /* Number between 0 and 1 */ + break; + } + case 1: { /* only upper limit */ + int u = luaL_checkint(L, 1); + luaL_argcheck(L, 1<=u, 1, "interval is empty"); + lua_pushnumber(L, floor(r*u)+1); /* int between 1 and `u' */ + break; + } + case 2: { /* lower and upper limits */ + int l = luaL_checkint(L, 1); + int u = luaL_checkint(L, 2); + luaL_argcheck(L, l<=u, 2, "interval is empty"); + lua_pushnumber(L, floor(r*(u-l+1))+l); /* int between `l' and `u' */ + break; + } + default: return luaL_error(L, "wrong number of arguments"); + } + return 1; +} + + +static int math_randomseed (lua_State *L) { +#ifdef HAVE_ARC4RANDOM + arc4random_stir(); +#else + srand(luaL_checkint(L, 1)); +#endif + return 0; +} + + +static const luaL_Reg mathlib[] = { + {"abs", math_abs}, + {"acos", math_acos}, + {"asin", math_asin}, + {"atan2", math_atan2}, + {"atan", math_atan}, + {"ceil", math_ceil}, + {"cosh", math_cosh}, + {"cos", math_cos}, + {"deg", math_deg}, + {"exp", math_exp}, + {"floor", math_floor}, + {"fmod", math_fmod}, + {"frexp", math_frexp}, + {"ldexp", math_ldexp}, + {"log10", math_log10}, + {"log", math_log}, + {"max", math_max}, + {"min", math_min}, + {"modf", math_modf}, + {"pow", math_pow}, + {"rad", math_rad}, + {"random", math_random}, + {"randomseed", math_randomseed}, + {"sinh", math_sinh}, + {"sin", math_sin}, + {"sqrt", math_sqrt}, + {"tanh", math_tanh}, + {"tan", math_tan}, + {NULL, NULL} +}; + + +/* +** Open math library +*/ +LUALIB_API int luaopen_math (lua_State *L) { + luaL_register(L, LUA_MATHLIBNAME, mathlib); + lua_pushnumber(L, PI); + lua_setfield(L, -2, "pi"); + lua_pushnumber(L, HUGE_VAL); + lua_setfield(L, -2, "huge"); +#if defined(LUA_COMPAT_MOD) + lua_getfield(L, -1, "fmod"); + lua_setfield(L, -2, "mod"); +#endif + return 1; +} + diff --git a/lib/lua/src/lmem.c b/lib/lua/src/lmem.c new file mode 100644 index 0000000..cef2bc5 --- /dev/null +++ b/lib/lua/src/lmem.c @@ -0,0 +1,86 @@ +/* +** $Id: lmem.c,v 1.70 2005/12/26 13:35:47 roberto Exp $ +** Interface to Memory Manager +** See Copyright Notice in lua.h +*/ + + +#include + +#define lmem_c +#define LUA_CORE + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" + + + +/* +** About the realloc function: +** void * frealloc (void *ud, void *ptr, size_t osize, size_t nsize); +** (`osize' is the old size, `nsize' is the new size) +** +** Lua ensures that (ptr == NULL) iff (osize == 0). +** +** * frealloc(ud, NULL, 0, x) creates a new block of size `x' +** +** * frealloc(ud, p, x, 0) frees the block `p' +** (in this specific case, frealloc must return NULL). +** particularly, frealloc(ud, NULL, 0, 0) does nothing +** (which is equivalent to free(NULL) in ANSI C) +** +** frealloc returns NULL if it cannot create or reallocate the area +** (any reallocation to an equal or smaller size cannot fail!) +*/ + + + +#define MINSIZEARRAY 4 + + +void *luaM_growaux_ (lua_State *L, void *block, int *size, size_t size_elems, + int limit, const char *errormsg) { + void *newblock; + int newsize; + if (*size >= limit/2) { /* cannot double it? */ + if (*size >= limit) /* cannot grow even a little? */ + luaG_runerror(L, errormsg); + newsize = limit; /* still have at least one free place */ + } + else { + newsize = (*size)*2; + if (newsize < MINSIZEARRAY) + newsize = MINSIZEARRAY; /* minimum size */ + } + newblock = luaM_reallocv(L, block, *size, newsize, size_elems); + *size = newsize; /* update only when everything else is OK */ + return newblock; +} + + +void *luaM_toobig (lua_State *L) { + luaG_runerror(L, "memory allocation error: block too big"); + return NULL; /* to avoid warnings */ +} + + + +/* +** generic allocation routine. +*/ +void *luaM_realloc_ (lua_State *L, void *block, size_t osize, size_t nsize) { + global_State *g = G(L); + lua_assert((osize == 0) == (block == NULL)); + block = (*g->frealloc)(g->ud, block, osize, nsize); + if (block == NULL && nsize > 0) + luaD_throw(L, LUA_ERRMEM); + lua_assert((nsize == 0) == (block == NULL)); + g->totalbytes = (g->totalbytes - osize) + nsize; + return block; +} + diff --git a/lib/lua/src/lmem.h b/lib/lua/src/lmem.h new file mode 100644 index 0000000..19df1fb --- /dev/null +++ b/lib/lua/src/lmem.h @@ -0,0 +1,49 @@ +/* +** $Id: lmem.h,v 1.31 2005/04/25 19:24:10 roberto Exp $ +** Interface to Memory Manager +** See Copyright Notice in lua.h +*/ + +#ifndef lmem_h +#define lmem_h + + +#include + +#include "llimits.h" +#include "lua.h" + +#define MEMERRMSG "not enough memory" + + +#define luaM_reallocv(L,b,on,n,e) \ + ((cast(size_t, (n)+1) <= MAX_SIZET/(e)) ? /* +1 to avoid warnings */ \ + luaM_realloc_(L, (b), (on)*(e), (n)*(e)) : \ + luaM_toobig(L)) + +#define luaM_freemem(L, b, s) luaM_realloc_(L, (b), (s), 0) +#define luaM_free(L, b) luaM_realloc_(L, (b), sizeof(*(b)), 0) +#define luaM_freearray(L, b, n, t) luaM_reallocv(L, (b), n, 0, sizeof(t)) + +#define luaM_malloc(L,t) luaM_realloc_(L, NULL, 0, (t)) +#define luaM_new(L,t) cast(t *, luaM_malloc(L, sizeof(t))) +#define luaM_newvector(L,n,t) \ + cast(t *, luaM_reallocv(L, NULL, 0, n, sizeof(t))) + +#define luaM_growvector(L,v,nelems,size,t,limit,e) \ + if ((nelems)+1 > (size)) \ + ((v)=cast(t *, luaM_growaux_(L,v,&(size),sizeof(t),limit,e))) + +#define luaM_reallocvector(L, v,oldn,n,t) \ + ((v)=cast(t *, luaM_reallocv(L, v, oldn, n, sizeof(t)))) + + +LUAI_FUNC void *luaM_realloc_ (lua_State *L, void *block, size_t oldsize, + size_t size); +LUAI_FUNC void *luaM_toobig (lua_State *L); +LUAI_FUNC void *luaM_growaux_ (lua_State *L, void *block, int *size, + size_t size_elem, int limit, + const char *errormsg); + +#endif + diff --git a/lib/lua/src/loadlib.c b/lib/lua/src/loadlib.c new file mode 100644 index 0000000..808368b --- /dev/null +++ b/lib/lua/src/loadlib.c @@ -0,0 +1,664 @@ +/* +** $Id: loadlib.c,v 1.54a 2006/07/03 20:16:49 roberto Exp $ +** Dynamic library loader for Lua +** See Copyright Notice in lua.h +** +** This module contains an implementation of loadlib for Unix systems +** that have dlfcn, an implementation for Darwin (Mac OS X), an +** implementation for Windows, and a stub for other systems. +*/ + + +#include +#include + + +#define loadlib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +/* prefix for open functions in C libraries */ +#define LUA_POF "luaopen_" + +/* separator for open functions in C libraries */ +#define LUA_OFSEP "_" + + +#define LIBPREFIX "LOADLIB: " + +#define POF LUA_POF +#define LIB_FAIL "open" + + +/* error codes for ll_loadfunc */ +#define ERRLIB 1 +#define ERRFUNC 2 + +#define setprogdir(L) ((void)0) + + +static void ll_unloadlib (void *lib); +static void *ll_load (lua_State *L, const char *path); +static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym); + + + +#if defined(LUA_DL_DLOPEN) +/* +** {======================================================================== +** This is an implementation of loadlib based on the dlfcn interface. +** The dlfcn interface is available in Linux, SunOS, Solaris, IRIX, FreeBSD, +** NetBSD, AIX 4.2, HPUX 11, and probably most other Unix flavors, at least +** as an emulation layer on top of native functions. +** ========================================================================= +*/ + +#include + +static void ll_unloadlib (void *lib) { + dlclose(lib); +} + + +static void *ll_load (lua_State *L, const char *path) { + void *lib = dlopen(path, RTLD_NOW); + if (lib == NULL) lua_pushstring(L, dlerror()); + return lib; +} + + +static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) { + lua_CFunction f = (lua_CFunction)dlsym(lib, sym); + if (f == NULL) lua_pushstring(L, dlerror()); + return f; +} + +/* }====================================================== */ + + + +#elif defined(LUA_DL_DLL) +/* +** {====================================================================== +** This is an implementation of loadlib for Windows using native functions. +** ======================================================================= +*/ + +#include + + +#undef setprogdir + +static void setprogdir (lua_State *L) { + char buff[MAX_PATH + 1]; + char *lb; + DWORD nsize = sizeof(buff)/sizeof(char); + DWORD n = GetModuleFileNameA(NULL, buff, nsize); + if (n == 0 || n == nsize || (lb = strrchr(buff, '\\')) == NULL) + luaL_error(L, "unable to get ModuleFileName"); + else { + *lb = '\0'; + luaL_gsub(L, lua_tostring(L, -1), LUA_EXECDIR, buff); + lua_remove(L, -2); /* remove original string */ + } +} + + +static void pusherror (lua_State *L) { + int error = GetLastError(); + char buffer[128]; + if (FormatMessageA(FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, + NULL, error, 0, buffer, sizeof(buffer), NULL)) + lua_pushstring(L, buffer); + else + lua_pushfstring(L, "system error %d\n", error); +} + +static void ll_unloadlib (void *lib) { + FreeLibrary((HINSTANCE)lib); +} + + +static void *ll_load (lua_State *L, const char *path) { + HINSTANCE lib = LoadLibraryA(path); + if (lib == NULL) pusherror(L); + return lib; +} + + +static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) { + lua_CFunction f = (lua_CFunction)GetProcAddress((HINSTANCE)lib, sym); + if (f == NULL) pusherror(L); + return f; +} + +/* }====================================================== */ + + + +#elif defined(LUA_DL_DYLD) +/* +** {====================================================================== +** Native Mac OS X / Darwin Implementation +** ======================================================================= +*/ + +#include + + +/* Mac appends a `_' before C function names */ +#undef POF +#define POF "_" LUA_POF + + +static void pusherror (lua_State *L) { + const char *err_str; + const char *err_file; + NSLinkEditErrors err; + int err_num; + NSLinkEditError(&err, &err_num, &err_file, &err_str); + lua_pushstring(L, err_str); +} + + +static const char *errorfromcode (NSObjectFileImageReturnCode ret) { + switch (ret) { + case NSObjectFileImageInappropriateFile: + return "file is not a bundle"; + case NSObjectFileImageArch: + return "library is for wrong CPU type"; + case NSObjectFileImageFormat: + return "bad format"; + case NSObjectFileImageAccess: + return "cannot access file"; + case NSObjectFileImageFailure: + default: + return "unable to load library"; + } +} + + +static void ll_unloadlib (void *lib) { + NSUnLinkModule((NSModule)lib, NSUNLINKMODULE_OPTION_RESET_LAZY_REFERENCES); +} + + +static void *ll_load (lua_State *L, const char *path) { + NSObjectFileImage img; + NSObjectFileImageReturnCode ret; + /* this would be a rare case, but prevents crashing if it happens */ + if(!_dyld_present()) { + lua_pushliteral(L, "dyld not present"); + return NULL; + } + ret = NSCreateObjectFileImageFromFile(path, &img); + if (ret == NSObjectFileImageSuccess) { + NSModule mod = NSLinkModule(img, path, NSLINKMODULE_OPTION_PRIVATE | + NSLINKMODULE_OPTION_RETURN_ON_ERROR); + NSDestroyObjectFileImage(img); + if (mod == NULL) pusherror(L); + return mod; + } + lua_pushstring(L, errorfromcode(ret)); + return NULL; +} + + +static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) { + NSSymbol nss = NSLookupSymbolInModule((NSModule)lib, sym); + if (nss == NULL) { + lua_pushfstring(L, "symbol " LUA_QS " not found", sym); + return NULL; + } + return (lua_CFunction)NSAddressOfSymbol(nss); +} + +/* }====================================================== */ + + + +#else +/* +** {====================================================== +** Fallback for other systems +** ======================================================= +*/ + +#undef LIB_FAIL +#define LIB_FAIL "absent" + + +#define DLMSG "dynamic libraries not enabled; check your Lua installation" + + +static void ll_unloadlib (void *lib) { + (void)lib; /* to avoid warnings */ +} + + +static void *ll_load (lua_State *L, const char *path) { + (void)path; /* to avoid warnings */ + lua_pushliteral(L, DLMSG); + return NULL; +} + + +static lua_CFunction ll_sym (lua_State *L, void *lib, const char *sym) { + (void)lib; (void)sym; /* to avoid warnings */ + lua_pushliteral(L, DLMSG); + return NULL; +} + +/* }====================================================== */ +#endif + + + +static void **ll_register (lua_State *L, const char *path) { + void **plib; + lua_pushfstring(L, "%s%s", LIBPREFIX, path); + lua_gettable(L, LUA_REGISTRYINDEX); /* check library in registry? */ + if (!lua_isnil(L, -1)) /* is there an entry? */ + plib = (void **)lua_touserdata(L, -1); + else { /* no entry yet; create one */ + lua_pop(L, 1); + plib = (void **)lua_newuserdata(L, sizeof(const void *)); + *plib = NULL; + luaL_getmetatable(L, "_LOADLIB"); + lua_setmetatable(L, -2); + lua_pushfstring(L, "%s%s", LIBPREFIX, path); + lua_pushvalue(L, -2); + lua_settable(L, LUA_REGISTRYINDEX); + } + return plib; +} + + +/* +** __gc tag method: calls library's `ll_unloadlib' function with the lib +** handle +*/ +static int gctm (lua_State *L) { + void **lib = (void **)luaL_checkudata(L, 1, "_LOADLIB"); + if (*lib) ll_unloadlib(*lib); + *lib = NULL; /* mark library as closed */ + return 0; +} + + +static int ll_loadfunc (lua_State *L, const char *path, const char *sym) { + void **reg = ll_register(L, path); + if (*reg == NULL) *reg = ll_load(L, path); + if (*reg == NULL) + return ERRLIB; /* unable to load library */ + else { + lua_CFunction f = ll_sym(L, *reg, sym); + if (f == NULL) + return ERRFUNC; /* unable to find function */ + lua_pushcfunction(L, f); + return 0; /* return function */ + } +} + + +static int ll_loadlib (lua_State *L) { + const char *path = luaL_checkstring(L, 1); + const char *init = luaL_checkstring(L, 2); + int stat = ll_loadfunc(L, path, init); + if (stat == 0) /* no errors? */ + return 1; /* return the loaded function */ + else { /* error; error message is on stack top */ + lua_pushnil(L); + lua_insert(L, -2); + lua_pushstring(L, (stat == ERRLIB) ? LIB_FAIL : "init"); + return 3; /* return nil, error message, and where */ + } +} + + + +/* +** {====================================================== +** 'require' function +** ======================================================= +*/ + + +static int readable (const char *filename) { + FILE *f = fopen(filename, "r"); /* try to open file */ + if (f == NULL) return 0; /* open failed */ + fclose(f); + return 1; +} + + +static const char *pushnexttemplate (lua_State *L, const char *path) { + const char *l; + while (*path == *LUA_PATHSEP) path++; /* skip separators */ + if (*path == '\0') return NULL; /* no more templates */ + l = strchr(path, *LUA_PATHSEP); /* find next separator */ + if (l == NULL) l = path + strlen(path); + lua_pushlstring(L, path, l - path); /* template */ + return l; +} + + +static const char *findfile (lua_State *L, const char *name, + const char *pname) { + const char *path; + name = luaL_gsub(L, name, ".", LUA_DIRSEP); + lua_getfield(L, LUA_ENVIRONINDEX, pname); + path = lua_tostring(L, -1); + if (path == NULL) + luaL_error(L, LUA_QL("package.%s") " must be a string", pname); + lua_pushliteral(L, ""); /* error accumulator */ + while ((path = pushnexttemplate(L, path)) != NULL) { + const char *filename; + filename = luaL_gsub(L, lua_tostring(L, -1), LUA_PATH_MARK, name); + lua_remove(L, -2); /* remove path template */ + if (readable(filename)) /* does file exist and is readable? */ + return filename; /* return that file name */ + lua_pushfstring(L, "\n\tno file " LUA_QS, filename); + lua_remove(L, -2); /* remove file name */ + lua_concat(L, 2); /* add entry to possible error message */ + } + return NULL; /* not found */ +} + + +static void loaderror (lua_State *L, const char *filename) { + luaL_error(L, "error loading module " LUA_QS " from file " LUA_QS ":\n\t%s", + lua_tostring(L, 1), filename, lua_tostring(L, -1)); +} + + +static int loader_Lua (lua_State *L) { + const char *filename; + const char *name = luaL_checkstring(L, 1); + filename = findfile(L, name, "path"); + if (filename == NULL) return 1; /* library not found in this path */ + if (luaL_loadfile(L, filename) != 0) + loaderror(L, filename); + return 1; /* library loaded successfully */ +} + + +static const char *mkfuncname (lua_State *L, const char *modname) { + const char *funcname; + const char *mark = strchr(modname, *LUA_IGMARK); + if (mark) modname = mark + 1; + funcname = luaL_gsub(L, modname, ".", LUA_OFSEP); + funcname = lua_pushfstring(L, POF"%s", funcname); + lua_remove(L, -2); /* remove 'gsub' result */ + return funcname; +} + + +static int loader_C (lua_State *L) { + const char *funcname; + const char *name = luaL_checkstring(L, 1); + const char *filename = findfile(L, name, "cpath"); + if (filename == NULL) return 1; /* library not found in this path */ + funcname = mkfuncname(L, name); + if (ll_loadfunc(L, filename, funcname) != 0) + loaderror(L, filename); + return 1; /* library loaded successfully */ +} + + +static int loader_Croot (lua_State *L) { + const char *funcname; + const char *filename; + const char *name = luaL_checkstring(L, 1); + const char *p = strchr(name, '.'); + int stat; + if (p == NULL) return 0; /* is root */ + lua_pushlstring(L, name, p - name); + filename = findfile(L, lua_tostring(L, -1), "cpath"); + if (filename == NULL) return 1; /* root not found */ + funcname = mkfuncname(L, name); + if ((stat = ll_loadfunc(L, filename, funcname)) != 0) { + if (stat != ERRFUNC) loaderror(L, filename); /* real error */ + lua_pushfstring(L, "\n\tno module " LUA_QS " in file " LUA_QS, + name, filename); + return 1; /* function not found */ + } + return 1; +} + + +static int loader_preload (lua_State *L) { + const char *name = luaL_checkstring(L, 1); + lua_getfield(L, LUA_ENVIRONINDEX, "preload"); + if (!lua_istable(L, -1)) + luaL_error(L, LUA_QL("package.preload") " must be a table"); + lua_getfield(L, -1, name); + if (lua_isnil(L, -1)) /* not found? */ + lua_pushfstring(L, "\n\tno field package.preload['%s']", name); + return 1; +} + + +static const int sentinel_ = 0; +#define sentinel ((void *)&sentinel_) + + +static int ll_require (lua_State *L) { + const char *name = luaL_checkstring(L, 1); + int i; + lua_settop(L, 1); /* _LOADED table will be at index 2 */ + lua_getfield(L, LUA_REGISTRYINDEX, "_LOADED"); + lua_getfield(L, 2, name); + if (lua_toboolean(L, -1)) { /* is it there? */ + if (lua_touserdata(L, -1) == sentinel) /* check loops */ + luaL_error(L, "loop or previous error loading module " LUA_QS, name); + return 1; /* package is already loaded */ + } + /* else must load it; iterate over available loaders */ + lua_getfield(L, LUA_ENVIRONINDEX, "loaders"); + if (!lua_istable(L, -1)) + luaL_error(L, LUA_QL("package.loaders") " must be a table"); + lua_pushliteral(L, ""); /* error message accumulator */ + for (i=1; ; i++) { + lua_rawgeti(L, -2, i); /* get a loader */ + if (lua_isnil(L, -1)) + luaL_error(L, "module " LUA_QS " not found:%s", + name, lua_tostring(L, -2)); + lua_pushstring(L, name); + lua_call(L, 1, 1); /* call it */ + if (lua_isfunction(L, -1)) /* did it find module? */ + break; /* module loaded successfully */ + else if (lua_isstring(L, -1)) /* loader returned error message? */ + lua_concat(L, 2); /* accumulate it */ + else + lua_pop(L, 1); + } + lua_pushlightuserdata(L, sentinel); + lua_setfield(L, 2, name); /* _LOADED[name] = sentinel */ + lua_pushstring(L, name); /* pass name as argument to module */ + lua_call(L, 1, 1); /* run loaded module */ + if (!lua_isnil(L, -1)) /* non-nil return? */ + lua_setfield(L, 2, name); /* _LOADED[name] = returned value */ + lua_getfield(L, 2, name); + if (lua_touserdata(L, -1) == sentinel) { /* module did not set a value? */ + lua_pushboolean(L, 1); /* use true as result */ + lua_pushvalue(L, -1); /* extra copy to be returned */ + lua_setfield(L, 2, name); /* _LOADED[name] = true */ + } + return 1; +} + +/* }====================================================== */ + + + +/* +** {====================================================== +** 'module' function +** ======================================================= +*/ + + +static void setfenv (lua_State *L) { + lua_Debug ar; + lua_getstack(L, 1, &ar); + lua_getinfo(L, "f", &ar); + lua_pushvalue(L, -2); + lua_setfenv(L, -2); + lua_pop(L, 1); +} + + +static void dooptions (lua_State *L, int n) { + int i; + for (i = 2; i <= n; i++) { + lua_pushvalue(L, i); /* get option (a function) */ + lua_pushvalue(L, -2); /* module */ + lua_call(L, 1, 0); + } +} + + +static void modinit (lua_State *L, const char *modname) { + const char *dot; + lua_pushvalue(L, -1); + lua_setfield(L, -2, "_M"); /* module._M = module */ + lua_pushstring(L, modname); + lua_setfield(L, -2, "_NAME"); + dot = strrchr(modname, '.'); /* look for last dot in module name */ + if (dot == NULL) dot = modname; + else dot++; + /* set _PACKAGE as package name (full module name minus last part) */ + lua_pushlstring(L, modname, dot - modname); + lua_setfield(L, -2, "_PACKAGE"); +} + + +static int ll_module (lua_State *L) { + const char *modname = luaL_checkstring(L, 1); + int loaded = lua_gettop(L) + 1; /* index of _LOADED table */ + lua_getfield(L, LUA_REGISTRYINDEX, "_LOADED"); + lua_getfield(L, loaded, modname); /* get _LOADED[modname] */ + if (!lua_istable(L, -1)) { /* not found? */ + lua_pop(L, 1); /* remove previous result */ + /* try global variable (and create one if it does not exist) */ + if (luaL_findtable(L, LUA_GLOBALSINDEX, modname, 1) != NULL) + return luaL_error(L, "name conflict for module " LUA_QS, modname); + lua_pushvalue(L, -1); + lua_setfield(L, loaded, modname); /* _LOADED[modname] = new table */ + } + /* check whether table already has a _NAME field */ + lua_getfield(L, -1, "_NAME"); + if (!lua_isnil(L, -1)) /* is table an initialized module? */ + lua_pop(L, 1); + else { /* no; initialize it */ + lua_pop(L, 1); + modinit(L, modname); + } + lua_pushvalue(L, -1); + setfenv(L); + dooptions(L, loaded - 1); + return 0; +} + + +static int ll_seeall (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + if (!lua_getmetatable(L, 1)) { + lua_createtable(L, 0, 1); /* create new metatable */ + lua_pushvalue(L, -1); + lua_setmetatable(L, 1); + } + lua_pushvalue(L, LUA_GLOBALSINDEX); + lua_setfield(L, -2, "__index"); /* mt.__index = _G */ + return 0; +} + + +/* }====================================================== */ + + + +/* auxiliary mark (for internal use) */ +#define AUXMARK "\1" + +static void setpath (lua_State *L, const char *fieldname, const char *envname, + const char *def) { + const char *path = getenv(envname); + if (path == NULL) /* no environment variable? */ + lua_pushstring(L, def); /* use default */ + else { + /* replace ";;" by ";AUXMARK;" and then AUXMARK by default path */ + path = luaL_gsub(L, path, LUA_PATHSEP LUA_PATHSEP, + LUA_PATHSEP AUXMARK LUA_PATHSEP); + luaL_gsub(L, path, AUXMARK, def); + lua_remove(L, -2); + } + setprogdir(L); + lua_setfield(L, -2, fieldname); +} + + +static const luaL_Reg pk_funcs[] = { + {"loadlib", ll_loadlib}, + {"seeall", ll_seeall}, + {NULL, NULL} +}; + + +static const luaL_Reg ll_funcs[] = { + {"module", ll_module}, + {"require", ll_require}, + {NULL, NULL} +}; + + +static const lua_CFunction loaders[] = + {loader_preload, loader_Lua, loader_C, loader_Croot, NULL}; + + +LUALIB_API int luaopen_package (lua_State *L) { + int i; + /* create new type _LOADLIB */ + luaL_newmetatable(L, "_LOADLIB"); + lua_pushcfunction(L, gctm); + lua_setfield(L, -2, "__gc"); + /* create `package' table */ + luaL_register(L, LUA_LOADLIBNAME, pk_funcs); +#if defined(LUA_COMPAT_LOADLIB) + lua_getfield(L, -1, "loadlib"); + lua_setfield(L, LUA_GLOBALSINDEX, "loadlib"); +#endif + lua_pushvalue(L, -1); + lua_replace(L, LUA_ENVIRONINDEX); + /* create `loaders' table */ + lua_createtable(L, 0, sizeof(loaders)/sizeof(loaders[0]) - 1); + /* fill it with pre-defined loaders */ + for (i=0; loaders[i] != NULL; i++) { + lua_pushcfunction(L, loaders[i]); + lua_rawseti(L, -2, i+1); + } + lua_setfield(L, -2, "loaders"); /* put it in field `loaders' */ + setpath(L, "path", LUA_PATH, LUA_PATH_DEFAULT); /* set field `path' */ + setpath(L, "cpath", LUA_CPATH, LUA_CPATH_DEFAULT); /* set field `cpath' */ + /* store config information */ + lua_pushliteral(L, LUA_DIRSEP "\n" LUA_PATHSEP "\n" LUA_PATH_MARK "\n" + LUA_EXECDIR "\n" LUA_IGMARK); + lua_setfield(L, -2, "config"); + /* set field `loaded' */ + luaL_findtable(L, LUA_REGISTRYINDEX, "_LOADED", 2); + lua_setfield(L, -2, "loaded"); + /* set field `preload' */ + lua_newtable(L); + lua_setfield(L, -2, "preload"); + lua_pushvalue(L, LUA_GLOBALSINDEX); + luaL_register(L, NULL, ll_funcs); /* open lib into global table */ + lua_pop(L, 1); + return 1; /* return 'package' table */ +} + diff --git a/lib/lua/src/lobject.c b/lib/lua/src/lobject.c new file mode 100644 index 0000000..5358282 --- /dev/null +++ b/lib/lua/src/lobject.c @@ -0,0 +1,213 @@ +/* +** $Id: lobject.c,v 2.22 2006/02/10 17:43:52 roberto Exp $ +** Some generic functions over Lua objects +** See Copyright Notice in lua.h +*/ + +#include +#include +#include +#include +#include +#include + +#define lobject_c +#define LUA_CORE + +#include "lua.h" + +#include "ldo.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" +#include "lvm.h" + + + +const TValue luaO_nilobject_ = {{NULL}, LUA_TNIL}; + + +/* +** converts an integer to a "floating point byte", represented as +** (eeeeexxx), where the real value is (1xxx) * 2^(eeeee - 1) if +** eeeee != 0 and (xxx) otherwise. +*/ +int luaO_int2fb (unsigned int x) { + int e = 0; /* expoent */ + while (x >= 16) { + x = (x+1) >> 1; + e++; + } + if (x < 8) return x; + else return ((e+1) << 3) | (cast_int(x) - 8); +} + + +/* converts back */ +int luaO_fb2int (int x) { + int e = (x >> 3) & 31; + if (e == 0) return x; + else return ((x & 7)+8) << (e - 1); +} + + +int luaO_log2 (unsigned int x) { + static const lu_byte log_2[256] = { + 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 + }; + int l = -1; + while (x >= 256) { l += 8; x >>= 8; } + return l + log_2[x]; + +} + + +int luaO_rawequalObj (const TValue *t1, const TValue *t2) { + if (ttype(t1) != ttype(t2)) return 0; + else switch (ttype(t1)) { + case LUA_TNIL: + return 1; + case LUA_TNUMBER: + return luai_numeq(nvalue(t1), nvalue(t2)); + case LUA_TBOOLEAN: + return bvalue(t1) == bvalue(t2); /* boolean true must be 1 !! */ + case LUA_TLIGHTUSERDATA: + return pvalue(t1) == pvalue(t2); + default: + lua_assert(iscollectable(t1)); + return gcvalue(t1) == gcvalue(t2); + } +} + + +int luaO_str2d (const char *s, lua_Number *result) { + char *endptr; + *result = lua_str2number(s, &endptr); + if (endptr == s) return 0; /* conversion failed */ + if (*endptr == 'x' || *endptr == 'X') /* maybe an hexadecimal constant? */ + *result = cast_num(strtoul(s, &endptr, 16)); + if (*endptr == '\0') return 1; /* most common case */ + while (isspace(cast(unsigned char, *endptr))) endptr++; + if (*endptr != '\0') return 0; /* invalid trailing characters? */ + return 1; +} + + + +static void pushstr (lua_State *L, const char *str) { + setsvalue2s(L, L->top, luaS_new(L, str)); + incr_top(L); +} + + +/* this function handles only `%d', `%c', %f, %p, and `%s' formats */ +const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) { + int n = 1; + pushstr(L, ""); + for (;;) { + const char *e = strchr(fmt, '%'); + if (e == NULL) break; + setsvalue2s(L, L->top, luaS_newlstr(L, fmt, e-fmt)); + incr_top(L); + switch (*(e+1)) { + case 's': { + const char *s = va_arg(argp, char *); + if (s == NULL) s = "(null)"; + pushstr(L, s); + break; + } + case 'c': { + char buff[2]; + buff[0] = cast(char, va_arg(argp, int)); + buff[1] = '\0'; + pushstr(L, buff); + break; + } + case 'd': { + setnvalue(L->top, cast_num(va_arg(argp, int))); + incr_top(L); + break; + } + case 'f': { + setnvalue(L->top, cast_num(va_arg(argp, l_uacNumber))); + incr_top(L); + break; + } + case 'p': { + char buff[4*sizeof(void *) + 8]; /* should be enough space for a `%p' */ + snprintf(buff, sizeof(buff), "%p", va_arg(argp, void *)); + pushstr(L, buff); + break; + } + case '%': { + pushstr(L, "%"); + break; + } + default: { + char buff[3]; + buff[0] = '%'; + buff[1] = *(e+1); + buff[2] = '\0'; + pushstr(L, buff); + break; + } + } + n += 2; + fmt = e+2; + } + pushstr(L, fmt); + luaV_concat(L, n+1, cast_int(L->top - L->base) - 1); + L->top -= n; + return svalue(L->top - 1); +} + + +const char *luaO_pushfstring (lua_State *L, const char *fmt, ...) { + const char *msg; + va_list argp; + va_start(argp, fmt); + msg = luaO_pushvfstring(L, fmt, argp); + va_end(argp); + return msg; +} + + +void luaO_chunkid (char *out, const char *source, size_t bufflen) { + if (*source == '=') + strlcpy(out, source+1, bufflen); /* remove first char */ + else { /* out = "source", or "...source" */ + if (*source == '@') { + size_t l, m; + source++; /* skip the `@' */ + l = strlen(source); + m = bufflen - sizeof(" '...' "); + strlcpy(out, "", bufflen); + if (l > m) { + source += (l-m); /* get last part of file name */ + strlcat(out, "...", bufflen); + } + strlcat(out, source, bufflen); + } + else { /* out = [string "string"] */ + size_t pos = strcspn(source, "\n\r"); /* stop at first newline */ + size_t len = bufflen - sizeof(" [string \"...\"] "); + if (pos > len) pos = len; + strlcpy(out, "[string \"", bufflen); + if (source[len] != '\0') { /* must truncate? */ + strlcat(out, source, len); + strlcat(out, "...", bufflen); + } + else + strlcat(out, source, bufflen); + strlcat(out, "\"]", bufflen); + } + } +} diff --git a/lib/lua/src/lobject.h b/lib/lua/src/lobject.h new file mode 100644 index 0000000..8ce4405 --- /dev/null +++ b/lib/lua/src/lobject.h @@ -0,0 +1,381 @@ +/* +** $Id: lobject.h,v 2.20 2006/01/18 11:37:34 roberto Exp $ +** Type definitions for Lua objects +** See Copyright Notice in lua.h +*/ + + +#ifndef lobject_h +#define lobject_h + + +#include + + +#include "llimits.h" +#include "lua.h" + + +/* tags for values visible from Lua */ +#define LAST_TAG LUA_TTHREAD + +#define NUM_TAGS (LAST_TAG+1) + + +/* +** Extra tags for non-values +*/ +#define LUA_TPROTO (LAST_TAG+1) +#define LUA_TUPVAL (LAST_TAG+2) +#define LUA_TDEADKEY (LAST_TAG+3) + + +/* +** Union of all collectable objects +*/ +typedef union GCObject GCObject; + + +/* +** Common Header for all collectable objects (in macro form, to be +** included in other objects) +*/ +#define CommonHeader GCObject *next; lu_byte tt; lu_byte marked + + +/* +** Common header in struct form +*/ +typedef struct GCheader { + CommonHeader; +} GCheader; + + + + +/* +** Union of all Lua values +*/ +typedef union { + GCObject *gc; + void *p; + lua_Number n; + int b; +} Value; + + +/* +** Tagged Values +*/ + +#define TValuefields Value value; int tt + +typedef struct lua_TValue { + TValuefields; +} TValue; + + +/* Macros to test type */ +#define ttisnil(o) (ttype(o) == LUA_TNIL) +#define ttisnumber(o) (ttype(o) == LUA_TNUMBER) +#define ttisstring(o) (ttype(o) == LUA_TSTRING) +#define ttistable(o) (ttype(o) == LUA_TTABLE) +#define ttisfunction(o) (ttype(o) == LUA_TFUNCTION) +#define ttisboolean(o) (ttype(o) == LUA_TBOOLEAN) +#define ttisuserdata(o) (ttype(o) == LUA_TUSERDATA) +#define ttisthread(o) (ttype(o) == LUA_TTHREAD) +#define ttislightuserdata(o) (ttype(o) == LUA_TLIGHTUSERDATA) + +/* Macros to access values */ +#define ttype(o) ((o)->tt) +#define gcvalue(o) check_exp(iscollectable(o), (o)->value.gc) +#define pvalue(o) check_exp(ttislightuserdata(o), (o)->value.p) +#define nvalue(o) check_exp(ttisnumber(o), (o)->value.n) +#define rawtsvalue(o) check_exp(ttisstring(o), &(o)->value.gc->ts) +#define tsvalue(o) (&rawtsvalue(o)->tsv) +#define rawuvalue(o) check_exp(ttisuserdata(o), &(o)->value.gc->u) +#define uvalue(o) (&rawuvalue(o)->uv) +#define clvalue(o) check_exp(ttisfunction(o), &(o)->value.gc->cl) +#define hvalue(o) check_exp(ttistable(o), &(o)->value.gc->h) +#define bvalue(o) check_exp(ttisboolean(o), (o)->value.b) +#define thvalue(o) check_exp(ttisthread(o), &(o)->value.gc->th) + +#define l_isfalse(o) (ttisnil(o) || (ttisboolean(o) && bvalue(o) == 0)) + +/* +** for internal debug only +*/ +#define checkconsistency(obj) \ + lua_assert(!iscollectable(obj) || (ttype(obj) == (obj)->value.gc->gch.tt)) + +#define checkliveness(g,obj) \ + lua_assert(!iscollectable(obj) || \ + ((ttype(obj) == (obj)->value.gc->gch.tt) && !isdead(g, (obj)->value.gc))) + + +/* Macros to set values */ +#define setnilvalue(obj) ((obj)->tt=LUA_TNIL) + +#define setnvalue(obj,x) \ + { TValue *i_o=(obj); i_o->value.n=(x); i_o->tt=LUA_TNUMBER; } + +#define setpvalue(obj,x) \ + { TValue *i_o=(obj); i_o->value.p=(x); i_o->tt=LUA_TLIGHTUSERDATA; } + +#define setbvalue(obj,x) \ + { TValue *i_o=(obj); i_o->value.b=(x); i_o->tt=LUA_TBOOLEAN; } + +#define setsvalue(L,obj,x) \ + { TValue *i_o=(obj); \ + i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TSTRING; \ + checkliveness(G(L),i_o); } + +#define setuvalue(L,obj,x) \ + { TValue *i_o=(obj); \ + i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TUSERDATA; \ + checkliveness(G(L),i_o); } + +#define setthvalue(L,obj,x) \ + { TValue *i_o=(obj); \ + i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TTHREAD; \ + checkliveness(G(L),i_o); } + +#define setclvalue(L,obj,x) \ + { TValue *i_o=(obj); \ + i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TFUNCTION; \ + checkliveness(G(L),i_o); } + +#define sethvalue(L,obj,x) \ + { TValue *i_o=(obj); \ + i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TTABLE; \ + checkliveness(G(L),i_o); } + +#define setptvalue(L,obj,x) \ + { TValue *i_o=(obj); \ + i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TPROTO; \ + checkliveness(G(L),i_o); } + + + + +#define setobj(L,obj1,obj2) \ + { const TValue *o2=(obj2); TValue *o1=(obj1); \ + o1->value = o2->value; o1->tt=o2->tt; \ + checkliveness(G(L),o1); } + + +/* +** different types of sets, according to destination +*/ + +/* from stack to (same) stack */ +#define setobjs2s setobj +/* to stack (not from same stack) */ +#define setobj2s setobj +#define setsvalue2s setsvalue +#define sethvalue2s sethvalue +#define setptvalue2s setptvalue +/* from table to same table */ +#define setobjt2t setobj +/* to table */ +#define setobj2t setobj +/* to new object */ +#define setobj2n setobj +#define setsvalue2n setsvalue + +#define setttype(obj, tt) (ttype(obj) = (tt)) + + +#define iscollectable(o) (ttype(o) >= LUA_TSTRING) + + + +typedef TValue *StkId; /* index to stack elements */ + + +/* +** String headers for string table +*/ +typedef union TString { + L_Umaxalign dummy; /* ensures maximum alignment for strings */ + struct { + CommonHeader; + lu_byte reserved; + unsigned int hash; + size_t len; + } tsv; +} TString; + + +#define getstr(ts) cast(const char *, (ts) + 1) +#define svalue(o) getstr(tsvalue(o)) + + + +typedef union Udata { + L_Umaxalign dummy; /* ensures maximum alignment for `local' udata */ + struct { + CommonHeader; + struct Table *metatable; + struct Table *env; + size_t len; + } uv; +} Udata; + + + + +/* +** Function Prototypes +*/ +typedef struct Proto { + CommonHeader; + TValue *k; /* constants used by the function */ + Instruction *code; + struct Proto **p; /* functions defined inside the function */ + int *lineinfo; /* map from opcodes to source lines */ + struct LocVar *locvars; /* information about local variables */ + TString **upvalues; /* upvalue names */ + TString *source; + int sizeupvalues; + int sizek; /* size of `k' */ + int sizecode; + int sizelineinfo; + int sizep; /* size of `p' */ + int sizelocvars; + int linedefined; + int lastlinedefined; + GCObject *gclist; + lu_byte nups; /* number of upvalues */ + lu_byte numparams; + lu_byte is_vararg; + lu_byte maxstacksize; +} Proto; + + +/* masks for new-style vararg */ +#define VARARG_HASARG 1 +#define VARARG_ISVARARG 2 +#define VARARG_NEEDSARG 4 + + +typedef struct LocVar { + TString *varname; + int startpc; /* first point where variable is active */ + int endpc; /* first point where variable is dead */ +} LocVar; + + + +/* +** Upvalues +*/ + +typedef struct UpVal { + CommonHeader; + TValue *v; /* points to stack or to its own value */ + union { + TValue value; /* the value (when closed) */ + struct { /* double linked list (when open) */ + struct UpVal *prev; + struct UpVal *next; + } l; + } u; +} UpVal; + + +/* +** Closures +*/ + +#define ClosureHeader \ + CommonHeader; lu_byte isC; lu_byte nupvalues; GCObject *gclist; \ + struct Table *env + +typedef struct CClosure { + ClosureHeader; + lua_CFunction f; + TValue upvalue[1]; +} CClosure; + + +typedef struct LClosure { + ClosureHeader; + struct Proto *p; + UpVal *upvals[1]; +} LClosure; + + +typedef union Closure { + CClosure c; + LClosure l; +} Closure; + + +#define iscfunction(o) (ttype(o) == LUA_TFUNCTION && clvalue(o)->c.isC) +#define isLfunction(o) (ttype(o) == LUA_TFUNCTION && !clvalue(o)->c.isC) + + +/* +** Tables +*/ + +typedef union TKey { + struct { + TValuefields; + struct Node *next; /* for chaining */ + } nk; + TValue tvk; +} TKey; + + +typedef struct Node { + TValue i_val; + TKey i_key; +} Node; + + +typedef struct Table { + CommonHeader; + lu_byte flags; /* 1<

lsizenode)) + + +#define luaO_nilobject (&luaO_nilobject_) + +LUAI_DATA const TValue luaO_nilobject_; + +#define ceillog2(x) (luaO_log2((x)-1) + 1) + +LUAI_FUNC int luaO_log2 (unsigned int x); +LUAI_FUNC int luaO_int2fb (unsigned int x); +LUAI_FUNC int luaO_fb2int (int x); +LUAI_FUNC int luaO_rawequalObj (const TValue *t1, const TValue *t2); +LUAI_FUNC int luaO_str2d (const char *s, lua_Number *result); +LUAI_FUNC const char *luaO_pushvfstring (lua_State *L, const char *fmt, + va_list argp); +LUAI_FUNC const char *luaO_pushfstring (lua_State *L, const char *fmt, ...); +LUAI_FUNC void luaO_chunkid (char *out, const char *source, size_t len); + + +#endif + diff --git a/lib/lua/src/lopcodes.c b/lib/lua/src/lopcodes.c new file mode 100644 index 0000000..bf9cd52 --- /dev/null +++ b/lib/lua/src/lopcodes.c @@ -0,0 +1,102 @@ +/* +** $Id: lopcodes.c,v 1.37 2005/11/08 19:45:36 roberto Exp $ +** See Copyright Notice in lua.h +*/ + + +#define lopcodes_c +#define LUA_CORE + + +#include "lopcodes.h" + + +/* ORDER OP */ + +const char *const luaP_opnames[NUM_OPCODES+1] = { + "MOVE", + "LOADK", + "LOADBOOL", + "LOADNIL", + "GETUPVAL", + "GETGLOBAL", + "GETTABLE", + "SETGLOBAL", + "SETUPVAL", + "SETTABLE", + "NEWTABLE", + "SELF", + "ADD", + "SUB", + "MUL", + "DIV", + "MOD", + "POW", + "UNM", + "NOT", + "LEN", + "CONCAT", + "JMP", + "EQ", + "LT", + "LE", + "TEST", + "TESTSET", + "CALL", + "TAILCALL", + "RETURN", + "FORLOOP", + "FORPREP", + "TFORLOOP", + "SETLIST", + "CLOSE", + "CLOSURE", + "VARARG", + NULL +}; + + +#define opmode(t,a,b,c,m) (((t)<<7) | ((a)<<6) | ((b)<<4) | ((c)<<2) | (m)) + +const lu_byte luaP_opmodes[NUM_OPCODES] = { +/* T A B C mode opcode */ + opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_MOVE */ + ,opmode(0, 1, OpArgK, OpArgN, iABx) /* OP_LOADK */ + ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_LOADBOOL */ + ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_LOADNIL */ + ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_GETUPVAL */ + ,opmode(0, 1, OpArgK, OpArgN, iABx) /* OP_GETGLOBAL */ + ,opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_GETTABLE */ + ,opmode(0, 0, OpArgK, OpArgN, iABx) /* OP_SETGLOBAL */ + ,opmode(0, 0, OpArgU, OpArgN, iABC) /* OP_SETUPVAL */ + ,opmode(0, 0, OpArgK, OpArgK, iABC) /* OP_SETTABLE */ + ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_NEWTABLE */ + ,opmode(0, 1, OpArgR, OpArgK, iABC) /* OP_SELF */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_ADD */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_SUB */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_MUL */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_DIV */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_MOD */ + ,opmode(0, 1, OpArgK, OpArgK, iABC) /* OP_POW */ + ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_UNM */ + ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_NOT */ + ,opmode(0, 1, OpArgR, OpArgN, iABC) /* OP_LEN */ + ,opmode(0, 1, OpArgR, OpArgR, iABC) /* OP_CONCAT */ + ,opmode(0, 0, OpArgR, OpArgN, iAsBx) /* OP_JMP */ + ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_EQ */ + ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_LT */ + ,opmode(1, 0, OpArgK, OpArgK, iABC) /* OP_LE */ + ,opmode(1, 1, OpArgR, OpArgU, iABC) /* OP_TEST */ + ,opmode(1, 1, OpArgR, OpArgU, iABC) /* OP_TESTSET */ + ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_CALL */ + ,opmode(0, 1, OpArgU, OpArgU, iABC) /* OP_TAILCALL */ + ,opmode(0, 0, OpArgU, OpArgN, iABC) /* OP_RETURN */ + ,opmode(0, 1, OpArgR, OpArgN, iAsBx) /* OP_FORLOOP */ + ,opmode(0, 1, OpArgR, OpArgN, iAsBx) /* OP_FORPREP */ + ,opmode(1, 0, OpArgN, OpArgU, iABC) /* OP_TFORLOOP */ + ,opmode(0, 0, OpArgU, OpArgU, iABC) /* OP_SETLIST */ + ,opmode(0, 0, OpArgN, OpArgN, iABC) /* OP_CLOSE */ + ,opmode(0, 1, OpArgU, OpArgN, iABx) /* OP_CLOSURE */ + ,opmode(0, 1, OpArgU, OpArgN, iABC) /* OP_VARARG */ +}; + diff --git a/lib/lua/src/lopcodes.h b/lib/lua/src/lopcodes.h new file mode 100644 index 0000000..48105f1 --- /dev/null +++ b/lib/lua/src/lopcodes.h @@ -0,0 +1,268 @@ +/* +** $Id: lopcodes.h,v 1.125 2006/03/14 19:04:44 roberto Exp $ +** Opcodes for Lua virtual machine +** See Copyright Notice in lua.h +*/ + +#ifndef lopcodes_h +#define lopcodes_h + +#include "llimits.h" + + +/*=========================================================================== + We assume that instructions are unsigned numbers. + All instructions have an opcode in the first 6 bits. + Instructions can have the following fields: + `A' : 8 bits + `B' : 9 bits + `C' : 9 bits + `Bx' : 18 bits (`B' and `C' together) + `sBx' : signed Bx + + A signed argument is represented in excess K; that is, the number + value is the unsigned value minus K. K is exactly the maximum value + for that argument (so that -max is represented by 0, and +max is + represented by 2*max), which is half the maximum for the corresponding + unsigned argument. +===========================================================================*/ + + +enum OpMode {iABC, iABx, iAsBx}; /* basic instruction format */ + + +/* +** size and position of opcode arguments. +*/ +#define SIZE_C 9 +#define SIZE_B 9 +#define SIZE_Bx (SIZE_C + SIZE_B) +#define SIZE_A 8 + +#define SIZE_OP 6 + +#define POS_OP 0 +#define POS_A (POS_OP + SIZE_OP) +#define POS_C (POS_A + SIZE_A) +#define POS_B (POS_C + SIZE_C) +#define POS_Bx POS_C + + +/* +** limits for opcode arguments. +** we use (signed) int to manipulate most arguments, +** so they must fit in LUAI_BITSINT-1 bits (-1 for sign) +*/ +#if SIZE_Bx < LUAI_BITSINT-1 +#define MAXARG_Bx ((1<>1) /* `sBx' is signed */ +#else +#define MAXARG_Bx MAX_INT +#define MAXARG_sBx MAX_INT +#endif + + +#define MAXARG_A ((1<>POS_OP) & MASK1(SIZE_OP,0))) +#define SET_OPCODE(i,o) ((i) = (((i)&MASK0(SIZE_OP,POS_OP)) | \ + ((cast(Instruction, o)<>POS_A) & MASK1(SIZE_A,0))) +#define SETARG_A(i,u) ((i) = (((i)&MASK0(SIZE_A,POS_A)) | \ + ((cast(Instruction, u)<>POS_B) & MASK1(SIZE_B,0))) +#define SETARG_B(i,b) ((i) = (((i)&MASK0(SIZE_B,POS_B)) | \ + ((cast(Instruction, b)<>POS_C) & MASK1(SIZE_C,0))) +#define SETARG_C(i,b) ((i) = (((i)&MASK0(SIZE_C,POS_C)) | \ + ((cast(Instruction, b)<>POS_Bx) & MASK1(SIZE_Bx,0))) +#define SETARG_Bx(i,b) ((i) = (((i)&MASK0(SIZE_Bx,POS_Bx)) | \ + ((cast(Instruction, b)< C) then pc++ */ +OP_TESTSET,/* A B C if (R(B) <=> C) then R(A) := R(B) else pc++ */ + +OP_CALL,/* A B C R(A), ... ,R(A+C-2) := R(A)(R(A+1), ... ,R(A+B-1)) */ +OP_TAILCALL,/* A B C return R(A)(R(A+1), ... ,R(A+B-1)) */ +OP_RETURN,/* A B return R(A), ... ,R(A+B-2) (see note) */ + +OP_FORLOOP,/* A sBx R(A)+=R(A+2); + if R(A) =) R(A)*/ +OP_CLOSURE,/* A Bx R(A) := closure(KPROTO[Bx], R(A), ... ,R(A+n)) */ + +OP_VARARG/* A B R(A), R(A+1), ..., R(A+B-1) = vararg */ +} OpCode; + + +#define NUM_OPCODES (cast(int, OP_VARARG) + 1) + + + +/*=========================================================================== + Notes: + (*) In OP_CALL, if (B == 0) then B = top. C is the number of returns - 1, + and can be 0: OP_CALL then sets `top' to last_result+1, so + next open instruction (OP_CALL, OP_RETURN, OP_SETLIST) may use `top'. + + (*) In OP_VARARG, if (B == 0) then use actual number of varargs and + set top (like in OP_CALL with C == 0). + + (*) In OP_RETURN, if (B == 0) then return up to `top' + + (*) In OP_SETLIST, if (B == 0) then B = `top'; + if (C == 0) then next `instruction' is real C + + (*) For comparisons, A specifies what condition the test should accept + (true or false). + + (*) All `skips' (pc++) assume that next instruction is a jump +===========================================================================*/ + + +/* +** masks for instruction properties. The format is: +** bits 0-1: op mode +** bits 2-3: C arg mode +** bits 4-5: B arg mode +** bit 6: instruction set register A +** bit 7: operator is a test +*/ + +enum OpArgMask { + OpArgN, /* argument is not used */ + OpArgU, /* argument is used */ + OpArgR, /* argument is a register or a jump offset */ + OpArgK /* argument is a constant or register/constant */ +}; + +LUAI_DATA const lu_byte luaP_opmodes[NUM_OPCODES]; + +#define getOpMode(m) (cast(enum OpMode, luaP_opmodes[m] & 3)) +#define getBMode(m) (cast(enum OpArgMask, (luaP_opmodes[m] >> 4) & 3)) +#define getCMode(m) (cast(enum OpArgMask, (luaP_opmodes[m] >> 2) & 3)) +#define testAMode(m) (luaP_opmodes[m] & (1 << 6)) +#define testTMode(m) (luaP_opmodes[m] & (1 << 7)) + + +LUAI_DATA const char *const luaP_opnames[NUM_OPCODES+1]; /* opcode names */ + + +/* number of list items to accumulate before a SETLIST instruction */ +#define LFIELDS_PER_FLUSH 50 + + +#endif diff --git a/lib/lua/src/loslib.c b/lib/lua/src/loslib.c new file mode 100644 index 0000000..fdda474 --- /dev/null +++ b/lib/lua/src/loslib.c @@ -0,0 +1,244 @@ +/* +** $Id: loslib.c,v 1.20 2006/09/19 13:57:08 roberto Exp $ +** Standard Operating System library +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include +#include +#include + +#define loslib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +static int os_pushresult (lua_State *L, int i, const char *filename) { + int en = errno; /* calls to Lua API may change this value */ + if (i) { + lua_pushboolean(L, 1); + return 1; + } + else { + lua_pushnil(L); + lua_pushfstring(L, "%s: %s", filename, strerror(en)); + lua_pushinteger(L, en); + return 3; + } +} + + +static int os_execute (lua_State *L) { + lua_pushinteger(L, system(luaL_optstring(L, 1, NULL))); + return 1; +} + + +static int os_remove (lua_State *L) { + const char *filename = luaL_checkstring(L, 1); + return os_pushresult(L, remove(filename) == 0, filename); +} + + +static int os_rename (lua_State *L) { + const char *fromname = luaL_checkstring(L, 1); + const char *toname = luaL_checkstring(L, 2); + return os_pushresult(L, rename(fromname, toname) == 0, fromname); +} + + +static int os_tmpname (lua_State *L) { + char buff[LUA_TMPNAMBUFSIZE]; + int err; + lua_tmpnam(buff, err); + if (err) + return luaL_error(L, "unable to generate a unique filename"); + lua_pushstring(L, buff); + return 1; +} + + +static int os_getenv (lua_State *L) { + lua_pushstring(L, getenv(luaL_checkstring(L, 1))); /* if NULL push nil */ + return 1; +} + + +static int os_clock (lua_State *L) { + lua_pushnumber(L, ((lua_Number)clock())/(lua_Number)CLOCKS_PER_SEC); + return 1; +} + + +/* +** {====================================================== +** Time/Date operations +** { year=%Y, month=%m, day=%d, hour=%H, min=%M, sec=%S, +** wday=%w+1, yday=%j, isdst=? } +** ======================================================= +*/ + +static void setfield (lua_State *L, const char *key, int value) { + lua_pushinteger(L, value); + lua_setfield(L, -2, key); +} + +static void setboolfield (lua_State *L, const char *key, int value) { + if (value < 0) /* undefined? */ + return; /* does not set field */ + lua_pushboolean(L, value); + lua_setfield(L, -2, key); +} + +static int getboolfield (lua_State *L, const char *key) { + int res; + lua_getfield(L, -1, key); + res = lua_isnil(L, -1) ? -1 : lua_toboolean(L, -1); + lua_pop(L, 1); + return res; +} + + +static int getfield (lua_State *L, const char *key, int d) { + int res; + lua_getfield(L, -1, key); + if (lua_isnumber(L, -1)) + res = (int)lua_tointeger(L, -1); + else { + if (d < 0) + return luaL_error(L, "field " LUA_QS " missing in date table", key); + res = d; + } + lua_pop(L, 1); + return res; +} + + +static int os_date (lua_State *L) { + const char *s = luaL_optstring(L, 1, "%c"); + time_t t = luaL_opt(L, (time_t)luaL_checknumber, 2, time(NULL)); + struct tm *stm; + if (*s == '!') { /* UTC? */ + stm = gmtime(&t); + s++; /* skip `!' */ + } + else + stm = localtime(&t); + if (stm == NULL) /* invalid date? */ + lua_pushnil(L); + else if (strcmp(s, "*t") == 0) { + lua_createtable(L, 0, 9); /* 9 = number of fields */ + setfield(L, "sec", stm->tm_sec); + setfield(L, "min", stm->tm_min); + setfield(L, "hour", stm->tm_hour); + setfield(L, "day", stm->tm_mday); + setfield(L, "month", stm->tm_mon+1); + setfield(L, "year", stm->tm_year+1900); + setfield(L, "wday", stm->tm_wday+1); + setfield(L, "yday", stm->tm_yday+1); + setboolfield(L, "isdst", stm->tm_isdst); + } + else { + char cc[3]; + luaL_Buffer b; + cc[0] = '%'; cc[2] = '\0'; + luaL_buffinit(L, &b); + for (; *s; s++) { + if (*s != '%' || *(s + 1) == '\0') /* no conversion specifier? */ + luaL_addchar(&b, *s); + else { + size_t reslen; + char buff[200]; /* should be big enough for any conversion result */ + cc[1] = *(++s); + reslen = strftime(buff, sizeof(buff), cc, stm); + luaL_addlstring(&b, buff, reslen); + } + } + luaL_pushresult(&b); + } + return 1; +} + + +static int os_time (lua_State *L) { + time_t t; + if (lua_isnoneornil(L, 1)) /* called without args? */ + t = time(NULL); /* get current time */ + else { + struct tm ts; + luaL_checktype(L, 1, LUA_TTABLE); + lua_settop(L, 1); /* make sure table is at the top */ + ts.tm_sec = getfield(L, "sec", 0); + ts.tm_min = getfield(L, "min", 0); + ts.tm_hour = getfield(L, "hour", 12); + ts.tm_mday = getfield(L, "day", -1); + ts.tm_mon = getfield(L, "month", -1) - 1; + ts.tm_year = getfield(L, "year", -1) - 1900; + ts.tm_isdst = getboolfield(L, "isdst"); + t = mktime(&ts); + } + if (t == (time_t)(-1)) + lua_pushnil(L); + else + lua_pushnumber(L, (lua_Number)t); + return 1; +} + + +static int os_difftime (lua_State *L) { + lua_pushnumber(L, difftime((time_t)(luaL_checknumber(L, 1)), + (time_t)(luaL_optnumber(L, 2, 0)))); + return 1; +} + +/* }====================================================== */ + + +static int os_setlocale (lua_State *L) { + static const int cat[] = {LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, + LC_NUMERIC, LC_TIME}; + static const char *const catnames[] = {"all", "collate", "ctype", "monetary", + "numeric", "time", NULL}; + const char *l = luaL_optstring(L, 1, NULL); + int op = luaL_checkoption(L, 2, "all", catnames); + lua_pushstring(L, setlocale(cat[op], l)); + return 1; +} + + +static int os_exit (lua_State *L) { + exit(luaL_optint(L, 1, EXIT_SUCCESS)); + return 0; /* to avoid warnings */ +} + +static const luaL_Reg syslib[] = { + {"clock", os_clock}, + {"date", os_date}, + {"difftime", os_difftime}, + {"execute", os_execute}, + {"exit", os_exit}, + {"getenv", os_getenv}, + {"remove", os_remove}, + {"rename", os_rename}, + {"setlocale", os_setlocale}, + {"time", os_time}, + {"tmpname", os_tmpname}, + {NULL, NULL} +}; + +/* }====================================================== */ + + + +LUALIB_API int luaopen_os (lua_State *L) { + luaL_register(L, LUA_OSLIBNAME, syslib); + return 1; +} + diff --git a/lib/lua/src/lparser.c b/lib/lua/src/lparser.c new file mode 100644 index 0000000..a868e48 --- /dev/null +++ b/lib/lua/src/lparser.c @@ -0,0 +1,1339 @@ +/* +** $Id: lparser.c,v 2.42a 2006/06/05 15:57:59 roberto Exp $ +** Lua Parser +** See Copyright Notice in lua.h +*/ + + +#include + +#define lparser_c +#define LUA_CORE + +#include "lua.h" + +#include "lcode.h" +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "llex.h" +#include "lmem.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lparser.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" + + + +#define hasmultret(k) ((k) == VCALL || (k) == VVARARG) + +#define getlocvar(fs, i) ((fs)->f->locvars[(fs)->actvar[i]]) + +#define luaY_checklimit(fs,v,l,m) if ((v)>(l)) errorlimit(fs,l,m) + + +/* +** nodes for block list (list of active blocks) +*/ +typedef struct BlockCnt { + struct BlockCnt *previous; /* chain */ + int breaklist; /* list of jumps out of this loop */ + lu_byte nactvar; /* # active locals outside the breakable structure */ + lu_byte upval; /* true if some variable in the block is an upvalue */ + lu_byte isbreakable; /* true if `block' is a loop */ +} BlockCnt; + + + +/* +** prototypes for recursive non-terminal functions +*/ +static void chunk (LexState *ls); +static void expr (LexState *ls, expdesc *v); + + +static void anchor_token (LexState *ls) { + if (ls->t.token == TK_NAME || ls->t.token == TK_STRING) { + TString *ts = ls->t.seminfo.ts; + luaX_newstring(ls, getstr(ts), ts->tsv.len); + } +} + + +static void error_expected (LexState *ls, int token) { + luaX_syntaxerror(ls, + luaO_pushfstring(ls->L, LUA_QS " expected", luaX_token2str(ls, token))); +} + + +static void errorlimit (FuncState *fs, int limit, const char *what) { + const char *msg = (fs->f->linedefined == 0) ? + luaO_pushfstring(fs->L, "main function has more than %d %s", limit, what) : + luaO_pushfstring(fs->L, "function at line %d has more than %d %s", + fs->f->linedefined, limit, what); + luaX_lexerror(fs->ls, msg, 0); +} + + +static int testnext (LexState *ls, int c) { + if (ls->t.token == c) { + luaX_next(ls); + return 1; + } + else return 0; +} + + +static void check (LexState *ls, int c) { + if (ls->t.token != c) + error_expected(ls, c); +} + +static void checknext (LexState *ls, int c) { + check(ls, c); + luaX_next(ls); +} + + +#define check_condition(ls,c,msg) { if (!(c)) luaX_syntaxerror(ls, msg); } + + + +static void check_match (LexState *ls, int what, int who, int where) { + if (!testnext(ls, what)) { + if (where == ls->linenumber) + error_expected(ls, what); + else { + luaX_syntaxerror(ls, luaO_pushfstring(ls->L, + LUA_QS " expected (to close " LUA_QS " at line %d)", + luaX_token2str(ls, what), luaX_token2str(ls, who), where)); + } + } +} + + +static TString *str_checkname (LexState *ls) { + TString *ts; + check(ls, TK_NAME); + ts = ls->t.seminfo.ts; + luaX_next(ls); + return ts; +} + + +static void init_exp (expdesc *e, expkind k, int i) { + e->f = e->t = NO_JUMP; + e->k = k; + e->u.s.info = i; +} + + +static void codestring (LexState *ls, expdesc *e, TString *s) { + init_exp(e, VK, luaK_stringK(ls->fs, s)); +} + + +static void checkname(LexState *ls, expdesc *e) { + codestring(ls, e, str_checkname(ls)); +} + + +static int registerlocalvar (LexState *ls, TString *varname) { + FuncState *fs = ls->fs; + Proto *f = fs->f; + int oldsize = f->sizelocvars; + luaM_growvector(ls->L, f->locvars, fs->nlocvars, f->sizelocvars, + LocVar, SHRT_MAX, "too many local variables"); + while (oldsize < f->sizelocvars) f->locvars[oldsize++].varname = NULL; + f->locvars[fs->nlocvars].varname = varname; + luaC_objbarrier(ls->L, f, varname); + return fs->nlocvars++; +} + + +#define new_localvarliteral(ls,v,n) \ + new_localvar(ls, luaX_newstring(ls, "" v, (sizeof(v)/sizeof(char))-1), n) + + +static void new_localvar (LexState *ls, TString *name, int n) { + FuncState *fs = ls->fs; + luaY_checklimit(fs, fs->nactvar+n+1, LUAI_MAXVARS, "local variables"); + fs->actvar[fs->nactvar+n] = cast(unsigned short, registerlocalvar(ls, name)); +} + + +static void adjustlocalvars (LexState *ls, int nvars) { + FuncState *fs = ls->fs; + fs->nactvar = cast_byte(fs->nactvar + nvars); + for (; nvars; nvars--) { + getlocvar(fs, fs->nactvar - nvars).startpc = fs->pc; + } +} + + +static void removevars (LexState *ls, int tolevel) { + FuncState *fs = ls->fs; + while (fs->nactvar > tolevel) + getlocvar(fs, --fs->nactvar).endpc = fs->pc; +} + + +static int indexupvalue (FuncState *fs, TString *name, expdesc *v) { + int i; + Proto *f = fs->f; + int oldsize = f->sizeupvalues; + for (i=0; inups; i++) { + if (fs->upvalues[i].k == v->k && fs->upvalues[i].info == v->u.s.info) { + lua_assert(f->upvalues[i] == name); + return i; + } + } + /* new one */ + luaY_checklimit(fs, f->nups + 1, LUAI_MAXUPVALUES, "upvalues"); + luaM_growvector(fs->L, f->upvalues, f->nups, f->sizeupvalues, + TString *, MAX_INT, ""); + while (oldsize < f->sizeupvalues) f->upvalues[oldsize++] = NULL; + f->upvalues[f->nups] = name; + luaC_objbarrier(fs->L, f, name); + lua_assert(v->k == VLOCAL || v->k == VUPVAL); + fs->upvalues[f->nups].k = cast_byte(v->k); + fs->upvalues[f->nups].info = cast_byte(v->u.s.info); + return f->nups++; +} + + +static int searchvar (FuncState *fs, TString *n) { + int i; + for (i=fs->nactvar-1; i >= 0; i--) { + if (n == getlocvar(fs, i).varname) + return i; + } + return -1; /* not found */ +} + + +static void markupval (FuncState *fs, int level) { + BlockCnt *bl = fs->bl; + while (bl && bl->nactvar > level) bl = bl->previous; + if (bl) bl->upval = 1; +} + + +static int singlevaraux (FuncState *fs, TString *n, expdesc *var, int base) { + if (fs == NULL) { /* no more levels? */ + init_exp(var, VGLOBAL, NO_REG); /* default is global variable */ + return VGLOBAL; + } + else { + int v = searchvar(fs, n); /* look up at current level */ + if (v >= 0) { + init_exp(var, VLOCAL, v); + if (!base) + markupval(fs, v); /* local will be used as an upval */ + return VLOCAL; + } + else { /* not found at current level; try upper one */ + if (singlevaraux(fs->prev, n, var, 0) == VGLOBAL) + return VGLOBAL; + var->u.s.info = indexupvalue(fs, n, var); /* else was LOCAL or UPVAL */ + var->k = VUPVAL; /* upvalue in this level */ + return VUPVAL; + } + } +} + + +static void singlevar (LexState *ls, expdesc *var) { + TString *varname = str_checkname(ls); + FuncState *fs = ls->fs; + if (singlevaraux(fs, varname, var, 1) == VGLOBAL) + var->u.s.info = luaK_stringK(fs, varname); /* info points to global name */ +} + + +static void adjust_assign (LexState *ls, int nvars, int nexps, expdesc *e) { + FuncState *fs = ls->fs; + int extra = nvars - nexps; + if (hasmultret(e->k)) { + extra++; /* includes call itself */ + if (extra < 0) extra = 0; + luaK_setreturns(fs, e, extra); /* last exp. provides the difference */ + if (extra > 1) luaK_reserveregs(fs, extra-1); + } + else { + if (e->k != VVOID) luaK_exp2nextreg(fs, e); /* close last expression */ + if (extra > 0) { + int reg = fs->freereg; + luaK_reserveregs(fs, extra); + luaK_nil(fs, reg, extra); + } + } +} + + +static void enterlevel (LexState *ls) { + if (++ls->L->nCcalls > LUAI_MAXCCALLS) + luaX_lexerror(ls, "chunk has too many syntax levels", 0); +} + + +#define leavelevel(ls) ((ls)->L->nCcalls--) + + +static void enterblock (FuncState *fs, BlockCnt *bl, lu_byte isbreakable) { + bl->breaklist = NO_JUMP; + bl->isbreakable = isbreakable; + bl->nactvar = fs->nactvar; + bl->upval = 0; + bl->previous = fs->bl; + fs->bl = bl; + lua_assert(fs->freereg == fs->nactvar); +} + + +static void leaveblock (FuncState *fs) { + BlockCnt *bl = fs->bl; + fs->bl = bl->previous; + removevars(fs->ls, bl->nactvar); + if (bl->upval) + luaK_codeABC(fs, OP_CLOSE, bl->nactvar, 0, 0); + /* a block either controls scope or breaks (never both) */ + lua_assert(!bl->isbreakable || !bl->upval); + lua_assert(bl->nactvar == fs->nactvar); + fs->freereg = fs->nactvar; /* free registers */ + luaK_patchtohere(fs, bl->breaklist); +} + + +static void pushclosure (LexState *ls, FuncState *func, expdesc *v) { + FuncState *fs = ls->fs; + Proto *f = fs->f; + int oldsize = f->sizep; + int i; + luaM_growvector(ls->L, f->p, fs->np, f->sizep, Proto *, + MAXARG_Bx, "constant table overflow"); + while (oldsize < f->sizep) f->p[oldsize++] = NULL; + f->p[fs->np++] = func->f; + luaC_objbarrier(ls->L, f, func->f); + init_exp(v, VRELOCABLE, luaK_codeABx(fs, OP_CLOSURE, 0, fs->np-1)); + for (i=0; if->nups; i++) { + OpCode o = (func->upvalues[i].k == VLOCAL) ? OP_MOVE : OP_GETUPVAL; + luaK_codeABC(fs, o, 0, func->upvalues[i].info, 0); + } +} + + +static void open_func (LexState *ls, FuncState *fs) { + lua_State *L = ls->L; + Proto *f = luaF_newproto(L); + fs->f = f; + fs->prev = ls->fs; /* linked list of funcstates */ + fs->ls = ls; + fs->L = L; + ls->fs = fs; + fs->pc = 0; + fs->lasttarget = -1; + fs->jpc = NO_JUMP; + fs->freereg = 0; + fs->nk = 0; + fs->np = 0; + fs->nlocvars = 0; + fs->nactvar = 0; + fs->bl = NULL; + f->source = ls->source; + f->maxstacksize = 2; /* registers 0/1 are always valid */ + fs->h = luaH_new(L, 0, 0); + /* anchor table of constants and prototype (to avoid being collected) */ + sethvalue2s(L, L->top, fs->h); + incr_top(L); + setptvalue2s(L, L->top, f); + incr_top(L); +} + + +static void close_func (LexState *ls) { + lua_State *L = ls->L; + FuncState *fs = ls->fs; + Proto *f = fs->f; + removevars(ls, 0); + luaK_ret(fs, 0, 0); /* final return */ + luaM_reallocvector(L, f->code, f->sizecode, fs->pc, Instruction); + f->sizecode = fs->pc; + luaM_reallocvector(L, f->lineinfo, f->sizelineinfo, fs->pc, int); + f->sizelineinfo = fs->pc; + luaM_reallocvector(L, f->k, f->sizek, fs->nk, TValue); + f->sizek = fs->nk; + luaM_reallocvector(L, f->p, f->sizep, fs->np, Proto *); + f->sizep = fs->np; + luaM_reallocvector(L, f->locvars, f->sizelocvars, fs->nlocvars, LocVar); + f->sizelocvars = fs->nlocvars; + luaM_reallocvector(L, f->upvalues, f->sizeupvalues, f->nups, TString *); + f->sizeupvalues = f->nups; + lua_assert(luaG_checkcode(f)); + lua_assert(fs->bl == NULL); + ls->fs = fs->prev; + L->top -= 2; /* remove table and prototype from the stack */ + /* last token read was anchored in defunct function; must reanchor it */ + if (fs) anchor_token(ls); +} + + +Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, const char *name) { + struct LexState lexstate; + struct FuncState funcstate; + lexstate.buff = buff; + luaX_setinput(L, &lexstate, z, luaS_new(L, name)); + open_func(&lexstate, &funcstate); + funcstate.f->is_vararg = VARARG_ISVARARG; /* main func. is always vararg */ + luaX_next(&lexstate); /* read first token */ + chunk(&lexstate); + check(&lexstate, TK_EOS); + close_func(&lexstate); + lua_assert(funcstate.prev == NULL); + lua_assert(funcstate.f->nups == 0); + lua_assert(lexstate.fs == NULL); + return funcstate.f; +} + + + +/*============================================================*/ +/* GRAMMAR RULES */ +/*============================================================*/ + + +static void field (LexState *ls, expdesc *v) { + /* field -> ['.' | ':'] NAME */ + FuncState *fs = ls->fs; + expdesc key; + luaK_exp2anyreg(fs, v); + luaX_next(ls); /* skip the dot or colon */ + checkname(ls, &key); + luaK_indexed(fs, v, &key); +} + + +static void yindex (LexState *ls, expdesc *v) { + /* index -> '[' expr ']' */ + luaX_next(ls); /* skip the '[' */ + expr(ls, v); + luaK_exp2val(ls->fs, v); + checknext(ls, ']'); +} + + +/* +** {====================================================================== +** Rules for Constructors +** ======================================================================= +*/ + + +struct ConsControl { + expdesc v; /* last list item read */ + expdesc *t; /* table descriptor */ + int nh; /* total number of `record' elements */ + int na; /* total number of array elements */ + int tostore; /* number of array elements pending to be stored */ +}; + + +static void recfield (LexState *ls, struct ConsControl *cc) { + /* recfield -> (NAME | `['exp1`]') = exp1 */ + FuncState *fs = ls->fs; + int reg = ls->fs->freereg; + expdesc key, val; + int rkkey; + if (ls->t.token == TK_NAME) { + luaY_checklimit(fs, cc->nh, MAX_INT, "items in a constructor"); + checkname(ls, &key); + } + else /* ls->t.token == '[' */ + yindex(ls, &key); + cc->nh++; + checknext(ls, '='); + rkkey = luaK_exp2RK(fs, &key); + expr(ls, &val); + luaK_codeABC(fs, OP_SETTABLE, cc->t->u.s.info, rkkey, luaK_exp2RK(fs, &val)); + fs->freereg = reg; /* free registers */ +} + + +static void closelistfield (FuncState *fs, struct ConsControl *cc) { + if (cc->v.k == VVOID) return; /* there is no list item */ + luaK_exp2nextreg(fs, &cc->v); + cc->v.k = VVOID; + if (cc->tostore == LFIELDS_PER_FLUSH) { + luaK_setlist(fs, cc->t->u.s.info, cc->na, cc->tostore); /* flush */ + cc->tostore = 0; /* no more items pending */ + } +} + + +static void lastlistfield (FuncState *fs, struct ConsControl *cc) { + if (cc->tostore == 0) return; + if (hasmultret(cc->v.k)) { + luaK_setmultret(fs, &cc->v); + luaK_setlist(fs, cc->t->u.s.info, cc->na, LUA_MULTRET); + cc->na--; /* do not count last expression (unknown number of elements) */ + } + else { + if (cc->v.k != VVOID) + luaK_exp2nextreg(fs, &cc->v); + luaK_setlist(fs, cc->t->u.s.info, cc->na, cc->tostore); + } +} + + +static void listfield (LexState *ls, struct ConsControl *cc) { + expr(ls, &cc->v); + luaY_checklimit(ls->fs, cc->na, MAX_INT, "items in a constructor"); + cc->na++; + cc->tostore++; +} + + +static void constructor (LexState *ls, expdesc *t) { + /* constructor -> ?? */ + FuncState *fs = ls->fs; + int line = ls->linenumber; + int pc = luaK_codeABC(fs, OP_NEWTABLE, 0, 0, 0); + struct ConsControl cc; + cc.na = cc.nh = cc.tostore = 0; + cc.t = t; + init_exp(t, VRELOCABLE, pc); + init_exp(&cc.v, VVOID, 0); /* no value (yet) */ + luaK_exp2nextreg(ls->fs, t); /* fix it at stack top (for gc) */ + checknext(ls, '{'); + do { + lua_assert(cc.v.k == VVOID || cc.tostore > 0); + if (ls->t.token == '}') break; + closelistfield(fs, &cc); + switch(ls->t.token) { + case TK_NAME: { /* may be listfields or recfields */ + luaX_lookahead(ls); + if (ls->lookahead.token != '=') /* expression? */ + listfield(ls, &cc); + else + recfield(ls, &cc); + break; + } + case '[': { /* constructor_item -> recfield */ + recfield(ls, &cc); + break; + } + default: { /* constructor_part -> listfield */ + listfield(ls, &cc); + break; + } + } + } while (testnext(ls, ',') || testnext(ls, ';')); + check_match(ls, '}', '{', line); + lastlistfield(fs, &cc); + SETARG_B(fs->f->code[pc], luaO_int2fb(cc.na)); /* set initial array size */ + SETARG_C(fs->f->code[pc], luaO_int2fb(cc.nh)); /* set initial table size */ +} + +/* }====================================================================== */ + + + +static void parlist (LexState *ls) { + /* parlist -> [ param { `,' param } ] */ + FuncState *fs = ls->fs; + Proto *f = fs->f; + int nparams = 0; + f->is_vararg = 0; + if (ls->t.token != ')') { /* is `parlist' not empty? */ + do { + switch (ls->t.token) { + case TK_NAME: { /* param -> NAME */ + new_localvar(ls, str_checkname(ls), nparams++); + break; + } + case TK_DOTS: { /* param -> `...' */ + luaX_next(ls); +#if defined(LUA_COMPAT_VARARG) + /* use `arg' as default name */ + new_localvarliteral(ls, "arg", nparams++); + f->is_vararg = VARARG_HASARG | VARARG_NEEDSARG; +#endif + f->is_vararg |= VARARG_ISVARARG; + break; + } + default: luaX_syntaxerror(ls, " or " LUA_QL("...") " expected"); + } + } while (!f->is_vararg && testnext(ls, ',')); + } + adjustlocalvars(ls, nparams); + f->numparams = cast_byte(fs->nactvar - (f->is_vararg & VARARG_HASARG)); + luaK_reserveregs(fs, fs->nactvar); /* reserve register for parameters */ +} + + +static void body (LexState *ls, expdesc *e, int needself, int line) { + /* body -> `(' parlist `)' chunk END */ + FuncState new_fs; + open_func(ls, &new_fs); + new_fs.f->linedefined = line; + checknext(ls, '('); + if (needself) { + new_localvarliteral(ls, "self", 0); + adjustlocalvars(ls, 1); + } + parlist(ls); + checknext(ls, ')'); + chunk(ls); + new_fs.f->lastlinedefined = ls->linenumber; + check_match(ls, TK_END, TK_FUNCTION, line); + close_func(ls); + pushclosure(ls, &new_fs, e); +} + + +static int explist1 (LexState *ls, expdesc *v) { + /* explist1 -> expr { `,' expr } */ + int n = 1; /* at least one expression */ + expr(ls, v); + while (testnext(ls, ',')) { + luaK_exp2nextreg(ls->fs, v); + expr(ls, v); + n++; + } + return n; +} + + +static void funcargs (LexState *ls, expdesc *f) { + FuncState *fs = ls->fs; + expdesc args; + int base, nparams; + int line = ls->linenumber; + switch (ls->t.token) { + case '(': { /* funcargs -> `(' [ explist1 ] `)' */ + if (line != ls->lastline) + luaX_syntaxerror(ls,"ambiguous syntax (function call x new statement)"); + luaX_next(ls); + if (ls->t.token == ')') /* arg list is empty? */ + args.k = VVOID; + else { + explist1(ls, &args); + luaK_setmultret(fs, &args); + } + check_match(ls, ')', '(', line); + break; + } + case '{': { /* funcargs -> constructor */ + constructor(ls, &args); + break; + } + case TK_STRING: { /* funcargs -> STRING */ + codestring(ls, &args, ls->t.seminfo.ts); + luaX_next(ls); /* must use `seminfo' before `next' */ + break; + } + default: { + luaX_syntaxerror(ls, "function arguments expected"); + return; + } + } + lua_assert(f->k == VNONRELOC); + base = f->u.s.info; /* base register for call */ + if (hasmultret(args.k)) + nparams = LUA_MULTRET; /* open call */ + else { + if (args.k != VVOID) + luaK_exp2nextreg(fs, &args); /* close last argument */ + nparams = fs->freereg - (base+1); + } + init_exp(f, VCALL, luaK_codeABC(fs, OP_CALL, base, nparams+1, 2)); + luaK_fixline(fs, line); + fs->freereg = base+1; /* call remove function and arguments and leaves + (unless changed) one result */ +} + + + + +/* +** {====================================================================== +** Expression parsing +** ======================================================================= +*/ + + +static void prefixexp (LexState *ls, expdesc *v) { + /* prefixexp -> NAME | '(' expr ')' */ + switch (ls->t.token) { + case '(': { + int line = ls->linenumber; + luaX_next(ls); + expr(ls, v); + check_match(ls, ')', '(', line); + luaK_dischargevars(ls->fs, v); + return; + } + case TK_NAME: { + singlevar(ls, v); + return; + } + default: { + luaX_syntaxerror(ls, "unexpected symbol"); + return; + } + } +} + + +static void primaryexp (LexState *ls, expdesc *v) { + /* primaryexp -> + prefixexp { `.' NAME | `[' exp `]' | `:' NAME funcargs | funcargs } */ + FuncState *fs = ls->fs; + prefixexp(ls, v); + for (;;) { + switch (ls->t.token) { + case '.': { /* field */ + field(ls, v); + break; + } + case '[': { /* `[' exp1 `]' */ + expdesc key; + luaK_exp2anyreg(fs, v); + yindex(ls, &key); + luaK_indexed(fs, v, &key); + break; + } + case ':': { /* `:' NAME funcargs */ + expdesc key; + luaX_next(ls); + checkname(ls, &key); + luaK_self(fs, v, &key); + funcargs(ls, v); + break; + } + case '(': case TK_STRING: case '{': { /* funcargs */ + luaK_exp2nextreg(fs, v); + funcargs(ls, v); + break; + } + default: return; + } + } +} + + +static void simpleexp (LexState *ls, expdesc *v) { + /* simpleexp -> NUMBER | STRING | NIL | true | false | ... | + constructor | FUNCTION body | primaryexp */ + switch (ls->t.token) { + case TK_NUMBER: { + init_exp(v, VKNUM, 0); + v->u.nval = ls->t.seminfo.r; + break; + } + case TK_STRING: { + codestring(ls, v, ls->t.seminfo.ts); + break; + } + case TK_NIL: { + init_exp(v, VNIL, 0); + break; + } + case TK_TRUE: { + init_exp(v, VTRUE, 0); + break; + } + case TK_FALSE: { + init_exp(v, VFALSE, 0); + break; + } + case TK_DOTS: { /* vararg */ + FuncState *fs = ls->fs; + check_condition(ls, fs->f->is_vararg, + "cannot use " LUA_QL("...") " outside a vararg function"); + fs->f->is_vararg &= ~VARARG_NEEDSARG; /* don't need 'arg' */ + init_exp(v, VVARARG, luaK_codeABC(fs, OP_VARARG, 0, 1, 0)); + break; + } + case '{': { /* constructor */ + constructor(ls, v); + return; + } + case TK_FUNCTION: { + luaX_next(ls); + body(ls, v, 0, ls->linenumber); + return; + } + default: { + primaryexp(ls, v); + return; + } + } + luaX_next(ls); +} + + +static UnOpr getunopr (int op) { + switch (op) { + case TK_NOT: return OPR_NOT; + case '-': return OPR_MINUS; + case '#': return OPR_LEN; + default: return OPR_NOUNOPR; + } +} + + +static BinOpr getbinopr (int op) { + switch (op) { + case '+': return OPR_ADD; + case '-': return OPR_SUB; + case '*': return OPR_MUL; + case '/': return OPR_DIV; + case '%': return OPR_MOD; + case '^': return OPR_POW; + case TK_CONCAT: return OPR_CONCAT; + case TK_NE: return OPR_NE; + case TK_EQ: return OPR_EQ; + case '<': return OPR_LT; + case TK_LE: return OPR_LE; + case '>': return OPR_GT; + case TK_GE: return OPR_GE; + case TK_AND: return OPR_AND; + case TK_OR: return OPR_OR; + default: return OPR_NOBINOPR; + } +} + + +static const struct { + lu_byte left; /* left priority for each binary operator */ + lu_byte right; /* right priority */ +} priority[] = { /* ORDER OPR */ + {6, 6}, {6, 6}, {7, 7}, {7, 7}, {7, 7}, /* `+' `-' `/' `%' */ + {10, 9}, {5, 4}, /* power and concat (right associative) */ + {3, 3}, {3, 3}, /* equality and inequality */ + {3, 3}, {3, 3}, {3, 3}, {3, 3}, /* order */ + {2, 2}, {1, 1} /* logical (and/or) */ +}; + +#define UNARY_PRIORITY 8 /* priority for unary operators */ + + +/* +** subexpr -> (simpleexp | unop subexpr) { binop subexpr } +** where `binop' is any binary operator with a priority higher than `limit' +*/ +static BinOpr subexpr (LexState *ls, expdesc *v, unsigned int limit) { + BinOpr op; + UnOpr uop; + enterlevel(ls); + uop = getunopr(ls->t.token); + if (uop != OPR_NOUNOPR) { + luaX_next(ls); + subexpr(ls, v, UNARY_PRIORITY); + luaK_prefix(ls->fs, uop, v); + } + else simpleexp(ls, v); + /* expand while operators have priorities higher than `limit' */ + op = getbinopr(ls->t.token); + while (op != OPR_NOBINOPR && priority[op].left > limit) { + expdesc v2; + BinOpr nextop; + luaX_next(ls); + luaK_infix(ls->fs, op, v); + /* read sub-expression with higher priority */ + nextop = subexpr(ls, &v2, priority[op].right); + luaK_posfix(ls->fs, op, v, &v2); + op = nextop; + } + leavelevel(ls); + return op; /* return first untreated operator */ +} + + +static void expr (LexState *ls, expdesc *v) { + subexpr(ls, v, 0); +} + +/* }==================================================================== */ + + + +/* +** {====================================================================== +** Rules for Statements +** ======================================================================= +*/ + + +static int block_follow (int token) { + switch (token) { + case TK_ELSE: case TK_ELSEIF: case TK_END: + case TK_UNTIL: case TK_EOS: + return 1; + default: return 0; + } +} + + +static void block (LexState *ls) { + /* block -> chunk */ + FuncState *fs = ls->fs; + BlockCnt bl; + enterblock(fs, &bl, 0); + chunk(ls); + lua_assert(bl.breaklist == NO_JUMP); + leaveblock(fs); +} + + +/* +** structure to chain all variables in the left-hand side of an +** assignment +*/ +struct LHS_assign { + struct LHS_assign *prev; + expdesc v; /* variable (global, local, upvalue, or indexed) */ +}; + + +/* +** check whether, in an assignment to a local variable, the local variable +** is needed in a previous assignment (to a table). If so, save original +** local value in a safe place and use this safe copy in the previous +** assignment. +*/ +static void check_conflict (LexState *ls, struct LHS_assign *lh, expdesc *v) { + FuncState *fs = ls->fs; + int extra = fs->freereg; /* eventual position to save local variable */ + int conflict = 0; + for (; lh; lh = lh->prev) { + if (lh->v.k == VINDEXED) { + if (lh->v.u.s.info == v->u.s.info) { /* conflict? */ + conflict = 1; + lh->v.u.s.info = extra; /* previous assignment will use safe copy */ + } + if (lh->v.u.s.aux == v->u.s.info) { /* conflict? */ + conflict = 1; + lh->v.u.s.aux = extra; /* previous assignment will use safe copy */ + } + } + } + if (conflict) { + luaK_codeABC(fs, OP_MOVE, fs->freereg, v->u.s.info, 0); /* make copy */ + luaK_reserveregs(fs, 1); + } +} + + +static void assignment (LexState *ls, struct LHS_assign *lh, int nvars) { + expdesc e; + check_condition(ls, VLOCAL <= lh->v.k && lh->v.k <= VINDEXED, + "syntax error"); + if (testnext(ls, ',')) { /* assignment -> `,' primaryexp assignment */ + struct LHS_assign nv; + nv.prev = lh; + primaryexp(ls, &nv.v); + if (nv.v.k == VLOCAL) + check_conflict(ls, lh, &nv.v); + luaY_checklimit(ls->fs, ls->L->nCcalls + nvars, LUAI_MAXCCALLS, + "variable names"); + assignment(ls, &nv, nvars+1); + } + else { /* assignment -> `=' explist1 */ + int nexps; + checknext(ls, '='); + nexps = explist1(ls, &e); + if (nexps != nvars) { + adjust_assign(ls, nvars, nexps, &e); + if (nexps > nvars) + ls->fs->freereg -= nexps - nvars; /* remove extra values */ + } + else { + luaK_setoneret(ls->fs, &e); /* close last expression */ + luaK_storevar(ls->fs, &lh->v, &e); + return; /* avoid default */ + } + } + init_exp(&e, VNONRELOC, ls->fs->freereg-1); /* default assignment */ + luaK_storevar(ls->fs, &lh->v, &e); +} + + +static int cond (LexState *ls) { + /* cond -> exp */ + expdesc v; + expr(ls, &v); /* read condition */ + if (v.k == VNIL) v.k = VFALSE; /* `falses' are all equal here */ + luaK_goiftrue(ls->fs, &v); + return v.f; +} + + +static void breakstat (LexState *ls) { + FuncState *fs = ls->fs; + BlockCnt *bl = fs->bl; + int upval = 0; + while (bl && !bl->isbreakable) { + upval |= bl->upval; + bl = bl->previous; + } + if (!bl) + luaX_syntaxerror(ls, "no loop to break"); + if (upval) + luaK_codeABC(fs, OP_CLOSE, bl->nactvar, 0, 0); + luaK_concat(fs, &bl->breaklist, luaK_jump(fs)); +} + + +static void whilestat (LexState *ls, int line) { + /* whilestat -> WHILE cond DO block END */ + FuncState *fs = ls->fs; + int whileinit; + int condexit; + BlockCnt bl; + luaX_next(ls); /* skip WHILE */ + whileinit = luaK_getlabel(fs); + condexit = cond(ls); + enterblock(fs, &bl, 1); + checknext(ls, TK_DO); + block(ls); + luaK_patchlist(fs, luaK_jump(fs), whileinit); + check_match(ls, TK_END, TK_WHILE, line); + leaveblock(fs); + luaK_patchtohere(fs, condexit); /* false conditions finish the loop */ +} + + +static void repeatstat (LexState *ls, int line) { + /* repeatstat -> REPEAT block UNTIL cond */ + int condexit; + FuncState *fs = ls->fs; + int repeat_init = luaK_getlabel(fs); + BlockCnt bl1, bl2; + enterblock(fs, &bl1, 1); /* loop block */ + enterblock(fs, &bl2, 0); /* scope block */ + luaX_next(ls); /* skip REPEAT */ + chunk(ls); + check_match(ls, TK_UNTIL, TK_REPEAT, line); + condexit = cond(ls); /* read condition (inside scope block) */ + if (!bl2.upval) { /* no upvalues? */ + leaveblock(fs); /* finish scope */ + luaK_patchlist(ls->fs, condexit, repeat_init); /* close the loop */ + } + else { /* complete semantics when there are upvalues */ + breakstat(ls); /* if condition then break */ + luaK_patchtohere(ls->fs, condexit); /* else... */ + leaveblock(fs); /* finish scope... */ + luaK_patchlist(ls->fs, luaK_jump(fs), repeat_init); /* and repeat */ + } + leaveblock(fs); /* finish loop */ +} + + +static int exp1 (LexState *ls) { + expdesc e; + int k; + expr(ls, &e); + k = e.k; + luaK_exp2nextreg(ls->fs, &e); + return k; +} + + +static void forbody (LexState *ls, int base, int line, int nvars, int isnum) { + /* forbody -> DO block */ + BlockCnt bl; + FuncState *fs = ls->fs; + int prep, endfor; + adjustlocalvars(ls, 3); /* control variables */ + checknext(ls, TK_DO); + prep = isnum ? luaK_codeAsBx(fs, OP_FORPREP, base, NO_JUMP) : luaK_jump(fs); + enterblock(fs, &bl, 0); /* scope for declared variables */ + adjustlocalvars(ls, nvars); + luaK_reserveregs(fs, nvars); + block(ls); + leaveblock(fs); /* end of scope for declared variables */ + luaK_patchtohere(fs, prep); + endfor = (isnum) ? luaK_codeAsBx(fs, OP_FORLOOP, base, NO_JUMP) : + luaK_codeABC(fs, OP_TFORLOOP, base, 0, nvars); + luaK_fixline(fs, line); /* pretend that `OP_FOR' starts the loop */ + luaK_patchlist(fs, (isnum ? endfor : luaK_jump(fs)), prep + 1); +} + + +static void fornum (LexState *ls, TString *varname, int line) { + /* fornum -> NAME = exp1,exp1[,exp1] forbody */ + FuncState *fs = ls->fs; + int base = fs->freereg; + new_localvarliteral(ls, "(for index)", 0); + new_localvarliteral(ls, "(for limit)", 1); + new_localvarliteral(ls, "(for step)", 2); + new_localvar(ls, varname, 3); + checknext(ls, '='); + exp1(ls); /* initial value */ + checknext(ls, ','); + exp1(ls); /* limit */ + if (testnext(ls, ',')) + exp1(ls); /* optional step */ + else { /* default step = 1 */ + luaK_codeABx(fs, OP_LOADK, fs->freereg, luaK_numberK(fs, 1)); + luaK_reserveregs(fs, 1); + } + forbody(ls, base, line, 1, 1); +} + + +static void forlist (LexState *ls, TString *indexname) { + /* forlist -> NAME {,NAME} IN explist1 forbody */ + FuncState *fs = ls->fs; + expdesc e; + int nvars = 0; + int line; + int base = fs->freereg; + /* create control variables */ + new_localvarliteral(ls, "(for generator)", nvars++); + new_localvarliteral(ls, "(for state)", nvars++); + new_localvarliteral(ls, "(for control)", nvars++); + /* create declared variables */ + new_localvar(ls, indexname, nvars++); + while (testnext(ls, ',')) + new_localvar(ls, str_checkname(ls), nvars++); + checknext(ls, TK_IN); + line = ls->linenumber; + adjust_assign(ls, 3, explist1(ls, &e), &e); + luaK_checkstack(fs, 3); /* extra space to call generator */ + forbody(ls, base, line, nvars - 3, 0); +} + + +static void forstat (LexState *ls, int line) { + /* forstat -> FOR (fornum | forlist) END */ + FuncState *fs = ls->fs; + TString *varname; + BlockCnt bl; + enterblock(fs, &bl, 1); /* scope for loop and control variables */ + luaX_next(ls); /* skip `for' */ + varname = str_checkname(ls); /* first variable name */ + switch (ls->t.token) { + case '=': fornum(ls, varname, line); break; + case ',': case TK_IN: forlist(ls, varname); break; + default: luaX_syntaxerror(ls, LUA_QL("=") " or " LUA_QL("in") " expected"); + } + check_match(ls, TK_END, TK_FOR, line); + leaveblock(fs); /* loop scope (`break' jumps to this point) */ +} + + +static int test_then_block (LexState *ls) { + /* test_then_block -> [IF | ELSEIF] cond THEN block */ + int condexit; + luaX_next(ls); /* skip IF or ELSEIF */ + condexit = cond(ls); + checknext(ls, TK_THEN); + block(ls); /* `then' part */ + return condexit; +} + + +static void ifstat (LexState *ls, int line) { + /* ifstat -> IF cond THEN block {ELSEIF cond THEN block} [ELSE block] END */ + FuncState *fs = ls->fs; + int flist; + int escapelist = NO_JUMP; + flist = test_then_block(ls); /* IF cond THEN block */ + while (ls->t.token == TK_ELSEIF) { + luaK_concat(fs, &escapelist, luaK_jump(fs)); + luaK_patchtohere(fs, flist); + flist = test_then_block(ls); /* ELSEIF cond THEN block */ + } + if (ls->t.token == TK_ELSE) { + luaK_concat(fs, &escapelist, luaK_jump(fs)); + luaK_patchtohere(fs, flist); + luaX_next(ls); /* skip ELSE (after patch, for correct line info) */ + block(ls); /* `else' part */ + } + else + luaK_concat(fs, &escapelist, flist); + luaK_patchtohere(fs, escapelist); + check_match(ls, TK_END, TK_IF, line); +} + + +static void localfunc (LexState *ls) { + expdesc v, b; + FuncState *fs = ls->fs; + new_localvar(ls, str_checkname(ls), 0); + init_exp(&v, VLOCAL, fs->freereg); + luaK_reserveregs(fs, 1); + adjustlocalvars(ls, 1); + body(ls, &b, 0, ls->linenumber); + luaK_storevar(fs, &v, &b); + /* debug information will only see the variable after this point! */ + getlocvar(fs, fs->nactvar - 1).startpc = fs->pc; +} + + +static void localstat (LexState *ls) { + /* stat -> LOCAL NAME {`,' NAME} [`=' explist1] */ + int nvars = 0; + int nexps; + expdesc e; + do { + new_localvar(ls, str_checkname(ls), nvars++); + } while (testnext(ls, ',')); + if (testnext(ls, '=')) + nexps = explist1(ls, &e); + else { + e.k = VVOID; + nexps = 0; + } + adjust_assign(ls, nvars, nexps, &e); + adjustlocalvars(ls, nvars); +} + + +static int funcname (LexState *ls, expdesc *v) { + /* funcname -> NAME {field} [`:' NAME] */ + int needself = 0; + singlevar(ls, v); + while (ls->t.token == '.') + field(ls, v); + if (ls->t.token == ':') { + needself = 1; + field(ls, v); + } + return needself; +} + + +static void funcstat (LexState *ls, int line) { + /* funcstat -> FUNCTION funcname body */ + int needself; + expdesc v, b; + luaX_next(ls); /* skip FUNCTION */ + needself = funcname(ls, &v); + body(ls, &b, needself, line); + luaK_storevar(ls->fs, &v, &b); + luaK_fixline(ls->fs, line); /* definition `happens' in the first line */ +} + + +static void exprstat (LexState *ls) { + /* stat -> func | assignment */ + FuncState *fs = ls->fs; + struct LHS_assign v; + primaryexp(ls, &v.v); + if (v.v.k == VCALL) /* stat -> func */ + SETARG_C(getcode(fs, &v.v), 1); /* call statement uses no results */ + else { /* stat -> assignment */ + v.prev = NULL; + assignment(ls, &v, 1); + } +} + + +static void retstat (LexState *ls) { + /* stat -> RETURN explist */ + FuncState *fs = ls->fs; + expdesc e; + int first, nret; /* registers with returned values */ + luaX_next(ls); /* skip RETURN */ + if (block_follow(ls->t.token) || ls->t.token == ';') + first = nret = 0; /* return no values */ + else { + nret = explist1(ls, &e); /* optional return values */ + if (hasmultret(e.k)) { + luaK_setmultret(fs, &e); + if (e.k == VCALL && nret == 1) { /* tail call? */ + SET_OPCODE(getcode(fs,&e), OP_TAILCALL); + lua_assert(GETARG_A(getcode(fs,&e)) == fs->nactvar); + } + first = fs->nactvar; + nret = LUA_MULTRET; /* return all values */ + } + else { + if (nret == 1) /* only one single value? */ + first = luaK_exp2anyreg(fs, &e); + else { + luaK_exp2nextreg(fs, &e); /* values must go to the `stack' */ + first = fs->nactvar; /* return all `active' values */ + lua_assert(nret == fs->freereg - first); + } + } + } + luaK_ret(fs, first, nret); +} + + +static int statement (LexState *ls) { + int line = ls->linenumber; /* may be needed for error messages */ + switch (ls->t.token) { + case TK_IF: { /* stat -> ifstat */ + ifstat(ls, line); + return 0; + } + case TK_WHILE: { /* stat -> whilestat */ + whilestat(ls, line); + return 0; + } + case TK_DO: { /* stat -> DO block END */ + luaX_next(ls); /* skip DO */ + block(ls); + check_match(ls, TK_END, TK_DO, line); + return 0; + } + case TK_FOR: { /* stat -> forstat */ + forstat(ls, line); + return 0; + } + case TK_REPEAT: { /* stat -> repeatstat */ + repeatstat(ls, line); + return 0; + } + case TK_FUNCTION: { + funcstat(ls, line); /* stat -> funcstat */ + return 0; + } + case TK_LOCAL: { /* stat -> localstat */ + luaX_next(ls); /* skip LOCAL */ + if (testnext(ls, TK_FUNCTION)) /* local function? */ + localfunc(ls); + else + localstat(ls); + return 0; + } + case TK_RETURN: { /* stat -> retstat */ + retstat(ls); + return 1; /* must be last statement */ + } + case TK_BREAK: { /* stat -> breakstat */ + luaX_next(ls); /* skip BREAK */ + breakstat(ls); + return 1; /* must be last statement */ + } + default: { + exprstat(ls); + return 0; /* to avoid warnings */ + } + } +} + + +static void chunk (LexState *ls) { + /* chunk -> { stat [`;'] } */ + int islast = 0; + enterlevel(ls); + while (!islast && !block_follow(ls->t.token)) { + islast = statement(ls); + testnext(ls, ';'); + lua_assert(ls->fs->f->maxstacksize >= ls->fs->freereg && + ls->fs->freereg >= ls->fs->nactvar); + ls->fs->freereg = ls->fs->nactvar; /* free registers */ + } + leavelevel(ls); +} + +/* }====================================================================== */ diff --git a/lib/lua/src/lparser.h b/lib/lua/src/lparser.h new file mode 100644 index 0000000..e5b5b57 --- /dev/null +++ b/lib/lua/src/lparser.h @@ -0,0 +1,82 @@ +/* +** $Id: lparser.h,v 1.57 2006/03/09 18:14:31 roberto Exp $ +** Lua Parser +** See Copyright Notice in lua.h +*/ + +#ifndef lparser_h +#define lparser_h + +#include "llimits.h" +#include "lobject.h" +#include "lzio.h" + + +/* +** Expression descriptor +*/ + +typedef enum { + VVOID, /* no value */ + VNIL, + VTRUE, + VFALSE, + VK, /* info = index of constant in `k' */ + VKNUM, /* nval = numerical value */ + VLOCAL, /* info = local register */ + VUPVAL, /* info = index of upvalue in `upvalues' */ + VGLOBAL, /* info = index of table; aux = index of global name in `k' */ + VINDEXED, /* info = table register; aux = index register (or `k') */ + VJMP, /* info = instruction pc */ + VRELOCABLE, /* info = instruction pc */ + VNONRELOC, /* info = result register */ + VCALL, /* info = instruction pc */ + VVARARG /* info = instruction pc */ +} expkind; + +typedef struct expdesc { + expkind k; + union { + struct { int info, aux; } s; + lua_Number nval; + } u; + int t; /* patch list of `exit when true' */ + int f; /* patch list of `exit when false' */ +} expdesc; + + +typedef struct upvaldesc { + lu_byte k; + lu_byte info; +} upvaldesc; + + +struct BlockCnt; /* defined in lparser.c */ + + +/* state needed to generate code for a given function */ +typedef struct FuncState { + Proto *f; /* current function header */ + Table *h; /* table to find (and reuse) elements in `k' */ + struct FuncState *prev; /* enclosing function */ + struct LexState *ls; /* lexical state */ + struct lua_State *L; /* copy of the Lua state */ + struct BlockCnt *bl; /* chain of current blocks */ + int pc; /* next position to code (equivalent to `ncode') */ + int lasttarget; /* `pc' of last `jump target' */ + int jpc; /* list of pending jumps to `pc' */ + int freereg; /* first free register */ + int nk; /* number of elements in `k' */ + int np; /* number of elements in `p' */ + short nlocvars; /* number of elements in `locvars' */ + lu_byte nactvar; /* number of active local variables */ + upvaldesc upvalues[LUAI_MAXUPVALUES]; /* upvalues */ + unsigned short actvar[LUAI_MAXVARS]; /* declared-variable stack */ +} FuncState; + + +LUAI_FUNC Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff, + const char *name); + + +#endif diff --git a/lib/lua/src/lstate.c b/lib/lua/src/lstate.c new file mode 100644 index 0000000..4bcb759 --- /dev/null +++ b/lib/lua/src/lstate.c @@ -0,0 +1,214 @@ +/* +** $Id: lstate.c,v 2.36 2006/05/24 14:15:50 roberto Exp $ +** Global State +** See Copyright Notice in lua.h +*/ + + +#include + +#define lstate_c +#define LUA_CORE + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lgc.h" +#include "llex.h" +#include "lmem.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" + + +#define state_size(x) (sizeof(x) + LUAI_EXTRASPACE) +#define fromstate(l) (cast(lu_byte *, (l)) - LUAI_EXTRASPACE) +#define tostate(l) (cast(lua_State *, cast(lu_byte *, l) + LUAI_EXTRASPACE)) + + +/* +** Main thread combines a thread state and the global state +*/ +typedef struct LG { + lua_State l; + global_State g; +} LG; + + + +static void stack_init (lua_State *L1, lua_State *L) { + /* initialize CallInfo array */ + L1->base_ci = luaM_newvector(L, BASIC_CI_SIZE, CallInfo); + L1->ci = L1->base_ci; + L1->size_ci = BASIC_CI_SIZE; + L1->end_ci = L1->base_ci + L1->size_ci - 1; + /* initialize stack array */ + L1->stack = luaM_newvector(L, BASIC_STACK_SIZE + EXTRA_STACK, TValue); + L1->stacksize = BASIC_STACK_SIZE + EXTRA_STACK; + L1->top = L1->stack; + L1->stack_last = L1->stack+(L1->stacksize - EXTRA_STACK)-1; + /* initialize first ci */ + L1->ci->func = L1->top; + setnilvalue(L1->top++); /* `function' entry for this `ci' */ + L1->base = L1->ci->base = L1->top; + L1->ci->top = L1->top + LUA_MINSTACK; +} + + +static void freestack (lua_State *L, lua_State *L1) { + luaM_freearray(L, L1->base_ci, L1->size_ci, CallInfo); + luaM_freearray(L, L1->stack, L1->stacksize, TValue); +} + + +/* +** open parts that may cause memory-allocation errors +*/ +static void f_luaopen (lua_State *L, void *ud) { + global_State *g = G(L); + UNUSED(ud); + stack_init(L, L); /* init stack */ + sethvalue(L, gt(L), luaH_new(L, 0, 2)); /* table of globals */ + sethvalue(L, registry(L), luaH_new(L, 0, 2)); /* registry */ + luaS_resize(L, MINSTRTABSIZE); /* initial size of string table */ + luaT_init(L); + luaX_init(L); + luaS_fix(luaS_newliteral(L, MEMERRMSG)); + g->GCthreshold = 4*g->totalbytes; +} + + +static void preinit_state (lua_State *L, global_State *g) { + G(L) = g; + L->stack = NULL; + L->stacksize = 0; + L->errorJmp = NULL; + L->hook = NULL; + L->hookmask = 0; + L->basehookcount = 0; + L->allowhook = 1; + resethookcount(L); + L->openupval = NULL; + L->size_ci = 0; + L->nCcalls = 0; + L->status = 0; + L->base_ci = L->ci = NULL; + L->savedpc = NULL; + L->errfunc = 0; + setnilvalue(gt(L)); +} + + +static void close_state (lua_State *L) { + global_State *g = G(L); + luaF_close(L, L->stack); /* close all upvalues for this thread */ + luaC_freeall(L); /* collect all objects */ + lua_assert(g->rootgc == obj2gco(L)); + lua_assert(g->strt.nuse == 0); + luaM_freearray(L, G(L)->strt.hash, G(L)->strt.size, TString *); + luaZ_freebuffer(L, &g->buff); + freestack(L, L); + lua_assert(g->totalbytes == sizeof(LG)); + (*g->frealloc)(g->ud, fromstate(L), state_size(LG), 0); +} + + +lua_State *luaE_newthread (lua_State *L) { + lua_State *L1 = tostate(luaM_malloc(L, state_size(lua_State))); + luaC_link(L, obj2gco(L1), LUA_TTHREAD); + preinit_state(L1, G(L)); + stack_init(L1, L); /* init stack */ + setobj2n(L, gt(L1), gt(L)); /* share table of globals */ + L1->hookmask = L->hookmask; + L1->basehookcount = L->basehookcount; + L1->hook = L->hook; + resethookcount(L1); + lua_assert(iswhite(obj2gco(L1))); + return L1; +} + + +void luaE_freethread (lua_State *L, lua_State *L1) { + luaF_close(L1, L1->stack); /* close all upvalues for this thread */ + lua_assert(L1->openupval == NULL); + luai_userstatefree(L1); + freestack(L, L1); + luaM_freemem(L, fromstate(L1), state_size(lua_State)); +} + + +LUA_API lua_State *lua_newstate (lua_Alloc f, void *ud) { + int i; + lua_State *L; + global_State *g; + void *l = (*f)(ud, NULL, 0, state_size(LG)); + if (l == NULL) return NULL; + L = tostate(l); + g = &((LG *)L)->g; + L->next = NULL; + L->tt = LUA_TTHREAD; + g->currentwhite = bit2mask(WHITE0BIT, FIXEDBIT); + L->marked = luaC_white(g); + set2bits(L->marked, FIXEDBIT, SFIXEDBIT); + preinit_state(L, g); + g->frealloc = f; + g->ud = ud; + g->mainthread = L; + g->uvhead.u.l.prev = &g->uvhead; + g->uvhead.u.l.next = &g->uvhead; + g->GCthreshold = 0; /* mark it as unfinished state */ + g->strt.size = 0; + g->strt.nuse = 0; + g->strt.hash = NULL; + setnilvalue(registry(L)); + luaZ_initbuffer(L, &g->buff); + g->panic = NULL; + g->gcstate = GCSpause; + g->rootgc = obj2gco(L); + g->sweepstrgc = 0; + g->sweepgc = &g->rootgc; + g->gray = NULL; + g->grayagain = NULL; + g->weak = NULL; + g->tmudata = NULL; + g->totalbytes = sizeof(LG); + g->gcpause = LUAI_GCPAUSE; + g->gcstepmul = LUAI_GCMUL; + g->gcdept = 0; + for (i=0; imt[i] = NULL; + if (luaD_rawrunprotected(L, f_luaopen, NULL) != 0) { + /* memory allocation error: free partial state */ + close_state(L); + L = NULL; + } + else + luai_userstateopen(L); + return L; +} + + +static void callallgcTM (lua_State *L, void *ud) { + UNUSED(ud); + luaC_callGCTM(L); /* call GC metamethods for all udata */ +} + + +LUA_API void lua_close (lua_State *L) { + L = G(L)->mainthread; /* only the main thread can be closed */ + lua_lock(L); + luaF_close(L, L->stack); /* close all upvalues for this thread */ + luaC_separateudata(L, 1); /* separate udata that have GC metamethods */ + L->errfunc = 0; /* no error function during GC metamethods */ + do { /* repeat until no more errors */ + L->ci = L->base_ci; + L->base = L->top = L->ci->base; + L->nCcalls = 0; + } while (luaD_rawrunprotected(L, callallgcTM, NULL) != 0); + lua_assert(G(L)->tmudata == NULL); + luai_userstateclose(L); + close_state(L); +} + diff --git a/lib/lua/src/lstate.h b/lib/lua/src/lstate.h new file mode 100644 index 0000000..d296a4c --- /dev/null +++ b/lib/lua/src/lstate.h @@ -0,0 +1,168 @@ +/* +** $Id: lstate.h,v 2.24 2006/02/06 18:27:59 roberto Exp $ +** Global State +** See Copyright Notice in lua.h +*/ + +#ifndef lstate_h +#define lstate_h + +#include "lua.h" + +#include "lobject.h" +#include "ltm.h" +#include "lzio.h" + + + +struct lua_longjmp; /* defined in ldo.c */ + + +/* table of globals */ +#define gt(L) (&L->l_gt) + +/* registry */ +#define registry(L) (&G(L)->l_registry) + + +/* extra stack space to handle TM calls and some other extras */ +#define EXTRA_STACK 5 + + +#define BASIC_CI_SIZE 8 + +#define BASIC_STACK_SIZE (2*LUA_MINSTACK) + + + +typedef struct stringtable { + GCObject **hash; + lu_int32 nuse; /* number of elements */ + int size; +} stringtable; + + +/* +** informations about a call +*/ +typedef struct CallInfo { + StkId base; /* base for this function */ + StkId func; /* function index in the stack */ + StkId top; /* top for this function */ + const Instruction *savedpc; + int nresults; /* expected number of results from this function */ + int tailcalls; /* number of tail calls lost under this entry */ +} CallInfo; + + + +#define curr_func(L) (clvalue(L->ci->func)) +#define ci_func(ci) (clvalue((ci)->func)) +#define f_isLua(ci) (!ci_func(ci)->c.isC) +#define isLua(ci) (ttisfunction((ci)->func) && f_isLua(ci)) + + +/* +** `global state', shared by all threads of this state +*/ +typedef struct global_State { + stringtable strt; /* hash table for strings */ + lua_Alloc frealloc; /* function to reallocate memory */ + void *ud; /* auxiliary data to `frealloc' */ + lu_byte currentwhite; + lu_byte gcstate; /* state of garbage collector */ + int sweepstrgc; /* position of sweep in `strt' */ + GCObject *rootgc; /* list of all collectable objects */ + GCObject **sweepgc; /* position of sweep in `rootgc' */ + GCObject *gray; /* list of gray objects */ + GCObject *grayagain; /* list of objects to be traversed atomically */ + GCObject *weak; /* list of weak tables (to be cleared) */ + GCObject *tmudata; /* last element of list of userdata to be GC */ + Mbuffer buff; /* temporary buffer for string concatentation */ + lu_mem GCthreshold; + lu_mem totalbytes; /* number of bytes currently allocated */ + lu_mem estimate; /* an estimate of number of bytes actually in use */ + lu_mem gcdept; /* how much GC is `behind schedule' */ + int gcpause; /* size of pause between successive GCs */ + int gcstepmul; /* GC `granularity' */ + lua_CFunction panic; /* to be called in unprotected errors */ + TValue l_registry; + struct lua_State *mainthread; + UpVal uvhead; /* head of double-linked list of all open upvalues */ + struct Table *mt[NUM_TAGS]; /* metatables for basic types */ + TString *tmname[TM_N]; /* array with tag-method names */ +} global_State; + + +/* +** `per thread' state +*/ +struct lua_State { + CommonHeader; + lu_byte status; + StkId top; /* first free slot in the stack */ + StkId base; /* base of current function */ + global_State *l_G; + CallInfo *ci; /* call info for current function */ + const Instruction *savedpc; /* `savedpc' of current function */ + StkId stack_last; /* last free slot in the stack */ + StkId stack; /* stack base */ + CallInfo *end_ci; /* points after end of ci array*/ + CallInfo *base_ci; /* array of CallInfo's */ + int stacksize; + int size_ci; /* size of array `base_ci' */ + unsigned short nCcalls; /* number of nested C calls */ + lu_byte hookmask; + lu_byte allowhook; + int basehookcount; + int hookcount; + lua_Hook hook; + TValue l_gt; /* table of globals */ + TValue env; /* temporary place for environments */ + GCObject *openupval; /* list of open upvalues in this stack */ + GCObject *gclist; + struct lua_longjmp *errorJmp; /* current error recover point */ + ptrdiff_t errfunc; /* current error handling function (stack index) */ +}; + + +#define G(L) (L->l_G) + + +/* +** Union of all collectable objects +*/ +union GCObject { + GCheader gch; + union TString ts; + union Udata u; + union Closure cl; + struct Table h; + struct Proto p; + struct UpVal uv; + struct lua_State th; /* thread */ +}; + + +/* macros to convert a GCObject into a specific value */ +#define rawgco2ts(o) check_exp((o)->gch.tt == LUA_TSTRING, &((o)->ts)) +#define gco2ts(o) (&rawgco2ts(o)->tsv) +#define rawgco2u(o) check_exp((o)->gch.tt == LUA_TUSERDATA, &((o)->u)) +#define gco2u(o) (&rawgco2u(o)->uv) +#define gco2cl(o) check_exp((o)->gch.tt == LUA_TFUNCTION, &((o)->cl)) +#define gco2h(o) check_exp((o)->gch.tt == LUA_TTABLE, &((o)->h)) +#define gco2p(o) check_exp((o)->gch.tt == LUA_TPROTO, &((o)->p)) +#define gco2uv(o) check_exp((o)->gch.tt == LUA_TUPVAL, &((o)->uv)) +#define ngcotouv(o) \ + check_exp((o) == NULL || (o)->gch.tt == LUA_TUPVAL, &((o)->uv)) +#define gco2th(o) check_exp((o)->gch.tt == LUA_TTHREAD, &((o)->th)) + +/* macro to convert any Lua object into a GCObject */ +#define obj2gco(v) (cast(GCObject *, (v))) + + +LUAI_FUNC lua_State *luaE_newthread (lua_State *L); +LUAI_FUNC void luaE_freethread (lua_State *L, lua_State *L1); + +#endif + diff --git a/lib/lua/src/lstring.c b/lib/lua/src/lstring.c new file mode 100644 index 0000000..4319930 --- /dev/null +++ b/lib/lua/src/lstring.c @@ -0,0 +1,111 @@ +/* +** $Id: lstring.c,v 2.8 2005/12/22 16:19:56 roberto Exp $ +** String table (keeps all strings handled by Lua) +** See Copyright Notice in lua.h +*/ + + +#include + +#define lstring_c +#define LUA_CORE + +#include "lua.h" + +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" + + + +void luaS_resize (lua_State *L, int newsize) { + GCObject **newhash; + stringtable *tb; + int i; + if (G(L)->gcstate == GCSsweepstring) + return; /* cannot resize during GC traverse */ + newhash = luaM_newvector(L, newsize, GCObject *); + tb = &G(L)->strt; + for (i=0; isize; i++) { + GCObject *p = tb->hash[i]; + while (p) { /* for each node in the list */ + GCObject *next = p->gch.next; /* save next */ + unsigned int h = gco2ts(p)->hash; + int h1 = lmod(h, newsize); /* new position */ + lua_assert(cast_int(h%newsize) == lmod(h, newsize)); + p->gch.next = newhash[h1]; /* chain it */ + newhash[h1] = p; + p = next; + } + } + luaM_freearray(L, tb->hash, tb->size, TString *); + tb->size = newsize; + tb->hash = newhash; +} + + +static TString *newlstr (lua_State *L, const char *str, size_t l, + unsigned int h) { + TString *ts; + stringtable *tb; + if (l+1 > (MAX_SIZET - sizeof(TString))/sizeof(char)) + luaM_toobig(L); + ts = cast(TString *, luaM_malloc(L, (l+1)*sizeof(char)+sizeof(TString))); + ts->tsv.len = l; + ts->tsv.hash = h; + ts->tsv.marked = luaC_white(G(L)); + ts->tsv.tt = LUA_TSTRING; + ts->tsv.reserved = 0; + memcpy(ts+1, str, l*sizeof(char)); + ((char *)(ts+1))[l] = '\0'; /* ending 0 */ + tb = &G(L)->strt; + h = lmod(h, tb->size); + ts->tsv.next = tb->hash[h]; /* chain new entry */ + tb->hash[h] = obj2gco(ts); + tb->nuse++; + if (tb->nuse > cast(lu_int32, tb->size) && tb->size <= MAX_INT/2) + luaS_resize(L, tb->size*2); /* too crowded */ + return ts; +} + + +TString *luaS_newlstr (lua_State *L, const char *str, size_t l) { + GCObject *o; + unsigned int h = cast(unsigned int, l); /* seed */ + size_t step = (l>>5)+1; /* if string is too long, don't hash all its chars */ + size_t l1; + for (l1=l; l1>=step; l1-=step) /* compute hash */ + h = h ^ ((h<<5)+(h>>2)+cast(unsigned char, str[l1-1])); + for (o = G(L)->strt.hash[lmod(h, G(L)->strt.size)]; + o != NULL; + o = o->gch.next) { + TString *ts = rawgco2ts(o); + if (ts->tsv.len == l && (memcmp(str, getstr(ts), l) == 0)) { + /* string may be dead */ + if (isdead(G(L), o)) changewhite(o); + return ts; + } + } + return newlstr(L, str, l, h); /* not found */ +} + + +Udata *luaS_newudata (lua_State *L, size_t s, Table *e) { + Udata *u; + if (s > MAX_SIZET - sizeof(Udata)) + luaM_toobig(L); + u = cast(Udata *, luaM_malloc(L, s + sizeof(Udata))); + u->uv.marked = luaC_white(G(L)); /* is not finalized */ + u->uv.tt = LUA_TUSERDATA; + u->uv.len = s; + u->uv.metatable = NULL; + u->uv.env = e; + /* chain it on udata list (after main thread) */ + u->uv.next = G(L)->mainthread->next; + G(L)->mainthread->next = obj2gco(u); + return u; +} + diff --git a/lib/lua/src/lstring.h b/lib/lua/src/lstring.h new file mode 100644 index 0000000..1d2e91e --- /dev/null +++ b/lib/lua/src/lstring.h @@ -0,0 +1,31 @@ +/* +** $Id: lstring.h,v 1.43 2005/04/25 19:24:10 roberto Exp $ +** String table (keep all strings handled by Lua) +** See Copyright Notice in lua.h +*/ + +#ifndef lstring_h +#define lstring_h + + +#include "lgc.h" +#include "lobject.h" +#include "lstate.h" + + +#define sizestring(s) (sizeof(union TString)+((s)->len+1)*sizeof(char)) + +#define sizeudata(u) (sizeof(union Udata)+(u)->len) + +#define luaS_new(L, s) (luaS_newlstr(L, s, strlen(s))) +#define luaS_newliteral(L, s) (luaS_newlstr(L, "" s, \ + (sizeof(s)/sizeof(char))-1)) + +#define luaS_fix(s) l_setbit((s)->tsv.marked, FIXEDBIT) + +LUAI_FUNC void luaS_resize (lua_State *L, int newsize); +LUAI_FUNC Udata *luaS_newudata (lua_State *L, size_t s, Table *e); +LUAI_FUNC TString *luaS_newlstr (lua_State *L, const char *str, size_t l); + + +#endif diff --git a/lib/lua/src/lstrlib.c b/lib/lua/src/lstrlib.c new file mode 100644 index 0000000..4b50c47 --- /dev/null +++ b/lib/lua/src/lstrlib.c @@ -0,0 +1,869 @@ +/* +** $Id: lstrlib.c,v 1.132a 2006/04/26 20:41:19 roberto Exp $ +** Standard library for string operations and pattern-matching +** See Copyright Notice in lua.h +*/ + +#include +#include +#include +#include +#include +#include + +#define lstrlib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +/* macro to `unsign' a character */ +#define uchar(c) ((unsigned char)(c)) + + + +static int str_len (lua_State *L) { + size_t l; + luaL_checklstring(L, 1, &l); + lua_pushinteger(L, l); + return 1; +} + + +static ptrdiff_t posrelat (ptrdiff_t pos, size_t len) { + /* relative string position: negative means back from end */ + return (pos>=0) ? pos : (ptrdiff_t)len+pos+1; +} + + +static int str_sub (lua_State *L) { + size_t l; + const char *s = luaL_checklstring(L, 1, &l); + ptrdiff_t start = posrelat(luaL_checkinteger(L, 2), l); + ptrdiff_t end = posrelat(luaL_optinteger(L, 3, -1), l); + if (start < 1) start = 1; + if (end > (ptrdiff_t)l) end = (ptrdiff_t)l; + if (start <= end) + lua_pushlstring(L, s+start-1, end-start+1); + else lua_pushliteral(L, ""); + return 1; +} + + +static int str_reverse (lua_State *L) { + size_t l; + luaL_Buffer b; + const char *s = luaL_checklstring(L, 1, &l); + luaL_buffinit(L, &b); + while (l--) luaL_addchar(&b, s[l]); + luaL_pushresult(&b); + return 1; +} + + +static int str_lower (lua_State *L) { + size_t l; + size_t i; + luaL_Buffer b; + const char *s = luaL_checklstring(L, 1, &l); + luaL_buffinit(L, &b); + for (i=0; i 0) + luaL_addlstring(&b, s, l); + luaL_pushresult(&b); + return 1; +} + + +static int str_byte (lua_State *L) { + size_t l; + const char *s = luaL_checklstring(L, 1, &l); + ptrdiff_t posi = posrelat(luaL_optinteger(L, 2, 1), l); + ptrdiff_t pose = posrelat(luaL_optinteger(L, 3, posi), l); + int n, i; + if (posi <= 0) posi = 1; + if ((size_t)pose > l) pose = l; + if (posi > pose) return 0; /* empty interval; return no values */ + n = (int)(pose - posi + 1); + if (posi + n <= pose) /* overflow? */ + luaL_error(L, "string slice too long"); + luaL_checkstack(L, n, "string slice too long"); + for (i=0; i= ms->level || ms->capture[l].len == CAP_UNFINISHED) + return luaL_error(ms->L, "invalid capture index"); + return l; +} + + +static int capture_to_close (MatchState *ms) { + int level = ms->level; + for (level--; level>=0; level--) + if (ms->capture[level].len == CAP_UNFINISHED) return level; + return luaL_error(ms->L, "invalid pattern capture"); +} + + +static const char *classend (MatchState *ms, const char *p) { + switch (*p++) { + case L_ESC: { + if (*p == '\0') + luaL_error(ms->L, "malformed pattern (ends with " LUA_QL("%%") ")"); + return p+1; + } + case '[': { + if (*p == '^') p++; + do { /* look for a `]' */ + if (*p == '\0') + luaL_error(ms->L, "malformed pattern (missing " LUA_QL("]") ")"); + if (*(p++) == L_ESC && *p != '\0') + p++; /* skip escapes (e.g. `%]') */ + } while (*p != ']'); + return p+1; + } + default: { + return p; + } + } +} + + +static int match_class (int c, int cl) { + int res; + switch (tolower(cl)) { + case 'a' : res = isalpha(c); break; + case 'c' : res = iscntrl(c); break; + case 'd' : res = isdigit(c); break; + case 'l' : res = islower(c); break; + case 'p' : res = ispunct(c); break; + case 's' : res = isspace(c); break; + case 'u' : res = isupper(c); break; + case 'w' : res = isalnum(c); break; + case 'x' : res = isxdigit(c); break; + case 'z' : res = (c == 0); break; + default: return (cl == c); + } + return (islower(cl) ? res : !res); +} + + +static int matchbracketclass (int c, const char *p, const char *ec) { + int sig = 1; + if (*(p+1) == '^') { + sig = 0; + p++; /* skip the `^' */ + } + while (++p < ec) { + if (*p == L_ESC) { + p++; + if (match_class(c, uchar(*p))) + return sig; + } + else if ((*(p+1) == '-') && (p+2 < ec)) { + p+=2; + if (uchar(*(p-2)) <= c && c <= uchar(*p)) + return sig; + } + else if (uchar(*p) == c) return sig; + } + return !sig; +} + + +static int singlematch (int c, const char *p, const char *ep) { + switch (*p) { + case '.': return 1; /* matches any char */ + case L_ESC: return match_class(c, uchar(*(p+1))); + case '[': return matchbracketclass(c, p, ep-1); + default: return (uchar(*p) == c); + } +} + + +static const char *match (MatchState *ms, const char *s, const char *p); + + +static const char *matchbalance (MatchState *ms, const char *s, + const char *p) { + if (*p == 0 || *(p+1) == 0) + luaL_error(ms->L, "unbalanced pattern"); + if (*s != *p) return NULL; + else { + int b = *p; + int e = *(p+1); + int cont = 1; + while (++s < ms->src_end) { + if (*s == e) { + if (--cont == 0) return s+1; + } + else if (*s == b) cont++; + } + } + return NULL; /* string ends out of balance */ +} + + +static const char *max_expand (MatchState *ms, const char *s, + const char *p, const char *ep) { + ptrdiff_t i = 0; /* counts maximum expand for item */ + while ((s+i)src_end && singlematch(uchar(*(s+i)), p, ep)) + i++; + /* keeps trying to match with the maximum repetitions */ + while (i>=0) { + const char *res = match(ms, (s+i), ep+1); + if (res) return res; + i--; /* else didn't match; reduce 1 repetition to try again */ + } + return NULL; +} + + +static const char *min_expand (MatchState *ms, const char *s, + const char *p, const char *ep) { + for (;;) { + const char *res = match(ms, s, ep+1); + if (res != NULL) + return res; + else if (ssrc_end && singlematch(uchar(*s), p, ep)) + s++; /* try with one more repetition */ + else return NULL; + } +} + + +static const char *start_capture (MatchState *ms, const char *s, + const char *p, int what) { + const char *res; + int level = ms->level; + if (level >= LUA_MAXCAPTURES) luaL_error(ms->L, "too many captures"); + ms->capture[level].init = s; + ms->capture[level].len = what; + ms->level = level+1; + if ((res=match(ms, s, p)) == NULL) /* match failed? */ + ms->level--; /* undo capture */ + return res; +} + + +static const char *end_capture (MatchState *ms, const char *s, + const char *p) { + int l = capture_to_close(ms); + const char *res; + ms->capture[l].len = s - ms->capture[l].init; /* close capture */ + if ((res = match(ms, s, p)) == NULL) /* match failed? */ + ms->capture[l].len = CAP_UNFINISHED; /* undo capture */ + return res; +} + + +static const char *match_capture (MatchState *ms, const char *s, int l) { + size_t len; + l = check_capture(ms, l); + len = ms->capture[l].len; + if ((size_t)(ms->src_end-s) >= len && + memcmp(ms->capture[l].init, s, len) == 0) + return s+len; + else return NULL; +} + + +static const char *match (MatchState *ms, const char *s, const char *p) { + init: /* using goto's to optimize tail recursion */ + switch (*p) { + case '(': { /* start capture */ + if (*(p+1) == ')') /* position capture? */ + return start_capture(ms, s, p+2, CAP_POSITION); + else + return start_capture(ms, s, p+1, CAP_UNFINISHED); + } + case ')': { /* end capture */ + return end_capture(ms, s, p+1); + } + case L_ESC: { + switch (*(p+1)) { + case 'b': { /* balanced string? */ + s = matchbalance(ms, s, p+2); + if (s == NULL) return NULL; + p+=4; goto init; /* else return match(ms, s, p+4); */ + } + case 'f': { /* frontier? */ + const char *ep; char previous; + p += 2; + if (*p != '[') + luaL_error(ms->L, "missing " LUA_QL("[") " after " + LUA_QL("%%f") " in pattern"); + ep = classend(ms, p); /* points to what is next */ + previous = (s == ms->src_init) ? '\0' : *(s-1); + if (matchbracketclass(uchar(previous), p, ep-1) || + !matchbracketclass(uchar(*s), p, ep-1)) return NULL; + p=ep; goto init; /* else return match(ms, s, ep); */ + } + default: { + if (isdigit(uchar(*(p+1)))) { /* capture results (%0-%9)? */ + s = match_capture(ms, s, uchar(*(p+1))); + if (s == NULL) return NULL; + p+=2; goto init; /* else return match(ms, s, p+2) */ + } + goto dflt; /* case default */ + } + } + } + case '\0': { /* end of pattern */ + return s; /* match succeeded */ + } + case '$': { + if (*(p+1) == '\0') /* is the `$' the last char in pattern? */ + return (s == ms->src_end) ? s : NULL; /* check end of string */ + else goto dflt; + } + default: dflt: { /* it is a pattern item */ + const char *ep = classend(ms, p); /* points to what is next */ + int m = ssrc_end && singlematch(uchar(*s), p, ep); + switch (*ep) { + case '?': { /* optional */ + const char *res; + if (m && ((res=match(ms, s+1, ep+1)) != NULL)) + return res; + p=ep+1; goto init; /* else return match(ms, s, ep+1); */ + } + case '*': { /* 0 or more repetitions */ + return max_expand(ms, s, p, ep); + } + case '+': { /* 1 or more repetitions */ + return (m ? max_expand(ms, s+1, p, ep) : NULL); + } + case '-': { /* 0 or more repetitions (minimum) */ + return min_expand(ms, s, p, ep); + } + default: { + if (!m) return NULL; + s++; p=ep; goto init; /* else return match(ms, s+1, ep); */ + } + } + } + } +} + + + +static const char *lmemfind (const char *s1, size_t l1, + const char *s2, size_t l2) { + if (l2 == 0) return s1; /* empty strings are everywhere */ + else if (l2 > l1) return NULL; /* avoids a negative `l1' */ + else { + const char *init; /* to search for a `*s2' inside `s1' */ + l2--; /* 1st char will be checked by `memchr' */ + l1 = l1-l2; /* `s2' cannot be found after that */ + while (l1 > 0 && (init = (const char *)memchr(s1, *s2, l1)) != NULL) { + init++; /* 1st char is already checked */ + if (memcmp(init, s2+1, l2) == 0) + return init-1; + else { /* correct `l1' and `s1' to try again */ + l1 -= init-s1; + s1 = init; + } + } + return NULL; /* not found */ + } +} + + +static void push_onecapture (MatchState *ms, int i, const char *s, + const char *e) { + if (i >= ms->level) { + if (i == 0) /* ms->level == 0, too */ + lua_pushlstring(ms->L, s, e - s); /* add whole match */ + else + luaL_error(ms->L, "invalid capture index"); + } + else { + ptrdiff_t l = ms->capture[i].len; + if (l == CAP_UNFINISHED) luaL_error(ms->L, "unfinished capture"); + if (l == CAP_POSITION) + lua_pushinteger(ms->L, ms->capture[i].init - ms->src_init + 1); + else + lua_pushlstring(ms->L, ms->capture[i].init, l); + } +} + + +static int push_captures (MatchState *ms, const char *s, const char *e) { + int i; + int nlevels = (ms->level == 0 && s) ? 1 : ms->level; + luaL_checkstack(ms->L, nlevels, "too many captures"); + for (i = 0; i < nlevels; i++) + push_onecapture(ms, i, s, e); + return nlevels; /* number of strings pushed */ +} + + +static int str_find_aux (lua_State *L, int find) { + size_t l1, l2; + const char *s = luaL_checklstring(L, 1, &l1); + const char *p = luaL_checklstring(L, 2, &l2); + ptrdiff_t init = posrelat(luaL_optinteger(L, 3, 1), l1) - 1; + if (init < 0) init = 0; + else if ((size_t)(init) > l1) init = (ptrdiff_t)l1; + if (find && (lua_toboolean(L, 4) || /* explicit request? */ + strpbrk(p, SPECIALS) == NULL)) { /* or no special characters? */ + /* do a plain search */ + const char *s2 = lmemfind(s+init, l1-init, p, l2); + if (s2) { + lua_pushinteger(L, s2-s+1); + lua_pushinteger(L, s2-s+l2); + return 2; + } + } + else { + MatchState ms; + int anchor = (*p == '^') ? (p++, 1) : 0; + const char *s1=s+init; + ms.L = L; + ms.src_init = s; + ms.src_end = s+l1; + do { + const char *res; + ms.level = 0; + if ((res=match(&ms, s1, p)) != NULL) { + if (find) { + lua_pushinteger(L, s1-s+1); /* start */ + lua_pushinteger(L, res-s); /* end */ + return push_captures(&ms, NULL, 0) + 2; + } + else + return push_captures(&ms, s1, res); + } + } while (s1++ < ms.src_end && !anchor); + } + lua_pushnil(L); /* not found */ + return 1; +} + + +static int str_find (lua_State *L) { + return str_find_aux(L, 1); +} + + +static int str_match (lua_State *L) { + return str_find_aux(L, 0); +} + + +static int gmatch_aux (lua_State *L) { + MatchState ms; + size_t ls; + const char *s = lua_tolstring(L, lua_upvalueindex(1), &ls); + const char *p = lua_tostring(L, lua_upvalueindex(2)); + const char *src; + ms.L = L; + ms.src_init = s; + ms.src_end = s+ls; + for (src = s + (size_t)lua_tointeger(L, lua_upvalueindex(3)); + src <= ms.src_end; + src++) { + const char *e; + ms.level = 0; + if ((e = match(&ms, src, p)) != NULL) { + lua_Integer newstart = e-s; + if (e == src) newstart++; /* empty match? go at least one position */ + lua_pushinteger(L, newstart); + lua_replace(L, lua_upvalueindex(3)); + return push_captures(&ms, src, e); + } + } + return 0; /* not found */ +} + + +static int gmatch (lua_State *L) { + luaL_checkstring(L, 1); + luaL_checkstring(L, 2); + lua_settop(L, 2); + lua_pushinteger(L, 0); + lua_pushcclosure(L, gmatch_aux, 3); + return 1; +} + + +static int gfind_nodef (lua_State *L) { + return luaL_error(L, LUA_QL("string.gfind") " was renamed to " + LUA_QL("string.gmatch")); +} + + +static void add_s (MatchState *ms, luaL_Buffer *b, const char *s, + const char *e) { + size_t l, i; + const char *news = lua_tolstring(ms->L, 3, &l); + for (i = 0; i < l; i++) { + if (news[i] != L_ESC) + luaL_addchar(b, news[i]); + else { + i++; /* skip ESC */ + if (!isdigit(uchar(news[i]))) + luaL_addchar(b, news[i]); + else if (news[i] == '0') + luaL_addlstring(b, s, e - s); + else { + push_onecapture(ms, news[i] - '1', s, e); + luaL_addvalue(b); /* add capture to accumulated result */ + } + } + } +} + + +static void add_value (MatchState *ms, luaL_Buffer *b, const char *s, + const char *e) { + lua_State *L = ms->L; + switch (lua_type(L, 3)) { + case LUA_TNUMBER: + case LUA_TSTRING: { + add_s(ms, b, s, e); + return; + } + case LUA_TFUNCTION: { + int n; + lua_pushvalue(L, 3); + n = push_captures(ms, s, e); + lua_call(L, n, 1); + break; + } + case LUA_TTABLE: { + push_onecapture(ms, 0, s, e); + lua_gettable(L, 3); + break; + } + default: { + luaL_argerror(L, 3, "string/function/table expected"); + return; + } + } + if (!lua_toboolean(L, -1)) { /* nil or false? */ + lua_pop(L, 1); + lua_pushlstring(L, s, e - s); /* keep original text */ + } + else if (!lua_isstring(L, -1)) + luaL_error(L, "invalid replacement value (a %s)", luaL_typename(L, -1)); + luaL_addvalue(b); /* add result to accumulator */ +} + + +static int str_gsub (lua_State *L) { + size_t srcl; + const char *src = luaL_checklstring(L, 1, &srcl); + const char *p = luaL_checkstring(L, 2); + int max_s = luaL_optint(L, 4, srcl+1); + int anchor = (*p == '^') ? (p++, 1) : 0; + int n = 0; + MatchState ms; + luaL_Buffer b; + luaL_buffinit(L, &b); + ms.L = L; + ms.src_init = src; + ms.src_end = src+srcl; + while (n < max_s) { + const char *e; + ms.level = 0; + e = match(&ms, src, p); + if (e) { + n++; + add_value(&ms, &b, src, e); + } + if (e && e>src) /* non empty match? */ + src = e; /* skip it */ + else if (src < ms.src_end) + luaL_addchar(&b, *src++); + else break; + if (anchor) break; + } + luaL_addlstring(&b, src, ms.src_end-src); + luaL_pushresult(&b); + lua_pushinteger(L, n); /* number of substitutions */ + return 2; +} + +/* }====================================================== */ + + +/* maximum size of each formatted item (> len(format('%99.99f', -1e308))) */ +#define MAX_ITEM 512 +/* valid flags in a format specification */ +#define FLAGS "-+ #0" +/* +** maximum size of each format specification (such as '%-099.99d') +** (+10 accounts for %99.99x plus margin of error) +*/ +#define MAX_FORMAT (sizeof(FLAGS) + sizeof(LUA_INTFRMLEN) + 10) + + +static void addquoted (lua_State *L, luaL_Buffer *b, int arg) { + size_t l; + const char *s = luaL_checklstring(L, arg, &l); + luaL_addchar(b, '"'); + while (l--) { + switch (*s) { + case '"': case '\\': case '\n': { + luaL_addchar(b, '\\'); + luaL_addchar(b, *s); + break; + } + case '\r': { + luaL_addlstring(b, "\\r", 2); + break; + } + case '\0': { + luaL_addlstring(b, "\\000", 4); + break; + } + default: { + luaL_addchar(b, *s); + break; + } + } + s++; + } + luaL_addchar(b, '"'); +} + +static const char *scanformat (lua_State *L, const char *strfrmt, char *form) { + const char *p = strfrmt; + while (*p != '\0' && strchr(FLAGS, *p) != NULL) p++; /* skip flags */ + if ((size_t)(p - strfrmt) >= sizeof(FLAGS)) + luaL_error(L, "invalid format (repeated flags)"); + if (isdigit(uchar(*p))) p++; /* skip width */ + if (isdigit(uchar(*p))) p++; /* (2 digits at most) */ + if (*p == '.') { + p++; + if (isdigit(uchar(*p))) p++; /* skip precision */ + if (isdigit(uchar(*p))) p++; /* (2 digits at most) */ + } + if (isdigit(uchar(*p))) + luaL_error(L, "invalid format (width or precision too long)"); + *(form++) = '%'; + strncpy(form, strfrmt, p - strfrmt + 1); + form += p - strfrmt + 1; + *form = '\0'; + return p; +} + + +static void addintlen (char *form) { + size_t l = strlen(form); + char spec[3] = { 'l', form[l - 1], '\0' }; + form[l - 1] = '\0'; + strlcat(form, spec, MAX_FORMAT); +} + + +static int str_format (lua_State *L) { + int arg = 1; + size_t sfl; + const char *strfrmt = luaL_checklstring(L, arg, &sfl); + const char *strfrmt_end = strfrmt+sfl; + luaL_Buffer b; + luaL_buffinit(L, &b); + while (strfrmt < strfrmt_end) { + if (*strfrmt != L_ESC) + luaL_addchar(&b, *strfrmt++); + else if (*++strfrmt == L_ESC) + luaL_addchar(&b, *strfrmt++); /* %% */ + else { /* format item */ + char form[MAX_FORMAT]; /* to store the format (`%...') */ + char buff[MAX_ITEM]; /* to store the formatted item */ + arg++; + strfrmt = scanformat(L, strfrmt, form); + switch (*strfrmt++) { + case 'c': { + snprintf(buff, sizeof(buff), form, (int)luaL_checknumber(L, arg)); + break; + } + case 'd': case 'i': { + addintlen(form); + snprintf(buff, sizeof(buff), form, + (LUA_INTFRM_T)luaL_checknumber(L, arg)); + break; + } + case 'o': case 'u': case 'x': case 'X': { + addintlen(form); + snprintf(buff, sizeof(buff), form, + (unsigned LUA_INTFRM_T)luaL_checknumber(L, arg)); + break; + } + case 'e': case 'E': case 'f': + case 'g': case 'G': { + snprintf(buff, sizeof(buff), form, (double)luaL_checknumber(L, arg)); + break; + } + case 'q': { + addquoted(L, &b, arg); + continue; /* skip the 'addsize' at the end */ + } + case 's': { + size_t l; + const char *s = luaL_checklstring(L, arg, &l); + if (!strchr(form, '.') && l >= 100) { + /* no precision and string is too long to be formatted; + keep original string */ + lua_pushvalue(L, arg); + luaL_addvalue(&b); + continue; /* skip the `addsize' at the end */ + } + else { + snprintf(buff, sizeof(buff), form, s); + break; + } + } + default: { /* also treat cases `pnLlh' */ + return luaL_error(L, "invalid option " LUA_QL("%%%c") " to " + LUA_QL("format"), *(strfrmt - 1)); + } + } + luaL_addlstring(&b, buff, strlen(buff)); + } + } + luaL_pushresult(&b); + return 1; +} + + +static const luaL_Reg strlib[] = { + {"byte", str_byte}, + {"char", str_char}, + {"dump", str_dump}, + {"find", str_find}, + {"format", str_format}, + {"gfind", gfind_nodef}, + {"gmatch", gmatch}, + {"gsub", str_gsub}, + {"len", str_len}, + {"lower", str_lower}, + {"match", str_match}, + {"rep", str_rep}, + {"reverse", str_reverse}, + {"sub", str_sub}, + {"upper", str_upper}, + {NULL, NULL} +}; + + +static void createmetatable (lua_State *L) { + lua_createtable(L, 0, 1); /* create metatable for strings */ + lua_pushliteral(L, ""); /* dummy string */ + lua_pushvalue(L, -2); + lua_setmetatable(L, -2); /* set string metatable */ + lua_pop(L, 1); /* pop dummy string */ + lua_pushvalue(L, -2); /* string library... */ + lua_setfield(L, -2, "__index"); /* ...is the __index metamethod */ + lua_pop(L, 1); /* pop metatable */ +} + + +/* +** Open string library +*/ +LUALIB_API int luaopen_string (lua_State *L) { + luaL_register(L, LUA_STRLIBNAME, strlib); +#if defined(LUA_COMPAT_GFIND) + lua_getfield(L, -1, "gmatch"); + lua_setfield(L, -2, "gfind"); +#endif + createmetatable(L); + return 1; +} + diff --git a/lib/lua/src/ltable.c b/lib/lua/src/ltable.c new file mode 100644 index 0000000..bc91cac --- /dev/null +++ b/lib/lua/src/ltable.c @@ -0,0 +1,588 @@ +/* +** $Id: ltable.c,v 2.32 2006/01/18 11:49:02 roberto Exp $ +** Lua tables (hash) +** See Copyright Notice in lua.h +*/ + + +/* +** Implementation of tables (aka arrays, objects, or hash tables). +** Tables keep its elements in two parts: an array part and a hash part. +** Non-negative integer keys are all candidates to be kept in the array +** part. The actual size of the array is the largest `n' such that at +** least half the slots between 0 and n are in use. +** Hash uses a mix of chained scatter table with Brent's variation. +** A main invariant of these tables is that, if an element is not +** in its main position (i.e. the `original' position that its hash gives +** to it), then the colliding element is in its own main position. +** Hence even when the load factor reaches 100%, performance remains good. +*/ + +#include +#include + +#define ltable_c +#define LUA_CORE + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lgc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstate.h" +#include "ltable.h" + + +/* +** max size of array part is 2^MAXBITS +*/ +#if LUAI_BITSINT > 26 +#define MAXBITS 26 +#else +#define MAXBITS (LUAI_BITSINT-2) +#endif + +#define MAXASIZE (1 << MAXBITS) + + +#define hashpow2(t,n) (gnode(t, lmod((n), sizenode(t)))) + +#define hashstr(t,str) hashpow2(t, (str)->tsv.hash) +#define hashboolean(t,p) hashpow2(t, p) + + +/* +** for some types, it is better to avoid modulus by power of 2, as +** they tend to have many 2 factors. +*/ +#define hashmod(t,n) (gnode(t, ((n) % ((sizenode(t)-1)|1)))) + + +#define hashpointer(t,p) hashmod(t, IntPoint(p)) + + +/* +** number of ints inside a lua_Number +*/ +#define numints cast_int(sizeof(lua_Number)/sizeof(int)) + + + +#define dummynode (&dummynode_) + +static const Node dummynode_ = { + {{NULL}, LUA_TNIL}, /* value */ + {{{NULL}, LUA_TNIL, NULL}} /* key */ +}; + + +/* +** hash for lua_Numbers +*/ +static Node *hashnum (const Table *t, lua_Number n) { + unsigned int a[numints]; + int i; + n += 1; /* normalize number (avoid -0) */ + lua_assert(sizeof(a) <= sizeof(n)); + memcpy(a, &n, sizeof(a)); + for (i = 1; i < numints; i++) a[0] += a[i]; + return hashmod(t, a[0]); +} + + + +/* +** returns the `main' position of an element in a table (that is, the index +** of its hash value) +*/ +static Node *mainposition (const Table *t, const TValue *key) { + switch (ttype(key)) { + case LUA_TNUMBER: + return hashnum(t, nvalue(key)); + case LUA_TSTRING: + return hashstr(t, rawtsvalue(key)); + case LUA_TBOOLEAN: + return hashboolean(t, bvalue(key)); + case LUA_TLIGHTUSERDATA: + return hashpointer(t, pvalue(key)); + default: + return hashpointer(t, gcvalue(key)); + } +} + + +/* +** returns the index for `key' if `key' is an appropriate key to live in +** the array part of the table, -1 otherwise. +*/ +static int arrayindex (const TValue *key) { + if (ttisnumber(key)) { + lua_Number n = nvalue(key); + int k; + lua_number2int(k, n); + if (luai_numeq(cast_num(k), n)) + return k; + } + return -1; /* `key' did not match some condition */ +} + + +/* +** returns the index of a `key' for table traversals. First goes all +** elements in the array part, then elements in the hash part. The +** beginning of a traversal is signalled by -1. +*/ +static int findindex (lua_State *L, Table *t, StkId key) { + int i; + if (ttisnil(key)) return -1; /* first iteration */ + i = arrayindex(key); + if (0 < i && i <= t->sizearray) /* is `key' inside array part? */ + return i-1; /* yes; that's the index (corrected to C) */ + else { + Node *n = mainposition(t, key); + do { /* check whether `key' is somewhere in the chain */ + /* key may be dead already, but it is ok to use it in `next' */ + if (luaO_rawequalObj(key2tval(n), key) || + (ttype(gkey(n)) == LUA_TDEADKEY && iscollectable(key) && + gcvalue(gkey(n)) == gcvalue(key))) { + i = cast_int(n - gnode(t, 0)); /* key index in hash table */ + /* hash elements are numbered after array ones */ + return i + t->sizearray; + } + else n = gnext(n); + } while (n); + luaG_runerror(L, "invalid key to " LUA_QL("next")); /* key not found */ + return 0; /* to avoid warnings */ + } +} + + +int luaH_next (lua_State *L, Table *t, StkId key) { + int i = findindex(L, t, key); /* find original element */ + for (i++; i < t->sizearray; i++) { /* try first array part */ + if (!ttisnil(&t->array[i])) { /* a non-nil value? */ + setnvalue(key, cast_num(i+1)); + setobj2s(L, key+1, &t->array[i]); + return 1; + } + } + for (i -= t->sizearray; i < sizenode(t); i++) { /* then hash part */ + if (!ttisnil(gval(gnode(t, i)))) { /* a non-nil value? */ + setobj2s(L, key, key2tval(gnode(t, i))); + setobj2s(L, key+1, gval(gnode(t, i))); + return 1; + } + } + return 0; /* no more elements */ +} + + +/* +** {============================================================= +** Rehash +** ============================================================== +*/ + + +static int computesizes (int nums[], int *narray) { + int i; + int twotoi; /* 2^i */ + int a = 0; /* number of elements smaller than 2^i */ + int na = 0; /* number of elements to go to array part */ + int n = 0; /* optimal size for array part */ + for (i = 0, twotoi = 1; twotoi/2 < *narray; i++, twotoi *= 2) { + if (nums[i] > 0) { + a += nums[i]; + if (a > twotoi/2) { /* more than half elements present? */ + n = twotoi; /* optimal size (till now) */ + na = a; /* all elements smaller than n will go to array part */ + } + } + if (a == *narray) break; /* all elements already counted */ + } + *narray = n; + lua_assert(*narray/2 <= na && na <= *narray); + return na; +} + + +static int countint (const TValue *key, int *nums) { + int k = arrayindex(key); + if (0 < k && k <= MAXASIZE) { /* is `key' an appropriate array index? */ + nums[ceillog2(k)]++; /* count as such */ + return 1; + } + else + return 0; +} + + +static int numusearray (const Table *t, int *nums) { + int lg; + int ttlg; /* 2^lg */ + int ause = 0; /* summation of `nums' */ + int i = 1; /* count to traverse all array keys */ + for (lg=0, ttlg=1; lg<=MAXBITS; lg++, ttlg*=2) { /* for each slice */ + int lc = 0; /* counter */ + int lim = ttlg; + if (lim > t->sizearray) { + lim = t->sizearray; /* adjust upper limit */ + if (i > lim) + break; /* no more elements to count */ + } + /* count elements in range (2^(lg-1), 2^lg] */ + for (; i <= lim; i++) { + if (!ttisnil(&t->array[i-1])) + lc++; + } + nums[lg] += lc; + ause += lc; + } + return ause; +} + + +static int numusehash (const Table *t, int *nums, int *pnasize) { + int totaluse = 0; /* total number of elements */ + int ause = 0; /* summation of `nums' */ + int i = sizenode(t); + while (i--) { + Node *n = &t->node[i]; + if (!ttisnil(gval(n))) { + ause += countint(key2tval(n), nums); + totaluse++; + } + } + *pnasize += ause; + return totaluse; +} + + +static void setarrayvector (lua_State *L, Table *t, int size) { + int i; + luaM_reallocvector(L, t->array, t->sizearray, size, TValue); + for (i=t->sizearray; iarray[i]); + t->sizearray = size; +} + + +static void setnodevector (lua_State *L, Table *t, int size) { + int lsize; + if (size == 0) { /* no elements to hash part? */ + t->node = cast(Node *, dummynode); /* use common `dummynode' */ + lsize = 0; + } + else { + int i; + lsize = ceillog2(size); + if (lsize > MAXBITS) + luaG_runerror(L, "table overflow"); + size = twoto(lsize); + t->node = luaM_newvector(L, size, Node); + for (i=0; ilsizenode = cast_byte(lsize); + t->lastfree = gnode(t, size); /* all positions are free */ +} + + +static void resize (lua_State *L, Table *t, int nasize, int nhsize) { + int i; + int oldasize = t->sizearray; + int oldhsize = t->lsizenode; + Node *nold = t->node; /* save old hash ... */ + if (nasize > oldasize) /* array part must grow? */ + setarrayvector(L, t, nasize); + /* create new hash part with appropriate size */ + setnodevector(L, t, nhsize); + if (nasize < oldasize) { /* array part must shrink? */ + t->sizearray = nasize; + /* re-insert elements from vanishing slice */ + for (i=nasize; iarray[i])) + setobjt2t(L, luaH_setnum(L, t, i+1), &t->array[i]); + } + /* shrink array */ + luaM_reallocvector(L, t->array, oldasize, nasize, TValue); + } + /* re-insert elements from hash part */ + for (i = twoto(oldhsize) - 1; i >= 0; i--) { + Node *old = nold+i; + if (!ttisnil(gval(old))) + setobjt2t(L, luaH_set(L, t, key2tval(old)), gval(old)); + } + if (nold != dummynode) + luaM_freearray(L, nold, twoto(oldhsize), Node); /* free old array */ +} + + +void luaH_resizearray (lua_State *L, Table *t, int nasize) { + int nsize = (t->node == dummynode) ? 0 : sizenode(t); + resize(L, t, nasize, nsize); +} + + +static void rehash (lua_State *L, Table *t, const TValue *ek) { + int nasize, na; + int nums[MAXBITS+1]; /* nums[i] = number of keys between 2^(i-1) and 2^i */ + int i; + int totaluse; + for (i=0; i<=MAXBITS; i++) nums[i] = 0; /* reset counts */ + nasize = numusearray(t, nums); /* count keys in array part */ + totaluse = nasize; /* all those keys are integer keys */ + totaluse += numusehash(t, nums, &nasize); /* count keys in hash part */ + /* count extra key */ + nasize += countint(ek, nums); + totaluse++; + /* compute new size for array part */ + na = computesizes(nums, &nasize); + /* resize the table to new computed sizes */ + resize(L, t, nasize, totaluse - na); +} + + + +/* +** }============================================================= +*/ + + +Table *luaH_new (lua_State *L, int narray, int nhash) { + Table *t = luaM_new(L, Table); + luaC_link(L, obj2gco(t), LUA_TTABLE); + t->metatable = NULL; + t->flags = cast_byte(~0); + /* temporary values (kept only if some malloc fails) */ + t->array = NULL; + t->sizearray = 0; + t->lsizenode = 0; + t->node = cast(Node *, dummynode); + setarrayvector(L, t, narray); + setnodevector(L, t, nhash); + return t; +} + + +void luaH_free (lua_State *L, Table *t) { + if (t->node != dummynode) + luaM_freearray(L, t->node, sizenode(t), Node); + luaM_freearray(L, t->array, t->sizearray, TValue); + luaM_free(L, t); +} + + +static Node *getfreepos (Table *t) { + while (t->lastfree-- > t->node) { + if (ttisnil(gkey(t->lastfree))) + return t->lastfree; + } + return NULL; /* could not find a free place */ +} + + + +/* +** inserts a new key into a hash table; first, check whether key's main +** position is free. If not, check whether colliding node is in its main +** position or not: if it is not, move colliding node to an empty place and +** put new key in its main position; otherwise (colliding node is in its main +** position), new key goes to an empty position. +*/ +static TValue *newkey (lua_State *L, Table *t, const TValue *key) { + Node *mp = mainposition(t, key); + if (!ttisnil(gval(mp)) || mp == dummynode) { + Node *othern; + Node *n = getfreepos(t); /* get a free place */ + if (n == NULL) { /* cannot find a free place? */ + rehash(L, t, key); /* grow table */ + return luaH_set(L, t, key); /* re-insert key into grown table */ + } + lua_assert(n != dummynode); + othern = mainposition(t, key2tval(mp)); + if (othern != mp) { /* is colliding node out of its main position? */ + /* yes; move colliding node into free position */ + while (gnext(othern) != mp) othern = gnext(othern); /* find previous */ + gnext(othern) = n; /* redo the chain with `n' in place of `mp' */ + *n = *mp; /* copy colliding node into free pos. (mp->next also goes) */ + gnext(mp) = NULL; /* now `mp' is free */ + setnilvalue(gval(mp)); + } + else { /* colliding node is in its own main position */ + /* new node will go into free position */ + gnext(n) = gnext(mp); /* chain new position */ + gnext(mp) = n; + mp = n; + } + } + gkey(mp)->value = key->value; gkey(mp)->tt = key->tt; + luaC_barriert(L, t, key); + lua_assert(ttisnil(gval(mp))); + return gval(mp); +} + + +/* +** search function for integers +*/ +const TValue *luaH_getnum (Table *t, int key) { + /* (1 <= key && key <= t->sizearray) */ + if (cast(unsigned int, key-1) < cast(unsigned int, t->sizearray)) + return &t->array[key-1]; + else { + lua_Number nk = cast_num(key); + Node *n = hashnum(t, nk); + do { /* check whether `key' is somewhere in the chain */ + if (ttisnumber(gkey(n)) && luai_numeq(nvalue(gkey(n)), nk)) + return gval(n); /* that's it */ + else n = gnext(n); + } while (n); + return luaO_nilobject; + } +} + + +/* +** search function for strings +*/ +const TValue *luaH_getstr (Table *t, TString *key) { + Node *n = hashstr(t, key); + do { /* check whether `key' is somewhere in the chain */ + if (ttisstring(gkey(n)) && rawtsvalue(gkey(n)) == key) + return gval(n); /* that's it */ + else n = gnext(n); + } while (n); + return luaO_nilobject; +} + + +/* +** main search function +*/ +const TValue *luaH_get (Table *t, const TValue *key) { + switch (ttype(key)) { + case LUA_TNIL: return luaO_nilobject; + case LUA_TSTRING: return luaH_getstr(t, rawtsvalue(key)); + case LUA_TNUMBER: { + int k; + lua_Number n = nvalue(key); + lua_number2int(k, n); + if (luai_numeq(cast_num(k), nvalue(key))) /* index is int? */ + return luaH_getnum(t, k); /* use specialized version */ + /* else go through */ + } + default: { + Node *n = mainposition(t, key); + do { /* check whether `key' is somewhere in the chain */ + if (luaO_rawequalObj(key2tval(n), key)) + return gval(n); /* that's it */ + else n = gnext(n); + } while (n); + return luaO_nilobject; + } + } +} + + +TValue *luaH_set (lua_State *L, Table *t, const TValue *key) { + const TValue *p = luaH_get(t, key); + t->flags = 0; + if (p != luaO_nilobject) + return cast(TValue *, p); + else { + if (ttisnil(key)) luaG_runerror(L, "table index is nil"); + else if (ttisnumber(key) && luai_numisnan(nvalue(key))) + luaG_runerror(L, "table index is NaN"); + return newkey(L, t, key); + } +} + + +TValue *luaH_setnum (lua_State *L, Table *t, int key) { + const TValue *p = luaH_getnum(t, key); + if (p != luaO_nilobject) + return cast(TValue *, p); + else { + TValue k; + setnvalue(&k, cast_num(key)); + return newkey(L, t, &k); + } +} + + +TValue *luaH_setstr (lua_State *L, Table *t, TString *key) { + const TValue *p = luaH_getstr(t, key); + if (p != luaO_nilobject) + return cast(TValue *, p); + else { + TValue k; + setsvalue(L, &k, key); + return newkey(L, t, &k); + } +} + + +static int unbound_search (Table *t, unsigned int j) { + unsigned int i = j; /* i is zero or a present index */ + j++; + /* find `i' and `j' such that i is present and j is not */ + while (!ttisnil(luaH_getnum(t, j))) { + i = j; + j *= 2; + if (j > cast(unsigned int, MAX_INT)) { /* overflow? */ + /* table was built with bad purposes: resort to linear search */ + i = 1; + while (!ttisnil(luaH_getnum(t, i))) i++; + return i - 1; + } + } + /* now do a binary search between them */ + while (j - i > 1) { + unsigned int m = (i+j)/2; + if (ttisnil(luaH_getnum(t, m))) j = m; + else i = m; + } + return i; +} + + +/* +** Try to find a boundary in table `t'. A `boundary' is an integer index +** such that t[i] is non-nil and t[i+1] is nil (and 0 if t[1] is nil). +*/ +int luaH_getn (Table *t) { + unsigned int j = t->sizearray; + if (j > 0 && ttisnil(&t->array[j - 1])) { + /* there is a boundary in the array part: (binary) search for it */ + unsigned int i = 0; + while (j - i > 1) { + unsigned int m = (i+j)/2; + if (ttisnil(&t->array[m - 1])) j = m; + else i = m; + } + return i; + } + /* else must find a boundary in hash part */ + else if (t->node == dummynode) /* hash part is empty? */ + return j; /* that is easy... */ + else return unbound_search(t, j); +} + + + +#if defined(LUA_DEBUG) + +Node *luaH_mainposition (const Table *t, const TValue *key) { + return mainposition(t, key); +} + +int luaH_isdummy (Node *n) { return n == dummynode; } + +#endif diff --git a/lib/lua/src/ltable.h b/lib/lua/src/ltable.h new file mode 100644 index 0000000..09193cd --- /dev/null +++ b/lib/lua/src/ltable.h @@ -0,0 +1,40 @@ +/* +** $Id: ltable.h,v 2.10 2006/01/10 13:13:06 roberto Exp $ +** Lua tables (hash) +** See Copyright Notice in lua.h +*/ + +#ifndef ltable_h +#define ltable_h + +#include "lobject.h" + + +#define gnode(t,i) (&(t)->node[i]) +#define gkey(n) (&(n)->i_key.nk) +#define gval(n) (&(n)->i_val) +#define gnext(n) ((n)->i_key.nk.next) + +#define key2tval(n) (&(n)->i_key.tvk) + + +LUAI_FUNC const TValue *luaH_getnum (Table *t, int key); +LUAI_FUNC TValue *luaH_setnum (lua_State *L, Table *t, int key); +LUAI_FUNC const TValue *luaH_getstr (Table *t, TString *key); +LUAI_FUNC TValue *luaH_setstr (lua_State *L, Table *t, TString *key); +LUAI_FUNC const TValue *luaH_get (Table *t, const TValue *key); +LUAI_FUNC TValue *luaH_set (lua_State *L, Table *t, const TValue *key); +LUAI_FUNC Table *luaH_new (lua_State *L, int narray, int lnhash); +LUAI_FUNC void luaH_resizearray (lua_State *L, Table *t, int nasize); +LUAI_FUNC void luaH_free (lua_State *L, Table *t); +LUAI_FUNC int luaH_next (lua_State *L, Table *t, StkId key); +LUAI_FUNC int luaH_getn (Table *t); + + +#if defined(LUA_DEBUG) +LUAI_FUNC Node *luaH_mainposition (const Table *t, const TValue *key); +LUAI_FUNC int luaH_isdummy (Node *n); +#endif + + +#endif diff --git a/lib/lua/src/ltablib.c b/lib/lua/src/ltablib.c new file mode 100644 index 0000000..453b23b --- /dev/null +++ b/lib/lua/src/ltablib.c @@ -0,0 +1,278 @@ +/* +** $Id: ltablib.c,v 1.38 2005/10/23 17:38:15 roberto Exp $ +** Library for Table Manipulation +** See Copyright Notice in lua.h +*/ + + +#include + +#define ltablib_c +#define LUA_LIB + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + +#define aux_getn(L,n) (luaL_checktype(L, n, LUA_TTABLE), luaL_getn(L, n)) + + +static int foreachi (lua_State *L) { + int i; + int n = aux_getn(L, 1); + luaL_checktype(L, 2, LUA_TFUNCTION); + for (i=1; i <= n; i++) { + lua_pushvalue(L, 2); /* function */ + lua_pushinteger(L, i); /* 1st argument */ + lua_rawgeti(L, 1, i); /* 2nd argument */ + lua_call(L, 2, 1); + if (!lua_isnil(L, -1)) + return 1; + lua_pop(L, 1); /* remove nil result */ + } + return 0; +} + + +static int foreach (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); + luaL_checktype(L, 2, LUA_TFUNCTION); + lua_pushnil(L); /* first key */ + while (lua_next(L, 1)) { + lua_pushvalue(L, 2); /* function */ + lua_pushvalue(L, -3); /* key */ + lua_pushvalue(L, -3); /* value */ + lua_call(L, 2, 1); + if (!lua_isnil(L, -1)) + return 1; + lua_pop(L, 2); /* remove value and result */ + } + return 0; +} + + +static int maxn (lua_State *L) { + lua_Number max = 0; + luaL_checktype(L, 1, LUA_TTABLE); + lua_pushnil(L); /* first key */ + while (lua_next(L, 1)) { + lua_pop(L, 1); /* remove value */ + if (lua_type(L, -1) == LUA_TNUMBER) { + lua_Number v = lua_tonumber(L, -1); + if (v > max) max = v; + } + } + lua_pushnumber(L, max); + return 1; +} + + +static int getn (lua_State *L) { + lua_pushinteger(L, aux_getn(L, 1)); + return 1; +} + + +static int setn (lua_State *L) { + luaL_checktype(L, 1, LUA_TTABLE); +#ifndef luaL_setn + luaL_setn(L, 1, luaL_checkint(L, 2)); +#else + luaL_error(L, LUA_QL("setn") " is obsolete"); +#endif + lua_pushvalue(L, 1); + return 1; +} + + +static int tinsert (lua_State *L) { + int e = aux_getn(L, 1) + 1; /* first empty element */ + int pos; /* where to insert new element */ + switch (lua_gettop(L)) { + case 2: { /* called with only 2 arguments */ + pos = e; /* insert new element at the end */ + break; + } + case 3: { + int i; + pos = luaL_checkint(L, 2); /* 2nd argument is the position */ + if (pos > e) e = pos; /* `grow' array if necessary */ + for (i = e; i > pos; i--) { /* move up elements */ + lua_rawgeti(L, 1, i-1); + lua_rawseti(L, 1, i); /* t[i] = t[i-1] */ + } + break; + } + default: { + return luaL_error(L, "wrong number of arguments to " LUA_QL("insert")); + } + } + luaL_setn(L, 1, e); /* new size */ + lua_rawseti(L, 1, pos); /* t[pos] = v */ + return 0; +} + + +static int tremove (lua_State *L) { + int e = aux_getn(L, 1); + int pos = luaL_optint(L, 2, e); + if (e == 0) return 0; /* table is `empty' */ + luaL_setn(L, 1, e - 1); /* t.n = n-1 */ + lua_rawgeti(L, 1, pos); /* result = t[pos] */ + for ( ;pos= P */ + while (lua_rawgeti(L, 1, ++i), sort_comp(L, -1, -2)) { + if (i>u) luaL_error(L, "invalid order function for sorting"); + lua_pop(L, 1); /* remove a[i] */ + } + /* repeat --j until a[j] <= P */ + while (lua_rawgeti(L, 1, --j), sort_comp(L, -3, -1)) { + if (j + +#define ltm_c +#define LUA_CORE + +#include "lua.h" + +#include "lobject.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" + + + +const char *const luaT_typenames[] = { + "nil", "boolean", "userdata", "number", + "string", "table", "function", "userdata", "thread", + "proto", "upval" +}; + + +void luaT_init (lua_State *L) { + static const char *const luaT_eventname[] = { /* ORDER TM */ + "__index", "__newindex", + "__gc", "__mode", "__eq", + "__add", "__sub", "__mul", "__div", "__mod", + "__pow", "__unm", "__len", "__lt", "__le", + "__concat", "__call" + }; + int i; + for (i=0; itmname[i] = luaS_new(L, luaT_eventname[i]); + luaS_fix(G(L)->tmname[i]); /* never collect these names */ + } +} + + +/* +** function to be used with macro "fasttm": optimized for absence of +** tag methods +*/ +const TValue *luaT_gettm (Table *events, TMS event, TString *ename) { + const TValue *tm = luaH_getstr(events, ename); + lua_assert(event <= TM_EQ); + if (ttisnil(tm)) { /* no tag method? */ + events->flags |= cast_byte(1u<metatable; + break; + case LUA_TUSERDATA: + mt = uvalue(o)->metatable; + break; + default: + mt = G(L)->mt[ttype(o)]; + } + return (mt ? luaH_getstr(mt, G(L)->tmname[event]) : luaO_nilobject); +} + diff --git a/lib/lua/src/ltm.h b/lib/lua/src/ltm.h new file mode 100644 index 0000000..866c796 --- /dev/null +++ b/lib/lua/src/ltm.h @@ -0,0 +1,54 @@ +/* +** $Id: ltm.h,v 2.6 2005/06/06 13:30:25 roberto Exp $ +** Tag methods +** See Copyright Notice in lua.h +*/ + +#ifndef ltm_h +#define ltm_h + + +#include "lobject.h" + + +/* +* WARNING: if you change the order of this enumeration, +* grep "ORDER TM" +*/ +typedef enum { + TM_INDEX, + TM_NEWINDEX, + TM_GC, + TM_MODE, + TM_EQ, /* last tag method with `fast' access */ + TM_ADD, + TM_SUB, + TM_MUL, + TM_DIV, + TM_MOD, + TM_POW, + TM_UNM, + TM_LEN, + TM_LT, + TM_LE, + TM_CONCAT, + TM_CALL, + TM_N /* number of elements in the enum */ +} TMS; + + + +#define gfasttm(g,et,e) ((et) == NULL ? NULL : \ + ((et)->flags & (1u<<(e))) ? NULL : luaT_gettm(et, e, (g)->tmname[e])) + +#define fasttm(l,et,e) gfasttm(G(l), et, e) + +LUAI_DATA const char *const luaT_typenames[]; + + +LUAI_FUNC const TValue *luaT_gettm (Table *events, TMS event, TString *ename); +LUAI_FUNC const TValue *luaT_gettmbyobj (lua_State *L, const TValue *o, + TMS event); +LUAI_FUNC void luaT_init (lua_State *L); + +#endif diff --git a/lib/lua/src/lua.c b/lib/lua/src/lua.c new file mode 100644 index 0000000..5cee7fa --- /dev/null +++ b/lib/lua/src/lua.c @@ -0,0 +1,390 @@ +/* +** $Id: lua.c,v 1.160 2006/06/02 15:34:00 roberto Exp $ +** Lua stand-alone interpreter +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include +#include + +#define lua_c + +#include "lua.h" + +#include "lauxlib.h" +#include "lualib.h" + + + +static lua_State *globalL = NULL; + +static const char *progname = LUA_PROGNAME; + + + +static void lstop (lua_State *L, lua_Debug *ar) { + (void)ar; /* unused arg. */ + lua_sethook(L, NULL, 0, 0); + luaL_error(L, "interrupted!"); +} + + +static void laction (int i) { + signal(i, SIG_DFL); /* if another SIGINT happens before lstop, + terminate process (default action) */ + lua_sethook(globalL, lstop, LUA_MASKCALL | LUA_MASKRET | LUA_MASKCOUNT, 1); +} + + +static void print_usage (void) { + fprintf(stderr, + "usage: %s [options] [script [args]].\n" + "Available options are:\n" + " -e stat execute string " LUA_QL("stat") "\n" + " -l name require library " LUA_QL("name") "\n" + " -i enter interactive mode after executing " LUA_QL("script") "\n" + " -v show version information\n" + " -- stop handling options\n" + " - execute stdin and stop handling options\n" + , + progname); + fflush(stderr); +} + + +static void l_message (const char *pname, const char *msg) { + if (pname) fprintf(stderr, "%s: ", pname); + fprintf(stderr, "%s\n", msg); + fflush(stderr); +} + + +static int report (lua_State *L, int status) { + if (status && !lua_isnil(L, -1)) { + const char *msg = lua_tostring(L, -1); + if (msg == NULL) msg = "(error object is not a string)"; + l_message(progname, msg); + lua_pop(L, 1); + } + return status; +} + + +static int traceback (lua_State *L) { + lua_getfield(L, LUA_GLOBALSINDEX, "debug"); + if (!lua_istable(L, -1)) { + lua_pop(L, 1); + return 1; + } + lua_getfield(L, -1, "traceback"); + if (!lua_isfunction(L, -1)) { + lua_pop(L, 2); + return 1; + } + lua_pushvalue(L, 1); /* pass error message */ + lua_pushinteger(L, 2); /* skip this function and traceback */ + lua_call(L, 2, 1); /* call debug.traceback */ + return 1; +} + + +static int docall (lua_State *L, int narg, int clear) { + int status; + int base = lua_gettop(L) - narg; /* function index */ + lua_pushcfunction(L, traceback); /* push traceback function */ + lua_insert(L, base); /* put it under chunk and args */ + signal(SIGINT, laction); + status = lua_pcall(L, narg, (clear ? 0 : LUA_MULTRET), base); + signal(SIGINT, SIG_DFL); + lua_remove(L, base); /* remove traceback function */ + /* force a complete garbage collection in case of errors */ + if (status != 0) lua_gc(L, LUA_GCCOLLECT, 0); + return status; +} + + +static void print_version (void) { + l_message(NULL, LUA_RELEASE " " LUA_COPYRIGHT); +} + + +static int getargs (lua_State *L, char **argv, int n) { + int narg; + int i; + int argc = 0; + while (argv[argc]) argc++; /* count total number of arguments */ + narg = argc - (n + 1); /* number of arguments to the script */ + luaL_checkstack(L, narg + 3, "too many arguments to script"); + for (i=n+1; i < argc; i++) + lua_pushstring(L, argv[i]); + lua_createtable(L, narg, n + 1); + for (i=0; i < argc; i++) { + lua_pushstring(L, argv[i]); + lua_rawseti(L, -2, i - n); + } + return narg; +} + + +static int dofile (lua_State *L, const char *name) { + int status = luaL_loadfile(L, name) || docall(L, 0, 1); + return report(L, status); +} + + +static int dostring (lua_State *L, const char *s, const char *name) { + int status = luaL_loadbuffer(L, s, strlen(s), name) || docall(L, 0, 1); + return report(L, status); +} + + +static int dolibrary (lua_State *L, const char *name) { + lua_getglobal(L, "require"); + lua_pushstring(L, name); + return report(L, lua_pcall(L, 1, 0, 0)); +} + + +static const char *get_prompt (lua_State *L, int firstline) { + const char *p; + lua_getfield(L, LUA_GLOBALSINDEX, firstline ? "_PROMPT" : "_PROMPT2"); + p = lua_tostring(L, -1); + if (p == NULL) p = (firstline ? LUA_PROMPT : LUA_PROMPT2); + lua_pop(L, 1); /* remove global */ + return p; +} + + +static int incomplete (lua_State *L, int status) { + if (status == LUA_ERRSYNTAX) { + size_t lmsg; + const char *msg = lua_tolstring(L, -1, &lmsg); + const char *tp = msg + lmsg - (sizeof(LUA_QL("")) - 1); + if (strstr(msg, LUA_QL("")) == tp) { + lua_pop(L, 1); + return 1; + } + } + return 0; /* else... */ +} + + +static int pushline (lua_State *L, int firstline) { + char buffer[LUA_MAXINPUT]; + char *b = buffer; + size_t l; + const char *prmt = get_prompt(L, firstline); + if (lua_readline(L, b, prmt) == 0) + return 0; /* no input */ + l = strlen(b); + if (l > 0 && b[l-1] == '\n') /* line ends with newline? */ + b[l-1] = '\0'; /* remove it */ + if (firstline && b[0] == '=') /* first line starts with `=' ? */ + lua_pushfstring(L, "return %s", b+1); /* change it to `return' */ + else + lua_pushstring(L, b); + lua_freeline(L, b); + return 1; +} + + +static int loadline (lua_State *L) { + int status; + lua_settop(L, 0); + if (!pushline(L, 1)) + return -1; /* no input */ + for (;;) { /* repeat until gets a complete line */ + status = luaL_loadbuffer(L, lua_tostring(L, 1), lua_strlen(L, 1), "=stdin"); + if (!incomplete(L, status)) break; /* cannot try to add lines? */ + if (!pushline(L, 0)) /* no more input? */ + return -1; + lua_pushliteral(L, "\n"); /* add a new line... */ + lua_insert(L, -2); /* ...between the two lines */ + lua_concat(L, 3); /* join them */ + } + lua_saveline(L, 1); + lua_remove(L, 1); /* remove line */ + return status; +} + + +static void dotty (lua_State *L) { + int status; + const char *oldprogname = progname; + progname = NULL; + while ((status = loadline(L)) != -1) { + if (status == 0) status = docall(L, 0, 0); + report(L, status); + if (status == 0 && lua_gettop(L) > 0) { /* any result to print? */ + lua_getglobal(L, "print"); + lua_insert(L, 1); + if (lua_pcall(L, lua_gettop(L)-1, 0, 0) != 0) + l_message(progname, lua_pushfstring(L, + "error calling " LUA_QL("print") " (%s)", + lua_tostring(L, -1))); + } + } + lua_settop(L, 0); /* clear stack */ + fputs("\n", stdout); + fflush(stdout); + progname = oldprogname; +} + + +static int handle_script (lua_State *L, char **argv, int n) { + int status; + const char *fname; + int narg = getargs(L, argv, n); /* collect arguments */ + lua_setglobal(L, "arg"); + fname = argv[n]; + if (strcmp(fname, "-") == 0 && strcmp(argv[n-1], "--") != 0) + fname = NULL; /* stdin */ + status = luaL_loadfile(L, fname); + lua_insert(L, -(narg+1)); + if (status == 0) + status = docall(L, narg, 0); + else + lua_pop(L, narg); + return report(L, status); +} + + +/* check that argument has no extra characters at the end */ +#define notail(x) {if ((x)[2] != '\0') return -1;} + + +static int collectargs (char **argv, int *pi, int *pv, int *pe) { + int i; + for (i = 1; argv[i] != NULL; i++) { + if (argv[i][0] != '-') /* not an option? */ + return i; + switch (argv[i][1]) { /* option */ + case '-': + notail(argv[i]); + return (argv[i+1] != NULL ? i+1 : 0); + case '\0': + return i; + case 'i': + notail(argv[i]); + *pi = 1; /* go through */ + case 'v': + notail(argv[i]); + *pv = 1; + break; + case 'e': + *pe = 1; /* go through */ + case 'l': + if (argv[i][2] == '\0') { + i++; + if (argv[i] == NULL) return -1; + } + break; + default: return -1; /* invalid option */ + } + } + return 0; +} + + +static int runargs (lua_State *L, char **argv, int n) { + int i; + for (i = 1; i < n; i++) { + if (argv[i] == NULL) continue; + lua_assert(argv[i][0] == '-'); + switch (argv[i][1]) { /* option */ + case 'e': { + const char *chunk = argv[i] + 2; + if (*chunk == '\0') chunk = argv[++i]; + lua_assert(chunk != NULL); + if (dostring(L, chunk, "=(command line)") != 0) + return 1; + break; + } + case 'l': { + const char *filename = argv[i] + 2; + if (*filename == '\0') filename = argv[++i]; + lua_assert(filename != NULL); + if (dolibrary(L, filename)) + return 1; /* stop if file fails */ + break; + } + default: break; + } + } + return 0; +} + + +static int handle_luainit (lua_State *L) { + const char *init = getenv(LUA_INIT); + if (init == NULL) return 0; /* status OK */ + else if (init[0] == '@') + return dofile(L, init+1); + else + return dostring(L, init, "=" LUA_INIT); +} + + +struct Smain { + int argc; + char **argv; + int status; +}; + + +static int pmain (lua_State *L) { + struct Smain *s = (struct Smain *)lua_touserdata(L, 1); + char **argv = s->argv; + int script; + int has_i = 0, has_v = 0, has_e = 0; + globalL = L; + if (argv[0] && argv[0][0]) progname = argv[0]; + lua_gc(L, LUA_GCSTOP, 0); /* stop collector during initialization */ + luaL_openlibs(L); /* open libraries */ + lua_gc(L, LUA_GCRESTART, 0); + s->status = handle_luainit(L); + if (s->status != 0) return 0; + script = collectargs(argv, &has_i, &has_v, &has_e); + if (script < 0) { /* invalid args? */ + print_usage(); + s->status = 1; + return 0; + } + if (has_v) print_version(); + s->status = runargs(L, argv, (script > 0) ? script : s->argc); + if (s->status != 0) return 0; + if (script) + s->status = handle_script(L, argv, script); + if (s->status != 0) return 0; + if (has_i) + dotty(L); + else if (script == 0 && !has_e && !has_v) { + if (lua_stdin_is_tty()) { + print_version(); + dotty(L); + } + else dofile(L, NULL); /* executes stdin as a file */ + } + return 0; +} + + +int main (int argc, char **argv) { + int status; + struct Smain s; + lua_State *L = lua_open(); /* create state */ + if (L == NULL) { + l_message(argv[0], "cannot create state: not enough memory"); + return EXIT_FAILURE; + } + s.argc = argc; + s.argv = argv; + status = lua_cpcall(L, &pmain, &s); + report(L, status); + lua_close(L); + return (status || s.status) ? EXIT_FAILURE : EXIT_SUCCESS; +} + diff --git a/lib/lua/src/lua.h b/lib/lua/src/lua.h new file mode 100644 index 0000000..2865a7f --- /dev/null +++ b/lib/lua/src/lua.h @@ -0,0 +1,385 @@ +/* +** $Id: lua.h,v 1.218a 2006/06/02 15:34:00 roberto Exp $ +** Lua - An Extensible Extension Language +** Lua.org, PUC-Rio, Brazil (http://www.lua.org) +** See Copyright Notice at the end of this file +*/ + + +#ifndef lua_h +#define lua_h + +#include +#include + + +#include "luaconf.h" + + +#define LUA_VERSION "Lua 5.1" +#define LUA_RELEASE "Lua 5.1.2" +#define LUA_VERSION_NUM 501 +#define LUA_COPYRIGHT "Copyright (C) 1994-2007 Lua.org, PUC-Rio" +#define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo & W. Celes" + + +/* mark for precompiled code (`Lua') */ +#define LUA_SIGNATURE "\033Lua" + +/* option for multiple returns in `lua_pcall' and `lua_call' */ +#define LUA_MULTRET (-1) + + +/* +** pseudo-indices +*/ +#define LUA_REGISTRYINDEX (-10000) +#define LUA_ENVIRONINDEX (-10001) +#define LUA_GLOBALSINDEX (-10002) +#define lua_upvalueindex(i) (LUA_GLOBALSINDEX-(i)) + + +/* thread status; 0 is OK */ +#define LUA_YIELD 1 +#define LUA_ERRRUN 2 +#define LUA_ERRSYNTAX 3 +#define LUA_ERRMEM 4 +#define LUA_ERRERR 5 + + +typedef struct lua_State lua_State; + +typedef int (*lua_CFunction) (lua_State *L); + + +/* +** functions that read/write blocks when loading/dumping Lua chunks +*/ +typedef const char * (*lua_Reader) (lua_State *L, void *ud, size_t *sz); + +typedef int (*lua_Writer) (lua_State *L, const void* p, size_t sz, void* ud); + + +/* +** prototype for memory-allocation functions +*/ +typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize); + + +/* +** basic types +*/ +#define LUA_TNONE (-1) + +#define LUA_TNIL 0 +#define LUA_TBOOLEAN 1 +#define LUA_TLIGHTUSERDATA 2 +#define LUA_TNUMBER 3 +#define LUA_TSTRING 4 +#define LUA_TTABLE 5 +#define LUA_TFUNCTION 6 +#define LUA_TUSERDATA 7 +#define LUA_TTHREAD 8 + + + +/* minimum Lua stack available to a C function */ +#define LUA_MINSTACK 20 + + +/* +** generic extra include file +*/ +#if defined(LUA_USER_H) +#include LUA_USER_H +#endif + + +/* type of numbers in Lua */ +typedef LUA_NUMBER lua_Number; + + +/* type for integer functions */ +typedef LUA_INTEGER lua_Integer; + + + +/* +** state manipulation +*/ +LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud); +LUA_API void (lua_close) (lua_State *L); +LUA_API lua_State *(lua_newthread) (lua_State *L); + +LUA_API lua_CFunction (lua_atpanic) (lua_State *L, lua_CFunction panicf); + + +/* +** basic stack manipulation +*/ +LUA_API int (lua_gettop) (lua_State *L); +LUA_API void (lua_settop) (lua_State *L, int idx); +LUA_API void (lua_pushvalue) (lua_State *L, int idx); +LUA_API void (lua_remove) (lua_State *L, int idx); +LUA_API void (lua_insert) (lua_State *L, int idx); +LUA_API void (lua_replace) (lua_State *L, int idx); +LUA_API int (lua_checkstack) (lua_State *L, int sz); + +LUA_API void (lua_xmove) (lua_State *from, lua_State *to, int n); + + +/* +** access functions (stack -> C) +*/ + +LUA_API int (lua_isnumber) (lua_State *L, int idx); +LUA_API int (lua_isstring) (lua_State *L, int idx); +LUA_API int (lua_iscfunction) (lua_State *L, int idx); +LUA_API int (lua_isuserdata) (lua_State *L, int idx); +LUA_API int (lua_type) (lua_State *L, int idx); +LUA_API const char *(lua_typename) (lua_State *L, int tp); + +LUA_API int (lua_equal) (lua_State *L, int idx1, int idx2); +LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2); +LUA_API int (lua_lessthan) (lua_State *L, int idx1, int idx2); + +LUA_API lua_Number (lua_tonumber) (lua_State *L, int idx); +LUA_API lua_Integer (lua_tointeger) (lua_State *L, int idx); +LUA_API int (lua_toboolean) (lua_State *L, int idx); +LUA_API const char *(lua_tolstring) (lua_State *L, int idx, size_t *len); +LUA_API size_t (lua_objlen) (lua_State *L, int idx); +LUA_API lua_CFunction (lua_tocfunction) (lua_State *L, int idx); +LUA_API void *(lua_touserdata) (lua_State *L, int idx); +LUA_API lua_State *(lua_tothread) (lua_State *L, int idx); +LUA_API const void *(lua_topointer) (lua_State *L, int idx); + + +/* +** push functions (C -> stack) +*/ +LUA_API void (lua_pushnil) (lua_State *L); +LUA_API void (lua_pushnumber) (lua_State *L, lua_Number n); +LUA_API void (lua_pushinteger) (lua_State *L, lua_Integer n); +LUA_API void (lua_pushlstring) (lua_State *L, const char *s, size_t l); +LUA_API void (lua_pushstring) (lua_State *L, const char *s); +LUA_API const char *(lua_pushvfstring) (lua_State *L, const char *fmt, + va_list argp); +LUA_API const char *(lua_pushfstring) (lua_State *L, const char *fmt, ...); +LUA_API void (lua_pushcclosure) (lua_State *L, lua_CFunction fn, int n); +LUA_API void (lua_pushboolean) (lua_State *L, int b); +LUA_API void (lua_pushlightuserdata) (lua_State *L, void *p); +LUA_API int (lua_pushthread) (lua_State *L); + + +/* +** get functions (Lua -> stack) +*/ +LUA_API void (lua_gettable) (lua_State *L, int idx); +LUA_API void (lua_getfield) (lua_State *L, int idx, const char *k); +LUA_API void (lua_rawget) (lua_State *L, int idx); +LUA_API void (lua_rawgeti) (lua_State *L, int idx, int n); +LUA_API void (lua_createtable) (lua_State *L, int narr, int nrec); +LUA_API void *(lua_newuserdata) (lua_State *L, size_t sz); +LUA_API int (lua_getmetatable) (lua_State *L, int objindex); +LUA_API void (lua_getfenv) (lua_State *L, int idx); + + +/* +** set functions (stack -> Lua) +*/ +LUA_API void (lua_settable) (lua_State *L, int idx); +LUA_API void (lua_setfield) (lua_State *L, int idx, const char *k); +LUA_API void (lua_rawset) (lua_State *L, int idx); +LUA_API void (lua_rawseti) (lua_State *L, int idx, int n); +LUA_API int (lua_setmetatable) (lua_State *L, int objindex); +LUA_API int (lua_setfenv) (lua_State *L, int idx); + + +/* +** `load' and `call' functions (load and run Lua code) +*/ +LUA_API void (lua_call) (lua_State *L, int nargs, int nresults); +LUA_API int (lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc); +LUA_API int (lua_cpcall) (lua_State *L, lua_CFunction func, void *ud); +LUA_API int (lua_load) (lua_State *L, lua_Reader reader, void *dt, + const char *chunkname); + +LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data); + + +/* +** coroutine functions +*/ +LUA_API int (lua_yield) (lua_State *L, int nresults); +LUA_API int (lua_resume) (lua_State *L, int narg); +LUA_API int (lua_status) (lua_State *L); + +/* +** garbage-collection function and options +*/ + +#define LUA_GCSTOP 0 +#define LUA_GCRESTART 1 +#define LUA_GCCOLLECT 2 +#define LUA_GCCOUNT 3 +#define LUA_GCCOUNTB 4 +#define LUA_GCSTEP 5 +#define LUA_GCSETPAUSE 6 +#define LUA_GCSETSTEPMUL 7 + +LUA_API int (lua_gc) (lua_State *L, int what, int data); + + +/* +** miscellaneous functions +*/ + +LUA_API int (lua_error) (lua_State *L); + +LUA_API int (lua_next) (lua_State *L, int idx); + +LUA_API void (lua_concat) (lua_State *L, int n); + +LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud); +LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud); + + + +/* +** =============================================================== +** some useful macros +** =============================================================== +*/ + +#define lua_pop(L,n) lua_settop(L, -(n)-1) + +#define lua_newtable(L) lua_createtable(L, 0, 0) + +#define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n))) + +#define lua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0) + +#define lua_strlen(L,i) lua_objlen(L, (i)) + +#define lua_isfunction(L,n) (lua_type(L, (n)) == LUA_TFUNCTION) +#define lua_istable(L,n) (lua_type(L, (n)) == LUA_TTABLE) +#define lua_islightuserdata(L,n) (lua_type(L, (n)) == LUA_TLIGHTUSERDATA) +#define lua_isnil(L,n) (lua_type(L, (n)) == LUA_TNIL) +#define lua_isboolean(L,n) (lua_type(L, (n)) == LUA_TBOOLEAN) +#define lua_isthread(L,n) (lua_type(L, (n)) == LUA_TTHREAD) +#define lua_isnone(L,n) (lua_type(L, (n)) == LUA_TNONE) +#define lua_isnoneornil(L, n) (lua_type(L, (n)) <= 0) + +#define lua_pushliteral(L, s) \ + lua_pushlstring(L, "" s, (sizeof(s)/sizeof(char))-1) + +#define lua_setglobal(L,s) lua_setfield(L, LUA_GLOBALSINDEX, (s)) +#define lua_getglobal(L,s) lua_getfield(L, LUA_GLOBALSINDEX, (s)) + +#define lua_tostring(L,i) lua_tolstring(L, (i), NULL) + + + +/* +** compatibility macros and functions +*/ + +#define lua_open() luaL_newstate() + +#define lua_getregistry(L) lua_pushvalue(L, LUA_REGISTRYINDEX) + +#define lua_getgccount(L) lua_gc(L, LUA_GCCOUNT, 0) + +#define lua_Chunkreader lua_Reader +#define lua_Chunkwriter lua_Writer + + + +/* +** {====================================================================== +** Debug API +** ======================================================================= +*/ + + +/* +** Event codes +*/ +#define LUA_HOOKCALL 0 +#define LUA_HOOKRET 1 +#define LUA_HOOKLINE 2 +#define LUA_HOOKCOUNT 3 +#define LUA_HOOKTAILRET 4 + + +/* +** Event masks +*/ +#define LUA_MASKCALL (1 << LUA_HOOKCALL) +#define LUA_MASKRET (1 << LUA_HOOKRET) +#define LUA_MASKLINE (1 << LUA_HOOKLINE) +#define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT) + +typedef struct lua_Debug lua_Debug; /* activation record */ + + +/* Functions to be called by the debuger in specific events */ +typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar); + + +LUA_API int lua_getstack (lua_State *L, int level, lua_Debug *ar); +LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar); +LUA_API const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n); +LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n); +LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n); +LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n); + +LUA_API int lua_sethook (lua_State *L, lua_Hook func, int mask, int count); +LUA_API lua_Hook lua_gethook (lua_State *L); +LUA_API int lua_gethookmask (lua_State *L); +LUA_API int lua_gethookcount (lua_State *L); + + +struct lua_Debug { + int event; + const char *name; /* (n) */ + const char *namewhat; /* (n) `global', `local', `field', `method' */ + const char *what; /* (S) `Lua', `C', `main', `tail' */ + const char *source; /* (S) */ + int currentline; /* (l) */ + int nups; /* (u) number of upvalues */ + int linedefined; /* (S) */ + int lastlinedefined; /* (S) */ + char short_src[LUA_IDSIZE]; /* (S) */ + /* private part */ + int i_ci; /* active function */ +}; + +/* }====================================================================== */ + + +/****************************************************************************** +* Copyright (C) 1994-2007 Lua.org, PUC-Rio. All rights reserved. +* +* Permission is hereby granted, free of charge, to any person obtaining +* a copy of this software and associated documentation files (the +* "Software"), to deal in the Software without restriction, including +* without limitation the rights to use, copy, modify, merge, publish, +* distribute, sublicense, and/or sell copies of the Software, and to +* permit persons to whom the Software is furnished to do so, subject to +* the following conditions: +* +* The above copyright notice and this permission notice shall be +* included in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +******************************************************************************/ + + +#endif diff --git a/lib/lua/src/luac.c b/lib/lua/src/luac.c new file mode 100644 index 0000000..d070173 --- /dev/null +++ b/lib/lua/src/luac.c @@ -0,0 +1,200 @@ +/* +** $Id: luac.c,v 1.54 2006/06/02 17:37:11 lhf Exp $ +** Lua compiler (saves bytecodes to files; also list bytecodes) +** See Copyright Notice in lua.h +*/ + +#include +#include +#include +#include + +#define luac_c +#define LUA_CORE + +#include "lua.h" +#include "lauxlib.h" + +#include "ldo.h" +#include "lfunc.h" +#include "lmem.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lstring.h" +#include "lundump.h" + +#define PROGNAME "luac" /* default program name */ +#define OUTPUT PROGNAME ".out" /* default output file */ + +static int listing=0; /* list bytecodes? */ +static int dumping=1; /* dump bytecodes? */ +static int stripping=0; /* strip debug information? */ +static char Output[]={ OUTPUT }; /* default output file name */ +static const char* output=Output; /* actual output file name */ +static const char* progname=PROGNAME; /* actual program name */ + +static void fatal(const char* message) +{ + fprintf(stderr,"%s: %s\n",progname,message); + exit(EXIT_FAILURE); +} + +static void cannot(const char* what) +{ + fprintf(stderr,"%s: cannot %s %s: %s\n",progname,what,output,strerror(errno)); + exit(EXIT_FAILURE); +} + +static void usage(const char* message) +{ + if (*message=='-') + fprintf(stderr,"%s: unrecognized option " LUA_QS "\n",progname,message); + else + fprintf(stderr,"%s: %s\n",progname,message); + fprintf(stderr, + "usage: %s [options] [filenames].\n" + "Available options are:\n" + " - process stdin\n" + " -l list\n" + " -o name output to file " LUA_QL("name") " (default is \"%s\")\n" + " -p parse only\n" + " -s strip debug information\n" + " -v show version information\n" + " -- stop handling options\n", + progname,Output); + exit(EXIT_FAILURE); +} + +#define IS(s) (strcmp(argv[i],s)==0) + +static int doargs(int argc, char* argv[]) +{ + int i; + int version=0; + if (argv[0]!=NULL && *argv[0]!=0) progname=argv[0]; + for (i=1; itop+(i))->l.p) + +static const Proto* combine(lua_State* L, int n) +{ + if (n==1) + return toproto(L,-1); + else + { + int i,pc; + Proto* f=luaF_newproto(L); + setptvalue2s(L,L->top,f); incr_top(L); + f->source=luaS_newliteral(L,"=(" PROGNAME ")"); + f->maxstacksize=1; + pc=2*n+1; + f->code=luaM_newvector(L,pc,Instruction); + f->sizecode=pc; + f->p=luaM_newvector(L,n,Proto*); + f->sizep=n; + pc=0; + for (i=0; ip[i]=toproto(L,i-n-1); + f->code[pc++]=CREATE_ABx(OP_CLOSURE,0,i); + f->code[pc++]=CREATE_ABC(OP_CALL,0,1,1); + } + f->code[pc++]=CREATE_ABC(OP_RETURN,0,1,0); + return f; + } +} + +static int writer(lua_State* L, const void* p, size_t size, void* u) +{ + UNUSED(L); + return (fwrite(p,size,1,(FILE*)u)!=1) && (size!=0); +} + +struct Smain { + int argc; + char** argv; +}; + +static int pmain(lua_State* L) +{ + struct Smain* s = (struct Smain*)lua_touserdata(L, 1); + int argc=s->argc; + char** argv=s->argv; + const Proto* f; + int i; + if (!lua_checkstack(L,argc)) fatal("too many input files"); + for (i=0; i1); + if (dumping) + { + FILE* D= (output==NULL) ? stdout : fopen(output,"wb"); + if (D==NULL) cannot("open"); + lua_lock(L); + luaU_dump(L,f,writer,D,stripping); + lua_unlock(L); + if (ferror(D)) cannot("write"); + if (fclose(D)) cannot("close"); + } + return 0; +} + +int main(int argc, char* argv[]) +{ + lua_State* L; + struct Smain s; + int i=doargs(argc,argv); + argc-=i; argv+=i; + if (argc<=0) usage("no input files given"); + L=lua_open(); + if (L==NULL) fatal("not enough memory for state"); + s.argc=argc; + s.argv=argv; + if (lua_cpcall(L,pmain,&s)!=0) fatal(lua_tostring(L,-1)); + lua_close(L); + return EXIT_SUCCESS; +} diff --git a/lib/lua/src/luaconf.h b/lib/lua/src/luaconf.h new file mode 100644 index 0000000..3696797 --- /dev/null +++ b/lib/lua/src/luaconf.h @@ -0,0 +1,762 @@ +/* +** $Id: luaconf.h,v 1.82a 2006/04/10 18:27:23 roberto Exp $ +** Configuration file for Lua +** See Copyright Notice in lua.h +*/ + + +#ifndef lconfig_h +#define lconfig_h + +#include +#include + + +/* +** ================================================================== +** Search for "@@" to find all configurable definitions. +** =================================================================== +*/ + + +/* +@@ LUA_ANSI controls the use of non-ansi features. +** CHANGE it (define it) if you want Lua to avoid the use of any +** non-ansi feature or library. +*/ +#if defined(__STRICT_ANSI__) +#define LUA_ANSI +#endif + + +#if !defined(LUA_ANSI) && defined(_WIN32) +#define LUA_WIN +#endif + +#if defined(LUA_USE_BSD) || defined(LUA_USE_LINUX) +#define LUA_USE_POSIX +#define LUA_USE_DLOPEN /* needs an extra library: -ldl */ +#define LUA_USE_READLINE /* needs some extra libraries */ +#endif + +#if defined(LUA_USE_MACOSX) +#define LUA_USE_POSIX +#define LUA_DL_DYLD /* does not need extra library */ +#endif + + + +/* +@@ LUA_USE_POSIX includes all functionallity listed as X/Open System +@* Interfaces Extension (XSI). +** CHANGE it (define it) if your system is XSI compatible. +*/ +#if defined(LUA_USE_POSIX) +#define LUA_USE_MKSTEMP +#define LUA_USE_ISATTY +#define LUA_USE_POPEN +#define LUA_USE_ULONGJMP +#endif + + +/* +@@ LUA_PATH and LUA_CPATH are the names of the environment variables that +@* Lua check to set its paths. +@@ LUA_INIT is the name of the environment variable that Lua +@* checks for initialization code. +** CHANGE them if you want different names. +*/ +#define LUA_PATH "LUA_PATH" +#define LUA_CPATH "LUA_CPATH" +#define LUA_INIT "LUA_INIT" + + +/* +@@ LUA_PATH_DEFAULT is the default path that Lua uses to look for +@* Lua libraries. +@@ LUA_CPATH_DEFAULT is the default path that Lua uses to look for +@* C libraries. +** CHANGE them if your machine has a non-conventional directory +** hierarchy or if you want to install your libraries in +** non-conventional directories. +*/ +#if defined(_WIN32) +/* +** In Windows, any exclamation mark ('!') in the path is replaced by the +** path of the directory of the executable file of the current process. +*/ +#define LUA_LDIR "!\\lua\\" +#define LUA_CDIR "!\\" +#define LUA_PATH_DEFAULT \ + ".\\?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" \ + LUA_CDIR"?.lua;" LUA_CDIR"?\\init.lua" +#define LUA_CPATH_DEFAULT \ + ".\\?.dll;" LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll" + +#else +#define LUA_ROOT "/usr/local/" +#define LUA_LDIR LUA_ROOT "share/lua/5.1/" +#define LUA_CDIR LUA_ROOT "lib/lua/5.1/" +#define LUA_PATH_DEFAULT \ + "./?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ + LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua" +#define LUA_CPATH_DEFAULT \ + "./?.so;" LUA_CDIR"?.so;" LUA_CDIR"loadall.so" +#endif + + +/* +@@ LUA_DIRSEP is the directory separator (for submodules). +** CHANGE it if your machine does not use "/" as the directory separator +** and is not Windows. (On Windows Lua automatically uses "\".) +*/ +#if defined(_WIN32) +#define LUA_DIRSEP "\\" +#else +#define LUA_DIRSEP "/" +#endif + + +/* +@@ LUA_PATHSEP is the character that separates templates in a path. +@@ LUA_PATH_MARK is the string that marks the substitution points in a +@* template. +@@ LUA_EXECDIR in a Windows path is replaced by the executable's +@* directory. +@@ LUA_IGMARK is a mark to ignore all before it when bulding the +@* luaopen_ function name. +** CHANGE them if for some reason your system cannot use those +** characters. (E.g., if one of those characters is a common character +** in file/directory names.) Probably you do not need to change them. +*/ +#define LUA_PATHSEP ";" +#define LUA_PATH_MARK "?" +#define LUA_EXECDIR "!" +#define LUA_IGMARK "-" + + +/* +@@ LUA_INTEGER is the integral type used by lua_pushinteger/lua_tointeger. +** CHANGE that if ptrdiff_t is not adequate on your machine. (On most +** machines, ptrdiff_t gives a good choice between int or long.) +*/ +#define LUA_INTEGER ptrdiff_t + + +/* +@@ LUA_API is a mark for all core API functions. +@@ LUALIB_API is a mark for all standard library functions. +** CHANGE them if you need to define those functions in some special way. +** For instance, if you want to create one Windows DLL with the core and +** the libraries, you may want to use the following definition (define +** LUA_BUILD_AS_DLL to get it). +*/ +#if defined(LUA_BUILD_AS_DLL) + +#if defined(LUA_CORE) || defined(LUA_LIB) +#define LUA_API __declspec(dllexport) +#else +#define LUA_API __declspec(dllimport) +#endif + +#else + +#define LUA_API extern + +#endif + +/* more often than not the libs go together with the core */ +#define LUALIB_API LUA_API + + +/* +@@ LUAI_FUNC is a mark for all extern functions that are not to be +@* exported to outside modules. +@@ LUAI_DATA is a mark for all extern (const) variables that are not to +@* be exported to outside modules. +** CHANGE them if you need to mark them in some special way. Elf/gcc +** (versions 3.2 and later) mark them as "hidden" to optimize access +** when Lua is compiled as a shared library. +*/ +#if defined(luaall_c) +#define LUAI_FUNC static +#define LUAI_DATA /* empty */ + +#elif defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \ + defined(__ELF__) +#define LUAI_FUNC __attribute__((visibility("hidden"))) extern +#define LUAI_DATA LUAI_FUNC + +#else +#define LUAI_FUNC extern +#define LUAI_DATA extern +#endif + + + +/* +@@ LUA_QL describes how error messages quote program elements. +** CHANGE it if you want a different appearance. +*/ +#define LUA_QL(x) "'" x "'" +#define LUA_QS LUA_QL("%s") + + +/* +@@ LUA_IDSIZE gives the maximum size for the description of the source +@* of a function in debug information. +** CHANGE it if you want a different size. +*/ +#define LUA_IDSIZE 60 + + +/* +** {================================================================== +** Stand-alone configuration +** =================================================================== +*/ + +#if defined(lua_c) || defined(luaall_c) + +/* +@@ lua_stdin_is_tty detects whether the standard input is a 'tty' (that +@* is, whether we're running lua interactively). +** CHANGE it if you have a better definition for non-POSIX/non-Windows +** systems. +*/ +#if defined(LUA_USE_ISATTY) +#include +#define lua_stdin_is_tty() isatty(0) +#elif defined(LUA_WIN) +#include +#include +#define lua_stdin_is_tty() _isatty(_fileno(stdin)) +#else +#define lua_stdin_is_tty() 1 /* assume stdin is a tty */ +#endif + + +/* +@@ LUA_PROMPT is the default prompt used by stand-alone Lua. +@@ LUA_PROMPT2 is the default continuation prompt used by stand-alone Lua. +** CHANGE them if you want different prompts. (You can also change the +** prompts dynamically, assigning to globals _PROMPT/_PROMPT2.) +*/ +#define LUA_PROMPT "> " +#define LUA_PROMPT2 ">> " + + +/* +@@ LUA_PROGNAME is the default name for the stand-alone Lua program. +** CHANGE it if your stand-alone interpreter has a different name and +** your system is not able to detect that name automatically. +*/ +#define LUA_PROGNAME "lua" + + +/* +@@ LUA_MAXINPUT is the maximum length for an input line in the +@* stand-alone interpreter. +** CHANGE it if you need longer lines. +*/ +#define LUA_MAXINPUT 512 + + +/* +@@ lua_readline defines how to show a prompt and then read a line from +@* the standard input. +@@ lua_saveline defines how to "save" a read line in a "history". +@@ lua_freeline defines how to free a line read by lua_readline. +** CHANGE them if you want to improve this functionality (e.g., by using +** GNU readline and history facilities). +*/ +#if defined(LUA_USE_READLINE) +#include +#include +#include +#define lua_readline(L,b,p) ((void)L, ((b)=readline(p)) != NULL) +#define lua_saveline(L,idx) \ + if (lua_strlen(L,idx) > 0) /* non-empty line? */ \ + add_history(lua_tostring(L, idx)); /* add it to history */ +#define lua_freeline(L,b) ((void)L, free(b)) +#else +#define lua_readline(L,b,p) \ + ((void)L, fputs(p, stdout), fflush(stdout), /* show prompt */ \ + fgets(b, LUA_MAXINPUT, stdin) != NULL) /* get line */ +#define lua_saveline(L,idx) { (void)L; (void)idx; } +#define lua_freeline(L,b) { (void)L; (void)b; } +#endif + +#endif + +/* }================================================================== */ + + +/* +@@ LUAI_GCPAUSE defines the default pause between garbage-collector cycles +@* as a percentage. +** CHANGE it if you want the GC to run faster or slower (higher values +** mean larger pauses which mean slower collection.) You can also change +** this value dynamically. +*/ +#define LUAI_GCPAUSE 200 /* 200% (wait memory to double before next GC) */ + + +/* +@@ LUAI_GCMUL defines the default speed of garbage collection relative to +@* memory allocation as a percentage. +** CHANGE it if you want to change the granularity of the garbage +** collection. (Higher values mean coarser collections. 0 represents +** infinity, where each step performs a full collection.) You can also +** change this value dynamically. +*/ +#define LUAI_GCMUL 200 /* GC runs 'twice the speed' of memory allocation */ + + + +/* +@@ LUA_COMPAT_GETN controls compatibility with old getn behavior. +** CHANGE it (define it) if you want exact compatibility with the +** behavior of setn/getn in Lua 5.0. +*/ +#undef LUA_COMPAT_GETN + +/* +@@ LUA_COMPAT_LOADLIB controls compatibility about global loadlib. +** CHANGE it to undefined as soon as you do not need a global 'loadlib' +** function (the function is still available as 'package.loadlib'). +*/ +#undef LUA_COMPAT_LOADLIB + +/* +@@ LUA_COMPAT_VARARG controls compatibility with old vararg feature. +** CHANGE it to undefined as soon as your programs use only '...' to +** access vararg parameters (instead of the old 'arg' table). +*/ +#define LUA_COMPAT_VARARG + +/* +@@ LUA_COMPAT_MOD controls compatibility with old math.mod function. +** CHANGE it to undefined as soon as your programs use 'math.fmod' or +** the new '%' operator instead of 'math.mod'. +*/ +#define LUA_COMPAT_MOD + +/* +@@ LUA_COMPAT_LSTR controls compatibility with old long string nesting +@* facility. +** CHANGE it to 2 if you want the old behaviour, or undefine it to turn +** off the advisory error when nesting [[...]]. +*/ +#define LUA_COMPAT_LSTR 1 + +/* +@@ LUA_COMPAT_GFIND controls compatibility with old 'string.gfind' name. +** CHANGE it to undefined as soon as you rename 'string.gfind' to +** 'string.gmatch'. +*/ +#define LUA_COMPAT_GFIND + +/* +@@ LUA_COMPAT_OPENLIB controls compatibility with old 'luaL_openlib' +@* behavior. +** CHANGE it to undefined as soon as you replace to 'luaL_register' +** your uses of 'luaL_openlib' +*/ +#define LUA_COMPAT_OPENLIB + + + +/* +@@ luai_apicheck is the assert macro used by the Lua-C API. +** CHANGE luai_apicheck if you want Lua to perform some checks in the +** parameters it gets from API calls. This may slow down the interpreter +** a bit, but may be quite useful when debugging C code that interfaces +** with Lua. A useful redefinition is to use assert.h. +*/ +#if defined(LUA_USE_APICHECK) +#include +#define luai_apicheck(L,o) { (void)L; assert(o); } +#else +#define luai_apicheck(L,o) { (void)L; } +#endif + + +/* +@@ LUAI_BITSINT defines the number of bits in an int. +** CHANGE here if Lua cannot automatically detect the number of bits of +** your machine. Probably you do not need to change this. +*/ +/* avoid overflows in comparison */ +#if INT_MAX-20 < 32760 +#define LUAI_BITSINT 16 +#elif INT_MAX > 2147483640L +/* int has at least 32 bits */ +#define LUAI_BITSINT 32 +#else +#error "you must define LUA_BITSINT with number of bits in an integer" +#endif + + +/* +@@ LUAI_UINT32 is an unsigned integer with at least 32 bits. +@@ LUAI_INT32 is an signed integer with at least 32 bits. +@@ LUAI_UMEM is an unsigned integer big enough to count the total +@* memory used by Lua. +@@ LUAI_MEM is a signed integer big enough to count the total memory +@* used by Lua. +** CHANGE here if for some weird reason the default definitions are not +** good enough for your machine. (The definitions in the 'else' +** part always works, but may waste space on machines with 64-bit +** longs.) Probably you do not need to change this. +*/ +#if LUAI_BITSINT >= 32 +#define LUAI_UINT32 unsigned int +#define LUAI_INT32 int +#define LUAI_MAXINT32 INT_MAX +#define LUAI_UMEM size_t +#define LUAI_MEM ptrdiff_t +#else +/* 16-bit ints */ +#define LUAI_UINT32 unsigned long +#define LUAI_INT32 long +#define LUAI_MAXINT32 LONG_MAX +#define LUAI_UMEM unsigned long +#define LUAI_MEM long +#endif + + +/* +@@ LUAI_MAXCALLS limits the number of nested calls. +** CHANGE it if you need really deep recursive calls. This limit is +** arbitrary; its only purpose is to stop infinite recursion before +** exhausting memory. +*/ +#define LUAI_MAXCALLS 20000 + + +/* +@@ LUAI_MAXCSTACK limits the number of Lua stack slots that a C function +@* can use. +** CHANGE it if you need lots of (Lua) stack space for your C +** functions. This limit is arbitrary; its only purpose is to stop C +** functions to consume unlimited stack space. +*/ +#define LUAI_MAXCSTACK 2048 + + + +/* +** {================================================================== +** CHANGE (to smaller values) the following definitions if your system +** has a small C stack. (Or you may want to change them to larger +** values if your system has a large C stack and these limits are +** too rigid for you.) Some of these constants control the size of +** stack-allocated arrays used by the compiler or the interpreter, while +** others limit the maximum number of recursive calls that the compiler +** or the interpreter can perform. Values too large may cause a C stack +** overflow for some forms of deep constructs. +** =================================================================== +*/ + + +/* +@@ LUAI_MAXCCALLS is the maximum depth for nested C calls (short) and +@* syntactical nested non-terminals in a program. +*/ +#define LUAI_MAXCCALLS 200 + + +/* +@@ LUAI_MAXVARS is the maximum number of local variables per function +@* (must be smaller than 250). +*/ +#define LUAI_MAXVARS 200 + + +/* +@@ LUAI_MAXUPVALUES is the maximum number of upvalues per function +@* (must be smaller than 250). +*/ +#define LUAI_MAXUPVALUES 60 + + +/* +@@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system. +*/ +#define LUAL_BUFFERSIZE BUFSIZ + +/* }================================================================== */ + + + + +/* +** {================================================================== +@@ LUA_NUMBER is the type of numbers in Lua. +** CHANGE the following definitions only if you want to build Lua +** with a number type different from double. You may also need to +** change lua_number2int & lua_number2integer. +** =================================================================== +*/ + +#define LUA_NUMBER_DOUBLE +#define LUA_NUMBER double + +/* +@@ LUAI_UACNUMBER is the result of an 'usual argument conversion' +@* over a number. +*/ +#define LUAI_UACNUMBER double + + +/* +@@ LUA_NUMBER_SCAN is the format for reading numbers. +@@ LUA_NUMBER_FMT is the format for writing numbers. +@@ lua_number2str converts a number to a string. +@@ LUAI_MAXNUMBER2STR is maximum size of previous conversion. +@@ lua_str2number converts a string to a number. +*/ +#define LUA_NUMBER_SCAN "%lf" +#define LUA_NUMBER_FMT "%.14g" +#define lua_number2str(s,n) snprintf((s), sizeof((s)), LUA_NUMBER_FMT, (n)) +#define LUAI_MAXNUMBER2STR 32 /* 16 digits, sign, point, and \0 */ +#define lua_str2number(s,p) strtod((s), (p)) + + +/* +@@ The luai_num* macros define the primitive operations over numbers. +*/ +#if defined(LUA_CORE) +#include +#define luai_numadd(a,b) ((a)+(b)) +#define luai_numsub(a,b) ((a)-(b)) +#define luai_nummul(a,b) ((a)*(b)) +#define luai_numdiv(a,b) ((a)/(b)) +#define luai_nummod(a,b) ((a) - floor((a)/(b))*(b)) +#define luai_numpow(a,b) (pow(a,b)) +#define luai_numunm(a) (-(a)) +#define luai_numeq(a,b) ((a)==(b)) +#define luai_numlt(a,b) ((a)<(b)) +#define luai_numle(a,b) ((a)<=(b)) +#define luai_numisnan(a) (!luai_numeq((a), (a))) +#endif + + +/* +@@ lua_number2int is a macro to convert lua_Number to int. +@@ lua_number2integer is a macro to convert lua_Number to lua_Integer. +** CHANGE them if you know a faster way to convert a lua_Number to +** int (with any rounding method and without throwing errors) in your +** system. In Pentium machines, a naive typecast from double to int +** in C is extremely slow, so any alternative is worth trying. +*/ + +/* On a Pentium, resort to a trick */ +#if defined(LUA_NUMBER_DOUBLE) && !defined(LUA_ANSI) && !defined(__SSE2__) && \ + (defined(__i386) || defined (_M_IX86) || defined(__i386__)) + +/* On a Microsoft compiler, use assembler */ +#if defined(_MSC_VER) + +#define lua_number2int(i,d) __asm fld d __asm fistp i +#define lua_number2integer(i,n) lua_number2int(i, n) + +/* the next trick should work on any Pentium, but sometimes clashes + with a DirectX idiosyncrasy */ +#else + +union luai_Cast { double l_d; long l_l; }; +#define lua_number2int(i,d) \ + { volatile union luai_Cast u; u.l_d = (d) + 6755399441055744.0; (i) = u.l_l; } +#define lua_number2integer(i,n) lua_number2int(i, n) + +#endif + + +/* this option always works, but may be slow */ +#else +#define lua_number2int(i,d) ((i)=(int)(d)) +#define lua_number2integer(i,d) ((i)=(lua_Integer)(d)) + +#endif + +/* }================================================================== */ + + +/* +@@ LUAI_USER_ALIGNMENT_T is a type that requires maximum alignment. +** CHANGE it if your system requires alignments larger than double. (For +** instance, if your system supports long doubles and they must be +** aligned in 16-byte boundaries, then you should add long double in the +** union.) Probably you do not need to change this. +*/ +#define LUAI_USER_ALIGNMENT_T union { double u; void *s; long l; } + + +/* +@@ LUAI_THROW/LUAI_TRY define how Lua does exception handling. +** CHANGE them if you prefer to use longjmp/setjmp even with C++ +** or if want/don't to use _longjmp/_setjmp instead of regular +** longjmp/setjmp. By default, Lua handles errors with exceptions when +** compiling as C++ code, with _longjmp/_setjmp when asked to use them, +** and with longjmp/setjmp otherwise. +*/ +#if defined(__cplusplus) +/* C++ exceptions */ +#define LUAI_THROW(L,c) throw(c) +#define LUAI_TRY(L,c,a) try { a } catch(...) \ + { if ((c)->status == 0) (c)->status = -1; } +#define luai_jmpbuf int /* dummy variable */ + +#elif defined(LUA_USE_ULONGJMP) +/* in Unix, try _longjmp/_setjmp (more efficient) */ +#define LUAI_THROW(L,c) _longjmp((c)->b, 1) +#define LUAI_TRY(L,c,a) if (_setjmp((c)->b) == 0) { a } +#define luai_jmpbuf jmp_buf + +#else +/* default handling with long jumps */ +#define LUAI_THROW(L,c) longjmp((c)->b, 1) +#define LUAI_TRY(L,c,a) if (setjmp((c)->b) == 0) { a } +#define luai_jmpbuf jmp_buf + +#endif + + +/* +@@ LUA_MAXCAPTURES is the maximum number of captures that a pattern +@* can do during pattern-matching. +** CHANGE it if you need more captures. This limit is arbitrary. +*/ +#define LUA_MAXCAPTURES 32 + + +/* +@@ lua_tmpnam is the function that the OS library uses to create a +@* temporary name. +@@ LUA_TMPNAMBUFSIZE is the maximum size of a name created by lua_tmpnam. +** CHANGE them if you have an alternative to tmpnam (which is considered +** insecure) or if you want the original tmpnam anyway. By default, Lua +** uses tmpnam except when POSIX is available, where it uses mkstemp. +*/ +#if defined(loslib_c) || defined(luaall_c) + +#if defined(LUA_USE_MKSTEMP) +#include +#define LUA_TMPNAMBUFSIZE 32 +#define lua_tmpnam(b,e) { \ + strlcpy(b, "/tmp/lua_XXXXXX", sizeof(b)); \ + e = mkstemp(b); \ + if (e != -1) close(e); \ + e = (e == -1); } + +#else +#define LUA_TMPNAMBUFSIZE L_tmpnam +#define lua_tmpnam(b,e) { e = (tmpnam(b) == NULL); } +#endif + +#endif + + +/* +@@ lua_popen spawns a new process connected to the current one through +@* the file streams. +** CHANGE it if you have a way to implement it in your system. +*/ +#if defined(LUA_USE_POPEN) + +#define lua_popen(L,c,m) ((void)L, popen(c,m)) +#define lua_pclose(L,file) ((void)L, (pclose(file) != -1)) + +#elif defined(LUA_WIN) + +#define lua_popen(L,c,m) ((void)L, _popen(c,m)) +#define lua_pclose(L,file) ((void)L, (_pclose(file) != -1)) + +#else + +#define lua_popen(L,c,m) ((void)((void)c, m), \ + luaL_error(L, LUA_QL("popen") " not supported"), (FILE*)0) +#define lua_pclose(L,file) ((void)((void)L, file), 0) + +#endif + +/* +@@ LUA_DL_* define which dynamic-library system Lua should use. +** CHANGE here if Lua has problems choosing the appropriate +** dynamic-library system for your platform (either Windows' DLL, Mac's +** dyld, or Unix's dlopen). If your system is some kind of Unix, there +** is a good chance that it has dlopen, so LUA_DL_DLOPEN will work for +** it. To use dlopen you also need to adapt the src/Makefile (probably +** adding -ldl to the linker options), so Lua does not select it +** automatically. (When you change the makefile to add -ldl, you must +** also add -DLUA_USE_DLOPEN.) +** If you do not want any kind of dynamic library, undefine all these +** options. +** By default, _WIN32 gets LUA_DL_DLL and MAC OS X gets LUA_DL_DYLD. +*/ +#if defined(LUA_USE_DLOPEN) +#define LUA_DL_DLOPEN +#endif + +#if defined(LUA_WIN) +#define LUA_DL_DLL +#endif + + +/* +@@ LUAI_EXTRASPACE allows you to add user-specific data in a lua_State +@* (the data goes just *before* the lua_State pointer). +** CHANGE (define) this if you really need that. This value must be +** a multiple of the maximum alignment required for your machine. +*/ +#define LUAI_EXTRASPACE 0 + + +/* +@@ luai_userstate* allow user-specific actions on threads. +** CHANGE them if you defined LUAI_EXTRASPACE and need to do something +** extra when a thread is created/deleted/resumed/yielded. +*/ +#define luai_userstateopen(L) ((void)L) +#define luai_userstateclose(L) ((void)L) +#define luai_userstatethread(L,L1) ((void)L) +#define luai_userstatefree(L) ((void)L) +#define luai_userstateresume(L,n) ((void)L) +#define luai_userstateyield(L,n) ((void)L) + + +/* +@@ LUA_INTFRMLEN is the length modifier for integer conversions +@* in 'string.format'. +@@ LUA_INTFRM_T is the integer type correspoding to the previous length +@* modifier. +** CHANGE them if your system supports long long or does not support long. +*/ + +#if defined(LUA_USELONGLONG) + +#define LUA_INTFRMLEN "ll" +#define LUA_INTFRM_T long long + +#else + +#define LUA_INTFRMLEN "l" +#define LUA_INTFRM_T long + +#endif + + + +/* =================================================================== */ + +/* +** Local configuration. You can use this space to add your redefinitions +** without modifying the main part of the file. +*/ + + + +#endif + diff --git a/lib/lua/src/lualib.h b/lib/lua/src/lualib.h new file mode 100644 index 0000000..0c76232 --- /dev/null +++ b/lib/lua/src/lualib.h @@ -0,0 +1,53 @@ +/* +** $Id: lualib.h,v 1.36 2005/12/27 17:12:00 roberto Exp $ +** Lua standard libraries +** See Copyright Notice in lua.h +*/ + + +#ifndef lualib_h +#define lualib_h + +#include "lua.h" + + +/* Key to file-handle type */ +#define LUA_FILEHANDLE "FILE*" + + +#define LUA_COLIBNAME "coroutine" +LUALIB_API int (luaopen_base) (lua_State *L); + +#define LUA_TABLIBNAME "table" +LUALIB_API int (luaopen_table) (lua_State *L); + +#define LUA_IOLIBNAME "io" +LUALIB_API int (luaopen_io) (lua_State *L); + +#define LUA_OSLIBNAME "os" +LUALIB_API int (luaopen_os) (lua_State *L); + +#define LUA_STRLIBNAME "string" +LUALIB_API int (luaopen_string) (lua_State *L); + +#define LUA_MATHLIBNAME "math" +LUALIB_API int (luaopen_math) (lua_State *L); + +#define LUA_DBLIBNAME "debug" +LUALIB_API int (luaopen_debug) (lua_State *L); + +#define LUA_LOADLIBNAME "package" +LUALIB_API int (luaopen_package) (lua_State *L); + + +/* open all previous libraries */ +LUALIB_API void (luaL_openlibs) (lua_State *L); + + + +#ifndef lua_assert +#define lua_assert(x) ((void)0) +#endif + + +#endif diff --git a/lib/lua/src/lundump.c b/lib/lua/src/lundump.c new file mode 100644 index 0000000..7fc635e --- /dev/null +++ b/lib/lua/src/lundump.c @@ -0,0 +1,223 @@ +/* +** $Id: lundump.c,v 1.60 2006/02/16 15:53:49 lhf Exp $ +** load precompiled Lua chunks +** See Copyright Notice in lua.h +*/ + +#include + +#define lundump_c +#define LUA_CORE + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lmem.h" +#include "lobject.h" +#include "lstring.h" +#include "lundump.h" +#include "lzio.h" + +typedef struct { + lua_State* L; + ZIO* Z; + Mbuffer* b; + const char* name; +} LoadState; + +#ifdef LUAC_TRUST_BINARIES +#define IF(c,s) +#else +#define IF(c,s) if (c) error(S,s) + +static void error(LoadState* S, const char* why) +{ + luaO_pushfstring(S->L,"%s: %s in precompiled chunk",S->name,why); + luaD_throw(S->L,LUA_ERRSYNTAX); +} +#endif + +#define LoadMem(S,b,n,size) LoadBlock(S,b,(n)*(size)) +#define LoadByte(S) (lu_byte)LoadChar(S) +#define LoadVar(S,x) LoadMem(S,&x,1,sizeof(x)) +#define LoadVector(S,b,n,size) LoadMem(S,b,n,size) + +static void LoadBlock(LoadState* S, void* b, size_t size) +{ + size_t r=luaZ_read(S->Z,b,size); + IF (r!=0, "unexpected end"); +} + +static int LoadChar(LoadState* S) +{ + char x; + LoadVar(S,x); + return x; +} + +static int LoadInt(LoadState* S) +{ + int x; + LoadVar(S,x); + IF (x<0, "bad integer"); + return x; +} + +static lua_Number LoadNumber(LoadState* S) +{ + lua_Number x; + LoadVar(S,x); + return x; +} + +static TString* LoadString(LoadState* S) +{ + size_t size; + LoadVar(S,size); + if (size==0) + return NULL; + else + { + char* s=luaZ_openspace(S->L,S->b,size); + LoadBlock(S,s,size); + return luaS_newlstr(S->L,s,size-1); /* remove trailing '\0' */ + } +} + +static void LoadCode(LoadState* S, Proto* f) +{ + int n=LoadInt(S); + f->code=luaM_newvector(S->L,n,Instruction); + f->sizecode=n; + LoadVector(S,f->code,n,sizeof(Instruction)); +} + +static Proto* LoadFunction(LoadState* S, TString* p); + +static void LoadConstants(LoadState* S, Proto* f) +{ + int i,n; + n=LoadInt(S); + f->k=luaM_newvector(S->L,n,TValue); + f->sizek=n; + for (i=0; ik[i]); + for (i=0; ik[i]; + int t=LoadChar(S); + switch (t) + { + case LUA_TNIL: + setnilvalue(o); + break; + case LUA_TBOOLEAN: + setbvalue(o,LoadChar(S)); + break; + case LUA_TNUMBER: + setnvalue(o,LoadNumber(S)); + break; + case LUA_TSTRING: + setsvalue2n(S->L,o,LoadString(S)); + break; + default: + IF (1, "bad constant"); + break; + } + } + n=LoadInt(S); + f->p=luaM_newvector(S->L,n,Proto*); + f->sizep=n; + for (i=0; ip[i]=NULL; + for (i=0; ip[i]=LoadFunction(S,f->source); +} + +static void LoadDebug(LoadState* S, Proto* f) +{ + int i,n; + n=LoadInt(S); + f->lineinfo=luaM_newvector(S->L,n,int); + f->sizelineinfo=n; + LoadVector(S,f->lineinfo,n,sizeof(int)); + n=LoadInt(S); + f->locvars=luaM_newvector(S->L,n,LocVar); + f->sizelocvars=n; + for (i=0; ilocvars[i].varname=NULL; + for (i=0; ilocvars[i].varname=LoadString(S); + f->locvars[i].startpc=LoadInt(S); + f->locvars[i].endpc=LoadInt(S); + } + n=LoadInt(S); + f->upvalues=luaM_newvector(S->L,n,TString*); + f->sizeupvalues=n; + for (i=0; iupvalues[i]=NULL; + for (i=0; iupvalues[i]=LoadString(S); +} + +static Proto* LoadFunction(LoadState* S, TString* p) +{ + Proto* f=luaF_newproto(S->L); + setptvalue2s(S->L,S->L->top,f); incr_top(S->L); + f->source=LoadString(S); if (f->source==NULL) f->source=p; + f->linedefined=LoadInt(S); + f->lastlinedefined=LoadInt(S); + f->nups=LoadByte(S); + f->numparams=LoadByte(S); + f->is_vararg=LoadByte(S); + f->maxstacksize=LoadByte(S); + LoadCode(S,f); + LoadConstants(S,f); + LoadDebug(S,f); + IF (!luaG_checkcode(f), "bad code"); + S->L->top--; + return f; +} + +static void LoadHeader(LoadState* S) +{ + char h[LUAC_HEADERSIZE]; + char s[LUAC_HEADERSIZE]; + luaU_header(h); + LoadBlock(S,s,LUAC_HEADERSIZE); + IF (memcmp(h,s,LUAC_HEADERSIZE)!=0, "bad header"); +} + +/* +** load precompiled chunk +*/ +Proto* luaU_undump (lua_State* L, ZIO* Z, Mbuffer* buff, const char* name) +{ + LoadState S; + if (*name=='@' || *name=='=') + S.name=name+1; + else if (*name==LUA_SIGNATURE[0]) + S.name="binary string"; + else + S.name=name; + S.L=L; + S.Z=Z; + S.b=buff; + LoadHeader(&S); + return LoadFunction(&S,luaS_newliteral(L,"=?")); +} + +/* +* make header +*/ +void luaU_header (char* h) +{ + int x=1; + memcpy(h,LUA_SIGNATURE,sizeof(LUA_SIGNATURE)-1); + h+=sizeof(LUA_SIGNATURE)-1; + *h++=(char)LUAC_VERSION; + *h++=(char)LUAC_FORMAT; + *h++=(char)*(char*)&x; /* endianness */ + *h++=(char)sizeof(int); + *h++=(char)sizeof(size_t); + *h++=(char)sizeof(Instruction); + *h++=(char)sizeof(lua_Number); + *h++=(char)(((lua_Number)0.5)==0); /* is lua_Number integral? */ +} diff --git a/lib/lua/src/lundump.h b/lib/lua/src/lundump.h new file mode 100644 index 0000000..58cca5d --- /dev/null +++ b/lib/lua/src/lundump.h @@ -0,0 +1,36 @@ +/* +** $Id: lundump.h,v 1.40 2005/11/11 14:03:13 lhf Exp $ +** load precompiled Lua chunks +** See Copyright Notice in lua.h +*/ + +#ifndef lundump_h +#define lundump_h + +#include "lobject.h" +#include "lzio.h" + +/* load one chunk; from lundump.c */ +LUAI_FUNC Proto* luaU_undump (lua_State* L, ZIO* Z, Mbuffer* buff, const char* name); + +/* make header; from lundump.c */ +LUAI_FUNC void luaU_header (char* h); + +/* dump one chunk; from ldump.c */ +LUAI_FUNC int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip); + +#ifdef luac_c +/* print one chunk; from print.c */ +LUAI_FUNC void luaU_print (const Proto* f, int full); +#endif + +/* for header of binary files -- this is Lua 5.1 */ +#define LUAC_VERSION 0x51 + +/* for header of binary files -- this is the official format */ +#define LUAC_FORMAT 0 + +/* size of header of binary files */ +#define LUAC_HEADERSIZE 12 + +#endif diff --git a/lib/lua/src/lvm.c b/lib/lua/src/lvm.c new file mode 100644 index 0000000..08802f4 --- /dev/null +++ b/lib/lua/src/lvm.c @@ -0,0 +1,765 @@ +/* +** $Id: lvm.c,v 2.63a 2006/06/05 15:58:59 roberto Exp $ +** Lua virtual machine +** See Copyright Notice in lua.h +*/ + + +#include +#include +#include + +#define lvm_c +#define LUA_CORE + +#include "lua.h" + +#include "ldebug.h" +#include "ldo.h" +#include "lfunc.h" +#include "lgc.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lstate.h" +#include "lstring.h" +#include "ltable.h" +#include "ltm.h" +#include "lvm.h" + + + +/* limit for table tag-method chains (to avoid loops) */ +#define MAXTAGLOOP 100 + + +const TValue *luaV_tonumber (const TValue *obj, TValue *n) { + lua_Number num; + if (ttisnumber(obj)) return obj; + if (ttisstring(obj) && luaO_str2d(svalue(obj), &num)) { + setnvalue(n, num); + return n; + } + else + return NULL; +} + + +int luaV_tostring (lua_State *L, StkId obj) { + if (!ttisnumber(obj)) + return 0; + else { + char s[LUAI_MAXNUMBER2STR]; + lua_Number n = nvalue(obj); + lua_number2str(s, n); + setsvalue2s(L, obj, luaS_new(L, s)); + return 1; + } +} + + +static void traceexec (lua_State *L, const Instruction *pc) { + lu_byte mask = L->hookmask; + const Instruction *oldpc = L->savedpc; + L->savedpc = pc; + if (mask > LUA_MASKLINE) { /* instruction-hook set? */ + if (L->hookcount == 0) { + resethookcount(L); + luaD_callhook(L, LUA_HOOKCOUNT, -1); + } + } + if (mask & LUA_MASKLINE) { + Proto *p = ci_func(L->ci)->l.p; + int npc = pcRel(pc, p); + int newline = getline(p, npc); + /* call linehook when enter a new function, when jump back (loop), + or when enter a new line */ + if (npc == 0 || pc <= oldpc || newline != getline(p, pcRel(oldpc, p))) + luaD_callhook(L, LUA_HOOKLINE, newline); + } +} + + +static void callTMres (lua_State *L, StkId res, const TValue *f, + const TValue *p1, const TValue *p2) { + ptrdiff_t result = savestack(L, res); + setobj2s(L, L->top, f); /* push function */ + setobj2s(L, L->top+1, p1); /* 1st argument */ + setobj2s(L, L->top+2, p2); /* 2nd argument */ + luaD_checkstack(L, 3); + L->top += 3; + luaD_call(L, L->top - 3, 1); + res = restorestack(L, result); + L->top--; + setobjs2s(L, res, L->top); +} + + + +static void callTM (lua_State *L, const TValue *f, const TValue *p1, + const TValue *p2, const TValue *p3) { + setobj2s(L, L->top, f); /* push function */ + setobj2s(L, L->top+1, p1); /* 1st argument */ + setobj2s(L, L->top+2, p2); /* 2nd argument */ + setobj2s(L, L->top+3, p3); /* 3th argument */ + luaD_checkstack(L, 4); + L->top += 4; + luaD_call(L, L->top - 4, 0); +} + + +void luaV_gettable (lua_State *L, const TValue *t, TValue *key, StkId val) { + int loop; + for (loop = 0; loop < MAXTAGLOOP; loop++) { + const TValue *tm; + if (ttistable(t)) { /* `t' is a table? */ + Table *h = hvalue(t); + const TValue *res = luaH_get(h, key); /* do a primitive get */ + if (!ttisnil(res) || /* result is no nil? */ + (tm = fasttm(L, h->metatable, TM_INDEX)) == NULL) { /* or no TM? */ + setobj2s(L, val, res); + return; + } + /* else will try the tag method */ + } + else if (ttisnil(tm = luaT_gettmbyobj(L, t, TM_INDEX))) + luaG_typeerror(L, t, "index"); + if (ttisfunction(tm)) { + callTMres(L, val, tm, t, key); + return; + } + t = tm; /* else repeat with `tm' */ + } + luaG_runerror(L, "loop in gettable"); +} + + +void luaV_settable (lua_State *L, const TValue *t, TValue *key, StkId val) { + int loop; + for (loop = 0; loop < MAXTAGLOOP; loop++) { + const TValue *tm; + if (ttistable(t)) { /* `t' is a table? */ + Table *h = hvalue(t); + TValue *oldval = luaH_set(L, h, key); /* do a primitive set */ + if (!ttisnil(oldval) || /* result is no nil? */ + (tm = fasttm(L, h->metatable, TM_NEWINDEX)) == NULL) { /* or no TM? */ + setobj2t(L, oldval, val); + luaC_barriert(L, h, val); + return; + } + /* else will try the tag method */ + } + else if (ttisnil(tm = luaT_gettmbyobj(L, t, TM_NEWINDEX))) + luaG_typeerror(L, t, "index"); + if (ttisfunction(tm)) { + callTM(L, tm, t, key, val); + return; + } + t = tm; /* else repeat with `tm' */ + } + luaG_runerror(L, "loop in settable"); +} + + +static int call_binTM (lua_State *L, const TValue *p1, const TValue *p2, + StkId res, TMS event) { + const TValue *tm = luaT_gettmbyobj(L, p1, event); /* try first operand */ + if (ttisnil(tm)) + tm = luaT_gettmbyobj(L, p2, event); /* try second operand */ + if (ttisnil(tm)) return 0; + callTMres(L, res, tm, p1, p2); + return 1; +} + + +static const TValue *get_compTM (lua_State *L, Table *mt1, Table *mt2, + TMS event) { + const TValue *tm1 = fasttm(L, mt1, event); + const TValue *tm2; + if (tm1 == NULL) return NULL; /* no metamethod */ + if (mt1 == mt2) return tm1; /* same metatables => same metamethods */ + tm2 = fasttm(L, mt2, event); + if (tm2 == NULL) return NULL; /* no metamethod */ + if (luaO_rawequalObj(tm1, tm2)) /* same metamethods? */ + return tm1; + return NULL; +} + + +static int call_orderTM (lua_State *L, const TValue *p1, const TValue *p2, + TMS event) { + const TValue *tm1 = luaT_gettmbyobj(L, p1, event); + const TValue *tm2; + if (ttisnil(tm1)) return -1; /* no metamethod? */ + tm2 = luaT_gettmbyobj(L, p2, event); + if (!luaO_rawequalObj(tm1, tm2)) /* different metamethods? */ + return -1; + callTMres(L, L->top, tm1, p1, p2); + return !l_isfalse(L->top); +} + + +static int l_strcmp (const TString *ls, const TString *rs) { + const char *l = getstr(ls); + size_t ll = ls->tsv.len; + const char *r = getstr(rs); + size_t lr = rs->tsv.len; + for (;;) { + int temp = strcoll(l, r); + if (temp != 0) return temp; + else { /* strings are equal up to a `\0' */ + size_t len = strlen(l); /* index of first `\0' in both strings */ + if (len == lr) /* r is finished? */ + return (len == ll) ? 0 : 1; + else if (len == ll) /* l is finished? */ + return -1; /* l is smaller than r (because r is not finished) */ + /* both strings longer than `len'; go on comparing (after the `\0') */ + len++; + l += len; ll -= len; r += len; lr -= len; + } + } +} + + +int luaV_lessthan (lua_State *L, const TValue *l, const TValue *r) { + int res; + if (ttype(l) != ttype(r)) + return luaG_ordererror(L, l, r); + else if (ttisnumber(l)) + return luai_numlt(nvalue(l), nvalue(r)); + else if (ttisstring(l)) + return l_strcmp(rawtsvalue(l), rawtsvalue(r)) < 0; + else if ((res = call_orderTM(L, l, r, TM_LT)) != -1) + return res; + return luaG_ordererror(L, l, r); +} + + +static int lessequal (lua_State *L, const TValue *l, const TValue *r) { + int res; + if (ttype(l) != ttype(r)) + return luaG_ordererror(L, l, r); + else if (ttisnumber(l)) + return luai_numle(nvalue(l), nvalue(r)); + else if (ttisstring(l)) + return l_strcmp(rawtsvalue(l), rawtsvalue(r)) <= 0; + else if ((res = call_orderTM(L, l, r, TM_LE)) != -1) /* first try `le' */ + return res; + else if ((res = call_orderTM(L, r, l, TM_LT)) != -1) /* else try `lt' */ + return !res; + return luaG_ordererror(L, l, r); +} + + +int luaV_equalval (lua_State *L, const TValue *t1, const TValue *t2) { + const TValue *tm; + lua_assert(ttype(t1) == ttype(t2)); + switch (ttype(t1)) { + case LUA_TNIL: return 1; + case LUA_TNUMBER: return luai_numeq(nvalue(t1), nvalue(t2)); + case LUA_TBOOLEAN: return bvalue(t1) == bvalue(t2); /* true must be 1 !! */ + case LUA_TLIGHTUSERDATA: return pvalue(t1) == pvalue(t2); + case LUA_TUSERDATA: { + if (uvalue(t1) == uvalue(t2)) return 1; + tm = get_compTM(L, uvalue(t1)->metatable, uvalue(t2)->metatable, + TM_EQ); + break; /* will try TM */ + } + case LUA_TTABLE: { + if (hvalue(t1) == hvalue(t2)) return 1; + tm = get_compTM(L, hvalue(t1)->metatable, hvalue(t2)->metatable, TM_EQ); + break; /* will try TM */ + } + default: return gcvalue(t1) == gcvalue(t2); + } + if (tm == NULL) return 0; /* no TM? */ + callTMres(L, L->top, tm, t1, t2); /* call TM */ + return !l_isfalse(L->top); +} + + +void luaV_concat (lua_State *L, int total, int last) { + do { + StkId top = L->base + last + 1; + int n = 2; /* number of elements handled in this pass (at least 2) */ + if (!(ttisstring(top-2) || ttisnumber(top-2)) || !tostring(L, top-1)) { + if (!call_binTM(L, top-2, top-1, top-2, TM_CONCAT)) + luaG_concaterror(L, top-2, top-1); + } else if (tsvalue(top-1)->len == 0) /* second op is empty? */ + (void)tostring(L, top - 2); /* result is first op (as string) */ + else { + /* at least two string values; get as many as possible */ + size_t tl = tsvalue(top-1)->len; + char *buffer; + int i; + /* collect total length */ + for (n = 1; n < total && tostring(L, top-n-1); n++) { + size_t l = tsvalue(top-n-1)->len; + if (l >= MAX_SIZET - tl) luaG_runerror(L, "string length overflow"); + tl += l; + } + buffer = luaZ_openspace(L, &G(L)->buff, tl); + tl = 0; + for (i=n; i>0; i--) { /* concat all strings */ + size_t l = tsvalue(top-i)->len; + memcpy(buffer+tl, svalue(top-i), l); + tl += l; + } + setsvalue2s(L, top-n, luaS_newlstr(L, buffer, tl)); + } + total -= n-1; /* got `n' strings to create 1 new */ + last -= n-1; + } while (total > 1); /* repeat until only 1 result left */ +} + + +static void Arith (lua_State *L, StkId ra, const TValue *rb, + const TValue *rc, TMS op) { + TValue tempb, tempc; + const TValue *b, *c; + if ((b = luaV_tonumber(rb, &tempb)) != NULL && + (c = luaV_tonumber(rc, &tempc)) != NULL) { + lua_Number nb = nvalue(b), nc = nvalue(c); + switch (op) { + case TM_ADD: setnvalue(ra, luai_numadd(nb, nc)); break; + case TM_SUB: setnvalue(ra, luai_numsub(nb, nc)); break; + case TM_MUL: setnvalue(ra, luai_nummul(nb, nc)); break; + case TM_DIV: setnvalue(ra, luai_numdiv(nb, nc)); break; + case TM_MOD: setnvalue(ra, luai_nummod(nb, nc)); break; + case TM_POW: setnvalue(ra, luai_numpow(nb, nc)); break; + case TM_UNM: setnvalue(ra, luai_numunm(nb)); break; + default: lua_assert(0); break; + } + } + else if (!call_binTM(L, rb, rc, ra, op)) + luaG_aritherror(L, rb, rc); +} + + + +/* +** some macros for common tasks in `luaV_execute' +*/ + +#define runtime_check(L, c) { if (!(c)) break; } + +#define RA(i) (base+GETARG_A(i)) +/* to be used after possible stack reallocation */ +#define RB(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgR, base+GETARG_B(i)) +#define RC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgR, base+GETARG_C(i)) +#define RKB(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgK, \ + ISK(GETARG_B(i)) ? k+INDEXK(GETARG_B(i)) : base+GETARG_B(i)) +#define RKC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgK, \ + ISK(GETARG_C(i)) ? k+INDEXK(GETARG_C(i)) : base+GETARG_C(i)) +#define KBx(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgK, k+GETARG_Bx(i)) + + +#define dojump(L,pc,i) {(pc) += (i); luai_threadyield(L);} + + +#define Protect(x) { L->savedpc = pc; {x;}; base = L->base; } + + +#define arith_op(op,tm) { \ + TValue *rb = RKB(i); \ + TValue *rc = RKC(i); \ + if (ttisnumber(rb) && ttisnumber(rc)) { \ + lua_Number nb = nvalue(rb), nc = nvalue(rc); \ + setnvalue(ra, op(nb, nc)); \ + } \ + else \ + Protect(Arith(L, ra, rb, rc, tm)); \ + } + + + +void luaV_execute (lua_State *L, int nexeccalls) { + LClosure *cl; + StkId base; + TValue *k; + const Instruction *pc; + reentry: /* entry point */ + lua_assert(isLua(L->ci)); + pc = L->savedpc; + cl = &clvalue(L->ci->func)->l; + base = L->base; + k = cl->p->k; + /* main loop of interpreter */ + for (;;) { + const Instruction i = *pc++; + StkId ra; + if ((L->hookmask & (LUA_MASKLINE | LUA_MASKCOUNT)) && + (--L->hookcount == 0 || L->hookmask & LUA_MASKLINE)) { + traceexec(L, pc); + if (L->status == LUA_YIELD) { /* did hook yield? */ + L->savedpc = pc - 1; + return; + } + base = L->base; + } + /* warning!! several calls may realloc the stack and invalidate `ra' */ + ra = RA(i); + lua_assert(base == L->base && L->base == L->ci->base); + lua_assert(base <= L->top && L->top <= L->stack + L->stacksize); + lua_assert(L->top == L->ci->top || luaG_checkopenop(i)); + switch (GET_OPCODE(i)) { + case OP_MOVE: { + setobjs2s(L, ra, RB(i)); + continue; + } + case OP_LOADK: { + setobj2s(L, ra, KBx(i)); + continue; + } + case OP_LOADBOOL: { + setbvalue(ra, GETARG_B(i)); + if (GETARG_C(i)) pc++; /* skip next instruction (if C) */ + continue; + } + case OP_LOADNIL: { + TValue *rb = RB(i); + do { + setnilvalue(rb--); + } while (rb >= ra); + continue; + } + case OP_GETUPVAL: { + int b = GETARG_B(i); + setobj2s(L, ra, cl->upvals[b]->v); + continue; + } + case OP_GETGLOBAL: { + TValue g; + TValue *rb = KBx(i); + sethvalue(L, &g, cl->env); + lua_assert(ttisstring(rb)); + Protect(luaV_gettable(L, &g, rb, ra)); + continue; + } + case OP_GETTABLE: { + Protect(luaV_gettable(L, RB(i), RKC(i), ra)); + continue; + } + case OP_SETGLOBAL: { + TValue g; + sethvalue(L, &g, cl->env); + lua_assert(ttisstring(KBx(i))); + Protect(luaV_settable(L, &g, KBx(i), ra)); + continue; + } + case OP_SETUPVAL: { + UpVal *uv = cl->upvals[GETARG_B(i)]; + setobj(L, uv->v, ra); + luaC_barrier(L, uv, ra); + continue; + } + case OP_SETTABLE: { + Protect(luaV_settable(L, ra, RKB(i), RKC(i))); + continue; + } + case OP_NEWTABLE: { + int b = GETARG_B(i); + int c = GETARG_C(i); + sethvalue(L, ra, luaH_new(L, luaO_fb2int(b), luaO_fb2int(c))); + Protect(luaC_checkGC(L)); + continue; + } + case OP_SELF: { + StkId rb = RB(i); + setobjs2s(L, ra+1, rb); + Protect(luaV_gettable(L, rb, RKC(i), ra)); + continue; + } + case OP_ADD: { + arith_op(luai_numadd, TM_ADD); + continue; + } + case OP_SUB: { + arith_op(luai_numsub, TM_SUB); + continue; + } + case OP_MUL: { + arith_op(luai_nummul, TM_MUL); + continue; + } + case OP_DIV: { + arith_op(luai_numdiv, TM_DIV); + continue; + } + case OP_MOD: { + arith_op(luai_nummod, TM_MOD); + continue; + } + case OP_POW: { + arith_op(luai_numpow, TM_POW); + continue; + } + case OP_UNM: { + TValue *rb = RB(i); + if (ttisnumber(rb)) { + lua_Number nb = nvalue(rb); + setnvalue(ra, luai_numunm(nb)); + } + else { + Protect(Arith(L, ra, rb, rb, TM_UNM)); + } + continue; + } + case OP_NOT: { + int res = l_isfalse(RB(i)); /* next assignment may change this value */ + setbvalue(ra, res); + continue; + } + case OP_LEN: { + const TValue *rb = RB(i); + switch (ttype(rb)) { + case LUA_TTABLE: { + setnvalue(ra, cast_num(luaH_getn(hvalue(rb)))); + break; + } + case LUA_TSTRING: { + setnvalue(ra, cast_num(tsvalue(rb)->len)); + break; + } + default: { /* try metamethod */ + Protect( + if (!call_binTM(L, rb, luaO_nilobject, ra, TM_LEN)) + luaG_typeerror(L, rb, "get length of"); + ) + } + } + continue; + } + case OP_CONCAT: { + int b = GETARG_B(i); + int c = GETARG_C(i); + Protect(luaV_concat(L, c-b+1, c); luaC_checkGC(L)); + setobjs2s(L, RA(i), base+b); + continue; + } + case OP_JMP: { + dojump(L, pc, GETARG_sBx(i)); + continue; + } + case OP_EQ: { + TValue *rb = RKB(i); + TValue *rc = RKC(i); + Protect( + if (equalobj(L, rb, rc) == GETARG_A(i)) + dojump(L, pc, GETARG_sBx(*pc)); + ) + pc++; + continue; + } + case OP_LT: { + Protect( + if (luaV_lessthan(L, RKB(i), RKC(i)) == GETARG_A(i)) + dojump(L, pc, GETARG_sBx(*pc)); + ) + pc++; + continue; + } + case OP_LE: { + Protect( + if (lessequal(L, RKB(i), RKC(i)) == GETARG_A(i)) + dojump(L, pc, GETARG_sBx(*pc)); + ) + pc++; + continue; + } + case OP_TEST: { + if (l_isfalse(ra) != GETARG_C(i)) + dojump(L, pc, GETARG_sBx(*pc)); + pc++; + continue; + } + case OP_TESTSET: { + TValue *rb = RB(i); + if (l_isfalse(rb) != GETARG_C(i)) { + setobjs2s(L, ra, rb); + dojump(L, pc, GETARG_sBx(*pc)); + } + pc++; + continue; + } + case OP_CALL: { + int b = GETARG_B(i); + int nresults = GETARG_C(i) - 1; + if (b != 0) L->top = ra+b; /* else previous instruction set top */ + L->savedpc = pc; + switch (luaD_precall(L, ra, nresults)) { + case PCRLUA: { + nexeccalls++; + goto reentry; /* restart luaV_execute over new Lua function */ + } + case PCRC: { + /* it was a C function (`precall' called it); adjust results */ + if (nresults >= 0) L->top = L->ci->top; + base = L->base; + continue; + } + default: { + return; /* yield */ + } + } + } + case OP_TAILCALL: { + int b = GETARG_B(i); + if (b != 0) L->top = ra+b; /* else previous instruction set top */ + L->savedpc = pc; + lua_assert(GETARG_C(i) - 1 == LUA_MULTRET); + switch (luaD_precall(L, ra, LUA_MULTRET)) { + case PCRLUA: { + /* tail call: put new frame in place of previous one */ + CallInfo *ci = L->ci - 1; /* previous frame */ + int aux; + StkId func = ci->func; + StkId pfunc = (ci+1)->func; /* previous function index */ + if (L->openupval) luaF_close(L, ci->base); + L->base = ci->base = ci->func + ((ci+1)->base - pfunc); + for (aux = 0; pfunc+aux < L->top; aux++) /* move frame down */ + setobjs2s(L, func+aux, pfunc+aux); + ci->top = L->top = func+aux; /* correct top */ + lua_assert(L->top == L->base + clvalue(func)->l.p->maxstacksize); + ci->savedpc = L->savedpc; + ci->tailcalls++; /* one more call lost */ + L->ci--; /* remove new frame */ + goto reentry; + } + case PCRC: { /* it was a C function (`precall' called it) */ + base = L->base; + continue; + } + default: { + return; /* yield */ + } + } + } + case OP_RETURN: { + int b = GETARG_B(i); + if (b != 0) L->top = ra+b-1; + if (L->openupval) luaF_close(L, base); + L->savedpc = pc; + b = luaD_poscall(L, ra); + if (--nexeccalls == 0) /* was previous function running `here'? */ + return; /* no: return */ + else { /* yes: continue its execution */ + if (b) L->top = L->ci->top; + lua_assert(isLua(L->ci)); + lua_assert(GET_OPCODE(*((L->ci)->savedpc - 1)) == OP_CALL); + goto reentry; + } + } + case OP_FORLOOP: { + lua_Number step = nvalue(ra+2); + lua_Number idx = luai_numadd(nvalue(ra), step); /* increment index */ + lua_Number limit = nvalue(ra+1); + if (luai_numlt(0, step) ? luai_numle(idx, limit) + : luai_numle(limit, idx)) { + dojump(L, pc, GETARG_sBx(i)); /* jump back */ + setnvalue(ra, idx); /* update internal index... */ + setnvalue(ra+3, idx); /* ...and external index */ + } + continue; + } + case OP_FORPREP: { + const TValue *init = ra; + const TValue *plimit = ra+1; + const TValue *pstep = ra+2; + L->savedpc = pc; /* next steps may throw errors */ + if (!tonumber(init, ra)) + luaG_runerror(L, LUA_QL("for") " initial value must be a number"); + else if (!tonumber(plimit, ra+1)) + luaG_runerror(L, LUA_QL("for") " limit must be a number"); + else if (!tonumber(pstep, ra+2)) + luaG_runerror(L, LUA_QL("for") " step must be a number"); + setnvalue(ra, luai_numsub(nvalue(ra), nvalue(pstep))); + dojump(L, pc, GETARG_sBx(i)); + continue; + } + case OP_TFORLOOP: { + StkId cb = ra + 3; /* call base */ + setobjs2s(L, cb+2, ra+2); + setobjs2s(L, cb+1, ra+1); + setobjs2s(L, cb, ra); + L->top = cb+3; /* func. + 2 args (state and index) */ + Protect(luaD_call(L, cb, GETARG_C(i))); + L->top = L->ci->top; + cb = RA(i) + 3; /* previous call may change the stack */ + if (!ttisnil(cb)) { /* continue loop? */ + setobjs2s(L, cb-1, cb); /* save control variable */ + dojump(L, pc, GETARG_sBx(*pc)); /* jump back */ + } + pc++; + continue; + } + case OP_SETLIST: { + int n = GETARG_B(i); + int c = GETARG_C(i); + int last; + Table *h; + if (n == 0) { + n = cast_int(L->top - ra) - 1; + L->top = L->ci->top; + } + if (c == 0) c = cast_int(*pc++); + runtime_check(L, ttistable(ra)); + h = hvalue(ra); + last = ((c-1)*LFIELDS_PER_FLUSH) + n; + if (last > h->sizearray) /* needs more space? */ + luaH_resizearray(L, h, last); /* pre-alloc it at once */ + for (; n > 0; n--) { + TValue *val = ra+n; + setobj2t(L, luaH_setnum(L, h, last--), val); + luaC_barriert(L, h, val); + } + continue; + } + case OP_CLOSE: { + luaF_close(L, ra); + continue; + } + case OP_CLOSURE: { + Proto *p; + Closure *ncl; + int nup, j; + p = cl->p->p[GETARG_Bx(i)]; + nup = p->nups; + ncl = luaF_newLclosure(L, nup, cl->env); + ncl->l.p = p; + for (j=0; jl.upvals[j] = cl->upvals[GETARG_B(*pc)]; + else { + lua_assert(GET_OPCODE(*pc) == OP_MOVE); + ncl->l.upvals[j] = luaF_findupval(L, base + GETARG_B(*pc)); + } + } + setclvalue(L, ra, ncl); + Protect(luaC_checkGC(L)); + continue; + } + case OP_VARARG: { + int b = GETARG_B(i) - 1; + int j; + CallInfo *ci = L->ci; + int n = cast_int(ci->base - ci->func) - cl->p->numparams - 1; + if (b == LUA_MULTRET) { + Protect(luaD_checkstack(L, n)); + ra = RA(i); /* previous call may change the stack */ + b = n; + L->top = ra + n; + } + for (j = 0; j < b; j++) { + if (j < n) { + setobjs2s(L, ra + j, ci->base - n + j); + } + else { + setnilvalue(ra + j); + } + } + continue; + } + } + } +} + diff --git a/lib/lua/src/lvm.h b/lib/lua/src/lvm.h new file mode 100644 index 0000000..788423f --- /dev/null +++ b/lib/lua/src/lvm.h @@ -0,0 +1,36 @@ +/* +** $Id: lvm.h,v 2.5 2005/08/22 18:54:49 roberto Exp $ +** Lua virtual machine +** See Copyright Notice in lua.h +*/ + +#ifndef lvm_h +#define lvm_h + + +#include "ldo.h" +#include "lobject.h" +#include "ltm.h" + + +#define tostring(L,o) ((ttype(o) == LUA_TSTRING) || (luaV_tostring(L, o))) + +#define tonumber(o,n) (ttype(o) == LUA_TNUMBER || \ + (((o) = luaV_tonumber(o,n)) != NULL)) + +#define equalobj(L,o1,o2) \ + (ttype(o1) == ttype(o2) && luaV_equalval(L, o1, o2)) + + +LUAI_FUNC int luaV_lessthan (lua_State *L, const TValue *l, const TValue *r); +LUAI_FUNC int luaV_equalval (lua_State *L, const TValue *t1, const TValue *t2); +LUAI_FUNC const TValue *luaV_tonumber (const TValue *obj, TValue *n); +LUAI_FUNC int luaV_tostring (lua_State *L, StkId obj); +LUAI_FUNC void luaV_gettable (lua_State *L, const TValue *t, TValue *key, + StkId val); +LUAI_FUNC void luaV_settable (lua_State *L, const TValue *t, TValue *key, + StkId val); +LUAI_FUNC void luaV_execute (lua_State *L, int nexeccalls); +LUAI_FUNC void luaV_concat (lua_State *L, int total, int last); + +#endif diff --git a/lib/lua/src/lzio.c b/lib/lua/src/lzio.c new file mode 100644 index 0000000..5121ada --- /dev/null +++ b/lib/lua/src/lzio.c @@ -0,0 +1,82 @@ +/* +** $Id: lzio.c,v 1.31 2005/06/03 20:15:29 roberto Exp $ +** a generic input stream interface +** See Copyright Notice in lua.h +*/ + + +#include + +#define lzio_c +#define LUA_CORE + +#include "lua.h" + +#include "llimits.h" +#include "lmem.h" +#include "lstate.h" +#include "lzio.h" + + +int luaZ_fill (ZIO *z) { + size_t size; + lua_State *L = z->L; + const char *buff; + lua_unlock(L); + buff = z->reader(L, z->data, &size); + lua_lock(L); + if (buff == NULL || size == 0) return EOZ; + z->n = size - 1; + z->p = buff; + return char2int(*(z->p++)); +} + + +int luaZ_lookahead (ZIO *z) { + if (z->n == 0) { + if (luaZ_fill(z) == EOZ) + return EOZ; + else { + z->n++; /* luaZ_fill removed first byte; put back it */ + z->p--; + } + } + return char2int(*z->p); +} + + +void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader, void *data) { + z->L = L; + z->reader = reader; + z->data = data; + z->n = 0; + z->p = NULL; +} + + +/* --------------------------------------------------------------- read --- */ +size_t luaZ_read (ZIO *z, void *b, size_t n) { + while (n) { + size_t m; + if (luaZ_lookahead(z) == EOZ) + return n; /* return number of missing bytes */ + m = (n <= z->n) ? n : z->n; /* min. between n and z->n */ + memcpy(b, z->p, m); + z->n -= m; + z->p += m; + b = (char *)b + m; + n -= m; + } + return 0; +} + +/* ------------------------------------------------------------------------ */ +char *luaZ_openspace (lua_State *L, Mbuffer *buff, size_t n) { + if (n > buff->buffsize) { + if (n < LUA_MINBUFFER) n = LUA_MINBUFFER; + luaZ_resizebuffer(L, buff, n); + } + return buff->buffer; +} + + diff --git a/lib/lua/src/lzio.h b/lib/lua/src/lzio.h new file mode 100644 index 0000000..8f403b8 --- /dev/null +++ b/lib/lua/src/lzio.h @@ -0,0 +1,67 @@ +/* +** $Id: lzio.h,v 1.21 2005/05/17 19:49:15 roberto Exp $ +** Buffered streams +** See Copyright Notice in lua.h +*/ + + +#ifndef lzio_h +#define lzio_h + +#include "lua.h" + +#include "lmem.h" + + +#define EOZ (-1) /* end of stream */ + +typedef struct Zio ZIO; + +#define char2int(c) cast(int, cast(unsigned char, (c))) + +#define zgetc(z) (((z)->n--)>0 ? char2int(*(z)->p++) : luaZ_fill(z)) + +typedef struct Mbuffer { + char *buffer; + size_t n; + size_t buffsize; +} Mbuffer; + +#define luaZ_initbuffer(L, buff) ((buff)->buffer = NULL, (buff)->buffsize = 0) + +#define luaZ_buffer(buff) ((buff)->buffer) +#define luaZ_sizebuffer(buff) ((buff)->buffsize) +#define luaZ_bufflen(buff) ((buff)->n) + +#define luaZ_resetbuffer(buff) ((buff)->n = 0) + + +#define luaZ_resizebuffer(L, buff, size) \ + (luaM_reallocvector(L, (buff)->buffer, (buff)->buffsize, size, char), \ + (buff)->buffsize = size) + +#define luaZ_freebuffer(L, buff) luaZ_resizebuffer(L, buff, 0) + + +LUAI_FUNC char *luaZ_openspace (lua_State *L, Mbuffer *buff, size_t n); +LUAI_FUNC void luaZ_init (lua_State *L, ZIO *z, lua_Reader reader, + void *data); +LUAI_FUNC size_t luaZ_read (ZIO* z, void* b, size_t n); /* read next n bytes */ +LUAI_FUNC int luaZ_lookahead (ZIO *z); + + + +/* --------- Private Part ------------------ */ + +struct Zio { + size_t n; /* bytes still unread */ + const char *p; /* current position in buffer */ + lua_Reader reader; + void* data; /* additional data */ + lua_State *L; /* Lua state (for reader) */ +}; + + +LUAI_FUNC int luaZ_fill (ZIO *z); + +#endif diff --git a/lib/lua/src/print.c b/lib/lua/src/print.c new file mode 100644 index 0000000..e240cfc --- /dev/null +++ b/lib/lua/src/print.c @@ -0,0 +1,227 @@ +/* +** $Id: print.c,v 1.55a 2006/05/31 13:30:05 lhf Exp $ +** print bytecodes +** See Copyright Notice in lua.h +*/ + +#include +#include + +#define luac_c +#define LUA_CORE + +#include "ldebug.h" +#include "lobject.h" +#include "lopcodes.h" +#include "lundump.h" + +#define PrintFunction luaU_print + +#define Sizeof(x) ((int)sizeof(x)) +#define VOID(p) ((const void*)(p)) + +static void PrintString(const TString* ts) +{ + const char* s=getstr(ts); + size_t i,n=ts->tsv.len; + putchar('"'); + for (i=0; ik[i]; + switch (ttype(o)) + { + case LUA_TNIL: + printf("nil"); + break; + case LUA_TBOOLEAN: + printf(bvalue(o) ? "true" : "false"); + break; + case LUA_TNUMBER: + printf(LUA_NUMBER_FMT,nvalue(o)); + break; + case LUA_TSTRING: + PrintString(rawtsvalue(o)); + break; + default: /* cannot happen */ + printf("? type=%d",ttype(o)); + break; + } +} + +static void PrintCode(const Proto* f) +{ + const Instruction* code=f->code; + int pc,n=f->sizecode; + for (pc=0; pc0) printf("[%d]\t",line); else printf("[-]\t"); + printf("%-9s\t",luaP_opnames[o]); + switch (getOpMode(o)) + { + case iABC: + printf("%d",a); + if (getBMode(o)!=OpArgN) printf(" %d",ISK(b) ? (-1-INDEXK(b)) : b); + if (getCMode(o)!=OpArgN) printf(" %d",ISK(c) ? (-1-INDEXK(c)) : c); + break; + case iABx: + if (getBMode(o)==OpArgK) printf("%d %d",a,-1-bx); else printf("%d %d",a,bx); + break; + case iAsBx: + if (o==OP_JMP) printf("%d",sbx); else printf("%d %d",a,sbx); + break; + } + switch (o) + { + case OP_LOADK: + printf("\t; "); PrintConstant(f,bx); + break; + case OP_GETUPVAL: + case OP_SETUPVAL: + printf("\t; %s", (f->sizeupvalues>0) ? getstr(f->upvalues[b]) : "-"); + break; + case OP_GETGLOBAL: + case OP_SETGLOBAL: + printf("\t; %s",svalue(&f->k[bx])); + break; + case OP_GETTABLE: + case OP_SELF: + if (ISK(c)) { printf("\t; "); PrintConstant(f,INDEXK(c)); } + break; + case OP_SETTABLE: + case OP_ADD: + case OP_SUB: + case OP_MUL: + case OP_DIV: + case OP_POW: + case OP_EQ: + case OP_LT: + case OP_LE: + if (ISK(b) || ISK(c)) + { + printf("\t; "); + if (ISK(b)) PrintConstant(f,INDEXK(b)); else printf("-"); + printf(" "); + if (ISK(c)) PrintConstant(f,INDEXK(c)); else printf("-"); + } + break; + case OP_JMP: + case OP_FORLOOP: + case OP_FORPREP: + printf("\t; to %d",sbx+pc+2); + break; + case OP_CLOSURE: + printf("\t; %p",VOID(f->p[bx])); + break; + case OP_SETLIST: + if (c==0) printf("\t; %d",(int)code[++pc]); + else printf("\t; %d",c); + break; + default: + break; + } + printf("\n"); + } +} + +#define SS(x) (x==1)?"":"s" +#define S(x) x,SS(x) + +static void PrintHeader(const Proto* f) +{ + const char* s=getstr(f->source); + if (*s=='@' || *s=='=') + s++; + else if (*s==LUA_SIGNATURE[0]) + s="(bstring)"; + else + s="(string)"; + printf("\n%s <%s:%d,%d> (%d instruction%s, %d bytes at %p)\n", + (f->linedefined==0)?"main":"function",s, + f->linedefined,f->lastlinedefined, + S(f->sizecode),f->sizecode*Sizeof(Instruction),VOID(f)); + printf("%d%s param%s, %d slot%s, %d upvalue%s, ", + f->numparams,f->is_vararg?"+":"",SS(f->numparams), + S(f->maxstacksize),S(f->nups)); + printf("%d local%s, %d constant%s, %d function%s\n", + S(f->sizelocvars),S(f->sizek),S(f->sizep)); +} + +static void PrintConstants(const Proto* f) +{ + int i,n=f->sizek; + printf("constants (%d) for %p:\n",n,VOID(f)); + for (i=0; isizelocvars; + printf("locals (%d) for %p:\n",n,VOID(f)); + for (i=0; ilocvars[i].varname),f->locvars[i].startpc+1,f->locvars[i].endpc+1); + } +} + +static void PrintUpvalues(const Proto* f) +{ + int i,n=f->sizeupvalues; + printf("upvalues (%d) for %p:\n",n,VOID(f)); + if (f->upvalues==NULL) return; + for (i=0; iupvalues[i])); + } +} + +void PrintFunction(const Proto* f, int full) +{ + int i,n=f->sizep; + PrintHeader(f); + PrintCode(f); + if (full) + { + PrintConstants(f); + PrintLocals(f); + PrintUpvalues(f); + } + for (i=0; ip[i],full); +} diff --git a/lib/sj3compat/Makefile.am b/lib/sj3compat/Makefile.am new file mode 100644 index 0000000..a83e35c --- /dev/null +++ b/lib/sj3compat/Makefile.am @@ -0,0 +1,16 @@ +INCLUDES = -I$(top_srcdir)/include/sj3compat + +noinst_LTLIBRARIES = libsj3compat.la + +libsj3compat_la_SOURCES = \ + bsd-asprintf.c \ + bsd-getpeereid.c \ + bsd-misc.c \ + bsd-snprintf.c \ + daemon.c \ + fake-rfc2553.c \ + getopt.c \ + inet_ntoa.c \ + setproctitle.c \ + strlcat.c \ + strlcpy.c diff --git a/lib/sj3compat/bsd-asprintf.c b/lib/sj3compat/bsd-asprintf.c new file mode 100644 index 0000000..4f489a5 --- /dev/null +++ b/lib/sj3compat/bsd-asprintf.c @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2004 Darren Tucker. + * + * Based originally on asprintf.c from OpenBSD: + * Copyright (c) 1997 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "sj3compat.h" + +#ifndef HAVE_VASPRINTF + +#include +#include +#include + +#ifndef VA_COPY +# ifdef HAVE_VA_COPY +# define VA_COPY(dest, src) va_copy(dest, src) +# else +# ifdef HAVE___VA_COPY +# define VA_COPY(dest, src) __va_copy(dest, src) +# else +# define VA_COPY(dest, src) (dest) = (src) +# endif +# endif +#endif + +#define INIT_SZ 128 + +int vasprintf(char **str, const char *fmt, va_list ap) +{ + int ret = -1; + va_list ap2; + char *string, *newstr; + size_t len; + + VA_COPY(ap2, ap); + if ((string = malloc(INIT_SZ)) == NULL) + goto fail; + + ret = vsnprintf(string, INIT_SZ, fmt, ap2); + if (ret >= 0 && ret < INIT_SZ) { /* succeeded with initial alloc */ + *str = string; + } else if (ret == INT_MAX) { /* shouldn't happen */ + goto fail; + } else { /* bigger than initial, realloc allowing for nul */ + len = (size_t)ret + 1; + if ((newstr = realloc(string, len)) == NULL) { + free(string); + goto fail; + } else { + va_end(ap2); + VA_COPY(ap2, ap); + ret = vsnprintf(newstr, len, fmt, ap2); + if (ret >= 0 && (size_t)ret < len) { + *str = newstr; + } else { /* failed with realloc'ed string, give up */ + free(newstr); + goto fail; + } + } + } + va_end(ap2); + return (ret); + +fail: + *str = NULL; + errno = ENOMEM; + va_end(ap2); + return (-1); +} +#endif + +#ifndef HAVE_ASPRINTF +int asprintf(char **str, const char *fmt, ...) +{ + va_list ap; + int ret; + + *str = NULL; + va_start(ap, fmt); + ret = vasprintf(str, fmt, ap); + va_end(ap); + + return ret; +} +#endif diff --git a/lib/sj3compat/bsd-getpeereid.c b/lib/sj3compat/bsd-getpeereid.c new file mode 100644 index 0000000..7263367 --- /dev/null +++ b/lib/sj3compat/bsd-getpeereid.c @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2002,2004 Damien Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "sj3compat.h" + +#if !defined(HAVE_GETPEEREID) + +#include +#include + +#include + +#if defined(SO_PEERCRED) +int +getpeereid(int s, uid_t *euid, gid_t *gid) +{ + struct ucred cred; + socklen_t len = sizeof(cred); + + if (getsockopt(s, SOL_SOCKET, SO_PEERCRED, &cred, &len) < 0) + return (-1); + *euid = cred.uid; + *gid = cred.gid; + + return (0); +} +#else +int +getpeereid(int s, uid_t *euid, gid_t *gid) +{ + *euid = geteuid(); + *gid = getgid(); + + return (0); +} +#endif /* defined(SO_PEERCRED) */ + +#endif /* !defined(HAVE_GETPEEREID) */ diff --git a/lib/sj3compat/bsd-misc.c b/lib/sj3compat/bsd-misc.c new file mode 100644 index 0000000..9cc43bf --- /dev/null +++ b/lib/sj3compat/bsd-misc.c @@ -0,0 +1,58 @@ + +/* + * Copyright (c) 1999-2004 Damien Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "sj3compat.h" + +#ifdef HAVE_SYS_SELECT_H +# include +#endif +#ifdef HAVE_SYS_TIME_H +# include +#endif + +#include +#include +#include + + +#if !defined(HAVE_STRERROR) && defined(HAVE_SYS_ERRLIST) && defined(HAVE_SYS_NERR) +const char *strerror(int e) +{ + extern int sys_nerr; + extern char *sys_errlist[]; + + if ((e >= 0) && (e < sys_nerr)) + return (sys_errlist[e]); + + return ("unlisted error"); +} +#endif + +#ifndef HAVE_STRDUP +char * +strdup(const char *str) +{ + size_t len; + char *cp; + + len = strlen(str) + 1; + cp = malloc(len); + if (cp != NULL) + return(memcpy(cp, str, len)); + return NULL; +} +#endif diff --git a/lib/sj3compat/bsd-snprintf.c b/lib/sj3compat/bsd-snprintf.c new file mode 100644 index 0000000..f2675f4 --- /dev/null +++ b/lib/sj3compat/bsd-snprintf.c @@ -0,0 +1,805 @@ +/* + * Copyright Patrick Powell 1995 + * This code is based on code written by Patrick Powell (papowell@astart.com) + * It may be used for any purpose as long as this notice remains intact + * on all source code distributions + */ + +/************************************************************** + * Original: + * Patrick Powell Tue Apr 11 09:48:21 PDT 1995 + * A bombproof version of doprnt (dopr) included. + * Sigh. This sort of thing is always nasty do deal with. Note that + * the version here does not include floating point... + * + * snprintf() is used instead of sprintf() as it does limit checks + * for string length. This covers a nasty loophole. + * + * The other functions are there to prevent NULL pointers from + * causing nast effects. + * + * More Recently: + * Brandon Long 9/15/96 for mutt 0.43 + * This was ugly. It is still ugly. I opted out of floating point + * numbers, but the formatter understands just about everything + * from the normal C string format, at least as far as I can tell from + * the Solaris 2.5 printf(3S) man page. + * + * Brandon Long 10/22/97 for mutt 0.87.1 + * Ok, added some minimal floating point support, which means this + * probably requires libm on most operating systems. Don't yet + * support the exponent (e,E) and sigfig (g,G). Also, fmtint() + * was pretty badly broken, it just wasn't being exercised in ways + * which showed it, so that's been fixed. Also, formated the code + * to mutt conventions, and removed dead code left over from the + * original. Also, there is now a builtin-test, just compile with: + * gcc -DTEST_SNPRINTF -o snprintf snprintf.c -lm + * and run snprintf for results. + * + * Thomas Roessler 01/27/98 for mutt 0.89i + * The PGP code was using unsigned hexadecimal formats. + * Unfortunately, unsigned formats simply didn't work. + * + * Michael Elkins 03/05/98 for mutt 0.90.8 + * The original code assumed that both snprintf() and vsnprintf() were + * missing. Some systems only have snprintf() but not vsnprintf(), so + * the code is now broken down under HAVE_SNPRINTF and HAVE_VSNPRINTF. + * + * Andrew Tridgell (tridge@samba.org) Oct 1998 + * fixed handling of %.0f + * added test for HAVE_LONG_DOUBLE + * + * tridge@samba.org, idra@samba.org, April 2001 + * got rid of fcvt code (twas buggy and made testing harder) + * added C99 semantics + * + * date: 2002/12/19 19:56:31; author: herb; state: Exp; lines: +2 -0 + * actually print args for %g and %e + * + * date: 2002/06/03 13:37:52; author: jmcd; state: Exp; lines: +8 -0 + * Since includes.h isn't included here, VA_COPY has to be defined here. I don't + * see any include file that is guaranteed to be here, so I'm defining it + * locally. Fixes AIX and Solaris builds. + * + * date: 2002/06/03 03:07:24; author: tridge; state: Exp; lines: +5 -13 + * put the ifdef for HAVE_VA_COPY in one place rather than in lots of + * functions + * + * date: 2002/05/17 14:51:22; author: jmcd; state: Exp; lines: +21 -4 + * Fix usage of va_list passed as an arg. Use __va_copy before using it + * when it exists. + * + * date: 2002/04/16 22:38:04; author: idra; state: Exp; lines: +20 -14 + * Fix incorrect zpadlen handling in fmtfp. + * Thanks to Ollie Oldham for spotting it. + * few mods to make it easier to compile the tests. + * addedd the "Ollie" test to the floating point ones. + * + * Martin Pool (mbp@samba.org) April 2003 + * Remove NO_CONFIG_H so that the test case can be built within a source + * tree with less trouble. + * Remove unnecessary SAFE_FREE() definition. + * + * Martin Pool (mbp@samba.org) May 2003 + * Put in a prototype for dummy_snprintf() to quiet compiler warnings. + * + * Move #endif to make sure VA_COPY, LDOUBLE, etc are defined even + * if the C library has some snprintf functions already. + **************************************************************/ + +#include "sj3compat.h" + +#if defined(BROKEN_SNPRINTF) /* For those with broken snprintf() */ +# undef HAVE_SNPRINTF +# undef HAVE_VSNPRINTF +#endif + +#ifndef VA_COPY +# ifdef HAVE_VA_COPY +# define VA_COPY(dest, src) va_copy(dest, src) +# else +# ifdef HAVE___VA_COPY +# define VA_COPY(dest, src) __va_copy(dest, src) +# else +# define VA_COPY(dest, src) (dest) = (src) +# endif +# endif +#endif + +#if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) + +#include +#include +#include +#include + +#ifdef HAVE_LONG_DOUBLE +# define LDOUBLE long double +#else +# define LDOUBLE double +#endif + +#ifdef HAVE_LONG_LONG +# define LLONG long long +#else +# define LLONG long +#endif + +/* + * dopr(): poor man's version of doprintf + */ + +/* format read states */ +#define DP_S_DEFAULT 0 +#define DP_S_FLAGS 1 +#define DP_S_MIN 2 +#define DP_S_DOT 3 +#define DP_S_MAX 4 +#define DP_S_MOD 5 +#define DP_S_CONV 6 +#define DP_S_DONE 7 + +/* format flags - Bits */ +#define DP_F_MINUS (1 << 0) +#define DP_F_PLUS (1 << 1) +#define DP_F_SPACE (1 << 2) +#define DP_F_NUM (1 << 3) +#define DP_F_ZERO (1 << 4) +#define DP_F_UP (1 << 5) +#define DP_F_UNSIGNED (1 << 6) + +/* Conversion Flags */ +#define DP_C_SHORT 1 +#define DP_C_LONG 2 +#define DP_C_LDOUBLE 3 +#define DP_C_LLONG 4 + +#define char_to_int(p) ((p)- '0') +#ifndef MAX +# define MAX(p,q) (((p) >= (q)) ? (p) : (q)) +#endif + +static size_t dopr(char *buffer, size_t maxlen, const char *format, + va_list args_in); +static void fmtstr(char *buffer, size_t *currlen, size_t maxlen, + char *value, int flags, int min, int max); +static void fmtint(char *buffer, size_t *currlen, size_t maxlen, + LLONG value, int base, int min, int max, int flags); +static void fmtfp(char *buffer, size_t *currlen, size_t maxlen, + LDOUBLE fvalue, int min, int max, int flags); +static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c); + +static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args_in) +{ + char ch; + LLONG value; + LDOUBLE fvalue; + char *strvalue; + int min; + int max; + int state; + int flags; + int cflags; + size_t currlen; + va_list args; + + VA_COPY(args, args_in); + + state = DP_S_DEFAULT; + currlen = flags = cflags = min = 0; + max = -1; + ch = *format++; + + while (state != DP_S_DONE) { + if (ch == '\0') + state = DP_S_DONE; + + switch(state) { + case DP_S_DEFAULT: + if (ch == '%') + state = DP_S_FLAGS; + else + dopr_outch (buffer, &currlen, maxlen, ch); + ch = *format++; + break; + case DP_S_FLAGS: + switch (ch) { + case '-': + flags |= DP_F_MINUS; + ch = *format++; + break; + case '+': + flags |= DP_F_PLUS; + ch = *format++; + break; + case ' ': + flags |= DP_F_SPACE; + ch = *format++; + break; + case '#': + flags |= DP_F_NUM; + ch = *format++; + break; + case '0': + flags |= DP_F_ZERO; + ch = *format++; + break; + default: + state = DP_S_MIN; + break; + } + break; + case DP_S_MIN: + if (isdigit((unsigned char)ch)) { + min = 10*min + char_to_int (ch); + ch = *format++; + } else if (ch == '*') { + min = va_arg (args, int); + ch = *format++; + state = DP_S_DOT; + } else { + state = DP_S_DOT; + } + break; + case DP_S_DOT: + if (ch == '.') { + state = DP_S_MAX; + ch = *format++; + } else { + state = DP_S_MOD; + } + break; + case DP_S_MAX: + if (isdigit((unsigned char)ch)) { + if (max < 0) + max = 0; + max = 10*max + char_to_int (ch); + ch = *format++; + } else if (ch == '*') { + max = va_arg (args, int); + ch = *format++; + state = DP_S_MOD; + } else { + state = DP_S_MOD; + } + break; + case DP_S_MOD: + switch (ch) { + case 'h': + cflags = DP_C_SHORT; + ch = *format++; + break; + case 'l': + cflags = DP_C_LONG; + ch = *format++; + if (ch == 'l') { /* It's a long long */ + cflags = DP_C_LLONG; + ch = *format++; + } + break; + case 'L': + cflags = DP_C_LDOUBLE; + ch = *format++; + break; + default: + break; + } + state = DP_S_CONV; + break; + case DP_S_CONV: + switch (ch) { + case 'd': + case 'i': + if (cflags == DP_C_SHORT) + value = va_arg (args, int); + else if (cflags == DP_C_LONG) + value = va_arg (args, long int); + else if (cflags == DP_C_LLONG) + value = va_arg (args, LLONG); + else + value = va_arg (args, int); + fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags); + break; + case 'o': + flags |= DP_F_UNSIGNED; + if (cflags == DP_C_SHORT) + value = va_arg (args, unsigned int); + else if (cflags == DP_C_LONG) + value = (long)va_arg (args, unsigned long int); + else if (cflags == DP_C_LLONG) + value = (long)va_arg (args, unsigned LLONG); + else + value = (long)va_arg (args, unsigned int); + fmtint (buffer, &currlen, maxlen, value, 8, min, max, flags); + break; + case 'u': + flags |= DP_F_UNSIGNED; + if (cflags == DP_C_SHORT) + value = va_arg (args, unsigned int); + else if (cflags == DP_C_LONG) + value = (long)va_arg (args, unsigned long int); + else if (cflags == DP_C_LLONG) + value = (LLONG)va_arg (args, unsigned LLONG); + else + value = (long)va_arg (args, unsigned int); + fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags); + break; + case 'X': + flags |= DP_F_UP; + case 'x': + flags |= DP_F_UNSIGNED; + if (cflags == DP_C_SHORT) + value = va_arg (args, unsigned int); + else if (cflags == DP_C_LONG) + value = (long)va_arg (args, unsigned long int); + else if (cflags == DP_C_LLONG) + value = (LLONG)va_arg (args, unsigned LLONG); + else + value = (long)va_arg (args, unsigned int); + fmtint (buffer, &currlen, maxlen, value, 16, min, max, flags); + break; + case 'f': + if (cflags == DP_C_LDOUBLE) + fvalue = va_arg (args, LDOUBLE); + else + fvalue = va_arg (args, double); + /* um, floating point? */ + fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags); + break; + case 'E': + flags |= DP_F_UP; + case 'e': + if (cflags == DP_C_LDOUBLE) + fvalue = va_arg (args, LDOUBLE); + else + fvalue = va_arg (args, double); + fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags); + break; + case 'G': + flags |= DP_F_UP; + case 'g': + if (cflags == DP_C_LDOUBLE) + fvalue = va_arg (args, LDOUBLE); + else + fvalue = va_arg (args, double); + fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags); + break; + case 'c': + dopr_outch (buffer, &currlen, maxlen, va_arg (args, int)); + break; + case 's': + strvalue = va_arg (args, char *); + if (!strvalue) strvalue = "(NULL)"; + if (max == -1) { + max = strlen(strvalue); + } + if (min > 0 && max >= 0 && min > max) max = min; + fmtstr (buffer, &currlen, maxlen, strvalue, flags, min, max); + break; + case 'p': + strvalue = va_arg (args, void *); + fmtint (buffer, &currlen, maxlen, (long) strvalue, 16, min, max, flags); + break; + case 'n': + if (cflags == DP_C_SHORT) { + short int *num; + num = va_arg (args, short int *); + *num = currlen; + } else if (cflags == DP_C_LONG) { + long int *num; + num = va_arg (args, long int *); + *num = (long int)currlen; + } else if (cflags == DP_C_LLONG) { + LLONG *num; + num = va_arg (args, LLONG *); + *num = (LLONG)currlen; + } else { + int *num; + num = va_arg (args, int *); + *num = currlen; + } + break; + case '%': + dopr_outch (buffer, &currlen, maxlen, ch); + break; + case 'w': + /* not supported yet, treat as next char */ + ch = *format++; + break; + default: + /* Unknown, skip */ + break; + } + ch = *format++; + state = DP_S_DEFAULT; + flags = cflags = min = 0; + max = -1; + break; + case DP_S_DONE: + break; + default: + /* hmm? */ + break; /* some picky compilers need this */ + } + } + if (maxlen != 0) { + if (currlen < maxlen - 1) + buffer[currlen] = '\0'; + else if (maxlen > 0) + buffer[maxlen - 1] = '\0'; + } + + return currlen; +} + +static void fmtstr(char *buffer, size_t *currlen, size_t maxlen, + char *value, int flags, int min, int max) +{ + int padlen, strln; /* amount to pad */ + int cnt = 0; + +#ifdef DEBUG_SNPRINTF + printf("fmtstr min=%d max=%d s=[%s]\n", min, max, value); +#endif + if (value == 0) { + value = ""; + } + + for (strln = 0; strln < max && value[strln]; ++strln); /* strlen */ + padlen = min - strln; + if (padlen < 0) + padlen = 0; + if (flags & DP_F_MINUS) + padlen = -padlen; /* Left Justify */ + + while ((padlen > 0) && (cnt < max)) { + dopr_outch (buffer, currlen, maxlen, ' '); + --padlen; + ++cnt; + } + while (*value && (cnt < max)) { + dopr_outch (buffer, currlen, maxlen, *value++); + ++cnt; + } + while ((padlen < 0) && (cnt < max)) { + dopr_outch (buffer, currlen, maxlen, ' '); + ++padlen; + ++cnt; + } +} + +/* Have to handle DP_F_NUM (ie 0x and 0 alternates) */ + +static void fmtint(char *buffer, size_t *currlen, size_t maxlen, + LLONG value, int base, int min, int max, int flags) +{ + int signvalue = 0; + unsigned LLONG uvalue; + char convert[20]; + int place = 0; + int spadlen = 0; /* amount to space pad */ + int zpadlen = 0; /* amount to zero pad */ + int caps = 0; + + if (max < 0) + max = 0; + + uvalue = value; + + if(!(flags & DP_F_UNSIGNED)) { + if( value < 0 ) { + signvalue = '-'; + uvalue = -value; + } else { + if (flags & DP_F_PLUS) /* Do a sign (+/i) */ + signvalue = '+'; + else if (flags & DP_F_SPACE) + signvalue = ' '; + } + } + + if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */ + + do { + convert[place++] = + (caps? "0123456789ABCDEF":"0123456789abcdef") + [uvalue % (unsigned)base ]; + uvalue = (uvalue / (unsigned)base ); + } while(uvalue && (place < 20)); + if (place == 20) place--; + convert[place] = 0; + + zpadlen = max - place; + spadlen = min - MAX (max, place) - (signvalue ? 1 : 0); + if (zpadlen < 0) zpadlen = 0; + if (spadlen < 0) spadlen = 0; + if (flags & DP_F_ZERO) { + zpadlen = MAX(zpadlen, spadlen); + spadlen = 0; + } + if (flags & DP_F_MINUS) + spadlen = -spadlen; /* Left Justifty */ + +#ifdef DEBUG_SNPRINTF + printf("zpad: %d, spad: %d, min: %d, max: %d, place: %d\n", + zpadlen, spadlen, min, max, place); +#endif + + /* Spaces */ + while (spadlen > 0) { + dopr_outch (buffer, currlen, maxlen, ' '); + --spadlen; + } + + /* Sign */ + if (signvalue) + dopr_outch (buffer, currlen, maxlen, signvalue); + + /* Zeros */ + if (zpadlen > 0) { + while (zpadlen > 0) { + dopr_outch (buffer, currlen, maxlen, '0'); + --zpadlen; + } + } + + /* Digits */ + while (place > 0) + dopr_outch (buffer, currlen, maxlen, convert[--place]); + + /* Left Justified spaces */ + while (spadlen < 0) { + dopr_outch (buffer, currlen, maxlen, ' '); + ++spadlen; + } +} + +static LDOUBLE abs_val(LDOUBLE value) +{ + LDOUBLE result = value; + + if (value < 0) + result = -value; + + return result; +} + +static LDOUBLE POW10(int exp) +{ + LDOUBLE result = 1; + + while (exp) { + result *= 10; + exp--; + } + + return result; +} + +static LLONG ROUND(LDOUBLE value) +{ + LLONG intpart; + + intpart = (LLONG)value; + value = value - intpart; + if (value >= 0.5) intpart++; + + return intpart; +} + +/* a replacement for modf that doesn't need the math library. Should + be portable, but slow */ +static double my_modf(double x0, double *iptr) +{ + int i; + long l; + double x = x0; + double f = 1.0; + + for (i=0;i<100;i++) { + l = (long)x; + if (l <= (x+1) && l >= (x-1)) break; + x *= 0.1; + f *= 10.0; + } + + if (i == 100) { + /* yikes! the number is beyond what we can handle. What do we do? */ + (*iptr) = 0; + return 0; + } + + if (i != 0) { + double i2; + double ret; + + ret = my_modf(x0-l*f, &i2); + (*iptr) = l*f + i2; + return ret; + } + + (*iptr) = l; + return x - (*iptr); +} + + +static void fmtfp (char *buffer, size_t *currlen, size_t maxlen, + LDOUBLE fvalue, int min, int max, int flags) +{ + int signvalue = 0; + double ufvalue; + char iconvert[311]; + char fconvert[311]; + int iplace = 0; + int fplace = 0; + int padlen = 0; /* amount to pad */ + int zpadlen = 0; + int caps = 0; + int idx; + double intpart; + double fracpart; + double temp; + + /* + * AIX manpage says the default is 0, but Solaris says the default + * is 6, and sprintf on AIX defaults to 6 + */ + if (max < 0) + max = 6; + + ufvalue = abs_val (fvalue); + + if (fvalue < 0) { + signvalue = '-'; + } else { + if (flags & DP_F_PLUS) { /* Do a sign (+/i) */ + signvalue = '+'; + } else { + if (flags & DP_F_SPACE) + signvalue = ' '; + } + } + +#if 0 + if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */ +#endif + +#if 0 + if (max == 0) ufvalue += 0.5; /* if max = 0 we must round */ +#endif + + /* + * Sorry, we only support 16 digits past the decimal because of our + * conversion method + */ + if (max > 16) + max = 16; + + /* We "cheat" by converting the fractional part to integer by + * multiplying by a factor of 10 + */ + + temp = ufvalue; + my_modf(temp, &intpart); + + fracpart = ROUND((POW10(max)) * (ufvalue - intpart)); + + if (fracpart >= POW10(max)) { + intpart++; + fracpart -= POW10(max); + } + + /* Convert integer part */ + do { + temp = intpart*0.1; + my_modf(temp, &intpart); + idx = (int) ((temp -intpart +0.05)* 10.0); + /* idx = (int) (((double)(temp*0.1) -intpart +0.05) *10.0); */ + /* printf ("%llf, %f, %x\n", temp, intpart, idx); */ + iconvert[iplace++] = + (caps? "0123456789ABCDEF":"0123456789abcdef")[idx]; + } while (intpart && (iplace < 311)); + if (iplace == 311) iplace--; + iconvert[iplace] = 0; + + /* Convert fractional part */ + if (fracpart) + { + do { + temp = fracpart*0.1; + my_modf(temp, &fracpart); + idx = (int) ((temp -fracpart +0.05)* 10.0); + /* idx = (int) ((((temp/10) -fracpart) +0.05) *10); */ + /* printf ("%lf, %lf, %ld\n", temp, fracpart, idx ); */ + fconvert[fplace++] = + (caps? "0123456789ABCDEF":"0123456789abcdef")[idx]; + } while(fracpart && (fplace < 311)); + if (fplace == 311) fplace--; + } + fconvert[fplace] = 0; + + /* -1 for decimal point, another -1 if we are printing a sign */ + padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0); + zpadlen = max - fplace; + if (zpadlen < 0) zpadlen = 0; + if (padlen < 0) + padlen = 0; + if (flags & DP_F_MINUS) + padlen = -padlen; /* Left Justifty */ + + if ((flags & DP_F_ZERO) && (padlen > 0)) { + if (signvalue) { + dopr_outch (buffer, currlen, maxlen, signvalue); + --padlen; + signvalue = 0; + } + while (padlen > 0) { + dopr_outch (buffer, currlen, maxlen, '0'); + --padlen; + } + } + while (padlen > 0) { + dopr_outch (buffer, currlen, maxlen, ' '); + --padlen; + } + if (signvalue) + dopr_outch (buffer, currlen, maxlen, signvalue); + + while (iplace > 0) + dopr_outch (buffer, currlen, maxlen, iconvert[--iplace]); + +#ifdef DEBUG_SNPRINTF + printf("fmtfp: fplace=%d zpadlen=%d\n", fplace, zpadlen); +#endif + + /* + * Decimal point. This should probably use locale to find the correct + * char to print out. + */ + if (max > 0) { + dopr_outch (buffer, currlen, maxlen, '.'); + + while (zpadlen > 0) { + dopr_outch (buffer, currlen, maxlen, '0'); + --zpadlen; + } + + while (fplace > 0) + dopr_outch (buffer, currlen, maxlen, fconvert[--fplace]); + } + + while (padlen < 0) { + dopr_outch (buffer, currlen, maxlen, ' '); + ++padlen; + } +} + +static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c) +{ + if (*currlen < maxlen) { + buffer[(*currlen)] = c; + } + (*currlen)++; +} +#endif /* !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) */ + +#if !defined(HAVE_VSNPRINTF) +int vsnprintf (char *str, size_t count, const char *fmt, va_list args) +{ + return dopr(str, count, fmt, args); +} +#endif + +#if !defined(HAVE_SNPRINTF) +int snprintf(char *str, size_t count, SNPRINTF_CONST char *fmt, ...) +{ + size_t ret; + va_list ap; + + va_start(ap, fmt); + ret = vsnprintf(str, count, fmt, ap); + va_end(ap); + return ret; +} +#endif + diff --git a/lib/sj3compat/daemon.c b/lib/sj3compat/daemon.c new file mode 100644 index 0000000..0cc69cf --- /dev/null +++ b/lib/sj3compat/daemon.c @@ -0,0 +1,69 @@ +/* $OpenBSD: daemon.c,v 1.6 2005/08/08 08:05:33 espie Exp $ */ +/*- + * Copyright (c) 1990, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "sj3compat.h" + +#ifndef HAVE_DAEMON + +#include +#include +#include + +int +daemon(int nochdir, int noclose) +{ + int fd; + + switch (fork()) { + case -1: + return (-1); + case 0: + break; + default: + _exit(0); + } + + if (setsid() == -1) + return (-1); + + if (!nochdir) + (void)chdir("/"); + + if (!noclose && (fd = open("/dev/null", O_RDWR, 0)) != -1) { + (void)dup2(fd, STDIN_FILENO); + (void)dup2(fd, STDOUT_FILENO); + (void)dup2(fd, STDERR_FILENO); + if (fd > 2) + (void)close (fd); + } + return (0); +} + +#endif diff --git a/lib/sj3compat/fake-rfc2553.c b/lib/sj3compat/fake-rfc2553.c new file mode 100644 index 0000000..99027a3 --- /dev/null +++ b/lib/sj3compat/fake-rfc2553.c @@ -0,0 +1,228 @@ +/* + * Copyright (C) 2000-2003 Damien Miller. All rights reserved. + * Copyright (C) 1999 WIDE Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the project nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * Pseudo-implementation of RFC2553 name / address resolution functions + * + * But these functions are not implemented correctly. The minimum subset + * is implemented for ssh use only. For example, this routine assumes + * that ai_family is AF_INET. Don't use it for another purpose. + */ + +#include "sj3compat.h" + +#include +#include + +#include +#include + +#ifndef HAVE_GETNAMEINFO +int getnameinfo(const struct sockaddr *sa, size_t salen, char *host, + size_t hostlen, char *serv, size_t servlen, int flags) +{ + struct sockaddr_in *sin = (struct sockaddr_in *)sa; + struct hostent *hp; + char tmpserv[16]; + + if (serv != NULL) { + snprintf(tmpserv, sizeof(tmpserv), "%d", ntohs(sin->sin_port)); + if (strlcpy(serv, tmpserv, servlen) >= servlen) + return (EAI_MEMORY); + } + + if (host != NULL) { + if (flags & NI_NUMERICHOST) { + if (strlcpy(host, inet_ntoa(sin->sin_addr), + hostlen) >= hostlen) + return (EAI_MEMORY); + else + return (0); + } else { + hp = gethostbyaddr((char *)&sin->sin_addr, + sizeof(struct in_addr), AF_INET); + if (hp == NULL) + return (EAI_NODATA); + + if (strlcpy(host, hp->h_name, hostlen) >= hostlen) + return (EAI_MEMORY); + else + return (0); + } + } + return (0); +} +#endif /* !HAVE_GETNAMEINFO */ + +#ifndef HAVE_GAI_STRERROR +#ifdef HAVE_CONST_GAI_STRERROR_PROTO +const char * +#else +char * +#endif +gai_strerror(int err) +{ + switch (err) { + case EAI_NODATA: + return ("no address associated with name"); + case EAI_MEMORY: + return ("memory allocation failure."); + case EAI_NONAME: + return ("nodename nor servname provided, or not known"); + default: + return ("unknown/invalid error."); + } +} +#endif /* !HAVE_GAI_STRERROR */ + +#ifndef HAVE_FREEADDRINFO +void +freeaddrinfo(struct addrinfo *ai) +{ + struct addrinfo *next; + + for(; ai != NULL;) { + next = ai->ai_next; + free(ai); + ai = next; + } +} +#endif /* !HAVE_FREEADDRINFO */ + +#ifndef HAVE_GETADDRINFO +static struct +addrinfo *malloc_ai(int port, u_long addr, const struct addrinfo *hints) +{ + struct addrinfo *ai; + + ai = malloc(sizeof(*ai) + sizeof(struct sockaddr_in)); + if (ai == NULL) + return (NULL); + + memset(ai, '\0', sizeof(*ai) + sizeof(struct sockaddr_in)); + + ai->ai_addr = (struct sockaddr *)(ai + 1); + /* XXX -- ssh doesn't use sa_len */ + ai->ai_addrlen = sizeof(struct sockaddr_in); + ai->ai_addr->sa_family = ai->ai_family = AF_INET; + + ((struct sockaddr_in *)(ai)->ai_addr)->sin_port = port; + ((struct sockaddr_in *)(ai)->ai_addr)->sin_addr.s_addr = addr; + + /* XXX: the following is not generally correct, but does what we want */ + if (hints->ai_socktype) + ai->ai_socktype = hints->ai_socktype; + else + ai->ai_socktype = SOCK_STREAM; + + if (hints->ai_protocol) + ai->ai_protocol = hints->ai_protocol; + + return (ai); +} + +int +getaddrinfo(const char *hostname, const char *servname, + const struct addrinfo *hints, struct addrinfo **res) +{ + struct hostent *hp; + struct servent *sp; + struct in_addr in; + int i; + long int port; + u_long addr; + + port = 0; + if (servname != NULL) { + char *cp; + + port = strtol(servname, &cp, 10); + if (port > 0 && port <= 65535 && *cp == '\0') + port = htons(port); + else if ((sp = getservbyname(servname, NULL)) != NULL) + port = sp->s_port; + else + port = 0; + } + + if (hints && hints->ai_flags & AI_PASSIVE) { + addr = htonl(0x00000000); + if (hostname && inet_aton(hostname, &in) != 0) + addr = in.s_addr; + *res = malloc_ai(port, addr, hints); + if (*res == NULL) + return (EAI_MEMORY); + return (0); + } + + if (!hostname) { + *res = malloc_ai(port, htonl(0x7f000001), hints); + if (*res == NULL) + return (EAI_MEMORY); + return (0); + } + + if (inet_aton(hostname, &in)) { + *res = malloc_ai(port, in.s_addr, hints); + if (*res == NULL) + return (EAI_MEMORY); + return (0); + } + + /* Don't try DNS if AI_NUMERICHOST is set */ + if (hints && hints->ai_flags & AI_NUMERICHOST) + return (EAI_NONAME); + + hp = gethostbyname(hostname); + if (hp && hp->h_name && hp->h_name[0] && hp->h_addr_list[0]) { + struct addrinfo *cur, *prev; + + cur = prev = *res = NULL; + for (i = 0; hp->h_addr_list[i]; i++) { + struct in_addr *in = (struct in_addr *)hp->h_addr_list[i]; + + cur = malloc_ai(port, in->s_addr, hints); + if (cur == NULL) { + if (*res != NULL) + freeaddrinfo(*res); + return (EAI_MEMORY); + } + if (prev) + prev->ai_next = cur; + else + *res = cur; + + prev = cur; + } + return (0); + } + + return (EAI_NODATA); +} +#endif /* !HAVE_GETADDRINFO */ diff --git a/lib/sj3compat/getopt.c b/lib/sj3compat/getopt.c new file mode 100644 index 0000000..fb94810 --- /dev/null +++ b/lib/sj3compat/getopt.c @@ -0,0 +1,123 @@ +/* + * Copyright (c) 1987, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* OPENBSD ORIGINAL: lib/libc/stdlib/getopt.c */ + +#include "sj3compat.h" +#if !defined(HAVE_GETOPT) || !defined(HAVE_GETOPT_OPTRESET) + +#if defined(LIBC_SCCS) && !defined(lint) +static char *rcsid = "$OpenBSD: getopt.c,v 1.5 2003/06/02 20:18:37 millert Exp $"; +#endif /* LIBC_SCCS and not lint */ + +#include +#include +#include + +int BSDopterr = 1, /* if error message should be printed */ + BSDoptind = 1, /* index into parent argv vector */ + BSDoptopt, /* character checked for validity */ + BSDoptreset; /* reset getopt */ +char *BSDoptarg; /* argument associated with option */ + +#define BADCH (int)'?' +#define BADARG (int)':' +#define EMSG "" + +/* + * getopt -- + * Parse argc/argv argument vector. + */ +int +BSDgetopt(nargc, nargv, ostr) + int nargc; + char * const *nargv; + const char *ostr; +{ + extern char *__progname; + static char *place = EMSG; /* option letter processing */ + char *oli; /* option letter list index */ + + if (ostr == NULL) + return (-1); + + if (BSDoptreset || !*place) { /* update scanning pointer */ + BSDoptreset = 0; + if (BSDoptind >= nargc || *(place = nargv[BSDoptind]) != '-') { + place = EMSG; + return (-1); + } + if (place[1] && *++place == '-') { /* found "--" */ + ++BSDoptind; + place = EMSG; + return (-1); + } + } /* option letter okay? */ + if ((BSDoptopt = (int)*place++) == (int)':' || + !(oli = strchr(ostr, BSDoptopt))) { + /* + * if the user didn't specify '-' as an option, + * assume it means -1. + */ + if (BSDoptopt == (int)'-') + return (-1); + if (!*place) + ++BSDoptind; + if (BSDopterr && *ostr != ':') + (void)fprintf(stderr, + "%s: illegal option -- %c\n", __progname, BSDoptopt); + return (BADCH); + } + if (*++oli != ':') { /* don't need argument */ + BSDoptarg = NULL; + if (!*place) + ++BSDoptind; + } + else { /* need an argument */ + if (*place) /* no white space */ + BSDoptarg = place; + else if (nargc <= ++BSDoptind) { /* no arg */ + place = EMSG; + if (*ostr == ':') + return (BADARG); + if (BSDopterr) + (void)fprintf(stderr, + "%s: option requires an argument -- %c\n", + __progname, BSDoptopt); + return (BADCH); + } + else /* white space */ + BSDoptarg = nargv[BSDoptind]; + place = EMSG; + ++BSDoptind; + } + return (BSDoptopt); /* dump back option letter */ +} + +#endif /* !defined(HAVE_GETOPT) || !defined(HAVE_OPTRESET) */ diff --git a/lib/sj3compat/inet_ntoa.c b/lib/sj3compat/inet_ntoa.c new file mode 100644 index 0000000..1c249c9 --- /dev/null +++ b/lib/sj3compat/inet_ntoa.c @@ -0,0 +1,59 @@ +/* $OpenBSD: inet_ntoa.c,v 1.6 2005/08/06 20:30:03 espie Exp $ */ +/* + * Copyright (c) 1983, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* OPENBSD ORIGINAL: lib/libc/net/inet_ntoa.c */ + +#include "sj3compat.h" + +#if defined(BROKEN_INET_NTOA) || !defined(HAVE_INET_NTOA) + +/* + * Convert network-format internet address + * to base 256 d.d.d.d representation. + */ +#include +#include +#include +#include + +char * +inet_ntoa(struct in_addr in) +{ + static char b[18]; + char *p; + + p = (char *)∈ +#define UC(b) (((int)b)&0xff) + (void)snprintf(b, sizeof(b), + "%u.%u.%u.%u", UC(p[0]), UC(p[1]), UC(p[2]), UC(p[3])); + return (b); +} + +#endif /* defined(BROKEN_INET_NTOA) || !defined(HAVE_INET_NTOA) */ diff --git a/lib/sj3compat/setproctitle.c b/lib/sj3compat/setproctitle.c new file mode 100644 index 0000000..64651d7 --- /dev/null +++ b/lib/sj3compat/setproctitle.c @@ -0,0 +1,160 @@ +/* Based on conf.c from UCB sendmail 8.8.8 */ + +/* + * Copyright 2003 Damien Miller + * Copyright (c) 1983, 1995-1997 Eric P. Allman + * Copyright (c) 1988, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include "sj3compat.h" + +#ifndef HAVE_SETPROCTITLE + +#include +#include +#include +#ifdef HAVE_SYS_PSTAT_H +#include +#endif +#include + +#define SPT_NONE 0 /* don't use it at all */ +#define SPT_PSTAT 1 /* use pstat(PSTAT_SETCMD, ...) */ +#define SPT_REUSEARGV 2 /* cover argv with title information */ + +#ifndef SPT_TYPE +# define SPT_TYPE SPT_NONE +#endif + +#ifndef SPT_PADCHAR +# define SPT_PADCHAR '\0' +#endif + +#if SPT_TYPE == SPT_REUSEARGV +static char *argv_start = NULL; +static size_t argv_env_len = 0; +#endif + +#endif /* HAVE_SETPROCTITLE */ + +void +compat_init_setproctitle(int argc, char *argv[]) +{ +#if defined(SPT_TYPE) && SPT_TYPE == SPT_REUSEARGV + extern char **environ; + char *lastargv = NULL; + char **envp = environ; + int i; + + /* + * NB: This assumes that argv has already been copied out of the + * way. This is true for sshd, but may not be true for other + * programs. Beware. + */ + + if (argc == 0 || argv[0] == NULL) + return; + + /* Fail if we can't allocate room for the new environment */ + for (i = 0; envp[i] != NULL; i++) + ; + if ((environ = calloc(i + 1, sizeof(*environ))) == NULL) { + environ = envp; /* put it back */ + return; + } + + /* + * Find the last argv string or environment variable within + * our process memory area. + */ + for (i = 0; i < argc; i++) { + if (lastargv == NULL || lastargv + 1 == argv[i]) + lastargv = argv[i] + strlen(argv[i]); + } + for (i = 0; envp[i] != NULL; i++) { + if (lastargv + 1 == envp[i]) + lastargv = envp[i] + strlen(envp[i]); + } + + argv[1] = NULL; + argv_start = argv[0]; + argv_env_len = lastargv - argv[0] - 1; + + /* + * Copy environment + * XXX - will truncate env on strdup fail + */ + for (i = 0; envp[i] != NULL; i++) + environ[i] = strdup(envp[i]); + environ[i] = NULL; +#endif /* SPT_REUSEARGV */ +} + +#ifndef HAVE_SETPROCTITLE +void +setproctitle(const char *fmt, ...) +{ +#if SPT_TYPE != SPT_NONE + va_list ap; + char buf[1024]; + size_t len; + extern char *__progname; +#if SPT_TYPE == SPT_PSTAT + union pstun pst; +#endif + +#if SPT_TYPE == SPT_REUSEARGV + if (argv_env_len <= 0) + return; +#endif + + strlcpy(buf, __progname, sizeof(buf)); + + va_start(ap, fmt); + if (fmt != NULL) { + len = strlcat(buf, ": ", sizeof(buf)); + if (len < sizeof(buf)) + vsnprintf(buf + len, sizeof(buf) - len , fmt, ap); + } + va_end(ap); + +#if SPT_TYPE == SPT_PSTAT + pst.pst_command = buf; + pstat(PSTAT_SETCMD, pst, strlen(buf), 0, 0); +#elif SPT_TYPE == SPT_REUSEARGV +/* debug("setproctitle: copy \"%s\" into len %d", + buf, argv_env_len); */ + len = strlcpy(argv_start, buf, argv_env_len); + for(; len < argv_env_len; len++) + argv_start[len] = SPT_PADCHAR; +#endif + +#endif /* SPT_NONE */ +} + +#endif /* HAVE_SETPROCTITLE */ diff --git a/lib/sj3compat/strlcat.c b/lib/sj3compat/strlcat.c new file mode 100644 index 0000000..56cfa48 --- /dev/null +++ b/lib/sj3compat/strlcat.c @@ -0,0 +1,63 @@ +/* $OpenBSD: strlcat.c,v 1.13 2005/08/08 08:05:37 espie Exp $ */ + +/* + * Copyright (c) 1998 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* OPENBSD ORIGINAL: lib/libc/string/strlcat.c */ + +#include "sj3compat.h" + +#ifndef HAVE_STRLCAT + +#include +#include + +/* + * Appends src to string dst of size siz (unlike strncat, siz is the + * full size of dst, not space left). At most siz-1 characters + * will be copied. Always NUL terminates (unless siz <= strlen(dst)). + * Returns strlen(src) + MIN(siz, strlen(initial dst)). + * If retval >= siz, truncation occurred. + */ +size_t +strlcat(char *dst, const char *src, size_t siz) +{ + char *d = dst; + const char *s = src; + size_t n = siz; + size_t dlen; + + /* Find the end of dst and adjust bytes left but don't go past end */ + while (n-- != 0 && *d != '\0') + d++; + dlen = d - dst; + n = siz - dlen; + + if (n == 0) + return(dlen + strlen(s)); + while (*s != '\0') { + if (n != 1) { + *d++ = *s; + n--; + } + s++; + } + *d = '\0'; + + return(dlen + (s - src)); /* count does not include NUL */ +} + +#endif /* !HAVE_STRLCAT */ diff --git a/lib/sj3compat/strlcpy.c b/lib/sj3compat/strlcpy.c new file mode 100644 index 0000000..58d423a --- /dev/null +++ b/lib/sj3compat/strlcpy.c @@ -0,0 +1,59 @@ +/* $OpenBSD: strlcpy.c,v 1.10 2005/08/08 08:05:37 espie Exp $ */ + +/* + * Copyright (c) 1998 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* OPENBSD ORIGINAL: lib/libc/string/strlcpy.c */ + +#include "sj3compat.h" + +#ifndef HAVE_STRLCPY + +#include +#include + +/* + * Copy src to string dst of size siz. At most siz-1 characters + * will be copied. Always NUL terminates (unless siz == 0). + * Returns strlen(src); if retval >= siz, truncation occurred. + */ +size_t +strlcpy(char *dst, const char *src, size_t siz) +{ + char *d = dst; + const char *s = src; + size_t n = siz; + + /* Copy as many bytes as will fit */ + if (n != 0 && --n != 0) { + do { + if ((*d++ = *s++) == 0) + break; + } while (--n != 0); + } + + /* Not enough room in dst, add NUL and traverse rest of src */ + if (n == 0) { + if (siz != 0) + *d = '\0'; /* NUL-terminate dst */ + while (*s++) + ; + } + + return(s - src - 1); /* count does not include NUL */ +} + +#endif /* !HAVE_STRLCPY */ diff --git a/lib/sj3core/Makefile.am b/lib/sj3core/Makefile.am new file mode 100644 index 0000000..b385bcb --- /dev/null +++ b/lib/sj3core/Makefile.am @@ -0,0 +1,76 @@ +if BUILDABLE_SJ3SERV + +INCLUDES = \ + -I$(top_srcdir)/include/sj3compat \ + -I$(top_srcdir)/include/sj3common \ + -I$(top_srcdir)/include/sj3core + +lib_LTLIBRARIES = libsj3core.la + +libsj3core_la_LDFLAGS = $(top_srcdir)/lib/sj3compat/libsj3compat.la -version-info @LIBSJ3CORE_VERSION_INFO@ + +libsj3core_la_SOURCES = \ + adddic.c \ + addelcmn.c \ + alloc.c \ + charsize.c \ + chrtbl.c \ + cl2knj.c \ + clstudy.c \ + cmpstr.c \ + conjunc.c \ + connect.c \ + cvtclknj.c \ + cvtdict.c \ + cvtkanji.c \ + deldic.c \ + dict.c \ + functbl.c \ + fuzoku.c \ + fzkyomi.c \ + getkanji.c \ + getrank.c \ + global.c \ + hzstrlen.c \ + init.c \ + istrcmp.c \ + memory.c \ + mk2claus.c \ + mkbunset.c \ + mkjiritu.c \ + mkkouho.c \ + mknumber.c \ + mvmemd.c \ + mvmemi.c \ + peepdic.c \ + ph2knj.c \ + ph_khtbl.c \ + priority.c \ + prtytbl.c \ + s2ctbl.c \ + sdepend.c \ + selclrec.c \ + selsuuji.c \ + setconj.c \ + setjrec.c \ + setkouho.c \ + setubi.c \ + sj2code.c \ + skiphblk.c \ + skipkstr.c \ + srchdict.c \ + srchhead.c \ + srchidx.c \ + srchnum.c \ + sstrcmp.c \ + sstrlen.c \ + sstrncmp.c \ + stbtbl.c \ + stttbl.c \ + study.c \ + suujitbl.c \ + terminat.c \ + termtbl.c \ + wakachi.c + +endif diff --git a/lib/sj3core/adddic.c b/lib/sj3core/adddic.c new file mode 100644 index 0000000..683e7a5 --- /dev/null +++ b/lib/sj3core/adddic.c @@ -0,0 +1,526 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: adddic.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:26 $ + */ + +#include +#include + + +#include "sj_euc.h" +#include "sj_kcnv.h" + +#include "sj_kanakan.h" + +static void sprt_seg(TypeDicSeg, TypeDicOfs); +static void apnd_uidx(TypeDicSeg, u_char *, int); +static int cal_nextym(u_char *); +static int usr_freelen(); +static u_int checkdict(u_char *, TypeGram); + + + +u_int +adddic(u_char *yomi, u_char *kanji, TypeGram hinsi) +{ + u_int err; + u_char yptr[MAXWDYOMILEN + 1]; + u_char kptr[MAXWDKANJILEN + 1]; + int klen; + TypeDicSeg segnum; + int saml; + TypeDicOfs dstofs; + TypeDicOfs douofs; + TypeDicOfs hnsofs; + TypeDicOfs knjofs; + TypeDicOfs nxtask; + TypeDicOfs newsiz; + TypeDicOfs oldsiz; + TypeDicOfs fresiz; + TypeIdxOfs freidx; + u_char *douptr; + u_char *dstptr; + TypeDicOfs pos; + u_char *p1; + int i; + int nlen, plen; + int size; + STDYIN *stdy; + STDYOUT stdydat; + + if (err = addel_arg(yomi, kanji, hinsi, yptr, sizeof(yptr))) + return err; + + inputyomi = yomi; + cnvstart = ystart = yptr; + cnvlen = sstrlen(yptr); + + if (err = checkdict(kanji, hinsi)) + return err; + + if (!curdict -> maxunit) + return AD_NOTUSERDICT; + + klen = cvtknj(yomi, kanji, kptr); + + newsiz = DOUONBLKSIZENUMBER + cnvlen + (klen !=0 ? klen+1 : 0) + 2; + + if (newsiz > MAXDOUONBLK) + return AD_OVFLWDOUBLK; + if (newsiz > curdict->seglen) + return AD_OVFLWDOUBLK; + + segnum = srchidx((TypeDicSeg)DICSEGBASE, cnvlen); + + for ( ; ; ) { + (*curdict->getdic)(curdict, segnum); + i = srchkana(&p1, &saml); + dstofs = douofs = p1 - dicbuf; + hnsofs = knjofs = 0; + if (i) { + i = srchgram(p1, &p1, hinsi); + dstofs = hnsofs = p1 - dicbuf; + if (i) { + srchkanji(&p1, kptr, klen); + if (*p1 != HINSIBLKTERM) + return AD_AREXIST; + dstofs = knjofs = p1 - dicbuf; + } + } + + p1 = dicbuf + douofs; + + if (!hnsofs) { + oldsiz = 0; + nlen = cnvlen - saml; + newsiz = DOUONBLKSIZENUMBER + nlen; + + nxtask = cal_nextym(p1); + } + else { + oldsiz = newsiz = getsize(p1); + nxtask = 0; + } + if (!knjofs) newsiz += 2; + + newsiz += (klen != 0 ? klen+1 : 0); + + fresiz = usr_freelen(); + + if ((unsigned int) (newsiz - oldsiz - nxtask) <= + (unsigned int) fresiz) break; + + if (segend(p1) && (segnum + 1 < curdict->segunit)) { + segnum++; + continue; + } + + if (curdict->segunit >= curdict->maxunit) + return AD_OVFLWUSRDIC; + + freidx = count_uidx(); + + if ((unsigned int) (douofs + newsiz) <= curdict->seglen) { + if (hnsofs) + p1 = getntag(p1); + pos = p1 - dicbuf; + + nlen = getnlen(p1); + if ((unsigned int) freidx < getplen(p1) + nlen + 1) + return AD_OVFLWINDEX; + + if ((*curdict->putdic)(curdict, curdict->segunit)) + return AD_OVFLWUSRDIC; + + sprt_seg(segnum, pos); + + nxtask = 0; + break; + } + + if (segend(p1)) { + if ((unsigned int) freidx < cnvlen + 1) + return AD_OVFLWINDEX; + + if ((*curdict->putdic)(curdict, curdict->segunit)) + return AD_OVFLWUSRDIC; + curdict->segunit++; + + (*curdict->getdic)(curdict, curdict->segunit - 1); + memset(dicbuf, DICSEGTERM, (int)curdict->seglen); + dicbuf[0] = 0; + (*curdict->putdic)(curdict, curdict->segunit - 1); + (*curdict->rszdic)(curdict, curdict->segunit); + mkidxtbl(curdict); + + segnum++; + } + else { + nlen = getnlen(p1); + if ((unsigned int) freidx < getplen(p1) + nlen + 1) + return AD_OVFLWINDEX; + + if ((*curdict->putdic)(curdict, curdict->segunit)) + return AD_OVFLWUSRDIC; + + sprt_seg(segnum, douofs); + + segnum++; + } + } + + douptr = dicbuf + douofs; + + if (nxtask) { + u_char *tp; + + size = getsize(douptr) - nxtask; + plen = getplen(douptr) + nxtask; + nlen = getnlen(douptr) - nxtask; + *douptr = (size >> 8); + if (nlen & 0x10) + *douptr |= NOKORIYOMITOP; + if (plen & 0x10) + *douptr |= ASSYUKUYOMITOP; + *(douptr + 1) = size; + *(douptr + 2) = ((nlen & 0x0f) | ((plen & 0x0f) << 4)); + + p1 = douptr + DOUONBLKSIZENUMBER; + tp = p1 + nxtask; + mvmemi(tp, p1, dicbuf + curdict->seglen - tp); + } + + dstptr = dicbuf + dstofs; + size = newsiz - oldsiz; + p1 = dicbuf + curdict->seglen; + mvmemd(p1 - size, p1, p1 - dstptr - size); + + if (!hnsofs) { + if (douofs == segtop() - dicbuf) { + chg_uidx(segnum, yptr, cnvlen); + } + + *dstptr = 0; + nlen = cnvlen - saml; + if (nlen & 0x10) + *dstptr |= NOKORIYOMITOP; + if (saml & 0x10) + *dstptr |= ASSYUKUYOMITOP; + *dstptr++ |= (size >> 8); + *dstptr++ = size; + *dstptr++ = ((nlen&0x0f)|((saml&0x0f)<<4)); + + while (saml < cnvlen) *dstptr++ = yptr[saml++]; + } + else { + plen = getplen(douptr); + nlen = getnlen(douptr); + *douptr = (newsiz >> 8); + if (nlen & 0x10) + *douptr |= NOKORIYOMITOP; + if (plen & 0x10) + *douptr |= ASSYUKUYOMITOP; + *(douptr + 1) = newsiz; + *(douptr + 2) = ((nlen & 0x0f) | ((plen & 0x0f) << 4)); + } + + if (!knjofs) + *dstptr++ = hinsi; + + stdydat.stdy1.offset = dstptr - dicbuf; + for (saml = 0 ; saml < klen ; ) + *dstptr++ = kptr[saml++]; + if (klen > 0) + *dstptr++ = KANJISTREND; + + if (!knjofs) + *dstptr++ = HINSIBLKTERM; + + (*curdict->putdic)(curdict, segnum); + + if (StudyExist()) { + size -= nxtask; + for (i = STUDYCOUNT, stdy = STUDYDICT ; i-- ; stdy++) { + if (stdy -> dicid != curdict->dicid) + continue; + if (stdy -> seg != segnum) + continue; + if (stdy -> offset >= dstofs) + stdy -> offset += size; + } + + for (p1 = CLSTUDYDICT ; !iseocl(p1) ; p1 = ClNextTag(p1)) { + err = sstrncmp(yptr, (u_char *)ClYomiPos(p1), + (int)ClYomiLen(p1)); + if (err == MATCH) { + delclsub(p1); + mkclidx(); + putcldic(); + break; + } else if (err == OVER) + break; + } + } + + stdydat.stdy1.seg = segnum; + stdydat.stdy1.dicid = curdict->dicid; + stdydat.stdy1.styno = 0; + stdydat.stdy1.sttkj = 0; + stdydat.stdy1.ka_kj = 0; + stdydat.stdy1.nmflg = 0; + stdydat.hinshi = hinsi; + stdydat.len = cnvlen; + stdydat.sttlen = 0; + stdydat.sttfg = 0; + stdydat.ka_fg = 0; + (void)study(&stdydat); + + return AD_DONE; +} + + + +static int +checksub(u_char *kanji, TypeGram grm) +{ + u_char *tagp; + u_char *ptr; + u_char *endp; + int flg, nlen; + int dounum; + u_char buf[MAXWDKANJILEN + 1]; + + dicinl = cnvlen; + dicsaml = 0; + prevseg = (TypeDicSeg)-1; + for (;;) { + if (!(tagp = srchdict(tagp))) + return 0; + if (cnvlen == getnlen(tagp) + getplen(tagp)) + break; + } + + dounum = 0; + + nlen = getnlen(tagp); + ptr = tagp + DOUONBLKSIZENUMBER + nlen; + + endp = tagp + getsize(tagp); + + while (ptr < endp) { + flg = (grm == *ptr++); + while (*ptr != HINSIBLKTERM) { + if (flg) { + buf[getkanji(inputyomi, cnvlen, ptr, buf)] = 0; + if (cmpstr(kanji, buf)) + return -1; + } + dounum++; + ptr = skipkstr(ptr); + } + + ptr++; + } + + return dounum; +} + + + +static u_int +checkdict(u_char *kanji, TypeGram grm) +{ + DICTL *dp; + int dounum = 0; + int tmp; + DICT *tmpdict; + + tmpdict = curdict; + for (dp = dictlist ; dp ; dp = dp -> next) { + + curdict = dp -> dict; + + if ((tmp = checksub(kanji, grm)) < 0) { + curdict = tmpdict; + return AD_AREXIST; + } + + dounum += tmp; + } + curdict = tmpdict; + + if (MAXKOUHONUMBER <= dounum) + return AD_OVFLWDOUNUM; + + return 0; +} + + + +static int +cal_nextym(u_char *ptr) +{ + int count = 0; + u_char *src; + int len; + + if (!segend(ptr)) { + src = cnvstart + getplen(ptr); + + len = getnlen(ptr); + ptr += DOUONBLKSIZENUMBER; + + while (len--) { + if (*ptr++ == *src++) + count++; + else + break; + } + } + return count; +} + + + +static int +usr_freelen() +{ + u_char *ptr; + + ptr = segtop(); + while (!segend(ptr)) + ptr += getsize(ptr); + + return curdict->seglen - (ptr - dicbuf); +} + + + +static void +sprt_seg(TypeDicSeg seg, TypeDicOfs ofs) +{ + TypeDicSeg s; + u_char *pos; + u_char *p; + u_char *q; + int i; + int j; + int ylen, nlen; + TypeDicID dicid; + u_char yomi[MAXWDYOMILEN]; + STDYIN *stdy; + + for (s = curdict->segunit - 1 ; s >= seg ; s--) { + (*curdict->getdic)(curdict, s); + (*curdict->putdic)(curdict, s + 1); + } + curdict->segunit++; + (*curdict->rszdic)(curdict, curdict->segunit); + + (*curdict->getdic)(curdict, seg + 1); + + pos = dicbuf + ofs; + + for (p = segtop() ; (p <= pos) && !segend(p) ; p = q) { + q = getntag(p); + i = getplen(p); + nlen = getnlen(p); + j = (nlen != 0) ? nlen+1: 0; + p += DOUONBLKSIZENUMBER; + while (j-- > 0) + yomi[i++] = *p++; + } + + nlen = getnlen(pos); + ylen = (i = getplen(pos)) + (j = nlen); + + apnd_uidx(seg, yomi, ylen); + + set_size(segtop(), getsize(pos) + i, 0, ylen); + + mvmemi(yomi, (p = segtop() + DOUONBLKSIZENUMBER), ylen); + + q = pos + DOUONBLKSIZENUMBER + j; + i = dicbuf + curdict->seglen - q; + mvmemi(q, p += ylen, i); + j = q - p; + + p += i; + memset(p, DICSEGTERM, (dicbuf + curdict->seglen - p)); + + (*curdict->putdic)(curdict, seg + 1); + + if (StudyExist()) { + dicid = curdict -> dicid; + for (i = STUDYCOUNT, stdy = STUDYDICT ; i-- > 0 ; stdy++) { + if (stdy -> dicid != dicid) + continue; + else if (stdy -> seg < seg) + continue; + else if (stdy -> seg > seg) + stdy -> seg += 1; + else if (stdy -> offset >= ofs) { + stdy -> seg += 1; + stdy -> offset -= j; + } + } + } + + (*curdict->getdic)(curdict, seg); + memset(dicbuf + ofs, DICSEGTERM, (int)(curdict->seglen - ofs)); + (*curdict->putdic)(curdict, seg); +} + + + +static void +apnd_uidx(TypeDicSeg seg, u_char *yomi, int len) +{ + u_char *p; + u_char *q; + + p = get_idxptr(seg); + while (*p++) + ; + + q = idxbuf + curdict->idxlen; + mvmemd(q - (len + 1), q, (int)(q - (len + 1) - p)); + + while (len--) + *p++ = *yomi++; + *p = 0; + + (*curdict->putidx)(curdict, 0); + + mkidxtbl(curdict); +} diff --git a/lib/sj3core/addelcmn.c b/lib/sj3core/addelcmn.c new file mode 100644 index 0000000..58e8741 --- /dev/null +++ b/lib/sj3core/addelcmn.c @@ -0,0 +1,404 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: addelcmn.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:27 $ + */ + + + + +#include "sj_euc.h" +#include "sj_kcnv.h" +#include "sj_hinsi.h" +#include "sj_yomi.h" + +#include "sj_kanakan.h" + + +void +set_size(u_char *p, int size, int plen, int nlen) +{ + *p = (u_char)(size >> 8); + if (nlen & 0x10) *p |= NOKORIYOMITOP; + if (plen & 0x10) *p |= ASSYUKUYOMITOP; + *(p + 1) = (u_char)size; + *(p + 2) = (u_char)((nlen & 0x0f) | ((plen & 0x0f) << 4)); +} + +static int +isvyomi(u_char *yp) +{ + int len; + + if (!*yp) return FALSE; + + if (!(Chrtbl[*yp] & DICTOP)) return FALSE; + + for (len = 0 ; *yp ; yp++) { + if (!(Chrtbl[*yp]) || (*yp >= Y_KUTEN)) return FALSE; + + if (++len > MAXWDYOMILEN) return FALSE; + } + + return TRUE; +} + + + +static int +isvknj(u_char *kanji) +{ + int len; + + if (!*kanji) return FALSE; + + for (len = 0 ; *kanji ; ) { + if (*kanji == SS3) { + kanji += 3; + len += 2; + } else + + if (isknj1(*kanji)) { + kanji += 2; + len += 2; + } + + else { + kanji++; + len += 2; + } + + if (len > MAXWDKANJILEN) return FALSE; + } + + return TRUE; +} + + + +static int +isgrm(TypeGram gram) +{ + int grm = gram; + + if (MEISI_1 <= grm && grm <= D_MEISI_6) return TRUE; + if (MYOUJI <= grm && grm <= JOSUUSI2) return TRUE; + if (KEIYOUSI_1 <= grm && grm <= DO_ZAHEN) return TRUE; + if (DO_1DAN_1 <= grm && grm <= DO_WAGO_2) return TRUE; + if (DO_KAGO_5 <= grm && grm <= DO_WAGO_5) return TRUE; + if (DO_KAGO_6 <= grm && grm <= DO_WAGO_6) return TRUE; + if (DO_1DAN_3 <= grm && grm <= DO_WAGO_3) return TRUE; + if (DO_1DAN_4 <= grm && grm <= DO_WAGO_4) return TRUE; + if (DO_KAGO_7 <= grm && grm <= DO_WAGO_7) return TRUE; + if (DO_KAGO_8 <= grm && grm <= DO_WAGO_8) return TRUE; + if (SP_SA_MI1 <= grm && grm <= TANKANJI) return TRUE; + + return FALSE; +} + + + +u_int +addel_arg(u_char *yp, u_char *kp, TypeGram grm, u_char *nyp, int len) +{ + u_short err = 0; + + if (!sj2cd_str(yp, nyp, len)) err |= AD_BADYOMI; + + if (!isvyomi(nyp)) err |= AD_BADYOMI; + + if (!isvknj(kp)) err |= AD_BADKANJI; + + if (!isgrm(grm)) err |= AD_BADHINSI; + + return err; +} + + + +static void +yomi2kata(u_char *src, u_char *dst) +{ + int first; + int second; + + while (first = *src++) { + second = *src++; + + if (first != 0xa4) { + *dst++ = first; + *dst++ = second; + } + + else { + *dst++ = 0xa5; + *dst++ = second; + } + } + + *dst = 0; +} + + + +static int +top_strcmp(u_char *src, u_char *dst) +{ + int i; + + for (i = 0 ; *src && (*src == *dst) ; src++, dst++) i++; + + i /= 2; + + return (i > MAXYOMIASKNUMBER) ? MAXYOMIASKNUMBER : i; +} + + + +static int +last_strcmp(u_char *src, u_char *dst) +{ + int slen; + int dlen; + + slen = sstrlen(src); + dlen = sstrlen(dst); + + if (dlen > MAXYOMIASKNUMBER * 2) return 0; + + if (sstrcmp(src + (slen - dlen), dst)) return 0; + + return (dlen / 2); +} + + + +int +cvtknj(u_char *yomi, u_char *knj, u_char *dst) +{ + u_char kana[MAXWDYOMILEN * 2 + 1]; + int len; + u_char *keep; + + keep = dst; + yomi2kata(yomi, kana); + + if (len = top_strcmp(yomi, knj)) { + *dst = (u_char)(ZENHIRAASSYUKU | (len - 1)); + } + else if (len = top_strcmp(kana, knj)) { + *dst = (u_char)(ZENKATAASSYUKU | (len - 1)); + } + + if (len) { + knj += len * 2; + dst++; + } + + if (*knj) { + for ( ; ; ) { + if (len = last_strcmp(yomi, knj)) { + *dst++ = (u_char)(ZENHIRAASSYUKU | (len - 1)); + break; + } + else if (len = last_strcmp(kana, knj)) { + *dst++ = (u_char)(ZENKATAASSYUKU | (len - 1)); + break; + } + else if (*knj == SS2) { + knj++; + *dst++ = (u_char)LEADINGHANKAKU; + *dst++ = *knj++; + } else if (*knj == SS3) { + knj++; + *dst++ = (*knj & NORMALKANJIMASK); knj++; + *dst++ = *knj++; + } else if (*knj & 0x80) { + *dst++ = (*knj & NORMALKANJIMASK); knj++; + *dst++ = (*knj & NORMALKANJIMASK); knj++; + } + else { + *dst++ = (u_char)LEADINGHANKAKU; + *dst++ = *knj++; + } + if (!*knj) { + break; + } + } + } + *dst = 0; + + return (dst - keep); +} + + + +int +srchkana(u_char **ptr, int *saml) +{ + u_char *p; + int cmp; + int cnt = 0; + u_char same; + int flg = 0; + + same = 0; + + p = segtop(); + + while (!segend(p)) { + if (flg == 0) { + cmp = yomicmp(cnvstart, p, &same); + + if (cmp == OVER) break; + if (cmp == MATCH && *(cnvstart + same) == 0) { + *ptr = p; + *saml = same; + flg = 1; + } + } + p = getntag(p); + cnt++; + } + + if (flg != 0) return cnt; + + *ptr = p; + *saml = same; + return 0; +} + + + +int +srchgram(u_char *ptr, u_char **dst, TypeGram hinsi) +{ + u_char *endp; + int cnt = 0, nlen; + int flg = FALSE; + + endp = getntag(ptr); + + nlen = getnlen(ptr); + + ptr += DOUONBLKSIZENUMBER + nlen; + while (ptr < endp) { + if (*ptr == hinsi) { + *dst = ptr; + flg = TRUE; + } + do { + ptr += codesize(*ptr); + } while (*ptr != HINSIBLKTERM); + ptr++; + cnt++; + } + + if (flg) return cnt; + + *dst = ptr; + return 0; +} + + + +int +srchkanji(u_char **dst, u_char *knj, int klen) +{ + u_char *ptr; + u_char *p, *q; + int len; + int flg = FALSE; + int cnt = 0; + + ptr = *dst + 1; + + while (*ptr != HINSIBLKTERM) { + for (p = ptr, q = knj, len = klen ; len ; len--) + if (*p++ != *q++) break; + + if (!len) { + *dst = ptr; + flg = TRUE; + } + + while (!(*ptr == KANJISTREND)) { + ptr += codesize(*ptr); + } + ptr++; + cnt++; + } + + if (!flg) *dst = ptr; + + return cnt; +} + + + +TypeIdxOfs +count_uidx() +{ + u_char *p; + + p = get_idxptr(curdict->segunit - 1); + while (*p++) ; + + return (curdict->idxlen - (p - idxbuf)); +} + + + +void +chg_uidx(TypeDicSeg seg, u_char *yomi, int len) +{ + u_char *p, *q; + int olen; + + p = get_idxptr(seg); + + olen = sstrlen(p); + + q = idxbuf + curdict->idxlen; + + if (len > olen) { + mvmemd(q - (len-olen), q, (int)(q - (len-olen) - p)); + } + else { + mvmemi(p + (olen-len), p, (int)(q - (p + (olen-len)))); + } + while (len--) *p++ = *yomi++; + + (*curdict->putidx)(curdict, 0); + + mkidxtbl(curdict); +} diff --git a/lib/sj3core/alloc.c b/lib/sj3core/alloc.c new file mode 100644 index 0000000..a611657 --- /dev/null +++ b/lib/sj3core/alloc.c @@ -0,0 +1,107 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: alloc.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:28 $ + */ + + +#include +#include +#include "sj_rename.h" +#include "sj_typedef.h" +#include "sj_const.h" +#include "sj_var.h" +#include "sj_struct.h" + +#include "sj_kanakan.h" + +#define JREC_NUM 128 +#define CLREC_NUM 128 + +static JREC *jrec = NULL; +static CLREC *clrec = NULL; + +JREC * +alloc_jrec() +{ + JREC *p; + int i; + + if (jrec == NULL) { + jrec = (JREC *)malloc(sizeof(JREC) * JREC_NUM); + if (jrec == NULL) return (JREC *)malloc(sizeof(JREC)); + for (i = 0, p = jrec ; i < JREC_NUM - 1 ; i++, p++) + p -> jsort = p + 1; + p -> jsort = NULL; + } + p = jrec; + jrec = jrec -> jsort; + + return p; +} + +void +free_jrec(JREC *p) +{ + if (p != NULL) { + p -> jsort = jrec; + jrec = p; + } +} + +CLREC * +alloc_clrec() +{ + CLREC *p; + int i; + + if (clrec == NULL) { + clrec = (CLREC *)malloc(sizeof(CLREC) * CLREC_NUM); + if (clrec == NULL) return (CLREC *)malloc(sizeof(CLREC)); + for (i = 0, p = clrec ; i < CLREC_NUM - 1 ; i++, p++) + p -> clsort = p + 1; + p -> clsort = NULL; + } + p = clrec; + clrec = clrec -> clsort; + + return p; +} + +void +free_clrec(CLREC *p) +{ + if (p != NULL) { + p -> clsort = clrec; + clrec = p; + } +} diff --git a/lib/sj3core/charsize.c b/lib/sj3core/charsize.c new file mode 100644 index 0000000..f05fd8b --- /dev/null +++ b/lib/sj3core/charsize.c @@ -0,0 +1,63 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: charsize.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:29 $ + */ + + + + +#include "sj_euc.h" +#include "sj_rename.h" +#include "sj_typedef.h" +#include "sj_dict.h" + +#include "sj_kanakan.h" + +int +codesize(u_char code) +{ + switch (code & KANJIMODEMASK) { + case ZENHIRAASSYUKU: + case ZENKATAASSYUKU: + case KANJIASSYUKU: + case KANJISTREND: + return 1; + case LEADINGHANKAKU: + case OFFSETASSYUKU: + case AIATTRIBUTE: + return 2; + default: + return 2; + } +} + diff --git a/lib/sj3core/chrtbl.c b/lib/sj3core/chrtbl.c new file mode 100644 index 0000000..286ed47 --- /dev/null +++ b/lib/sj3core/chrtbl.c @@ -0,0 +1,303 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: chrtbl.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:30 $ + */ + + + + +#include "sj_const.h" +#include "sj_rename.h" +#include "sj_typedef.h" + +#include "sj_kanakan.h" + +u_char chrtbl[256] = +{ + 0, + FZKTOP, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU + BEFORNUM, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + DICTOP + NUMBER, + DICTOP + NUMBER, + DICTOP + NUMBER, + DICTOP + NUMBER, + DICTOP + NUMBER, + DICTOP + NUMBER, + DICTOP + NUMBER, + DICTOP + NUMBER, + DICTOP + NUMBER, + DICTOP + NUMBER, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DICTOP + TAI_KGU, + DEPEND, + DICTOP, + DEPEND, + DICTOP, + DEPEND, + DICTOP, + DEPEND, + DICTOP, + DEPEND, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + FZKTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DEPEND, + DICTOP, + DEPEND, + DICTOP, + DEPEND, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DICTOP, + DEPEND, + DICTOP, + DICTOP, + DICTOP, + FZKTOP, + DICTOP, + DICTOP, + DEPEND, + DEPEND, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + FZK_KGU, + FZK_KGU, + FZK_KGU + MIDNUM, + FZK_KGU + MIDNUM, + FZK_KGU + TAI_KGU, + FZK_KGU + TAI_KGU, + TAI_KGU + BEFORNUM, + TAI_KGU, + FZK_KGU, + TAI_KGU, + TAI_KGU, + TAI_KGU, + TAI_KGU, + 0 +}; diff --git a/lib/sj3core/cl2knj.c b/lib/sj3core/cl2knj.c new file mode 100644 index 0000000..66c790e --- /dev/null +++ b/lib/sj3core/cl2knj.c @@ -0,0 +1,222 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: cl2knj.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:31 $ + */ + +#include + +#include "sj_kcnv.h" + +#include "sj_kanakan.h" + + +static CLREC *nextrecblk(), *prevrecblk(); + +static void initkbuf(u_char *); + + +int +cl2knj(u_char *yomi, int len, u_char *kouho) +{ + u_char *ptr1; + u_char *ptr2; + int i; + + khcount = nkhcount = 0; + + initkbuf(kouho); + + if (len > MAXCLINPUTLEN * 2) len = MAXCLINPUTLEN * 2; + + ptr1 = yomi; ptr2 = hyomi; + for (i = 0 ; i < len ; i++) { + if (isknj1(*ptr1)) { + if (++i >= len) break; + } + ptr1 += sj2cd_chr(ptr1, ptr2++); + } + *ptr2 = 0; + + strlcpy(orgyomi, yomi, (int)(ptr1 - yomi) + 1); + + if (!hyomi[0]) return 0; + + freework(); + + inputyomi = orgyomi; + cnvstart = ystart = hyomi; + cnvlen = sstrlen(hyomi); + + mkjiritu(0); + + mkbunsetu(); + + if (!maxclptr) wakachi(); + + jrt1st = maxjptr; + clt1st = maxclptr; + + mkkouho(); + + getrank(); + + selectid = 1; + + cvtclknj(); + + return hzstrlen(inputyomi, (int)clt1st -> cllen); +} + + + +int +nextcl(u_char *kouho, int mode) +{ + CLREC *clptr; + + initkbuf(kouho); + + if (!khcount) return 0; + + if (!mode && (selectid < khcount)) + selectid++; + + else if((mode < 2) && (clptr = nextrecblk())) { + selectid = 1; + clt1st = clptr; + mkkouho(); + getrank(); + } + else { + cvtclknj(); + return 0; + } + + cvtclknj(); + + return hzstrlen(inputyomi, (int)clt1st -> cllen); +} + + + + +static CLREC* +nextrecblk() +{ + CLREC *clptr; + int keeplen; + + keeplen = clt1st -> cllen; + + clptr = clt1st -> clsort; + + while (clptr && (int)clptr -> cllen == keeplen) + clptr = clptr -> clsort; + + return clptr; +} + + + + +int +prevcl(u_char *kouho, int mode) +{ + CLREC *clptr; + + initkbuf(kouho); + + if (!khcount) return 0; + + if (!mode && (selectid > 1)) + selectid--; + + else if ((mode < 2) && (clptr = prevrecblk())) { + clt1st = clptr; + mkkouho(); + getrank(); + selectid = khcount; + } + else { + cvtclknj(); + return 0; + } + + cvtclknj(); + + return hzstrlen(inputyomi, (int)clt1st -> cllen); +} + + + +static CLREC* +prevrecblk() +{ + CLREC *clptr; + CLREC *keepptr; + int keeplen; + int cllen; + + clptr = maxclptr; + + if ((cllen = clt1st -> cllen) == clptr -> cllen) + return NULL; + + while ((int)clptr -> cllen > cllen) { + keeplen = clptr -> cllen; + + keepptr = clptr; + + while ((int)clptr -> cllen == keeplen) + clptr = clptr -> clsort; + } + + return keepptr; +} + + + +static void +initkbuf(u_char *kouho) +{ + kanjitmp = kouho; + memset(kanjitmp, 0, sizeof(STDYOUT) + 1); +} + + + +int +selectnum() +{ + return selectid; +} diff --git a/lib/sj3core/clstudy.c b/lib/sj3core/clstudy.c new file mode 100644 index 0000000..4a7c4a4 --- /dev/null +++ b/lib/sj3core/clstudy.c @@ -0,0 +1,285 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: clstudy.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:32 $ + */ + + + + + +#include "sj_kcnv.h" + +#include "sj_kanakan.h" + + +static u_char *delcldata(), *srchclpos(); +static int delclold(); + + +int +clstudy(u_char *yomi1, u_char *yomi2, STDYOUT *stdy) +{ + u_char ytmp[CLSTDY_TMPLEN]; + u_char *dst, *ptr; + int ret; + int len1, len2; + int alen, blen; + int i; + + if (!StudyExist()) return CLSTUDYNODICT; + + if (!yomi1 || !*yomi1) return CLSTUDYPARAERR; + + if (!yomi2 || !*yomi2) { + if (!sj2cd_str(yomi1, ytmp, CLSTDY_TMPLEN)) + return CLSTUDYYOMIERR; + + (void)delcldata(ytmp); + + ret = CLSTUDYNORMEND; + } + else if (!stdy) + return CLSTUDYPARAERR; + + else { + if (!sj2cd_str(yomi1, ytmp, CLSTDY_TMPLEN)) + return CLSTUDYYOMIERR; + len1 = sstrlen(ytmp); + + if (!sj2cd_str(yomi2, ytmp + len1, CLSTDY_TMPLEN - len1)) + return CLSTUDYYOMIERR; + len2 = len1 + stdy -> len; + + ytmp[len2] = 0; + + alen = len2 + CL_HDLEN; + + if (alen + 1 >= CLSTUDYLEN) return CLSTUDYNOAREA; + + blen = CLSTUDYTAIL - delcldata(ytmp) - 1; + + while (blen < alen) { + if (!(i = delclold())) break; + blen += i; + } + + + if (blen >= alen) { + dst = srchclpos(ytmp); + + ptr = CLSTUDYTAIL - alen; + mvmemd(ptr, CLSTUDYTAIL, (ptr - dst)); + ClYomiLen(dst) = (u_char)len2; + ClGramCode(dst) = stdy -> hinshi; + ClYomi1Len(dst) = (u_char)len1; + ClSetNum(dst, 1); + memcpy(ClYomiPos(dst), ytmp, len2); + + ret = CLSTUDYNORMEND; + } + else + ret = CLSTUDYNOAREA; + } + mkclidx(); + putcldic(); + + return ret; +} + + + +static u_char * +delcldata(u_char *ycode) +{ + u_char *tagptr; + u_char *ptr1; + u_char *ptr2; + int len1; + + tagptr = CLSTUDYDICT; + while (!iseocl(tagptr)) { + ptr1 = ycode; + ptr2 = ClYomiPos(tagptr); + len1 = ClYomiLen(tagptr); + + while (*ptr1 && len1) { + if (*ptr1 != *ptr2) break; + ptr1++; + ptr2++; + len1--; + } + if (!*ptr1 || !len1) { + delclsub(tagptr); + } + else { + tagptr = ClNextTag(tagptr); + } + } + + return tagptr; +} + + + +void +delclsub(u_char *target) +{ + u_char *src; + int num; + int tmp; + int len; + + num = ClGetNum(target); + + len = ClBlkLen(target); + + src = target + len; + + mvmemi(src, target, (CLSTUDYTAIL - src)); + + memset(CLSTUDYTAIL - len, 0, len); + + src = CLSTUDYDICT; + while (!iseocl(src)) { + tmp = ClGetNum(src); + + if (tmp > num) { + tmp -= 1; + ClSetNum(src, tmp); + } + + src = ClNextTag(src); + } +} + + + +static int +delclold() +{ + u_char *tagptr; + u_char *target; + int num; + int tmp; + + target = NULL; + num = 0; + + tagptr = CLSTUDYDICT; + while (!iseocl(tagptr)) { + tmp = ClGetNum(tagptr); + + if (tmp >= num) { + num = tmp; + target = tagptr; + } + + tagptr = ClNextTag(tagptr); + } + + if (target) { + num = ClBlkLen(tagptr); + delclsub(target); + } + + return num; +} + + + +static u_char * +srchclpos(u_char *ycode) +{ + u_char *tagptr; + u_char *target; + u_char *ptr1; + u_char *ptr2; + int len; + int tmp; + + target = NULL; + tagptr = CLSTUDYDICT; + while (!iseocl(tagptr)) { + tmp = ClGetNum(tagptr); + + tmp++; + ClSetNum(tagptr, tmp); + + ptr1 = ycode; + ptr2 = ClYomiPos(tagptr); + len = ClYomiLen(tagptr); + while (*ptr1 && len) { + if (*ptr1 != *ptr2) break; + ptr1++; + ptr2++; + len--; + } + + if (!target) { + if (!len) + ; + else if (!*ptr1) + target = tagptr; + else if (*ptr1 < *ptr2) + target = tagptr; + } + tagptr = ClNextTag(tagptr); + } + + return target ? target : tagptr; +} + + + +void +mkclidx() +{ + u_char *ptr; + int num; + int st, ed; + + if (!StudyExist()) return; + + ptr = CLSTUDYDICT; + for (num = st = 0 ; st < 0x100 ; num++, st = ed) { + ed = st + CLSTUDYSTEP; + while (!iseocl(ptr)) { + if ((unsigned int) *ClYomiPos(ptr) >= st) break; + ptr = ClNextTag(ptr); + } + if (ClYomiLen(ptr) && ((int)*ClYomiPos(ptr) < ed)) + CLSTUDYIDX[num] = ptr - CLSTUDYDICT; + else + CLSTUDYIDX[num] = (u_short)-1; + } +} diff --git a/lib/sj3core/cmpstr.c b/lib/sj3core/cmpstr.c new file mode 100644 index 0000000..32a617d --- /dev/null +++ b/lib/sj3core/cmpstr.c @@ -0,0 +1,58 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: cmpstr.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:32 $ + */ + + + + + +#include "sj_rename.h" +#include "sj_const.h" +#include "sj_typedef.h" + +#include "sj_kanakan.h" + +int +cmpstr(u_char *src, u_char *dst) +{ + while (*src) { + if (*src != *dst) return FALSE; + src++; + dst++; + } + + if (*dst) return FALSE; + + return TRUE; +} diff --git a/lib/sj3core/conjunc.c b/lib/sj3core/conjunc.c new file mode 100644 index 0000000..86717ea --- /dev/null +++ b/lib/sj3core/conjunc.c @@ -0,0 +1,1245 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: conjunc.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:33 $ + */ + + +#include "sj_rename.h" +#include "sj_typedef.h" +#include "sj_yomi.h" +#include "sj_right.h" + +static u_char sahencnj[] = { + 0x00, R_SGOKAN, + 0x01, _SA, R_MIZEN1, + 0x01, _SI, R_SI1, + 0x11, _RO, R_MEIREI1, + 0x02, _SU, _RU, R_SHUUSI, + 0x25, _KA, _SI, _NA, _I, _KA, R_KA1, + 0x11, _RE, R_KATEI2, + 0x01, _SE, R_MIZEN2, + 0x12, _NA, _I, R_NAI, + 0x31, _DE, R_NAIDE, + 0x22, _KA, _XTU, R_ONBIN1, + 0x32, _RO, _U, R_KAROU, + 0x21, _KU, R_NAKU, + 0x22, _KE, _RE, R_KATEI3, + 0x12, _RA, _RE, R_RARE, + 0x31, _YO, R_MEIREI2, + 0x31, _RU, R_SHUUSI, + 0x31, _RE, R_KATEI2, + 0x31, _RO, R_MEIREI1, + 0x11, _YO, R_MEIREI2, + 0xff + }; + +static u_char zahencnj[] = { + 0x00, R_CUT, + 0x01, _ZI, R_JI, + 0x11, _YO, R_MEIREI2, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KATEI2, + 0x11, _RO, R_MEIREI1, + 0x02, _ZU, _RU, R_SHUUSI, + 0x11, _RE, R_KATEI2, + 0x01, _ZE, R_MIZEN3, + 0x11, _YO, R_MEIREI2, + 0xff + }; + +static u_char ka5cnj1[] = { + 0x01, _I, R_ONBIN2, + 0x01, _KA, R_MIZEN5, + 0x01, _KI, R_RENYOU5, + 0x01, _KU, R_SHUUSI, + 0x01, _KE, R_KAMEI, + 0x02, _KO, _U, R_AROU, + 0xff + }; + +static u_char ka5cnj3[] = { + 0x01, _I, R_ONBIN2, + 0x01, _KA, R_MIZEN5, + 0x01, _KI, R_RENYOU7, + 0x01, _KU, R_SHUUSI, + 0x01, _KE, R_KAMEI, + 0x02, _KO, _U, R_AROU, + 0xff + }; + +static u_char ka5cnj5[] = { + 0x01, _I, R_ONBIN2, + 0x01, _KA, R_MIZEN5, + 0x11, _SA, R_MIZEN5, + 0x11, _SI, R_SA5RENYOU3, + 0x11, _SU, R_SHUUSI, + 0x12, _SO, _U, R_AROU, + 0x01, _KI, R_RENYOU5, + 0x01, _KU, R_SHUUSI, + 0x01, _KE, R_EXP, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KATEI2, + 0x02, _KO, _U, R_AROU, + 0xff + }; + +static u_char ka5cnj7[] = { + 0x01, _I, R_ONBIN2, + 0x01, _KA, R_MIZEN5, + 0x11, _SA, R_MIZEN5, + 0x11, _SI, R_SA5RENYOU3, + 0x11, _SU, R_SHUUSI, + 0x12, _SO, _U, R_AROU, + 0x01, _KI, R_RENYOU7, + 0x01, _KU, R_SHUUSI, + 0x01, _KE, R_EXP, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KATEI2, + 0x02, _KO, _U, R_AROU, + 0xff + }; + +static u_char ga5cnj1[] = { + 0x01, _I, R_ONBIN3, + 0x01, _GA, R_MIZEN5, + 0x01, _GI, R_RENYOU5, + 0x01, _GU, R_SHUUSI, + 0x01, _GE, R_KAMEI, + 0x02, _GO, _U, R_AROU, + 0xff + }; + +static u_char ga5cnj3[] = { + 0x01, _I, R_ONBIN3, + 0x01, _GA, R_MIZEN5, + 0x01, _GI, R_RENYOU7, + 0x01, _GU, R_SHUUSI, + 0x01, _GE, R_KAMEI, + 0x02, _GO, _U, R_AROU, + 0xff + }; + +static u_char ga5cnj5[] = { + 0x01, _I, R_ONBIN3, + 0x01, _GA, R_MIZEN5, + 0x11, _SA, R_MIZEN5, + 0x11, _SI, R_SA5RENYOU3, + 0x11, _SU, R_SHUUSI, + 0x12, _SO, _U, R_AROU, + 0x01, _GI, R_RENYOU5, + 0x01, _GU, R_SHUUSI, + 0x01, _GE, R_EXP, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KATEI2, + 0x02, _GO, _U, R_AROU, + 0xff + }; + +static u_char ga5cnj7[] = { + 0x01, _I, R_ONBIN3, + 0x01, _GA, R_MIZEN5, + 0x11, _SA, R_MIZEN5, + 0x11, _SI, R_SA5RENYOU3, + 0x11, _SU, R_SHUUSI, + 0x12, _SO, _U, R_AROU, + 0x01, _GI, R_RENYOU7, + 0x01, _GU, R_SHUUSI, + 0x01, _GE, R_EXP, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KATEI2, + 0x02, _GO, _U, R_AROU, + 0xff + }; + +static u_char sa5cnj1[] = { + 0x01, _SA, R_MIZEN5, + 0x01, _SI, R_SA5RENYOU1, + 0x01, _SU, R_SHUUSI, + 0x01, _SE, R_KAMEI, + 0x02, _SO, _U, R_AROU, + 0xff + }; + +static u_char sa5cnj3[] = { + 0x01, _SA, R_MIZEN5, + 0x01, _SI, R_SA5RENYOU3, + 0x01, _SU, R_SHUUSI, + 0x01, _SE, R_KAMEI, + 0x02, _SO, _U, R_AROU, + 0xff + }; + +static u_char sa5cnj5[] = { + 0x01, _SA, R_MIZEN5, + 0x01, _SI, R_SA5RENYOU1, + 0x01, _SU, R_SHUUSI, + 0x01, _SE, R_EXP, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KATEI2, + 0x02, _SO, _U, R_AROU, + 0xff + }; + +static u_char sa5cnj7[] = { + 0x01, _SA, R_MIZEN5, + 0x01, _SI, R_SA5RENYOU3, + 0x01, _SU, R_SHUUSI, + 0x01, _SE, R_EXP, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KATEI2, + 0x02, _SO, _U, R_AROU, + 0xff + }; + +static u_char ta5cnj1[] = { + 0x01, _TA, R_MIZEN5, + 0x01, _TI, R_RENYOU5, + 0x01, _XTU, R_ONBIN2, + 0x01, _TU, R_SHUUSI, + 0x01, _TE, R_KAMEI, + 0x02, _TO, _U, R_AROU, + 0xff + }; + +static u_char ta5cnj3[] = { + 0x01, _TA, R_MIZEN5, + 0x01, _TI, R_RENYOU7, + 0x01, _XTU, R_ONBIN2, + 0x01, _TU, R_SHUUSI, + 0x01, _TE, R_KAMEI, + 0x02, _TO, _U, R_AROU, + 0xff + }; + +static u_char ta5cnj5[] = { + 0x01, _TA, R_MIZEN5, + 0x11, _SA, R_MIZEN5, + 0x11, _SI, R_SA5RENYOU3, + 0x11, _SU, R_SHUUSI, + 0x12, _SO, _U, R_AROU, + 0x01, _TI, R_RENYOU5, + 0x01, _XTU, R_ONBIN2, + 0x01, _TU, R_SHUUSI, + 0x01, _TE, R_EXP, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KATEI2, + 0x02, _TO, _U, R_AROU, + 0xff + }; + +static u_char ta5cnj7[] = { + 0x01, _TA, R_MIZEN5, + 0x11, _SA, R_MIZEN5, + 0x11, _SI, R_SA5RENYOU3, + 0x11, _SU, R_SHUUSI, + 0x12, _SO, _U, R_AROU, + 0x01, _TI, R_RENYOU7, + 0x01, _XTU, R_ONBIN2, + 0x01, _TU, R_SHUUSI, + 0x01, _TE, R_EXP, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KATEI2, + 0x02, _TO, _U, R_AROU, + 0xff + }; + + +static u_char na5cnj[] = { + 0x01, _NA, R_MIZEN5, + 0x01, _NI, R_RENYOU5, + 0x01, _NU, R_SHUUSI, + 0x01, _NE, R_KAMEI, + 0x02, _NO, _U, R_AROU, + 0x01, _NN, R_ONBIN3, + 0xff + }; + +static u_char ba5cnj1[] = { + 0x01, _BA, R_MIZEN5, + 0x01, _BI, R_RENYOU5, + 0x01, _BU, R_SHUUSI, + 0x01, _BE, R_KAMEI, + 0x02, _BO, _U, R_AROU, + 0x01, _NN, R_ONBIN3, + 0xff + }; + +static u_char ba5cnj3[] = { + 0x01, _BA, R_MIZEN5, + 0x01, _BI, R_RENYOU7, + 0x01, _BU, R_SHUUSI, + 0x01, _BE, R_KAMEI, + 0x02, _BO, _U, R_AROU, + 0x01, _NN, R_ONBIN3, + 0xff + }; + +static u_char ba5cnj5[] = { + 0x01, _BA, R_MIZEN5, + 0x11, _SA, R_MIZEN5, + 0x11, _SI, R_SA5RENYOU3, + 0x11, _SU, R_SHUUSI, + 0x12, _SO, _U, R_AROU, + 0x01, _BI, R_RENYOU5, + 0x01, _BU, R_SHUUSI, + 0x01, _BE, R_EXP, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KATEI2, + 0x02, _BO, _U, R_AROU, + 0x01, _NN, R_ONBIN3, + 0xff + }; + +static u_char ba5cnj7[] = { + 0x01, _BA, R_MIZEN5, + 0x11, _SA, R_MIZEN5, + 0x11, _SI, R_SA5RENYOU3, + 0x11, _SU, R_SHUUSI, + 0x12, _SO, _U, R_AROU, + 0x01, _BI, R_RENYOU7, + 0x01, _BU, R_SHUUSI, + 0x01, _BE, R_EXP, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KATEI2, + 0x02, _BO, _U, R_AROU, + 0x01, _NN, R_ONBIN3, + 0xff + }; + +static u_char ma5cnj1[] = { + 0x01, _MA, R_MIZEN5, + 0x01, _MI, R_RENYOU5, + 0x01, _MU, R_SHUUSI, + 0x01, _ME, R_KAMEI, + 0x02, _MO, _U, R_AROU, + 0x01, _NN, R_ONBIN3, + 0xff + }; + +static u_char ma5cnj3[] = { + 0x01, _MA, R_MIZEN5, + 0x01, _MI, R_RENYOU7, + 0x01, _MU, R_SHUUSI, + 0x01, _ME, R_KAMEI, + 0x02, _MO, _U, R_AROU, + 0x01, _NN, R_ONBIN3, + 0xff + }; + +static u_char ma5cnj5[] = { + 0x01, _MA, R_MIZEN5, + 0x11, _SA, R_MIZEN5, + 0x11, _SI, R_SA5RENYOU3, + 0x11, _SU, R_SHUUSI, + 0x12, _SO, _U, R_AROU, + 0x01, _MI, R_RENYOU5, + 0x01, _MU, R_SHUUSI, + 0x01, _ME, R_EXP, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KATEI2, + 0x02, _MO, _U, R_AROU, + 0x01, _NN, R_ONBIN3, + 0xff + }; + +static u_char ma5cnj7[] = { + 0x01, _MA, R_MIZEN5, + 0x11, _SA, R_MIZEN5, + 0x11, _SI, R_SA5RENYOU3, + 0x11, _SU, R_SHUUSI, + 0x12, _SO, _U, R_AROU, + 0x01, _MI, R_RENYOU7, + 0x01, _MU, R_SHUUSI, + 0x01, _ME, R_EXP, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KATEI2, + 0x02, _MO, _U, R_AROU, + 0x01, _NN, R_ONBIN3, + 0xff + }; + +static u_char ra5cnj1[] = { + 0x01, _XTU, R_ONBIN2, + 0x01, _RA, R_MIZEN5, + 0x01, _RI, R_RENYOU5, + 0x01, _RU, R_SHUUSI, + 0x01, _RE, R_KAMEI, + 0x02, _RO, _U, R_AROU, + 0xff + }; + +static u_char ra5cnj3[] = { + 0x01, _XTU, R_ONBIN2, + 0x01, _RA, R_MIZEN5, + 0x01, _RI, R_RENYOU7, + 0x01, _RU, R_SHUUSI, + 0x01, _RE, R_KAMEI, + 0x02, _RO, _U, R_AROU, + 0xff + }; + +static u_char ra5cnj5[] = { + 0x01, _XTU, R_ONBIN2, + 0x01, _RA, R_MIZEN5, + 0x11, _SA, R_MIZEN5, + 0x11, _SI, R_SA5RENYOU3, + 0x11, _SU, R_SHUUSI, + 0x12, _SO, _U, R_AROU, + 0x01, _RI, R_RENYOU5, + 0x01, _RU, R_SHUUSI, + 0x01, _RE, R_EXP, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KATEI2, + 0x02, _RO, _U, R_AROU, + 0xff + }; + +static u_char ra5cnj7[] = { + 0x01, _XTU, R_ONBIN2, + 0x01, _RA, R_MIZEN5, + 0x11, _SA, R_MIZEN5, + 0x11, _SI, R_SA5RENYOU3, + 0x11, _SU, R_SHUUSI, + 0x12, _SO, _U, R_AROU, + 0x01, _RI, R_RENYOU7, + 0x01, _RU, R_SHUUSI, + 0x01, _RE, R_EXP, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KATEI2, + 0x02, _RO, _U, R_AROU, + 0xff + }; + +static u_char wa5cnj1[] = { + 0x01, _I, R_RENYOU5, + 0x01, _U, R_SHUUSI, + 0x01, _E, R_KAMEI, + 0x02, _O, _U, R_AROU, + 0x01, _XTU, R_ONBIN2, + 0x01, _WA, R_MIZEN5, + 0xff + }; + +static u_char wa5cnj3[] = { + 0x01, _I, R_RENYOU7, + 0x01, _U, R_SHUUSI, + 0x01, _E, R_KAMEI, + 0x02, _O, _U, R_AROU, + 0x01, _XTU, R_ONBIN2, + 0x01, _WA, R_MIZEN5, + 0xff + }; + +static u_char wa5cnj5[] = { + 0x01, _I, R_RENYOU5, + 0x01, _U, R_SHUUSI, + 0x01, _E, R_EXP, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KATEI2, + 0x02, _O, _U, R_AROU, + 0x01, _XTU, R_ONBIN2, + 0x01, _WA, R_MIZEN5, + 0x11, _SA, R_MIZEN5, + 0x11, _SI, R_SA5RENYOU3, + 0x11, _SU, R_SHUUSI, + 0x12, _SO, _U, R_AROU, + 0xff + }; + +static u_char wa5cnj7[] = { + 0x01, _I, R_RENYOU7, + 0x01, _U, R_SHUUSI, + 0x01, _E, R_EXP, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KATEI2, + 0x02, _O, _U, R_AROU, + 0x01, _XTU, R_ONBIN2, + 0x01, _WA, R_MIZEN5, + 0x11, _SA, R_MIZEN5, + 0x11, _SI, R_SA5RENYOU3, + 0x11, _SU, R_SHUUSI, + 0x12, _SO, _U, R_AROU, + 0xff + }; + +static u_char ichicnj1[] = { + 0x00, R_RENYOU1, + 0x01, _YO, R_MEIREI2, + 0x01, _RU, R_SHUUSI, + 0x01, _RE, R_KATEI2, + 0x01, _RO, R_MEIREI1, + 0xff + }; + +static u_char ichicnj3[] = { + 0x00, R_RENYOU3, + 0x01, _YO, R_MEIREI2, + 0x01, _RU, R_SHUUSI, + 0x01, _RE, R_KATEI2, + 0x01, _RO, R_MEIREI1, + 0xff + }; + +static u_char keiyou1[] = { + 0x80, R_KGOKAN, + 0x01, _I, R_KSHUUSI, + 0x02, _KA, _XTU, R_ONBIN1, + 0x12, _RO, _U, R_KAROU, + 0x01, _KI, R_KRENTAI, + 0x01, _KU, R_KRENYOU, + 0x02, _KE, _RE, R_KATEI2, + 0xff + }; + +static u_char keiyou2[] = { + 0x80, R_KGOKAN, + 0x01, _I, R_KSHUUSI, + 0x02, _KA, _XTU, R_ONBIN1, + 0x12, _RO, _U, R_KAROU, + 0x01, _KI, R_KRENTAI, + 0x01, _KU, R_KRENYOU, + 0x02, _KE, _RE, R_KATEI2, + 0x01, _SA, R_FZKMEISI, + 0xff + }; + +static u_char keiyou3[] = { + 0x80, R_KGOKAN, + 0x01, _I, R_KSHUUSI, + 0x02, _KA, _XTU, R_ONBIN1, + 0x12, _RO, _U, R_KAROU, + 0x01, _KI, R_KRENTAI, + 0x01, _KU, R_KRENYOU, + 0x02, _KE, _RE, R_KATEI2, + 0x01, _GE, R_DMEISI, + 0x11, _DA, R_DSHUUSI1, + 0x21, _XTU, R_ONBIN1, + 0x22, _RO, _U, R_DAROU, + 0x11, _DE, R_DRENYOU1, + 0x11, _NA, R_DRENTAI1, + 0x21, _RA, R_KATEI1, + 0x21, _RI, R_DSHUUSI2, + 0x21, _RU, R_DRENTAI3, + 0x21, _RE, R_KAMEI, + 0x11, _NI, R_DRENYOU2, + 0x01, _SA, R_FZKMEISI, + 0xff + }; + +static u_char keiyou4[] = { + 0x80, R_KGOKAN, + 0x01, _I, R_KSHUUSI, + 0x02, _KA, _XTU, R_ONBIN1, + 0x12, _RO, _U, R_KAROU, + 0x02, _GA, _XTU, R_ONBIN2, + 0x11, _RA, R_MIZEN5, + 0x11, _RI, R_RENYOU5, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KAMEI, + 0x12, _RO, _U, R_AROU, + 0x01, _KI, R_KRENTAI, + 0x01, _KU, R_KRENYOU, + 0x02, _KE, _RE, R_KATEI2, + 0x01, _SA, R_FZKMEISI, + 0xff + }; + +static u_char keiyou5[] = { + 0x80, R_KGOKAN, + 0x01, _I, R_KSHUUSI, + 0x02, _KA, _XTU, R_ONBIN1, + 0x12, _RO, _U, R_KAROU, + 0x02, _GA, _XTU, R_ONBIN2, + 0x11, _RA, R_MIZEN5, + 0x11, _RI, R_RENYOU5, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KAMEI, + 0x12, _RO, _U, R_AROU, + 0x01, _KI, R_KRENTAI, + 0x01, _KU, R_KRENYOU, + 0x02, _KE, _RE, R_KATEI2, + 0x01, _GE, R_DMEISI, + 0x11, _DA, R_DSHUUSI1, + 0x21, _XTU, R_ONBIN1, + 0x22, _RO, _U, R_DAROU, + 0x11, _DE, R_DRENYOU1, + 0x11, _NA, R_DRENTAI1, + 0x21, _RA, R_KATEI1, + 0x21, _RI, R_DSHUUSI2, + 0x21, _RU, R_DRENTAI3, + 0x21, _RE, R_KAMEI, + 0x11, _NI, R_DRENYOU2, + 0x01, _SA, R_FZKMEISI, + 0xff + }; + +static u_char keiyou6[] = { + 0x80, R_KGOKAN, + 0x01, _I, R_KSHUUSI, + 0x02, _KA, _XTU, R_ONBIN1, + 0x12, _RO, _U, R_KAROU, + 0x01, _KI, R_KRENTAI, + 0x01, _KU, R_KRENYOU, + 0x02, _KE, _RE, R_KATEI2, + 0x01, _GE, R_DMEISI, + 0x11, _DA, R_DSHUUSI1, + 0x21, _XTU, R_ONBIN1, + 0x22, _RO, _U, R_DAROU, + 0x11, _DE, R_DRENYOU1, + 0x11, _NA, R_DRENTAI1, + 0x21, _RA, R_KATEI1, + 0x21, _RI, R_DSHUUSI2, + 0x21, _RU, R_DRENTAI3, + 0x21, _RE, R_KAMEI, + 0x11, _NI, R_DRENYOU2, + 0x01, _SA, R_FZKMEISI, + 0x01, _ME, R_DMEISI, + 0x11, _DA, R_DSHUUSI1, + 0x21, _XTU, R_ONBIN1, + 0x22, _RO, _U, R_DAROU, + 0x11, _DE, R_DRENYOU1, + 0x11, _NA, R_DRENTAI1, + 0x21, _RA, R_KATEI1, + 0x21, _RI, R_DSHUUSI2, + 0x21, _RU, R_DRENTAI3, + 0x21, _RE, R_KAMEI, + 0x11, _NI, R_DRENYOU2, + 0xff + }; + +static u_char keiyou7[] = { + 0x80, R_KGOKAN, + 0x01, _I, R_KSHUUSI, + 0x02, _KA, _XTU, R_ONBIN1, + 0x12, _RO, _U, R_KAROU, + 0x02, _GA, _XTU, R_ONBIN2, + 0x11, _RA, R_MIZEN5, + 0x11, _RI, R_RENYOU5, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KAMEI, + 0x12, _RO, _U, R_AROU, + 0x01, _KI, R_KRENTAI, + 0x01, _KU, R_KRENYOU, + 0x02, _KE, _RE, R_KATEI2, + 0x01, _GE, R_DMEISI, + 0x11, _DA, R_DSHUUSI1, + 0x21, _XTU, R_ONBIN1, + 0x22, _RO, _U, R_DAROU, + 0x11, _DE, R_DRENYOU1, + 0x11, _NA, R_DRENTAI1, + 0x21, _RA, R_KATEI1, + 0x21, _RI, R_DSHUUSI2, + 0x21, _RU, R_DRENTAI3, + 0x21, _RE, R_KAMEI, + 0x11, _NI, R_DRENYOU2, + 0x01, _SA, R_FZKMEISI, + 0x01, _ME, R_DMEISI, + 0x11, _DA, R_DSHUUSI1, + 0x21, _XTU, R_ONBIN1, + 0x22, _RO, _U, R_DAROU, + 0x11, _DE, R_DRENYOU1, + 0x11, _NA, R_DRENTAI1, + 0x21, _RA, R_KATEI1, + 0x21, _RI, R_DSHUUSI2, + 0x21, _RU, R_DRENTAI3, + 0x21, _RE, R_KAMEI, + 0x11, _NI, R_DRENYOU2, + 0xff + }; + +static u_char keiyou8[] = { + 0x80, R_KGOKAN, + 0x01, _I, R_KSHUUSI, + 0x02, _KA, _XTU, R_ONBIN1, + 0x12, _RO, _U, R_KAROU, + 0x02, _GA, _XTU, R_ONBIN2, + 0x11, _RA, R_MIZEN5, + 0x11, _RI, R_RENYOU5, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KAMEI, + 0x12, _RO, _U, R_AROU, + 0x01, _KI, R_KRENTAI, + 0x01, _KU, R_KRENYOU, + 0x02, _KE, _RE, R_KATEI2, + 0x01, _GE, R_DMEISI, + 0x11, _DA, R_DSHUUSI1, + 0x21, _XTU, R_ONBIN1, + 0x22, _RO, _U, R_DAROU, + 0x11, _DE, R_DRENYOU1, + 0x11, _NA, R_DRENTAI1, + 0x21, _RA, R_KATEI1, + 0x21, _RI, R_DSHUUSI2, + 0x21, _RU, R_DRENTAI3, + 0x21, _RE, R_KAMEI, + 0x11, _NI, R_DRENYOU2, + 0x01, _SA, R_FZKMEISI, + 0x01, _MI, R_FZKMEISI, + 0x01, _ME, R_DMEISI, + 0x11, _DA, R_DSHUUSI1, + 0x21, _XTU, R_ONBIN1, + 0x22, _RO, _U, R_DAROU, + 0x11, _DE, R_DRENYOU1, + 0x11, _NA, R_DRENTAI1, + 0x21, _RA, R_KATEI1, + 0x21, _RI, R_DSHUUSI2, + 0x21, _RU, R_DRENTAI3, + 0x21, _RE, R_KAMEI, + 0x11, _NI, R_DRENYOU2, + 0xff + }; + +static u_char keiyou9[] = { + 0x80, R_KGOKAN, + 0x01, _I, R_KSHUUSI, + 0x02, _KA, _XTU, R_ONBIN1, + 0x12, _RO, _U, R_KAROU, + 0x02, _GA, _XTU, R_ONBIN2, + 0x11, _RA, R_MIZEN5, + 0x11, _RI, R_RENYOU5, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KAMEI, + 0x12, _RO, _U, R_AROU, + 0x01, _KI, R_KRENTAI, + 0x01, _KU, R_KRENYOU, + 0x02, _KE, _RE, R_KATEI2, + 0x01, _GE, R_DMEISI, + 0x11, _DA, R_DSHUUSI1, + 0x21, _XTU, R_ONBIN1, + 0x22, _RO, _U, R_DAROU, + 0x11, _DE, R_DRENYOU1, + 0x11, _NA, R_DRENTAI1, + 0x21, _RA, R_KATEI1, + 0x21, _RI, R_DSHUUSI2, + 0x21, _RU, R_DRENTAI3, + 0x21, _RE, R_KAMEI, + 0x11, _NI, R_DRENYOU2, + 0x01, _SA, R_FZKMEISI, + 0xff + }; + +static u_char keiyou10[] = { + 0x80, R_KGOKAN, + 0x01, _I, R_KSHUUSI, + 0x02, _KA, _XTU, R_ONBIN1, + 0x12, _RO, _U, R_KAROU, + 0x02, _GA, _XTU, R_ONBIN2, + 0x11, _RA, R_MIZEN5, + 0x11, _RI, R_RENYOU5, + 0x11, _RU, R_SHUUSI, + 0x11, _RE, R_KAMEI, + 0x12, _RO, _U, R_AROU, + 0x01, _KI, R_KRENTAI, + 0x01, _KU, R_KRENYOU, + 0x02, _KE, _RE, R_KATEI2, + 0x01, _GE, R_DMEISI, + 0x11, _DA, R_DSHUUSI1, + 0x21, _XTU, R_ONBIN1, + 0x22, _RO, _U, R_DAROU, + 0x11, _DE, R_DRENYOU1, + 0x11, _NA, R_DRENTAI1, + 0x21, _RA, R_KATEI1, + 0x21, _RI, R_DSHUUSI2, + 0x21, _RU, R_DRENTAI3, + 0x21, _RE, R_KAMEI, + 0x11, _NI, R_DRENYOU2, + 0x01, _SA, R_FZKMEISI, + 0x01, _ME, R_DMEISI, + 0x11, _DA, R_DSHUUSI1, + 0x21, _XTU, R_ONBIN1, + 0x22, _RO, _U, R_DAROU, + 0x11, _DE, R_DRENYOU1, + 0x11, _NA, R_DRENTAI1, + 0x21, _RA, R_KATEI1, + 0x21, _RI, R_DSHUUSI2, + 0x21, _RU, R_DRENTAI3, + 0x21, _RE, R_KAMEI, + 0x11, _NI, R_DRENYOU2, + 0xff + }; + +static u_char keiyou11[] = { + 0x80, R_KGOKAN, + 0x01, _I, R_KSHUUSI, + 0x02, _KA, _XTU, R_ONBIN1, + 0x12, _RO, _U, R_KAROU, + 0x01, _KI, R_KRENTAI, + 0x01, _KU, R_KRENYOU, + 0x02, _KE, _RE, R_KATEI2, + 0x01, _SA, R_FZKMEISI, + 0x01, _MI, R_FZKMEISI, + 0x01, _ME, R_DMEISI, + 0x11, _DA, R_DSHUUSI1, + 0x21, _XTU, R_ONBIN1, + 0x22, _RO, _U, R_DAROU, + 0x11, _DE, R_DRENYOU1, + 0x11, _NA, R_DRENTAI1, + 0x21, _RA, R_KATEI1, + 0x21, _RI, R_DSHUUSI2, + 0x21, _RU, R_DRENTAI3, + 0x21, _RE, R_KAMEI, + 0x11, _NI, R_DRENYOU2, + 0xff + }; + +static u_char keidou1[] = { + 0x80, R_DGOKAN, + 0x01, _DA, R_DSHUUSI1, + 0x11, _XTU, R_ONBIN1, + 0x12, _RO, _U, R_DAROU, + 0x01, _DE, R_DRENYOU1, + 0x01, _NA, R_DRENTAI1, + 0x11, _RA, R_KATEI1, + 0x11, _RI, R_DSHUUSI2, + 0x11, _RU, R_DRENTAI3, + 0x11, _RE, R_KAMEI, + 0x01, _NI, R_DRENYOU2, + 0xff + }; + +static u_char keidou2[] = { + 0x80, R_DGOKAN, + 0x02, _TA, _RU, R_DRENTAI2, + 0x11, _RE, R_KATEI2, + 0x01, _TO, R_DRENYOU3, + 0xff + }; + +static u_char keidou4[] = { + 0x80, R_DGOKAN, + 0x01, _SA, R_FZKMEISI, + 0x01, _DA, R_DSHUUSI1, + 0x11, _XTU, R_ONBIN1, + 0x12, _RO, _U, R_DAROU, + 0x01, _DE, R_DRENYOU1, + 0x01, _NA, R_DRENTAI1, + 0x11, _RA, R_KATEI1, + 0x11, _RI, R_DSHUUSI2, + 0x11, _RU, R_DRENTAI3, + 0x11, _RE, R_KAMEI, + 0x01, _NI, R_DRENYOU2, + 0xff + }; + +static u_char keidou9[] = { + 0x80, R_DGOKAN, + 0x01, _DA, R_DSHUUSI1, + 0x11, _XTU, R_ONBIN1, + 0x12, _RO, _U, R_DAROU, + 0x01, _DE, R_DRENYOU1, + 0x01, _NA, R_DRENTAI1, + 0x11, _RA, R_KATEI1, + 0x11, _RI, R_DSHUUSI2, + 0x11, _RU, R_DRENTAI3, + 0x11, _RE, R_KAMEI, + 0x01, _NI, R_DRENYOU2, + 0x01, _NO, R_CUT, + 0x12, _KO, _TO, R_KOTO, + 0xff + }; + +static u_char sahenmeisi1[] = { + 0x00, R_SMEISI1, + 0x01, _SA, R_MIZEN1, + 0x01, _SI, R_SI1, + 0x11, _RO, R_MEIREI1, + 0x02, _SU, _RU, R_SHUUSI, + 0x25, _KA, _SI, _NA, _I, _KA, R_KA1, + 0x11, _RE, R_KATEI2, + 0x01, _SE, R_MIZEN2, + 0x11, _YO, R_MEIREI2, + 0xff + }; + +static u_char sahenmeisi2[] = { + 0x00, R_SMEISI1, + 0x01, _SA, R_MIZEN1, + 0x01, _SI, R_SI1, + 0x11, _RO, R_MEIREI1, + 0x02, _SU, _RU, R_SHUUSI, + 0x25, _KA, _SI, _NA, _I, _KA, R_KA1, + 0x11, _RE, R_KATEI2, + 0x01, _SE, R_MIZEN2, + 0x11, _YO, R_MEIREI2, + 0xff + }; + +static u_char keidoumeisi[] = { + 0x00, R_DMEISI, + 0x01, _SA, R_FZKMEISI, + 0x01, _DA, R_DSHUUSI1, + 0x11, _XTU, R_ONBIN1, + 0x12, _RO, _U, R_DAROU, + 0x01, _DE, R_DRENYOU1, + 0x01, _NA, R_DRENTAI1, + 0x11, _RA, R_KATEI1, + 0x11, _RI, R_DSHUUSI2, + 0x11, _RU, R_DRENTAI3, + 0x11, _RE, R_KAMEI, + 0x01, _NI, R_DRENYOU2, + 0xff + }; + +static u_char keiyoustb[] = { + 0x00, R_KSTB, + 0x01, _I, R_KSHUUSI, + 0x02, _KA, _XTU, R_ONBIN1, + 0x12, _RO, _U, R_KAROU, + 0x01, _KI, R_KRENTAI, + 0x01, _KU, R_KRENYOU, + 0x02, _KE, _RE, R_KATEI2, + 0xff + }; + +static u_char ichistb[] = { + 0x00, R_ICHISETUBI, + 0x01, _YO, R_MEIREI2, + 0x01, _RU, R_SHUUSI, + 0x01, _RE, R_KATEI2, + 0x01, _RO, R_MEIREI1, + 0xff + }; + +static u_char fukusi2[] = { + 0x00, R_FUKUSI, + 0x01, _TO, R_F_FUKUSI, + 0x11, _SI, R_SI1, + 0x11, _HA, R_F_FUKUSI, + 0xff + }; + +static u_char fukusi3[] = { + 0x00, R_FUKUSI, + 0x01, _SA, R_MIZEN1, + 0x01, _SI, R_SI1, + 0x11, _RO, R_MEIREI1, + 0x02, _SU, _RU, R_SHUUSI, + 0x25, _KA, _SI, _NA, _I, _KA, R_KA1, + 0x11, _RE, R_KATEI2, + 0x01, _SE, R_MIZEN2, + 0x11, _YO, R_MEIREI2, + 0x01, _TO, R_F_FUKUSI, + 0x11, _SI, R_SI1, + 0x11, _HA, R_F_FUKUSI, + 0xff + }; + +static u_char fukusi4[] = { + 0x00, R_FUKUSI, + 0x01, _SA, R_MIZEN1, + 0x01, _SI, R_SI1, + 0x11, _RO, R_MEIREI1, + 0x02, _SU, _RU, R_SHUUSI, + 0x25, _KA, _SI, _NA, _I, _KA, R_KA1, + 0x11, _RE, R_KATEI2, + 0x01, _SE, R_MIZEN2, + 0x11, _YO, R_MEIREI2, + 0xff + }; + +static u_char fukusi5[] = { + 0x00, R_FUKUSI, + 0x01, _NI, R_F_FUKUSI, + 0xff + }; + +static u_char fukusi6[] = { + 0x00, R_FUKUSI, + 0x01, _MO, R_F_FUKUSI, + 0xff + }; + +static u_char fukusi7[] = { + 0x00, R_FUKUSI, + 0x01, _NO, R_F_FUKUSI, + 0xff + }; + +static u_char fukusi8[] = { + 0x00, R_FUKUSI, + 0x01, _DA, R_DSHUUSI1, + 0x11, _XTU, R_ONBIN1, + 0x02, _DE, _SI, R_DESHI, + 0x21, _XYO, R_SHO, + 0x31, _U, R_DESHOU, + 0x11, _SU, R_DESU, + 0x01, _TO, R_F_FUKUSI, + 0x11, _SI, R_SI1, + 0x11, _HA, R_F_FUKUSI, + 0xff + }; + +static u_char fukusi9[] = { + 0x00, R_FUKUSI, + 0x01, _SA, R_MIZEN1, + 0x01, _SI, R_SI1, + 0x11, _RO, R_MEIREI1, + 0x02, _SU, _RU, R_SHUUSI, + 0x25, _KA, _SI, _NA, _I, _KA, R_KA1, + 0x11, _RE, R_KATEI2, + 0x01, _SE, R_MIZEN2, + 0x11, _YO, R_MEIREI2, + 0x01, _DA, R_DSHUUSI1, + 0x11, _XTU, R_ONBIN1, + 0x02, _DE, _SI, R_DESHI, + 0x21, _XYO, R_SHO, + 0x31, _U, R_DESHOU, + 0x11, _SU, R_DESU, + 0x01, _TO, R_F_FUKUSI, + 0x11, _SI, R_SI1, + 0x11, _HA, R_F_FUKUSI, + 0x01, _NO, R_F_FUKUSI, + 0xff + }; + +u_char *conjadr[] = { + 0, + 0, + 0, + 0, + 0, + sahenmeisi1, + sahenmeisi1, + sahenmeisi2, + keidoumeisi, + keidoumeisi, + keidoumeisi, + 0, + + 0, + 0, + 0, + sahenmeisi1, + keidoumeisi, + 0, + + 0, + 0, + 0, + + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + + 0, + 0, + 0, + 0, + 0, + + 0, + 0, + 0, + 0, + keiyoustb, + keidoumeisi, + sahenmeisi1, + ichistb, + 0, + + 0, + fukusi2, + fukusi3, + fukusi4, + fukusi5, + fukusi6, + fukusi7, + fukusi8, + fukusi9, + 0, + 0, + 0, + 0, + 0, + 0, + + keiyou1, + keiyou2, + keiyou3, + keiyou4, + keiyou5, + keiyou6, + keiyou7, + keiyou8, + keiyou9, + keiyou10, + keiyou11, + + keidou1, + keidou2, + keidou1, + keidou4, + keidou4, + keidou1, + keidou4, + keidou1, + keidou9, + + sahencnj, + zahencnj, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + + ichicnj1, + ka5cnj1, + ga5cnj1, + sa5cnj1, + ta5cnj1, + na5cnj, + ba5cnj1, + ma5cnj1, + ra5cnj1, + wa5cnj1, + + ichicnj1, + ka5cnj1, + ga5cnj1, + sa5cnj1, + ta5cnj1, + ba5cnj1, + ma5cnj1, + ra5cnj1, + wa5cnj1, + 0, + 0, + + ka5cnj5, + ga5cnj5, + sa5cnj5, + ta5cnj5, + ba5cnj5, + ma5cnj5, + ra5cnj5, + wa5cnj5, + 0, + 0, + + ka5cnj5, + ga5cnj5, + sa5cnj5, + ta5cnj5, + ba5cnj5, + ma5cnj5, + ra5cnj5, + wa5cnj5, + 0, + + ichicnj3, + ka5cnj3, + ga5cnj3, + sa5cnj3, + ta5cnj3, + ba5cnj3, + ma5cnj3, + ra5cnj3, + wa5cnj3, + 0, + + ichicnj3, + ka5cnj3, + ga5cnj3, + sa5cnj3, + ta5cnj3, + ba5cnj3, + ma5cnj3, + ra5cnj3, + wa5cnj3, + 0, + 0, + + ka5cnj7, + ga5cnj7, + sa5cnj7, + ta5cnj7, + ba5cnj7, + ma5cnj7, + ra5cnj7, + wa5cnj7, + 0, + 0, + + ka5cnj7, + ga5cnj7, + sa5cnj7, + ta5cnj7, + ba5cnj7, + ma5cnj7, + ra5cnj7, + wa5cnj7, + 0, + 0, + + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 +}; diff --git a/lib/sj3core/connect.c b/lib/sj3core/connect.c new file mode 100644 index 0000000..02386a9 --- /dev/null +++ b/lib/sj3core/connect.c @@ -0,0 +1,8113 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: connect.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:34 $ + */ + + + +#include "sj_rename.h" +#include "sj_typedef.h" +#include "sj_connect.h" +#include "sj_right.h" + +static u_char mizen1[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_o+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_o+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char mizen2[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_o+zu_o+zunba_o+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_o+ne2_o+nn2_o+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char mizen3[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_o+zu_o+zunba_o+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_o+ne2_o+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_o+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char mizen4[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_o+zu_o+zunba_o+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_o+ne2_o+nn2_o+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char mizen5[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_o+zu_o+zunba_o+seru_o+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_o+ne2_o+nn2_o+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_o+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char arou[] = { + wo_x+ttatte_o +ttara_o +tte1_o +tte2_x +ppanasi_x +ppoi_x +ue_x, + uti_x +oite_x +okeru_x +ori_x +ka1_x +ka2_o +kai_x +kasira_o, + katagata_x+kadouka_x+kana_o+kane_x+kamo_x+kara1_x+kara2_o+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_o+koso_x, + koto_x+sa2_x+sae_x+si2_o+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_o+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_o, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_o+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char you1[] = { + wo_x+ttatte_o +ttara_o +tte1_o +tte2_x +ppanasi_x +ppoi_x +ue_x, + uti_x +oite_x +okeru_x +ori_x +ka1_x +ka2_o +kai_x +kasira_o, + katagata_x+kadouka_x+kana_o+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_o+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_o, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_o+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char karou[] = { + wo_x+ttatte_o +ttara_x +tte1_o +tte2_x +ppanasi_x +ppoi_x +ue_x, + uti_x +oite_x +okeru_x +ori_x +ka1_x +ka2_o +kai_x +kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + + +static u_char darou[] = { + wo_x+ttatte_o+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_o+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_o+kamo_x+kara1_x+kara2_o+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_o+koso_x, + koto_x+sa2_x+sae_x+si2_o+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_o, + nite_x+nimo_x+ne1_o+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char deshou[] = { + wo_x+ttatte_o+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_o+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_o+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_o+koso_x, + koto_x+sa2_x+sae_x+si2_o+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_o+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ko[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_o+zaru_x+zu_x+zunba_o+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_o+ne2_o+nn2_o+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_o+youda_x+rasii_x+rareru_o+reru_o+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char bekara[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_o+zu_o+zunba_o+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char tagara[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_o+zu_o+zunba_x+seru_o+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_o+ne2_o+nn2_o+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char si1[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_o+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_o+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_o+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_o+tai_o+tagaru_o+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_o+masu_o+masure_o, + mase_x+mitaida_x+you_o+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_o+itasi_x+itadaku_x+iru_x+eru_x+kakeru_o+kaneru_o, + karazu_x+gatai_o+gatida_o+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_x+naru_x+nasai_o+nasaru_o+nikui_o, + yasui_o+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ji[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_o+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_o+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_o+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_o+zaru_o+zu_o+zunba_o+seru_x+souda_o+youtai_o, + denbun_x+ta_o+tai_o+tagaru_o+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_o+ne2_o+nn2_x+fuuda_x+besi_x+mai_o+masu_o+masure_o, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_o+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_o+itasi_x+itadaku_x+iru_x+eru_x+kakeru_o+kaneru_o, + karazu_x+gatai_o+gatida_o+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_x+dekiru_x+naru_x+nasai_o+nasaru_o+nikui_o, + yasui_o+yoi_o+yaru_x+ttarasii_x + }; + +static u_char age[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_x+sura_o+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_o+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_o+zunba_o+seru_x+souda_o+youtai_o, + denbun_x+ta_o+tai_o+tagaru_o+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_o+ne2_o+nn2_o+fuuda_x+besi_x+mai_o+masu_o+masure_o, + mase_x+mitaida_x+you_o+youda_x+rasii_x+rareru_o+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_x+naru_x+nasai_o+nasaru_x+nikui_o, + yasui_o+yoi_x+yaru_x+ttarasii_x + }; + +static u_char i[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_o+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_o+zaru_o+zu_o+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_o+tai_o+tagaru_o+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_o+ne2_o+nn2_x+fuuda_x+besi_x+mai_o+masu_o+masure_o, + mase_x+mitaida_x+you_o+youda_x+rasii_x+rareru_o+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_o+nasaru_o+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char e[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_o+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_o+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_o+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_o+ne2_o+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_o+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char kake[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_o+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_o+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_o+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_o, + nu_o+ne2_o+nn2_o+fuuda_x+besi_x+mai_x+masu_o+masure_o, + mase_x+mitaida_x+you_o+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_x+naru_x+nasai_o+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char kane2[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_o+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_o+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_o+masure_o, + mase_x+mitaida_x+you_o+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char sugi[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_o+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_o+zu_o+zunba_o+seru_x+souda_x+youtai_x, + denbun_x+ta_o+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_o+ne2_o+nn2_x+fuuda_x+besi_x+mai_o+masu_o+masure_o, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char deki[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_o+zunba_o+seru_x+souda_o+youtai_o, + denbun_x+ta_o+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_o+ne2_o+nn2_o+fuuda_x+besi_x+mai_o+masu_o+masure_o, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char mi[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_o+zaru_x+zu_o+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_o+tai_o+tagaru_o+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_o+ne2_o+nn2_o+fuuda_x+besi_x+mai_o+masu_o+masure_o, + mase_x+mitaida_x+you_o+youda_x+rasii_x+rareru_o+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_x+naru_x+nasai_o+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char sase[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_o+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_o+zu_o+zunba_o+seru_x+souda_o+youtai_o, + denbun_x+ta_o+tai_o+tagaru_o+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_o+ne2_o+nn2_o+fuuda_x+besi_x+mai_o+masu_o+masure_o, + mase_x+mitaida_x+you_o+youda_x+rasii_x+rareru_o+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_x+naru_x+nasai_o+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char rare[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_o+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_o+zu_o+zunba_o+seru_x+souda_o+youtai_o, + denbun_x+ta_o+tai_o+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_o+ne2_o+nn2_o+fuuda_x+besi_x+mai_o+masu_o+masure_o, + mase_x+mitaida_x+you_o+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_o+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_o, + yasui_o+yoi_x+yaru_x+ttarasii_x + }; + +static u_char itadake[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_o+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_o+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_o+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_o+ne2_o+nn2_o+fuuda_x+besi_x+mai_o+masu_o+masure_o, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char exp[] = { + wo_x+ttatte_o+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_o, + doori_x+dokoro_x+dokoroka_x+domo_o+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_o+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_o+zaru_o+zu_o+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_o+tai_o+tagaru_o+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_o+ne2_o+nn2_o+fuuda_x+besi_x+mai_o+masu_o+masure_o, + mase_x+mitaida_x+you_o+youda_x+rasii_x+rareru_o+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_o, + yasui_o+yoi_x+yaru_x+ttarasii_x + }; + +static u_char renyou1[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_o+ppoi_o+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_o+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_o+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_o+zaru_o+zu_o+zunba_o+seru_x+souda_o+youtai_o, + denbun_x+ta_o+tai_o+tagaru_o+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_o+ne2_o+nn2_o+fuuda_x+besi_x+mai_o+masu_o+masure_o, + mase_x+mitaida_x+you_o+youda_x+rasii_x+rareru_o+reru_o+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_o+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_o+gatida_o+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_x+naru_x+nasai_o+nasaru_o+nikui_o, + yasui_o+yoi_x+yaru_x+ttarasii_x + }; + +static u_char renyou3[] = { + wo_x+ttatte_x+ttara_o+tte1_o+tte2_x+ppanasi_o+ppoi_o+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_o+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_o+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_o+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_o+made_o+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_o+yo_o+yori_o+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_o+nagara2_o+wo_s_o, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_o+zaru_o+zu_o+zunba_o+seru_x+souda_o+youtai_o, + denbun_x+ta_o+tai_o+tagaru_o+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_o, + nu_o+ne2_o+nn2_o+fuuda_x+besi_x+mai_o+masu_o+masure_o, + mase_x+mitaida_o+you_o+youda_x+rasii_o+rareru_o+reru_o+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_o+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_o+gatida_o+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_x+naru_x+nasai_o+nasaru_o+nikui_o, + yasui_o+yoi_x+yaru_x+ttarasii_x + }; + +static u_char renyou4[] = { + wo_o+ttatte_x+ttara_o+tte1_o+tte2_x+ppanasi_o+ppoi_o+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_o+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_x+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_o+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_o+made_o+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_o+yo_o+yori_o+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_o+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_o+zaru_o+zu_o+zunba_o+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_o+tagaru_o+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_o+ne2_o+nn2_o+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_o+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_o+itasi_o+itadaku_o+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_o+gatida_o+kudasaru_o+gozai_x+sa1_o+si1_o+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_o+sure_o+se_o+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_o+naru_x+nasai_o+nasaru_o+nikui_o, + yasui_o+yoi_x+yaru_x+ttarasii_x + }; + +static u_char renyou5[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_o+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_o+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_o, + koto_x+sa2_x+sae_o+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_o+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_x+tai_o+tagaru_o+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_o+masure_o, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_o+itasi_x+itadaku_x+iru_x+eru_o+kakeru_x+kaneru_x, + karazu_x+gatai_o+gatida_o+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_o+nasaru_x+nikui_o, + yasui_o+yoi_x+yaru_x+ttarasii_x + }; + +static u_char renyou7[] = { + wo_x+ttatte_x+ttara_o+tte1_o+tte2_x+ppanasi_o+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_o+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_o+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_o+made_o+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_o+yo_o+yori_o+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_o+wo_s_o, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_x+tai_o+tagaru_o+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_o+masure_o, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_o+itasi_x+itadaku_x+iru_x+eru_o+kakeru_x+kaneru_x, + karazu_x+gatai_o+gatida_o+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_o+nasaru_x+nikui_o, + yasui_o+yoi_x+yaru_x+ttarasii_x + }; + +static u_char renyou8[] = { + wo_o+ttatte_x+ttara_o+tte1_o+tte2_x+ppanasi_o+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_o+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_o, + koto_x+sa2_x+sae_o+si2_x+sika_x+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_o+made_o+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_o+yo_o+yori_o+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_o+tagaru_o+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_o+itasi_o+itadaku_o+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_o+gatida_o+kudasaru_o+gozai_x+sa1_x+si1_o+siro_o, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_o+sure_o+se_o+seyo_o, + tamau_x+tayu_x+timau_x+dekiru_o+naru_x+nasai_o+nasaru_x+nikui_o, + yasui_o+yoi_x+yaru_x+ttarasii_x + }; + +static u_char sa5renyou1[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_o+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_o+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_o, + koto_x+sa2_x+sae_o+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_o+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_o+tai_o+tagaru_o+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_o+masure_o, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_o+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_o+gatida_o+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_x+naru_x+nasai_o+nasaru_x+nikui_o, + yasui_o+yoi_x+yaru_x+ttarasii_x + }; + +static u_char sa5renyou3[] = { + wo_x+ttatte_x+ttara_o+tte1_o+tte2_x+ppanasi_o+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_o+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_o+made_o+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_o+yo_o+yori_o+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_o+nagara2_o+wo_s_o, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_o+tai_o+tagaru_o+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_o+masure_o, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_o+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_o+gatida_o+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_x+naru_x+nasai_o+nasaru_x+nikui_o, + yasui_o+yoi_x+yaru_x+ttarasii_x + }; + +static u_char sa5renyou4[] = { + wo_o+ttatte_x+ttara_o+tte1_o+tte2_x+ppanasi_o+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_o+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_o, + koto_x+sa2_x+sae_o+si2_x+sika_x+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_o+made_o+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_o+yo_o+yori_o+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_o+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_o+tagaru_o+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_o+itasi_o+itadaku_o+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_o+gatida_o+kudasaru_o+gozai_x+sa1_o+si1_o+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_o+sure_o+se_o+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_o+naru_x+nasai_o+nasaru_x+nikui_o, + yasui_o+yoi_x+yaru_x+ttarasii_x + }; + +static u_char krenyou[] = { + wo_x+ttatte_o+ttara_x+tte1_x+tte2_o+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_o, + koto_x+sa2_x+sae_o+si2_x+sika_o+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_o+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_o+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_o+si1_o+siro_o, + jyau_x+jimau_x+sugiru_x+subesi_o+suru_o+sure_o+se_o+seyo_o, + tamau_x+tayu_x+timau_x+dekiru_o+naru_o+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char drenyou1[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_o, + koto_x+sa2_x+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_o+ara_o+ari1_o+ari2_x+ari3_x+are1_o+are2_x, + arou_o+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_o+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char drenyou2[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_o+okeru_o+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_o+tuki_o+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_o, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_x+hou_x, + hoka_x+hodo_x+made_o+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_o+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_o+desi_x+desho_x+desu_x+na2_x+nara_o+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_o+ara_o+ari1_x+ari2_o+ari3_x+are1_x+are2_o, + arou_o+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_o+si1_o+siro_o, + jyau_x+jimau_x+sugiru_x+subesi_o+suru_o+sure_o+se_o+seyo_o, + tamau_x+tayu_x+timau_x+dekiru_o+naru_o+nasai_o+nasaru_o+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char drenyou3[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_o+si1_o+siro_o, + jyau_x+jimau_x+sugiru_x+subesi_o+suru_o+sure_o+se_o+seyo_o, + tamau_x+tayu_x+timau_x+dekiru_o+naru_o+nasai_o+nasaru_o+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char onbin1[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_o+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + + +static u_char onbin2[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_o+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char onbin3[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_o+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_o+da2_x+daxtu_x, + darou_o+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_o+jimau_o+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char deshi[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_o+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_o+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char axtu[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_o+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_o+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char onbin6[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_o+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char onbin8[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_o+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_o+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ari1[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_o+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_o+masure_o, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_o+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_o+nasaru_o+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ari2[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_o+masure_o, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_o+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ari3[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_o+masure_o, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_o+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char iki[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_x+tai_o+tagaru_o+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_o+masure_o, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_o+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char itasi[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_o+masure_o, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char itadaki[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_o+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_o+masure_o, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_o+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ori2[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_o+masure_o, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char gataku[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_o+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_o+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_o+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_o+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_o+si1_o+siro_o, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_o+sure_o+se_o+seyo_o, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ki[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_o+tai_o+tagaru_o+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_o+masure_o, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_x+naru_x+nasai_o+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char fzkki[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_o+tai_o+tagaru_o+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_o+masure_o, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_x+naru_x+nasai_o+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char deha[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char kudasai[] = { + wo_x+ttatte_o+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_o+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_o+masure_o, + mase_o+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char gozai[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_o+masure_o, + mase_o+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char gotoku[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_o+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char beku[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char soude[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_o+ara_o+ari1_x+ari2_x+ari3_o+are1_x+are2_o, + arou_o+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char souni[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_o+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char tagari[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_o+masure_o, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char taku[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_o+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_o+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_o+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_o+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char de[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_o+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_o+ara_o+ari1_o+ari2_x+ari3_x+are1_o+are2_x, + arou_o+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_o+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char naide[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_o+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_o+iru_o+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_o+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char naku[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_o+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_o+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_o+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char nasai[] = { + wo_x+ttatte_o+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_o+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_o+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char fuuni[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_o+kane_o+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_o+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_o+desho_o+desu_o+na2_x+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_o+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_o+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_o+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char yori2[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_o+masure_o, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char rashuu[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_o+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char dshuusi1[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_o+kana_x+kane_x+kamo_x+kara1_x+kara2_o+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_o+koso_x, + koto_x+sa2_x+sae_x+si2_o+sika_x+sura_x+zutu_x+zo_o, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_o+wake_x, + wane_o+wayo_o+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_o+kke_o+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_x, + denbun_o+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char dshuusi2[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char gotosi[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char besi[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char zu[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_o, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_x+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char souda[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_o+kana_x+kane_x+kamo_x+kara1_x+kara2_o+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_o+koso_x, + koto_x+sa2_x+sae_x+si2_o+sika_x+sura_x+zutu_x+zo_o, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_o+wake_x, + wane_o+wayo_o+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char mai[] = { + wo_x+ttatte_o+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_o+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_o+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char mitaida[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_o+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_o+koso_x, + koto_x+sa2_x+sae_x+si2_o+sika_x+sura_x+zutu_x+zo_o, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_o+yue_x+yo_o+yori_x+wa_o+wake_x, + wane_o+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_x, + denbun_o+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char shuusi[] = { + wo_x+ttatte_o+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_o, + uti_o+oite_x+okeru_x+ori_o+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_o+ga1_x, + ga2_o+gatera_x+kiri_o+kuseni_o+kurai_o+gurumi_x+kedo_o+koso_x, + koto_o+sa2_o+sae_x+si2_o+sika_o+sura_x+zutu_x+zo_o, + tame_o+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_o, + te1_x+te2_x+teru_x+dearou_o+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_o+toki_o+tokoro_o+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_o, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_o+node_o+noni_o, + nomi_o+nominrz_o+ha_x+hazu_o+ba_x+bakari_o+he_x+hou_o, + hoka_o+hodo_o+made_o+mama_o+mo1_o+mo2_x+motte_x+mono_o, + ya1_x+ya2_o+yara_o+yue_o+yo_o+yori_o+wa_o+wake_o, + wane_o+wayo_o+nn1_o+jya_o+tya_x+nagara2_x+wo_s_x, + ze_o+kke_x+n_si_x+deha_o, + + gotosi_o+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_x, + denbun_o+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_o+de_x+desi_x+desho_o+desu_x+na2_x+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_o+mai_o+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_o+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char kshuusi[] = { + wo_x+ttatte_o+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_o, + uti_o+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_o+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_o+kurai_o+gurumi_x+kedo_o+koso_o, + koto_o+sa2_o+sae_x+si2_o+sika_x+sura_x+zutu_x+zo_o, + tame_o+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_o, + te1_x+te2_x+teru_x+dearou_o+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_o+tokoro_o+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_o, + nite_x+nimo_x+ne1_o+nee_x+no1_x+no2_o+node_o+noni_o, + nomi_o+nominrz_o+ha_x+hazu_o+ba_x+bakari_o+he_x+hou_o, + hoka_o+hodo_o+made_o+mama_o+mo1_o+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_o+yue_o+yo_o+yori_o+wa_o+wake_o, + wane_o+wayo_o+nn1_o+jya_o+tya_x+nagara2_x+wo_s_x, + ze_o+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_x, + denbun_o+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_o+de_x+desi_o+desho_o+desu_o+na2_x+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_o+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char zaru[] = { + wo_o+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_o, + uti_o+oite_x+okeru_x+ori_o+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_o+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_o+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_o+tokoro_o+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_o+hodo_x+made_o+mama_o+mo1_x+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_x+yue_o+yo_x+yori_o+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char soudesu[] = { + wo_x+ttatte_o+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_o+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_o+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_o+koso_x, + koto_x+sa2_x+sae_x+si2_o+sika_x+sura_x+zutu_x+zo_o, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_o+noni_o, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_o+wake_x, + wane_o+wayo_o+nn1_o+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ta[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_o, + uti_o+oite_x+okeru_x+ori_o+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_o+ga1_x, + ga2_o+gatera_x+kiri_o+kuseni_o+kurai_o+gurumi_x+kedo_o+koso_x, + koto_o+sa2_o+sae_x+si2_o+sika_x+sura_x+zutu_x+zo_o, + tame_o+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_o, + te1_x+te2_x+teru_x+dearou_o+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_o+tokoro_o+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_o, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_o+node_o+noni_o, + nomi_o+nominrz_o+ha_x+hazu_o+ba_x+bakari_o+he_x+hou_o, + hoka_o+hodo_o+made_o+mama_o+mo1_o+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_o+yue_o+yo_o+yori_o+wa_o+wake_o, + wane_o+wayo_o+nn1_o+jya_o+tya_x+nagara2_x+wo_s_x, + ze_o+kke_o+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_x, + denbun_o+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_o+de_x+desi_x+desho_o+desu_o+na2_x+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_o+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char tai[] = { + wo_x+ttatte_o+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_o, + uti_o+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_o+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_o+kurai_o+gurumi_x+kedo_o+koso_x, + koto_o+sa2_o+sae_x+si2_o+sika_x+sura_x+zutu_x+zo_o, + tame_o+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_o+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_o+tokoro_o+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_o, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_o+node_o+noni_o, + nomi_x+nominrz_x+ha_x+hazu_o+ba_x+bakari_o+he_x+hou_o, + hoka_o+hodo_o+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_o+yue_o+yo_o+yori_o+wa_o+wake_o, + wane_o+wayo_o+nn1_o+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_x, + denbun_o+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_o+de_x+desi_x+desho_o+desu_o+na2_x+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_o+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char desu[] = { + wo_x+ttatte_o+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_o+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_o+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_o+koso_x, + koto_x+sa2_x+sae_x+si2_o+sika_x+sura_x+zutu_x+zo_o, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_o+node_o+noni_o, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_o+yue_o+yo_o+yori_x+wa_o+wake_x, + wane_o+wayo_x+nn1_o+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char nai[] = { + wo_x+ttatte_o+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_o, + uti_o+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_o+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_o+kurai_o+gurumi_x+kedo_o+koso_x, + koto_o+sa2_o+sae_x+si2_o+sika_x+sura_x+zutu_x+zo_o, + tame_o+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_o, + te1_x+te2_x+teru_x+dearou_o+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_o+tokoro_o+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_o, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_o+node_o+noni_o, + nomi_x+nominrz_x+ha_x+hazu_o+ba_x+bakari_o+he_x+hou_o, + hoka_o+hodo_o+made_o+mama_o+mo1_o+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_o+yue_o+yo_o+yori_o+wa_o+wake_o, + wane_o+wayo_o+nn1_o+jya_o+tya_x+nagara2_o+wo_s_x, + ze_o+kke_o+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_x, + denbun_o+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_o+de_x+desi_x+desho_o+desu_o+na2_x+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_o+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char nu[] = { + wo_x+ttatte_o+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_o, + uti_o+oite_x+okeru_x+ori_o+ka1_x+ka2_o+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_o+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_o+koso_x, + koto_o+sa2_x+sae_x+si2_o+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_o+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_o+node_o+noni_o, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_o+made_o+mama_x+mo1_o+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_o+yue_o+yo_x+yori_o+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_x, + denbun_o+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_o+de_x+desi_x+desho_x+desu_x+na2_x+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_o+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_o+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char masu[] = { + wo_x+ttatte_o+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_o, + uti_o+oite_x+okeru_x+ori_o+ka1_x+ka2_o+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_o+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_o+koso_x, + koto_o+sa2_x+sae_x+si2_o+sika_x+sura_x+zutu_x+zo_o, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_o+ne1_o+nee_o+no1_x+no2_o+node_o+noni_o, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_o+hodo_o+made_o+mama_o+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_o+yara_o+yue_x+yo_o+yori_o+wa_o+wake_x, + wane_o+wayo_o+nn1_o+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_o+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_o+masu_x+masure_x, + mase_x+mitaida_x+you_o+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char nn2[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_o+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_o+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_o+kurai_x+gurumi_x+kedo_o+koso_x, + koto_o+sa2_x+sae_x+si2_o+sika_x+sura_x+zutu_x+zo_o, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_o, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_o+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_x+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_o+node_o+noni_o, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_o+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_o+yue_o+yo_o+yori_o+wa_o+wake_o, + wane_o+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_x, + denbun_o+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_o+de_o+desi_o+desho_o+desu_x+na2_x+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_o+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char rasii[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_o+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_o+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_o+koso_x, + koto_o+sa2_o+sae_x+si2_o+sika_x+sura_x+zutu_x+zo_o, + tame_x+dake_o+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_o+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_o+node_o+noni_o, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_o+wake_x, + wane_o+wayo_o+nn1_o+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_x, + denbun_o+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_o+desho_o+desu_o+na2_x+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char drentai1[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_o, + uti_o+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_o+kuseni_o+kurai_o+gurumi_x+kedo_x+koso_x, + koto_o+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_o+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_o, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_o+tokoro_o+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_o+node_o+noni_o, + nomi_o+nominrz_o+ha_x+hazu_o+ba_x+bakari_o+he_x+hou_o, + hoka_o+hodo_o+made_o+mama_o+mo1_x+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_x+yue_o+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_o+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_o+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char drentai2[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_o+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_x+yue_o+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char drentai3[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_o+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_x+yue_o+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char krentai[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_o, + uti_o+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_o+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_o+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_o+mo1_x+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_x+yue_o+yo_x+yori_x+wa_x+wake_o, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char gotoki[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_o, + uti_o+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_o+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_o+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_o+mo1_x+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_x+yue_o+yo_x+yori_x+wa_x+wake_o, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char beki[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_o, + uti_o+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_o+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_o+tokoro_o+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char souna1[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_o+noni_o, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char souna2[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_o, + uti_o+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_o+kurai_x+gurumi_x+kedo_x+koso_x, + koto_o+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_o+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_o+node_o+noni_o, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_o+hodo_o+made_o+mama_o+mo1_x+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_x+yue_o+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_o+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char na2[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_o+node_o+noni_o, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_o+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char katei1[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_o+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_o+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char katei2[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_o, + doori_x+dokoro_x+dokoroka_x+domo_o+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_o+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char katei3[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_o+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char kamei[] = { + wo_x+ttatte_o+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_o, + doori_x+dokoro_x+dokoroka_x+domo_o+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_o+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ike[] = { + wo_x+ttatte_o+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_o, + doori_x+dokoro_x+dokoroka_x+domo_o+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_o+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_o+zunba_o+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_o+ne2_o+nn2_o+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char kure[] = { + wo_x+ttatte_o+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_x+sura_o+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_o, + doori_x+dokoro_x+dokoroka_x+domo_o+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_o+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_o+zu_o+zunba_o+seru_x+souda_o+youtai_o, + denbun_x+ta_o+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_o+ne2_o+nn2_x+fuuda_x+besi_x+mai_o+masu_o+masure_o, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char meirei1[] = { + wo_x+ttatte_o+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char meirei2[] = { + wo_x+ttatte_o+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char dgokan[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_o+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_o+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_o+desho_o+desu_o+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_o+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_o + }; + +static u_char kgokan[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_o+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_o+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_o + }; + +static u_char sgokan[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_o+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char gati[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_x+kana_o+kane_o+kamo_o+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_o+desho_o+desu_o+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char jya[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char sou[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_o+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char mitai[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char yotte[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_o+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char you2[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char sho[] = { + wo_x+ttatte_o+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char meisi[] = { + wo_o+ttatte_x+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_o+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_o+kuseni_x+kurai_o+gurumi_o+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_o+zo_o, + tame_x+dake_o+dano_o+darake_o+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_o+dokoro_o+dokoroka_o+domo_x+na1_x+naa_o+nagara_o+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_o+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_o+made_o+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_o+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char wo_meisi[] = { + wo_x+ttatte_x+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_o+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_o+kuseni_x+kurai_o+gurumi_o+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_o+zo_o, + tame_x+dake_o+dano_o+darake_o+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_o+dokoro_o+dokoroka_o+domo_x+na1_x+naa_o+nagara_o+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_o+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_o+made_o+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_o, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_o+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char dmeisi[] = { + wo_o+ttatte_x+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_o+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_o+gurumi_o+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_o+zo_o, + tame_x+dake_o+dano_o+darake_o+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_o+nagara_o+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_o+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_o+made_o+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_x+tai_x+tagaru_x+taru_o+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_o+desho_o+desu_o+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_o + }; + +static u_char smeisi1[] = { + wo_x+ttatte_x+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_o+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_o+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_o+kiri_x+kuseni_x+kurai_o+gurumi_o+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_o+zo_o, + tame_x+dake_o+dano_o+darake_o+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_o+dokoro_o+dokoroka_o+domo_x+na1_x+naa_o+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_o+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_o+made_o+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_o, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_o+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_o+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_o+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_o+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char smeisi2[] = { + wo_x+ttatte_x+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_o+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_o+gurumi_o+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_o+zo_o, + tame_x+dake_o+dano_o+darake_o+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_o+dokoro_o+dokoroka_o+domo_x+na1_x+naa_o+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_o+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_o+made_o+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_o, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_o+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_o+itadaku_o+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_o+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_o+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_o+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char kstb[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_o+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_o+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ichisetubi[] = { + wo_o+ttatte_x+ttara_o+tte1_o+tte2_x+ppanasi_o+ppoi_o+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_x+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_o+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_o+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_o+made_o+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_o+yo_o+yori_o+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_o+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_o+zaru_o+zu_o+zunba_o+seru_x+souda_o+youtai_o, + denbun_x+ta_o+tai_o+tagaru_o+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_o, + nu_o+ne2_o+nn2_o+fuuda_x+besi_x+mai_o+masu_o+masure_o, + mase_x+mitaida_o+you_o+youda_x+rasii_o+rareru_o+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_o+gatida_o+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_o+dekiru_x+naru_x+nasai_o+nasaru_o+nikui_o, + yasui_o+yoi_x+yaru_x+ttarasii_x + }; + +static u_char josuusi[] = { + wo_o+ttatte_x+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_o+kuseni_x+kurai_o+gurumi_o+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_o+zo_o, + tame_x+dake_o+dano_o+darake_o+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_o+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_o+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_o+made_o+mama_x+mo1_x+mo2_o+motte_x+mono_o, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_o+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char rentaisi[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_o+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_o+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_o+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_o+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char cut[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char shuujo[] = { + wo_x+ttatte_o+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char wo[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_o+kai_x+kasira_x, + katagata_x+kadouka_x+kana_o+kane_o+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_o+mono_x, + ya1_x+ya2_x+yara_o+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_o+rareru_o+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char wo_s[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_o+kai_x+kasira_x, + katagata_x+kadouka_x+kana_o+kane_o+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_o+mono_x, + ya1_x+ya2_x+yara_o+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_o+rareru_o+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_o+si1_o+siro_o, + jyau_x+jimau_x+sugiru_x+subesi_o+suru_o+sure_o+se_o+seyo_o, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ttatte[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ttara[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char tte1[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char tte2[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ppanasi[] = { + wo_o+ttatte_o+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_o+made_o+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ppoi[] = { + wo_x+ttatte_o+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_o, + uti_o+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_o+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_o+kurai_o+gurumi_x+kedo_o+koso_x, + koto_o+sa2_o+sae_x+si2_o+sika_o+sura_x+zutu_x+zo_o, + tame_o+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_o, + te1_x+te2_x+teru_x+dearou_o+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_o+tokoro_o+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_o, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_o+node_o+noni_o, + nomi_o+nominrz_o+ha_x+hazu_o+ba_x+bakari_o+he_x+hou_o, + hoka_o+hodo_o+made_o+mama_x+mo1_o+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_o+yue_o+yo_o+yori_o+wa_o+wake_o, + wane_o+wayo_o+nn1_o+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_o+de_x+desi_o+desho_o+desu_o+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_o+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ue[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_o+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char uti[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char oite[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char okeru[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ori[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_o, + koto_x+sa2_x+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ka1[] = { + wo_o+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_o+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_x+he_o+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + + +static u_char ka2[] = { + wo_o+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_o+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char katagata[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_o+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char kadouka[] = { + wo_o+ttatte_o+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_o+sura_x+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_o, + nite_x+nimo_x+ne1_x+nee_x+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_o+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_o+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char kamo[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char kara1[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_x+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_o+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_o+ya2_x+yara_x+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char kara2[] = { + wo_x+ttatte_o+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_o, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_o, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ga1[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_o+ara_o+ari1_x+ari2_o+ari3_x+are1_x+are2_o, + arou_x+ii_o+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_o+sa1_o+si1_o+siro_o, + jyau_x+jimau_x+sugiru_x+subesi_o+suru_o+sure_o+se_o+seyo_o, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ga2[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_o+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_o+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_o+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char gatera[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_o, + nite_x+nimo_x+ne1_x+nee_x+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_o+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char kiri[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_o+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char kuseni[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char kurai[] = { + wo_o+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_x+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_o+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_x, + nado_x+nari_x+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_o+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char gurumi[] = { + wo_o+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_o+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_x+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_o+made_o+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_o+yo_o+yori_o+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char kedo[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char koso[] = { + wo_o+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_o+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char koto[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_o, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_o+nagara_o+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_o+made_o+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_o, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char sae[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_o+ara_o+ari1_x+ari2_o+ari3_x+are1_x+are2_o, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_o+si1_o+siro_o, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_o+sure_o+se_o+seyo_o, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char si2[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_o+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char sika[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char sura[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char zutu[] = { + wo_o+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_o+yo_o+yori_o+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_o+ara_o+ari1_x+ari2_o+ari3_x+are1_x+are2_o, + arou_o+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_o+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char tame[] = { + wo_o+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_o+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_x+hazu_x+ba_x+bakari_o+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_o+yue_x+yo_x+yori_o+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char tari[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_o+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_o+si1_o+siro_o, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_o+sure_o+se_o+seyo_o, + tamau_x+tayu_x+timau_x+dekiru_o+naru_x+nasai_o+nasaru_o+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char dake[] = { + wo_o+ttatte_o+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_o+ara_o+ari1_x+ari2_o+ari3_x+are1_x+are2_o, + arou_o+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char dano[] = { + wo_o+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_o+he_x+hou_x, + hoka_x+hodo_x+made_o+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_o+de_o+desi_o+desho_o+desu_o+na2_x+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + + +static u_char darake[] = { + wo_o+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_o+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char tuite[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_x+kana_o+kane_o+kamo_o+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_x+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char tuki[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char tutu[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_o+ara_o+ari1_x+ari2_x+ari3_o+are1_x+are2_o, + arou_o+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char tumori[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_o+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char te1[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_o+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char te2[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_o+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_o+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_x+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_o+he_x+hou_x, + hoka_x+hodo_x+made_o+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_o+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_o+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_o+masu_o+masure_o, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_o+aru_o+ara_o+ari1_x+ari2_o+ari3_x+are1_x+are2_o, + arou_o+ii_o+itasi_x+itadaku_o+iru_o+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_o+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_o+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char teru[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_o, + uti_o+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_o+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_o+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_o+kurai_o+gurumi_x+kedo_o+koso_x, + koto_o+sa2_o+sae_x+si2_o+sika_o+sura_x+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_o, + te1_x+te2_x+teru_x+dearou_o+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_o+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_o+node_o+noni_o, + nomi_x+nominrz_x+ha_x+hazu_o+ba_x+bakari_o+he_x+hou_o, + hoka_o+hodo_o+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_o+wake_o, + wane_o+wayo_o+nn1_o+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_x, + denbun_o+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_o+de_x+desi_x+desho_o+desu_x+na2_x+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_o+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char to1[] = { + wo_o+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_o+sura_x+zutu_x+zo_x, + tame_x+dake_o+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_o+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_x+desi_o+desho_o+desu_o+na2_x+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_o+siro_o, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_o+sure_o+se_o+seyo_o, + tamau_x+tayu_x+timau_x+dekiru_x+naru_o+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char to2[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_x+kana_o+kane_o+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_x+hou_x, + hoka_x+hodo_x+made_o+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_o+si1_o+siro_o, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_o+sure_o+se_o+seyo_o, + tamau_x+tayu_x+timau_x+dekiru_x+naru_o+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char totte[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char toiu[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_o+kana_x+kane_x+kamo_x+kara1_x+kara2_o+ga1_x, + ga2_o+gatera_x+kiri_x+kuseni_o+kurai_o+gurumi_x+kedo_o+koso_x, + koto_o+sa2_x+sae_x+si2_o+sika_o+sura_x+zutu_x+zo_x, + tame_x+dake_o+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_o, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_o, + nite_x+nimo_o+ne1_x+nee_x+no1_x+no2_o+node_o+noni_o, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_o+hodo_o+made_o+mama_x+mo1_x+mo2_x+motte_x+mono_o, + ya1_x+ya2_x+yara_x+yue_o+yo_x+yori_x+wa_x+wake_o, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char toori[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_o+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_o+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char toki[] = { + wo_o+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_x+made_o+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char tokoro[] = { + wo_o+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_x+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_x+made_o+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char tote[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char tohaie[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char tomo[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char fdo[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char doori[] = { + wo_o+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char dokoro[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_o+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char dokoroka[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char domo[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char nagara[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_x+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_x+hou_x, + hoka_x+hodo_o+made_o+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_o+ya2_x+yara_x+yue_o+yo_o+yori_o+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char nagara2[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_x+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_x+hou_x, + hoka_x+hodo_o+made_o+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_o+ya2_x+yara_x+yue_o+yo_o+yori_o+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char nazo[] = { + wo_o+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_o+hou_x, + hoka_x+hodo_x+made_o+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_o+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char nado[] = { + wo_o+ttatte_x+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_x+made_o+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char nari[] = { + wo_o+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_o+sura_x+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_o+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_o+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char nanka[] = { + wo_o+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_x+zutu_x+zo_x, + tame_x+dake_o+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_o, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_o+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_o+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_x, + darou_x+de_o+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char nanzo[] = { + wo_o+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_o+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_o+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char nante[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ni1[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_o+okeru_o+ori_x+ka1_x+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_o+tuki_o+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_o, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_x+hou_x, + hoka_x+hodo_x+made_o+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_o+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_o+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_o+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_o+ara_o+ari1_x+ari2_o+ari3_x+are1_x+are2_o, + arou_o+ii_x+itasi_x+itadaku_x+iru_o+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_o+si1_x+siro_o, + jyau_x+jimau_x+sugiru_x+subesi_o+suru_o+sure_o+se_o+seyo_o, + tamau_x+tayu_x+timau_x+dekiru_x+naru_o+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_o + }; + +static u_char ni2[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_o+he_x+hou_x, + hoka_x+hodo_x+made_o+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_o+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ni3[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_o, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char nite[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char nimo[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char no1[] = { + wo_o+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_o+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_o+kurai_o+gurumi_x+kedo_x+koso_o, + koto_o+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_o+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_o+tokoro_o+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_o+made_o+mama_o+mo1_o+mo2_x+motte_x+mono_o, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_o+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_o+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_o+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char no2[] = { + wo_o+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_o+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_x+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char node[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_o+ara_x+ari1_x+ari2_x+ari3_o+are1_x+are2_o, + arou_o+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char noni[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char nomi[] = { + wo_o+ttatte_x+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_o+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_x+made_o+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_o+yo_o+yori_x+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char nominrz[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ha[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_o+ara_o+ari1_x+ari2_o+ari3_x+are1_x+are2_o, + arou_o+ii_o+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_o+si1_x+siro_o, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_o+sure_o+se_o+seyo_o, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char hazu[] = { + wo_x+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_o+kane_o+kamo_x+kara1_x+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ba[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_o+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char bakari[] = { + wo_o+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_o+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_o+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_o+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_o+ara_o+ari1_x+ari2_o+ari3_x+are1_x+are2_o, + arou_o+ii_x+itasi_x+itadaku_x+iru_o+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char he[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_o+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char hou[] = { + wo_o+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_x+made_o+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char hoka[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_o+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char hodo[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_o+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_o+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char made[] = { + wo_o+ttatte_x+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_x+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_o, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_o+naa_o+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_o+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_o+ara_x+ari1_x+ari2_o+ari3_x+are1_x+are2_o, + arou_o+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char mama[] = { + wo_o+ttatte_x+ttara_o+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_o, + tame_x+dake_o+dano_o+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char mo1[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char mo2[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_o+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_o+sure_x+se_o+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_o+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char motte[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char mono[] = { + wo_o+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_o+kara1_o+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_o+gurumi_x+kedo_x+koso_o, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_o, + tame_x+dake_o+dano_o+darake_o+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_o+dokoroka_o+domo_x+na1_o+naa_o+nagara_o+nazo_o, + nado_o+nari_o+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_o+nominrz_o+ha_o+hazu_x+ba_x+bakari_o+he_o+hou_x, + hoka_x+hodo_o+made_o+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_o+ya2_x+yara_o+yue_x+yo_o+yori_o+wa_x+wake_x, + wane_o+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_o+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ya1[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char ya2[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char yara[] = { + wo_o+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_o+sura_x+zutu_x+zo_x, + tame_x+dake_o+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_o+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_o+hou_x, + hoka_x+hodo_x+made_o+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_o+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char yue[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char yori1[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char wake[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_o+kai_x+kasira_o, + katagata_x+kadouka_o+kana_o+kane_o+kamo_x+kara1_x+kara2_x+ga1_o, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_o+to2_x+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_o+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_o+ni2_x+ni3_x, + nite_x+nimo_x+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char nn1[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_x+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char aisatu[] = { + wo_o+ttatte_x+ttara_x+tte1_o+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_o+totte_x, + toiu_o+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_o, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_o+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char kosodo[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_o+ka2_x+kai_x+kasira_o, + katagata_x+kadouka_x+kana_o+kane_x+kamo_o+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_o+sae_o+si2_x+sika_o+sura_o+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_o, + nado_o+nari_x+nanka_o+nanzo_o+nante_o+ni1_x+ni2_x+ni3_x, + nite_x+nimo_o+ne1_o+nee_o+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_o+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_o+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_o+daxtu_o, + darou_o+de_o+desi_o+desho_o+desu_o+na2_o+nara_o+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_o+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_o+si1_o+siro_o, + jyau_x+jimau_x+sugiru_x+subesi_o+suru_o+sure_o+se_o+seyo_o, + tamau_x+tayu_x+timau_x+dekiru_o+naru_o+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char site[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_x+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_x+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_x+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_x+tumori_x, + te1_x+te2_x+teru_x+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_x+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_x+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_o+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_o+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_x+nagara2_x+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_x+youtai_x, + denbun_x+ta_x+tai_x+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_x, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_x+masu_x+masure_x, + mase_x+mitaida_x+you_x+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_x+itasi_x+itadaku_x+iru_x+eru_x+kakeru_x+kaneru_x, + karazu_x+gatai_x+gatida_x+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_x+timau_x+dekiru_x+naru_x+nasai_x+nasaru_x+nikui_x, + yasui_x+yoi_x+yaru_x+ttarasii_x + }; + +static u_char n_si[] = { + wo_x+ttatte_x+ttara_x+tte1_x+tte2_x+ppanasi_o+ppoi_x+ue_x, + uti_x+oite_x+okeru_x+ori_x+ka1_x+ka2_x+kai_x+kasira_x, + katagata_x+kadouka_x+kana_x+kane_x+kamo_x+kara1_x+kara2_x+ga1_x, + ga2_x+gatera_o+kiri_x+kuseni_x+kurai_x+gurumi_x+kedo_x+koso_x, + koto_x+sa2_x+sae_o+si2_x+sika_x+sura_x+zutu_x+zo_x, + tame_x+dake_x+dano_x+darake_x+tuite_x+tuki_x+tutu_o+tumori_x, + te1_x+te2_o+teru_o+dearou_x+deru_x+to1_x+to2_x+totte_x, + toiu_x+toori_x+toki_x+tokoro_x+tote_x+tohaie_x+tomo_x+do_x, + doori_x+dokoro_x+dokoroka_x+domo_x+na1_o+naa_x+nagara_x+nazo_x, + nado_x+nari_x+nanka_x+nanzo_x+nante_x+ni1_x+ni2_o+ni3_x, + nite_x+nimo_x+ne1_x+nee_x+no1_x+no2_x+node_x+noni_x, + nomi_x+nominrz_x+ha_x+hazu_x+ba_x+bakari_x+he_x+hou_x, + hoka_x+hodo_x+made_x+mama_x+mo1_x+mo2_x+motte_x+mono_x, + ya1_x+ya2_x+yara_x+yue_x+yo_x+yori_x+wa_x+wake_x, + wane_x+wayo_x+nn1_x+jya_x+tya_o+nagara2_o+wo_s_x, + ze_x+kke_x+n_si_x+deha_x, + + gotosi_x+saseru_x+zaru_x+zu_x+zunba_x+seru_x+souda_o+youtai_o, + denbun_x+ta_o+tai_o+tagaru_x+taru_x+da1_x+da2_x+daxtu_x, + darou_x+de_x+desi_x+desho_x+desu_x+na2_x+nara_x+nai_o, + nu_x+ne2_x+nn2_x+fuuda_x+besi_x+mai_o+masu_o+masure_o, + mase_x+mitaida_x+you_o+youda_x+rasii_x+rareru_x+reru_x+site_x, + + yougen_x+aru_x+ara_x+ari1_x+ari2_x+ari3_x+are1_x+are2_x, + arou_x+ii_o+itasi_x+itadaku_x+iru_x+eru_x+kakeru_o+kaneru_o, + karazu_x+gatai_o+gatida_o+kudasaru_x+gozai_x+sa1_x+si1_x+siro_x, + jyau_x+jimau_x+sugiru_x+subesi_x+suru_x+sure_x+se_x+seyo_x, + tamau_x+tayu_o+timau_x+dekiru_x+naru_x+nasai_o+nasaru_o+nikui_o, + yasui_o+yoi_x+yaru_x+ttarasii_x + }; + +u_char connadr[] = { + 0, + R_MEISI, + R_MEISI, + R_MEISI, + R_MEISI, + 0, + 0, + 0, + 0, + 0, + 0, + R_MEISI, + + R_DAIMEISI, + R_DAIMEISI, + R_WO_MEISI, + 0, + 0, + R_DAIMEISI6, + + 0, + 0, + 0, + + R_MEISI, + R_MEISI, + R_MEISI, + R_MEISI, + R_MEISI, + R_RENTAISI, + R_SETUZOKU, + R_KANDOU, + R_JOSUUSI, + R_SUUSI, + + R_SETTOU, + R_SETTOU, + R_SETTOU, + R_SETTOU, + R_SETTOU, + + R_MEISI, + R_MEISI, + R_MEISI, + R_MEISI, + 0, + 0, + 0, + 0, + R_MEISI, + + R_FUKUSI, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + R_JOSUUSI, + + 0, + 0, + 0, + 0, + 0, + + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + + 0, + 0, + + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + + 0, + 0, + + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + + 0, + 0, + + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + + R_MIZEN1, + R_MIZEN2, + R_SI1, + R_SHUUSI, + R_KATEI2, + R_MEIREI1, + R_MEIREI2, + R_KO, + R_KI, + R_SHUUSI, + R_KATEI2, + R_MEIREI1, + R_KUDASAI, + R_GOZAI, + R_ONBIN2, + R_KOSODO, + R_AISATU, + R_KSHUUSI, + R_TANKAN, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + R_MEISI + }; + +u_char *rigtadr[] = { + 0, + de, + wo, + kara1, + ga1, + to1, + ni1, + no1, + ha, + he, + mo1, + ya1, + yori1, + sae, + sika, + dake, + i, + e, + kake, + kane2, + sugi, + deki, + mi, + sase, + rare, + itadake, + exp, + renyou1, + renyou5, + sa5renyou1, + renyou3, + renyou7, + sa5renyou3, + renyou4, + renyou8, + sa5renyou4, + 0, + 0, + 0, + krenyou, + drenyou1, + drenyou2, + drenyou3, + onbin1, + onbin2, + onbin3, + deshi, + axtu, + onbin6, + onbin8, + ari1, + ari2, + ari3, + iki, + itasi, + itadaki, + ori2, + gataku, + ki, + kudasai, + gozai, + gotoku, + beku, + soude, + souni, + tagari, + taku, + mizen1, + naide, + naku, + nasai, + fuuni, + yori2, + rashuu, + dshuusi1, + dshuusi2, + gotosi, + besi, + zu, + souda, + mai, + mitaida, + shuusi, + kshuusi, + zaru, + soudesu, + ta, + tai, + desu, + nai, + nu, + masu, + nn2, + rasii, + drentai1, + drentai2, + drentai3, + krentai, + gotoki, + beki, + souna1, + souna2, + na2, + katei1, + katei2, + katei3, + kamei, + ike, + kure, + meirei1, + meirei2, + dgokan, + kgokan, + sgokan, + gati, + jya, + sou, + mitai, + yotte, + you2, + sho, + meisi, + aisatu, + kosodo, + you1, + si1, + meisi, + meisi, + fzkki, + deha, + nagara2, + wo_s, + wo_meisi, + site, + n_si, + cut, + 0, + cut, + 0, 0, + mizen2, + mizen3, + mizen4, + si1, + ji, + age, + mizen5, + arou, + karou, + darou, + deshou, + ko, + bekara, + tagara, + shuujo, + ttatte, + ttara, + tte1, + tte2, + ppanasi, + ppoi, + ue, + uti, + oite, + okeru, + ori, + ka1, + ka2, + katagata, + kadouka, + kamo, + kara2, + ga2, + gatera, + kiri, + kuseni, + kurai, + gurumi, + kedo, + koso, + koto, + si2, + sura, + zutu, + tame, + tari, + dano, + darake, + tuite, + tuki, + tutu, + tumori, + te1, + te2, + teru, + to2, + totte, + toiu, + toori, + toki, + tokoro, + tote, + tohaie, + tomo, + fdo, + doori, + dokoro, + dokoroka, + domo, + nagara, + nazo, + nado, + nari, + nanka, + nanzo, + nante, + ni2, + ni3, + nite, + nimo, + no2, + node, + noni, + nomi, + nominrz, + hazu, + ba, + bakari, + hou, + hoka, + hodo, + made, + mama, + mo2, + motte, + mono, + ya2, + yara, + yue, + wake, + nn1, + josuusi, + cut, + cut, + cut, + cut, + cut, + meisi, + dmeisi, + smeisi1, + smeisi2, + kstb, + ichisetubi, + josuusi, + rentaisi, + cut + }; diff --git a/lib/sj3core/cvtclknj.c b/lib/sj3core/cvtclknj.c new file mode 100644 index 0000000..74626ee --- /dev/null +++ b/lib/sj3core/cvtclknj.c @@ -0,0 +1,68 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: cvtclknj.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:38 $ + */ + + + + + +#include "sj_kcnv.h" + +#include "sj_kanakan.h" + +void +cvtclknj() +{ + KHREC *krec; + int i; + + + + + if (!selectid) selectid = khcount; + + i = khcount; + krec = kouhotbl; + + while (i--) { + if ((int)krec -> rank == (int)selectid) break; + krec++; + } + + + setstyrec(krec); + + + cvtkouho(krec); +} diff --git a/lib/sj3core/cvtdict.c b/lib/sj3core/cvtdict.c new file mode 100644 index 0000000..46224be --- /dev/null +++ b/lib/sj3core/cvtdict.c @@ -0,0 +1,246 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: cvtdict.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:40 $ + */ + + + + +#include "sj_euc.h" +#include "sj_kcnv.h" + +#include "sj_kanakan.h" + +void +cvtdict(KHREC *krec, CLREC *clrec, int flg) +{ + TypeDicOfs ofs; + u_char *yptr; + int jlen; + int stblen; + int sttlen; + u_char *fptr; + int cllen; + JREC *jrec; + int i, j; + + + ofs = krec -> offs; + jrec = clrec -> jnode; + cllen = clrec -> cllen; + + yptr = inputyomi; + + + jlen = jrec -> jlen; + + + if (i = jrec -> sttofs) { + + if (i == SETTOU_KIGOU) { + sttlen = 1; + fptr = yptr; + } + + + else { + fptr = Settou_ptr(i); + sttlen = SttYomiLen(fptr); + fptr++; + if (!krec -> sttkj) fptr += 2; + } + + *kanjitmp++ = *fptr++; + *kanjitmp++ = *fptr++; + jlen -= sttlen; + yptr += sttlen * 2; + } + + + else + sttlen = 0; + + + if (flg) { + + (*Cvtnum_func[krec->mode - 1])(ystart + sttlen, yptr, jrec); + + + yptr += (i = jrec -> numlen) * 2; + jlen -= i; + + + if (jrec -> stbofs) { + *kanjitmp++ = *yptr++; + *kanjitmp++ = *yptr++; + jlen--; + } + + stblen = 0; + } + + + else if ((i = jrec -> stbofs) && (fptr = getstb(jrec -> hinsi))) { + fptr += i - 1; + stblen = StbYomiLen(fptr); + jlen -= stblen; + } + + + else { + stblen = 0; + } + + + if (ofs) { + if (seldict(jrec -> dicid)) { + (*curdict->getdic)(curdict, jrec -> jseg); + get_askknj(); + kanjitmp += + getkanji(yptr, jlen, dicbuf + ofs, kanjitmp); + yptr += jlen * 2; + } + else { + while (jlen-- > 0) { + for ( i = 0; i < euc_codesize(*yptr); i++) + *kanjitmp++ = yptr[i]; + yptr += euc_codesize(*yptr); + } + } + } + + + if (stblen) { + i = StbKnjLen(fptr); + fptr += stblen + 2; + while (i-- > 0) *kanjitmp++ = *fptr++; + yptr += stblen * 2; + } + + + i = cllen - (jrec -> jlen); + while (i-- > 0) { + for ( j = 0; j < euc_codesize(*yptr); j++) + *kanjitmp++ = yptr[j]; + yptr += euc_codesize(*yptr); + } +} + + + +void +cvtminasi(int len) +{ + u_char *ptr; + + ptr = inputyomi; + + while (len-- > 0) { + + + if (isknj1(*ptr)) { + *kanjitmp++ = *ptr++; + *kanjitmp++ = *ptr++; + } + + else if (*ptr == SS3) { + *kanjitmp++ = *ptr++; + *kanjitmp++ = *ptr++; + *kanjitmp++ = *ptr++; + } else { + *kanjitmp++ = *ptr++; + } + } +} + + + +void +cvtwakachi(CLREC *clrec) +{ + int jlen; + u_char *ym; + int cnt; + u_char ch; + + ym = inputyomi; + + + cnt = jlen = clrec -> jnode -> jlen; + while (cnt-- > 0) { + if (isknj1(*ym)) { + + if (*ym == 0xa4) { + ch = *++ym; + if (0xa1 <= ch && ch <= 0xf3) { + *kanjitmp++ = 0xa5; + } + else { + *kanjitmp++ = 0xa4; + } + *kanjitmp++ = ch; + ym++; + } + else { + *kanjitmp++ = *ym++; + *kanjitmp++ = *ym++; + } + } + else if (*ym == SS3) { + *kanjitmp++ = *ym++; + *kanjitmp++ = *ym++; + *kanjitmp++ = *ym++; + } else { + *kanjitmp++ = *ym++; + } + } + + + cnt = clrec -> cllen - jlen; + while (cnt-- > 0) { + + + if (isknj1(*ym)) { + *kanjitmp++ = *ym++; + *kanjitmp++ = *ym++; + } + + else if (*ym == SS3) { + *kanjitmp++ = *ym++; + *kanjitmp++ = *ym++; + *kanjitmp++ = *ym++; + } else { + *kanjitmp++ = *ym++; + } + } +} diff --git a/lib/sj3core/cvtkanji.c b/lib/sj3core/cvtkanji.c new file mode 100644 index 0000000..5317d99 --- /dev/null +++ b/lib/sj3core/cvtkanji.c @@ -0,0 +1,206 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: cvtkanji.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:41 $ + */ + + + + + +#include "sj_kcnv.h" + +#include "sj_kanakan.h" + +void +cvtphknj() +{ + int i, j; + CLREC *clrec; + CLREC *clkp; + + if (!kanjilen) goto not_enough_memory; + + khcount = 0; + clkp = NULL; + stdytop = NULL; + + clrec = clt1st; + while (clrec) { + if (ph_khtbl(clrec)) clkp = clrec; + clrec = clrec -> clsort; + } + + + if (clkp && stdytop) { + + if (stdytop -> nmflg) + ph_setkouho(clkp, (TypeDicOfs)0, (STDYIN *)0); + } + + kouhotbl[0].rank = 1; + + + kanjitmp = kanjibuf + 1; + + + setstyrec(kouhotbl); + + + cvtkouho(kouhotbl); + + + i = kanjitmp - kanjibuf; + if (i < kanjilen) { + + kanjilen -= i; + + + ystart += clt1st -> cllen; + + j = hzstrlen(inputyomi, (int)clt1st -> cllen); + kanjibuf[0] = (u_char)j; + + + inputyomi += j; + + + memcpy(kanjipos, kanjibuf, i); + kanjipos += i; + } + else + kanjilen = 0; + +not_enough_memory: + + + free_clall(clt1st); + free_jall (jrt1st); +} + + + +void +cvtkouho(KHREC *krec) +{ + CLREC *clrec; + + clrec = krec -> clrec; + + + switch (clrec -> jnode -> class) { + case C_DICT: + cvtdict(krec, clrec, FALSE); + break; + + case C_N_ARABIA: + case C_N_ARACMA: + case C_N_KAZU: + case C_N_SUUJI: + case C_N_NANSUU: + case C_N_KANKURA: + case C_N_ARAKURA: + case C_N_KAZULONG: + case C_N_KAZULCMA: + case C_N_SUUJILONG: + cvtdict(krec, clrec, TRUE); + break; + + case C_BUNSETU : + case C_MINASI : + cvtminasi((int)clrec -> cllen); + break; + + case C_WAKACHI : + cvtwakachi(clrec); + break; + } + + + *kanjitmp++ = 0; +} + + + +void +setstyrec(KHREC *krec) +{ + JREC *jrec; + KHREC *kptr; + int ii; + u_char *fptr; + STDYOUT stdy; + + jrec = krec -> clrec -> jnode; + + + if (krec -> mode && !krec -> offs) { + + for (ii = khcount, kptr = kouhotbl ; ii--; kptr++) + if (kptr -> rank == 1) break; + + + stdy.stdy1.offset = kptr -> offs; + stdy.stdy1.seg = kptr -> clrec -> jnode -> jseg; + stdy.stdy1.styno = kptr -> styno; + stdy.stdy1.dicid = kptr -> clrec -> jnode -> dicid; + stdy.stdy1.nmflg = 1; + } + + else { + stdy.stdy1.offset = krec -> offs; + stdy.stdy1.seg = jrec -> jseg; + stdy.stdy1.styno = krec -> styno; + stdy.stdy1.dicid = jrec -> dicid; + stdy.stdy1.nmflg = 0; + } + stdy.stdy1.sttkj = krec -> sttkj; + stdy.stdy1.ka_kj = krec -> ka_kj; + stdy.hinshi = jrec -> hinsi; + stdy.len = jrec -> jlen; + stdy.sttfg = krec -> sttfg; + stdy.ka_fg = krec -> ka_fg; + + + if (jrec -> stbofs && (fptr = getstb(jrec -> hinsi))) + stdy.len -= StbYomiLen(fptr + jrec -> stbofs - 1); + + + if (fptr = Settou_ptr(jrec -> sttofs)) + stdy.sttlen = SttYomiLen(fptr); + else + stdy.sttlen = 0; + + + memcpy(kanjitmp, (u_char *)&stdy, sizeof(STDYOUT)); + kanjitmp += sizeof(STDYOUT); +} diff --git a/lib/sj3core/deldic.c b/lib/sj3core/deldic.c new file mode 100644 index 0000000..3cc6403 --- /dev/null +++ b/lib/sj3core/deldic.c @@ -0,0 +1,295 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: deldic.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:42 $ + */ + + + + +#include +#include "sj_kcnv.h" + +#include "sj_kanakan.h" + +static int del_douon(TypeDicSeg, u_char *, TypeDicOfs); +static int del_segment(TypeDicSeg); +static void del_uidx(TypeDicSeg); +static void del_stdy(TypeDicSeg, TypeDicOfs, int); + + +u_int +deldic(u_char *yomi, u_char *kanji, TypeGram hinsi) +{ + u_char yptr[MAXWDYOMILEN + 1]; + u_char kptr[MAXWDKANJILEN + 1]; + u_short err; + int knjlen; + TypeDicSeg useg; + TypeDicOfs ofs; + u_char *p1, *p2, *p3; + int dblknum; + int hblknum; + int kblknum; + int samlen; + u_char *stp, *edp; + int size, len; + + if (err = addel_arg(yomi, kanji, hinsi, yptr, sizeof(yptr))) + return err; + + if (!curdict -> maxunit) return AD_NOTUSERDICT; + + knjlen = cvtknj(yomi, kanji, kptr); + + cnvstart = yptr; + cnvlen = sstrlen(yptr); + + useg = srchidx((TypeDicSeg)DICSEGBASE, cnvlen); + (*curdict->getdic)(curdict, useg); + + if (!(dblknum = srchkana(&p1, &samlen))) return AD_NOMIDASI; + + if (!(hblknum = srchgram(p1, &p2, hinsi))) return AD_NOHINSI; + + p3 = p2; + kblknum = srchkanji(&p3, kptr, knjlen); + if (*p3 == HINSIBLKTERM) return AD_NOKANJI; + ofs = p3 - dicbuf; + + edp = skipkstr(p3); + + if (kblknum == 1) { + if (hblknum == 1) { + if (dblknum == 1) { + return del_segment(useg); + } + else { + return del_douon(useg, p1, ofs); + } + } + else { + stp = p2; + edp++; + } + } + else { + stp = p3; + } + + size = edp - stp; + + len = dicbuf + (curdict->seglen) - edp; + mvmemi(edp, stp, len); + + edp += len; + memset(edp, DICSEGTERM, dicbuf + curdict->seglen - edp); + + set_size(p1, (int)(getsize(p1) - size), + (int)getplen(p1), (int)getnlen(p1)); + + (*curdict->putdic)(curdict, useg); + + del_stdy(useg, ofs, size); + + return AD_DONE; +} + + + +static int +del_douon(TypeDicSeg seg, u_char *ptr, TypeDicOfs ofs) +{ + u_char *nxt, *p1, *p2; + int size; + int nlen, plen, len; + + nxt = getntag(ptr); + + if (segend(nxt)) { + size = nxt - ptr; + + memset(ptr, DICSEGTERM, dicbuf + curdict->seglen - nxt); + } + else { + size = getsize(nxt); + nlen = getnlen(nxt); + plen = getplen(nxt); + + if (ptr == segtop()) { + if (nlen + plen > (unsigned int) count_uidx() + + sstrlen(get_idxptr(seg))) + return AD_OVFLWINDEX; + } + + len = ((len = getplen(ptr)) < plen) ? plen - len : 0; + + set_size(ptr, size + len, plen - len, nlen + len); + + p1 = nxt + DOUONBLKSIZENUMBER; + p2 = ptr + DOUONBLKSIZENUMBER + len; + + mvmemi(p1, p2, dicbuf + curdict->seglen - p1); + + size = p1 - p2; + memset(dicbuf + curdict->seglen - size, DICSEGTERM, size); + + if (ptr == segtop()) { + chg_uidx(seg, ptr + DOUONBLKSIZENUMBER, nlen + len); + } + } + + (*curdict->putdic)(curdict, seg); + + del_stdy(seg, ofs, size); + + return AD_DONE; +} + + + +static int +del_segment(TypeDicSeg seg) +{ + int i; + STDYIN *styp; + TypeDicID dicid; + TypeStyNum stdynum; + TypeDicSeg sg; + + if (curdict->segunit > 1) { + for (sg = seg + 1 ; sg < curdict->segunit ; sg++) { + (*curdict->getdic)(curdict, sg); + (*curdict->putdic)(curdict, sg - 1); + } + curdict->segunit--; + } + else { + memset(dicbuf, DICSEGTERM, (int)curdict->seglen); + dicbuf[0] = 0; + (*curdict->putdic)(curdict, DICSEGBASE); + } + + (*curdict->rszdic)(curdict, curdict->segunit); + + del_uidx(seg); + + if (StudyExist()) { + dicid = curdict->dicid; + for (i = 0, styp = STUDYDICT ; i < STUDYCOUNT ; ) { + if (styp -> dicid != dicid) + ; + else if (styp -> seg > seg) + styp -> seg -= 1; + else if (styp -> seg < seg) + ; + else { + stdynum = styp -> styno; + STUDYCOUNT--; + mvmemi((u_char *)(styp + 1), (u_char *)styp, + sizeof(*styp) * (STUDYCOUNT - i)); + continue; + } + + i++; + styp++; + } + for (i = 0, styp = STUDYDICT ; i < STUDYCOUNT ; i++, styp++) + if (styp -> styno > stdynum) styp -> styno -= 1; + + putstydic(); + } + + return AD_DONE; +} + + + +static void +del_uidx(TypeDicSeg seg) +{ + u_char *p, *q; + int len; + + p = get_idxptr(seg); + for (q = p ; *q++; ) + ; + + mvmemi(q, p, idxbuf + curdict->idxlen - q); + + len = q - p; + memset(idxbuf + curdict->idxlen - len, 0, len); + + (*curdict->putidx)(curdict, 0); + + mkidxtbl(curdict); +} + + + +static void +del_stdy(TypeDicSeg seg, TypeDicOfs ofs, int size) +{ + int i; + TypeStyNum stdynum; + STDYIN *stdy; + TypeDicID dicid; + + if (StudyExist()) { + + stdynum = 0; + dicid = curdict->dicid; + for (i = 0, stdy = STUDYDICT ; i < STUDYCOUNT ; ) { + if (stdy -> dicid != dicid) + ; + else if (stdy -> seg != seg) + ; + else if (stdy -> offset > ofs) + stdy -> offset -= size; + + else if (stdy -> offset == ofs) { + stdynum = stdy -> styno; + STUDYCOUNT--; + mvmemi((u_char *)(stdy + 1), (u_char *)stdy, + sizeof(*stdy) * (STUDYCOUNT - i)); + continue; + } + + i++; + stdy++; + } + for (i = 0, stdy = STUDYDICT ; i < STUDYCOUNT ; i++, stdy++) + if (stdy -> styno > stdynum) (stdy -> styno)--; + + putstydic(); + } +} diff --git a/lib/sj3core/dict.c b/lib/sj3core/dict.c new file mode 100644 index 0000000..b273a38 --- /dev/null +++ b/lib/sj3core/dict.c @@ -0,0 +1,102 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: dict.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:45 $ + */ + + + + +#include "sj_euc.h" +#include "sj_kcnv.h" + +#include "sj_kanakan.h" + + +void +get_askknj() +{ + u_char *p; + u_char *q; + u_char *r; + int i = 0, csize; + int flg; + + p = q = dicbuf; + + q += *p++; + + while (p < q) { + askknj[i] = p; + + r = NULL; + flg = TRUE; + do { + csize = codesize(*p); + if (p[csize] == KANJISTREND) flg = FALSE; + + if (!r && (*p != AIATTRIBUTE)) + r = p; + + p += csize; + } while (flg); + p++; + askknj_k[i++] = r; + } +} + + + +int +seldict(TypeDicID id) +{ + DICTL *dp; + + for (dp = dictlist ; dp ; dp = dp -> next) { + if ((curdict = dp -> dict) -> dicid == id) + return TRUE; + } + curdict = NULL; + + return FALSE; +} + + + +u_char * +get_idxptr(TypeDicSeg seg) +{ + (*curdict->getofs)(curdict); + (*curdict->getidx)(curdict); + + return idxbuf + idxofs[seg]; +} diff --git a/lib/sj3core/functbl.c b/lib/sj3core/functbl.c new file mode 100644 index 0000000..58e8919 --- /dev/null +++ b/lib/sj3core/functbl.c @@ -0,0 +1,81 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: functbl.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:46 $ + */ + + + + +#include "sj_rename.h" +#include "sj_typedef.h" + +#include "sj_kanakan.h" + +VFunc cvtnum_func[] = { + num_type00, num_type01, num_type02, num_type03, + num_type04, num_type05, num_type06, num_type07, + num_type08, num_type09, num_type10, num_type11, + num_type12, num_type13, num_type14 +}; + +UCPFunc getkan_func[] = { + getkan_norm, getkan_norm, getkan_hira, getkan_kata, + getkan_knj, getkan_ofs, getkan_norm, getkan_none, + getkan_norm, getkan_norm, getkan_hira, getkan_kata, + getkan_knj, getkan_ofs, getkan_norm, getkan_none +}; + +IFunc setjrec_func[] = { + setj_norm2, setj_norm2, setj_norm1, setj_norm1, + setj_knj, setj_ofs, setj_norm2, setj_atrb, + setj_norm2, setj_norm2, setj_norm1, setj_norm1, + setj_knj, setj_ofs, setj_norm2, setj_atrb +}; + +IFunc hiraknj_func[] = { + hiraknj_hira, hiraknj_norm, hiraknj_hask, hiraknj_kask, + hiraknj_knj, hiraknj_ofs, hiraknj_norm, hiraknj_atrb, + hiraknj_hira, hiraknj_norm, hiraknj_hask, hiraknj_kask, + hiraknj_knj, hiraknj_ofs, hiraknj_norm, hiraknj_atrb +}; + + + +u_char *makekan_1byte(), *makekan_knj(), *makekan_ofs(); +u_char *makekan_norm(), *makekan_none(); +UCPFunc makekan_func[] = { + makekan_norm, makekan_norm, makekan_1byte, makekan_1byte, + makekan_knj, makekan_ofs, makekan_norm, makekan_none, + makekan_norm, makekan_norm, makekan_1byte, makekan_1byte, + makekan_knj, makekan_ofs, makekan_norm, makekan_none +}; diff --git a/lib/sj3core/fuzoku.c b/lib/sj3core/fuzoku.c new file mode 100644 index 0000000..0c3425b --- /dev/null +++ b/lib/sj3core/fuzoku.c @@ -0,0 +1,272 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: fuzoku.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:47 $ + */ + + + + + +#include "sj_kcnv.h" +#include "sj_hinsi.h" +#include "sj_right.h" +#include "sj_yomi.h" + +#include "sj_kanakan.h" + +static int +fzkstrcmp(u_char *yptr, u_char *fzkp, int *saml) +{ + int asklen, nkrlen; + + asklen = FzkAskLen(fzkp); + + if (*saml < asklen) return CONT; + + if (*saml > asklen) return OVER; + + nkrlen = FzkNkrLen(fzkp); + + yptr += asklen; + fzkp ++; + + while (nkrlen--) { + if (*yptr > *fzkp) + return CONT; + + else if (*yptr < *fzkp) { + if (!*yptr) return PARTLY; + return OVER; + } + + else{ + yptr++; + fzkp++; + (*saml)++; + } + } + + return MATCH; +} + + + +void +setclrec(JREC *jrec, u_char *yptr, TypeCnct right) +{ + CLREC *new; + TypeGram hinsi; + int len; + + if (!(len = yptr - cnvstart)) return; + + if (len > MAXCLINPUTLEN) return; + + if (!(new = argclrec(len))) return; + + new -> jnode = jrec; + new -> gobiln = gobilen; + new -> right = right; + new -> fzk_ka = fzk_ka_flg; + (jrec -> count)++; + + hinsi = jrec -> hinsi; + + if (hinsi >= DO_SAHEN && hinsi <= SP_KA_ONB) + new -> kubun = K_DOUSHI; + + else if ((hinsi >= KEIYOUSI_1 && hinsi <= KE_DOUSI_9) || + (hinsi == SP_KEIYOUSI)){ + if(right == R_FZKMEISI) + new -> kubun = K_TAIGEN; + else + new -> kubun = K_YOUGEN; + } + + else if (hinsi == RENTAISI) + new -> kubun = K_RENTAISI; + + else if ((hinsi >= FUKUSI_1 && hinsi <= FUKUSI_9) || + (hinsi == SP_FUKUSI)) + new -> kubun = K_FUKUSI; + + else if (hinsi == SETUZOKU || hinsi==KANDOUSI || + hinsi == TANKANJI || hinsi==AISATU) + new -> kubun = K_SONOTA; + + else if (gobilen) { + if (hinsi >= MEISI_5 && hinsi <= MEISI_7) + new -> kubun = K_DOUSHI; + + else if (hinsi == D_MEISI_4) + new -> kubun = K_DOUSHI; + + else if (hinsi == SETUBI_7 || hinsi == SETUBI_8) + new -> kubun = K_DOUSHI; + + + else if (hinsi == D_MEISI_5) + new -> kubun = K_YOUGEN; + + else if (hinsi == SETUBI_5 || hinsi == SETUBI_6) + new -> kubun = K_YOUGEN; + else + new -> kubun = K_TAIGEN; + } + else if (hinsi >= MEISI_5 && hinsi <= MEISI_7) { + if (right >= R_I && right <= R_ITADAKE) + new -> kubun = K_DOUSHI; + + else if (right >= R_DESHI && right <= R_TAI) + new -> kubun = K_DOUSHI; + + else if (right >= R_NAI && right <= R_MEIREI2) + new -> kubun = K_DOUSHI; + + else if (right == R_TE2 || right == R_TERU) + new -> kubun = K_DOUSHI; + else + new -> kubun = K_TAIGEN; + } + else + new -> kubun = K_TAIGEN; +} + +static int +fzkcnct(TypeCnct right, TypeCnct left) +{ + u_char *cncttbl; + + if (right && left) { + cncttbl = Rigtadr(right); + left--; + if (cncttbl[left >> 3] << (left & 0x07) & 0x80) + return TRUE; + } + + return FALSE; +} + +RECURS +void +srchfzk(JREC *jrec, u_char *yptr, TypeCnct right, int level) +{ + u_char *fzk; + int len = 0; + int cmp; + u_char *next; + FREC *fzkrec; + int i; + int nlen; + TypeCnct rt; + + if ((level >= MAXFLVL) && !(Chrtbl[*yptr] & FZK_KGU)) return; + + if (terminate(right, yptr) && Chrtbl[*yptr] & FZK_KGU){ + if (!level) fzk_ka_flg = 0; + yptr++; + while (Chrtbl[*yptr] & FZK_KGU) yptr++; + setclrec(jrec, yptr, (TypeCnct)R_FZKKGU); + return; + } + + if (right == R_CUT) return; + + if (!*yptr) return; + + if (!(*yptr >= _XA && *yptr <= _NN)) return; + + fzkrec = fzktbl; + + for (i = fzkcount ; i ; i--, fzkrec++) { + + if (yptr != fzkrec -> yomip) continue; + + fzk = fzkrec -> fzkp; + + len = FzkAskLen(fzk) + (nlen = FzkNkrLen(fzk)) + 1; + + if (!fzkcnct(right, (TypeCnct)FzkLeft(fzk))) continue; + + if (!level) fzk_ka_flg = FzkStrKa(fzk); + + next = yptr + len; + + if (terminate(rt = FzkRight(fzk), next)) { + setclrec(jrec, next, rt); + } + + srchfzk(jrec, next, rt, level + 1); + } + + if (len) return; + + + if (!(fzk = Fzkadr(*yptr - _XA))) return; + + yptr++; + + for ( ; *fzk != FZKEND ; fzk += nlen + (i ? 4 : 3)) { + + nlen = FzkNkrLen(fzk); + i = FzkHasCode(fzk); + + cmp = fzkstrcmp(yptr, fzk, &len); + + if (cmp == OVER) + break; + + else if (cmp == PARTLY) + break; + + else if ((cmp != MATCH) || isdpnd(*(yptr + len))) + continue; + + + fzktbl[fzkcount].yomip = yptr - 1; + fzktbl[fzkcount].fzkp = fzk; + fzkcount++; + + if (!fzkcnct(right, (TypeCnct)FzkLeft(fzk))) continue; + + if (!level) fzk_ka_flg = FzkStrKa(fzk); + + next = yptr + len; + + if (terminate(rt = FzkRight(fzk), next)) { + setclrec(jrec, next, rt); + } + + srchfzk(jrec, next, rt, level + 1); + } +} diff --git a/lib/sj3core/fzkyomi.c b/lib/sj3core/fzkyomi.c new file mode 100644 index 0000000..fd4d660 --- /dev/null +++ b/lib/sj3core/fzkyomi.c @@ -0,0 +1,776 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: fzkyomi.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:48 $ + */ + + + +#include "sj_const.h" +#include "sj_rename.h" +#include "sj_typedef.h" +#include "sj_yomi.h" +#include "sj_right.h" +#include "sj_left.h" + +#include "sj_kanakan.h" + +static u_char fzk_wo[] = { +(0<<5)+0, L_WO, R_WO, +(0<<5)+0, L_WO_S, R_WO_S, +0xff +}; + +static u_char fzk_xtu[] = { +(0<<5) + 1, _KE, L_KKE, R_SHUUJO, +(0<<5) + 3, _TA,_XTU,_TE, L_TTATTE, R_TTATTE, +(1<<5) + 1, _RA, L_TTARA, R_TTARA, +(2<<5) + 2, _SI, _I, L_TTARASII, R_KSHUUSI, +(3<<5) + 2, _KA, _XTU, L_TTARASII, R_ONBIN1, +(4<<5) + 2, _RO, _U, L_TTARASII, R_KAROU, +(3<<5) + 1, _KU, L_TTARASII, R_KRENYOU, +(3<<5) + 2, _KE, _RE, L_TTARASII, R_KATEI1, +(3<<5) + 1, _SA, L_TTARASII, R_FZKMEISI, +(0<<5) + 1, _TE, L_TTE1, R_TTE1, +(1<<5) + 0, L_TTE2, R_TTE2, +(0<<5) + 3, _PA,_NA,_SI, L_PPANASI, R_PPANASI, +(0<<5) + 2, _PO,_I, L_PPOI, R_PPOI, +(1<<5) + 2, _KA,_XTU, L_PPOI, R_ONBIN1, +(2<<5) + 2, _RO,_U, L_PPOI, R_KAROU, +(1<<5) + 1, _KU, L_PPOI, R_KRENYOU, +(1<<5) + 2, _KE,_RE, L_PPOI, R_KATEI1, +0xff +}; + +static u_char fzk_a[] = { +(0<<5) + 1, _GE, L_YOUGEN, R_AGE, +(1<<5) + 1, _YO, L_YOUGEN, R_MEIREI2, +(1<<5) + 1, _RU, L_YOUGEN, R_SHUUSI, +(1<<5) + 1, _RE, L_YOUGEN, R_KATEI3, +(1<<5) + 1, _RO, L_YOUGEN, R_MEIREI1, +(0<<5) + 1, _XTU, L_ARU, R_AXTU, +(0<<5) + 1, _RA, L_ARA, R_MIZEN2, +(0<<5) + 1, _RI, L_ARI1, R_ARI1, +(1<<5) + 0, L_ARI2, R_ARI2, +(1<<5) + 0, L_ARI3, R_ARI3, +(0<<5) + 1, _RU, L_ARU, R_SHUUSI, +(0<<5) + 1, _RE, L_ARE1, R_KAMEI, +(1<<5) + 0, L_ARE2, R_KATEI2, +(1<<5) + 3, _BA,_KO,_SO, L_ARE1, R_CUT, +(0<<5) + 2, _RO,_U, L_AROU, R_AROU, +0xff +}; + +static u_char fzk_i[] = { +(0<<5) + 0, L_IRU, R_I, +(0<<5) + 1, _I, L_II, R_SHUUSI, +(0<<5) + 1, _KA, L_YOUGEN, R_MIZEN5, +(0<<5) + 1, _KI, L_YOUGEN, R_IKI, +(0<<5) + 1, _KU, L_YOUGEN, R_SHUUSI, +(0<<5) + 1, _KE, L_YOUGEN, R_IKE, +(0<<5) + 2, _KO,_U, L_YOUGEN, R_AROU, +(0<<5) + 2, _TA,_SI, L_ITASI, R_ITASI, +(1<<5) + 2, _DA,_I, L_ITADAKU, R_ONBIN2, +(2<<5) + 1, _KA, L_ITADAKU, R_MIZEN4, +(2<<5) + 1, _KI, L_ITADAKU, R_ITADAKI, +(2<<5) + 1, _KU, L_ITADAKU, R_SHUUSI, +(2<<5) + 1, _KE, L_ITADAKU, R_ITADAKE, +(2<<5) + 2, _KO,_U, L_ITADAKU, R_AROU, +(0<<5) + 1, _XTU, L_YOUGEN, R_ONBIN8, +(0<<5) + 1, _YO, L_IRU, R_MEIREI2, +(0<<5) + 1, _RU, L_IRU, R_SHUUSI, +(0<<5) + 1, _RE, L_IRU, R_KATEI2, +(0<<5) + 1, _RO, L_IRU, R_MEIREI1, +0xff +}; + +static u_char fzk_u[] = { +(0<<5) + 1, _E, L_UE, R_UE, +(0<<5) + 1, _TI, L_UTI, R_UTI, +(0<<5) + 1, _RU, L_ERU, R_SHUUSI, +0xff +}; + +static u_char fzk_e[] = { +(0<<5) + 0, L_ERU, R_E, +(0<<5) + 1, _RU, L_ERU, R_SHUUSI, +(0<<5) + 1, _RE, L_ERU, R_KATEI3, +0xff +}; + +static u_char fzk_o[] = { +(0<<5) + 1, _I, L_YOUGEN, R_ONBIN8, +(1<<5) + 1, _TE, L_OITE, R_OITE, +(0<<5) + 1, _KA, L_YOUGEN, R_MIZEN5, +(0<<5) + 1, _KI, L_YOUGEN, R_IKI, +(0<<5) + 1, _KU, L_YOUGEN, R_SHUUSI, +(0<<5) + 1, _KE, L_YOUGEN, R_IKE, +(1<<5) + 1, _RU, L_OKERU, R_OKERU, +(0<<5) + 2, _KO,_U, L_YOUGEN, R_AROU, +(0<<5) + 1, _RA, L_YOUGEN, R_MIZEN2, +(0<<5) + 1, _RI, L_ORI, R_ORI1, +(1<<5) + 0, L_YOUGEN, R_ORI2, +(0<<5) + 1, _RE, L_YOUGEN, R_KAMEI, +0xff +}; + +static u_char fzk_ka[] = { +(0<<5) + 0 + 8, L_KA1, R_KA1, +(0<<5) + 0 + 8, L_KA2, R_KA2, +(0<<5) + 1, _I, L_KAI, R_SHUUJO, +(0<<5) + 1, _KE, L_KAKERU, R_KAKE, +(1<<5) + 1, _RU, L_KAKERU, R_SHUUSI, +(1<<5) + 1, _RE, L_KAKERU, R_KATEI3, +(0<<5) + 2, _SI,_RA, L_KASIRA, R_SHUUJO, +(2<<5) + 1, _NE, L_KASIRA, R_SHUUJO, +(0<<5) + 3, _TA,_GA,_TA, L_KATAGATA,R_KATAGATA, +(0<<5) + 3, _DO,_U,_KA, L_KADOUKA, R_KADOUKA, +(0<<5) + 1, _NA, L_KANA, R_SHUUJO, +(0<<5) + 1, _NE, L_KANE, R_SHUUJO, +(1<<5) + 0, L_KANERU, R_KANE2, +(1<<5) + 1, _RU, L_KANERU, R_SHUUSI, +(1<<5) + 1, _RE, L_KANERU, R_KATEI3, +(0<<5) + 3, _MA,_TA,_HA, L_KA1, R_CUT, +(0<<5) + 1, _MO, L_KAMO, R_KAMO, +(0<<5) + 1, _RA, L_KARA1, R_KARA1, +(1<<5) + 0, L_KARA2, R_KARA2, +(1<<5) + 1, _ZU, L_KARAZU, R_ZU, +(1<<5) + 1, _NU, L_KARAZU, R_NU, +0xff +}; + +static u_char fzk_ga[] = { +(0<<5) + 0, L_GA1, R_GA1, +(0<<5) + 0, L_GA2, R_GA2, +(0<<5) + 2, _TA,_I, L_GATAI, R_KSHUUSI, +(1<<5) + 2, _KA,_XTU, L_GATAI, R_ONBIN1, +(2<<5) + 2, _RO,_U, L_GATAI, R_KAROU, +(1<<5) + 1, _KU, L_GATAI, R_GATAKU, +(1<<5) + 2, _KE,_RE, L_GATAI, R_KATEI2, +(0<<5) + 1, _TI, L_GATIDA, R_GATI, +(1<<5) + 1, _DA, L_GATIDA, R_DSHUUSI1, +(2<<5) + 1, _XTU, L_GATIDA, R_ONBIN1, +(2<<5) + 2, _RO,_U, L_GATIDA, R_DAROU, +(1<<5) + 1, _DE, L_GATIDA, R_DRENYOU1, +(1<<5) + 1, _NA, L_GATIDA, R_DRENTAI1, +(2<<5) + 1, _RA, L_GATIDA, R_KATEI1, +(1<<5) + 1, _NI, L_GATIDA, R_DRENYOU2, +(0<<5) + 2, _TE,_RA, L_GATERA, R_GATERA, +0xff +}; + +static u_char fzk_ki[] = { +(0<<5) + 0, L_YOUGEN, R_FZKKI, +(0<<5) + 1, _RI, L_KIRI, R_KIRI, +0xff +}; + +static u_char fzk_ku[] = { +(0<<5) + 2, _SE,_NI, L_KUSENI, R_KUSENI, +(0<<5) + 3, _DA,_SA,_I, L_KUDASARU, R_KUDASAI, +(2<<5) + 1, _XTU, L_KUDASARU, R_ONBIN6, +(2<<5) + 1, _RA, L_KUDASARU, R_MIZEN4, +(2<<5) + 1, _RI, L_KUDASARU, R_ITADAKI, +(2<<5) + 1, _RU, L_KUDASARU, R_SHUUSI, +(2<<5) + 1, _RE, L_KUDASARU, R_KATEI3, +(0<<5) + 2, _RA,_I, L_KURAI, R_KURAI, +(0<<5) + 1, _RU, L_YOUGEN, R_SHUUSI, +(0<<5) + 1, _RE, L_YOUGEN, R_KURE, +(1<<5) + 1, _RU, L_YOUGEN, R_SHUUSI, +(1<<5) + 1, _RE, L_YOUGEN, R_KATEI3, +0xff +}; + +static u_char fzk_gu[] = { +(0<<5) + 2, _RA,_I, L_KURAI, R_KURAI, +(0<<5) + 2, _RU,_MI, L_GURUMI, R_GURUMI, +0xff +}; + +static u_char fzk_ke[] = { +(0<<5) + 1, _DO, L_KEDO, R_KEDO, +(1<<5) + 1, _MO, L_KEDO, R_KEDO, +(0<<5) + 2, _RE,_DO, L_KEDO, R_KEDO, +(2<<5) + 1, _MO, L_KEDO, R_KEDO, +0xff +}; + +static u_char fzk_ko[] = { +(0<<5) + 0, L_YOUGEN, R_KO, +(0<<5) + 1, _I, L_YOUGEN, R_MEIREI1, +(0<<5) + 1, _SO, L_KOSO, R_KOSO, +(0<<5) + 1, _TO, L_KOTO, R_KOTO, +0xff +}; + +static u_char fzk_go[] = { +(0<<5) + 2, _ZA,_I, L_GOZAI, R_GOZAI, +(0<<5) + 2, _TO,_KI, L_GOTOSI, R_GOTOKI, +(1<<5) + 1, _KU, L_GOTOSI, R_GOTOKU, +(1<<5) + 1, _SI, L_GOTOSI, R_GOTOSI, +0xff +}; + +static u_char fzk_sa[] = { +(0<<5) + 0, L_SA1, R_MIZEN1, +(0<<5) + 0, L_SA2, R_SHUUJO, +(0<<5) + 1, _E, L_SAE, R_SAE, +(0<<5) + 1, _SE, L_SASERU, R_SASE, +(1<<5) + 1, _YO, L_SASERU, R_MEIREI2, +(1<<5) + 1, _RU, L_SASERU, R_SHUUSI, +(1<<5) + 1, _RE, L_SASERU, R_KATEI2, +(1<<5) + 1, _RO, L_SASERU, R_MEIREI1, +0xff +}; + +static u_char fzk_za[] = { +(0<<5) + 1, _RU, L_ZARU, R_ZARU, +(0<<5) + 1, _RE, L_ZARU, R_KATEI2, +0xff +}; + +static u_char fzk_si[] = { +(0<<5) + 0, L_SI1, R_SI1, +(0<<5) + 0, L_SI2, R_SI2, +(0<<5) + 0, L_N_SI, R_N_SI, +(0<<5) + 1, _KA, L_SIKA, R_SIKA, +(0<<5) + 1, _TE, L_SITE, R_SITE, +(0<<5) + 2, _MA,_I, L_YOUGEN, R_IKI, +(1<<5) + 1, _U, L_YOUGEN, R_SHUUSI, +(1<<5) + 1, _E, L_YOUGEN, R_IKE, +(1<<5) + 2, _O,_U, L_YOUGEN, R_AROU, +(1<<5) + 1, _XTU, L_YOUGEN, R_ONBIN6, +(1<<5) + 1, _WA, L_YOUGEN, R_MIZEN5, +(0<<5) + 1, _RO, L_SIRO, R_MEIREI1, +0xff +}; + +static u_char fzk_ji[] = { +(0<<5) + 2, _MA,_I, L_JIMAU, R_IKI, +(1<<5) + 1, _U, L_JIMAU, R_SHUUSI, +(1<<5) + 1, _E, L_JIMAU, R_IKE, +(1<<5) + 2, _O,_U, L_JIMAU, R_AROU, +(1<<5) + 1, _XTU, L_JIMAU, R_ONBIN6, +(1<<5) + 1, _WA, L_JIMAU, R_MIZEN5, +(0<<5) + 1, _XYA, L_JYA, R_JYA, +(1<<5) + 1, _I, L_JYAU, R_IKI, +(1<<5) + 1, _U, L_JYAU, R_SHUUSI, +(1<<5) + 1, _E, L_JYAU, R_IKE, +(1<<5) + 2, _O,_U, L_JYAU, R_AROU, +(1<<5) + 1, _XTU, L_JYAU, R_ONBIN6, +(1<<5) + 1, _WA, L_JYAU, R_MIZEN5, +0xff +}; + +static u_char fzk_su[] = { +(0<<5) + 1, _GI, L_SUGIRU, R_SUGI, +(1<<5) + 1, _RU, L_SUGIRU, R_SHUUSI, +(1<<5) + 1, _RE, L_SUGIRU, R_KATEI2, +(0<<5) + 3, _BE,_KA,_RA, L_SUBESI, R_BEKARA, +(1<<5) + 1, _KI, L_SUBESI, R_BEKI, +(1<<5) + 1, _KU, L_SUBESI, R_BEKU, +(1<<5) + 1, _SI, L_SUBESI, R_BESI, +(0<<5) + 1, _RA, L_SURA, R_SURA, +(0<<5) + 1, _RU, L_SURU, R_SHUUSI, +(0<<5) + 1, _RE, L_SURE, R_KATEI2, +0xff +}; + +static u_char fzk_zu[] = { +(0<<5) + 0, L_ZU, R_ZU, +(0<<5) + 1, _TU, L_ZUTU, R_ZUTU, +(0<<5) + 2, _NI,_I, L_ZU, R_I, +(2<<5) + 1, _RU, L_ZU, R_SHUUSI, +(0<<5) + 2, _NN,_BA, L_ZUNBA, R_CUT, +0xff + }; + +static u_char fzk_se[] = { +(0<<5) + 0, L_SE, R_MIZEN2, +(0<<5) + 0, L_SERU, R_SASE, +(0<<5) + 1, _YO, L_SEYO, R_MEIREI2, +(1<<5) + 0, L_SERU, R_MEIREI2, +(0<<5) + 1, _RU, L_SERU, R_SHUUSI, +(0<<5) + 1, _RE, L_SERU, R_KATEI2, +(0<<5) + 1, _RO, L_SERU, R_MEIREI1, +0xff +}; + +static u_char fzk_ze[] = { +(0<<5) + 0, L_ZE, R_SHUUJO, +0xff +}; + +static u_char fzk_so[] = { +(0<<5) + 1, _U, L_SOUDA, R_SOU, +(1<<5) + 1, _DA, L_SOUDA, R_SOUDA, +(2<<5) + 1, _XTU, L_YOUTAI, R_ONBIN1, +(2<<5) + 2, _RO,_U, L_YOUTAI, R_DAROU, +(1<<5) + 1, _DE, L_SOUDA, R_SOUDE, +(2<<5) + 1, _SI, L_SOUDA, R_DESHI, +(3<<5) + 1, _XYO, L_YOUTAI, R_SHO, +(4<<5) + 1, _U, L_YOUTAI, R_DESHOU, +(2<<5) + 1, _SU, L_SOUDA, R_SOUDESU, +(1<<5) + 1, _NA, L_DENBUN, R_SOUNA1, +(2<<5) + 0, L_YOUTAI, R_SOUNA2, +(2<<5) + 1, _RA, L_SOUDA, R_KATEI1, +(1<<5) + 1, _NI, L_YOUTAI, R_SOUNI, +0xff +}; + +static u_char fzk_zo[] = { +(0<<5) + 0, L_ZO, R_SHUUJO, +0xff +}; + +static u_char fzk_ta[] = { +(0<<5) + 0, L_TA, R_TA, +(0<<5) + 1, _I, L_TAI, R_TAI, +(0<<5) + 2, _KA,_XTU, L_TAI, R_ONBIN1, +(1<<5) + 2, _RO,_U, L_TAI, R_KAROU, +(0<<5) + 2, _GA,_XTU, L_TAGARU, R_ONBIN6, +(1<<5) + 1, _RA, L_TAGARU, R_TAGARA, +(1<<5) + 1, _RI, L_TAGARU, R_TAGARI, +(1<<5) + 1, _RU, L_TAGARU, R_SHUUSI, +(1<<5) + 1, _RE, L_TAGARU, R_KATEI3, +(1<<5) + 2, _RO,_U, L_TAGARU, R_KAROU, +(0<<5) + 1, _KU, L_TAI, R_TAKU, +(0<<5) + 2, _KE,_RE, L_TAI, R_KATEI3, +(0<<5) + 2, _MA,_I, L_TAMAU, R_IKI, +(1<<5) + 1, _U, L_TAMAU, R_SHUUSI, +(1<<5) + 1, _E, L_TAMAU, R_KAMEI, +(1<<5) + 1, _XTU, L_TAMAU, R_ONBIN6, +(1<<5) + 1, _WA, L_TAMAU, R_MIZEN5, +(0<<5) + 1, _ME, L_TAME, R_TAME, +(0<<5) + 1, _RA, L_TA, R_KATEI1, +(0<<5) + 1, _RI, L_TA, R_TARI, +(0<<5) + 1, _RU, L_TARU, R_CUT, +(0<<5) + 2, _RO,_U, L_TA, R_KAROU, +0xff +}; + +static u_char fzk_da[] = { +(0<<5) + 0, L_DA1, R_TA, +(0<<5) + 0, L_DA2, R_DSHUUSI1, +(0<<5) + 1, _KE, L_DAKE, R_DAKE, +(0<<5) + 1, _XTU, L_DAXTU, R_ONBIN1, +(0<<5) + 1, _NO, L_DANO, R_DANO, +(0<<5) + 1, _RA, L_DA1, R_KATEI1, +(1<<5) + 1, _KE, L_DARAKE, R_DARAKE, +(0<<5) + 1, _RI, L_DA1, R_TARI, +(0<<5) + 2, _RO,_U, L_DAROU, R_DAROU, +0xff +}; + +static u_char fzk_ti[] = { +(0<<5) + 2, _MA,_I, L_TIMAU, R_IKI, +(1<<5) + 1, _U, L_TIMAU, R_SHUUSI, +(1<<5) + 1, _E, L_TIMAU, R_IKE, +(1<<5) + 2, _O,_U, L_TIMAU, R_AROU, +(1<<5) + 1, _XTU, L_TIMAU, R_ONBIN6, +(1<<5) + 1, _WA, L_TIMAU, R_MIZEN5, +(0<<5) + 1, _XYA, L_TYA, R_CUT, +(1<<5) + 1, _I, L_TYAU, R_IKI, +(1<<5) + 1, _U, L_TYAU, R_SHUUSI, +(1<<5) + 1, _E, L_TYAU, R_IKE, +(1<<5) + 2, _O,_U, L_TYAU, R_AROU, +(1<<5) + 1, _XTU, L_TYAU, R_ONBIN6, +(1<<5) + 1, _WA, L_TYAU, R_MIZEN5, +0xff +}; + +static u_char fzk_di[] = { +(0<<5) + 1, _XYA, L_JYA, R_JYA, +0xff +}; + +static u_char fzk_tu[] = { +(0<<5) + 2, _I,_TE, L_TUITE, R_TUITE, +(0<<5) + 1, _KI, L_TUKI, R_TUKI, +(0<<5) + 1, _TU, L_TUTU, R_TUTU, +(0<<5) + 2, _MO,_RI, L_TUMORI, R_TUMORI, +0xff +}; + +static u_char fzk_te[] = { +(0<<5) + 0, L_TE1, R_TE1, +(0<<5) + 0, L_TE2, R_TE2, +(0<<5) + 1, _RU, L_TERU, R_TERU, +0xff +}; + +static u_char fzk_de[] = { +(0<<5) + 0, L_DE, R_DE, +(0<<5) + 0, L_DA1, R_TE2, +(0<<5) + 3, _A,_RO,_U, L_DEAROU, R_AROU, +(0<<5) + 1, _KI, L_DEKIRU, R_DEKI, +(1<<5) + 1, _RU, L_DEKIRU, R_SHUUSI, +(1<<5) + 1, _RE, L_DEKIRU, R_KATEI3, +(0<<5) + 1, _SI, L_DESI, R_DESHI, +(1<<5) + 1, _XYO, L_DESHO, R_SHO, +(2<<5) + 1, _U, L_DESHO, R_DESHOU, +(0<<5) + 1, _SU, L_DESU, R_DESU, +(0<<5) + 1, _HA, L_DEHA, R_DEHA, +(0<<5) + 1, _RU, L_DERU, R_TERU, +0xff +}; + +static u_char fzk_to[] = { +(0<<5) + 0, L_TO1, R_TO1, +(0<<5) + 0, L_TO2, R_TO2, +(0<<5) + 1, _I, L_TE2, R_ONBIN8, +(1<<5) + 1, _U, L_TOIU, R_TOIU, +(0<<5) + 2, _O,_RI, L_TOORI, R_TOORI, +(0<<5) + 1, _KA, L_TE2, R_MIZEN5, +(0<<5) + 1, _KI, L_TOKI, R_TOKI, +(1<<5) + 0, L_TE2, R_IKI, +(0<<5) + 1, _KU, L_TE2, R_SHUUSI, +(0<<5) + 1, _KE, L_TE2, R_IKE, +(0<<5) + 1, _KO, L_TOKORO, R_TOKORO, +(1<<5) + 1, _U, L_TE2, R_AROU, +(1<<5) + 1, _RO, L_TOKORO, R_TOKORO, +(0<<5) + 2, _XTU,_TE, L_TOTTE, R_TOTTE, +(0<<5) + 1, _TE, L_TOTE, R_TOTE, +(0<<5) + 3, _HA,_I,_E, L_TOHAIE, R_TOHAIE, +(0<<5) + 1, _MO, L_TOMO, R_TOMO, +0xff +}; + +static u_char fzk_do[] = { +(0<<5) + 0, L_DO, R_DO, +(0<<5) + 1, _I, L_DA1, R_ONBIN8, +(0<<5) + 2, _O,_RI, L_DOORI, R_DOORI, +(0<<5) + 1, _KA, L_DA1, R_MIZEN5, +(0<<5) + 1, _KI, L_DA1, R_IKI, +(0<<5) + 1, _KU, L_DA1, R_SHUUSI, +(0<<5) + 1, _KE, L_DA1, R_IKE, +(0<<5) + 2, _KO,_U, L_DA1, R_AROU, +(1<<5) + 1, _RO, L_DOKORO, R_DOKORO, +(2<<5) + 1, _KA, L_DOKOROKA, R_DOKOROKA, +(0<<5) + 1, _MO, L_DOMO, R_DOMO, +0xff +}; + +static u_char fzk_na[] = { +(0<<5) + 0, L_NA1, R_SHUUJO, +(0<<5) + 0, L_NA2, R_NA2, +(0<<5) + 1, _XA, L_NAA, R_SHUUJO, +(0<<5) + 1, _A, L_NAA, R_SHUUJO, +(0<<5) + 1, _I, L_NAI, R_NAI, +(1<<5) + 1, _DE, L_NAI, R_NAIDE, +(0<<5) + 2, _KA,_XTU, L_NAI, R_ONBIN1, +(1<<5) + 2, _RO,_U, L_NAI, R_KAROU, +(0<<5) + 2, _GA,_RA, L_NAGARA, R_NAGARA, +(2<<5) + 0, L_NAGARA2, R_NAGARA2, +(0<<5) + 2, _KI,_XYA, L_NAI, R_CUT, +(0<<5) + 1, _KU, L_NAI, R_NAKU, +(0<<5) + 2, _KE,_RE, L_NAI, R_KATEI3, +(0<<5) + 2, _SA,_I, L_NASAI, R_NASAI, +(1<<5) + 1, _RA, L_NASARU, R_MIZEN4, +(1<<5) + 1, _RI, L_NASARU, R_ITADAKI, +(1<<5) + 1, _RU, L_NASARU, R_SHUUSI, +(1<<5) + 1, _RE, L_NASARU, R_KATEI3, +(2<<5) + 1, _RU, L_NASARU, R_SHUUSI, +(0<<5) + 1, _ZO, L_NAZO, R_NAZO, +(0<<5) + 1, _XTU, L_NARU, R_ONBIN2, +(0<<5) + 1, _DO, L_NADO, R_NADO, +(0<<5) + 1, _YO, L_NA1, R_SHUUJO, +(0<<5) + 1, _RA, L_NARA, R_KATEI1, +(1<<5) + 0, L_NARU, R_MIZEN5, +(0<<5) + 1, _RI, L_NARI, R_NARI, +(1<<5) + 0, L_NARU, R_IKI, +(0<<5) + 1, _RU, L_NARU, R_SHUUSI, +(0<<5) + 1, _RE, L_NARU, R_IKE, +(0<<5) + 2, _RO,_U, L_NARU, R_AROU, +(0<<5) + 2, _NN,_KA, L_NANKA, R_NANKA, +(1<<5) + 1, _ZO, L_NANZO, R_NANZO, +(1<<5) + 1, _TE, L_NANTE, R_NANTE, +0xff +}; + +static u_char fzk_ni[] = { +(0<<5) + 0, L_NI1, R_NI1, +(0<<5) + 0, L_NI2, R_NI2, +(0<<5) + 0, L_NI3, R_NI3, +(0<<5) + 2, _KU,_I, L_NIKUI, R_KSHUUSI, +(1<<5) + 2, _KA,_XTU, L_NIKUI, R_ONBIN1, +(2<<5) + 2, _RO,_U, L_NIKUI, R_KAROU, +(1<<5) + 1, _KU, L_NIKUI, R_TAKU, +(1<<5) + 2, _KE,_RE, L_NIKUI, R_KATEI3, +(1<<5) + 1, _SA, L_NIKUI, R_FZKMEISI, +(0<<5) + 1, _TE, L_NITE, R_NITE, +(0<<5) + 2, _DE,_MO, L_NI1, R_MO1, +(0<<5) + 1, _MO, L_NIMO, R_NIMO, +0xff +}; + +static u_char fzk_nu[] = { +(0<<5) + 0, L_NU, R_NU, +0xff +}; + +static u_char fzk_ne[] = { +(0<<5) + 0, L_NE1, R_SHUUJO, +(0<<5) + 0, L_NE2, R_KATEI2, +(0<<5) + 1, _E, L_NEE, R_SHUUJO, +0xff +}; + +static u_char fzk_no[] = { +(0<<5) + 0, L_NO1, R_NO1, +(0<<5) + 0, L_NO2, R_NO2, +(0<<5) + 1, _DE, L_NODE, R_NODE, +(0<<5) + 1, _NI, L_NONI, R_NONI, +(0<<5) + 1, _MI, L_NOMI, R_NOMI, +(1<<5) + 3, _NA,_RA,_ZU, L_NOMINRZ, R_NOMINRZ, +0xff +}; + +static u_char fzk_ha[] = { +(0<<5) + 0, L_HA, R_HA, +(0<<5) + 1, _SI, L_HA, R_HASI, +(0<<5) + 1, _ZU, L_HAZU, R_HAZU, +0xff +}; + +static u_char fzk_ba[] = { +(0<<5) + 0, L_BA, R_BA, +(0<<5) + 2, _KA,_SI, L_BAKARI, R_BAKARI, +(1<<5) + 1, _RI, L_BAKARI, R_BAKARI, +(0<<5) + 3, _XTU,_KA,_SI, L_BAKARI, R_BAKARI, +(2<<5) + 1, _RI, L_BAKARI, R_BAKARI, +0xff +}; + +static u_char fzk_hu[] = { +(0<<5) + 2, _U,_DA, L_FUUDA, R_SOUDA, +(2<<5) + 1, _XTU, L_FUUDA, R_ONBIN1, +(2<<5) + 2, _RO,_U, L_FUUDA, R_DAROU, +(1<<5) + 1, _DE, L_FUUDA, R_SOUDE, +(2<<5) + 1, _SI, L_FUUDA, R_DESHI, +(3<<5) + 1, _XYO, L_FUUDA, R_SHO, +(4<<5) + 1, _U, L_FUUDA, R_DESHOU, +(2<<5) + 1, _SU, L_FUUDA, R_SOUDESU, +(1<<5) + 1, _NA, L_FUUDA, R_SOUNA2, +(2<<5) + 1, _RA, L_FUUDA, R_KATEI1, +(1<<5) + 1, _NI, L_FUUDA, R_FUUNI, +0xff +}; + +static u_char fzk_he[] = { +(0<<5)+0, L_HE, R_HE, +0xff +}; + +static u_char fzk_be[] = { +(0<<5) + 2, _KA,_RA, L_BESI, R_BEKARA, +(0<<5) + 1, _KI, L_BESI, R_BEKI, +(0<<5) + 1, _KU, L_BESI, R_BEKU, +(0<<5) + 1, _SI, L_BESI, R_BESI, +0xff +}; + +static u_char fzk_ho[] = { +(0<<5) + 1, _U, L_HOU, R_HOU, +(0<<5) + 1, _KA, L_HOKA, R_HOKA, +(0<<5) + 1, _DO, L_HODO, R_HODO, +0xff +}; + +static u_char fzk_ma[] = { +(0<<5) + 1, _I, L_MAI, R_MAI, +(0<<5) + 1, _SI, L_MASU, R_DESHI, +(1<<5) + 0, L_MASU, R_MEIREI2, +(1<<5) + 1, _XYO, L_MASU, R_SHO, +(2<<5) + 1, _U, L_MASU, R_DESHOU, +(0<<5) + 1, _SU, L_MASU, R_MASU, +(1<<5) + 1, _RE, L_MASURE, R_KATEI2, +(0<<5) + 1, _SE, L_MASE, R_MEIREI1, +(1<<5) + 1, _NU, L_MASU, R_NU, +(1<<5) + 1, _NN, L_MASU, R_NN2, +(0<<5) + 1, _DE, L_MADE, R_MADE, +(0<<5) + 1, _MA, L_MAMA, R_MAMA, +0xff +}; + +static u_char fzk_mi[] = { +(0<<5) + 0, L_YOUGEN, R_MI, +(0<<5) + 2, _TA,_I, L_MITAIDA, R_MITAI, +(2<<5) + 1, _DA, L_MITAIDA, R_MITAIDA, +(3<<5) + 1, _XTU, L_MITAIDA, R_ONBIN1, +(3<<5) + 2, _RO,_U, L_MITAIDA, R_DAROU, +(2<<5) + 1, _DE, L_MITAIDA, R_SOUDE, +(3<<5) + 1, _SI, L_MITAIDA, R_DESHI, +(4<<5) + 1, _XYO, L_MITAIDA, R_SHO, +(5<<5) + 1, _U, L_MITAIDA, R_DESHOU, +(3<<5) + 1, _SU, L_MITAIDA, R_SOUDESU, +(2<<5) + 1, _NA, L_MITAIDA, R_SOUNA2, +(3<<5) + 1, _RA, L_MITAIDA, R_KATEI1, +(2<<5) + 1, _NI, L_MITAIDA, R_FUUNI, +(0<<5) + 1, _YO, L_YOUGEN, R_MEIREI2, +(0<<5) + 1, _RU, L_YOUGEN, R_SHUUSI, +(0<<5) + 1, _RE, L_YOUGEN, R_KATEI2, +(0<<5) + 1, _RO, L_YOUGEN, R_MEIREI1, +0xff +}; + +static u_char fzk_mo[] = { +(0<<5) + 0, L_MO1, R_MO1, +(0<<5) + 0, L_MO2, R_MO2, +(0<<5) + 2, _XTU,_TE, L_MOTTE, R_MOTTE, +(0<<5) + 1, _NO, L_MONO, R_MONO, +(0<<5) + 2, _RA,_I, L_YOUGEN, R_IKI, +(1<<5) + 1, _U, L_YOUGEN, R_SHUUSI, +(1<<5) + 1, _E, L_YOUGEN, R_IKE, +(1<<5) + 2, _O,_U, L_YOUGEN, R_AROU, +(1<<5) + 1, _XTU, L_YOUGEN, R_ONBIN2, +(1<<5) + 1, _WA, L_YOUGEN, R_MIZEN5, +(0<<5) + 1, _NN, L_WAYO, R_SHUUJO, +(1<<5) + 1, _KA, L_WAYO, R_SHUUJO, +0xff +}; + +static u_char fzk_ya[] = { +(0<<5) + 0, L_YA1, R_YA1, +(0<<5) + 0, L_YA2, R_YA2, +(0<<5) + 2, _SU,_I, L_YASUI, R_KSHUUSI, +(1<<5) + 2, _KA,_XTU, L_YASUI, R_ONBIN1, +(2<<5) + 2, _RO,_U, L_YASUI, R_KAROU, +(1<<5) + 1, _KU, L_YASUI, R_TAKU, +(1<<5) + 2, _KE,_RE, L_YASUI, R_KATEI3, +(1<<5) + 1, _SA, L_YASUI, R_FZKMEISI, +(0<<5) + 1, _XTU, L_YOUGEN, R_ONBIN2, +(0<<5) + 1, _RA, L_YARA, R_YARA, +(1<<5) + 0, L_YOUGEN, R_MIZEN5, +(0<<5) + 1, _RI, L_YOUGEN, R_IKI, +(0<<5) + 1, _RU, L_YOUGEN, R_SHUUSI, +(0<<5) + 1, _RE, L_YOUGEN, R_KATEI2, +(0<<5) + 2, _RO,_U, L_YOUGEN, R_AROU, +0xff +}; + +static u_char fzk_yu[] = { +(0<<5) + 1, _E, L_YUE, R_YUE, +0xff +}; + +static u_char fzk_yo[] = { +(0<<5) + 0, L_YO, R_SHUUJO, +(0<<5) + 1, _I, L_YOI, R_KSHUUSI, +(0<<5) + 1, _U, L_YOU, R_YOU1, +(1<<5) + 0, L_YOUDA, R_YOU2, +(1<<5) + 1, _DA, L_YOUDA, R_SOUDA, +(2<<5) + 1, _XTU, L_YOUDA, R_ONBIN1, +(2<<5) + 2, _RO,_U, L_YOUDA, R_DAROU, +(1<<5) + 1, _DE, L_YOUDA, R_SOUDE, +(2<<5) + 1, _SI, L_YOUDA, R_DESHI, +(3<<5) + 1, _XYO, L_YOUDA, R_SHO, +(4<<5) + 1, _U, L_YOUDA, R_DESHOU, +(2<<5) + 1, _SU, L_YOUDA, R_SOUDESU, +(1<<5) + 1, _NA, L_YOUDA, R_SOUNA2, +(2<<5) + 1, _RA, L_YOUDA, R_KATEI1, +(1<<5) + 1, _NI, L_YOUDA, R_FUUNI, +(0<<5) + 2, _KA,_XTU, L_YOI, R_ONBIN1, +(1<<5) + 2, _RO,_U, L_YOI, R_KAROU, +(0<<5) + 1, _KU, L_YOI, R_TAKU, +(0<<5) + 2, _KE,_RE, L_YOI, R_KATEI3, +(0<<5) + 1, _SA, L_YOI, R_FZKMEISI, +(0<<5) + 2, _XTU,_TE, L_YORU, R_YOTTE, +(0<<5) + 2, _NA,_XA, L_YO, R_SHUUJO, +(1<<5) + 1, _A, L_YO, R_SHUUJO, +(0<<5) + 1, _NE, L_YO, R_SHUUJO, +(0<<5) + 1, _RA, L_YORU, R_MIZEN4, +(0<<5) + 1, _RI, L_YORI, R_YORI1, +(1<<5) + 0, L_YORU, R_YORI2, +(0<<5) + 1, _RU, L_YORU, R_SHUUSI, +(0<<5) + 1, _RE, L_YORU, R_KATEI3, +0xff +}; + +static u_char fzk_ra[] = { +(0<<5) + 2, _SI,_I, L_RASII, R_RASII, +(1<<5) + 2, _KA,_XTU, L_RASII, R_ONBIN1, +(1<<5) + 1, _KI, L_RASII, R_GOTOKI, +(1<<5) + 1, _KU, L_RASII, R_TAKU, +(1<<5) + 2, _XYU,_U, L_RASII, R_RASHUU, +(0<<5) + 1, _RE, L_RARERU, R_RARE, +(1<<5) + 1, _YO, L_RARERU, R_MEIREI2, +(1<<5) + 1, _RU, L_RARERU, R_SHUUSI, +(1<<5) + 1, _RE, L_RARERU, R_KATEI2, +(1<<5) + 1, _RO, L_RARERU, R_MEIREI1, +0xff +}; + +static u_char fzk_re[] = { +(0<<5) + 0, L_RERU, R_RARE, +(0<<5) + 1, _YO, L_RERU, R_MEIREI2, +(0<<5) + 1, _RU, L_RERU, R_SHUUSI, +(0<<5) + 1, _RE, L_RERU, R_KATEI2, +(0<<5) + 1, _RO, L_RERU, R_MEIREI1, +0xff +}; + +static u_char fzk_wa[] = { +(0<<5) + 0, L_WA, R_SHUUJO, +(0<<5) + 1, _KE, L_WAKE, R_WAKE, +(0<<5) + 1, _NE, L_WANE, R_SHUUJO, +(0<<5) + 1, _YO, L_WAYO, R_SHUUJO, +0xff +}; + +static u_char fzk_nn[] = { +(0<<5) + 0, L_NN1, R_NN1, +(0<<5) + 0, L_NN2, R_NN2, +0xff +}; + + + +u_char *fzkadr[] = { + 0, fzk_a, 0, fzk_i, 0, + fzk_u, 0, fzk_e, 0, fzk_o, + fzk_ka, fzk_ga, fzk_ki, 0, fzk_ku, + fzk_gu, fzk_ke, 0, fzk_ko, fzk_go, + fzk_sa, fzk_za, fzk_si, fzk_ji, fzk_su, + fzk_zu, fzk_se, fzk_ze, fzk_so, fzk_zo, + fzk_ta, fzk_da, fzk_ti, fzk_di, fzk_xtu, + fzk_tu, 0, fzk_te, fzk_de, fzk_to, + fzk_do, fzk_na, fzk_ni, fzk_nu, fzk_ne, + fzk_no, fzk_ha, fzk_ba, 0, 0, + 0, 0, fzk_hu, 0, 0, + fzk_he, fzk_be, 0, fzk_ho, 0, + 0, fzk_ma, fzk_mi, 0, 0, + fzk_mo, 0, fzk_ya, 0, fzk_yu, + 0, fzk_yo, fzk_ra, 0, 0, + fzk_re, 0, 0, fzk_wa, 0, + 0, fzk_wo, fzk_nn +}; diff --git a/lib/sj3core/getkanji.c b/lib/sj3core/getkanji.c new file mode 100644 index 0000000..590e03e --- /dev/null +++ b/lib/sj3core/getkanji.c @@ -0,0 +1,220 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: getkanji.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:49 $ + */ + + + + +#include "sj_euc.h" +#include "sj_kcnv.h" + +#include "sj_kanakan.h" + +static u_char *code2kanji(); + +u_char * +getkan_none(u_char *s, u_char *d, u_char *ym, int yl, int flg) +{ + return d; +} + +u_char * +getkan_hira(u_char *s, u_char *d, u_char *ym, int yl, int flg) +{ + int cnt, csize; + + csize = codesize(*s); + + cnt = (*s & KANJICODEMASK) + 1; + + if (flg && (s[csize] == KANJISTREND)) ym += (yl - cnt) * 2; + + cnt *= 2; + while (cnt-- > 0) *d++ = *ym++; + + return d; +} + +u_char * +getkan_kata(u_char *s, u_char *d, u_char *ym, int yl, int flg) +{ + int cnt, csize; + u_char ch; + + csize = codesize(*s); + + cnt = (*s & KANJICODEMASK) + 1; + + if (flg && (s[csize] == KANJISTREND)) ym += (yl - cnt) * 2; + + while (cnt-- > 0) { + if (*ym == 0xa4) { + ch = *++ym; + if (0xa1 <= ch && ch <= 0xf3) { + *d++ = 0xa5; + } + else { + *d++ = 0xa4; + } + *d++ = ch; + ym++; + } + else { + *d++ = *ym++; + *d++ = *ym++; + } + } + + return d; +} + +u_char * +getkan_knj(u_char *s, u_char *d, u_char *ym, int yl, int flg) +{ + return code2kanji(askknj[*s & KNJASSYUKUMASK], d, ym, yl, flg); +} + + + +u_char * +getkan_ofs(u_char *s, u_char *d, u_char *ym, int yl, int flg) +{ + return code2kanji(dicbuf + ((*s & KANJICODEMASK) << 8) + *(s + 1), + d, ym, yl, flg); +} + +u_char * +getkan_norm(u_char *s, u_char *d, u_char *ym, int yl, int flg) +{ + u_char c; + + if (*s != 0) { + c = s[1]; + if (c & 0x80) + *d++ = SS3; + *d++ = *s | 0x80; + *d++ = c | 0x80; + } else { + *d++ = *s; + } + return d; +} + +u_char * +getkan_ascii(u_char *s, u_char *d, u_char *ym, int yl, int flg) +{ + u_char c; + + c = s[1]; + if (c & 0x80) + *d++ = SS2; + *d++ = c; + + return d; +} + +static u_char * +code2kanji(u_char *s, u_char *d, u_char *ym, int yl, int flg) +{ + int csize; + + for ( ; ; ) { + csize = codesize(*s); + if (s[csize] == KANJISTREND) { + switch(*s & KANJIMODEMASK) { + case ZENHIRAASSYUKU: + d = getkan_hira(s, d, ym, yl, flg); break; + + case ZENKATAASSYUKU: + d = getkan_kata(s, d, ym, yl, flg); break; + + case OFFSETASSYUKU: + d = getkan_ofs(s, d, ym, yl, flg); break; + + case AIATTRIBUTE: + d = getkan_none(s, d, ym, yl, flg); break; + + case LEADINGHANKAKU: + d = getkan_ascii(s, d, ym, yl, flg); break; + + case KANJIASSYUKU: + d = getkan_knj(s, d, ym, yl, flg); break; + + default: + d = getkan_norm(s, d, ym, yl, flg); + } + break; + } + else + switch(*s & KANJIMODEMASK) { + case ZENHIRAASSYUKU: + d = getkan_hira(s, d, ym, yl, FALSE); break; + + case ZENKATAASSYUKU: + d = getkan_kata(s, d, ym, yl, FALSE); break; + + case OFFSETASSYUKU: + d = getkan_ofs(s, d, ym, yl, FALSE); break; + + case AIATTRIBUTE: + d = getkan_none(s, d, ym, yl, FALSE); break; + + case LEADINGHANKAKU: + d = getkan_ascii(s, d, ym, yl, FALSE); break; + + case KANJIASSYUKU: + d = getkan_knj(s, d, ym, yl, FALSE); break; + + default: + d = getkan_norm(s, d, ym, yl, FALSE); + } + + s += codesize(*s); + } + + return d; +} + + + +int +getkanji(u_char *ym, int yl, u_char *ptr, u_char *buf) +{ + u_char *q; + + q = code2kanji(ptr, buf, ym, yl, TRUE); + + return q - buf; +} + diff --git a/lib/sj3core/getrank.c b/lib/sj3core/getrank.c new file mode 100644 index 0000000..e4ae9b8 --- /dev/null +++ b/lib/sj3core/getrank.c @@ -0,0 +1,191 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: getrank.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:50 $ + */ + + + + + +#include "sj_kcnv.h" + +#include "sj_kanakan.h" + +static void setstynum(), setnspr(), regetrank(); + +void +getrank() +{ + + trank = nrank = 1; + + + setstynum(); + + + regetrank(); +} + + + +static void +setstynum() +{ + KHREC *kptr; + STDYIN *sptr; + int count; + + + for (kptr = kouhotbl, count = khcount ; count-- ; kptr++) { + + sptr = srchstdy(kptr -> clrec -> jnode -> jseg, kptr -> offs, + kptr -> clrec -> jnode -> dicid); + + + if (!sptr) continue; + + + setnspr(kptr, sptr); + } +} + + + +static void +setnspr(KHREC *kptr, STDYIN *sptr) +{ + KHREC *ptr; + int keepnm; + TypeStyNum styno; + + + styno = kptr -> styno = sptr -> styno; + + + keepnm = trank; + + + for (ptr = kouhotbl ; ptr < kptr ; ptr++) { + + + if (styno < ptr -> styno) { + + ptr -> rank++; + + + keepnm--; + } + + + else if (styno == ptr -> styno) { + + + if (kptr -> sttfg && kptr -> ka_fg) { + + + if ((sptr -> sttkj == kptr -> sttkj) && + (sptr -> ka_kj == kptr -> ka_kj)) { + ptr -> rank++; + keepnm--; + } + } + + else if (kptr -> sttfg) { + + + if (sptr -> sttkj == kptr -> sttkj) { + ptr -> rank++; + keepnm--; + } + } + + else if (kptr -> ka_fg) { + + + if (sptr -> ka_kj == kptr -> ka_kj) { + ptr -> rank++; + keepnm--; + } + } + } + } + + + kptr -> rank = (u_char)keepnm; + trank++; + + + if (keepnm <= nrank) nrank++; + + + if (sptr -> nmflg && (nrank > keepnm)) nrank = keepnm; +} + + + +static void +regetrank() +{ + KHREC *kptr; + int count; + int tmp; + + + if (nrank < trank) { + + tmp = nrank; + + + trank += nkhcount; + } + + else { + nkhcount = tmp = 0; + } + + + for (count = khcount, kptr = kouhotbl ; count-- ; kptr++) { + + if (!(kptr -> rank)) { + if (tmp && kptr -> mode && !(kptr -> offs)) { + kptr -> rank = (u_char)tmp++; + } + else + kptr -> rank = (u_char)trank++; + } + + + else if ((short)kptr -> rank >= nrank) + kptr -> rank += (u_char)nkhcount; + } +} diff --git a/lib/sj3core/global.c b/lib/sj3core/global.c new file mode 100644 index 0000000..112c389 --- /dev/null +++ b/lib/sj3core/global.c @@ -0,0 +1,58 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: global.c,v $ + * $SonyRevision: 1.2 $ + * $SonyDate: 1994/12/09 11:27:06 $ + */ + + + +#include +#include +#include "sj_rename.h" +#include "sj_typedef.h" +#include "sj_const.h" +#include "sj_var.h" +#include "sj_struct.h" +#include "sj_dict.h" +#include "Const.h" +#include "Struct.h" + +#include "sj_kanakan.h" + +Global *global_work_base; + +Global *work_base; + +STDY *stdy_base; + +int serv_errno; + diff --git a/lib/sj3core/hzstrlen.c b/lib/sj3core/hzstrlen.c new file mode 100644 index 0000000..e954ced --- /dev/null +++ b/lib/sj3core/hzstrlen.c @@ -0,0 +1,68 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: hzstrlen.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:52 $ + */ + +#include "sj_euc.h" +#include "sj_rename.h" +#include "sj_typedef.h" +#include "sj_const.h" +#include "sj_dict.h" + +#include "sj_kanakan.h" + +int +euc_codesize(u_char c) +{ + if ((c & KANJIMODEMASK) == 0x90) { + return 1; + } else if (isknj1(c)) { + return 2; + } else if (c == SS3) { + return 3; + } else { + return 1; + } +} + +int +hzstrlen(u_char *ptr, int len) +{ + u_char *head; + + head = ptr; + + while (len-- > 0) ptr += euc_codesize(*ptr); + + return (ptr - head); +} diff --git a/lib/sj3core/init.c b/lib/sj3core/init.c new file mode 100644 index 0000000..a4d6963 --- /dev/null +++ b/lib/sj3core/init.c @@ -0,0 +1,89 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: init.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:54 $ + */ + + + +#include "sj_kcnv.h" + +#include "sj_kanakan.h" + +void +seg_count(DICT *dict) +{ + u_char *p; + u_char *q; + TypeDicSeg segcnt = 0; + + if (dict-> getidx) { + (*dict->getidx)(dict); + + p = idxbuf; + q = p + dict->idxlen; + while (p < q && *p) { + segcnt++; + while (*p++) ; + } + } + + dict->segunit = (segcnt == 0) ? 1 : segcnt; +} + +void +mkidxtbl(DICT *dict) +{ + u_char *p; + TypeDicSeg seg; + + if (!dict->getidx || !dict->getofs) return; + + seg = 0; + + (*dict->getidx)(dict); + (*dict->getofs)(dict); + + idxofs[0] = 0; + for (p = idxbuf ; p < idxbuf + dict->idxlen && seg < dict->segunit ; ) { + idxofs[seg++] = p - idxbuf; + while (*p++) ; + } +} + +void +initwork() +{ + jrt1st = jrt2nd = maxjptr = (JREC *)0; + clt1st = clt2nd = maxclptr = (CLREC *)0; +} + diff --git a/lib/sj3core/istrcmp.c b/lib/sj3core/istrcmp.c new file mode 100644 index 0000000..4806412 --- /dev/null +++ b/lib/sj3core/istrcmp.c @@ -0,0 +1,63 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: istrcmp.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:55 $ + */ + + + +#include "sj_rename.h" +#include "sj_typedef.h" +#include "sj_const.h" + +#include "sj_kanakan.h" + +int +istrcmp(u_char *yomip, u_char *idxp, int ylen, int ilen) +{ + for (;;) { + + if ((ilen | ylen) == 0) return MATCH; + + if (ilen == 0) return UNDER; + + if ((ylen == 0) || (*yomip < *idxp)) return OVER; + + if (*yomip > *idxp) return UNDER; + + yomip++; + idxp++; + ylen--; + ilen--; + } +} + diff --git a/lib/sj3core/memory.c b/lib/sj3core/memory.c new file mode 100644 index 0000000..e92d9aa --- /dev/null +++ b/lib/sj3core/memory.c @@ -0,0 +1,150 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: memory.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:01:58 $ + */ + + + +#include "sj_kcnv.h" + +#include "sj_kanakan.h" + +JREC * +free_jlst(JREC *p) +{ + JREC *jpk; + JREC *jp; + JREC *jn; + + jp = NULL; + + for ( ; p ; p = jn) { + + jn = p -> jsort; + + if (p -> count) { + if (jp) + jp -> jsort = p; + else + jpk = p; + jp = p; + } + + else { + free_jrec(p); + } + } + + if (jp) jp -> jsort = NULL; + + return jpk; +} + +CLREC * +free_clst(CLREC *p, int l) +{ + CLREC *cpk; + CLREC *cp; + CLREC *cn; + + cp = cpk = NULL; + + for ( ; p ; p = cn) { + + cn = p -> clsort; + + if ((int)p -> cllen == l) { + if (p == selcl) { + if (cp) { + p -> clsort = cpk; + cpk = p; + } + else + cpk = cp = p; + } + else { + if (cp) + cp -> clsort = p; + else + cpk = p; + cp = p; + } + } + + else { + (p -> jnode -> count)--; + + free_clrec(p); + } + } + + if (cp) cp -> clsort = NULL; + + return cpk; +} + +void +free_clall(CLREC *p) +{ + CLREC *next; + + while (p) { + (p -> jnode -> count)--; + next = p -> clsort; + free_clrec(p); + p = next; + } +} + +void +free_jall(JREC *p) +{ + JREC *next; + + while (p) { + next = p -> jsort; + free_jrec(p); + p = next; + } +} + +void +freework() +{ + free_clall(maxclptr); + clt1st = maxclptr = NULL; + + free_jall(maxjptr); + jrt1st = maxjptr = NULL; +} + diff --git a/lib/sj3core/mk2claus.c b/lib/sj3core/mk2claus.c new file mode 100644 index 0000000..fbafc3d --- /dev/null +++ b/lib/sj3core/mk2claus.c @@ -0,0 +1,162 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: mk2claus.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:00 $ + */ + + + +#include "sj_kcnv.h" +#include "sj_right.h" + +#include "sj_kanakan.h" + +static int +set2nd(CLREC *clrec) +{ + + CLREC *rec2; + + mkjiritu(DO_IKKATU | DO_CLSTUDY); + + mkbunsetu(); + + if (!maxclptr) { + wakachi(); + return clrec -> cllen; + } + + for (rec2 = maxclptr ; rec2 ; rec2 = rec2 -> clsort) { + if (terminate(rec2->right, cnvstart+rec2->cllen) != SHU) + break; + } + + return rec2 ? (clrec -> cllen + rec2 -> cllen) : (clrec -> cllen); +} + +void +mk2claus() +{ + u_char *keepptr; + int keeplen; + CLREC *clrec; + int len; + int save2ln; + int prty; + int maxprty; + int count; + int prty2; + + prty = maxprty = prty2 = 0; + + clt2nd = maxclptr = NULL; + jrt2nd = maxjptr = NULL; + + selcl = clt1st; + + if (selcl -> right == R_FZKKGU) { + pritiny(); + return; + } + + if (cnvlen == selcl -> cllen) { + pritiny(); + return; + } + + keepptr = cnvstart; + keeplen = cnvlen; + + len = count = 0; + for (clrec = selcl ; clrec && count < 5 ; clrec = clrec -> clsort) { + + cnvstart = keepptr + clrec -> cllen; + cnvlen = keeplen - clrec -> cllen; + + if (len != clrec -> cllen) { + if (clt2nd != maxclptr) { + free_clall(maxclptr); + free_jall(maxjptr); + } + + save2ln = set2nd(clrec); + + count++; + len = clrec -> cllen; + prty2 = 0; + } + + if (Termtbl[clrec -> right] & T_SHUUJO) + clrec -> cl2len = (u_char)len; + else + clrec -> cl2len = (u_char)save2ln; + + if (selcl -> cl2len > clrec -> cl2len) continue; + + prty = priority(clrec) - prty2; + + prty2++; + + if (selcl -> cl2len == clrec -> cl2len) { + if (clrec -> cllen == nextcllen) { + if (selcl -> cllen != nextcllen) + ; + else if (prty <= maxprty) + continue; + } + + else if (prty <= maxprty) + continue; + } + + selcl = clrec; + maxprty = prty; + + if (clt2nd == maxclptr) continue; + + free_clall(clt2nd); + free_jall(jrt2nd); + jrt2nd = maxjptr; + clt2nd = maxclptr; + } + + if (clt2nd != maxclptr) { + free_clall(maxclptr); + maxclptr = NULL; + free_jall(maxjptr); + maxjptr = NULL; + } + + cnvstart = keepptr; + cnvlen = keeplen; +} + diff --git a/lib/sj3core/mkbunset.c b/lib/sj3core/mkbunset.c new file mode 100644 index 0000000..b8e5b1a --- /dev/null +++ b/lib/sj3core/mkbunset.c @@ -0,0 +1,166 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: mkbunset.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:02 $ + */ + + + +#include "sj_kcnv.h" +#include "sj_hinsi.h" + +#include "sj_kanakan.h" + +void +mkbunsetu() +{ + JREC *jrec; + TypeGram hinsi; + u_char *cnj; + CREC crec[4]; + int count; + TypeCnct right; + u_char *next; + int i; + + fzkcount = 0; + + maxclptr = NULL; + + jrec = maxjptr; + + while (jrec) { + + if (jrec -> stbofs && (cnj = getstb(jrec -> hinsi))) + hinsi = StbHinsi(cnj + jrec -> stbofs - 1); + else + hinsi = jrec -> hinsi; + + if (right = Connadr[hinsi]) { + gobilen = 0; + next = cnvstart + jrec->jlen; + + if (terminate(right, next)) { + fzk_ka_flg = 0; + setclrec(jrec, next, right); + } + + srchfzk(jrec, next, right, 0); + } + + else if (count = setconj(hinsi, jrec, crec)) { + + for (i = count ; i-- > 0 ; ) { + + right = crec[i].right; + gobilen = crec[i].len; + next = cnvstart + jrec->jlen + gobilen; + + if (terminate(right, next)) { + fzk_ka_flg = 0; + setclrec(jrec, next, right); + } + + srchfzk(jrec, next, right, 0); + } + } + + jrec = jrec -> jsort; + } +} + + +CLREC * +argclrec(int len) +{ + CLREC *ptr; + CLREC *rec; + CLREC *child; + + rec = alloc_clrec(); + + if (!rec) { + if (!maxclptr) + return NULL; + + ptr = NULL; + rec = maxclptr; + while (child = rec -> clsort) { + ptr = rec; + rec = child; + } + + if (len <= (int) rec -> cllen) + return NULL; + + if (ptr) + ptr -> clsort = NULL; + else + maxclptr = NULL; + if (rec -> jnode) (rec -> jnode)--; + } + + memset((u_char *)rec, 0, sizeof(*rec)); + rec -> cllen = rec -> cl2len = (u_char)len; + + if (!maxclptr) { + maxclptr = rec; + return rec; + } + + ptr = maxclptr; + + if (((int)ptr -> cllen < len) || + (((int)ptr -> cllen == len) && + (ptr -> jnode -> hinsi == TANKANJI))) { + rec -> clsort = maxclptr; + maxclptr = rec; + return rec; + } + + while (child = ptr -> clsort) { + if ((int)child -> cllen < len || + ((int)child -> cllen == len && + child->jnode->hinsi == TANKANJI)){ + ptr -> clsort = rec; + rec -> clsort = child; + return rec; + } + else + ptr = child; + } + + + ptr -> clsort = rec; + return rec; +} + diff --git a/lib/sj3core/mkjiritu.c b/lib/sj3core/mkjiritu.c new file mode 100644 index 0000000..2186829 --- /dev/null +++ b/lib/sj3core/mkjiritu.c @@ -0,0 +1,190 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: mkjiritu.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:03 $ + */ + + +#include +#include "sj_kcnv.h" + +#include "sj_kanakan.h" + +static void dic_mu(), dic_cl(); + +void +mkjiritu(int mode) +{ + u_char chkind1; + u_char chkind2; + JREC *jrec; + u_char *stb; + + headcode = headlen = 0; + + maxjptr = NULL; + + chkind1 = Chrtbl[*cnvstart]; + + if (chkind1 & DICTOP) { + dic_mu(mode); + } + + if (mode & DO_CLSTUDY) dic_cl(); + + srchnum(); + + if (srchhead() && cnvlen != headlen) { + cnvstart += headlen; + cnvlen -= headlen; + + chkind2 = Chrtbl[*cnvstart]; + + if (chkind2 & DICTOP) { + dic_mu(mode); + } + + if (headcode == SETTOU_DAI) { + srchnum(); + } + + cnvstart -= headlen; + cnvlen += headlen; + } + + for (jrec = maxjptr ; jrec ; jrec = jrec -> jsort) { + if (stb = getstb(jrec -> hinsi)) + setubi(jrec, stb); + } +} + +static void +dic_mu(int mode) +{ + u_char *tagp; + DICTL *dp; + + for (dp = dictlist ; dp ; dp = dp -> next) { + curdict = dp -> dict; + dicinl = 1; + dicsaml = 0; + prevseg = -1; + + while (tagp = srchdict(tagp)) setjrec(tagp, mode); + } +} + +JREC * +argjrec(int len, JREC *rec) +{ + JREC *ptr; + JREC *jrec; + JREC *child; + + jrec = alloc_jrec(); + + if (!jrec) { + if (!maxjptr) return NULL; + + ptr = NULL; + jrec = maxjptr; + while (child = jrec -> jsort) { + ptr = jrec; + jrec = child; + } + + if (len <= (int) jrec -> jlen) return NULL; + + if (ptr) + ptr -> jsort = NULL; + else + maxjptr = NULL; + } + + if (rec) + memcpy((u_char *)jrec, (u_char *)rec, sizeof(JREC)); + else + memset((u_char *)jrec, 0, sizeof(*jrec)); + jrec -> jlen = (u_char)len; + + if (!maxjptr) { + maxjptr = jrec; + jrec -> jsort = NULL; + return jrec; + } + + ptr = maxjptr; + + if ((int)ptr -> jlen < len) { + jrec -> jsort = maxjptr; + maxjptr = jrec; + return jrec; + } + + while (child = ptr -> jsort) { + if ((int)child -> jlen < len) break; + + ptr = child; + } + + ptr -> jsort = jrec; + jrec -> jsort = child; + return jrec; +} + +static void +dic_cl() +{ + u_char *p; + u_short pos; + int len; + int cmp; + + if (!StudyExist()) return; + + if ((pos = CLSTUDYIDX[(short) *cnvstart / CLSTUDYSTEP]) != (u_short)-1) { + + for (p = CLSTUDYDICT + pos ; !iseocl(p) ; p = ClNextTag(p)) { + cmp = sstrncmp(cnvstart, (u_char *)ClYomiPos(p), + len = ClYomiLen(p)); + + if (cmp == MATCH) { + if (!isdpnd(*(cnvstart + len))) { + setcrec(p); + } + } + + else if (cmp == OVER) + break; + } + } +} diff --git a/lib/sj3core/mkkouho.c b/lib/sj3core/mkkouho.c new file mode 100644 index 0000000..f588d2a --- /dev/null +++ b/lib/sj3core/mkkouho.c @@ -0,0 +1,467 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: mkkouho.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:04 $ + */ + + + + +#include "sj_euc.h" +#include "sj_kcnv.h" +#include "sj_hinsi.h" +#include "sj_suuji.h" +#include "sj_dict.h" + +#include "sj_kanakan.h" + +static void getkhtbl(), cl_kanji(); +static int diffknj(); +static void cl_numcmn(); +static u_char *makekan(); + +void +mkkouho() +{ + CLREC *clrec; + int keeplen; + + khcount = nkhcount = 0; + + keeplen = clt1st -> cllen; + + clrec = clt1st; + + do { + getkhtbl(clrec); + clrec = clrec -> clsort; + } while (clrec && (keeplen == clrec -> cllen)); +} + + + +static void +getkhtbl(CLREC *clrec) +{ + JREC *jrec; + + jrec = clrec -> jnode; + + switch (jrec -> class) { + case C_DICT: + cl_kanji(jrec, clrec); + break; + case C_N_ARABIA: + case C_N_ARACMA: + case C_N_KAZU: + case C_N_SUUJI: + case C_N_NANSUU: + case C_N_KANKURA: + case C_N_ARAKURA: + case C_N_KAZULONG: + case C_N_KAZULCMA: + case C_N_SUUJILONG: + cl_numcmn(jrec, clrec); + break; + case C_BUNSETU: + break; + case C_MINASI: + case C_WAKACHI: + setkouho(clrec, (TypeDicOfs)0, 0); + break; + } +} + + + +static void +cl_kanji(JREC *jrec, CLREC *clrec) +{ + u_char *ptr; + int kcount = khcount; + + if (seldict(jrec -> dicid)) { + (*curdict->getdic)(curdict, jrec -> jseg); + ptr = dicbuf + jrec->jofsst + 1; + + get_askknj(); + + while (*ptr != HINSIBLKTERM) { + if (diffknj(jrec, ptr, kcount)) { + setkouho(clrec, (TypeDicOfs)(ptr - dicbuf), 0); + } + ptr = skipkstr(ptr); + } + } + else { + setkouho(clrec, (TypeDicOfs)1, 0); + } +} + + + +u_char * +makekan_none(u_char *s, u_char *d, int flg) +{ + return d; +} + + + +u_char * +makekan_1byte(u_char *s, u_char *d, int flg) +{ + if ((*s & KANJIMODEMASK) == ZENHIRAASSYUKU) + *d++ = 0x10 | (*s & KNJASSYUKUMASK); + else + *d++ = 0x90 | (*s & KNJASSYUKUMASK); + + if (flg) *d++ = KANJISTREND; + return d; +} + + + +u_char * +makekan_knj(u_char *s, u_char *d, int flg) +{ + return makekan(askknj[*s & KNJASSYUKUMASK], d, flg); +} + + + +u_char *makekan_ofs(u_char *s, u_char *d, int flg) +{ + return makekan(dicbuf + ((*s & KANJICODEMASK) << 8) + *(s + 1), + d, flg); +} + + + +u_char * +makekan_norm(u_char *s, u_char *d, int flg) +{ + u_char c; + + if (*s != 0) { + c = s[1]; + if (c & 0x80) + *d++ = SS3; + *d++ = *s | 0x80; + *d++ = c | 0x80; + } else { + *d++ = *s; + } + if (flg) *d++ = KANJISTREND; + return d; +} + + + +u_char * +makekan_ascii(u_char *s, u_char *d, int flg) +{ + u_char c; + + c = s[1]; + if (c & 0x80) + *d++ = SS2; + *d++ = c; + + if (flg) *d++ = KANJISTREND; + + return d; +} + + + +static u_char * +makekan(u_char *s, u_char *d, int flg) +{ + int csize; + + for ( ; ; ) { + csize = codesize(*s); + if (s[csize] == KANJISTREND) { + switch(*s & KANJIMODEMASK) { + case ZENHIRAASSYUKU: + d = makekan_1byte(s, d, flg); break; + + case ZENKATAASSYUKU: + d = makekan_1byte(s, d, flg); break; + + case OFFSETASSYUKU: + d = makekan_ofs(s, d, flg); break; + + case AIATTRIBUTE: + d = makekan_none(s, d, flg); break; + + case LEADINGHANKAKU: + d = makekan_ascii(s, d, flg); break; + + case KANJIASSYUKU: + d = makekan_knj(s, d, flg); break; + + default: + d = makekan_norm(s, d, flg); + } + break; + } + else + switch(*s & KANJIMODEMASK) { + case ZENHIRAASSYUKU: + d = makekan_1byte(s, d, FALSE); break; + + case ZENKATAASSYUKU: + d = makekan_1byte(s, d, FALSE); break; + + case OFFSETASSYUKU: + d = makekan_ofs(s, d, FALSE); break; + + case AIATTRIBUTE: + d = makekan_none(s, d, FALSE); break; + + case LEADINGHANKAKU: + d = makekan_ascii(s, d, FALSE); break; + + case KANJIASSYUKU: + d = makekan_knj(s, d, FALSE); break; + + default: + d = makekan_norm(s, d, FALSE); + } + s += codesize(*s); + } + + return d; +} + + + +#define PEND 2 +#define QEND 1 +static int +sameknj(u_char *p, u_char plen, u_char *q, u_char qlen) +{ + int i; + int j; + int endf = 0; + int brkf; + + do { + if ((i = euc_codesize(*p)) != euc_codesize(*q)) return FALSE; + + brkf = 0; + for (j = 0; j < i; j++) { + if (p[j] != q[j] ) { + brkf = 1; + break; + } + } + if (brkf) break; + + if (p[i] == KANJISTREND) endf += PEND; + if (q[i] == KANJISTREND) endf += QEND; + + p += i; + q += i; + } while (!endf); + + switch (endf) { + case (PEND | QEND): + if (plen == qlen) return TRUE; + break; + + case PEND: + i = plen; + plen = qlen; + qlen = i; + p = q; + + case QEND: + if (p[euc_codesize(*p)] != KANJISTREND) break; + if ((*p & KANJIMODEMASK) != 0x10 ) break; + if (qlen != plen - (*p & KANJICODEMASK) - 1) break; + return TRUE; + + default: + if (q[euc_codesize(*q)] != KANJISTREND) break; + if (p[euc_codesize(*p)] != KANJISTREND) break; + if ((*q & KANJIMODEMASK) != 0x10 ) break; + if ((*p & KANJIMODEMASK) != 0x10 ) break; + if (plen - (*p & KANJICODEMASK) != qlen - (*q & KANJICODEMASK)) + break; + return TRUE; + } + + return FALSE; +} +#undef PEND +#undef QEND + + + +static int +diffknj(JREC *jrec, u_char *ptr, int num) +{ + KHREC *kptr; + JREC *jptr; + int i; + u_char kbuf1[MAXWDKANJILEN]; + u_char kbuf2[MAXWDKANJILEN]; + + if (jrec -> hinsi == TANKANJI) return TRUE; + + makekan(ptr, kbuf1, TRUE); + + for (i = 0, kptr = kouhotbl ; i < num ; i++, kptr++) { + if ((jptr = kptr -> clrec -> jnode) == jrec) + return FALSE; + + if (jptr -> hinsi == TANKANJI) continue; + + if (jptr -> class != jrec -> class) continue; + + if (jptr -> dicid != jrec -> dicid) continue; + + if (jptr -> jseg != jrec -> jseg) continue; + + if (jptr -> sttofs != jrec -> sttofs) continue; + + if (jptr -> stbofs != jrec -> stbofs) continue; + + makekan(dicbuf + kptr -> offs, kbuf2, TRUE); + + if (sameknj(kbuf1, jrec -> jlen, kbuf2, jptr -> jlen)) + return FALSE; + } + + return TRUE; +} + + + + +static int +chrck_numtbl(u_short flg, u_short cond) +{ + u_short must; + + if (cond = SelNumCond(cond)) { + if (must = (cond & SELNUMMUST)) { + if ((flg & must) != must) return FALSE; + cond &= ~must; + } + if (cond && !(cond & flg)) return FALSE; + } + + return TRUE; +} + + + +int +sel_sjmode(JREC *jrec) +{ + u_short i; + u_short *p; + u_short *q; + + switch (jrec -> class) { + case C_N_ARABIA: + case C_N_ARACMA: + case C_N_KAZU: + case C_N_SUUJI: + case C_N_NANSUU: + case C_N_KANKURA: + case C_N_ARAKURA: + case C_N_KAZULONG: + case C_N_KAZULCMA: + case C_N_SUUJILONG: + p = q = Selsjadrs(jrec->class - C_N_ARABIA); + break; + + default: + return SELARB; + } + + while ((i = *p++) != SELNUMTERM) { + if (chrck_numtbl(jrec -> flags, i)) break; + } + + if (i == SELNUMTERM) i = *q; + + return SelNumFunc(i); +} + + + +static void +cl_numcmn(JREC *jrec, CLREC *clrec) +{ + u_char *p; + int i; + u_short j; + u_short *tbl; + + p = cnvstart; + if ((i = jrec -> sttofs) == SETTOU_DAI) + p += SttYomiLen(Settou_ptr(i)); + else if (i == SETTOU_KIGOU) + p++; + + if (jrec -> jofsst) { + i = sel_sjmode(jrec); + + if (seldict(jrec -> dicid)) { + (*curdict->getdic)(curdict, jrec -> jseg); + + p = dicbuf + jrec->jofsst + 1; + + while (*p != HINSIBLKTERM) { + setkouho(clrec, (TypeDicOfs)(p - dicbuf), i); + p = skipkstr(p); + } + } + else { + setkouho(clrec, (TypeDicOfs)1, i); + } + } + else { + tbl = Selsjadrs(jrec->class - C_N_ARABIA); + while ((j = *tbl++) != SELNUMTERM) { + if (!chrck_numtbl(jrec -> flags, j)) continue; + + setkouho(clrec, (TypeDicOfs)0, (int)SelNumFunc(j)); + } + } +} diff --git a/lib/sj3core/mknumber.c b/lib/sj3core/mknumber.c new file mode 100644 index 0000000..677318e --- /dev/null +++ b/lib/sj3core/mknumber.c @@ -0,0 +1,376 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: mknumber.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:05 $ + */ + + + + + +#include "sj_kcnv.h" +#include "sj_yomi.h" +#include "sj_suuji.h" + +#include "sj_kanakan.h" + +static int +word2char(u_short wd, u_char *tbl, int keta, int flg) +{ + int mask; + int num; + u_char *src; + + for (mask = 0x1000 ; mask ; mask >>= 4) { + switch (num = (unsigned int)wd / mask) { + case 0: + break; + + case _NUM0: + if (!flg) break; + + default: + src = tbl + (num - _NUM0) * 2; + *kanjitmp++ = *src++; + *kanjitmp++ = *src; + flg = TRUE; + + if (keta && !(keta % 3)) { + *kanjitmp++ = COMMAHIGH; + *kanjitmp++ = COMMALOW; + } + } + if (keta) keta--; + wd &= (mask - 1); + } + + return flg; +} + +static void +words2num(u_short *wd, u_char *tbl, int flgc) +{ + int i; + int keta; + int flg; + u_char *kp = kanjitmp; + + if (flgc) { + keta = NUMKETALENGTH - 1; + flg = FALSE; + } + else { + keta = 0; + flg = TRUE; + } + + for (i = NUMWORDBUF ; i-- > 0 ; ) { + flg = word2char(*(wd + i), tbl, keta, flg); + if (keta) keta -= 4; + } + + if (kp == kanjitmp) { + *kanjitmp++ = *tbl++; + *kanjitmp++ = *tbl; + } +} + +void +num_type00(u_char *s1, u_char *s2, JREC *jrec) +{ + u_short num[NUMWORDBUF]; + + setwdnum(s1, (int)jrec -> numlen, num); + + words2num(num, Num1tbl, FALSE); +} + +void +num_type01(u_char *s1, u_char *s2, JREC *jrec) +{ + u_short num[NUMWORDBUF]; + + setwdnum(s1, (int)jrec -> numlen, num); + + words2num(num, Num1tbl, FALSE); +} + +void +num_type02(u_char *s1, u_char *s2, JREC *jrec) +{ + u_short num[NUMWORDBUF]; + + setwdnum(s1, (int)jrec -> numlen, num); + + words2num(num, Num1tbl, TRUE); +} + +void +num_type03(u_char *s1, u_char *s2, JREC *jrec) +{ + u_short num[NUMWORDBUF]; + + setwdnum(s1, (int)jrec -> numlen, num); + + words2num(num, Num2tbl, FALSE); +} + +void +num_type04(u_char *s1, u_char *s2, JREC *jrec) +{ + u_short num[NUMWORDBUF]; + + setwdnum(s1, (int)jrec -> numlen, num); + + words2num(num, Num2tbl, FALSE); +} + +void +num_type05(u_char *s1, u_char *s2, JREC *jrec) +{ + u_short num[NUMWORDBUF]; + + setwdnum(s1, (int)jrec -> numlen, num); + + words2num(num, Num2tbl, TRUE); +} + +void +num_type06(u_char *s1, u_char *s2, JREC *jrec) +{ + u_short num[NUMWORDBUF]; + + setwdnum(s1, (int)jrec -> numlen, num); + + words2num(num, Num3tbl, FALSE); +} + +void +num_type07(u_char *s1, u_char *s2, JREC *jrec) +{ + u_short num[NUMWORDBUF]; + + setwdnum(s1, (int)jrec -> numlen, num); + + words2num(num, Num3tbl, FALSE); +} + +static void +kan_num(u_short *wd, u_char *tbl1, u_char *tbl2) +{ + int ii; + u_short tmp; + int mask; + int num; + int flg; + u_char *kurai1; + u_char *kurai2; + u_char *src; + u_char *keep = kanjitmp; + + kurai2 = Num6tbl - 2; + mask = 0; + wd += NUMWORDBUF - 1; + flg = FALSE; + + for (ii = NUMKETALENGTH ; ii-- > 0 ; ) { + if (!mask) { + if (flg) { + *kanjitmp++ = *kurai2++; + *kanjitmp++ = *kurai2++; + } + else + kurai2 += 2; + + mask = 0x1000; + tmp = *wd--; + flg = FALSE; + kurai1 = tbl2; + } + + if ((num = (unsigned int)tmp / mask) > _NUM0) { + if ((num != _NUM1) || !*kurai1) { + src = tbl1 + (num - _NUM0) * 2; + *kanjitmp++ = *src++; + *kanjitmp++ = *src; + } + + if (*kurai1) { + *kanjitmp++ = *kurai1++; + *kanjitmp++ = *kurai1++; + } + flg = TRUE; + } + else + kurai1 += 2; + + tmp &= (mask - 1); + mask >>= 4; + } + + if (kanjitmp == keep) { + *kanjitmp++ = *tbl1++; + *kanjitmp++ = *tbl1; + } +} + +void +num_type08(u_char *s1, u_char *s2, JREC *jrec) +{ + u_short num[NUMWORDBUF]; + + setwdnum(s1, (int)jrec -> numlen, num); + + kan_num(num, Num2tbl, Num4tbl); +} + +void +num_type09(u_char *s1, u_char *s2, JREC *jrec) +{ + u_short num[NUMWORDBUF]; + + setwdnum(s1, (int)jrec -> numlen, num); + + kan_num(num, Num3tbl, Num5tbl); +} + + + +void +num_type10(u_char *s1, u_char *s2, JREC *jrec) +{ + int i; + + for (i = jrec -> numlen ; i > 0 ; i--) { + if (Chrtbl[*s1++] & NUMBER) { + *kanjitmp++ = *s2++; + *kanjitmp++ = *s2++; + } + else + s2 += euc_codesize(*s2); + } +} + + + +void +num_type11(u_char *s1, u_char *s2, JREC *jrec) +{ + int i; + int j; + + i = j = jrec -> numlen; + if (!(Chrtbl[*(s1 + j - 4)] & NUMBER)) j -= (j - 1) / 4; + + for ( ; i > 0 ; i--) { + if (Chrtbl[*s1++] & NUMBER) { + *kanjitmp++ = *s2++; + *kanjitmp++ = *s2++; + if (--j > 0) { + if ((j % 3) == 0) { + *kanjitmp++ = COMMAHIGH; + *kanjitmp++ = COMMALOW; + } + } + } + else + s2 += euc_codesize(*s2); + } +} + + + +void +num_type12(u_char *s1, u_char *s2, JREC *jrec) +{ + int i; + int j; + + for (i = jrec -> numlen ; i > 0 ; i--) { + if (Chrtbl[j = *s1++] & NUMBER) { + j = (j - N_0) * 2; + *kanjitmp++ = Num2tbl[j]; + *kanjitmp++ = Num2tbl[j + 1]; + } + } +} + + + +static void +num_kurai(u_char *p, int len, u_char *tbl) +{ + int i; + int j; + u_char tmp; + + for (i = 0 ; i < len ; i++) { + tmp = *p++; + + *kanjitmp++ = tbl[j = ((tmp & 0x0f) - _NUM0) * 2]; + *kanjitmp++ = tbl[j + 1]; + if (j = ((tmp >> 4) & 3)) { + *kanjitmp++ = Num4tbl[j = (3 - j) * 2]; + *kanjitmp++ = Num4tbl[j + 1]; + } + if (j = ((tmp >> 6) & 3)) { + *kanjitmp++ = Num6tbl[j = (3 - j) * 2]; + *kanjitmp++ = Num6tbl[j + 1]; + } + } +} + + + +void +num_type13(u_char *s1, u_char *s2, JREC *jrec) +{ + u_char num[NUMKETALENGTH]; + int len; + + len = setucnum(s1, (int)jrec -> numlen, num); + + num_kurai(num, len, Num1tbl); +} + + + +void +num_type14(u_char *s1, u_char *s2, JREC *jrec) +{ + u_char num[NUMKETALENGTH]; + int len; + + len = setucnum(s1, (int)jrec -> numlen, num); + + num_kurai(num, len, Num2tbl); +} diff --git a/lib/sj3core/mvmemd.c b/lib/sj3core/mvmemd.c new file mode 100644 index 0000000..1a96b29 --- /dev/null +++ b/lib/sj3core/mvmemd.c @@ -0,0 +1,48 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: mvmemd.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:05 $ + */ + + + +#include "sj_rename.h" +#include "sj_typedef.h" + +#include "sj_kanakan.h" + +void +mvmemd(u_char *src, u_char *dest, int len) +{ + while (len-- > 0) *(--dest) = *(--src); +} + diff --git a/lib/sj3core/mvmemi.c b/lib/sj3core/mvmemi.c new file mode 100644 index 0000000..89ff227 --- /dev/null +++ b/lib/sj3core/mvmemi.c @@ -0,0 +1,48 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: mvmemi.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:06 $ + */ + + + +#include "sj_rename.h" +#include "sj_typedef.h" + +#include "sj_kanakan.h" + +void +mvmemi(u_char *src, u_char *dest, int len) +{ + while (len-- > 0) *dest++ = *src++; +} + diff --git a/lib/sj3core/peepdic.c b/lib/sj3core/peepdic.c new file mode 100644 index 0000000..4d92d8c --- /dev/null +++ b/lib/sj3core/peepdic.c @@ -0,0 +1,396 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: peepdic.c,v $ + * $SonyRevision: 1.2 $ + * $SonyDate: 1995/07/21 05:22:51 $ + */ + + + + +#include "sj_kcnv.h" +#include "sj_yomi.h" + +#include "sj_kanakan.h" + +static int prev_kanji(), prev_hinsi(), prev_douon(); +static int next_kanji(), next_hinsi(), next_douon(); +static void set_kanji(), set_buf(), add_yomi(); +static void set_idxyomi(); + +static void cd2sjh_chr(u_char ch, u_char *dst); + +int +getusr(u_char *buf) +{ + int nlen; + + peepyomi[0] = peepknj[0] = peepgrm = 0; + + (*curdict->getdic)(curdict, peepidx = DICSEGBASE); + get_askknj(); + + peepdptr = segtop(); + + if (segend(peepdptr)) return 0; + + add_yomi(); + + nlen = getnlen(peepdptr); + peephptr = peepdptr + DOUONBLKSIZENUMBER + nlen; + + peepgrm = *peephptr; + + peepkptr = peephptr + 1; + + set_kanji(); + + set_buf(buf); + + return -1; +} + +int +nextusr(u_char *buf) +{ + (*curdict->getdic)(curdict, peepidx); + get_askknj(); + + if (next_kanji()) { + set_kanji(); + + set_buf(buf); + + return -1; + } + + return 0; +} + +int +prevusr(u_char *buf) +{ + (*curdict->getdic)(curdict, peepidx); + get_askknj(); + + if (prev_kanji()) { + set_kanji(); + + set_buf(buf); + + return -1; + } + + return 0; +} + +static void +set_kanji() +{ + int len; + + len = getkanji(peepyomi, getnlen(peepdptr) + getplen(peepdptr), + peepkptr, peepknj); + *(peepknj + len) = 0; +} + +static void +set_buf(u_char *buf) +{ + u_char *p; + int i, csize; + + for (p = peepyomi ; *p ; ) *buf++ = *p++; + *buf++ = 0; + + for (p = peepknj ; *p ; ) { + csize = euc_codesize(*p); + for (i = 0; i < csize; i++ ) *buf++ = *p++; + } + *buf++ = 0; + + *buf++ = peepgrm; + *buf++ = 0; +} + +static int +prev_kanji() +{ + u_char *p1; + u_char *p2; + + p1 = peephptr + 1; + if (peepkptr <= p1) return prev_hinsi(); + + p2 = peepkptr; + while (p1 < p2) { + peepkptr = p1; + p1 = skipkstr(p1); + } + + return -1; +} + +static int +prev_hinsi() +{ + u_char *p1; + u_char *p2; + int nlen; + + nlen = getnlen(peepdptr); + p1 = peepdptr + DOUONBLKSIZENUMBER + nlen; + + if (peephptr <= p1) return prev_douon(); + + p2 = peephptr; + while (p1 < p2) { + peephptr = p1; + p1 = skiphblk(p1); + } + + peepgrm = *peephptr; + + p1 = peephptr + 1; + while (*p1 != HINSIBLKTERM) { + peepkptr = p1; + + p1 = skipkstr(p1); + } + + return -1; +} + +static int +prev_douon() +{ + u_char *p1; + u_char *p2; + int nlen; + + if (peepdptr <= segtop()) { + if (peepidx <= DICSEGBASE) return 0; + + (*curdict->getdic)(curdict, --peepidx); + get_askknj(); + + set_idxyomi(); + + p1 = segtop(); + do { + peepdptr = p1; + + add_yomi(); + + p1 = getntag(p1); + } while (!segend(p1)); + } + else { + set_idxyomi(); + + p1 = segtop(); + p2 = peepdptr; + do { + peepdptr = p1; + + add_yomi(); + + p1 = getntag(p1); + } while (p1 < p2); + } + + nlen = getnlen(peepdptr); + p1 = peepdptr + DOUONBLKSIZENUMBER + nlen; + + p2 = getntag(peepdptr); + do { + peephptr = p1; + p1 = skiphblk(p1); + } while (p1 < p2); + + peepgrm = *peephptr; + + p1 = peephptr + 1; + do { + peepkptr = p1; + + p1 = skipkstr(p1); + } while (*p1 != HINSIBLKTERM); + + return -1; +} + +static int +next_kanji() +{ + u_char *p1; + + p1 = skipkstr(peepkptr); + + if (*p1 == HINSIBLKTERM) return next_hinsi(); + + peepkptr = p1; + + return -1; +} + +static int +next_hinsi() +{ + u_char *p1; + + p1 = skiphblk(peephptr); + + if (p1 >= getntag(peepdptr)) return next_douon(); + + peephptr = p1; + + peepgrm = *p1; + + peepkptr = p1 + 1; + + return -1; +} + +static int +next_douon() +{ + u_char *p1; + int nlen; + + p1 = getntag(peepdptr); + + if (segend(p1)) { + if (peepidx + 1 < curdict->segunit) { + (*curdict->getdic)(curdict, ++peepidx); + get_askknj(); + peepdptr = segtop(); + + set_idxyomi(); + } + else + return 0; + } + else { + peepdptr = p1; + } + + add_yomi(); + + nlen = getnlen(peepdptr); + peephptr = peepdptr + DOUONBLKSIZENUMBER + nlen; + + peepgrm = *peephptr; + + peepkptr = peephptr + 1; + + return -1; +} + +static void +set_idxyomi() +{ + u_char *p1, *p2; + + if (p2 = get_idxptr(peepidx)) { + p1 = peepyomi; + while (*p2) { + cd2sjh_chr(*p2++, p1); + p1 += 2; + } + *p1 = 0; + } +} + +static void +add_yomi() +{ + int nlen; + u_char *p1, *p2; + + nlen = getnlen(peepdptr); + + p1 = peepyomi + getplen(peepdptr) * 2; + + p2 = peepdptr + DOUONBLKSIZENUMBER; + + while (nlen--) { + cd2sjh_chr(*p2++, p1); + p1 += 2; + } + + *p1 = 0; +} + +static void +cd2sjh_chr(u_char ch, u_char *dst) +{ + if (ch == _TYOUON) { + *dst++ = 0xa1; + *dst++ = 0xbc; + } + else if (ch == _IGETA) { + *dst++ = 0xa1; + *dst++ = 0xf4; + } + else if (ch == _ATTO) { + *dst++ = 0xa1; + *dst++ = 0xf7; + } + else if (ch == _YUUBIN) { + *dst++ = 0xa2; + *dst++ = 0xa9; + } + else if (ch < N_0) { + } + else if (ch <= N_9) { + *dst++ = 0xa3; + *dst++ = ch + 0xa0; + } + else if (ch <= A_Z) { + *dst++ = 0xa3; + *dst++ = ch + 0xa7; + } + else if (ch <= A_z) { + *dst++ = 0xa3; + *dst++ = ch + 0xad; + } + else if (ch <= _NN) { + *dst++ = 0xa4; + *dst++ = ch + 0x53; + } + else if (ch <= _XKE) { + *dst++ = 0xa5; + *dst++ = ch + 0x53; + } + else { + } +} diff --git a/lib/sj3core/ph2knj.c b/lib/sj3core/ph2knj.c new file mode 100644 index 0000000..435b163 --- /dev/null +++ b/lib/sj3core/ph2knj.c @@ -0,0 +1,113 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: ph2knj.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:09 $ + */ + + + + + +#include "sj_kcnv.h" +#include "sj_yomi.h" + +#include "sj_kanakan.h" + +int +ph2knj(u_char *zyomi, u_char *kanji, int knjlen) +{ + u_char *ptr; + u_char *dst; + int i; + + for (ptr = zyomi, dst = hyomi, i = 0 ; *ptr ; ) { + if (i++ >= MAXPHINPUTLEN) { *kanji = 0; return 0; } + ptr += sj2cd_chr(ptr, dst++); + } + *dst = 0; + + freework(); + prevclgrm = 0; + prevclrow = 0; + + khcount = 0; + nextcllen = 0; + + inputyomi = zyomi; + cnvstart = ystart = hyomi; + cnvlen = sstrlen(hyomi); + + kanjipos = kanji; + kanjilen = knjlen; + + while (cnvlen && kanjilen) { + if (!clt1st) { + mkjiritu(DO_CLSTUDY | DO_IKKATU); + + mkbunsetu(); + + if (!maxclptr) wakachi(); + + jrt1st = maxjptr; + clt1st = maxclptr; + } + + mk2claus(); + + selclrec(); + + prevclgrm = selcl -> jnode -> hinsi; + prevclrow = selcl -> right; + + clt1st = free_clst(clt1st, (int)selcl -> cllen); + jrt1st = free_jlst(jrt1st); + + cnvstart += selcl -> cllen; + cnvlen -= selcl -> cllen; + + cvtphknj(); + + clt1st = clt2nd; + jrt1st = jrt2nd; + } + + if (!kanjilen) { + free_clall(clt1st); + free_jall (jrt1st); + } + + *kanjipos = 0; + + return(inputyomi - zyomi); +} + + diff --git a/lib/sj3core/ph_khtbl.c b/lib/sj3core/ph_khtbl.c new file mode 100644 index 0000000..fdda01d --- /dev/null +++ b/lib/sj3core/ph_khtbl.c @@ -0,0 +1,119 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: ph_khtbl.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:09 $ + */ + +#include "sj_kcnv.h" + +#include "sj_kanakan.h" + +static void +ph_setsty(CLREC *clrec) +{ + JREC *jrec; + TypeDicOfs offset; + u_char *ptr; + STDYIN *sptr; + + if (!seldict((jrec = clrec -> jnode) -> dicid)) { + if (!khcount) + ph_setkouho(clrec, (TypeDicOfs)1, (STDYIN *)NULL); + return; + } + + (*curdict->getdic)(curdict, jrec -> jseg); + ptr = dicbuf + jrec->jofsst + 1; + + for ( ; *ptr != HINSIBLKTERM ; ptr = skipkstr(ptr)) { + + offset = ptr - dicbuf; + + sptr = srchstdy(jrec -> jseg, offset, jrec -> dicid); + + if (!khcount){ + ph_setkouho(clrec, offset, sptr); + continue; + } + + if (!sptr) continue; + + if (sptr -> styno < kouhotbl[0].styno) { + ph_setkouho(clrec, offset, sptr); + } + + else if (sptr -> styno == kouhotbl -> styno) { + if (!(kouhotbl[0].ka_fg && + sptr -> ka_kj == kouhotbl[0].ka_kj)) { + ph_setkouho(clrec, offset, sptr); + } + } + } +} + +int +ph_khtbl(CLREC *clrec) +{ + JREC *jrec; + int flg = FALSE; + + switch((jrec = clrec -> jnode) -> class) { + case C_DICT: + ph_setsty(clrec); + break; + + case C_N_ARABIA: + case C_N_ARACMA: + case C_N_KAZU: + case C_N_SUUJI: + case C_N_NANSUU: + case C_N_KANKURA: + case C_N_ARAKURA: + case C_N_KAZULONG: + case C_N_KAZULCMA: + case C_N_SUUJILONG: + if (jrec -> jofsst) { + ph_setsty(clrec); + break; + } + else + flg = TRUE; + case C_BUNSETU: + case C_MINASI: + case C_WAKACHI: + if (!khcount) ph_setkouho(clrec, (TypeDicOfs)0, (STDYIN *)0); + break; + } + + return flg; +} + diff --git a/lib/sj3core/priority.c b/lib/sj3core/priority.c new file mode 100644 index 0000000..68b8b3e --- /dev/null +++ b/lib/sj3core/priority.c @@ -0,0 +1,291 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: priority.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:10 $ + */ + + + +#include "sj_kcnv.h" +#include "sj_hinsi.h" +#include "sj_right.h" +#include "sj_prty.h" + +#include "sj_kanakan.h" + +static int +isfukusi(TypeGram hinsi) +{ + if (FUKUSI_1 <= hinsi && hinsi <= FUKUSI_7) + return TRUE; + else if (hinsi == MEISI_11 || hinsi == D_MEISI_6) + return TRUE; + return FALSE; +} + +static int +istaigen(TypeCnct right) +{ + if (right == R_MEISI || right == R_DMEISI || right == R_SMEISI1) + return TRUE; + if (right == R_WO_MEISI || right == R_DAIMEISI || right == R_JOSUUSI) + return TRUE; + if (right == R_RENYOU1 || (R_RENYOU3 <= right && right <= R_SA5RENYOU4)) + return TRUE; + return FALSE; +} + +static int +taicnt(TypeGram hinsi1, TypeGram hinsi2) +{ + if (hinsi2 == TANKANJI) return 0; + + if (MYOUJI <= hinsi1 && hinsi1 <= KEN_KU) { + if (MEISI_1 <= hinsi2 && hinsi2 <= SETUBI_9) + return Taipri(hinsi1 - MYOUJI, hinsi2); + else + return 3; + } + else if ((MEISI_1 <= hinsi1 && hinsi1 <= MEISI_11) || + hinsi1 == D_MEISI_2) { + if (MEISI_1 <= hinsi2 && hinsi2 <= SETUBI_9) { + return Taipri(5, hinsi2); + } + else + return 5; + } + + else { + if (MEISI_1 <= hinsi2 && hinsi2 <= SETUBI_9) + return Taipri(6, hinsi2); + else + return 4; + } +} + +static int +sttcnt(TypeGram hinsi1, TypeGram hinsi2) +{ + if (SETTOU_1 <= hinsi1 && hinsi1 <= SETTOU_5) { + if (MEISI_1 <= hinsi2 && hinsi2 <= SUUSI) + return Sttpri(hinsi1 - SETTOU_1, hinsi2); + } + return 4; +} + +int +priority(CLREC *clrec) +{ + int prty; + CLREC *cl2rec; + int keeplen; + TypeGram hinsi1; + int i; + int prev = 0; + + if (clrec->cllen == clrec->cl2len) return 0xff; + + if (clrec->jnode->class == C_BUNSETU) { + prty = Termtbl[clrec->right] & GETPRI; + return(0xf0 + prty); + } + + + hinsi1 = clrec->jnode->hinsi; + + if (prevclrow == R_WO || prevclrow == R_WO_S || + prevclrow == R_NI1 || prevclrow == R_DRENYOU2) { + if (clrec -> kubun == K_DOUSHI || isfukusi(hinsi1)) + prev = 5; + } + + else if (istaigen(prevclrow)) { + + if (clrec -> kubun == K_TAIGEN) + prev = taicnt(prevclgrm, hinsi1); + + else + prev = 0; + } + + else if (prevclrow == R_SETTOU) { + if (clrec -> jnode -> sttofs) + prty = 2; + else + prty = sttcnt(prevclgrm, hinsi1); + } + + + if (hinsi1 >= SETUBI_1 && hinsi1 <= SETUBI_9 && (!prev)) { + prty = 1; + goto finish; + } + + cl2rec = maxclptr; + keeplen = cl2rec -> cllen; + + if (clrec->right == R_WO || clrec->right == R_WO_S || + clrec->right == R_NI1 || clrec->right == R_DRENYOU2) { + while (cl2rec && (int)cl2rec->cllen == keeplen) { + if (cl2rec->kubun == K_DOUSHI) { + prty = 14; + goto finish; + } + cl2rec = cl2rec->clsort; + } + } + + else if (clrec->right == R_SETTOU) { + prty = 0; + while (cl2rec && (int)cl2rec -> cllen == keeplen) { + if (cl2rec -> jnode -> sttofs ) + i = 2; + else + i = sttcnt(hinsi1, cl2rec->jnode->hinsi); + + if (i > prty) + prty = i; + cl2rec = cl2rec -> clsort; + } + goto finish; + } + + else if (istaigen(clrec->right)) { + prty = 0; + while (cl2rec && (int)cl2rec->cllen == keeplen) { + i = taicnt(hinsi1, cl2rec->jnode->hinsi); + if (i > prty) + prty = i; + cl2rec = cl2rec->clsort; + } + if (clrec->jnode->stbofs) { + prty -= 3; + } + goto finish; + } + + + prty = Termtbl[clrec->right]; + + + if (prty & RENTAI) { + while (cl2rec && (int)cl2rec->cllen == keeplen) { + if (cl2rec -> kubun == K_TAIGEN) { + prty &= GETPRI; + goto finish; + } + cl2rec = cl2rec->clsort; + } + prty = 4; + } + + else { + prty &= GETPRI; + + if (prty == P_RENYOU_J || prty == P_RENYOU_M ) { + while (clrec->cllen != 1 && cl2rec && + (int)cl2rec->cllen == keeplen ) { + if (cl2rec->kubun == K_DOUSHI) { + prty = 6; + goto finish; + } + else if (cl2rec->jnode->hinsi == SETUBI_1 || + cl2rec->jnode->hinsi == SETUBI_2) { + prty = 7; + goto finish; + } + cl2rec = cl2rec->clsort; + } + prty = 4; + } + } + + +finish: + cl2rec = maxclptr; + + if (hinsi1 == SUUSI) prty -= 4; + + if (cl2rec -> jnode -> hinsi == SUUSI) prty -= 3; + + if (cl2rec->jnode->class == C_DICT && + cl2rec->jnode->jlen == 1 && (cl2rec->kubun != K_DOUSHI)) { + prty -= 2; + } + + if ((!istaigen(clrec->right)) && (cl2rec->jnode->hinsi == SETUBI_2)) { + prty -= 4; + } + + prty += 20 - clrec->cllen + clrec->jnode->jlen + clrec->gobiln; + return(prty + prev); +} + + +void +pritiny() +{ + CLREC *clrec; + int keeplen; + int i, prty = 0; + + clrec = selcl; + keeplen = clrec -> cllen; + + if (istaigen(prevclrow)) { + while (clrec && (int)clrec -> cllen == keeplen) { + i = taicnt(prevclgrm, clrec -> jnode -> hinsi); + if (i > prty) { + selcl = clrec; + prty = i; + } + clrec = clrec -> clsort; + } + } + + else { + + while (clrec && (int)clrec -> cllen == keeplen) { + if (clrec -> jnode -> hinsi >= MYOUJI && + clrec -> jnode -> hinsi <= KEN_KU) + clrec = clrec -> clsort; + + else if (clrec -> jnode -> hinsi == TANKANJI) + return; + else { + selcl = clrec; + return; + } + } + } +} + diff --git a/lib/sj3core/prtytbl.c b/lib/sj3core/prtytbl.c new file mode 100644 index 0000000..1ac0e5e --- /dev/null +++ b/lib/sj3core/prtytbl.c @@ -0,0 +1,104 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: prtytbl.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:11 $ + */ + + + +#include "sj_rename.h" +#include "sj_typedef.h" + +#include "sj_kanakan.h" + +u_char taipri[7][45] = { + + { 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 3, 3, 3, 3, 3, 3, 0, 0, + 0, 3, 20, 4, 3, 3, 4, 4, 4, 4, + 4, 4, 4, 20, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, + + { 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 3, 3, 3, 3, 3, 3, 0, 0, + 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 20, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4}, + + { 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 3, 3, 3, 3, 3, 3, 0, 0, + 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6}, + + { 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 3, 3, 3, 3, 3, 3, 0, 0, + 0, 3, 3, 3, 4, 5, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 4, 4, 4, 4, 6}, + + { 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 4, 4, 4, 4, 4, 4, 0, 0, + 0, 4, 4, 4, 20, 20, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6}, + + { 0, 8, 8, 8, 8, 8, 7, 8, 8, 8, + 8, 8, 3, 6, 7, 3, 3, 5, 0, 0, + 0, 3, 3, 3, 3, 3, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 8, 8, 11, 5, 7, 7, 7, 7, 7}, + + { 0, 5, 6, 6, 6, 6, 5, 6, 6, 6, + 6, 6, 3, 3, 3, 3, 3, 5, 0, 0, + 0, 3, 3, 3, 3, 3, 5, 5, 5, 5, + 4, 5, 5, 5, 5, 5, 5, 6, 6, 5, 5, 5, 5, 5, 5} + }; + + + +u_char sttpri[5][31] = { + + { 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 2, 4, 4, 4, 4, 4, 0, 0, + 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, }, + + { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, + 0, 4, 4, 4, 10, 10, 4, 4, 4, 4, 4, }, + + { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, + 0, 10, 10, 4, 4, 4, 4, 4, 4, 4, 4, }, + + { 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, + 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 15, }, + + { 0, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 9, 9, 9, 9, 9, 9, 0, 0, + 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, } + }; diff --git a/lib/sj3core/s2ctbl.c b/lib/sj3core/s2ctbl.c new file mode 100644 index 0000000..ef0523e --- /dev/null +++ b/lib/sj3core/s2ctbl.c @@ -0,0 +1,153 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: s2ctbl.c,v $ + * $SonyRevision: 1.2 $ + * $SonyDate: 1995/07/21 05:22:51 $ + */ + + + +#include "sj_rename.h" +#include "sj_typedef.h" +#include "sj_yomi.h" + +#include "sj_kanakan.h" + +u_char kigou[] = { + Y_L_KAKKO, + Y_KUTEN, + Y_TOUTEN, + Y_COMMA, + Y_PERIOD, + Y_L_KAKKO, + Y_L_KAKKO, + Y_L_KAKKO, + Y_BIKKURI, + Y_BIKKURI, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + _TYOUON, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_L_KAKKO, + Y_QUOTA, + Y_L_KAKKO, + Y_QUOTA, + Y_L_KAKKO, + Y_R_KAKKO, + Y_L_KAKKO, + Y_R_KAKKO, + Y_L_KAKKO, + Y_R_KAKKO, + Y_L_KAKKO, + Y_R_KAKKO, + Y_L_KAKKO, + Y_R_KAKKO, + Y_L_KAKKO, + Y_R_KAKKO, + Y_L_KAKKO, + Y_R_KAKKO, + Y_L_KAKKO, + Y_R_KAKKO, + Y_L_KAKKO, + Y_R_KAKKO, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_S_KIGOU2, + Y_S_KIGOU1, + Y_S_KIGOU1, + Y_S_KIGOU2, + Y_S_KIGOU1, + Y_S_KIGOU2, + _IGETA, + Y_KIGOU, + Y_KIGOU, + _ATTO, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + _YUUBIN, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU, + Y_KIGOU + }; diff --git a/lib/sj3core/sdepend.c b/lib/sj3core/sdepend.c new file mode 100644 index 0000000..e2c0600 --- /dev/null +++ b/lib/sj3core/sdepend.c @@ -0,0 +1,756 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: depend.c,v $ + * $SonyRevision: 1.4 $ + * $SonyDate: 1997/10/07 07:39:45 $ + */ + +#include +#include +#include +#include +#include +#include +#include "sj_kcnv.h" +#include +#include +#include +#include "Dict.h" +#include "sj3err.h" + +#include "sj_kanakan.h" + +#if defined(__FD_SET) && !defined(FD_SET) +# define FD_SET __FD_SET +# define FD_CLR __FD_CLR +#endif + +DictFile *dictlink = NULL; +StdyFile *stdylink = NULL; + +static long +get4byte(u_char *p) +{ + long i; + + i = *p; + i = (i << 8) + *++p; + i = (i << 8) + *++p; + return ((i << 8) + *++p); +} +static void +Put4byte(u_char *p, long n) +{ + p += 3; + *p-- = n; n >>= 8; + *p-- = n; n >>= 8; + *p-- = n; n >>= 8; + *p = n; +} +#define put4byte(p, n) Put4byte((p), (long)(n)) + + + +static int +fgetfile(FILE *fp, long pos, long len, u_char *p) +{ + if (fseek(fp, pos, 0) == ERROR) { + serv_errno = SJ3_FileSeekError; return ERROR; + } + if (fread(p, len, 1, fp) != 1) { + serv_errno = SJ3_FileReadError; return ERROR; + } + return SJ3_NormalEnd; +} +static int +fputfile(FILE *fp, long pos, int len, u_char *p) +{ + if (fseek(fp, pos, 0) == ERROR) { + serv_errno = SJ3_FileSeekError; return ERROR; + } + if (fwrite(p, len, 1, fp) != 1) { + serv_errno = SJ3_FileWriteError; return ERROR; + } + return SJ3_NormalEnd; +} +static int +getfile(int fd, int pos, int len, u_char *p) +{ + if (lseek(fd, pos, L_SET) == ERROR) { + serv_errno = SJ3_FileSeekError; return ERROR; + } + if (read(fd, p, len) != len) { + serv_errno = SJ3_FileReadError; return ERROR; + } + return SJ3_NormalEnd; +} +static int +putfile(int fd, int pos, int len, u_char *p) +{ + if (lseek(fd, pos, L_SET) == ERROR) { + serv_errno = SJ3_FileSeekError; return ERROR; + } + if (write(fd, p, len) != len) { + serv_errno = SJ3_FileWriteError; return ERROR; + } + return SJ3_NormalEnd; +} + + + +static int +check_passwd(u_char *buf, char *passwd) +{ + buf += PASSWDPOS; + return (*buf && strncmp(passwd, buf, PASSWDLEN)) ? FALSE : TRUE; +} +static void +set_passwd(u_char *buf, char *passwd) +{ + strncpy(buf + PASSWDPOS, passwd, PASSWDLEN); +} + + + +static int +check_dictfile(u_char *buf) +{ + return (DICTVERSION != get4byte(buf + VERSIONPOS)) ? FALSE : TRUE; +} + + + +static DictFile * +search_same_dict(ino_t ino) +{ + DictFile *p; + + for (p = dictlink ; p != NULL ; p = p -> link) + if (p->dict.dicid == ino) return p; + + return NULL; +} + + + +static int +getofs(DictFile *dp) +{ + idxofs = dp -> ofsptr; + return 0; +} +static int +getidx(DictFile *dp) +{ + idxbuf = dp -> buffer + dp -> idxstrt; + return 0; +} +/* XXX: not IFunc */ +static int +getdic(DictFile *dp, TypeDicSeg seg) +{ + if (seg >= dp->dict.segunit) return -1; + dicbuf = dp->buffer + dp->segstrt + dp->dict.seglen * seg; + return 0; +} +static int +putidx(DictFile *dp) +{ + return putfile(dp->fd, dp->idxstrt, dp->dict.idxlen, idxbuf); +} +/* XXX: not IFunc */ +static int +putdic(DictFile *dp, TypeDicSeg seg) +{ + u_char *p; + long i, j; + + if (seg >= dp->dict.maxunit) return -1; + i = dp->segstrt + dp->dict.seglen * (seg + 1); + if (i > dp->bufsiz) { + if (!(p = (u_char *)malloc(i))) return -1; + memcpy(p, dp->buffer, dp->bufsiz); + + if (idxbuf - dp->buffer == dp->idxstrt) + idxbuf = p + dp->idxstrt; + if ((dicbuf >= dp->buffer) && + ((j = dicbuf - dp->buffer) < dp->bufsiz)) + dicbuf = p + j; + + free((char *)(dp -> buffer)); + dp -> buffer = p; + dp -> bufsiz = i; + } + + i = dp->segstrt + dp->dict.seglen * seg; + if ((p = dp->buffer + i) != dicbuf) memcpy(p, dicbuf, dp->dict.seglen); + + return putfile(dp->fd, i, dp->dict.seglen, p); +} +/* XXX: not IFunc */ +static int +rszdic(DictFile *dp, TypeDicSeg seg) +{ + long i; + u_char *p; + + i = dp->segstrt + dp->dict.seglen * seg; + if (dp->bufsiz != i) { + if (!(p = (u_char *)malloc(i))) return -1; + memcpy(p, dp->buffer, ((i > dp->bufsiz) ? dp->bufsiz : i)); + + if (idxbuf - dp->buffer == dp->idxstrt) + idxbuf = p + dp->idxstrt; + if ((dicbuf >= dp->buffer) && + ((i = dicbuf - dp->buffer) < dp->bufsiz)) + dicbuf = p + i; + + free((char *)(dp -> buffer)); + dp -> buffer = p; + dp -> bufsiz = i; + if (ftruncate(dp->fd, i) == -1) return -1; + } + put4byte(dp->buffer + DICTSEGNUM, seg); + return putfile(dp->fd, 0, HEADERLENGTH, dp->buffer); +} + + + +DictFile * +opendict(char *name, char *passwd) +{ + FILE *fp; + struct stat sbuf; + DictFile *dfp; + u_char tmp[HEADERLENGTH]; + int i; + u_char *dp; + + if (stat(name, &sbuf) == ERROR) { + if (errno == ENOENT) + serv_errno = SJ3_FileNotExist; + else + serv_errno = SJ3_CannotAccessFile; + return NULL; + } + + if ((dfp = search_same_dict(sbuf.st_ino)) != NULL) { + dfp -> refcnt++; return dfp; + } + + if ((fp = fopen(name, "r+")) == NULL) { + if ((fp = fopen(name, "r")) == NULL) { + serv_errno = SJ3_CannotOpenFile; return NULL; + } + i = FALSE; + } + else + i = TRUE; + + if (fgetfile(fp, 0L, sizeof(tmp), tmp) == ERROR) goto error1; + + if (!check_dictfile(tmp)) { + serv_errno = SJ3_IllegalDictFile; goto error1; + } + + if (!check_passwd(tmp, passwd)) { + serv_errno = SJ3_IncorrectPasswd; goto error1; + } + + if ((dp = (u_char *)malloc((long)sbuf.st_size)) == NULL) { + serv_errno = SJ3_NotEnoughMemory; goto error1; + } + if ((dfp = (DictFile *)malloc(sizeof(*dfp))) == NULL) { + serv_errno = SJ3_NotEnoughMemory; goto error2; + } + memset(dfp, '\0', sizeof(*dfp)); + + if (fgetfile(fp, 0L, (long)sbuf.st_size, dp) == ERROR) goto error3; + + dfp -> dict.dicid = sbuf.st_ino; + dfp -> dict.idxlen = get4byte(dp + DICTIDXLEN); + dfp -> dict.seglen = get4byte(dp + DICTSEGLEN); + dfp -> dict.segunit = get4byte(dp + DICTSEGNUM); + dfp -> dict.maxunit = i ? get4byte(dp + DICTSEGMAX) : 0 ; + dfp -> dict.getofs = getofs; + dfp -> dict.getidx = getidx; + dfp -> dict.getdic = getdic; + dfp -> dict.putidx = putidx; + dfp -> dict.putdic = putdic; + dfp -> dict.rszdic = rszdic; + dfp -> refcnt = 1; + dfp -> fp = fp; + dfp -> fd = fileno(fp); + dfp -> buffer = dp; + dfp -> bufsiz = sbuf.st_size; + dfp -> idxstrt = get4byte(dp + DICTIDXPOS); + dfp -> segstrt = get4byte(dp + DICTSEGPOS); + + i = dfp -> dict.segunit; + if (i < dfp -> dict.maxunit) i = dfp -> dict.maxunit; + i *= sizeof(TypeIdxOfs); + if ((dfp -> ofsptr = (TypeIdxOfs *)malloc(i)) == NULL) { + serv_errno = SJ3_NotEnoughMemory; goto error3; + } + mkidxtbl(&(dfp -> dict)); + + dfp -> link = dictlink; + dictlink = dfp; + + return dfp; + + +error3: free((char *)dfp); +error2: free((char *)dp); +error1: fclose(fp); + + return NULL; +} + + + +int +closedict(DictFile *dfp) +{ + DictFile *df; + + if (--dfp->refcnt > 0) return 0; + + if (dictlink == dfp) + dictlink = dfp -> link; + else { + for (df = dictlink ; df ; df = df -> link) + if (df -> link == dfp) { + df -> link = dfp -> link; + break; + } + } + + if (dfp -> fp) fclose(dfp ->fp); + + free((char *)(dfp -> ofsptr)); + free((char *)(dfp -> buffer)); + free((char *)dfp); + + return 0; +} + +static fd_set zero_fd_set; /* XXX */ + +void +lock_dict(DictFile *p, int fd) +{ + FD_SET(fd, &(p -> lock)); +} + +void +unlock_dict(DictFile *p, int fd) +{ + FD_CLR(fd, &(p -> lock)); +} + +int is_dict_locked(DictFile *p) +{ + return memcmp(&(p -> lock), &zero_fd_set, sizeof(zero_fd_set)); +} + +static int +check_stdyfile(u_char *buf) +{ + return (STDYVERSION != get4byte(buf + VERSIONPOS)) ? FALSE : TRUE; +} + +static StdyFile * +search_same_stdy(ino_t ino) +{ + StdyFile *p; + + for (p = stdylink ; p != NULL ; p = p -> link) + if (p -> inode == ino) return p; + + return NULL; +} + +StdyFile * +openstdy(char *name, char *passwd) +{ + FILE *fp; + struct stat sbuf; + StdyFile *sfp; + u_char *hd; + STDYIN *sp; + u_short *cip; + u_char *clp; + long stdycnt, stdypos, stdylen, stdymax; + long clidxpos, clidxlen; + long clstdypos, clstdylen, clstdystep; + long len; + + if (stat(name, &sbuf) == ERROR) { + if (errno == ENOENT) + serv_errno = SJ3_FileNotExist; + else + serv_errno = SJ3_CannotAccessFile; + return NULL; + } + + if ((sfp = search_same_stdy(sbuf.st_ino)) != NULL) { + sfp -> refcnt++; return sfp; + } + + if ((hd = (u_char *)malloc(HEADERLENGTH + COMMENTLENGTH)) == NULL) { + serv_errno = SJ3_NotEnoughMemory; return NULL; + } + + if ((fp = fopen(name, "r+")) == NULL) { + serv_errno = SJ3_CannotOpenFile; goto error0; + } + + if (fgetfile(fp, 0L, HEADERLENGTH + COMMENTLENGTH, hd) == ERROR) + goto error1; + + if (!check_stdyfile(hd)) { + serv_errno = SJ3_IllegalStdyFile; goto error1; + } + + if (!check_passwd(hd, passwd)) { + serv_errno = SJ3_IncorrectPasswd; goto error1; + } + + stdycnt = get4byte(hd + STDYNORMCNT); + stdypos = get4byte(hd + STDYNORMPOS); + stdylen = get4byte(hd + STDYNORMLEN); + stdymax = get4byte(hd + STDYNORMNUM); + clidxpos = get4byte(hd + STDYCLIDXPOS); + clidxlen = get4byte(hd + STDYCLIDXLEN); + clstdypos = get4byte(hd + STDYCLSEGPOS); + clstdylen = get4byte(hd + STDYCLSEGLEN); + clstdystep = get4byte(hd + STDYCLIDXSTEP); + len = sizeof(STDYIN) * stdymax; + + if ((sfp = (StdyFile *)malloc(sizeof(*sfp))) == NULL) { + serv_errno = SJ3_NotEnoughMemory; goto error1; + } + memset(sfp, '\0', sizeof(*sfp)); + if ((sp = (STDYIN *)malloc(len)) == NULL) { + serv_errno = SJ3_NotEnoughMemory; goto error2; + } + if ((cip = (u_short *)malloc(clidxlen)) == NULL) { + serv_errno = SJ3_NotEnoughMemory; goto error3; + } + if ((clp = (u_char *)malloc(clstdylen)) == NULL) { + serv_errno = SJ3_NotEnoughMemory; goto error4; + } + + if (fgetfile(fp, clidxpos, clidxlen, (u_char *)cip) == ERROR) goto error5; /* XXX */ + if (fgetfile(fp, clstdypos, clstdylen, (u_char *)clp) == ERROR) goto error5; /* XXX */ + if (fgetfile(fp, stdypos, len, (u_char *)sp) == ERROR) stdycnt = 0; /* XXX */ + + sfp -> stdy.stdycnt = stdycnt; + sfp -> stdy.stdymax = stdymax; + sfp -> stdy.stdydic = sp; + sfp -> stdy.clstdystep = clstdystep; + sfp -> stdy.clstdyidx = cip; + sfp -> stdy.clstdylen = clstdylen; + sfp -> stdy.clstdydic = clp; + sfp -> refcnt = 1; + sfp -> inode = sbuf.st_ino; + sfp -> fp = fp; + sfp -> fd = fileno(fp); + sfp -> header = hd; + + sfp -> link = stdylink; + stdylink = sfp; + + return sfp; + +error5: free((char *)clp); +error4: free((char *)cip); +error3: free((char *)sp); +error2: free((char *)sfp); +error1: fclose(fp); +error0: free((char *)hd); + + return NULL; +} + +int +closestdy(StdyFile *sfp) +{ + StdyFile *sf; + + if (--sfp->refcnt > 0) return 0; + + if (stdylink == sfp) + stdylink = sfp -> link; + else { + for (sf = stdylink ; sf ; sf = sf -> link) + if (sf -> link == sfp) { + sf -> link = sfp -> link; + break; + } + } + + if (sfp -> fp) fclose(sfp ->fp); + + free((char *)sfp -> stdy.stdydic); + free((char *)sfp -> stdy.clstdyidx); + free((char *)sfp -> stdy.clstdydic); + free((char *)sfp -> header); + free((char *)sfp); + + return 0; +} + + + +int +putstydic() +{ + int fd; + u_char *hd; + StdyFile *sf; + long len; + + sf = (StdyFile *)stdy_base; + fd = sf -> fd; + hd = sf -> header; + + put4byte(hd + STDYNORMCNT, sf -> stdy.stdycnt); + + len = sizeof(STDYIN) * sf -> stdy.stdymax; + put4byte(hd + STDYNORMLEN, len); + + if (putfile(fd, 0, HEADERLENGTH + COMMENTLENGTH, hd)) return ERROR; + + return putfile(fd, get4byte(hd + STDYNORMPOS), len, (u_char *)sf -> stdy.stdydic); +} + +int +putcldic() +{ + int fd; + u_char *hd; + StdyFile *sf; + + sf = (StdyFile *)stdy_base; + fd = sf -> fd; + hd = sf -> header; + + if (putfile(fd, get4byte(hd + STDYCLIDXPOS), + get4byte(hd + STDYCLIDXLEN), (u_char *)sf -> stdy.clstdyidx)) /* XXX */ + return ERROR; + return putfile(fd, get4byte(hd + STDYCLSEGPOS), + get4byte(hd + STDYCLSEGLEN), sf -> stdy.clstdydic); +} + +int +makedict(char *path, int idxlen, int seglen, int segnum) +{ + FILE *fp; + u_char tmp[HEADERLENGTH + COMMENTLENGTH]; + long pos = HEADERLENGTH + COMMENTLENGTH; + int ret = ERROR; + int i; + + if (idxlen < MINIDXLEN || seglen < MINSEGLEN || segnum < MINSEGNUM) { + serv_errno = SJ3_IllegalParameter; return ret; + } + + if (!(fp = fopen(path, "w"))) { + serv_errno = SJ3_CannotCreateFile; return ret; + } + memset(tmp, '\0', sizeof(tmp)); + put4byte(tmp + VERSIONPOS, DICTVERSION); + + put4byte(tmp + DICTIDXPOS, pos); + put4byte(tmp + DICTIDXLEN, idxlen); + if (fseek(fp, pos, 0) == ERROR) { + serv_errno = SJ3_FileSeekError; goto error; + } + for (i = 0 ; i < idxlen ; i++) + if (putc(0, fp)) { + serv_errno = SJ3_FileWriteError; goto error; + } + pos += idxlen; + + put4byte(tmp + DICTSEGPOS, pos); + put4byte(tmp + DICTSEGLEN, seglen); + put4byte(tmp + DICTSEGNUM, 1); + put4byte(tmp + DICTSEGMAX, segnum); + if (fseek(fp, pos, 0) == ERROR) { + serv_errno = SJ3_FileSeekError; goto error; + } + if (putc(0, fp)) { + serv_errno = SJ3_FileWriteError; goto error; + } + for (i = 1 ; i < seglen ; i++) + if (putc(0xff, fp) != 0xff) { + serv_errno = SJ3_FileWriteError; goto error; + } + + if (fputfile(fp, 0L, sizeof(tmp), tmp) == SJ3_NormalEnd) + ret = SJ3_NormalEnd; +error: + fclose(fp); + if (ret != SJ3_NormalEnd) unlink(path); + return ret; +} + +int +makestdy(char *path, int stynum, int clstep, int cllen) +{ + FILE *fp; + u_char tmp[HEADERLENGTH + COMMENTLENGTH]; + long pos = HEADERLENGTH + COMMENTLENGTH; + int ret = ERROR; + int i, j; + + if (stynum == 0) stynum = MINSTYNUM; + if (clstep == 0) clstep = MINCLSTEP; + if (cllen == 0) cllen = MINCLLEN; + + if (stynum < MINSTYNUM || clstep < MINCLSTEP || cllen < MINCLLEN) { + serv_errno = SJ3_IllegalParameter; return ret; + } + if (stynum > MAXSTYNUM || clstep > MAXCLSTEP || cllen > MAXCLLEN) { + serv_errno = SJ3_IllegalParameter; return ret; + } + + if (!(fp = fopen(path, "w"))) { + serv_errno = SJ3_CannotCreateFile; return ret; + } + memset(tmp, '\0', sizeof(tmp)); + put4byte(tmp + VERSIONPOS, STDYVERSION); + + j = 256 * sizeof(u_short); + put4byte(tmp + STDYCLIDXPOS, pos); + put4byte(tmp + STDYCLIDXLEN, j); + put4byte(tmp + STDYCLIDXSTEP, clstep); + if (fseek(fp, pos, 0) == ERROR) { + serv_errno = SJ3_FileSeekError; goto error; + } + for (i = 0 ; i < j ; i++) + if (putc(0, fp)) { + serv_errno = SJ3_FileWriteError; goto error; + } + pos += j; + + put4byte(tmp + STDYCLSEGPOS, pos); + put4byte(tmp + STDYCLSEGLEN, cllen); + if (fseek(fp, pos, 0) == ERROR) { + serv_errno = SJ3_FileSeekError; goto error; + } + for (i = 0 ; i < cllen ; i++) + if (putc(0, fp)) { + serv_errno = SJ3_FileWriteError; goto error; + } + pos += cllen; + + j = sizeof(STDYIN) * stynum; + put4byte(tmp + STDYNORMPOS, pos); + put4byte(tmp + STDYNORMLEN, j); + put4byte(tmp + STDYNORMNUM, stynum); + put4byte(tmp + STDYNORMCNT, 0); + if (fseek(fp, pos, 0) == ERROR) { + serv_errno = SJ3_FileSeekError; goto error; + } + for (i = 0 ; i < j ; i++) { + if (putc(0, fp)) { + serv_errno = SJ3_FileWriteError; goto error; + } + } + pos += j; + + if (fputfile(fp, 0L, sizeof(tmp), tmp) == SJ3_NormalEnd) + ret = SJ3_NormalEnd; +error: + fclose(fp); + if (ret != SJ3_NormalEnd) unlink(path); + return ret; +} + +void +sj_closeall() +{ + while (dictlink) closedict(dictlink); + while (stdylink) closestdy(stdylink); +} + +int +set_dictpass(DictFile *dp, char *pass) +{ + set_passwd(dp -> buffer, pass); + return putfile(dp->fd, 0, HEADERLENGTH + COMMENTLENGTH, dp->buffer); +} + +int +set_stdypass(char *pass) +{ + StdyFile *sp; + + sp = (StdyFile *)stdy_base; + set_passwd(sp -> header, pass); + return putfile(sp->fd, 0, HEADERLENGTH + COMMENTLENGTH, sp->header); +} + +static +void +set_comment(u_char *buf, char *comment) +{ + strlcpy(buf + HEADERLENGTH, comment, COMMENTLENGTH); +} + +int +set_dictcmnt(DictFile *dp, char *cmnt) +{ + set_comment(dp -> buffer, cmnt); + return putfile(dp->fd, 0, HEADERLENGTH + COMMENTLENGTH, dp->buffer); +} + +int +set_stdycmnt(char *cmnt) +{ + StdyFile *sp; + + sp = (StdyFile *)stdy_base; + set_comment(sp -> header, cmnt); + return putfile(sp->fd, 0, HEADERLENGTH + COMMENTLENGTH, sp->header); +} + +int +get_stdysize(int *stynum, int *clstep, int *cllen) +{ + *stynum = STUDYMAX; + *clstep = CLSTUDYSTEP; + *cllen = CLSTUDYLEN; + return 1; +} diff --git a/lib/sj3core/selclrec.c b/lib/sj3core/selclrec.c new file mode 100644 index 0000000..ca06c3c --- /dev/null +++ b/lib/sj3core/selclrec.c @@ -0,0 +1,104 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: selclrec.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:14 $ + */ + +#include "sj_kcnv.h" +#include "sj_kanakan.h" + +void +selclrec() +{ + int len; + CLREC *rec; + + nextcllen = 0; + + len = selcl -> cllen; + rec = clt1st; + while (rec) { + if (len >= (unsigned int) rec -> cllen) break; + rec = rec -> clsort; + } + + while (rec) { + if (len > (unsigned int) rec -> cllen) return; + if (rec -> jnode -> class == C_BUNSETU) break; + rec = rec -> clsort; + } + if (!rec) return; + + len = ClYomi1Len(CLSTUDYDICT + rec->jnode->jofsst); + + nextcllen = rec -> cllen - len; + + while (rec) { + if (len == rec -> cllen) { + selcl = rec; + break; + } + + else if (len > (unsigned int) rec -> cllen) { + rec = NULL; + break; + } + rec = rec -> clsort; + } + + if (rec == NULL) { + int klen; + u_char ch; + + free_clall(clt1st); + free_jall(jrt1st); + + klen = cnvlen; + cnvlen = len; + ch = *(cnvstart + len); + *(cnvstart + len) = 0; + + mkjiritu(DO_IKKATU); + + mkbunsetu(); + if (!maxclptr) wakachi(); + + jrt1st = maxjptr; + selcl = clt1st = maxclptr; + + cnvlen = klen; + *(cnvstart + len) = ch; + } + + free_clall(clt2nd); clt2nd = NULL; + free_jall(jrt2nd); jrt2nd = NULL; +} diff --git a/lib/sj3core/selsuuji.c b/lib/sj3core/selsuuji.c new file mode 100644 index 0000000..72f913f --- /dev/null +++ b/lib/sj3core/selsuuji.c @@ -0,0 +1,123 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: selsuuji.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:15 $ + */ + +#include "sj_rename.h" +#include "sj_typedef.h" +#include "sj_const.h" +#include "sj_suuji.h" + +#include "sj_kanakan.h" + +static u_short selsjAR[] = { + SELARB0, + SELARBCMA | JFLAG_NK4 | JFLAG_NN0, + SELKANSJYM | JFLAG_NN0, + SELKANSJYM2 | SELNUM1_23_10_1 | JFLAG_NN0, + SELKANSJ0 | JFLAG_NK2, + SELNUMTERM +}; + +static u_short selsjARCM[] = { + SELARBCMA | JFLAG_NK4 | JFLAG_NN0, + SELARB0, + SELKANSJYM | JFLAG_NN0, + SELKANSJYM2 | SELNUM1_23_10_1 | JFLAG_NN0, + SELKANSJ0 | JFLAG_NK2, + SELNUMTERM +}; + +static u_short selsjKAZU[] = { + SELKANSJYM | JFLAG_NN0, + SELKANSJYM2 | SELNUM1_23_10_1 | JFLAG_NN0, + SELKANSJ0 | JFLAG_NK2, + SELARB0, + SELARBCMA | JFLAG_NK4 | JFLAG_NN0, + SELNUMTERM +}; + +static u_short selsjSUUJI[] = { + SELKANSJ0, + SELARB0, + SELNUMTERM +}; + +static u_short selsjNANSUU[] = { + SELKANSJYM, + SELNUMTERM +}; + +static u_short selsjAR17[] = { + SELLONGARB, + SELLONGARBCMA, + SELNUMTERM +}; + +static u_short selsjAR17CM[] = { + SELLONGARBCMA, + SELLONGARB, + SELNUMTERM +}; + +static u_short selsjAR17SJ[] = { + SELLONGARB, + SELLONGSJ, + SELNUMTERM +}; + +static u_short selsjKANKURA[] = { + SELKANSJKR, + SELARBKR, + SELNUMTERM +}; + +static u_short selsjARAKURA[] = { + SELARBKR, + SELKANSJKR | JFLAG_NSN, + SELNUMTERM +}; + + +u_short *selsjadrs[] = { + selsjAR, + selsjARCM, + selsjKAZU, + selsjSUUJI, + selsjNANSUU, + selsjKANKURA, + selsjARAKURA, + selsjAR17, + selsjAR17CM, + selsjAR17SJ +}; diff --git a/lib/sj3core/setconj.c b/lib/sj3core/setconj.c new file mode 100644 index 0000000..f4154dd --- /dev/null +++ b/lib/sj3core/setconj.c @@ -0,0 +1,159 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: setconj.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:16 $ + */ + + + +#include "sj_kcnv.h" +#include "sj_right.h" +#include "sj_hinsi.h" +#include "sj_yomi.h" + +#include "sj_kanakan.h" + +static int +cnjstrcmp(u_char *yptr, u_char *cnjp, int *saml) +{ + int asklen; + int nkrlen; + + asklen = CnjAskLen(cnjp); + + if (*saml < asklen) return CONT; + + if (*saml > asklen) return OVER; + + nkrlen = CnjNkrLen(cnjp); + + yptr += asklen; + cnjp ++; + + while (nkrlen--) { + if (*yptr > *cnjp) + return CONT; + + else if (*yptr < *cnjp) { + if (!*yptr) return PARTLY; + return OVER; + } + + else{ + yptr++; + cnjp++; + (*saml)++; + } + } + + return MATCH; +} + +static TypeCnct +cnvrow(JREC *rec, TypeCnct row) +{ + TypeGram hinsi; + int stt; + + hinsi = rec -> hinsi; + + if ((stt = rec -> sttofs) == SETTOU_O) { + + if (R_RENYOU1 <= row && row <= R_SA5RENYOU1) + row += 6; + + else if (R_RENYOU3 <= row && row <= R_SA5RENYOU3) + row += 3; + + else if((hinsi>=KEIYOUSI_1 && hinsi<=KE_DOUSI_9)|| + (hinsi == MEISI_5) || (hinsi == MEISI_9)) + ; + + else + row = 0; + } + + else if (stt == SETTOU_GO) { + + if (hinsi == MEISI_7 && row == R_SMEISI1) + row++; + } + + return row; +} + +int +setconj(TypeGram hinsi, JREC *jrec, CREC *crec) +{ + u_char *yptr; + int cmp; + TypeCnct right; + int saml; + int ofslen; + int count = 0; + u_char *cnj; + + if (cnj = Conjadr(hinsi)) { + saml = ofslen = 0; + + yptr = cnvstart + jrec -> jlen; + + if ((*cnj) & TYOUONFLG) { + while (*yptr == _TYOUON) { + yptr++; + ofslen++; + } + } + + for ( ; *cnj != CNJEND ; cnj += CnjRecLen(cnj)) { + cmp = cnjstrcmp(yptr, cnj, &saml); + + if (cmp == OVER) break; + + if (cmp == PARTLY) break; + + if (cmp != MATCH) continue; + + if (isdpnd(*(yptr + saml))) continue; + + if (right = cnvrow(jrec, (TypeCnct)CnjRight(cnj))) { + crec -> len = (u_char)(ofslen + saml); + crec -> right = right; + count++; + crec++; + } + } + } + + return count; +} + diff --git a/lib/sj3core/setjrec.c b/lib/sj3core/setjrec.c new file mode 100644 index 0000000..f27308d --- /dev/null +++ b/lib/sj3core/setjrec.c @@ -0,0 +1,312 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: setjrec.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:17 $ + */ + +#include "sj_euc.h" +#include "sj_kcnv.h" +#include "sj_hinsi.h" + +#include "sj_kanakan.h" + +int +setj_atrb(u_char *p) +{ + return 2; +} + +int +setj_ofs(u_char *p) +{ + int contf = TRUE; + + p = dicbuf + ((*p & KANJICODEMASK) << 8) + *(p + 1); + + do { + if (p[codesize(*p)] == KANJISTREND) contf = FALSE; + switch(*p & KANJIMODEMASK) { + case ZENHIRAASSYUKU: + p += setj_norm1(p); break; + + case ZENKATAASSYUKU: + p += setj_norm1(p); break; + + case OFFSETASSYUKU: + p += setj_ofs(p); break; + + case AIATTRIBUTE: + p += setj_atrb(p); break; + + case LEADINGHANKAKU: + p += setj_norm2(p); break; + + case KANJIASSYUKU: + p += setj_knj(p); break; + + case KANJISTREND: + contf = FALSE; break; + + default: + p += setj_norm2(p); + } + } while (contf); + + return 2; +} + +int +setj_knj(u_char *p) +{ + int contf = TRUE; + + p = askknj[*p & KNJASSYUKUMASK]; + + do { + if (p[codesize(*p)]== KANJISTREND) contf = FALSE; + switch(*p & KANJIMODEMASK) { + case ZENHIRAASSYUKU: + p += setj_norm1(p); break; + + case ZENKATAASSYUKU: + p += setj_norm1(p); break; + + case OFFSETASSYUKU: + p += setj_ofs(p); break; + + case AIATTRIBUTE: + p += setj_atrb(p); break; + + case LEADINGHANKAKU: + p += setj_norm2(p); break; + + case KANJIASSYUKU: + p += setj_knj(p); break; + + case KANJISTREND: + contf = FALSE; break; + + default: + p += setj_norm2(p); + } + } while (contf); + + return 1; +} + + + +int +setj_norm1(u_char *p) +{ + return 1; +} + + + +int +setj_norm2(u_char *p) +{ + return 2; +} + +int +setj_norm3(u_char *p) +{ + return 3; +} + + + +static u_char +chkhead(TypeGram gram) +{ + if (!headcode) return TRUE; + + if (headcode == SETTOU_DAI) { + + if (gram == SUUSI) return TRUE; + } + + else { + gram--; + if ((Scncttbl(headcode-1, gram >> 3) << (gram & 0x07)) & 0x80) { + return TRUE; + } + } + + return FALSE; +} + + + +void +setjrec(u_char *tagp, int mode) +{ + TypeGram gram; + u_char *ptr; + u_char *endp; + u_char *tmp; + JREC *rec; + int plen; + int nlen; + int len; + + plen = getplen(tagp); + nlen = getnlen(tagp); + + len = plen + nlen; + + if (headcode) len += headlen; + + ptr = tagp + DOUONBLKSIZENUMBER + nlen; + + endp = tagp + getsize(tagp); + + for ( ; ptr < endp ; ptr = tmp + 1) { + for (tmp = ptr + 1; *tmp != HINSIBLKTERM ; ) { + switch(*tmp & KANJIMODEMASK) { + case ZENHIRAASSYUKU: + tmp += setj_norm1(tmp); break; + + case ZENKATAASSYUKU: + tmp += setj_norm1(tmp); break; + + case OFFSETASSYUKU: + tmp += setj_ofs(tmp); break; + + case AIATTRIBUTE: + tmp += setj_atrb(tmp); break; + + case LEADINGHANKAKU: + tmp += setj_norm2(tmp); break; + + case KANJIASSYUKU: + tmp += setj_knj(tmp); break; + + case KANJISTREND: + tmp++; break; + + default: + tmp += setj_norm2(tmp); + } + } + + if ((gram = *ptr) == IKKATU && !(mode & DO_IKKATU)) continue; + + if (!chkhead(gram)) continue; + + if (!(rec = argjrec(len, (JREC *)NULL))) continue; + + rec -> jseg = prevseg; + rec -> jofsst = ptr - dicbuf; + rec -> jofsed = tmp - dicbuf; + rec -> class = C_DICT; + rec -> dicid = curdict->dicid; + rec -> hinsi = gram; + rec -> sttofs = headcode; + } +} + + + +void +setnumrec(u_char *tagp, JREC *rec, TypeGram gram) +{ + u_char *ptr; + u_char *endp; + u_char *tmp; + int plen, nlen, len; + JREC *jrec; + + plen = getplen(tagp); + nlen = getnlen(tagp); + + len = plen + nlen; + + ptr = tagp + DOUONBLKSIZENUMBER + nlen; + + endp = tagp + getsize(tagp); + + for ( ; ptr < endp ; ptr = tmp + 1) { + for (tmp = ptr + 1; *tmp != HINSIBLKTERM ; ) { + switch(*tmp & KANJIMODEMASK) { + case ZENHIRAASSYUKU: + tmp += setj_norm1(tmp); break; + + case ZENKATAASSYUKU: + tmp += setj_norm1(tmp); break; + + case OFFSETASSYUKU: + tmp += setj_ofs(tmp); break; + + case AIATTRIBUTE: + tmp += setj_atrb(tmp); break; + + case LEADINGHANKAKU: + tmp += setj_norm2(tmp); break; + + case KANJIASSYUKU: + tmp += setj_knj(tmp); break; + + case KANJISTREND: + tmp++; break; + + default: + tmp += setj_norm2(tmp); + } + } + + if (gram != *ptr) continue; + + if (!(jrec = argjrec((int)(rec -> jlen + len), rec))) continue; + + jrec -> jseg = prevseg; + jrec -> jofsst = ptr - dicbuf; + jrec -> jofsed = tmp - dicbuf; + jrec -> dicid = curdict->dicid; + } +} + + + +void +setcrec(u_char *tagp) +{ + JREC *rec; + + if (!(rec = argjrec((int)ClYomiLen(tagp), (JREC *)NULL))) return; + + rec -> jofsst = tagp - CLSTUDYDICT; + rec -> class = C_BUNSETU; + rec -> hinsi = ClGramCode(tagp); +} diff --git a/lib/sj3core/setkouho.c b/lib/sj3core/setkouho.c new file mode 100644 index 0000000..bda9799 --- /dev/null +++ b/lib/sj3core/setkouho.c @@ -0,0 +1,279 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: setkouho.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:20 $ + */ + +#include "sj_euc.h" +#include "sj_kcnv.h" +#include "sj_hinsi.h" + +#include "sj_kanakan.h" + +static int hiraknj(); + +void +setkouho(CLREC *clrec, TypeDicOfs offs, int mode) +{ + JREC *jrec; + KHREC *kptr; + u_char *fptr; + int flg; + int i; + + if (khcount >= MAXKOUHONUMBER) return; + + jrec = clrec -> jnode; + + kptr = &kouhotbl[khcount++]; + + if (mode && !offs) nkhcount++; + + kptr -> clrec = clrec; + kptr -> offs = offs; + kptr -> rank = 0; + kptr -> styno = 0; + kptr -> mode = (u_char)mode; + + if (jrec -> flags & JFLAG_KA) { + kptr -> ka_fg = 1; + kptr -> ka_kj = 1; + flg = 1; + } + else if (clrec -> fzk_ka) { + kptr -> ka_fg = 1; + kptr -> ka_kj = 0; + flg = 2; + } + else { + kptr -> ka_fg = 0; + kptr -> ka_kj = 0; + flg = 0; + } + + kptr -> sttfg = kptr -> sttkj = 0; + + if (!(fptr = Settou_ptr(jrec -> sttofs))) return; + + if (!SttHiraKnj(fptr)) return; + + kptr -> sttfg = 1; + kptr -> sttkj = 0; + + i = hiraknj(dicbuf + offs); + if (offs > 1 && (i == 2 || i == 3)) return; + + if (khcount >= MAXKOUHONUMBER) return; + + kptr++; + khcount++; + + if (mode && !offs) nkhcount++; + + kptr -> clrec = clrec; + kptr -> offs = offs; + kptr -> rank = 0; + kptr -> styno = 0; + kptr -> mode = (u_char)mode; + + kptr -> sttfg = 1; + kptr -> sttkj = 1; + + switch (flg) { + case 1: kptr -> ka_fg = kptr -> ka_kj = 1; break; + case 2: kptr -> ka_fg = 1; kptr -> ka_kj = 0; break; + default: kptr -> ka_fg = kptr -> ka_kj = 0; break; + } +} + + + +void +ph_setkouho(CLREC *clrec, TypeDicOfs offs, STDYIN *sptr) +{ + JREC *jrec; + u_char *p; + + if (sptr) { + stdytop = sptr; + kouhotbl[0].styno = sptr -> styno; + kouhotbl[0].sttkj = sptr -> sttkj; + } + else { + kouhotbl[0].styno = -1; + kouhotbl[0].sttkj = 0; + } + + kouhotbl[0].clrec = clrec; + kouhotbl[0].offs = offs; + kouhotbl[0].rank = 0; + + kouhotbl[0].mode = sel_sjmode(jrec = clrec -> jnode); + + kouhotbl[0].sttfg = (u_char) + ((p = Settou_ptr(jrec->sttofs)) ? (SttHiraKnj(p)?1:0) : 0); + + if (jrec -> flags & JFLAG_KA) { + kouhotbl[0].ka_fg = + kouhotbl[0].ka_kj = 1; + } + else if (clrec -> fzk_ka) { + kouhotbl[0].ka_fg = 1; + kouhotbl[0].ka_kj = 0; + } + else { + kouhotbl[0].ka_fg = + kouhotbl[0].ka_kj = 0; + } + + khcount = 1; +} + + + +static int +hiraknj(u_char *p) +{ + char flg = TRUE; + int i; + int result; + + do { + if (p[codesize(*p)] == KANJISTREND) flg = FALSE; + switch(*p & KANJIMODEMASK) { + case ZENHIRAASSYUKU: + result = hiraknj_hask(p, &i); break; + + case ZENKATAASSYUKU: + result = hiraknj_kask(p, &i); break; + + case OFFSETASSYUKU: + result = hiraknj_ofs(p, &i); break; + + case AIATTRIBUTE: + result = hiraknj_atrb(p, &i); break; + + case LEADINGHANKAKU: + result = hiraknj_norm(p, &i); break; + + case KANJIASSYUKU: + result = hiraknj_knj(p, &i); break; + + default: + result = hiraknj_hira(p, &i); + } + + if (result) return result; + + p += i; + } while (flg); + + return 0; +} + + + +int +hiraknj_atrb(u_char *p, int *len) +{ + *len = 2; + return 0; +} + + + +int +hiraknj_ofs(u_char *p, int *len) +{ + *len = 2; + return hiraknj(dicbuf + ((*p & KANJICODEMASK) << 8) + *(p + 1)); +} + + + +int +hiraknj_knj(u_char *p, int *len) +{ + *len = 1; + return hiraknj(askknj[*p & KNJASSYUKUMASK]); +} + + + +int +hiraknj_hask(u_char *p, int *len) +{ + *len = 1; + return 2; +} + + + +int +hiraknj_kask(u_char *p, int *len) +{ + *len = 1; + return 3; +} + + + +int hiraknj_norm(u_char *p, int *len) +{ + *len = codesize(*p); + return 1; +} + + + +int +hiraknj_hira(u_char *p, int *len) +{ + u_char ch; + + *len = codesize(*p); + ch = *(p + 1); + + switch (*p) { + case 0x24: + if (ch >= 0x21 && ch <= 0x73) return 2; + return 1; + + case 0x25: + if (ch >= 0x21 && ch <= 0x76) return 3; + return 1; + + default: + break; + } + return 1; +} diff --git a/lib/sj3core/setubi.c b/lib/sj3core/setubi.c new file mode 100644 index 0000000..202ed63 --- /dev/null +++ b/lib/sj3core/setubi.c @@ -0,0 +1,83 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: setubi.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:22 $ + */ + + + +#include "sj_kcnv.h" +#include "sj_hinsi.h" + +#include "sj_kanakan.h" + +u_char* +getstb(TypeGram hinsi) +{ + if (hinsi < MEISI_1 || hinsi > TIMEI) return NULL; + + return Stbadr(hinsi); +} + + +void +setubi(JREC *rec, u_char *stbtbl) +{ + u_char *stb; + u_char *yptr; + u_char *sptr; + int slen; + JREC *new; + int cmp; + + stb = stbtbl--; + + yptr = cnvstart + rec -> jlen; + + for ( ; *stb ; stb = sptr + slen + StbKnjLen(stb)) { + + slen = StbYomiLen(stb); + sptr = StbYomiTop(stb); + + cmp = sstrncmp(yptr, sptr, slen); + + if (cmp == OVER || cmp == PARTLY) break; + + if ((cmp != MATCH) || isdpnd(*(yptr + slen))) continue; + + if (!(new = argjrec((int)(rec -> jlen + slen), rec))) continue; + + new -> stbofs = (u_char)(stb - stbtbl); + new -> flags |= StbBakeru(stb) ? JFLAG_KA : 0; + } +} + diff --git a/lib/sj3core/sj2code.c b/lib/sj3core/sj2code.c new file mode 100644 index 0000000..e11e232 --- /dev/null +++ b/lib/sj3core/sj2code.c @@ -0,0 +1,132 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj2code.c,v $ + * $SonyRevision: 1.2 $ + * $SonyDate: 1995/07/21 05:22:51 $ + */ + + + + +#include "sj_euc.h" +#include "sj_kcnv.h" +#include "sj_yomi.h" + +#include "sj_kanakan.h" + +int +sj2cd_chr(u_char *euc, u_char *yomi) +{ + u_char chr; + + if ((chr = *euc++) == EUC_a1) { + chr = *euc; + if (chr < EUC_START) + *yomi = Y_ZENKAKU; + else if (chr <= EUC_END) + *yomi = Kigou[chr - EUC_START]; + else + *yomi = Y_ZENKAKU; + } else if (chr == EUC_a2) { + chr = *euc; + + if (chr < EUC_START) + *yomi = Y_ZENKAKU; + else if (chr <= EUC_END_KIGOU) + *yomi = Kigou[chr - EUC_START + 94]; + else + *yomi = Y_ZENKAKU; + } else if (chr == EUC_a3) { + chr = *euc; + if (chr < EUC_0) + *yomi = Y_ZENKAKU; + else if (chr <= EUC_END_0) + *yomi = chr - EUC_0 + N_0; + else if (chr < EUC_A) + *yomi = Y_ZENKAKU; + else if (chr <= EUC_END_A) + *yomi = chr - EUC_A + A_A; + else if (chr < EUC_a) + *yomi = Y_ZENKAKU; + else if (chr <= EUC_END_a) + *yomi = chr - EUC_a + A_a; + else + *yomi = Y_ZENKAKU; + } else if (chr == EUC_a4) { + chr = *euc; + if (chr < EUC_START) + *yomi = Y_ZENKAKU; + else if (chr <= EUC_END_HIRA) + *yomi = chr - EUC_START + _XA; + else + *yomi = Y_ZENKAKU; + } else if (chr == EUC_a5) { + chr = *euc; + if (chr == EUC_VU) + *yomi = _VU; + else if (chr == EUC_XKA) + *yomi = _XKA; + else if (chr == EUC_XKE) + *yomi = _XKE; + else + *yomi = Y_ZENKAKU; + } + else { + + if (!(chr & 0x80)) { + *yomi = Y_HANKAKU; + return 1; + } else if (chr == SS2) { + *yomi = Y_HANKAKU; + } else if (chr == SS3) { + *yomi = Y_ZENKAKU; + return 3; + } else + *yomi = Y_ZENKAKU; + } + + return 2; +} + + + +int +sj2cd_str(u_char *euc, u_char *yomi, int len) +{ + + if (!len--) return FALSE; + + + while (*euc && len--) euc += sj2cd_chr(euc, yomi++); + *yomi = 0; + + return *euc ? FALSE : TRUE; +} diff --git a/lib/sj3core/skiphblk.c b/lib/sj3core/skiphblk.c new file mode 100644 index 0000000..0073dab --- /dev/null +++ b/lib/sj3core/skiphblk.c @@ -0,0 +1,53 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: skiphblk.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:24 $ + */ + +#include "sj_rename.h" +#include "sj_typedef.h" +#include "sj_dict.h" + +#include "sj_kanakan.h" + +u_char * +skiphblk(u_char *ptr) +{ + ptr++; + + while (*ptr != HINSIBLKTERM) ptr = skipkstr(ptr); + + ptr++; + + return ptr; +} + diff --git a/lib/sj3core/skipkstr.c b/lib/sj3core/skipkstr.c new file mode 100644 index 0000000..a762774 --- /dev/null +++ b/lib/sj3core/skipkstr.c @@ -0,0 +1,61 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: skipkstr.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:25 $ + */ + +#include "sj_euc.h" +#include "sj_rename.h" +#include "sj_typedef.h" +#include "sj_const.h" +#include "sj_dict.h" +#include "sj_table.h" + +#include "sj_kanakan.h" + +u_char * +skipkstr(u_char *ptr) +{ + int contf = TRUE, csize; + + do { + csize = codesize(*ptr); + + if (ptr[csize] == KANJISTREND) contf = FALSE; + + ptr += csize; + } while (contf); + + ptr++; + + return ptr; +} diff --git a/lib/sj3core/srchdict.c b/lib/sj3core/srchdict.c new file mode 100644 index 0000000..6ebdbba --- /dev/null +++ b/lib/sj3core/srchdict.c @@ -0,0 +1,156 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: srchdict.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:26 $ + */ + +#include "sj_kcnv.h" + +#include "sj_kanakan.h" + +int +yomicmp(u_char *ptr1, u_char *ptr2, u_char *saml) +{ + int i, j; + int same; + + same = *saml; + + i = getplen(ptr2); + j = getnlen(ptr2); + + if (j == 0) { + ptr2 = get_idxptr(prevseg); + + for (i = same ; i ; i--) + if (*ptr1++ != *ptr2++) return OVER; + + j = sstrlen(ptr2); + } + + else if (i > same) + return CONT; + + else { + if (i < same) same = i; + ptr1 += same; + ptr2 += DOUONBLKSIZENUMBER; + } + + while (j-- > 0) { + if (*ptr1 > *ptr2) { + *saml = same; + return CONT; + } + else if (*ptr1++ < *ptr2++) { + return OVER; + } + same++; + } + + *saml = same; + return MATCH; +} + + +u_char * +srchdict(u_char *tagp) +{ + TypeDicSeg segno; + int cmp; + int maxlen; + + maxlen = (cnvlen > MAXWDYOMILEN) ? MAXWDYOMILEN : cnvlen; + + while ((int)dicinl <= maxlen) { + + + segno = srchidx(prevseg, (int)dicinl); + + (*curdict->getdic)(curdict, segno); + + if (prevseg != segno) { + + prevseg = segno; + + tagp = dicbuf; + } + + else { + + tagp = getntag(tagp); + + if (segend(tagp)) { + + prevseg = ++segno; + + if (segno >= curdict->segunit) return NULL; + + (*curdict->getdic)(curdict, segno); + + tagp = dicbuf; + } + } + + if (tagp == dicbuf) { + get_askknj(); + tagp += *tagp + 1; + } + + while (!segend(tagp)) { + + cmp = yomicmp(cnvstart, tagp, &dicsaml); + + if ((int)dicsaml > maxlen) return NULL; + + if (cmp == OVER) + return NULL; + + else if (cmp == MATCH) { + + if (isdpnd(*(cnvstart + dicsaml))) { + break; + } + + else { + dicinl = dicsaml + 1; + return tagp; + } + } + tagp = getntag(tagp); + } + dicinl = dicsaml + 1; + } + + return NULL; +} + diff --git a/lib/sj3core/srchhead.c b/lib/sj3core/srchhead.c new file mode 100644 index 0000000..7053ac7 --- /dev/null +++ b/lib/sj3core/srchhead.c @@ -0,0 +1,67 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: srchhead.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:28 $ + */ + + + +#include "sj_kcnv.h" +#include "sj_yomi.h" + +#include "sj_kanakan.h" + +int +srchhead() +{ + if (*cnvstart == _O) { + headcode = SETTOU_O; + headlen = 1; + return TRUE; + } + + else if (*cnvstart == _GO) { + headcode = SETTOU_GO; + headlen = 1; + return TRUE; + } + + else if ((*cnvstart == _DA) && (*(cnvstart + 1) == _I)) { + headcode = SETTOU_DAI; + headlen = 2; + return TRUE; + } + + headcode = headlen = 0; + return FALSE; +} + diff --git a/lib/sj3core/srchidx.c b/lib/sj3core/srchidx.c new file mode 100644 index 0000000..6d2e0bc --- /dev/null +++ b/lib/sj3core/srchidx.c @@ -0,0 +1,75 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: srchidx.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:29 $ + */ + +#include "sj_kcnv.h" + +#include "sj_kanakan.h" + +TypeDicSeg +srchidx(TypeDicSeg low, int len) +{ + TypeDicSeg high; + TypeDicSeg mid; + int cmp; + u_char *target; + + if ((high = curdict->segunit - 1) < 1) return 0; + + if (low == (TypeDicSeg)-1) low = 0; + + while (low <= high) { + + mid = (low + high) >> 1; + + target = get_idxptr(mid); + + cmp = istrcmp(cnvstart, target, len, sstrlen(target)); + + if (cmp == OVER) { + high = mid - 1; + } + + else if(cmp != MATCH){ + low = mid + 1; + } + + else { + return mid; + } + } + + return (cmp == OVER && mid != DICSEGBASE) ? mid - 1 : mid; +} + diff --git a/lib/sj3core/srchnum.c b/lib/sj3core/srchnum.c new file mode 100644 index 0000000..f52b756 --- /dev/null +++ b/lib/sj3core/srchnum.c @@ -0,0 +1,606 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: srchnum.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:30 $ + */ + +#include +#include "sj_kcnv.h" +#include "sj_yomi.h" +#include "sj_hinsi.h" +#include "sj_suuji.h" + +#include "sj_kanakan.h" + +static void srch_kurai1(), srch_kurai2(); + +static void +srch_josuu_sub(JREC *jrec, TypeGram gram) +{ + u_char *tagp; + DICTL *dp; + + for (dp = dictlist ; dp ; dp = dp -> next) { + curdict = dp -> dict; + dicinl = 1; + dicsaml = 0; + prevseg = -1; + while (tagp = srchdict(tagp)) setnumrec(tagp, jrec, gram); + } +} + +static void +srch_josuu(JREC *jrec) +{ + u_char *kp; + int klen; + int len; + + if (headcode && headcode != SETTOU_DAI) return; + + kp = cnvstart; + klen = cnvlen; + + cnvstart += (len = jrec -> numlen); + cnvlen -= len; + + srch_josuu_sub(jrec, JOSUUSI); + + if (!headcode) srch_josuu_sub(jrec, JOSUUSI2); + + cnvstart = kp; + cnvlen = klen; +} + +static void +setnrec_sub(u_char *p, u_short flag, int stb) +{ + JREC *rec; + int len1; + int len2; + + len1 = len2 = p - suuji_yptr; + if (headcode) len1 += headlen; + if (stb) len2--; + + if ((int)suuji_len == len2) { + if (suuji_wkeep) { + memcpy((u_char *)suuji_wkeep, (u_char *)suuji_wbuf, + sizeof(suuji_wbuf[0]) * NUMWORDBUF); + } + if (suuji_ukeep) { + memcpy(suuji_ukeep, suuji_ubuf, NUMKETALENGTH); + } + suuji_exit = suuji_keta; + return; + } + + if (rec = argjrec(len1, (JREC *)NULL)) { + rec -> class = suuji_class; + rec -> hinsi = SUUSI; + rec -> sttofs = headcode; + rec -> stbofs = (u_char)stb; + rec -> flags = flag; + rec -> numlen = (u_char)len2; + + if (!stb) srch_josuu(rec); + } +} + +static void +setnrec(u_char *p, u_short flag) +{ + setnrec_sub(p, flag, 0); + + if (!headcode && (*p == Y_S_KIGOU2)) { + setnrec_sub(p + 1, flag, -1); + } +} + +static u_char* +srchtbl(u_char ch, u_char *tbl, int rec, int n) +{ + int high, low, mid; + u_char *p; + + if (!ch) return NULL; + + low = 0; + high = n - 1; + + while (low <= high) { + mid = (low + high) / 2; + p = tbl + mid * rec; + + if (ch == *p) + break; + + else if (ch < *p) + high = mid - 1; + + else + low = mid + 1; + } + + if (low > high) return NULL; + + while (mid-- > 0 && ch == *(p - rec)) p -= rec; + + return p; +} + +static int +isconnect(u_char *cnct, int num) +{ + return (cnct[num / 8] & (0x80 >> (num % 8))); +} + +static int +string_cmp(u_char *s, int l, u_char *d) +{ + u_char *p; + + p = s; + + while (*s && l-- > 0) { + if (*s != *d) return 0; + s++; + d++; + } + + return (s - p); +} + +static int +check_num(u_char *ptr) +{ + int i; + int j; + int k; + int tmp; + int hketa; + int lketa; + int flg = FALSE; + int cnt; + u_short flag; + + memset((u_char *)suuji_wbuf, 0, sizeof(u_short) * NUMWORDBUF); + flag = 0; + + hketa = lketa = cnt = 0; + for (i = suuji_keta ; --i >= 0 ;) { + if (hketa >= 4) return FALSE; + tmp = suuji_ubuf[i]; + if (j = ((tmp >> 6) & 3)) { + if (j < hketa) return FALSE; + if (j > hketa) { + flag |= JFLAG_N01; + do { + suuji_wbuf[hketa] |= (_NUM0<<(lketa*4)); + if (++lketa >= 4) { + lketa = 0; + hketa++; + } + } while (j > hketa); + } + } + k = ((tmp >> 4) & 3); + if (j || k) { + if (k < lketa) return FALSE; + if (k > lketa) { + flag |= JFLAG_N01; + do { + suuji_wbuf[hketa] |= (_NUM0<<(lketa*4)); + lketa++; + } while (k > lketa); + } + flg = TRUE; + } + tmp &= 0x0f; + suuji_wbuf[hketa] |= (tmp << (lketa * 4)); + cnt++; + + j = (1 << tmp); + if (j & NUMBERS1) flag |= JFLAG_NS1; + if (j & NUMBER01) flag |= JFLAG_N01; + if (j & NUMBER23) flag |= JFLAG_N23; + + if (tmp != _NUM0) { + flg = FALSE; + + switch (lketa) { + case 0: + if (tmp == _NUM1) flag |= JFLAG_N_1; + break; + + case 1: + flag |= JFLAG_N10; + break; + } + } + if (++lketa >= 4) { + lketa = 0; + hketa++; + } + } + + if (flg) return FALSE; + + if (suuji_keta == 1 || tmp != _NUM0) flag |= JFLAG_NN0; + + if (hketa) + flag |= (JFLAG_NK4 | JFLAG_NK2); + else if (lketa > 1) + flag |= JFLAG_NK2; + + if (cnt > 1) flag |= JFLAG_NSN; + + setnrec(ptr, flag); + + return TRUE; +} + +static void +srch_number1(u_char *ptr) +{ + u_char ch; + u_char mode; + u_char *p; + int l; + TypeClass cls; + int len; + u_char *tptr; + + if (suuji_keta >= NUMKETALENGTH) return; + + if (!(p = srchtbl((ch = *ptr), Suuji_tbl, SJTBLRECLEN, SJTBLRECNUM))) + return; + + len = suuji_yptr + MAXCLINPUTLEN - ptr; + + for ( ; *SjTblYPos(p) == ch ; p += SJTBLRECLEN) { + if (!(l = string_cmp(SjTblYPos(p), SJTBLYLEN, ptr))) continue; + + if (l > len) continue; + + mode = *SjTblModeP(p); + suuji_ubuf[suuji_keta++] = SjTblNumber(mode); + tptr = ptr + l; + + switch (suuji_class) { + case C_N_ARABIA: + if (!(mode & SJTBLNARABIAF)) break; + + check_num(tptr); + srch_number1(tptr); + srch_kurai2(tptr, (u_char *)NULL); + + break; + + case C_N_SUUJI: + if (mode & (SJTBLNARABIAF | SJTBLNYOMIF)) break; + + check_num(tptr); + srch_number1(tptr); + srch_kurai1(tptr, (u_char *)NULL); + srch_kurai2(tptr, (u_char *)NULL); + + break; + + case C_N_KAZU: + case C_N_NANSUU: + if (mode & SJTBLNNARABIF) break; + if (mode & SJTBLNNANSUUF) { + cls = suuji_class; + suuji_class = C_N_NANSUU; + } + + check_num(tptr); + srch_kurai1(tptr, SjTblCnctP(p)); + srch_kurai2(tptr, SjTblCnctP(p)); + + if (mode & SJTBLNNANSUUF) suuji_class = cls; + break; + + default: + if (mode & SJTBLNARABIAF) { + suuji_class = C_N_ARABIA; + check_num(tptr); + srch_number1(tptr); + srch_kurai2(tptr, (u_char *)NULL); + + suuji_class = C_N_KAZU; + } + else if (mode & SJTBLNYOMIF) { + if (mode & SJTBLNNANSUUF) + suuji_class = C_N_NANSUU; + else + suuji_class = C_N_KAZU; + check_num(tptr); + } + else if (mode & SJTBLNNARABIF) { + suuji_class = C_N_SUUJI; + check_num(tptr); + srch_number1(tptr); + break; + } + else { + suuji_class = C_N_SUUJI; + srch_number1(tptr); + + suuji_class = C_N_KAZU; + check_num(tptr); + } + srch_kurai1(tptr, SjTblCnctP(p)); + srch_kurai2(tptr, SjTblCnctP(p)); + break; + } + + suuji_keta--; + } +} + +static void +srch_kurai1(u_char *ptr, u_char *cnct) +{ + u_char ch; + u_char *p; + int l; + int keta; + int mode; + TypeClass cls; + int len; + u_char *tptr; + + if (!(p = srchtbl((ch = *ptr), Kurai1_tbl, KR1TBLRECLEN, KR1TBLRECNUM))) + return; + + len = suuji_yptr + MAXCLINPUTLEN - ptr; + + for ( ; *Kr1TblYPos(p) == ch ; p += KR1TBLRECLEN) { + if (!(l = string_cmp(Kr1TblYPos(p), KR1TBLYLEN, ptr))) continue; + + if (l > len) continue; + + mode = *Kr1TblModeP(p); + keta = Kr1TblKeta(mode); + tptr = ptr + l; + + if (suuji_class != C_N_KAZU && suuji_class != C_N_NANSUU) { + cls = suuji_class; + suuji_class = (suuji_class == C_N_ARABIA) ? + C_N_ARAKURA : C_N_KANKURA; + suuji_ubuf[suuji_keta - 1] |= (keta << 4); + check_num(tptr); + suuji_class = cls; + suuji_ubuf[suuji_keta - 1] &= 0xcf; + continue; + } + + if (cnct) { + if (!isconnect(cnct, (int)Kr1TblCnct(mode))) continue; + suuji_ubuf[suuji_keta - 1] |= (keta << 4); + } + else { + if (!Kr1TblTop(mode)) continue; + if (suuji_keta >= NUMKETALENGTH) continue; + suuji_ubuf[suuji_keta++] = (_NUM1 | (keta << 4)); + } + + check_num(tptr); + + srch_number1(tptr); + srch_kurai1(tptr, (u_char *)NULL); + srch_kurai2(tptr, Kr1TblCnctP(p)); + + if (cnct) + suuji_ubuf[suuji_keta - 1] &= 0xcf; + else + suuji_keta--; + } +} + +static void +srch_kurai2(u_char *ptr, u_char *cnct) +{ + u_char ch; + u_char *p; + int l; + int keta; + int mode; + TypeClass cls; + int len; + u_char *tptr; + + if ((suuji_ubuf[0] & 0x0f) == _NUM0) return; + + if (!(p = srchtbl((ch = *ptr), Kurai2_tbl, KR2TBLRECLEN, KR2TBLRECNUM))) + return; + + len = suuji_yptr + MAXCLINPUTLEN - ptr; + + for ( ; *Kr2TblYPos(p) == ch ; p += KR2TBLRECLEN) { + if (!(l = string_cmp(Kr2TblYPos(p), KR2TBLYLEN, ptr))) continue; + + if (l > len) continue; + + mode = *Kr2TblModeP(p); + keta = Kr2TblKeta(mode); + tptr = ptr + l; + + if (suuji_class != C_N_KAZU && suuji_class != C_N_NANSUU) { + suuji_ubuf[suuji_keta - 1] |= (keta << 6); + cls = suuji_class; + suuji_class = (suuji_class == C_N_ARABIA) ? + C_N_ARAKURA : C_N_KANKURA; + check_num(tptr); + suuji_class = cls; + suuji_ubuf[suuji_keta - 1] &= 0x3f; + continue; + } + + if (cnct) { + if (!isconnect(cnct, (int)Kr2TblCnct(mode))) continue; + suuji_ubuf[suuji_keta - 1] |= (keta << 6); + } + else { + if (suuji_keta >= NUMKETALENGTH) continue; + suuji_ubuf[suuji_keta++] = (_NUM1 | (keta << 6)); + } + + check_num(tptr); + + srch_number1(tptr); + srch_kurai1(tptr, (u_char *)NULL); + + if (cnct) + suuji_ubuf[suuji_keta - 1] &= 0x3f; + else + suuji_keta--; + } +} + +static void +srch_number2(u_char *p) +{ + u_char ch; + int i; + + suuji_class = (*p == N_0) ? C_N_SUUJILONG : C_N_KAZULONG; + + suuji_keta = suuji_comma = 0; + for (i = 0 ; i < MAXCLINPUTLEN ; i++) { + if ((ch = *p++) == Y_COMMA) { + if (suuji_keta) { + if (suuji_comma) { + if (suuji_comma != 3) break; + } + else { + if (suuji_keta >= 4) break; + if (*suuji_yptr == N_0) break; + } + } + else + break; + + suuji_comma = 1; + ch = *p++; + } + else if (suuji_comma) { + suuji_comma++; + } + + if (suuji_comma > 3) break; + + if (!(Chrtbl[ch] & NUMBER)) break; + + if (suuji_keta < NUMKETALENGTH) { + suuji_ubuf[suuji_keta] = ch - N_0 + _NUM0; + } + suuji_keta++; + + if (!suuji_comma && suuji_keta > NUMKETALENGTH) { + setnrec(p, 0); + } + else if (suuji_comma == 3) { + if (suuji_keta <= NUMKETALENGTH) { + suuji_class = C_N_ARACMA; + check_num(p); + } + else { + suuji_class = C_N_KAZULCMA; + setnrec(p, 0); + } + } + } +} + +static void +srchnum_sub(u_char *p) +{ + suuji_yptr = p; + + suuji_comma = suuji_keta = 0; + suuji_class = 0; + srch_number1(p); + + suuji_keta = 0; + suuji_class = C_N_KAZU; + srch_kurai1(p, (u_char *)NULL); + if (suuji_exit) return; + + srch_number2(p); +} + +void +srchnum() +{ + suuji_len = suuji_exit = 0; + + srchnum_sub(cnvstart); + + if (!headcode && (*cnvstart == Y_S_KIGOU1)) { + headcode = SETTOU_KIGOU; + headlen = 1; + + srchnum_sub(cnvstart + 1); + + headcode = headlen = 0; + } +} + +void +setwdnum(u_char *p, int len, u_short *wd) +{ + suuji_len = (u_char)len; + suuji_wkeep = wd; + suuji_ukeep = NULL; + headcode = headlen = 0; + suuji_exit = 0; + + srchnum_sub(p); +} + +int +setucnum(u_char *p, int len, u_char *ud) +{ + suuji_len = (u_char)len; + suuji_wkeep = NULL; + suuji_ukeep = ud; + headcode = headlen = 0; + suuji_exit = 0; + + srchnum_sub(p); + + return (int)suuji_exit; +} + diff --git a/lib/sj3core/sstrcmp.c b/lib/sj3core/sstrcmp.c new file mode 100644 index 0000000..ef8a5c2 --- /dev/null +++ b/lib/sj3core/sstrcmp.c @@ -0,0 +1,50 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sstrcmp.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:31 $ + */ + + + +#include "sj_rename.h" +#include "sj_typedef.h" + +#include "sj_kanakan.h" + +int +sstrcmp(u_char *src, u_char *dst) +{ + for ( ; *src ; src++, dst++) + if (*src != *dst) break; + + return (*src - *dst); +} diff --git a/lib/sj3core/sstrlen.c b/lib/sj3core/sstrlen.c new file mode 100644 index 0000000..335838b --- /dev/null +++ b/lib/sj3core/sstrlen.c @@ -0,0 +1,54 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sstrlen.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:32 $ + */ + + + +#include "sj_rename.h" +#include "sj_typedef.h" + +#include "sj_kanakan.h" + +int +sstrlen(u_char *ptr) +{ + u_char *head; + + head = ptr; + + while (*ptr) ptr++; + + return (ptr - head); +} + diff --git a/lib/sj3core/sstrncmp.c b/lib/sj3core/sstrncmp.c new file mode 100644 index 0000000..906bb96 --- /dev/null +++ b/lib/sj3core/sstrncmp.c @@ -0,0 +1,63 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sstrncmp.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:33 $ + */ + + + +#include "sj_rename.h" +#include "sj_typedef.h" +#include "sj_const.h" + +#include "sj_kanakan.h" + +int +sstrncmp(u_char *src, u_char *dst, int len) +{ + + while (len-- > 0) { + + if (*src > *dst) + return CONT; + + if (*src < *dst) { + if (!*src) return PARTLY; + return OVER; + } + src++; + dst++; + } + + return MATCH; +} + diff --git a/lib/sj3core/stbtbl.c b/lib/sj3core/stbtbl.c new file mode 100644 index 0000000..bc06415 --- /dev/null +++ b/lib/sj3core/stbtbl.c @@ -0,0 +1,147 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: stbtbl.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:34 $ + */ + + + + +#include "sj_rename.h" +#include "sj_typedef.h" +#include "sj_yomi.h" +#include "sj_hinsi.h" + +#include "sj_kanakan.h" + +static u_char name_stb[] = { + 0x22, MEISI_1, _KU, _NN, + 0xb7, 0xaf, + 0x22, MEISI_1, _SA, _MA, + 0xcd, 0xcd, + 0x24, MEISI_1, _SA, _NN, + 0xa4, 0xb5, 0xa4, 0xf3, + 0x12, MEISI_1, _SI, + 0xbb, 0xe1, + 0x36, MEISI_1, _TI, _XYA, _NN, + 0xa4, 0xc1, 0xa4, 0xe3, 0xa4, 0xf3, + 0x22, MEISI_1, _DO, _NO, + 0xc5, 0xc2, + 0x00 +}; + +static u_char timei_stb[] = { + 0x22, MEISI_1, _E, _KI, + 0xb1, 0xd8, + 0x44, MEISI_1, _E, _KI, _HA, _TU, + 0xb1, 0xd8, 0xc8, 0xaf, + 0x44, MEISI_1, _E, _KI, _YU, _KI, + 0xb1, 0xd8, 0xb9, 0xd4, + 0x22, MEISI_1, _GU, _NN, + 0xb7, 0xb4, + 0x12, MEISI_1, _SI, + 0xbb, 0xd4, + 0x32, MEISI_1, _TI, _XYO, _U, + 0xc4, 0xae, + 0x22, MEISI_1, _HA, _TU, + 0xc8, 0xaf, + 0x22, MEISI_1, _MA, _TI, + 0xc4, 0xae, + 0x22, MEISI_1, _MU, _RA, + 0xc2, 0xbc, + 0x00 +}; + +static u_char meisi_stb[] = { + 0x44, MEISI_6, _A, _TU, _KA, _I, + 0xb0, 0xb7, 0xa4, 0xa4, + 0x1a, MEISI_6, _KA, + 0xb2, 0xbd, + 0x22, MEISI_8, _TE, _KI, + 0xc5, 0xaa, + 0x56, FUKUSI_1, _NI, _TO, _MO, _NA, _I, + 0xa4, 0xcb, 0xc8, 0xbc, 0xa4, 0xa4, + 0x56, FUKUSI_1, _NI, _TO, _MO, _NA, _U, + 0xa4, 0xcb, 0xc8, 0xbc, 0xa4, 0xa6, + 0x22, MEISI_8, _HU, _U, + 0xc9, 0xf7, + 0x00 +}; + +static u_char sahen_stb[] = { + 0x44, MEISI_6, _A, _TU, _KA, _I, + 0xb0, 0xb7, 0xa4, 0xa4, + 0x1a, MEISI_6, _KA, + 0xb2, 0xbd, + 0x12, MEISI_11, _GO, + 0xb8, 0xe5, + 0x22, MEISI_11, _GO, _TO, + 0xcb, 0xe8, + 0x32, MEISI_11, _ZI, _XYO, _U, + 0xbe, 0xe5, + 0x32, MEISI_11, _TI, _XYU, _U, + 0xc3, 0xe6, + 0x22, MEISI_8, _TE, _KI, + 0xc5, 0xaa, + 0x56, FUKUSI_1, _NI, _TO, _MO, _NA, _I, + 0xa4, 0xcb, 0xc8, 0xbc, 0xa4, 0xa4, + 0x56, FUKUSI_1, _NI, _TO, _MO, _NA, _U, + 0xa4, 0xcb, 0xc8, 0xbc, 0xa4, 0xa6, + 0x22, MEISI_8, _HU, _U, + 0xc9, 0xf7, + 0x22, MEISI_11, _MA, _E, + 0xc1, 0xb0, + 0x00 +}; + +static u_char human_stb[] = { + 0x24, MEISI_1, _SA, _NN, + 0xa4, 0xb5, 0xa4, 0xf3, + 0x00 +}; + +static u_char ippan_stb[] = { + 0x56, FUKUSI_1, _NI, _TO, _MO, _NA, _I, + 0xa4, 0xcb, 0xc8, 0xbc, 0xa4, 0xa4, + 0x56, FUKUSI_1, _NI, _TO, _MO, _NA, _U, + 0xa4, 0xcb, 0xc8, 0xbc, 0xa4, 0xa6, + 0x00 +}; + +u_char *stbadr[] = { + 0, + ippan_stb, ippan_stb, ippan_stb, meisi_stb, sahen_stb, + sahen_stb, sahen_stb, meisi_stb, meisi_stb, meisi_stb, + ippan_stb, ippan_stb, human_stb, ippan_stb, ippan_stb, + ippan_stb, ippan_stb, ippan_stb, 0, 0, + name_stb, name_stb, 0, timei_stb, +}; diff --git a/lib/sj3core/stttbl.c b/lib/sj3core/stttbl.c new file mode 100644 index 0000000..2ed5182 --- /dev/null +++ b/lib/sj3core/stttbl.c @@ -0,0 +1,90 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: stttbl.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:37 $ + */ + + + + +#include "sj_rename.h" +#include "sj_typedef.h" + +#include "sj_kanakan.h" + +static u_char o_settou[] = { + 0xA1, 0xb8, 0xe6, 0xa4, 0xaa +}; + +static u_char go_settou[] = { + 0xA1, 0xb8, 0xe6, 0xa4, 0xb4 +}; + +static u_char dai_settou[] = { + 0x22, 0xc2, 0xe8, 0xc2, 0xe8 +}; + +static u_char kigou_settou[] = { + 0x01 +}; + + + +u_char *settou_ptr[] = { + NULL, o_settou, go_settou, dai_settou, kigou_settou +}; + + + +u_char scncttbl[2][24] = { + { + + 0x48, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + + 0x18, 0x18, 0x00, 0x00, 0x1f, 0xf0, 0x00, 0xff, + + + 0x00, 0x1f, 0xf0, 0x00, 0xff, 0x00, 0x00, 0x00 + }, + + { + + 0x22, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + + 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + + + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + } +}; diff --git a/lib/sj3core/study.c b/lib/sj3core/study.c new file mode 100644 index 0000000..29c7d3b --- /dev/null +++ b/lib/sj3core/study.c @@ -0,0 +1,188 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: study.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:38 $ + */ + +#include +#include "sj_kcnv.h" + +#include "sj_kanakan.h" + +int +study(STDYOUT *stdy) +{ + STDYOUT outp; + STDYIN *p1; + STDYIN *p2; + int wcnt; + int ret; + TypeDicSeg seg; + TypeDicOfs ofs; + TypeStyNum nm; + TypeStyNum wi; + + if (!StudyExist()) return STUDYNODICT; + + memcpy((u_char *)&outp, (u_char *)stdy, sizeof(outp)); + + if (outp.stdy1.offset == 0) return STUDYNOTSTUDY; + + p1 = srchstdy(outp.stdy1.seg, outp.stdy1.offset, outp.stdy1.dicid); + if (p1) { + nm = p1 -> styno; + + for (wcnt = STUDYCOUNT, p2 = STUDYDICT ; wcnt-- ; p2++) { + if (p2 -> styno < nm) p2 -> styno++; + } + + p1 -> styno = 1; + + if (outp.sttfg) p1 -> sttkj = outp.stdy1.sttkj; + if (outp.ka_fg) p1 -> ka_kj = outp.stdy1.ka_kj; + + p1 -> nmflg = outp.stdy1.nmflg; + + putstydic(); + + return STUDYNORMEND; + } + + + if (STUDYCOUNT >= STUDYMAX) { + + p1 = STUDYDICT; p2 = NULL; wi = 0; + for (wcnt = STUDYMAX ; wcnt-- ; p1++) { + if ((nm = p1 -> styno + 1) > wi) { + wi = nm; + p2 = p1; + } + + p1 -> styno = nm; + } + + if (p2) { + mvmemi((u_char *)(p2 + 1), (u_char *)p2, + (STUDYTAIL - p2) * STUDYRECSIZE); + STUDYCOUNT -= 1; + } + else + return STUDYERROR; + + ret = STUDYFULLAREA; + } + else { + p1 = STUDYDICT; + for (wcnt = STUDYCOUNT ; wcnt-- ; p1++) p1 -> styno++; + + ret = STUDYNORMEND; + } + + p1 = STUDYDICT; + seg = outp.stdy1.seg; + for (wcnt = STUDYCOUNT ; wcnt && (p1 -> seg < seg) ; ) { + wcnt--; p1++; + } + + ofs = outp.stdy1.offset; + while (wcnt-- && (p1 -> seg == seg)) { + if (p1 -> offset > ofs) break; + p1++; + } + + mvmemd((u_char *)(STUDYTAIL - 1), (u_char *)STUDYTAIL, + (u_char *)(STUDYTAIL - 1) - (u_char *)p1); + p1 -> offset = outp.stdy1.offset; + p1 -> seg = outp.stdy1.seg; + p1 -> dicid = outp.stdy1.dicid; + p1 -> styno = 1; + p1 -> sttkj = (outp.sttfg) ? outp.stdy1.sttkj : 0; + p1 -> ka_kj = (outp.ka_fg) ? outp.stdy1.ka_kj : 0; + p1 -> nmflg = outp.stdy1.nmflg; + STUDYCOUNT += 1; + + putstydic(); + + return ret; +} + +STDYIN * +srchstdy(TypeDicSeg seg, TypeDicOfs ofs, TypeDicID dicid) +{ + int high; + int mid; + int low; + STDYIN *ptr; + + + if (!StudyExist()) return NULL; + + if (!STUDYCOUNT || !ofs) return NULL; + + low = 0; + high = STUDYCOUNT - 1; + + for ( ; ; ) { + mid = ((low + high) >> 1); + + if (STUDYDICT[mid].seg > seg) + high = mid - 1; + + else if (STUDYDICT[mid].seg < seg) + low = mid + 1; + + else + break; + + if (low > high) return NULL; + } + + low = mid + 1; + ptr = &STUDYDICT[mid]; + while (ptr -> seg == seg) { + if (ptr -> offset < ofs) break; + if (ptr -> dicid == dicid && ptr -> offset == ofs) return ptr; + if (!mid--) break; + ptr--; + } + + ptr = &STUDYDICT[low]; + mid = STUDYCOUNT - low; + while (mid-- && ptr -> seg == seg) { + if (ptr -> offset > ofs) break; + if (ptr -> dicid == dicid && ptr -> offset == ofs) return ptr; + ptr++; + } + + return NULL; +} + diff --git a/lib/sj3core/suujitbl.c b/lib/sj3core/suujitbl.c new file mode 100644 index 0000000..c032d7a --- /dev/null +++ b/lib/sj3core/suujitbl.c @@ -0,0 +1,196 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: suujitbl.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:39 $ + */ + + + + +#include "sj_const.h" +#include "sj_rename.h" +#include "sj_typedef.h" +#include "sj_yomi.h" +#include "sj_suuji.h" + +#include "sj_kanakan.h" + +#define NA SJTBLNARABIAF +#define NY SJTBLNYOMIF +#define NN SJTBLNNARABIF +#define NS SJTBLNNANSUUF + + + +u_char suuji_tbl[] = { + N_0,_NIL,_NIL, _NUM0 | NA, 0x00, 0x00, + N_1,_NIL,_NIL, _NUM1 | NA, 0xec, 0x07, + N_2,_NIL,_NIL, _NUM2 | NA, 0xec, 0x07, + N_3,_NIL,_NIL, _NUM3 | NA, 0xff, 0x07, + N_4,_NIL,_NIL, _NUM4 | NA, 0xec, 0x07, + N_5,_NIL,_NIL, _NUM5 | NA, 0xec, 0x07, + N_6,_NIL,_NIL, _NUM6 | NA, 0xec, 0xc7, + N_7,_NIL,_NIL, _NUM7 | NA, 0xec, 0x07, + N_8,_NIL,_NIL, _NUM8 | NA, 0xec, 0xc7, + N_9,_NIL,_NIL, _NUM9 | NA, 0xec, 0x07, + _I, _TI, _NIL, _NUM1, 0x00, 0x05, + _I, _XTU,_NIL, _NUM1S | NY, 0x20, 0x02, + _KI,_XYU,_U, _NUM9, 0xec, 0x07, + _KU,_NIL,_NIL, _NUM9 | NY, 0x00, 0x00, + _GO,_NIL,_NIL, _NUM5, 0xec, 0x07, + _GO,_U, _NIL, _NUM5 | NN, 0x00, 0x00, + _SA,_NN, _NIL, _NUM3, 0xd3, 0x07, + _SI,_NIL,_NIL, _NUM4 | NY, 0x80, 0x00, + _SI,_I, _NIL, _NUM4 | NN, 0x00, 0x00, + _SI,_TI, _NIL, _NUM7, 0xec, 0x07, + _SU,_U, _NIL, _NUMS | NY | NS, 0xec, 0x07, + _ZE,_RO, _NIL, _NUM0 | NN, 0x00, 0x00, + _NA,_NA, _NIL, _NUM7, 0xec, 0x07, + _NA,_NN, _NIL, _NUMN | NY | NS, 0xf3, 0x07, + _NI,_NIL,_NIL, _NUM2, 0xec, 0x07, + _NI,_I, _NIL, _NUM2 | NN, 0x00, 0x00, + _HA,_TI, _NIL, _NUM8, 0xc0, 0x05, + _HA,_XTU,_NIL, _NUM8 | NY, 0x20, 0xc2, + _MA,_RU, _NIL, _NUM0 | NN, 0x00, 0x00, + _YO,_NIL,_NIL, _NUM4 | NY, 0x00, 0x00, + _YO,_NN, _NIL, _NUM4, 0xec, 0x07, + _RE,_I, _NIL, _NUM0 | NN, 0xec, 0x00, + _RO,_KU, _NIL, _NUM6, 0xe0, 0x07, + _RO,_XTU,_NIL, _NUM6 | NY, 0x00, 0xc2, + 0 +}; + + + +u_char kurai1_tbl[] = { + _ZI,_XYU,_U, (1<<4)+0+KR1TBLTOPF, 0x05, + _ZI,_XYU,_XTU, (1<<4)+1+KR1TBLTOPF, 0x02, + _SE,_NN, _NIL, (3<<4)+2+KR1TBLTOPF, 0x07, + _ZE,_NN, _NIL, (3<<4)+3, 0x05, + _HI,_XYA,_KU, (2<<4)+4+KR1TBLTOPF, 0x07, + _HI,_XYA,_XTU, (2<<4)+5+KR1TBLTOPF, 0x02, + _BI,_XYA,_KU, (2<<4)+6, 0x07, + _BI,_XYA,_XTU, (2<<4)+7, 0x00, + _PI,_XYA,_KU, (2<<4)+8, 0x07, + _PI,_XYA,_XTU, (2<<4)+9, 0x00, + 0 +}; + + + +u_char kurai2_tbl[] = { + _O, _KU, _NIL, (2<<4)+13, + _TI,_XYO,_U, (3<<4)+14, + _MA,_NN, _NIL, (1<<4)+15, + 0 +}; + + + +u_char num1tbl[] = { + 0xa3, 0xb0, + 0xa3, 0xb1, + 0xa3, 0xb2, + 0xa3, 0xb3, + 0xa3, 0xb4, + 0xa3, 0xb5, + 0xa3, 0xb6, + 0xa3, 0xb7, + 0xa3, 0xb8, + 0xa3, 0xb9, + 0xa3, 0xb1, + 0xbf, 0xf4, + 0xb2, 0xbf +}; + + + +u_char num2tbl[] = { + 0xa1, 0xbb, + 0xb0, 0xec, + 0xc6, 0xf3, + 0xbb, 0xb0, + 0xbb, 0xcd, + 0xb8, 0xde, + 0xcf, 0xbb, + 0xbc, 0xb7, + 0xc8, 0xac, + 0xb6, 0xe5, + 0xb0, 0xec, + 0xbf, 0xf4, + 0xb2, 0xbf +}; + + + +u_char num3tbl[] = { + 0xce, 0xed, + 0xb0, 0xed, + 0xc6, 0xf5, + 0xbb, 0xb2, + 0xbb, 0xcd, + 0xb8, 0xde, + 0xcf, 0xbb, + 0xbc, 0xb7, + 0xc8, 0xac, + 0xb6, 0xe5, + 0xb0, 0xed, + 0xbf, 0xf4, + 0xb2, 0xbf +}; + + + +u_char num4tbl[] = { + 0xc0, 0xe9, + 0xc9, 0xb4, + 0xbd, 0xbd, + 0 +}; + + + +u_char num5tbl[] = { + 0xc0, 0xe9, + 0xc9, 0xb4, + 0xbd, 0xa6, + 0 +}; + + + +u_char num6tbl[] = { + 0xc3, 0xfb, + 0xb2, 0xaf, + 0xcb, 0xfc, + 0 +}; diff --git a/lib/sj3core/terminat.c b/lib/sj3core/terminat.c new file mode 100644 index 0000000..cfe8219 --- /dev/null +++ b/lib/sj3core/terminat.c @@ -0,0 +1,72 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: terminat.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:40 $ + */ + + + +#include "sj_kcnv.h" +#include "sj_right.h" + +#include "sj_kanakan.h" + +int +terminate(TypeCnct right, u_char *yomi) +{ + u_char ch; + + + if ((yomi > cnvstart) && (Chrtbl[*(yomi - 1)] & NUMBER)) + return TRUE; + + ch = *yomi; + if (Termtbl[right] & T_SHUUJO) { + + if (!ch) return TRUE; + + if (Chrtbl[ch] & FZKTOP) return FALSE; + + if (!isdpnd(ch)) return SHU; + } + + if (Termtbl[right] & T_KANOU) { + + if (ch && (Chrtbl[ch] & FZKTOP)) return FALSE; + + if (!isdpnd(ch)) return TRUE; + } + + + return FALSE; +} + diff --git a/lib/sj3core/termtbl.c b/lib/sj3core/termtbl.c new file mode 100644 index 0000000..0df8d61 --- /dev/null +++ b/lib/sj3core/termtbl.c @@ -0,0 +1,327 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: termtbl.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:42 $ + */ + + + +#include "sj_rename.h" +#include "sj_typedef.h" +#include "sj_const.h" +#include "sj_prty.h" + +#include "sj_kanakan.h" + +u_char termtbl[] = { + 0, + T_KANOU + P_JOSHI_B, + T_KANOU + P_JOSHI_A, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_B, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_B, + T_KANOU + 8, + T_KANOU + P_JOSHI_B, + + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_B, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_E, + T_KANOU + P_JOSHI_B, + 0 + P_FUKA, + 0 + P_FUKA, + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + 0 + P_FUKA, + T_KANOU + P_RENYOU_J, + T_KANOU + P_RENYOU_J, + T_KANOU + P_RENYOU_J, + T_KANOU + P_RENYOU_J, + + T_KANOU + P_RENYOU_M, + T_KANOU + P_RENYOU_M, + T_KANOU + P_RENYOU_M, + T_KANOU + P_RENYOU_M, + T_KANOU + P_RENYOU_M, + T_KANOU + P_RENYOU_M, + 0, + 0, + 0, + T_KANOU + P_RENYOU_J, + + T_KANOU + P_JOSHI_B, + T_KANOU + P_JOSHI_C, + T_KANOU + P_RENYOU_J, + 0 + P_FUKA, + 0 + P_FUKA, + 0 + P_FUKA, + 0 + P_FUKA, + 0 + P_FUKA, + 0 + P_FUKA, + 0 + P_FUKA, + + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + 0 + P_FUKA, + T_KANOU + P_JOSHI_C, + T_KANOU + P_RENYOU_F, + + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_F, + T_SHUUJO+ P_SHUUSI, + T_KANOU + P_SHUUSI, + T_KANOU + P_SHUUSI, + T_KANOU + P_SHUUSI, + T_KANOU + P_SHUUSI, + T_KANOU + P_SHUUSI, + + T_KANOU + P_SHUUSI, + T_KANOU + P_SHUUSI, + T_KANOU + RENTAI + 8, + T_KANOU + RENTAI + 10, + T_KANOU + RENTAI + 7, + T_KANOU + P_SHUUSI, + T_KANOU + RENTAI + 7, + T_KANOU + RENTAI + 6, + T_KANOU + P_SHUUSI, + T_KANOU + RENTAI + 7, + + T_KANOU + RENTAI + 6, + T_KANOU + RENTAI + 6, + T_SHUUJO+ RENTAI + 6, + T_KANOU + RENTAI + 6, + T_KANOU + RENTAI + 7, + T_KANOU + RENTAI + 6, + T_KANOU + RENTAI + 6, + T_KANOU + RENTAI + 6, + T_KANOU + RENTAI + 6, + T_KANOU + RENTAI + 6, + + 0 + P_FUKA, + T_KANOU + RENTAI + 6, + 0 + P_FUKA, + T_KANOU + 3, + 0 + P_FUKA, + 0 + P_FUKA, + T_KANOU + P_KAMEI, + T_KANOU + P_MEIREI, + T_KANOU + P_MEIREI, + T_SHUUJO+ P_MEIREI, + T_SHUUJO+ P_MEIREI, + + T_KANOU + P_MEISI, + 0 + P_FUKA, + T_KANOU + P_FUKA, + T_KANOU + P_MEISI, + T_KANOU + P_DAIMEISI, + T_KANOU + P_DAIMEISI, + T_KANOU + P_MEISI, + T_KANOU + P_JOSHI_D, + T_KANOU + P_JOSHI_E, + + T_KANOU + P_SHUUSI, + T_KANOU + P_DAIMEISI, + T_KANOU + P_FUKUSI, + T_KANOU + P_FUKUSI, + T_KANOU + P_SHUUSI, + 0 + P_FUKA, + T_KANOU + P_DAIMEISI, + T_KANOU + 7, + 0 + P_FUKA, + T_SHUUJO+ P_JOSHI_E, + + T_KANOU + P_JOSHI_B, + T_KANOU + P_JOSHI_A, + T_KANOU + P_MEISI, + T_KANOU + P_JOSHI_B, + T_KANOU + P_RENYOU_F, + T_KANOU + P_F_FUKUSI, + 0, + T_KANOU + P_JOSHI_F, + 0, + 0, + + 0 + P_FUKA, + 0 + P_FUKA, + 0 + P_FUKA, + T_KANOU + P_RENYOU_F, + T_KANOU + P_RENYOU_J, + T_KANOU + P_RENYOU_F, + 0 + P_FUKA, + T_KANOU + P_SHUUSI, + T_KANOU + P_SHUUSI, + T_KANOU + P_SHUUSI, + + T_KANOU + P_SHUUSI, + 0 + P_FUKA, + 0 + P_FUKA, + 0 + P_FUKA, + T_SHUUJO+ P_SHUUSI, + T_KANOU + P_JOSHI_C, + T_KANOU + 1, + T_KANOU + P_JOSHI_F, + T_KANOU + P_JOSHI_F, + T_KANOU + P_JOSHI_C, + + T_KANOU + P_JOSHI_C, + T_KANOU + P_KEISIKI, + T_KANOU + P_KEISIKI, + T_KANOU + P_KEISIKI, + T_KANOU + P_KEISIKI, + T_KANOU + P_KEISIKI, + T_KANOU + P_JOSHI_F, + T_KANOU + P_SHUUSI, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_B, + T_KANOU + P_JOSHI_D, + T_KANOU + P_KEISIKI, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + T_KANOU + P_KEISIKI, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + + T_KANOU + P_KEISIKI, + T_KANOU + P_JOSHI_D, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_B, + T_KANOU + P_KEISIKI, + T_KANOU + P_JOSHI_D, + T_KANOU + P_JOSHI_C, + T_KANOU + P_KEISIKI, + T_KANOU + P_KEISIKI, + T_KANOU + P_KEISIKI, + + T_KANOU + P_JOSHI_C, + T_KANOU + P_KEISIKI, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_B, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_D, + T_KANOU + P_KEISIKI, + T_KANOU + P_JOSHI_C, + T_KANOU + P_KEISIKI, + T_KANOU + P_KEISIKI, + + T_KANOU + P_KEISIKI, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + T_KANOU + P_KEISIKI, + T_KANOU + P_KEISIKI, + T_KANOU + P_KEISIKI, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_D, + T_KANOU + P_JOSHI_D, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + + T_SHUUJO+ P_SHUUSI, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + T_KANOU + P_KEISIKI, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + T_KANOU + P_KEISIKI, + T_KANOU + P_KEISIKI, + + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_B, + T_KANOU + P_KEISIKI, + T_KANOU + P_JOSHI_B, + T_KANOU + P_KEISIKI, + T_KANOU + P_KEISIKI, + T_KANOU + P_JOSHI_C, + T_KANOU + P_JOSHI_C, + T_KANOU + P_KEISIKI, + T_KANOU + P_KEISIKI, + + 0 + P_JOSHI_C, + T_KANOU + P_SUUSI, + T_KANOU + P_SETUZOKU, + T_KANOU + P_KANDOU, + T_KANOU + P_SETTOU, + T_KANOU + P_FUKUSI, + T_KANOU + P_FZKKGU, + T_KANOU + P_MEISI, + T_KANOU + P_MEISI, + T_KANOU + P_MEISI, + + T_KANOU + P_MEISI, + 0 + P_SETUBI, + T_KANOU + P_SETUBI, + T_KANOU + P_JOSUUSI, + T_KANOU + P_RENTAISI, + T_KANOU + P_TANKAN +}; diff --git a/lib/sj3core/wakachi.c b/lib/sj3core/wakachi.c new file mode 100644 index 0000000..00eafe5 --- /dev/null +++ b/lib/sj3core/wakachi.c @@ -0,0 +1,130 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: wakachi.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:43 $ + */ + +#include "sj_kcnv.h" +#include "sj_right.h" +#include "sj_hinsi.h" + +#include "sj_kanakan.h" + +void +wakachi() +{ + JREC *jrec; + CLREC *clrec; + + CREC crec[4]; + int count; + u_char *next; + TypeCnct right; + int i; + int maxlen; + + free_jall(maxjptr); + maxjptr = NULL; + + maxlen = (cnvlen > MAXCLINPUTLEN) ? MAXCLINPUTLEN : cnvlen; + + next = cnvstart; + if (Chrtbl[*next] & (TAI_KGU | FZK_KGU)) { + + while (*next && (Chrtbl[*next] & (TAI_KGU | FZK_KGU))) + next++; + + if ((i = next - cnvstart) > maxlen) { + next = cnvstart + maxlen; + i = maxlen; + } + + if (!(jrec = argjrec(i, (JREC *)NULL))) return; + + jrec -> class = C_WAKACHI; + jrec -> hinsi = D_MEISI_1; + + if (Chrtbl[*(next - 1)] & TAI_KGU) + srchfzk(jrec, next, R_DAIMEISI, 0); + } + + else { + + if (!(jrec = argjrec(0, (JREC *)NULL))) return; + jrec -> class = C_WAKACHI; + jrec -> hinsi = MEISI_6; + + while ((int)jrec -> jlen < maxlen) { + + count = setconj((TypeGram)MEISI_6, jrec, crec); + + for (i = count ; i-- > 0 ; ) { + + right = crec[i].right; + gobilen = crec[i].len; + next = cnvstart + jrec->jlen + gobilen; + + if (gobilen) { + if (terminate(right, next)) { + fzk_ka_flg = 0; + setclrec(jrec, next, right); + } + } + else if ((Chrtbl[*next] & NUMBER) + && (jrec -> jlen)) { + fzk_ka_flg = 0; + setclrec(jrec, next, right); + return; + } + + srchfzk(jrec, next, right, 0); + } + + if (maxclptr) break; + + (jrec -> jlen)++; + } + } + + if ((maxclptr) && (Chrtbl[*(cnvstart + jrec -> jlen)] & FZKTOP)) + return; + + if (jrec -> jlen) { + if (clrec = argclrec((int)jrec -> jlen)) { + clrec -> jnode = jrec; + clrec -> right = R_MEISI; + clrec -> kubun = K_TAIGEN; + (jrec -> count)++; + } + } +} + diff --git a/lib/sj3lib/Makefile.am b/lib/sj3lib/Makefile.am new file mode 100644 index 0000000..50e5fc7 --- /dev/null +++ b/lib/sj3lib/Makefile.am @@ -0,0 +1,22 @@ +if BUILDABLE_SJ3CLIENT + +INCLUDES = \ + -I$(top_srcdir)/include/sj3compat \ + -I$(top_srcdir)/include/sj3common \ + -I$(top_srcdir)/include/sj3lib + +lib_LTLIBRARIES = libsj3lib.la + +libsj3lib_la_LDFLAGS = $(top_srcdir)/lib/sj3compat/libsj3compat.la -version-info @LIBSJ3LIB_VERSION_INFO@ + +libsj3lib_la_SOURCES = \ + level1.c \ + sj.c \ + sj_string.c + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = sj3lib.pc + +EXTRA_DIST = sj3lib.pc.in + +endif diff --git a/lib/sj3lib/level1.c b/lib/sj3lib/level1.c new file mode 100644 index 0000000..6f2bdc4 --- /dev/null +++ b/lib/sj3lib/level1.c @@ -0,0 +1,1268 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: level1.c,v $ + * $SonyRevision: 1.4 $ + * $SonyDate: 1995/04/17 10:36:08 $ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Const.h" +#include "sj3cmd.h" +#include "sj3err.h" +#include "sj3lowlib.h" +#include "sj3lib.h" +#include "sj3intern.h" + +#ifndef lint +static char rcsid_sony[] = "$SonyId: level1.c,v 1.4 1995/04/17 10:36:08 notanaka Exp $ SONY;"; +#endif + +int sj3_error_number; +char *sj3_socket_name = SOCKETNAME; +char *sj3_port_name = PORTNAME; +char *sj3_port_number = PORTNUMBER; + +#define BUFFER_SIZE BUFSIZ +static char *af_unix_str = "unix"; +static u_char putbuf[BUFFER_SIZE]; +static u_char getbuf[BUFFER_SIZE]; +static int putpos = 0; +static int getlen = 0; +static int getpos = 0; +static SJ3_CLIENT_ENV *cliptr; +static int server_fd = -1; + +static int sj3_timeout = 0; + +static int INTLEN = sizeof(int); +static int CMDLEN = sizeof(int); +static int ReadErrorFlag = FALSE; + +#define client_init(p) { \ + cliptr = (p); \ + if ((server_fd = cliptr->fd) == -1) { \ + sj3_error_number = SJ3_NotOpened; \ + return ERROR; \ + } \ + } + +static int +put_flush() +{ + int i, j; + u_char *p; + + for (i = putpos, p = putbuf ; i > 0 ; i -= j, p += j) { + if ((j = write(server_fd, p, i)) <= 0) { + shutdown(server_fd, 2); + close(server_fd); + cliptr->fd = server_fd = -1; + sj3_error_number = SJ3_ServerDown; + return(ERROR); + } + } + putpos = 0; + + return 0; +} +static void +put_byte(int c) +{ + putbuf[putpos++] = c; +} +static void +put_word(int c) +{ + put_byte(c >> 8); + put_byte(c & 0xff); +} +static void +put_int(int c) +{ + put_byte(c >> (8 * 3)); + put_byte(c >> (8 * 2)); + put_byte(c >> (8 * 1)); + put_byte(c); +} +static void +put_cmd(int cmd) +{ + ReadErrorFlag = FALSE; + putpos = getlen = 0; + put_int(cmd); +} + +#define put_string put_ndata + +static u_char * +put_ndata(u_char *p, int n) +{ + while (n-- > 0) put_byte(p ? *p++ : 0); + return p; +} + +static int +put_over(int buflen, int n, + u_char *(*func1)(), u_char *str1, int len1, + u_char *(*func2)(), u_char *str2, int len2, + u_char *(*func3)(), u_char *str3, int len3, + u_char *(*func4)(), u_char *str4, int len4) +{ +#define ARGNUM 4 + u_char *(*func[ARGNUM])(); + u_char *data[ARGNUM]; + int len[ARGNUM]; + int i; + + func[0] = func1; data[0] = str1; len[0] = len1; + func[1] = func2; data[1] = str2; len[1] = len2; + func[2] = func3; data[2] = str3; len[2] = len3; + func[3] = func4; data[3] = str4; len[3] = len4; + + for(i = 0; i < n; i++) { + if (len[i] < buflen) { + (*func[i])(data[i], len[i]); + buflen -= len[i]; + } else { + while (len[i] > 0) { + data[i] = (*func[i])(data[i], (len[i] < buflen) ? len[i] : buflen); + if (put_flush() == ERROR) + return ERROR; + len[i] -= buflen; + buflen = BUFFER_SIZE; + } + } + } + if ((buflen != BUFFER_SIZE) && (put_flush() == ERROR)) + return ERROR; + + return 0; +} + +static int +get_buffer() +{ + if (ReadErrorFlag) + return ERROR; + getpos = getlen = 0; + + getlen = read(server_fd, getbuf, sizeof(getbuf)); + if (getlen <=0) { + shutdown(server_fd, 2); + close(server_fd); + cliptr->fd = server_fd = -1; + sj3_error_number = SJ3_ServerDown; + return ERROR; + } + return getlen; +} + +static int +get_byte() +{ + if ((getpos >= getlen) && (get_buffer() == ERROR)) { + ReadErrorFlag = TRUE; + return 0; + } + return(getbuf[getpos++] & 0xff); +} +static int +get_word() +{ + int i; + + i = get_byte(); + return ((i << 8) | get_byte()); +} +static int +get_int() +{ + int i0; + int i1; + int i2; + + i0 = get_byte(); + i1 = get_byte(); + i2 = get_byte(); + return ((i0 << (8*3)) | (i1 << (8*2)) | (i2 << (8*1)) | get_byte()); +} +static u_char * +get_string(u_char *p) +{ + int c; + + do { + *p++ = c = get_byte(); + } while (c); + + return p; +} +static int +get_nstring(u_char *p, int n) +{ + int c; + + c = get_byte(); + while (c) { + if (n > 1) { + *p++ = c; + n--; + } + c = get_byte(); + } + if (n > 0) *p++ = 0; + return n; +} +static u_char * +get_ndata(u_char *p, int n) +{ + while (n-- > 0) + *p++ = get_byte(); + return p; +} +static void +skip_string() +{ + while (get_byte()) ; +} +static void +skip_ndata(int n) +{ + while (n-- > 0) + get_byte(); +} +static int +open_unix() +{ + int fd; + struct sockaddr_un sunix; + + sunix.sun_family = AF_UNIX; + strlcpy(sunix.sun_path, sj3_socket_name, sizeof(sunix.sun_path)); + + if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == ERROR) { + sj3_error_number = SJ3_OpenSocket; + return ERROR; + } + +#ifndef SUN_LEN +#define SUN_LEN(unp) (strlen((unp)->sun_path) + 2) +#endif + + if (connect(fd, (struct sockaddr *)&sunix, SUN_LEN(&sunix)) + == ERROR) { + sj3_error_number = SJ3_ConnectSocket; + return ERROR; + } + + return fd; +} + +void +sj3_set_timeout(int timeout) +{ + sj3_timeout = timeout; +} +static void +connect_timeout() +{ +} + + +static int +open_inet(char *host) +{ + struct hostent *hp; + int fd, ret; + struct addrinfo hints, *res, *res0; + int error; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = PF_UNSPEC; + hints.ai_flags = AI_PASSIVE; + hints.ai_socktype = SOCK_STREAM; + + if ((error = getaddrinfo(host, sj3_port_number, &hints, &res0))) { + sj3_error_number = SJ3_GetHostByName; + return ERROR; + } + + ret = 0; fd = -1; + for (res =res0; res; res = res->ai_next) { + if ((fd = socket(res->ai_family, res->ai_socktype, + res->ai_protocol)) < 0) { + ret = SJ3_OpenSocket; + fd = -1; + continue; + } + + if (sj3_timeout > 0) { + signal(SIGALRM, (void (*)())connect_timeout); + alarm(sj3_timeout); + } + + if (connect(fd, res->ai_addr, res->ai_addrlen) < 0) { + ret = SJ3_ConnectSocket; + close(fd); + fd = -1; + continue; + } + + if (sj3_timeout > 0) { + alarm(0); + signal(SIGALRM, SIG_IGN); + } + break; + } + freeaddrinfo(res0); + + if (fd < 0) + return ret; + + return fd; +} + + + +int +sj3_make_connection(SJ3_CLIENT_ENV *client, char *serv, char *user, char *prog) +{ + char host[MAXHOSTNAMELEN]; + int tmp; + int hostlen, userlen, proglen, datalen, buflen; + int curlen; + char *curdata; + + client->fd = -1; + + if (!serv || *serv == '\0' || !strcmp(serv, af_unix_str)) { + if ((server_fd = open_unix()) == ERROR) return ERROR; + strlcpy(host, af_unix_str, sizeof(host)); + } + else { + if ((server_fd = open_inet(serv)) == ERROR) return ERROR; + gethostname(host, sizeof(host)); + } + + client->fd = server_fd; + client_init(client); + + hostlen = strlen(host) + 1; + userlen = strlen(user) + 1; + proglen = strlen(prog) + 1; + datalen = hostlen + userlen + proglen; + + put_cmd(SJ3_CONNECT); + put_int(SJ3SERV_VERSION_NO); + if (datalen <= (buflen = BUFFER_SIZE - CMDLEN - INTLEN)) { + put_string(host, hostlen); + put_string(user, userlen); + put_string(prog, proglen); + if (put_flush() == ERROR) return ERROR; + } else { + if (put_over(buflen, 3, put_string, host, hostlen, put_string, user, + userlen, put_string, prog, proglen, NULL, NULL, 0) == ERROR) + return ERROR; + } + + if ((tmp = get_int()) == SJ3_DifferentVersion) { + if (ReadErrorFlag) + return ERROR; + put_cmd(SJ3_CONNECT); + put_int(1); + if (datalen <= (buflen = BUFFER_SIZE - CMDLEN - INTLEN)) { + put_string(host, hostlen); + put_string(user, userlen); + put_string(prog, proglen); + if (put_flush() == ERROR) + return ERROR; + } else { + if (put_over(buflen, 3, put_string, host, hostlen, put_string, user, + userlen, put_string, prog, proglen, NULL, NULL, 0) == ERROR) + return ERROR; + } + if (tmp = get_int()) { + sj3_erase_connection(client); + sj3_error_number = tmp; + return ERROR; + } + } else if (tmp && (-2 < tmp)) { + sj3_erase_connection(client); + sj3_error_number = tmp; + return ERROR; + } + cliptr->svr_version = ((tmp)? -tmp : 1); + cliptr->cli_version = SJ3SERV_VERSION_NO; + cliptr->default_char[0] = 0x81; + cliptr->default_char[1] = 0x40; + sj3_error_number = 0; + + if (ReadErrorFlag) + return ERROR; + put_cmd(SJ3_STDYSIZE); + if (put_flush() == ERROR) + return ERROR; + + if (tmp = get_int()) { + sj3_erase_connection(client); + sj3_error_number = tmp; + return ERROR; + } + + cliptr->stdy_size = get_int(); + cliptr->fd = server_fd; + + return ReadErrorFlag ? ERROR : 0; +} +int +sj3_erase_connection(SJ3_CLIENT_ENV *client) +{ + client_init(client); + + put_cmd(SJ3_DISCONNECT); + if (put_flush() == ERROR) + return ERROR; + + sj3_error_number = get_int(); + + close(server_fd); + + cliptr->fd = -1; + if (ReadErrorFlag) + return ERROR; + return sj3_error_number ? ERROR : 0; +} + + + +long +sj3_open_dictionary(SJ3_CLIENT_ENV *client, char *dictname, char *password) +{ + int res; + int dictlen, passlen; + int datalen, buflen; + + client_init(client); + + dictlen = strlen(dictname) + 1; + passlen = ((password) ? strlen(password) : 0) + 1; + datalen = dictlen + passlen; + + put_cmd(SJ3_OPENDICT); + if (datalen < (buflen = BUFFER_SIZE - CMDLEN)) { + put_string(dictname, dictlen); + put_string(password, passlen); + if (put_flush() == ERROR) + return ERROR; + } else { + if (put_over(buflen, 2, put_string, dictname, dictlen, put_string, + password, passlen, NULL, NULL, 0, NULL, NULL, 0) == ERROR) + return ERROR; + } + + if (sj3_error_number = get_int()) + return 0; + res = get_int(); + return ReadErrorFlag ? ERROR : res; +} +int +sj3_close_dictionary(SJ3_CLIENT_ENV *client, long dicid) +{ + client_init(client); + + put_cmd(SJ3_CLOSEDICT); + put_int(dicid); + if (put_flush() == ERROR) + return ERROR; + + if (sj3_error_number = get_int()) + return ERROR; + return ReadErrorFlag ? ERROR : 0; +} + + + +int +sj3_open_study_file(SJ3_CLIENT_ENV *client, char *stdyname, char *password) +{ + int stdylen, passlen; + int datalen, buflen; + + client_init(client); + + stdylen = strlen(stdyname) + 1; + passlen = strlen(password) + 1; + datalen = stdylen + passlen; + + put_cmd(SJ3_OPENSTDY); + if (datalen < (buflen = BUFFER_SIZE - CMDLEN)) { + put_string(stdyname, stdylen); + put_string(password, passlen); + if (put_flush() == ERROR) + return ERROR; + } else { + if (put_over(buflen, 2, put_string, stdyname, stdylen, put_string, + password, passlen, NULL, NULL, 0, NULL, NULL, 0) == ERROR) + return ERROR; + } + + if (sj3_error_number = get_int()) + return ERROR; + return ReadErrorFlag ? ERROR : 0; +} +int +sj3_close_study_file(SJ3_CLIENT_ENV *client) +{ + client_init(client); + + put_cmd(SJ3_CLOSESTDY); + if (put_flush() == ERROR) + return ERROR; + + if (sj3_error_number = get_int()) + return ERROR; + return ReadErrorFlag ? ERROR : 0; +} + + + +int +sj3_get_id_size(SJ3_CLIENT_ENV *client) +{ + client_init(client); + + put_cmd(SJ3_STDYSIZE); + if (put_flush() == ERROR) + return ERROR; + + if (sj3_error_number = get_int()) + return ERROR; + cliptr->stdy_size = get_int(); + return ReadErrorFlag ? ERROR : cliptr->stdy_size; +} + + + +int +sj3_lock_server(SJ3_CLIENT_ENV *client) +{ + client_init(client); + + put_cmd(SJ3_LOCK); + if (put_flush() == ERROR) + return ERROR; + + if (sj3_error_number = get_int()) + return ERROR; + return ReadErrorFlag ? ERROR : 0; +} +int +sj3_unlock_server(SJ3_CLIENT_ENV *client) +{ + client_init(client); + + put_cmd(SJ3_UNLOCK); + if (put_flush() == ERROR) + return ERROR; + + if (sj3_error_number = get_int()) + return ERROR; + return ReadErrorFlag ? ERROR : 0; +} + + + +int +sj3_ikkatu_henkan(SJ3_CLIENT_ENV *client, u_char *src, u_char *dst, int dstsiz, int mb_flag) +{ + int c; + u_char *top; + int result; + int len; + int len1; + int stysiz; + int srclen; + int buflen; + + client_init(client); + + srclen = strlen(src) + 1; + + if (mb_flag == MBCODE_SJIS) + put_cmd(SJ3_PH2KNJ); + else + put_cmd(SJ3_PH2KNJ_EUC); + if (srclen < (buflen = BUFFER_SIZE - CMDLEN)) { + put_string(src, srclen); + if (put_flush() == ERROR) + return ERROR; + } else { + if (put_over(buflen, 1, put_string, src, srclen, NULL, NULL, 0, + NULL, NULL, 0, NULL, NULL, 0) == ERROR) + return ERROR; + } + + if (sj3_error_number = get_int()) + return ERROR; + + result = get_int(); + + result = 0; + stysiz = cliptr->stdy_size; + len1 = 1 + stysiz + 1 + 1; + while (c = get_byte()) { + top = dst; + if (dstsiz < len1) + goto error1; + + *dst++ = len = c; + dst = get_ndata(dst, stysiz); + dstsiz -= (stysiz + 1); + + while (c = get_byte()) { + if (dstsiz-- < 3) + goto error2; + *dst++ = c; + } + *dst++ = 0; + dstsiz--; + result += len; + } + + *dst = 0; + return ReadErrorFlag ? ERROR : result; + +error1: + do { + skip_ndata(stysiz); +error2: + while (get_byte()) + ; + } while (get_byte()); + + *top = 0; + return ReadErrorFlag ? ERROR : result; +} + + + +int +sj3_bunsetu_henkan(SJ3_CLIENT_ENV *client, u_char *yomi, int len, u_char *kanji, int mb_flag) +{ + int result; + int buflen; + + client_init(client); + + if (mb_flag == MBCODE_SJIS) + put_cmd(SJ3_CL2KNJ); + else + put_cmd(SJ3_CL2KNJ_EUC); + put_int(len); + if ((len + 1) <= (buflen = BUFFER_SIZE - CMDLEN - INTLEN)) { + put_ndata(yomi, len); + put_byte(0); + if (put_flush() == ERROR) + return ERROR; + } else { + if (put_over(buflen, 2, put_ndata, yomi, len, put_ndata, NULL, 1, + NULL, NULL, 0, NULL, NULL, 0) == ERROR) + return ERROR; + } + + if (sj3_error_number = get_int()) + return ERROR; + + result = get_int(); + get_string(get_ndata(kanji, cliptr->stdy_size)); + return ReadErrorFlag ? ERROR : result; +} +int +sj3_bunsetu_jikouho(SJ3_CLIENT_ENV *client, u_char *kanji, int mode, int mb_flag) +{ + int result; + + client_init(client); + + if (mb_flag == MBCODE_SJIS) + put_cmd(SJ3_NEXTCL); + else + put_cmd(SJ3_NEXTCL_EUC); + put_int(mode); + if (put_flush() == ERROR) + return ERROR; + + if (sj3_error_number = get_int()) + return ERROR; + + result = get_int(); + get_string(get_ndata(kanji, cliptr->stdy_size)); + return ReadErrorFlag ? ERROR : result; +} +int +sj3_bunsetu_maekouho(SJ3_CLIENT_ENV *client, u_char *kanji, int mode, int mb_flag) +{ + int result; + + client_init(client); + + if (mb_flag == MBCODE_SJIS) + put_cmd(SJ3_PREVCL); + else + put_cmd(SJ3_PREVCL_EUC); + put_int(mode); + if (put_flush() == ERROR) + return ERROR; + + if (sj3_error_number = get_int()) + return ERROR; + + result = get_int(); + get_string(get_ndata(kanji, cliptr->stdy_size)); + return ReadErrorFlag ? ERROR : result; +} + + + +int +sj3_bunsetu_kouhosuu(SJ3_CLIENT_ENV *client, u_char *yomi, int len, int mb_flag) +{ + int result; + int buflen; + + client_init(client); + + if (mb_flag == MBCODE_SJIS) + put_cmd(SJ3_CL2KNJ_CNT); + else + put_cmd(SJ3_CL2KNJ_CNT_EUC); + put_int(len); + if ((len + 1) <= (buflen = BUFFER_SIZE - CMDLEN - INTLEN)) { + put_ndata(yomi, len); + put_byte(0); + if (put_flush() == ERROR) + return ERROR; + } else { + if (put_over(buflen, 2, put_ndata, yomi, len, put_ndata, NULL, 1, + NULL, NULL, 0, NULL, NULL, 0) == ERROR) + return ERROR; + } + + if (sj3_error_number = get_int()) + return ERROR; + + result = get_int(); + return ReadErrorFlag ? ERROR : result; +} +int +sj3_bunsetu_zenkouho(SJ3_CLIENT_ENV *client, u_char *yomi, int len, SJ3_DOUON *douon, int mb_flag) +{ + int cnt = 0; + int buflen; + + client_init(client); + + if (mb_flag == MBCODE_SJIS) + put_cmd(SJ3_CL2KNJ_ALL); + else + put_cmd(SJ3_CL2KNJ_ALL_EUC); + put_int(len); + if ((len + 1) <= (buflen = BUFFER_SIZE - CMDLEN - INTLEN)) { + put_ndata(yomi, len); + put_byte(0); + if (put_flush() == ERROR) + return ERROR; + } else { + if (put_over(buflen, 2, put_ndata, yomi, len, put_ndata, NULL, 1, + NULL, NULL, 0, NULL, NULL, 0) == ERROR) + return ERROR; + } + + if (sj3_error_number = get_int()) + return ERROR; + + while (get_int()) { + SJ3_STUDYREC *rec = &douon->dcid; + + get_ndata(rec->dummy, cliptr->stdy_size); + get_string(douon->ddata); + douon->dlen = strlen(douon->ddata); + douon++; + cnt++; + } + + return ReadErrorFlag ? ERROR : cnt; +} + + + +int +sj3_tango_gakusyuu(SJ3_CLIENT_ENV *client, SJ3_STUDYREC *stdy) +{ + int buflen; + + client_init(client); + + put_cmd(SJ3_STUDY); + if (cliptr->stdy_size <= (buflen = BUFFER_SIZE - CMDLEN)) { + put_ndata(stdy->dummy, cliptr->stdy_size); + if (put_flush() == ERROR) + return ERROR; + } else { + if (put_over(buflen, 1, put_ndata, stdy->dummy, cliptr->stdy_size, NULL, + NULL, 0, NULL, NULL, 0, NULL, NULL, 0) == ERROR) + return ERROR; + } + + + if (sj3_error_number = get_int()) + return ERROR; + return ReadErrorFlag ? ERROR : 0; +} +int +sj3_bunsetu_gakusyuu(SJ3_CLIENT_ENV *client, u_char *yomi1, u_char *yomi2, SJ3_STUDYREC *stdy, int mb_flag) +{ + int yomilen1, yomilen2; + int datalen, buflen; + + client_init(client); + + yomilen1 = strlen(yomi1) + 1; + yomilen2 = strlen(yomi2) + 1; + datalen = yomilen1 + yomilen2 + cliptr->stdy_size; + + if (mb_flag == MBCODE_SJIS) + put_cmd(SJ3_CLSTUDY); + else + put_cmd(SJ3_CLSTUDY_EUC); + if (datalen <= (buflen = BUFFER_SIZE - CMDLEN)) { + put_string(yomi1, yomilen1); + put_string(yomi2, yomilen2); + put_ndata(stdy->dummy, cliptr->stdy_size); + if (put_flush() == ERROR) + return ERROR; + } else { + if (put_over(buflen, 3, put_string, yomi1, yomilen1, put_string, + yomi2, yomilen2, put_ndata, stdy->dummy, cliptr->stdy_size, + NULL, NULL, 0) == ERROR) + return ERROR; + } + + if (sj3_error_number = get_int()) + return ERROR; + return ReadErrorFlag ? ERROR : 0; +} + + + +int +sj3_tango_touroku(SJ3_CLIENT_ENV *client, long dicid, u_char *yomi, u_char *kanji, int code, int mb_flag) +{ + int yomilen, kanjilen; + int datalen, buflen; + + client_init(client); + + yomilen = strlen(yomi) + 1; + kanjilen = strlen(kanji) + 1; + datalen = yomilen + kanjilen + INTLEN; + + if (mb_flag == MBCODE_SJIS) + put_cmd(SJ3_ADDDICT); + else + put_cmd(SJ3_ADDDICT_EUC); + put_int(dicid); + if (datalen <= (buflen = BUFFER_SIZE - CMDLEN -INTLEN)) { + put_string(yomi, yomilen); + put_string(kanji, kanjilen); + put_int(code); + if (put_flush() == ERROR) + return ERROR; + } else { + /* XXX */ + if (put_over(buflen, 3, put_string, yomi, yomilen, put_string, kanji, + kanjilen, put_ndata, (u_char *)&code, INTLEN, NULL, NULL, 0) == ERROR) + return ERROR; + } + + if (sj3_error_number = get_int()) + return ERROR; + return ReadErrorFlag ? ERROR : 0; +} +int +sj3_tango_sakujo(SJ3_CLIENT_ENV *client, long dicid, u_char *yomi, u_char *kanji, int code, int mb_flag) +{ + int yomilen, kanjilen; + int datalen, buflen; + + client_init(client); + + yomilen = strlen(yomi) + 1; + kanjilen = strlen(kanji) + 1; + datalen = yomilen + kanjilen + INTLEN; + + if (mb_flag == MBCODE_SJIS) + put_cmd(SJ3_DELDICT); + else + put_cmd(SJ3_DELDICT_EUC); + put_int(dicid); + if (datalen <= (buflen = BUFFER_SIZE - CMDLEN -INTLEN)) { + put_string(yomi, yomilen); + put_string(kanji, kanjilen); + put_int(code); + if (put_flush() == ERROR) + return ERROR; + } else { + /* XXX */ + if (put_over(buflen, 3, put_string, yomi, yomilen, put_string, kanji, + kanjilen, put_ndata, (u_char *)&code, INTLEN, NULL, NULL, 0) == ERROR) + return ERROR; + } + + if (sj3_error_number = get_int()) + return ERROR; + return ReadErrorFlag ? ERROR : 0; +} + + + +int +sj3_tango_syutoku(SJ3_CLIENT_ENV *client, int dicid, u_char *buf, int mb_flag) +{ + u_char *p; + + client_init(client); + + if (mb_flag == MBCODE_SJIS) + put_cmd(SJ3_GETDICT); + else + put_cmd(SJ3_GETDICT_EUC); + put_int(dicid); + if (put_flush() == ERROR) + return ERROR; + + if (sj3_error_number = get_int()) + return ERROR; + + p = get_string(buf); + p = get_string(p); + *p = get_int(); + return ReadErrorFlag ? ERROR : 0; +} +int +sj3_tango_jikouho(SJ3_CLIENT_ENV *client, int dicid, u_char *buf, int mb_flag) +{ + u_char *p; + + client_init(client); + + if (mb_flag == MBCODE_SJIS) + put_cmd(SJ3_NEXTDICT); + else + put_cmd(SJ3_NEXTDICT_EUC); + put_int(dicid); + if (put_flush() == ERROR) + return ERROR; + + if (sj3_error_number = get_int()) + return ERROR; + + p = get_string(buf); + p = get_string(p); + *p = get_int(); + return ReadErrorFlag ? ERROR : 0; +} +int +sj3_tango_maekouho(SJ3_CLIENT_ENV *client, int dicid, u_char *buf, int mb_flag) +{ + u_char *p; + + client_init(client); + + if (mb_flag == MBCODE_SJIS) + put_cmd(SJ3_PREVDICT); + else + put_cmd(SJ3_PREVDICT_EUC); + put_int(dicid); + if (put_flush() == ERROR) + return ERROR; + + if (sj3_error_number = get_int()) + return ERROR; + + p = get_string(buf); + p = get_string(p); + *p = get_int(); + return ReadErrorFlag ? ERROR : 0; +} + + + +int +sj3_make_dict_file(SJ3_CLIENT_ENV *client, char *path, int idxlen, int seglen, int segnum) +{ + int pathlen; + int buflen, datalen; + + client_init(client); + + pathlen = strlen(path) + 1; + datalen = pathlen + INTLEN + INTLEN + INTLEN; + + put_cmd(SJ3_MAKEDICT); + if (datalen <= (buflen = BUFFER_SIZE - CMDLEN)) { + put_string(path, pathlen); + put_int(idxlen); + put_int(seglen); + put_int(segnum); + if (put_flush() == ERROR) + return ERROR; + } else { + /* XXX */ + if (put_over(buflen, 4, put_string, path, pathlen, put_ndata, + (u_char *)&idxlen, INTLEN, put_ndata, (u_char *)&seglen, INTLEN, + put_ndata, (u_char *)&segnum, 0) == ERROR) + return ERROR; + } + + if (sj3_error_number = get_int()) + return ERROR; + return ReadErrorFlag ? ERROR : 0; +} + + + +int +sj3_make_study_file(SJ3_CLIENT_ENV *client, char *path, int stynum, int clstep, int cllen) +{ + int pathlen; + int buflen, datalen; + + client_init(client); + + pathlen = strlen(path) + 1; + datalen = pathlen + INTLEN + INTLEN + INTLEN; + + put_cmd(SJ3_MAKESTDY); + if (datalen <= (buflen = BUFFER_SIZE - CMDLEN)) { + put_string(path, pathlen); + put_int(stynum); + put_int(clstep); + put_int(cllen); + if (put_flush() == ERROR) + return ERROR; + } else { + /* XXX */ + if (put_over(buflen, 4, put_string, path, pathlen, put_ndata, + (u_char *)&stynum, INTLEN, put_ndata, (u_char *)&clstep, INTLEN, + put_ndata, (u_char *)&cllen, 0) == ERROR) + return ERROR; + } + + if (sj3_error_number = get_int()) + return ERROR; + return ReadErrorFlag ? ERROR : 0; +} + + + +int +sj3_make_directory(SJ3_CLIENT_ENV *client, char *path) +{ + int pathlen; + int buflen; + + client_init(client); + + pathlen = strlen(path) + 1; + + put_cmd(SJ3_MAKEDIR); + if (pathlen <= (buflen = BUFFER_SIZE - CMDLEN)) { + put_string(path, pathlen); + if (put_flush() == ERROR) + return ERROR; + } else { + if (put_over(buflen, 1, put_string, path, pathlen, NULL, NULL, 0, + NULL, NULL, 0, NULL, NULL, 0) == ERROR) + return ERROR; + } + + if (sj3_error_number = get_int()) + return ERROR; + return ReadErrorFlag ? ERROR : 0; +} + + + +int +sj3_access(SJ3_CLIENT_ENV *client, char *path, int mode) +{ + int result; + int pathlen; + int buflen, datalen; + + client_init(client); + + pathlen = strlen(path) + 1; + datalen = pathlen + INTLEN; + + put_cmd(SJ3_ACCESS); + if (datalen <= (buflen = BUFFER_SIZE - CMDLEN)) { + put_string(path, pathlen); + put_int(mode); + if (put_flush() == ERROR) + return ERROR; + } else { + if (put_over(buflen, 2, put_string, path, pathlen, put_ndata, + (u_char *)&mode, INTLEN, NULL, NULL, 0, NULL, NULL, 0) == ERROR) + return ERROR; + } + + sj3_error_number = 0; + result = get_int(); + return ReadErrorFlag ? ERROR : result; +} + + + +int +sj3_who(SJ3_CLIENT_ENV *client, SJ3_WHO_STRUCT *ret, int num) +{ + int i, j; + + client_init(client); + + put_cmd(SJ3_WHO); + if (put_flush() == ERROR) + return ERROR; + + if ((i = get_int()) < 0) { + sj3_error_number = SJ3_InternalError; + return -1; + } + + sj3_error_number = 0; + for (j = 0 ; j < i ; j++) { + if (j < num) { + ret->fd = get_int(); + get_nstring(ret->hostname, SJ3_NAME_LENGTH); + get_nstring(ret->username, SJ3_NAME_LENGTH); + get_nstring(ret->progname, SJ3_NAME_LENGTH); + ret++; + } + else { + get_int(); + skip_string(); + skip_string(); + skip_string(); + } + } + + return ReadErrorFlag ? ERROR : ((i < num) ? i : num); +} + + + +int +sj3_quit(SJ3_CLIENT_ENV *client) +{ + client_init(client); + + put_cmd(SJ3_QUIT); + if (put_flush() == ERROR) + return ERROR; + + if (sj3_error_number = get_int()) + return ERROR; + return ReadErrorFlag ? ERROR : 0; +} +int +sj3_kill(SJ3_CLIENT_ENV *client) +{ + client_init(client); + + put_cmd(SJ3_KILL); + if (put_flush() == ERROR) + return ERROR; + + if (sj3_error_number = get_int()) + return ERROR; + return ReadErrorFlag ? ERROR : 0; +} + + + +int +sj3_version(SJ3_CLIENT_ENV *client, char *dst, int dstsiz) +{ + int c; + + client_init(client); + + put_cmd(SJ3_VERSION); + if (put_flush() == ERROR) + return ERROR; + + sj3_error_number = get_int(); + c = get_byte(); + while (c) { + while (c) { + if (dstsiz > 2) { + *dst++ = c; + dstsiz--; + } + c = get_byte(); + } + if (dstsiz > 1) { + *dst++ = 0; + dstsiz--; + } + c = get_byte(); + } + if (dstsiz > 0) + { + *dst++ = 0; + dstsiz--; + } + return ReadErrorFlag ? ERROR : 0; +} diff --git a/lib/sj3lib/sj.c b/lib/sj3lib/sj.c new file mode 100644 index 0000000..9a3d4b6 --- /dev/null +++ b/lib/sj3lib/sj.c @@ -0,0 +1,1097 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj.c,v $ + * $SonyRevision: 1.2 $ + * $SonyDate: 1994/12/09 11:27:09 $ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "sj_const.h" +#include "Const.h" +#include "sj3err.h" +#include "sj3lowlib.h" +#include "sj3lib.h" +#include "sj3intern.h" +#include "sj_hinsi.h" +#include "sj_string.h" + +#define SYS_SJIS 0 +#define SYS_EUC 1 +#define SYS_NOTDEF -1 +static int _sys_code = SYS_NOTDEF; + +#ifndef lint +static char rcsid_sony[] = "$Header: /export/work/contrib/sj3/sj3lib/RCS/sj.c,v 1.14 1994/06/03 07:42:13 notanaka Exp $ SONY;"; +#endif + +char *sj3_user_dir = "user"; +static char *path_delimiter = "/"; +static SJ3_CLIENT_ENV client = { -1, 0 }; +static long mdicid = 0; +static long udicid = 0; +static int defuse = 0; +static long *dicid_list = NULL; +static int dicid_num = 0; + +static u_char buf1[YOMIBUFSIZE]; +static u_char buf2[YOMIBUFSIZE]; +static u_char kbuf[KANJIBUFSIZE]; + +static int +set_sys_code() +{ + char *loc; + + loc = setlocale(LC_CTYPE, NULL); + if (strcmp(loc, "ja_JP.SJIS") == 0) + return SYS_SJIS; + + return SYS_EUC; +} + +static int +make_dirs(char *path) +{ + char tmp[MAXPATHLEN]; + char *p; + + for (p = path ; *p ; p++) { + if (*p != *path_delimiter) continue; + + strlcpy(tmp, path, sizeof(tmp)); + + if (sj3_access(&client, tmp, F_OK) != ERROR) continue; + if (sj3_error_number == SJ3_ServerDown) return ERROR; + + if (sj3_make_directory(&client, tmp) == ERROR) return ERROR; + } + return 0; +} + + +int +sj3_open(char *host, char *user) +{ + char tmp[MAXPATHLEN]; + char userdir[MAXPATHLEN]; + char userdict[MAXPATHLEN]; + char userstudy[MAXPATHLEN]; + int err = SJ3_NORMAL_END; + + if (client.fd != -1) return SJ3_ALREADY_CONNECTED; + + snprintf(tmp, sizeof(tmp), "%d.sj3lib", getpid()); + if (sj3_make_connection(&client, host, user, tmp) == ERROR) { + if (sj3_error_number == SJ3_ServerDown) goto server_dead; + client.fd = -1; return SJ3_CONNECT_ERROR; + } + + if (client.stdy_size > SJ3_WORD_ID_SIZE) { + sj3_erase_connection(&client); + return SJ3_CONNECT_ERROR; + } + + mdicid = sj3_open_dictionary(&client, MAINDICTIONARY, NULL); + if (mdicid == 0) { + if (sj3_error_number == SJ3_ServerDown) goto server_dead; + err |= SJ3_CANNOT_OPEN_MDICT; + } + + strlcpy(userdir, sj3_user_dir, sizeof(userdir)); + if (sj3_user_dir[strlen(sj3_user_dir) - 1] != *path_delimiter) + strlcat(userdir, path_delimiter, sizeof(userdir)); + strlcat(userdir, user, sizeof(userdir)); + strlcat(userdir, path_delimiter, sizeof(userdir)); + + if (make_dirs(userdir) == ERROR) { + if (sj3_error_number == SJ3_ServerDown) goto server_dead; + return (err | SJ3_CANNOT_MAKE_UDIR); + } + + strlcpy(userdict, userdir, sizeof(userdict)); + strlcat(userdict, USERDICTIONARY, sizeof(userdict)); + + if (sj3_access(&client, userdict, F_OK) == ERROR) { + if (sj3_error_number == SJ3_ServerDown) goto server_dead; + if (sj3_make_dict_file(&client, userdict, DEFIDXLEN, + DEFSEGLEN, DEFSEGNUM) == ERROR) { + if (sj3_error_number == SJ3_ServerDown) + goto server_dead; + err |= SJ3_CANNOT_MAKE_UDICT; + } + } + udicid = sj3_open_dictionary(&client, userdict, ""); + if (udicid == 0) { + if (sj3_error_number == SJ3_ServerDown) goto server_dead; + err |= SJ3_CANNOT_OPEN_UDICT; + } + + strlcpy(userstudy, userdir, sizeof(userstudy)); + strlcat(userstudy, STUDYFILE, sizeof(userstudy)); + + if (sj3_access(&client, userstudy, F_OK) == ERROR) { + if (sj3_error_number == SJ3_ServerDown) goto server_dead; + if (sj3_make_study_file(&client, userstudy, DEFSTYNUM, DEFCLSTEP, + DEFCLLEN) == ERROR) { + if (sj3_error_number == SJ3_ServerDown) + goto server_dead; + err |= SJ3_CANNOT_MAKE_STUDY; + } + } + if (sj3_open_study_file(&client, userstudy, "") == ERROR) { + if (sj3_error_number == SJ3_ServerDown) goto server_dead; + err |= SJ3_CANNOT_OPEN_STUDY; + } + + return err; + +server_dead: + mdicid = udicid = 0; + return SJ3_SERVER_DEAD; +} + +int +sj3_open_with_list(char *host, char *user, int dicts_num, char **dicts, int *error_num, int **error_index) +{ + char tmp[MAXPATHLEN]; + char userdir[MAXPATHLEN]; + char userdict[MAXPATHLEN]; + char userstudy[MAXPATHLEN]; + int err = SJ3_NORMAL_END; + int i, err_id_num = 0; + long *dict_idx; + + if (client.fd != -1) return SJ3_ALREADY_CONNECTED; + + snprintf(tmp, sizeof(tmp), "%d.sj3lib", getpid()); + if (sj3_make_connection(&client, host, user, tmp) == ERROR) { + if (sj3_error_number == SJ3_ServerDown) goto server_dead; + client.fd = -1; return SJ3_CONNECT_ERROR; + } + + if (client.stdy_size > SJ3_WORD_ID_SIZE) { + sj3_erase_connection(&client); + return SJ3_CONNECT_ERROR; + } + + if ((dicts_num > 0) && dicts) { + if (!(dict_idx = (long *)malloc(sizeof(long) * dicts_num * 2))) { + return SJ3_CONNECT_ERROR; + } + memset(dict_idx, 0, sizeof(long) * dicts_num * 2); + dicid_num = dicts_num; + dicid_list = dict_idx; + err_id_num = 0; + for (i = 0; i < dicts_num; i++) { + dict_idx[i] = sj3_open_dictionary(&client, dicts[i], NULL); + if (dict_idx[i] == 0) { + if (sj3_error_number == SJ3_ServerDown) goto server_dead; + dict_idx[dicts_num + err_id_num] = i; + err_id_num++; + } else if (mdicid == 0) { + mdicid = dict_idx[i]; + } + } + + if (err_id_num == dicts_num) { + err |= SJ3_CANNOT_OPEN_MDICT; + mdicid = 0; + } + if (error_num) *error_num = err_id_num; + if (error_index) *error_index = (int *) &(dict_idx[dicts_num]); + } + + strlcpy(userdir, sj3_user_dir, sizeof(userdir)); + if (sj3_user_dir[strlen(sj3_user_dir) - 1] != *path_delimiter) + strlcat(userdir, path_delimiter, sizeof(userdir)); + strlcat(userdir, user, sizeof(userdir)); + strlcat(userdir, path_delimiter, sizeof(userdir)); + + if (make_dirs(sj3_user_dir) == ERROR) { + if (sj3_error_number == SJ3_ServerDown) goto server_dead; + return (err | SJ3_CANNOT_MAKE_UDIR); + } + + strlcpy(userdict, userdir, sizeof(userdict)); + strlcat(userdict, USERDICTIONARY, sizeof(userdict)); + + if (sj3_access(&client, userdict, F_OK) == ERROR) { + if (sj3_error_number == SJ3_ServerDown) goto server_dead; + if (sj3_make_dict_file(&client, userdict, DEFIDXLEN, + DEFSEGLEN, DEFSEGNUM) == ERROR) { + if (sj3_error_number == SJ3_ServerDown) + goto server_dead; + err |= SJ3_CANNOT_MAKE_UDICT; + } + } + + udicid = sj3_open_dictionary(&client, userdict, ""); + if (udicid == 0) { + if (sj3_error_number == SJ3_ServerDown) goto server_dead; + err |= SJ3_CANNOT_OPEN_UDICT; + } + + strlcpy(userstudy, userdir, sizeof(userstudy)); + strlcat(userstudy, STUDYFILE, sizeof(userstudy)); + + if (sj3_access(&client, userstudy, F_OK) == ERROR) { + if (sj3_error_number == SJ3_ServerDown) goto server_dead; + if (sj3_make_study_file(&client, userstudy, DEFSTYNUM, DEFCLSTEP, + DEFCLLEN) == ERROR) { + if (sj3_error_number == SJ3_ServerDown) + goto server_dead; + err |= SJ3_CANNOT_MAKE_STUDY; + } + } + if (sj3_open_study_file(&client, userstudy, "") == ERROR) { + if (sj3_error_number == SJ3_ServerDown) goto server_dead; + err |= SJ3_CANNOT_OPEN_STUDY; + } + + return err; + +server_dead: + if (dict_idx) { + free(dict_idx); + dict_idx = NULL; + if (error_num) *error_num = 0; + if (error_index) *error_index = NULL; + } + mdicid = udicid = 0; + return SJ3_SERVER_DEAD; +} +int +sj3_close() +{ + int err = SJ3_NORMAL_END; + int i; + + if (client.fd == -1) return SJ3_NOT_CONNECTED; + + if (mdicid == 0) + err |= SJ3_NOT_OPENED_MDICT; + else if (dicid_list) { + for (i = 0; i < dicid_num; i++) { + if (sj3_close_dictionary(&client, dicid_list[i]) == ERROR) { + if (sj3_error_number == SJ3_ServerDown) goto server_dead; + err |= SJ3_CLOSE_MDICT_ERROR; + } + } + free(dicid_list); + dicid_list = NULL; + dicid_num = 0; + } else if (sj3_close_dictionary(&client, mdicid) == ERROR) { + if (sj3_error_number == SJ3_ServerDown) goto server_dead; + err |= SJ3_CLOSE_MDICT_ERROR; + } + mdicid = 0; + + if (udicid == 0) + err |= SJ3_NOT_OPENED_UDICT; + else if (sj3_close_dictionary(&client, udicid) == ERROR) { + if (sj3_error_number == SJ3_ServerDown) goto server_dead; + err |= SJ3_CLOSE_UDICT_ERROR; + } + udicid = 0; + + if (sj3_close_study_file(&client) == ERROR) { + switch (sj3_error_number) { + case SJ3_ServerDown: + goto server_dead; + + case SJ3_StdyFileNotOpened: + err |= SJ3_NOT_OPENED_STUDY; break; + + default: + err |= SJ3_CLOSE_STUDY_ERROR; break; + } + } + + if (sj3_erase_connection(&client)) { + if (sj3_error_number == SJ3_ServerDown) goto server_dead; + err |= SJ3_DISCONNECT_ERROR; + } + + return err; + +server_dead: + if (dicid_list) { + free(dicid_list); + dicid_list = NULL; + } + dicid_num = 0; + mdicid = udicid = 0; + return SJ3_SERVER_DEAD; +} + + +int +sj3_getkan(u_char *yomi, SJ3_BUNSETU *bun, u_char *knj, int knjsiz) +{ + u_char *src; + int buncnt = 0; + int len; + int stysiz = client.stdy_size; + + if ((len = strlen(yomi)) > SJ3_IKKATU_YOMI) return 0; + + while (*yomi) { + len = sj3_ikkatu_henkan(&client, yomi, knj, knjsiz, MBCODE_SJIS); + if (len == ERROR) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + + return 0; + } + else if (len == 0) + break; + + src = knj; + while (*src) { + bun -> srclen = *src++; + memcpy(&(bun -> dcid), src, stysiz); + src += stysiz; + bun -> destlen = strlen(src); + bun -> srcstr = yomi; + bun -> deststr = knj; + while (*src) *knj++ = *src++; + knjsiz -= bun -> destlen; + src++; + yomi += bun -> srclen; + bun++; + buncnt++; + } + *knj = 0; + } + + if (*yomi) { + bun -> srclen = strlen(yomi); + bun -> srcstr = yomi; + bun -> destlen = 0; + bun -> deststr = NULL; + memset(&(bun -> dcid), '\0', sizeof(bun -> dcid)); + buncnt++; + } + + return buncnt; +} +int +sj3_getkan_euc(u_char *yomi, SJ3_BUNSETU *bun, u_char *knj, int knjsiz) +{ + u_char *src, *yp, *kp, *khp; + int buncnt = 0, i; + int len, flag, mflag = 0; + int stysiz = client.stdy_size; + int sentou, saigo; + int knjorg = knjsiz; + SJ3_BUNSETU *hbun = bun; + + if ((len = strlen(yomi)) > SJ3_IKKATU_YOMI) return 0; + if (client.svr_version == 1) { + defuse = 0; + len = sj3_str_euctosjis(buf1, sizeof(buf1), yomi, client.default_char, &defuse); + if ((len < 0) || defuse) return 0; + yp = buf1; + if (knjsiz > sizeof(kbuf)) { + mflag = 1; + kp = khp = (u_char *) malloc(knjsiz); + } else { + kp = khp = kbuf; + } + flag = MBCODE_SJIS; + } else { + yp = yomi; + kp = knj; + flag = MBCODE_EUC; + } + + while (*yp) { + len = sj3_ikkatu_henkan(&client, yp, kp, knjsiz, flag); + if (len == ERROR) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + + return 0; + } + else if (len == 0) + break; + + src = kp; + while (*src) { + bun -> srclen = *src++; + memcpy(&(bun -> dcid), src, stysiz); + src += stysiz; + bun -> destlen = strlen(src); + bun -> srcstr = yp; + bun -> deststr = kp; + while (*src) *kp++ = *src++; + knjsiz -= bun -> destlen; + src++; + yp += bun -> srclen; + bun++; + buncnt++; + } + *kp = 0; + } + + if (*yp) { + bun -> srclen = strlen(yp); + bun -> srcstr = yp; + bun -> destlen = 0; + bun -> deststr = NULL; + memset(&(bun -> dcid), '\0', sizeof(bun -> dcid)); + buncnt++; + } + + if (client.svr_version == 1) { + kp = khp; + yp = buf1; + bun = hbun; + defuse = 0; + len = sj3_str_sjistoeuc(knj, knjorg, kp, client.default_char, &defuse); + if ((len < 0) || defuse) return 0; + for(i = 0; i < buncnt; i++) { + sentou = sj3_sjistoeuclen(yp, bun[i].srcstr - yp); + saigo = sj3_sjistoeuclen(bun[i].srcstr, bun[i].srclen); + bun[i].srclen = saigo; + bun[i].srcstr = yomi + sentou; + sentou = sj3_sjistoeuclen(kp, bun[i].deststr - kp); + saigo = sj3_sjistoeuclen(bun[i].deststr, bun[i].destlen); + bun[i].destlen = saigo; + bun[i].deststr = knj + sentou; + } + if (mflag) { + free(khp); + mflag = 0; + } + } + + return buncnt; +} + +int +sj3_getkan_mb(u_char *yomi, SJ3_BUNSETU *bun, u_char *knj, int knjsiz) +{ +#ifndef __sony_news + if (_sys_code == SYS_NOTDEF) + _sys_code = set_sys_code(); +#endif + if (_sys_code == SYS_EUC) + return sj3_getkan_euc(yomi, bun, knj, knjsiz); + else + return sj3_getkan(yomi, bun, knj, knjsiz); +} + + +int +sj3_douoncnt(u_char *yomi) +{ + int i; + + if ((i = strlen(yomi)) > SJ3_BUNSETU_YOMI) return 0; + + i = sj3_bunsetu_kouhosuu(&client, yomi, i, MBCODE_SJIS); + if (i == ERROR) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + + return 0; + } + + return i; +} +int +sj3_douoncnt_euc(u_char *yomi) +{ + int i, l, flag; + u_char *yp; + + if ((i = strlen(yomi)) > SJ3_BUNSETU_YOMI) return 0; + + if (client.svr_version == 1) { + defuse = 0; + l = sj3_str_euctosjis(buf1, sizeof(buf1), yomi, client.default_char, &defuse); + if ((l < 0) || defuse) return 0; + yp = buf1; + flag = MBCODE_SJIS; + } else { + yp = yomi; + flag = MBCODE_EUC; + } + i = sj3_bunsetu_kouhosuu(&client, yp, i, flag); + if (i == ERROR) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + + return 0; + } + + return i; +} + +int +sj3_douoncnt_mb(u_char *yomi) +{ +#ifndef __sony_news + if (_sys_code == SYS_NOTDEF) + _sys_code = set_sys_code(); +#endif + if (_sys_code == SYS_EUC) + return sj3_douoncnt_euc(yomi); + else + return sj3_douoncnt(yomi); +} + + + +int +sj3_getdouon(u_char *yomi, SJ3_DOUON *dou) +{ + int i; + + if ((i = strlen(yomi)) > SJ3_BUNSETU_YOMI) return 0; + + i = sj3_bunsetu_zenkouho(&client, yomi, i, dou, MBCODE_SJIS); + if (i == ERROR) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + return 0; + } + + return i; +} +int +sj3_getdouon_euc(u_char *yomi, SJ3_DOUON *dou) +{ + int i, j, l; + + if ((i = strlen(yomi)) > SJ3_BUNSETU_YOMI) return 0; + + if (client.svr_version == 1) { + defuse = 0; + l = sj3_str_euctosjis(buf1, sizeof(buf1), yomi, client.default_char, &defuse); + if ((l < 0) || defuse) return 0; + i = sj3_bunsetu_zenkouho(&client, buf1, i, dou, MBCODE_SJIS); + if (i == ERROR) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + return 0; + } + for (j = 0; j < i; j++) { + defuse = 0; + l = sj3_str_sjistoeuc(kbuf, sizeof(kbuf), + dou[j].ddata, client.default_char, &defuse); + if ((l < 0) || defuse) return 0; + (void)memcpy(dou[j].ddata, kbuf, l+1); + dou[j].dlen = l; + } + } else { + i = sj3_bunsetu_zenkouho(&client, yomi, i, dou, MBCODE_EUC); + if (i == ERROR) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + return 0; + } + } + return i; +} +int +sj3_getdouon_mb(u_char *yomi, SJ3_DOUON *dou) +{ +#ifndef __sony_news + if (_sys_code == SYS_NOTDEF) + _sys_code = set_sys_code(); +#endif + if (_sys_code == SYS_EUC) + return sj3_getdouon_euc(yomi, dou); + else + return sj3_getdouon(yomi, dou); +} + +int +sj3_gakusyuu(SJ3_STUDYREC *dcid) +{ + if (sj3_tango_gakusyuu(&client, dcid) == ERROR) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + return 1; + } + return 0; +} + +int +sj3_gakusyuu2(u_char *yomi1, u_char *yomi2, SJ3_STUDYREC *dcid) +{ + if (sj3_bunsetu_gakusyuu(&client, yomi1, yomi2, dcid, MBCODE_SJIS) == ERROR) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + return 1; + } + return 0; +} +int +sj3_gakusyuu2_euc(u_char *yomi1, u_char *yomi2, SJ3_STUDYREC *dcid) +{ + int l, flag; + u_char *y1p, *y2p; + + if (client.svr_version == 1) { + defuse = 0; + l = sj3_str_euctosjis(buf1, sizeof(buf1), yomi1, client.default_char, &defuse); + if ((l < 0) || defuse) return 1; + defuse = 0; + l = sj3_str_euctosjis(buf2, sizeof(buf2), yomi2, client.default_char, &defuse); + if ((l < 0) || defuse) return 1; + y1p = buf1; + y2p = buf2; + flag = MBCODE_SJIS; + } else { + y1p = yomi1; + y2p = yomi2; + flag = MBCODE_EUC; + } + if (sj3_bunsetu_gakusyuu(&client, y1p, y2p, dcid, flag) == ERROR) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + return 1; + } + return 0; +} +int +sj3_gakusyuu2_mb(u_char *yomi1, u_char *yomi2, SJ3_STUDYREC *dcid) +{ +#ifndef __sony_news + if (_sys_code == SYS_NOTDEF) + _sys_code = set_sys_code(); +#endif + if (_sys_code == SYS_EUC) + return sj3_gakusyuu2_euc(yomi1, yomi2, dcid); + else + return sj3_gakusyuu2(yomi1, yomi2, dcid); +} + +int +sj3_touroku(u_char *yomi, u_char *kanji, int code) +{ + if (sj3_tango_touroku(&client, udicid, yomi, kanji, code, MBCODE_SJIS)) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + switch (sj3_error_number) { + case SJ3_NoSuchDict: + case SJ3_ReadOnlyDict: return SJ3_DICT_ERROR; + case SJ3_DictLocked: return SJ3_DICT_LOCKED; + case SJ3_BadYomiString: return SJ3_BAD_YOMI_STR; + case SJ3_BadKanjiString: return SJ3_BAD_KANJI_STR; + case SJ3_BadHinsiCode: return SJ3_BAD_HINSI_CODE; + case SJ3_AlreadyExistWord: return SJ3_WORD_EXIST; + case SJ3_NoMoreDouonWord: return SJ3_DOUON_FULL; + case SJ3_NoMoreUserDict: return SJ3_DICT_FULL; + case SJ3_NoMoreIndexBlock: return SJ3_INDEX_FULL; + default: return SJ3_TOUROKU_FAILED; + } + } + + return 0; +} +int +sj3_touroku_euc(u_char *yomi, u_char *kanji, int code) +{ + int l, flag; + u_char *yp; + u_char *kp; + if (client.svr_version == 1) { + defuse = 0; + l = sj3_str_euctosjis(buf1, sizeof(buf1), yomi, client.default_char, &defuse); + if ((l < 0) || defuse) return SJ3_BAD_YOMI_STR; + defuse = 0; + l = sj3_str_euctosjis(kbuf, sizeof(kbuf), kanji, client.default_char, &defuse); + if ((l < 0) || defuse) return SJ3_BAD_KANJI_STR; + yp = buf1; + kp = kbuf; + flag = MBCODE_SJIS; + } else { + yp = yomi; + kp = kanji; + flag = MBCODE_EUC; + } + if (sj3_tango_touroku(&client, udicid, yp, kp, code, flag)) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + switch (sj3_error_number) { + case SJ3_NoSuchDict: + case SJ3_ReadOnlyDict: return SJ3_DICT_ERROR; + case SJ3_DictLocked: return SJ3_DICT_LOCKED; + case SJ3_BadYomiString: return SJ3_BAD_YOMI_STR; + case SJ3_BadKanjiString: return SJ3_BAD_KANJI_STR; + case SJ3_BadHinsiCode: return SJ3_BAD_HINSI_CODE; + case SJ3_AlreadyExistWord: return SJ3_WORD_EXIST; + case SJ3_NoMoreDouonWord: return SJ3_DOUON_FULL; + case SJ3_NoMoreUserDict: return SJ3_DICT_FULL; + case SJ3_NoMoreIndexBlock: return SJ3_INDEX_FULL; + default: return SJ3_TOUROKU_FAILED; + } + } + + return 0; +} +int +sj3_touroku_mb(u_char *yomi, u_char *kanji, int code) +{ +#ifndef __sony_news + if (_sys_code == SYS_NOTDEF) + _sys_code = set_sys_code(); +#endif + if (_sys_code == SYS_EUC) + return sj3_touroku_euc(yomi, kanji, code); + else + return sj3_touroku(yomi, kanji, code); +} + +int +sj3_syoukyo(u_char *yomi, u_char *kanji, int code) +{ + if (sj3_tango_sakujo(&client, udicid, yomi, kanji, code, MBCODE_SJIS)) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + switch (sj3_error_number) { + case SJ3_NoSuchDict: + case SJ3_ReadOnlyDict: return SJ3_DICT_ERROR; + case SJ3_DictLocked: return SJ3_DICT_LOCKED; + case SJ3_BadYomiString: return SJ3_BAD_YOMI_STR; + case SJ3_BadKanjiString: return SJ3_BAD_KANJI_STR; + case SJ3_BadHinsiCode: return SJ3_BAD_HINSI_CODE; + case SJ3_NoSuchWord: return SJ3_WORD_NOT_EXIST; + default: return SJ3_SYOUKYO_FAILED; + } + } + return 0; +} +int +sj3_syoukyo_euc(u_char *yomi, u_char *kanji, int code) +{ + int l, flag; + u_char *yp; + u_char *kp; + if (client.svr_version == 1) { + defuse = 0; + l = sj3_str_euctosjis(buf1, sizeof(buf1), yomi, client.default_char, &defuse); + if ((l < 0) || defuse) return SJ3_BAD_YOMI_STR; + defuse = 0; + l = sj3_str_euctosjis(kbuf, sizeof(kbuf), kanji, client.default_char, &defuse); + if ((l < 0) || defuse) return SJ3_BAD_KANJI_STR; + yp = buf1; + kp = kbuf; + flag = MBCODE_SJIS; + } else { + yp = yomi; + kp = kanji; + flag = MBCODE_EUC; + } + if (sj3_tango_sakujo(&client, udicid, yp, kp, code, flag)) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + switch (sj3_error_number) { + case SJ3_NoSuchDict: + case SJ3_ReadOnlyDict: return SJ3_DICT_ERROR; + case SJ3_DictLocked: return SJ3_DICT_LOCKED; + case SJ3_BadYomiString: return SJ3_BAD_YOMI_STR; + case SJ3_BadKanjiString: return SJ3_BAD_KANJI_STR; + case SJ3_BadHinsiCode: return SJ3_BAD_HINSI_CODE; + case SJ3_NoSuchWord: return SJ3_WORD_NOT_EXIST; + default: return SJ3_SYOUKYO_FAILED; + } + } + return 0; +} +int +sj3_syoukyo_mb(u_char *yomi, u_char *kanji, int code) +{ +#ifndef __sony_news + if (_sys_code == SYS_NOTDEF) + _sys_code = set_sys_code(); +#endif + if (_sys_code == SYS_EUC) + return sj3_syoukyo_euc(yomi, kanji, code); + else + return sj3_syoukyo(yomi, kanji, code); +} + +int +sj3_getdict(u_char *buf) +{ + if (sj3_tango_syutoku(&client, udicid, buf, MBCODE_SJIS)) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + return 1; + } + return 0; +} +int +sj3_getdict_euc(u_char *buf) +{ + int l, ll, slen; + + if (client.svr_version == 1) { + if (sj3_tango_syutoku(&client, udicid, buf, MBCODE_SJIS)) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + return 1; + } + defuse = 0; + slen = strlen(buf) + 1; + l = sj3_str_sjistoeuc(kbuf, sizeof(kbuf), buf, client.default_char, &defuse); + if ((l < 0) || defuse) return 1; + l++; + ll = sj3_str_sjistoeuc(&(kbuf[l]), sizeof(kbuf) - l, &(buf[slen]), + client.default_char, &defuse); + if ((ll < 0) || defuse) return 1; + ll++; + slen += strlen(&(buf[slen])) + 1; + l = l + ll; + memcpy(&(kbuf[l]), &(buf[slen]), 4); + l += 4; + memcpy(buf, kbuf, l); + } else { + if (sj3_tango_syutoku(&client, udicid, buf, MBCODE_EUC)) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + return 1; + } + } + return 0; +} +int +sj3_getdict_mb(u_char *buf) +{ +#ifndef __sony_news + if (_sys_code == SYS_NOTDEF) + _sys_code = set_sys_code(); +#endif + if (_sys_code == SYS_EUC) + return sj3_getdict_euc(buf); + else + return sj3_getdict(buf); +} + +int +sj3_nextdict(u_char *buf) +{ + if (sj3_tango_jikouho(&client, udicid, buf, MBCODE_SJIS)) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + return 1; + } + return 0; +} +int +sj3_nextdict_euc(u_char *buf) +{ + int l, ll, slen; + + if (client.svr_version == 1) { + if (sj3_tango_jikouho(&client, udicid, buf, MBCODE_SJIS)) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + return 1; + } + defuse = 0; + slen = strlen(buf) + 1; + l = sj3_str_sjistoeuc(kbuf, sizeof(kbuf), buf, client.default_char, &defuse); + if ((l < 0) || defuse) return 1; + l++; + ll = sj3_str_sjistoeuc(&(kbuf[l]), sizeof(kbuf) - l, &(buf[slen]), + client.default_char, &defuse); + if ((ll < 0) || defuse) return 1; + ll++; + slen += strlen(&(buf[slen])) + 1; + l = l + ll; + memcpy(&(kbuf[l]), &(buf[slen]), 4); + l += 4; + memcpy(buf, kbuf, l); + } else { + if (sj3_tango_jikouho(&client, udicid, buf, MBCODE_EUC)) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + return 1; + } + } + return 0; +} +int +sj3_nextdict_mb(u_char *buf) +{ +#ifndef __sony_news + if (_sys_code == SYS_NOTDEF) + _sys_code = set_sys_code(); +#endif + if (_sys_code == SYS_EUC) + return sj3_nextdict_euc(buf); + else + return sj3_nextdict(buf); +} + +int +sj3_prevdict(u_char *buf) +{ + if (sj3_tango_maekouho(&client, udicid, buf, MBCODE_SJIS)) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + return 1; + } + return 0; +} +int +sj3_prevdict_euc(u_char *buf) +{ + int l, ll, slen; + + if (client.svr_version == 1) { + if (sj3_tango_maekouho(&client, udicid, buf, MBCODE_SJIS)) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + return 1; + } + defuse = 0; + slen = strlen(buf) + 1; + l = sj3_str_sjistoeuc(kbuf, sizeof(kbuf), buf, client.default_char, &defuse); + if ((l < 0) || defuse) return 1; + l++; + ll = sj3_str_sjistoeuc(&(kbuf[l]), sizeof(kbuf) - l, &(buf[slen]), + client.default_char, &defuse); + if ((ll < 0) || defuse) return 1; + ll++; + slen += strlen(&(buf[slen])) + 1; + l = l + ll; + memcpy(&(kbuf[l]), &(buf[slen]), 4); + l += 4; + memcpy(buf, kbuf, l); + } else { + if (sj3_tango_maekouho(&client, udicid, buf, MBCODE_EUC)) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + return 1; + } + } + return 0; +} +int +sj3_prevdict_mb(u_char *buf) +{ +#ifndef __sony_news + if (_sys_code == SYS_NOTDEF) + _sys_code = set_sys_code(); +#endif + if (_sys_code == SYS_EUC) + return sj3_prevdict_euc(buf); + else + return sj3_prevdict(buf); +} + +int +sj3_lockserv() +{ + if (sj3_lock_server(&client) == ERROR) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + return 1; + } + return 0; +} +int +sj3_unlockserv() +{ + if (sj3_unlock_server(&client)) { + if (client.fd < 0) { + mdicid = udicid = 0; + return -1; + } + return 1; + } + return 0; +} diff --git a/lib/sj3lib/sj3lib.pc.in b/lib/sj3lib/sj3lib.pc.in new file mode 100644 index 0000000..144e60e --- /dev/null +++ b/lib/sj3lib/sj3lib.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: sj3lib +Description: SJ3 Client Library +Version: @PACKAGE_VERSION@ +Libs: -L${libdir} -lsj3lib +Cflags: -I${includedir} @CFLAGS@ + diff --git a/lib/sj3lib/sj_string.c b/lib/sj3lib/sj_string.c new file mode 100644 index 0000000..984bd3f --- /dev/null +++ b/lib/sj3lib/sj_string.c @@ -0,0 +1,336 @@ +/* + * Copyright (c) 1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: string.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:03:58 $ + */ + +#include +#include +#include +#include + +#include "sj_euc.h" +#include "sj_string.h" + +#ifndef TRUE +#define TRUE (1) +#define FALSE (0) +#endif + +#define sjis2euc sj3_sjis2euc +#define euc2sjis sj3_euc2sjis + +#define issjis1(c) (((0x81 <= (c)) && ((c) <= 0x9f)) || \ + ((0xe0 <= (c)) && ((c) <= 0xfc))) +#define iseuc(c) ((0xa1 <= (c)) && ((c) <= 0xfe)) +#define iskana(c) ((0xa1 <= (c)) && ((c) <= 0xdf)) + +int +sj3_str_sjistoeuc(unsigned char *out, int outlen, unsigned char *in, unsigned char *sjis_default, int *useflag) +{ + unsigned char *sjis = in, *euc = out; + int n = 0; + unsigned short code, default_code; + + euc[0] = '\0'; + *useflag = 0; + + if (!sjis) + return 0; + + while (*sjis && n < outlen) { + if (issjis1(*sjis)) { + code = sjis2euc((*sjis << 8) | *(sjis+1)); + if (n + 2 > outlen) + return -1; + if (code == 0) { + default_code = sjis2euc((sjis_default[0] << 8) + | sjis_default[1]); + euc[n++] = default_code >> 8; + euc[n++] = default_code & 0xff; + (*useflag)++; + } else { + euc[n++] = code >> 8; + euc[n++] = code & 0xff; + } + sjis += 2; + } else { + if( *sjis >= 0xa1 && *sjis <= 0xdf ) { + if (n + 2 > outlen) + return -1; + euc[n++] = SS2; + } + euc[n++] = *sjis; + sjis++; + } + + } + if (n > outlen) + return -1; + + euc[n] = '\0'; + return n; +} + + +int +sj3_str_euctosjis(unsigned char *out, int outlen, unsigned char *in, unsigned char *sjis_default, int *useflag) +{ + unsigned char *euc = in, *sjis = out; + int n = 0; + unsigned short code, default_code; + + sjis[0] = '\0'; + *useflag = 0; + + if (!euc) + return 0; + + while (*euc && n < outlen) { + if (iseuc(*euc)) { + code = euc2sjis( (*euc << 8) | *(euc+1) ); + if (n + 2 > outlen) + return -1; + if (code == 0) { + sjis[n++] = sjis_default[0]; + sjis[n++] = sjis_default[1]; + (*useflag)++; + } else { + sjis[n++] = code >> 8; + sjis[n++] = code & 0xff; + } + euc += 2; + } else if (*euc == SS3) { + if (n + 2 > outlen) + return -1; + sjis[n++] = sjis_default[0]; + sjis[n++] = sjis_default[1]; + euc += 3; + (*useflag)++; + } else if (*euc == SS2) { + sjis[n++] = *(euc + 1); + euc += 2; + } else { + sjis[n++] = *euc; + euc++; + } + } + if (n > outlen) + return -1; + + sjis[n] = '\0'; + return n; +} + +int +sj3_sjistoeuclen(unsigned char *str, int max) +{ + int len = 0, bytes = 1; + + if (!max) + return 0; + while ((bytes <= max) && *str) { + if (issjis1(*str)) { + str++; + bytes++; + if (!*str) + break; + len += 2; + } else if (*str & 0x80) { + len += 2; + } else { + len++; + } + str++; + bytes++; + } + return len; +} + +#define MASK 0x7f +#define MSB 0x80 + + +static unsigned char def_char[] = {0x81, 0x40}; + +int +sj3_sjistoeuc(unsigned char *e, int elen, unsigned char *s, int slen) +{ + int dummy; + + return sj3_str_sjistoeuc(e, elen, s, def_char, &dummy); +} + +int +sj3_euctosjis(unsigned char *s, int slen, unsigned char *e, int elen) +{ + int dummy; + + return sj3_str_euctosjis(s, slen, e, def_char, &dummy); +} +void +sj_euc2sjis(unsigned char *s) +{ + s[0] &= MASK; + s[1] &= MASK; + sj_jis2sjis (s); +} +void +sj_jis2sjis(unsigned char *s) +{ + int high, low; + int nh, nl; + + high = s[0]; + low = s[1]; + nh = ((high - 0x21) >> 1) + 0x81; + if (nh > 0x9f) + nh += 0x40; + if (high & 1) { + nl = low + 0x1f; + if (low > 0x5f) + nl++; + } else + nl = low + 0x7e; + s[0] = nh; + s[1] = nl; +} +void +sj_sjis2euc(unsigned char *s) +{ + sj_sjis2jis (s); + s[0] |= MSB; + s[1] |= MSB; +} +void +sj_sjis2jis(unsigned char *s) +{ + int byte1, byte2; + unsigned char *sp; + + sp = s; + byte1 = *sp++; + byte2 = *sp--; + + if (byte1 <= 0x80 || byte1 >= 0xf0 + || ( byte1>=0xa0 && byte1<=0xdf ) + || byte2 <= 0x3f || byte2 >= 0xfe || byte2==0x7f ) { + byte1 = 0x81; + byte2 = 0x40; + } + byte1 -= (byte1 >= 0xa0) ? 0xc1 : 0x81; + if (byte2 >= 0x9f) { + *sp++ = (byte1 << 1) + 0x22; + *sp = byte2 - 0x7e; + } else { + *sp++ = (byte1 << 1) + 0x21; + *sp = byte2 - ((byte2 <= 0x7e) ? 0x1f : 0x20 ); + } +} + +unsigned short +sj3_jis2sjis(unsigned short code) +{ + unsigned char tmp[3]; + + tmp[0] = (code >> 8) & 0xff; + tmp[1] = code & 0xff; + tmp[2] = '\0'; + + sj_jis2sjis((unsigned char *) tmp); + + code = (tmp[0] << 8) + tmp[1]; + + return(code); +} + +unsigned short +sj3_jis2euc(unsigned short code) +{ + unsigned char tmp[3]; + + tmp[0] = (code >> 8) & 0xff; + tmp[1] = code & 0xff; + tmp[2] = '\0'; + + code = ((tmp[0] | 0x80) << 8) + (tmp[1] | 0x80); + + return(code); +} + +unsigned short +sj3_sjis2jis(unsigned short code) +{ + unsigned char tmp[3]; + + tmp[0] = (code >> 8) & 0xff; + tmp[1] = code & 0xff; + tmp[2] = '\0'; + + sj_sjis2jis((unsigned char *) tmp); + + code = (tmp[0] << 8) + tmp[1]; + + return(code); +} + +unsigned short +sj3_euc2sjis(unsigned short code) +{ + unsigned char tmp[3]; + + tmp[0] = (code >> 8) & 0xff; + tmp[1] = code & 0xff; + tmp[2] = '\0'; + + sj_euc2sjis((unsigned char *) tmp); + + code = (tmp[0] << 8) + tmp[1]; + + return(code); +} + +unsigned short +sj3_sjis2euc(unsigned short code) +{ + unsigned char tmp[3]; + + tmp[0] = (code >> 8) & 0xff; + tmp[1] = code & 0xff; + tmp[2] = '\0'; + + sj_sjis2euc((unsigned char *) tmp); + + code = (tmp[0] << 8) + tmp[1]; + + return(code); +} diff --git a/lib/sj3rkcv/Makefile.am b/lib/sj3rkcv/Makefile.am new file mode 100644 index 0000000..4411a52 --- /dev/null +++ b/lib/sj3rkcv/Makefile.am @@ -0,0 +1,21 @@ +if BUILDABLE_SJ3DEMO + +EXTRA_DIST = sjrk sj3rkcv.h + +INCLUDES = \ + -I$(top_srcdir)/include/sj3compat \ + -I$(top_srcdir)/include/sj3comon \ + -I$(top_srcdir)/include/sj3rkcv + +noinst_LTLIBRARIES = libsj3rkcv.la + +libsj3rkcv_la_SOURCES = \ + rk_conv.c \ + sj3_rkcv.c \ + wc16_str.c + +rkdir = $(SJ3SYSCONFDIR) + +rk_DATA = sjrk + +endif diff --git a/lib/sj3rkcv/rk_conv.c b/lib/sj3rkcv/rk_conv.c new file mode 100644 index 0000000..cee0a7a --- /dev/null +++ b/lib/sj3rkcv/rk_conv.c @@ -0,0 +1,1221 @@ +/* + * Copyright (c) 1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: rk_conv.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:03:59 $ + */ + + +#ifndef lint +static char rcsid[] = "$Header: /export/work/contrib/sj3/sj3rkcv/RCS/rk_conv.c,v 1.14 1994/06/03 07:42:16 notanaka Exp $"; +#endif + +#include "wchar16.h" +#include +#include +#include +#include +#ifdef SVR4 +#include +#else +#include +#endif +#ifdef __sony_news +#include +#endif +#include "kctype.h" +#include "rk.h" + +#include "sj3rkcv.h" + +#if defined(__sony_news) && defined(SVR4) +#define wscmp sj3_wscmp16 +#define wsncmp sj3_wsncmp16 +#define wsncpy sj3_wsncpy16 +#define wscpy sj3_wscpy16 +#define wslen sj3_wslen16 +#define mbstowcs sj3_mbstowcs16 +#define wcstombs sj3_wcstombs16 +#endif + +#define ENDMARK(c) (c == SPACE || c == TAB) +#define SKLINE(c) (c == EOL || c == NSTR) +#define TOUPPER(c) (islower(c) ? toupper(c) : (c)) + +#define WTOUPPER(c) ((wchar16_t) (islower(((c) & 0xff)) ? toupper(((c) & 0xff)) : ((c) & 0xff))) + +#define SJ3_NO -1 +#define SJ3_SJIS 0 +#define SJ3_EUC 1 + +RkTabl *sj3_rcode[MAXCODE]; +RkTablW16 *sj3_rcode_w16[MAXCODE]; +RkTablW16 *rktblp; +wchar16_t rline[MAXLLEN]; +wchar16_t lstr[MAXLLEN]; +static wchar16_t intmp[MAXLLEN]; +static wchar16_t outtmp[MAXLLEN]; +static u_char mtmp[MAXLLEN]; +static int rk_erase; +static int rk_errin = 0; +static int rk_cflag; +static int rk_klen; +static int file_code = SJ3_NO; + + +static RkbufRec rkpbuf, *rkpp = NULL; +static RkTablW16 *rkhp; +static StrbufRec strpbuf, *strpp; +static wchar16_t *shp; +static YmibufRec ymipbuf, *ymipp; +static u_short *yhp; + + +void +sj3_rkcode(int code) +{ + if (code) + file_code = SJ3_NO; +} + + + + +int +sj3_rkinit2(char *rkfile, int erase) +{ + rk_erase = erase; + return(sj3_rkinit_mb(rkfile)); +} + +int +rcode_sjis_init() +{ + int i, rkeylen = 0, ryomilen = 0, rstrlen = 0; + int klen, ylen, slen, tablnum = 0, tablsize; + u_char *mbstr, *mptr, mtmp[BUFSIZ], mtmp2[BUFSIZ]; + u_short *wcstr, *wcptr; + RkTabl *tabl, *tabl_next, *tabl_prev; + RkTablW16 *tabl_w16; + + tablsize = sizeof(RkTabl); + + + for (i = 0; i < MAXCODE; i++) { + if (sj3_rcode_w16[i]) { + tabl_w16 = sj3_rcode_w16[i]; + while (tabl_w16) { + tablnum++; + if (tabl_w16->r_key) + rkeylen += wslen(tabl_w16->r_key) + 1; + if (tabl_w16->r_str) + rstrlen += wslen(tabl_w16->r_str) + 1; + if (tabl_w16->k_yomi) + ryomilen += wslen(tabl_w16->k_yomi) + 1; + tabl_w16 = tabl_w16->next; + } + } + } + if (!tablnum) + return 1; + tabl = (RkTabl *) malloc(tablnum * tablsize); + if (!tabl) { + return 0; + } + memset(tabl, '\0', tablnum * tablsize); + mbstr = (u_char *) malloc(rkeylen + rstrlen); + if (!mbstr) { + free(tabl); + return 0; + } + memset(mbstr, '\0', rkeylen + rstrlen); + wcptr = wcstr = (u_short *) malloc(ryomilen * sizeof(u_short)); + if (!wcstr) { + free(tabl); + free(mbstr); + return 0; + } + memset(wcptr, '\0', ryomilen * sizeof(u_short)); + + rkeylen *= 2; + rstrlen *= 2; + for (i = 0; i < MAXCODE; i++) { + if (sj3_rcode_w16[i]) { + tabl_w16 = sj3_rcode_w16[i]; + tabl_next = sj3_rcode[i] = tabl; + while (tabl_w16) { + tabl += 1; + if (tabl_w16->r_key) { + if (current_locale == LC_CTYPE_EUC) { + mptr = mtmp; + } else { + mptr = mbstr; + } + if (wcstombs((char *)mptr, tabl_w16->r_key, BUFSIZ) == -1) { + free(tabl); + free(mbstr); + free(wcstr); + return 0; + } + if (current_locale == LC_CTYPE_EUC) { + if ((klen = euctosjis(mbstr, rkeylen, mtmp, sizeof(mtmp))) < 0) { + free(tabl); + free(mbstr); + free(wcstr); + return 0; + } + } else { + klen = strlen((char *)mbstr); + } + tabl_next->r_key = mbstr; + mbstr += klen + 1; + rkeylen -= klen + 1; + } else { + tabl_next->r_key = NULL; + } + if (tabl_w16->r_str) { + if (current_locale == LC_CTYPE_EUC) { + mptr = mtmp; + } else { + mptr = mbstr; + } + if (wcstombs((char *)mptr, tabl_w16->r_str, BUFSIZ) == -1) { + free(tabl); + free(mbstr); + free(wcstr); + return 0; + } + if (current_locale == LC_CTYPE_EUC) { + if ((slen = euctosjis(mbstr, rstrlen, mtmp, sizeof(mtmp))) < 0) { + free(tabl); + free(mbstr); + free(wcstr); + return 0; + } + } else { + slen = strlen((char *)mbstr); + } + tabl_next->r_str = mbstr; + mbstr += slen + 1; + rstrlen -= slen + 1; + } else { + tabl_next->r_str = NULL; + } + if (tabl_w16->k_yomi) { + mptr = mtmp; + if (wcstombs((char *)mptr, tabl_w16->k_yomi, BUFSIZ) == -1) { + free(tabl); + free(mbstr); + free(wcstr); + return 0; + } + if (current_locale == LC_CTYPE_EUC) { + if (euctosjis(mtmp2, sizeof(mtmp2), mtmp, sizeof(mtmp)) < 0) { + free(tabl); + free(mbstr); + free(wcstr); + return 0; + } + mptr = mtmp2; + } else { + mptr = mtmp; + } + tabl_next->k_yomi = wcptr; + ylen = 0; + while (*mptr) { + if (issjis1(*mptr) && issjis2(mptr[1])) { + *wcptr = (*mptr << 8) + mptr[1]; + mptr++; + } else { + *wcptr = *mptr; + } + wcptr++; + mptr++; + ylen++; + } + *wcptr++ = 0; + ryomilen -= ylen + 1; + } else { + tabl_next->k_yomi = NULL; + } + tabl_w16 = tabl_w16->next; + tabl_next->next = tabl; + tabl_prev = tabl_next; + tabl_next = tabl; + } + tabl_prev->next = NULL; + } + } + return 1; +} + +int +rcode_euc_init() +{ + int i, rkeylen = 0, ryomilen = 0, rstrlen = 0; + int klen, ylen, slen, tablnum = 0, tablsize; + u_char *mbstr, *mptr, mtmp[BUFSIZ], mtmp2[BUFSIZ]; + u_short *wcstr, *wcptr; + RkTabl *tabl, *tabl_next, *tabl_prev; + RkTablW16 *tabl_w16; + + tablsize = sizeof(RkTabl); + + + for (i = 0; i < MAXCODE; i++) { + if (sj3_rcode_w16[i]) { + tabl_w16 = sj3_rcode_w16[i]; + while (tabl_w16) { + tablnum++; + if (tabl_w16->r_key) + rkeylen += wslen(tabl_w16->r_key) + 1; + if (tabl_w16->r_str) + rstrlen += wslen(tabl_w16->r_str) + 1; + if (tabl_w16->k_yomi) + ryomilen += wslen(tabl_w16->k_yomi) + 1; + tabl_w16 = tabl_w16->next; + } + } + } + if (!tablnum) + return 1; + tabl = (RkTabl *) malloc(tablnum * tablsize); + if (!tabl) { + return 0; + } + memset(tabl, '\0', tablnum * tablsize); + mbstr = (u_char *) malloc(rkeylen + rstrlen); + if (!mbstr) { + free(tabl); + return 0; + } + memset(mbstr, '\0', rkeylen + rstrlen); + wcptr = wcstr = (u_short *) malloc(ryomilen * sizeof(u_short)); + if (!wcstr) { + free(tabl); + free(mbstr); + return 0; + } + memset(wcptr, '\0', ryomilen * sizeof(u_short)); + + rkeylen *= 2; + rstrlen *= 2; + for (i = 0; i < MAXCODE; i++) { + if (sj3_rcode_w16[i]) { + tabl_w16 = sj3_rcode_w16[i]; + tabl_next = sj3_rcode[i] = tabl; + while (tabl_w16) { + tabl += 1; + if (tabl_w16->r_key) { + if (current_locale == LC_CTYPE_SHIFTJIS) { + mptr = mtmp; + } else { + mptr = mbstr; + } + if (wcstombs((char *)mptr, tabl_w16->r_key, BUFSIZ) == -1) { + free(tabl); + free(mbstr); + free(wcstr); + return 0; + } + if (current_locale == LC_CTYPE_SHIFTJIS) { + if ((klen = euctosjis(mbstr, rkeylen, mtmp, sizeof(mtmp))) < 0) { + free(tabl); + free(mbstr); + free(wcstr); + return 0; + } + } else { + klen = strlen((char *)mbstr); + } + tabl_next->r_key = mbstr; + mbstr += klen + 1; + rkeylen -= klen + 1; + } else { + tabl_next->r_key = NULL; + } + if (tabl_w16->r_str) { + if (current_locale == LC_CTYPE_SHIFTJIS) { + mptr = mtmp; + } else { + mptr = mbstr; + } + if (wcstombs((char *)mptr, tabl_w16->r_str, BUFSIZ) == -1) { + free(tabl); + free(mbstr); + free(wcstr); + return 0; + } + if (current_locale == LC_CTYPE_SHIFTJIS) { + if ((slen = sjistoeuc(mbstr, rstrlen, mtmp, sizeof(mtmp))) < 0) { + free(tabl); + free(mbstr); + free(wcstr); + return 0; + } + } else { + slen = strlen((char *)mbstr); + } + tabl_next->r_str = mbstr; + mbstr += slen + 1; + rstrlen -= slen + 1; + } else { + tabl_next->r_str = NULL; + } + if (tabl_w16->k_yomi) { + mptr = mtmp; + if (wcstombs((char *)mptr, tabl_w16->k_yomi, BUFSIZ) == -1) { + free(tabl); + free(mbstr); + free(wcstr); + return 0; + } + if (current_locale == LC_CTYPE_SHIFTJIS) { + if (sjistoeuc(mtmp2, sizeof(mtmp2), mtmp, sizeof(mtmp)) < 0) { + free(tabl); + free(mbstr); + free(wcstr); + return 0; + } + mptr = mtmp2; + } else { + mptr = mtmp; + } + tabl_next->k_yomi = wcptr; + ylen = 0; + while (*mptr) { + if (iseuc(*mptr) && iseuc(mptr[1])) { + *wcptr = (*mptr << 8) + mptr[1]; + mptr++; + } else { + *wcptr = *mptr; + } + wcptr++; + mptr++; + ylen++; + } + *wcptr++ = 0; + ryomilen -= ylen + 1; + } else { + tabl_next->k_yomi = NULL; + } + tabl_w16 = tabl_w16->next; + tabl_next->next = tabl; + tabl_prev = tabl_next; + tabl_next = tabl; + } + tabl_prev->next = NULL; + } + } + return 1; +} + +int +sj3_rkinit(char *rkfile) +{ + return sj3_rkinit_sub(rkfile, rcode_sjis_init); +} + +int +sj3_rkinit_euc(char *rkfile) +{ + return sj3_rkinit_sub(rkfile, rcode_euc_init); +} + +int +sj3_rkinit_mb(char *rkfile) +{ + if (current_locale == LC_CTYPE_EUC) + return sj3_rkinit_sub(rkfile, rcode_euc_init); + else + return sj3_rkinit_sub(rkfile, rcode_sjis_init); +} + +int +sj3_rkinit_sub(char *rkfile, int (*mbfunc)()) +{ + char *p; + int len, klen, rlen, retv; + FILE *fp; + char line[MAXLEN + 1]; + wchar16_t rkey[MAXWLEN + 1], rstr[MAXWLEN + 1]; + u_short kstr[MAXWLEN + 1]; + RkTablW16 *rktp; + + if (rkfile == NULL || *rkfile == NSTR) + fp = stdin; + else if ((fp = fopen(rkfile, "r")) == NULL) + return(1); + + cltable(); + line[MAXLEN - 1] = EOL; + retv = 0; + + while ((p = fgets(line, MAXLEN + 1, fp)) != NULL) { + if (line[MAXLEN - 1] != EOL) { + line[MAXLEN - 1] = EOL; + continue; + } + if (SKLINE(*p) || *p == '#') + continue; + if ((p = getkey(p, rkey, &len)) == NULL) + continue; + if ((p = rkgetyomi(p, kstr, &klen)) == NULL) + continue; + p = getkey(p, rstr, &rlen); + if (rlen > 0 && chk_rstr(rstr, rkey, rlen, len)) + rlen = 0; + + if ((rktp = mktable(rkey, len)) == NULL) { + fprintf(stderr, "Can't allocate memory for table\n"); + retv = FAIL; + break; + } + if (rktp->k_yomi != NULL) + continue; + if (stradd(&(rktp->r_key), &rkey[1], len) == -1) { + fprintf(stderr, "Can't allocate memory for char\n"); + retv = FAIL; + break; + } + if (kstradd(&(rktp->k_yomi), kstr, klen + 1) == -1) { + fprintf(stderr, "Can't allocate memory for short\n"); + retv = FAIL; + break; + } + if (stradd(&(rktp->r_str), rstr, rlen + 1) == -1) { + fprintf(stderr, "Can't allocate memory for char\n"); + retv = FAIL; + break; + } + + } + fclose(fp); + if (!(*mbfunc)()) + retv = FAIL; + sj3_rkclear(); + return(retv); +} + + + +char * +getkey(char *istr, wchar16_t *ostr, int *len) +{ + char c, *p; + int i; + + while (ENDMARK(*istr)) + istr++; + + p = istr; + i = 0; + while (!ENDMARK(*p)) { + if (SKLINE(*p)) + break; + c = *p++; + + if ( c == BSL) { + if (SKLINE(*p)) + break; + c = *p++; + switch (c) { + case 'n' : + *ostr++ = (wchar16_t) EOL; + break; + case 't' : + *ostr++ = (wchar16_t) TAB; + break; + default : + *ostr++ = (wchar16_t) TOUPPER(c); + } + } else if ( c == '^') { + if (*p >= '@' && *p <= '_') { + *ostr++ = (wchar16_t) (*p - '@'); + p++; + } else if (*p == '?') { + *ostr++ = (wchar16_t) 0x7f; + p++; + } else + *ostr++ = (wchar16_t) '^'; + } else + *ostr++ = (wchar16_t) TOUPPER(c); + if (++i > MAXWLEN) { + i = 0; + break; + } + } + *ostr = (wchar16_t) NSTR; + *len = i; + if (i > 0) + return(p); + return(NULL); +} + + + +char * +rkgetyomi(char *istr, wchar16_t *ostr, int *len) +{ + u_char c; + u_char *p; + int i; + u_short cc; + + while (ENDMARK(*istr)) + istr++; + + p = (u_char *)istr; + i = 0; + while (!ENDMARK(*p)) { + if (SKLINE(*p)) + break; + cc = c = *p++; + if (file_code == SJ3_SJIS) { + if (issjis1(c) && issjis2(*p)) { + cc = (c << 8) + (*p & MASK); + p++; + cc = sjis2euc(cc); + } + } else if (file_code == SJ3_EUC) { + if (iseuc(c) && iseuc(*p)) { + cc = (c << 8) + (*p & MASK); + p++; + } else if (iseuckana(c) && iskana2(*p)) { + cc = *p++; + } + else if (IsEUCHojo(c) && iseuc(*p) && iseuc(p[1])) { + cc = WcSetX0212(*p, p[1]); + p += 2; + } + } else { + if (issjis1(c) && issjis2(*p)) { + file_code = SJ3_SJIS; + p--; + continue; + } + if ((iseuc(c) && iseuc(*p)) || (iseuckana(c) && + iskana2(*p)) || (IsEUCHojo(c) && iseuc(*p) && + iseuc(p[1]))) { + file_code = SJ3_EUC; + p--; + continue; + } + } + *ostr++ = (wchar16_t) cc; + if (++i > MAXWLEN) { + i = 0; + break; + } + } + *ostr = (wchar16_t) 0; + *len = i; + if (i > 0) + return((char *)p); + return(NULL); +} + + + +void +cltable() +{ + int i; + + if (rkpp != NULL) { + for (i = 0; i < MAXCODE; i++) { + sj3_rcode_w16[i] = NULL; + sj3_rcode[i] = NULL; + } + rkpp = &rkpbuf; + rkhp = rkpp->rkbuf; + strpp = &strpbuf; + shp = strpp->strbuf; + ymipp = &ymipbuf; + yhp = ymipp->ymibuf; + } +} + + + +int +chk_rstr(wchar16_t *rstr, wchar16_t *rkey, int rlen, int klen) +{ + int i; + wchar16_t *p; + + if (rlen >= klen) + return(1); + p = rkey; + while (rlen <= klen) { + if (wsncmp(rstr, p, rlen) == 0) + return(0); + klen--; + p++; + } + return(1); +} + + + +RkTablW16 * +rkalloc() +{ + RkTablW16 *rkp; + RkbufRec *rkbrp; + + if (rkpp == NULL) { + rkp = (RkTablW16 *)malloc(RKSIZE * sizeof(RkTablW16)); + if (rkp == NULL) + return(NULL); + rkhp = rkp; + rkpp = &rkpbuf; + rkpp->rkbuf = rkp; + rkpp->rkend = rkp + RKSIZE; + } else if (rkhp >= rkpp->rkend) { + rkp = (RkTablW16 *)malloc(RKINCZ * sizeof(RkTablW16)); + rkbrp = (RkbufRec *)malloc(sizeof(RkbufRec)); + if (rkp == NULL || rkbrp == NULL) + return(NULL); + rkhp = rkp; + rkpp->rkbufp = rkbrp; + rkpp = rkbrp; + rkpp->rkbuf = rkp; + rkpp->rkend = rkp + RKINCZ; + } + rkp = rkhp++; + + rkp->r_key = NULL; + rkp->k_yomi = NULL; + rkp->r_str = NULL; + rkp->next = NULL; + return(rkp); +} + + + +int +stradd(wchar16_t **cp, wchar16_t *str, int len) +{ + wchar16_t *strp; + StrbufRec *sbrp; + + if (len <= 1) + return(0); + if (strpp == NULL) { + strp = (wchar16_t *)malloc(STRSIZE * sizeof(wchar16_t)); + if (strp == NULL) + return(-1); + shp = strp; + strpp = &strpbuf; + strpp->strbuf = strp; + strpp->strend = strp + STRSIZE; + } else if (shp + len >= strpp->strend) { + strp = (wchar16_t *)malloc(STRINCZ * sizeof(wchar16_t)); + sbrp = (StrbufRec *)malloc(sizeof(StrbufRec)); + if (strp == NULL || sbrp == NULL) + return(-1); + shp = strp; + strpp->strbufp = sbrp; + strpp = sbrp; + strpp->strbuf = strp; + strpp->strend = strp + STRINCZ; + } + *cp = shp; + wscpy(shp, str); + shp += len; + return(0); +} + + + +int +kstradd(wchar16_t **cp, wchar16_t *kstr, int len) +{ + int i; + wchar16_t *usp; + YmibufRec *ybrp; + + if (len <= 1) + return(0); + if (ymipp == NULL) { + usp = (wchar16_t *)malloc(YMISIZE * sizeof(wchar16_t)); + if (usp == NULL) + return(-1); + yhp = usp; + ymipp = &ymipbuf; + ymipp->ymibuf = usp; + ymipp->ymiend = usp + YMISIZE; + } else if (yhp + len >= ymipp->ymiend) { + usp = (wchar16_t *)malloc(YMIINCZ * sizeof(wchar16_t)); + ybrp = (YmibufRec *)malloc(sizeof(YmibufRec)); + if (usp == NULL || ybrp == NULL) + return(-1); + yhp = usp; + ymipp->ymibufp = ybrp; + ymipp = ybrp; + ymipp->ymibuf = usp; + ymipp->ymiend = usp + YMIINCZ; + } + *cp = yhp; + for (i = 0; i < len; i++) + *yhp++ = *kstr++; + return(0); +} + + + +RkTablW16 * +mktable(wchar16_t *key, int len) +{ + int i; + RkTablW16 *nrktp, *orktp; + RkTablW16 *rktp; + u_int code; + + nrktp = NULL; + orktp = NULL; + code = *key++ & MASK; + rktp = sj3_rcode_w16[code]; + while (rktp != NULL) { + if (rktp->r_key == NULL) { + if (*key == NSTR) + return(rktp); + nrktp = rktp; + break; + } + if ((i = wscmp(key, rktp->r_key)) == 0) + return(rktp); + if (i > 0 && (wslen(rktp->r_key) < len)) { + nrktp = rktp; + break; + } + orktp = rktp; + rktp = orktp->next; + } + if ((rktp = rkalloc()) == NULL) + return(NULL); + if (sj3_rcode_w16[code] == NULL) + sj3_rcode_w16[code] = rktp; + else { + if (nrktp != NULL) { + rktp->next = nrktp; + if (orktp == NULL) + sj3_rcode_w16[code] = rktp; + else + orktp->next = rktp; + } else + orktp->next = rktp; + } + return(rktp); +} + + + +void +sj3_rkebell(int err) +{ + rk_errin = err; +} + + + +void +sj3_rkclear() +{ + rline[0] = NSTR; + lstr[0] = NSTR; + rktblp = NULL; + rk_klen = 0; + sj3_rkreset(); +} + +void +sj3_rkreset() +{ + rk_cflag = -1; +} + + + +void +sj3_rkconvc(wchar16_t c, u_int *rkstr) +{ + int i; + wchar16_t *p, *q; + int len; + wchar16_t wstr[MAXLLEN]; + u_int kstr[MAXLLEN], *kp; + + len = wslen(rline); + if (c == rk_erase) { + if (rk_cflag == 0) { + for(i = 0; i < len; i++) + *rkstr++ = ERRCODE + rk_erase; + for (i = 0; i < rk_klen; i++) + *rkstr++ = rk_erase; + p = lstr; + q = rline; + while(*p != NSTR) { + *q++ = *p; + *rkstr++ = ERRCODE + *p++; + } + *q = NSTR; + rktblp = NULL; + rk_cflag = -1; + } else { + if (len <= 0) + *rkstr++ = rk_erase; + else + *rkstr++ = ERRCODE + rk_erase; + rk_cflag--; + if (len <= 1) { + rktblp = NULL; + rline[0] = NSTR; + } else + rline[--len] = NSTR; + } + } else { + rline[len] = c; + rline[len + 1] = NSTR; + wscpy(wstr, rline); + if ((i = sj3_rkconv2(wstr, kstr, len)) == CONTINUE) { + if (rk_cflag >= 0) + rk_cflag++; + *rkstr++ = ERRCODE + c; + } else if (i == NOMACH) { + rline[len] = NSTR; + *rkstr++ = ERRBEL; + } else { + rk_cflag = 0; + rk_klen = i; + for (i = 0; i < len; i++) + *rkstr++ = ERRCODE + rk_erase; + kp = kstr; + while (*kp != 0) + *rkstr++ = *kp++; + wscpy(lstr, rline); + lstr[len] = NSTR; + p = wstr; + q = rline; + while(*p != NSTR) { + *rkstr++ = ERRCODE + *p; + *q++ = *p++; + } + *q = NSTR; + } + } + *rkstr = RKEND; +} + + + +int +sj3_rkconv2(wchar16_t *wstr, u_int *kstr, int wlen) +{ + int i; + wchar16_t *p, *q, *s; + int rlen, len; + wchar16_t svstr[MAXLLEN]; + RkTablW16 *rktp; + u_short *kp; + + len = 0; + if ((rktp = rktblp) == NULL) + rktp = sj3_rcode_w16[WTOUPPER(*wstr)]; + if (*wstr > (wchar16_t) 0xff) rktp = NULL; + while(1) { + while(rktp != NULL) { + rlen = rkmatch((wstr + 1), rktp->r_key, wlen); + if (rlen == CONTINUE) { + rktblp = rktp; + break; + } else if (rlen != NOMACH) { + kp = rktp->k_yomi; + if ((s = rktp->r_str) != NULL) + i = wslen(s); + else + i = 0; + *kstr++ = SetMojilen(rlen - i) + *kp++; + len++; + while(*kp != 0) { + *kstr++ = *kp++; + len++; + } + p = (wstr + rlen); + q = svstr; + if (i > 0) { + p -= i; + while (*s != NSTR) { + if (*s == WTOUPPER(*p)) + *q = *p; + else + *q = *s; + q++; + p++; + s++; + } + } + if (rlen <= wlen) { + while (*p != NSTR) { + *q++ = *p++; + } + *q = NSTR; + wscpy(wstr, svstr); + rktp = sj3_rcode_w16[WTOUPPER(*wstr)]; + wlen = wslen(wstr); + wlen--; + continue; + } + *q = NSTR; + wscpy(wstr, svstr); + rktblp = NULL; + break; + } + rktp = rktp->next; + } + if (rktp == NULL) { + if (wlen <= 0) { + *kstr++ = SetMojilen(1) + *wstr; + *wstr = NSTR; + rktblp = NULL; + len++; + } else if (rk_errin) { + len = NOMACH; + } else { + *kstr++ = SetMojilen(1) + *wstr; + len++; + p = wstr; + for (i = 0; i < wlen; i++) { + *p = *(p + 1); + p++; + } + *p = NSTR; + rktp = sj3_rcode_w16[WTOUPPER(*wstr)]; + if (*wstr > (wchar16_t) 0xff) rktp = NULL; + wlen--; + continue; + } + } + *kstr = 0; + break; + } + return(len); +} + + + + +int +sj3_rkconv(u_char *romaji, u_char *kana) +{ + wchar16_t *wstr; + int len, mflag = 0, ret; + + len = strlen((char *)romaji) + 1; + if (len > (sizeof(intmp) / sizeof(wchar16_t))) { + wstr = (wchar16_t *) malloc(len * sizeof(wchar16_t)); + if (!wstr) return -1; + mflag = 1; + } else { + wstr = (wchar16_t *) intmp; + } + if (mbstowcs(wstr, (char *)romaji, len) == -1) { + if (mflag) free(wstr); + return -1; + } + ret = sj3_rkconv_w16(wstr, outtmp); + if (ret == 0 || ret == -1) { + if (mflag) free(wstr); + return ret; + } + if (wcstombs((char *)mtmp, outtmp, sizeof(outtmp)) == -1) { + if (mflag) free(wstr); + return -1; + } + if (wcstombs((char *)romaji, wstr, len) == -1) { + if (mflag) free(wstr); + return -1; + } + if (current_locale == LC_CTYPE_EUC) { + len = euctosjis(kana, MAXLLEN*2, mtmp, sizeof(mtmp)); + } else { + (void) memcpy(kana, mtmp, strlen((char *)mtmp) + 1); + } + + if (mflag) free(wstr); + if (len > 0) { + return ret; + } else { + return len; + } +} + +int +sj3_rkconv_euc(u_char *romaji, u_char *kana) +{ + wchar16_t *wstr; + int len, mflag = 0, ret; + + len = strlen((char *)romaji) + 1; + if (len > sizeof(intmp)) { + wstr = (wchar16_t *) malloc(len * sizeof(wchar16_t)); + if (!wstr) return -1; + mflag = 1; + } else { + wstr = (wchar16_t *) intmp; + } + if (mbstowcs(wstr, (char *)romaji, len) == -1) { + if (mflag) free(wstr); + return -1; + } + ret = sj3_rkconv_w16(wstr, outtmp); + if (ret == 0 || ret == -1) { + if (mflag) free(wstr); + return ret; + } + if (wcstombs((char *)mtmp, outtmp, sizeof(outtmp)) == -1) { + if (mflag) free(wstr); + return -1; + } + if (wcstombs((char *)romaji, wstr, len) == -1) { + if (mflag) free(wstr); + return -1; + } + if (current_locale == LC_CTYPE_EUC) { + (void) memcpy(kana, mtmp, strlen((char *)mtmp) + 1); + } else { + len = sjistoeuc(kana, MAXLLEN*2, mtmp, sizeof(mtmp)); + } + + if (mflag) free(wstr); + if (len > 0) { + return ret; + } else { + return len; + } +} + +int +sj3_rkconv_mb(u_char *romaji, u_char *kana) +{ + if (current_locale == LC_CTYPE_EUC) + return sj3_rkconv_euc(romaji, kana); + else + return sj3_rkconv(romaji, kana); +} + +int +sj3_rkconv_w16(wchar16_t *wstr, wchar16_t *kstr) +{ + + int i; + wchar16_t *p, *q, *s; + u_short cc; + int rlen, len; + wchar16_t svstr[MAXLLEN]; + RkTablW16 *rktp; + u_short *kp; + + len = wslen(wstr); + rktp = sj3_rcode_w16[WTOUPPER(*wstr)]; + if (*wstr > (wchar16_t) 0xff) rktp = NULL; + while(rktp != NULL) { + rlen = rkmatch((wstr + 1), rktp->r_key, len - 1); + if (rlen == CONTINUE) { + break; + } else if (rlen != NOMACH) { + kp = rktp->k_yomi; + while((cc = *kp++) != 0) { + *kstr++ = cc; + } + wscpy(svstr, wstr); + q = wstr; + p = svstr; + if ((s = rktp->r_str) != NULL) { + p += rlen; + i = wslen(s); + p -= i; + while (*s != NSTR) { + if (*s == WTOUPPER(*p)) + *q = *p; + else + *q = *s; + q++; + p++; + s++; + } + } + if (rlen < len) { + p = svstr; + p += rlen; + while (*p != NSTR) + *q++ = *p++; + } + *q = NSTR; + break; + } + rktp = rktp->next; + } + if (rktp == NULL && len <= 1) { + *kstr++ = *wstr; + *wstr = NSTR; + rlen = 1; + } + *kstr = NSTR; + return(rlen); +} + + + +int +rkmatch(wchar16_t *s1, wchar16_t *s2, int len) +{ + int i; + + i = 1; + if (s2 == NULL) + return(i); + for (; i < len + 1; i++) { + if (*s1 > (wchar16_t) 0xff) + return(NOMACH); + if (WTOUPPER(*s1) != *s2) { + if (*s2 != NSTR) + return(NOMACH); + break; + } + s1++; + s2++; + } + if (*s2 != NSTR) + i = CONTINUE; + return(i); +} diff --git a/lib/sj3rkcv/sj3_rkcv.c b/lib/sj3rkcv/sj3_rkcv.c new file mode 100644 index 0000000..3604a55 --- /dev/null +++ b/lib/sj3rkcv/sj3_rkcv.c @@ -0,0 +1,840 @@ +/* + * Copyright (c) 1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj3_rkcv.c,v $ + * $SonyRevision: 1.3 $ + * $SonyDate: 1995/02/10 06:02:25 $ + */ + + +#include +#include + +#include "wchar16.h" +#include "kana.h" +#include "rk.h" +#include "kctype.h" + +#include "sj3rkcv.h" + +#if defined(__sony_news) && (SVR4) +#define wscmp sj3_wscmp16 +#define wsncmp sj3_wsncmp16 +#define wsncpy sj3_wsncpy16 +#define wscpy sj3_wscpy16 +#define wslen sj3_wslen16 +#define mbstowcs sj3_mbstowcs16 +#define wcstombs sj3_wcstombs16 +#endif + +extern int current_locale; + +#define sj_iskata(c) (c >= 0xa5a1 && c <= 0xa5f6) +#define sj_ishira(c) (c >= 0xa4a1 && c <= 0xa4f3) +static wchar16_t intmp[MAXLLEN]; +static wchar16_t outtmp[MAXLLEN]; +static u_char mtmp[MAXLLEN]; + +static u_short HKtable[ZKATAn] = { + KANA_XA, KANA_A, + KANA_XA + 1, KANA_A + 1, + KANA_XA + 2, KANA_A + 2, + KANA_XA + 3, KANA_A + 3, + KANA_XA + 4, KANA_A + 4, + + KANA_KA, KANA_GA, + KANA_KA + 1, KANA_GA + (1<<8), + KANA_KA + 2, KANA_GA + (2<<8), + KANA_KA + 3, KANA_GA + (3<<8), + KANA_KA + 4, KANA_GA + (4<<8), + + KANA_SA, KANA_ZA, + KANA_SA + 1, KANA_ZA + (1<<8), + KANA_SA + 2, KANA_ZA + (2<<8), + KANA_SA + 3, KANA_ZA + (3<<8), + KANA_SA + 4, KANA_ZA + (4<<8), + + KANA_TA, KANA_DA, + KANA_TA + 1, KANA_DA + (1<<8), + KANA_XTSU, KANA_TA + 2, KANA_DA + (2<<8), + KANA_TA + 3, KANA_DA + (3<<8), + KANA_TA + 4, KANA_DA + (4<<8), + + KANA_NA, + KANA_NA + 1, + KANA_NA + 2, + KANA_NA + 3, + KANA_NA + 4, + + KANA_HA, KANA_BA, KANA_PA, + KANA_HA + 1, KANA_BA + (1<<8), KANA_PA + (1<<8), + KANA_HA + 2, KANA_BA + (2<<8), KANA_PA + (2<<8), + KANA_HA + 3, KANA_BA + (3<<8), KANA_PA + (3<<8), + KANA_HA + 4, KANA_BA + (4<<8), KANA_PA + (4<<8), + + KANA_MA, + KANA_MA + 1, + KANA_MA + 2, + KANA_MA + 3, + KANA_MA + 4, + + KANA_XYA, KANA_YA, + KANA_XYA + 1, KANA_YA + 1, + KANA_XYA + 2, KANA_YA + 2, + + KANA_RA, + KANA_RA + 1, + KANA_RA + 2, + KANA_RA + 3, + KANA_RA + 4, + + KANA_WA, KANA_WA, + KANA_A + 1, + KANA_A + 3, + KANA_WO, + KANA_WA + 1, + + ((KANA_A+2)<<8) + KANA_DTEN, + KANA_KA, + KANA_KA + 3 +}; + +static struct ztohkktbl { + u_short zen; + u_short han; +} HKKtbl[8] = { + ZEN_KTEN, KANA_KTEN, + ZEN_FKAKKO, KANA_FKAKKO, + ZEN_EKAKKO, KANA_EKAKKO, + ZEN_TTEN, KANA_TTEN, + ZEN_CTEN, KANA_CTEN, + ZEN_CHOUON, KANA_CHOUON, + ZEN_DTEN, KANA_DTEN, + ZEN_HDTEN, KANA_HDTEN +}; + + +static struct hzkigoutbl { + wchar16_t han; + u_short zen; +} HZKtbl[6] = { + ',', ZEN_TTEN, + '.', ZEN_KTEN, + '-', ZEN_CHOUON, + '@', ZEN_CTEN, + '[', ZEN_FKAKKO, + ']', ZEN_EKAKKO +}; + +static u_short HZtbl[95] = { + 0xa1a1, 0xa1aa, 0xa1c9, 0xa1f4, 0xa1f0, 0xa1f3, 0xa1f5, 0xa1c7, + 0xa1ca, 0xa1cb, 0xa1f6, 0xa1dc, 0xa1a4, 0xa1dd, 0xa1a5, 0xa1bf, + 0xa3b0, 0xa3b1, 0xa3b2, 0xa3b3, 0xa3b4, 0xa3b5, 0xa3b6, 0xa3b7, + 0xa3b8, 0xa3b9, 0xa1a7, 0xa1a8, 0xa1e3, 0xa1e1, 0xa1e4, 0xa1a9, + 0xa1f7, 0xa3c1, 0xa3c2, 0xa3c3, 0xa3c4, 0xa3c5, 0xa3c6, 0xa3c7, + 0xa3c8, 0xa3c9, 0xa3ca, 0xa3cb, 0xa3cc, 0xa3cd, 0xa3ce, 0xa3cf, + 0xa3d0, 0xa3d1, 0xa3d2, 0xa3d3, 0xa3d4, 0xa3d5, 0xa3d6, 0xa3d7, + 0xa3d8, 0xa3d9, 0xa3da, 0xa1ce, 0xa1ef, 0xa1cf, 0xa1b0, 0xa1b2, + 0xa1c6, 0xa3e1, 0xa3e2, 0xa3e3, 0xa3e4, 0xa3e5, 0xa3e6, 0xa3e7, + 0xa3e8, 0xa3e9, 0xa3ea, 0xa3eb, 0xa3ec, 0xa3ed, 0xa3ee, 0xa3ef, + 0xa3f0, 0xa3f1, 0xa3f2, 0xa3f3, 0xa3f4, 0xa3f5, 0xa3f6, 0xa3f7, + 0xa3f8, 0xa3f9, 0xa3fa, 0xa1d0, 0xa1c3, 0xa1d1, 0xa1b1 +}; + +#ifdef ADDHK +void +setl_hktozh() +{ + int i; + u_short c, zen1; + wchar16_t rstr[2]; + wchar16_t kstr[2]; + RkTablW16 *rktp, *mktable(); + + zen1 = (ZHIRA1 << 8); + rstr[1] = '\0'; + kstr[1] = 0; + for(i = 0; i < ZKATAn - 3; i++) { + c = HKtable[i]; + if (!(c & RKZEN)) { + rstr[0] = c; + if ((rktp = mktable(rstr, 1)) == NULL) + break; + if (rktp->k_yomi != NULL) + continue; + kstr[0] = zen1 + (ZHIRAF2 + i); + if (kstradd(&(rktp->k_yomi), kstr, 2) == -1) + break; + } + } + for (i = 0; i < 8; i++) { + rstr[0] = HKKtbl[i].han; + if ((rktp = mktable(rstr, 1)) == NULL) + break; + if (rktp->k_yomi != NULL) + continue; + kstr[0] = HKKtbl[i].zen; + if (kstradd(&(rktp->k_yomi), kstr, 2) == -1) + break; + } +} +#endif + + +void +mkkigou() +{ + int i; + wchar16_t rstr[2]; + wchar16_t kstr[2]; + RkTablW16 *rktp, *mktable(); + + rstr[1] = '\0'; + kstr[1] = 0; + for (i = 0; i < 6; i++) { + rstr[0] = HZKtbl[i].han; + if ((rktp = mktable(rstr, 1)) == NULL) + break; + if (rktp->k_yomi != NULL) + continue; + kstr[0] = HZKtbl[i].zen; + if (kstradd(&(rktp->k_yomi), kstr, 2) == -1) + break; + } +} + +int +sj_addten(u_short prefix, u_short c) +{ + u_short c1, cc; + + cc = 0; + if ((c == ZEN_DTEN || c == ZEN_HDTEN) && + (sj_ishira(prefix) || sj_iskata(prefix))) { + c1 = sj_zen2han(prefix); + if ((c1 >= KANA_KA && c1 < KANA_NA) || + (c1 >= KANA_HA && c1 < KANA_MA)) { + if (c == ZEN_DTEN) + cc = prefix + 1; + else if (c == ZEN_HDTEN && c1 >= KANA_HA) + cc = prefix + 2; + } else if (c1 == KANA_A+2 && sj_iskata(prefix)&& c == ZEN_DTEN) + cc = ZEN_VU; + } + return(cc); +} + +int +sj_han2zen(u_short c) +{ + int i; + u_short cc; + + if (WcIsHANKAKU(c) && iskana2(c)) { + for (i = 0; i < ZKATAn; i++) { + if (c == HKtable[i]) { + if (i >= ZKATAn - 3) { + cc = (ZKATA1 << 8) + (ZKATAF2 + i + 1); + } + else { + cc = (ZHIRA1 << 8) + (ZHIRAF2 + i); + if (c == KANA_WA) + cc++; + } + break; + } + } + if (i >= ZKATAn) { + for (i = 0; i < 8; i++) { + if (c == HKKtbl[i].han) { + cc = HKKtbl[i].zen; + break; + } + } + if (i >= 8) + cc = ZEN_SPACE; + } + } else { + if (c >= 0x20 && c <= 0x7e) + cc = HZtbl[c - 0x20]; + else + cc = c; + } + return(cc); +} + + +int +sj3_hantozen(u_char *out, u_char *in) +{ + wchar16_t *winstr, *woutstr; + u_char *mstr; + int inlen, outlen, imflag = 0, omflag = 0, mmflag = 0, ret; + + inlen = strlen(in) + 1; + if (current_locale == LC_CTYPE_EUC) { + if (inlen > sizeof(mtmp)) { + mstr = (u_char *) malloc(inlen); + mmflag = 1; + } else { + mstr = mtmp; + } + if (sjistoeuc(mstr, inlen, in, inlen) < 0) { + if (mmflag) free(mstr); + return -1; + } + } else { + mstr = in; + } + if ((inlen * sizeof(wchar16_t)) > sizeof(intmp)) { + winstr = (wchar16_t *) malloc(inlen * sizeof(wchar16_t)); + if (!winstr) { + if (mmflag) free(mstr); + return -1; + } + imflag = 1; + } else { + winstr = (wchar16_t *) intmp; + } + if (mbstowcs(winstr, (char *)mstr, inlen) == -1) { + if (mmflag) free(mstr); + if (imflag) free(winstr); + return -1; + } + outlen = inlen; + if ((outlen * sizeof(wchar16_t)) > sizeof(outtmp)) { + woutstr = (wchar16_t *) malloc(outlen * sizeof(wchar16_t)); + if (!woutstr) { + if (mmflag) free(mstr); + if (imflag) free(winstr); + return -1; + } + omflag = 1; + } else { + woutstr = (wchar16_t *) outtmp; + } + ret = sj3_hantozen_w16(woutstr, winstr); + if (mmflag) { + free(mstr); + mmflag = 0; + } + if (ret == 0 || ret == -1) { + if (imflag) free(winstr); + if (omflag) free(woutstr); + return ret; + } + outlen = ret * 3; + if (outlen > sizeof(mtmp)) { + mstr = (u_char *) malloc(outlen); + if (!mstr) { + if (imflag) free(winstr); + if (omflag) free(woutstr); + return -1; + } + mmflag = 1; + } else { + mstr = mtmp; + } + if (wcstombs((char *)mstr, woutstr, outlen) == -1) { + if (imflag) free(winstr); + if (omflag) free(woutstr); + if (mmflag) free(mstr); + return -1; + } + if (current_locale == LC_CTYPE_EUC) { + inlen = euctosjis(out, outlen, mstr, outlen); + } else { + (void) memcpy(out, mstr, strlen(mstr) + 1); + } + if (imflag) free(winstr); + if (omflag) free(woutstr); + if (mmflag) free(mstr); + + if (inlen > 0) { + return ret; + } else { + return inlen; + } +} + +int +sj3_hantozen_euc(u_char *out, u_char *in) +{ + wchar16_t *winstr, *woutstr; + u_char *mstr; + int inlen, outlen, imflag = 0, omflag = 0, mmflag = 0, ret; + + inlen = strlen(in) + 1; + if (current_locale == LC_CTYPE_EUC) { + mstr = in; + } else { + if (inlen > sizeof(mtmp)) { + mstr = (u_char *) malloc(inlen); + mmflag = 1; + } else { + mstr = mtmp; + } + if (euctosjis(mstr, inlen, in, inlen) < 0) { + if (mmflag) free(mstr); + return -1; + } + } + if ((inlen * sizeof(wchar16_t)) > sizeof(intmp)) { + winstr = (wchar16_t *) malloc(inlen * sizeof(wchar16_t)); + if (!winstr) { + if (mmflag) free(mstr); + return -1; + } + imflag = 1; + } else { + winstr = (wchar16_t *) intmp; + } + if (mbstowcs(winstr, (char *)mstr, inlen) == -1) { + if (mmflag) free(mstr); + if (imflag) free(winstr); + return -1; + } + outlen = inlen; + if ((outlen * sizeof(wchar16_t)) > sizeof(outtmp)) { + woutstr = (wchar16_t *) malloc(outlen * sizeof(wchar16_t)); + if (!woutstr) { + if (mmflag) free(mstr); + if (imflag) free(winstr); + return -1; + } + omflag = 1; + } else { + woutstr = (wchar16_t *) outtmp; + } + ret = sj3_hantozen_w16(woutstr, winstr); + if (mmflag) { + free(mstr); + mmflag = 0; + } + if (ret == 0 || ret == -1) { + if (imflag) free(winstr); + if (omflag) free(woutstr); + return ret; + } + outlen = ret * 3; + if (outlen > sizeof(mtmp)) { + mstr = (u_char *) malloc(outlen); + if (!mstr) { + if (imflag) free(winstr); + if (omflag) free(woutstr); + return -1; + } + mmflag = 1; + } else { + mstr = mtmp; + } + if (wcstombs((char *)mstr, woutstr, outlen) == -1) { + if (imflag) free(winstr); + if (omflag) free(woutstr); + if (mmflag) free(mstr); + return -1; + } + if (current_locale == LC_CTYPE_EUC) { + (void) memcpy(out, mstr, strlen(mstr) + 1); + } else { + inlen = sjistoeuc(out, outlen, mstr, outlen); + } + if (imflag) free(winstr); + if (omflag) free(woutstr); + if (mmflag) free(mstr); + + if (inlen > 0) { + return ret; + } else { + return inlen; + } +} + +int +sj3_hantozen_mb(u_char *s1, u_char *s2) +{ + if (current_locale == LC_CTYPE_EUC) + return sj3_hantozen_euc(s1, s2); + else + return sj3_hantozen(s1, s2); +} + +int +sj3_hantozen_w16(wchar16_t *s1, wchar16_t *s2) +{ + return sj_hantozen(s1, s2, wslen(s2)); +} + +int +sj_hantozen(wchar16_t *s1, wchar16_t *s2, int len) +{ + u_short c1, cc, prefix; + wchar16_t c; + int i; + int rlen; + + prefix = 0; + rlen = 0; + for (i = 0; i < len && *s2 != '\0'; i++) { + c = *s2++; + cc = sj_han2zen(c); + if (cc & RKZEN) { + if (prefix != 0 && (c1 = sj_addten(prefix, cc)) != 0) { + s1 -= 1; + rlen -= 1; + cc = c1; + prefix = 0; + } else + prefix = cc; + *s1++ = cc; + rlen ++; + } else { + *s1++ = cc; + rlen++; + prefix = 0; + } + } + *s1 = '\0'; + return(rlen); +} + +int +sj_zen2han(u_short c) +{ + int i; + u_short cc; + + i = ZKATAn; + cc = c & MASK; + if (sj_ishira(c)) + i = cc - ZHIRAF2; + else if (sj_iskata(c)) { + i = cc - ZKATAF2; + } + if (i < ZKATAn) + cc = HKtable[i]; + else { + for (i = 0; i < 8; i++) { + if (c == HKKtbl[i].zen) { + cc = HKKtbl[i].han; + break; + } + } + if (i >= 8) { + cc = c; + for (i = 0; i < 95; i++) { + if (c == HZtbl[i]) { + cc = i + 0x20; + break; + } + } + } + } + return(cc); +} + +int +sj3_zentohan(u_char *out, u_char *in) +{ + wchar16_t *winstr, *woutstr; + u_char *mstr; + int inlen, outlen, imflag = 0, omflag = 0, mmflag = 0, ret; + + inlen = strlen(in) + 1; + if (inlen > sizeof(mtmp)) { + mstr = (u_char *) malloc(inlen); + if (!mstr) { + return -1; + } + mmflag = 1; + } else { + mstr = mtmp; + } + if (current_locale == LC_CTYPE_EUC) { + (void) euctosjis(mstr, inlen, in, inlen); + } else { + (void) memcpy(mstr, in, inlen); + } + if (inlen > sizeof(intmp)) { + winstr = (wchar16_t *) malloc(((inlen / 2) + 1) * sizeof(wchar16_t)); + if (!winstr) { + if (mmflag) free(mstr); + return -1; + } + imflag = 1; + } else { + winstr = (wchar16_t *) intmp; + } + if (mbstowcs(winstr, (char *)mstr, inlen) == -1) { + if (mmflag) free(mstr); + if (imflag) free(winstr); + return -1; + } + if (mmflag) { + free(mstr); + mmflag = 0; + } + outlen = ((inlen - 1) / 2) + 1; + if (outlen * sizeof(wchar16_t) > sizeof(outtmp)) { + woutstr = (wchar16_t *) malloc(outlen * sizeof(wchar16_t)); + if (!woutstr) { + if (imflag) free(winstr); + return -1; + } + omflag = 1; + } else { + woutstr = (wchar16_t *) outtmp; + } + ret = sj3_zentohan_w16(woutstr, winstr); + if (ret == 0 || ret == -1) { + if (imflag) free(winstr); + if (omflag) free(woutstr); + return ret; + } + outlen = ret * 3; + if (current_locale == LC_CTYPE_EUC) { + if (outlen > sizeof(mtmp)) { + mstr = (u_char *) malloc(outlen); + mmflag = 1; + } else { + mstr = mtmp; + } + } else { + mstr = out; + } + if (wcstombs((char *)mstr, woutstr, outlen) == -1) { + if (imflag) free(winstr); + if (omflag) free(woutstr); + return -1; + } + if (current_locale == LC_CTYPE_EUC) { + if (euctosjis(out, outlen, mstr, outlen) < 0) { + if (imflag) free(winstr); + if (omflag) free(woutstr); + if (mmflag) free(mstr); + return -1; + } + } + + if (imflag) free(winstr); + if (omflag) free(woutstr); + if (mmflag) free(mstr); + + return ret; +} + +int +sj3_zentohan_euc(u_char *out, u_char *in) +{ + wchar16_t *winstr, *woutstr; + u_char *mstr; + int inlen, outlen, imflag = 0, omflag = 0, mmflag = 0, ret; + + inlen = strlen(in) + 1; + if (inlen > sizeof(mtmp)) { + mstr = (u_char *) malloc(inlen); + if (!mstr) { + return -1; + } + mmflag = 1; + } else { + mstr = mtmp; + } + if (current_locale == LC_CTYPE_EUC) { + (void) euctosjis(mstr, inlen, in, inlen); + } else { + (void) memcpy(mstr, in, inlen); + } + if (inlen > sizeof(intmp)) { + winstr = (wchar16_t *) malloc(((inlen / 2) + 1) * sizeof(wchar16_t)); + if (!winstr) { + if (mmflag) free(mstr); + return -1; + } + imflag = 1; + } else { + winstr = (wchar16_t *) intmp; + } + if (mbstowcs(winstr, (char *)mstr, inlen) == -1) { + if (mmflag) free(mstr); + if (imflag) free(winstr); + return -1; + } + if (mmflag) { + free(mstr); + mmflag = 0; + } + outlen = ((inlen - 1) / 2) + 1; + if (outlen * sizeof(wchar16_t) > sizeof(outtmp)) { + woutstr = (wchar16_t *) malloc(outlen * sizeof(wchar16_t)); + if (!woutstr) { + if (mmflag) free(mstr); + if (imflag) free(winstr); + return -1; + } + omflag = 1; + } else { + woutstr = (wchar16_t *) outtmp; + } + ret = sj3_zentohan_w16(woutstr, winstr); + if (ret == 0 || ret == -1) { + if (mmflag) free(mstr); + if (imflag) free(winstr); + if (omflag) free(woutstr); + return ret; + } + outlen = ret * 3; + if (current_locale == LC_CTYPE_EUC) { + mstr = out; + } else { + if (outlen > sizeof(mtmp)) { + mstr = (u_char *) malloc(outlen); + mmflag = 1; + } else { + mstr = mtmp; + } + } + if (wcstombs((char *)mstr, woutstr, outlen) == -1) { + if (imflag) free(winstr); + if (omflag) free(woutstr); + return -1; + } + if (current_locale == LC_CTYPE_SHIFTJIS) { + if (sjistoeuc(out, outlen, mstr, outlen) < 0) { + if (imflag) free(winstr); + if (omflag) free(woutstr); + if (mmflag) free(mstr); + return -1; + } + } + if (imflag) free(winstr); + if (omflag) free(woutstr); + if (mmflag) free(mstr); + + return ret; +} + +int +sj3_zentohan_mb(u_char *s1, u_char *s2) +{ + if (current_locale == LC_CTYPE_EUC) + return sj3_zentohan_euc(s1, s2); + else + return sj3_zentohan(s1, s2); +} + +int +sj3_zentohan_w16(wchar16_t *s1, wchar16_t *s2) +{ + return sj_zentohan(s1, s2, wslen(s2)); +} + +int +sj_zentohan(wchar16_t *s1, wchar16_t *s2, int len) +{ + u_short cc; + wchar16_t c; + int i, rlen; + + rlen = 0; + for (i = 0; i < len && *s2 != (wchar16_t) '\0'; i++) { + c = *s2++; + if (WcIsZENKAKU(c)) { + cc = sj_zen2han(c); + if ((cc >> 8) && (cc != c)) { + *s1++ = (cc >> 8); + rlen++; + *s1++ = cc & 0xff; + rlen++; + continue; + } + + } else + cc = c; + if (cc & RKZEN) { + *s1++ = (cc >> 8); + rlen++; + } + *s1++ = (wchar16_t)cc; + rlen++; + } + *s1 = (wchar16_t) '\0'; + return(rlen); +} + +int +sj_tokata(wchar16_t c) +{ + if (sj_ishira(c)) { + c += 0x0100; + } + return(c); +} + +int +sj_tohira(wchar16_t c) +{ + if (sj_iskata(c) && (short) c <= (short) 0xa5f3) { + c -= 0x0100; + } + return(c); +} + +int +sj_htok(wchar16_t *s1, wchar16_t *s2) +{ + wchar16_t cc; + wchar16_t c; + + while ((c = *s2++) != (wchar16_t) '\0') { + if (WcIsX0208(c)) { + cc = sj_tokata(c); + *s1++ = cc; + } else + *s1++ = c; + } + *s1 = (wchar16_t) '\0'; +} + +int +sj_ktoh(wchar16_t *s1, wchar16_t *s2) +{ + wchar16_t cc; + wchar16_t c; + + while ((c = *s2++) != (wchar16_t) '\0') { + if (WcIsX0208(c)) { + cc = sj_tohira(c); + *s1++ = cc; + } else + *s1++ = c; + } + *s1 = (wchar16_t) '\0'; +} diff --git a/lib/sj3rkcv/sjrk b/lib/sj3rkcv/sjrk new file mode 100644 index 0000000..f9daac5 --- /dev/null +++ b/lib/sj3rkcv/sjrk @@ -0,0 +1,332 @@ +## +## Copyright (c) 1994 Sony Corporation +## +## Permission is hereby granted, free of charge, to any person obtaining +## a copy of this software and associated documentation files (the +## "Software"), to deal in the Software without restriction, including +## without limitation the rights to use, copy, modify, merge, publish, +## distribute, sublicense, and/or sell copies of the Software, and to +## permit persons to whom the Software is furnished to do so, subject to +## the following conditions: +## +## The above copyright notice and this permission notice shall be +## included in all copies or substantial portions of the Software. +## +## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +## EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +## MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +## IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, +## DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +## OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR +## THE USE OR OTHER DEALINGS IN THE SOFTWARE. +## +## Except as contained in this notice, the name of Sony Corporation +## shall not be used in advertising or otherwise to promote the sale, use +## or other dealings in this Software without prior written authorization +## from Sony Corporation. +## + +## +## $SonyRCSfile: Sjrk,v $ +## $SonyRevision: 1.1 $ +## $SonyDate: 1994/06/03 08:03:07 $ +## +# +# ローマ字かな変換規則定義ファイル +# デフォルトファイル +# +#フォーマット(区切りはスペースもしくはタブ) +#[in_romaji] [out_kana] [out_romaji] +A あ +I い +U う +E え +O お + +KA か +KI き +KU く +KE け +KO こ +CA か +CI き +CU く +CE け +CO こ +KYA きゃ +KYI き +KYU きゅ +KYE きぇ +KYO きょ +QYA きゃ +QYI き +QYU きゅ +QYE きぇ +QYO きょ + +SA さ +SI し +SU す +SE せ +SO そ +SYA しゃ +SYI し +SYU しゅ +SYE しぇ +SYO しょ +SHA しゃ +SHI し +SHU しゅ +SHE しぇ +SHO しょ + +TA た +TI ち +TU つ +TE て +TO と +TSA た +TSI ち +TSU つ +TSE て +TSO と +THA たぁ +THI てぃ +THU とぅ +TYA ちゃ +TYI ち +TYU ちゅ +TYE ちぇ +TYO ちょ +TSYA ちゃ +TSYI ち +TSYU ちゅ +TSYE ちぇ +TSYO ちょ +CHA ちゃ +CHI ち +CHU ちゅ +CHE ちぇ +CHO ちょ +CYA ちゃ +CYI ち +CYU ちゅ +CYE ちぇ +CYO ちょ + +NA な +NI に +NU ぬ +NE ね +NO の +NYA にゃ +NYI に +NYU にゅ +NYE にぇ +NYO にょ + +HA は +HI ひ +HU ふ +HE へ +HO ほ +HYA ひゃ +HYI ひ +HYU ひゅ +HYE ひぇ +HYO ひょ +FA ふぁ +FI ふぃ +FU ふ +FE ふぇ +FO ふぉ +FYA ふゃ +FYI ふぃ +FYU ふゅ +FYE ふぇ +FYO ふょ + +MA ま +MI み +MU む +ME め +MO も +MYA みゃ +MYI み +MYU みゅ +MYE みぇ +MYO みょ + +YA や +YI い +YU ゆ +YE いぇ +YO よ +RA ら +RI り +RU る +RE れ +RO ろ +LA ら +LI り +LU る +LE れ +LO ろ +RYA りゃ +RYI り +RYU りゅ +RYE りぇ +RYO りょ +LYA りゃ +LYI り +LYU りゅ +LYE りぇ +LYO りょ + +WA わ +WI うぃ +WU う +WE うぇ +WO を + +GA が +GI ぎ +GU ぐ +GE げ +GO ご +GYA ぎゃ +GYI ぎ +GYU ぎゅ +GYE ぎぇ +GYO ぎょ + +ZA ざ +ZI じ +ZU ず +ZE ぜ +ZO ぞ +ZYA じゃ +ZYI じ +ZYU じゅ +ZYE じぇ +ZYO じょ +JA じゃ +JI じ +JU じゅ +JE じぇ +JO じょ +JYA じゃ +JYI じ +JYU じゅ +JYE じぇ +JYO じょ + +DA だ +DI ぢ +DU づ +DE で +DO ど +DYA ぢゃ +DYI ぢ +DYU ぢゅ +DYE ぢぇ +DYO ぢょ +DHA だぁ +DHI でぃ +DHU どぅ +DHYU でゅ + +BA ば +BI び +BU ぶ +BE べ +BO ぼ +BYA びゃ +BYI び +BYU びゅ +BYE びぇ +BYO びょ +VA ヴぁ +VI ヴぃ +VU ヴ +VE ヴぇ +VO ヴぉ +VYA びゃ +VYI び +VYU びゅ +VYE びぇ +VYO びょ + +PA ぱ +PI ぴ +PU ぷ +PE ぺ +PO ぽ +PYA ぴゃ +PYI ぴ +PYU ぴゅ +PYE ぴぇ +PYO ぴょ + +QA くぁ +QI くぃ +QU くぅ +QE くぇ +QO くぉ + +N ん +NN ん +#MB ん B +#MM ん M +#MP ん P + +KK っ K +SS っ S +TT っ T +HH っ H +MM っ M +YY っ Y +RR っ R +LL っ L +WW っ W +GG っ G +ZZ っ Z +DD っ D +BB っ B +PP っ P +CC っ C +FF っ F +JJ っ J +VV っ V +QQ っ Q +XX っ X +#TCH っ CH + +XA ぁ +XI ぃ +XU ぅ +XE ぇ +XO ぉ +XYA ゃ +XYI ぃ +XYU ゅ +XYE ぇ +XYO ょ +XTU っ +XTSU っ +XWA ゎ +XKA ヵ +XKE ヶ + +X, ゛ +X. ゜ +~ 〜 + +#- ー +#, 、 +#. 。 +#@ ・ +#[ 「 +#] 」 +#Z. … +#SONY ソニー diff --git a/lib/sj3rkcv/wc16_str.c b/lib/sj3rkcv/wc16_str.c new file mode 100644 index 0000000..16bc0df --- /dev/null +++ b/lib/sj3rkcv/wc16_str.c @@ -0,0 +1,414 @@ +/* + * Copyright (c) 1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: wc16_str.c,v $ + * $SonyRevision: 1.3 $ + * $SonyDate: 1994/11/17 06:49:21 $ + */ + + +#include +#include +#include "wchar16.h" + +#include "sj3rkcv.h" + +#define MSB 0x80 + +#ifndef TRUE +#define TRUE (1) +#define FALSE (0) +#endif + +#define sjis2euc sj3_sjis2euc +#define euc2sjis sj3_euc2sjis + +#define issjis1(c) (((0x81 <= (c)) && ((c) <= 0x9f)) || \ + ((0xe0 <= (c)) && ((c) <= 0xfc))) +#define iseuc(c) ((0xa1 <= (c)) && ((c) <= 0xfe)) +#define iskana(c) ((0xa1 <= (c)) && ((c) <= 0xdf)) + +extern int current_locale; + +int +sj3_iswcntrl16(wchar16_t wc) +{ + if ((wc < 0x20) || (wc == 0x7f)) return TRUE; + + return FALSE; +} + +int +sj3_iswupper16(wchar16_t wc) +{ + if (((0x40 < wc) && (wc < 0x5b)) || + ((0xa3c0 < wc) && (wc < 0xa3db))) return TRUE; + + return FALSE; +} + +int +sj3_iswdigit16(wchar16_t wc) +{ + if (((0x29 < wc) && (wc < 0x3a)) || + ((0xa3af < wc) && (wc < 0xa3ba))) return TRUE; + + return FALSE; +} + +int +sj3_iswxdigit16(wchar16_t wc) +{ + if (((0x29 < wc) && (wc < 0x3a)) || + ((0xa3af < wc) && (wc < 0xa3ba))) return TRUE; + + if (((0x60 < wc) && (wc < 0x67)) || + ((0x40 < wc) && (wc < 0x47))) return TRUE; + + if (((0xa3c0 < wc) && (wc < 0xa3c7)) || + ((0xa3e0 < wc) && (wc < 0xa3e6))) return TRUE; + + return FALSE; +} + +int +sj3_wslen16(wchar16_t *ws) +{ + int i=0; + + if (!ws) return 0; + + while (*ws++) i++; + return i; +} + +int +sj3_wscmp16(wchar16_t *ws1, wchar16_t *ws2) +{ + while ((*ws1 && *ws2) && (*ws1 == *ws2)) { + ws1++; + ws2++; + } + if (!*ws1 && !*ws2) return 0; + if (!*ws1) return -1; + if (!*ws2) return 1; + if (*ws1 < *ws2) return -1; + return 1; +} + +int +sj3_wsncmp16(wchar16_t *ws1, wchar16_t *ws2, int n) +{ + int i=0; + + while ((*ws1 && *ws2) && (*ws1 == *ws2) && (i < n)) { + ws1++; + ws2++; + i++; + } + if (!*ws1 && !*ws2) return 0; + if (i == n) return 0; + if (!*ws1) return -1; + if (!*ws2) return 1; + if (*ws1 < *ws2) return -1; + return 1; +} + +wchar16_t * +sj3_wscpy16(wchar16_t *ws1, wchar16_t *ws2) +{ + wchar16_t *ws; + + if (!ws2) return NULL; + ws = ws1; + while (*ws2) { + *ws++ = *ws2++; + } + *ws = 0; + + return ws1; +} + +wchar16_t * +sj3_wsncpy16(wchar16_t *ws1, wchar16_t *ws2, int n) +{ + wchar16_t *ws; + int i=0; + + if (!ws2) return NULL; + ws = ws1; + while (*ws2 && (i < n)) { + *ws++ = *ws2++; + i++; + } + if (i < n) *ws = 0; + + return ws1; +} + +wchar16_t * +sj3_wscat16(wchar16_t *ws1, wchar16_t *ws2) +{ + wchar16_t *ws; + + if (!ws1) return NULL; + if (!ws2) return NULL; + + ws = ws1; + + while (*ws) ws++; + while (*ws2) { + *ws++ = *ws2++; + } + *ws = 0; + + return ws1; +} + + +wchar16_t +sj3_euc2wc16(unsigned int code) +{ + wchar16_t wc = 0; + + if (((code >> 16) & 0xff) == SS3) { + wc = code & 0xff7f; + } else if (((code >> 8) & 0xff) == SS2) { + wc = code & 0xff; + } else { + wc = code; + } + + return wc; +} + +wchar16_t +sj3_sjis2wc16(unsigned int code) +{ + unsigned short ch; + + if ((code >> 8) & 0xff) { + ch = sjis2euc(code); + } else if (code & MSB) { + ch = (SS2 << 8) + (code & 0xff); + } else { + return code; + } + return (sj3_euc2wc16(ch)); +} + +unsigned int +sj3_wc2euc16(wchar16_t wc) +{ + unsigned int code = 0; + unsigned char tmp; + + tmp = (wc >> 8) & 0xff; + if (tmp) { + if (wc & MSB) { + code = wc; + } else { + code = (SS3 << 16) + wc + MSB; + } + } else { + if (wc & MSB) { + code = (SS2 << 8) + wc; + } else { + code = wc; + } + } + + return code; +} + +unsigned int +sj3_wc2sjis16(wchar16_t wc) +{ + unsigned int ch; + + ch = sj3_wc2euc16(wc); + if ((ch >> 16) == SS3) { + return 0; + } else if ((ch >> 8) == SS2) { + return (ch & 0xff); + } else if ((ch >> 8) & 0xff) { + return euc2sjis(ch); + } else { + return wc; + } +} + +int +sj3_wcs2eucs16(unsigned char *mb, wchar16_t *ws, int n) +{ + int i = 0; + unsigned int code; + unsigned char c; + + while (*ws && (i < n)) { + code = sj3_wc2euc16(*ws); + if (c = ((code >> 16) & 0xff)) { + *mb++ = c; + i++; + if (i == n) break; + *mb++ = ((code >> 8) & 0xff); + i++; + if (i == n) break; + *mb++ = code & 0xff; + i++; + if (i == n) break; + } else if (c = ((code >> 8) & 0xff)) { + *mb++ = c; + i++; + if (i == n) break; + *mb++ = code & 0xff; + i++; + if (i == n) break; + } else if (c = (code & 0xff)) { + *mb++ = c; + i++; + } else { + return -1; + } + ws++; + } + + if (!*ws) { + *mb = '\0'; + } + + return i; +} + +int +sj3_wcs2sjiss16(unsigned char *mb, wchar16_t *ws, int n) +{ + int i = 0; + unsigned int code; + unsigned char c; + + while (*ws && (i < n)) { + code = sj3_wc2sjis16(*ws); + if (c = ((code >> 8) & 0xff)) { + *mb++ = c; + i++; + if (i == n) break; + *mb++ = code & 0xff; + i++; + if (i == n) break; + } else if (c = (code & 0xff)) { + *mb++ = c; + i++; + } else { + return -1; + } + ws++; + } + + if (!*ws) { + *mb = '\0'; + } + + return i; +} + +int +sj3_eucs2wcs16(wchar16_t *ws, unsigned char *mb, int n) +{ + int i = 0; + unsigned int code; + + while (*mb && (i < n)) { + if (*mb == SS3) { + code = *mb++ << 16; + code += *mb++ << 8; + code += *mb++; + } else if ((*mb == SS2) || (*mb & 0x80)) { + code = *mb++ << 8; + code += *mb++; + } else { + code = *mb++; + } + *ws = sj3_euc2wc16(code); + if (!*ws) return -1; + ws++; + i++; + } + if (!*mb) { + *ws = 0; + } + + return i; +} + +int +sj3_sjiss2wcs16(wchar16_t *ws, unsigned char *mb, int n) +{ + int i = 0; + unsigned int code; + + while (*mb && (i < n)) { + if (issjis1(*mb)) { + code = *mb++ << 8; + code += *mb++; + } else { + code = *mb++; + } + *ws = sj3_sjis2wc16(code); + if (!*ws) return -1; + ws++; + i++; + } + if (!*mb) { + *ws = 0; + } + + return i; +} + +int +sj3_mbstowcs16(wchar16_t *ws, unsigned char *mb, int n) +{ + if (current_locale == LC_CTYPE_EUC) + return sj3_eucs2wcs16(ws, mb, n); + else + return sj3_sjiss2wcs16(ws, mb, n); +} + +int +sj3_wcstombs16(unsigned char *mb, unsigned char *ws, int n) +{ + if (current_locale == LC_CTYPE_EUC) + return sj3_wcs2eucs16(mb, ws, n); + else + return sj3_wcs2sjiss16(mb, ws, n); +} + + diff --git a/sj3.spec.in b/sj3.spec.in new file mode 100644 index 0000000..559251f --- /dev/null +++ b/sj3.spec.in @@ -0,0 +1,31 @@ +Summary: SJ3 Kana Kanji Server +Name: sj3-server +Version: @VERSION@ +Release: 1 +URL: http://quasiquote.org/ +Source0: %{name}-%{version}.tar.gz +License: BSD +Group: System Environment/Libraries +BuildRoot: %{_tmppath}/%{name}-root + +%description + +%prep +%setup -q + +%build +%configure +make + +%install +rm -rf $RPM_BUILD_ROOT +%makeinstall + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root) +%doc AUTHORS ChangeLog* COPYING NEWS README doc +%{_bindir}/sj3* +%{_sbin}/sj3serv diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..a56e9c0 --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,6 @@ +SUBDIRS = \ + sj3mkdic \ + sj3serv \ + sj3dic \ + sj3stat \ + sj3demo diff --git a/src/sj3demo/Makefile.am b/src/sj3demo/Makefile.am new file mode 100644 index 0000000..985e1cb --- /dev/null +++ b/src/sj3demo/Makefile.am @@ -0,0 +1,20 @@ +if BUILDABLE_SJ3DEMO + +INCLUDES = \ + -I$(top_srcdir)/include/sj3compat \ + -I$(top_srcdir)/include/sj3common \ + -I$(top_srcdir)/include/sj3lib \ + -I$(top_srcdir)/include/sj3rkcv + +LDADD = \ + $(top_srcdir)/lib/sj3lib/libsj3lib.la \ + $(top_srcdir)/lib/sj3rkcv/libsj3rkcv.la \ + $(top_srcdir)/lib/sj3compat/libsj3compat.la + +AM_CPPFLAGS= -DORG + +sj3demo_SOURCES = sj3demo.c + +bin_PROGRAMS = sj3demo + +endif diff --git a/src/sj3demo/sj3demo.c b/src/sj3demo/sj3demo.c new file mode 100644 index 0000000..6f4b4a9 --- /dev/null +++ b/src/sj3demo/sj3demo.c @@ -0,0 +1,359 @@ +/* + * Copyright (c) 1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sample.c,v $ + * $SonyRevision: 1.3 $ + * $SonyDate: 1997/01/23 11:26:29 $ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "sj3lib.h" +#include "wchar16.h" + +#include "sj3rkcv.h" + +#include "config.h" + +#define RETURN(c) ((c == '\n') || (c == '\r')) +/* + * Change a default value. + * Patched by Hidekazu Kuroki(hidekazu@cs.titech.ac.jp) 1996/8/10 + */ +#define RKFILE SJ3CONFDIR "/sjrk" +#define LOCALHOST "localhost" +#define HBUFSIZ 512 +#define QBUFSIZ 256 + +char *pname; +char *hname; +int current_locale = LC_CTYPE_EUC; + +void rkconvs(unsigned char *, unsigned char *); +void print_head(); +void pr_douon(unsigned char *); +void pr_bunsetu(struct bunsetu *, int); +void pr_kanji(struct bunsetu *, int); + + +usage() +{ + fprintf(stderr, "Usage: %s [-v] [-H hostname]\n", pname); + exit(1); +} + +int +main(int argc, char **argv) +{ + int c; + int ret; + int vflag; + struct bunsetu bun[HBUFSIZ]; + unsigned char alphabet[QBUFSIZ]; + unsigned char yomi[HBUFSIZ]; + unsigned char kanji[BUFSIZ]; + char *uname, *loc; + struct passwd *pwd; + int count=1; + + loc = setlocale(LC_CTYPE, ""); + + if (strcmp(loc, "ja_JP.SJIS") == 0) { + current_locale = LC_CTYPE_SHIFTJIS; + } else if (strncmp(loc, "ja", 2) != 0 && + strncmp(loc, "Ja", 2) != 0) { + fprintf(stderr, "Error: %s is not japanese locale\n", loc); + exit(1); + } + vflag = 0; + hname = NULL; + + print_head(); + + pname = argv[0]; + + while ((c = getopt(argc, argv, "vk:H:")) != EOF) { + switch(c) { + case 'v': + vflag++; + break; + case 'H': + hname = optarg; + break; + case 'k': + fprintf(stderr, "optarg = %s\n", optarg); + count = atoi(optarg); + break; + case '?': + default : + usage(); + break; + } + } + + uname = getlogin(); + if (uname == NULL || *uname == '\0') { + setpwent(); + if ((pwd = getpwuid(getuid())) != NULL) { + uname = pwd->pw_name; + endpwent(); + } else { + fprintf(stderr, "Can't get user name\n"); + exit(1); + } + } +#ifndef ORG +while (count--) { +#endif + + if ((ret = sj3_rkinit(RKFILE)) != 0) { + if (ret == 1) + fprintf(stderr, "Can't open Romaji Kana Rule file %s\n", + RKFILE); + else + fprintf(stderr, "Error sj3_rkinit\n"); + exit(1); + } + ret = sj3_open(hname, uname); + + if (hname == NULL) + hname = LOCALHOST; + if (ret != 0) { + if (ret & SJ3_SERVER_DEAD) { + fprintf(stderr, "%s:sj3serv dead\n", hname); + exit(1); + } + else if (ret & SJ3_ALREADY_CONNECTED) { + fprintf(stderr, "Already connected %s:sj3serv\n",hname); + exit(1); + } + else if (ret & SJ3_CONNECT_ERROR) { + fprintf(stderr, "Can't connect %s:sj3serv\n", hname); + exit(1); + } + else if (ret & SJ3_CANNOT_OPEN_MDICT) { + fprintf(stderr, "Can't open sj3 main dictionary\n"); + (void)sj3_close(); + exit(1); + } + fprintf(stderr, "Warning sj3_open error (return 0x%x)\n", ret); + } + +#ifdef ORG + while (1) { + fprintf(stdout, "[Input Alphabet] "); + if (fgets((char *)alphabet, QBUFSIZ, stdin) == NULL) + break; + if (RETURN(alphabet[0])) + break; +#else + strlcpy(alphabet, "tonarinokyakuhayokukakikuukyakuda", sizeof(alphabet)); +#endif + + rkconvs(yomi, alphabet); + + ret = sj3_getkan_mb(yomi, bun, kanji, BUFSIZ); + if (ret == -1) { + fprintf(stderr, "sj3_getkan: disconnected %s:sj3serv\n", + hname); + exit(1); + } + + if (vflag) + pr_kanji(bun, ret); + + if (bun[ret - 1].destlen == 0) + strlcat(kanji, bun[ret - 1].srcstr, sizeof(kanji)); + fprintf(stdout, "[Output Yomi ]:[%s]\n", yomi); + fprintf(stdout, "[Output Kanji]:[%s]\n", kanji); +#ifdef ORG + } +#endif + + (void)sj3_close(); +#ifndef ORG +} +#endif +} + +void +rkconvs(unsigned char *yomi, unsigned char *roma) +{ + unsigned char *p, *q, *yp; + int i; + int rlen; + int len; + unsigned char rbuf[16]; + unsigned char ybuf[32]; + unsigned char tmp[HBUFSIZ]; + + yp = tmp; + p = rbuf; + rlen = 0; + while (*roma != '\0' && !RETURN(*roma)) { + *p++ = *roma++; + *p = '\0'; + rlen++; + while(1) { + + if ((len = sj3_rkconv_mb(rbuf, ybuf)) > 0) { + q = ybuf; + while (*q != '\0') { + *yp++ = *q++; + } + i = rlen; + rlen = strlen(rbuf); + p = rbuf; + p += rlen; + if (len >= i) + break; + } + + else if (len < 0) { + *yp++ = rbuf[0]; + p = rbuf; + q = (p + 1); + while(*q != '\0') + *p++ = *q++; + *p = '\0'; + rlen--; + } + + else + break; + } + } + + if (rlen > 0) { + *p++ = '\n'; + *p = '\0'; + rlen++; + while(rbuf[0] != '\0') { + if ((len = sj3_rkconv_mb(rbuf, ybuf)) > 0) { + q = ybuf; + while (*q != '\0') { + *yp++ = *q++; + } + + rlen = strlen(rbuf); + p = rbuf; + p += rlen; + } + else { + *yp++ = rbuf[0]; + p = rbuf; + q = (p + 1); + while(*q != '\0') + *p++ = *q++; + *p = '\0'; + } + } + yp--; + } + *yp = '\0'; + + sj3_hantozen_mb(yomi, tmp); +} + +void +print_head() +{ + fprintf(stdout, "\t*--------------------------------------------*\n"); + fprintf(stdout, "\t* Sample Program for *\n"); + fprintf(stdout, "\t* New Japanese Convert Library *\n"); + fprintf(stdout, "\t* SJ3LIB *\n"); + fprintf(stdout, "\t* *\n"); + fprintf(stdout, "\t* Terminator of Input : Newline-code *\n"); + fprintf(stdout, "\t* *\n"); + fprintf(stdout, "\t* If you want to end this process, *\n"); + fprintf(stdout, "\t* input Newline-code or Control-D. *\n"); + fprintf(stdout, "\t*--------------------------------------------*\n"); +} + +void +pr_douon(unsigned char *yomi) +{ + int i; + struct douon douon[BUFSIZ]; + int douon_cnt; + + douon_cnt = sj3_getdouon_mb(yomi, douon); + if (douon_cnt < 0) { + fprintf(stderr, "sj3_getdouon: disconnected %s:sj3serv\n", + hname); + exit(1); + } + fprintf(stdout, "\t\tsj3_getdouon(yomi, douon)"); + fprintf(stdout, "...Douon count : %d\n", douon_cnt); + for (i = 0; i < douon_cnt; i++) { + fprintf(stdout, "\t\t--- * Douon : %d * ---\n", i); + fprintf(stdout, "\t\t\tdlen : %d\n", douon[i].dlen); + fprintf(stdout, "\t\t\tddata:[%s]\n",douon[i].ddata); + } +} + +void +pr_bunsetu(struct bunsetu *now_bun, int bunsetu_cnt) +{ + unsigned char tmp_str[BUFSIZ]; + unsigned char *yomi; + + fprintf(stdout, "\t--- < Bunsetu : %d > ---\n", bunsetu_cnt); + fprintf(stdout, "\t\tsrclen : %d\n", now_bun->srclen); + strlcpy(tmp_str, now_bun->srcstr, sizeof(tmp_str)); + fprintf(stdout, "\t\tsrcstr:[%s]\n", tmp_str); + + yomi = tmp_str; + if (now_bun->destlen > 0) + pr_douon(yomi); + else + fprintf(stderr, "\t\tNot Conversion Bunsetsu\n"); + + fprintf(stdout, "\t\tdestlen : %d\n", now_bun->destlen); + strlcpy(tmp_str, now_bun->deststr, sizeof(tmp_str)); + fprintf(stdout, "\t\tdeststr:[%s]\n", tmp_str); +} + +void +pr_kanji(struct bunsetu *bun, int bnum) +{ + int i; + + fprintf(stdout, "\tsj3_getkan(yomi, kanji)"); + fprintf(stdout, "...Bunsetu count : %d\n", bnum); + for (i = 0; i < bnum; i++) + pr_bunsetu(&(bun[i]), i); +} diff --git a/src/sj3dic/Makefile.am b/src/sj3dic/Makefile.am new file mode 100644 index 0000000..6dc3d29 --- /dev/null +++ b/src/sj3dic/Makefile.am @@ -0,0 +1,26 @@ +if BUILDABLE_SJ3CLIENT + +INCLUDES = \ + -I$(top_srcdir)/include/sj3compat \ + -I$(top_srcdir)/include/sj3common \ + -I$(top_srcdir)/include/sj3lib + +LDADD = \ + $(top_srcdir)/lib/sj3lib/libsj3lib.la \ + $(top_srcdir)/lib/sj3compat/libsj3compat.la + +sj3dic_SOURCES = \ + sj3dic.h \ + sjctype.h \ + sjtool.h \ + codecnv.c \ + dictdisp.c \ + dictmake.c \ + hinsi.c \ + sj3dic.c \ + sj3err.c \ + sjrc.c + +bin_PROGRAMS = sj3dic + +endif diff --git a/src/sj3dic/codecnv.c b/src/sj3dic/codecnv.c new file mode 100644 index 0000000..173e3a5 --- /dev/null +++ b/src/sj3dic/codecnv.c @@ -0,0 +1,158 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: codecnv.c,v $ + * $SonyRevision: 1.3 $ + * $SonyDate: 1997/01/23 11:26:31 $ + */ + +#include +#include +#include +#include +#include +#include +#include +#include "sjctype.h" +#include "sjtool.h" + +#include "sj3dic.h" +#include "sj_string.h" + +static int euc_mode; + +int +init_code() +{ + char *loc; + + loc = setlocale(LC_CTYPE, ""); + + if (!loc) { + fprintf(stderr, "Error: can't get current locale\n"); + exit(1); + } + if (strncmp(loc, "ja_JP.SJIS", 10) == 0) { + euc_mode = 0; + } else if (strncmp(loc, "ja", 2) == 0 || + strncmp(loc, "Ja", 2) == 0) { + euc_mode = -1; + } else +#ifdef __sony_news + return 0; +#else + { + fprintf(stderr, "Warrning: In this locale japanese will not be used.\n"); + euc_mode = -1; + } +#endif + return 1; +} + +void +cnvcode(unsigned char *s) +{ + if (euc_mode) { + unsigned short i; + unsigned char *d = s; + + while (i = *s++) { + if (iseuckana(i)) { + if (*s) { + *d++ = *s++; + } + else { + *d++ = i; + break; + } + } + else if (iseuc(i)) { + if (*s) { + i = euc2sjis((i << 8) + *s++); + *d++ = (i >> 8); + *d++ = i; + } + else { + *d++ = i; + break; + } + } + else { + *d++ = i; + } + } + *d = 0; + } +} + +void +printout_mb(FILE *fp, unsigned char *s) +{ + fputs((char *)s, fp); + fflush(fp); +} + +void +printout(FILE *fp, unsigned char *s) +{ + unsigned char buf[BUFSIZ]; + + if (euc_mode) + strlcpy((char *)buf, s, sizeof(buf)); + else + euctosjis(buf, BUFSIZ, s, strlen(s)+1); + fputs((char *)buf, fp); + fflush(fp); +} + +void +normal_out(char *fmt, ...) +{ + va_list ap; + char buf[BUFSIZ]; + + va_start(ap, fmt); + vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + printout(stdout, buf); +} + +void +error_out(char *fmt, ...) +{ + va_list ap; + char buf[BUFSIZ]; + + va_start(ap, fmt); + vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + strlcat(buf, "\n", sizeof(buf)); + printout(stderr, buf); +} diff --git a/src/sj3dic/dictdisp.c b/src/sj3dic/dictdisp.c new file mode 100644 index 0000000..61a84e5 --- /dev/null +++ b/src/sj3dic/dictdisp.c @@ -0,0 +1,99 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: dictdisp.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:03:34 $ + */ + + + + +#include +#include +#include +#include + +#include "sj3lib.h" +#include "sj3dic.h" + +void +dictdisp(char *output) +{ + unsigned char buf[BUFSIZ]; + unsigned char *p; + FILE *fp; + int flg; + int i; + + if (output && *output) { + fp = fopen(output, "w"); + if (!fp) { + error_out("%s \244\254\245\252\241\274\245\327\245\363\244\307\244\255\244\336\244\273\244\363", output); + exit(1); + } + } + else + fp = stdout; + + flg = sj3_getdict_mb(buf); + while (flg == 0) { + p = buf; + printout_mb(fp, p); + i = strlen(p); + if (i < 24) + while (i < 24) { + printout_mb(fp, "\t"); + i += 8; + } + else + printout_mb(fp, " "); + while (*p++) + ; + printout_mb(fp, p); + i = strlen(p); + if (i < 24) + while (i < 24) { + printout_mb(fp, "\t"); + i += 8; + } + else + printout_mb(fp, " "); + while (*p++) + ; + printout(fp, hns2str(*p)); + printout_mb(fp, ":\n"); + + flg = sj3_nextdict_mb(buf); + } + + if (fp != stdout) + fclose(fp); +} diff --git a/src/sj3dic/dictmake.c b/src/sj3dic/dictmake.c new file mode 100644 index 0000000..ec6c432 --- /dev/null +++ b/src/sj3dic/dictmake.c @@ -0,0 +1,227 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: dictmake.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:03:35 $ + */ + +#include +#include +#include +#include +#include "sjctype.h" +#include "sj3lib.h" +#include "sjtool.h" + +#include "sj3dic.h" +#include "sj_string.h" + +#define IsEOL(c) ((c) == '\0') +#define IsBlank(c) ((c) == ' ' || (c) == '\t') + +static void +touroku(char *y, char *k, char *h) +{ + int err; + int grm; + unsigned char buf[BUFSIZ], *hp; + + if (sj3dic_sys_code == SYS_SJIS) { + (void) sjistoeuc(buf, BUFSIZ, h, strlen(h)+1); + hp = buf; + } else { + hp = (unsigned char *) h; + } + if (!(grm = str2hns(hp))) { + error_out("\311\312\273\354\312\270\273\372\316\363\244\362\262\341\244\303\244\306\244\244\244\336\244\271 %s:%s:%s", y, k, h); + if (force_flag) + return; + exit(1); + } + + err = sj3_touroku_mb(y, k, grm); + + switch (err) { + case -1: + error_out("\245\265\241\274\245\320\244\254\315\356\244\301\244\336\244\267\244\277"); + exit(1); + + case 0: + if (verbose_flag) + normal_out("%s:%s:%s \244\362\305\320\317\277\244\267\244\336\244\267\244\277\n", y, k, h); + break; + + case SJ3_DICT_ERROR: + error_out("\274\255\275\361\244\254\244\312\244\244\241\242\244\242\244\353\244\244\244\317\274\255\275\361\244\313\275\361\244\255\271\376\244\341\244\336\244\273\244\363"); + exit(1); + + case SJ3_DICT_LOCKED: + error_out("\274\255\275\361\244\254\245\355\245\303\245\257\244\265\244\354\244\306\244\244\244\306\275\361\244\255\271\376\244\341\244\336\244\273\244\363"); + exit(1); + + case SJ3_WORD_EXIST: + if (verbose_flag) + normal_out("%s:%s:%s \244\317\305\320\317\277\244\265\244\354\244\306\244\244\244\336\244\271\n", y, k, h); + break; + + case SJ3_DOUON_FULL: + error_out("\244\263\244\354\260\312\276\345\306\261\262\273\270\354\244\362\305\320\317\277\244\307\244\255\244\336\244\273\244\363 %s:%s:%s", y, k, h); + break; + + case SJ3_DICT_FULL: + error_out("\244\263\244\354\260\312\276\345\274\255\275\361\244\362\302\347\244\255\244\257\244\307\244\255\244\336\244\273\244\363 %s:%s:%s", y, k, h); + if (force_flag) break; + exit(1); + + case SJ3_BAD_YOMI_STR: + error_out("\305\320\317\277\244\307\244\255\244\312\244\244\306\311\244\337\244\307\244\271 %s", y); + if (force_flag) break; + exit(1); + + case SJ3_BAD_KANJI_STR: + error_out("\305\320\317\277\244\307\244\255\244\312\244\244\264\301\273\372\244\307\244\271 %s:%s", y, k); + if (force_flag) break; + exit(1); + + case SJ3_BAD_HINSI_CODE: + error_out("\305\320\317\277\244\307\244\255\244\312\244\244\311\312\273\354\244\307\244\271 %s:%s:%s", y, k, h); + if (force_flag) break; + exit(1); + + case SJ3_INDEX_FULL: + error_out("\245\244\245\363\245\307\245\303\245\257\245\271\244\254\244\244\244\303\244\321\244\244\244\307\244\271"); + + case SJ3_TOUROKU_FAILED: + default: + error_out("\305\320\317\277\244\307\244\255\244\336\244\273\244\363\244\307\244\267\244\277 %s:%s:%s(%d)", + y, k, h, str2hns(h)); + break; + } +} + +void +dictmake(char *input) +{ + unsigned char buf[BUFSIZ]; + FILE *fp; + unsigned char *p; + unsigned char *yom, *knj, *grm; + int c; + int flg; + static char *FormatErrorString = "\245\325\245\251\241\274\245\336\245\303\245\310\245\250\245\351\241\274:%s"; + + if (input && *input) { + fp = fopen(input, "r"); + if (!fp) { + error_out("%s \244\254\245\252\241\274\245\327\245\363\244\307\244\255\244\336\244\273\244\363", input); + exit(1); + } + } + else + fp = stdin; + + while (fgets((char *)buf, sizeof(buf), fp)) { + if (p = (unsigned char *)strchr((char *)buf, '\n')) + *p = '\0'; + else { + do { + c = fgetc(fp); + } while (c != '\n' && c != EOF); + } + + yom = buf; + while (IsBlank(*yom)) + yom++; + if (IsEOL(*yom)) { + error_out(FormatErrorString, buf); + if (force_flag) + continue; + break; + } + + knj = yom; + while (!IsEOL(*knj) && !IsBlank(*knj)) + knj++; + if (IsEOL(*knj)) { + error_out(FormatErrorString, buf); + if (force_flag) + continue; + break; + } + *knj++ = '\0'; + while (IsBlank(*knj)) + knj++; + if (IsEOL(*knj)) { + error_out(FormatErrorString, buf); + if (force_flag) + continue; + break; + } + + grm = knj; + while (!IsEOL(*grm) && !IsBlank(*grm)) + grm++; + if (IsEOL(*grm)) { + error_out(FormatErrorString, buf); + if (force_flag) + continue; + break; + } + *grm++ = '\0'; + while (IsBlank(*grm)) + grm++; + if (IsEOL(*grm)) { + error_out(FormatErrorString, buf); + if (force_flag) + continue; + break; + } + + flg = -1; + while (*grm && flg) { + p = grm; + while (!IsEOL(*p) && !IsBlank(*p) && (*p != ':')) + p++; + if (IsEOL(*p)) + flg = 0; + else + *p++ = '\0'; + + touroku(yom, knj, grm); + + if (flg) { + grm = p; + while (IsBlank(*grm)) + grm++; + } + } + } +} diff --git a/src/sj3dic/hinsi.c b/src/sj3dic/hinsi.c new file mode 100644 index 0000000..d11b094 --- /dev/null +++ b/src/sj3dic/hinsi.c @@ -0,0 +1,258 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: hinsi.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:03:36 $ + */ + +#include "sj_hinsi.h" + +#include "sj3dic.h" + +static struct hlist { + int code; + char *str; +} hinsi[] = { + { MEISI_1, "\314\276\273\354" }, + { MEISI_1, "\314\276\243\261" }, + { MEISI_2, "\314\276\243\262" }, + { MEISI_3, "\314\276\243\263" }, + { MEISI_4, "\314\276\243\264" }, + { MEISI_5, "\314\276\243\265" }, + { MEISI_6, "\314\276\243\266" }, + { MEISI_7, "\314\276\243\267" }, + { MEISI_8, "\314\276\243\270" }, + { MEISI_9, "\314\276\243\271" }, + { MEISI_10, "\314\276\243\261\243\260" }, + { MEISI_11, "\314\276\243\261\243\261" }, + { MEISI_20, "\314\276\243\262\243\260" }, + { D_MEISI_1, "\302\345\314\276\273\354" }, + { D_MEISI_1, "\302\345\243\261" }, + { D_MEISI_2, "\302\345\243\262" }, + { D_MEISI_3, "\302\345\243\263" }, + { D_MEISI_4, "\302\345\243\264" }, + { D_MEISI_5, "\302\345\243\265" }, + { D_MEISI_6, "\302\345\243\266" }, + { MYOUJI, "\311\304\273\372" }, + { NAMAE, "\314\276\301\260" }, + { KIGYOU, "\264\353\266\310" }, + { TIMEI, "\303\317\314\276" }, + { KEN_KU, "\270\251\241\277\266\350\314\276" }, + { KEN_KU, "\270\251\266\350" }, + { RENTAISI, "\317\242\302\316\273\354" }, + { RENTAISI, "\317\242\302\316" }, + { SETUZOKU, "\300\334\302\263\273\354" }, + { SETUZOKU, "\300\334\302\263" }, + { KANDOUSI, "\264\266\306\260" }, + { JOSUUSI, "\275\365\277\364\273\354" }, + { JOSUUSI, "\275\365\277\364" }, + { SUUSI, "\277\364\273\354" }, + { SETTOU_1, "\300\334\306\254\270\354" }, + { SETTOU_1, "\300\334\306\254\243\261" }, + { SETTOU_2, "\300\334\306\254\243\262" }, + { SETTOU_3, "\300\334\306\254\243\263" }, + { SETTOU_4, "\300\334\306\254\243\264" }, + { SETTOU_5, "\300\334\306\254\243\265" }, + { SETUBI_1, "\300\334\310\370\270\354" }, + { SETUBI_1, "\300\334\310\370\243\261" }, + { SETUBI_2, "\300\334\310\370\243\262" }, + { SETUBI_3, "\300\334\310\370\243\263" }, + { SETUBI_4, "\300\334\310\370\243\264" }, + { SETUBI_5, "\300\334\310\370\243\265" }, + { SETUBI_6, "\300\334\310\370\243\266" }, + { SETUBI_7, "\300\334\310\370\243\267" }, + { SETUBI_8, "\300\334\310\370\243\270" }, + { SETUBI_9, "\300\334\310\370\243\271" }, + { FUKUSI_1, "\311\373\273\354" }, + { FUKUSI_1, "\311\373\243\261" }, + { FUKUSI_2, "\311\373\243\262" }, + { FUKUSI_3, "\311\373\243\263" }, + { FUKUSI_4, "\311\373\243\264" }, + { FUKUSI_5, "\311\373\243\265" }, + { FUKUSI_6, "\311\373\243\266" }, + { FUKUSI_7, "\311\373\243\267" }, + { FUKUSI_8, "\311\373\243\270" }, + { FUKUSI_9, "\311\373\243\271" }, + { JOSUUSI2, "\275\365\277\364\243\262" }, + { KEIYOUSI_1, "\267\301\315\306\273\354" }, + { KEIYOUSI_1, "\267\301\243\261" }, + { KEIYOUSI_2, "\267\301\243\262" }, + { KEIYOUSI_3, "\267\301\243\263" }, + { KEIYOUSI_4, "\267\301\243\264" }, + { KEIYOUSI_5, "\267\301\243\265" }, + { KEIYOUSI_6, "\267\301\243\266" }, + { KEIYOUSI_7, "\267\301\243\267" }, + { KEIYOUSI_8, "\267\301\243\270" }, + { KEIYOUSI_9, "\267\301\243\271" }, + { KEIYOUSI_10, "\267\301\243\261\243\260" }, + { KEIYOUSI_11, "\267\301\243\261\243\261" }, + { KE_DOUSI_1, "\267\301\315\306\306\260\273\354" }, + { KE_DOUSI_1, "\267\301\306\260\243\261" }, + { KE_DOUSI_2, "\267\301\306\260\243\262" }, + { KE_DOUSI_3, "\267\301\306\260\243\263" }, + { KE_DOUSI_4, "\267\301\306\260\243\264" }, + { KE_DOUSI_5, "\267\301\306\260\243\265" }, + { KE_DOUSI_6, "\267\301\306\260\243\266" }, + { KE_DOUSI_7, "\267\301\306\260\243\267" }, + { KE_DOUSI_8, "\267\301\306\260\243\270" }, + { KE_DOUSI_9, "\267\301\306\260\243\271" }, + { DO_SAHEN, "\306\260\241\246\245\265\312\321" }, + { DO_SAHEN, "\245\265\312\321" }, + { DO_ZAHEN, "\306\260\241\246\245\266\312\321" }, + { DO_ZAHEN, "\245\266\312\321" }, + { DO_1DAN_1, "\306\260\241\246\260\354\303\312" }, + { DO_1DAN_1, "\260\354\303\312\243\261" }, + { DO_KAGO_1, "\306\260\241\246\245\253\270\336" }, + { DO_KAGO_1, "\245\253\270\336\243\261" }, + { DO_GAGO_1, "\306\260\241\246\245\254\270\336" }, + { DO_GAGO_1, "\245\254\270\336\243\261" }, + { DO_SAGO_1, "\306\260\241\246\245\265\270\336" }, + { DO_SAGO_1, "\245\265\270\336\243\261" }, + { DO_TAGO_1, "\306\260\241\246\245\277\270\336" }, + { DO_TAGO_1, "\245\277\270\336\243\261" }, + { DO_NAGO_1, "\306\260\241\246\245\312\270\336" }, + { DO_NAGO_1, "\245\312\270\336" }, + { DO_BAGO_1, "\306\260\241\246\245\320\270\336" }, + { DO_BAGO_1, "\245\320\270\336\243\261" }, + { DO_MAGO_1, "\306\260\241\246\245\336\270\336" }, + { DO_MAGO_1, "\245\336\270\336\243\261" }, + { DO_RAGO_1, "\306\260\241\246\245\351\270\336" }, + { DO_RAGO_1, "\245\351\270\336\243\261" }, + { DO_WAGO_1, "\306\260\241\246\245\357\270\336" }, + { DO_WAGO_1, "\245\357\270\336\243\261" }, + { DO_1DAN_2, "\260\354\303\312\243\262" }, + { DO_KAGO_2, "\245\253\270\336\243\262" }, + { DO_GAGO_2, "\245\254\270\336\243\262" }, + { DO_SAGO_2, "\245\265\270\336\243\262" }, + { DO_TAGO_2, "\245\277\270\336\243\262" }, + { DO_BAGO_2, "\245\320\270\336\243\262" }, + { DO_MAGO_2, "\245\336\270\336\243\262" }, + { DO_RAGO_2, "\245\351\270\336\243\262" }, + { DO_WAGO_2, "\245\357\270\336\243\262" }, + { DO_KAGO_5, "\245\253\270\336\243\265" }, + { DO_GAGO_5, "\245\254\270\336\243\265" }, + { DO_SAGO_5, "\245\265\270\336\243\265" }, + { DO_TAGO_5, "\245\277\270\336\243\265" }, + { DO_BAGO_5, "\245\320\270\336\243\265" }, + { DO_MAGO_5, "\245\336\270\336\243\265" }, + { DO_RAGO_5, "\245\351\270\336\243\265" }, + { DO_WAGO_5, "\245\357\270\336\243\265" }, + { DO_KAGO_6, "\245\253\270\336\243\266" }, + { DO_GAGO_6, "\245\254\270\336\243\266" }, + { DO_SAGO_6, "\245\265\270\336\243\266" }, + { DO_TAGO_6, "\245\277\270\336\243\266" }, + { DO_BAGO_6, "\245\320\270\336\243\266" }, + { DO_MAGO_6, "\245\336\270\336\243\266" }, + { DO_RAGO_6, "\245\351\270\336\243\266" }, + { DO_WAGO_6, "\245\357\270\336\243\266" }, + { DO_1DAN_3, "\260\354\303\312\243\263" }, + { DO_KAGO_3, "\245\253\270\336\243\263" }, + { DO_GAGO_3, "\245\254\270\336\243\263" }, + { DO_SAGO_3, "\245\265\270\336\243\263" }, + { DO_TAGO_3, "\245\277\270\336\243\263" }, + { DO_BAGO_3, "\245\320\270\336\243\263" }, + { DO_MAGO_3, "\245\336\270\336\243\263" }, + { DO_RAGO_3, "\245\351\270\336\243\263" }, + { DO_WAGO_3, "\245\357\270\336\243\263" }, + { DO_1DAN_4, "\260\354\303\312\243\264" }, + { DO_KAGO_4, "\245\253\270\336\243\264" }, + { DO_GAGO_4, "\245\254\270\336\243\264" }, + { DO_SAGO_4, "\245\265\270\336\243\264" }, + { DO_TAGO_4, "\245\277\270\336\243\264" }, + { DO_BAGO_4, "\245\320\270\336\243\264" }, + { DO_MAGO_4, "\245\336\270\336\243\264" }, + { DO_RAGO_4, "\245\351\270\336\243\264" }, + { DO_WAGO_4, "\245\357\270\336\243\264" }, + { DO_KAGO_7, "\245\253\270\336\243\267" }, + { DO_GAGO_7, "\245\254\270\336\243\267" }, + { DO_SAGO_7, "\245\265\270\336\243\267" }, + { DO_TAGO_7, "\245\277\270\336\243\267" }, + { DO_BAGO_7, "\245\320\270\336\243\267" }, + { DO_MAGO_7, "\245\336\270\336\243\267" }, + { DO_RAGO_7, "\245\351\270\336\243\267" }, + { DO_WAGO_7, "\245\357\270\336\243\267" }, + { DO_KAGO_8, "\245\253\270\336\243\270" }, + { DO_GAGO_8, "\245\254\270\336\243\270" }, + { DO_SAGO_8, "\245\265\270\336\243\270" }, + { DO_TAGO_8, "\245\277\270\336\243\270" }, + { DO_BAGO_8, "\245\320\270\336\243\270" }, + { DO_MAGO_8, "\245\336\270\336\243\270" }, + { DO_RAGO_8, "\245\351\270\336\243\270" }, + { DO_WAGO_8, "\245\357\270\336\243\270" }, + { SP_SA_MI1, "\245\265\312\321\314\244\243\261" }, + { SP_SA_MI2, "\245\265\312\321\314\244\243\262" }, + { SP_SA_YOU, "\245\265\312\321\314\244\315\321" }, + { SP_SA_SYU, "\245\265\312\321\275\252\302\316" }, + { SP_SA_KAT, "\245\265\312\321\262\276" }, + { SP_SA_ME1, "\245\265\312\321\314\277\243\261" }, + { SP_SA_ME2, "\245\265\312\321\314\277\243\262" }, + { SP_KA_MIZ, "\245\253\312\321\314\244" }, + { SP_KA_YOU, "\245\253\312\321\315\321" }, + { SP_KA_SYU, "\245\253\312\321\275\252\302\316" }, + { SP_KA_KAT, "\245\253\312\321\262\276" }, + { SP_KA_MEI, "\245\253\312\321\314\277" }, + { TEINEI1, "\303\372\307\253\243\261" }, + { TEINEI2, "\303\372\307\253\243\262" }, + { SP_KA_ONB, "\245\253\270\336\262\273\312\330" }, + { SP_FUKUSI, "\306\303\274\354\311\373" }, + { AISATU, "\260\247\273\242" }, + { SP_KEIYOUSI, "\306\303\274\354\267\301\315\306" }, + { TANKANJI, "\303\261\264\301\273\372" }, + { TANKANJI, "\303\261\264\301" }, + { IKKATU, "\260\354\263\347" }, + { 0, 0 } +}; + +char * +hns2str(int code) +{ + struct hlist *p; + + for (p = hinsi ; p -> code ; p++) { + if (p -> code == code) + return p -> str; + } + + return "ERROR"; +} + +int +str2hns(char *str) +{ + struct hlist *p; + + for (p = hinsi ; p -> code ; p++) { + if (strcmp(p -> str, str) == 0) + return p -> code; + } + + return 0; +} diff --git a/src/sj3dic/sj3dic.c b/src/sj3dic/sj3dic.c new file mode 100644 index 0000000..97b6e14 --- /dev/null +++ b/src/sj3dic/sj3dic.c @@ -0,0 +1,333 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj3dic.c,v $ + * $SonyRevision: 1.2 $ + * $SonyDate: 1996/02/15 02:22:58 $ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "sj3dic.h" +#include "sjtool.h" +#include "sj3lib.h" + +static void sj3dic_open_error(int); +static void sj3dic_close_error(int); + + +#ifdef __sony_news +int sj3dic_sys_code = _sys_code; +#else +int sj3dic_sys_code = SYS_EUC; +#endif + +#ifndef lint +static char rcsid_sony[] = "$Header: /export/work/contrib/sj3/sj3dic/RCS/sj3dic.c,v 1.11 1994/06/03 07:41:59 notanaka Exp $ SONY;"; +#endif + +static struct option { + char *str; + int code; +} options[] = { + { "text", EXEC_TEXT }, + { "dict", EXEC_DICT }, + { "init", EXEC_INIT }, + { "verbose", EXEC_VERBOSE }, + { "host", EXEC_SERVER }, + { "server", EXEC_SERVER }, + { "force", EXEC_FORCE }, + { 0, 0 } +}; + +char prog_name[LONGLENGTH]; +char home_dir[LONGLENGTH]; +char user_name[LONGLENGTH]; +char term_name[LONGLENGTH]; +char serv_name[LONGLENGTH]; +char file_name[LONGLENGTH]; +char dict_name[LONGLENGTH]; +int verbose_flag = 0; +int init_flag = 0; +int force_flag = 0; + +int +main(int argc, char **argv) +{ + int err; + int mode; + + if (!init_code()) { + fprintf(stderr, "Can't excute on this locale\n"); + exit(1); + } + init_env(); + mode = parsearg(argc, argv); + setsjserv(getenv("SJ3SERV")); + getsjrc(); + make_dicname(); + + if (err = sj3_open(serv_name, user_name)) + sj3dic_open_error(err); + + switch (mode) { + case EXEC_TEXT: + dictdisp(file_name); + break; + + case EXEC_DICT: + dictmake(file_name); + break; + default: + break; + } + + if ((err = sj3_close()) != TRUE) + sj3dic_close_error(err); + return 0; +} + +void +init_env() +{ + char *un, *hp, *tn; + struct passwd *pwd; + + prog_name[0] = + home_dir[0] = + user_name[0] = + term_name[0] = + serv_name[0] = + file_name[0] = + dict_name[0] = '\0'; + + un = getlogin(); + hp = getenv("HOME"); + + setpwent(); + pwd = (un == NULL || *un == '\0') ? getpwuid(getuid()) : getpwnam(un); + if (pwd != NULL) { + strlcpy(user_name, pwd -> pw_name, sizeof(user_name)); + if (hp == NULL) + hp = pwd -> pw_dir; + endpwent(); + } + if (hp != NULL) + strlcpy(home_dir, hp, sizeof(home_dir)); + + if ((tn = getenv("TERM")) == NULL) { + fprintf(stderr, "Can't getenv TERM\n\r"); + perror("getenv"); + exit(1); + } + strlcpy(term_name, tn, sizeof(term_name)); +} + +void +usage(int ret) +{ + fprintf(stderr, + "Usage: %s -{text|dict} [-H host_name] [file_name]\n", + prog_name); + exit(ret); +} + +int +parsearg(int argc, char *argv[]) +{ + int errflg = 0; + int i, j; + char *p, *q; + struct option *opt; + int cmd; + int mode = 0; + char tmp[LONGLENGTH]; + + strlcpy(prog_name, (p = strrchr(argv[0], '/')) ? p + 1 : argv[0], sizeof(prog_name)); + + for (i = 1 ; i < argc ; i++) { + if (*argv[i] == '-') { + for (p = argv[i]+1, q = tmp ; *p ; p++) + *q++ = isupper(*p) ? tolower(*p) : *p; + *q = 0; + j = strlen(tmp); + cmd = 0; + for (opt = options ; opt -> code ; opt++) { + if (strncmp(opt -> str, tmp, j)) + continue; + else if (cmd) { + errflg++; break; + } + else + cmd = opt -> code; + } + if (errflg) + break; + if (cmd == 0) { + errflg++; + break; + } + switch (cmd) { + case EXEC_TEXT: + case EXEC_DICT: + if (mode) + errflg++; + else + mode = cmd; + break; + case EXEC_INIT: + init_flag++; + break; + case EXEC_VERBOSE: + verbose_flag++; + break; + case EXEC_SERVER: + if (++i >= argc) { + errflg++; + break; + } + setsjserv(argv[i]); + break; + case EXEC_FORCE: + force_flag++; + break; + default: + errflg++; + break; + } + } + else if (file_name[0]) { + errflg++; + break; + } + else + strlcpy(file_name, argv[i], sizeof(file_name)); + } + + if (errflg || (mode == 0)) + usage(1); + + return mode; +} + +void +make_dicname() +{ + if (dict_name[0] != '\0') + return; + + snprintf(dict_name, sizeof(dict_name), "%s/sj2usr.dic", home_dir); +} + +void +setdicname(char *dictname) +{ + if (dict_name[0] != '\0' || dictname == NULL) + return; + strlcpy(dict_name, dictname, sizeof(dict_name)); +} + +void +setsjserv(char *hostname) +{ + if (serv_name[0] != '\0' || hostname == NULL) + return; + strlcpy(serv_name, hostname, sizeof(serv_name)); +} + +struct errlist { + int code; + char *msg; + int flg; +}; + +static void +sj3dic_error_and(int err, struct errlist *list) +{ + int flag = 0; + + while (list -> code) { + if (err & list -> code) { + error_out(list -> msg); + err &= ~(list -> code); + if (list -> flg) + flag++; + } + list++; + } + if (flag) + exit(1); +} + +static void +sj3dic_open_error(int err) +{ + static struct errlist err_msg[] = { + { SJ3_SERVER_DEAD, "\245\265\241\274\245\320\244\254\273\340\244\363\244\307\244\244\244\336\244\271", 1 }, + { SJ3_CONNECT_ERROR, "\245\265\241\274\245\320\244\310\300\334\302\263\244\307\244\255\244\336\244\273\244\363\244\307\244\267\244\277", 1 }, + { SJ3_ALREADY_CONNECTED, "\245\265\241\274\245\320\244\310\300\334\302\263\272\321\244\307\244\271", 1 }, + { SJ3_CANNOT_OPEN_MDICT, "\245\341\245\244\245\363\274\255\275\361\244\254\245\252\241\274\245\327\245\363\244\307\244\255\244\336\244\273\244\363", 0 }, + { SJ3_CANNOT_OPEN_UDICT, "\245\346\241\274\245\266\274\255\275\361\244\254\245\252\241\274\245\327\245\363\244\307\244\255\244\336\244\273\244\363", 1 }, + { SJ3_CANNOT_OPEN_STUDY, "\263\330\275\254\245\325\245\241\245\244\245\353\244\254\245\252\241\274\245\327\245\363\244\307\244\255\244\336\244\273\244\363", 0 }, + { SJ3_CANNOT_MAKE_UDIR, "\245\346\241\274\245\266\241\274\245\307\245\243\245\354\245\257\245\310\245\352\244\254\272\356\300\256\244\307\244\255\244\336\244\273\244\363", 1 }, + { SJ3_CANNOT_MAKE_UDICT, "\245\346\241\274\245\266\274\255\275\361\244\254\272\356\300\256\244\307\244\255\244\336\244\273\244\363", 1 }, + { SJ3_CANNOT_MAKE_STUDY, "\263\330\275\254\245\325\245\241\245\244\245\353\244\254\272\356\300\256\244\307\244\255\244\336\244\273\244\363", 0 }, + { -1, "\245\250\245\351\241\274", 1 }, + { 0, 0, 0 } + }; + + sj3dic_error_and(err, err_msg); +} + +static void +sj3dic_close_error(int err) +{ + static struct errlist err_msg[] = { + { SJ3_SERVER_DEAD, "\245\265\241\274\245\320\241\274\244\254\273\340\244\363\244\307\244\244\244\336\244\271", 1 }, + { SJ3_DISCONNECT_ERROR, "\300\332\244\352\312\374\244\267\244\307\245\250\245\351\241\274\244\254\244\242\244\352\244\336\244\267\244\277", 1 }, + { SJ3_NOT_CONNECTED, "\245\265\241\274\245\320\244\310\300\334\302\263\244\265\244\354\244\306\244\244\244\336\244\273\244\363", 1 }, + { SJ3_NOT_OPENED_MDICT, "\245\341\245\244\245\363\274\255\275\361\244\317\245\252\241\274\245\327\245\363\244\265\244\354\244\306\244\244\244\336\244\273\244\363", 0 }, + { SJ3_NOT_OPENED_UDICT, "\245\346\241\274\245\266\274\255\275\361\244\317\245\252\241\274\245\327\245\363\244\265\244\354\244\306\244\244\244\336\244\273\244\363", 1 }, + { SJ3_NOT_OPENED_STUDY, "\263\330\275\254\245\325\245\241\245\244\245\353\244\317\245\252\241\274\245\327\245\363\244\265\244\354\244\306\244\244\244\336\244\273\244\363", 0 }, + { SJ3_CLOSE_MDICT_ERROR, "\245\341\245\244\245\363\274\255\275\361\244\254\245\257\245\355\241\274\245\272\244\307\244\255\244\336\244\273\244\363", 0 }, + { SJ3_CLOSE_UDICT_ERROR, "\245\346\241\274\245\266\274\255\275\361\244\254\245\257\245\355\241\274\245\272\244\307\244\255\244\336\244\273\244\363", 1 }, + { SJ3_CLOSE_STUDY_ERROR, "\263\330\275\254\245\325\245\241\245\244\245\353\244\254\245\257\245\355\241\274\245\272\244\307\244\255\244\336\244\273\244\363", 0 }, + { -1, "\245\250\245\351\241\274", 1 }, + { 0, 0, 0 } + }; + + sj3dic_error_and(err, err_msg); +} diff --git a/src/sj3dic/sj3dic.h b/src/sj3dic/sj3dic.h new file mode 100644 index 0000000..114eba3 --- /dev/null +++ b/src/sj3dic/sj3dic.h @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2004 Iwata + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef SJ3DIC_H +#define SJ3DIC_H + +#include +#include +#include +#include "sjtool.h" + +/* codecnv.h */ +int init_code(); +void cnvcode(unsigned char *); +void printout_mb(FILE *, unsigned char *); +void printout(FILE *, unsigned char *); +void normal_out(char *, ...); +void error_out(char *, ...); + +/* dictdisp.c */ +void dictdisp(char *); + +/* dictmake.c */ +void dictmake(char *); + +/* hinsi.c */ +char *hns2str(int); +int str2hns(char *); + +/* sj3dic.c */ +extern int sj3dic_sys_code; +extern char prog_name[LONGLENGTH]; +extern char home_dir[LONGLENGTH]; +extern char user_name[LONGLENGTH]; +extern char term_name[LONGLENGTH]; +extern char serv_name[LONGLENGTH]; +extern char file_name[LONGLENGTH]; +extern char dict_name[LONGLENGTH]; +extern int verbose_flag; +extern int init_flag; +extern int force_flag; +void init_env(); +void usage(int); +int parsearg(int, char **); +void make_dicname(); +void setdicname(char *); +void setsjserv(char *); + +/* sj3err.c */ +void sj3error(FILE *, int); + +/* sjrc.c */ +struct wordent { + char word_str[MAXWORD]; +}; +extern char RCfile[LONGLENGTH]; +extern struct functbl { + char *keyword; + void (*func)(struct wordent *); +} funcs[]; +int sjset_code(); +int getsjrc(); +void setrc (char *, FILE *); +int much(char *, char *); +int getword(char *, struct wordent *); +int IsTerminator(u_char); +int isTerminator(u_char); +int IsEscape(u_char); +int IsDelimitor(u_char); +void set_dict (struct wordent *); +void set_server(struct wordent *); + +#endif /* SJ3DIC_H */ + diff --git a/src/sj3dic/sj3err.c b/src/sj3dic/sj3err.c new file mode 100644 index 0000000..f8e4fc5 --- /dev/null +++ b/src/sj3dic/sj3err.c @@ -0,0 +1,108 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj3err.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:03:38 $ + */ + +#include +#include + +#include "sj3dic.h" +#include "sj3err.h" + +void +sj3error(FILE *fp, int code) +{ + unsigned char tmp[BUFSIZ]; + + switch (code) { +#define CASE(X, str) case (X): printout(fp, str); break; + CASE(SJ3_InternalError, "\245\244\245\363\245\277\241\274\245\312\245\353\245\250\245\351\241\274"); + CASE(SJ3_NormalEnd, "\300\265\276\357\275\252\316\273"); + CASE(SJ3_ServerDown, "\245\265\241\274\245\320\241\274\244\254\315\356\244\301\244\306\244\244\244\336\244\271"); + CASE(SJ3_OpenSocket, "socket \244\316 open \244\313\274\272\307\324\244\267\244\336\244\267\244\277"); + CASE(SJ3_ConnectSocket, "socket \244\316 connect \244\313\274\272\307\324\244\267\244\336\244\267\244\277"); + CASE(SJ3_GetHostByName, "gethostbyname \244\313\274\272\307\324\244\267\244\336\244\267\244\277"); + CASE(SJ3_NotOpened, "\245\252\241\274\245\327\245\363\244\265\244\354\244\306\244\244\244\336\244\273\244\363"); + CASE(SJ3_NotEnoughMemory, "\245\341\245\342\245\352\244\254\302\255\244\352\244\336\244\273\244\363"); + CASE(SJ3_IllegalCommand, "\245\263\245\336\245\363\245\311\244\254\304\352\265\301\244\265\244\354\244\306\244\244\244\336\244\273\244\363"); + CASE(SJ3_DifferentVersion, "\245\320\241\274\245\270\245\347\245\363\244\254\260\343\244\244\244\336\244\271"); + CASE(SJ3_NoHostName, "\245\333\245\271\245\310\314\276\244\254\244\242\244\352\244\336\244\273\244\363"); + CASE(SJ3_NoUserName, "\245\346\241\274\245\266\314\276\244\254\244\242\244\352\244\336\244\273\244\363"); + CASE(SJ3_NotAllowedUser, "\300\334\302\263\244\362\265\366\244\265\244\354\244\306\244\244\244\336\244\273\244\363"); + CASE(SJ3_AlreadyConnected, "\300\334\302\263\272\321\244\307\244\271"); + CASE(SJ3_NotConnected, "\300\334\302\263\244\265\244\354\244\306\244\244\244\336\244\273\244\363"); + CASE(SJ3_TooLongParameter, "\245\321\245\351\245\341\241\274\245\277\244\254\304\271\244\271\244\256\244\336\244\271"); + CASE(SJ3_IllegalParameter, "\245\321\245\351\245\341\241\274\245\277\244\254\260\333\276\357\244\307\244\271"); + CASE(SJ3_BadDictID, "\244\275\244\316\244\350\244\246\244\312\274\255\275\361\244\317\244\242\244\352\244\336\244\273\244\363"); + CASE(SJ3_IllegalDictFile, "\274\255\275\361\245\325\245\241\245\244\245\353\244\254\260\333\276\357\244\307\244\271"); + CASE(SJ3_IllegalStdyFile, "\263\330\275\254\245\325\245\241\245\244\245\353\244\254\260\333\276\357\244\307\244\271"); + CASE(SJ3_IncorrectPasswd, "\245\321\245\271\245\357\241\274\245\311\244\254\260\333\244\312\244\352\244\336\244\271"); + CASE(SJ3_FileNotExist, "\245\325\245\241\245\244\245\353\244\254\302\270\272\337\244\267\244\336\244\273\244\363"); + CASE(SJ3_CannotAccessFile, "\245\325\245\241\245\244\245\353\244\313\245\242\245\257\245\273\245\271\244\307\244\255\244\336\244\273\244\363"); + CASE(SJ3_CannotOpenFile, "\245\325\245\241\245\244\245\353\244\254\245\252\241\274\245\327\245\363\244\307\244\255\244\336\244\273\244\363"); + CASE(SJ3_CannotCreateFile, "\245\325\245\241\245\244\245\353\244\254\272\356\300\256\244\307\244\255\244\336\244\273\244\363"); + CASE(SJ3_FileReadError, "\245\352\241\274\245\311\245\250\245\351\241\274\244\254\244\242\244\352\244\336\244\267\244\277"); + CASE(SJ3_FileWriteError, "\245\351\245\244\245\310\245\250\245\351\241\274\244\254\244\242\244\352\244\336\244\267\244\277"); + CASE(SJ3_FileSeekError, "\245\267\241\274\245\257\245\250\245\351\241\274\244\254\244\242\244\352\244\336\244\267\244\277"); + CASE(SJ3_StdyAlreadyOpened, "\263\330\275\254\245\325\245\241\245\244\245\353\244\317\245\252\241\274\245\327\245\363\244\265\244\354\244\306\244\244\244\336\244\271"); + CASE(SJ3_StdyFileNotOpened, "\263\330\275\254\245\325\245\241\245\244\245\353\244\254\245\252\241\274\245\327\245\363\244\265\244\354\244\306\244\244\244\336\244\273\244\363"); + CASE(SJ3_TooSmallStdyArea, "\312\270\300\341\304\271\263\330\275\254\316\316\260\350\244\254\276\256\244\265\244\271\244\256\244\336\244\271"); + CASE(SJ3_LockedByOther, "\302\276\244\316\245\257\245\351\245\244\245\242\245\363\245\310\244\313\245\355\245\303\245\257\244\265\244\354\244\306\244\336\244\271"); + CASE(SJ3_NotLocked, "\245\355\245\303\245\257\244\265\244\354\244\306\244\244\244\336\244\273\244\363"); + CASE(SJ3_NoSuchDict, "\244\275\244\316\244\350\244\246\244\312\274\255\275\361\244\317\244\242\244\352\244\336\244\273\244\363"); + CASE(SJ3_ReadOnlyDict, "\275\361\244\255\271\376\244\337\244\307\244\255\244\312\244\244\274\255\275\361\244\307\244\271"); + CASE(SJ3_DictLocked, "\274\255\275\361\244\254\245\355\245\303\245\257\244\265\244\354\244\306\244\244\244\336\244\271"); + CASE(SJ3_BadYomiString, "\265\366\244\265\244\354\244\312\244\244\306\311\244\337\312\270\273\372\316\363\244\307\244\271"); + CASE(SJ3_BadKanjiString, "\265\366\244\265\244\354\244\312\244\244\264\301\273\372\312\270\273\372\316\363\244\307\244\271"); + CASE(SJ3_BadHinsiCode, "\311\312\273\354\245\263\241\274\245\311\260\333\276\357\244\307\244\271"); + CASE(SJ3_AddDictFailed, "\274\255\275\361\305\320\317\277\244\362\274\272\307\324\244\267\244\336\244\267\244\277"); + CASE(SJ3_AlreadyExistWord, "\244\271\244\307\244\313\302\270\272\337\244\267\244\306\244\244\244\336\244\271"); + CASE(SJ3_NoMoreDouonWord, "\244\263\244\354\260\312\276\345\306\261\262\273\270\354\244\362\305\320\317\277\244\307\244\255\244\336\244\273\244\363"); + CASE(SJ3_NoMoreUserDict, "\244\263\244\354\260\312\276\345\274\255\275\361\244\313\305\320\317\277\244\307\244\255\244\336\244\273\244\363"); + CASE(SJ3_NoMoreIndexBlock, "\244\263\244\354\260\312\276\345\245\244\245\363\245\307\245\303\245\257\245\271\244\313\305\320\317\277\244\307\244\255\244\336\244\273\244\363"); + CASE(SJ3_DelDictFailed, "\274\255\275\361\272\357\275\374\244\362\274\272\307\324\244\267\244\336\244\267\244\277"); + CASE(SJ3_NoSuchWord, "\244\275\244\316\244\350\244\246\244\312\275\317\270\354\244\317\244\242\244\352\244\336\244\273\244\363"); + CASE(SJ3_DirAlreadyExist, "\244\275\244\316\245\307\245\243\245\354\245\257\245\310\245\352\244\254\302\270\272\337\244\267\244\306\244\244\244\336\244\271"); + CASE(SJ3_CannotCreateDir, "\245\307\245\243\245\354\245\257\245\310\245\352\244\254\272\356\300\256\244\307\244\255\244\336\244\273\244\363"); + CASE(SJ3_NoMoreDictData, "\244\263\244\354\260\312\276\345\274\255\275\361\245\307\241\274\245\277\244\254\244\242\244\352\244\336\244\273\244\363"); + CASE(SJ3_UserConnected, "\300\334\302\263\244\267\244\306\244\244\244\353\245\346\241\274\245\266\244\254\244\242\244\352\244\336\244\271"); + CASE(SJ3_TooLongPasswd, "\245\321\245\271\245\357\241\274\245\311\244\254\304\271\244\271\244\256\244\336\244\271"); + CASE(SJ3_TooLongComment, "\245\263\245\341\245\363\245\310\244\254\304\271\244\271\244\256\244\336\244\271"); +#undef CASE + default: + snprintf((char *)tmp, sizeof(tmp), "\314\244\304\352\265\301\244\316\245\250\245\351\241\274(%d)", code); + printout(fp, tmp); + break; + } + printout(fp, "\r\n"); +} diff --git a/src/sj3dic/sjctype.h b/src/sj3dic/sjctype.h new file mode 100644 index 0000000..bf0a60b --- /dev/null +++ b/src/sj3dic/sjctype.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sjctype.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:03:39 $ + */ + +#ifndef __sony_news +#ifndef __SJCTYPE +#define __SJCTYPE + +#define sjis2euc sj3_sjis2euc +#define jis2sjis sj3_jis2sjis +#define euctosjis sj3_euctosjis +#define sjis2jis sj3_sjis2jis +#define euc2sjis sj3_euc2sjis +#define jis2euc sj3_jis2euc +#define sjistoeuc sj3_sjistoeuc + +#define issjis1(c) (((0x81 <= ((unsigned char)(c))) && (((unsigned char)(c)) <= 0x9f)) || \ + ((0xe0 <= ((unsigned char)(c))) && (((unsigned char)(c)) <= 0xfc))) + +#define issjis2(c) (((0x40 <= ((unsigned char)(c))) && (((unsigned char)(c)) <= 0xfc)) && (((unsigned char)(c)) != 0x7f)) + +#define iseuc(c) ((0xa1 <= ((unsigned char)(c))) && (((unsigned char)(c)) <= 0xfe)) + +#define iseuckana(c) (((unsigned char)(c)) == 0x8e) + +#define iskana2(c) ((0xa1 <= ((unsigned char)(c))) && (((unsigned char)(c)) <= 0xdf)) + +#define jiszen(c) (issjis1(((c) >> 8) & 0xff) && issjis2((c) & 0xff)) + +#define isjjis(c) ((0x21 <= (c)) && ((c) <= 0x7e)) + +#define jstrlen(s) euclen(s, 65535) + +#define iseuc3byte(c) ((c) == 0x8f) + +#define iseuc2byte(c) (iseuc(c) || ((c) == 0x8e)) + +#define iskanji issjis1 +#define iskanji2 issjis2 +#define iskana iskana2 +#endif +#else +#define euctosjis sj3_euctosjis +#define sjistoeuc sj3_sjistoeuc +#endif + diff --git a/src/sj3dic/sjrc.c b/src/sj3dic/sjrc.c new file mode 100644 index 0000000..5edf098 --- /dev/null +++ b/src/sj3dic/sjrc.c @@ -0,0 +1,290 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sjrc.c,v $ + * $SonyRevision: 1.3 $ + * $SonyDate: 1997/01/23 11:26:31 $ + */ + +#include +#include +#include +#include +#include +#include +#include +#include "sj3dic.h" +#include "sjctype.h" +#include "sjtool.h" +#include "sj_string.h" + +char RCfile[LONGLENGTH]; + +static char *rcfile = ".sjrc"; + + +static int user_euc = 0; +static int file_code = SYS_SJIS; + +struct functbl funcs[] = { + { "dictionary", set_dict }, + { "userdic", set_dict }, + { "server", set_server }, + { NULL, NULL } +}; + +#define TOLOWER(c) (isupper(c) ? tolower(c) : (c)) + +int +sjset_code() +{ + char *loc; + + loc = setlocale(LC_CTYPE, ""); + + if (!loc) { + fprintf(stderr, "Error: can't get current locale\n"); + exit(1); + } + if (strncmp(loc, "ja_JP.SJIS", 10) == 0) { + user_euc = 0; + } else if (strncmp(loc, "ja", 2) == 0 || strncmp(loc, "Ja", 2) == 0) { + user_euc = 1; + file_code = -1; + } else { + fprintf(stderr, "Warrning: In this locale japanese will not be used.\n"); + user_euc = 1; + file_code = -1; + } + + return 1; +} + + +int +getsjrc() +{ + FILE *fd, *fopen(); + char *p; + char *getenv(); + + sjset_code(); + RCfile[0] = '\0'; + if ((p = getenv("SJRC")) != NULL && *p != '\0') { + strlcpy(RCfile, home_dir, sizeof(RCfile)); + if (*p != '/') + strlcat(RCfile, "/", sizeof(RCfile)); + strlcat(RCfile, p, sizeof(RCfile)); + if ((fd = fopen (RCfile, "r")) != NULL) { + setrc (RCfile, fd); + fclose (fd); + return TRUE; + } + } + if (home_dir[0] != '\0') { + strlcpy(RCfile, home_dir, sizeof(RCfile)); + strlcat(RCfile, "/", sizeof(RCfile)); + strlcat(RCfile, rcfile, sizeof(RCfile)); + if ((fd = fopen (RCfile, "r")) != NULL) { + setrc (RCfile, fd); + fclose (fd); + return TRUE; + } + } + RCfile[0] = '\0'; + return FALSE; +} + + +void +setrc(char *file, FILE *fd) +{ + char line[MAXLINE]; + int w; + struct wordent word[WORDN]; + char *p; + struct functbl *functp; + + while ((p = fgets (line, MAXLINE, fd)) != NULL) { + if ((w = getword(line, word)) <= 0) + continue; + functp = funcs; + p = word[0].word_str; + while (functp->keyword != NULL) { + if (much(p, functp->keyword)) { + if (functp->func) (*(functp->func))(word); + break;; + } + functp++; + } + } +} + + +int +much(char *s1, char *s2) +{ + char c1, c2; + + if (s1 == NULL) + return 0; + while (*s2 != '\0') { + c1 = *s1++; + c2 = *s2++; + if (TOLOWER(c1) != TOLOWER(c2)) + return 0; + } + return 1; +} + + +int +getword(char *s, struct wordent word[]) +{ + u_char c, cc; + char *p; + int i, wcount; + + if (IsDelimitor(*s)) { + s++; + } else { + p = s; + while(!IsDelimitor(*s)) { + if (IsTerminator(*s) || isTerminator(*s)) + break; + s++; + } + *s++ = '\0'; + if (much(p, term_name) == 0) + return 0; + } + i = wcount = 0; + p = word[wcount].word_str; + while (*s != '\0') { + c = *s++; + if (file_code == SYS_SJIS) { + if (issjis1(c) && issjis2(*s)) { + if (i < MAXWORD - 2) { + *p++ = c; + *p++ = *s; + i += 2; + } + s++; + continue; + } + } else if (file_code == SYS_EUC) { + if (iseuc(c) && iseuc(*s)) { + if (i < MAXWORD - 2) { + cc = (c << 8) + (*s & 0xff); + cc = euc2sjis(cc); + *p++ = (cc >> 8) & 0xff; + *p++ = cc & 0xff; + i += 2; + } + s++; + continue; + } + if (iseuckana(c) && iskana2(*s)) + c = *s++; + } else { + if (issjis1(c) && issjis2(*s)) { + file_code = SYS_SJIS; + s--; + continue; + } + if ((iseuc(c) && iseuc(*s)) || + (iseuckana(c) && iskana2(*s))) { + file_code = SYS_EUC; + s--; + continue; + } + } + if (isTerminator(c)) + break; + if (IsDelimitor(c)) { + if (i > 0) { + if (++wcount >= WORDN - 1) + break; + *p = '\0'; + i = 0; + p = word[wcount].word_str; + } + continue; + } + if (IsEscape(c)) + c = *s++; + if (IsTerminator(c)) + break; + if (i < MAXWORD - 1) { + *p++ = c; + i++; + } + } + *p = '\0'; + if (word[wcount].word_str[0] != '\0') + word[++wcount].word_str[0] = '\0'; + return wcount; +} + +int +IsTerminator(u_char c) +{ + return (c == '\n') ? 1 : 0; +} + +int +isTerminator(u_char c) +{ + return (c == '#') ? 1 : 0; +} + +int +IsEscape(u_char c) +{ + return (c == '\\') ? 1 : 0; +} + +int +IsDelimitor(u_char c) +{ + return (c == ' ' || c == '\t' || c == '.') ? 1 : 0; +} + +void +set_dict(struct wordent word[]) +{ + setdicname(word[1].word_str); +} + +void +set_server(struct wordent word[]) +{ + setsjserv(word[1].word_str); +} diff --git a/src/sj3dic/sjtool.h b/src/sj3dic/sjtool.h new file mode 100644 index 0000000..8a5851c --- /dev/null +++ b/src/sj3dic/sjtool.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sjtool.h,v $ + * $SonyRevision: 1.2 $ + * $SonyDate: 1996/02/15 02:22:59 $ + */ + +#ifndef SJTOOL_H +#define SJTOOL_H + +#if defined(__NetBSD__) +#define LACKOF_SETLOCALE +#endif + +#define LONGLENGTH 256 +#define MAXLINE 256 +#define MAXWORD 256 +#define WORDN 32 + +#ifndef SYS_SJIS +# define SYS_SJIS 0 +#endif +#ifndef SYS_EUC +# define SYS_EUC 1 +#endif + +#define TRUE -1 +#define FALSE !(TRUE) + +#define EXEC_TEXT 1 +#define EXEC_DICT 2 +#define EXEC_CONV 3 +#define EXEC_INIT 10 +#define EXEC_VERBOSE 11 +#define EXEC_SERVER 12 +#define EXEC_FORCE 13 + +#define SingleShift2 0x8e + +#endif /* SJTOOL_H */ + diff --git a/src/sj3mkdic/GramTable b/src/sj3mkdic/GramTable new file mode 100644 index 0000000..d3f7006 --- /dev/null +++ b/src/sj3mkdic/GramTable @@ -0,0 +1,198 @@ +{ "カ五1", 91 }, +{ "カ五2", 101 }, +{ "カ五3", 131 }, +{ "カ五4", 141 }, +{ "カ五5", 111 }, +{ "カ五6", 121 }, +{ "カ五7", 151 }, +{ "カ五8", 161 }, +{ "カ五音便", 185 }, +{ "カ変仮", 181 }, +{ "カ変終体", 180 }, +{ "カ変未", 178 }, +{ "カ変命", 182 }, +{ "カ変用", 179 }, +{ "ガ五1", 92 }, +{ "ガ五2", 102 }, +{ "ガ五3", 132 }, +{ "ガ五4", 142 }, +{ "ガ五5", 112 }, +{ "ガ五6", 122 }, +{ "ガ五7", 152 }, +{ "ガ五8", 162 }, +{ "サ五1", 93 }, +{ "サ五2", 103 }, +{ "サ五3", 133 }, +{ "サ五4", 143 }, +{ "サ五5", 113 }, +{ "サ五6", 123 }, +{ "サ五7", 153 }, +{ "サ五8", 163 }, +{ "サ変", 80 }, +{ "サ変仮", 175 }, +{ "サ変終体", 174 }, +{ "サ変未1", 171 }, +{ "サ変未2", 172 }, +{ "サ変未用", 173 }, +{ "サ変命1", 176 }, +{ "サ変命2", 177 }, +{ "ザ変", 81 }, +{ "タ五1", 94 }, +{ "タ五2", 104 }, +{ "タ五3", 134 }, +{ "タ五4", 144 }, +{ "タ五5", 114 }, +{ "タ五6", 124 }, +{ "タ五7", 154 }, +{ "タ五8", 164 }, +{ "ナ五", 95 }, +{ "バ五1", 96 }, +{ "バ五2", 105 }, +{ "バ五3", 135 }, +{ "バ五4", 145 }, +{ "バ五5", 115 }, +{ "バ五6", 125 }, +{ "バ五7", 155 }, +{ "バ五8", 165 }, +{ "マ五1", 97 }, +{ "マ五2", 106 }, +{ "マ五3", 136 }, +{ "マ五4", 146 }, +{ "マ五5", 116 }, +{ "マ五6", 126 }, +{ "マ五7", 156 }, +{ "マ五8", 166 }, +{ "ラ五1", 98 }, +{ "ラ五2", 107 }, +{ "ラ五3", 137 }, +{ "ラ五4", 147 }, +{ "ラ五5", 117 }, +{ "ラ五6", 127 }, +{ "ラ五7", 157 }, +{ "ラ五8", 167 }, +{ "ワ五1", 99 }, +{ "ワ五2", 108 }, +{ "ワ五3", 138 }, +{ "ワ五4", 148 }, +{ "ワ五5", 118 }, +{ "ワ五6", 128 }, +{ "ワ五7", 158 }, +{ "ワ五8", 168 }, +{ "挨拶", 187 }, +{ "衣服", -11 }, +{ "一括", 200 }, +{ "一段1", 90 }, +{ "一段2", 100 }, +{ "一段3", 130 }, +{ "一段4", 140 }, +{ "雨", -21 }, +{ "音楽", -20 }, +{ "海", -31 }, +{ "開閉", -4 }, +{ "活動", -5 }, +{ "感動", 28 }, +{ "企業", 23 }, +{ "魚", -14 }, +{ "形1", 60 }, +{ "形10", 69 }, +{ "形11", 70 }, +{ "形2", 61 }, +{ "形3", 62 }, +{ "形4", 63 }, +{ "形5", 64 }, +{ "形6", 65 }, +{ "形7", 66 }, +{ "形8", 67 }, +{ "形9", 68 }, +{ "形動1", 71 }, +{ "形動2", 72 }, +{ "形動3", 73 }, +{ "形動4", 74 }, +{ "形動5", 75 }, +{ "形動6", 76 }, +{ "形動7", 77 }, +{ "形動8", 78 }, +{ "形動9", 79 }, +{ "建築", -13 }, +{ "県区", 25 }, +{ "湖", -33 }, +{ "国", -12 }, +{ "試合", -10 }, +{ "事件", -27 }, +{ "時", -25 }, +{ "酒", -23 }, +{ "州", -29 }, +{ "出版", -18 }, +{ "所", -2 }, +{ "助数", 29 }, +{ "助数2", 54 }, +{ "乗物", -17 }, +{ "植物", -6 }, +{ "食物", -16 }, +{ "身体", -8 }, +{ "人", -1 }, +{ "数詞", 30 }, +{ "数詞2", 55 }, +{ "接続", 27 }, +{ "接頭1", 31 }, +{ "接頭2", 32 }, +{ "接頭3", 33 }, +{ "接頭4", 34 }, +{ "接頭5", 35 }, +{ "接尾1", 36 }, +{ "接尾2", 37 }, +{ "接尾3", 38 }, +{ "接尾4", 39 }, +{ "接尾5", 40 }, +{ "接尾6", 41 }, +{ "接尾7", 42 }, +{ "接尾8", 43 }, +{ "接尾9", 44 }, +{ "川", -30 }, +{ "組織", -3 }, +{ "贈物", -26 }, +{ "代1", 12 }, +{ "代2", 13 }, +{ "代3", 14 }, +{ "代4", 15 }, +{ "代5", 16 }, +{ "代6", 17 }, +{ "単漢", 189 }, +{ "地位", -7 }, +{ "地名", 24 }, +{ "丁寧1", 183 }, +{ "丁寧2", 184 }, +{ "電車", -34 }, +{ "都市", -24 }, +{ "島", -32 }, +{ "動物", -9 }, +{ "特殊形容", 188 }, +{ "特殊副", 186 }, +{ "病気", -15 }, +{ "苗字", 21 }, +{ "副1", 45 }, +{ "副2", 46 }, +{ "副3", 47 }, +{ "副4", 48 }, +{ "副5", 49 }, +{ "副6", 50 }, +{ "副7", 51 }, +{ "副8", 52 }, +{ "副9", 53 }, +{ "文字", -19 }, +{ "法", -35 }, +{ "名1", 1 }, +{ "名10", 10 }, +{ "名11", 11 }, +{ "名2", 2 }, +{ "名20", 18 }, +{ "名3", 3 }, +{ "名4", 4 }, +{ "名5", 5 }, +{ "名6", 6 }, +{ "名7", 7 }, +{ "名8", 8 }, +{ "名9", 9 }, +{ "名前", 22 }, +{ "鳴物", -28 }, +{ "連体", 26 } diff --git a/src/sj3mkdic/Makefile.am b/src/sj3mkdic/Makefile.am new file mode 100644 index 0000000..56f0764 --- /dev/null +++ b/src/sj3mkdic/Makefile.am @@ -0,0 +1,31 @@ +if BUILDABLE_SJ3SERV + +INCLUDES = \ + -I$(top_srcdir)/include/sj3compat \ + -I$(top_srcdir)/include/sj3common \ + -I$(top_srcdir)/include/sj3core + +LDADD = $(top_srcdir)/lib/sj3compat/libsj3compat.la + +sj3mkdic_SOURCES = \ + GramTable \ + sj3mkdic.h \ + sj3_dict_const.h \ + sj3_dict_struct.h \ + char.c \ + cnvhinsi.c \ + file.c \ + global.c \ + hindo.c \ + knjcvt.c \ + makedict.c \ + makelist.c \ + makeseg.c \ + memory.c \ + offset.c \ + readline.c \ + string.c + +bin_PROGRAMS = sj3mkdic + +endif diff --git a/src/sj3mkdic/char.c b/src/sj3mkdic/char.c new file mode 100644 index 0000000..9273b23 --- /dev/null +++ b/src/sj3mkdic/char.c @@ -0,0 +1,275 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: char.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:00:32 $ + */ + + +#include +#include +#include "sj_euc.h" +#include "sj3_dict_const.h" + +#include "sj3mkdic.h" + +int +cnvyomi(int code) +{ + u_short hh; + u_char high; + u_char low; + + hh = ((code >> 16) & 0xffff); + high = ((code >> 8) & 0xff); + low = (code & 0xff); + + if (!hh) { + if (high == 0xa1) { + switch (low) { + case 0xbc: return 1; + case 0xf4: return 2; + case 0xf7: return 3; + case 0xa7: return 4; + } + } + else if (high == 0xa2) { + if (low == 0xa9) + return 4; + } + else if (high == 0xa3) { + if (low < 0xb0) + ; + else if (low <= 0xb9) + return(low - 0xb0 + 0x10); + else if (low < 0xc0) + ; + else if (low <= 0xda) + return(low - 0xc1 + 0x1A); + else if (low < 0xe1) + ; + else if (low <= 0xfa) + return(low - 0xe1 + 0x34); + } + else if (high == 0xa4) { + if (low < 0xa1) + ; + else if (low <= 0xf3) + return(low - 0xa1 + 0x4e); + } + else if (high == 0xa5) { + switch (low) { + case 0xf4: return 0xa1; + case 0xf5: return 0xa2; + case 0xf6: return 0xa3; + } + } + } + + return 0; +} + + +int +h2kcode(int code) +{ + u_short hh; + u_char high; + u_char low; + + hh = ((code >> 16) & 0xffff); + high = ((code >> 8) & 0xff); + low = (code & 0xff); + + if (!hh) { + if (high != 0xa4) + return code; + else + return (code + 0x0100); + } + return code; /* XXX */ +} + + +int +codesize(u_char code) +{ + switch (code & KANJIMODEMASK) { + case ZENHIRAASSYUKU: + case ZENKATAASSYUKU: + case KANJIASSYUKU: + case KANJISTREND: + return 1; + case LEADINGHANKAKU: + case OFFSETASSYUKU: + case AIATTRIBUTE: + return 2; + default: + return 2; + } +} + + +void +output_knj(FILE *fp, u_char *p, int l) +{ + while (l > 0) { + switch (*p & KANJIMODEMASK) { + case ZENHIRAASSYUKU: + fprintf(fp, "\244\322%d", (*p++ & 0x0f) + 1); + l--; + break; + case ZENKATAASSYUKU: + fprintf(fp, "\245\253%d", (*p++ & 0x0f) + 1); + l--; + break; + case KANJIASSYUKU: + fprintf(fp, "\260\265%1x", (*p++ & 0x0f)); + l--; + break; + case LEADINGHANKAKU: +#ifndef USEHANKAKUINDICT + l = 0; + fprintf(stderr, "\244\252\244\253\244\267\244\244"); +#else + fputc(*p++, fp); l--; + fputc(*p++, fp); l--; +#endif + break; + case OFFSETASSYUKU: + fprintf(fp, "ofs%1x", (*p++ & 0x0f)); + l--; + fprintf(fp, "%02x", *p++); l--; + break; + case AIATTRIBUTE: + fprintf(fp, "\302\260%1x", (*p++ & 0x0f)); + l--; + fprintf(fp, "%02x", *p++); l--; + break; + case KANJISTREND: + p++; l--; + break; + default: + if (p[1] & 0x80) + fputc(SS3, fp); + fputc((*p | 0x80), fp); l--; p++; + fputc((*p | 0x80), fp); l--; p++; + + } + } +} + + +void +output_str(FILE *fp, char *p) +{ + while (*p) { fputc(*p, fp); p++; } +} + + + +void +output_int(FILE *fp, int *p) +{ + while (*p) { + if (*p < 0x100) { + fputc(*p, fp); p++; + } + else if (*p < 0x10000) { + fputc((*p >> 8) & 0xff, fp); + fputc(*p & 0xff, fp); p++; + } + else if (*p < 0x1000000) { + fputc((*p >> 16) & 0xff, fp); + fputc((*p >> 8) & 0xff, fp); + fputc(*p & 0xff, fp); p++; + } + else { + fputc((*p >> 24) & 0xff, fp); + fputc((*p >> 16) & 0xff, fp); + fputc((*p >> 8) & 0xff, fp); + fputc(*p & 0xff, fp); p++; + } + } +} + + + +int +yomi2zen(int code) +{ + static char num[] = { + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' + }; + + switch (code) { + case 0x01: return 0xa1bc; + case 0x02: return 0xa1f4; + case 0x03: return 0xa1f7; + case 0x04: return 0xa2a9; + case 0xa1: return 0xa5f4; + case 0xa2: return 0xa5f5; + case 0xa3: return 0xa5f6; + default: break; + } + + if (code < 0x10) + ; + + else if (code < 0x1a) + return(0xa300 + code - 0x10 + 0xb0); + + else if (code < 0x34) + return(0xa300 + code - 0x1a + 0xc1); + + else if (code < 0x4e) + return(0xa300 + code - 0x34 + 0xe1); + + else if (code < 0xa1) + return(0xa400 + code - 0x4e + 0xa1); + + return ((num[(code >> 4) & 0x0f] << 8) | num[code & 0x0f]); +} + + + +void +output_yomi(FILE *fp, u_char *p) +{ + int i; + + while (*p) { + i = yomi2zen(*p++); + fputc((i >> 8) & 0xff, fp); + fputc(i & 0xff, fp); + } +} diff --git a/src/sj3mkdic/cnvhinsi.c b/src/sj3mkdic/cnvhinsi.c new file mode 100644 index 0000000..e218341 --- /dev/null +++ b/src/sj3mkdic/cnvhinsi.c @@ -0,0 +1,118 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: cnvhinsi.c,v $ + * $SonyRevision: 1.2 $ + * $SonyDate: 1996/05/27 06:59:47 $ + */ + + +#include +#include + + + +static struct gram_code { + char *name; + int code; +} gramtbl[] = { + + +#include "GramTable" + +}; + +#define GramMax (sizeof(gramtbl)/sizeof(struct gram_code) - 1) + +int +u_strcmp(u_char *a, u_char *b) +{ + if (!a || !b) return 0; + + while (*a && *b) { + if (*a < *b) return -1; + if (*a > *b) return 1; + a++; + b++; + } + if (!*a && !*b) return 0; + if (!*a) return -1; + return 1; +} + + +int +cnvhinsi(u_char *buf) +{ + int min; + int max; + int mid; + int i; + + min = 0; + max = GramMax; + while (min <= max) { + + mid = (min + max) / 2; + + + i = u_strcmp(buf, gramtbl[mid].name); + + + if (i < 0) { + max = mid - 1; + } + + else if (i > 0) { + min = mid + 1; + } + + else { + return(gramtbl[mid].code); + } + } + + + return 0; +} + + + +char * +hinsi_str(int code) +{ + int i; + + for (i = 0 ; i <= GramMax ; i++) { + if (gramtbl[i].code == code) return gramtbl[i].name; + } + + return "Err"; +} diff --git a/src/sj3mkdic/file.c b/src/sj3mkdic/file.c new file mode 100644 index 0000000..9cac8a0 --- /dev/null +++ b/src/sj3mkdic/file.c @@ -0,0 +1,163 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: file.c,v $ + * $SonyRevision: 1.2 $ + * $SonyDate: 1995/02/03 07:38:32 $ + */ + +#include +#include +#include +#include +#include +#include + +#include "sj3mkdic.h" + +typedef struct filelist { + FILE *fp; + char *fname; + struct filelist *next; +} FileList; + +static FileList *flist = NULL; + +static char * +get_fname(FILE *fp) +{ + FileList *p; + + for (p = flist ; p ; p = p -> next) + if (p -> fp == fp) return p -> fname; + return "some file"; +} + +FILE * +Fopen(char *filename, char *type) +{ + FILE *fp; + char *p; + FileList *fl; + size_t len; + + if (!(fp = fopen(filename, type))) { + fprintf(stderr, "Can't open %s mode \"%s\"\n", filename, type); + exit(1); + } + + fl = (FileList *)Malloc(sizeof(*fl)); + len = strlen(filename) + 1; + fl -> fname = Malloc(len); + strlcpy(fl -> fname, filename, len); + fl -> fp = fp; + fl -> next = flist; + + return fp; +} + +void +Fclose(FILE *fp) +{ + FileList *p, *q; + + if (fclose(fp) == EOF) { + fprintf(stderr, "Close error in %s\n", get_fname(fp)); + exit(1); + } + + for (p = flist, q = NULL ; p ; q = p, p = p -> next) { + if (p -> fp == fp) { + if (q) + q -> next = p -> next; + else + flist = p -> next; + free(p -> fname); + free(p); + break; + } + } +} + +int +Fseek(FILE *fp, long ofs, int ptr) +{ + if (fseek(fp, ofs, ptr) == 0) return 0; + + fprintf(stderr, "Seek error in %s\n", get_fname(fp)); + exit(1); +} + +long +Ftell(FILE *fp) +{ + return ftell(fp); +} + +long +Fsize(char *filename) +{ + struct stat buf; + + if (stat(filename, &buf) == 0) return (long)buf.st_size; + + fprintf(stderr, "Stat error in %s\n", filename); + exit(1); +} + +size_t +Fread(char *p, int s, int n, FILE *fp) +{ + if (fread(p, s, n, fp) == n) return n; + + fprintf(stderr, "Read error in %s\n", get_fname(fp)); + exit(1); +} + +size_t +Fwrite(char *p, int s, int n, FILE *fp) +{ + if (fwrite(p, s, n, fp) == n) return n; + + fprintf(stderr, "Write error in %s\n", get_fname(fp)); + exit(1); +} + +int +Fgetc(FILE *fp) +{ + return fgetc(fp); +} + +int +Fflush(FILE *fp) +{ + return fflush(fp); +} diff --git a/src/sj3mkdic/global.c b/src/sj3mkdic/global.c new file mode 100644 index 0000000..0161de7 --- /dev/null +++ b/src/sj3mkdic/global.c @@ -0,0 +1,60 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: global.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:00:35 $ + */ + + +#include +#include +#include "sj3_dict_struct.h" + +#include "sj3mkdic.h" + +DouonRec *douon_ptr = NULL; +int douon_num = 0; +int yomi_len = 0; +int hinsi_num = 0; +int kanji_len = 0; + +HindoRec *hindo[MAXHINDONUMBER]; +int hindo_num = 0; + +OffsetRec *ofsrec[MAXOFFSETNUMBER]; +int ofsrec_num = 0; + +AssyukuRec *assyuku = NULL; + +HindoRec *askknj[MAXKNJASKNUMBER]; +int askknj_num = 0; + +int kanji_num = 0; diff --git a/src/sj3mkdic/hindo.c b/src/sj3mkdic/hindo.c new file mode 100644 index 0000000..a69f53e --- /dev/null +++ b/src/sj3mkdic/hindo.c @@ -0,0 +1,548 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: hindo.c,v $ + * $SonyRevision: 1.2 $ + * $SonyDate: 1994/08/17 01:50:26 $ + */ + + + + + +#include +#include +#include +#include +#include "sj3_dict_struct.h" + +#include "sj3mkdic.h" + +int +check_hindo(u_char *ptr, int len) +{ + int low, high, mid; + int i; + + if (hindo_num <= 0) return 0; + + low = 0; high = hindo_num - 1; + while (low <= high) { + mid = (low + high) / 2; + i = string_cmp(hindo[mid]->kptr, hindo[mid]->klen, ptr, len); + if (i > 0) + high = mid - 1; + else if (i < 0) + low = ++mid; + else + return(hindo[mid]->exist + hindo[mid]->hindo); + } + + return 0; +} + + + +static AssyukuRec * +makeassyuku(int num) +{ + AssyukuRec *arec; + + arec = (AssyukuRec *)Malloc(sizeof(AssyukuRec)); + if (!arec) { + fprintf(stderr, "\245\341\245\342\245\352\244\254\302\255\244\352\244\336\244\273\244\363\n"); + exit(1); + } + + arec -> len = num; + arec -> nrec = NULL; + arec -> anext = NULL; + + return arec; +} + + + +static int +assyuku_len(HindoRec *hrec) +{ + int org; + int old; + int new; + OffsetRec *p; + + if (((*(hrec->kptr) & KANJIMODEMASK) == OFFSETASSYUKU) && + (hrec->klen == 2)) { + p = real_ofsrec(hrec -> kptr); + org = check_hindo(p -> kptr, p -> klen); + old = p->klen * org + 2 * (hrec->exist + hrec->hindo); + new = p->klen + (hrec->exist + hrec->hindo + org); + } + else { + old = hrec -> klen * (hrec -> exist + hrec -> hindo); + new = hrec -> klen + (hrec -> exist + hrec -> hindo); + } + return (old - new); +} + + + +static void +set_assyuku(HindoRec *hrec) +{ + AssyukuRec *arec; + AssyukuRec *aprev; + int len; + + len = assyuku_len(hrec); + + if (len <= 0) return; + + arec = assyuku; aprev = NULL; + while (arec) { + if (arec -> len == len) { + hrec -> arec = arec; + hrec -> anext = arec -> nrec; + arec -> nrec = hrec; + return; + } + else if (arec -> len < len) + break; + + aprev = arec; + arec = arec -> anext; + } + + arec = makeassyuku(len); + + hrec -> anext = NULL; + hrec -> arec = arec; + arec -> nrec = hrec; + + if (aprev) { + arec -> anext = aprev -> anext; + aprev -> anext = arec; + } + else { + arec -> anext = assyuku; + assyuku = arec; + } +} + + + +static void +reset_assyuku(HindoRec *hrec) +{ + AssyukuRec *arec; + AssyukuRec *aptr; + AssyukuRec *aprev; + HindoRec *hptr; + HindoRec *hprev; + + arec = hrec -> arec; + + if (!arec) return; + hrec -> arec = NULL; + + hptr = arec -> nrec; hprev = NULL; + while (hptr) { + if (hptr == hrec) break; + hprev = hptr; + hptr = hptr -> anext; + } + + if (!hptr) return; + + if (hprev) { + hprev -> anext = hrec -> anext; + hrec -> anext = NULL; + return; + } + + if (hrec -> anext) { + arec -> nrec = hrec -> anext; + hrec -> anext = NULL; + return; + } + + if (!assyuku) return; + aptr = assyuku; aprev = NULL; + while (aptr) { + if (aptr == arec) break; + aprev = aptr; + aptr = aptr -> anext; + } + + if (!aptr) return; + + if (aprev) + aprev -> anext = arec -> anext; + else + assyuku = arec -> anext; + + Free(arec); + + hrec -> anext = NULL; +} + + + +static HindoRec * +makehindo(u_char *ptr, int len, int alen) +{ + HindoRec *hrec; + u_char *p; + + hrec = (HindoRec *)Malloc(sizeof(HindoRec)); + if (!hrec) { + fprintf(stderr, "\245\341\245\342\245\352\244\254\302\255\244\352\244\336\244\273\244\363\n"); + exit(1); + } + p = (u_char *)Malloc(len); + if (!p) { + fprintf(stderr, "\245\341\245\342\245\352\244\254\302\255\244\352\244\336\244\273\244\363\n"); + exit(1); + } + hrec -> klen = len; + hrec -> kptr = p; + if (len == alen && len > 2) { + hrec -> hindo = 0; + hrec -> exist = 1; + hrec -> offset = ++kanji_num; + } + else { + hrec -> hindo = 1; + hrec -> exist = 0; + hrec -> offset = 0; + } + while (len-- > 0) *p++ = *ptr++; + hrec -> anext = NULL; + hrec -> arec = NULL; + + return hrec; +} + + + +static void +set_hindo(u_char *ptr, int len, int alen) +{ + HindoRec *hrec; + int low, high, mid; + int i; + + if (hindo_num <= 0) { + hrec = makehindo(ptr, len, alen); + hindo[0]= hrec; + hindo_num = 1; + + set_assyuku(hrec); + + return; + } + + low = 0; high = hindo_num - 1; + while (low <= high) { + mid = (low + high) / 2; + i = string_cmp(hindo[mid]->kptr, hindo[mid]->klen, ptr, len); + if (i > 0) + high = mid - 1; + else if (i < 0) + low = ++mid; + else + break; + } + + if (i) { + if (hindo_num >= MAXHINDONUMBER) { + fprintf(stderr, "\311\321\305\331\245\306\241\274\245\326\245\353\244\254\244\242\244\325\244\354\244\336\244\267\244\277\n"); + exit(1); + } + + hrec = makehindo(ptr, len, alen); + + for (i = hindo_num ; i > mid ; i--) hindo[i] = hindo[i - 1]; + hindo[mid] = hrec; + hindo_num++; + } + else { + hrec = hindo[mid]; + + reset_assyuku(hrec); + + if (hrec -> exist > 0) + hrec -> exist += 1; + + else if (len == alen && len > 2) { + hrec -> exist = 1; + hrec -> offset = ++kanji_num; + } + else + hrec -> hindo += 1; + } + + set_assyuku(hrec); +} + + + +static void +reset_hindo(u_char *p, int l) +{ + HindoRec *hrec; + int low, high, mid; + int i; + + if (hindo_num <= 0) return; + + low = 0; high = hindo_num - 1; + while (low <= high) { + mid = (low + high) / 2; + i = string_cmp(hindo[mid]->kptr, hindo[mid]->klen, p, l); + if (i > 0) + high = mid - 1; + else if (i < 0) + low = ++mid; + else { + hrec = hindo[mid]; + + reset_assyuku(hrec); + + if (hrec -> exist > 0) + hrec -> exist -= 1; + else if (hrec -> hindo > 0) + hrec -> hindo -= 1; + + if (hrec -> exist + hrec -> hindo == 0) { + while (++mid < hindo_num) { + hindo[mid - 1] = hindo[mid]; + } + hindo_num--; + Free(hrec -> kptr); + Free(hrec); + } + else { + set_assyuku(hrec); + } + + return; + break; + } + } +} + + + +void +knjhnd_set(u_char *p, int l) +{ + u_char *kp1; + u_char *kp2; + int i; + int kl1; + u_char tmp[MAXKANJILENGTH * 2 + MAXATRNUMBER * 2 + 1]; + + for (kp1 = p, kl1 = l ; kl1 > 0 ; ) { + for (i = 0, kp2 = kp1 ; i < kl1 ; ) { + if (codesize(*kp2) == 1) { + tmp[i++] = *kp2++; + } + else if (codesize(*kp2) == 2) { + tmp[i++] = *kp2++; + tmp[i++] = *kp2++; + } else { + tmp[i++] = *kp2++; + tmp[i++] = *kp2++; + tmp[i++] = *kp2++; + } + set_hindo(tmp, i, l); + } + + kl1 -= codesize(*kp1); + kp1 += codesize(*kp1); + } +} + + + +void +knjhnd_reset(u_char *p, int l) +{ + u_char *kp1; + u_char *kp2; + int i; + int kl1; + u_char tmp[MAXKANJILENGTH * 2 + MAXATRNUMBER * 2 + 1]; + + for (kp1 = p, kl1 = l ; kl1 > 0 ; ) { + for (i = 0, kp2 = kp1 ; i < kl1 ; ) { + if (codesize(*kp2) == 1) { + tmp[i++] = *kp2++; + } + else if (codesize(*kp2) == 2) { + tmp[i++] = *kp2++; + tmp[i++] = *kp2++; + } else { + tmp[i++] = *kp2++; + tmp[i++] = *kp2++; + tmp[i++] = *kp2++; + } + reset_hindo(tmp, i); + } + + kl1 -= codesize(*kp1); + kp1 += codesize(*kp1); + } +} + + + +static int +check_assyuku(HindoRec *p, HindoRec *q) +{ + u_char ptmp[128], qtmp[128]; + int plen; + int qlen; + + plen = make_knjstr(p -> kptr, p -> klen, ptmp); + + qlen = make_knjstr(q -> kptr, q -> klen, qtmp); + + if (bubun_str(ptmp, plen, qtmp, qlen)) { + return -1; + } + + if (overlap_str(ptmp, plen, qtmp, qlen)) + return -1; + + return 0; +} + + + +int +decide_knjask() +{ + int i, j; + AssyukuRec *p; + HindoRec *q; + u_char *r; + int len = 0; + + askknj_num = 0; + + for (p = assyuku ; p ; p = p -> anext) { + if (p -> len <= 0) break; + + for (q = p -> nrec ; q ; q = q -> anext) { + + i = q -> klen; + r = q -> kptr; + if (i > 2) { + while (i > 0) { + if ((*r & KANJIMODEMASK) + == OFFSETASSYUKU) { + break; + } + j = codesize(*r); + i -= j; + r += j; + } + if (i) continue; + } + if (askknj_num) { + for (i = 0 ; i < askknj_num ; i++) { + if (check_assyuku(askknj[i], q)) + break; + } + if (i >= askknj_num) { + askknj[askknj_num++] = q; + len += p -> len; + if (askknj_num >= MAXKNJASKNUMBER) + goto end; + } + } + else { + askknj[askknj_num++] = q; + len += p -> len; + } + } + } +end: +{ + int i, j, len; + u_char *p; + + for (i = 0 ; i < askknj_num ; i++) { + len = askknj[i] -> klen; + p = askknj[i] -> kptr; + if (len <= 2) continue; + while (len > 0) { + if ((*p & KANJIMODEMASK) == OFFSETASSYUKU) { + printf("\245\252\245\325\245\273\245\303\245\310\260\265\275\314\244\362\264\336\244\340 %d\n", i); + } + j = codesize(*p); + len -= j; + p += j; + } + } +} + return len; +} + + + +void +clear_hindo() +{ + int i; + + for (i = 0 ; i < hindo_num ; i++) { + Free(hindo[i]->kptr); + Free(hindo[i]); + } + hindo_num = 0; + kanji_num = 0; +} + + + +void +clear_assyuku() +{ + AssyukuRec *p; + + while (assyuku) { + p = assyuku; + assyuku = assyuku -> anext; + Free(p); + } +} diff --git a/src/sj3mkdic/knjcvt.c b/src/sj3mkdic/knjcvt.c new file mode 100644 index 0000000..ccd3c46 --- /dev/null +++ b/src/sj3mkdic/knjcvt.c @@ -0,0 +1,232 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: knjcvt.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:00:37 $ + */ + +#include +#include +#include +#include +#include "sj3_dict_const.h" +#include "sj3_dict_struct.h" + +#include "sj3mkdic.h" + +typedef struct div_list { + int len; + u_char code[3]; + struct div_list *child; +} DivList; + +static void +free_divlist(DivList *p) +{ + DivList *q; + + while (p) { + q = p -> child; + Free(p); + p = q; + } +} + + + +static DivList * +make_divrec() +{ + DivList *p; + + p = (DivList *)Malloc(sizeof(DivList)); + if (!p) { + fprintf(stderr, "\245\341\245\342\245\352\244\254\302\255\244\352\244\336\244\273\244\363\n"); + exit(1); + } + p -> child = NULL; + + return p; +} + + + +static int +make_divlist(DivList *parent, u_char *knj, int len) +{ + int i, j; + int num; + int minlen = 0; + int tmplen; + DivList tmprec; + DivList *minrec; + + minrec = make_divrec(); + + if (len == 0) { + free_divlist(minrec); + + parent -> child = NULL; + return 0; + } else if (len == 1) { + minrec -> len = len; + minrec -> code[0] = *knj; + + parent -> child = minrec; + return len; + } + if (codesize(*knj) == 1) { + minrec -> len = 1; + minrec -> code[0] = *knj; + minlen = make_divlist(minrec, knj + 1, len - 1) + 1; + } else if (codesize(*knj) == 2) { + minrec -> len = 2; + minrec -> code[0] = *knj; + minrec -> code[1] = *(knj + 1); + minlen = make_divlist(minrec, knj + 2, len - 2) + 2; + } + for (i = 0 ; i < len ; i = j) { + j = i + codesize(*(knj + i)); + + if (j <= 2 || !(num = isknjexist(knj, j))) + continue; + + tmprec.len = 2; + tmprec.code[0] = (OFFSETASSYUKU | ((num >> 8) & 0xff)); + tmprec.code[1] = (num & 0xff); + tmprec.child = NULL; + tmplen = make_divlist(&tmprec, knj + j, len - j) + 2; + + if (tmplen < minlen) { + free_divlist(minrec -> child); + + *minrec = tmprec; + minlen = tmplen; + } + else + free_divlist(tmprec.child); + } + for (i = 0 ; i < askknj_num ; i++) { + if ((j = askknj[i] -> klen) > len) continue; + + if (string_cmp(askknj[i]->kptr, j, knj, j)) continue; + + tmprec.len = 1; + tmprec.code[0] = (KANJIASSYUKU | i); + tmprec.child = NULL; + tmplen = make_divlist(&tmprec, knj + j, len - j) + 1; + + if (tmplen < minlen) { + free_divlist(minrec -> child); + + *minrec = tmprec; + minlen = tmplen; + } + else + free_divlist(tmprec.child); + } + + parent -> child = minrec; + + return minlen; +} + + + +u_char * +knjofscvt(u_char *ptr, int len, int *ret) +{ + int i; + u_char *p, *q; + DivList parent, *dl; + + askknj_num = 0; + + parent.child = NULL; + i = make_divlist(&parent, ptr, len); + *ret = i; + + p = (u_char *)Malloc(i); + if (!p) { + fprintf(stderr, "\245\341\245\342\245\352\244\254\311\324\302\255\244\267\244\336\244\267\244\277"); + exit(1); + } + for (q = p, dl = parent.child ; dl ; dl = dl -> child) { + *q++ = dl -> code[0]; + if (dl -> len == 2) { + *q++ = dl -> code[1]; + } else if (dl -> len == 3) { + *q++ = dl -> code[1]; + *q++ = dl -> code[2]; + } + } + + free_divlist(parent.child); + + return p; +} + + +u_char * +knjcvt(u_char *ptr, int len, int *ret) +{ + int i; + u_char *p, *q; + DivList parent, *dl; + + parent.child = NULL; + i = make_divlist(&parent, ptr, len); + *ret = i; + + p = (u_char *)Malloc(i); + if (!p) { + fprintf(stderr, "\245\341\245\342\245\352\244\254\311\324\302\255\244\267\244\336\244\267\244\277"); + exit(1); + } + for (q = p, dl = parent.child ; dl ; dl = dl -> child) { + *q++ = dl -> code[0]; + if (dl -> len == 2) { + *q++ = dl -> code[1]; + } else if (dl -> len == 3) { + *q++ = dl -> code[1]; + *q++ = dl -> code[2]; + } + } + + free_divlist(parent.child); + + if (i != q - p) { + printf("\244\263\244\263\n"); + exit(1); + } + + return p; +} diff --git a/src/sj3mkdic/makedict.c b/src/sj3mkdic/makedict.c new file mode 100644 index 0000000..c2f8cef --- /dev/null +++ b/src/sj3mkdic/makedict.c @@ -0,0 +1,225 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: makedict.c,v $ + * $SonyRevision: 1.2 $ + * $SonyDate: 1994/12/09 11:27:05 $ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "sj3_dict_const.h" + +#include "sj3mkdic.h" + +FILE *infp = NULL; +FILE *outfp = NULL; + +static char *idxtop = NULL; + + +int +main(int argc, char **argv) +{ + parse(argc, argv); + + while (readline()) + setline(makelist); + flush_douon(); + makehead((u_char *)argv[2]); + + return 0; +} + + + +char * +make_idxlist(char *name) +{ + int i; + char *p; + + i = strlen(name); + p = Zalloc(i + 2); + strlcpy(p, name, i + 2); + return p; +} +char * +get_idxlist(char *name) +{ + FILE *fp; + int i; + char *p, *q, *r; + + fp = Fopen(name, "r"); + + i = Fsize(name); + + p = Zalloc(i + 2); + Fseek(fp, 0L, 0); + Fread(p, 1, i, fp); + Fclose(fp); + + for (q = r = p ; *q ; ) { + while (*q <= ' ') + q++; + while (*q > ' ') + *r++ = *q++; + *r++ = 0; + q++; + } + *r = 0; + + i = 0; + for (q = p ; *q ; ) { + if (fp = fopen(q, "r")) + fclose(fp); + else { + fprintf(stderr, "Can't open %s mode \"r\"\n", q); + i++; + } + while (*q++) + ; + } + if (i) exit(1); + + return p; +} + + + +void +parse(int argc, char **argv) +{ + int i; + char *progname = NULL; + char *p; + + if (progname = strrchr(argv[0], '/')) + progname++; + else + progname = argv[0]; + + if (argc != 3) + usage(progname); + + p = argv[1]; + idxtop = (*p == '-') ? get_idxlist(p + 1) : make_idxlist(p); + + outfp = Fopen(argv[2], "w"); +} + + +/* XXX: strtonum??? */ +int +get_number(char *ptr) +{ + int i = 0; + + while (*ptr >= '0' && *ptr <= '9') { + i = i * 10 + (*ptr++ - '0'); + } + + return(i); +} + + + +void +usage(char *name) +{ + fprintf(stderr, "Usage: %s text_file binary_file\n", + name ? name : "encode"); + exit(0); +} + + + +int +getch() +{ + if (infp) { + int c; + + if ((c = Fgetc(infp)) != EOF) return c; + + Fclose(infp); + infp = NULL; + + while (*idxtop++) + ; + } + + if (*idxtop) { + infp = Fopen(idxtop, "r"); + + fprintf(stderr, "Reading %s\n", idxtop); + fflush(stderr); + + return getch(); + } + + return EOF; +} + + +void +mark_file(FILE *out) +{ + static char pathname[MAXPATHLEN]; + static long pos; + + if (out) { + FILE *fp; + int c; + + fprintf(out, "%s:\t", pathname); + fp = Fopen(pathname, "r"); + Fseek(fp, pos, 0); + c = Fgetc(fp); + while (c != EOF && c != '\n') { + fputc(c, out); + c = Fgetc(fp); + } + fputc('\n', out); + Fclose(fp); + } + else { + strlcpy(pathname, idxtop, sizeof(pathname)); + pos = infp ? Ftell(infp) : 0; + } +} diff --git a/src/sj3mkdic/makelist.c b/src/sj3mkdic/makelist.c new file mode 100644 index 0000000..1f07fba --- /dev/null +++ b/src/sj3mkdic/makelist.c @@ -0,0 +1,539 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: makelist.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:00:39 $ + */ + +#include +#include +#include +#include +#include "sj3_dict_struct.h" + +#include "sj3mkdic.h" + +#ifndef SS2 +#define SS2 0x8e +#endif + +static DouonRec *drectmp = NULL; + +static void +clearklist(KanjiRec *krec) +{ + KanjiRec *p; + + while (krec) { + Free(krec -> kptr); + Free(krec -> aptr); + + p = krec; + krec = krec -> knext; + + Free(p); + } +} + + + +static void +clearhlist(HinsiRec *hrec) +{ + HinsiRec *p; + + while (hrec) { + clearklist(hrec -> krec); + + p = hrec; + hrec = hrec -> hnext; + + Free(p); + } +} + + + +void +clear_list() +{ + DouonRec *p; + DouonRec *drec = douon_ptr; + + while (drec) { + Free(drec -> yptr); + + clearhlist(drec -> hrec); + + p = drec; + drec = drec -> dnext; + + Free(p); + } + + douon_ptr = NULL; +} + + + +static u_char * +makekanji(int *yomi, int *kanji, int *atr, int *len) +{ + int kana[MAXYOMILENGTH + 1]; + u_char ktmp[MAXKANJILENGTH * 3 + MAXATRNUMBER * 2 + 1]; + int i; + int pos = 0; + int *p; + u_char *q; + + for (p = yomi, i = 0 ; *p ; ) + kana[i++] = h2kcode(*p++); + kana[i] = 0; + + while (*atr) { + i = *atr; + atr++; +#ifndef NO_ATR + ktmp[pos++] = (AIATTRIBUTE | ((i >> 8) & 0xff)); + ktmp[pos++] = (i & 0xff); +#endif + } + + if (i = top_strcmp(yomi, kanji)) { + kanji += i; + ktmp[pos++] = (ZENHIRAASSYUKU | (i - 1)); + } else if (i = top_strcmp(kana, kanji)) { + kanji += i; + ktmp[pos++] = (ZENKATAASSYUKU | (i - 1)); + } + + while (*kanji) { + if (i = last_strcmp(yomi, kanji)) { + kanji += i; + ktmp[pos++] = (ZENHIRAASSYUKU | (i - 1)); + } + else if (i = last_strcmp(kana, kanji)) { + kanji += i; + ktmp[pos++] = (ZENKATAASSYUKU | (i - 1)); + } + else if (((*kanji >> 8) & 0xff) == SS2 || *kanji < 0x100) { + ktmp[pos] = LEADINGHANKAKU; + ktmp[pos + 1] = (*kanji & 0xff); + kanji++; + pos += 2; + } + else { + if (*kanji < 0x10000) { + ktmp[pos] = ((*kanji >> 8) & NORMALKANJIMASK); + ktmp[pos + 1] = (*kanji & NORMALKANJIMASK); + kanji++; + pos += 2; + } else if (*kanji < 0x1000000) { + ktmp[pos] = ((*kanji >> 8) & NORMALKANJIMASK); + ktmp[pos + 1] = (*kanji & 0xff); + kanji++; + pos += 2; + } else { + fprintf(stderr, "Error: 4 byte code is found\n"); + exit(0); + } + } + } + *len = pos; + + q = (u_char *)Malloc(pos); + if (!q) { + fprintf(stderr, "\245\341\245\342\245\352\244\254\311\324\302\255\244\267\244\336\244\267\244\277"); + exit(1); + } + memcpy(q, ktmp, pos); + + return q; +} + + + +static u_char * +makeyomi(int *yomi) +{ + u_char tmp[MAXYOMILENGTH + 1]; + int i; + int j; + int *y = yomi; + u_char *p; + + for (i = 0 ; *y ; ) { + j = cnvyomi(*y++); + if (j == 0) { + fprintf(stderr, "\311\324\300\265\244\312\312\270\273\372\244\254\306\311\244\337\244\313\273\310\244\357\244\354\244\306\244\244\244\336\244\271\n"); + output_int(stderr, yomi); fputc('\n', stderr); + exit(1); + } + tmp[i++] = j; + } + tmp[i++] = 0; + + p = (u_char *)Malloc(i); + if (!p) { + fprintf(stderr, "\245\341\245\342\245\352\244\254\311\324\302\255\244\267\244\336\244\267\244\277"); + exit(1); + } + memcpy(p, tmp, i); + + return p; +} + + + +static KanjiRec * +make_krec(u_char *kcode, int klen) +{ + KanjiRec *krec; + + krec = (KanjiRec *)Malloc(sizeof(KanjiRec)); + if (!krec) { + fprintf(stderr, "\245\341\245\342\245\352\244\254\311\324\302\255\244\267\244\336\244\267\244\277"); + exit(1); + } + + krec -> klen = klen; + krec -> kptr = kcode; + krec -> alen = 0; + krec -> aptr = NULL; + krec -> knext = NULL; + + return krec; +} + + + +static HinsiRec * +make_hrec(int hinsi) +{ + HinsiRec *hrec; + + hrec = (HinsiRec *)Malloc(sizeof(HinsiRec)); + if (!hrec) { + fprintf(stderr, "\245\341\245\342\245\352\244\254\311\324\302\255\244\267\244\336\244\267\244\277"); + exit(1); + } + + hrec -> hinsi = hinsi; + hrec -> krec = NULL; + hrec -> hnext = NULL; + + return hrec; +} + + + +static DouonRec * +make_drec(u_char *ycode) +{ + DouonRec *drec; + + drec = (DouonRec *)Malloc(sizeof(DouonRec)); + if (!drec) { + fprintf(stderr, "\245\341\245\342\245\352\244\254\311\324\302\255\244\267\244\336\244\267\244\277"); + exit(1); + } + + drec -> yptr = ycode; + drec -> hrec_num = 0; + drec -> hrec = NULL; + drec -> dnext = NULL; + + return drec; +} + + + +static int +diff_ylen(DouonRec *drec) +{ + DouonRec *dptr; + DouonRec *dprev; + u_char *p1; + u_char *p2; + int ylen = 0; + + dptr = douon_ptr; dprev = NULL; + while (dptr) { + dprev = dptr; + dptr = dptr -> dnext; + } + + if (dprev) { + p1 = dprev -> yptr; p2 = drec -> yptr; + while (*p1 && (*p1 == *p2)) { + p1++; + p2++; + } + + if (*p1 == *p2) { + fprintf(stderr, "\305\371\244\267\244\244\306\311\244\337\244\316\306\261\262\273\270\354\245\326\245\355\245\303\245\257\244\254\244\242\244\353\n"); + output_yomi(stderr, dprev -> yptr); fputc('\n', stderr); + exit(1); + } else if (*p1 > *p2) { + fprintf(stderr, "\306\311\244\337\244\316\275\347\275\370\244\254\244\252\244\253\244\267\244\244\n"); + output_yomi(stderr, dprev->yptr); fputc('\n', stderr); + output_yomi(stderr, drec->yptr); fputc('\n', stderr); + exit(1); + } + while (*p2++) + ylen++; + } + + return ylen; +} + + + +static int +douon_knj(DouonRec *drec) +{ + int i; + int len = 0; + u_char *p; + u_char *knjofscvt(); + HinsiRec *hrec; + KanjiRec *krec; + + for (hrec = drec -> hrec ; hrec ; hrec = hrec -> hnext) { + for (krec = hrec -> krec ; krec ; krec = krec -> knext) { + p = knjofscvt(krec -> kptr, krec -> klen, &i); + + len += i + 1; + + knjhnd_set(p, i); + + krec -> alen = i; + krec -> aptr = p; + + set_ofsrec(krec -> kptr, krec -> klen, 0); + } + } + + return len; +} + + + +static void +make_d_list(DouonRec *drec) +{ + DouonRec *dptr, *dprev; + HinsiRec *hptr; + KanjiRec *kptr; + int ylen; + int klen; + int hnum; + int len; + int i; + +start: + if (douon_ptr == NULL) { + douon_num = 0; + yomi_len = 0; + hinsi_num = 0; + kanji_len = 0; + assyuku = NULL; + } + + klen = douon_knj(drec); + + ylen = diff_ylen(drec); + + hnum = drec -> hrec_num; + + i = 1 + + MAXKNJASKNUMBER + + douon_num * DOUONBLKSIZENUMBER + DOUONBLKSIZENUMBER + + yomi_len + ylen + + hinsi_num + hnum + + hinsi_num + hnum + + kanji_len + klen; + + len = (i <= MAINSEGMENTLENGTH) ? 0 : decide_knjask(); + + if ((i - len) <= MAINSEGMENTLENGTH) { + if (douon_ptr) { + dptr = douon_ptr; dprev = NULL; + while (dptr) { + dprev = dptr; + dptr = dptr -> dnext; + } + + dprev -> dnext = drec; + } else { + douon_ptr = drec; + } + drec -> dnext = NULL; + + drec -> dlen = ylen; + + douon_num += 1; + + yomi_len += ylen; + + hinsi_num += hnum; + + kanji_len += klen; + + return; + } else if (douon_ptr == NULL) { + fprintf(stderr, "\243\261\306\261\262\273\270\354\245\326\245\355\245\303\245\257\244\254\302\347\244\255\244\271\244\256\244\336\244\271\n"); + exit(1); + } + + for (hptr = drec -> hrec ; hptr ; hptr = hptr -> hnext) { + for (kptr = hptr -> krec ; kptr ; kptr = kptr -> knext) { + + knjhnd_reset(kptr -> aptr, kptr -> alen); + + Free(kptr -> aptr); + kptr -> aptr = NULL; + } + } + + len = decide_knjask(); + + makeseg(); + + clear_list(); + + clear_hindo(); + + clear_ofsrec(); + + askknj_num = 0; + + clear_assyuku(); + + goto start; +} + + + +void +flush_douon() +{ + if (drectmp) { + make_d_list(drectmp); + + drectmp = NULL; + } + + if (douon_ptr) { + decide_knjask(); + + makeseg(); + + clear_list(); + + clear_hindo(); + + clear_ofsrec(); + + askknj_num = 0; + } +} + + +void +makelist(int *yomi, int *kanji, int hinsi, int *atr) +{ + u_char *ycode; + u_char *kcode; + int klen; + HinsiRec *hrec; + KanjiRec *krec, *kprev = NULL; + + ycode = makeyomi(yomi); + + kcode = makekanji(yomi, kanji, atr, &klen); + + if (drectmp && strcmp(ycode, drectmp -> yptr)) { + make_d_list(drectmp); + + drectmp = NULL; + } + + if (!drectmp) { + + drectmp = make_drec(ycode); + + hrec = make_hrec(hinsi); + drectmp -> hrec = hrec; + drectmp -> hrec_num = 1; + + krec = make_krec(kcode, klen); + hrec -> krec = krec; + + return; + } + + for (hrec = drectmp -> hrec ; hrec -> hnext ; hrec = hrec -> hnext) + if (hrec -> hinsi == hinsi) + break; + + if (hrec -> hinsi == hinsi) { + for (krec=hrec->krec ; krec ; krec=krec->knext) { + if ((krec -> klen == klen) && + !memcmp(krec -> kptr, kcode, klen)) { + fprintf(stderr, "\306\261\260\354\244\316\275\317\270\354\244\254\302\270\272\337\244\267\244\277\n"); + fprintf(stderr, "\t\306\311\244\337:"); + output_int(stderr, yomi); + fprintf(stderr, "\n"); + fprintf(stderr, "\t\264\301\273\372:"); + output_int(stderr, kanji); + fprintf(stderr, "\n"); + + Free(kcode); + + return; + } + kprev = krec; + } + + if (kprev) + kprev -> knext = make_krec(kcode, klen); + + return; + } + + hrec -> hnext = make_hrec(hinsi); + hrec = hrec -> hnext; + drectmp -> hrec_num += 1; + + krec = make_krec(kcode, klen); + hrec -> krec = krec; +} diff --git a/src/sj3mkdic/makeseg.c b/src/sj3mkdic/makeseg.c new file mode 100644 index 0000000..a3bf707 --- /dev/null +++ b/src/sj3mkdic/makeseg.c @@ -0,0 +1,387 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: makeseg.c,v $ + * $SonyRevision: 1.2 $ + * $SonyDate: 1994/12/09 11:27:05 $ + */ + +#include +#include +#include +#include +#include +#include +#include "sj3_dict_struct.h" +#include "Dict.h" + +#include "sj3mkdic.h" + + +static u_char mindex[MAINSEGMENTLENGTH]; +static int idxpos = 0; +static int idxnum = 0; + + +static u_char * +set_ofsask(u_char *src, u_char *dst) +{ + int len; + u_char *ptr; + OffsetRec *ofsrec; + + ofsrec = real_ofsrec(src); + + for (len = ofsrec->klen, ptr = ofsrec->kptr ; len > 0 ; ) { + switch (*ptr & KANJIMODEMASK) { + case ZENHIRAASSYUKU: + case ZENKATAASSYUKU: + case KANJIASSYUKU: + *dst++ = *ptr++; + len -= 1; + break; + case LEADINGHANKAKU: +#ifndef USEHANKAKUINDICT + fprintf(stderr, "\302\260\300\255\245\263\241\274\245\311\241\246\245\250\245\351\241\274\n"); + exit(1); +#else + *dst++ = *ptr++; + *dst++ = *ptr++; + len -= 2; + break; +#endif + case OFFSETASSYUKU: + fprintf(stderr, "\306\363\275\305\244\313\245\252\245\325\245\273\245\303\245\310\244\254\273\262\276\310\244\265\244\354\244\306\244\244\244\353\n"); + exit(1); + case AIATTRIBUTE: + *dst++ = *ptr++; + *dst++ = *ptr++; + len -= 2; + break; + case KANJISTREND: + *dst++ = *ptr++; + len--; + break; + default: + *dst++ = *ptr++; + *dst++ = *ptr++; + len -= 2; + } + } + + return dst; +} + + +int +make_knjstr(u_char *src, int len, u_char *dst) +{ + u_char *keep = dst; + + while (len > 0) { + switch (*src & KANJIMODEMASK) { + case ZENHIRAASSYUKU: + case ZENKATAASSYUKU: + case KANJIASSYUKU: + *dst++ = *src++; + len -= 1; + break; + case LEADINGHANKAKU: +#ifndef USEHANKAKUINDICT + fprintf(stderr, "\302\260\300\255\245\263\241\274\245\311\241\246\245\250\245\351\241\274\n"); + exit(1); +#else + *dst++ = *src++; + *dst++ = *src++; + len -= 2; + break; +#endif + case OFFSETASSYUKU: + dst = set_ofsask(src, dst); + src += 2; + len -= 2; + break; + case AIATTRIBUTE: + *dst++ = *src++; + *dst++ = *src++; + len -= 2; + break; + case KANJISTREND: + *dst++ = *src++; + len--; + break; + default: + *dst++ = *src++; + *dst++ = *src++; + len -= 2; + } + } + return(dst - keep); +} + +static int +make_knjask() +{ + int i; + u_char *p; + u_char buf[128]; + int len; + int tlen = 0; + + for (i = 0 ; i < askknj_num ; i++) { + len = make_knjstr(askknj[i] -> kptr, askknj[i] -> klen, buf); + + Free(askknj[i] -> kptr); + + p = (u_char *)Malloc(len); + if (!p) { + fprintf(stderr, "\245\341\245\342\245\352\244\254\302\255\244\352\244\336\244\273\244\363\n"); + exit(1); + } + + memcpy(p, buf, len); + askknj[i] -> kptr = p; + askknj[i] -> klen = len; + + tlen += len + 1; + } + + return tlen; +} + + +void +makeseg() +{ + u_char buf[MAINSEGMENTLENGTH]; + DouonRec *drec; + HinsiRec *hrec; + KanjiRec *krec; + int i, j, k; + int slen; + u_char *dst; + u_char *sdst; + u_char *p, *q; + +#ifndef HEHE +#define datset(i) { if (dst >= buf+sizeof(buf)) goto err; *dst++ = i; } +#else +#define datset(i) { *dst++; i; } +#endif + + dst = buf; + + i = make_knjask(); + if (i >= 0x100) { + fprintf(stderr, "\264\301\273\372\260\265\275\314\312\270\273\372\316\363\244\254\304\271\244\271\244\256\244\353\n"); + exit(1); + } + + datset(i); + for (i = 0 ; i < askknj_num ; i++) { + p = askknj[i] -> kptr; + j = askknj[i] -> klen; + while (j > 0) { + k = codesize(*p); + datset(*p); p++; + if (k > 2) { + datset(*p); p++; + datset(*p); p++; + } else if (k > 1) { + datset(*p); p++; + } + j -= k; + } + datset(KANJISTREND); + } + + clear_ofsrec(); + + for (drec = douon_ptr ; drec ; drec = drec->dnext) { + sdst = dst; dst += DOUONBLKSIZENUMBER; + + p = drec -> yptr; + slen = strlen(p) - drec -> dlen; + p += slen; + for (i = drec -> dlen ; i > 0 ; i--) { + datset(*p); p++; + } + for (hrec = drec->hrec ; hrec ; hrec = hrec->hnext) { + + datset(hrec -> hinsi); + + for (krec = hrec->krec ; krec ; krec = krec->knext) { + p = q = knjcvt(krec -> kptr, krec -> klen, &i); + + set_ofsrec(krec->kptr, krec->klen, dst - buf); + + while (i-- > 0) { + datset(*p); p++; + } + datset(KANJISTREND); + + Free(q); + } + + datset(HINSIBLKTERM); + } + + i = dst - sdst; + *sdst = ((i >> 8) & 0x0f); + *(sdst + 1) = (i & 0xff); + + if (drec -> dlen > 0x0f) *sdst |= 0x40; + *(sdst + 2) = (drec -> dlen & 0x0f); + + if (slen > 0x0f) *sdst |= 0x80; + *(sdst + 2) |= ((slen << 4) & 0xf0); + } + if (dst < buf + sizeof(buf)) { + datset(DOUONBLKTERM); + } + + for (p = douon_ptr -> yptr ; ; ) { + if (idxpos < MAININDEXLENGTH) { + mindex[idxpos++] = *p; + } + else { + fprintf(stderr, "\245\244\245\363\245\307\245\303\245\257\245\271\244\254\244\242\244\325\244\354\244\336\244\267\244\277\n"); + exit(1); + } + if (!*p++) break; + } + if (idxpos < MAININDEXLENGTH) { + mindex[idxpos] = 0; + } + else { + fprintf(stderr, "\245\244\245\363\245\307\245\303\245\257\245\271\244\254\244\242\244\325\244\354\244\336\244\267\244\277\n"); + exit(1); + } + + i = dst - buf; + while (dst < buf + sizeof(buf)) *dst++ = DOUONBLKTERM; + + if (Fseek(outfp, + (long)(HEADERLENGTH + COMMENTLENGTH + MAININDEXLENGTH + + idxnum * MAINSEGMENTLENGTH), + 0) < 0) { + fprintf(stderr, "\275\320\316\317\245\325\245\241\245\244\245\353\244\307\245\267\241\274\245\257\245\250\245\351\241\274\n"); + exit(1); + } + if (Fwrite(buf, sizeof(buf), 1, outfp) != 1) { + fprintf(stderr, "\275\320\316\317\245\325\245\241\245\244\245\353\244\307\245\351\245\244\245\310\245\250\245\351\241\274\n"); + exit(1); + } + Fflush(outfp); + + printf("\245\273\245\260\245\341\245\363\245\310\310\326\271\346:%d:", idxnum++); + output_yomi(stdout, douon_ptr -> yptr); + printf("\t\245\273\245\260\245\341\245\363\245\310\304\271:%d", i); + printf("\t\306\261\262\273\270\354\277\364:%d\n", douon_num); + printf("\264\301\273\372\260\265\275\314\312\270\273\372\316\363:"); + for (i = j = 0 ; i < askknj_num ; i++) { + putchar('\t'); + if (i && j == 0) putchar('\t'); + output_knj(stdout, askknj[i] -> kptr, askknj[i] -> klen); + printf(":%d", askknj[i] -> hindo + askknj[i] -> exist); + if (++j >= 4) { + putchar('\n'); + j = 0; + } + } + if (j) putchar('\n'); + putchar('\n'); + fflush(stdout); + + return; + +err: + fprintf(stderr, "\245\273\245\260\245\341\245\363\245\310\271\275\300\256\303\346\244\313\245\320\245\303\245\325\245\241\244\254\244\242\244\325\244\354\244\277\n"); + fprintf(stderr, "\245\273\245\260\245\341\245\363\245\310\300\350\306\254\244\316\306\311\244\337:"); + output_yomi(stderr, douon_ptr -> yptr); + fputc('\n', stderr); + + exit(1); +#undef datset +} + +static void put4byte(p, n) +u_char *p; +long n; +{ + p += 3; + *p-- = n; n >>= 8; + *p-- = n; n >>= 8; + *p-- = n; n >>= 8; + *p = n; +} +void +makehead(u_char *dict_name) +{ + u_char header[HEADERLENGTH + COMMENTLENGTH]; + time_t i; + u_char *p; + +#define INDEXPOS (HEADERLENGTH + COMMENTLENGTH) + + memset(header, '\0', sizeof(header)); + put4byte(header + VERSIONPOS, DICTVERSION); + time(&i); + p = header + COMMENTPOS; + snprintf((char *)p, sizeof(header) - COMMENTPOS, "%s : %s", dict_name, ctime(&i)); + while (*p) { + if (*p == '\n') { *p = 0; break; } + p++; + } + + i = INDEXPOS; + + put4byte(header + DICTIDXPOS, i); + put4byte(header + DICTIDXLEN, MAININDEXLENGTH); + i += MAININDEXLENGTH; + + put4byte(header + DICTSEGPOS, i); + put4byte(header + DICTSEGLEN, MAINSEGMENTLENGTH); + put4byte(header + DICTSEGMAX, 0); + put4byte(header + DICTSEGNUM, idxnum); + + put4byte(header + DICTAIDXPOS, 0); + put4byte(header + DICTAIDXLEN, 0); + + put4byte(header + DICTASEGPOS, 0); + put4byte(header + DICTASEGLEN, 0); + + Fseek(outfp, (long)HEADERPOS, 0); + Fwrite(header, sizeof(header), 1, outfp); + Fseek(outfp, (long)INDEXPOS, 0); + Fwrite(mindex, MAININDEXLENGTH, 1, outfp); + +#undef INDEXPOS +} diff --git a/src/sj3mkdic/memory.c b/src/sj3mkdic/memory.c new file mode 100644 index 0000000..aebe4bf --- /dev/null +++ b/src/sj3mkdic/memory.c @@ -0,0 +1,68 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: memory.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:00:42 $ + */ + + +#include +#include +#include + +void * +Malloc(unsigned size) +{ + void *p; + + p = malloc(size); + if (p == NULL) { + fprintf(stderr, "\245\341\245\342\245\352\244\254\263\316\312\335\244\307\244\255\244\336\244\273\244\363\244\307\244\267\244\277\241\243\n"); + exit(1); + } + return p; +} + +void * +Zalloc(int size) +{ + void *p; + + p = Malloc(size); + memset(p, '\0', size); + return p; +} + +void +Free(void *p) +{ + free(p); +} diff --git a/src/sj3mkdic/offset.c b/src/sj3mkdic/offset.c new file mode 100644 index 0000000..e7ea54c --- /dev/null +++ b/src/sj3mkdic/offset.c @@ -0,0 +1,167 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: offset.c,v $ + * $SonyRevision: 1.2 $ + * $SonyDate: 1994/08/17 01:50:26 $ + */ + +#include +#include +#include +#include +#include "sj3_dict_struct.h" + +#include "sj3mkdic.h" + + +static OffsetRec * +makeoffset(u_char *ptr, int len, int ofs) +{ + OffsetRec *orec; + u_char *p; + + orec = (OffsetRec *)Malloc(sizeof(OffsetRec)); + + p = (u_char *)Malloc(len); + memcpy(p, ptr, len); + + orec -> kptr = p; + orec -> klen = len; + if (ofs) + orec -> offset = ofs; + else + orec -> offset = ofsrec_num + 1; + + return orec; +} + + +void +set_ofsrec(u_char *ptr, int len, int ofs) +{ + OffsetRec *orec; + int low, high, mid; + int i; + + if (ofsrec_num <= 0) { + orec = makeoffset(ptr, len, ofs); + ofsrec[0]= orec; + ofsrec_num++; + + return; + } + + low = 0; high = ofsrec_num - 1; + do { + mid = (low + high) / 2; + i = string_cmp(ofsrec[mid]->kptr, ofsrec[mid]->klen, ptr, len); + if (i > 0) + high = mid - 1; + else if (i < 0) + low = ++mid; + else + break; + } while (low <= high); + + if (i) { + if (ofsrec_num >= MAXOFFSETNUMBER) { + fprintf(stderr, "\245\252\245\325\245\273\245\303\245\310\241\246\245\306\241\274\245\326\245\353\244\254\244\242\244\325\244\354\244\336\244\267\244\277\n"); + exit(1); + } + + orec = makeoffset(ptr, len, ofs); + + for (i = ofsrec_num ; i > mid ; i--) ofsrec[i] = ofsrec[i - 1]; + ofsrec[mid] = orec; + ofsrec_num++; + } +} + + + +int +isknjexist(u_char *knj, int len) +{ + int low, high, mid; + int i; + + if (ofsrec_num <= 0) return 0; + + low = 0; high = ofsrec_num - 1; + while (low <= high) { + mid = (low + high) / 2; + i = string_cmp(ofsrec[mid]->kptr, ofsrec[mid]->klen, knj, len); + if (i > 0) + high = mid - 1; + else if (i < 0) + low = ++mid; + else + return ofsrec[mid] -> offset; + } + + return 0; +} + + + +void +clear_ofsrec() +{ + int i; + + for (i = 0 ; i < ofsrec_num ; i++) { + Free(ofsrec[i] -> kptr); + Free(ofsrec[i]); + } + + ofsrec_num = 0; +} + + + +OffsetRec * +real_ofsrec(u_char *ptr) +{ + int ofs; + int i; + OffsetRec **p; + + ofs = (*ptr++ & KNJASSYUKUMASK); + ofs <<= 8; + ofs += *ptr; + + for (i = ofsrec_num, p = ofsrec ; i-- > 0 ; p++) + if ((*p) -> offset == ofs) + return *p; + + fprintf(stderr, "real_ofsrec() \244\307\260\333\276\357\244\312\276\365\302\326 %x\n", ofs); + exit(1); +} diff --git a/src/sj3mkdic/readline.c b/src/sj3mkdic/readline.c new file mode 100644 index 0000000..77b5330 --- /dev/null +++ b/src/sj3mkdic/readline.c @@ -0,0 +1,286 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: readline.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:00:44 $ + */ + + +#include +#include +#include + +#include "sj_euc.h" +#include "sj3_dict_const.h" + +#include "sj3mkdic.h" + +static int yomi[MAXYOMILENGTH + 1]; +static int kanji[MAXKANJILENGTH + 1]; +static int hinsi[MAXHINSINUMBER + 1]; +static int atr[MAXATRNUMBER + 1]; + +#define Isblank(c) ((c) == 0x20 || (c) == 0x09 || (c) == 0xa1a1) +#define Isillegal(c) ((c) < 0x20) + + +static void +error(char *s) +{ + if (s) + fprintf(stderr, "%s\n", s); + mark_file(stderr); + + exit(1); +} + + + +static int +readchar() +{ + int c1; + int c2; + + c1 = getch(); + if (c1 == EOF) + return EOF; + + if (c1 != SS3) { + if (c1 & 0x80) { + c2 = getch(); + if (c2 == EOF) + error(NULL); + c1 = ((c1 & 0xff) << 8) + (c2 & 0xff); + } + } else { + c2 = getch(); + if (c2 == EOF) + error(NULL); + c1 = ((c1 & 0xff) << 8) + (c2 & 0xff); + c2 = getch(); + if (c2 == EOF) + error(NULL); + c1 = ((c1 & 0xffff) << 8) + (c2 & 0xff); + } + return c1; +} + + + +static int +skip_blank() +{ + int c; + + c = readchar(); + while (Isblank(c)) + c = readchar(); + + return c; +} + + + +static int +readhinsi() +{ + static int c = 0; + int i; + unsigned char hinsi[128]; + +retry: + if (c == '\n') { + c = 0; + return 0; + } + + c = skip_blank(); + if (c == '\n') { + c = 0; + return 0; + } + + for (i = 0 ; !Isblank(c) ; ) { + if (c == '\n' || c == ':') + break; + if (Isillegal(c)) + error(ILLEGALFORMAT); + if (c > 0xffffff) { + if (i >= 126) + error(TOOLONGHINSI); + hinsi[i++] = ((c >> 24) & 0xff); + if (i >= 126) + error(TOOLONGHINSI); + hinsi[i++] = ((c >> 16) & 0xff); + if (i >= 126) + error(TOOLONGHINSI); + hinsi[i++] = ((c >> 8) & 0xff); + } else if (c > 0xffff) { + if (i >= 126) + error(TOOLONGHINSI); + hinsi[i++] = ((c >> 16) & 0xff); + if (i >= 126) + error(TOOLONGHINSI); + hinsi[i++] = ((c >> 8) & 0xff); + } else if (c > 0xff) { + if (i >= 126) + error(TOOLONGHINSI); + hinsi[i++] = ((c >> 8) & 0xff); + } + if (i >= 127) + error(TOOLONGHINSI); + hinsi[i++] = (c & 0xff); + c = readchar(); + } + + if (i == 0) + return 0; + + if (hinsi[0] == '[' && hinsi[i - 1] == ']') { + hinsi[i - 1] = 0; + i = cnvhinsi(hinsi + 1); + if (i > 0) { + fprintf(stderr, "\311\312\273\354 \"%s\" \244\313\263\347\270\314\244\254\244\304\244\244\244\306\244\244\244\353\n", + hinsi + 1); + } else if (!i) { + fprintf(stderr, "\"%s\" \244\254\245\263\241\274\245\311\262\275\244\307\244\255\244\336\244\273\244\363\n", + hinsi + 1); + goto retry; + } + } + else { + hinsi[i] = 0; + i = cnvhinsi(hinsi); + if (!i) { + fprintf(stderr, "\"%s\" \244\254\245\263\241\274\245\311\262\275\244\307\244\255\244\336\244\273\244\363\n", hinsi); + goto retry; + } + } + + return i; +} + + + +int * +readline() +{ + int c; + int i; + int j; + + for ( ; ; ) { + mark_file(NULL); + + c = skip_blank(); + + if (c == '#') { + while (c != '\n') + c = skip_blank(); + } + + if (c == EOF) + return NULL; + + if (c != '\n') + break; + } + + for (i = 0 ; !Isblank(c) ; ) { + if (Isillegal(c)) + error(ILLEGALFORMAT); + if (i >= MAXYOMILENGTH) + error(TOOLONGYOMI); + yomi[i++] = c; + c = readchar(); + } + yomi[i] = 0; + if (i == 0) + error(NOYOMISTRING); + + c = skip_blank(); + + if (c != '"') { + for (i = 0 ; !Isblank(c) ; ) { + if (Isillegal(c)) + error(ILLEGALFORMAT); + if (i >= MAXKANJILENGTH) + error(TOOLONGKANJI); + kanji[i++] = c; + c = readchar(); + } + } else { + c = readchar(); + for (i = 0 ; c != '"' ; ) { + if (Isillegal(c)) + error(ILLEGALFORMAT); + if (i >= MAXKANJILENGTH) + error(TOOLONGKANJI); + kanji[i++] = c; + c = readchar(); + } + } + kanji[i] = 0; + if (i == 0) + error(NOKANJISTRING); + + i = j = 0; + while (c = readhinsi()) { + if (c < 0) { + if (i >= MAXATRNUMBER) + error(TOOMANYATR); + atr[i++] = -c; + } + else { + if (j >= MAXHINSINUMBER) + error(TOOMANYHINSI); + hinsi[j++] = c; + } + } + atr[i] = 0; + if (j == 0) + hinsi[j++] = HINSITANKAN; + hinsi[j] = 0; + + return yomi; +} + + + +void +setline(int (*func)()) +{ + int i; + + for (i = 0 ; hinsi[i] ; i++) + (*func)(yomi, kanji, hinsi[i], atr); +} diff --git a/src/sj3mkdic/sj3_dict_const.h b/src/sj3mkdic/sj3_dict_const.h new file mode 100644 index 0000000..493eef0 --- /dev/null +++ b/src/sj3mkdic/sj3_dict_const.h @@ -0,0 +1,108 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj3_dict_const.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:00:24 $ + */ + +#ifndef SJ3_DICT_CONST_H +#define SJ3_DICT_CONST_H + +#define MAINSEGMENTLENGTH 2048 +#define MAININDEXLENGTH 2048 +#define MAININDEXNUMBER 512 + +#define MAXYOMILENGTH 32 +#define MAXKANJILENGTH 32 +#define MAXHINSINUMBER 16 +#define MAXATRNUMBER 16 +#define MAXJOSINUMBER 16 + +#define MAXKNJASKNUMBER 16 +#define MAXYOMIASKNUMBER 16 + +#define DOUONBLKSIZENUMBER 3 + +#define DOUONBLKTERM 0xff +#define HINSIBLKTERM 0xff + +#define NORMALKANJIMASK 0x7f +#define SS3KANJI 0x0080 +#define ZENHIRAASSYUKU 0x80 +#define OFFSETASSYUKU 0x90 +#define ZENKATAASSYUKU 0xa0 +#define AIATTRIBUTE 0xb0 +#define KANJIASSYUKU 0xc0 +#define LEADINGHANKAKU 0xd0 +#define KANJISTREND 0x00 +#define ISASSYUKU 0x80 +#define ASSUKUUSE2BYTE 0x90 +#define KNJASSYUKUMASK 0x0f +#define KANJICODEMASK 0x0f +#define KANJIMODEMASK 0xf0 +#define ATRMSKANJIOFS 0xc0c0 + + +#define MAXHINDONUMBER 2000 +#define MAXOFFSETNUMBER 1000 + +#define ILLEGALFORMAT "\245\325\245\251\241\274\245\336\245\303\245\310\244\254\260\333\276\357\244\307\244\271" +#define TOOLONGYOMI "\306\311\244\337\312\270\273\372\316\363\244\254\304\271\244\271\244\256\244\336\244\271" +#define TOOLONGKANJI "\264\301\273\372\312\270\273\372\316\363\244\254\304\271\244\271\244\256\244\336\244\271" +#define TOOLONGHINSI "\311\312\273\354\312\270\273\372\316\363\244\254\304\271\244\271\244\256\244\336\244\271" +#define TOOLONGGROUP "\245\260\245\353\241\274\245\327\314\276\244\254\260\333\276\357\244\307\244\271" +#define TOOLONGJOSI "\275\365\273\354\312\270\273\372\316\363\244\254\260\333\276\357\244\307\244\271" +#define BADHINSI "\305\320\317\277\244\265\244\354\244\306\244\244\244\312\244\244\311\312\273\354\244\307\244\271" +#define BADGROUP "\305\320\317\277\244\265\244\354\244\306\244\244\244\312\244\244\245\260\245\353\241\274\245\327\244\307\244\271" +#define BADJOSI "\305\320\317\277\244\265\244\354\244\306\244\244\244\312\244\244\275\365\273\354\244\307\244\271" +#define NOYOMISTRING "\306\311\244\337\312\270\273\372\316\363\244\254\274\350\306\300\244\307\244\255\244\336\244\273\244\363" +#define NOKANJISTRING "\264\301\273\372\312\270\273\372\316\363\244\254\274\350\306\300\244\307\244\255\244\336\244\273\244\363" +#define TOOMANYATR "\302\260\300\255\244\316\277\364\244\254\302\277\244\271\244\256\244\336\244\271" +#define TOOMANYHINSI "\311\312\273\354\244\316\277\364\244\254\302\277\244\271\244\256\244\336\244\271" +#define TOOMANYJOSI "\275\365\273\354\244\316\277\364\244\254\302\277\244\271\244\256\244\336\244\271" +#define NODATAINMAIN "\245\341\245\244\245\363\274\255\275\361\244\313\302\270\272\337\244\267\244\336\244\273\244\363" +#define TOOMANYTARGET "\311\312\273\354\244\362\243\261\244\304\273\330\304\352\244\267\244\306\244\257\244\300\244\265\244\244" + +#define HINSITANKAN cnvhinsi("\303\261\264\301") + +#define FALSE 0 +#define TRUE (!FALSE) + +#define DIVLIST 1 +#define ASSYUKUREC 2 +#define STRING 3 +#define HINDOREC 4 +#define OFFSETREC 5 +#define KANJIREC 6 +#define HINSIREC 7 +#define DOUONREC 8 + +#endif diff --git a/src/sj3mkdic/sj3_dict_struct.h b/src/sj3mkdic/sj3_dict_struct.h new file mode 100644 index 0000000..35584b4 --- /dev/null +++ b/src/sj3mkdic/sj3_dict_struct.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: sj3_dict_struct.h,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:00:26 $ + */ + + + + +#include "sj3_dict_const.h" + +#ifndef SJ3_DICT_STRUCT_H +#define SJ3_DICT_STRUCT_H + +typedef struct kanji_rec { + int klen; + u_char *kptr; + int alen; + u_char *aptr; + struct kanji_rec *knext; +} KanjiRec; + +typedef struct hinsi_rec { + int hinsi; + KanjiRec *krec; + struct hinsi_rec *hnext; +} HinsiRec; + +typedef struct douon_rec { + u_char *yptr; + int dlen; + int hrec_num; + HinsiRec *hrec; + struct douon_rec *dnext; +} DouonRec; + +typedef struct hindo_rec { + int klen; + u_char *kptr; + int exist; + int hindo; + + int offset; + + struct hindo_rec *anext; + struct assyuku_rec *arec; +} HindoRec; + +typedef struct assyuku_rec { + int len; + HindoRec *nrec; + struct assyuku_rec *anext; +} AssyukuRec; + +typedef struct offset_rec { + int klen; + u_char *kptr; + int offset; +} OffsetRec; + +#endif diff --git a/src/sj3mkdic/sj3mkdic.h b/src/sj3mkdic/sj3mkdic.h new file mode 100644 index 0000000..51d6aae --- /dev/null +++ b/src/sj3mkdic/sj3mkdic.h @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2004 Iwata + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef SJ3MKDIC_H +#define SJ3MKDIC_H + +#include + +#include "sj3_dict_struct.h" + +/* char.c */ +int cnvyomi(int); +int h2kcode(int); +int codesize(u_char); +void output_knj(FILE *, u_char *, int); +void output_str(FILE *, char *); +void output_int(FILE *, int *); +int yomi2zen(int); +void output_yomi(FILE *, u_char *); + +/* cnvhinsi.c */ +int u_strcmp(u_char *, u_char *); +int cnvhinsi(u_char *); +char *hinsi_str(int); + +/* file.c */ +FILE *Fopen(char *, char *); +void Fclose(FILE *); +int Fseek(FILE *, long, int); +long Ftell(FILE *); +long Fsize(char *); +size_t Fread(char *, int, int, FILE *); +size_t Fwrite(char *, int, int, FILE *); +int Fgetc(FILE *); +int Fflush(FILE *); + +/* global.c */ +extern DouonRec *douon_ptr; +extern int douon_num; +extern int yomi_len; +extern int hinsi_num; +extern int kanji_len; +extern HindoRec *hindo[MAXHINDONUMBER]; +extern int hindo_num; +extern OffsetRec *ofsrec[MAXOFFSETNUMBER]; +extern int ofsrec_num; +extern AssyukuRec *assyuku; +extern HindoRec *askknj[MAXKNJASKNUMBER]; +extern int askknj_num; +extern int kanji_num; + +/* hindo.c */ +int check_hindo(u_char *, int); +void knjhnd_set(u_char *, int); +void knjhnd_reset(u_char *, int); +int decide_knjask(); +void clear_hindo(); +void clear_assyuku(); + +/* knjcvt.c */ +u_char *knjofscvt(u_char *, int, int *); +u_char *knjcvt(u_char *, int, int *); + +/* mkdict.c */ +extern FILE *infp; +extern FILE *outfp; +char *make_idxlist(char *); +char *get_idxlist(char *); +void parse(int, char **); +int get_number(char *); +void usage(char *); +int getch(); +void mark_file(FILE *); + +/* makelist */ +void flush_douon(); +void makelist(int *, int *, int, int *); + +/* makeseg.c */ +int make_knjstr(u_char *, int, u_char *); +void makeseg(); +void makehead(u_char *); + +/* memory.c */ +void *Malloc(unsigned); +void *Zalloc(int); +void Free(void *); + +/* offset.c */ +void set_ofsrec(u_char *, int, int); +int isknjexist(u_char *, int); +void clear_ofsrec(); +OffsetRec *real_ofsrec(u_char *); + +/* readline.c */ +int *readline(); +void setline(int (*)()); + +/* string.c */ +int bubun_str(u_char *, int, u_char *, int); +int overlap_str(u_char *, int, u_char *, int); +int istrlen(int *); +int istrcmp(int *, int *); +int top_strcmp(int *, int *); +int last_strcmp(int *, int *); +int string_cmp(u_char *, int, u_char *, int); + +#endif /* SJ3MKDIC_H */ + + diff --git a/src/sj3mkdic/string.c b/src/sj3mkdic/string.c new file mode 100644 index 0000000..c9e0816 --- /dev/null +++ b/src/sj3mkdic/string.c @@ -0,0 +1,202 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: string.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:00:45 $ + */ + + +#include +#include +#include "sj3_dict_const.h" + +#include "sj3mkdic.h" + + +int +bubun_str(u_char *p1, int l1, u_char *p2, int l2) +{ + u_char *p; + int l; + int i; + + for (p = p1, l = l1 ; l > 0 ; ) { + if (l < l2) break; + for (i = 0 ; i < l2 ; i++) + if (*(p + i) != *(p2 + i)) break; + + if (i >= l2) return 1; + + i = codesize(*p); + p += i; + l -= i; + } + + for (p = p2, l = l2 ; l > 0 ; ) { + if (l < l1) break; + for (i = 0 ; i < l1 ; i++) if (*(p + i) != *(p1 + i)) break; + + if (i >= l1) return -1; + + i = codesize(*p); + p += i; + l -= i; + } + + return 0; +} + + + +int +overlap_str(u_char *p1, int l1, u_char *p2, int l2) +{ + u_char *p; + int l; + int i; + int j; + u_char tmp[MAXKANJILENGTH * 2 + MAXATRNUMBER * 2]; + + for (p = p1, l = l1 ; l > 0 ; ) { + if (l < l2) { + for (i = 0 ; (i < l) && (*(p + i) == *(p2 + i)) ; i++) ; + + if ((i >= l) && (l2 + l1 - l < sizeof(tmp))) { + for (i = 0 ; i < l1 ; i++) + tmp[i] = *(p1 + i); + for (j = l ; j < l2 ; i++, j++) + tmp[i] = *(p2 + j); + + if (check_hindo(tmp, i)) { + return -1; + } + } + } + + i = codesize(*p); + p += i; + l -= i; + } + + for (p = p2, l = l2 ; l > 0 ; ) { + if (l < l1) { + for (i = 0 ; (i < l) && (*(p + i) == *(p1 + i)) ; i++) ; + + if ((i >= l) && (l1 + l2 - l < sizeof(tmp))) { + + for (i = 0 ; i < l2 ; i++) + tmp[i] = *(p2 + i); + for (j = l ; j < l1 ; i++, j++) + tmp[i] = *(p1 + j); + + if (check_hindo(tmp, i)) { + return -1; + } + } + } + + i = codesize(*p); + p += i; + l -= i; + } + + return 0; +} + + + +int +istrlen(int *s) +{ + int *p; + + for (p = s ; *p ; p++) ; + + return(p - s); +} + + + +int +istrcmp(int *s, int *d) +{ + for ( ; *s && (*s == *d) ; s++, d++) ; + + return (*s - *d); +} + + + +int +top_strcmp(int *src, int *dst) +{ + int i = 0; + + for (i = 0 ; *src && (*src == *dst) ; src++, dst++) + i++; + + return (i > MAXYOMIASKNUMBER) ? MAXYOMIASKNUMBER : i; +} + + + +int +last_strcmp(int *src, int *dst) +{ + int slen, dlen; + + slen = istrlen(src); + dlen = istrlen(dst); + + if (dlen > MAXYOMIASKNUMBER) + return 0; + + if (istrcmp(src + (slen - dlen), dst)) + return 0; + + return dlen; +} + + + +int +string_cmp(u_char *p1, int l1, u_char *p2, int l2) +{ + while (l1 > 0 && l2 > 0) { + if (*p1 != *p2) return (*p1 - *p2); + p1++; l1--; + p2++; l2--; + } + + if (l1 == l2) return 0; + if (l1 > l2) return 1; + return -1; +} diff --git a/src/sj3serv/Makefile.am b/src/sj3serv/Makefile.am new file mode 100644 index 0000000..090d9b9 --- /dev/null +++ b/src/sj3serv/Makefile.am @@ -0,0 +1,62 @@ +if BUILDABLE_SJ3SERV + +EXTRA_DIST = \ + freebsd-sj3.sh.in \ + sj3serv.lua.example.in \ + time_stamp.sh + +AM_CFLAGS = $(lua_CFLAGS) + +INCLUDES = \ + -I$(top_srcdir)/include/sj3compat \ + -I$(top_srcdir)/include/sj3common \ + -I$(top_srcdir)/include/sj3core + +LDADD = \ + $(top_srcdir)/lib/sj3core/libsj3core.la \ + $(top_srcdir)/lib/sj3compat/libsj3compat.la \ + @WRAP_LIB@ + +if SJ3_INTERNAL_LUA +AM_CFLAGS += -I$(top_builddir)/lib/lua/src +LDADD += $(top_builddir)/lib/lua/src/liblua.la @LIBM@ +else +AM_CFLAGS += $(LUA_CFLAGS) +LDADD += $(LUA_LIBS) +endif + +exampledir = $(datadir)/examples/sj3 + +sj3serv_SOURCES = \ + sj_string.h \ + sj3serv.h \ + auth.c \ + comuni.c \ + error.c \ + execute.c \ + main.c \ + priv.c \ + setup.c \ + time_stamp.c \ + version.c \ + sj_string.c + +sbin_PROGRAMS = sj3serv + +example_DATA = \ + freebsd-sj3.sh.in \ + sj3serv.lua.example + +time_stamp.c: time_stamp.sh + sh ./time_stamp.sh > time_stamp.c + +sj3serv.lua.example: sj3serv.lua.example.in + sed -e "s,%%SJ3VARDIR%%,$(SJ3VARDIR),g" \ + -e "s,%%SJ3OWNER%%,$(SJ3OWNER),g" \ + sj3serv.lua.example.in > sj3serv.lua.example + +CLEANFILES = \ + sj3serv.lua.example \ + time_stamp.c + +endif diff --git a/src/sj3serv/auth.c b/src/sj3serv/auth.c new file mode 100644 index 0000000..e031f91 --- /dev/null +++ b/src/sj3serv/auth.c @@ -0,0 +1,230 @@ +/* + * Copyright (c) 2003 Anil Madhavapeddy + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "sj3serv.h" + +enum cmd_types { + AUTH_GETUGID, + AUTH_EXIT +}; + +static int auth_fd = -1; + +static int may_read(int, void *, size_t); +static void must_read(int, void *, size_t); +static void must_write(int, void *, size_t); + + +int +exec_auth() +{ + int socks[2]; + int i; + pid_t child_pid = -1; + struct sigaction sa; + + if (socketpair(AF_LOCAL, SOCK_STREAM, PF_UNSPEC, socks) == -1) { + fprintf(stderr, "socketpair() failed"); + exit(255); + } + + child_pid = fork(); + if (child_pid < 0) { + fprintf(stderr, "fork() failed\n"); + exit(255); + } + + if (!child_pid) { + auth_fd = socks[1]; + return 0; + } + + memset(&sa, 0, sizeof(sa)); + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_RESTART; + sa.sa_handler = SIG_DFL; + for (i = 1; i < NSIG; i++) + sigaction(i, &sa, NULL); + + strlcpy(chroot_dir, "/", sizeof(chroot_dir)); + set_priv("[auth]"); + + while (1) { + int cmd; + size_t username_len; + char username[BUFSIZ]; + int ret; + struct passwd *pw; + + if (may_read(socks[0], &cmd, sizeof(int))) + break; + switch (cmd) { + case AUTH_GETUGID: + /* length, user name */ + must_read(socks[0], &username_len, sizeof(size_t)); + if (username_len == 0 || username_len > sizeof(username)) + _exit(0); + must_read(socks[0], username, username_len); + username[username_len - 1] = '\0'; + pw = getpwnam(username); + if (pw) { + ret = 1; + must_write(socks[0], &ret, sizeof(int)); + must_write(socks[0], &pw->pw_uid, sizeof(uid_t)); + must_write(socks[0], &pw->pw_gid, sizeof(gid_t)); + } else { + ret = 0; + must_write(socks[0], &ret, sizeof(int)); + } + break; + case AUTH_EXIT: + close(socks[0]); + _exit(1); + default: + fprintf(stderr, "auth unknown command %d\n", cmd); + close(socks[0]); + _exit(255); + } + } + fprintf(stderr, "auth fatal error\n"); + + close(socks[0]); + _exit(1); +} + +/* Read all data or return 1 for error. */ +static int +may_read(int fd, void *buf, size_t n) +{ + char *s = buf; + ssize_t res, pos = 0; + + while (n > pos) { + res = read(fd, s + pos, n - pos); + switch (res) { + case -1: + if (errno == EINTR || errno == EAGAIN) + continue; + case 0: + return (1); + default: + pos += res; + } + } + return (0); +} + +/* Read data with the assertion that it all must come through, or + * else abort the process. Based on atomicio() from openssh. */ +static void +must_read(int fd, void *buf, size_t n) +{ + char *s = buf; + ssize_t res, pos = 0; + + while (n > pos) { + res = read(fd, s + pos, n - pos); + switch (res) { + case -1: + if (errno == EINTR || errno == EAGAIN) + continue; + case 0: + fprintf(stderr, "must_read: internal protocol error\n"); + fflush(stderr); + _exit(0); + default: + pos += res; + } + } +} + +/* Write data with the assertion that it all has to be written, or + * else abort the process. Based on atomicio() from openssh. */ +static void +must_write(int fd, void *buf, size_t n) +{ + char *s = buf; + ssize_t res, pos = 0; + + while (n > pos) { + res = write(fd, s + pos, n - pos); + switch (res) { + case -1: + if (errno == EINTR || errno == EAGAIN) + continue; + case 0: + fprintf(stderr, "must_write: internal protocol error\n"); + fflush(stderr); + _exit(0); + default: + pos += res; + } + } +} + +int +auth_getugid(char *username, sj3_ugid *ugid) +{ + size_t len; + int cmd = AUTH_GETUGID; + int ret; + uid_t uid; + gid_t gid; + + if (auth_fd < 0) { + fprintf(stderr, "%s called from privileged portion", "auth_getpwnam"); + exit(255); + } + + len = strlen(username) + 1; + if (len == 0 || BUFSIZ < len) + return NULL; + + must_write(auth_fd, &cmd, sizeof(int)); + must_write(auth_fd, &len, sizeof(size_t)); + must_write(auth_fd, username, len); + must_read(auth_fd, &ret, sizeof(int)); + if (ret) { + must_read(auth_fd, &uid, sizeof(uid_t)); + must_read(auth_fd, &gid, sizeof(gid_t)); + ugid->uid = uid; + ugid->gid = gid; + return 1; + } else { + return 0; + } +} + +void +exit_auth() +{ + int cmd = AUTH_EXIT; + + must_write(auth_fd, &cmd, sizeof(int)); + + return; +} + diff --git a/src/sj3serv/comuni.c b/src/sj3serv/comuni.c new file mode 100644 index 0000000..128e605 --- /dev/null +++ b/src/sj3serv/comuni.c @@ -0,0 +1,586 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: comuni.c,v $ + * $SonyRevision: 1.4 $ + * $SonyDate: 1994/11/16 07:34:05 $ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "config.h" + +#ifdef USE_LIBWRAP +#include +#include + +int allow_severity = LOG_INFO; +int deny_severity = LOG_WARNING; +#endif + +#include "sj_kcnv.h" +#include "sj_kanakan.h" +#include "sj3serv.h" + +#ifndef SOMAXCONN +# define SOMAXCONN 5 +#endif + +#define MAX_LISTEN_SOCKS 16 + +int client_num = 0; +Client *client = NULL; +Client *cur_client; + +int maxfds = 0; +fd_set fds_org; +jmp_buf client_dead; +int client_fd; + +static int fd_unix = -1; +static int fd_inets[MAX_LISTEN_SOCKS]; +static int num_inets = 0; + +static char putbuf[BUFSIZ]; +static char getbuf[BUFSIZ]; +static int putpos = 0; +static int buflen = 0; +static int getpos = 0; + + +void +socket_init() +{ + FD_ZERO(&fds_org); + client_num = 0; + maxfds = 0; +} + +static void +set_fd(int fd) +{ + FD_SET(fd, &fds_org); + if (fd >= maxfds) + maxfds = fd + 1; +} + +static void +clr_fd(int fd) +{ + FD_CLR(fd, &fds_org); + if (maxfds == fd + 1) { + while (--fd >= 0) { + if (FD_ISSET(fd, &fds_org)) + break; + } + maxfds = fd + 1; + } +} + +void +open_af_unix() +{ + struct sockaddr_un sunix; + + unlink(domain_socket_name); + + memset((char *)&sunix, '\0', sizeof(sunix)); + sunix.sun_family = AF_UNIX; + strlcpy(sunix.sun_path, domain_socket_name, sizeof(sunix.sun_path)); + + if ((fd_unix = socket(AF_UNIX, SOCK_STREAM, 0)) == ERROR) { + unlink(domain_socket_name); + fprintf(stderr, "Can't create AF_UNIX socket at '%s'\n", domain_socket_name); + exit(1); + } + + if (bind(fd_unix, (struct sockaddr *)&sunix, strlen(sunix.sun_path) + 2) == ERROR) { + if (errno == EADDRINUSE) + fprintf(stderr, "Port '%s' is already in use\n", + domain_socket_name); + else + fprintf(stderr, "Can't bind AF_UNIX socket at '%s'\n", domain_socket_name); + shutdown(fd_unix, 2); + close(fd_unix); + unlink(domain_socket_name); + exit(1); + } + + if (listen(fd_unix, SOMAXCONN) == ERROR) { + shutdown(fd_unix, 2); + unlink(domain_socket_name); + close(fd_unix); + fprintf(stderr, "Can't listen AF_UNIX socket\n"); + exit(1); + } + chmod(domain_socket_name, + S_IRUSR | S_IWUSR | S_IXUSR | + S_IRGRP | S_IWGRP | S_IXGRP | + S_IROTH | S_IWOTH | S_IXOTH); + set_fd(fd_unix); +} + +void +open_af_inet() +{ + struct addrinfo hints; + struct addrinfo *res, *res0; + int error; + int true = 1; + + /* + * getaddrinfo() case. You can get IPv6 address and IPv4 address + * at the same time. + */ + memset(&hints, 0, sizeof(hints)); + /* set-up hints structure */ + hints.ai_family = address_family; + hints.ai_flags = AI_PASSIVE; + hints.ai_socktype = SOCK_STREAM; + + error = getaddrinfo(inet_host_name, inet_port_name, &hints, &res); + if (error) { + fprintf(stderr, gai_strerror(error)); + exit(1); + } + + res0 = res; + + for ( ; res; res = res->ai_next) { + struct sockaddr *sa = res->ai_addr; + u_int8_t salen = res->ai_addrlen; + char ntop[NI_MAXHOST], strport[NI_MAXSERV]; + int listen_sock; + + if (res->ai_family != AF_INET && res->ai_family != AF_INET6) + continue; + + if (num_inets >= MAX_LISTEN_SOCKS) { + fprintf(stderr, + "Too many listen sockets. " + "Enlarge MAX_LISTEN_SOCKS\n"); + exit(1); + } + + if (getnameinfo(sa, salen, + ntop, sizeof(ntop), strport, sizeof(strport), + NI_NUMERICHOST | NI_NUMERICSERV) != 0) { + fprintf(stderr, "getnameinfo failed\n"); + continue; + } + + listen_sock = socket(res->ai_family, res->ai_socktype, + res->ai_protocol); + + if (listen_sock < 0) { + fprintf(stderr, "socket: %.100s\n", strerror(errno)); + exit(1); + } + + if (setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, + &true, sizeof(true)) == -1) + fprintf(stderr, "setsockopt SO_REUSEADDR: %s\n", strerror(errno)); + + if (bind(listen_sock, sa, salen) < 0) { + fprintf(stderr, "Bind to port %s on %s failed: %.200s.\n", + strport, ntop, strerror(errno)); + close(listen_sock); + continue; + } + + if (listen(listen_sock, SOMAXCONN) < 0) { + fprintf(stderr, "listen: %.100s\n", strerror(errno)); + close(listen_sock); + exit(1); + } + + set_fd(listen_sock); + + fd_inets[num_inets] = listen_sock; + num_inets++; + } + freeaddrinfo(res0); + + if (num_inets < 0) { + fprintf(stderr, "Cannot bind any address."); + exit(1); + } +} + +void +open_socket() +{ + if (inet_enable) + open_af_inet(); + if (domain_enable) + open_af_unix(); +} + +static int +connect_af_unix() +{ + struct sockaddr_un sunix; + int i = sizeof(sunix); + int fd; + + if ((fd = accept(fd_unix, (struct sockaddr *)&sunix, &i)) == ERROR) + warning_out("Can't accept AF_UNIX socket"); + return fd; +} + +static int +connect_af_inet(int fd_inet) +{ + struct sockaddr_in sin; + int i = sizeof(sin); + int fd = 0; + + if ((fd = accept(fd_inet, (struct sockaddr *)&sin, &i)) == ERROR) + warning_out("Can't accept AF_INET socket"); + +#ifdef USE_LIBWRAP + { + struct request_info req; + + request_init(&req, RQ_DAEMON, "sj3", RQ_FILE, fd_inets[i], NULL); + fromhost(&req); + + if (!hosts_access(&req)) { + warning_out("connection refused from %s", + eval_client(&req)); + close(fd); + fd = -1; + } + } +#endif + return fd; +} + +static void +close_af_unix() +{ + struct sockaddr_un sunix; + int true = 1; + int i; + + ioctl(fd_unix, FIONBIO, &true); + for ( ; ; ) { + i = sizeof(sunix); + if (accept(fd_unix, (struct sockaddr *)&sunix, &i) < 0) + break; + } + shutdown(fd_unix, 2); + close(fd_unix); + unlink(domain_socket_name); + clr_fd(fd_unix); +} + +static void +close_af_inet() +{ + struct sockaddr_in sin; + int true = 1; + int i, j; + + for (j = 0; j < num_inets; j++) { + ioctl(fd_inets[j], FIONBIO, &true); + for ( ; ; ) { + i = sizeof(sin); + if (accept(fd_inets[j], (struct sockaddr *)&sin, &i) < 0) + break; + } + shutdown(fd_inets[j], 2); + close(fd_inets[j]); + clr_fd(fd_inets[j]); + } +} + +void +close_socket() +{ + if (inet_enable) + close_af_unix(); + if (domain_enable) + close_af_inet(); +} + +static void +connect_client(fd_set *readfds) +{ + int fd = -1; + Client *client_tmp; + int i; + + for (i = 0; i < num_inets; i++) { + if (FD_ISSET(fd_inets[i], readfds)) { + fd = connect_af_inet(fd_inets[i]); + break; + } + } + if (fd < 0 && FD_ISSET(fd_unix, readfds)) + fd = connect_af_unix(); + if (fd == ERROR) + return; + + if (client_num >= MAXCLIENTNUM || client_num >= max_client) { + warning_out("No more client"); + } + else { + debug_out(1, "client create(%d)\n", fd); + logging_out("connect to client on %d", fd); + + if (client_tmp = (Client *)malloc(sizeof(Client))) { + memset(client_tmp, 0, sizeof(Client)); + client_tmp->fd = fd; + client_tmp->next = client; + client = client_tmp; + client_num++; + set_fd(fd); + return; + } + warning_out("No more client(Can't alloc)"); + } + shutdown(fd, 2); + close(fd); +} + + + +static Client * +disconnect_client(Client *cp) +{ + WorkArea *wp; + StdyFile *sp; + int fd; + Client *cl_tmp, *cl_before; + + if (sp = cp->stdy) closestdy(sp); + if (wp = cp->work) free_workarea(wp); + + debug_out(1, "client dead(%d)\n", cp->fd); + logging_out("disconnect from client on %d", cp->fd); + + shutdown(fd = cp->fd, 2); + close(fd); + clr_fd(fd); + + if (cp == client) { + client = cp->next; + free(cp); + cp = client; + } else { + cl_before = client; + cl_tmp = client->next; + while (cl_tmp) { + if (cl_tmp == cp) { + cl_before->next = cp->next; + free(cp); + break; + } + cl_before = cl_tmp; + cl_tmp = cl_tmp->next; + } + cp = cl_before->next; + } + client_num--; + return cp; +} + +void +communicate() +{ + signal(SIGPIPE, SIG_IGN); + + for ( ; ; ) { + fd_set readfds; + + readfds = fds_org; + + while (select(maxfds, &readfds, NULL, NULL, NULL) == ERROR) { + if (errno != EINTR) + error_out("select"); + errno = 0; + } + + for (cur_client = client ; cur_client; ) { + if (setjmp(client_dead)) { + cur_client = disconnect_client(cur_client); + continue; + } + if (FD_ISSET(cur_client->fd, &readfds)) { + client_fd = cur_client->fd; + putpos = buflen = getpos = 0; + execute_cmd(); + } + cur_client = cur_client->next; + } + connect_client(&readfds); + } +} + + +void +put_flush() +{ + int len; + int i; + char *p; + + for (len = putpos, p = putbuf ; len > 0 ; ) { + if ((i = write(client_fd, p, len)) == ERROR) { + longjmp(client_dead, -1); + } + len -= i; + p += i; + } + putpos = 0; +} +void +put_byte(int c) +{ + putbuf[putpos++] = c; + if (putpos >= sizeof(putbuf)) + put_flush(); +} +void +put_work(int c) +{ + put_byte(c >> 8); + put_byte(c & 0xff); +} +void +put_int(int c) +{ + put_byte(c >> (8 * 3)); + put_byte(c >> (8 * 2)); + put_byte(c >> (8 * 1)); + put_byte(c); +} +u_char * +put_string(u_char *p) +{ + if (p) { + do { + put_byte(*p); + } while (*p++); + } + else + put_byte(0); + return p; +} +u_char * +put_ndata(u_char *p, int n) +{ + while (n-- > 0) + put_byte(p ? *p++ : 0); + return p; +} + + + +void +get_buf() +{ + int i; + + for ( ; ; ) { + if ((i = read(client_fd, getbuf, sizeof(getbuf))) > 0) + break; + if (i == ERROR) { + if (errno == EINTR) + continue; + if (errno == EWOULDBLOCK) + continue; + } + longjmp(client_dead, -1); + } + buflen = i; + getpos = 0; +} +int +get_byte() +{ + if (getpos >= buflen) get_buf(); + return (getbuf[getpos++] & 0xff); +} +int +get_word() +{ + int i; + + i = get_byte(); + return ((i << 8) | get_byte()); +} +int +get_int() +{ + int i0; + int i1; + int i2; + + i0 = get_byte(); + i1 = get_byte(); + i2 = get_byte(); + return((i0 << (8*3)) | (i1 << (8*2)) | (i2 << (8*1)) | get_byte()); +} +int +get_nstring(u_char *p, int n) +{ + int c; + + do { + c = get_byte(); + if (n-- > 0) + *p++ = c; + } while (c); + + return (n < 0) ? ERROR : 0; +} +u_char * +get_ndata(u_char *p, int n) +{ + while (n-- > 0) + *p++ = get_byte(); + return p; +} diff --git a/src/sj3serv/error.c b/src/sj3serv/error.c new file mode 100644 index 0000000..defff06 --- /dev/null +++ b/src/sj3serv/error.c @@ -0,0 +1,187 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: error.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:02:51 $ + */ + +#include +#include +#include +#include +#include +#include +#include "sj_typedef.h" +#include "sj_kanakan.h" + +#include "sj3serv.h" + +static char *tty_name = "/dev/tty"; +static FILE *errfp = NULL; +static FILE *logfp = NULL; +static FILE *dbgfp = NULL; + +static char * +format_time() +{ +#define TBUF_LEN 2048 + static char buf[TBUF_LEN]; + time_t now; + + time(&now); + strftime(buf, sizeof(buf), "%h %e %T ", localtime(&now)); + return buf; +} + +int +open_error() +{ + int flg = 0; + + if (error_file && *error_file) { + if (!strcmp(error_file, tty_name)) { + errfp = stderr; + flg = -1; + } + else if (!(errfp = fopen(error_file, "a"))) + fprintf(stderr, "can't open \"%s\"\n", error_file); + } + else + errfp = NULL; + + return flg; +} + +void +error_out(const char *fmt, ...) +{ + va_list ap; + char tmp[BUFSIZ]; + + if (errfp) { + va_start(ap, fmt); + vsnprintf(tmp, sizeof(tmp), fmt, ap); + va_end(ap); + fprintf(errfp, "%s%s: %s\n", format_time(), program_name, tmp); + fflush(errfp); + } + exit(1); +} + +void +warning_out(const char *fmt, ...) +{ + va_list ap; + char tmp[BUFSIZ]; + + if (errfp) { + va_start(ap, fmt); + vsnprintf(tmp, sizeof(tmp), fmt, ap); + va_end(ap); + fprintf(errfp, "%s%s: warning: %s\n", format_time(), program_name, tmp); + fflush(errfp); + } +} + + +int +open_log() +{ + int flg = 0; + + if (log_file && *log_file) { + if (!strcmp(log_file, tty_name)) { + logfp = stderr; + flg = -1; + } + else + logfp = fopen(log_file, "a"); + if (logfp) { + fprintf(logfp, "%s%s log started\n", + format_time(), program_name); + fflush(logfp); + } + else + fprintf(stderr, "can't open \"%s\"\n", log_file); + } + else + logfp = NULL; + + return flg; +} + +void +logging_out(const char *fmt, ...) +{ + va_list ap; + char tmp[BUFSIZ]; + + if (logfp) { + va_start(ap, fmt); + vsnprintf(tmp, sizeof(tmp), fmt, ap); + va_end(ap); + fprintf(logfp, "%s%s\n", format_time(), tmp); + fflush(logfp); + } +} + + +int +open_debug() +{ + int flg = 0; + + if (debug_file && *debug_file) { + if (!strcmp(debug_file, tty_name)) { + dbgfp = stderr; + flg = -1; + } + else if (!(dbgfp = fopen(debug_file, "a"))) + fprintf(stderr, "can't open \"%s\"\n", debug_file); + } + else + dbgfp = NULL; + + return flg; +} + +void +debug_out(int lvl, const char *fmt, ...) +{ + va_list ap; + + if (lvl <= debug_level && dbgfp) { + va_start(ap, fmt); + vfprintf(dbgfp, fmt, ap); + va_end(ap); + fflush(dbgfp); + } +} diff --git a/src/sj3serv/execute.c b/src/sj3serv/execute.c new file mode 100644 index 0000000..1d008e0 --- /dev/null +++ b/src/sj3serv/execute.c @@ -0,0 +1,1714 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: execute.c,v $ + * $SonyRevision: 1.7 $ + * $SonyDate: 1998/04/13 11:20:12 $ + */ + +#include +#include +#include +#include + +#include "sj_kcnv.h" +#include "sj_kanakan.h" +#include +#include +#include +#include +#include +#include +#include +#include "sj3cmd.h" +#include "sj3err.h" +#include "Dict.h" + +#include "sj3serv.h" + +#define rmemcpy(a, b, n) memcpy((b), (a), (n)) + +#define SJIS_PROTO 1 +#define EUC_PROTO 2 + + +static u_char buf1[YOMIBUFSIZE]; +static u_char buf2[YOMIBUFSIZE]; +static u_char buf3[YOMIBUFSIZE]; +static u_char buf4[YOMIBUFSIZE]; +static u_char kbuf[KANJIBUFSIZE]; +static u_char skbuf[KANJIBUFSIZE]; + +static jmp_buf error_ret; +static WorkArea *worklist = NULL; +static Client *cur_cli; + +static u_char defaultchar[2] = {(u_char)0x81, (u_char)0x40}; +static int defuse=0, defuse2=0; + +int sj3_str_sjistoeuc(unsigned char *, int, unsigned char *, unsigned char *, int *); +int sj3_str_euctosjis(unsigned char *, int, unsigned char *, unsigned char *, int *); + +int +make_full_path(char *path, int pathlen) +{ + char tmp[MAXPATHLEN]; + char *index; + int i; + + if (!path || !*path) + return ERROR; + + i = strlen(dict_dir) + 1 + strlen(path) + 1; + if (i > sizeof(tmp)) + return ERROR; + + strlcpy(tmp, path, sizeof(tmp)); + index = strtok(tmp, "/"); + do { + if (!strcmp(index, "..")) + return ERROR; + } while ((index = strtok(NULL, "/")) != NULL ); + + if (*path == '/') { + if (strncmp(path, dict_dir, strlen(dict_dir)) == 0) { + return 0; + } else { + return ERROR; + } + } + + strlcpy(tmp, dict_dir, pathlen); + strlcat(tmp, "/", pathlen); + strlcat(tmp, path, pathlen); + strlcpy(path, tmp, pathlen); + return 0; +} + + + +WorkArea * +alloc_workarea() +{ + WorkArea *p; + + if (!(p = (WorkArea *)malloc(sizeof(WorkArea)))) return NULL; + + memset(p, '\0', sizeof(WorkArea)); + p -> lock = NOTLOCKED; + p -> refcnt = 1; + + p -> link = worklist; + worklist = p; + + work_base = &(p -> global); + initwork(); + + return p; +} + +void +free_workarea(WorkArea *p) +{ + if (!p) + return; + if (--(p -> refcnt)) + return; + + if (worklist == p) + worklist = p -> link; + else { + WorkArea *q; + + for (q = worklist ; q ; q = q -> link) { + if (q -> link == p) { + q -> link = p -> link; + break; + } + } + } + + if (p -> global.Jdictlist) + close_dictlist(p -> global.Jdictlist); + + free((char *)p); +} + + +void +exec_connect() +{ + int version; + char hostname[MAXHOSTNAMELEN]; + char username[MAXLOGNAME]; + char progname[MAXPATHLEN]; + WorkArea *wp; + sj3_ugid ugid; + + version = get_int(); + get_nstring(hostname, sizeof(hostname)); + get_nstring(username, sizeof(username)); + get_nstring(progname, sizeof(progname)); + + if (cur_cli -> work) + longjmp(error_ret, SJ3_AlreadyConnected); + + if (version < 0) + longjmp(error_ret, SJ3_DifferentVersion); + + if (hostname[0] == '\0') + longjmp(error_ret, SJ3_NoHostName); + + if (username[0] == '\0') + longjmp(error_ret, SJ3_NoUserName); + + if (!check_user(username, hostname)) + longjmp(error_ret, SJ3_NotAllowedUser); + + if (!(wp = alloc_workarea())) + longjmp(error_ret, SJ3_NotEnoughMemory); + + if (auth_getugid(username, &ugid)) { + struct sockaddr addr; + uid_t euid; + gid_t egid; + int len = sizeof(addr); + + if (getsockname(cur_client->fd, &addr, &len) < 0) + perror("getsockname"); + + if (addr.sa_family == AF_UNIX) { + getpeereid(cur_client->fd, &euid, &egid); + if (ugid.uid != euid || ugid.gid != egid) { + longjmp(error_ret, SJ3_NotAllowedUser); + } + } + + cur_cli -> uid = ugid.uid; + } else + longjmp(error_ret, SJ3_NotAllowedUser); + + cur_cli -> version = version; + strlcpy(cur_cli -> host, hostname, sizeof(cur_cli -> host)); + strlcpy(cur_cli -> user, username, sizeof(cur_cli -> user)); + strlcpy(cur_cli -> prog, progname, sizeof(cur_cli -> prog)); + rmemcpy(cur_cli -> def_char, defaultchar, 2); + cur_cli -> work = wp; + + if (version == 1) + put_int(SJ3_NormalEnd); + else + put_int((-SJ3SERV_VERSION_NO)); + + logging_out("connection established on %d (%s, %s, %s)", + cur_cli -> fd, hostname, username, progname); +} + + +void +exec_disconnect() +{ + if (cur_cli -> stdy) { + closestdy(cur_cli -> stdy); + cur_cli -> stdy = NULL; + } + if (cur_cli -> work) { + free_workarea(cur_cli -> work); + cur_cli -> work = NULL; + } + else + longjmp(error_ret, SJ3_NotConnected); + + put_int(SJ3_NormalEnd); +} + + +void +exec_opendict() +{ + char filename[MAXPATHLEN]; + char password[PASSWORDLEN]; + DICT *dict; + DICTL *dictl, *dltp, *tmp; + + get_nstring(filename, sizeof(filename)); + get_nstring(password, sizeof(password)); + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + + if (make_full_path(filename, sizeof(filename))) + longjmp(error_ret, SJ3_TooLongParameter); + + if (!(dict = (DICT *)opendict(filename, password))) + longjmp(error_ret, serv_errno); + if (!dictlist && global_work_base) { + DICTL *b_dictl = NULL; + + dltp = global_work_base -> Jdictlist; + dictl = NULL; + while (dltp) { + dictl = (DICTL *)malloc(sizeof *dictl); + if (!dictl) { + for (tmp = dictlist; tmp; tmp->next) + free(tmp); + dictlist = NULL; + } + if (!dictlist) + dictlist = dictl; + dictl->dict = dltp->dict; + ((DictFile *)(dictl -> dict))->refcnt++; + dictl->next = NULL; + if (b_dictl) + b_dictl->next = dictl; + b_dictl = dictl; + dltp = dltp->next; + } + } + for (dltp = dictlist; dltp && dltp->dict != dict; dltp = dltp->next) ; + + if (!dltp) { + if (!(dictl = (DICTL *)malloc(sizeof *dictl))) { + closedict((DictFile *)dict); + longjmp(error_ret, SJ3_NotEnoughMemory); + } + + dictl -> dict = dict; + dictl -> next = dictlist; + dictlist = dictl; + } + + if (cur_cli -> work -> lock == cur_cli -> fd) { + if (dict -> maxunit != 0) + lock_dict((DictFile *)dict, cur_cli -> fd); + } + + put_int(SJ3_NormalEnd); + put_int((int)dict->dicid); +} +void +exec_closedict() +{ + TypeDicID id; + DICTL *dictl; + + id = get_int(); + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + + for (dictl = dictlist ; dictl ; dictl = dictl -> next) + if (dictl -> dict -> dicid == id) + break; + if (!dictl) + longjmp(error_ret, SJ3_BadDictID); + + unlock_dict((DictFile *)(dictl -> dict), cur_cli -> fd); + + closedict((DictFile *)(dictl -> dict)); + if (dictlist == dictl) { + dictlist = dictl -> next; + } else { + DICTL *p; + + for (p = dictlist ; p -> next ; p = p -> next) { + if (p -> next == dictl) { + p -> next = dictl -> next; + break; + } + } + } + free((char *)dictl); + put_int(SJ3_NormalEnd); +} +void +close_dictlist(DICTL *dictl) +{ + DICTL *p; + + while (dictl) { + unlock_dict((DictFile *)(dictl -> dict), cur_cli -> fd); + closedict((DictFile *)(dictl -> dict)); + p = dictl -> next; + free((char *)dictl); + dictl = p; + } +} + + +void +exec_openstdy() +{ + char filename[MAXPATHLEN]; + char password[PASSWORDLEN]; + StdyFile *stdy; + + get_nstring(filename, sizeof(filename)); + get_nstring(password, sizeof(password)); + + if (cur_cli -> stdy) + longjmp(error_ret, SJ3_StdyAlreadyOpened); + if (make_full_path(filename, sizeof(filename))) + longjmp(error_ret, SJ3_TooLongParameter); + + if (!(stdy = openstdy(filename, password))) + longjmp(error_ret, serv_errno); + cur_cli -> stdy = stdy; + + put_int(SJ3_NormalEnd); +} +void +exec_closestdy() +{ + if (!cur_cli -> stdy) + longjmp(error_ret, SJ3_StdyFileNotOpened); + + closestdy(cur_cli -> stdy); + cur_cli -> stdy = NULL; + + put_int(SJ3_NormalEnd); +} + + +void +exec_stdysize() +{ + put_int(SJ3_NormalEnd); + put_int(sizeof(STDYOUT)); +} + + + +static void +exec_lock() +{ + int lock; + DICTL *dl; + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + + lock = cur_cli -> work -> lock; + if (lock != NOTLOCKED && lock != cur_cli -> fd) + longjmp(error_ret, SJ3_LockedByOther); + cur_cli -> work -> lock = cur_cli -> fd; + + for (dl = dictlist ; dl ; dl = dl -> next) { + if (dl -> dict -> maxunit == 0) + continue; + lock_dict((DictFile *)(dl -> dict), cur_cli -> fd); + } + + put_int(SJ3_NormalEnd); +} +static void +exec_unlock() +{ + int lock; + DICTL *dl; + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + + lock = cur_cli -> work -> lock; + if (lock == NOTLOCKED) + longjmp(error_ret, SJ3_NotLocked); + if (lock != cur_cli -> fd) + longjmp(error_ret, SJ3_LockedByOther); + cur_cli -> work -> lock = NOTLOCKED; + + for (dl = dictlist ; dl ; dl = dl -> next) { + if (dl -> dict -> maxunit == 0) + continue; + unlock_dict((DictFile *)(dl -> dict), cur_cli -> fd); + } + + put_int(SJ3_NormalEnd); +} +static void +lock_check_for_read() +{ + int lock; + + lock = cur_cli -> work -> lock; + if (lock == NOTLOCKED) +#ifdef SEVERE_LOCK + longjmp(error_ret, SJ3_NotLocked); +#else + ; +#endif + else if (lock != cur_cli -> fd) + longjmp(error_ret, SJ3_LockedByOther); +} + + +void +exec_ph2knj(int mb_flag) +{ + int i, j, l, stdy_size, buf_size, srchead = 0, srclen; + u_char *p,*q; + + i = get_nstring(buf1, sizeof(buf1)); + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + if (i) + longjmp(error_ret, SJ3_TooLongParameter); + lock_check_for_read(); + + if (mb_flag == SJIS_PROTO) { + if (sj3_str_sjistoeuc(buf2, sizeof(buf2), buf1, + cur_cli->def_char, &defuse) < 0) + goto CCONVERR; + i = ph2knj(buf2, kbuf, sizeof(kbuf)); + p = kbuf; + q = skbuf; + stdy_size = sizeof(STDYOUT) + 1; + buf_size = sizeof(skbuf); + + while (*p) { + srchead += *p; + srclen = *p; + buf_size -= stdy_size; + if (buf_size <= 0) + goto CCONVERR; + (void) memcpy(q, p, stdy_size); + p += stdy_size; + q += stdy_size; + l = sj3_str_euctosjis(q, buf_size, p, cur_cli->def_char, &defuse); + if (l < 0) + goto CCONVERR; + if (defuse) { + (void) memcpy(buf3, &(buf2[srchead-srclen]), srclen); + buf3[srclen] = '\0'; + j = cl2knj(buf3, srclen, buf4); + l = sj3_str_euctosjis(q, buf_size, &(buf4[stdy_size]), + cur_cli->def_char, &defuse); + while(defuse && (j == srclen)) { + j = nextcl(buf4, 0); + l = sj3_str_euctosjis(q, buf_size, &(buf4[stdy_size]), + cur_cli->def_char, &defuse); + if (l < 0) + goto CCONVERR; + } + if (!defuse && (j == srclen)) { + (void) memcpy(q-stdy_size, buf4, stdy_size); + } else { + l = sj3_str_euctosjis(q, buf_size, buf3, + cur_cli->def_char, &defuse); + if ((l < 0) || defuse) + goto CCONVERR; + } + } + p += strlen(p) + 1; + q += l + 1; buf_size -= l + 1; + } + *q = '\0'; + p = skbuf; + } else { + i = ph2knj(buf1, kbuf, sizeof(kbuf)); + p = kbuf; + } + + put_int(SJ3_NormalEnd); + put_int(i); + while (*p) { + put_byte(*p); p++; + p = put_ndata(p, sizeof(STDYOUT)); + p = put_string(p); + } + put_byte(0); + return; +CCONVERR: + put_int(SJ3_CannotCodeConvert); + return; +} + + +void +exec_cl2knj(int mb_flag) +{ + int len, stdy_size, buf_size; + int i, j, l; + u_char *ptr, *q; + + len = get_int(); + i = get_nstring(buf1, sizeof(buf1)); + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + if (i) + longjmp(error_ret, SJ3_TooLongParameter); + lock_check_for_read(); + + if (mb_flag == SJIS_PROTO) { + if (sj3_str_sjistoeuc(buf2, sizeof(buf2), buf1, + cur_cli->def_char, &defuse) < 0) + goto CCONVERR; + i = cl2knj(buf2, strlen(buf2), kbuf); + ptr = kbuf; + q = skbuf; + buf_size = sizeof(skbuf); + stdy_size = sizeof(STDYOUT); + + (void) memcpy(q, ptr, stdy_size); + ptr += stdy_size; + q += stdy_size; + buf_size -= stdy_size; + l = sj3_str_euctosjis(q, buf_size, ptr, + cur_cli->def_char, &defuse); + if (l < 0) + goto CCONVERR; + if (defuse) { + j = strlen(buf2); + while (defuse && (i == j)) { + i = nextcl(buf4, 0); + l = sj3_str_euctosjis(q, buf_size, &(buf4[stdy_size]), + cur_cli->def_char, &defuse); + if (l < 0) + goto CCONVERR; + } + if (!defuse && (j == i)) { + (void) memcpy(q-stdy_size, buf4, stdy_size); + } else { + l = sj3_str_euctosjis(q, buf_size, buf2, + cur_cli->def_char, &defuse); + if ((l < 0) || defuse) goto CCONVERR; + i = l; + } + } + ptr = skbuf; + } else { + i = cl2knj(buf1, len, kbuf); + ptr = kbuf; + } + + put_int(SJ3_NormalEnd); + put_int(i); + ptr = put_ndata(ptr, sizeof(STDYOUT)); + put_string(ptr); + return; +CCONVERR: + put_int(SJ3_CannotCodeConvert); + return; +} + + +void +exec_nextcl(int mb_flag) +{ + int mode, stdy_size, buf_size; + int i, l; + u_char *ptr, *q; + + mode = get_int(); + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + lock_check_for_read(); + + i = nextcl(kbuf, mode); + if (mb_flag == SJIS_PROTO) { + ptr = kbuf; + q = skbuf; + buf_size = sizeof(skbuf); + stdy_size = sizeof(STDYOUT); + + (void) memcpy(q, ptr, stdy_size); + ptr += stdy_size; + q += stdy_size; + buf_size -= stdy_size; + l = sj3_str_euctosjis(q, buf_size, ptr, cur_cli->def_char, &defuse); + if (l < 0) + goto CCONVERR; + while (defuse && i) { + i = nextcl(kbuf, mode); + l = sj3_str_euctosjis(q, buf_size, &(kbuf[stdy_size]), + cur_cli->def_char, &defuse); + if (l < 0) + goto CCONVERR; + } + if (!defuse && i) { + (void) memcpy(q-stdy_size, kbuf, stdy_size); + } else { + put_int(SJ3_NoMoreDouonWord); + return; + } + ptr = skbuf; + } else { + ptr = kbuf; + } + + put_int(SJ3_NormalEnd); + put_int(i); + ptr = put_ndata(ptr, sizeof(STDYOUT)); + put_string(ptr); + return; +CCONVERR: + put_int(SJ3_CannotCodeConvert); + return; +} + + +void +exec_prevcl(int mb_flag) +{ + int mode, stdy_size, buf_size; + int i, l; + u_char *ptr, *q; + + mode = get_int(); + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + lock_check_for_read(); + + i = prevcl(kbuf, mode); + if (mb_flag == SJIS_PROTO) { + ptr = kbuf; + q = skbuf; + buf_size = sizeof(skbuf); + stdy_size = sizeof(STDYOUT); + + (void) memcpy(q, ptr, stdy_size); + ptr += stdy_size; + q += stdy_size; + buf_size -= stdy_size; + l = sj3_str_euctosjis(q, buf_size, ptr, cur_cli->def_char, &defuse); + if (l < 0) + goto CCONVERR; + while (defuse && i) { + i = prevcl(kbuf, mode); + l = sj3_str_euctosjis(q, buf_size, &(kbuf[stdy_size]), + cur_cli->def_char, &defuse); + if (l < 0) + goto CCONVERR; + } + if (!defuse && i) { + (void) memcpy(q-stdy_size, kbuf, stdy_size); + } else { + put_int(SJ3_NoMoreDouonWord); + return; + } + ptr = skbuf; + } else { + ptr = kbuf; + } + + put_int(SJ3_NormalEnd); + put_int(i); + ptr = put_ndata(ptr, sizeof(STDYOUT)); + put_string(ptr); + return; +CCONVERR: + put_int(SJ3_CannotCodeConvert); + return; +} + + +void +exec_cl2knj_cnt(int mb_flag) +{ + int len, buf_size, stdy_size; + int i; + int cnt = 0; + + len = get_int(); + i = get_nstring(buf1, sizeof(buf1)); + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + if (i) + longjmp(error_ret, SJ3_TooLongParameter); + lock_check_for_read(); + + if (mb_flag == SJIS_PROTO) { + if (sj3_str_sjistoeuc(buf2, sizeof(buf2), buf1, + cur_cli->def_char, &defuse) < 0) + goto CCONVERR; + i = cl2knj(buf2, len, kbuf); + stdy_size = sizeof(STDYOUT); + buf_size = sizeof(skbuf) - stdy_size; + } else { + i = cl2knj(buf1, len, kbuf); + } + if (i) { + while (i == len) { + if (mb_flag == SJIS_PROTO) { + if (sj3_str_euctosjis(skbuf, buf_size, + &(kbuf[stdy_size]), + cur_cli->def_char, &defuse) + < 0) + goto CCONVERR; + if (!defuse) + cnt++; + } else + cnt++; + i = nextcl(kbuf, 0); + } + } + + put_int(SJ3_NormalEnd); + put_int(cnt); + return; +CCONVERR: + put_int(SJ3_CannotCodeConvert); + return; +} + + +void +exec_cl2knj_all(int mb_flag) +{ + int len, stdy_size, buf_size; + int i, l; + u_char *ptr, *q; + + len = get_int(); + i = get_nstring(buf1, sizeof(buf1)); + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + if (i) + longjmp(error_ret, SJ3_TooLongParameter); + lock_check_for_read(); + + if (mb_flag == SJIS_PROTO) { + if (sj3_str_sjistoeuc(buf2, sizeof(buf2), buf1, + cur_cli->def_char, &defuse) < 0) + goto CCONVERR; + len = strlen(buf2); + i = cl2knj(buf2, len, kbuf); + ptr = kbuf; + q = skbuf; + buf_size = sizeof(skbuf); + stdy_size = sizeof(STDYOUT); + + (void) memcpy(q, ptr, stdy_size); + ptr += stdy_size; + q += stdy_size; + buf_size -= stdy_size; + l = sj3_str_euctosjis(q, buf_size, ptr, cur_cli->def_char, &defuse); + if (l < 0) + goto CCONVERR; + if (defuse) { + while (defuse && (i == len)) { + i = nextcl(kbuf, 0); + l = sj3_str_euctosjis(q, buf_size, + &(kbuf[stdy_size]), + cur_cli->def_char, &defuse); + if (l < 0) + goto CCONVERR; + } + if (!defuse && (i == len)) { + (void) memcpy(q-stdy_size, kbuf, stdy_size); + } else { + put_int(SJ3_NoMoreDouonWord); + return; + } + } + ptr = skbuf; + } else { + i = cl2knj(buf1, len, kbuf); + ptr = kbuf; + } + put_int(SJ3_NormalEnd); + if (i) { + while (i == len) { + put_int(i); + ptr = put_ndata(ptr, sizeof(STDYOUT)); + put_string(ptr); + i = nextcl(kbuf, 0); + if (mb_flag == SJIS_PROTO) { + ptr = kbuf; + q = skbuf; + buf_size = sizeof(skbuf); + stdy_size = sizeof(STDYOUT); + + (void) memcpy(q, ptr, stdy_size); + ptr += stdy_size; + q += stdy_size; + buf_size -= stdy_size; + l = sj3_str_euctosjis(q, buf_size, ptr, + cur_cli->def_char, &defuse); + if (l < 0) + goto CCONVERR; + if (defuse) { + while (defuse && (i == len)) { + i = nextcl(kbuf, 0); + l = sj3_str_euctosjis(q, buf_size, + &(kbuf[stdy_size]), + cur_cli->def_char, + &defuse); + if (l < 0) + goto CCONVERR; + } + if (!defuse && (len == i)) { + (void) memcpy(q-stdy_size, + kbuf, stdy_size); + } + } + ptr = skbuf; + } else { + ptr = kbuf; + } + } + } + put_int(0); + return; +CCONVERR: + put_int(SJ3_CannotCodeConvert); + return; +} + + +void +exec_study() +{ + int err; + STDYOUT stdy; + + get_ndata(&stdy, sizeof(stdy)); + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + if (!stdy_base) + longjmp(error_ret, SJ3_StdyFileNotOpened); + lock_check_for_read(); + + err = study(&stdy); + + switch (err) { + case STUDYNODICT: err = SJ3_StdyFileNotOpened; break; + case STUDYNORMEND: + case STUDYFULLAREA: + case STUDYNOTSTUDY: err = SJ3_NormalEnd; break; + case STUDYERROR: + default: err = SJ3_InternalError; break; + } + if (err != SJ3_NormalEnd) + longjmp(error_ret, err); + put_int(err); +} + + +void +exec_clstudy(mb_flag) +int mb_flag; +{ + int err; + STDYOUT stdy; + + err = get_nstring(buf1, sizeof(buf1)); + err |= get_nstring(buf2, sizeof(buf2)); + get_ndata(&stdy, sizeof(stdy)); + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + if (!stdy_base) + longjmp(error_ret, SJ3_StdyFileNotOpened); + if (err) longjmp(error_ret, SJ3_TooLongParameter); + lock_check_for_read(); + + if (mb_flag == SJIS_PROTO) { + if (sj3_str_sjistoeuc(buf3, sizeof(buf3), buf1, + cur_cli->def_char, &defuse) < 0) + goto CCONVERR; + if (sj3_str_sjistoeuc(buf4, sizeof(buf4), buf2, + cur_cli->def_char, &defuse) < 0) + goto CCONVERR; + err = clstudy(buf3, buf4, &stdy); + } else { + err = clstudy(buf1, buf2, &stdy); + } + + switch (err) { + case CLSTUDYNODICT: err = SJ3_StdyFileNotOpened; break; + case CLSTUDYNORMEND: err = SJ3_NormalEnd; break; + case CLSTUDYPARAERR: + case CLSTUDYYOMIERR: err = SJ3_IllegalParameter; break; + case CLSTUDYNOAREA: err = SJ3_TooSmallStdyArea; break; + default: err = SJ3_InternalError; break; + } + if (err != SJ3_NormalEnd) + longjmp(error_ret, err); + put_int(err); + return; +CCONVERR: + put_int(SJ3_CannotCodeConvert); + return; +} + + +void +exec_adddict(int mb_flag) +{ + TypeDicID dicid; + TypeGram gram; + int err; + int err1; + DICTL *dl; + + dicid = get_int(); + err = get_nstring(buf1, sizeof(buf1)); + err1 = get_nstring(buf2, sizeof(buf2)); + gram = get_int(); + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + if (err) + longjmp(error_ret, SJ3_BadYomiString); + if (err1) + longjmp(error_ret, SJ3_BadKanjiString); + + for (dl = dictlist ; dl ; dl = dl -> next) + if (dl -> dict -> dicid == dicid) + break; + if (!dl) + longjmp(error_ret, SJ3_NoSuchDict); + if (dl -> dict -> maxunit == 0) + longjmp(error_ret, SJ3_ReadOnlyDict); + if (is_dict_locked((DictFile *)(dl -> dict))) + longjmp(error_ret, SJ3_DictLocked); + + debug_out(2, "adddic %s:%s:%d ", buf1, buf2, gram); + seldict(dicid); + if (mb_flag == SJIS_PROTO) { + if (sj3_str_sjistoeuc(buf3, sizeof(buf3), buf1, + cur_cli->def_char, &defuse) < 0) + goto CCONVERR; + if (sj3_str_sjistoeuc(buf4, sizeof(buf4), buf2, + cur_cli->def_char, &defuse) < 0) + goto CCONVERR; + err = adddic(buf3, buf4, gram); + } else { + err = adddic(buf1, buf2, gram); + } + + if (err & AD_NOTUSERDICT) err = SJ3_ReadOnlyDict; + else if (err & AD_BADYOMI) err = SJ3_BadYomiString; + else if (err & AD_BADKANJI) err = SJ3_BadKanjiString; + else if (err & AD_BADHINSI) err = SJ3_BadHinsiCode; + else if (err & AD_AREXIST) err = SJ3_AlreadyExistWord; + else if (err & AD_OVFLWDOUBLK) err = SJ3_NoMoreDouonWord; + else if (err & AD_OVFLWDOUNUM) err = SJ3_NoMoreDouonWord; + else if (err & AD_OVFLWUSRDIC) err = SJ3_NoMoreUserDict; + else if (err & AD_OVFLWINDEX) err = SJ3_NoMoreIndexBlock; + else if (err) err = SJ3_AddDictFailed; + else err = SJ3_NormalEnd; + if (err != SJ3_NormalEnd) + longjmp(error_ret, err); + put_int(err); + return; +CCONVERR: + put_int(SJ3_CannotCodeConvert); + return; +} + +void +exec_deldict(int mb_flag) +{ + TypeDicID dicid; + TypeGram gram; + int err; + int err1; + DICTL *dl; + + dicid = get_int(); + err = get_nstring(buf1, sizeof(buf1)); + err1 = get_nstring(buf2, sizeof(buf2)); + gram = get_int(); + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + if (err) + longjmp(error_ret, SJ3_BadYomiString); + if (err1) + longjmp(error_ret, SJ3_BadKanjiString); + + for (dl = dictlist ; dl ; dl = dl -> next) + if (dl -> dict -> dicid == dicid) + break; + if (!dl) + longjmp(error_ret, SJ3_NoSuchDict); + if (dl -> dict -> maxunit == 0) + longjmp(error_ret, SJ3_ReadOnlyDict); + if (is_dict_locked((DictFile *)(dl -> dict))) + longjmp(error_ret, SJ3_DictLocked); + + seldict(dicid); + if (mb_flag == SJIS_PROTO) { + if (sj3_str_sjistoeuc(buf3, sizeof(buf3), buf1, + cur_cli->def_char, &defuse) < 0) + goto CCONVERR; + if (sj3_str_sjistoeuc(buf4, sizeof(buf4), buf2, + cur_cli->def_char, &defuse) < 0) + goto CCONVERR; + err = deldic(buf3, buf4, gram); + } else { + err = deldic(buf1, buf2, gram); + } + + if (err & AD_NOTUSERDICT) err = SJ3_ReadOnlyDict; + else if (err & AD_BADYOMI) err = SJ3_BadYomiString; + else if (err & AD_BADKANJI) err = SJ3_BadKanjiString; + else if (err & AD_BADHINSI) err = SJ3_BadHinsiCode; + else if (err & AD_NOMIDASI) err = SJ3_NoSuchWord; + else if (err & AD_NOHINSI) err = SJ3_NoSuchWord; + else if (err & AD_NOKANJI) err = SJ3_NoSuchWord; + else if (err) err = SJ3_DelDictFailed; + else err = SJ3_NormalEnd; + if (err != SJ3_NormalEnd) + longjmp(error_ret, err); + put_int(err); + return; +CCONVERR: + put_int(SJ3_CannotCodeConvert); + return; +} + + +void +exec_getdict(int mb_flag) +{ + TypeDicID dicid; + int err, buf_size, l; + DICTL *dl; + u_char *ptr, *q; + + dicid = get_int(); + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + + for (dl = dictlist ; dl ; dl = dl -> next) + if (dl -> dict -> dicid == dicid) + break; + if (!dl) + longjmp(error_ret, SJ3_NoSuchDict); + + lock_check_for_read(); + + seldict(dicid); + err = getusr(kbuf); + if (err) { + if (mb_flag == SJIS_PROTO) { + buf_size = sizeof(skbuf); + ptr = kbuf; + q = skbuf; + l = sj3_str_euctosjis(q, buf_size, ptr, + cur_cli->def_char, &defuse); + if (l < 0) + goto CCONVERR; + ptr += strlen(ptr) + 1; + q += l + 1; + buf_size -= l + 1; + l = sj3_str_euctosjis(q, buf_size, ptr, + cur_cli->def_char, &defuse2); + if (l < 0) + goto CCONVERR; + if (defuse || defuse2) { + while ((defuse || defuse2) && err) { + ptr = kbuf; + q = skbuf; + buf_size = sizeof(skbuf); + err = nextusr(kbuf); + if (!err) + break; + l = sj3_str_euctosjis(q, buf_size, ptr, + cur_cli->def_char, + &defuse); + if (l < 0) + goto CCONVERR; + ptr += strlen(ptr) + 1; + q += l + 1; + buf_size -= l + 1; + l = sj3_str_euctosjis(q, buf_size, ptr, + cur_cli->def_char, + &defuse2); + if (l < 0) + goto CCONVERR; + } + if (!err) { + longjmp(error_ret, SJ3_NoMoreDictData); + } + } + ptr += strlen(ptr) + 1; + q += l + 1; + *q = *ptr; + ptr = skbuf; + } else { + ptr = kbuf; + } + + put_int(SJ3_NormalEnd); + ptr = put_string(ptr); + ptr = put_string(ptr); + put_int(*ptr); + } + else + longjmp(error_ret, SJ3_NoMoreDictData); + return; +CCONVERR: + put_int(SJ3_CannotCodeConvert); + return; +} + +void +exec_nextdict(int mb_flag) +{ + TypeDicID dicid; + int err, buf_size, l; + DICTL *dl; + u_char *ptr, *q; + + dicid = get_int(); + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + + for (dl = dictlist ; dl ; dl = dl -> next) + if (dl -> dict -> dicid == dicid) + break; + if (!dl) + longjmp(error_ret, SJ3_NoSuchDict); + + + lock_check_for_read(); + + seldict(dicid); + err = nextusr(kbuf); + if (err) { + if (mb_flag == SJIS_PROTO) { + buf_size = sizeof(skbuf); + ptr = kbuf; + q = skbuf; + l = sj3_str_euctosjis(q, buf_size, ptr, cur_cli->def_char, + &defuse); + if (l < 0) + goto CCONVERR; + ptr += strlen(ptr) + 1; + q += l + 1; + buf_size -= l + 1; + l = sj3_str_euctosjis(q, buf_size, ptr, cur_cli->def_char, + &defuse2); + if (l < 0) + goto CCONVERR; + if (defuse || defuse2) { + while ((defuse || defuse2) && err) { + ptr = kbuf; + q = skbuf; + buf_size = sizeof(skbuf); + err = nextusr(kbuf); + if (!err) + break; + l = sj3_str_euctosjis(q, buf_size, ptr, + cur_cli->def_char, + &defuse); + if (l < 0) + goto CCONVERR; + ptr += strlen(ptr) + 1; + q += l + 1; + buf_size -= l + 1; + l = sj3_str_euctosjis(q, buf_size, ptr, + cur_cli->def_char, + &defuse2); + if (l < 0) + goto CCONVERR; + } + if (!err) { + longjmp(error_ret, SJ3_NoMoreDictData); + } + } + ptr += strlen(ptr) + 1; + q += l + 1; + *q = *ptr; + ptr = skbuf; + } else { + ptr = kbuf; + } + + put_int(SJ3_NormalEnd); + ptr = put_string(ptr); + ptr = put_string(ptr); + put_int(*ptr); + } + else + longjmp(error_ret, SJ3_NoMoreDictData); + return; +CCONVERR: + put_int(SJ3_CannotCodeConvert); + return; +} + +void +exec_prevdict(int mb_flag) +{ + TypeDicID dicid; + int err, buf_size, l; + DICTL *dl; + u_char *ptr, *q; + + dicid = get_int(); + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + + for (dl = dictlist ; dl ; dl = dl -> next) + if (dl -> dict -> dicid == dicid) + break; + if (!dl) + longjmp(error_ret, SJ3_NoSuchDict); + + lock_check_for_read(); + + seldict(dicid); + err = prevusr(kbuf); + if (err) { + if (mb_flag == SJIS_PROTO) { + buf_size = sizeof(skbuf); + ptr = kbuf; + q = skbuf; + l = sj3_str_euctosjis(q, buf_size, ptr, + cur_cli->def_char, &defuse); + if (l < 0) + goto CCONVERR; + ptr += strlen(ptr) + 1; + q += l + 1; + buf_size -= l + 1; + l = sj3_str_euctosjis(q, buf_size, ptr, + cur_cli->def_char, &defuse2); + if (l < 0) + goto CCONVERR; + if (defuse || defuse2) { + while ((defuse || defuse2) && err) { + ptr = kbuf; + q = skbuf; + buf_size = sizeof(skbuf); + err = prevusr(kbuf); + if (!err) + break; + l = sj3_str_euctosjis(q, buf_size, ptr, + cur_cli->def_char, + &defuse); + if (l < 0) + goto CCONVERR; + ptr += strlen(ptr) + 1; + q += l + 1; + buf_size -= l + 1; + l = sj3_str_euctosjis(q, buf_size, ptr, + cur_cli->def_char, + &defuse2); + if (l < 0) + goto CCONVERR; + } + if (!err) { + longjmp(error_ret, SJ3_NoMoreDictData); + } + } + ptr += strlen(ptr) + 1; + q += l + 1; + *q = *ptr; + ptr = skbuf; + } else { + ptr = kbuf; + } + + put_int(SJ3_NormalEnd); + ptr = put_string(ptr); + ptr = put_string(ptr); + put_int(*ptr); + } + else + longjmp(error_ret, SJ3_NoMoreDictData); + return; +CCONVERR: + put_int(SJ3_CannotCodeConvert); + return; +} + + +void +exec_makedict() +{ + struct stat sbuf; + char path[MAXPATHLEN]; + int err; + int idxlen; + int seglen; + int segnum; + + err = get_nstring(path, sizeof(path)); + idxlen = get_int(); + seglen = get_int(); + segnum = get_int(); + if (err) + longjmp(error_ret, SJ3_TooLongParameter); + if (make_full_path(path, sizeof(path))) + longjmp(error_ret, SJ3_TooLongParameter); + + if ((stat(path, &sbuf) != ERROR) || (errno != ENOENT)){ + longjmp(error_ret, SJ3_IllegalDictFile); + } + err = makedict(path, idxlen, seglen, segnum); + if (err != SJ3_NormalEnd) + longjmp(error_ret, err); + chmod(path, (file_mode & MODE_MASK)); + + put_int(err); +} + + +void +exec_makestdy() +{ + struct stat sbuf; + char path[MAXPATHLEN]; + int err; + int stynum; + int clstep; + int cllen; + + err = get_nstring(path, sizeof(path)); + stynum = get_int(); + clstep = get_int(); + cllen = get_int(); + if (err) + longjmp(error_ret, SJ3_TooLongParameter); + if (make_full_path(path, sizeof(path))) + longjmp(error_ret, SJ3_TooLongParameter); + + if ((stat(path, &sbuf) != ERROR) || (errno != ENOENT)){ + longjmp(error_ret, SJ3_IllegalStdyFile); + } + err = makestdy(path, stynum, clstep, cllen); + if (err != SJ3_NormalEnd) + longjmp(error_ret, err); + chmod(path, (file_mode & MODE_MASK)); + + put_int(err); +} + + +void +exec_access() +{ + char path[MAXPATHLEN]; + int mode; + int i; + + i = get_nstring(path, sizeof(path)); + mode = get_int(); + if (i) + longjmp(error_ret, SJ3_TooLongParameter); + if (make_full_path(path, sizeof(path))) + longjmp(error_ret, SJ3_TooLongParameter); + + put_int(access(path, mode)); +} + + +void +exec_makedir() +{ + char path[MAXPATHLEN]; + int i; + + i = get_nstring(path, sizeof(path)); + if (i) + longjmp(error_ret, SJ3_TooLongParameter); + if (make_full_path(path, sizeof(path))) + longjmp(error_ret, SJ3_TooLongParameter); + + if (mkdir(path, dir_mode)) { + if (errno == EEXIST) + longjmp(error_ret, SJ3_DirAlreadyExist); + else + longjmp(error_ret, SJ3_CannotCreateDir); + } + chmod(path, (dir_mode & MODE_MASK)); + + put_int(SJ3_NormalEnd); +} + + +void +exec_who() +{ + int i; + Client *cli; + + i = 0; + cli = client; + while ((i <= client_num) && cli) { + i++; + cli = cli->next; + } + if (i < client_num) { + put_int(i); + } else { + put_int(client_num); + } + for (i = 0, cli = client ; (i < client_num) && cli ; i++, cli = cli->next) { + put_int(cli -> fd); + put_string(cli -> host); + put_string(cli -> user); + put_string(cli -> prog); + } +} + + +void +exec_kill() +{ + put_int(SJ3_NormalEnd); + put_flush(); + + server_terminate(); +} +void +exec_quit() +{ + if (client_num > 1) + longjmp(error_ret, SJ3_UserConnected); + exec_kill(); +} + + +void +exec_version() +{ + static char *Version = "version : "; + static char *TimeStamp = "times-stamp : "; + + put_int(SJ3_NormalEnd); + put_ndata(Version, strlen(Version)); + put_string(version_number); + put_ndata(TimeStamp, strlen(TimeStamp)); + put_string(time_stamp); + put_string(NULL); +} + + +void +exec_dictpass() +{ + TypeDicID dicid; + char buf[PASSWDLEN + 1]; + int err; + DICTL *dl; + + dicid = get_int(); + err = get_nstring(buf, sizeof(buf)); + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + if (err) + longjmp(error_ret, SJ3_TooLongPasswd); + + for (dl = dictlist ; dl ; dl = dl -> next) + if (dl -> dict -> dicid == dicid) + break; + if (!dl) + longjmp(error_ret, SJ3_NoSuchDict); + + if (set_dictpass(dl -> dict, buf)) + longjmp(error_ret, serv_errno); + put_int(SJ3_NormalEnd); +} +void +exec_dictcmnt() +{ + TypeDicID dicid; + char buf[COMMENTLENGTH + 1]; + int err; + DICTL *dl; + + dicid = get_int(); + err = get_nstring(buf, sizeof(buf)); + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + if (err) + longjmp(error_ret, SJ3_TooLongComment); + + for (dl = dictlist ; dl ; dl = dl -> next) + if (dl -> dict -> dicid == dicid) + break; + if (!dl) + longjmp(error_ret, SJ3_NoSuchDict); + + if (set_dictcmnt(dl -> dict, buf)) + longjmp(error_ret, serv_errno); + put_int(SJ3_NormalEnd); +} +void +exec_stdypass() +{ + char buf[PASSWDLEN + 1]; + int err; + + err = get_nstring(buf, sizeof(buf)); + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + if (!stdy_base) + longjmp(error_ret, SJ3_StdyFileNotOpened); + if (err) + longjmp(error_ret, SJ3_TooLongPasswd); + + if (set_stdypass(buf)) + longjmp(error_ret, serv_errno); + put_int(SJ3_NormalEnd); +} +void +exec_stdycmnt() +{ + char buf[COMMENTLENGTH + 1]; + int err; + + err = get_nstring(buf, sizeof(buf)); + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + if (!stdy_base) + longjmp(error_ret, SJ3_StdyFileNotOpened); + if (err) + longjmp(error_ret, SJ3_TooLongComment); + + if (set_stdycmnt(buf)) + longjmp(error_ret, serv_errno); + put_int(SJ3_NormalEnd); +} + + +void +exec_stdypara() +{ + int stynum, clstep, cllen; + + if (!work_base) + longjmp(error_ret, SJ3_NotConnected); + if (!stdy_base) + longjmp(error_ret, SJ3_StdyFileNotOpened); + + get_stdysize(&stynum, &clstep, &cllen); + put_int(SJ3_NormalEnd); + put_int(stynum); + put_int(clstep); + put_int(cllen); +} + + +void +execute_cmd() +{ + int i; + + if (i = setjmp(error_ret)) { + debug_out(1, "%d: error code = %d", client_fd, i); + put_int(i); + } else { + cur_cli = cur_client; + work_base = cur_cli->work ? &(cur_cli->work->global) : NULL; + stdy_base = cur_cli->stdy ? &(cur_cli->stdy->stdy) : NULL; + +#define CASE(X) case (X): { int j=X; debug_out(1, "%d: %d\t", client_fd, j); } + switch (i = get_int()) { + + CASE(SJ3_CONNECT) exec_connect(); break; + CASE(SJ3_DISCONNECT) exec_disconnect(); break; + + CASE(SJ3_OPENDICT) exec_opendict(); break; + CASE(SJ3_CLOSEDICT) exec_closedict(); break; + + CASE(SJ3_OPENSTDY) exec_openstdy(); break; + CASE(SJ3_CLOSESTDY) exec_closestdy(); break; + CASE(SJ3_STDYSIZE) exec_stdysize(); break; + + CASE(SJ3_LOCK) exec_lock(); break; + CASE(SJ3_UNLOCK) exec_unlock(); break; + + CASE(SJ3_PH2KNJ) exec_ph2knj(SJIS_PROTO); break; + CASE(SJ3_PH2KNJ_EUC) exec_ph2knj(EUC_PROTO); break; + + CASE(SJ3_CL2KNJ) exec_cl2knj(SJIS_PROTO); break; + CASE(SJ3_CL2KNJ_EUC) exec_cl2knj(EUC_PROTO); break; + CASE(SJ3_NEXTCL) exec_nextcl(SJIS_PROTO); break; + CASE(SJ3_NEXTCL_EUC) exec_nextcl(EUC_PROTO); break; + CASE(SJ3_PREVCL) exec_prevcl(SJIS_PROTO); break; + CASE(SJ3_PREVCL_EUC) exec_prevcl(EUC_PROTO); break; + CASE(SJ3_CL2KNJ_CNT) exec_cl2knj_cnt(SJIS_PROTO); break; + CASE(SJ3_CL2KNJ_CNT_EUC) exec_cl2knj_cnt(EUC_PROTO); + break; + CASE(SJ3_CL2KNJ_ALL) exec_cl2knj_all(SJIS_PROTO); break; + CASE(SJ3_CL2KNJ_ALL_EUC) exec_cl2knj_all(EUC_PROTO); + break; + + CASE(SJ3_STUDY) exec_study(); break; + CASE(SJ3_CLSTUDY) exec_clstudy(SJIS_PROTO); break; + CASE(SJ3_CLSTUDY_EUC) exec_clstudy(EUC_PROTO); break; + + CASE(SJ3_ADDDICT) exec_adddict(SJIS_PROTO); break; + CASE(SJ3_ADDDICT_EUC) exec_adddict(EUC_PROTO); break; + CASE(SJ3_DELDICT) exec_deldict(SJIS_PROTO); break; + CASE(SJ3_DELDICT_EUC) exec_deldict(EUC_PROTO); break; + + CASE(SJ3_GETDICT) exec_getdict(SJIS_PROTO); break; + CASE(SJ3_GETDICT_EUC) exec_getdict(EUC_PROTO); break; + CASE(SJ3_NEXTDICT) exec_nextdict(SJIS_PROTO); break; + CASE(SJ3_NEXTDICT_EUC) exec_nextdict(EUC_PROTO); break; + CASE(SJ3_PREVDICT) exec_prevdict(SJIS_PROTO); break; + CASE(SJ3_PREVDICT_EUC) exec_prevdict(EUC_PROTO); break; + + CASE(SJ3_MAKEDICT) exec_makedict(); break; + CASE(SJ3_MAKESTDY) exec_makestdy(); break; + CASE(SJ3_ACCESS) exec_access(); break; + CASE(SJ3_MAKEDIR) exec_makedir(); break; + + CASE(SJ3_WHO) exec_who(); break; + CASE(SJ3_QUIT) exec_quit(); break; + CASE(SJ3_KILL) exec_kill(); break; + CASE(SJ3_VERSION) exec_version(); break; + + CASE(SJ3_DICTPASS) exec_dictpass(); break; + CASE(SJ3_DICTCMNT) exec_dictcmnt(); break; + CASE(SJ3_STDYPASS) exec_stdypass(); break; + CASE(SJ3_STDYCMNT) exec_stdycmnt(); break; + default: warning_out("Illegal command"); + longjmp(error_ret, SJ3_IllegalCommand); + break; + } +#undef CASE + debug_out(1, "cmd end"); + } + + put_flush(); +} diff --git a/src/sj3serv/freebsd-sj3.sh.in b/src/sj3serv/freebsd-sj3.sh.in new file mode 100755 index 0000000..47829d9 --- /dev/null +++ b/src/sj3serv/freebsd-sj3.sh.in @@ -0,0 +1,26 @@ +#!/bin/sh +# + +# PROVIDE: sj3 +# REQUIRE: DAEMON +# BEFORE: LOGIN +# KEYWORD: shutdown + +# Define these sj3_* variables in one of these files: +# /etc/rc.conf +# /etc/rc.conf.local +# /etc/rc.conf.d/sj3 +# +# DO NOT CHANGE THESE DEFAULT VALUES HERE +# +sj3_enable=${sj3_enable:-"NO"} # Enable sj3 +#sj3_program="%%PREFIX%%/sbin/sj3serv" # Location of sj3 + +. %%RC_SUBR%% + +name="sj3" +rcvar=`set_rcvar` +command="%%PREFIX%%/sbin/sj3serv" + +load_rc_config $name +run_rc_command "$1" diff --git a/src/sj3serv/main.c b/src/sj3serv/main.c new file mode 100644 index 0000000..f186c2f --- /dev/null +++ b/src/sj3serv/main.c @@ -0,0 +1,203 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: main.c,v $ + * $SonyRevision: 1.3 $ + * $SonyDate: 1995/02/03 07:38:44 $ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "sj3serv.h" + +#ifndef lint +static char rcsid_sony[] = "$Header: /export/work/contrib/sj3/server/RCS/main.c,v 1.12 1994/06/03 07:41:30 notanaka Exp $ SONY;"; +#endif + +static void +opening() +{ + printf("Kana-Kanji Conversion Server Version %s\r\n", version_number); + printf("Copyright (c) 1990-1995 Sony Corporation\r\n"); + printf("Build at %s\r\n", time_stamp); +} + +int +make_pidfile() +{ + int fd; + char buf[BUFSIZ]; + size_t len; + + fd = open(pid_file, O_CREAT | O_WRONLY | O_EXCL, 0600); + if (fd < 0) { + fprintf(stderr, "can't create file '%s'\n", pid_file); + return ERROR; + } + + snprintf(buf, sizeof(buf), "%d", getpid()); + len = strlen(buf); + if (write(fd, buf, strlen(buf)) != len) { + fprintf(stderr, "can't write file '%s'\n", pid_file); + close(fd); + return ERROR; + } + + close(fd); + + if (!chroot_enable) + return 0; + + return 0; +} +int +erase_pidfile() +{ + return unlink(pid_file); +} + +static int +signal_handler(int sig) +{ + static int wantwarn = 0; + + if (wantwarn) + return 0; + wantwarn = 1; + + warning_out("signal %d catched.", sig); + + wantwarn = 0; + return 0; +} + +static int +terminate_handler(int sig) +{ + static int wantdie = 0; + + if (wantdie) + return 0; + wantdie = 1; + + warning_out("terminate signal %d catched.", sig); + + server_terminate(); +} + +void +server_terminate() +{ + close_socket(); + sj_closeall(); + exit_auth(); + + erase_pidfile(); + + exit(0); +} + +static void +set_signals() +{ + signal(SIGHUP, (void (*)(int))signal_handler); + + signal(SIGINT, (void (*)(int))terminate_handler); + signal(SIGQUIT, (void (*)(int))signal_handler); + signal(SIGTERM, (void (*)(int))terminate_handler); +} + +static void +exec_daemon() +{ + open_error(); + open_log(); + open_debug(); + + if (daemon_enable) { + daemon(0, 1); + } +} + +int +main(int argc, char **argv) +{ + setlocale(LC_ALL, ""); + + parse_arg(argc, argv); + + opening(); + + set_default(); + read_runcmd(); + + exec_daemon(); + + exec_auth(); + + set_signals(); + + socket_init(); + open_socket(); + + if (chroot_enable == 1) + set_priv(NULL); + + preload_dict(); + preopen_dict(); + + if (make_pidfile() == ERROR) { + fprintf(stderr, "already running...\n"); + fflush(stderr); + exit_auth(); + exit(1); + } + + communicate(); + + close_socket(); + + sj_closeall(); + exit_auth(); + + erase_pidfile(); + + exit(0); +} diff --git a/src/sj3serv/priv.c b/src/sj3serv/priv.c new file mode 100644 index 0000000..e3142c9 --- /dev/null +++ b/src/sj3serv/priv.c @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2004 Iwata + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include +#include +#include +#include +#include "sj3serv.h" + +void +set_priv(const char *title) +{ + struct passwd *pw; + + if (!chroot_enable) + return; + + if ((pw = getpwnam(chuser_name)) == NULL) { + fprintf(stderr, "failed to get user \"%s\"\n", chuser_name); + fflush(stderr); + exit(255); + } + + if (chroot(chroot_dir) != 0) { + fprintf(stderr, "can't chroot\n"); + fflush(stderr); + exit(255); + } + if (chdir("/") != 0) { + fprintf(stderr, "can't change directory '/'\n"); + fflush(stderr); + exit(255); + } + + if (title != NULL) + setproctitle("%s %s", pw->pw_name, title); + + /* + * Drop privileges and clear the group access list + */ + if (setgroups(1, &pw->pw_gid) == -1 || + setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) == -1 || + setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid) == -1) { + fprintf(stderr, "can't drop privileges\n"); + fflush(stderr); + exit(255); + } +} diff --git a/src/sj3serv/setup.c b/src/sj3serv/setup.c new file mode 100644 index 0000000..5264f42 --- /dev/null +++ b/src/sj3serv/setup.c @@ -0,0 +1,631 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: setup.c,v $ + * $SonyRevision: 1.3 $ + * $SonyDate: 1994/12/09 11:27:07 $ + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "sj_typedef.h" +#include "sj_const.h" +#include "sj_var.h" +#include "sj_dict.h" +#include "sj_struct.h" +#include "sj_rename.h" +#include "Const.h" +#include "Struct.h" +#include "sj_global.h" +#include "sys-queue.h" + +#include "sj3serv.h" + +char program_name[MAXPATHLEN]; +char runcmd_file[MAXPATHLEN]; + +int daemon_enable = -1; + +char pid_file[MAXPATHLEN]; + +int inet_enable = -1; +char inet_address_family[256]; +int address_family = AF_UNSPEC; +char inet_host_name[MAXHOSTNAMELEN]; +char inet_port_name[256]; + +int domain_enable = -1; +char domain_socket_name[MAXPATHLEN]; + +char dict_dir[MAXPATHLEN]; +char dict_file[FILENAME_MAX]; + +char chuser_name[BUFSIZ]; + +int chroot_enable = -1; +char chroot_dir[MAXPATHLEN]; + +char log_file[MAXPATHLEN]; + +char debug_file[MAXPATHLEN]; + +int debug_level = -1; + +char error_file[MAXPATHLEN]; + +int max_client = -1; + +TAILQ_HEAD(, dict_entry) open_dict_head, read_dict_head; +struct dict_entry { + char filename[MAXPATHLEN]; + char passwd[256]; + TAILQ_ENTRY(dict_entry) entries; +} *read_dict, *open_dict; + +int dir_mode = -1; +int file_mode = S_IRUSR | S_IWUSR; + +TAILQ_HEAD(, allow_user_entry) allow_user_head; +struct allow_user_entry { + char username[BUFSIZ]; + char hostname[MAXHOSTNAMELEN]; + TAILQ_ENTRY(allow_user_entry) entries; +} *allow_user; + +static int opt_daemon_disable = 0; +static int opt_ipv4 = 0; +static int opt_ipv6 = 0; +static lua_State *lua_state; + +static int +check_table(lua_State *lstate) +{ + if (!lua_istable(lstate, 1)) { + fprintf(stderr, "Illegal type of table (type=%s).\n", + lua_typename(lstate, lua_type(lstate, 1))); + return 0; + } + return 1; +} + +static int +lua2sj_boolean(lua_State *lstate, char *name, int idx, int default_val, int *i) +{ + lua_getfield(lstate, idx, name); + lua_pop(lstate, idx); + + if (lua_isboolean(lstate, idx - 1)) { + *i = (int)lua_toboolean(lstate, idx - 1); + return *i; + } else if (lua_isnil(lstate, idx - 1)) { + *i = default_val; + return *i; + } else { + fprintf(stderr, "Illegal type of '%s'(%s), must be boolean.\n", + name, lua_typename(lstate, lua_type(lstate, idx - 1))); + exit(1); + } +} + +static int +lua2sj_integer(lua_State *lstate, char *name, int idx, int default_val, int *i) +{ + lua_getfield(lstate, idx, name); + lua_pop(lstate, idx); + + if (lua_isnumber(lstate, idx - 1)) { + *i = (int)lua_tonumber(lstate, idx - 1); + return *i; + } else if (lua_isnil(lstate, idx - 1)) { + *i = default_val; + return *i; + } else { + fprintf(stderr, "Illegal type of '%s'(%s), must be integer.\n", + name, lua_typename(lstate, lua_type(lstate, idx - 1))); + exit(1); + } +} + +static char * +lua2sj_string(lua_State *lstate, char *name, int idx, char *default_val, char *str, size_t len) +{ + lua_getfield(lstate, idx, name); + lua_pop(lstate, idx); + + if (lua_isstring(lstate, idx - 1)) { + strlcpy(str, lua_tostring(lstate, idx - 1), len); + return str; + } else if (lua_isnil(lstate, idx - 1)) { + if (default_val == NULL) + str[0] = '\0'; + else + strlcpy(str, default_val, len); + return str; + } else { + fprintf(stderr, "Illegal type of '%s'(%s), must be string.\n", + name, lua_typename(lstate, lua_type(lstate, idx - 1))); + exit(1); + } +} + +static void +sj2lua_boolean(lua_State *lstate, char *name, int i) +{ + lua_pushstring(lstate, name); + lua_pushboolean(lstate, i); + lua_settable(lstate, -3); +} + +static void +sj2lua_integer(lua_State *lstate, char *name, int i) +{ + lua_pushstring(lstate, name); + lua_pushnumber(lstate, i); + lua_settable(lstate, -3); +} + +static void +sj2lua_string(lua_State *lstate, char *name, char *s) +{ + lua_pushstring(lstate, name); + lua_pushstring(lstate, s); + lua_settable(lstate, -3); +} + +static int +set_server(lua_State *lstate) +{ + if (!check_table(lstate)) + return 0; + lua2sj_boolean(lstate, "daemon", 1, FORKFLAG, &daemon_enable); + lua2sj_string(lstate, "pidfile", 1, PIDFILE, pid_file, sizeof(pid_file)); + lua2sj_integer(lstate, "max_client", 1, MAXCLIENTNUM, &max_client); + lua2sj_string(lstate, "dict_dir", 1, DICTROOTDIR, dict_dir, sizeof(dict_dir)); + lua2sj_string(lstate, "user", 1, SJ3OWNER, chuser_name, sizeof(chuser_name)); + lua2sj_boolean(lstate, "chroot", 1, CHROOTFLAG, &chroot_enable); + lua2sj_string(lstate, "chroot_dir", 1, CHROOTDIR, chroot_dir, sizeof(dict_dir)); + + return 0; +} + +static int +get_server(lua_State *lstate) +{ + lua_newtable(lstate); + sj2lua_boolean(lstate, "daemon", daemon_enable); + sj2lua_string(lstate, "pidfile", pid_file); + sj2lua_integer(lstate, "max_client", max_client); + sj2lua_string(lstate, "dict_dir", dict_dir); + return 1; +} + +static int +set_inet(lua_State *lstate) +{ + if (!check_table(lstate)) + return 0; + lua2sj_boolean(lstate, "enable", 1, 0, &inet_enable); + lua2sj_string(lstate, "address_family", 1, ADDRESSFAMILY, inet_address_family, sizeof(inet_address_family)); + lua2sj_string(lstate, "host_name", 1, LOCALHOST, inet_host_name, sizeof(inet_host_name)); + lua2sj_string(lstate, "port_name", 1, PORTNUMBER, inet_port_name, sizeof(inet_port_name)); + return 0; +} + +static int +get_inet(lua_State *lstate) +{ + sj2lua_boolean(lstate, "enable", inet_enable); + sj2lua_string(lstate, "address_family", inet_address_family); + sj2lua_string(lstate, "host_name", inet_host_name); + sj2lua_string(lstate, "port_name", inet_port_name); + + return 1; +} + +static int +set_domain(lua_State *lstate) +{ + if (!check_table(lstate)) + return 0; + lua2sj_boolean(lstate, "enable", 1, 0, &domain_enable); + lua2sj_string(lstate, "socket_name", 1, SOCKETNAME, domain_socket_name, sizeof(domain_socket_name)); + + return 0; +} + +static int +get_domain(lua_State *lstate) +{ + sj2lua_boolean(lstate, "enable", domain_enable); + sj2lua_string(lstate, "socket_name", domain_socket_name); + + return 1; +} + +static int +append_readdict(lua_State *lstate) +{ + char dict[MAXPATHLEN]; + char passwd[BUFSIZ]; + + if (!check_table(lstate)) + return 0; + lua2sj_string(lstate, "file", 1, NULL, dict, sizeof(dict)); + lua2sj_string(lstate, "passwd", 1, NULL, passwd, sizeof(passwd)); + + read_dict = malloc(sizeof(struct dict_entry)); + strlcpy(read_dict->filename, dict, sizeof(read_dict->filename)); + strlcpy(read_dict->passwd, passwd, sizeof(read_dict->passwd)); + TAILQ_INSERT_TAIL(&read_dict_head, read_dict, entries); + + return 0; +} + +static int +append_opendict(lua_State *lstate) +{ + char dict[MAXPATHLEN]; + char passwd[BUFSIZ]; + + if (!check_table(lstate)) + return 0; + lua2sj_string(lstate, "file", 1, NULL, dict, sizeof(dict)); + lua2sj_string(lstate, "passwd", 1, NULL, passwd, sizeof(passwd)); + + open_dict = malloc(sizeof(struct dict_entry)); + strlcpy(open_dict->filename, dict, sizeof(open_dict->filename)); + strlcpy(open_dict->passwd, passwd, sizeof(open_dict->passwd)); + TAILQ_INSERT_TAIL(&open_dict_head, open_dict, entries); + + return 0; +} + +static int +set_log(lua_State *lstate) +{ + if (!check_table(lstate)) + return 0; + lua2sj_string(lstate, "file", 1, LOGOUTFILE, log_file, sizeof(log_file)); + + return 0; +} + +static int +get_log(lua_State *lstate) +{ + sj2lua_string(lstate, "file", log_file); + + return 1; +} + +static int +set_debug(lua_State *lstate) +{ + if (!check_table(lstate)) + return 0; + lua2sj_string(lstate, "file", 1, DEBUGOUTFILE, debug_file, sizeof(debug_file)); + lua2sj_integer(lstate, "level", 1, DEBUGLEVEL, &debug_level); + + return 0; +} + +static int +get_debug(lua_State *lstate) +{ + sj2lua_string(lstate, "file", debug_file); + sj2lua_integer(lstate, "level", debug_level); + + return 1; +} + +static int +set_error(lua_State *lstate) +{ + if (!check_table(lstate)) + return 0; + lua2sj_string(lstate, "file", 1, ERROROUTFILE, error_file, sizeof(error_file)); + + return 0; +} + +static int +append_allowuser(lua_State *lstate) +{ + char username[BUFSIZ]; + char hostname[MAXHOSTNAMELEN]; + + if (!check_table(lstate)) + return 0; + lua2sj_string(lstate, "user", 1, NULL, username, sizeof(username)); + lua2sj_string(lstate, "host", 1, NULL, hostname, sizeof(hostname)); + + allow_user = malloc(sizeof(struct allow_user_entry)); + strlcpy(allow_user->username, username, sizeof(allow_user->username)); + strlcpy(allow_user->hostname, hostname, sizeof(allow_user->hostname)); + TAILQ_INSERT_TAIL(&allow_user_head, allow_user, entries); + + return 0; +} + +static int +get_error(lua_State *lstate) +{ + sj2lua_string(lstate, "file", error_file); + + return 0; +} + +void +set_luafunction(lua_State *lstate, char *name, lua_CFunction fun) +{ + lua_pushstring(lstate, name); + lua_pushcfunction(lstate, fun); + lua_settable(lstate, -3); +} + +void +read_runcmd() +{ + if (lua_state == NULL) { + exit(1); + } + + luaL_openlibs(lua_state); + + if (luaL_dofile(lua_state, runcmd_file) != 0) { + fprintf(stderr, "%s\n", lua_tostring(lua_state, -1)); + exit(255); + } + + /* overwrite from opt_args */ + if (opt_daemon_disable) + daemon_enable = 0; + else + daemon_enable = 1; + + if (opt_ipv4) + address_family = AF_INET; + else if (opt_ipv6) + address_family = AF_INET6; + else if (strcmp(inet_address_family, "inet") == 0) + address_family = AF_INET; + else if (strcmp(inet_address_family, "inet6") == 0) + address_family = AF_INET6; + +#if 0 /* DON'T LEAVE */ + lua_close(lua_state); + lua_state = NULL; +#endif +} + +void +set_default() +{ + if (lua_state != NULL) { + warning_out("lua is Already loaded, why?"); + return; + } + + if ((lua_state = luaL_newstate()) == NULL) { + warning_out("Can't setup lua"); + return; + } + + /* sj3.functions */ + lua_newtable(lua_state); + set_luafunction(lua_state, "set_server", set_server); + set_luafunction(lua_state, "set_inet", set_inet); + set_luafunction(lua_state, "set_domain", set_domain); + set_luafunction(lua_state, "append_readdict", append_readdict); + set_luafunction(lua_state, "append_opendict", append_opendict); + set_luafunction(lua_state, "set_log", set_log); + set_luafunction(lua_state, "set_debug", set_debug); + set_luafunction(lua_state, "set_error", set_error); + set_luafunction(lua_state, "append_allowuser", append_allowuser); + + set_luafunction(lua_state, "get_server", get_server); + set_luafunction(lua_state, "get_inet", get_inet); + set_luafunction(lua_state, "get_domain", get_domain); + set_luafunction(lua_state, "get_log", get_log); + set_luafunction(lua_state, "get_debug", get_debug); + set_luafunction(lua_state, "get_error", get_error); + + TAILQ_INIT(&open_dict_head); + TAILQ_INIT(&read_dict_head); + TAILQ_INIT(&allow_user_head); + + lua_setglobal(lua_state, "sj3"); +} + +extern char *optarg; +extern int optind; + +void +parse_arg(int argc, char **argv) +{ + int c; + int errflg = 0; + char *p; + size_t ret; + + p = (p = strrchr(argv[0], '/')) ? p + 1 : argv[0]; + strlcpy(program_name, p, sizeof(program_name)); + strlcpy(runcmd_file, RUNCMDFILE, sizeof(runcmd_file)); + + while ((c = getopt(argc, argv, "46f:d")) != EOF) { + switch (c) { + case '4': + opt_ipv4 = 1; + break; + case '6': + opt_ipv6 = 1; + break; + case 'f': + ret = strlcpy(runcmd_file, optarg, sizeof(runcmd_file)); + if (ret > sizeof(runcmd_file)) + errflg++; + break; + + case 'd': + opt_daemon_disable = 1; + break; + case '?': + default: + errflg++; + break; + } + } + + if (errflg || optind < argc) { + fprintf(stderr, "Usage: %s [-46] [-d] [-f RunCmdFile]\n", program_name); + exit(1); + } +} + + +void +preload_dict() +{ + struct dict_entry *np; + char filename[MAXPATHLEN]; + + work_base = (Global *)malloc(sizeof(Global)); + if (!work_base) { + warning_out("can't load default dictionary(not enough memory)"); + return; + } + + TAILQ_FOREACH(np, &read_dict_head, entries) { + strlcpy(filename, (char *)np->filename, sizeof(filename)); + if (make_full_path(filename, sizeof(filename))) + warning_out("too long filename \"%s\"", np->filename); + + else if (opendict(filename, np->passwd)) + logging_out("load dictionary \"%s\"", filename); + + else + warning_out("can't open dictionary \"%s\"", filename); + } + free(work_base); +} + +void +preopen_dict() +{ + struct dict_entry *np; + char filename[MAXPATHLEN]; + DICT *dict; + DICTL *dictl; + + work_base = global_work_base = (Global *)malloc(sizeof(Global)); + if (!work_base) { + warning_out("can't open default dictionary(not enough memory)"); + return; + } + memset(work_base, 0, sizeof(Global)); + + TAILQ_FOREACH(np, &open_dict_head, entries) { + strlcpy(filename, np->filename, sizeof(filename)); + if (make_full_path(filename, sizeof(filename))) + warning_out("too long filename \"%s\"", np->filename); + else if ((dict = (DICT *)opendict(filename, np->passwd)) != NULL) { + logging_out("open dictionary \"%s\"", filename); + if (!(dictl = (DICTL *)malloc(sizeof *dictl))) { + closedict((DictFile *)dict); + warning_out("can't open dictionary \"%s\"", filename); + continue; + } + dictl->dict = dict; + dictl->next = dictlist; + dictlist = dictl; + } else + warning_out("can't open dictionary \"%s\"", filename); + } +} + + + +static int +str_match(char *s, char *d) +{ + while (*d) { + if (*s == '*') { + while (*s == '*') s++; + if (!*s) + return TRUE; + while (*d) { + if (str_match(s, d)) + return TRUE; + d++; + } + return FALSE; + } + if (*s != '?' && *s != *d) + break; + s++; + d++; + } + return (!*s) ? TRUE : FALSE; +} + +int +check_user(char *user, char *host) +{ + struct allow_user_entry *np; + + if (TAILQ_EMPTY(&allow_user_head)) + return TRUE; + + TAILQ_FOREACH(np, &allow_user_head, entries) { + if (!str_match(np->username, user)) + continue; + + if (np->hostname) + if (!str_match(np->hostname, host)) + continue; + + return TRUE; + } + + return FALSE; +} diff --git a/src/sj3serv/sj3serv.h b/src/sj3serv/sj3serv.h new file mode 100644 index 0000000..d4ea681 --- /dev/null +++ b/src/sj3serv/sj3serv.h @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2004 Iwata + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef SJ3SERV_H +#define SJ3SERV_H + +#include + +#include "sj_kanakan.h" + +typedef struct { + uid_t uid; + gid_t gid; +} sj3_ugid; + +/* auth.c */ + +int exec_auth(); +void exit_auth(); + +int auth_getugid(char *, sj3_ugid *); + +/* comuni.c */ +extern int client_num; +extern Client *client; +extern Client *cur_client; +extern int maxfds; +extern fd_set fds_org; +extern jmp_buf client_dead; +extern int client_fd; + +void socket_init(); +void open_socket(); +void close_socket(); +void communicate(); +void put_flush(); +void put_byte(int); +void put_work(int); +void put_int(int); +u_char *put_string(u_char *); +u_char *put_ndata(u_char *, int); +void get_buf(); +int get_byte(); +int get_word(); +int get_int(); +int get_nstring(u_char *, int); +u_char *get_ndata(u_char *, int); + +/* execute.c */ +int make_full_path(char *, int); +WorkArea *alloc_workarea(); +void free_workarea(WorkArea *); +void exec_connect(); +void exec_disconnect(); +void exec_opendict(); +void exec_closedict(); +void close_dictlist(DICTL *); +void exec_openstdy(); +void exec_closestdy(); +void exec_stdysize(); +void exec_ph2knj(int); +void exec_cl2knj(int); +void exec_nextcl(int); +void exec_prevcl(int); +void exec_cl2knj_cnt(int); +void exec_cl2knj_all(int); +void exec_study(); +void exec_clstudy(int); +void exec_adddict(int); +void exec_deldict(int); +void exec_getdict(int); +void exec_nextdict(int); +void exec_prevdict(int); +void exec_makedict(); +void exec_makestdy(); +void exec_access(); +void exec_makedir(); +void exec_who(); +void exec_kill(); +void exec_quit(); +void exec_version(); +void exec_dictpass(); +void exec_dictcmnt(); +void exec_stdypass(); +void exec_stdycmnt(); +void exec_stdypara(); +void execute_cmd(); + +/* error.c */ +int open_error(); +void error_out(const char *, ...); +void warning_out(const char *, ...); +int open_log(); +void logging_out(const char *, ...); +int open_debug(); +void debug_out(int, const char *, ...); + +/* main.c */ +int make_pidfile(); +void server_terminate(); + +extern char program_name [MAXPATHLEN]; +extern char runcmd_file [MAXPATHLEN]; +extern int daemon_enable; +extern char pid_file[MAXPATHLEN]; +extern char chuser_name[BUFSIZ]; +extern int chroot_enable; +extern char chroot_dir[MAXPATHLEN]; +extern int inet_enable; +extern char inet_address_family[256]; +extern int address_family; +extern char inet_host_name[MAXHOSTNAMELEN]; +extern char inet_port_name[256]; +extern int domain_enable; +extern char domain_socket_name[MAXPATHLEN]; +extern char dict_dir[MAXPATHLEN]; +extern char dict_file[FILENAME_MAX]; +extern char log_file[MAXPATHLEN]; +extern char debug_file[MAXPATHLEN]; +extern int debug_level; +extern char error_file[MAXPATHLEN]; +extern int max_client; +extern int dir_mode; +extern int file_mode; +int read_line(FILE *, char *, int); +void read_runcmd(); +void set_default(); +void parse_arg(int, char **); +void preload_dict(); +void preopen_dict(); +int check_user(char *, char *); + +/* priv.c */ +void set_priv(const char *); + +/* timestamp.c */ +extern char *time_stamp; + +/* version.c */ +extern char *version_number; + + +#endif diff --git a/src/sj3serv/sj3serv.lua.example.in b/src/sj3serv/sj3serv.lua.example.in new file mode 100644 index 0000000..24fd829 --- /dev/null +++ b/src/sj3serv/sj3serv.lua.example.in @@ -0,0 +1,117 @@ +--[[ -- -*- lua -*- + Copyright (c) 2004 Iwata + + Permission to use, copy, modify, and distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +--]] + +local prefix = "%%SJ3VARDIR%%" + +sj3.set_server { + -- daemon: Boolean + -- set daemonize + daemon = true, + + -- lockfile: String + -- pid file name + -- Note: this file is created after chroot + pidfile = "/run/sj3serv.pid", + + -- max_client: Integer + -- client connect limit value + max_client = 512, + + -- user: String + -- run as user name + user = "%%SJ3OWNER%%", + + -- chroot: Boolean + -- sj3serv is chrooted or not + chroot = true, + + -- chroot_dir: String + -- chrooted path + chroot_dir = prefix, + + -- dict_dir: String + -- dictionary name + -- Note: this directory is opened after chroot + dict_dir = "/spool/sj3", +} + +sj3.set_inet { + -- enable: Boolean + -- allow acccess via internet connection + enable = false, + + -- family: String "unspec" or "inet4" or "inet6" + -- address family + address_family = "unspec", + + -- host_name: String + -- listening address + host_name = "localhost", + + -- port_name: String + -- binding port name, man services + port_name = "3086", +} + +sj3.set_domain { + -- enable: Boolean + -- allow acccess via unix domain socket + enable = true, + + -- socket_name: String + -- binding filename of unix domain socket + socket_name = prefix .. "/run/sj3serv.socket", +} + +sj3.append_opendict { + -- dir: String + -- root directory of dictionaries + file = "sj3main.dic", +} + +sj3.set_log { + -- file: String + -- output filename of log output + file = "/var/log/sj3", +} + +sj3.set_debug { + -- file: String + -- output filename of debug out + file = nil, + + -- debug_level: Integer + -- debug level + level = 0, +} + +sj3.set_error { + -- file: String + -- output filename of error output + file = "/var/log/sj3_error", +} + +--[[ +sj3.append_allowuser { + -- file: String + -- allowed user name + user = "foo", + + -- file: String + -- allowed host name + hostname = "bar", +} +--]] diff --git a/src/sj3serv/sj_string.c b/src/sj3serv/sj_string.c new file mode 100644 index 0000000..984bd3f --- /dev/null +++ b/src/sj3serv/sj_string.c @@ -0,0 +1,336 @@ +/* + * Copyright (c) 1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: string.c,v $ + * $SonyRevision: 1.1 $ + * $SonyDate: 1994/06/03 08:03:58 $ + */ + +#include +#include +#include +#include + +#include "sj_euc.h" +#include "sj_string.h" + +#ifndef TRUE +#define TRUE (1) +#define FALSE (0) +#endif + +#define sjis2euc sj3_sjis2euc +#define euc2sjis sj3_euc2sjis + +#define issjis1(c) (((0x81 <= (c)) && ((c) <= 0x9f)) || \ + ((0xe0 <= (c)) && ((c) <= 0xfc))) +#define iseuc(c) ((0xa1 <= (c)) && ((c) <= 0xfe)) +#define iskana(c) ((0xa1 <= (c)) && ((c) <= 0xdf)) + +int +sj3_str_sjistoeuc(unsigned char *out, int outlen, unsigned char *in, unsigned char *sjis_default, int *useflag) +{ + unsigned char *sjis = in, *euc = out; + int n = 0; + unsigned short code, default_code; + + euc[0] = '\0'; + *useflag = 0; + + if (!sjis) + return 0; + + while (*sjis && n < outlen) { + if (issjis1(*sjis)) { + code = sjis2euc((*sjis << 8) | *(sjis+1)); + if (n + 2 > outlen) + return -1; + if (code == 0) { + default_code = sjis2euc((sjis_default[0] << 8) + | sjis_default[1]); + euc[n++] = default_code >> 8; + euc[n++] = default_code & 0xff; + (*useflag)++; + } else { + euc[n++] = code >> 8; + euc[n++] = code & 0xff; + } + sjis += 2; + } else { + if( *sjis >= 0xa1 && *sjis <= 0xdf ) { + if (n + 2 > outlen) + return -1; + euc[n++] = SS2; + } + euc[n++] = *sjis; + sjis++; + } + + } + if (n > outlen) + return -1; + + euc[n] = '\0'; + return n; +} + + +int +sj3_str_euctosjis(unsigned char *out, int outlen, unsigned char *in, unsigned char *sjis_default, int *useflag) +{ + unsigned char *euc = in, *sjis = out; + int n = 0; + unsigned short code, default_code; + + sjis[0] = '\0'; + *useflag = 0; + + if (!euc) + return 0; + + while (*euc && n < outlen) { + if (iseuc(*euc)) { + code = euc2sjis( (*euc << 8) | *(euc+1) ); + if (n + 2 > outlen) + return -1; + if (code == 0) { + sjis[n++] = sjis_default[0]; + sjis[n++] = sjis_default[1]; + (*useflag)++; + } else { + sjis[n++] = code >> 8; + sjis[n++] = code & 0xff; + } + euc += 2; + } else if (*euc == SS3) { + if (n + 2 > outlen) + return -1; + sjis[n++] = sjis_default[0]; + sjis[n++] = sjis_default[1]; + euc += 3; + (*useflag)++; + } else if (*euc == SS2) { + sjis[n++] = *(euc + 1); + euc += 2; + } else { + sjis[n++] = *euc; + euc++; + } + } + if (n > outlen) + return -1; + + sjis[n] = '\0'; + return n; +} + +int +sj3_sjistoeuclen(unsigned char *str, int max) +{ + int len = 0, bytes = 1; + + if (!max) + return 0; + while ((bytes <= max) && *str) { + if (issjis1(*str)) { + str++; + bytes++; + if (!*str) + break; + len += 2; + } else if (*str & 0x80) { + len += 2; + } else { + len++; + } + str++; + bytes++; + } + return len; +} + +#define MASK 0x7f +#define MSB 0x80 + + +static unsigned char def_char[] = {0x81, 0x40}; + +int +sj3_sjistoeuc(unsigned char *e, int elen, unsigned char *s, int slen) +{ + int dummy; + + return sj3_str_sjistoeuc(e, elen, s, def_char, &dummy); +} + +int +sj3_euctosjis(unsigned char *s, int slen, unsigned char *e, int elen) +{ + int dummy; + + return sj3_str_euctosjis(s, slen, e, def_char, &dummy); +} +void +sj_euc2sjis(unsigned char *s) +{ + s[0] &= MASK; + s[1] &= MASK; + sj_jis2sjis (s); +} +void +sj_jis2sjis(unsigned char *s) +{ + int high, low; + int nh, nl; + + high = s[0]; + low = s[1]; + nh = ((high - 0x21) >> 1) + 0x81; + if (nh > 0x9f) + nh += 0x40; + if (high & 1) { + nl = low + 0x1f; + if (low > 0x5f) + nl++; + } else + nl = low + 0x7e; + s[0] = nh; + s[1] = nl; +} +void +sj_sjis2euc(unsigned char *s) +{ + sj_sjis2jis (s); + s[0] |= MSB; + s[1] |= MSB; +} +void +sj_sjis2jis(unsigned char *s) +{ + int byte1, byte2; + unsigned char *sp; + + sp = s; + byte1 = *sp++; + byte2 = *sp--; + + if (byte1 <= 0x80 || byte1 >= 0xf0 + || ( byte1>=0xa0 && byte1<=0xdf ) + || byte2 <= 0x3f || byte2 >= 0xfe || byte2==0x7f ) { + byte1 = 0x81; + byte2 = 0x40; + } + byte1 -= (byte1 >= 0xa0) ? 0xc1 : 0x81; + if (byte2 >= 0x9f) { + *sp++ = (byte1 << 1) + 0x22; + *sp = byte2 - 0x7e; + } else { + *sp++ = (byte1 << 1) + 0x21; + *sp = byte2 - ((byte2 <= 0x7e) ? 0x1f : 0x20 ); + } +} + +unsigned short +sj3_jis2sjis(unsigned short code) +{ + unsigned char tmp[3]; + + tmp[0] = (code >> 8) & 0xff; + tmp[1] = code & 0xff; + tmp[2] = '\0'; + + sj_jis2sjis((unsigned char *) tmp); + + code = (tmp[0] << 8) + tmp[1]; + + return(code); +} + +unsigned short +sj3_jis2euc(unsigned short code) +{ + unsigned char tmp[3]; + + tmp[0] = (code >> 8) & 0xff; + tmp[1] = code & 0xff; + tmp[2] = '\0'; + + code = ((tmp[0] | 0x80) << 8) + (tmp[1] | 0x80); + + return(code); +} + +unsigned short +sj3_sjis2jis(unsigned short code) +{ + unsigned char tmp[3]; + + tmp[0] = (code >> 8) & 0xff; + tmp[1] = code & 0xff; + tmp[2] = '\0'; + + sj_sjis2jis((unsigned char *) tmp); + + code = (tmp[0] << 8) + tmp[1]; + + return(code); +} + +unsigned short +sj3_euc2sjis(unsigned short code) +{ + unsigned char tmp[3]; + + tmp[0] = (code >> 8) & 0xff; + tmp[1] = code & 0xff; + tmp[2] = '\0'; + + sj_euc2sjis((unsigned char *) tmp); + + code = (tmp[0] << 8) + tmp[1]; + + return(code); +} + +unsigned short +sj3_sjis2euc(unsigned short code) +{ + unsigned char tmp[3]; + + tmp[0] = (code >> 8) & 0xff; + tmp[1] = code & 0xff; + tmp[2] = '\0'; + + sj_sjis2euc((unsigned char *) tmp); + + code = (tmp[0] << 8) + tmp[1]; + + return(code); +} diff --git a/src/sj3serv/sj_string.h b/src/sj3serv/sj_string.h new file mode 100644 index 0000000..9742d6c --- /dev/null +++ b/src/sj3serv/sj_string.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2004 Iwata + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef SJ3INTERN_H +#define SJ3INTERN_H + +int sj3_str_sjistoeuc(unsigned char *, int, unsigned char *, unsigned char *, int *); +int sj3_str_euctosjis(unsigned char *, int, unsigned char *, unsigned char *, int *); +int sj3_sjistoeuclen(unsigned char *, int); + +int sj3_sjistoeuc(unsigned char *s, int, unsigned char *, int); +int sj3_euctosjis(unsigned char *s, int, unsigned char *, int); +void sj_euc2sjis(unsigned char *); +void sj_jis2sjis(unsigned char *); +void sj_sjis2euc(unsigned char *); +void sj_sjis2jis(unsigned char *); +unsigned short sj3_jis2sjis(unsigned short); +unsigned short sj3_jis2euc(unsigned short); +unsigned short sj3_sjis2jis(unsigned short); +unsigned short sj3_euc2sjis(unsigned short); +unsigned short sj3_sjis2euc(unsigned short); + +#endif /* SJ3INTERN_H */ diff --git a/src/sj3serv/time_stamp.sh b/src/sj3serv/time_stamp.sh new file mode 100755 index 0000000..6d635ed --- /dev/null +++ b/src/sj3serv/time_stamp.sh @@ -0,0 +1,6 @@ +#! /bin/sh + +LC_ALL=C +export LC_ALL + +echo "char *time_stamp = \"`date`\";" diff --git a/src/sj3serv/version.c b/src/sj3serv/version.c new file mode 100644 index 0000000..95f54de --- /dev/null +++ b/src/sj3serv/version.c @@ -0,0 +1,36 @@ +/* + * Copyright (c) 1991-1994 Sony Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Sony Corporation + * shall not be used in advertising or otherwise to promote the sale, use + * or other dealings in this Software without prior written authorization + * from Sony Corporation. + * + */ + +/* + * $SonyRCSfile: version.c,v $ + * $SonyRevision: 1.9 $ + * $SonyDate: 1998/04/08 13:11:10 $ + */ + +char *version_number = "2.08.99"; diff --git a/src/sj3stat/Makefile.am b/src/sj3stat/Makefile.am new file mode 100644 index 0000000..eb696bf --- /dev/null +++ b/src/sj3stat/Makefile.am @@ -0,0 +1,16 @@ +if BUILDABLE_SJ3CLIENT + +INCLUDES = \ + -I$(top_srcdir)/include/sj3compat \ + -I$(top_srcdir)/include/sj3common \ + -I$(top_srcdir)/include/sj3lib + +LDADD = \ + $(top_srcdir)/lib/sj3lib/libsj3lib.la \ + $(top_srcdir)/lib/sj3compat/libsj3compat.la + +sj3stat_SOURCES = sj3stat.c + +bin_PROGRAMS = sj3stat + +endif diff --git a/src/sj3stat/sj3stat.c b/src/sj3stat/sj3stat.c new file mode 100644 index 0000000..252ee34 --- /dev/null +++ b/src/sj3stat/sj3stat.c @@ -0,0 +1,117 @@ +/* + * Copyright (C) 1995 by Software Research Associates, Inc. + * Author: Y. Kawabe + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL SOFTWARE RESEARCH ASSOCIATES BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Software Research + * Associates shall not be used in advertising or otherwise to + * promote the sale, use or other dealings in this Software without prior + * written authorization from Software Research Associates. + */ + +/* + * $SonyRCSfile: sj3stat.c,v $ + * $SonyRevision: 1.2 $ + * $SonyDate: 1997/01/23 11:09:41 $ + */ + +#include +#include +#include +#include +#include "Const.h" +#include "sj3err.h" +#include "sj3lib.h" +#include "sj3lowlib.h" +#include "sj3intern.h" + +int +main(int argc, char **argv) +{ + SJ3_CLIENT_ENV clnt; + SJ3_WHO_STRUCT who[64]; + char ver[256]; + char pname[256]; + char *hname; + char *uname; + + int i, n; + char *p; + + if ((argc > 1 && argv[1][0] == '-') || argc > 2) { + fprintf (stderr, "usage: %s [server]\n", argv[0]); + exit (1); + } + + hname = getenv ("SJ3SERV"); + uname = getenv ("USER"); + + if (argc > 1) + hname = argv[1]; + if (uname == NULL) + uname = getlogin(); + if (uname == NULL) + uname = "unknown"; + snprintf (pname, sizeof(pname), "%d.sj3stat", getpid()); + + if (sj3_make_connection(&clnt, hname, uname, pname) == ERROR) { + char *server, *status; + + server = hname ? hname : "localhost"; + switch (sj3_error_number) { + case SJ3_ServerDown: + status = "down"; + break; + case SJ3_GetHostByName: + status = "unknown"; + break; + default: + status = "dead"; + break; + } + fprintf(stderr, "Server '%s' is %s.\n", server, status); + return 1; + } + + sj3_version(&clnt, ver, sizeof(ver)); + n = sj3_who(&clnt, who, sizeof(who) / sizeof(who[0])); + + for (p = ver; *p; p++) { + while (*p) + putc(*p++, stdout); + fprintf(stdout, ", "); + } + fprintf (stdout, "%d users.\n", n); + +/* + * Change hostname entry's length. + * Because it's so short. + * Patched by Hidekazu Kuroki(hidekazu@cs.titech.ac.jp) 1996/8/10 + */ + fprintf(stdout, "%-16s %-32s %-8s %s\n", + "(USER)", "(HOST)", "(FD)", "(CLIENT)"); + for (i = 0; i < n; i++) { + fprintf(stdout, "%-16s %-32s %-8d %s\n", who[i].username, + who[i].hostname, who[i].fd, who[i].progname); + } + (void) sj3_erase_connection(&clnt); + return 0; +}