Compare commits

...
Sign in to create a new pull request.

6 commits

177 changed files with 30354 additions and 34662 deletions

24
.clang-format Normal file
View file

@ -0,0 +1,24 @@
---
UseTab: Always
TabWidth: 8
AlignConsecutiveAssignments:
Enabled: true
AlignConsecutiveDeclarations:
Enabled: true
AccessModifierOffset: -4
NamespaceIndentation: All
IndentWidth: 8
PointerAlignment: Left
ColumnLimit: 0
AllowShortIfStatementsOnASingleLine: Always
AllowShortBlocksOnASingleLine: Never
AllowShortFunctionsOnASingleLine: Empty
AllowShortLoopsOnASingleLine: true
BreakBeforeBraces: Custom
BraceWrapping:
AfterCaseLabel: true
SpaceBeforeParens: Never
AlignEscapedNewlines: DontAlign
SortIncludes: false
AllowShortEnumsOnASingleLine: false
#IndentPPDirectives: AfterHash

45
CMakeLists.txt Normal file
View file

@ -0,0 +1,45 @@
cmake_minimum_required(VERSION 3.16)
project(sj3 VERSION 2.0.99 LANGUAGES C)
include(CheckCSourceCompiles)
if(NOT DEFINED CMAKE_C_STANDARD)
set(CMAKE_C_STANDARD 90)
endif()
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)
set(SJ3CONFDIR "/etc/sj3" CACHE PATH "SJ3 configuration directory")
set(SJ3DICTDIR "${CMAKE_INSTALL_PREFIX}/share/sj3/dict" CACHE PATH
"SJ3 dictionary directory")
check_c_source_compiles("
#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L)
# error C99 required
#endif
#include <stdint.h>
int main(void) {
uint8_t u8 = 0;
uint16_t u16 = 0;
uint32_t u32 = 0;
uint64_t u64 = 0;
return (int)(u8 + u16 + u32 + u64);
}
" HAVE_C99_STDINT)
configure_file(config.h.cmake config.h @ONLY)
configure_file(Paths.h.in Paths.h @ONLY)
add_library(sj3types INTERFACE)
target_include_directories(sj3types INTERFACE
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
)
add_library(sj3_core_types OBJECT
wc16_str.c
string.c
string2.c
)
target_link_libraries(sj3_core_types PRIVATE sj3types)

View file

@ -1,138 +0,0 @@
<!--
-- SPDX-License-Identifier: CC-BY-4.0
-- Copyright 2014 Coraline Ada Ehmke
-->
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual
identity and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall
community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or advances of
any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address,
without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official email address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
<mogino@acm.org>.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series of
actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the
community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
[https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations

60
Dict.h
View file

@ -31,45 +31,45 @@
#ifndef SJ3_DICT_H_ #ifndef SJ3_DICT_H_
#define SJ3_DICT_H_ #define SJ3_DICT_H_
#define VersionPos 0 #define VersionPos 0
#define PasswdPos 16 #define PasswdPos 16
#define PasswdLen 16 #define PasswdLen 16
#define StdyNormPos 32 #define StdyNormPos 32
#define StdyNormLen 36 #define StdyNormLen 36
#define StdyNormNum 40 #define StdyNormNum 40
#define StdyNormCnt 44 #define StdyNormCnt 44
#define StdyClIdxPos 48 #define StdyClIdxPos 48
#define StdyClIdxLen 52 #define StdyClIdxLen 52
#define StdyClIdxStep 56 #define StdyClIdxStep 56
#define StdyClSegPos 64 #define StdyClSegPos 64
#define StdyClSegLen 68 #define StdyClSegLen 68
#define DictIdxPos 32 #define DictIdxPos 32
#define DictIdxLen 36 #define DictIdxLen 36
#define DictSegPos 48 #define DictSegPos 48
#define DictSegLen 52 #define DictSegLen 52
#define DictSegNum 56 #define DictSegNum 56
#define DictSegMax 60 #define DictSegMax 60
#define DictAIdxPos 64 #define DictAIdxPos 64
#define DictAIdxLen 68 #define DictAIdxLen 68
#define DictASegPos 80 #define DictASegPos 80
#define DictASegLen 84 #define DictASegLen 84
#define HeaderPos 0 #define HeaderPos 0
#define HeaderLength 128 #define HeaderLength 128
#define CommentPos 128 #define CommentPos 128
#define CommentLength 128 #define CommentLength 128
#define Byte2Long(c3,c2,c1,c0) (((c3) << (8*3)) | ((c2) << (8*2)) | \ #define Byte2Long(c3, c2, c1, c0) (((c3) << (8 * 3)) | ((c2) << (8 * 2)) | \
((c1) << (8*1)) | ((c0) << (8*0))) ((c1) << (8 * 1)) | ((c0) << (8 * 0)))
#define StdyVersion Byte2Long('S', 2, 0, 0) #define StdyVersion Byte2Long('S', 2, 0, 0)
#define DictVersion Byte2Long('D', 2, 0, 0) #define DictVersion Byte2Long('D', 2, 0, 0)
#endif /* SJ3_DICT_H_ */ #endif /* SJ3_DICT_H_ */

View file

@ -44,10 +44,10 @@ KANAKAN_OBJS = adddic.o addelcmn.o alloc.o charsize.o chrtbl.o cl2knj.o \
clstudy.o cmpstr.o conjunc.o connect.o cvtclknj.o cvtdict.o \ clstudy.o cmpstr.o conjunc.o connect.o cvtclknj.o cvtdict.o \
cvtkanji.o deldic.o depend.o dict.o functbl.o fuzoku.o \ cvtkanji.o deldic.o depend.o dict.o functbl.o fuzoku.o \
fzkyomi.o getkanji.o getrank.o global2.o hzstrlen.o init.o \ fzkyomi.o getkanji.o getrank.o global2.o hzstrlen.o init.o \
istrcmp.o memory2.o mk2claus.o mkbunset.o mkjiritu.o mkkouho.o \ istrcmp.o memory2.o mk2claus.o mkbunsetsu.o mkjiritsu.o mkkouho.o \
mknumber.o mvmemd.o mvmemi.o peepdic.o ph2knj.o ph_khtbl.o \ mknumber.o mvmemd.o mvmemi.o peepdic.o ph2knj.o ph_khtbl.o \
priority.o prtytbl.o s2ctbl.o selclrec.o selsuuji.o setconj.o \ priority.o prtytbl.o s2ctbl.o selclrec.o selsuuji.o setconj.o \
setjrec.o setkouho.o setubi.o sj2code.o skiphblk.o skipkstr.o \ setjrec.o setkouho.o setsubi.o sj2code.o skiphblk.o skipkstr.o \
srchdict.o srchhead.o srchidx.o srchnum.o stbtbl.o stttbl.o \ srchdict.o srchhead.o srchidx.o srchnum.o stbtbl.o stttbl.o \
study.o suujitbl.o terminat.o termtbl.o wakachi.o study.o suujitbl.o terminat.o termtbl.o wakachi.o
SJ3RKCV_OBJS = rk_conv.o sj3_rkcv.o wc16_str.o SJ3RKCV_OBJS = rk_conv.o sj3_rkcv.o wc16_str.o
@ -58,9 +58,9 @@ SJ3_OBJS = code.o common.o conv.o display.o douon.o edit.o etc.o \
eucmessage.o funckey.o henkan.o kigou.o libif.o nmttyslot.o \ eucmessage.o funckey.o henkan.o kigou.o libif.o nmttyslot.o \
romaji.o screen.o sj3.o sj3ver.o sjgetchar.o sjrc2.o \ romaji.o screen.o sj3.o sj3ver.o sjgetchar.o sjrc2.o \
stat_conv.o term.o toroku.o version2.o stat_conv.o term.o toroku.o version2.o
SJ3DIC_OBJS = codecnv.o dictdisp.o dictmake.o hinsi.o sj3dic.o sj3err.o \ SJ3DIC_OBJS = codecnv.o dictdisp.o dictmake.o hinshi.o sj3dic.o sj3err.o \
sjrc.o sjrc.o
SJ3MKDIC_OBJS = char.o cnvhinsi.o file.o global.o hindo.o knjcvt.o makedict.o \ SJ3MKDIC_OBJS = char.o cnvhinshi.o file.o global.o hindo.o knjcvt.o makedict.o \
makelist.o makeseg.o memory.o offset.o readline.o string2.o makelist.o makeseg.o memory.o offset.o readline.o string2.o
SJ3STAT_OBJS = sj3stat.o SJ3STAT_OBJS = sj3stat.o

View file

@ -4,7 +4,7 @@ adddic.o: adddic.c sj_euc.h sj_sysvdef.h sj_kcnv.h sj_typedef.h \
addelcmn.o: addelcmn.c sj_euc.h sj_sysvdef.h sj_kcnv.h sj_typedef.h \ addelcmn.o: addelcmn.c sj_euc.h sj_sysvdef.h sj_kcnv.h sj_typedef.h \
sj_rename.h sj_var.h sj_dict.h sj_study.h sj_table.h sj_func.h \ sj_rename.h sj_var.h sj_dict.h sj_study.h sj_table.h sj_func.h \
sj_struct.h Struct.h const.h Paths.h sj_global.h \ sj_struct.h Struct.h const.h Paths.h sj_global.h \
sj_hinsi.h sj_yomi.h kanakan.h sj_hinshi.h sj_yomi.h kanakan.h
alloc.o: alloc.c sj_rename.h sj_typedef.h const.h Paths.h sj_euc.h \ alloc.o: alloc.c sj_rename.h sj_typedef.h const.h Paths.h sj_euc.h \
sj_sysvdef.h sj_var.h sj_struct.h kanakan.h Struct.h sj_dict.h sj_sysvdef.h sj_var.h sj_struct.h kanakan.h Struct.h sj_dict.h
char.o: char.c sj_euc.h sj_sysvdef.h const.h Paths.h char.o: char.c sj_euc.h sj_sysvdef.h const.h Paths.h
@ -20,7 +20,7 @@ clstudy.o: clstudy.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h \
Paths.h sj_euc.h sj_sysvdef.h sj_global.h kanakan.h Paths.h sj_euc.h sj_sysvdef.h sj_global.h kanakan.h
cmpstr.o: cmpstr.c sj_rename.h const.h Paths.h sj_euc.h sj_sysvdef.h \ cmpstr.o: cmpstr.c sj_rename.h const.h Paths.h sj_euc.h sj_sysvdef.h \
sj_typedef.h sj_typedef.h
cnvhinsi.o: cnvhinsi.c dicttool.h sj_struct2.h const.h Paths.h sj_euc.h \ cnvhinshi.o: cnvhinshi.c dicttool.h sj_struct2.h const.h Paths.h sj_euc.h \
sj_sysvdef.h GramTable sj_sysvdef.h GramTable
code.o: code.c sj_sysvdef.h wchar16.h key.h kctype.h sj2.h rk.h code.o: code.c sj_sysvdef.h wchar16.h key.h kctype.h sj2.h rk.h
codecnv.o: codecnv.c sjctype.h sj_sysvdef.h sjtool.h codecnv.o: codecnv.c sjctype.h sj_sysvdef.h sjtool.h
@ -79,7 +79,7 @@ functbl.o: functbl.c sj_rename.h sj_func.h sj_typedef.h sj_struct.h \
kanakan.h kanakan.h
fuzoku.o: fuzoku.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h sj_dict.h \ fuzoku.o: fuzoku.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h sj_dict.h \
sj_study.h sj_table.h sj_func.h sj_struct.h Struct.h const.h Paths.h \ sj_study.h sj_table.h sj_func.h sj_struct.h Struct.h const.h Paths.h \
sj_euc.h sj_sysvdef.h sj_global.h sj_hinsi.h sj_right.h \ sj_euc.h sj_sysvdef.h sj_global.h sj_hinshi.h sj_right.h \
sj_yomi.h sj_yomi.h
fzkyomi.o: fzkyomi.c const.h Paths.h sj_euc.h sj_sysvdef.h sj_rename.h \ fzkyomi.o: fzkyomi.c const.h Paths.h sj_euc.h sj_sysvdef.h sj_rename.h \
sj_typedef.h sj_yomi.h sj_right.h sj_left.h sj_typedef.h sj_yomi.h sj_right.h sj_left.h
@ -96,7 +96,7 @@ henkan.o: henkan.c common.h conversion.h sj2.h wchar16.h key.h \
sj_sysvdef.h sj3libsj3.h sj3lib.h henkan.h kctype.h sj_sysvdef.h sj3libsj3.h sj3lib.h henkan.h kctype.h
hindo.o: hindo.c sj_struct.h sj_typedef.h dicttool.h sj_struct2.h const.h \ hindo.o: hindo.c sj_struct.h sj_typedef.h dicttool.h sj_struct2.h const.h \
Paths.h sj_euc.h sj_sysvdef.h Paths.h sj_euc.h sj_sysvdef.h
hinsi.o: hinsi.c sj_hinsi.h hinshi.o: hinshi.c sj_hinshi.h
hzstrlen.o: hzstrlen.c sj_euc.h sj_sysvdef.h sj_rename.h sj_typedef.h \ hzstrlen.o: hzstrlen.c sj_euc.h sj_sysvdef.h sj_rename.h sj_typedef.h \
const.h Paths.h sj_dict.h kanakan.h sj_struct.h Struct.h sj_var.h const.h Paths.h sj_dict.h kanakan.h sj_struct.h Struct.h sj_var.h
init.o: init.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h sj_dict.h \ init.o: init.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h sj_dict.h \
@ -128,17 +128,17 @@ memory2.o: memory2.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h \
mk2claus.o: mk2claus.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h \ mk2claus.o: mk2claus.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h \
sj_dict.h sj_study.h sj_table.h sj_func.h sj_struct.h Struct.h const.h \ sj_dict.h sj_study.h sj_table.h sj_func.h sj_struct.h Struct.h const.h \
Paths.h sj_euc.h sj_sysvdef.h sj_global.h sj_right.h Paths.h sj_euc.h sj_sysvdef.h sj_global.h sj_right.h
mkbunset.o: mkbunset.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h \ mkbunsetsu.o: mkbunsetsu.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h \
sj_dict.h sj_study.h sj_table.h sj_func.h sj_struct.h Struct.h const.h \ sj_dict.h sj_study.h sj_table.h sj_func.h sj_struct.h Struct.h const.h \
Paths.h sj_euc.h sj_sysvdef.h sj_global.h sj_hinsi.h \ Paths.h sj_euc.h sj_sysvdef.h sj_global.h sj_hinshi.h \
kanakan.h kanakan.h
mkjiritu.o: mkjiritu.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h \ mkjiritsu.o: mkjiritsu.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h \
sj_dict.h sj_study.h sj_table.h sj_func.h sj_struct.h Struct.h const.h \ sj_dict.h sj_study.h sj_table.h sj_func.h sj_struct.h Struct.h const.h \
Paths.h sj_euc.h sj_sysvdef.h sj_global.h kanakan.h Paths.h sj_euc.h sj_sysvdef.h sj_global.h kanakan.h
mkkouho.o: mkkouho.c sj_euc.h sj_sysvdef.h sj_kcnv.h sj_typedef.h \ mkkouho.o: mkkouho.c sj_euc.h sj_sysvdef.h sj_kcnv.h sj_typedef.h \
sj_rename.h sj_var.h sj_dict.h sj_study.h sj_table.h sj_func.h \ sj_rename.h sj_var.h sj_dict.h sj_study.h sj_table.h sj_func.h \
sj_struct.h Struct.h const.h Paths.h sj_global.h \ sj_struct.h Struct.h const.h Paths.h sj_global.h \
sj_hinsi.h sj_suuji.h kanakan.h sj_hinshi.h sj_suuji.h kanakan.h
mknumber.o: mknumber.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h \ mknumber.o: mknumber.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h \
sj_dict.h sj_study.h sj_table.h sj_func.h sj_struct.h Struct.h const.h \ sj_dict.h sj_study.h sj_table.h sj_func.h sj_struct.h Struct.h const.h \
Paths.h sj_euc.h sj_sysvdef.h sj_global.h sj_yomi.h \ Paths.h sj_euc.h sj_sysvdef.h sj_global.h sj_yomi.h \
@ -160,7 +160,7 @@ ph_khtbl.o: ph_khtbl.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h \
Paths.h sj_euc.h sj_sysvdef.h sj_global.h kanakan.h Paths.h sj_euc.h sj_sysvdef.h sj_global.h kanakan.h
priority.o: priority.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h \ priority.o: priority.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h \
sj_dict.h sj_study.h sj_table.h sj_func.h sj_struct.h Struct.h const.h \ sj_dict.h sj_study.h sj_table.h sj_func.h sj_struct.h Struct.h const.h \
Paths.h sj_euc.h sj_sysvdef.h sj_global.h sj_hinsi.h \ Paths.h sj_euc.h sj_sysvdef.h sj_global.h sj_hinshi.h \
sj_right.h sj_prty.h sj_right.h sj_prty.h
prtytbl.o: prtytbl.c sj_rename.h sj_typedef.h prtytbl.o: prtytbl.c sj_rename.h sj_typedef.h
readline.o: readline.c sj_euc.h sj_sysvdef.h const.h Paths.h sj_macro.h \ readline.o: readline.c sj_euc.h sj_sysvdef.h const.h Paths.h sj_macro.h \
@ -179,18 +179,18 @@ selsuuji.o: selsuuji.c sj_rename.h sj_typedef.h const.h Paths.h sj_euc.h \
setconj.o: setconj.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h \ setconj.o: setconj.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h \
sj_dict.h sj_study.h sj_table.h sj_func.h sj_struct.h Struct.h const.h \ sj_dict.h sj_study.h sj_table.h sj_func.h sj_struct.h Struct.h const.h \
Paths.h sj_euc.h sj_sysvdef.h sj_global.h sj_right.h \ Paths.h sj_euc.h sj_sysvdef.h sj_global.h sj_right.h \
sj_hinsi.h sj_yomi.h kanakan.h sj_hinshi.h sj_yomi.h kanakan.h
setjrec.o: setjrec.c sj_euc.h sj_sysvdef.h sj_kcnv.h sj_typedef.h \ setjrec.o: setjrec.c sj_euc.h sj_sysvdef.h sj_kcnv.h sj_typedef.h \
sj_rename.h sj_var.h sj_dict.h sj_study.h sj_table.h sj_func.h \ sj_rename.h sj_var.h sj_dict.h sj_study.h sj_table.h sj_func.h \
sj_struct.h Struct.h const.h Paths.h sj_global.h \ sj_struct.h Struct.h const.h Paths.h sj_global.h \
sj_hinsi.h kanakan.h sj_hinshi.h kanakan.h
setkouho.o: setkouho.c sj_euc.h sj_sysvdef.h sj_kcnv.h sj_typedef.h \ setkouho.o: setkouho.c sj_euc.h sj_sysvdef.h sj_kcnv.h sj_typedef.h \
sj_rename.h sj_var.h sj_dict.h sj_study.h sj_table.h sj_func.h \ sj_rename.h sj_var.h sj_dict.h sj_study.h sj_table.h sj_func.h \
sj_struct.h Struct.h const.h Paths.h sj_global.h \ sj_struct.h Struct.h const.h Paths.h sj_global.h \
sj_hinsi.h kanakan.h sj_hinshi.h kanakan.h
setubi.o: setubi.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h sj_dict.h \ setsubi.o: setsubi.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h sj_dict.h \
sj_study.h sj_table.h sj_func.h sj_struct.h Struct.h const.h Paths.h \ sj_study.h sj_table.h sj_func.h sj_struct.h Struct.h const.h Paths.h \
sj_euc.h sj_sysvdef.h sj_global.h sj_hinsi.h kanakan.h sj_euc.h sj_sysvdef.h sj_global.h sj_hinshi.h kanakan.h
setup.o: setup.c sj_sysvdef.h sj_typedef.h sj_var.h sj_dict.h sj_struct.h \ setup.o: setup.c sj_sysvdef.h sj_typedef.h sj_var.h sj_dict.h sj_struct.h \
sj_rename.h const.h Paths.h sj_euc.h Struct.h sj_global.h kanakan.h \ sj_rename.h const.h Paths.h sj_euc.h Struct.h sj_global.h kanakan.h \
server.h server.h
@ -204,7 +204,7 @@ sj3_rkcv.o: sj3_rkcv.c wchar16.h key.h sj2.h sj_sysvdef.h kana.h rk.h \
sj3dic.o: sj3dic.c sj_sysvdef.h sjtool.h sj3lib.h sj3dic.h sj3dic.o: sj3dic.c sj_sysvdef.h sjtool.h sj3lib.h sj3dic.h
sj3err.o: sj3err.c sj3err.h sj3err.o: sj3err.c sj3err.h
sj3lib.o: sj3lib.c config.h const.h Paths.h sj_euc.h sj_sysvdef.h \ sj3lib.o: sj3lib.c config.h const.h Paths.h sj_euc.h sj_sysvdef.h \
sj3err.h sj_hinsi.h sj3lib.h sj3err.h sj_hinshi.h sj3lib.h
sj3stat.o: sj3stat.c const.h Paths.h sj_euc.h sj_sysvdef.h sj3err.h \ sj3stat.o: sj3stat.c const.h Paths.h sj_euc.h sj_sysvdef.h sj3err.h \
sj3lib.h sj3lib.h
sj3ver.o: sj3ver.c sj2.h wchar16.h key.h sj_sysvdef.h sj3ver.o: sj3ver.c sj2.h wchar16.h key.h sj_sysvdef.h
@ -229,10 +229,10 @@ srchidx.o: srchidx.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h \
srchnum.o: srchnum.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h \ srchnum.o: srchnum.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h \
sj_dict.h sj_study.h sj_table.h sj_func.h sj_struct.h Struct.h const.h \ sj_dict.h sj_study.h sj_table.h sj_func.h sj_struct.h Struct.h const.h \
Paths.h sj_euc.h sj_sysvdef.h sj_global.h sj_yomi.h \ Paths.h sj_euc.h sj_sysvdef.h sj_global.h sj_yomi.h \
sj_hinsi.h sj_suuji.h kanakan.h sj_hinshi.h sj_suuji.h kanakan.h
stat_conv.o: stat_conv.c common.h conversion.h sj2.h wchar16.h key.h \ stat_conv.o: stat_conv.c common.h conversion.h sj2.h wchar16.h key.h \
sj_sysvdef.h sj3libsj3.h sj3lib.h henkan.h rk.h sj_sysvdef.h sj3libsj3.h sj3lib.h henkan.h rk.h
stbtbl.o: stbtbl.c sj_rename.h sj_typedef.h sj_yomi.h sj_hinsi.h stbtbl.o: stbtbl.c sj_rename.h sj_typedef.h sj_yomi.h sj_hinshi.h
string.o: string.c config.h sj_euc.h sj_sysvdef.h sj3lib.h string.o: string.c config.h sj_euc.h sj_sysvdef.h sj3lib.h
string2.o: string2.c const.h Paths.h sj_euc.h sj_sysvdef.h dicttool.h \ string2.o: string2.c const.h Paths.h sj_euc.h sj_sysvdef.h dicttool.h \
sj_struct2.h sj_struct2.h
@ -255,5 +255,5 @@ version2.o: version2.c sj2.h wchar16.h key.h sj_sysvdef.h
wakachi.o: wakachi.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h \ wakachi.o: wakachi.c sj_kcnv.h sj_typedef.h sj_rename.h sj_var.h \
sj_dict.h sj_study.h sj_table.h sj_func.h sj_struct.h Struct.h const.h \ sj_dict.h sj_study.h sj_table.h sj_func.h sj_struct.h Struct.h const.h \
Paths.h sj_euc.h sj_sysvdef.h sj_global.h sj_right.h \ Paths.h sj_euc.h sj_sysvdef.h sj_global.h sj_right.h \
sj_hinsi.h kanakan.h sj_hinshi.h kanakan.h
wc16_str.o: wc16_str.c sj_sysvdef.h sj_euc.h wchar16.h key.h wc16_str.o: wc16_str.c sj_sysvdef.h sj_euc.h wchar16.h key.h

10
Sjrc
View file

@ -26,12 +26,6 @@
## from Sony Corporation. ## from Sony Corporation.
## ##
##
## $SonyRCSfile: Sjrc,v $
## $SonyRevision: 1.1 $
## $SonyDate: 1994/06/03 08:03:06 $
##
# SJ3用セット・アップ・ファイル # SJ3用セット・アップ・ファイル
# .sjrc file sample # .sjrc file sample
# sj3 1.00, 1990 Sony Corp. # sj3 1.00, 1990 Sony Corp.
@ -48,7 +42,7 @@
.key.right ^F .key.right ^F
.key.left ^B .key.left ^B
.key.kakuchou ^O .key.kakuchou ^O
.key.syukusyou ^I .key.shukushou ^I
.key.wrap ^N .key.wrap ^N
.key.wrapback ^P .key.wrapback ^P
.key.saihenkan ^Y .key.saihenkan ^Y
@ -81,7 +75,7 @@
# その他キーが押されたときのコマンド・キーの指定 # その他キーが押されたときのコマンド・キーの指定
#.etckey.toroku hira #.etckey.toroku hira
#.etckey.syoukyo zkatakana #.etckey.shoukyo zkatakana
#.etckey.help hkatakana #.etckey.help hkatakana
#.etckey.sjrc zalpha #.etckey.sjrc zalpha

5
Sjrk
View file

@ -26,11 +26,6 @@
## from Sony Corporation. ## from Sony Corporation.
## ##
##
## $SonyRCSfile: Sjrk,v $
## $SonyRevision: 1.1 $
## $SonyDate: 1994/06/03 08:03:07 $
##
# #
# ローマ字かな変換規則定義ファイル # ローマ字かな変換規則定義ファイル
# デフォルトファイル # デフォルトファイル

186
Struct.h
View file

@ -41,133 +41,133 @@
#include "sj_var.h" #include "sj_var.h"
typedef struct global { typedef struct global {
JREC *Jmaxjptr; JREC* Jmaxjptr;
CLREC *Jmaxclptr; CLREC* Jmaxclptr;
JREC *Jjrt1st; JREC* Jjrt1st;
CLREC *Jclt1st; CLREC* Jclt1st;
JREC *Jjrt2nd; JREC* Jjrt2nd;
CLREC *Jclt2nd; CLREC* Jclt2nd;
CLREC *Jselcl; CLREC* Jselcl;
short Jselectid; short Jselectid;
short Jtrank; short Jtrank;
short Jnrank; short Jnrank;
unsigned char *Jinputyomi; unsigned char* Jinputyomi;
unsigned char *Jcnvstart; unsigned char* Jcnvstart;
short Jcnvlen; short Jcnvlen;
unsigned char *Jystart; unsigned char* Jystart;
unsigned char Jhyomi[MaxPhInputLen + 1]; unsigned char Jhyomi[MaxPhInputLen + 1];
unsigned char Jorgyomi[MaxClInputLen*2 + 1]; unsigned char Jorgyomi[MaxClInputLen * 2 + 1];
unsigned char Jkanjibuf[MinPhOutputLen]; unsigned char Jkanjibuf[MinPhOutputLen];
unsigned char *Jkanjipos; unsigned char* Jkanjipos;
unsigned char *Jkanjitmp; unsigned char* Jkanjitmp;
short Jkanjilen; short Jkanjilen;
unsigned char Jdicinl; unsigned char Jdicinl;
unsigned char Jdicsaml; unsigned char Jdicsaml;
TypeDicSeg Jprevseg; TypeDicSeg Jprevseg;
unsigned char Jfzkcount; unsigned char Jfzkcount;
unsigned char Jfzk_ka_flg; unsigned char Jfzk_ka_flg;
FREC Jfzktbl[MAXFREC]; FREC Jfzktbl[MAXFREC];
unsigned char Jheadcode; unsigned char Jheadcode;
unsigned char Jheadlen; unsigned char Jheadlen;
unsigned char Jgobilen; unsigned char Jgobilen;
TypeGram Jprevclgrm; TypeGram Jprevclgrm;
TypeCnct Jprevclrow; TypeCnct Jprevclrow;
unsigned char Jnextcllen; unsigned char Jnextcllen;
short Jkhcount; short Jkhcount;
short Jnkhcount; short Jnkhcount;
KHREC Jkouhotbl[MaxKouhoNumber]; KHREC Jkouhotbl[MaxKouhoNumber];
STDYIN *Jstdytop; STDYIN* Jstdytop;
DICT *Jcurdict; DICT* Jcurdict;
DICTL *Jdictlist; DICTL* Jdictlist;
unsigned char *Jdicbuf; unsigned char* Jdicbuf;
unsigned char *Jidxbuf; unsigned char* Jidxbuf;
TypeIdxOfs *Jidxofs; TypeIdxOfs* Jidxofs;
unsigned char *Jaskknj[MaxKnjAskNumber]; unsigned char* Jaskknj[MaxKnjAskNumber];
unsigned char *Jaskknj_k[MaxKnjAskNumber]; unsigned char* Jaskknj_k[MaxKnjAskNumber];
STDY *Jcurstdy; STDY* Jcurstdy;
unsigned short Jsuuji_wbuf[NumWordBuf]; unsigned short Jsuuji_wbuf[NumWordBuf];
unsigned char Jsuuji_ubuf[NumKetaLength]; unsigned char Jsuuji_ubuf[NumKetaLength];
TypeClass Jsuuji_class; TypeClass Jsuuji_class;
unsigned char Jsuuji_comma; unsigned char Jsuuji_comma;
unsigned char Jsuuji_keta; unsigned char Jsuuji_keta;
unsigned char *Jsuuji_yptr; unsigned char* Jsuuji_yptr;
unsigned char Jsuuji_len; unsigned char Jsuuji_len;
unsigned char Jsuuji_exit; unsigned char Jsuuji_exit;
unsigned short *Jsuuji_wkeep; unsigned short* Jsuuji_wkeep;
unsigned char *Jsuuji_ukeep; unsigned char* Jsuuji_ukeep;
unsigned char Jpeepyomi[MaxWdYomiLen * 2 + 1]; unsigned char Jpeepyomi[MaxWdYomiLen * 2 + 1];
unsigned char Jpeepknj[MaxWdKanjiLen + 1]; unsigned char Jpeepknj[MaxWdKanjiLen + 1];
TypeGram Jpeepgrm; TypeGram Jpeepgrm;
unsigned char *Jpeepdptr; unsigned char* Jpeepdptr;
unsigned char *Jpeephptr; unsigned char* Jpeephptr;
unsigned char *Jpeepkptr; unsigned char* Jpeepkptr;
TypeDicSeg Jpeepidx; TypeDicSeg Jpeepidx;
} Global; } Global;
typedef struct dictfile { typedef struct dictfile {
DICT dict; DICT dict;
int refcnt; int refcnt;
fd_set lock; fd_set lock;
FILE *fp; FILE* fp;
int fd; int fd;
unsigned char *buffer; unsigned char* buffer;
long bufsiz; long bufsiz;
long idxstrt; long idxstrt;
long segstrt; long segstrt;
TypeIdxOfs *ofsptr; TypeIdxOfs* ofsptr;
struct dictfile *link; struct dictfile* link;
} DictFile; } DictFile;
typedef struct stdyfile { typedef struct stdyfile {
STDY stdy; STDY stdy;
int refcnt; int refcnt;
ino_t inode; ino_t inode;
FILE *fp; FILE* fp;
int fd; int fd;
unsigned char *header; unsigned char* header;
struct stdyfile *link; struct stdyfile* link;
} StdyFile; } StdyFile;
typedef struct workarea { typedef struct workarea {
int refcnt; int refcnt;
int lock; int lock;
struct workarea *link; struct workarea* link;
Global global; Global global;
} WorkArea; } WorkArea;
typedef struct client { typedef struct client {
int fd; int fd;
char host[HostNameLen]; char host[HostNameLen];
char user[UserNameLen]; char user[UserNameLen];
char prog[ProgNameLen]; char prog[ProgNameLen];
WorkArea *work; WorkArea* work;
StdyFile *stdy; StdyFile* stdy;
short version; short version;
unsigned char def_char[2]; unsigned char def_char[2];
uid_t uid; uid_t uid;
struct client *next; struct client* next;
} Client; } Client;
#endif /* SJ3_STRUCT_H_ */ #endif /* SJ3_STRUCT_H_ */

View file

@ -26,11 +26,6 @@
## from Sony Corporation. ## from Sony Corporation.
## ##
##
## $SonyRCSfile: Xterm.cvt,v $
## $SonyRevision: 1.1 $
## $SonyDate: 1994/06/03 08:03:08 $
##
# sj3 command key alias file # sj3 command key alias file
# for xterm # for xterm
# #

384
adddic.c
View file

@ -27,134 +27,121 @@
* *
*/ */
/*
* $SonyRCSfile: adddic.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:01:26 $
*
* $Id$
*/
#include <sys/types.h> #include <sys/types.h>
#include <string.h> #include <string.h>
#include "sj_euc.h" #include "sj_euc.h"
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "kanakan.h" #include "kanakan.h"
static unsigned int checkdict(unsigned char* kanji, TypeGram grm); static unsigned int checkdict(unsigned char* kanji, TypeGram grm);
static int cal_nextym(unsigned char* ptr); static int cal_nextym(unsigned char* ptr);
static int usr_freelen(void); static int usr_freelen(void);
static void sprt_seg(TypeDicSeg seg, TypeDicOfs ofs); static void sprt_seg(TypeDicSeg seg, TypeDicOfs ofs);
static void apnd_uidx(TypeDicSeg seg, unsigned char* yomi, int len); static void apnd_uidx(TypeDicSeg seg, unsigned char* yomi, int len);
unsigned int unsigned int
adddic(unsigned char* yomi, unsigned char* kanji, TypeGram hinsi) adddic(unsigned char* yomi, unsigned char* kanji, TypeGram hinshi) {
{ unsigned int err;
unsigned int err; unsigned char yptr[MaxWdYomiLen + 1];
unsigned char yptr[MaxWdYomiLen+1]; unsigned char kptr[MaxWdKanjiLen + 1];
unsigned char kptr[MaxWdKanjiLen+1]; int klen;
int klen; TypeDicSeg segnum;
TypeDicSeg segnum; int saml;
int saml; TypeDicOfs dstofs;
TypeDicOfs dstofs; TypeDicOfs douofs;
TypeDicOfs douofs; TypeDicOfs hnsofs;
TypeDicOfs hnsofs; TypeDicOfs knjofs;
TypeDicOfs knjofs; TypeDicOfs nxtask;
TypeDicOfs nxtask; TypeDicOfs newsiz;
TypeDicOfs newsiz; TypeDicOfs oldsiz;
TypeDicOfs oldsiz; TypeDicOfs fresiz;
TypeDicOfs fresiz; TypeIdxOfs freidx;
TypeIdxOfs freidx; unsigned char* douptr;
unsigned char *douptr; unsigned char* dstptr;
unsigned char *dstptr; TypeDicOfs pos;
TypeDicOfs pos; unsigned char* p1;
unsigned char *p1; int i;
int i; int nlen, plen;
int nlen, plen; int size;
int size; STDYIN* stdy;
STDYIN *stdy; STDYOUT stdydat;
STDYOUT stdydat;
if ((err = addel_arg(yomi, kanji, hinsi, yptr, sizeof(yptr))) != 0) if((err = addel_arg(yomi, kanji, hinshi, yptr, sizeof(yptr))) != 0)
return err; return err;
inputyomi = yomi; inputyomi = yomi;
cnvstart = ystart = yptr; cnvstart = ystart = yptr;
cnvlen = strlen(yptr); cnvlen = strlen(yptr);
if ((err = checkdict(kanji, hinsi)) != 0) if((err = checkdict(kanji, hinshi)) != 0)
return err; return err;
if (!curdict -> maxunit) return AD_NotUserDict; if(!curdict->maxunit) return AD_NotUserDict;
klen = cvtknj(yomi, kanji, kptr); klen = cvtknj(yomi, kanji, kptr);
newsiz = DouonBlkSizeNumber + cnvlen + (klen !=0 ? klen+1 : 0) + 2; newsiz = DouonBlkSizeNumber + cnvlen + (klen != 0 ? klen + 1 : 0) + 2;
if (newsiz > MaxDouonBlk) return AD_OvflwDouBlk; if(newsiz > MaxDouonBlk) return AD_OvflwDouBlk;
if (newsiz > curdict->seglen) return AD_OvflwDouBlk; if(newsiz > curdict->seglen) return AD_OvflwDouBlk;
segnum = srchidx((TypeDicSeg)DicSegBase, cnvlen); segnum = srchidx((TypeDicSeg)DicSegBase, cnvlen);
for ( ; ; ) { for(;;) {
(*curdict->getdic)(curdict, segnum); (*curdict->getdic)(curdict, segnum);
i = srchkana(&p1, &saml); i = srchkana(&p1, &saml);
dstofs = douofs = p1 - dicbuf; dstofs = douofs = p1 - dicbuf;
hnsofs = knjofs = 0; hnsofs = knjofs = 0;
if (i) { if(i) {
i = srchgram(p1, &p1, hinsi); i = srchgram(p1, &p1, hinshi);
dstofs = hnsofs = p1 - dicbuf; dstofs = hnsofs = p1 - dicbuf;
if (i) { if(i) {
srchkanji(&p1, kptr, klen); srchkanji(&p1, kptr, klen);
if (*p1 != HinsiBlkTerm) return AD_ArExist; if(*p1 != HinshiBlkTerm) return AD_ArExist;
dstofs = knjofs = p1 - dicbuf; dstofs = knjofs = p1 - dicbuf;
} }
} }
p1 = dicbuf + douofs; p1 = dicbuf + douofs;
if (!hnsofs) { if(!hnsofs) {
oldsiz = 0; oldsiz = 0;
nlen = cnvlen - saml; nlen = cnvlen - saml;
newsiz = DouonBlkSizeNumber + nlen; newsiz = DouonBlkSizeNumber + nlen;
nxtask = cal_nextym(p1); nxtask = cal_nextym(p1);
} } else {
else {
oldsiz = newsiz = getsize(p1); oldsiz = newsiz = getsize(p1);
nxtask = 0; nxtask = 0;
} }
if (!knjofs) newsiz += 2; if(!knjofs) newsiz += 2;
newsiz += (klen != 0 ? klen+1 : 0); newsiz += (klen != 0 ? klen + 1 : 0);
fresiz = usr_freelen(); fresiz = usr_freelen();
if ((unsigned int) (newsiz - oldsiz - nxtask) <= if((unsigned int)(newsiz - oldsiz - nxtask) <=
(unsigned int) fresiz) break; (unsigned int)fresiz) break;
if (segend(p1) && (segnum + 1 < curdict->segunit)) { if(segend(p1) && (segnum + 1 < curdict->segunit)) {
segnum++; segnum++;
continue; continue;
} }
if (curdict->segunit >= curdict->maxunit) if(curdict->segunit >= curdict->maxunit)
return AD_OvflwUsrDic; return AD_OvflwUsrDic;
freidx = count_uidx(); freidx = count_uidx();
if ((unsigned int) (douofs + newsiz) <= curdict->seglen) { if((unsigned int)(douofs + newsiz) <= curdict->seglen) {
if (hnsofs) p1 = getntag(p1); if(hnsofs) p1 = getntag(p1);
pos = p1 - dicbuf; pos = p1 - dicbuf;
nlen = getnlen(p1); nlen = getnlen(p1);
if ((unsigned int) freidx < getplen(p1) + nlen + 1) if((unsigned int)freidx < getplen(p1) + nlen + 1)
return AD_OvflwIndex; return AD_OvflwIndex;
if ((*curdict->putdic)(curdict, curdict->segunit)) if((*curdict->putdic)(curdict, curdict->segunit))
return AD_OvflwUsrDic; return AD_OvflwUsrDic;
sprt_seg(segnum, pos); sprt_seg(segnum, pos);
@ -163,10 +150,10 @@ adddic(unsigned char* yomi, unsigned char* kanji, TypeGram hinsi)
break; break;
} }
if (segend(p1)) { if(segend(p1)) {
if ((unsigned int) freidx < cnvlen + 1) return AD_OvflwIndex; if((unsigned int)freidx < cnvlen + 1) return AD_OvflwIndex;
if ((*curdict->putdic)(curdict, curdict->segunit)) if((*curdict->putdic)(curdict, curdict->segunit))
return AD_OvflwUsrDic; return AD_OvflwUsrDic;
curdict->segunit++; curdict->segunit++;
@ -182,10 +169,10 @@ adddic(unsigned char* yomi, unsigned char* kanji, TypeGram hinsi)
else { else {
nlen = getnlen(p1); nlen = getnlen(p1);
if ((unsigned int) freidx < getplen(p1) + nlen + 1) if((unsigned int)freidx < getplen(p1) + nlen + 1)
return AD_OvflwIndex; return AD_OvflwIndex;
if ((*curdict->putdic)(curdict, curdict->segunit)) if((*curdict->putdic)(curdict, curdict->segunit))
return AD_OvflwUsrDic; return AD_OvflwUsrDic;
sprt_seg(segnum, douofs); sprt_seg(segnum, douofs);
@ -196,15 +183,15 @@ adddic(unsigned char* yomi, unsigned char* kanji, TypeGram hinsi)
douptr = dicbuf + douofs; douptr = dicbuf + douofs;
if (nxtask) { if(nxtask) {
unsigned char *tp; unsigned char* tp;
size = getsize(douptr) - nxtask; size = getsize(douptr) - nxtask;
plen = getplen(douptr) + nxtask; plen = getplen(douptr) + nxtask;
nlen = getnlen(douptr) - nxtask; nlen = getnlen(douptr) - nxtask;
*douptr = (size >> 8); *douptr = (size >> 8);
if (nlen & 0x10) *douptr |= NokoriYomiTop; if(nlen & 0x10) *douptr |= NokoriYomiTop;
if (plen & 0x10) *douptr |= AssyukuYomiTop; if(plen & 0x10) *douptr |= AsshukuYomiTop;
*(douptr + 1) = size; *(douptr + 1) = size;
*(douptr + 2) = ((nlen & 0x0f) | ((plen & 0x0f) << 4)); *(douptr + 2) = ((nlen & 0x0f) | ((plen & 0x0f) << 4));
@ -214,115 +201,112 @@ adddic(unsigned char* yomi, unsigned char* kanji, TypeGram hinsi)
} }
dstptr = dicbuf + dstofs; dstptr = dicbuf + dstofs;
size = newsiz - oldsiz; size = newsiz - oldsiz;
p1 = dicbuf + curdict->seglen; p1 = dicbuf + curdict->seglen;
mvmemd(p1 - size, p1, p1 - dstptr - size); mvmemd(p1 - size, p1, p1 - dstptr - size);
if (!hnsofs) { if(!hnsofs) {
if (douofs == segtop() - dicbuf) { if(douofs == segtop() - dicbuf) {
chg_uidx(segnum, yptr, cnvlen); chg_uidx(segnum, yptr, cnvlen);
} }
*dstptr = 0; *dstptr = 0;
nlen = cnvlen - saml; nlen = cnvlen - saml;
if (nlen & 0x10) *dstptr |= NokoriYomiTop; if(nlen & 0x10) *dstptr |= NokoriYomiTop;
if (saml & 0x10) *dstptr |= AssyukuYomiTop; if(saml & 0x10) *dstptr |= AsshukuYomiTop;
*dstptr++ |= (size >> 8); *dstptr++ |= (size >> 8);
*dstptr++ = size; *dstptr++ = size;
*dstptr++ = ((nlen&0x0f)|((saml&0x0f)<<4)); *dstptr++ = ((nlen & 0x0f) | ((saml & 0x0f) << 4));
while (saml < cnvlen) *dstptr++ = yptr[saml++]; while(saml < cnvlen) *dstptr++ = yptr[saml++];
} }
else { else {
plen = getplen(douptr); plen = getplen(douptr);
nlen = getnlen(douptr); nlen = getnlen(douptr);
*douptr = (newsiz >> 8); *douptr = (newsiz >> 8);
if (nlen & 0x10) *douptr |= NokoriYomiTop; if(nlen & 0x10) *douptr |= NokoriYomiTop;
if (plen & 0x10) *douptr |= AssyukuYomiTop; if(plen & 0x10) *douptr |= AsshukuYomiTop;
*(douptr + 1) = newsiz; *(douptr + 1) = newsiz;
*(douptr + 2) = ((nlen & 0x0f) | ((plen & 0x0f) << 4)); *(douptr + 2) = ((nlen & 0x0f) | ((plen & 0x0f) << 4));
} }
if (!knjofs) *dstptr++ = hinsi; if(!knjofs) *dstptr++ = hinshi;
stdydat.stdy1.offset = dstptr - dicbuf; stdydat.stdy1.offset = dstptr - dicbuf;
for (saml = 0 ; saml < klen ; ) *dstptr++ = kptr[saml++]; for(saml = 0; saml < klen;) *dstptr++ = kptr[saml++];
if (klen > 0) *dstptr++ = KanjiStrEnd; if(klen > 0) *dstptr++ = KanjiStrEnd;
if (!knjofs) *dstptr++ = HinsiBlkTerm; if(!knjofs) *dstptr++ = HinshiBlkTerm;
(*curdict->putdic)(curdict, segnum); (*curdict->putdic)(curdict, segnum);
if (StudyExist()) { if(StudyExist()) {
size -= nxtask; size -= nxtask;
for (i = StudyCount, stdy = StudyDict ; i-- ; stdy++) { for(i = StudyCount, stdy = StudyDict; i--; stdy++) {
if (stdy -> dicid != curdict->dicid) continue; if(stdy->dicid != curdict->dicid) continue;
if (stdy -> seg != segnum) continue; if(stdy->seg != segnum) continue;
if (stdy -> offset >= dstofs) stdy -> offset += size; if(stdy->offset >= dstofs) stdy->offset += size;
} }
for (p1 = ClStudyDict ; !iseocl(p1) ; p1 = ClNextTag(p1)) { for(p1 = ClStudyDict; !iseocl(p1); p1 = ClNextTag(p1)) {
err = strncmp(yptr, (unsigned char*)ClYomiPos(p1), err = strncmp(yptr, (unsigned char*)ClYomiPos(p1),
(int)ClYomiLen(p1)); (int)ClYomiLen(p1));
if (err == MATCH) { if(err == MATCH) {
delclsub(p1); delclsub(p1);
mkclidx(); mkclidx();
putcldic(); putcldic();
break; break;
} } else if(err == OVER)
else if (err == OVER)
break; break;
} }
} }
stdydat.stdy1.seg = segnum; stdydat.stdy1.seg = segnum;
stdydat.stdy1.dicid = curdict->dicid; stdydat.stdy1.dicid = curdict->dicid;
stdydat.stdy1.styno = 0; stdydat.stdy1.styno = 0;
stdydat.stdy1.sttkj = 0; stdydat.stdy1.sttkj = 0;
stdydat.stdy1.ka_kj = 0; stdydat.stdy1.ka_kj = 0;
stdydat.stdy1.nmflg = 0; stdydat.stdy1.nmflg = 0;
stdydat.hinshi = hinsi; stdydat.hinshi = hinshi;
stdydat.len = cnvlen; stdydat.len = cnvlen;
stdydat.sttlen = 0; stdydat.sttlen = 0;
stdydat.sttfg = 0; stdydat.sttfg = 0;
stdydat.ka_fg = 0; stdydat.ka_fg = 0;
(void)study(&stdydat); (void)study(&stdydat);
return AD_Done; return AD_Done;
} }
static int static int
checksub(unsigned char* kanji, TypeGram grm) checksub(unsigned char* kanji, TypeGram grm) {
{ unsigned char* tagp;
unsigned char *tagp; unsigned char* ptr;
unsigned char *ptr; unsigned char* endp;
unsigned char *endp; int flg, nlen;
int flg, nlen; int dounum;
int dounum; unsigned char buf[MaxWdKanjiLen + 1];
unsigned char buf[MaxWdKanjiLen + 1];
dicinl = cnvlen; dicinl = cnvlen;
dicsaml = 0; dicsaml = 0;
prevseg = (TypeDicSeg)-1; prevseg = (TypeDicSeg)-1;
for (;;) { for(;;) {
if (!(tagp = srchdict(tagp))) return 0; if(!(tagp = srchdict(tagp))) return 0;
if (cnvlen == getnlen(tagp) + getplen(tagp)) if(cnvlen == getnlen(tagp) + getplen(tagp))
break; break;
} }
dounum = 0; dounum = 0;
nlen = getnlen(tagp); nlen = getnlen(tagp);
ptr = tagp + DouonBlkSizeNumber + nlen; ptr = tagp + DouonBlkSizeNumber + nlen;
endp = tagp + getsize(tagp); endp = tagp + getsize(tagp);
while (ptr < endp) { while(ptr < endp) {
flg = (grm == *ptr++); flg = (grm == *ptr++);
while (*ptr != HinsiBlkTerm) { while(*ptr != HinshiBlkTerm) {
if (flg) { if(flg) {
buf[getkanji(inputyomi, cnvlen, ptr, buf)] = 0; buf[getkanji(inputyomi, cnvlen, ptr, buf)] = 0;
if (cmpstr(kanji, buf)) return -1; if(cmpstr(kanji, buf)) return -1;
} }
dounum++; dounum++;
@ -335,19 +319,17 @@ checksub(unsigned char* kanji, TypeGram grm)
return dounum; return dounum;
} }
static unsigned int static unsigned int
checkdict(unsigned char* kanji, TypeGram grm) checkdict(unsigned char* kanji, TypeGram grm) {
{ DICTL* dp;
DICTL *dp; int dounum = 0;
int dounum = 0; int tmp;
int tmp; DICT* tmpdict;
DICT *tmpdict;
tmpdict = curdict; tmpdict = curdict;
for (dp = dictlist ; dp ; dp = dp -> next) { for(dp = dictlist; dp; dp = dp->next) {
curdict = dp -> dict; curdict = dp->dict;
if ((tmp = checksub(kanji, grm)) < 0) { if((tmp = checksub(kanji, grm)) < 0) {
curdict = tmpdict; curdict = tmpdict;
return AD_ArExist; return AD_ArExist;
} }
@ -356,26 +338,24 @@ checkdict(unsigned char* kanji, TypeGram grm)
} }
curdict = tmpdict; curdict = tmpdict;
if (MaxKouhoNumber <= dounum) return AD_OvflwDouNum; if(MaxKouhoNumber <= dounum) return AD_OvflwDouNum;
return 0; return 0;
} }
static int static int
cal_nextym(unsigned char* ptr) cal_nextym(unsigned char* ptr) {
{ int count = 0;
int count = 0; unsigned char* src;
unsigned char *src; int len;
int len;
if (!segend(ptr)) { if(!segend(ptr)) {
src = cnvstart + getplen(ptr); src = cnvstart + getplen(ptr);
len = getnlen(ptr); len = getnlen(ptr);
ptr += DouonBlkSizeNumber; ptr += DouonBlkSizeNumber;
while (len--) { while(len--) {
if (*ptr++ == *src++) if(*ptr++ == *src++)
count++; count++;
else else
break; break;
@ -385,34 +365,30 @@ cal_nextym(unsigned char* ptr)
return count; return count;
} }
static int static int
usr_freelen(void) usr_freelen(void) {
{
unsigned char* ptr; unsigned char* ptr;
ptr = segtop(); ptr = segtop();
while (!segend(ptr)) ptr += getsize(ptr); while(!segend(ptr)) ptr += getsize(ptr);
return(curdict->seglen - (ptr - dicbuf)); return (curdict->seglen - (ptr - dicbuf));
} }
static void static void
sprt_seg(TypeDicSeg seg, TypeDicOfs ofs) sprt_seg(TypeDicSeg seg, TypeDicOfs ofs) {
{ TypeDicSeg s;
TypeDicSeg s; unsigned char* pos;
unsigned char *pos; unsigned char* p;
unsigned char *p; unsigned char* q;
unsigned char *q; int i;
int i; int j;
int j; int ylen, nlen;
int ylen, nlen; TypeDicID dicid;
TypeDicID dicid; unsigned char yomi[MaxWdYomiLen];
unsigned char yomi[MaxWdYomiLen]; STDYIN* stdy;
STDYIN *stdy;
for (s = curdict->segunit - 1 ; s >= seg ; s--) { for(s = curdict->segunit - 1; s >= seg; s--) {
(*curdict->getdic)(curdict, s); (*curdict->getdic)(curdict, s);
(*curdict->putdic)(curdict, s + 1); (*curdict->putdic)(curdict, s + 1);
} }
@ -423,21 +399,21 @@ sprt_seg(TypeDicSeg seg, TypeDicOfs ofs)
pos = dicbuf + ofs; pos = dicbuf + ofs;
for (p = segtop() ; (p <= pos) && !segend(p) ; p = q) { for(p = segtop(); (p <= pos) && !segend(p); p = q) {
q = getntag(p); q = getntag(p);
i = getplen(p); i = getplen(p);
nlen = getnlen(p); nlen = getnlen(p);
j = (nlen != 0) ? nlen+1: 0; j = (nlen != 0) ? nlen + 1 : 0;
p += DouonBlkSizeNumber; p += DouonBlkSizeNumber;
while (j-- > 0) yomi[i++] = *p++; while(j-- > 0) yomi[i++] = *p++;
} }
nlen = getnlen(pos); nlen = getnlen(pos);
ylen = (i = getplen(pos)) + (j = nlen); ylen = (i = getplen(pos)) + (j = nlen);
apnd_uidx(seg, yomi, ylen); apnd_uidx(seg, yomi, ylen);
set_size(segtop(), getsize(pos) + i, 0, ylen); set_size(segtop(), getsize(pos) + i, 0, ylen);
mvmemi(yomi, (p = segtop() + DouonBlkSizeNumber), ylen); mvmemi(yomi, (p = segtop() + DouonBlkSizeNumber), ylen);
@ -451,18 +427,18 @@ sprt_seg(TypeDicSeg seg, TypeDicOfs ofs)
(*curdict->putdic)(curdict, seg + 1); (*curdict->putdic)(curdict, seg + 1);
if (StudyExist()) { if(StudyExist()) {
dicid = curdict -> dicid; dicid = curdict->dicid;
for (i = StudyCount, stdy = StudyDict ; i-- > 0 ; stdy++) { for(i = StudyCount, stdy = StudyDict; i-- > 0; stdy++) {
if (stdy -> dicid != dicid) if(stdy->dicid != dicid)
continue; continue;
else if (stdy -> seg < seg) else if(stdy->seg < seg)
continue; continue;
else if (stdy -> seg > seg) else if(stdy->seg > seg)
stdy -> seg += 1; stdy->seg += 1;
else if (stdy -> offset >= ofs) { else if(stdy->offset >= ofs) {
stdy -> seg += 1; stdy->seg += 1;
stdy -> offset -= j; stdy->offset -= j;
} }
} }
} }
@ -472,20 +448,18 @@ sprt_seg(TypeDicSeg seg, TypeDicOfs ofs)
(*curdict->putdic)(curdict, seg); (*curdict->putdic)(curdict, seg);
} }
static void static void
apnd_uidx(TypeDicSeg seg, unsigned char* yomi, int len) apnd_uidx(TypeDicSeg seg, unsigned char* yomi, int len) {
{ unsigned char* p;
unsigned char *p; unsigned char* q;
unsigned char *q;
p = get_idxptr(seg); p = get_idxptr(seg);
while (*p++) ; while(*p++);
q = idxbuf + curdict->idxlen; q = idxbuf + curdict->idxlen;
mvmemd(q - (len + 1), q, (int)(q - (len + 1) - p)); mvmemd(q - (len + 1), q, (int)(q - (len + 1) - p));
while (len--) *p++ = *yomi++; while(len--) *p++ = *yomi++;
*p = 0; *p = 0;
(*curdict->putidx)(curdict, 0); (*curdict->putidx)(curdict, 0);

View file

@ -27,139 +27,108 @@
* *
*/ */
/*
* $SonyRCSfile: addelcmn.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:01:27 $
*
* $Id$
*/
#include <string.h> #include <string.h>
#include "sj_euc.h" #include "sj_euc.h"
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "sj_hinsi.h" #include "sj_hinshi.h"
#include "sj_yomi.h" #include "sj_yomi.h"
#include "kanakan.h" #include "kanakan.h"
int sj2cd_str();
void mvmemi(), mvmemd(), mkidxtbl();
int sj2cd_str(); void set_size(unsigned char* p, int size, int plen, int nlen) {
void mvmemi(), mvmemd(), mkidxtbl();
void
set_size (unsigned char *p, int size, int plen, int nlen)
{
*p = (unsigned char)(size >> 8); *p = (unsigned char)(size >> 8);
if (nlen & 0x10) *p |= NokoriYomiTop; if(nlen & 0x10) *p |= NokoriYomiTop;
if (plen & 0x10) *p |= AssyukuYomiTop; if(plen & 0x10) *p |= AsshukuYomiTop;
*(p + 1) = (unsigned char)size; *(p + 1) = (unsigned char)size;
*(p + 2) = (unsigned char)((nlen & 0x0f) | ((plen & 0x0f) << 4)); *(p + 2) = (unsigned char)((nlen & 0x0f) | ((plen & 0x0f) << 4));
} }
static int
isvyomi(unsigned char* yp) {
int len;
if(!*yp) return FALSE;
static int if(!(Chrtbl[*yp] & DICTOP)) return FALSE;
isvyomi (unsigned char *yp)
{
int len;
if (!*yp) return FALSE; for(len = 0; *yp; yp++) {
if(!(Chrtbl[*yp]) || (*yp >= Y_KUTEN)) return FALSE;
if (!(Chrtbl[*yp] & DICTOP)) return FALSE; if(++len > MaxWdYomiLen) return FALSE;
for (len = 0 ; *yp ; yp++) {
if (!(Chrtbl[*yp]) || (*yp >= Y_KUTEN)) return FALSE;
if (++len > MaxWdYomiLen) return FALSE;
} }
return TRUE; return TRUE;
} }
static int
isvknj(unsigned char* kanji) {
int len;
if(!*kanji) return FALSE;
static int for(len = 0; *kanji;) {
isvknj(unsigned char *kanji) if(*kanji == SS3) {
{
int len;
if (!*kanji) return FALSE;
for (len = 0 ; *kanji ; ) {
if (*kanji == SS3) {
kanji += 3; kanji += 3;
len += 2; len += 2;
} else } else
if (isknj1(*kanji)) { if(isknj1(*kanji)) {
kanji += 2; kanji += 2;
len += 2; len += 2;
} } else {
else {
kanji++; kanji++;
len += 2; len += 2;
} }
if (len > MaxWdKanjiLen) return FALSE; if(len > MaxWdKanjiLen) return FALSE;
} }
return TRUE; return TRUE;
} }
static int
isgrm(TypeGram gram) {
int grm = gram;
if(MEISHI_1 <= grm && grm <= D_MEISHI_6) return TRUE;
static int if(MYOUJI <= grm && grm <= JOSUUSHI2) return TRUE;
isgrm (TypeGram gram) if(KEIYOUSHI_1 <= grm && grm <= DO_ZAHEN) return TRUE;
{ if(DO_1DAN_1 <= grm && grm <= DO_WAGO_2) return TRUE;
int grm = gram; if(DO_KAGO_5 <= grm && grm <= DO_WAGO_5) return TRUE;
if(DO_KAGO_6 <= grm && grm <= DO_WAGO_6) return TRUE;
if (MEISI_1 <= grm && grm <= D_MEISI_6) return TRUE; if(DO_1DAN_3 <= grm && grm <= DO_WAGO_3) return TRUE;
if (MYOUJI <= grm && grm <= JOSUUSI2) return TRUE; if(DO_1DAN_4 <= grm && grm <= DO_WAGO_4) return TRUE;
if (KEIYOUSI_1 <= grm && grm <= DO_ZAHEN) return TRUE; if(DO_KAGO_7 <= grm && grm <= DO_WAGO_7) return TRUE;
if (DO_1DAN_1 <= grm && grm <= DO_WAGO_2) return TRUE; if(DO_KAGO_8 <= grm && grm <= DO_WAGO_8) return TRUE;
if (DO_KAGO_5 <= grm && grm <= DO_WAGO_5) return TRUE; if(SP_SA_MI1 <= grm && grm <= TANKANJI) 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; return FALSE;
} }
unsigned int unsigned int
addel_arg (unsigned char *yp, unsigned char *kp, TypeGram grm, unsigned char *nyp, int len) addel_arg(unsigned char* yp, unsigned char* kp, TypeGram grm, unsigned char* nyp, int len) {
{ unsigned int err = 0;
unsigned int err = 0;
if (!sj2cd_str(yp, nyp, len)) err |= AD_BadYomi; if(!sj2cd_str(yp, nyp, len)) err |= AD_BadYomi;
if (!isvyomi(nyp)) err |= AD_BadYomi; if(!isvyomi(nyp)) err |= AD_BadYomi;
if (!isvknj(kp)) err |= AD_BadKanji; if(!isvknj(kp)) err |= AD_BadKanji;
if (!isgrm(grm)) err |= AD_BadHinsi; if(!isgrm(grm)) err |= AD_BadHinshi;
return err; return err;
} }
static void
yomi2kata(unsigned char* src, unsigned char* dst) {
int first;
int second;
while((first = *src++) != 0) {
static void
yomi2kata (unsigned char *src, unsigned char *dst)
{
int first;
int second;
while ((first = *src++) != 0) {
second = *src++; second = *src++;
if (first != 0xa4) { if(first != 0xa4) {
*dst++ = first; *dst++ = first;
*dst++ = second; *dst++ = second;
} } else {
else {
*dst++ = 0xa5; *dst++ = 0xa5;
*dst++ = second; *dst++ = second;
} }
@ -168,87 +137,76 @@ yomi2kata (unsigned char *src, unsigned char *dst)
*dst = 0; *dst = 0;
} }
static int
top_strcmp(unsigned char* src, unsigned char* dst) {
static int int i;
top_strcmp (unsigned char *src, unsigned char *dst) for(i = 0; *src && (*src == *dst); src++, dst++) i++;
{
int i;
for (i = 0 ; *src && (*src == *dst) ; src++, dst++) i++;
i /= 2; i /= 2;
return (i > MaxYomiAskNumber) ? MaxYomiAskNumber : i; return (i > MaxYomiAskNumber) ? MaxYomiAskNumber : i;
} }
static int
last_strcmp(unsigned char* src, unsigned char* dst) {
static int int slen;
last_strcmp (unsigned char *src, unsigned char *dst) int dlen;
{
int slen;
int dlen;
slen = strlen(src); slen = strlen(src);
dlen = strlen(dst); dlen = strlen(dst);
if (dlen > MaxYomiAskNumber * 2) return 0; if(dlen > MaxYomiAskNumber * 2) return 0;
if (strcmp(src + (slen - dlen), dst)) return 0; if(strcmp(src + (slen - dlen), dst)) return 0;
return (dlen / 2); return (dlen / 2);
} }
int cvtknj(unsigned char* yomi, unsigned char* knj, unsigned char* dst) {
unsigned char kana[MaxWdYomiLen * 2 + 1];
int int len;
cvtknj (unsigned char *yomi, unsigned char *knj, unsigned char *dst) unsigned char* keep;
{
unsigned char kana[MaxWdYomiLen * 2 + 1];
int len;
unsigned char *keep;
keep = dst; keep = dst;
yomi2kata(yomi, kana); yomi2kata(yomi, kana);
if ((len = top_strcmp(yomi, knj)) != 0) { if((len = top_strcmp(yomi, knj)) != 0) {
*dst = (unsigned char)(ZenHiraAssyuku | (len - 1)); *dst = (unsigned char)(ZenHiraAsshuku | (len - 1));
} } else if((len = top_strcmp(kana, knj)) != 0) {
else if ((len = top_strcmp(kana, knj)) != 0) { *dst = (unsigned char)(ZenKataAsshuku | (len - 1));
*dst = (unsigned char)(ZenKataAssyuku | (len - 1));
} }
if (len) { if(len) {
knj += len * 2; knj += len * 2;
dst++; dst++;
} }
if (*knj) { if(*knj) {
for ( ; ; ) { for(;;) {
if ((len = last_strcmp(yomi, knj)) != 0) { if((len = last_strcmp(yomi, knj)) != 0) {
*dst++ = (unsigned char)(ZenHiraAssyuku | (len - 1)); *dst++ = (unsigned char)(ZenHiraAsshuku | (len - 1));
break; break;
} } else if((len = last_strcmp(kana, knj)) != 0) {
else if ((len = last_strcmp(kana, knj)) != 0) { *dst++ = (unsigned char)(ZenKataAsshuku | (len - 1));
*dst++ = (unsigned char)(ZenKataAssyuku | (len - 1));
break; break;
} } else if(*knj == SS2) {
else if (*knj == SS2) {
knj++; knj++;
*dst++ = (unsigned char)LeadingHankaku; *dst++ = (unsigned char)LeadingHankaku;
*dst++ = *knj++; *dst++ = *knj++;
} else if (*knj == SS3) { } else if(*knj == SS3) {
knj++;
*dst++ = (*knj & NormalKanjiMask);
knj++; knj++;
*dst++ = (*knj & NormalKanjiMask); knj++;
*dst++ = *knj++; *dst++ = *knj++;
} else if (*knj & 0x80) { } else if(*knj & 0x80) {
*dst++ = (*knj & NormalKanjiMask); knj++; *dst++ = (*knj & NormalKanjiMask);
*dst++ = (*knj & NormalKanjiMask); knj++; knj++;
} *dst++ = (*knj & NormalKanjiMask);
else { knj++;
} else {
*dst++ = (unsigned char)LeadingHankaku; *dst++ = (unsigned char)LeadingHankaku;
*dst++ = *knj++; *dst++ = *knj++;
} }
if (!*knj) { if(!*knj) {
break; break;
} }
} }
@ -259,32 +217,28 @@ cvtknj (unsigned char *yomi, unsigned char *knj, unsigned char *dst)
return (dst - keep); return (dst - keep);
} }
int srchkana(unsigned char** ptr, int* saml) {
unsigned char* p;
int int cmp;
srchkana (unsigned char **ptr, int *saml) int cnt = 0;
{ unsigned char same;
unsigned char *p; int flg = 0;
int cmp;
int cnt = 0;
unsigned char same;
int flg = 0;
same = 0; same = 0;
p = segtop(); p = segtop();
while (!segend(p)) { while(!segend(p)) {
if (flg == 0) { if(flg == 0) {
cmp = yomicmp(cnvstart, p, &same); cmp = yomicmp(cnvstart, p, &same);
if (cmp == OVER) break; if(cmp == OVER) break;
if (cmp == MATCH && *(cnvstart + same) == 0) { if(cmp == MATCH && *(cnvstart + same) == 0) {
*ptr = p; *ptr = p;
*saml = same; *saml = same;
flg = 1; flg = 1;
} }
} }
@ -292,99 +246,84 @@ srchkana (unsigned char **ptr, int *saml)
cnt++; cnt++;
} }
if (flg != 0) return cnt; if(flg != 0) return cnt;
*ptr = p; *ptr = p;
*saml = same; *saml = same;
return 0; return 0;
} }
int srchgram(unsigned char* ptr, unsigned char** dst, TypeGram hinshi) {
unsigned char* endp;
int int cnt = 0, nlen;
srchgram (unsigned char *ptr, unsigned char **dst, TypeGram hinsi) int flg = FALSE;
{
unsigned char *endp;
int cnt = 0, nlen;
int flg = FALSE;
endp = getntag(ptr); endp = getntag(ptr);
nlen = getnlen(ptr); nlen = getnlen(ptr);
ptr += DouonBlkSizeNumber + nlen; ptr += DouonBlkSizeNumber + nlen;
while (ptr < endp) { while(ptr < endp) {
if (*ptr == hinsi) { if(*ptr == hinshi) {
*dst = ptr; *dst = ptr;
flg = TRUE; flg = TRUE;
} }
do { do {
ptr += codesize(*ptr); ptr += codesize(*ptr);
} while (*ptr != HinsiBlkTerm); } while(*ptr != HinshiBlkTerm);
ptr++; ptr++;
cnt++; cnt++;
} }
if (flg) return cnt; if(flg) return cnt;
*dst = ptr; *dst = ptr;
return 0; return 0;
} }
int srchkanji(unsigned char** dst, unsigned char* knj, int klen) {
unsigned char* ptr;
int unsigned char *p, *q;
srchkanji (unsigned char **dst, unsigned char *knj, int klen) int len;
{ int flg = FALSE;
unsigned char *ptr; int cnt = 0;
unsigned char *p, *q;
int len;
int flg = FALSE;
int cnt = 0;
ptr = *dst + 1; ptr = *dst + 1;
while (*ptr != HinsiBlkTerm) { while(*ptr != HinshiBlkTerm) {
for (p = ptr, q = knj, len = klen ; len ; len--) for(p = ptr, q = knj, len = klen; len; len--)
if (*p++ != *q++) break; if(*p++ != *q++) break;
if (!len) { if(!len) {
*dst = ptr; *dst = ptr;
flg = TRUE; flg = TRUE;
} }
while (!(*ptr == KanjiStrEnd)) { while(!(*ptr == KanjiStrEnd)) {
ptr += codesize(*ptr); ptr += codesize(*ptr);
} }
ptr++; ptr++;
cnt++; cnt++;
} }
if (!flg) *dst = ptr; if(!flg) *dst = ptr;
return cnt; return cnt;
} }
TypeIdxOfs TypeIdxOfs
count_uidx (void) count_uidx(void) {
{ unsigned char* p;
unsigned char *p;
p = get_idxptr(curdict->segunit - 1); p = get_idxptr(curdict->segunit - 1);
while (*p++) ; while(*p++);
return (curdict->idxlen - (p - idxbuf)); return (curdict->idxlen - (p - idxbuf));
} }
void chg_uidx(TypeDicSeg seg, unsigned char* yomi, int len) {
unsigned char *p, *q;
void int olen;
chg_uidx (TypeDicSeg seg, unsigned char *yomi, int len)
{
unsigned char *p, *q;
int olen;
p = get_idxptr(seg); p = get_idxptr(seg);
@ -392,17 +331,15 @@ chg_uidx (TypeDicSeg seg, unsigned char *yomi, int len)
q = idxbuf + curdict->idxlen; q = idxbuf + curdict->idxlen;
if (len > olen) { if(len > olen) {
mvmemd(q - (len-olen), q, (int)(q - (len-olen) - p)); mvmemd(q - (len - olen), q, (int)(q - (len - olen) - p));
} } else {
else { mvmemi(p + (olen - len), p, (int)(q - (p + (olen - len))));
mvmemi(p + (olen-len), p, (int)(q - (p + (olen-len))));
} }
while (len--) *p++ = *yomi++; while(len--) *p++ = *yomi++;
(*curdict->putidx)(curdict, 0); (*curdict->putidx)(curdict, 0);
mkidxtbl(curdict); mkidxtbl(curdict);
} }

85
alloc.c
View file

@ -27,16 +27,6 @@
* *
*/ */
/*
* $SonyRCSfile: alloc.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:01:28 $
*
* $Id$
*/
#include <stdlib.h> #include <stdlib.h>
#include <sys/types.h> #include <sys/types.h>
#include "sj_rename.h" #include "sj_rename.h"
@ -46,64 +36,57 @@
#include "sj_struct.h" #include "sj_struct.h"
#include "kanakan.h" #include "kanakan.h"
#define JREC_NUM 128 #define JREC_NUM 128
#define CLREC_NUM 128 #define CLREC_NUM 128
static JREC *jrec = NULL; static JREC* jrec = NULL;
static CLREC *clrec = NULL; static CLREC* clrec = NULL;
JREC* JREC* alloc_jrec(void) {
alloc_jrec(void) JREC* p;
{ int i;
JREC *p;
int i;
if (jrec == NULL) { if(jrec == NULL) {
jrec = (JREC *)malloc(sizeof(JREC) * JREC_NUM); jrec = (JREC*)malloc(sizeof(JREC) * JREC_NUM);
if (jrec == NULL) return (JREC *)malloc(sizeof(JREC)); if(jrec == NULL) return (JREC*)malloc(sizeof(JREC));
for (i = 0, p = jrec ; i < JREC_NUM - 1 ; i++, p++) for(i = 0, p = jrec; i < JREC_NUM - 1; i++, p++)
p -> jsort = p + 1; p->jsort = p + 1;
p -> jsort = NULL; p->jsort = NULL;
} }
p = jrec; p = jrec;
jrec = jrec -> jsort; jrec = jrec->jsort;
return p; return p;
} }
void void free_jrec(JREC* p) {
free_jrec(JREC *p) if(p != NULL) {
{ p->jsort = jrec;
if (p != NULL) { jrec = p;
p -> jsort = jrec;
jrec = p;
} }
} }
CLREC* CLREC*
alloc_clrec(void) alloc_clrec(void) {
{ CLREC* p;
CLREC *p; int i;
int i;
if (clrec == NULL) { if(clrec == NULL) {
clrec = (CLREC *)malloc(sizeof(CLREC) * CLREC_NUM); clrec = (CLREC*)malloc(sizeof(CLREC) * CLREC_NUM);
if (clrec == NULL) return (CLREC *)malloc(sizeof(CLREC)); if(clrec == NULL) return (CLREC*)malloc(sizeof(CLREC));
for (i = 0, p = clrec ; i < CLREC_NUM - 1 ; i++, p++) for(i = 0, p = clrec; i < CLREC_NUM - 1; i++, p++)
p -> clsort = p + 1; p->clsort = p + 1;
p -> clsort = NULL; p->clsort = NULL;
} }
p = clrec; p = clrec;
clrec = clrec -> clsort; clrec = clrec->clsort;
return p; return p;
} }
void void free_clrec(CLREC* p) {
free_clrec(CLREC* p) if(p != NULL) {
{ p->clsort = clrec;
if (p != NULL) { clrec = p;
p -> clsort = clrec;
clrec = p;
} }
} }

298
char.c
View file

@ -27,7 +27,6 @@
* *
*/ */
#include <sys/types.h> #include <sys/types.h>
#include <stdio.h> #include <stdio.h>
@ -35,56 +34,56 @@
#include "sj_euc.h" #include "sj_euc.h"
#include "const.h" #include "const.h"
int cnvyomi(int code) {
unsigned short hh;
unsigned char high;
unsigned char low;
int hh = ((code >> 16) & 0xffff);
cnvyomi(int code)
{
unsigned short hh;
unsigned char high;
unsigned char low;
hh = ((code >> 16) & 0xffff);
high = ((code >> 8) & 0xff); high = ((code >> 8) & 0xff);
low = (code & 0xff); low = (code & 0xff);
if (!hh) { if(!hh) {
if (high == 0xa1) { if(high == 0xa1) {
switch (low) { switch(low) {
case 0xbc: return 1; case 0xbc:
case 0xf4: return 2; return 1;
case 0xf7: return 3; case 0xf4:
case 0xa7: return 4; return 2;
case 0xf7:
return 3;
case 0xa7:
return 4;
} }
} } else if(high == 0xa2) {
else if (high == 0xa2) { if(low == 0xa9)
if (low == 0xa9) return 4;
return 4; } else if(high == 0xa3) {
} if(low < 0xb0)
else if (high == 0xa3) { ;
if (low < 0xb0) else if(low <= 0xb9)
; return (low - 0xb0 + 0x10);
else if (low <= 0xb9) else if(low < 0xc0)
return(low - 0xb0 + 0x10); ;
else if (low < 0xc0) else if(low <= 0xda)
; return (low - 0xc1 + 0x1A);
else if (low <= 0xda) else if(low < 0xe1)
return(low - 0xc1 + 0x1A); ;
else if (low < 0xe1) else if(low <= 0xfa)
; return (low - 0xe1 + 0x34);
else if (low <= 0xfa) } else if(high == 0xa4) {
return(low - 0xe1 + 0x34); if(low < 0xa1)
} ;
else if (high == 0xa4) { else if(low <= 0xf3)
if (low < 0xa1) return (low - 0xa1 + 0x4e);
; } else if(high == 0xa5) {
else if (low <= 0xf3) switch(low) {
return(low - 0xa1 + 0x4e); case 0xf4:
} return 0xa1;
else if (high == 0xa5) { case 0xf5:
switch (low) { return 0xa2;
case 0xf4: return 0xa1; case 0xf6:
case 0xf5: return 0xa2; return 0xa3;
case 0xf6: return 0xa3;
} }
} }
} }
@ -92,23 +91,20 @@ cnvyomi(int code)
return 0; return 0;
} }
int h2kcode(int code) {
unsigned short hh;
unsigned char high;
unsigned char low;
int hh = ((code >> 16) & 0xffff);
h2kcode(int code)
{
unsigned short hh;
unsigned char high;
unsigned char low;
hh = ((code >> 16) & 0xffff);
high = ((code >> 8) & 0xff); high = ((code >> 8) & 0xff);
low = (code & 0xff); low = (code & 0xff);
if (!hh) { if(!hh) {
if (high != 0xa4) if(high != 0xa4)
return code; return code;
else else
return (code + 0x0100); return (code + 0x0100);
} }
/* XXX: what should we do if we reach here? /* XXX: what should we do if we reach here?
* XXX: I do not know if it is correct, but return 0 for now. * XXX: I do not know if it is correct, but return 0 for now.
@ -116,153 +112,155 @@ h2kcode(int code)
return (0); return (0);
} }
int codesize(unsigned char code) {
int switch(code & KanjiModeMask) {
codesize(unsigned char code) case ZenHiraAsshuku:
{ case ZenKataAsshuku:
switch (code&KanjiModeMask) { case KanjiAsshuku:
case ZenHiraAssyuku: case KanjiStrEnd:
case ZenKataAssyuku:
case KanjiAssyuku:
case KanjiStrEnd:
return 1; return 1;
case LeadingHankaku: case LeadingHankaku:
case OffsetAssyuku: case OffsetAsshuku:
case AiAttribute: case AiAttribute:
return 2; return 2;
default: default:
return 2; return 2;
} }
} }
void output_knj(FILE* fp, unsigned char* p, int l) {
void while(l > 0) {
output_knj(FILE* fp, unsigned char* p, int l) switch(*p & KanjiModeMask) {
{ case ZenHiraAsshuku:
while (l > 0) {
switch (*p & KanjiModeMask) {
case ZenHiraAssyuku:
fprintf(fp, "\244\322%d", (*p++ & 0x0f) + 1); fprintf(fp, "\244\322%d", (*p++ & 0x0f) + 1);
l--; l--;
break; break;
case ZenKataAssyuku: case ZenKataAsshuku:
fprintf(fp, "\245\253%d", (*p++ & 0x0f) + 1); fprintf(fp, "\245\253%d", (*p++ & 0x0f) + 1);
l--; l--;
break; break;
case KanjiAssyuku: case KanjiAsshuku:
fprintf(fp, "\260\265%1x", (*p++ & 0x0f)); fprintf(fp, "\260\265%1x", (*p++ & 0x0f));
l--; l--;
break; break;
case LeadingHankaku: case LeadingHankaku:
#ifndef UseHankakuInDict #ifndef UseHankakuInDict
l = 0; l = 0;
fprintf(stderr, "\244\252\244\253\244\267\244\244"); fprintf(stderr, "\244\252\244\253\244\267\244\244");
#else #else
fputc(*p++, fp); l--; fputc(*p++, fp);
fputc(*p++, fp); l--; l--;
fputc(*p++, fp);
l--;
#endif #endif
break; break;
case OffsetAssyuku: case OffsetAsshuku:
fprintf(fp, "ofs%1x", (*p++ & 0x0f)); fprintf(fp, "ofs%1x", (*p++ & 0x0f));
l--; l--;
fprintf(fp, "%02x", *p++); l--; fprintf(fp, "%02x", *p++);
l--;
break; break;
case AiAttribute: case AiAttribute:
fprintf(fp, "\302\260%1x", (*p++ & 0x0f)); fprintf(fp, "\302\260%1x", (*p++ & 0x0f));
l--; l--;
fprintf(fp, "%02x", *p++); l--; fprintf(fp, "%02x", *p++);
l--;
break; break;
case KanjiStrEnd: case KanjiStrEnd:
p++; l--; p++;
l--;
break; break;
default: default:
if (p[1] & 0x80) if(p[1] & 0x80)
fputc(SS3, fp); fputc(SS3, fp);
fputc((*p | 0x80), fp); l--; p++; fputc((*p | 0x80), fp);
fputc((*p | 0x80), fp); l--; p++; l--;
p++;
} fputc((*p | 0x80), fp);
l--;
p++;
}
} }
} }
void output_str(FILE* fp, char* p) {
void while(*p) {
output_str(FILE* fp, char* p) fputc(*p, fp);
{ p++;
while (*p) { fputc(*p, fp); p++; } }
} }
void output_int(FILE* fp, int* p) {
void while(*p) {
output_int(FILE* fp, int* p) if(*p < 0x100) {
{ fputc(*p, fp);
while (*p) { p++;
if (*p < 0x100) { } else if(*p < 0x10000) {
fputc(*p, fp); p++;
}
else if (*p < 0x10000) {
fputc((*p >> 8) & 0xff, fp); fputc((*p >> 8) & 0xff, fp);
fputc(*p & 0xff, fp); p++; fputc(*p & 0xff, fp);
} p++;
else if (*p < 0x1000000) { } else if(*p < 0x1000000) {
fputc((*p >> 16) & 0xff, fp); fputc((*p >> 16) & 0xff, fp);
fputc((*p >> 8) & 0xff, fp); fputc((*p >> 8) & 0xff, fp);
fputc(*p & 0xff, fp); p++; fputc(*p & 0xff, fp);
} p++;
else { } else {
fputc((*p >> 24) & 0xff, fp); fputc((*p >> 24) & 0xff, fp);
fputc((*p >> 16) & 0xff, fp); fputc((*p >> 16) & 0xff, fp);
fputc((*p >> 8) & 0xff, fp); fputc((*p >> 8) & 0xff, fp);
fputc(*p & 0xff, fp); p++; fputc(*p & 0xff, fp);
p++;
} }
} }
} }
static int static int
yomi2zen(int code) yomi2zen(int code) {
{ static char num[] = {
static char num[] = { '0', '1', '2', '3', '4', '5', '6', '7',
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
};
switch (code) { switch(code) {
case 0x01: return 0xa1bc; case 0x01:
case 0x02: return 0xa1f4; return 0xa1bc;
case 0x03: return 0xa1f7; case 0x02:
case 0x04: return 0xa2a9; return 0xa1f4;
case 0xa1: return 0xa5f4; case 0x03:
case 0xa2: return 0xa5f5; return 0xa1f7;
case 0xa3: return 0xa5f6; case 0x04:
default: break; return 0xa2a9;
case 0xa1:
return 0xa5f4;
case 0xa2:
return 0xa5f5;
case 0xa3:
return 0xa5f6;
default:
break;
} }
if (code < 0x10) if(code < 0x10)
; ;
else if (code < 0x1a) else if(code < 0x1a)
return(0xa300 + code - 0x10 + 0xb0); return (0xa300 + code - 0x10 + 0xb0);
else if (code < 0x34) else if(code < 0x34)
return(0xa300 + code - 0x1a + 0xc1); return (0xa300 + code - 0x1a + 0xc1);
else if (code < 0x4e) else if(code < 0x4e)
return(0xa300 + code - 0x34 + 0xe1); return (0xa300 + code - 0x34 + 0xe1);
else if (code < 0xa1) else if(code < 0xa1)
return(0xa400 + code - 0x4e + 0xa1); return (0xa400 + code - 0x4e + 0xa1);
return ((num[(code >> 4) & 0x0f] << 8) | num[code & 0x0f]); return ((num[(code >> 4) & 0x0f] << 8) | num[code & 0x0f]);
} }
void output_yomi(FILE* fp, unsigned char* p) {
int i;
void while(*p) {
output_yomi(FILE* fp, unsigned char* p)
{
int i;
while (*p) {
i = yomi2zen(*p++); i = yomi2zen(*p++);
fputc((i >> 8) & 0xff, fp); fputc((i >> 8) & 0xff, fp);
fputc(i & 0xff, fp); fputc(i & 0xff, fp);

View file

@ -27,36 +27,24 @@
* *
*/ */
/*
* $SonyRCSfile: charsize.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:01:29 $
*
* $Id$
*/
#include "sj_euc.h" #include "sj_euc.h"
#include "sj_rename.h" #include "sj_rename.h"
#include "sj_typedef.h" #include "sj_typedef.h"
#include "sj_dict.h" #include "sj_dict.h"
#include "kanakan.h" #include "kanakan.h"
int int codesize(unsigned char code) {
codesize(unsigned char code) switch(code & KanjiModeMask) {
{ case ZenHiraAsshuku:
switch (code & KanjiModeMask) { case ZenKataAsshuku:
case ZenHiraAssyuku: case KanjiAsshuku:
case ZenKataAssyuku: case KanjiStrEnd:
case KanjiAssyuku:
case KanjiStrEnd:
return 1; return 1;
case LeadingHankaku: case LeadingHankaku:
case OffsetAssyuku: case OffsetAsshuku:
case AiAttribute: case AiAttribute:
return 2;
default:
return 2; return 2;
default:
return 2;
} }
} }

View file

@ -27,23 +27,12 @@
* *
*/ */
/*
* $SonyRCSfile: chrtbl.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:01:30 $
*/
#include "const.h" #include "const.h"
#include "sj_rename.h" #include "sj_rename.h"
#include "sj_typedef.h" #include "sj_typedef.h"
unsigned char chrtbl[256] =
{
unsigned char chrtbl[256] =
{
0, 0,
FZKTOP, FZKTOP,
DICTOP + TAI_KGU, DICTOP + TAI_KGU,
@ -299,5 +288,4 @@ unsigned char chrtbl[256] =
TAI_KGU, TAI_KGU,
TAI_KGU, TAI_KGU,
TAI_KGU, TAI_KGU,
0 0};
};

139
cl2knj.c
View file

@ -27,46 +27,33 @@
* *
*/ */
/*
* $SonyRCSfile: cl2knj.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:01:31 $
*
* $Id$
*/
#include <string.h> #include <string.h>
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "kanakan.h" #include "kanakan.h"
int sj2cd_chr();
int sj2cd_chr(); void cvtclknj(), freework();
void cvtclknj(), freework();
static CLREC* nextrecblk(void); static CLREC* nextrecblk(void);
static CLREC* prevrecblk(void); static CLREC* prevrecblk(void);
static void initkbuf(unsigned char* kouho); static void initkbuf(unsigned char* kouho);
int cl2knj(unsigned char* yomi, int len, unsigned char* kouho) {
int unsigned char* ptr1;
cl2knj(unsigned char* yomi, int len, unsigned char* kouho) unsigned char* ptr2;
{ int i;
unsigned char *ptr1;
unsigned char *ptr2;
int i;
khcount = nkhcount = 0; khcount = nkhcount = 0;
initkbuf(kouho); initkbuf(kouho);
if (len > MaxClInputLen * 2) len = MaxClInputLen * 2; if(len > MaxClInputLen * 2) len = MaxClInputLen * 2;
ptr1 = yomi; ptr2 = hyomi; ptr1 = yomi;
for (i = 0 ; i < len ; i++) { ptr2 = hyomi;
if (isknj1(*ptr1)) { for(i = 0; i < len; i++) {
if (++i >= len) break; if(isknj1(*ptr1)) {
if(++i >= len) break;
} }
ptr1 += sj2cd_chr(ptr1, ptr2++); ptr1 += sj2cd_chr(ptr1, ptr2++);
} }
@ -74,17 +61,17 @@ cl2knj(unsigned char* yomi, int len, unsigned char* kouho)
strlcpy(yomi, orgyomi, (int)(ptr1 - yomi)); strlcpy(yomi, orgyomi, (int)(ptr1 - yomi));
if (!hyomi[0]) return 0; if(!hyomi[0]) return 0;
freework(); freework();
inputyomi = orgyomi; inputyomi = orgyomi;
cnvstart = ystart = hyomi; cnvstart = ystart = hyomi;
cnvlen = strlen(hyomi); cnvlen = strlen(hyomi);
mkjiritu(0); mkjiritsu(0);
mkbunsetu(); mkbunsetsu();
if (!maxclptr) wakachi(); if(!maxclptr) wakachi();
jrt1st = maxjptr; jrt1st = maxjptr;
clt1st = maxclptr; clt1st = maxclptr;
@ -96,120 +83,100 @@ cl2knj(unsigned char* yomi, int len, unsigned char* kouho)
cvtclknj(); cvtclknj();
return hzstrlen(inputyomi, (int)clt1st -> cllen); return hzstrlen(inputyomi, (int)clt1st->cllen);
} }
int nextcl(unsigned char* kouho, int mode) {
CLREC* clptr;
int
nextcl(unsigned char* kouho, int mode)
{
CLREC *clptr;
initkbuf(kouho); initkbuf(kouho);
if (!khcount) return 0; if(!khcount) return 0;
if (!mode && (selectid < khcount)) { if(!mode && (selectid < khcount)) {
selectid++; selectid++;
} } else if((mode < 2) && (clptr = nextrecblk())) {
else if((mode < 2) && (clptr = nextrecblk())) {
selectid = 1; selectid = 1;
clt1st = clptr; clt1st = clptr;
mkkouho(); mkkouho();
getrank(); getrank();
} } else {
else {
cvtclknj(); cvtclknj();
return 0; return 0;
} }
cvtclknj(); cvtclknj();
return hzstrlen(inputyomi, (int)clt1st -> cllen); return hzstrlen(inputyomi, (int)clt1st->cllen);
} }
static CLREC* static CLREC*
nextrecblk(void) nextrecblk(void) {
{ CLREC* clptr;
CLREC *clptr; int keeplen;
int keeplen;
keeplen = clt1st -> cllen; keeplen = clt1st->cllen;
clptr = clt1st -> clsort; clptr = clt1st->clsort;
while (clptr && (int)clptr -> cllen == keeplen) while(clptr && (int)clptr->cllen == keeplen)
clptr = clptr -> clsort; clptr = clptr->clsort;
return clptr; return clptr;
} }
int prevcl(unsigned char* kouho, int mode) {
int CLREC* clptr;
prevcl(unsigned char* kouho, int mode)
{
CLREC *clptr;
initkbuf(kouho); initkbuf(kouho);
if (!khcount) return 0; if(!khcount) return 0;
if (!mode && (selectid > 1)) { if(!mode && (selectid > 1)) {
selectid--; selectid--;
} } else if((mode < 2) && (clptr = prevrecblk())) {
else if ((mode < 2) && (clptr = prevrecblk())) {
clt1st = clptr; clt1st = clptr;
mkkouho(); mkkouho();
getrank(); getrank();
selectid = khcount; selectid = khcount;
} } else {
else {
cvtclknj(); cvtclknj();
return 0; return 0;
} }
cvtclknj(); cvtclknj();
return hzstrlen(inputyomi, (int)clt1st -> cllen); return hzstrlen(inputyomi, (int)clt1st->cllen);
} }
static CLREC* static CLREC*
prevrecblk(void) prevrecblk(void) {
{ CLREC* clptr;
CLREC *clptr; CLREC* keepptr;
CLREC *keepptr; int keeplen;
int keeplen; int cllen;
int cllen;
clptr = maxclptr; clptr = maxclptr;
if ((cllen = clt1st -> cllen) == clptr -> cllen) if((cllen = clt1st->cllen) == clptr->cllen)
return NULL; return NULL;
while ((int)clptr -> cllen > cllen) { while((int)clptr->cllen > cllen) {
keeplen = clptr -> cllen; keeplen = clptr->cllen;
keepptr = clptr; keepptr = clptr;
while ((int)clptr -> cllen == keeplen) while((int)clptr->cllen == keeplen)
clptr = clptr -> clsort; clptr = clptr->clsort;
} }
return keepptr; return keepptr;
} }
static void static void
initkbuf(unsigned char* kouho) initkbuf(unsigned char* kouho) {
{
kanjitmp = kouho; kanjitmp = kouho;
memset(kanjitmp, 0, sizeof(STDYOUT) + 1); memset(kanjitmp, 0, sizeof(STDYOUT) + 1);
} }
int selectnum(void) {
int
selectnum(void)
{
return selectid; return selectid;
} }

183
clstudy.c
View file

@ -27,89 +27,73 @@
* *
*/ */
/*
* $SonyRCSfile: clstudy.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:01:32 $
*
* $Id$
*/
#include <string.h> #include <string.h>
#include <sys/types.h> #include <sys/types.h>
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "kanakan.h" #include "kanakan.h"
int sj2cd_str();
int sj2cd_str(); void mvmemd(), mvmemi();
void mvmemd(), mvmemi();
static unsigned char* delcldata(unsigned char* ycode); static unsigned char* delcldata(unsigned char* ycode);
static int delclold(void); static int delclold(void);
static unsigned char* srchclpos(unsigned char* ycode); static unsigned char* srchclpos(unsigned char* ycode);
int clstudy(unsigned char* yomi1, unsigned char* yomi2, STDYOUT* stdy) {
unsigned char ytmp[CLSTDY_TMPLEN];
unsigned char *dst, *ptr;
int ret;
int len1, len2;
int alen, blen;
int i;
int if(!StudyExist()) return ClstudyNoDict;
clstudy(unsigned char* yomi1, unsigned char* yomi2, STDYOUT *stdy)
{
unsigned char ytmp[CLSTDY_TMPLEN];
unsigned char *dst, *ptr;
int ret;
int len1, len2;
int alen, blen;
int i;
if (!StudyExist()) return ClstudyNoDict; if(!yomi1 || !*yomi1) return ClstudyParaErr;
if (!yomi1 || !*yomi1) return ClstudyParaErr; if(!yomi2 || !*yomi2) {
if(!sj2cd_str(yomi1, ytmp, CLSTDY_TMPLEN))
if (!yomi2 || !*yomi2) {
if (!sj2cd_str(yomi1, ytmp, CLSTDY_TMPLEN))
return ClstudyYomiErr; return ClstudyYomiErr;
(void)delcldata(ytmp); (void)delcldata(ytmp);
ret = ClstudyNormEnd; ret = ClstudyNormEnd;
} } else if(!stdy) {
else if (!stdy) {
return ClstudyParaErr; return ClstudyParaErr;
} } else {
else { if(!sj2cd_str(yomi1, ytmp, CLSTDY_TMPLEN))
if (!sj2cd_str(yomi1, ytmp, CLSTDY_TMPLEN))
return ClstudyYomiErr; return ClstudyYomiErr;
len1 = strlen(ytmp); len1 = strlen(ytmp);
if (!sj2cd_str(yomi2, ytmp + len1, CLSTDY_TMPLEN - len1)) if(!sj2cd_str(yomi2, ytmp + len1, CLSTDY_TMPLEN - len1))
return ClstudyYomiErr; return ClstudyYomiErr;
len2 = len1 + stdy -> len; len2 = len1 + stdy->len;
ytmp[len2] = 0; ytmp[len2] = 0;
alen = len2 + CL_HDLEN; alen = len2 + CL_HDLEN;
if (alen + 1 >= ClStudyLen) return ClstudyNoArea; if(alen + 1 >= ClStudyLen) return ClstudyNoArea;
blen = ClStudyTail - delcldata(ytmp) - 1; blen = ClStudyTail - delcldata(ytmp) - 1;
while (blen < alen) { while(blen < alen) {
if (!(i = delclold())) break; if(!(i = delclold())) break;
blen += i; blen += i;
} }
if (blen >= alen) { if(blen >= alen) {
dst = srchclpos(ytmp); dst = srchclpos(ytmp);
ptr = ClStudyTail - alen; ptr = ClStudyTail - alen;
mvmemd(ptr, ClStudyTail, (ptr - dst)); mvmemd(ptr, ClStudyTail, (ptr - dst));
ClYomiLen(dst) = (unsigned char)len2; ClYomiLen(dst) = (unsigned char)len2;
ClGramCode(dst) = stdy -> hinshi; ClGramCode(dst) = stdy->hinshi;
ClYomi1Len(dst) = (unsigned char)len1; ClYomi1Len(dst) = (unsigned char)len1;
ClSetNum(dst, 1); ClSetNum(dst, 1);
memcpy(ytmp, ClYomiPos(dst), len2); memcpy(ytmp, ClYomiPos(dst), len2);
ret = ClstudyNormEnd; ret = ClstudyNormEnd;
} } else {
else {
ret = ClstudyNoArea; ret = ClstudyNoArea;
} }
} }
@ -120,32 +104,29 @@ clstudy(unsigned char* yomi1, unsigned char* yomi2, STDYOUT *stdy)
return ret; return ret;
} }
static unsigned char* static unsigned char*
delcldata(unsigned char* ycode) delcldata(unsigned char* ycode) {
{ unsigned char* tagptr;
unsigned char *tagptr; unsigned char* ptr1;
unsigned char *ptr1; unsigned char* ptr2;
unsigned char *ptr2; int len1;
int len1;
tagptr = ClStudyDict; tagptr = ClStudyDict;
while (!iseocl(tagptr)) { while(!iseocl(tagptr)) {
ptr1 = ycode; ptr1 = ycode;
ptr2 = ClYomiPos(tagptr); ptr2 = ClYomiPos(tagptr);
len1 = ClYomiLen(tagptr); len1 = ClYomiLen(tagptr);
while (*ptr1 && len1) { while(*ptr1 && len1) {
if (*ptr1 != *ptr2) break; if(*ptr1 != *ptr2) break;
ptr1++; ptr1++;
ptr2++; ptr2++;
len1--; len1--;
} }
if (!*ptr1 || !len1) { if(!*ptr1 || !len1) {
delclsub(tagptr); delclsub(tagptr);
} } else {
else {
tagptr = ClNextTag(tagptr); tagptr = ClNextTag(tagptr);
} }
} }
@ -153,14 +134,11 @@ delcldata(unsigned char* ycode)
return tagptr; return tagptr;
} }
void delclsub(unsigned char* target) {
void unsigned char* src;
delclsub(unsigned char* target) int num;
{ int tmp;
unsigned char *src; int len;
int num;
int tmp;
int len;
num = ClGetNum(target); num = ClGetNum(target);
len = ClBlkLen(target); len = ClBlkLen(target);
@ -169,10 +147,10 @@ delclsub(unsigned char* target)
memset(ClStudyTail - len, 0, len); memset(ClStudyTail - len, 0, len);
src = ClStudyDict; src = ClStudyDict;
while (!iseocl(src)) { while(!iseocl(src)) {
tmp = ClGetNum(src); tmp = ClGetNum(src);
if (tmp > num) { if(tmp > num) {
tmp -= 1; tmp -= 1;
ClSetNum(src, tmp); ClSetNum(src, tmp);
} }
@ -181,32 +159,30 @@ delclsub(unsigned char* target)
} }
} }
static int static int
delclold(void) delclold(void) {
{ unsigned char* tagptr;
unsigned char *tagptr; unsigned char* target;
unsigned char *target; int num;
int num; int tmp;
int tmp;
target = NULL; target = NULL;
num = 0; num = 0;
tagptr = ClStudyDict; tagptr = ClStudyDict;
while (!iseocl(tagptr)) { while(!iseocl(tagptr)) {
tmp = ClGetNum(tagptr); tmp = ClGetNum(tagptr);
if (tmp >= num) { if(tmp >= num) {
num = tmp; num = tmp;
target = tagptr; target = tagptr;
} }
tagptr = ClNextTag(tagptr); tagptr = ClNextTag(tagptr);
} }
if (target) { if(target) {
num = ClBlkLen(tagptr); num = ClBlkLen(tagptr);
delclsub(target); delclsub(target);
@ -215,20 +191,18 @@ delclold(void)
return num; return num;
} }
static unsigned char* static unsigned char*
srchclpos(unsigned char* ycode) srchclpos(unsigned char* ycode) {
{ unsigned char* tagptr;
unsigned char *tagptr; unsigned char* target;
unsigned char *target; unsigned char* ptr1;
unsigned char *ptr1; unsigned char* ptr2;
unsigned char *ptr2; int len;
int len; int tmp;
int tmp;
target = NULL; target = NULL;
tagptr = ClStudyDict; tagptr = ClStudyDict;
while (!iseocl(tagptr)) { while(!iseocl(tagptr)) {
tmp = ClGetNum(tagptr); tmp = ClGetNum(tagptr);
tmp++; tmp++;
@ -237,19 +211,19 @@ srchclpos(unsigned char* ycode)
ptr1 = ycode; ptr1 = ycode;
ptr2 = ClYomiPos(tagptr); ptr2 = ClYomiPos(tagptr);
len = ClYomiLen(tagptr); len = ClYomiLen(tagptr);
while (*ptr1 && len) { while(*ptr1 && len) {
if (*ptr1 != *ptr2) break; if(*ptr1 != *ptr2) break;
ptr1++; ptr1++;
ptr2++; ptr2++;
len--; len--;
} }
if (!target) { if(!target) {
if (!len) if(!len)
; ;
else if (!*ptr1) else if(!*ptr1)
target = tagptr; target = tagptr;
else if (*ptr1 < *ptr2) else if(*ptr1 < *ptr2)
target = tagptr; target = tagptr;
} }
@ -259,26 +233,23 @@ srchclpos(unsigned char* ycode)
return target ? target : tagptr; return target ? target : tagptr;
} }
void mkclidx(void) {
unsigned char* ptr;
int num;
int st, ed;
void if(!StudyExist()) return;
mkclidx(void)
{
unsigned char *ptr;
int num;
int st, ed;
if (!StudyExist()) return;
ptr = ClStudyDict; ptr = ClStudyDict;
for (num = st = 0 ; st < 0x100 ; num++, st = ed) { for(num = st = 0; st < 0x100; num++, st = ed) {
ed = st + ClStudyStep; ed = st + ClStudyStep;
while (!iseocl(ptr)) { while(!iseocl(ptr)) {
if ((unsigned int) *ClYomiPos(ptr) >= st) break; if((unsigned int)*ClYomiPos(ptr) >= st) break;
ptr = ClNextTag(ptr); ptr = ClNextTag(ptr);
} }
if (ClYomiLen(ptr) && ((int)*ClYomiPos(ptr) < ed)) if(ClYomiLen(ptr) && ((int)*ClYomiPos(ptr) < ed))
ClStudyIdx[num] = ptr - ClStudyDict; ClStudyIdx[num] = ptr - ClStudyDict;
else else
ClStudyIdx[num] = (unsigned short)-1; ClStudyIdx[num] = (unsigned short)-1;

View file

@ -27,31 +27,21 @@
* *
*/ */
/*
* $SonyRCSfile: cmpstr.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:01:32 $
*/
#include "sj_rename.h" #include "sj_rename.h"
#include "const.h" #include "const.h"
#include "sj_typedef.h" #include "sj_typedef.h"
int cmpstr(src, dst) int cmpstr(src, dst)
unsigned char *src; unsigned char* src;
unsigned char *dst; unsigned char* dst;
{ {
while (*src) { while(*src) {
if (*src != *dst) return FALSE; if(*src != *dst) return FALSE;
src++; src++;
dst++; dst++;
} }
if (*dst) return FALSE; if(*dst) return FALSE;
return TRUE; return TRUE;
} }

View file

@ -27,90 +27,70 @@
* *
*/ */
/*
* $SonyRCSfile: cnvhinsi.c,v $
* $SonyRevision: 1.2 $
* $SonyDate: 1996/05/27 06:59:47 $
*/
#include <stdio.h> #include <stdio.h>
#include <sys/types.h> #include <sys/types.h>
#include "dicttool.h" #include "dicttool.h"
struct gram_code { struct gram_code {
char *name; char* name;
int code; int code;
} gramtbl[] = { } gramtbl[] = {
#include "GramTable" #include "GramTable"
}; };
#define GramMax (sizeof(gramtbl)/sizeof(struct gram_code) - 1) #define GramMax (sizeof(gramtbl) / sizeof(struct gram_code) - 1)
int int u_strcmp(unsigned char* a, unsigned char* b) {
u_strcmp(unsigned char* a, unsigned char* b) if(!a || !b) return 0;
{
if (!a || !b) return 0;
while (*a && *b) { while(*a && *b) {
if (*a < *b) return -1; if(*a < *b) return -1;
if (*a > *b) return 1; if(*a > *b) return 1;
a++; a++;
b++; b++;
} }
if (!*a && !*b) return 0; if(!*a && !*b) return 0;
if (!*a) return -1; if(!*a) return -1;
return 1; return 1;
} }
int cnvhinshi(unsigned char* buf) {
int int min;
cnvhinsi(unsigned char *buf) int max;
{ int mid;
int min; int i;
int max;
int mid;
int i;
min = 0; min = 0;
max = GramMax; max = GramMax;
while (min <= max) { while(min <= max) {
mid = (min + max) / 2; mid = (min + max) / 2;
i = u_strcmp(buf, gramtbl[mid].name); i = u_strcmp(buf, gramtbl[mid].name);
if(i < 0) {
if (i < 0) {
max = mid - 1; max = mid - 1;
} }
else if (i > 0) { else if(i > 0) {
min = mid + 1; min = mid + 1;
} }
else { else {
return(gramtbl[mid].code); return (gramtbl[mid].code);
} }
} }
return 0; return 0;
} }
char* hinshi_str(int code) {
int i;
for(i = 0; i <= GramMax; i++) {
char* if(gramtbl[i].code == code) return gramtbl[i].name;
hinsi_str(int code)
{
int i;
for (i = 0 ; i <= GramMax ; i++) {
if (gramtbl[i].code == code) return gramtbl[i].name;
} }
return "Err"; return "Err";

216
code.c
View file

@ -27,14 +27,6 @@
* *
*/ */
/*
* $SonyRCSfile: code.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:03:09 $
*/
#include "sj_sysvdef.h" #include "sj_sysvdef.h"
#include "wchar16.h" #include "wchar16.h"
#include "kctype.h" #include "kctype.h"
@ -46,41 +38,41 @@
#include "rk.h" #include "rk.h"
static unsigned char cbuf[5]; static unsigned char cbuf[5];
static int cur_code = CODE_EUC; static int cur_code = CODE_EUC;
extern int current_locale; extern int current_locale;
static int ccnt = 0; static int ccnt = 0;
codeconv(c, rkstr) codeconv(c, rkstr)
wchar16_t c; wchar16_t c;
unsigned int *rkstr; unsigned int* rkstr;
{ {
unsigned short ccode, i; unsigned short ccode, i;
unsigned short CheckCcode(); unsigned short CheckCcode();
extern int erase_char; extern int erase_char;
if (c == erase_char) { if(c == erase_char) {
if (ccnt) { if(ccnt) {
ccnt--; ccnt--;
*rkstr++ = erase_char + ERRCODE; *rkstr++ = erase_char + ERRCODE;
} else { } else {
*rkstr++ = erase_char; *rkstr++ = erase_char;
} }
} else if (iswcntrl(c) || (WcIsKANJI(c) && ccnt == 0)) { } else if(iswcntrl(c) || (WcIsKANJI(c) && ccnt == 0)) {
*rkstr++ = c; *rkstr++ = c;
if (iswcntrl(c)) if(iswcntrl(c))
ccnt = 0; ccnt = 0;
} else if ((ccode = CheckCcode(c)) > 0) { } else if((ccode = CheckCcode(c)) > 0) {
if (ccnt == 4) { if(ccnt == 4) {
if ((cur_code != CODE_EUC) || (cur_code != CODE_EUC2)) { if((cur_code != CODE_EUC) || (cur_code != CODE_EUC2)) {
if ((cur_code == CODE_KUTEN) || (cur_code == CODE_KUTEN2)) if((cur_code == CODE_KUTEN) || (cur_code == CODE_KUTEN2))
ccode += 0x2020; ccode += 0x2020;
ccode = jis2euc(ccode & 0x7f7f); ccode = jis2euc(ccode & 0x7f7f);
} }
if ((cur_code == CODE_KUTEN2) || if((cur_code == CODE_KUTEN2) ||
(cur_code == CODE_JIS2) || (cur_code == CODE_EUC2)) (cur_code == CODE_JIS2) || (cur_code == CODE_EUC2))
ccode &= WcX0212MASK; ccode &= WcX0212MASK;
ccnt--; ccnt--;
for (; ccnt > 0; ccnt--) for(; ccnt > 0; ccnt--)
*rkstr++ = erase_char + ERRCODE; *rkstr++ = erase_char + ERRCODE;
*rkstr++ = SetMojilen(4) + ccode; *rkstr++ = SetMojilen(4) + ccode;
} else } else
@ -91,104 +83,101 @@ unsigned int *rkstr;
} }
unsigned short unsigned short
CheckCcode (c) CheckCcode(c)
wchar16_t c; wchar16_t c;
{ {
unsigned char c1; unsigned char c1;
unsigned short code; unsigned short code;
if (!WcIsASCII(c) || !isxdigit(WcLowByte(c)) || if(!WcIsASCII(c) || !isxdigit(WcLowByte(c)) ||
(cur_code == CODE_KUTEN && !isdigit(WcLowByte(c)))) (cur_code == CODE_KUTEN && !isdigit(WcLowByte(c))))
return(0); return (0);
cbuf[ccnt] = WcLowByte(c); cbuf[ccnt] = WcLowByte(c);
cbuf[ccnt + 1] = '\0'; cbuf[ccnt + 1] = '\0';
if ((cur_code == CODE_KUTEN) || (cur_code == CODE_KUTEN2)) { if((cur_code == CODE_KUTEN) || (cur_code == CODE_KUTEN2)) {
if (ccnt % 2) { if(ccnt % 2) {
code = (cbuf[ccnt-1] - '0') * 10 + cbuf[ccnt] - '0'; code = (cbuf[ccnt - 1] - '0') * 10 + cbuf[ccnt] - '0';
if (code < 1 || code > 94) if(code < 1 || code > 94)
return(0); return (0);
if (ccnt >= 3) if(ccnt >= 3)
code += ((cbuf[0]-'0') * 10 + cbuf[1]-'0') << 8; code += ((cbuf[0] - '0') * 10 + cbuf[1] - '0') << 8;
} else } else
code = 1; code = 1;
} else { } else {
code = (unsigned short)strtol((char *)cbuf, (char **)NULL, 16); code = (unsigned short)strtol((char*)cbuf, (char**)NULL, 16);
if (ccnt % 2) if(ccnt % 2)
c1 = code & 0xff; c1 = code & 0xff;
else else
c1 = code & 0xf; c1 = code & 0xf;
switch(cur_code) { switch(cur_code) {
case CODE_SJIS: case CODE_SJIS:
if (ccnt == 0 && (c1 == 8 || c1 == 9 || c1 >= 0xe)) if(ccnt == 0 && (c1 == 8 || c1 == 9 || c1 >= 0xe))
break; break;
if (ccnt == 1 && issjis1(c1)) if(ccnt == 1 && issjis1(c1))
break; break;
if (ccnt == 2 && c1 >= 4) if(ccnt == 2 && c1 >= 4)
break; break;
if (ccnt == 3 && issjis2(c1)) if(ccnt == 3 && issjis2(c1))
break; break;
return(0); return (0);
case CODE_EUC: case CODE_EUC:
case CODE_EUC2: case CODE_EUC2:
if (ccnt % 2 && iseuc(c1)) if(ccnt % 2 && iseuc(c1))
break; break;
if (!(ccnt % 2) && (c1 >= 0xa && c1 <= 0xf)) if(!(ccnt % 2) && (c1 >= 0xa && c1 <= 0xf))
break; break;
return(0); return (0);
case CODE_JIS: case CODE_JIS:
case CODE_JIS2: case CODE_JIS2:
if (ccnt % 2 && isjjis(c1)) if(ccnt % 2 && isjjis(c1))
break; break;
if (!(ccnt % 2) && (c1 >= 2 && c1 <= 7)) if(!(ccnt % 2) && (c1 >= 2 && c1 <= 7))
break; break;
return(0); return (0);
}
} }
} ccnt++;
ccnt++; return (code);
return(code);
} }
unsigned short unsigned short
strtocode() strtocode() {
{ int c;
int c; unsigned short code;
unsigned short code;
while (ccnt < 4) { while(ccnt < 4) {
c = inkey(); c = inkey();
if (AnotherConversion ()) { if(AnotherConversion()) {
unget_key(c); unget_key(c);
ccnt = 0; ccnt = 0;
return(-1); return (-1);
} }
if ((code = CheckCcode(c)) == 0) { if((code = CheckCcode(c)) == 0) {
ccnt = 0; ccnt = 0;
beep(); beep();
return(0); return (0);
} }
} }
ccnt = 0; ccnt = 0;
switch (cur_code) { switch(cur_code) {
case CODE_SJIS : case CODE_SJIS:
return(sjis2jis(code)); return (sjis2jis(code));
case CODE_KUTEN : case CODE_KUTEN:
case CODE_KUTEN2: case CODE_KUTEN2:
return(code + 0x2020); return (code + 0x2020);
default : default:
return(code & 0x7f7f); return (code & 0x7f7f);
} }
} }
void void ChangeCode(void) {
ChangeCode (void) if(cur_code == CODE_KUTEN2)
{
if (cur_code == CODE_KUTEN2)
cur_code = CODE_SJIS; cur_code = CODE_SJIS;
else { else {
if (current_locale == LC_CTYPE_SHIFTJIS) { if(current_locale == LC_CTYPE_SHIFTJIS) {
if( cur_code == CODE_KUTEN) { if(cur_code == CODE_KUTEN) {
cur_code = CODE_SJIS; cur_code = CODE_SJIS;
return; return;
} }
if(cur_code == CODE_SJIS) { if(cur_code == CODE_SJIS) {
@ -197,18 +186,15 @@ ChangeCode (void)
cur_code += 2; cur_code += 2;
} }
} else } else
cur_code++; cur_code++;
} }
} }
SetCode(code) SetCode(code) int code;
int code;
{ {
cur_code = code; cur_code = code;
} }
GetCcode() GetCcode() {
{ return (cur_code);
return(cur_code);
} }

105
codecnv.c
View file

@ -27,14 +27,6 @@
* *
*/ */
/*
* $SonyRCSfile: codecnv.c,v $
* $SonyRevision: 1.3 $
* $SonyDate: 1997/01/23 11:26:31 $
*/
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>
#include <ctype.h> #include <ctype.h>
@ -42,69 +34,62 @@
#include "sjctype.h" #include "sjctype.h"
#include "sjtool.h" #include "sjtool.h"
static int euc_mode; static int euc_mode;
int int init_code() {
init_code() char* loc;
{
char *loc;
#ifdef LACKOF_SETLOCALE #ifdef LACKOF_SETLOCALE
loc = getenv("LANG"); loc = getenv("LANG");
#else #else
loc = setlocale(LC_CTYPE, ""); loc = setlocale(LC_CTYPE, "");
#endif #endif
if (!loc) { if(!loc) {
fprintf(stderr, "Error: can't get current locale\n"); fprintf(stderr, "Error: can't get current locale\n");
exit(1); exit(1);
} }
if (strncmp(loc, "ja_JP.SJIS", 10) == 0) { if(strncmp(loc, "ja_JP.SJIS", 10) == 0) {
euc_mode = 0; euc_mode = 0;
} else if (strncmp(loc, "ja", 2) == 0 || } else if(strncmp(loc, "ja", 2) == 0 ||
strncmp(loc, "Ja", 2) == 0) { strncmp(loc, "Ja", 2) == 0) {
euc_mode = -1; euc_mode = -1;
} else } else
#ifdef __sony_news #ifdef __sony_news
return 0; return 0;
#else #else
{ {
fprintf(stderr, "Warrning: In this locale japanese will not be used.\n"); fprintf(stderr, "Warrning: In this locale japanese will not be used.\n");
euc_mode = -1; euc_mode = -1;
} }
#endif #endif
return 1; return 1;
} }
void void
cnvcode(s) cnvcode(s) unsigned char* s;
unsigned char *s;
{ {
if (euc_mode) { if(euc_mode) {
unsigned short i; unsigned short i;
unsigned char *d = s; unsigned char* d = s;
while ((i = *s++)) { while((i = *s++)) {
if (iseuckana(i)) { if(iseuckana(i)) {
if (*s) { if(*s) {
*d++ = *s++; *d++ = *s++;
} } else {
else {
*d++ = i; *d++ = i;
break; break;
} }
} } else if(iseuc(i)) {
else if (iseuc(i)) { if(*s) {
if (*s) { i = euc2sjis((i << 8) + *s++);
i = euc2sjis((i << 8) + *s++);
*d++ = (i >> 8); *d++ = (i >> 8);
*d++ = i; *d++ = i;
} } else {
else {
*d++ = i; *d++ = i;
break; break;
} }
} } else {
else {
*d++ = i; *d++ = i;
} }
} }
@ -113,46 +98,44 @@ unsigned char *s;
} }
void void
printout_mb(fp, s) printout_mb(fp, s)
FILE *fp; FILE* fp;
unsigned char *s; unsigned char* s;
{ {
fputs((char *)s, fp); fputs((char*)s, fp);
fflush(fp); fflush(fp);
} }
void void
printout(fp, s) printout(fp, s)
FILE *fp; FILE* fp;
unsigned char *s; unsigned char* s;
{ {
unsigned char buf[BUFSIZ]; unsigned char buf[BUFSIZ];
if (euc_mode) if(euc_mode)
strcpy((char *)buf, s); strcpy((char*)buf, s);
else else
euctosjis(buf, BUFSIZ, s, strlen(s)+1); euctosjis(buf, BUFSIZ, s, strlen(s) + 1);
fputs((char *)buf, fp); fputs((char*)buf, fp);
fflush(fp); fflush(fp);
} }
void void
normal_out(fmt, p1, p2, p3, p4, p5) normal_out(fmt, p1, p2, p3, p4, p5) char* fmt;
char *fmt; int p1, p2, p3, p4, p5;
int p1, p2, p3, p4, p5;
{ {
char buf[BUFSIZ]; char buf[BUFSIZ];
sprintf(buf, fmt, p1, p2, p3, p4, p5); sprintf(buf, fmt, p1, p2, p3, p4, p5);
printout(stdout, buf); printout(stdout, buf);
} }
void void
error_out(fmt, p1, p2, p3, p4, p5) error_out(fmt, p1, p2, p3, p4, p5) char* fmt;
char *fmt; int p1, p2, p3, p4, p5;
int p1, p2, p3, p4, p5;
{ {
char buf[BUFSIZ]; char buf[BUFSIZ];
sprintf(buf, fmt, p1, p2, p3, p4, p5); sprintf(buf, fmt, p1, p2, p3, p4, p5);
strcat(buf, "\n"); strcat(buf, "\n");

115
common.c
View file

@ -27,114 +27,99 @@
* *
*/ */
/*
* $SonyRCSfile: common.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:03:10 $
*/
#include "conversion.h" #include "conversion.h"
int allways_buff = 0; int allways_buff = 0;
int no_flush = 0; int no_flush = 0;
int HHlevel = 2; int HHlevel = 2;
int Hlevel = 2; int Hlevel = 2;
int oasys = 0; int oasys = 0;
int flush_conversion; int flush_conversion;
Conversion *current_conversion; Conversion* current_conversion;
Conversion *default_conversion; Conversion* default_conversion;
Conversion * Conversion*
AllocConversion () AllocConversion() {
{ Conversion* c;
Conversion *c;
if ((c = (Conversion *)malloc (sizeof(Conversion))) == NULL) { if((c = (Conversion*)malloc(sizeof(Conversion))) == NULL) {
fprintf (stderr, "conversion: can't alloc memory\n\r"); fprintf(stderr, "conversion: can't alloc memory\n\r");
return (0); return (0);
} }
c->Imode = MODE_ZHIRA; c->Imode = MODE_ZHIRA;
c->BuffMode = BUFF; c->BuffMode = BUFF;
c->ha_point = 0; c->ha_point = 0;
c->out_point = 0; c->out_point = 0;
c->span_point = 0; c->span_point = 0;
c->word_regist = 0; c->word_regist = 0;
c->Cflag = 1; c->Cflag = 1;
c->SavedRow = 0; c->SavedRow = 0;
c->SavedCol = 0; c->SavedCol = 0;
c->CurrentVcol = 0; c->CurrentVcol = 0;
c->MaxVcol = 0; c->MaxVcol = 0;
c->wrap = 1; c->wrap = 1;
return (c); return (c);
} }
static Conversion *push_conversion; static Conversion* push_conversion;
FreeConversion (c) FreeConversion(c)
Conversion *c; Conversion* c;
{ {
if (c == push_conversion) if(c == push_conversion)
push_conversion = 0; push_conversion = 0;
free (c); free(c);
} }
SetConversion (c) SetConversion(c)
Conversion *c; Conversion* c;
{ {
PushConversion (current_conversion); PushConversion(current_conversion);
current_conversion = c; current_conversion = c;
} }
PushConversion (c) PushConversion(c)
Conversion *c; Conversion* c;
{ {
push_conversion = c; push_conversion = c;
} }
PopConversion () PopConversion() {
{ if(push_conversion)
if (push_conversion)
current_conversion = push_conversion; current_conversion = push_conversion;
} }
Conversion * Conversion*
GetConversion () GetConversion() {
{
return (current_conversion); return (current_conversion);
} }
InitConversion () InitConversion() {
{ default_conversion = AllocConversion();
default_conversion = AllocConversion (); DefaultConversion();
DefaultConversion ();
} }
DefaultConversion () DefaultConversion() {
{
current_conversion = default_conversion; current_conversion = default_conversion;
} }
EndConversion () EndConversion() {
{ free(default_conversion);
free (default_conversion);
} }
int int wcbyte(str)
wcbyte(str) wchar16_t* str;
wchar16_t *str;
{ {
count=0; count = 0;
while (*str) { while(*str) {
if (WcHighMASK & *str++) if(WcHighMASK & *str++)
count += 2; count += 2;
else else
count++; count++;
} }
return (count); return (count);
} }

View file

@ -27,31 +27,21 @@
* *
*/ */
/*
* $SonyRCSfile: common.h,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:03:42 $
*/
#include "conversion.h" #include "conversion.h"
extern Conversion *current_conversion; extern Conversion* current_conversion;
extern int allways_buff; extern int allways_buff;
extern int no_flush; extern int no_flush;
extern int termflag; extern int termflag;
extern int HHlevel; extern int HHlevel;
extern int Hlevel; extern int Hlevel;
extern int oasys; extern int oasys;
extern int flush_conversion; extern int flush_conversion;
Conversion *AllocConversion (); Conversion* AllocConversion();
Conversion *GetConversion (); Conversion* GetConversion();
#ifdef DEBUG #ifdef DEBUG
FILE *dbfp; FILE* dbfp;
#endif #endif

2364
compats.c

File diff suppressed because it is too large Load diff

649
comuni.c

File diff suppressed because it is too large Load diff

13
config.h.cmake Normal file
View file

@ -0,0 +1,13 @@
#ifndef OCONFIGURE_CONFIG_H
#define OCONFIGURE_CONFIG_H
#cmakedefine01 HAVE_C99_STDINT
#ifndef HAVE_MD5
# define HAVE_MD5 1
#endif
#ifndef HAVE_SHA2
# define HAVE_SHA2 1
#endif
#endif /* OCONFIGURE_CONFIG_H */

5
configure vendored
View file

@ -221,6 +221,7 @@ HAVE_B64_NTOP=
HAVE_CAPSICUM= HAVE_CAPSICUM=
HAVE_CRYPT= HAVE_CRYPT=
HAVE_CRYPT_NEWHASH= HAVE_CRYPT_NEWHASH=
HAVE_C99_STDINT=
HAVE_ENDIAN_H= HAVE_ENDIAN_H=
HAVE_ERR= HAVE_ERR=
HAVE_EXPLICIT_BZERO= HAVE_EXPLICIT_BZERO=
@ -391,6 +392,7 @@ runtest b64_ntop B64_NTOP "" "" "-lresolv" || true
runtest capsicum CAPSICUM || true runtest capsicum CAPSICUM || true
runtest crypt CRYPT "" "" "-lcrypt" || true runtest crypt CRYPT "" "" "-lcrypt" || true
runtest crypt_newhash CRYPT_NEWHASH || true runtest crypt_newhash CRYPT_NEWHASH || true
runtest c99_stdint C99_STDINT || true
runtest endian_h ENDIAN_H || true runtest endian_h ENDIAN_H || true
runtest err ERR || true runtest err ERR || true
runtest explicit_bzero EXPLICIT_BZERO || true runtest explicit_bzero EXPLICIT_BZERO || true
@ -513,7 +515,7 @@ fi
if [ ${HAVE_MD5} -eq 0 -o \ if [ ${HAVE_MD5} -eq 0 -o \
${HAVE_SHA2} -eq 0 ] ${HAVE_SHA2} -eq 0 ]
then then
echo "#include <stdint.h> /* C99 [u]int[nn]_t types */" echo "#include \"sj_stdint.h\" /* C99 stdint.h or C89 fallback types */"
echo echo
fi fi
@ -555,6 +557,7 @@ cat << __HEREDOC__
#define HAVE_CAPSICUM ${HAVE_CAPSICUM} #define HAVE_CAPSICUM ${HAVE_CAPSICUM}
#define HAVE_CRYPT ${HAVE_CRYPT} #define HAVE_CRYPT ${HAVE_CRYPT}
#define HAVE_CRYPT_NEWHASH ${HAVE_CRYPT_NEWHASH} #define HAVE_CRYPT_NEWHASH ${HAVE_CRYPT_NEWHASH}
#define HAVE_C99_STDINT ${HAVE_C99_STDINT}
#define HAVE_ENDIAN_H ${HAVE_ENDIAN_H} #define HAVE_ENDIAN_H ${HAVE_ENDIAN_H}
#define HAVE_ERR ${HAVE_ERR} #define HAVE_ERR ${HAVE_ERR}
#define HAVE_EXPLICIT_BZERO ${HAVE_EXPLICIT_BZERO} #define HAVE_EXPLICIT_BZERO ${HAVE_EXPLICIT_BZERO}

2348
conjunc.c

File diff suppressed because it is too large Load diff

15907
connect.c

File diff suppressed because it is too large Load diff

368
const.h
View file

@ -34,224 +34,224 @@
#include "Paths.h" #include "Paths.h"
#include "sj_euc.h" #include "sj_euc.h"
#define HostNameLen 128 #define HostNameLen 128
#define UserNameLen 128 #define UserNameLen 128
#define ProgNameLen 128 #define ProgNameLen 128
#define PathNameLen 1024 #define PathNameLen 1024
#define PassWordLen 16 #define PassWordLen 16
#define YomiBufSize 1024 #define YomiBufSize 1024
#define KanjiBufSize 2048 #define KanjiBufSize 2048
#define MinIdxLen 512 #define MinIdxLen 512
#define MinSegLen 512 #define MinSegLen 512
#define MinSegNum 1 #define MinSegNum 1
#define MinStyNum 512 #define MinStyNum 512
#define MaxStyNum 0x7fff #define MaxStyNum 0x7fff
#define MinClStep 1 #define MinClStep 1
#define MaxClStep 256 #define MaxClStep 256
#define MinClLen 512 #define MinClLen 512
#define MaxClLen 0x7fff #define MaxClLen 0x7fff
#define DebugOutFile ErrorOutFile #define DebugOutFile ErrorOutFile
#define DebugLevel 0 #define DebugLevel 0
#define ForkFlag 1 #define ForkFlag 1
#define MaxClientNum 512 #define MaxClientNum 512
#define LogOutFile ErrorOutFile #define LogOutFile ErrorOutFile
#define PortName "sj3" #define PortName "sj3"
#define PortNumber 3086 #define PortNumber 3086
#define DirectryMode 0755 #define DirectryMode 0755
#define DictFileMode 0644 #define DictFileMode 0644
#define MODE_MASK 0777 #define MODE_MASK 0777
#define DefIdxLen 2048 #define DefIdxLen 2048
#define DefSegLen 2048 #define DefSegLen 2048
#define DefSegNum 256 #define DefSegNum 256
#define DefStyNum 2048 #define DefStyNum 2048
#define DefClStep 1 #define DefClStep 1
#define DefClLen 2048 #define DefClLen 2048
#define NotLocked -1 #define NotLocked -1
#define ERROR -1 #define ERROR -1
#ifndef FALSE #ifndef FALSE
# define TRUE -1 #define TRUE -1
# define FALSE (!TRUE) #define FALSE (!TRUE)
#endif #endif
#define MATCH 0 #define MATCH 0
#define OVER 1 #define OVER 1
#define PARTLY 2 #define PARTLY 2
#define CONT 3 #define CONT 3
#define UNDER 4 #define UNDER 4
#define AD_Done 0x0000 #define AD_Done 0x0000
#define AD_NotUserDict 0x0001 #define AD_NotUserDict 0x0001
#define AD_BadYomi 0x0002 #define AD_BadYomi 0x0002
#define AD_BadKanji 0x0004 #define AD_BadKanji 0x0004
#define AD_BadHinsi 0x0008 #define AD_BadHinshi 0x0008
#define AD_ArExist 0x0010 #define AD_ArExist 0x0010
#define AD_OvflwDouBlk 0x0020 #define AD_OvflwDouBlk 0x0020
#define AD_OvflwDouNum 0x0040 #define AD_OvflwDouNum 0x0040
#define AD_OvflwUsrDic 0x0080 #define AD_OvflwUsrDic 0x0080
#define AD_OvflwIndex 0x0100 #define AD_OvflwIndex 0x0100
#define AD_NoMidasi 0x0010 #define AD_NoMidasi 0x0010
#define AD_NoHinsi 0x0020 #define AD_NoHinshi 0x0020
#define AD_NoKanji 0x0040 #define AD_NoKanji 0x0040
#define C_WAKACHI 0x00 #define C_WAKACHI 0x00
#define C_MINASI 0x01 #define C_MINASI 0x01
#define C_BUNSETU 0x02 #define C_BUNSETSU 0x02
#define C_DICT 0x03 #define C_DICT 0x03
#define C_N_ARABIA 0x04 #define C_N_ARABIA 0x04
#define C_N_ARACMA 0x05 #define C_N_ARACMA 0x05
#define C_N_KAZU 0x06 #define C_N_KAZU 0x06
#define C_N_SUUJI 0x07 #define C_N_SUUJI 0x07
#define C_N_NANSUU 0x08 #define C_N_NANSUU 0x08
#define C_N_KANKURA 0x09 #define C_N_KANKURA 0x09
#define C_N_ARAKURA 0x0a #define C_N_ARAKURA 0x0a
#define C_N_KAZULONG 0x0b #define C_N_KAZULONG 0x0b
#define C_N_KAZULCMA 0x0c #define C_N_KAZULCMA 0x0c
#define C_N_SUUJILONG 0x0d #define C_N_SUUJILONG 0x0d
#define JFLAG_N10 (1 << 15) #define JFLAG_N10 (1 << 15)
#define JFLAG_N_1 (1 << 14) #define JFLAG_N_1 (1 << 14)
#define JFLAG_NS1 (1 << 13) #define JFLAG_NS1 (1 << 13)
#define JFLAG_N01 (1 << 12) #define JFLAG_N01 (1 << 12)
#define JFLAG_N23 (1 << 11) #define JFLAG_N23 (1 << 11)
#define JFLAG_NK2 (1 << 10) #define JFLAG_NK2 (1 << 10)
#define JFLAG_NK4 (1 << 9) #define JFLAG_NK4 (1 << 9)
#define JFLAG_NN0 (1 << 8) #define JFLAG_NN0 (1 << 8)
#define JFLAG_NSN (1 << 7) #define JFLAG_NSN (1 << 7)
#define JFLAG_KA (1 << 0) #define JFLAG_KA (1 << 0)
#define DO_CLSTUDY 0x01 #define DO_CLSTUDY 0x01
#define DO_IKKATU 0x02 #define DO_IKKATU 0x02
#define K_DOUSHI 1 #define K_DOUSHI 1
#define K_YOUGEN 2 #define K_YOUGEN 2
#define K_TAIGEN 3 #define K_TAIGEN 3
#define K_FUKUSI 4 #define K_FUKUSHI 4
#define K_RENTAISI 5 #define K_RENTAISHI 5
#define K_SONOTA 6 #define K_SONOTA 6
#define EUC_a1 (unsigned char)0xa1 #define EUC_a1 (unsigned char)0xa1
#define EUC_a2 (unsigned char)0xa2 #define EUC_a2 (unsigned char)0xa2
#define EUC_a3 (unsigned char)0xa3 #define EUC_a3 (unsigned char)0xa3
#define EUC_a4 (unsigned char)0xa4 #define EUC_a4 (unsigned char)0xa4
#define EUC_a5 (unsigned char)0xa5 #define EUC_a5 (unsigned char)0xa5
#define EUC_START (unsigned char)0xa1 #define EUC_START (unsigned char)0xa1
#define EUC_END (unsigned char)0xfe #define EUC_END (unsigned char)0xfe
#define EUC_END_KIGOU (unsigned char)0xae #define EUC_END_KIGOU (unsigned char)0xae
#define EUC_0 (unsigned char)0xb0 #define EUC_0 (unsigned char)0xb0
#define EUC_END_0 (unsigned char)0xb9 #define EUC_END_0 (unsigned char)0xb9
#define EUC_A (unsigned char)0xc1 #define EUC_A (unsigned char)0xc1
#define EUC_END_A (unsigned char)0xda #define EUC_END_A (unsigned char)0xda
#define EUC_a (unsigned char)0xe1 #define EUC_a (unsigned char)0xe1
#define EUC_END_a (unsigned char)0xfa #define EUC_END_a (unsigned char)0xfa
#define EUC_END_HIRA (unsigned char)0xf3 #define EUC_END_HIRA (unsigned char)0xf3
#define EUC_VU (unsigned char)0xf4 #define EUC_VU (unsigned char)0xf4
#define EUC_XKA (unsigned char)0xf5 #define EUC_XKA (unsigned char)0xf5
#define EUC_XKE (unsigned char)0xf6 #define EUC_XKE (unsigned char)0xf6
#define isknj1(c) (((c) == SS2) || (((c) & 0x80) && ((c) != SS3))) #define isknj1(c) (((c) == SS2) || (((c) & 0x80) && ((c) != SS3)))
#define SHU 0x01 #define SHU 0x01
#define T_KANOU 0x80 #define T_KANOU 0x80
#define T_SHUUJO 0x40 #define T_SHUUJO 0x40
#define DICTOP 0x01 #define DICTOP 0x01
#define FZKTOP 0x02 #define FZKTOP 0x02
#define DEPEND 0x04 #define DEPEND 0x04
#define NUMBER 0x08 #define NUMBER 0x08
#define FZK_KGU 0x10 #define FZK_KGU 0x10
#define TAI_KGU 0x20 #define TAI_KGU 0x20
#define BEFORNUM 0x40 #define BEFORNUM 0x40
#define MIDNUM 0x80 #define MIDNUM 0x80
#define NOTNRM 0xFE #define NOTNRM 0xFE
#define CNJEND 0xff #define CNJEND 0xff
#define TYOUONFLG 0x80 #define TYOUONFLG 0x80
#define MAXFREC 32 #define MAXFREC 32
#define MAXFLVL 10 #define MAXFLVL 10
#define FZKEND 0xff #define FZKEND 0xff
#define SETTOU_O 1 #define SETTOU_O 1
#define SETTOU_GO 2 #define SETTOU_GO 2
#define SETTOU_DAI 3 #define SETTOU_DAI 3
#define SETTOU_KIGOU 4 #define SETTOU_KIGOU 4
#define NumKetaLength 16 #define NumKetaLength 16
#define NumWordBuf ((NumKetaLength+3)/4) #define NumWordBuf ((NumKetaLength + 3) / 4)
#define MainSegmentLength 2048 #define MainSegmentLength 2048
#define MainIndexLength 2048 #define MainIndexLength 2048
#define MainIndexNumber 512 #define MainIndexNumber 512
#define MaxYomiLength 32 #define MaxYomiLength 32
#define MaxKanjiLength 32 #define MaxKanjiLength 32
#define MaxHinsiNumber 16 #define MaxHinshiNumber 16
#define MaxAtrNumber 16 #define MaxAtrNumber 16
#define MaxJosiNumber 16 #define MaxJosiNumber 16
#define MaxKnjAskNumber 16 #define MaxKnjAskNumber 16
#define MaxYomiAskNumber 16 #define MaxYomiAskNumber 16
#define DouonBlkSizeNumber 3 #define DouonBlkSizeNumber 3
#define DouonBlkTerm 0xff #define DouonBlkTerm 0xff
#define HinsiBlkTerm 0xff #define HinshiBlkTerm 0xff
#define NormalKanjiMask 0x7f #define NormalKanjiMask 0x7f
#define SS3Kanji 0x0080 #define SS3Kanji 0x0080
#define ZenHiraAssyuku 0x80 #define ZenHiraAsshuku 0x80
#define OffsetAssyuku 0x90 #define OffsetAsshuku 0x90
#define ZenKataAssyuku 0xa0 #define ZenKataAsshuku 0xa0
#define AiAttribute 0xb0 #define AiAttribute 0xb0
#define KanjiAssyuku 0xc0 #define KanjiAsshuku 0xc0
#define LeadingHankaku 0xd0 #define LeadingHankaku 0xd0
#define KanjiStrEnd 0x00 #define KanjiStrEnd 0x00
#define IsAssyuku 0x80 #define IsAsshuku 0x80
#define AssukuUse2byte 0x90 #define AssukuUse2byte 0x90
#define KnjAssyukuMask 0x0f #define KnjAsshukuMask 0x0f
#define KanjiCodeMask 0x0f #define KanjiCodeMask 0x0f
#define KanjiModeMask 0xf0 #define KanjiModeMask 0xf0
#define AtrMsKanjiOfs 0xc0c0 #define AtrMsKanjiOfs 0xc0c0
#define MaxHindoNumber 2000 #define MaxHindoNumber 2000
#define MaxOffsetNumber 1000 #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 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 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 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 TooLongHinshi "\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 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 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 BadHinshi "\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 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 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 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 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 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 TooManyHinshi "\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 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 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 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 HinshiTankan cnvhinshi("\303\261\264\301")
#define DIVLIST 1 #define DIVLIST 1
#define ASSYUKUREC 2 #define ASSHUKUREC 2
#define STRING 3 #define STRING 3
#define HINDOREC 4 #define HINDOREC 4
#define OFFSETREC 5 #define OFFSETREC 5
#define KANJIREC 6 #define KANJIREC 6
#define HINSIREC 7 #define HINSHIREC 7
#define DOUONREC 8 #define DOUONREC 8
#endif /* SJ3_CONST_H_ */ #endif /* SJ3_CONST_H_ */

407
conv.c
View file

@ -27,14 +27,6 @@
* *
*/ */
/*
* $SonyRCSfile: conv.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:03:11 $
*/
#include <errno.h> #include <errno.h>
#include "wchar16.h" #include "wchar16.h"
#include "select.h" #include "select.h"
@ -42,150 +34,182 @@
#include "inkey.h" #include "inkey.h"
#include "common.h" #include "common.h"
#define MSEC 300
#define MSEC 300 int keyvalue;
char* funckey[] = {
"\033OH",
"\033OP",
"\033OQ",
"\033OR",
"\033OS",
"\033OT",
"\033OU",
"\033OV",
"\033OW",
"\033OX",
"\033OY",
"\033OZ",
"\033[C",
"\033OC",
"\033[D",
"\033OD",
"\033[A",
"\033OA",
"\033[B",
"\033OB",
"\033[H",
"\033[4~",
"\033[11~",
"\033[8~",
"\033[12~",
"\033[13~",
"\033[9~",
"\033[14~",
"\033[15~",
"\033[17~",
"\033[18~",
"\033[19~",
"\033[20~",
"\033[21~",
"\033[7~",
};
int funcvalue[] = {
KEY_CONV,
KEY_HENKAN,
KEY_MUHENKAN,
KEY_ETC,
KEY_KETTEI,
KEY_CODE,
KEY_HALPHA,
KEY_ZALPHA,
KEY_HKATA,
KEY_ZKATA,
KEY_ZHIRA,
KEY_OTHER,
KEY_RIGHT,
KEY_RIGHT,
KEY_LEFT,
KEY_LEFT,
KEY_UP,
KEY_UP,
KEY_DOWN,
KEY_DOWN,
KEY_CONV,
KEY_HENKAN,
KEY_HENKAN,
KEY_MUHENKAN,
KEY_MUHENKAN,
KEY_ETC,
KEY_KETTEI,
KEY_KETTEI,
KEY_CODE,
KEY_HALPHA,
KEY_ZALPHA,
KEY_HKATA,
KEY_ZKATA,
KEY_ZHIRA,
KEY_CONV,
};
int keyvalue; int keynumber = sizeof(funckey) / sizeof(char*);
char *funckey[] = { extern int Direct;
"\033OH", "\033OP", "\033OQ", extern int master;
"\033OR", "\033OS", "\033OT", extern wchar16_t Ukey[UKEYNUM][SEQLEN + 1];
"\033OU", "\033OV", "\033OW", extern int Uvalue[];
"\033OX", "\033OY", "\033OZ", extern int Unumber;
"\033[C", "\033OC", "\033[D",
"\033OD", "\033[A", "\033OA",
"\033[B", "\033OB", "\033[H",
"\033[4~", "\033[11~", "\033[8~",
"\033[12~", "\033[13~", "\033[9~",
"\033[14~", "\033[15~", "\033[17~",
"\033[18~", "\033[19~", "\033[20~",
"\033[21~", "\033[7~",
};
int funcvalue[] = { convert_stat() {
KEY_CONV, KEY_HENKAN, KEY_MUHENKAN, stat_init();
KEY_ETC, KEY_KETTEI, KEY_CODE, stat_conv();
KEY_HALPHA, KEY_ZALPHA, KEY_HKATA,
KEY_ZKATA, KEY_ZHIRA, KEY_OTHER,
KEY_RIGHT, KEY_RIGHT, KEY_LEFT,
KEY_LEFT, KEY_UP, KEY_UP,
KEY_DOWN, KEY_DOWN, KEY_CONV,
KEY_HENKAN, KEY_HENKAN, KEY_MUHENKAN,
KEY_MUHENKAN, KEY_ETC, KEY_KETTEI,
KEY_KETTEI, KEY_CODE, KEY_HALPHA,
KEY_ZALPHA, KEY_HKATA, KEY_ZKATA,
KEY_ZHIRA, KEY_CONV,
};
int keynumber = sizeof(funckey)/sizeof(char*);
extern int Direct;
extern int master;
extern wchar16_t Ukey[UKEYNUM][SEQLEN+1];
extern int Uvalue[];
extern int Unumber;
convert_stat ()
{
stat_init ();
stat_conv ();
} }
inputprocess () inputprocess() {
{ int c;
int c; wchar16_t obuf[2];
wchar16_t obuf[2];
if (Direct) { if(Direct) {
set_guide_line (KEY_CONV); set_guide_line(KEY_CONV);
convert_stat (); convert_stat();
} }
set_guide_line (KEY_NORMAL); set_guide_line(KEY_NORMAL);
print_guide_line (); print_guide_line();
for (;;) { for(;;) {
if ((c = inkey ()) == EOF) if((c = inkey()) == EOF)
continue; continue;
switch (keyvalue) { switch(keyvalue) {
case KEY_NORMAL: case KEY_NORMAL:
obuf[0] = c; obuf[0] = c;
obuf[1] = 0; obuf[1] = 0;
SJ_write (obuf, 1); SJ_write(obuf, 1);
break; break;
case KEY_CONV: case KEY_CONV:
set_guide_line (KEY_CONV); set_guide_line(KEY_CONV);
convert_stat (); convert_stat();
set_guide_line (KEY_NORMAL); set_guide_line(KEY_NORMAL);
print_guide_line (); print_guide_line();
break; break;
default: default:
write_pseq (0); write_pseq(0);
break; break;
} }
} }
} }
wchar16_t ibuf[KEYBUFSIZ];
wchar16_t pars_seq[KEYBUFSIZ];
int buf_count = 0;
int pars_n;
static int escape = 0;
wchar16_t ibuf[KEYBUFSIZ]; inkey() {
wchar16_t pars_seq[KEYBUFSIZ]; Conversion* cv;
int buf_count = 0; int i, j;
int pars_n; wchar16_t c;
static int escape = 0;
inkey () cv = current_conversion;
{
Conversion *cv;
int i, j;
wchar16_t c;
cv = current_conversion;
keyvalue = KEY_NORMAL; keyvalue = KEY_NORMAL;
pars_n = 0; pars_n = 0;
if (buf_count) { if(buf_count) {
if (escape && cv->Cflag) if(escape && cv->Cflag)
master_flush (); master_flush();
c = *ibuf; c = *ibuf;
} } else {
else { if((c = SJ_getchar()) == (wchar16_t)EOF)
if ((c = SJ_getchar ()) == (wchar16_t) EOF)
return ((short) c); return ((short)c);
*ibuf = c; *ibuf = c;
buf_count = 1; buf_count = 1;
} }
if(*ibuf == ESC) {
if (*ibuf == ESC) { keyvalue = sequence(ibuf, &buf_count);
keyvalue = sequence (ibuf, &buf_count); escape = 1;
escape = 1; } else {
}
else {
escape = 0; escape = 0;
} }
if (keyvalue == KEY_NORMAL) if(keyvalue == KEY_NORMAL)
keyvalue = parse_command (ibuf, &buf_count); keyvalue = parse_command(ibuf, &buf_count);
if (keyvalue == KEY_NORMAL) { if(keyvalue == KEY_NORMAL) {
c = *ibuf; c = *ibuf;
for (i=1 ; i < buf_count ; i++) for(i = 1; i < buf_count; i++)
ibuf[i - 1] = ibuf[i]; ibuf[i - 1] = ibuf[i];
buf_count--; buf_count--;
} }
if (buf_count > KEYBUFLIM) { if(buf_count > KEYBUFLIM) {
for (i = buf_count - 1; i >= 0 ; i --) { for(i = buf_count - 1; i >= 0; i--) {
if (ibuf[i] == ESC) { if(ibuf[i] == ESC) {
for (j = i ; j < buf_count ; j ++) for(j = i; j < buf_count; j++)
ibuf[j-i] = ibuf[j]; ibuf[j - i] = ibuf[j];
buf_count -= i; buf_count -= i;
return(c); return (c);
} }
} }
@ -194,43 +218,40 @@ inkey ()
return (c); return (c);
} }
sequence (buf, count) sequence(buf, count)
wchar16_t *buf; wchar16_t* buf;
int *count; int* count;
{ {
int n;
SELECT_FD ifds;
struct timeval t;
wchar16_t* s;
int value;
if(*count > 1 && (value = parse_escape(buf, count, 1)) != KEY_MORE)
int n;
SELECT_FD ifds;
struct timeval t;
wchar16_t *s;
int value;
if (*count > 1 && (value = parse_escape (buf, count, 1)) != KEY_MORE)
return (value); return (value);
s = buf + *count; s = buf + *count;
for (;;) { for(;;) {
t.tv_sec = 0; t.tv_sec = 0;
t.tv_usec = UsecWeight (0); t.tv_usec = UsecWeight(0);
FD_ZERO (&ifds); FD_ZERO(&ifds);
FD_SET (STDIN, &ifds); FD_SET(STDIN, &ifds);
if (select (STDIN + 1, &ifds, 0, 0, &t) <= 0) { if(select(STDIN + 1, &ifds, 0, 0, &t) <= 0) {
if (errno == EINTR) { if(errno == EINTR) {
errno = 0; errno = 0;
continue; continue;
} else { } else {
return (parse_escape (buf, count, 0)); return (parse_escape(buf, count, 0));
} }
} }
if ((n = SJ_read (s, KEYBUFLIM)) <= 0) { if((n = SJ_read(s, KEYBUFLIM)) <= 0) {
return (parse_escape (buf, *count, 0)); return (parse_escape(buf, *count, 0));
} }
s += n; s += n;
*count += n; *count += n;
if ((value = parse_escape (buf, count, 1)) == KEY_MORE) if((value = parse_escape(buf, count, 1)) == KEY_MORE)
continue; continue;
else { else {
return (value); return (value);
@ -238,135 +259,113 @@ int *count;
} }
} }
parse_escape(s, count, more)
wchar16_t* s;
parse_escape (s, count, more) int* count;
wchar16_t *s; int more;
int *count;
int more;
{ {
int i, j; int i, j;
wchar16_t temp[KEYBUFSIZ]; wchar16_t temp[KEYBUFSIZ];
int possible; int possible;
possible = 0; possible = 0;
for(i = 0; i < Unumber; i++) {
for(j = 0; j < *count; j++) {
for (i = 0 ; i < Unumber ; i ++) { if(s[j] != Ukey[i][j])
for (j=0 ; j < *count ; j++) {
if (s[j] != Ukey[i][j])
break; break;
} }
if(j == wslen(&Ukey[i][0])) {
if (j == wslen (&Ukey[i][0])) { Strncpy(pars_seq, s, j);
pars_seq[j] = (wchar16_t)'\0';
pars_n = j;
Strncpy (pars_seq, s, j);
pars_seq[j] = (wchar16_t) '\0';
pars_n = j;
*count -= j; *count -= j;
if(*count > 0) {
if (*count > 0) { Strncpy(temp, &s[j], *count);
Strncpy (temp, &s[j], *count); temp[*count] = (wchar16_t)'\0';
temp[*count] = (wchar16_t) '\0'; wscpy(s, temp);
wscpy(s, temp);
} }
return (Uvalue[i]); return (Uvalue[i]);
} } else if(j == *count)
else if (j == *count)
possible = 1; possible = 1;
} }
for(i = 0; i < keynumber; i++) {
for(j = 0; j < *count; j++) {
for (i = 0 ; i < keynumber ; i ++) { if(s[j] != (unsigned char)funckey[i][j])
for (j = 0 ; j < *count ; j ++) {
if (s[j] != (unsigned char)funckey[i][j])
break; break;
} }
if(j == strlen(funckey[i])) {
if (j == strlen (funckey[i])) { Strncpy(pars_seq, s, j);
pars_seq[j] = (wchar16_t)'\0';
pars_n = j;
Strncpy (pars_seq, s, j);
pars_seq[j] = (wchar16_t) '\0';
pars_n = j;
*count -= j; *count -= j;
if(*count > 0) {
if (*count > 0) { Strncpy(temp, &s[j], *count);
Strncpy (temp, &s[j], *count); temp[*count] = (wchar16_t)'\0';
temp[*count] = (wchar16_t) '\0'; wscpy(s, temp);
wscpy (s, temp);
} }
return (funcvalue[i]); return (funcvalue[i]);
} } else if(j == *count)
else if (j == *count)
possible = 1; possible = 1;
} }
if (*count == 1) if(*count == 1)
return (KEY_NORMAL); return (KEY_NORMAL);
else if (more && possible) else if(more && possible)
return (KEY_MORE); return (KEY_MORE);
else { else {
Strncpy (pars_seq, s, *count); Strncpy(pars_seq, s, *count);
pars_seq[*count] = (wchar16_t) '\0'; pars_seq[*count] = (wchar16_t)'\0';
pars_n = *count; pars_n = *count;
*count = 0; *count = 0;
*s = '\0'; *s = '\0';
return (KEY_OTHER); return (KEY_OTHER);
} }
} }
write_pseq (mod) write_pseq(mod) int mod;
int mod;
{ {
if(mod == 3) {
if (mod == 3) { if(pars_n > 0) {
if (pars_n > 0) {
pars_n = 0; pars_n = 0;
return (*pars_seq); return (*pars_seq);
} }
} }
if (mod == 2) { if(mod == 2) {
if (pars_n == 1) { if(pars_n == 1) {
pars_n = 0; pars_n = 0;
return (*pars_seq); return (*pars_seq);
} }
pars_n = 0; pars_n = 0;
return (0); return (0);
} }
if (mod == 1) { if(mod == 1) {
if (pars_n == 1) { if(pars_n == 1) {
pars_n = 0; pars_n = 0;
return (*pars_seq); return (*pars_seq);
} } else if(IsGoto(*pars_seq)) {
else if (IsGoto (*pars_seq)) { Strncpy(&ibuf[buf_count], &pars_seq[1], pars_n - 1);
Strncpy (&ibuf[buf_count], &pars_seq[1], pars_n - 1);
buf_count += pars_n - 1; buf_count += pars_n - 1;
pars_n = 0; pars_n = 0;
return (*pars_seq); return (*pars_seq);
} }
} }
if (pars_n > 0) if(pars_n > 0)
SJ_through (pars_seq, pars_n); SJ_through(pars_seq, pars_n);
pars_n = 0; pars_n = 0;
return (0); return (0);
} }

View file

@ -27,88 +27,79 @@
* *
*/ */
/*
* $SonyRCSfile: conversion.h,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:03:43 $
*/
#include "sj2.h" #include "sj2.h"
#include "sj3libsj3.h" #include "sj3libsj3.h"
#include "henkan.h" #include "henkan.h"
typedef struct bunsetu_sj3 Bunsetu; typedef struct bunsetsu_sj3 Bunsetsu;
typedef struct _Conversion { typedef struct _Conversion {
unsigned short out_mode[BUFFLENGTH*2]; unsigned short out_mode[BUFFLENGTH * 2];
unsigned short Plen[BUFFLENGTH]; unsigned short Plen[BUFFLENGTH];
unsigned short OrgPlen[BUFFLENGTH]; unsigned short OrgPlen[BUFFLENGTH];
unsigned short Bpoint[BUFFLENGTH]; unsigned short Bpoint[BUFFLENGTH];
unsigned short Edit[BUFFLENGTH]; unsigned short Edit[BUFFLENGTH];
unsigned short span_l[BUFFLENGTH]; unsigned short span_l[BUFFLENGTH];
unsigned short Elen[BUFFLENGTH]; unsigned short Elen[BUFFLENGTH];
unsigned short Displen[BUFFLENGTH]; unsigned short Displen[BUFFLENGTH];
unsigned short Vindex[BUFFLENGTH * 2]; unsigned short Vindex[BUFFLENGTH * 2];
short ha_point; short ha_point;
short ha_epoint; short ha_epoint;
short out_point; short out_point;
short out_epoint; short out_epoint;
short span_point; short span_point;
short Bnum; short Bnum;
short Enum; short Enum;
short e_point; short e_point;
unsigned short line; unsigned short line;
unsigned short column; unsigned short column;
unsigned short PushCurrentVcol; unsigned short PushCurrentVcol;
unsigned short Vlen; unsigned short Vlen;
unsigned short SavedRow; unsigned short SavedRow;
unsigned short SavedCol; unsigned short SavedCol;
unsigned short CurrentVcol; unsigned short CurrentVcol;
unsigned short MaxVcol; unsigned short MaxVcol;
short CurBun; short CurBun;
short PreBun; short PreBun;
Bunsetu Bun[BUFFLENGTH]; Bunsetsu Bun[BUFFLENGTH];
wchar16_t out_buf[BUFFLENGTH * 2]; wchar16_t out_buf[BUFFLENGTH * 2];
unsigned char in_mode[BUFFLENGTH * 2]; unsigned char in_mode[BUFFLENGTH * 2];
wchar16_t *span_p[BUFFLENGTH]; wchar16_t* span_p[BUFFLENGTH];
wchar16_t *Ppoint[BUFFLENGTH]; wchar16_t* Ppoint[BUFFLENGTH];
wchar16_t *Epoint[BUFFLENGTH]; wchar16_t* Epoint[BUFFLENGTH];
wchar16_t Halpha[BUFFLENGTH]; wchar16_t Halpha[BUFFLENGTH];
unsigned char kettei[BUFFLENGTH]; unsigned char kettei[BUFFLENGTH];
unsigned char Pkettei[BUFFLENGTH]; unsigned char Pkettei[BUFFLENGTH];
unsigned char Pedited[BUFFLENGTH]; unsigned char Pedited[BUFFLENGTH];
wchar16_t Ebuff[EDITLEN]; wchar16_t Ebuff[EDITLEN];
unsigned char Bkettei[BUFFLENGTH]; unsigned char Bkettei[BUFFLENGTH];
unsigned char Dispmod[BUFFLENGTH]; unsigned char Dispmod[BUFFLENGTH];
wchar16_t yomiout[BUFFLENGTH * 2]; wchar16_t yomiout[BUFFLENGTH * 2];
wchar16_t kanjiout[BUFFLENGTH * 4]; wchar16_t kanjiout[BUFFLENGTH * 4];
unsigned char Imode; unsigned char Imode;
unsigned char BuffMode; unsigned char BuffMode;
unsigned char Kanji; unsigned char Kanji;
unsigned char Dflag; unsigned char Dflag;
unsigned char word_regist; unsigned char word_regist;
unsigned char Cflag; unsigned char Cflag;
unsigned char henkanflag; unsigned char henkanflag;
unsigned char wrap; unsigned char wrap;
} Conversion; } Conversion;
wchar16_t osave_buf[BUFFLENGTH * 2];
wchar16_t osave_buf[BUFFLENGTH * 2];
unsigned short osave_mode[BUFFLENGTH * 2]; unsigned short osave_mode[BUFFLENGTH * 2];
unsigned short isave_mode[BUFFLENGTH * 2]; unsigned short isave_mode[BUFFLENGTH * 2];
unsigned short os_point; unsigned short os_point;
wchar16_t hsave_buf[BUFFLENGTH]; wchar16_t hsave_buf[BUFFLENGTH];
unsigned short hs_point; unsigned short hs_point;

View file

@ -27,45 +27,25 @@
* *
*/ */
/*
* $SonyRCSfile: cvtclknj.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:01:38 $
*/
#include "sj_kcnv.h" #include "sj_kcnv.h"
void cvtkouho(), setstyrec();
void cvtclknj() {
KHREC* krec;
int i;
void cvtkouho(), setstyrec(); if(!selectid) selectid = khcount;
i = khcount;
void cvtclknj()
{
KHREC *krec;
int i;
if (!selectid) selectid = khcount;
i = khcount;
krec = kouhotbl; krec = kouhotbl;
while (i--) { while(i--) {
if ((int)krec -> rank == (int)selectid) break; if((int)krec->rank == (int)selectid) break;
krec++; krec++;
} }
setstyrec(krec); setstyrec(krec);
cvtkouho(krec); cvtkouho(krec);
} }

164
cvtdict.c
View file

@ -27,58 +27,41 @@
* *
*/ */
/*
* $SonyRCSfile: cvtdict.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:01:40 $
*
* $Id$
*/
#include "sj_euc.h" #include "sj_euc.h"
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "kanakan.h" #include "kanakan.h"
void cvtdict(KHREC* krec, CLREC* clrec, int flg) {
TypeDicOfs ofs;
unsigned char* yptr;
int jlen;
int stblen;
int sttlen;
unsigned char* fptr;
int cllen;
JREC* jrec;
int i, j;
ofs = krec->offs;
void jrec = clrec->jnode;
cvtdict(KHREC *krec, CLREC *clrec, int flg) cllen = clrec->cllen;
{
TypeDicOfs ofs;
unsigned char *yptr;
int jlen;
int stblen;
int sttlen;
unsigned char *fptr;
int cllen;
JREC *jrec;
int i, j;
ofs = krec -> offs;
jrec = clrec -> jnode;
cllen = clrec -> cllen;
yptr = inputyomi; yptr = inputyomi;
jlen = jrec->jlen;
jlen = jrec -> jlen; if((i = jrec->sttofs) != 0) {
if(i == SETTOU_KIGOU) {
if ((i = jrec -> sttofs) != 0) {
if (i == SETTOU_KIGOU) {
sttlen = 1; sttlen = 1;
fptr = yptr; fptr = yptr;
} }
else { else {
fptr = Settou_ptr(i); fptr = Settou_ptr(i);
sttlen = SttYomiLen(fptr); sttlen = SttYomiLen(fptr);
fptr++; fptr++;
if (!krec -> sttkj) fptr += 2; if(!krec->sttkj) fptr += 2;
} }
*kanjitmp++ = *fptr++; *kanjitmp++ = *fptr++;
@ -87,21 +70,17 @@ cvtdict(KHREC *krec, CLREC *clrec, int flg)
yptr += sttlen * 2; yptr += sttlen * 2;
} }
else else
sttlen = 0; sttlen = 0;
if(flg) {
if (flg) {
(*Cvtnum_func[krec->mode - 1])(ystart + sttlen, yptr, jrec); (*Cvtnum_func[krec->mode - 1])(ystart + sttlen, yptr, jrec);
yptr += (i = jrec->numlen) * 2;
yptr += (i = jrec -> numlen) * 2;
jlen -= i; jlen -= i;
if(jrec->stbofs) {
if (jrec -> stbofs) {
*kanjitmp++ = *yptr++; *kanjitmp++ = *yptr++;
*kanjitmp++ = *yptr++; *kanjitmp++ = *yptr++;
jlen--; jlen--;
@ -110,71 +89,60 @@ cvtdict(KHREC *krec, CLREC *clrec, int flg)
stblen = 0; stblen = 0;
} }
else if((i = jrec->stbofs) && (fptr = getstb(jrec->hinshi))) {
else if ((i = jrec -> stbofs) && (fptr = getstb(jrec -> hinsi))) {
fptr += i - 1; fptr += i - 1;
stblen = StbYomiLen(fptr); stblen = StbYomiLen(fptr);
jlen -= stblen; jlen -= stblen;
} }
else { else {
stblen = 0; stblen = 0;
} }
if(ofs) {
if (ofs) { if(seldict(jrec->dicid)) {
if (seldict(jrec -> dicid)) { (*curdict->getdic)(curdict, jrec->jseg);
(*curdict->getdic)(curdict, jrec -> jseg);
get_askknj(); get_askknj();
kanjitmp += kanjitmp +=
getkanji(yptr, jlen, dicbuf + ofs, kanjitmp); getkanji(yptr, jlen, dicbuf + ofs, kanjitmp);
yptr += jlen * 2; yptr += jlen * 2;
} } else {
else { while(jlen-- > 0) {
while (jlen-- > 0) { for(i = 0; i < euc_codesize(*yptr); i++)
for ( i = 0; i < euc_codesize(*yptr); i++) *kanjitmp++ = yptr[i];
*kanjitmp++ = yptr[i];
yptr += euc_codesize(*yptr); yptr += euc_codesize(*yptr);
} }
} }
} }
if(stblen) {
if (stblen) {
i = StbKnjLen(fptr); i = StbKnjLen(fptr);
fptr += stblen + 2; fptr += stblen + 2;
while (i-- > 0) *kanjitmp++ = *fptr++; while(i-- > 0) *kanjitmp++ = *fptr++;
yptr += stblen * 2; yptr += stblen * 2;
} }
i = cllen - (jrec->jlen);
i = cllen - (jrec -> jlen); while(i-- > 0) {
while (i-- > 0) { for(j = 0; j < euc_codesize(*yptr); j++)
for ( j = 0; j < euc_codesize(*yptr); j++) *kanjitmp++ = yptr[j];
*kanjitmp++ = yptr[j];
yptr += euc_codesize(*yptr); yptr += euc_codesize(*yptr);
} }
} }
void cvtminasi(int len) {
unsigned char* ptr;
void
cvtminasi(int len)
{
unsigned char *ptr;
ptr = inputyomi; ptr = inputyomi;
while (len-- > 0) { while(len-- > 0) {
if(isknj1(*ptr)) {
if (isknj1(*ptr)) {
*kanjitmp++ = *ptr++; *kanjitmp++ = *ptr++;
*kanjitmp++ = *ptr++; *kanjitmp++ = *ptr++;
} }
else if (*ptr == SS3) { else if(*ptr == SS3) {
*kanjitmp++ = *ptr++; *kanjitmp++ = *ptr++;
*kanjitmp++ = *ptr++; *kanjitmp++ = *ptr++;
*kanjitmp++ = *ptr++; *kanjitmp++ = *ptr++;
@ -184,40 +152,32 @@ cvtminasi(int len)
} }
} }
void cvtwakachi(CLREC* clrec) {
int jlen;
void unsigned char* ym;
cvtwakachi(CLREC *clrec) int cnt;
{ unsigned char ch;
int jlen;
unsigned char *ym;
int cnt;
unsigned char ch;
ym = inputyomi; ym = inputyomi;
cnt = jlen = clrec->jnode->jlen;
while(cnt-- > 0) {
if(isknj1(*ym)) {
cnt = jlen = clrec -> jnode -> jlen; if(*ym == 0xa4) {
while (cnt-- > 0) {
if (isknj1(*ym)) {
if (*ym == 0xa4) {
ch = *++ym; ch = *++ym;
if (0xa1 <= ch && ch <= 0xf3) { if(0xa1 <= ch && ch <= 0xf3) {
*kanjitmp++ = 0xa5; *kanjitmp++ = 0xa5;
} } else {
else {
*kanjitmp++ = 0xa4; *kanjitmp++ = 0xa4;
} }
*kanjitmp++ = ch; *kanjitmp++ = ch;
ym++; ym++;
} } else {
else {
*kanjitmp++ = *ym++; *kanjitmp++ = *ym++;
*kanjitmp++ = *ym++; *kanjitmp++ = *ym++;
} }
} } else if(*ym == SS3) {
else if (*ym == SS3) {
*kanjitmp++ = *ym++; *kanjitmp++ = *ym++;
*kanjitmp++ = *ym++; *kanjitmp++ = *ym++;
*kanjitmp++ = *ym++; *kanjitmp++ = *ym++;
@ -226,20 +186,18 @@ cvtwakachi(CLREC *clrec)
} }
} }
cnt = clrec->cllen - jlen;
while(cnt-- > 0) {
cnt = clrec -> cllen - jlen; if(isknj1(*ym)) {
while (cnt-- > 0) {
if (isknj1(*ym)) {
*kanjitmp++ = *ym++; *kanjitmp++ = *ym++;
*kanjitmp++ = *ym++; *kanjitmp++ = *ym++;
} }
else if (*ym == SS3) { else if(*ym == SS3) {
*kanjitmp++ = *ym++;
*kanjitmp++ = *ym++;
*kanjitmp++ = *ym++; *kanjitmp++ = *ym++;
*kanjitmp++ = *ym++;
*kanjitmp++ = *ym++;
} else { } else {
*kanjitmp++ = *ym++; *kanjitmp++ = *ym++;
} }

View file

@ -27,103 +27,74 @@
* *
*/ */
/*
* $SonyRCSfile: cvtkanji.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:01:41 $
*
* $Id$
*/
#include <string.h> #include <string.h>
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "kanakan.h" #include "kanakan.h"
void mkknjmax();
void mvmemi(), free_clall();
void free_jall();
void mkknjmax(); void cvtphknj(void) {
void mvmemi(), free_clall(); int i, j;
void free_jall(); CLREC* clrec;
CLREC* clkp;
if(!kanjilen) goto not_enough_memory;
void
cvtphknj (void)
{
int i, j;
CLREC *clrec;
CLREC *clkp;
if (!kanjilen) goto not_enough_memory;
khcount = 0; khcount = 0;
clkp = NULL; clkp = NULL;
stdytop = NULL; stdytop = NULL;
clrec = clt1st; clrec = clt1st;
while (clrec) { while(clrec) {
if (ph_khtbl(clrec)) clkp = clrec; if(ph_khtbl(clrec)) clkp = clrec;
clrec = clrec -> clsort; clrec = clrec->clsort;
} }
if(clkp && stdytop) {
if (clkp && stdytop) { if(stdytop->nmflg)
ph_setkouho(clkp, (TypeDicOfs)0, (STDYIN*)0);
if (stdytop -> nmflg) }
ph_setkouho(clkp, (TypeDicOfs)0, (STDYIN *)0);
}
kouhotbl[0].rank = 1; kouhotbl[0].rank = 1;
kanjitmp = kanjibuf + 1; kanjitmp = kanjibuf + 1;
setstyrec(kouhotbl); setstyrec(kouhotbl);
cvtkouho(kouhotbl); cvtkouho(kouhotbl);
i = kanjitmp - kanjibuf; i = kanjitmp - kanjibuf;
if (i < kanjilen) { if(i < kanjilen) {
kanjilen -= i; kanjilen -= i;
ystart += clt1st->cllen;
ystart += clt1st -> cllen; j = hzstrlen(inputyomi, (int)clt1st->cllen);
j = hzstrlen(inputyomi, (int)clt1st -> cllen);
kanjibuf[0] = (unsigned char)j; kanjibuf[0] = (unsigned char)j;
inputyomi += j; inputyomi += j;
memcpy(kanjibuf, kanjipos, i); memcpy(kanjibuf, kanjipos, i);
kanjipos += i; kanjipos += i;
} } else
else
kanjilen = 0; kanjilen = 0;
not_enough_memory: not_enough_memory:
free_clall(clt1st); free_clall(clt1st);
free_jall (jrt1st); free_jall(jrt1st);
} }
void cvtkouho(KHREC* krec) {
CLREC* clrec;
clrec = krec->clrec;
void switch(clrec->jnode->class) {
cvtkouho (KHREC *krec)
{
CLREC *clrec;
clrec = krec -> clrec;
switch (clrec -> jnode -> class) {
case C_DICT: case C_DICT:
cvtdict(krec, clrec, FALSE); cvtdict(krec, clrec, FALSE);
break; break;
@ -141,73 +112,62 @@ cvtkouho (KHREC *krec)
cvtdict(krec, clrec, TRUE); cvtdict(krec, clrec, TRUE);
break; break;
case C_BUNSETU : case C_BUNSETSU:
case C_MINASI : case C_MINASI:
cvtminasi((int)clrec -> cllen); cvtminasi((int)clrec->cllen);
break; break;
case C_WAKACHI : case C_WAKACHI:
cvtwakachi(clrec); cvtwakachi(clrec);
break; break;
} }
*kanjitmp++ = 0; *kanjitmp++ = 0;
} }
void setstyrec(KHREC* krec) {
JREC* jrec;
KHREC* kptr;
int ii;
unsigned char* fptr;
STDYOUT stdy;
jrec = krec->clrec->jnode;
void if(krec->mode && !krec->offs) {
setstyrec (KHREC *krec)
{
JREC *jrec;
KHREC *kptr;
int ii;
unsigned char *fptr;
STDYOUT stdy;
jrec = krec -> clrec -> jnode; for(ii = khcount, kptr = kouhotbl; ii--; kptr++)
if(kptr->rank == 1) break;
stdy.stdy1.offset = kptr->offs;
if (krec -> mode && !krec -> offs) { stdy.stdy1.seg = kptr->clrec->jnode->jseg;
stdy.stdy1.styno = kptr->styno;
for (ii = khcount, kptr = kouhotbl ; ii--; kptr++) stdy.stdy1.dicid = kptr->clrec->jnode->dicid;
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; stdy.stdy1.nmflg = 1;
} }
else { else {
stdy.stdy1.offset = krec -> offs; stdy.stdy1.offset = krec->offs;
stdy.stdy1.seg = jrec -> jseg; stdy.stdy1.seg = jrec->jseg;
stdy.stdy1.styno = krec -> styno; stdy.stdy1.styno = krec->styno;
stdy.stdy1.dicid = jrec -> dicid; stdy.stdy1.dicid = jrec->dicid;
stdy.stdy1.nmflg = 0; stdy.stdy1.nmflg = 0;
} }
stdy.stdy1.sttkj = krec -> sttkj; stdy.stdy1.sttkj = krec->sttkj;
stdy.stdy1.ka_kj = krec -> ka_kj; stdy.stdy1.ka_kj = krec->ka_kj;
stdy.hinshi = jrec -> hinsi; stdy.hinshi = jrec->hinshi;
stdy.len = jrec -> jlen; stdy.len = jrec->jlen;
stdy.sttfg = krec -> sttfg; stdy.sttfg = krec->sttfg;
stdy.ka_fg = krec -> ka_fg; stdy.ka_fg = krec->ka_fg;
if(jrec->stbofs && (fptr = getstb(jrec->hinshi)) != NULL)
stdy.len -= StbYomiLen(fptr + jrec->stbofs - 1);
if (jrec -> stbofs && (fptr = getstb(jrec -> hinsi)) != NULL) if((fptr = Settou_ptr(jrec->sttofs)) != NULL)
stdy.len -= StbYomiLen(fptr + jrec -> stbofs - 1);
if ((fptr = Settou_ptr(jrec -> sttofs)) != NULL)
stdy.sttlen = SttYomiLen(fptr); stdy.sttlen = SttYomiLen(fptr);
else else
stdy.sttlen = 0; stdy.sttlen = 0;
memcpy((unsigned char*)&stdy, kanjitmp, sizeof(STDYOUT));
memcpy((unsigned char *)&stdy, kanjitmp, sizeof(STDYOUT));
kanjitmp += sizeof(STDYOUT); kanjitmp += sizeof(STDYOUT);
} }

190
deldic.c
View file

@ -27,87 +27,71 @@
* *
*/ */
/*
* $SonyRCSfile: deldic.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:01:42 $
*
* $Id$
*/
#include <sys/types.h> #include <sys/types.h>
#include <string.h> #include <string.h>
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "kanakan.h" #include "kanakan.h"
void mvmemi();
void mkidxtbl();
void mvmemi(); static int del_douon(TypeDicSeg seg, unsigned char* ptr, TypeDicOfs ofs);
void mkidxtbl(); static int del_segment(TypeDicSeg seg);
static int del_douon(TypeDicSeg seg, unsigned char* ptr, TypeDicOfs ofs);
static int del_segment(TypeDicSeg seg);
static void del_uidx(TypeDicSeg seg); static void del_uidx(TypeDicSeg seg);
static void del_stdy(TypeDicSeg seg, TypeDicOfs ofs, int size); static void del_stdy(TypeDicSeg seg, TypeDicOfs ofs, int size);
unsigned int unsigned int
deldic(unsigned char* yomi, unsigned char* kanji, TypeGram hinsi) deldic(unsigned char* yomi, unsigned char* kanji, TypeGram hinshi) {
{ unsigned char yptr[MaxWdYomiLen + 1];
unsigned char yptr[MaxWdYomiLen + 1]; unsigned char kptr[MaxWdKanjiLen + 1];
unsigned char kptr[MaxWdKanjiLen + 1]; unsigned int err;
unsigned int err; int knjlen;
int knjlen; TypeDicSeg useg;
TypeDicSeg useg; TypeDicOfs ofs;
TypeDicOfs ofs; unsigned char *p1, *p2, *p3;
unsigned char *p1, *p2, *p3; int dblknum;
int dblknum; int hblknum;
int hblknum; int kblknum;
int kblknum; int samlen;
int samlen; unsigned char *stp, *edp;
unsigned char *stp, *edp; int size, len;
int size, len;
if ((err = addel_arg(yomi, kanji, hinsi, yptr, sizeof(yptr))) != 0) if((err = addel_arg(yomi, kanji, hinshi, yptr, sizeof(yptr))) != 0)
return err; return err;
if ((curdict -> maxunit) == 0) return AD_NotUserDict; if((curdict->maxunit) == 0) return AD_NotUserDict;
knjlen = cvtknj(yomi, kanji, kptr); knjlen = cvtknj(yomi, kanji, kptr);
cnvstart = yptr; cnvstart = yptr;
cnvlen = strlen(yptr); cnvlen = strlen(yptr);
useg = srchidx((TypeDicSeg)DicSegBase, cnvlen); useg = srchidx((TypeDicSeg)DicSegBase, cnvlen);
(*curdict->getdic)(curdict, useg); (*curdict->getdic)(curdict, useg);
if ((dblknum = srchkana(&p1, &samlen)) == 0) return AD_NoMidasi; if((dblknum = srchkana(&p1, &samlen)) == 0) return AD_NoMidasi;
if ((hblknum = srchgram(p1, &p2, hinsi)) == 0) return AD_NoHinsi; if((hblknum = srchgram(p1, &p2, hinshi)) == 0) return AD_NoHinshi;
p3 = p2; p3 = p2;
kblknum = srchkanji(&p3, kptr, knjlen); kblknum = srchkanji(&p3, kptr, knjlen);
if (*p3 == HinsiBlkTerm) return AD_NoKanji; if(*p3 == HinshiBlkTerm) return AD_NoKanji;
ofs = p3 - dicbuf; ofs = p3 - dicbuf;
edp = skipkstr(p3); edp = skipkstr(p3);
if (kblknum == 1) { if(kblknum == 1) {
if (hblknum == 1) { if(hblknum == 1) {
if (dblknum == 1) { if(dblknum == 1) {
return del_segment(useg); return del_segment(useg);
} } else {
else {
return del_douon(useg, p1, ofs); return del_douon(useg, p1, ofs);
} }
} } else {
else {
stp = p2; stp = p2;
edp++; edp++;
} }
} } else {
else {
stp = p3; stp = p3;
} }
@ -120,7 +104,7 @@ deldic(unsigned char* yomi, unsigned char* kanji, TypeGram hinsi)
memset(edp, DicSegTerm, dicbuf + curdict->seglen - edp); memset(edp, DicSegTerm, dicbuf + curdict->seglen - edp);
set_size(p1, (int)(getsize(p1) - size), set_size(p1, (int)(getsize(p1) - size),
(int)getplen(p1), (int)getnlen(p1)); (int)getplen(p1), (int)getnlen(p1));
(*curdict->putdic)(curdict, useg); (*curdict->putdic)(curdict, useg);
@ -129,29 +113,25 @@ deldic(unsigned char* yomi, unsigned char* kanji, TypeGram hinsi)
return AD_Done; return AD_Done;
} }
static int static int
del_douon(TypeDicSeg seg, unsigned char* ptr, TypeDicOfs ofs) del_douon(TypeDicSeg seg, unsigned char* ptr, TypeDicOfs ofs) {
{ unsigned char *nxt, *p1, *p2;
unsigned char *nxt, *p1, *p2; int size;
int size; int nlen, plen, len;
int nlen, plen, len;
nxt = getntag(ptr); nxt = getntag(ptr);
if (segend(nxt)) { if(segend(nxt)) {
size = nxt - ptr; size = nxt - ptr;
memset(ptr, DicSegTerm, dicbuf + curdict->seglen - nxt); memset(ptr, DicSegTerm, dicbuf + curdict->seglen - nxt);
} } else {
else {
size = getsize(nxt); size = getsize(nxt);
nlen = getnlen(nxt); nlen = getnlen(nxt);
plen = getplen(nxt); plen = getplen(nxt);
if (ptr == segtop()) { if(ptr == segtop()) {
if (nlen + plen > (unsigned int) count_uidx() if(nlen + plen > (unsigned int)count_uidx() + strlen(get_idxptr(seg)))
+ strlen(get_idxptr(seg)))
return AD_OvflwIndex; return AD_OvflwIndex;
} }
@ -167,7 +147,7 @@ del_douon(TypeDicSeg seg, unsigned char* ptr, TypeDicOfs ofs)
size = p1 - p2; size = p1 - p2;
memset(dicbuf + curdict->seglen - size, DicSegTerm, size); memset(dicbuf + curdict->seglen - size, DicSegTerm, size);
if (ptr == segtop()) { if(ptr == segtop()) {
chg_uidx(seg, ptr + DouonBlkSizeNumber, nlen + len); chg_uidx(seg, ptr + DouonBlkSizeNumber, nlen + len);
} }
} }
@ -179,24 +159,21 @@ del_douon(TypeDicSeg seg, unsigned char* ptr, TypeDicOfs ofs)
return AD_Done; return AD_Done;
} }
static int static int
del_segment(TypeDicSeg seg) del_segment(TypeDicSeg seg) {
{ int i;
int i; STDYIN* styp;
STDYIN *styp; TypeDicID dicid;
TypeDicID dicid; TypeStyNum stdynum;
TypeStyNum stdynum; TypeDicSeg sg;
TypeDicSeg sg;
if (curdict->segunit > 1) { if(curdict->segunit > 1) {
for (sg = seg + 1 ; sg < curdict->segunit ; sg++) { for(sg = seg + 1; sg < curdict->segunit; sg++) {
(*curdict->getdic)(curdict, sg); (*curdict->getdic)(curdict, sg);
(*curdict->putdic)(curdict, sg - 1); (*curdict->putdic)(curdict, sg - 1);
} }
curdict->segunit--; curdict->segunit--;
} } else {
else {
memset(dicbuf, DicSegTerm, (int)curdict->seglen); memset(dicbuf, DicSegTerm, (int)curdict->seglen);
dicbuf[0] = 0; dicbuf[0] = 0;
(*curdict->putdic)(curdict, DicSegBase); (*curdict->putdic)(curdict, DicSegBase);
@ -206,29 +183,29 @@ del_segment(TypeDicSeg seg)
del_uidx(seg); del_uidx(seg);
if (StudyExist()) { if(StudyExist()) {
dicid = curdict->dicid; dicid = curdict->dicid;
for (i = 0, styp = StudyDict ; i < StudyCount ; ) { for(i = 0, styp = StudyDict; i < StudyCount;) {
if (styp -> dicid != dicid) if(styp->dicid != dicid)
; ;
else if (styp -> seg > seg) else if(styp->seg > seg)
styp -> seg -= 1; styp->seg -= 1;
else if (styp -> seg < seg) else if(styp->seg < seg)
; ;
else { else {
stdynum = styp -> styno; stdynum = styp->styno;
StudyCount--; StudyCount--;
mvmemi((unsigned char*)(styp + 1), mvmemi((unsigned char*)(styp + 1),
(unsigned char*)styp, (unsigned char*)styp,
sizeof(*styp) * (StudyCount - i)); sizeof(*styp) * (StudyCount - i));
continue; continue;
} }
i++; i++;
styp++; styp++;
} }
for (i = 0, styp = StudyDict ; i < StudyCount ; i++, styp++) for(i = 0, styp = StudyDict; i < StudyCount; i++, styp++)
if (styp -> styno > stdynum) styp -> styno -= 1; if(styp->styno > stdynum) styp->styno -= 1;
putstydic(); putstydic();
} }
@ -236,16 +213,13 @@ del_segment(TypeDicSeg seg)
return AD_Done; return AD_Done;
} }
static void static void
del_uidx(TypeDicSeg seg) del_uidx(TypeDicSeg seg) {
{ unsigned char *p, *q;
unsigned char *p, *q; int len;
int len;
p = get_idxptr(seg); p = get_idxptr(seg);
for (q = p ; *q++; ) for(q = p; *q++;);
;
mvmemi(q, p, idxbuf + curdict->idxlen - q); mvmemi(q, p, idxbuf + curdict->idxlen - q);
@ -257,41 +231,39 @@ del_uidx(TypeDicSeg seg)
mkidxtbl(curdict); mkidxtbl(curdict);
} }
static void static void
del_stdy(TypeDicSeg seg, TypeDicOfs ofs, int size) del_stdy(TypeDicSeg seg, TypeDicOfs ofs, int size) {
{ int i;
int i; TypeStyNum stdynum;
TypeStyNum stdynum; STDYIN* stdy;
STDYIN *stdy; TypeDicID dicid;
TypeDicID dicid;
if (StudyExist()) { if(StudyExist()) {
stdynum = 0; stdynum = 0;
dicid = curdict->dicid; dicid = curdict->dicid;
for (i = 0, stdy = StudyDict ; i < StudyCount ; ) { for(i = 0, stdy = StudyDict; i < StudyCount;) {
if (stdy -> dicid != dicid) if(stdy->dicid != dicid)
; ;
else if (stdy -> seg != seg) else if(stdy->seg != seg)
; ;
else if (stdy -> offset > ofs) else if(stdy->offset > ofs)
stdy -> offset -= size; stdy->offset -= size;
else if (stdy -> offset == ofs) { else if(stdy->offset == ofs) {
stdynum = stdy -> styno; stdynum = stdy->styno;
StudyCount--; StudyCount--;
mvmemi((unsigned char*)(stdy + 1), mvmemi((unsigned char*)(stdy + 1),
(unsigned char*)stdy, (unsigned char*)stdy,
sizeof(*stdy) * (StudyCount - i)); sizeof(*stdy) * (StudyCount - i));
continue; continue;
} }
i++; i++;
stdy++; stdy++;
} }
for (i = 0, stdy = StudyDict ; i < StudyCount ; i++, stdy++) for(i = 0, stdy = StudyDict; i < StudyCount; i++, stdy++)
if (stdy -> styno > stdynum) (stdy -> styno)--; if(stdy->styno > stdynum) (stdy->styno)--;
putstydic(); putstydic();
} }

821
depend.c

File diff suppressed because it is too large Load diff

51
dict.c
View file

@ -27,60 +27,45 @@
* *
*/ */
/*
* $SonyRCSfile: dict.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:01:45 $
*
* $Id$
*/
#include <sys/types.h> #include <sys/types.h>
#include "sj_euc.h" #include "sj_euc.h"
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "kanakan.h" #include "kanakan.h"
void get_askknj(void) {
void unsigned char* p;
get_askknj(void) unsigned char* q;
{ unsigned char* r;
unsigned char *p; int i = 0, csize;
unsigned char *q; int flg;
unsigned char *r;
int i = 0, csize;
int flg;
p = q = dicbuf; p = q = dicbuf;
q += *p++; q += *p++;
while (p < q) { while(p < q) {
askknj[i] = p; askknj[i] = p;
r = NULL; r = NULL;
flg = TRUE; flg = TRUE;
do { do {
csize = codesize(*p); csize = codesize(*p);
if (p[csize] == KanjiStrEnd) flg = FALSE; if(p[csize] == KanjiStrEnd) flg = FALSE;
if (!r && (*p != AiAttribute)) if(!r && (*p != AiAttribute))
r = p; r = p;
p += csize; p += csize;
} while (flg); } while(flg);
p++; p++;
askknj_k[i++] = r; askknj_k[i++] = r;
} }
} }
int seldict(TypeDicID id) {
DICTL* dp;
int for(dp = dictlist; dp; dp = dp->next) {
seldict(TypeDicID id) if((curdict = dp->dict)->dicid == id)
{
DICTL *dp;
for (dp = dictlist ; dp ; dp = dp -> next) {
if ((curdict = dp -> dict) -> dicid == id)
return TRUE; return TRUE;
} }
curdict = NULL; curdict = NULL;
@ -88,10 +73,8 @@ seldict(TypeDicID id)
return FALSE; return FALSE;
} }
unsigned char* unsigned char*
get_idxptr(TypeDicSeg seg) get_idxptr(TypeDicSeg seg) {
{
(*curdict->getofs)(curdict); (*curdict->getofs)(curdict);
(*curdict->getidx)(curdict); (*curdict->getidx)(curdict);

View file

@ -27,66 +27,56 @@
* *
*/ */
/*
* $SonyRCSfile: dictdisp.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:03:34 $
*/
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>
#include <ctype.h> #include <ctype.h>
void void
dictdisp(output) dictdisp(output) char* output;
char *output;
{ {
unsigned char buf[BUFSIZ]; unsigned char buf[BUFSIZ];
unsigned char *p; unsigned char* p;
FILE *fp; FILE* fp;
int flg; int flg;
int i; int i;
if (output && *output) { if(output && *output) {
fp = fopen(output, "w"); fp = fopen(output, "w");
if (!fp) { 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); 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); exit(1);
} }
} } else
else
fp = stdout; fp = stdout;
flg = sj3_getdict_mb(buf); flg = sj3_getdict_mb(buf);
while (flg == 0) { while(flg == 0) {
p = buf; p = buf;
printout_mb(fp, p); printout_mb(fp, p);
i = strlen(p); i = strlen(p);
if (i < 24) if(i < 24)
while (i < 24) { while(i < 24) {
printout_mb(fp, "\t"); printout_mb(fp, "\t");
i += 8; i += 8;
} }
else else
printout_mb(fp, " "); printout_mb(fp, " ");
while (*p++) ; while(*p++);
printout_mb(fp, p); printout_mb(fp, p);
i = strlen(p); i = strlen(p);
if (i < 24) if(i < 24)
while (i < 24) { while(i < 24) {
printout_mb(fp, "\t"); printout_mb(fp, "\t");
i += 8; i += 8;
} }
else else
printout_mb(fp, " "); printout_mb(fp, " ");
while (*p++) ; while(*p++);
printout(fp, hns2str(*p)); printout(fp, hns2str(*p));
printout_mb(fp, ":\n"); printout_mb(fp, ":\n");
flg = sj3_nextdict_mb(buf); flg = sj3_nextdict_mb(buf);
} }
if (fp != stdout) fclose(fp); if(fp != stdout) fclose(fp);
} }

View file

@ -27,15 +27,6 @@
* *
*/ */
/*
* $SonyRCSfile: dictmake.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:03:35 $
*/
#include "sj_sysvdef.h" #include "sj_sysvdef.h"
#include <stdio.h> #include <stdio.h>
#ifdef SVR4 #ifdef SVR4
@ -48,41 +39,40 @@
#include "sj3lib.h" #include "sj3lib.h"
#include "sjtool.h" #include "sjtool.h"
#define IsEOL(c) ((c) == '\0') #define IsEOL(c) ((c) == '\0')
#define IsBlank(c) ((c) == ' ' || (c) == '\t') #define IsBlank(c) ((c) == ' ' || (c) == '\t')
extern int force_flag; extern int force_flag;
extern int verbose_flag; extern int verbose_flag;
extern int _sys_code; extern int _sys_code;
static void touroku(y, k, h) static void touroku(y, k, h) char *y, *k, *h;
char *y, *k, *h;
{ {
int err; int err;
int grm; int grm;
unsigned char buf[BUFSIZ], *hp; unsigned char buf[BUFSIZ], *hp;
if (_sys_code == SYS_SJIS) { if(_sys_code == SYS_SJIS) {
(void) sjistoeuc(buf, BUFSIZ, h, strlen(h)+1); (void)sjistoeuc(buf, BUFSIZ, h, strlen(h) + 1);
hp = buf; hp = buf;
} else { } else {
hp = (unsigned char *) h; hp = (unsigned char*)h;
} }
if (!(grm = str2hns(hp))) { 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); 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; if(force_flag) return;
exit(1); exit(1);
} }
err = sj3_touroku_mb(y, k, grm); err = sj3_touroku_mb(y, k, grm);
switch (err) { switch(err) {
case -1: case -1:
error_out("\245\265\241\274\245\320\244\254\315\356\244\301\244\336\244\267\244\277"); error_out("\245\265\241\274\245\320\244\254\315\356\244\301\244\336\244\267\244\277");
exit(1); exit(1);
case 0: case 0:
if (verbose_flag) 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); normal_out("%s:%s:%s \244\362\305\320\317\277\244\267\244\336\244\267\244\277\n", y, k, h);
break; break;
@ -95,7 +85,7 @@ char *y, *k, *h;
exit(1); exit(1);
case SJ3_WORD_EXIST: case SJ3_WORD_EXIST:
if (verbose_flag) 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); 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; break;
@ -105,22 +95,22 @@ char *y, *k, *h;
case SJ3_DICT_FULL: 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); 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; if(force_flag) break;
exit(1); exit(1);
case SJ3_BAD_YOMI_STR: 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); 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; if(force_flag) break;
exit(1); exit(1);
case SJ3_BAD_KANJI_STR: 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); 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; if(force_flag) break;
exit(1); exit(1);
case SJ3_BAD_HINSI_CODE: case SJ3_BAD_HINSHI_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); 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; if(force_flag) break;
exit(1); exit(1);
case SJ3_INDEX_FULL: case SJ3_INDEX_FULL:
@ -129,94 +119,92 @@ char *y, *k, *h;
case SJ3_TOUROKU_FAILED: case SJ3_TOUROKU_FAILED:
default: 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)", 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, hns2str(h), h); y, k, hns2str(h), h);
break; break;
} }
} }
void void
dictmake(input) dictmake(input) char* input;
char *input;
{ {
unsigned char buf[BUFSIZ]; unsigned char buf[BUFSIZ];
FILE *fp; FILE* fp;
unsigned char *p; unsigned char* p;
unsigned char *yom, *knj, *grm; unsigned char *yom, *knj, *grm;
int c; int c;
int flg; int flg;
static char *FormatErrorString = "\245\325\245\251\241\274\245\336\245\303\245\310\245\250\245\351\241\274:%s"; 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) { if(input && *input) {
fp = fopen(input, "r"); fp = fopen(input, "r");
if (!fp) { 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); 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); exit(1);
} }
} } else
else
fp = stdin; fp = stdin;
while (fgets((char *)buf, sizeof(buf), fp)) { while(fgets((char*)buf, sizeof(buf), fp)) {
if ((p = (unsigned char *)strchr((char *)buf, '\n'))) if((p = (unsigned char*)strchr((char*)buf, '\n')))
*p = '\0'; *p = '\0';
else { else {
do { do {
c = fgetc(fp); c = fgetc(fp);
} while (c != '\n' && c != EOF); } while(c != '\n' && c != EOF);
} }
yom = buf; yom = buf;
while (IsBlank(*yom)) yom++; while(IsBlank(*yom)) yom++;
if (IsEOL(*yom)) { if(IsEOL(*yom)) {
error_out(FormatErrorString, buf); error_out(FormatErrorString, buf);
if (force_flag) continue; if(force_flag) continue;
break; break;
} }
knj = yom; knj = yom;
while (!IsEOL(*knj) && !IsBlank(*knj)) knj++; while(!IsEOL(*knj) && !IsBlank(*knj)) knj++;
if (IsEOL(*knj)) { if(IsEOL(*knj)) {
error_out(FormatErrorString, buf); error_out(FormatErrorString, buf);
if (force_flag) continue; if(force_flag) continue;
break; break;
} }
*knj++ = '\0'; *knj++ = '\0';
while (IsBlank(*knj)) knj++; while(IsBlank(*knj)) knj++;
if (IsEOL(*knj)) { if(IsEOL(*knj)) {
error_out(FormatErrorString, buf); error_out(FormatErrorString, buf);
if (force_flag) continue; if(force_flag) continue;
break; break;
} }
grm = knj; grm = knj;
while (!IsEOL(*grm) && !IsBlank(*grm)) grm++; while(!IsEOL(*grm) && !IsBlank(*grm)) grm++;
if (IsEOL(*grm)) { if(IsEOL(*grm)) {
error_out(FormatErrorString, buf); error_out(FormatErrorString, buf);
if (force_flag) continue; if(force_flag) continue;
break; break;
} }
*grm++ = '\0'; *grm++ = '\0';
while (IsBlank(*grm)) grm++; while(IsBlank(*grm)) grm++;
if (IsEOL(*grm)) { if(IsEOL(*grm)) {
error_out(FormatErrorString, buf); error_out(FormatErrorString, buf);
if (force_flag) continue; if(force_flag) continue;
break; break;
} }
flg = -1; flg = -1;
while (*grm && flg) { while(*grm && flg) {
p = grm; p = grm;
while (!IsEOL(*p) && !IsBlank(*p) && (*p != ':')) p++; while(!IsEOL(*p) && !IsBlank(*p) && (*p != ':')) p++;
if (IsEOL(*p)) if(IsEOL(*p))
flg = 0; flg = 0;
else else
*p++ = '\0'; *p++ = '\0';
touroku(yom, knj, grm); touroku(yom, knj, grm);
if (flg) { if(flg) {
grm = p; grm = p;
while (IsBlank(*grm)) grm++; while(IsBlank(*grm)) grm++;
} }
} }
} }

View file

@ -32,84 +32,83 @@
*/ */
#ifndef _DICTTOOL_H_ #ifndef _DICTTOOL_H_
#define _DICTTOOL_H_ 1 #define _DICTTOOL_H_ 1
#include <stdio.h> #include <stdio.h>
#include <sys/types.h> #include <sys/types.h>
#include "sj_struct2.h" #include "sj_struct2.h"
/* char.c */ /* char.c */
int cnvyomi (int code); int cnvyomi(int code);
int h2kcode (int code); int h2kcode(int code);
int codesize (unsigned char code); int codesize(unsigned char code);
void output_knj (FILE* fp, unsigned char* p, int l); void output_knj(FILE* fp, unsigned char* p, int l);
void output_str (FILE* fp, char* p); void output_str(FILE* fp, char* p);
void output_int (FILE* fp, int* p); void output_int(FILE* fp, int* p);
void output_yomi (FILE* fp, unsigned char* p); void output_yomi(FILE* fp, unsigned char* p);
/* cnvhinsi.c */ /* cnvhinshi.c */
int cnvhinsi (unsigned char *buf); int cnvhinshi(unsigned char* buf);
/* file.c */ /* file.c */
FILE* Fopen (char* filename, char* type); FILE* Fopen(char* filename, char* type);
void Fclose (FILE* fp); void Fclose(FILE* fp);
int Fseek (FILE* fp, long ofs, int ptr); int Fseek(FILE* fp, long ofs, int ptr);
long Ftell (FILE* fp); long Ftell(FILE* fp);
off_t Fsize (char* filename); off_t Fsize(char* filename);
int Fread (char* p, int s, int n, FILE* fp); int Fread(char* p, int s, int n, FILE* fp);
int Fwrite (char* p, int s, int n, FILE* fp); int Fwrite(char* p, int s, int n, FILE* fp);
int Fgetc (FILE* fp); int Fgetc(FILE* fp);
void Fflush (FILE* fp); void Fflush(FILE* fp);
/* hindo.c */ /* hindo.c */
int check_hindo (unsigned char* ptr, int len); int check_hindo(unsigned char* ptr, int len);
void knjhnd_set (unsigned char* p, int l); void knjhnd_set(unsigned char* p, int l);
void knjhnd_reset (unsigned char* p, int l); void knjhnd_reset(unsigned char* p, int l);
int decide_knjask (void); int decide_knjask(void);
void clear_hindo (void); void clear_hindo(void);
void clear_assyuku (void); void clear_asshuku(void);
/* knjcvt.c */ /* knjcvt.c */
unsigned char* knjofscvt (unsigned char* ptr, int len, int* ret); unsigned char* knjofscvt(unsigned char* ptr, int len, int* ret);
unsigned char* knjcvt (unsigned char* ptr, int len, int* ret); unsigned char* knjcvt(unsigned char* ptr, int len, int* ret);
/* makedict.c */ /* makedict.c */
void parse (int argc, char** argv); void parse(int argc, char** argv);
void usage (char* name); void usage(char* name);
int getch (void); int getch(void);
void mark_file (FILE* out); void mark_file(FILE* out);
/* makelist.c */ /* makelist.c */
void clear_list (void); void clear_list(void);
void flush_douon (void); void flush_douon(void);
void makelist (int* yomi, int* kanji, int hinsi, int* atr); void makelist(int* yomi, int* kanji, int hinshi, int* atr);
/* makeseg.c */ /* makeseg.c */
size_t make_knjstr (unsigned char* src, int len, unsigned char* dst); size_t make_knjstr(unsigned char* src, int len, unsigned char* dst);
void makeseg (void); void makeseg(void);
void makehead (unsigned char* dict_name); void makehead(unsigned char* dict_name);
/* memory.c */ /* memory.c */
void* Malloc (size_t size); void* Malloc(size_t size);
void* Zalloc (size_t size); void* Zalloc(size_t size);
void Free (void *p); void Free(void* p);
/* offset.c */ /* offset.c */
void set_ofsrec (unsigned char* ptr, int len, int ofs); void set_ofsrec(unsigned char* ptr, int len, int ofs);
int isknjexist (unsigned char* knj, int len); int isknjexist(unsigned char* knj, int len);
void clear_ofsrec (void); void clear_ofsrec(void);
OffsetRec* real_ofsrec (unsigned char* ptr); OffsetRec* real_ofsrec(unsigned char* ptr);
/* readline.c */ /* readline.c */
int* readline (void); int* readline(void);
void setline (void (*func)(int*, int*, int, int*)); void setline(void (*func)(int*, int*, int, int*));
/* string.c */ /* string.c */
int bubun_str (unsigned char* p1, int l1, unsigned char* p2, int l2); int bubun_str(unsigned char* p1, int l1, unsigned char* p2, int l2);
int overlap_str (unsigned char *p1, int l1, unsigned char* p2, int l2); int overlap_str(unsigned char* p1, int l1, unsigned char* p2, int l2);
int top_strcmp (int* src, int* dst); int top_strcmp(int* src, int* dst);
int last_strcmp (int* src, int* dst); int last_strcmp(int* src, int* dst);
int string_cmp (unsigned char* p1, int l1, unsigned char* p2, int l2); int string_cmp(unsigned char* p1, int l1, unsigned char* p2, int l2);
#endif /* _DICTTOOL_H_ */ #endif /* _DICTTOOL_H_ */

452
display.c
View file

@ -27,14 +27,6 @@
* *
*/ */
/*
* $SonyRCSfile: display.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:03:12 $
*/
#include "sj_sysvdef.h" #include "sj_sysvdef.h"
#include <errno.h> #include <errno.h>
#include "common.h" #include "common.h"
@ -45,451 +37,399 @@ char bp[TCBUFSIZE];
char bpwork[AREASIZE]; char bpwork[AREASIZE];
char cmove[SHORTLENGTH]; char cmove[SHORTLENGTH];
extern int master;
extern int vflag;
extern int master;
extern int vflag;
extern char term_name[]; extern char term_name[];
int status_line; int status_line;
char *CM,*US,*UE,*SO,*SE,*CE,*CS,*BEL,*RP,*AP,*TS,*FS,*DS,*I2; char * CM, *US, *UE, *SO, *SE, *CE, *CS, *BEL, *RP, *AP, *TS, *FS, *DS, *I2;
char *SC,*RC,*SR,*DO; char * SC, *RC, *SR, *DO;
static int keyboard = OTHER_KB; static int keyboard = OTHER_KB;
checkterm() {
char * kb, *area, *tgetstr(), *tmp;
checkterm () int val;
{ Conversion* cv;
char *kb, *area, *tgetstr (), *tmp;
int val;
Conversion *cv;
cv = current_conversion; cv = current_conversion;
val = tgetent (bp, term_name); val = tgetent(bp, term_name);
if (val == -1) { if(val == -1) {
aprintf ("Can't open termcap file\n\r"); aprintf("Can't open termcap file\n\r");
done3 (); done3();
} else if (val == 0) { } else if(val == 0) {
aprintf ("No termcap entry for %s\n\r",term_name); aprintf("No termcap entry for %s\n\r", term_name);
done3 (); done3();
} }
if ((val = tgetnum("co")) < 0) { if((val = tgetnum("co")) < 0) {
cv-> column = 0; cv->column = 0;
} else { } else {
cv-> column = val; cv->column = val;
} }
if ((val = tgetnum("li")) < 0) { if((val = tgetnum("li")) < 0) {
cv->line = 0; cv->line = 0;
} else { } else {
cv->line = val; cv->line = val;
} }
if (tmp = getenv("ROWS")) { if(tmp = getenv("ROWS")) {
(void) sscanf(tmp, "%d", &val); (void)sscanf(tmp, "%d", &val);
cv->line = val; cv->line = val;
} }
if (tmp = getenv("COLUMNS")) { if(tmp = getenv("COLUMNS")) {
(void) sscanf(tmp, "%d", &val); (void)sscanf(tmp, "%d", &val);
cv->column = val; cv->column = val;
} }
area = bpwork; area = bpwork;
if ((CM = tgetstr ("cm", &area)) == (char *)NULL) { if((CM = tgetstr("cm", &area)) == (char*)NULL) {
aprintf ("No termcap 'cm'\n\r"); aprintf("No termcap 'cm'\n\r");
done3 (); done3();
} }
US = tgetstr ("us", &area); US = tgetstr("us", &area);
UE = tgetstr ("ue", &area); UE = tgetstr("ue", &area);
SO = tgetstr ("so", &area); SO = tgetstr("so", &area);
SE = tgetstr ("se", &area); SE = tgetstr("se", &area);
CE = tgetstr ("ce", &area); CE = tgetstr("ce", &area);
if ((SC = tgetstr ("sc", &area)) == NULL) if((SC = tgetstr("sc", &area)) == NULL)
SC = "\0337"; SC = "\0337";
if ((RC = tgetstr ("rc", &area)) == NULL) if((RC = tgetstr("rc", &area)) == NULL)
RC = "\0338"; RC = "\0338";
if ((SR = tgetstr ("sr", &area)) == NULL) if((SR = tgetstr("sr", &area)) == NULL)
SR = "\033M"; SR = "\033M";
if ((DO = tgetstr ("do", &area)) == NULL) if((DO = tgetstr("do", &area)) == NULL)
DO = "\033E"; DO = "\033E";
if ((CS = tgetstr ("cs", &area)) == NULL) if((CS = tgetstr("cs", &area)) == NULL)
CS = "\033[%i%d;%dr"; CS = "\033[%i%d;%dr";
if ((BEL = tgetstr ("bl", &area)) == NULL) { if((BEL = tgetstr("bl", &area)) == NULL) {
BEL = "\007"; BEL = "\007";
} }
if ((RP = tgetstr ("RP", &area)) == NULL) { if((RP = tgetstr("RP", &area)) == NULL) {
RP = "\033[6n"; RP = "\033[6n";
} }
if ((AP = tgetstr ("AP", &area)) == NULL) { if((AP = tgetstr("AP", &area)) == NULL) {
AP = "\033[%d;%dR"; AP = "\033[%d;%dR";
} }
if ((status_line = tgetflag("hs")) && tgetflag("es")) { if((status_line = tgetflag("hs")) && tgetflag("es")) {
TS = tgetstr ("ts", &area); TS = tgetstr("ts", &area);
FS = tgetstr ("fs", &area); FS = tgetstr("fs", &area);
DS = tgetstr ("ds", &area); DS = tgetstr("ds", &area);
#ifdef SVR4 #ifdef SVR4
I2 = tgetstr ("i1", &area); I2 = tgetstr("i1", &area);
#else #else
I2 = tgetstr ("i2", &area); I2 = tgetstr("i2", &area);
#endif #endif
} else { } else {
status_line = 0; status_line = 0;
} }
#ifdef SVR4 #ifdef SVR4
if(strstr(term_name, "news") != NULL) {
if (strstr(term_name, "news") != NULL) {
keyboard = NEWS_KB; keyboard = NEWS_KB;
set_news(); set_news();
} else } else
keyboard = OTHER_KB; keyboard = OTHER_KB;
#else #else
kb = tgetstr ("KB", &area); kb = tgetstr("KB", &area);
if (kb == (char *)NULL || *kb == '\0') if(kb == (char*)NULL || *kb == '\0')
keyboard = OTHER_KB; keyboard = OTHER_KB;
else if (strcmp (kb, "news") == 0) { else if(strcmp(kb, "news") == 0) {
keyboard = NEWS_KB; keyboard = NEWS_KB;
set_news(); set_news();
} else } else
keyboard = OTHER_KB; keyboard = OTHER_KB;
#endif #endif
strcpy (cmove, CM); strcpy(cmove, CM);
} }
void outc(c) void outc(c) char c;
char c;
{ {
putchar (c); putchar(c);
} }
void erroutc(c) void erroutc(c) {
{ fputc(c, stderr);
fputc (c, stderr);
} }
start_guideline () start_guideline() {
{ if(status_line && I2)
if (status_line && I2)
tputs(I2, 1, erroutc); tputs(I2, 1, erroutc);
} }
end_guideline () end_guideline() {
{ if(status_line) {
if (status_line) {
tputs(DS, 1, outc); tputs(DS, 1, outc);
fflush(stdout); fflush(stdout);
} }
} }
put_space (n) put_space(n) int n;
int n;
{ {
int i; int i;
for (i = 0 ; i < n ; i ++) for(i = 0; i < n; i++)
putchar (' '); putchar(' ');
} }
Backspace () Backspace() {
{ putchar(BS);
putchar (BS);
} }
master_flush () master_flush() {
{ SELECT_FD ifds;
SELECT_FD ifds; int nc;
int nc; struct timeval t;
struct timeval t;
do { do {
cont: cont:
t.tv_sec = 0; t.tv_sec = 0;
t.tv_usec = UsecWeight (1); t.tv_usec = UsecWeight(1);
FD_ZERO (&ifds); FD_ZERO(&ifds);
FD_SET (STDIN, &ifds); FD_SET(STDIN, &ifds);
FD_SET (master, &ifds); FD_SET(master, &ifds);
if (select (master + 1, &ifds, 0, 0, &t) > 0) { if(select(master + 1, &ifds, 0, 0, &t) > 0) {
if (FD_ISSET (STDIN, &ifds)) if(FD_ISSET(STDIN, &ifds))
if (ThroughIntr ()) if(ThroughIntr())
return 1; return 1;
if (FD_ISSET (master, &ifds)) if(FD_ISSET(master, &ifds))
output_master (); output_master();
} else if (errno == EINTR) { } else if(errno == EINTR) {
errno = 0; errno = 0;
goto cont; goto cont;
} }
if (ioctl (master, TIOCOUTQ, &nc) < 0) if(ioctl(master, TIOCOUTQ, &nc) < 0)
return (1); return (1);
} while (nc > 0); } while(nc > 0);
return (0); return (0);
} }
ThroughIntr () ThroughIntr() {
{ wchar16_t s[2];
wchar16_t s[2];
SJ_read (s, 1); SJ_read(s, 1);
s[1] = '\0'; s[1] = '\0';
if (isintr (*s)) { if(isintr(*s)) {
master_out (s, 1); master_out(s, 1);
return (1); return (1);
} } else {
else { unget_inkey2(s, 1);
unget_inkey2 (s, 1);
return (0); return (0);
} }
} }
under_in () under_in() {
{
tputs(US, 1, outc); tputs(US, 1, outc);
} }
under_out () under_out() {
{
tputs(UE, 1, outc); tputs(UE, 1, outc);
} }
reverse_in () reverse_in() {
{
tputs(SO, 1, outc); tputs(SO, 1, outc);
} }
reverse_out () reverse_out() {
{
tputs(SE, 1, outc); tputs(SE, 1, outc);
} }
beep() {
beep ()
{
tputs(BEL, 1, outc); tputs(BEL, 1, outc);
Flush (); Flush();
} }
CursorSet(row, col) unsigned short row, col;
CursorSet (row, col)
unsigned short row, col;
{ {
tputs(tgoto(CM, col - 1, row - 1), 1, outc); tputs(tgoto(CM, col - 1, row - 1), 1, outc);
Flush (); Flush();
} }
RegionSet(row1, row2) int row1, row2;
RegionSet (row1, row2)
int row1, row2;
{ {
tputs(SC, 1, outc);
tputs(tgoto(CS, row2, row1 - 1), 1, outc);
tputs (SC, 1, outc); tputs(RC, 1, outc);
tputs (tgoto (CS, row2, row1 - 1), 1, outc); tputs(DO, 1, outc);
tputs (RC, 1, outc); tputs(SR, 1, outc);
tputs (DO, 1, outc); tputs(SC, 1, outc);
tputs (SR, 1, outc); tputs(tgoto(CS, row2 - 1, row1 - 1), 1, outc);
tputs (SC, 1, outc); tputs(RC, 1, outc);
tputs (tgoto (CS, row2 - 1, row1 - 1), 1, outc); Flush();
tputs (RC, 1, outc);
Flush ();
} }
#define SUCC 0 #define SUCC 0
#define FAIL 1 #define FAIL 1
#define CRLIMIT 4 #define CRLIMIT 4
int master_flush_flag = 1; int master_flush_flag = 1;
CursorRead (row, col) CursorRead(row, col) unsigned short* row, *col;
unsigned short *row, *col;
{ {
int count; int count;
int row1, col1, row2, col2; int row1, col1, row2, col2;
row2 = col2 = 0; row2 = col2 = 0;
count = 0; count = 0;
for (;;) { for(;;) {
if (++count > CRLIMIT) { if(++count > CRLIMIT) {
break; break;
} }
tputs(RP, 1, outc); tputs(RP, 1, outc);
fflush (stdout); fflush(stdout);
if (CRP (&row1, &col1) == FAIL) if(CRP(&row1, &col1) == FAIL)
continue; continue;
if (master_flush_flag) if(master_flush_flag)
master_flush (); master_flush();
tputs(RP, 1, outc); tputs(RP, 1, outc);
fflush (stdout); fflush(stdout);
if (CRP (&row2, &col2) == FAIL) if(CRP(&row2, &col2) == FAIL)
continue; continue;
if (row1 == row2 && col1 == col2) if(row1 == row2 && col1 == col2)
break; break;
} }
*row = row2; *row = row2;
*col = col2; *col = col2;
} }
#define CRPLIM 4
#define BACKLIM 16
#define MARKER '%'
#define SEPARA ';'
CRP(row, col)
#define CRPLIM 4 int *row, *col;
#define BACKLIM 16
#define MARKER '%'
#define SEPARA ';'
CRP (row, col)
int *row, *col;
{ {
char *sa, *sd; char * sa, *sd;
int c; int c;
char Rchar[4], Cchar[4]; char Rchar[4], Cchar[4];
wchar16_t Back[BACKLIM]; wchar16_t Back[BACKLIM];
int Back_count, count; int Back_count, count;
count = 0;
count = 0;
Back_count = 0; Back_count = 0;
c = '\0'; c = '\0';
top: top:
sa = AP; sa = AP;
sd = Rchar; sd = Rchar;
if (++count > CRPLIM) if(++count > CRPLIM)
return (FAIL); return (FAIL);
if (Back_count) { if(Back_count) {
unget_inkey2 (Back, Back_count); unget_inkey2(Back, Back_count);
Back_count = 0; Back_count = 0;
} }
while ((c != ESC) && ((c = CRI ()) != ESC) && Back_count < BACKLIM) while((c != ESC) && ((c = CRI()) != ESC) && Back_count < BACKLIM)
Back[Back_count++] = c; Back[Back_count++] = c;
if (Back_count) { if(Back_count) {
unget_inkey2 (Back, Back_count); unget_inkey2(Back, Back_count);
Back_count = 0; Back_count = 0;
} }
Back[Back_count++] = c; Back[Back_count++] = c;
sa ++; sa++;
while (*sa != '\0') { while(*sa != '\0') {
if (*sa == MARKER) { if(*sa == MARKER) {
sa += 2; sa += 2;
while (c = CRI ()) { while(c = CRI()) {
if (c == ESC) if(c == ESC)
goto top; goto top;
Back[Back_count++] = c; Back[Back_count++] = c;
if (isdigit (c)) { if(isdigit(c)) {
*(sd ++) = c; *(sd++) = c;
*sd = '\0'; *sd = '\0';
} } else if(c == *sa)
else if (c == *sa)
break; break;
else else
goto top; goto top;
} }
if (c == SEPARA) if(c == SEPARA)
sd = Cchar; sd = Cchar;
} } else {
else { c = CRI();
c = CRI (); if(c == ESC)
if (c == ESC)
goto top; goto top;
Back[Back_count++] = c; Back[Back_count++] = c;
if (c != *sa) if(c != *sa)
goto top; goto top;
} }
sa ++; sa++;
} }
*row = atoi (Rchar); *row = atoi(Rchar);
*col = atoi (Cchar); *col = atoi(Cchar);
return (SUCC); return (SUCC);
} }
unget_inkey2(s, n)
wchar16_t* s;
unget_inkey2 (s, n) int n;
wchar16_t *s;
int n;
{ {
extern wchar16_t ibuf[]; extern wchar16_t ibuf[];
extern int buf_count; extern int buf_count;
int i; int i;
if (buf_count < KEYBUFSIZ - n) { if(buf_count < KEYBUFSIZ - n) {
for (i = 0 ; i < n ; i ++) for(i = 0; i < n; i++)
ibuf[buf_count ++] = *(s ++); ibuf[buf_count++] = *(s++);
} }
} }
unget_key (c) unget_key(c) int c;
int c;
{ {
wchar16_t tmp[2]; wchar16_t tmp[2];
tmp[0] = c; tmp[0] = c;
unget_inkey2 (tmp, 1); unget_inkey2(tmp, 1);
} }
CRI() {
wchar16_t c;
SJ_read(&c, 1);
CRI ()
{
wchar16_t c;
SJ_read (&c, 1);
return (c); return (c);
} }
Clear_EOL() {
Clear_EOL ()
{
reverse_out(); reverse_out();
tputs(CE, 1, outc); tputs(CE, 1, outc);
} }
StartGuide (row, col) StartGuide(row, col) unsigned short* row, *col;
unsigned short *row, *col;
{ {
Conversion *cv; Conversion* cv;
cv = current_conversion; cv = current_conversion;
master_flush_flag = 0; master_flush_flag = 0;
if (status_line) { if(status_line) {
tputs (tgoto (TS, 0, 0), 1, outc); tputs(tgoto(TS, 0, 0), 1, outc);
} else {
CursorRead(row, col);
CursorSet(cv->line + 1, 0);
} }
else { Flush();
CursorRead (row, col);
CursorSet (cv->line + 1, 0);
}
Flush ();
} }
EndGuide (row, col) EndGuide(row, col) unsigned short row, col;
unsigned short row, col;
{ {
if (status_line) { if(status_line) {
tputs (FS, 1, outc); tputs(FS, 1, outc);
} else {
CursorSet(row, col);
} }
else { Flush();
CursorSet (row, col);
}
Flush ();
master_flush_flag = 1; master_flush_flag = 1;
} }
Flush () Flush() {
{ fflush(stdout);
fflush (stdout);
} }
Cscroll () Cscroll() {
{
return (1); return (1);
} }

505
douon.c
View file

@ -27,504 +27,461 @@
* *
*/ */
/*
* $SonyRCSfile: douon.c,v $
* $SonyRevision: 1.2 $
* $SonyDate: 1996/02/23 11:04:02 $
*/
#include "common.h" #include "common.h"
#include "key.h" #include "key.h"
#include "wchar16.h" #include "wchar16.h"
#define DNUM 5 #define DNUM 5
static int Dcount; static int Dcount;
static int Dpoint; static int Dpoint;
static struct douon_sj3 HenkanDouon[DOUON_N]; static struct douon_sj3 HenkanDouon[DOUON_N];
static wchar16_t Dkanji[BUFFLENGTH * 2]; static wchar16_t Dkanji[BUFFLENGTH * 2];
void go_gakusyuu(); void go_gakushuu();
SJ_getdouon (s, d, n, choice, reconv) SJ_getdouon(s, d, n, choice, reconv)
wchar16_t *s; wchar16_t* s;
struct douon_sj3 *d; struct douon_sj3* d;
int n; int n;
int choice; int choice;
int reconv; int reconv;
{ {
int len; int len;
Dcount = SJ2_getdouon (s, d, n, choice, reconv); Dcount = SJ2_getdouon(s, d, n, choice, reconv);
if(Dcount < 0 && !dconnect(1))
Dcount = SJ2_getdouon(s, d, n, choice, reconv);
if (Dcount < 0 && !dconnect(1)) if(Dcount <= 0) {
Dcount = SJ2_getdouon (s, d, n, choice, reconv);
if (Dcount <= 0) {
Dcount = 1; Dcount = 1;
len = wslen (s); len = wslen(s);
Strncpy ((char *)d[0].ddata, s, len); Strncpy((char*)d[0].ddata, s, len);
d[0].dlen = wcbyte(s); d[0].dlen = wcbyte(s);
d[0].wlen = len; d[0].wlen = len;
return(0); return (0);
} else } else
return(1); return (1);
} }
exec_douon() {
Conversion* cv;
int val;
cv = GetConversion();
exec_douon () if(cv->CurBun == -1) {
{
Conversion *cv;
int val;
cv = GetConversion ();
if (cv->CurBun == -1) {
cv->CurBun = 0; cv->CurBun = 0;
Rdisp (); Rdisp();
} }
cv->PreBun = cv->CurBun; cv->PreBun = cv->CurBun;
if (cv->Bkettei[cv->CurBun] & Bmuhenkan) if(cv->Bkettei[cv->CurBun] & Bmuhenkan)
val = Sdouon (2); val = Sdouon(2);
else else
val = Sdouon (1); val = Sdouon(1);
if (!val) if(!val)
Rdisp (); Rdisp();
} }
wrap_douon (back) wrap_douon(back) int back;
int back;
{ {
Conversion *cv; Conversion* cv;
int val; int val;
cv = current_conversion; cv = current_conversion;
if (cv->CurBun == -1) { if(cv->CurBun == -1) {
cv->CurBun = 0; cv->CurBun = 0;
Rdisp (); Rdisp();
} }
cv->PreBun = cv->CurBun; cv->PreBun = cv->CurBun;
if (cv->Dflag == cv->CurBun) if(cv->Dflag == cv->CurBun)
val = Rdouon (back); val = Rdouon(back);
else { else {
val = Sdouon (2); val = Sdouon(2);
cv->Dflag = cv->CurBun; cv->Dflag = cv->CurBun;
} }
if (!val) if(!val)
Rdisp (); Rdisp();
} }
Cdouon(yomi, gnum)
wchar16_t* yomi;
Cdouon (yomi, gnum) int gnum;
wchar16_t *yomi;
int gnum;
{ {
int i, j;
int len;
wchar16_t* s;
int dispnum;
int num;
int displen;
int base;
char tmp[BUFFLENGTH], tmp2[BUFFLENGTH * 2];
wchar16_t wtmp[BUFFLENGTH], wtmp2[BUFFLENGTH * 2];
int i, j; int gakushuu;
int len; unsigned short row, col;
wchar16_t *s; Conversion* cv;
int dispnum;
int num;
int displen;
int base;
char tmp[BUFFLENGTH], tmp2[BUFFLENGTH * 2];
wchar16_t wtmp[BUFFLENGTH], wtmp2[BUFFLENGTH * 2];
int gakusyuu;
unsigned short row, col;
Conversion *cv;
cv = current_conversion; cv = current_conversion;
gakusyuu = SJ_getdouon (yomi, HenkanDouon, gnum, 0, 0); gakushuu = SJ_getdouon(yomi, HenkanDouon, gnum, 0, 0);
dispnum = DNUM; dispnum = DNUM;
if (dispnum > Dcount) if(dispnum > Dcount)
j = Dcount; j = Dcount;
else else
j = dispnum; j = dispnum;
len = 0; len = 0;
for (i = 0 ; i < j ; i ++) for(i = 0; i < j; i++)
len += HenkanDouon[i].dlen; len += HenkanDouon[i].dlen;
len /= j; len /= j;
if (len < 1) if(len < 1)
len = 1; len = 1;
len += 6; len += 6;
sprintf (tmp, "%d/%d ", Dcount, Dcount); sprintf(tmp, "%d/%d ", Dcount, Dcount);
displen = cv->column - strlen (tmp) - 1; displen = cv->column - strlen(tmp) - 1;
if (displen < 1) if(displen < 1)
displen = 1; displen = 1;
num = displen / len; num = displen / len;
if (num < 1) if(num < 1)
num = 1; num = 1;
if (num < dispnum && num > 0) if(num < dispnum && num > 0)
dispnum = num; dispnum = num;
for (i = 0 ; ; ) { for(i = 0;;) {
if (i >= Dcount) if(i >= Dcount)
i = 0; i = 0;
StartGuide (&row, &col); StartGuide(&row, &col);
Clear_EOL (); Clear_EOL();
base = i; base = i;
sprintf (tmp, "%d/%d", i + 1, Dcount); sprintf(tmp, "%d/%d", i + 1, Dcount);
(void) mbstowcs(wtmp, tmp, BUFFLENGTH); (void)mbstowcs(wtmp, tmp, BUFFLENGTH);
printR (wtmp); printR(wtmp);
put_space (1); put_space(1);
for (j = 0 ; j < dispnum ; j ++, i ++) { for(j = 0; j < dispnum; j++, i++) {
if (i >= Dcount) if(i >= Dcount)
break; break;
len = HenkanDouon[i].dlen; len = HenkanDouon[i].dlen;
if (len > displen) if(len > displen)
len = displen; len = displen;
s = (wchar16_t *)HenkanDouon[i].ddata; s = (wchar16_t*)HenkanDouon[i].ddata;
Strncpy (wtmp, s, HenkanDouon[i].wlen); Strncpy(wtmp, s, HenkanDouon[i].wlen);
wtmp[HenkanDouon[i].wlen] = '\0'; wtmp[HenkanDouon[i].wlen] = '\0';
(void) wcstombs(tmp, wtmp, BUFFLENGTH); (void)wcstombs(tmp, wtmp, BUFFLENGTH);
sprintf (tmp2, "[%d] %s ", j+1, tmp); sprintf(tmp2, "[%d] %s ", j + 1, tmp);
(void) mbstowcs(wtmp2, tmp2, BUFFLENGTH); (void)mbstowcs(wtmp2, tmp2, BUFFLENGTH);
SJ_print (wtmp2); SJ_print(wtmp2);
} }
EndGuide (row, col); EndGuide(row, col);
Flush (); Flush();
num = Dselect (j); num = Dselect(j);
if(num == 0)
if (num == 0)
continue; continue;
else if(num == -1) {
else if (num == -1) { if((i >= Dcount) && ((Dcount % dispnum) != 0))
if ((i >= Dcount) && ((Dcount % dispnum) != 0))
i = Dcount - (Dcount % dispnum); i = Dcount - (Dcount % dispnum);
else else
i -= dispnum; i -= dispnum;
i -= dispnum; i -= dispnum;
if (i < 0) { if(i < 0) {
if (Dcount > dispnum) { if(Dcount > dispnum) {
if ((Dcount % dispnum) == 0) if((Dcount % dispnum) == 0)
i = Dcount - dispnum; i = Dcount - dispnum;
else else
i = Dcount - (Dcount % dispnum); i = Dcount - (Dcount % dispnum);
} } else
else
i = 0; i = 0;
} }
continue; continue;
} }
else if(num > j) {
else if (num > j) { disp_mode();
disp_mode ();
return (FALSE); return (FALSE);
} }
else else
break; break;
} }
disp_mode (); disp_mode();
Dpoint = base + num - 1; Dpoint = base + num - 1;
len = HenkanDouon[Dpoint].dlen; len = HenkanDouon[Dpoint].dlen;
s = (wchar16_t *)HenkanDouon[Dpoint].ddata; s = (wchar16_t*)HenkanDouon[Dpoint].ddata;
Strncpy (Dkanji, s, HenkanDouon[Dpoint].wlen); Strncpy(Dkanji, s, HenkanDouon[Dpoint].wlen);
Dkanji[HenkanDouon[Dpoint].wlen] = '\0'; Dkanji[HenkanDouon[Dpoint].wlen] = '\0';
if (HenkanDouon[Dpoint].valid) if(HenkanDouon[Dpoint].valid)
PushGD (gnum, &HenkanDouon[Dpoint].dcid); PushGD(gnum, &HenkanDouon[Dpoint].dcid);
if (gakusyuu) if(gakushuu)
if (HenkanDouon[Dpoint].valid) if(HenkanDouon[Dpoint].valid)
SJ2_study (&HenkanDouon[Dpoint].dcid); SJ2_study(&HenkanDouon[Dpoint].dcid);
else else
SJ2_toroku(yomi, HenkanDouon[Dpoint].ddata, SJ3_H_NRMNOUN); SJ2_toroku(yomi, HenkanDouon[Dpoint].ddata, SJ3_H_NRMNOUN);
return (TRUE); return (TRUE);
} }
Dselect (lim) Dselect(lim) int lim;
int lim;
{ {
extern int keyvalue; extern int keyvalue;
int c, num; int c, num;
char s[2]; char s[2];
SaveConversion (); SaveConversion();
while ((c = inkey ()) != EOF) { while((c = inkey()) != EOF) {
if (AnotherConversion ()) { if(AnotherConversion()) {
unget_key (c); unget_key(c);
break; break;
} }
if (keyvalue == KEY_KETTEI) if(keyvalue == KEY_KETTEI)
break; break;
else if (keyvalue == KEY_HENKAN || keyvalue == KEY_RIGHT) else if(keyvalue == KEY_HENKAN || keyvalue == KEY_RIGHT)
return (0); return (0);
else if (c == ' ') else if(c == ' ')
return (0); return (0);
else if (keyvalue == KEY_MUHENKAN || keyvalue == KEY_LEFT else if(keyvalue == KEY_MUHENKAN || keyvalue == KEY_LEFT || is_bsdel(c))
|| is_bsdel (c))
return (-1); return (-1);
else if (WcIsASCII(c) && isdigit (WcLowByte(c))) { else if(WcIsASCII(c) && isdigit(WcLowByte(c))) {
*s = c; *s = c;
s[1] = '\0'; s[1] = '\0';
num = atoi (s); num = atoi(s);
if (num > 0 && num <= lim) if(num > 0 && num <= lim)
return (num); return (num);
} } else if(keyvalue != KEY_NORMAL)
else if (keyvalue != KEY_NORMAL)
break; break;
else if (keyvalue == KEY_NORMAL && IsESC (c)) else if(keyvalue == KEY_NORMAL && IsESC(c))
break; break;
} }
return (lim + 1); return (lim + 1);
} }
Gdouon(yomi, num, choice, reconv)
Gdouon (yomi, num, choice, reconv) wchar16_t* yomi;
wchar16_t *yomi; int num;
int num; int choice;
int choice; int reconv;
int reconv;
{ {
int len;
wchar16_t* s;
int len; SJ_getdouon(yomi, HenkanDouon, num, choice, reconv);
wchar16_t *s;
SJ_getdouon (yomi, HenkanDouon, num, choice, reconv);
Dpoint = 0; Dpoint = 0;
len = HenkanDouon[Dpoint].wlen; len = HenkanDouon[Dpoint].wlen;
s = (wchar16_t *)HenkanDouon[Dpoint].ddata; s = (wchar16_t*)HenkanDouon[Dpoint].ddata;
Strncpy (Dkanji, s, len); Strncpy(Dkanji, s, len);
Dkanji[len] = '\0'; Dkanji[len] = '\0';
if (HenkanDouon[Dpoint].valid) if(HenkanDouon[Dpoint].valid)
PushGD (num, &HenkanDouon[Dpoint].dcid); PushGD(num, &HenkanDouon[Dpoint].dcid);
} }
Sdouon (Choice) Sdouon(Choice) int Choice;
int Choice;
{ {
Conversion *cv; Conversion* cv;
int i, j; int i, j;
int len; int len;
wchar16_t yomi[BUFFLENGTH * 2]; wchar16_t yomi[BUFFLENGTH * 2];
int count; int count;
cv = current_conversion; cv = current_conversion;
count = 0; count = 0;
if (Choice == 0) if(Choice == 0)
i = cv->PreBun; i = cv->PreBun;
else else
i = cv->CurBun; i = cv->CurBun;
top: top:
if ((len = load_bun(i, yomi, MODE_ZHIRA)) <= 0) { if((len = load_bun(i, yomi, MODE_ZHIRA)) <= 0) {
cv->Bkettei[i] |= Bmuhenkan; cv->Bkettei[i] |= Bmuhenkan;
cv->Bkettei[i] &= ~Bhenkan; cv->Bkettei[i] &= ~Bhenkan;
cv->Pkettei[i] = MODE_ZHIRA; cv->Pkettei[i] = MODE_ZHIRA;
*Dkanji = '\0'; *Dkanji = '\0';
goto null; goto null;
} } else if(len > DLEN) {
else if (len > DLEN) {
cv->Bkettei[i] |= Bmuhenkan; cv->Bkettei[i] |= Bmuhenkan;
cv->Bkettei[i] &= ~Bhenkan; cv->Bkettei[i] &= ~Bhenkan;
*Dkanji = '\0'; *Dkanji = '\0';
goto null; goto null;
} } else if(Choice == 0 && (cv->Bkettei[i] & Bmuhenkan)) {
else if (Choice == 0 && (cv->Bkettei[i] & Bmuhenkan)) {
goto tail; goto tail;
} } else {
else {
cv->Bkettei[i] |= Bhenkan; cv->Bkettei[i] |= Bhenkan;
cv->Bkettei[i] &= ~Bmuhenkan; cv->Bkettei[i] &= ~Bmuhenkan;
} }
if (Choice == 1) { if(Choice == 1) {
if (Cdouon (yomi, i) == FALSE) if(Cdouon(yomi, i) == FALSE)
return (1); return (1);
cv->Pkettei[i] = MODE_ZHIRA; cv->Pkettei[i] = MODE_ZHIRA;
} } else if(Choice == 2) {
else if (Choice == 2) { Gdouon(yomi, i, 0, 0);
Gdouon (yomi, i, 0, 0); } else if(Choice == 3)
} Gdouon(yomi, i, count, 1);
else if (Choice == 3)
Gdouon (yomi, i, count, 1);
else else
Gdouon (yomi, i, count, 0); Gdouon(yomi, i, count, 0);
null: null:
len = wslen (Dkanji); len = wslen(Dkanji);
if (!(cv->Bkettei[i] & Bedit)) { if(!(cv->Bkettei[i] & Bedit)) {
if (cv->Enum >= MAXENUM) if(cv->Enum >= MAXENUM)
return (1); return (1);
j = cv->Enum ++; j = cv->Enum++;
cv->Edit[i] = j; cv->Edit[i] = j;
cv->Epoint[j] = &(cv->Ebuff[cv->e_point]); cv->Epoint[j] = &(cv->Ebuff[cv->e_point]);
cv->e_point += DLEN; cv->e_point += DLEN;
} } else
else
j = cv->Edit[i]; j = cv->Edit[i];
if (0 < len && len <= DLEN) { if(0 < len && len <= DLEN) {
cv->Bkettei[i] |= Bedit; cv->Bkettei[i] |= Bedit;
cv->Pkettei[i] = MODE_ZHIRA; cv->Pkettei[i] = MODE_ZHIRA;
} }
cv->Elen[j] = len; cv->Elen[j] = len;
wscpy (cv->Epoint[j], Dkanji); wscpy(cv->Epoint[j], Dkanji);
tail: tail:
if (Choice == 0 && i != cv->CurBun) { if(Choice == 0 && i != cv->CurBun) {
i = cv->CurBun; i = cv->CurBun;
goto top; goto top;
} }
if (cv->PreBun == cv->Bnum) if(cv->PreBun == cv->Bnum)
cv->Bkettei[cv->Bnum] = Bend; cv->Bkettei[cv->Bnum] = Bend;
return (0); return (0);
} }
Rdouon(back) int back;
Rdouon (back)
int back;
{ {
Conversion *cv; Conversion* cv;
int i, j; int i, j;
int len; int len;
wchar16_t *s; wchar16_t* s;
cv = current_conversion; cv = current_conversion;
if (Dcount > 0) { if(Dcount > 0) {
if (back) { if(back) {
Dpoint --; Dpoint--;
if (Dpoint < 0) if(Dpoint < 0)
Dpoint = Dcount - 1; Dpoint = Dcount - 1;
} } else {
else { Dpoint++;
Dpoint ++; if(Dpoint >= Dcount)
if (Dpoint >= Dcount)
Dpoint = 0; Dpoint = 0;
} }
len = HenkanDouon[Dpoint].wlen; len = HenkanDouon[Dpoint].wlen;
s = (wchar16_t *)HenkanDouon[Dpoint].ddata; s = (wchar16_t*)HenkanDouon[Dpoint].ddata;
Strncpy (Dkanji, s, len); Strncpy(Dkanji, s, len);
Dkanji[len] = '\0'; Dkanji[len] = '\0';
i = cv->CurBun; i = cv->CurBun;
j = cv->Edit[i]; j = cv->Edit[i];
cv->Elen[j] = len; cv->Elen[j] = len;
wscpy (cv->Epoint[j], Dkanji); wscpy(cv->Epoint[j], Dkanji);
return (0); return (0);
} }
return (1); return (1);
} }
Bkanji (kanji) Bkanji(kanji)
wchar16_t *kanji; wchar16_t* kanji;
{ {
Conversion *cv; Conversion* cv;
int i; int i;
int plen, len; int plen, len;
wchar16_t *s; wchar16_t* s;
cv = current_conversion; cv = current_conversion;
s = kanji; s = kanji;
*s = '\0'; *s = '\0';
plen = 0; plen = 0;
for (i = 0 ; i < cv->Bnum ; i ++) { for(i = 0; i < cv->Bnum; i++) {
if ((len = Bstr (i, s)) <= 0) if((len = Bstr(i, s)) <= 0)
continue; continue;
s += len; s += len;
plen += len; plen += len;
} }
return(plen); return (plen);
} }
struct studyrec Gdata[BUFFLENGTH]; struct studyrec Gdata[BUFFLENGTH];
PushGD (num, wordid) PushGD(num, wordid) int num;
int num; struct studyrec* wordid;
struct studyrec *wordid;
{ {
Gdata[num] = *wordid; Gdata[num] = *wordid;
} }
cl_gakusyuu () cl_gakushuu() {
{ Conversion* cv;
Conversion *cv; int i, j;
int i, j; int o_point, n_point;
int o_point, n_point;
cv = current_conversion; cv = current_conversion;
for (i = 0 ; i < cv->Bnum ; i ++) { for(i = 0; i < cv->Bnum; i++) {
if (cv->OrgPlen[i] != cv->Plen[i]) { if(cv->OrgPlen[i] != cv->Plen[i]) {
o_point = n_point = 0; o_point = n_point = 0;
j = i; j = i;
while (j < cv->Bnum) { while(j < cv->Bnum) {
o_point += cv->OrgPlen[j]; o_point += cv->OrgPlen[j];
n_point += cv->Plen[j]; n_point += cv->Plen[j];
j ++; j++;
if (o_point == n_point) if(o_point == n_point)
break; break;
} }
j--; j--;
check_and_gakusyuu (i, j); check_and_gakushuu(i, j);
i = j; i = j;
} }
} }
} }
check_and_gakusyuu (m, n) check_and_gakushuu(m, n) int m, n;
int m, n;
{ {
Conversion *cv; Conversion* cv;
int i, j; int i, j;
cv = current_conversion; cv = current_conversion;
i = m; i = m;
j = i + 1; j = i + 1;
while (j <= n && j < cv->Bnum) { while(j <= n && j < cv->Bnum) {
if (cv->Bkettei[i] & Bedit && !(cv->Bkettei[i] & Bmuhenkan)) if(cv->Bkettei[i] & Bedit && !(cv->Bkettei[i] & Bmuhenkan))
go_gakusyuu (i); go_gakushuu(i);
i ++; i++;
j ++; j++;
} }
} }
void void
go_gakusyuu (n) go_gakushuu(n) int n;
int n;
{ {
Conversion *cv; Conversion* cv;
int i, j; int i, j;
wchar16_t yomi1[BUFFLENGTH], yomi2[BUFFLENGTH]; wchar16_t yomi1[BUFFLENGTH], yomi2[BUFFLENGTH];
struct studyrec *gdatap; struct studyrec* gdatap;
int len; int len;
cv = current_conversion; cv = current_conversion;
i = n; i = n;
j = i + 1; j = i + 1;
if (cv->Pedited[i] == 1 || cv->Pedited[j] == 1) if(cv->Pedited[i] == 1 || cv->Pedited[j] == 1)
return; return;
if((len = load_bun(i, yomi1, MODE_ZHIRA)) <= 0 && len > DLEN)
if ((len = load_bun(i, yomi1, MODE_ZHIRA)) <= 0 && len > DLEN)
return; return;
if ((len = load_bun(j, yomi2, MODE_ZHIRA)) > DLEN) if((len = load_bun(j, yomi2, MODE_ZHIRA)) > DLEN)
return; return;
if(len <= 0)
if (len <= 0)
gdatap = NULL; gdatap = NULL;
else else
gdatap = &Gdata[j]; gdatap = &Gdata[j];
SJ2_clstudy (yomi1, yomi2, gdatap); SJ2_clstudy(yomi1, yomi2, gdatap);
} }

830
edit.c

File diff suppressed because it is too large Load diff

127
error.c
View file

@ -27,17 +27,6 @@
* *
*/ */
/*
* $SonyRCSfile: error.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:02:51 $
*
* $Id$
*/
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@ -45,43 +34,35 @@
#include "sj_typedef.h" #include "sj_typedef.h"
#include "server.h" #include "server.h"
extern char program_name[]; extern char program_name[];
extern int debug_level; extern int debug_level;
extern int client_fd; extern int client_fd;
static char *tty_name = "/dev/tty"; static char* tty_name = "/dev/tty";
static FILE *errfp = NULL; static FILE* errfp = NULL;
static FILE *logfp = NULL; static FILE* logfp = NULL;
static FILE *dbgfp = NULL; static FILE* dbgfp = NULL;
int open_error(void) {
extern char* error_file;
int flg = 0;
int if(error_file && *error_file) {
open_error(void) if(!strcmp(error_file, tty_name)) {
{
extern char *error_file;
int flg = 0;
if (error_file && *error_file) {
if (!strcmp(error_file, tty_name)) {
errfp = stderr; errfp = stderr;
flg = -1; flg = -1;
} } else if(!(errfp = fopen(error_file, "a")))
else if (!(errfp = fopen(error_file, "a")))
fprintf(stderr, "Can't open \"%s\"\r\n", error_file); fprintf(stderr, "Can't open \"%s\"\r\n", error_file);
} } else
else
errfp = NULL; errfp = NULL;
return flg; return flg;
} }
void error_out(char* s, int p1, int p2, int p3, int p4, int p5) {
char tmp[BUFSIZ];
void if(errfp) {
error_out(char* s, int p1, int p2, int p3, int p4, int p5)
{
char tmp[BUFSIZ];
if (errfp) {
sprintf(tmp, s, p1, p2, p3, p4, p5); sprintf(tmp, s, p1, p2, p3, p4, p5);
fprintf(errfp, "%s: %s\r\n", program_name, tmp); fprintf(errfp, "%s: %s\r\n", program_name, tmp);
fflush(errfp); fflush(errfp);
@ -89,89 +70,69 @@ error_out(char* s, int p1, int p2, int p3, int p4, int p5)
exit(1); exit(1);
} }
void warning_out(char* s, int p1, int p2, int p3, int p4, int p5) {
char tmp[BUFSIZ];
void if(errfp) {
warning_out(char* s, int p1, int p2, int p3, int p4, int p5)
{
char tmp[BUFSIZ];
if (errfp) {
sprintf(tmp, s, p1, p2, p3, p4); sprintf(tmp, s, p1, p2, p3, p4);
fprintf(errfp, "%s: warning: %s\r\n", program_name, tmp); fprintf(errfp, "%s: warning: %s\r\n", program_name, tmp);
fflush(errfp); fflush(errfp);
} }
} }
int open_log(void) {
extern char* log_file;
int flg = 0;
int if(log_file && *log_file) {
open_log(void) if(!strcmp(log_file, tty_name)) {
{
extern char *log_file;
int flg = 0;
if (log_file && *log_file) {
if (!strcmp(log_file, tty_name)) {
logfp = stderr; logfp = stderr;
flg = -1; flg = -1;
} } else
else
logfp = fopen(log_file, "a"); logfp = fopen(log_file, "a");
if (logfp) { if(logfp) {
time_t t; time_t t;
time(&t); time(&t);
fprintf(logfp, "%s: log started at %s\r", fprintf(logfp, "%s: log started at %s\r",
program_name, ctime(&t)); program_name, ctime(&t));
fflush(logfp); fflush(logfp);
} } else
else
fprintf(stderr, "Can't open \"%s\"\r\n", log_file); fprintf(stderr, "Can't open \"%s\"\r\n", log_file);
} } else
else
logfp = NULL; logfp = NULL;
return flg; return flg;
} }
void logging_out(char* s, int p1, int p2, int p3, int p4, int p5) {
char tmp[BUFSIZ];
void if(logfp) {
logging_out(char* s, int p1, int p2, int p3, int p4, int p5)
{
char tmp[BUFSIZ];
if (logfp) {
sprintf(tmp, s, p1, p2, p3, p4, p5); sprintf(tmp, s, p1, p2, p3, p4, p5);
fprintf(logfp, "%s\r\n", tmp); fprintf(logfp, "%s\r\n", tmp);
fflush(logfp); fflush(logfp);
} }
} }
int open_debug(void) {
extern char* debug_file;
int flg = 0;
int if(debug_file && *debug_file) {
open_debug(void) if(!strcmp(debug_file, tty_name)) {
{
extern char *debug_file;
int flg = 0;
if (debug_file && *debug_file) {
if (!strcmp(debug_file, tty_name)) {
dbgfp = stderr; dbgfp = stderr;
flg = -1; flg = -1;
} } else if(!(dbgfp = fopen(debug_file, "a")))
else if (!(dbgfp = fopen(debug_file, "a")))
fprintf(stderr, "Can't open \"%s\"\r\n", debug_file); fprintf(stderr, "Can't open \"%s\"\r\n", debug_file);
} } else
else
dbgfp = NULL; dbgfp = NULL;
return flg; return flg;
} }
void debug_out(int lvl, char* s, int p1, int p2, int p3, int p4, int p5) {
void if(lvl <= debug_level && dbgfp) {
debug_out(int lvl, char* s, int p1, int p2, int p3, int p4, int p5)
{
if (lvl <= debug_level && dbgfp) {
fprintf(dbgfp, s, p1, p2, p3, p4, p5); fprintf(dbgfp, s, p1, p2, p3, p4, p5);
fflush(dbgfp); fflush(dbgfp);
} }

452
etc.c
View file

@ -27,147 +27,136 @@
* *
*/ */
/*
* $SonyRCSfile: etc.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:03:15 $
*/
#include "common.h" #include "common.h"
#include "key.h" #include "key.h"
extern int keyvalue; extern int keyvalue;
static char rehname[SHORTLENGTH * 2]; static char rehname[SHORTLENGTH * 2];
extern char *cur_serv; extern char* cur_serv;
static int dcflag = 0; static int dcflag = 0;
void disp_version(); void disp_version();
exec_etc (key) exec_etc(key) int key;
int key;
{ {
unsigned short row, col; unsigned short row, col;
int inc; int inc;
int chbun; int chbun;
int edited; int edited;
int etckey; int etckey;
Conversion *cv; Conversion* cv;
cv = GetConversion (); cv = GetConversion();
edited = 0; edited = 0;
chbun = 0; chbun = 0;
StartGuide (&row, &col); StartGuide(&row, &col);
if (key == KEY_ETC) { if(key == KEY_ETC) {
printR (WCGEtc); printR(WCGEtc);
if (cv->column >= MINCOL) if(cv->column >= MINCOL)
spaceR (WCGetc); spaceR(WCGetc);
Clear_EOL (); Clear_EOL();
EndGuide (row, col); EndGuide(row, col);
SaveConversion (); SaveConversion();
inc = inkey (); inc = inkey();
if (AnotherConversion ()) if(AnotherConversion())
return(KEY_NORMAL); return (KEY_NORMAL);
cv = GetConversion (); cv = GetConversion();
etckey = etc_map (keyvalue); etckey = etc_map(keyvalue);
} } else {
else { EndGuide(row, col);
EndGuide (row, col);
etckey = key; etckey = key;
} }
switch (etckey) { switch(etckey) {
case KEY_NORMAL: case KEY_NORMAL:
normal: normal:
switch (inc) { switch(inc) {
case 'h': case 'h':
helplevel (); helplevel();
break; break;
case 't': case 't':
if (!IsCflag ()) if(!IsCflag())
chbun = exec_toroku (); chbun = exec_toroku();
break; break;
case 's': case 's':
if (!IsCflag ()) if(!IsCflag())
chbun = exec_syoukyo (); chbun = exec_shoukyo();
break; break;
case 'v': case 'v':
case 'd': case 'd':
disp_version (inc); disp_version(inc);
break; break;
case 'w': case 'w':
change_weight (); change_weight();
break; break;
default: default:
break; break;
} }
break; break;
case KEY_HELP: case KEY_HELP:
helplevel (); helplevel();
break; break;
case KEY_TOROKU: case KEY_TOROKU:
if (!IsCflag ()) if(!IsCflag())
chbun = exec_toroku (); chbun = exec_toroku();
break; break;
case KEY_SYOUKYO: case KEY_SHOUKYO:
if (!IsCflag ()) if(!IsCflag())
chbun = exec_syoukyo (); chbun = exec_shoukyo();
break; break;
case KEY_SJRC: case KEY_SJRC:
if (IsCflag ()) if(IsCflag())
exec_sjrc (); exec_sjrc();
break; break;
case KEY_EDIT: case KEY_EDIT:
if (IsHenkan ()) { if(IsHenkan()) {
if (cv->CurBun < 0) { if(cv->CurBun < 0) {
cv->CurBun = 0; cv->CurBun = 0;
Bdisp (1); Bdisp(1);
} }
edited = exec_edit (); edited = exec_edit();
} }
break; break;
case KEY_RECONNECT: case KEY_RECONNECT:
if (reconnect() && IsHenkan()) { if(reconnect() && IsHenkan()) {
EndGuide (row, col); EndGuide(row, col);
Clear_EOL(); Clear_EOL();
Ccheck(); Ccheck();
Cclear(1); Cclear(1);
ResetHenkan(); ResetHenkan();
vprintU(cv->out_buf, 1); vprintU(cv->out_buf, 1);
cv->Kanji = 0; cv->Kanji = 0;
return(KEY_NORMAL); return (KEY_NORMAL);
} }
break; break;
case KEY_ETC: case KEY_ETC:
break; break;
default: default:
if ((inc = write_pseq (2)) != 0) if((inc = write_pseq(2)) != 0)
goto normal; goto normal;
return(etckey); return (etckey);
break; break;
} }
EndGuide (row, col); EndGuide(row, col);
if (edited) { if(edited) {
if (!Sdouon (3)) if(!Sdouon(3))
Rdisp (); Rdisp();
} }
if (chbun) if(chbun)
Ssbun(1); Ssbun(1);
return(KEY_NORMAL); return (KEY_NORMAL);
} }
Ssbun(flag) Ssbun(flag) int flag;
int flag;
{ {
Conversion *cv; Conversion* cv;
static short ScurBun, SpreBun; static short ScurBun, SpreBun;
cv = GetConversion(); cv = GetConversion();
if (flag) { if(flag) {
if (cv->CurBun != ScurBun || cv->PreBun != SpreBun) { if(cv->CurBun != ScurBun || cv->PreBun != SpreBun) {
cv->CurBun = ScurBun; cv->CurBun = ScurBun;
cv->PreBun = SpreBun; cv->PreBun = SpreBun;
Bdisp(); Bdisp();
@ -178,25 +167,24 @@ int flag;
} }
} }
etc_map (key) etc_map(key) int key;
int key;
{ {
extern int u_etckeys; extern int u_etckeys;
extern int Uetckey[], Uetcval[]; extern int Uetckey[], Uetcval[];
int i; int i;
int val; int val;
for (i = 0 ; i < u_etckeys ; i ++) { for(i = 0; i < u_etckeys; i++) {
if (key == Uetckey[i]) if(key == Uetckey[i])
return (Uetcval[i]); return (Uetcval[i]);
} }
switch (key) { switch(key) {
case KEY_HENKAN: case KEY_HENKAN:
val = KEY_TOROKU; val = KEY_TOROKU;
break; break;
case KEY_MUHENKAN: case KEY_MUHENKAN:
val = KEY_SYOUKYO; val = KEY_SHOUKYO;
break; break;
case KEY_ETC: case KEY_ETC:
val = KEY_HELP; val = KEY_HELP;
@ -217,170 +205,153 @@ int key;
return (val); return (val);
} }
helplevel () helplevel() {
{ wchar16_t wtmp[BUFFLENGTH];
wchar16_t wtmp[BUFFLENGTH]; unsigned char mtmp[BUFFLENGTH];
unsigned char mtmp[BUFFLENGTH]; unsigned char tmp[BUFFLENGTH];
unsigned char tmp[BUFFLENGTH]; Conversion* cv;
Conversion *cv;
cv = GetConversion (); cv = GetConversion();
if (Hlevel == 1 && cv->column >= MINCOL) { if(Hlevel == 1 && cv->column >= MINCOL) {
HHlevel = 2; HHlevel = 2;
Hlevel = 2; Hlevel = 2;
(void) wcstombs((char *)mtmp, WCMHelp, BUFFLENGTH); (void)wcstombs((char*)mtmp, WCMHelp, BUFFLENGTH);
sprintf ((char *)tmp, (char *)mtmp, "on"); sprintf((char*)tmp, (char*)mtmp, "on");
(void) mbstowcs(wtmp, (char *)tmp, BUFFLENGTH); (void)mbstowcs(wtmp, (char*)tmp, BUFFLENGTH);
} } else {
else {
HHlevel = 1; HHlevel = 1;
Hlevel = 1; Hlevel = 1;
(void) wcstombs((char *)mtmp, WCMHelp, BUFFLENGTH); (void)wcstombs((char*)mtmp, WCMHelp, BUFFLENGTH);
sprintf ((char *)tmp, (char *)mtmp, "off"); sprintf((char*)tmp, (char*)mtmp, "off");
(void) mbstowcs(wtmp, (char *)tmp, BUFFLENGTH); (void)mbstowcs(wtmp, (char*)tmp, BUFFLENGTH);
} }
guide_print_pause (WCGHelp, wtmp); guide_print_pause(WCGHelp, wtmp);
} }
void void
disp_version (c) disp_version(c) int c;
int c;
{ {
extern char *Version, *Copyright, *Date; extern char *Version, *Copyright, *Date;
char tmp[BUFFLENGTH]; char tmp[BUFFLENGTH];
wchar16_t wtmp[BUFFLENGTH]; wchar16_t wtmp[BUFFLENGTH];
if (c == 'v') if(c == 'v')
sprintf (tmp, "%s, %s ", Version, Copyright); sprintf(tmp, "%s, %s ", Version, Copyright);
else if (c == 'd') else if(c == 'd')
sprintf (tmp, "%s ", Date); sprintf(tmp, "%s ", Date);
else else
return; return;
(void) mbstowcs(wtmp, tmp, BUFFLENGTH); (void)mbstowcs(wtmp, tmp, BUFFLENGTH);
guide_print_pause (0, wtmp); guide_print_pause(0, wtmp);
} }
exec_sjrc () exec_sjrc() {
{ extern char RCfile[];
extern char RCfile[]; char tmp[BUFFLENGTH];
char tmp[BUFFLENGTH]; unsigned char SUCCorFAIL[BUFFLENGTH];
unsigned char SUCCorFAIL[BUFFLENGTH]; wchar16_t wtmp[BUFFLENGTH];
wchar16_t wtmp[BUFFLENGTH];
if(*RCfile == (char)NULL) {
if (*RCfile == (char)NULL) {
getsjrc(); getsjrc();
if (*RCfile == (char)NULL) if(*RCfile == (char)NULL) {
{ (void)wcstombs((char*)SUCCorFAIL, WCNOTHsjrc, BUFFLENGTH);
(void) wcstombs((char *)SUCCorFAIL, WCNOTHsjrc, BUFFLENGTH); sprintf((char*)tmp, (char*)SUCCorFAIL);
sprintf((char *)tmp, (char *)SUCCorFAIL); (void)mbstowcs(wtmp, tmp, BUFFLENGTH);
(void) mbstowcs(wtmp, tmp, BUFFLENGTH); } else {
} (void)wcstombs((char*)SUCCorFAIL, WCSUCCsjrc, BUFFLENGTH);
else sprintf(tmp, "%s %s ", RCfile, SUCCorFAIL);
{ (void)mbstowcs(wtmp, tmp, BUFFLENGTH);
(void) wcstombs((char *)SUCCorFAIL, WCSUCCsjrc, BUFFLENGTH);
sprintf (tmp, "%s %s ", RCfile, SUCCorFAIL);
(void) mbstowcs(wtmp, tmp, BUFFLENGTH);
} }
} else { } else {
if (setrc () == TRUE) if(setrc() == TRUE) {
{ (void)wcstombs((char*)SUCCorFAIL, WCSUCCsjrc, BUFFLENGTH);
(void) wcstombs((char *)SUCCorFAIL, WCSUCCsjrc, BUFFLENGTH);
} else { } else {
(void) wcstombs((char *)SUCCorFAIL, WCFAILsjrc, BUFFLENGTH); (void)wcstombs((char*)SUCCorFAIL, WCFAILsjrc, BUFFLENGTH);
} }
sprintf (tmp, "%s %s ", RCfile, SUCCorFAIL); sprintf(tmp, "%s %s ", RCfile, SUCCorFAIL);
(void) mbstowcs(wtmp, tmp, BUFFLENGTH); (void)mbstowcs(wtmp, tmp, BUFFLENGTH);
} }
guide_print_pause (0, wtmp); guide_print_pause(0, wtmp);
} }
static int weight = 3; static int weight = 3;
static int seed = 100000; static int seed = 100000;
change_weight () change_weight() {
{ int c;
int c; char s[2];
char s[2]; char tmp[BUFFLENGTH];
char tmp[BUFFLENGTH]; unsigned char mtmp[BUFFLENGTH];
unsigned char mtmp[BUFFLENGTH]; wchar16_t wtmp[BUFFLENGTH];
wchar16_t wtmp[BUFFLENGTH];
(void) wcstombs((char *)mtmp, WCWeight_mes, BUFFLENGTH); (void)wcstombs((char*)mtmp, WCWeight_mes, BUFFLENGTH);
sprintf(tmp, (char *)mtmp, weight); sprintf(tmp, (char*)mtmp, weight);
(void) mbstowcs(wtmp, tmp, BUFFLENGTH); (void)mbstowcs(wtmp, tmp, BUFFLENGTH);
c = guide_print_pause (0, wtmp); c = guide_print_pause(0, wtmp);
if (isdigit (c) && (c != '0')) { if(isdigit(c) && (c != '0')) {
s[0] = c; s[0] = c;
s[1] = '\0'; s[1] = '\0';
weight = atoi (s); weight = atoi(s);
} }
} }
UsecWeight (sw) UsecWeight(sw) int sw;
int sw;
{ {
if(sw)
if (sw)
return (seed); return (seed);
else else
return (seed * weight); return (seed * weight);
} }
dconnect(aflag) dconnect(aflag) int aflag;
int aflag;
{ {
int err; int err;
char tmp[BUFFLENGTH]; char tmp[BUFFLENGTH];
wchar16_t wtmp[BUFFLENGTH]; wchar16_t wtmp[BUFFLENGTH];
unsigned char dtmp[BUFFLENGTH]; unsigned char dtmp[BUFFLENGTH];
if (!dcflag) { if(!dcflag) {
(void) wcstombs((char *)dtmp, WCDiscon, BUFFLENGTH); (void)wcstombs((char*)dtmp, WCDiscon, BUFFLENGTH);
sprintf(tmp, (char *)dtmp, cur_serv); sprintf(tmp, (char*)dtmp, cur_serv);
beep(); beep();
(void) mbstowcs(wtmp, tmp, BUFFLENGTH); (void)mbstowcs(wtmp, tmp, BUFFLENGTH);
guide_print_pause (0, wtmp); guide_print_pause(0, wtmp);
if(aflag && keyvalue == KEY_HENKAN) {
if (aflag && keyvalue == KEY_HENKAN) { if((err = sj3_autocon()) == 0) {
if ((err = sj3_autocon()) == 0) { (void)wcstombs((char*)dtmp, WCRserv_OK, BUFFLENGTH);
(void) wcstombs((char *)dtmp, WCRserv_OK, BUFFLENGTH); sprintf(tmp, (char*)dtmp, cur_serv);
sprintf(tmp, (char *)dtmp, cur_serv); (void)mbstowcs(wtmp, (char*)tmp, BUFFLENGTH);
(void) mbstowcs(wtmp, (char *)tmp, BUFFLENGTH);
guide_print_pause(0, wtmp); guide_print_pause(0, wtmp);
} else { } else {
guide_print_pause(WCSpace, WCNconnect); guide_print_pause(WCSpace, WCNconnect);
dcflag = 1; dcflag = 1;
} }
} else } else
dcflag = 1; dcflag = 1;
disp_mode(); disp_mode();
} }
return(dcflag); return (dcflag);
} }
set_dcflag(flag) set_dcflag(flag) int flag;
int flag;
{ {
dcflag = flag; dcflag = flag;
} }
IsDcflag() IsDcflag() {
{ return (dcflag);
return(dcflag);
} }
reconnect () reconnect() {
{ int inc, err;
int inc, err; char tmp[BUFFLENGTH], *hp;
char tmp[BUFFLENGTH], *hp; char newserv[SHORTLENGTH * 2], *nsp;
char newserv[SHORTLENGTH * 2], *nsp; wchar16_t wtmp[BUFFLENGTH];
wchar16_t wtmp[BUFFLENGTH];
unsigned char rtmp[BUFFLENGTH]; unsigned char rtmp[BUFFLENGTH];
strncpy(newserv, cur_serv, SHORTLENGTH * 2 - 1); strncpy(newserv, cur_serv, SHORTLENGTH * 2 - 1);
@ -389,55 +360,55 @@ reconnect ()
SaveConversion(); SaveConversion();
TopGuide(); TopGuide();
printR(WCGrcon); printR(WCGrcon);
(void) wcstombs((char *)rtmp, WCRserv, BUFFLENGTH); (void)wcstombs((char*)rtmp, WCRserv, BUFFLENGTH);
sprintf(tmp, (char *)rtmp, newserv); sprintf(tmp, (char*)rtmp, newserv);
(void) mbstowcs(wtmp, tmp, BUFFLENGTH); (void)mbstowcs(wtmp, tmp, BUFFLENGTH);
SJ_print (wtmp); SJ_print(wtmp);
Clear_EOL(); Clear_EOL();
Flush(); Flush();
nsp = newserv; nsp = newserv;
while ((inc = inkey()) != EOF) { while((inc = inkey()) != EOF) {
if (AnotherConversion()) { if(AnotherConversion()) {
unget_key(inc); unget_key(inc);
return(0); return (0);
} }
if (keyvalue != KEY_NORMAL && keyvalue != KEY_FLUSH) if(keyvalue != KEY_NORMAL && keyvalue != KEY_FLUSH)
return(0); return (0);
if (inc == '\n' || inc == '\r' || IsESC(inc)) if(inc == '\n' || inc == '\r' || IsESC(inc))
break; break;
if (is_bs (inc) && nsp > newserv) { if(is_bs(inc) && nsp > newserv) {
nsp--; nsp--;
*nsp = '\0'; *nsp = '\0';
backspace(1); backspace(1);
Flush(); Flush();
} else if (isgraph(inc) && } else if(isgraph(inc) &&
nsp < &newserv[SHORTLENGTH * 2 - 1]) { nsp < &newserv[SHORTLENGTH * 2 - 1]) {
*nsp++ = inc; *nsp++ = inc;
printf("%c", inc); printf("%c", inc);
Flush(); Flush();
} else } else
beep(); beep();
} }
if (nsp > newserv) { if(nsp > newserv) {
*nsp = '\0'; *nsp = '\0';
strcpy(rehname, newserv); strcpy(rehname, newserv);
cur_serv = rehname; cur_serv = rehname;
} else if (newserv[0] == '\0') { } else if(newserv[0] == '\0') {
strncpy(newserv, cur_serv, SHORTLENGTH * 2 - 1); strncpy(newserv, cur_serv, SHORTLENGTH * 2 - 1);
newserv[SHORTLENGTH * 2 - 1] = '\0'; newserv[SHORTLENGTH * 2 - 1] = '\0';
} }
if ((err = SJ2_reconnect()) == 0) { if((err = SJ2_reconnect()) == 0) {
TopGuide(); TopGuide();
printR(WCGrcon); printR(WCGrcon);
(void) wcstombs((char *)rtmp, WCRserv_OK, BUFFLENGTH); (void)wcstombs((char*)rtmp, WCRserv_OK, BUFFLENGTH);
sprintf(tmp, (char *)rtmp, newserv); sprintf(tmp, (char*)rtmp, newserv);
(void) mbstowcs(wtmp, tmp, BUFFLENGTH); (void)mbstowcs(wtmp, tmp, BUFFLENGTH);
SJ_print(wtmp); SJ_print(wtmp);
Clear_EOL(); Clear_EOL();
Flush(); Flush();
set_dcflag(0); set_dcflag(0);
inc = inkey(); inc = inkey();
if (AnotherConversion ()) if(AnotherConversion())
unget_key(inc); unget_key(inc);
break; break;
} else { } else {
@ -450,33 +421,32 @@ reconnect ()
Backspace(); Backspace();
Flush(); Flush();
inc = inkey(); inc = inkey();
if (AnotherConversion()) { if(AnotherConversion()) {
unget_key(inc); unget_key(inc);
set_dcflag(1); set_dcflag(1);
break; break;
} }
if (inc == 'n' || inc == 'N' || inc == EOF) { if(inc == 'n' || inc == 'N' || inc == EOF) {
set_dcflag(1); set_dcflag(1);
break; break;
} }
} }
} }
return(1); return (1);
} }
guide_print_pause (s1, s2) guide_print_pause(s1, s2)
wchar16_t *s1, *s2; wchar16_t* s1,
*s2;
{ {
int c; int c;
guide_print (s1, s2); guide_print(s1, s2);
SaveConversion (); SaveConversion();
c = inkey (); c = inkey();
if (AnotherConversion ()) { if(AnotherConversion()) {
unget_key (c); unget_key(c);
return (EOF); return (EOF);
} }
return (c); return (c);
} }

View file

@ -27,276 +27,245 @@
* *
*/ */
/*
* $SonyRCSfile: eucmessage.c,v $
* $SonyRevision: 1.2 $
* $SonyDate: 1994/12/09 11:27:08 $
*/
#include "wchar16.h" #include "wchar16.h"
#include <locale.h> #include <locale.h>
#include "kctype.h" #include "kctype.h"
#include "sj3libsj3.h" #include "sj3libsj3.h"
#include "sj2.h" #include "sj2.h"
unsigned char *EucMessages[] = { unsigned char* EucMessages[] = {
(unsigned char *)"\243\323\243\312\243\263\241\241\241\241\241\241\241\241\241\241\241\241\241\241", (unsigned char*)"\243\323\243\312\243\263\241\241\241\241\241\241\241\241\241\241\241\241\241\241",
(unsigned char *)"Buffer\241\241\241\241", (unsigned char*)"Buffer\241\241\241\241",
(unsigned char *)"Unbuffer\241\241", (unsigned char*)"Unbuffer\241\241",
(unsigned char *)"\301\264\244\322\244\351\244\254\244\312", (unsigned char*)"\301\264\244\322\244\351\244\254\244\312",
(unsigned char *)"\301\264\245\253\245\277\245\253\245\312", (unsigned char*)"\301\264\245\253\245\277\245\253\245\312",
(unsigned char *)"\310\276\245\253\245\277\245\253\245\312", (unsigned char*)"\310\276\245\253\245\277\245\253\245\312",
(unsigned char *)"\301\264\245\242\245\353\245\325\245\241", (unsigned char*)"\301\264\245\242\245\353\245\325\245\241",
(unsigned char *)"\310\276\245\242\245\353\245\325\245\241", (unsigned char*)"\310\276\245\242\245\353\245\325\245\241",
(unsigned char*)" \312\321\264\271 \314\265\312\321 etc. \267\350\304\352 code \310\276\245\242 \301\264\245\242 \310\276\245\253 \301\264\245\253 \244\253\244\312",
(unsigned char*)"\244\275\244\316\302\276\241\241\241\241\241\241\241\241\241\241\241\241\241\241",
(unsigned char *)" \312\321\264\271 \314\265\312\321 etc. \267\350\304\352 code \310\276\245\242 \301\264\245\242 \310\276\245\253 \301\264\245\253 \244\253\244\312", (unsigned char*)" \305\320\317\277 \276\303\265\356 Help sjrc \312\324\275\270 \272\306\300\334 \241\241\241\241 \241\241\241\241 \241\241\241\241 \241\241\241\241",
(unsigned char *)"\244\275\244\316\302\276\241\241\241\241\241\241\241\241\241\241\241\241\241\241",
(unsigned char *)" \305\320\317\277 \276\303\265\356 Help sjrc \312\324\275\270 \272\306\300\334 \241\241\241\241 \241\241\241\241 \241\241\241\241 \241\241\241\241", (unsigned char*)"Help\241\241Mode",
(unsigned char*)" \245\254\245\244\245\311\241\246\245\351\245\244\245\363 %s \244\313\244\312\244\352\244\336\244\267\244\277 ",
(unsigned char *)"Help\241\241Mode", (unsigned char*)"ShiftJIS\241\241",
(unsigned char *)" \245\254\245\244\245\311\241\246\245\351\245\244\245\363 %s \244\313\244\312\244\352\244\336\244\267\244\277 ", (unsigned char*)"\241\241\243\305\243\325\243\303\241\241",
(unsigned char*)"\243\305\243\325\243\303\312\344\275\365",
(unsigned char*)"\241\241\243\312\243\311\243\323\241\241",
(unsigned char*)"\243\312\243\311\243\323\312\344\275\365",
(unsigned char*)"\241\241\241\241\266\350\305\300\241\241",
(unsigned char*)"\266\350\305\300\241\241\312\344\275\365",
(unsigned char*)"\305\320\317\277",
(unsigned char*)" \310\317\260\317\244\362\273\330\304\352\244\267\244\306\244\257\244\300\244\265\244\244 ",
(unsigned char*)" \264\301\273\372 [%s] : \306\311\244\337\306\376\316\317 ",
(unsigned char*)" \264\301\273\372 [%s] : \306\311\244\337 [%s] : \311\312\273\354 [%s] (y/n)? ",
(unsigned char*)" \264\301\273\372 [%s] : \306\311\244\337 [%s] (y/n)? ",
(unsigned char*)" \312\270\313\241\276\360\312\363 : 1.\314\276\273\354 2.\314\276\273\372 3.\314\276\301\260 4.\303\317\314\276 5.\245\265\312\321\306\260\273\354",
(unsigned char*)" \305\320\317\277\244\267\244\336\244\267\244\277 ",
(unsigned char*)" \306\311\244\337\306\376\316\317 ",
(unsigned char*)" 1",
(unsigned char*)"y",
(unsigned char*)" \306\261\260\354\244\316\303\261\270\354\244\254\244\271\244\307\244\313\302\270\272\337\244\267\244\306\244\244\244\336\244\271",
(unsigned char*)" \244\263\244\316\306\311\244\337\312\270\273\372\316\363\244\307\244\317\305\320\317\277\244\307\244\255\244\336\244\273\244\363",
(unsigned char*)" \244\263\244\316\264\301\273\372\312\270\273\372\316\363\244\307\244\317\305\320\317\277\244\307\244\255\244\336\244\273\244\363",
(unsigned char*)" \244\263\244\354\260\312\276\345\306\261\244\270\306\311\244\337\244\307\244\317\305\320\317\277\244\307\244\255\244\336\244\273\244\363",
(unsigned char*)" \244\263\244\354\260\312\276\345\245\346\241\274\245\266\274\255\275\361\244\313\244\317\305\320\317\277\244\307\244\255\244\336\244\273\244\363",
(unsigned char*)" \245\346\241\274\245\266\274\255\275\361\244\254\245\355\245\303\245\257\244\265\244\354\244\306\244\244\244\336\244\271",
(unsigned char*)" \245\267\245\271\245\306\245\340\245\250\245\351\241\274\244\307\305\320\317\277\244\307\244\255\244\336\244\273\244\363",
(unsigned char*)",",
(unsigned char*)"\276\303\265\356",
(unsigned char*)" \264\301\273\372 [%s] : \306\311\244\337 [%s] : \311\312\273\354 [%s]\244\362\276\303\265\356\244\267\244\336\244\267\244\277 ",
(unsigned char*)" \273\330\304\352\244\265\244\354\244\277\306\311\244\337\241\246\264\301\273\372\244\317\305\320\317\277\244\265\244\354\244\306\244\244\244\336\244\273\244\363",
(unsigned char*)" \245\346\241\274\245\266\274\255\275\361\244\254\245\355\245\303\245\257\244\265\244\354\244\306\244\244\244\336\244\271",
(unsigned char*)" \244\263\244\316\306\311\244\337\312\270\273\372\316\363\244\317\276\303\265\356\244\307\244\255\244\336\244\273\244\363",
(unsigned char*)" \244\263\244\316\264\301\273\372\312\270\273\372\316\363\244\317\276\303\265\356\244\307\244\255\244\336\244\273\244\363",
(unsigned char*)" \245\267\245\271\245\306\245\340\245\250\245\351\241\274\244\307\276\303\265\356\244\307\244\255\244\336\244\273\244\363",
(unsigned char *)"ShiftJIS\241\241", (unsigned char*)"\244\362\306\311\244\337\271\376\244\337\244\336\244\267\244\277",
(unsigned char *)"\241\241\243\305\243\325\243\303\241\241", (unsigned char*)"\244\362\306\311\244\337\271\376\244\341\244\336\244\273\244\363\244\307\244\267\244\277",
(unsigned char *)"\243\305\243\325\243\303\312\344\275\365", (unsigned char*)"\245\273\245\303\245\310\245\242\245\303\245\327\245\325\245\241\245\244\245\353\244\254\244\242\244\352\244\336\244\273\244\363 ",
(unsigned char *)"\241\241\243\312\243\311\243\323\241\241",
(unsigned char *)"\243\312\243\311\243\323\312\344\275\365",
(unsigned char *)"\241\241\241\241\266\350\305\300\241\241",
(unsigned char *)"\266\350\305\300\241\241\312\344\275\365",
(unsigned char*)"Change weight (1-9) current weight %d ",
(unsigned char*)"\272\306\300\334\302\263 ",
(unsigned char*)" \245\265\241\274\245\320\314\276 [%s] \244\362\273\330\304\352\244\267\244\306\244\257\244\300\244\265\244\244 ",
(unsigned char*)" \245\265\241\274\245\320 [%s] \244\313\300\334\302\263\244\267\244\336\244\267\244\277 ",
(unsigned char*)"\245\265\241\274\245\320 [%s] \244\310\244\316\300\334\302\263\244\254\300\332\244\354\244\336\244\267\244\277",
(unsigned char *)"\305\320\317\277", (unsigned char*)" ",
(unsigned char *)" \310\317\260\317\244\362\273\330\304\352\244\267\244\306\244\257\244\300\244\265\244\244 ", (unsigned char*)" ",
(unsigned char *)" \264\301\273\372 [%s] : \306\311\244\337\306\376\316\317 ", (unsigned char*)" \302\263\244\261\244\336\244\271\244\253? y",
(unsigned char *)" \264\301\273\372 [%s] : \306\311\244\337 [%s] : \311\312\273\354 [%s] (y/n)? ",
(unsigned char *)" \264\301\273\372 [%s] : \306\311\244\337 [%s] (y/n)? ",
(unsigned char *)" \312\270\313\241\276\360\312\363 : 1.\314\276\273\354 2.\314\276\273\372 3.\314\276\301\260 4.\303\317\314\276 5.\245\265\312\321\306\260\273\354",
(unsigned char *)" \305\320\317\277\244\267\244\336\244\267\244\277 ",
(unsigned char *)" \306\311\244\337\306\376\316\317 ",
(unsigned char *)" 1",
(unsigned char *)"y",
(unsigned char *)" \306\261\260\354\244\316\303\261\270\354\244\254\244\271\244\307\244\313\302\270\272\337\244\267\244\306\244\244\244\336\244\271",
(unsigned char *)" \244\263\244\316\306\311\244\337\312\270\273\372\316\363\244\307\244\317\305\320\317\277\244\307\244\255\244\336\244\273\244\363",
(unsigned char *)" \244\263\244\316\264\301\273\372\312\270\273\372\316\363\244\307\244\317\305\320\317\277\244\307\244\255\244\336\244\273\244\363",
(unsigned char *)" \244\263\244\354\260\312\276\345\306\261\244\270\306\311\244\337\244\307\244\317\305\320\317\277\244\307\244\255\244\336\244\273\244\363",
(unsigned char *)" \244\263\244\354\260\312\276\345\245\346\241\274\245\266\274\255\275\361\244\313\244\317\305\320\317\277\244\307\244\255\244\336\244\273\244\363",
(unsigned char *)" \245\346\241\274\245\266\274\255\275\361\244\254\245\355\245\303\245\257\244\265\244\354\244\306\244\244\244\336\244\271",
(unsigned char *)" \245\267\245\271\245\306\245\340\245\250\245\351\241\274\244\307\305\320\317\277\244\307\244\255\244\336\244\273\244\363",
(unsigned char *)",",
(unsigned char*)"\245\265\241\274\245\320\241\274\244\254\273\340\244\313\244\336\244\267\244\277\241\243",
(unsigned char*)"\245\265\241\274\245\320\241\274\244\313\300\334\302\263\272\321\244\307\244\271\241\243",
(unsigned char*)"\245\265\241\274\245\320\241\274\244\330\244\316\300\334\302\263\244\313\274\272\307\324\244\267\244\336\244\267\244\277\241\243",
(unsigned char*)"\245\341\245\244\245\363\274\255\275\361\245\325\245\241\245\244\245\353\244\362\245\252\241\274\245\327\245\363\244\307\244\255\244\336\244\273\244\363\241\243",
(unsigned char*)"\245\346\241\274\245\266\241\246\245\307\245\243\245\354\245\257\245\310\245\352\244\316\272\356\300\256\244\313\274\272\307\324\244\267\244\336\244\267\244\277\241\243",
(unsigned char*)"\245\346\241\274\245\266\274\255\275\361\245\325\245\241\245\244\245\353\244\316\300\270\300\256\244\313\274\272\307\324\244\267\244\336\244\267\244\277\241\243",
(unsigned char*)"\245\346\241\274\245\266\274\255\275\361\245\325\245\241\245\244\245\353\244\362\245\252\241\274\245\327\245\363\244\307\244\255\244\336\244\273\244\363\241\243",
(unsigned char*)"\263\330\275\254\245\325\245\241\245\244\245\353\244\316\300\270\300\256\244\313\274\272\307\324\244\267\244\336\244\267\244\277\241\243",
(unsigned char*)"\263\330\275\254\245\325\245\241\245\244\245\353\244\362\245\252\241\274\245\327\245\363\244\307\244\255\244\336\244\273\244\363\241\243",
(unsigned char *)"\276\303\265\356", (unsigned char*)"\312\324\275\270 ",
(unsigned char *)" \264\301\273\372 [%s] : \306\311\244\337 [%s] : \311\312\273\354 [%s]\244\362\276\303\265\356\244\267\244\336\244\267\244\277 ", (unsigned char*)"\243\323\243\312\243\263\241\241\241\241\241\241\241\241\241\241\241\241\241\241",
(unsigned char *)" \273\330\304\352\244\265\244\354\244\277\306\311\244\337\241\246\264\301\273\372\244\317\305\320\317\277\244\265\244\354\244\306\244\244\244\336\244\273\244\363",
(unsigned char *)" \245\346\241\274\245\266\274\255\275\361\244\254\245\355\245\303\245\257\244\265\244\354\244\306\244\244\244\336\244\271",
(unsigned char *)" \244\263\244\316\306\311\244\337\312\270\273\372\316\363\244\317\276\303\265\356\244\307\244\255\244\336\244\273\244\363",
(unsigned char *)" \244\263\244\316\264\301\273\372\312\270\273\372\316\363\244\317\276\303\265\356\244\307\244\255\244\336\244\273\244\363",
(unsigned char *)" \245\267\245\271\245\306\245\340\245\250\245\351\241\274\244\307\276\303\265\356\244\307\244\255\244\336\244\273\244\363",
(unsigned char*)" \312\324\275\270\312\270\273\372\316\363\244\254\304\271\244\271\244\256\244\336\244\271",
(unsigned char*)"$$",
(unsigned char*)"on",
(unsigned char*)"off",
(unsigned char *)"\244\362\306\311\244\337\271\376\244\337\244\336\244\267\244\277", (unsigned char*)"\314\276\273\354",
(unsigned char *)"\244\362\306\311\244\337\271\376\244\341\244\336\244\273\244\363\244\307\244\267\244\277", (unsigned char*)"\314\276\273\372",
(unsigned char *)"\245\273\245\303\245\310\245\242\245\303\245\327\245\325\245\241\245\244\245\353\244\254\244\242\244\352\244\336\244\273\244\363 ", (unsigned char*)"\314\276\301\260",
(unsigned char*)"\303\317\314\276",
(unsigned char*)"\245\265\312\321\306\260\273\354",
(unsigned char*)"",
(unsigned char*)"F1",
(unsigned char*)"F2",
(unsigned char*)"F3",
(unsigned char*)"F4",
(unsigned char*)"F5",
(unsigned char*)"F6",
(unsigned char*)"F7",
(unsigned char*)"F8",
(unsigned char*)"F9",
(unsigned char*)"F10",
(unsigned char*)"F11",
(unsigned char*)"F12",
(unsigned char*)"F13",
(unsigned char*)"F14",
(unsigned char*)"F15",
(unsigned char*)"F16",
(unsigned char*)"F17",
(unsigned char*)"F18",
(unsigned char*)"F19",
(unsigned char*)"F20",
(unsigned char*)"Select",
(unsigned char*)"Kanji",
(unsigned char*)"Cancel",
(unsigned char*)"Execute",
(unsigned char*)"Up",
(unsigned char*)"Down",
(unsigned char*)"Right",
(unsigned char*)"Left",
(unsigned char *)"Change weight (1-9) current weight %d ", (unsigned char*)"start",
(unsigned char*)"henkan",
(unsigned char*)"muhen",
(unsigned char*)"kettei",
(unsigned char*)"hira",
(unsigned char*)"halpha",
(unsigned char*)"zalpha",
(unsigned char*)"hkata",
(unsigned char*)"zkata",
(unsigned char*)"code",
(unsigned char*)"etc",
(unsigned char*)"right",
(unsigned char*)"left",
(unsigned char*)"kaku",
(unsigned char*)"shuku",
(unsigned char*)"edit",
(unsigned char*)"toggle",
(unsigned char*)"wrapback",
(unsigned char*)"wrap",
(unsigned char*)"sjrc",
(unsigned char*)"buffer",
(unsigned char*)"toroku",
(unsigned char*)"shoukyo",
(unsigned char*)"help",
(unsigned char*)"ha-kettei",
(unsigned char*)"flush",
(unsigned char*)"debug",
(unsigned char*)"cancel",
(unsigned char*)"saihenkan",
(unsigned char*)"ignore",
(unsigned char*)"top",
(unsigned char*)"end",
(unsigned char*)"reconnect",
(unsigned char*)"kill",
(unsigned char*)"key",
(unsigned char*)"escape",
(unsigned char*)"sjxkey",
(unsigned char*)"etckey",
(unsigned char*)"intr",
(unsigned char*)"bskey",
(unsigned char*)"delkey",
(unsigned char*)"setnormal",
(unsigned char*)"throughnext",
(unsigned char*)"initialmode",
(unsigned char*)"helpmode",
(unsigned char*)"defaultcode",
(unsigned char*)"muhenkanmode",
(unsigned char*)"muhenkaninedit",
(unsigned char*)"muhenkantoggle",
(unsigned char*)"guide",
(unsigned char*)"forkshell",
(unsigned char*)"execshell",
(unsigned char*)"dictionary",
(unsigned char*)"userdic",
(unsigned char*)"maindic",
(unsigned char*)"romaji",
(unsigned char*)"bstudy",
(unsigned char*)"silent",
(unsigned char*)"flushafterconversion",
(unsigned char*)"rkerrbell",
(unsigned char*)"server",
(unsigned char*)"shiftjis",
(unsigned char*)"sjis",
(unsigned char*)"euc",
(unsigned char*)"euc2",
(unsigned char*)"jis",
(unsigned char*)"jis2",
(unsigned char*)"kuten",
(unsigned char*)"kuten2",
(unsigned char *)"\272\306\300\334\302\263 ", (unsigned char*)"buff",
(unsigned char *)" \245\265\241\274\245\320\314\276 [%s] \244\362\273\330\304\352\244\267\244\306\244\257\244\300\244\265\244\244 ", (unsigned char*)"unbuff",
(unsigned char *)" \245\265\241\274\245\320 [%s] \244\313\300\334\302\263\244\267\244\336\244\267\244\277 ", (unsigned char*)"direct",
(unsigned char *)"\245\265\241\274\245\320 [%s] \244\310\244\316\300\334\302\263\244\254\300\332\244\354\244\336\244\267\244\277",
(unsigned char *)" ", (unsigned char*)"sj2",
(unsigned char *)" ", (unsigned char*)"shift",
(unsigned char *)" \302\263\244\261\244\336\244\271\244\253? y",
(unsigned char*)"function",
(unsigned char *)"\245\265\241\274\245\320\241\274\244\254\273\340\244\313\244\336\244\267\244\277\241\243", (unsigned char*)"unbuffer",
(unsigned char *)"\245\265\241\274\245\320\241\274\244\313\300\334\302\263\272\321\244\307\244\271\241\243", (unsigned char*)"funcetc"
(unsigned char *)"\245\265\241\274\245\320\241\274\244\330\244\316\300\334\302\263\244\313\274\272\307\324\244\267\244\336\244\267\244\277\241\243",
(unsigned char *)"\245\341\245\244\245\363\274\255\275\361\245\325\245\241\245\244\245\353\244\362\245\252\241\274\245\327\245\363\244\307\244\255\244\336\244\273\244\363\241\243",
(unsigned char *)"\245\346\241\274\245\266\241\246\245\307\245\243\245\354\245\257\245\310\245\352\244\316\272\356\300\256\244\313\274\272\307\324\244\267\244\336\244\267\244\277\241\243",
(unsigned char *)"\245\346\241\274\245\266\274\255\275\361\245\325\245\241\245\244\245\353\244\316\300\270\300\256\244\313\274\272\307\324\244\267\244\336\244\267\244\277\241\243",
(unsigned char *)"\245\346\241\274\245\266\274\255\275\361\245\325\245\241\245\244\245\353\244\362\245\252\241\274\245\327\245\363\244\307\244\255\244\336\244\273\244\363\241\243",
(unsigned char *)"\263\330\275\254\245\325\245\241\245\244\245\353\244\316\300\270\300\256\244\313\274\272\307\324\244\267\244\336\244\267\244\277\241\243",
(unsigned char *)"\263\330\275\254\245\325\245\241\245\244\245\353\244\362\245\252\241\274\245\327\245\363\244\307\244\255\244\336\244\273\244\363\241\243",
(unsigned char *)"\312\324\275\270 ",
(unsigned char *)"\243\323\243\312\243\263\241\241\241\241\241\241\241\241\241\241\241\241\241\241",
(unsigned char *)" \312\324\275\270\312\270\273\372\316\363\244\254\304\271\244\271\244\256\244\336\244\271",
(unsigned char *)"$$",
(unsigned char *)"on",
(unsigned char *)"off",
(unsigned char *)"\314\276\273\354",
(unsigned char *)"\314\276\273\372",
(unsigned char *)"\314\276\301\260",
(unsigned char *)"\303\317\314\276",
(unsigned char *)"\245\265\312\321\306\260\273\354",
(unsigned char *)"",
(unsigned char *)"F1",
(unsigned char *)"F2",
(unsigned char *)"F3",
(unsigned char *)"F4",
(unsigned char *)"F5",
(unsigned char *)"F6",
(unsigned char *)"F7",
(unsigned char *)"F8",
(unsigned char *)"F9",
(unsigned char *)"F10",
(unsigned char *)"F11",
(unsigned char *)"F12",
(unsigned char *)"F13",
(unsigned char *)"F14",
(unsigned char *)"F15",
(unsigned char *)"F16",
(unsigned char *)"F17",
(unsigned char *)"F18",
(unsigned char *)"F19",
(unsigned char *)"F20",
(unsigned char *)"Select",
(unsigned char *)"Kanji",
(unsigned char *)"Cancel",
(unsigned char *)"Execute",
(unsigned char *)"Up",
(unsigned char *)"Down",
(unsigned char *)"Right",
(unsigned char *)"Left",
(unsigned char *)"start",
(unsigned char *)"henkan",
(unsigned char *)"muhen",
(unsigned char *)"kettei",
(unsigned char *)"hira",
(unsigned char *)"halpha",
(unsigned char *)"zalpha",
(unsigned char *)"hkata",
(unsigned char *)"zkata",
(unsigned char *)"code",
(unsigned char *)"etc",
(unsigned char *)"right",
(unsigned char *)"left",
(unsigned char *)"kaku",
(unsigned char *)"syuku",
(unsigned char *)"edit",
(unsigned char *)"toggle",
(unsigned char *)"wrapback",
(unsigned char *)"wrap",
(unsigned char *)"sjrc",
(unsigned char *)"buffer",
(unsigned char *)"toroku",
(unsigned char *)"syoukyo",
(unsigned char *)"help",
(unsigned char *)"ha-kettei",
(unsigned char *)"flush",
(unsigned char *)"debug",
(unsigned char *)"cancel",
(unsigned char *)"saihenkan",
(unsigned char *)"ignore",
(unsigned char *)"top",
(unsigned char *)"end",
(unsigned char *)"reconnect",
(unsigned char *)"kill",
(unsigned char *)"key",
(unsigned char *)"escape",
(unsigned char *)"sjxkey",
(unsigned char *)"etckey",
(unsigned char *)"intr",
(unsigned char *)"bskey",
(unsigned char *)"delkey",
(unsigned char *)"setnormal",
(unsigned char *)"throughnext",
(unsigned char *)"initialmode",
(unsigned char *)"helpmode",
(unsigned char *)"defaultcode",
(unsigned char *)"muhenkanmode",
(unsigned char *)"muhenkaninedit",
(unsigned char *)"muhenkantoggle",
(unsigned char *)"guide",
(unsigned char *)"forkshell",
(unsigned char *)"execshell",
(unsigned char *)"dictionary",
(unsigned char *)"userdic",
(unsigned char *)"maindic",
(unsigned char *)"romaji",
(unsigned char *)"bstudy",
(unsigned char *)"silent",
(unsigned char *)"flushafterconversion",
(unsigned char *)"rkerrbell",
(unsigned char *)"server",
(unsigned char *)"shiftjis",
(unsigned char *)"sjis",
(unsigned char *)"euc",
(unsigned char *)"euc2",
(unsigned char *)"jis",
(unsigned char *)"jis2",
(unsigned char *)"kuten",
(unsigned char *)"kuten2",
(unsigned char *)"buff",
(unsigned char *)"unbuff",
(unsigned char *)"direct",
(unsigned char *)"sj2",
(unsigned char *)"shift",
(unsigned char *)"function",
(unsigned char *)"unbuffer",
(unsigned char *)"funcetc"
}; };
#define CURMESSAGES 182 #define CURMESSAGES 182
wchar16_t *WcMessages[CURMESSAGES]; wchar16_t* WcMessages[CURMESSAGES];
#define CURWCVTKEY 29 #define CURWCVTKEY 29
struct wcvtkey wcvtkeytbl[CURWCVTKEY]; struct wcvtkey wcvtkeytbl[CURWCVTKEY];
int init_wcvtkey() {
int
init_wcvtkey()
{
int i = 0; int i = 0;
for (i = 0; i < CURWCVTKEY; i++) { for(i = 0; i < CURWCVTKEY; i++) {
wcvtkeytbl[i].key_seq[0] = 0; wcvtkeytbl[i].key_seq[0] = 0;
} }
wcvtkeytbl[0].key_word = WCF1; wcvtkeytbl[0].key_word = WCF1;
wcvtkeytbl[1].key_word = WCF2; wcvtkeytbl[1].key_word = WCF2;
wcvtkeytbl[2].key_word = WCF3; wcvtkeytbl[2].key_word = WCF3;
wcvtkeytbl[3].key_word = WCF4; wcvtkeytbl[3].key_word = WCF4;
wcvtkeytbl[4].key_word = WCF5; wcvtkeytbl[4].key_word = WCF5;
wcvtkeytbl[5].key_word = WCF6; wcvtkeytbl[5].key_word = WCF6;
wcvtkeytbl[6].key_word = WCF7; wcvtkeytbl[6].key_word = WCF7;
wcvtkeytbl[7].key_word = WCF8; wcvtkeytbl[7].key_word = WCF8;
wcvtkeytbl[8].key_word = WCF9; wcvtkeytbl[8].key_word = WCF9;
wcvtkeytbl[9].key_word = WCF10; wcvtkeytbl[9].key_word = WCF10;
wcvtkeytbl[10].key_word = WCF11; wcvtkeytbl[10].key_word = WCF11;
wcvtkeytbl[11].key_word = WCF12; wcvtkeytbl[11].key_word = WCF12;
wcvtkeytbl[12].key_word = WCF13; wcvtkeytbl[12].key_word = WCF13;
@ -318,150 +287,191 @@ init_wcvtkey()
wcvtkeytbl[28].key_word = NULL; wcvtkeytbl[28].key_word = NULL;
} }
wchar16_t *comstr[KEY_OTHER]; wchar16_t* comstr[KEY_OTHER];
int init_comstr() {
comstr[0] = WCStart;
int comstr[1] = WCHenkan;
init_comstr() comstr[2] = WCMuhen;
{ comstr[3] = WCKettei;
comstr[0] = WCStart; comstr[1] = WCHenkan; comstr[2] = WCMuhen; comstr[4] = WCHira;
comstr[3] = WCKettei; comstr[4] = WCHira; comstr[5] = WCHalpha; comstr[5] = WCHalpha;
comstr[6] = WCZalpha; comstr[7] = WCHkata; comstr[8] = WCZkata; comstr[6] = WCZalpha;
comstr[9] = WCCode; comstr[10] = WCEtc; comstr[11] = WCRightl; comstr[7] = WCHkata;
comstr[12] = WCLeftl; comstr[13] = WCKaku; comstr[14] = WCSyuku; comstr[8] = WCZkata;
comstr[15] = WCEdit; comstr[16] = WCToggle; comstr[17] = WCWrapback; comstr[9] = WCCode;
comstr[18] = WCWrap; comstr[19] = WCSjrc; comstr[20] = WCBuffer; comstr[10] = WCEtc;
comstr[21] = WCToroku; comstr[22] = WCSyoukyo; comstr[23] = WCHelp; comstr[11] = WCRightl;
comstr[24] = WCHaKettei; comstr[25] = WCFlush; comstr[26] = WCDebug; comstr[12] = WCLeftl;
comstr[27] = WCCancell; comstr[28] = WCSaihenkan; comstr[29] = WCIgnore; comstr[13] = WCKaku;
comstr[30] = WCTop; comstr[31] = WCEnd; comstr[32] = WCReconnect; comstr[14] = WCSyuku;
comstr[33] = WCKill; comstr[34] = WCKara; comstr[15] = WCEdit;
comstr[16] = WCToggle;
comstr[17] = WCWrapback;
comstr[18] = WCWrap;
comstr[19] = WCSjrc;
comstr[20] = WCBuffer;
comstr[21] = WCToroku;
comstr[22] = WCShoukyo;
comstr[23] = WCHelp;
comstr[24] = WCHaKettei;
comstr[25] = WCFlush;
comstr[26] = WCDebug;
comstr[27] = WCCancell;
comstr[28] = WCSaihenkan;
comstr[29] = WCIgnore;
comstr[30] = WCTop;
comstr[31] = WCEnd;
comstr[32] = WCReconnect;
comstr[33] = WCKill;
comstr[34] = WCKara;
} }
struct valtbl hin_val[5]; struct valtbl hin_val[5];
int init_hin_val() {
hin_val[0].keyword = WCMeishi;
int hin_val[0].ivalue = SJ3_H_NRMNOUN;
init_hin_val() hin_val[1].keyword = WCMyouji;
{ hin_val[1].ivalue = SJ3_H_LNAME;
hin_val[0].keyword = WCMeishi; hin_val[0].ivalue = SJ3_H_NRMNOUN; hin_val[2].keyword = WCNamae;
hin_val[1].keyword = WCMyouji; hin_val[1].ivalue = SJ3_H_LNAME; hin_val[2].ivalue = SJ3_H_FNAME;
hin_val[2].keyword = WCNamae; hin_val[2].ivalue = SJ3_H_FNAME; hin_val[3].keyword = WCTimei;
hin_val[3].keyword = WCTimei; hin_val[3].ivalue = SJ3_H_LOCNAME; hin_val[3].ivalue = SJ3_H_LOCNAME;
hin_val[4].keyword = WCSahen; hin_val[4].ivalue = SJ3_H_SILVERB; hin_val[4].keyword = WCSahen;
hin_val[4].ivalue = SJ3_H_SILVERB;
} }
extern int set_func(), set_etckeys(), set_intr(),
extern int set_func(), set_etckeys(), set_intr(), set_delkey(), set_goto(), set_trap(), set_init_mode(),
set_delkey(), set_goto(), set_trap(), set_init_mode(), set_helpmenu(), set_defcode(), set_muhenkan(), set_muedit(),
set_helpmenu(), set_defcode(), set_muhenkan(), set_muedit(), set_m_toggle(), set_guide(), set_forkshell(), set_bstudy(),
set_m_toggle(), set_guide(), set_forkshell(), set_bstudy(), set_silent(), set_flush_conversion(), set_rkebell(), set_server(),
set_silent(), set_flush_conversion(), set_rkebell(), set_server(), set_dict();
set_dict();
#define CURFUNCS 29 #define CURFUNCS 29
struct functbl funcs[CURFUNCS]; struct functbl funcs[CURFUNCS];
int init_funcs() {
funcs[0].keyword = WCKey;
int funcs[0].func = set_func;
init_funcs() funcs[1].keyword = WCEscape;
{ funcs[1].func = set_func;
funcs[0].keyword = WCKey; funcs[0].func = set_func; funcs[2].keyword = WCEtckey;
funcs[1].keyword = WCEscape; funcs[1].func = set_func; funcs[2].func = set_etckeys;
funcs[2].keyword = WCEtckey; funcs[2].func = set_etckeys; funcs[3].keyword = WCIntr;
funcs[3].keyword = WCIntr; funcs[3].func = set_intr; funcs[3].func = set_intr;
funcs[4].keyword = WCDelkey; funcs[4].func = set_delkey; funcs[4].keyword = WCDelkey;
funcs[5].keyword = WCSetnormal; funcs[5].func = set_goto; funcs[4].func = set_delkey;
funcs[6].keyword = WCThroughnext; funcs[6].func = set_trap; funcs[5].keyword = WCSetnormal;
funcs[7].keyword = WCInitialmode; funcs[7].func = set_init_mode; funcs[5].func = set_goto;
funcs[8].keyword = WCHelpmode; funcs[8].func = set_helpmenu; funcs[6].keyword = WCThroughnext;
funcs[9].keyword = WCDefaultcode; funcs[9].func = set_defcode; funcs[6].func = set_trap;
funcs[10].keyword = WCMuhenkanmode; funcs[10].func = set_muhenkan; funcs[7].keyword = WCInitialmode;
funcs[11].keyword = WCMuhenkaninedit; funcs[11].func = set_muedit; funcs[7].func = set_init_mode;
funcs[12].keyword = WCMuhenkantoggle; funcs[12].func = set_m_toggle; funcs[8].keyword = WCHelpmode;
funcs[13].keyword = WCGuide; funcs[13].func = set_guide; funcs[8].func = set_helpmenu;
funcs[14].keyword = WCForkshell; funcs[14].func = set_forkshell; funcs[9].keyword = WCDefaultcode;
funcs[15].keyword = WCExecshell; funcs[15].func = set_forkshell; funcs[9].func = set_defcode;
funcs[16].keyword = WCBstudy; funcs[16].func = set_bstudy; funcs[10].keyword = WCMuhenkanmode;
funcs[17].keyword = WCSilent; funcs[17].func = set_silent; funcs[10].func = set_muhenkan;
funcs[18].keyword = WCFlushafterconversion; funcs[18].func = set_flush_conversion; funcs[11].keyword = WCMuhenkaninedit;
funcs[19].keyword = WCRkerrbell; funcs[19].func = set_rkebell; funcs[11].func = set_muedit;
funcs[20].keyword = WCServer; funcs[20].func = set_server; funcs[12].keyword = WCMuhenkantoggle;
funcs[21].keyword = WCDictionary; funcs[21].func = set_dict; funcs[12].func = set_m_toggle;
funcs[22].keyword = NULL; funcs[22].func = NULL; funcs[13].keyword = WCGuide;
funcs[13].func = set_guide;
funcs[14].keyword = WCForkshell;
funcs[14].func = set_forkshell;
funcs[15].keyword = WCExecshell;
funcs[15].func = set_forkshell;
funcs[16].keyword = WCBstudy;
funcs[16].func = set_bstudy;
funcs[17].keyword = WCSilent;
funcs[17].func = set_silent;
funcs[18].keyword = WCFlushafterconversion;
funcs[18].func = set_flush_conversion;
funcs[19].keyword = WCRkerrbell;
funcs[19].func = set_rkebell;
funcs[20].keyword = WCServer;
funcs[20].func = set_server;
funcs[21].keyword = WCDictionary;
funcs[21].func = set_dict;
funcs[22].keyword = NULL;
funcs[22].func = NULL;
} }
struct valtbl mode_val[5]; struct valtbl mode_val[5];
int init_mode_val() {
mode_val[0].keyword = WCHalpha;
int mode_val[0].ivalue = MODE_HALPHA;
init_mode_val() mode_val[1].keyword = WCZalpha;
{ mode_val[1].ivalue = MODE_ZALPHA;
mode_val[0].keyword = WCHalpha; mode_val[0].ivalue = MODE_HALPHA; mode_val[2].keyword = WCHkata;
mode_val[1].keyword = WCZalpha; mode_val[1].ivalue = MODE_ZALPHA; mode_val[2].ivalue = MODE_HKATA;
mode_val[2].keyword = WCHkata; mode_val[2].ivalue = MODE_HKATA; mode_val[3].keyword = WCZkata;
mode_val[3].keyword = WCZkata; mode_val[3].ivalue = MODE_ZKATA; mode_val[3].ivalue = MODE_ZKATA;
mode_val[4].keyword = WCHira; mode_val[4].ivalue = MODE_ZHIRA; mode_val[4].keyword = WCHira;
mode_val[4].ivalue = MODE_ZHIRA;
} }
struct valtbl code_val[8]; struct valtbl code_val[8];
int init_code_val() {
code_val[0].keyword = WCShiftjis;
int code_val[0].ivalue = CODE_SJIS;
init_code_val() code_val[1].keyword = WCSjis;
{ code_val[1].ivalue = CODE_SJIS;
code_val[0].keyword = WCShiftjis; code_val[0].ivalue = CODE_SJIS; code_val[2].keyword = WCEuc;
code_val[1].keyword = WCSjis; code_val[1].ivalue = CODE_SJIS; code_val[2].ivalue = CODE_EUC;
code_val[2].keyword = WCEuc; code_val[2].ivalue = CODE_EUC; code_val[3].keyword = WCEuc2;
code_val[3].keyword = WCEuc2; code_val[3].ivalue = CODE_EUC2; code_val[3].ivalue = CODE_EUC2;
code_val[4].keyword = WCJis; code_val[4].ivalue = CODE_JIS; code_val[4].keyword = WCJis;
code_val[5].keyword = WCJis2; code_val[5].ivalue = CODE_JIS2; code_val[4].ivalue = CODE_JIS;
code_val[6].keyword = WCKuten; code_val[6].ivalue = CODE_KUTEN; code_val[5].keyword = WCJis2;
code_val[7].keyword = WCKuten2; code_val[7].ivalue = CODE_KUTEN2; code_val[5].ivalue = CODE_JIS2;
code_val[6].keyword = WCKuten;
code_val[6].ivalue = CODE_KUTEN;
code_val[7].keyword = WCKuten2;
code_val[7].ivalue = CODE_KUTEN2;
} }
int int init_messages() {
init_messages()
{
#define LOCALELEN 20 #define LOCALELEN 20
char cur_loc[LOCALELEN]; char cur_loc[LOCALELEN];
char *loc; char* loc;
short message_len[CURMESSAGES]; short message_len[CURMESSAGES];
int ret; int ret;
int i; int i;
int all_len = 0; int all_len = 0;
int saved_locale = 0; int saved_locale = 0;
extern int current_locale; extern int current_locale;
if (current_locale != LC_CTYPE_EUC) { if(current_locale != LC_CTYPE_EUC) {
saved_locale = current_locale; saved_locale = current_locale;
current_locale = LC_CTYPE_EUC; current_locale = LC_CTYPE_EUC;
#ifdef __sony_news #ifdef __sony_news
strncpy((char *)cur_loc, setlocale(LC_CTYPE, NULL), LOCALELEN); strncpy((char*)cur_loc, setlocale(LC_CTYPE, NULL), LOCALELEN);
loc = setlocale(LC_CTYPE, "ja_JP.EUC"); loc = setlocale(LC_CTYPE, "ja_JP.EUC");
#endif #endif
} }
for (i = 0; i < CURMESSAGES; i++) { for(i = 0; i < CURMESSAGES; i++) {
message_len[i] = jstrlen((char *)EucMessages[i]) + 1; message_len[i] = jstrlen((char*)EucMessages[i]) + 1;
all_len += message_len[i]; all_len += message_len[i];
} }
WcMessages[0] = (wchar16_t *) malloc(all_len * sizeof(wchar16_t)); WcMessages[0] = (wchar16_t*)malloc(all_len * sizeof(wchar16_t));
if (WcMessages[0] == NULL) if(WcMessages[0] == NULL)
goto Fail; goto Fail;
ret = (int) mbstowcs(WcMessages[0], (char *)EucMessages[0], message_len[0]); ret = (int)mbstowcs(WcMessages[0], (char*)EucMessages[0], message_len[0]);
if (ret < -1) if(ret < -1)
goto Fail; goto Fail;
for (i = 1; i < CURMESSAGES; i++) { for(i = 1; i < CURMESSAGES; i++) {
WcMessages[i] = WcMessages[i-1] + message_len[i-1]; WcMessages[i] = WcMessages[i - 1] + message_len[i - 1];
ret = mbstowcs(WcMessages[i], (char *)EucMessages[i], message_len[i]); ret = mbstowcs(WcMessages[i], (char*)EucMessages[i], message_len[i]);
if (ret < -1) if(ret < -1)
goto Fail; goto Fail;
} }
init_wcvtkey(); init_wcvtkey();
@ -471,20 +481,19 @@ init_messages()
init_mode_val(); init_mode_val();
init_code_val(); init_code_val();
if (saved_locale) { if(saved_locale) {
current_locale = saved_locale; current_locale = saved_locale;
#ifdef __sony_news #ifdef __sony_news
setlocale(LC_CTYPE, cur_loc); setlocale(LC_CTYPE, cur_loc);
#endif #endif
} }
return TRUE; return TRUE;
Fail: Fail:
if (saved_locale) { if(saved_locale) {
current_locale = saved_locale; current_locale = saved_locale;
#ifdef __sony_news #ifdef __sony_news
setlocale(LC_CTYPE, cur_loc); setlocale(LC_CTYPE, cur_loc);
#endif #endif
} }
return FALSE; return FALSE;
} }

1748
execute.c

File diff suppressed because it is too large Load diff

105
file.c
View file

@ -27,13 +27,6 @@
* *
*/ */
/*
* $SonyRCSfile: file.c,v $
* $SonyRevision: 1.2 $
* $SonyDate: 1995/02/03 07:38:32 $
*/
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@ -41,123 +34,105 @@
#include <sys/stat.h> #include <sys/stat.h>
#include "dicttool.h" #include "dicttool.h"
typedef struct filelist { typedef struct filelist {
FILE *fp; FILE* fp;
char *fname; char* fname;
struct filelist *next; struct filelist* next;
} FileList; } FileList;
static FileList *flist = NULL; static FileList* flist = NULL;
static char* static char*
get_fname(FILE* fp) get_fname(FILE* fp) {
{ FileList* p;
FileList *p;
for (p = flist ; p ; p = p -> next) for(p = flist; p; p = p->next)
if (p -> fp == fp) return p -> fname; if(p->fp == fp) return p->fname;
return "some file"; return "some file";
} }
FILE* FILE* Fopen(char* filename, char* type) {
Fopen(char* filename, char* type) FILE* fp;
{ FileList* fl;
FILE *fp;
FileList *fl;
if (!(fp = fopen(filename, type))) { if(!(fp = fopen(filename, type))) {
fprintf(stderr, "Can't open %s mode \"%s\"\n", filename, type); fprintf(stderr, "Can't open %s mode \"%s\"\n", filename, type);
exit(1); exit(1);
} }
fl = (FileList *)Malloc(sizeof(*fl)); fl = (FileList*)Malloc(sizeof(*fl));
fl -> fname = Malloc(strlen(filename) + 1); fl->fname = Malloc(strlen(filename) + 1);
strcpy(fl -> fname, filename); strcpy(fl->fname, filename);
fl -> fp = fp; fl->fp = fp;
fl -> next = flist; fl->next = flist;
return fp; return fp;
} }
void void Fclose(FILE* fp) {
Fclose(FILE* fp)
{
FileList *p, *q; FileList *p, *q;
if (fclose(fp) == EOF) { if(fclose(fp) == EOF) {
fprintf(stderr, "Close error in %s\n", get_fname(fp)); fprintf(stderr, "Close error in %s\n", get_fname(fp));
exit(1); exit(1);
} }
for (p = flist, q = NULL ; p ; q = p, p = p -> next) { for(p = flist, q = NULL; p; q = p, p = p->next) {
if (p -> fp == fp) { if(p->fp == fp) {
if (q) if(q)
q -> next = p -> next; q->next = p->next;
else else
flist = p -> next; flist = p->next;
free(p -> fname); free(p->fname);
free(p); free(p);
break; break;
} }
} }
} }
int int Fseek(FILE* fp, long ofs, int ptr) {
Fseek(FILE* fp, long ofs, int ptr) if(fseek(fp, ofs, ptr) == 0) return 0;
{
if (fseek(fp, ofs, ptr) == 0) return 0;
fprintf(stderr, "Seek error in %s\n", get_fname(fp)); fprintf(stderr, "Seek error in %s\n", get_fname(fp));
exit(1); exit(1);
} }
long long Ftell(FILE* fp) {
Ftell(FILE* fp)
{
return ftell(fp); return ftell(fp);
} }
off_t /* XXX: just looked in FreeBSD's sys/stat.h, need to check SUS spec. */ off_t /* XXX: just looked in FreeBSD's sys/stat.h, need to check SUS spec. */
Fsize(char* filename) Fsize(char* filename) {
{ struct stat buf;
struct stat buf;
#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__) #if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__)
if (stat(filename, &buf) == 0) return (long)buf.st_size; if(stat(filename, &buf) == 0) return (long)buf.st_size;
#else #else
if (stat(filename, &buf) == 0) return buf.st_size; if(stat(filename, &buf) == 0) return buf.st_size;
#endif #endif
fprintf(stderr, "Stat error in %s\n", filename); fprintf(stderr, "Stat error in %s\n", filename);
exit(1); exit(1);
} }
int int Fread(char* p, int s, int n, FILE* fp) {
Fread(char* p, int s, int n, FILE* fp) if(fread(p, s, n, fp) == n) return n;
{
if (fread(p, s, n, fp) == n) return n;
fprintf(stderr, "Read error in %s\n", get_fname(fp)); fprintf(stderr, "Read error in %s\n", get_fname(fp));
exit(1); exit(1);
} }
int int Fwrite(char* p, int s, int n, FILE* fp) {
Fwrite(char* p, int s, int n, FILE* fp) if(fwrite(p, s, n, fp) == n) return n;
{
if (fwrite(p, s, n, fp) == n) return n;
fprintf(stderr, "Write error in %s\n", get_fname(fp)); fprintf(stderr, "Write error in %s\n", get_fname(fp));
exit(1); exit(1);
} }
int int Fgetc(FILE* fp) {
Fgetc(FILE* fp)
{
return fgetc(fp); return fgetc(fp);
} }
void void Fflush(FILE* fp) {
Fflush(FILE* fp) fflush(fp);
{
fflush(fp);
} }

2
format.sh Executable file
View file

@ -0,0 +1,2 @@
#!/bin/sh
clang-format --verbose -i *.c *.h

330
funckey.c
View file

@ -27,15 +27,6 @@
* *
*/ */
/*
* $SonyRCSfile: funckey.c,v $
* $SonyRevision: 1.3 $
* $SonyDate: 1997/01/23 11:20:53 $
*
* $Id: funckey.c,v 1.3 2004/07/04 08:38:33 hiroo Exp $
*/
#include <string.h> #include <string.h>
#include "wchar16.h" #include "wchar16.h"
#include "sj2.h" #include "sj2.h"
@ -44,109 +35,103 @@
#include "sj3.h" #include "sj3.h"
struct cvtkey { struct cvtkey {
char *key_word; char* key_word;
char key_seq[SEQLEN]; char key_seq[SEQLEN];
} cvtkeytbl[] = { } cvtkeytbl[] = {
{ "F1", "" }, {"F1", ""},
{ "F2", "" }, {"F2", ""},
{ "F3", "" }, {"F3", ""},
{ "F4", "" }, {"F4", ""},
{ "F5", "" }, {"F5", ""},
{ "F6", "" }, {"F6", ""},
{ "F7", "" }, {"F7", ""},
{ "F8", "" }, {"F8", ""},
{ "F9", "" }, {"F9", ""},
{ "F10", "" }, {"F10", ""},
{ "F11", "" }, {"F11", ""},
{ "F12", "" }, {"F12", ""},
{ "F13", "" }, {"F13", ""},
{ "F14", "" }, {"F14", ""},
{ "F15", "" }, {"F15", ""},
{ "F16", "" }, {"F16", ""},
{ "F17", "" }, {"F17", ""},
{ "F18", "" }, {"F18", ""},
{ "F19", "" }, {"F19", ""},
{ "F20", "" }, {"F20", ""},
{ "Select", "" }, {"Select", ""},
{ "Kanji", "" }, {"Kanji", ""},
{ "Cancel", "" }, {"Cancel", ""},
{ "Execute", "" }, {"Execute", ""},
{ "Up", "" }, {"Up", ""},
{ "Down", "" }, {"Down", ""},
{ "Right", "" }, {"Right", ""},
{ "Left", "" }, {"Left", ""},
{ NULL, "" } {NULL, ""}};
};
extern struct wcvtkey wcvtkeytbl[]; extern struct wcvtkey wcvtkeytbl[];
int Uvalue[UKEYNUM]; int Uvalue[UKEYNUM];
wchar16_t Ukey[UKEYNUM][SEQLEN + 1]; wchar16_t Ukey[UKEYNUM][SEQLEN + 1];
int Unumber = 0; int Unumber = 0;
int comvalue[COMNUM]; int comvalue[COMNUM];
wchar16_t comkey[COMNUM]; wchar16_t comkey[COMNUM];
int comnumber = 0; int comnumber = 0;
#define ETCKEYS 10 #define ETCKEYS 10
int u_etckeys = 0; int u_etckeys = 0;
int Uetckey[ETCKEYS]; int Uetckey[ETCKEYS];
int Uetcval[ETCKEYS]; int Uetcval[ETCKEYS];
extern wchar16_t* comstr[];
extern wchar16_t *comstr[]; int comstrvalue[KEY_OTHER] = {
KEY_CONV, KEY_HENKAN, KEY_MUHENKAN,
KEY_KETTEI, KEY_ZHIRA, KEY_HALPHA,
KEY_ZALPHA, KEY_HKATA, KEY_ZKATA,
KEY_CODE, KEY_ETC, KEY_RIGHT,
KEY_LEFT, KEY_UP, KEY_DOWN,
KEY_EDIT, KEY_TOGGLE, KEY_WRAPBACK,
KEY_WRAP, KEY_SJRC, KEY_BUFFER,
KEY_TOROKU, KEY_SHOUKYO, KEY_HELP,
KEY_HA_KET, KEY_FLUSH, KEY_DEBUG,
KEY_CANCEL, KEY_RECONV, KEY_IGNORE,
KEY_TOP, KEY_END, KEY_RECONNECT,
KEY_KILL,
KEY_OTHER};
int comstrvalue[KEY_OTHER] = { void mk_cvtkey(char* term) {
KEY_CONV, KEY_HENKAN, KEY_MUHENKAN, char* p;
KEY_KETTEI, KEY_ZHIRA, KEY_HALPHA, char line[MAXLINE], rstr[16];
KEY_ZALPHA, KEY_HKATA, KEY_ZKATA, FILE* fd;
KEY_CODE, KEY_ETC, KEY_RIGHT, char cvtkey_file[LONGLENGTH];
KEY_LEFT, KEY_UP, KEY_DOWN, struct cvtkey* ckeyp;
KEY_EDIT, KEY_TOGGLE, KEY_WRAPBACK, struct wcvtkey* wckeyp;
KEY_WRAP, KEY_SJRC, KEY_BUFFER,
KEY_TOROKU, KEY_SYOUKYO, KEY_HELP,
KEY_HA_KET, KEY_FLUSH, KEY_DEBUG,
KEY_CANCEL, KEY_RECONV, KEY_IGNORE,
KEY_TOP, KEY_END, KEY_RECONNECT,
KEY_KILL,
KEY_OTHER
};
/*
void * Change a default value.
mk_cvtkey(char* term) * Patched by Hidekazu Kuroki(hidekazu@cs.titech.ac.jp) 1996/8/10
{ */
char *p;
char line[MAXLINE], rstr[16];
FILE *fd;
char cvtkey_file[LONGLENGTH];
struct cvtkey *ckeyp;
struct wcvtkey *wckeyp;
/*
* Change a default value.
* Patched by Hidekazu Kuroki(hidekazu@cs.titech.ac.jp) 1996/8/10
*/
strcpy(cvtkey_file, DEFKEYFILE); strcpy(cvtkey_file, DEFKEYFILE);
strcpy(line, term); strcpy(line, term);
if((p = strchr(line, '-')) != NULL) if((p = strchr(line, '-')) != NULL)
*p = '\0'; *p = '\0';
strcat(cvtkey_file, line); strcat(cvtkey_file, line);
if ((fd = fopen(cvtkey_file, "r")) != NULL) { if((fd = fopen(cvtkey_file, "r")) != NULL) {
while ((p = fgets(line, MAXLINE, fd)) != NULL) { while((p = fgets(line, MAXLINE, fd)) != NULL) {
if (*p == '#' ||*p == '\n' ||*p == '\0') if(*p == '#' || *p == '\n' || *p == '\0')
continue; continue;
if ((p = getkey2(p, rstr)) == NULL) if((p = getkey2(p, rstr)) == NULL)
continue; continue;
ckeyp = cvtkeytbl; ckeyp = cvtkeytbl;
wckeyp = wcvtkeytbl; wckeyp = wcvtkeytbl;
while(ckeyp->key_word != NULL) { while(ckeyp->key_word != NULL) {
if (strcmp(ckeyp->key_word, rstr) == 0) { if(strcmp(ckeyp->key_word, rstr) == 0) {
p = getkey2(p, ckeyp->key_seq); p = getkey2(p, ckeyp->key_seq);
(void) mbstowcs(wckeyp->key_seq, (void)mbstowcs(wckeyp->key_seq,
ckeyp->key_seq, SEQLEN); ckeyp->key_seq, SEQLEN);
break; break;
} }
ckeyp++; ckeyp++;
@ -157,57 +142,49 @@ mk_cvtkey(char* term)
} }
} }
char * char* getkey2(char* istr, char* ostr) {
getkey2(char* istr, char* ostr) char* p;
{ int i;
char *p;
int i;
while (*istr == ' ' || *istr == '\t') while(*istr == ' ' || *istr == '\t')
istr++; istr++;
p = istr; p = istr;
i = 0; i = 0;
while (*p != ' ' && *p != '\t' && *p != '\n' && *p != '\0') { while(*p != ' ' && *p != '\t' && *p != '\n' && *p != '\0') {
*ostr++ = *p; *ostr++ = *p;
if (++i > SEQLEN) { if(++i > SEQLEN) {
i = 0; i = 0;
break; break;
} }
p++; p++;
} }
*ostr = '\0'; *ostr = '\0';
if (i > 0) if(i > 0)
return(p); return (p);
return(NULL); return (NULL);
} }
void clear_ukeys(void) {
void
clear_ukeys (void)
{
Unumber = 0; Unumber = 0;
} }
void set_func(struct wordent word[]) {
int i, num;
wchar16_t * p, *s;
struct wcvtkey* ckeyp;
void if(Unumber >= UKEYNUM)
set_func (struct wordent word[])
{
int i, num;
wchar16_t *p, *s;
struct wcvtkey *ckeyp;
if (Unumber >= UKEYNUM)
return; return;
for (i = 0 ; i < KEY_OTHER && *comstr[i] != '\0' ; i ++) { for(i = 0; i < KEY_OTHER && *comstr[i] != '\0'; i++) {
if (match (word[1].word_str, comstr[i])) { if(match(word[1].word_str, comstr[i])) {
p = word[2].word_str; p = word[2].word_str;
if (iswupper(*p)) { if(iswupper(*p)) {
ckeyp = wcvtkeytbl; ckeyp = wcvtkeytbl;
while(ckeyp->key_word != NULL) { while(ckeyp->key_word != NULL) {
if (wscmp(p, ckeyp->key_word) == 0) { if(wscmp(p, ckeyp->key_word) == 0) {
p = ckeyp->key_seq; p = ckeyp->key_seq;
if (*p == '\0') if(*p == '\0')
return; return;
break; break;
} }
@ -215,12 +192,12 @@ set_func (struct wordent word[])
} }
} }
s = Ukey[Unumber]; s = Ukey[Unumber];
if ((num = eval_keys (p, s)) > 1) { if((num = eval_keys(p, s)) > 1) {
if (Unumber < UKEYNUM) if(Unumber < UKEYNUM)
Uvalue[Unumber++] = comstrvalue[i]; Uvalue[Unumber++] = comstrvalue[i];
} else if (num >= 0) { } else if(num >= 0) {
if (comnumber < COMNUM) { if(comnumber < COMNUM) {
comkey[comnumber] = *s; comkey[comnumber] = *s;
comvalue[comnumber++] = comstrvalue[i]; comvalue[comnumber++] = comstrvalue[i];
} }
} }
@ -229,127 +206,106 @@ set_func (struct wordent word[])
} }
} }
wchar16_t wchar16_t
eval_keys (wchar16_t* s, wchar16_t* p) eval_keys(wchar16_t* s, wchar16_t* p) {
{ wchar16_t c, i;
wchar16_t c, i;
if (wslen (s) > SEQLEN) if(wslen(s) > SEQLEN)
return (-1); return (-1);
i = 0; i = 0;
while ((c = *(s ++)) != '\0') { while((c = *(s++)) != '\0') {
if (c == '^') { if(c == '^') {
c = *(s ++); c = *(s++);
if ('@' <= c && c <= '_') if('@' <= c && c <= '_')
c = c - '@'; c = c - '@';
else if (c == '?') else if(c == '?')
c = DEL; c = DEL;
else else
c = *(--s); c = *(--s);
} }
i++; i++;
*(p ++) = c; *(p++) = c;
} }
*p = '\0'; *p = '\0';
return (i); return (i);
} }
void clear_key(void) {
void clear_commkeys();
clear_key (void) clear_etckeys();
{ clear_ukeys();
clear_commkeys ();
clear_etckeys ();
clear_ukeys ();
} }
void clear_commkeys(void) {
void
clear_commkeys (void)
{
comnumber = 0; comnumber = 0;
} }
int int eval_key(wchar16_t* s) {
eval_key (wchar16_t* s) wchar16_t c;
{
wchar16_t c;
c = *s; c = *s;
if(c == '^') {
if (c == '^') {
c = s[1]; c = s[1];
if ('@' <= c && c <= '_') if('@' <= c && c <= '_')
return (c - '@'); return (c - '@');
else if (c == '?') else if(c == '?')
return (DEL); return (DEL);
} }
else if(c <= '~')
else if (c <= '~')
return (c); return (c);
return (-1); return (-1);
} }
void clear_etckeys(void) {
void
clear_etckeys (void)
{
u_etckeys = 0; u_etckeys = 0;
} }
int set_etckeys(struct wordent word[]) {
int i;
int if(u_etckeys >= ETCKEYS)
set_etckeys (struct wordent word[])
{
int i;
if (u_etckeys >= ETCKEYS)
return (1); return (1);
for (i = 0 ; i < KEY_OTHER && *comstr[i] != '\0' ; i ++) { for(i = 0; i < KEY_OTHER && *comstr[i] != '\0'; i++) {
if (match (word[1].word_str, comstr[i])) { if(match(word[1].word_str, comstr[i])) {
Uetcval[u_etckeys] = comstrvalue[i]; Uetcval[u_etckeys] = comstrvalue[i];
break; break;
} }
} }
if (i >= KEY_OTHER) if(i >= KEY_OTHER)
return (1); return (1);
for (i = 0 ; i < KEY_OTHER && *comstr[i] != '\0' ; i ++) { for(i = 0; i < KEY_OTHER && *comstr[i] != '\0'; i++) {
if (match (word[2].word_str, comstr[i])) { if(match(word[2].word_str, comstr[i])) {
Uetckey[u_etckeys] = comstrvalue[i]; Uetckey[u_etckeys] = comstrvalue[i];
break; break;
} }
} }
if (i >= KEY_OTHER) if(i >= KEY_OTHER)
return (1); return (1);
u_etckeys ++; u_etckeys++;
return (0); return (0);
} }
wchar16_t wchar16_t
parse_command (wchar16_t* s, int* count) parse_command(wchar16_t* s, int* count) {
{ extern wchar16_t pars_seq[];
extern wchar16_t pars_seq[]; extern int pars_n;
extern int pars_n; int i, j;
int i, j; wchar16_t c;
wchar16_t c;
c = *s; c = *s;
for (i = 0; i < comnumber ; i ++) { for(i = 0; i < comnumber; i++) {
if (c == comkey[i]) { if(c == comkey[i]) {
for (j = 1 ; j < *count ; j ++) for(j = 1; j < *count; j++)
s[j - 1] = s[j]; s[j - 1] = s[j];
(*count)--; (*count)--;
*pars_seq = c; *pars_seq = c;
pars_seq[1] = 0; pars_seq[1] = 0;
pars_n = 1; pars_n = 1;
return (comvalue[i]); return (comvalue[i]);
} }
} }
return (KEY_NORMAL); return (KEY_NORMAL);
} }

View file

@ -27,52 +27,36 @@
* *
*/ */
/*
* $SonyRCSfile: functbl.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:01:46 $
*
* $Id$
*/
#include "sj_rename.h" #include "sj_rename.h"
#include "sj_func.h" #include "sj_func.h"
#include "kanakan.h" #include "kanakan.h"
VFuncNT cvtnum_func[] = {
VFuncNT cvtnum_func[] = { num_type00, num_type01, num_type02, num_type03,
num_type00, num_type01, num_type02, num_type03, num_type04, num_type05, num_type06, num_type07,
num_type04, num_type05, num_type06, num_type07, num_type08, num_type09, num_type10, num_type11,
num_type08, num_type09, num_type10, num_type11, num_type12, num_type13, num_type14};
num_type12, num_type13, num_type14
};
UCPFuncGK getkan_func[] = { UCPFuncGK getkan_func[] = {
getkan_norm, getkan_norm, getkan_hira, getkan_kata, getkan_norm, getkan_norm, getkan_hira, getkan_kata,
getkan_knj, getkan_ofs, getkan_norm, getkan_none, getkan_knj, getkan_ofs, getkan_norm, getkan_none,
getkan_norm, getkan_norm, getkan_hira, getkan_kata, getkan_norm, getkan_norm, getkan_hira, getkan_kata,
getkan_knj, getkan_ofs, getkan_norm, getkan_none getkan_knj, getkan_ofs, getkan_norm, getkan_none};
};
IFuncSetj setjrec_func[] = { IFuncSetj setjrec_func[] = {
setj_norm2, setj_norm2, setj_norm1, setj_norm1, setj_norm2, setj_norm2, setj_norm1, setj_norm1,
setj_knj, setj_ofs, setj_norm2, setj_atrb, setj_knj, setj_ofs, setj_norm2, setj_atrb,
setj_norm2, setj_norm2, setj_norm1, setj_norm1, setj_norm2, setj_norm2, setj_norm1, setj_norm1,
setj_knj, setj_ofs, setj_norm2, setj_atrb setj_knj, setj_ofs, setj_norm2, setj_atrb};
};
IFuncHira hiraknj_func[] = { IFuncHira hiraknj_func[] = {
hiraknj_hira, hiraknj_norm, hiraknj_hask, hiraknj_kask, hiraknj_hira, hiraknj_norm, hiraknj_hask, hiraknj_kask,
hiraknj_knj, hiraknj_ofs, hiraknj_norm, hiraknj_atrb, hiraknj_knj, hiraknj_ofs, hiraknj_norm, hiraknj_atrb,
hiraknj_hira, hiraknj_norm, hiraknj_hask, hiraknj_kask, hiraknj_hira, hiraknj_norm, hiraknj_hask, hiraknj_kask,
hiraknj_knj, hiraknj_ofs, hiraknj_norm, hiraknj_atrb hiraknj_knj, hiraknj_ofs, hiraknj_norm, hiraknj_atrb};
};
UCPFuncMK makekan_func[] = { UCPFuncMK makekan_func[] = {
makekan_norm, makekan_norm, makekan_1byte, makekan_1byte, makekan_norm, makekan_norm, makekan_1byte, makekan_1byte,
makekan_knj, makekan_ofs, makekan_norm, makekan_none, makekan_knj, makekan_ofs, makekan_norm, makekan_none,
makekan_norm, makekan_norm, makekan_1byte, makekan_1byte, makekan_norm, makekan_norm, makekan_1byte, makekan_1byte,
makekan_knj, makekan_ofs, makekan_norm, makekan_none makekan_knj, makekan_ofs, makekan_norm, makekan_none};
};

259
fuzoku.c
View file

@ -27,61 +27,42 @@
* *
*/ */
/*
* $SonyRCSfile: fuzoku.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:01:47 $
*/
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "sj_hinsi.h" #include "sj_hinshi.h"
#include "sj_right.h" #include "sj_right.h"
#include "sj_yomi.h" #include "sj_yomi.h"
CLREC* argclrec();
int terminate();
static int fzkstrcmp(yptr, fzkp, saml)
CLREC *argclrec(); unsigned char* yptr;
int terminate(); unsigned char* fzkp;
int* saml;
static int fzkstrcmp(yptr, fzkp, saml)
unsigned char *yptr;
unsigned char *fzkp;
int *saml;
{ {
int asklen, nkrlen; int asklen, nkrlen;
asklen = FzkAskLen(fzkp); asklen = FzkAskLen(fzkp);
if(*saml < asklen) return CONT;
if (*saml < asklen) return CONT; if(*saml > asklen) return OVER;
if (*saml > asklen) return OVER;
nkrlen = FzkNkrLen(fzkp); nkrlen = FzkNkrLen(fzkp);
yptr += asklen; yptr += asklen;
fzkp ++; fzkp++;
while(nkrlen--) {
while (nkrlen--) { if(*yptr > *fzkp)
if (*yptr > *fzkp)
return CONT; return CONT;
else if (*yptr < *fzkp) { else if(*yptr < *fzkp) {
if (!*yptr) return PARTLY; if(!*yptr) return PARTLY;
return OVER; return OVER;
} }
else{ else {
yptr++; yptr++;
fzkp++; fzkp++;
(*saml)++; (*saml)++;
@ -91,201 +72,189 @@ int *saml;
return MATCH; return MATCH;
} }
void setclrec(jrec, yptr, right)
JREC* jrec;
void setclrec(jrec, yptr, right) unsigned char* yptr;
JREC *jrec; TypeCnct right;
unsigned char *yptr;
TypeCnct right;
{ {
CLREC *new; CLREC* new;
TypeGram hinsi; TypeGram hinshi;
int len; int len;
if(!(len = yptr - cnvstart)) return;
if (!(len = yptr - cnvstart)) return; if(len > MaxClInputLen) return;
if(!(new = argclrec(len))) return;
if (len > MaxClInputLen) return; new->jnode = jrec;
new->gobiln = gobilen;
new->right = right;
new->fzk_ka = fzk_ka_flg;
(jrec->count)++;
hinshi = jrec->hinshi;
if (!(new = argclrec(len))) return; if(hinshi >= DO_SAHEN && hinshi <= SP_KA_ONB)
new->kubun = K_DOUSHI;
else if((hinshi >= KEIYOUSHI_1 && hinshi <= KE_DOUSHI_9) ||
new -> jnode = jrec; (hinshi == SP_KEIYOUSHI)) {
new -> gobiln = gobilen; if(right == R_FZKMEISHI)
new -> right = right; new->kubun = K_TAIGEN;
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 else
new -> kubun = K_YOUGEN; new->kubun = K_YOUGEN;
} }
else if (hinsi == RENTAISI) else if(hinshi == RENTAISHI)
new -> kubun = K_RENTAISI; new->kubun = K_RENTAISHI;
else if ((hinsi >= FUKUSI_1 && hinsi <= FUKUSI_9) || else if((hinshi >= FUKUSHI_1 && hinshi <= FUKUSHI_9) ||
(hinsi == SP_FUKUSI)) (hinshi == SP_FUKUSHI))
new -> kubun = K_FUKUSI; new->kubun = K_FUKUSHI;
else if (hinsi == SETUZOKU || hinsi==KANDOUSI || else if(hinshi == SETSUZOKU || hinshi == KANDOUSHI ||
hinsi == TANKANJI || hinsi==AISATU) hinshi == TANKANJI || hinshi == AISATSU)
new -> kubun = K_SONOTA; new->kubun = K_SONOTA;
else if (gobilen) { else if(gobilen) {
if (hinsi >= MEISI_5 && hinsi <= MEISI_7) if(hinshi >= MEISHI_5 && hinshi <= MEISHI_7)
new -> kubun = K_DOUSHI; new->kubun = K_DOUSHI;
else if (hinsi == D_MEISI_4) else if(hinshi == D_MEISHI_4)
new -> kubun = K_DOUSHI; new->kubun = K_DOUSHI;
else if (hinsi == SETUBI_7 || hinsi == SETUBI_8) else if(hinshi == SETSUBI_7 || hinshi == SETSUBI_8)
new -> kubun = K_DOUSHI; new->kubun = K_DOUSHI;
else if(hinshi == D_MEISHI_5)
new->kubun = K_YOUGEN;
else if (hinsi == D_MEISI_5) else if(hinshi == SETSUBI_5 || hinshi == SETSUBI_6)
new -> kubun = K_YOUGEN; new->kubun = K_YOUGEN;
else if (hinsi == SETUBI_5 || hinsi == SETUBI_6)
new -> kubun = K_YOUGEN;
else else
new -> kubun = K_TAIGEN; new->kubun = K_TAIGEN;
} } else if(hinshi >= MEISHI_5 && hinshi <= MEISHI_7) {
else if (hinsi >= MEISI_5 && hinsi <= MEISI_7) { if(right >= R_I && right <= R_ITADAKE)
if (right >= R_I && right <= R_ITADAKE) new->kubun = K_DOUSHI;
new -> kubun = K_DOUSHI;
else if (right >= R_DESHI && right <= R_TAI) else if(right >= R_DESHI && right <= R_TAI)
new -> kubun = K_DOUSHI; new->kubun = K_DOUSHI;
else if (right >= R_NAI && right <= R_MEIREI2) else if(right >= R_NAI && right <= R_MEIREI2)
new -> kubun = K_DOUSHI; new->kubun = K_DOUSHI;
else if (right == R_TE2 || right == R_TERU) else if(right == R_TE2 || right == R_TERU)
new -> kubun = K_DOUSHI; new->kubun = K_DOUSHI;
else else
new -> kubun = K_TAIGEN; new->kubun = K_TAIGEN;
} } else
else new->kubun = K_TAIGEN;
new -> kubun = K_TAIGEN;
} }
static int fzkcnct(right, left) static int fzkcnct(right, left)
TypeCnct right; TypeCnct right;
TypeCnct left; TypeCnct left;
{ {
unsigned char *cncttbl; unsigned char* cncttbl;
if (right && left) { if(right && left) {
cncttbl = Rigtadr(right); cncttbl = Rigtadr(right);
left--; left--;
if (cncttbl[left >> 3] << (left & 0x07) & 0x80) if(cncttbl[left >> 3] << (left & 0x07) & 0x80)
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
} }
void srchfzk(jrec, yptr, right, level) void srchfzk(jrec, yptr, right, level)
JREC *jrec; JREC* jrec;
unsigned char *yptr; unsigned char* yptr;
TypeCnct right; TypeCnct right;
int level; int level;
{ {
unsigned char *fzk; unsigned char* fzk;
int len = 0; int len = 0;
int cmp; int cmp;
unsigned char *next; unsigned char* next;
FREC *fzkrec; FREC* fzkrec;
int i; int i;
int nlen; int nlen;
TypeCnct rt; TypeCnct rt;
if ((level >= MAXFLVL) && !(Chrtbl[*yptr] & FZK_KGU)) return; if((level >= MAXFLVL) && !(Chrtbl[*yptr] & FZK_KGU)) return;
if (terminate(right, yptr) && Chrtbl[*yptr] & FZK_KGU){ if(terminate(right, yptr) && Chrtbl[*yptr] & FZK_KGU) {
if (!level) fzk_ka_flg = 0; if(!level) fzk_ka_flg = 0;
yptr++; yptr++;
while (Chrtbl[*yptr] & FZK_KGU) yptr++; while(Chrtbl[*yptr] & FZK_KGU) yptr++;
setclrec(jrec, yptr, (TypeCnct)R_FZKKGU); setclrec(jrec, yptr, (TypeCnct)R_FZKKGU);
return; return;
} }
if (right == R_CUT) return; if(right == R_CUT) return;
if (!*yptr) return; if(!*yptr) return;
if (!(*yptr >= _XA && *yptr <= _NN)) return; if(!(*yptr >= _XA && *yptr <= _NN)) return;
fzkrec = fzktbl; fzkrec = fzktbl;
for (i = fzkcount ; i ; i--, fzkrec++) { for(i = fzkcount; i; i--, fzkrec++) {
if (yptr != fzkrec -> yomip) continue; if(yptr != fzkrec->yomip) continue;
fzk = fzkrec -> fzkp; fzk = fzkrec->fzkp;
len = FzkAskLen(fzk) + (nlen = FzkNkrLen(fzk)) + 1; len = FzkAskLen(fzk) + (nlen = FzkNkrLen(fzk)) + 1;
if (!fzkcnct(right, (TypeCnct)FzkLeft(fzk))) continue; if(!fzkcnct(right, (TypeCnct)FzkLeft(fzk))) continue;
if (!level) fzk_ka_flg = FzkStrKa(fzk); if(!level) fzk_ka_flg = FzkStrKa(fzk);
next = yptr + len; next = yptr + len;
if (terminate(rt = FzkRight(fzk), next)) { if(terminate(rt = FzkRight(fzk), next)) {
setclrec(jrec, next, rt); setclrec(jrec, next, rt);
} }
srchfzk(jrec, next, rt, level + 1); srchfzk(jrec, next, rt, level + 1);
} }
if (len) return; if(len) return;
if(!(fzk = Fzkadr(*yptr - _XA))) return;
if (!(fzk = Fzkadr(*yptr - _XA))) return;
yptr++; yptr++;
for ( ; *fzk != FZKEND ; fzk += nlen + (i ? 4 : 3)) { for(; *fzk != FZKEND; fzk += nlen + (i ? 4 : 3)) {
nlen = FzkNkrLen(fzk); nlen = FzkNkrLen(fzk);
i = FzkHasCode(fzk); i = FzkHasCode(fzk);
cmp = fzkstrcmp(yptr, fzk, &len); cmp = fzkstrcmp(yptr, fzk, &len);
if (cmp == OVER) if(cmp == OVER)
break; break;
else if (cmp == PARTLY) else if(cmp == PARTLY)
break; break;
else if ((cmp != MATCH) || isdpnd(*(yptr + len))) else if((cmp != MATCH) || isdpnd(*(yptr + len)))
continue; continue;
fzktbl[fzkcount].yomip = yptr - 1;
fzktbl[fzkcount].yomip = yptr - 1; fzktbl[fzkcount].fzkp = fzk;
fzktbl[fzkcount].fzkp = fzk;
fzkcount++; fzkcount++;
if (!fzkcnct(right, (TypeCnct)FzkLeft(fzk))) continue; if(!fzkcnct(right, (TypeCnct)FzkLeft(fzk))) continue;
if (!level) fzk_ka_flg = FzkStrKa(fzk); if(!level) fzk_ka_flg = FzkStrKa(fzk);
next = yptr + len; next = yptr + len;
if (terminate(rt = FzkRight(fzk), next)) { if(terminate(rt = FzkRight(fzk), next)) {
setclrec(jrec, next, rt); setclrec(jrec, next, rt);
} }

1300
fzkyomi.c

File diff suppressed because it is too large Load diff

View file

@ -27,78 +27,57 @@
* *
*/ */
/*
* $SonyRCSfile: getkanji.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:01:49 $
*
* $Id$
*/
#include "sj_euc.h" #include "sj_euc.h"
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "kanakan.h" #include "kanakan.h"
static unsigned char* static unsigned char*
code2kanji(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg); code2kanji(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg);
unsigned char* unsigned char*
getkan_none(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg) getkan_none(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg) {
{
return d; return d;
} }
unsigned char* unsigned char*
getkan_hira(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg) getkan_hira(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg) {
{ int cnt, csize;
int cnt, csize;
csize = codesize(*s); csize = codesize(*s);
cnt = (*s & KanjiCodeMask) + 1; cnt = (*s & KanjiCodeMask) + 1;
if (flg && (s[csize] == KanjiStrEnd)) ym += (yl - cnt) * 2;
if(flg && (s[csize] == KanjiStrEnd)) ym += (yl - cnt) * 2;
cnt *= 2; cnt *= 2;
while (cnt-- > 0) *d++ = *ym++; while(cnt-- > 0) *d++ = *ym++;
return d; return d;
} }
unsigned char* unsigned char*
getkan_kata(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg) getkan_kata(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg) {
{ int cnt, csize;
int cnt, csize; unsigned char ch;
unsigned char ch;
csize = codesize(*s); csize = codesize(*s);
cnt = (*s & KanjiCodeMask) + 1; cnt = (*s & KanjiCodeMask) + 1;
if(flg && (s[csize] == KanjiStrEnd)) ym += (yl - cnt) * 2;
if (flg && (s[csize] == KanjiStrEnd)) ym += (yl - cnt) * 2; while(cnt-- > 0) {
if(*ym == 0xa4) {
while (cnt-- > 0) {
if (*ym == 0xa4) {
ch = *++ym; ch = *++ym;
if (0xa1 <= ch && ch <= 0xf3) { if(0xa1 <= ch && ch <= 0xf3) {
*d++ = 0xa5; *d++ = 0xa5;
} } else {
else {
*d++ = 0xa4; *d++ = 0xa4;
} }
*d++ = ch; *d++ = ch;
ym++; ym++;
} } else {
else {
*d++ = *ym++; *d++ = *ym++;
*d++ = *ym++; *d++ = *ym++;
} }
@ -107,109 +86,110 @@ getkan_kata(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int f
return d; return d;
} }
unsigned char* unsigned char*
getkan_knj(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg) getkan_knj(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg) {
{
return code2kanji(askknj[*s & KnjAssyukuMask], d, ym, yl, flg); return code2kanji(askknj[*s & KnjAsshukuMask], d, ym, yl, flg);
} }
unsigned char* unsigned char*
getkan_ofs(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg) getkan_ofs(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg) {
{
return code2kanji(dicbuf + ((*s & KanjiCodeMask) << 8) + *(s + 1), return code2kanji(dicbuf + ((*s & KanjiCodeMask) << 8) + *(s + 1),
d, ym, yl, flg); d, ym, yl, flg);
} }
unsigned char* unsigned char*
getkan_norm(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg) getkan_norm(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg) {
{
unsigned char c; unsigned char c;
if (*s != 0) { if(*s != 0) {
c = s[1]; c = s[1];
if (c & 0x80) if(c & 0x80)
*d++ = SS3; *d++ = SS3;
*d++ = *s | 0x80; *d++ = *s | 0x80;
*d++ = c | 0x80; *d++ = c | 0x80;
} else { } else {
*d++ = *s; *d++ = *s;
} }
return d; return d;
} }
unsigned char* unsigned char*
getkan_ascii(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg) getkan_ascii(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg) {
{
unsigned char c; unsigned char c;
c = s[1]; c = s[1];
if (c & 0x80) if(c & 0x80)
*d++ = SS2; *d++ = SS2;
*d++ = c; *d++ = c;
return d; return d;
} }
static unsigned char* static unsigned char*
code2kanji(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg) code2kanji(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg) {
{
int csize; int csize;
for ( ; ; ) { for(;;) {
csize = codesize(*s); csize = codesize(*s);
if (s[csize] == KanjiStrEnd) { if(s[csize] == KanjiStrEnd) {
switch(*s & KanjiModeMask) { switch(*s & KanjiModeMask) {
case ZenHiraAssyuku: case ZenHiraAsshuku:
d = getkan_hira(s, d, ym, yl, flg); break; d = getkan_hira(s, d, ym, yl, flg);
break;
case ZenKataAssyuku: case ZenKataAsshuku:
d = getkan_kata(s, d, ym, yl, flg); break; d = getkan_kata(s, d, ym, yl, flg);
break;
case OffsetAssyuku: case OffsetAsshuku:
d = getkan_ofs(s, d, ym, yl, flg); break; d = getkan_ofs(s, d, ym, yl, flg);
break;
case AiAttribute: case AiAttribute:
d = getkan_none(s, d, ym, yl, flg); break; d = getkan_none(s, d, ym, yl, flg);
break;
case LeadingHankaku: case LeadingHankaku:
d = getkan_ascii(s, d, ym, yl, flg); break; d = getkan_ascii(s, d, ym, yl, flg);
break;
case KanjiAssyuku: case KanjiAsshuku:
d = getkan_knj(s, d, ym, yl, flg); break; d = getkan_knj(s, d, ym, yl, flg);
break;
default: default:
d = getkan_norm(s, d, ym, yl, flg); d = getkan_norm(s, d, ym, yl, flg);
} }
break; break;
} } else
else
switch(*s & KanjiModeMask) { switch(*s & KanjiModeMask) {
case ZenHiraAssyuku: case ZenHiraAsshuku:
d = getkan_hira(s, d, ym, yl, FALSE); break; d = getkan_hira(s, d, ym, yl, FALSE);
break;
case ZenKataAssyuku: case ZenKataAsshuku:
d = getkan_kata(s, d, ym, yl, FALSE); break; d = getkan_kata(s, d, ym, yl, FALSE);
break;
case OffsetAssyuku: case OffsetAsshuku:
d = getkan_ofs(s, d, ym, yl, FALSE); break; d = getkan_ofs(s, d, ym, yl, FALSE);
break;
case AiAttribute: case AiAttribute:
d = getkan_none(s, d, ym, yl, FALSE); break; d = getkan_none(s, d, ym, yl, FALSE);
break;
case LeadingHankaku: case LeadingHankaku:
d = getkan_ascii(s, d, ym, yl, FALSE); break; d = getkan_ascii(s, d, ym, yl, FALSE);
break;
case KanjiAssyuku: case KanjiAsshuku:
d = getkan_knj(s, d, ym, yl, FALSE); break; d = getkan_knj(s, d, ym, yl, FALSE);
break;
default: default:
d = getkan_norm(s, d, ym, yl, FALSE); d = getkan_norm(s, d, ym, yl, FALSE);
} }
@ -219,14 +199,10 @@ code2kanji(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int fl
return d; return d;
} }
int getkanji(unsigned char* ym, int yl, unsigned char* ptr, unsigned char* buf) {
int unsigned char* q;
getkanji(unsigned char* ym, int yl, unsigned char* ptr, unsigned char* buf)
{
unsigned char *q;
q = code2kanji(ptr, buf, ym, yl, TRUE); q = code2kanji(ptr, buf, ym, yl, TRUE);
return q - buf; return q - buf;
} }

131
getrank.c
View file

@ -27,123 +27,94 @@
* *
*/ */
/*
* $SonyRCSfile: getrank.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:01:50 $
*
* $Id$
*/
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "kanakan.h" #include "kanakan.h"
static void setstynum(void);
static void setnspr(KHREC* kptr, STDYIN* sptr);
static void regetrank(void);
static void setstynum (void); void getrank(void) {
static void setnspr (KHREC *kptr, STDYIN *sptr);
static void regetrank (void);
void
getrank (void)
{
trank = nrank = 1; trank = nrank = 1;
setstynum(); setstynum();
regetrank(); regetrank();
} }
static void
setstynum(void) {
static void KHREC* kptr;
setstynum (void) STDYIN* sptr;
{
KHREC *kptr;
STDYIN *sptr;
int count; int count;
for (kptr = kouhotbl, count = khcount ; count-- ; kptr++) { for(kptr = kouhotbl, count = khcount; count--; kptr++) {
sptr = srchstdy(kptr -> clrec -> jnode -> jseg, kptr -> offs, sptr = srchstdy(kptr->clrec->jnode->jseg, kptr->offs,
kptr -> clrec -> jnode -> dicid); kptr->clrec->jnode->dicid);
if (!sptr) continue; if(!sptr) continue;
setnspr(kptr, sptr); setnspr(kptr, sptr);
} }
} }
static void
setnspr(KHREC* kptr, STDYIN* sptr) {
KHREC* ptr;
int keepnm;
TypeStyNum styno;
styno = kptr->styno = sptr->styno;
keepnm = trank;
static void for(ptr = kouhotbl; ptr < kptr; ptr++) {
setnspr (KHREC *kptr, STDYIN *sptr) if(styno < ptr->styno) {
{ ptr->rank++;
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--; keepnm--;
} } else if(styno == ptr->styno) {
else if (styno == ptr -> styno) { if(kptr->sttfg && kptr->ka_fg) {
if (kptr -> sttfg && kptr -> ka_fg) { if((sptr->sttkj == kptr->sttkj) &&
if ((sptr -> sttkj == kptr -> sttkj) && (sptr->ka_kj == kptr->ka_kj)) {
(sptr -> ka_kj == kptr -> ka_kj)) { ptr->rank++;
ptr -> rank++;
keepnm--; keepnm--;
} }
} } else if(kptr->sttfg) {
else if (kptr -> sttfg) { if(sptr->sttkj == kptr->sttkj) {
if (sptr -> sttkj == kptr -> sttkj) { ptr->rank++;
ptr -> rank++;
keepnm--; keepnm--;
} }
} } else if(kptr->ka_fg) {
else if (kptr -> ka_fg) { if(sptr->ka_kj == kptr->ka_kj) {
if (sptr -> ka_kj == kptr -> ka_kj) { ptr->rank++;
ptr -> rank++;
keepnm--; keepnm--;
} }
} }
} }
} }
kptr -> rank = (unsigned char)keepnm; kptr->rank = (unsigned char)keepnm;
trank++; trank++;
if (keepnm <= nrank) nrank++; if(keepnm <= nrank) nrank++;
if (sptr -> nmflg && (nrank > keepnm)) nrank = keepnm; if(sptr->nmflg && (nrank > keepnm)) nrank = keepnm;
} }
static void
regetrank(void) {
KHREC* kptr;
int count;
int tmp;
if(nrank < trank) {
static void
regetrank (void)
{
KHREC *kptr;
int count;
int tmp;
if (nrank < trank) {
tmp = nrank; tmp = nrank;
trank += nkhcount; trank += nkhcount;
} } else {
else {
nkhcount = tmp = 0; nkhcount = tmp = 0;
} }
for (count = khcount, kptr = kouhotbl ; count-- ; kptr++) { for(count = khcount, kptr = kouhotbl; count--; kptr++) {
if (!(kptr -> rank)) { if(!(kptr->rank)) {
if (tmp && kptr -> mode && !(kptr -> offs)) { if(tmp && kptr->mode && !(kptr->offs)) {
kptr -> rank = (unsigned char)tmp++; kptr->rank = (unsigned char)tmp++;
} } else
else kptr->rank = (unsigned char)trank++;
kptr -> rank = (unsigned char)trank++; } else if((short)kptr->rank >= nrank)
} kptr->rank += (unsigned char)nkhcount;
else if ((short)kptr -> rank >= nrank)
kptr -> rank += (unsigned char)nkhcount;
} }
} }

View file

@ -27,32 +27,25 @@
* *
*/ */
/*
* $SonyRCSfile: global.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:00:35 $
*/
#include <stdio.h> #include <stdio.h>
#include <sys/types.h> #include <sys/types.h>
#include "sj_struct2.h" #include "sj_struct2.h"
DouonRec *douon_ptr = NULL; DouonRec* douon_ptr = NULL;
int douon_num = 0; int douon_num = 0;
int yomi_len = 0; int yomi_len = 0;
int hinsi_num = 0; int hinshi_num = 0;
int kanji_len = 0; int kanji_len = 0;
HindoRec *hindo[MaxHindoNumber]; HindoRec* hindo[MaxHindoNumber];
int hindo_num = 0; int hindo_num = 0;
OffsetRec *ofsrec[MaxOffsetNumber]; OffsetRec* ofsrec[MaxOffsetNumber];
int ofsrec_num = 0; int ofsrec_num = 0;
AssyukuRec *assyuku = NULL; AsshukuRec* asshuku = NULL;
HindoRec *askknj[MaxKnjAskNumber]; HindoRec* askknj[MaxKnjAskNumber];
int askknj_num = 0; int askknj_num = 0;
int kanji_num = 0; int kanji_num = 0;

View file

@ -27,13 +27,6 @@
* *
*/ */
/*
* $SonyRCSfile: global.c,v $
* $SonyRevision: 1.2 $
* $SonyDate: 1994/12/09 11:27:06 $
*/
#include <sys/types.h> #include <sys/types.h>
#include <stdio.h> #include <stdio.h>
@ -46,11 +39,10 @@
#include "sj_typedef.h" #include "sj_typedef.h"
#include "sj_var.h" #include "sj_var.h"
Global *global_work_base; Global* global_work_base;
Global *work_base; Global* work_base;
STDY *stdy_base; STDY* stdy_base;
int serv_errno;
int serv_errno;

851
henkan.c

File diff suppressed because it is too large Load diff

View file

@ -27,24 +27,16 @@
* *
*/ */
/* #define ObjEnd 0
* $SonyRCSfile: henkan.h,v $ #define ObjHenkan 1
* $SonyRevision: 1.1 $ #define ObjMuhenkan 2
* $SonyDate: 1994/06/03 08:03:43 $
*/
#define Bend 0
#define Bhenkan 1
#define Bmuhenkan 2
#define Bedit 4
#define BEDIT 8
#define DLEN (DOUONLEN * 2)
#define ObjEnd 0 #define EDITLEN (BUFFLENGTH * DLEN)
#define ObjHenkan 1 #define MAXENUM (EDITLEN / DLEN)
#define ObjMuhenkan 2
#define Bend 0
#define Bhenkan 1
#define Bmuhenkan 2
#define Bedit 4
#define BEDIT 8
#define DLEN (DOUONLEN*2)
#define EDITLEN (BUFFLENGTH*DLEN)
#define MAXENUM (EDITLEN/DLEN)

574
hindo.c
View file

@ -27,323 +27,260 @@
* *
*/ */
/*
* $SonyRCSfile: hindo.c,v $
* $SonyRevision: 1.2 $
* $SonyDate: 1994/08/17 01:50:26 $
*
* $Id$
*/
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <sys/types.h> #include <sys/types.h>
#include "sj_struct.h" #include "sj_struct.h"
#include "dicttool.h" #include "dicttool.h"
extern HindoRec *hindo[]; extern HindoRec* hindo[];
extern int hindo_num; extern int hindo_num;
extern AssyukuRec *assyuku; extern AsshukuRec* asshuku;
extern HindoRec *askknj[]; extern HindoRec* askknj[];
extern int askknj_num; extern int askknj_num;
extern int kanji_num; extern int kanji_num;
int check_hindo(unsigned char* ptr, int len) {
int low, high, mid;
int i;
int if(hindo_num <= 0) return 0;
check_hindo(unsigned char* ptr, int len)
{
int low, high, mid;
int i;
low = 0;
if (hindo_num <= 0) return 0; high = hindo_num - 1;
while(low <= high) {
low = 0; high = hindo_num - 1;
while (low <= high) {
mid = (low + high) / 2; mid = (low + high) / 2;
i = string_cmp(hindo[mid]->kptr, hindo[mid]->klen, ptr, len); i = string_cmp(hindo[mid]->kptr, hindo[mid]->klen, ptr, len);
if (i > 0) if(i > 0)
high = mid - 1; high = mid - 1;
else if (i < 0) else if(i < 0)
low = ++mid; low = ++mid;
else else
return(hindo[mid]->exist + hindo[mid]->hindo); return (hindo[mid]->exist + hindo[mid]->hindo);
} }
return 0; return 0;
} }
static AsshukuRec*
makeasshuku(int num) {
AsshukuRec* arec;
arec = (AsshukuRec*)Malloc(sizeof(AsshukuRec));
static AssyukuRec* if(!arec) {
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"); fprintf(stderr, "\245\341\245\342\245\352\244\254\302\255\244\352\244\336\244\273\244\363\n");
exit(1); exit(1);
} }
arec->len = num;
arec -> len = num; arec->nrec = NULL;
arec -> nrec = NULL; arec->anext = NULL;
arec -> anext = NULL;
return arec; return arec;
} }
static int static int
assyuku_len(HindoRec* hrec) asshuku_len(HindoRec* hrec) {
{ int org;
int org; int old;
int old; int new;
int new; OffsetRec* p;
OffsetRec *p;
if(((*(hrec->kptr) & KanjiModeMask) == OffsetAsshuku) &&
(hrec->klen == 2)) {
if (((*(hrec->kptr) & KanjiModeMask) == OffsetAssyuku) && p = real_ofsrec(hrec->kptr);
(hrec->klen == 2)) {
p = real_ofsrec(hrec -> kptr);
org = check_hindo(p -> kptr, p -> klen);
org = check_hindo(p->kptr, p->klen);
old = p->klen * org + 2 * (hrec->exist + hrec->hindo); old = p->klen * org + 2 * (hrec->exist + hrec->hindo);
new = p->klen + (hrec->exist + hrec->hindo + org); new = p->klen + (hrec->exist + hrec->hindo + org);
} }
else { else {
old = hrec -> klen * (hrec -> exist + hrec -> hindo); old = hrec->klen * (hrec->exist + hrec->hindo);
new = hrec->klen + (hrec->exist + hrec->hindo);
new = hrec -> klen + (hrec -> exist + hrec -> hindo);
} }
return (old - new); return (old - new);
} }
static void static void
set_assyuku(HindoRec* hrec) set_asshuku(HindoRec* hrec) {
{ AsshukuRec* arec;
AssyukuRec *arec; AsshukuRec* aprev;
AssyukuRec *aprev; int len;
int len;
len = asshuku_len(hrec);
len = assyuku_len(hrec); if(len <= 0) return;
arec = asshuku;
aprev = NULL;
while(arec) {
if (len <= 0) return; if(arec->len == len) {
hrec->arec = arec;
arec = assyuku; aprev = NULL; hrec->anext = arec->nrec;
while (arec) { arec->nrec = hrec;
if (arec -> len == len) {
hrec -> arec = arec;
hrec -> anext = arec -> nrec;
arec -> nrec = hrec;
return; return;
} }
else if (arec -> len < len) else if(arec->len < len)
break; break;
aprev = arec; aprev = arec;
arec = arec -> anext; arec = arec->anext;
} }
arec = makeasshuku(len);
arec = makeassyuku(len); hrec->anext = NULL;
hrec->arec = arec;
arec->nrec = hrec;
if(aprev) {
hrec -> anext = NULL; arec->anext = aprev->anext;
hrec -> arec = arec; aprev->anext = arec;
arec -> nrec = hrec; } else {
arec->anext = asshuku;
asshuku = arec;
if (aprev) {
arec -> anext = aprev -> anext;
aprev -> anext = arec;
}
else {
arec -> anext = assyuku;
assyuku = arec;
} }
} }
static void static void
reset_assyuku(HindoRec* hrec) reset_asshuku(HindoRec* hrec) {
{ AsshukuRec* arec;
AssyukuRec *arec; AsshukuRec* aptr;
AssyukuRec *aptr; AsshukuRec* aprev;
AssyukuRec *aprev; HindoRec* hptr;
HindoRec *hptr; HindoRec* hprev;
HindoRec *hprev;
arec = hrec -> arec; arec = hrec->arec;
if(!arec) return;
hrec->arec = NULL;
if (!arec) return; hptr = arec->nrec;
hrec -> arec = NULL; hprev = NULL;
while(hptr) {
if(hptr == hrec) break;
hptr = arec -> nrec; hprev = NULL;
while (hptr) {
if (hptr == hrec) break;
hprev = hptr; hprev = hptr;
hptr = hptr -> anext; hptr = hptr->anext;
} }
if(!hptr) return;
if (!hptr) return; if(hprev) {
hprev->anext = hrec->anext;
hrec->anext = NULL;
if (hprev) {
hprev -> anext = hrec -> anext;
hrec -> anext = NULL;
return; return;
} }
if(hrec->anext) {
if (hrec -> anext) { arec->nrec = hrec->anext;
arec -> nrec = hrec -> anext; hrec->anext = NULL;
hrec -> anext = NULL;
return; return;
} }
if(!asshuku) return;
aptr = asshuku;
aprev = NULL;
if (!assyuku) return; while(aptr) {
aptr = assyuku; aprev = NULL; if(aptr == arec) break;
while (aptr) {
if (aptr == arec) break;
aprev = aptr; aprev = aptr;
aptr = aptr -> anext; aptr = aptr->anext;
} }
if(!aptr) return;
if (!aptr) return; if(aprev)
aprev->anext = arec->anext;
if (aprev)
aprev -> anext = arec -> anext;
else else
assyuku = arec -> anext; asshuku = arec->anext;
Free(arec); Free(arec);
hrec->anext = NULL;
hrec -> anext = NULL;
} }
static HindoRec* static HindoRec*
makehindo(unsigned char* ptr, int len, int alen) makehindo(unsigned char* ptr, int len, int alen) {
{ HindoRec* hrec;
HindoRec *hrec; unsigned char* p;
unsigned char *p;
hrec = (HindoRec*)Malloc(sizeof(HindoRec));
hrec = (HindoRec *)Malloc(sizeof(HindoRec)); if(!hrec) {
if (!hrec) {
fprintf(stderr, "\245\341\245\342\245\352\244\254\302\255\244\352\244\336\244\273\244\363\n"); fprintf(stderr, "\245\341\245\342\245\352\244\254\302\255\244\352\244\336\244\273\244\363\n");
exit(1); exit(1);
} }
p = (unsigned char *)Malloc(len); p = (unsigned char*)Malloc(len);
if (!p) { if(!p) {
fprintf(stderr, "\245\341\245\342\245\352\244\254\302\255\244\352\244\336\244\273\244\363\n"); fprintf(stderr, "\245\341\245\342\245\352\244\254\302\255\244\352\244\336\244\273\244\363\n");
exit(1); exit(1);
} }
hrec -> klen = len; hrec->klen = len;
hrec -> kptr = p; hrec->kptr = p;
if (len == alen && len > 2) { if(len == alen && len > 2) {
hrec -> hindo = 0; hrec->hindo = 0;
hrec -> exist = 1; hrec->exist = 1;
hrec -> offset = ++kanji_num; hrec->offset = ++kanji_num;
} else {
hrec->hindo = 1;
hrec->exist = 0;
hrec->offset = 0;
} }
else { while(len-- > 0) *p++ = *ptr++;
hrec -> hindo = 1; hrec->anext = NULL;
hrec -> exist = 0; hrec->arec = NULL;
hrec -> offset = 0;
}
while (len-- > 0) *p++ = *ptr++;
hrec -> anext = NULL;
hrec -> arec = NULL;
return hrec; return hrec;
} }
static void static void
set_hindo(unsigned char* ptr, int len, int alen) set_hindo(unsigned char* ptr, int len, int alen) {
{ HindoRec* hrec;
HindoRec *hrec; int low, high, mid;
int low, high, mid; int i;
int i;
if(hindo_num <= 0) {
if (hindo_num <= 0) { hrec = makehindo(ptr, len, alen);
hrec = makehindo(ptr, len, alen); hindo[0] = hrec;
hindo[0]= hrec;
hindo_num = 1; hindo_num = 1;
set_asshuku(hrec);
set_assyuku(hrec);
return; return;
} }
low = 0;
low = 0; high = hindo_num - 1; high = hindo_num - 1;
while (low <= high) { while(low <= high) {
mid = (low + high) / 2; mid = (low + high) / 2;
i = string_cmp(hindo[mid]->kptr, hindo[mid]->klen, ptr, len); i = string_cmp(hindo[mid]->kptr, hindo[mid]->klen, ptr, len);
if (i > 0) if(i > 0)
high = mid - 1; high = mid - 1;
else if (i < 0) else if(i < 0)
low = ++mid; low = ++mid;
else else
break; break;
} }
if(i) {
if (i) { if(hindo_num >= MaxHindoNumber) {
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"); 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); exit(1);
} }
hrec = makehindo(ptr, len, alen); hrec = makehindo(ptr, len, alen);
for(i = hindo_num; i > mid; i--) hindo[i] = hindo[i - 1];
for (i = hindo_num ; i > mid ; i--) hindo[i] = hindo[i - 1];
hindo[mid] = hrec; hindo[mid] = hrec;
hindo_num++; hindo_num++;
} }
@ -351,73 +288,61 @@ set_hindo(unsigned char* ptr, int len, int alen)
else { else {
hrec = hindo[mid]; hrec = hindo[mid];
reset_asshuku(hrec);
reset_assyuku(hrec); if(hrec->exist > 0)
hrec->exist += 1;
else if(len == alen && len > 2) {
if (hrec -> exist > 0) hrec->exist = 1;
hrec -> exist += 1; hrec->offset = ++kanji_num;
else if (len == alen && len > 2) {
hrec -> exist = 1;
hrec -> offset = ++kanji_num;
} }
else else
hrec -> hindo += 1; hrec->hindo += 1;
} }
set_asshuku(hrec);
set_assyuku(hrec);
} }
static void static void
reset_hindo(unsigned char* p, int l) reset_hindo(unsigned char* p, int l) {
{ HindoRec* hrec;
HindoRec *hrec; int low, high, mid;
int low, high, mid; int i;
int i;
if(hindo_num <= 0) return;
if (hindo_num <= 0) return; low = 0;
high = hindo_num - 1;
while(low <= high) {
low = 0; high = hindo_num - 1;
while (low <= high) {
mid = (low + high) / 2; mid = (low + high) / 2;
i = string_cmp(hindo[mid]->kptr, hindo[mid]->klen, p, l); i = string_cmp(hindo[mid]->kptr, hindo[mid]->klen, p, l);
if (i > 0) if(i > 0)
high = mid - 1; high = mid - 1;
else if (i < 0) else if(i < 0)
low = ++mid; low = ++mid;
else { else {
hrec = hindo[mid]; hrec = hindo[mid];
reset_asshuku(hrec);
reset_assyuku(hrec); if(hrec->exist > 0)
hrec->exist -= 1;
else if(hrec->hindo > 0)
hrec->hindo -= 1;
if (hrec -> exist > 0) if(hrec->exist + hrec->hindo == 0) {
hrec -> exist -= 1; while(++mid < hindo_num) {
else if (hrec -> hindo > 0)
hrec -> hindo -= 1;
if (hrec -> exist + hrec -> hindo == 0) {
while (++mid < hindo_num) {
hindo[mid - 1] = hindo[mid]; hindo[mid - 1] = hindo[mid];
} }
hindo_num--; hindo_num--;
Free(hrec -> kptr); Free(hrec->kptr);
Free(hrec); Free(hrec);
} } else {
else {
set_assyuku(hrec); set_asshuku(hrec);
} }
return; return;
@ -426,170 +351,141 @@ reset_hindo(unsigned char* p, int l)
} }
} }
void knjhnd_set(unsigned char* p, int l) {
unsigned char* kp1;
unsigned char* kp2;
int i;
int kl1;
unsigned char tmp[MaxKanjiLength * 2 + MaxAtrNumber * 2 + 1];
void for(kp1 = p, kl1 = l; kl1 > 0;) {
knjhnd_set(unsigned char* p, int l)
{
unsigned char *kp1;
unsigned char *kp2;
int i;
int kl1;
unsigned 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) {
for (i = 0, kp2 = kp1 ; i < kl1 ; ) {
if (codesize(*kp2) == 1) {
tmp[i++] = *kp2++; tmp[i++] = *kp2++;
} } else if(codesize(*kp2) == 2) {
else if (codesize(*kp2) == 2) {
tmp[i++] = *kp2++; tmp[i++] = *kp2++;
tmp[i++] = *kp2++; tmp[i++] = *kp2++;
} else { } else {
tmp[i++] = *kp2++; tmp[i++] = *kp2++;
tmp[i++] = *kp2++; tmp[i++] = *kp2++;
tmp[i++] = *kp2++; tmp[i++] = *kp2++;
} }
set_hindo(tmp, i, l); set_hindo(tmp, i, l);
} }
kl1 -= codesize(*kp1); kl1 -= codesize(*kp1);
kp1 += codesize(*kp1); kp1 += codesize(*kp1);
} }
} }
void knjhnd_reset(unsigned char* p, int l) {
unsigned char* kp1;
unsigned char* kp2;
int i;
int kl1;
unsigned char tmp[MaxKanjiLength * 2 + MaxAtrNumber * 2 + 1];
void for(kp1 = p, kl1 = l; kl1 > 0;) {
knjhnd_reset(unsigned char* p, int l)
{
unsigned char *kp1;
unsigned char *kp2;
int i;
int kl1;
unsigned 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) {
for (i = 0, kp2 = kp1 ; i < kl1 ; ) {
if (codesize(*kp2) == 1) {
tmp[i++] = *kp2++; tmp[i++] = *kp2++;
} } else if(codesize(*kp2) == 2) {
else if (codesize(*kp2) == 2) {
tmp[i++] = *kp2++; tmp[i++] = *kp2++;
tmp[i++] = *kp2++; tmp[i++] = *kp2++;
} else { } else {
tmp[i++] = *kp2++; tmp[i++] = *kp2++;
tmp[i++] = *kp2++; tmp[i++] = *kp2++;
tmp[i++] = *kp2++; tmp[i++] = *kp2++;
} }
reset_hindo(tmp, i); reset_hindo(tmp, i);
} }
kl1 -= codesize(*kp1); kl1 -= codesize(*kp1);
kp1 += codesize(*kp1); kp1 += codesize(*kp1);
} }
} }
static int static int
check_assyuku(HindoRec* p, HindoRec* q) check_asshuku(HindoRec* p, HindoRec* q) {
{ unsigned char ptmp[128], qtmp[128];
unsigned char ptmp[128], qtmp[128]; int plen;
int plen; int qlen;
int qlen;
plen = make_knjstr(p->kptr, p->klen, ptmp);
plen = make_knjstr(p -> kptr, p -> klen, ptmp); qlen = make_knjstr(q->kptr, q->klen, qtmp);
if(bubun_str(ptmp, plen, qtmp, qlen)) {
qlen = make_knjstr(q -> kptr, q -> klen, qtmp);
if (bubun_str(ptmp, plen, qtmp, qlen)) {
return -1; return -1;
} }
if(overlap_str(ptmp, plen, qtmp, qlen))
if (overlap_str(ptmp, plen, qtmp, qlen))
return -1; return -1;
return 0; return 0;
} }
int decide_knjask(void) {
int int i, j;
decide_knjask(void) AsshukuRec* p;
{ HindoRec* q;
int i, j; unsigned char* r;
AssyukuRec *p; int len = 0;
HindoRec *q;
unsigned char *r;
int len = 0;
askknj_num = 0; askknj_num = 0;
for(p = asshuku; p; p = p->anext) {
for (p = assyuku ; p ; p = p -> anext) { if(p->len <= 0) break;
for(q = p->nrec; q; q = q->anext) {
if (p -> len <= 0) break; i = q->klen;
r = q->kptr;
if(i > 2) {
for (q = p -> nrec ; q ; q = q -> anext) { while(i > 0) {
if((*r & KanjiModeMask) == OffsetAsshuku) {
i = q -> klen;
r = q -> kptr;
if (i > 2) {
while (i > 0) {
if ((*r & KanjiModeMask)
== OffsetAssyuku) {
break; break;
} }
j = codesize(*r); j = codesize(*r);
i -= j; i -= j;
r += j; r += j;
} }
if (i) continue; if(i) continue;
} }
if (askknj_num) { if(askknj_num) {
for (i = 0 ; i < askknj_num ; i++) { for(i = 0; i < askknj_num; i++) {
if (check_assyuku(askknj[i], q)) if(check_asshuku(askknj[i], q))
break; break;
} }
if(i >= askknj_num) {
if (i >= askknj_num) {
askknj[askknj_num++] = q; askknj[askknj_num++] = q;
len += p -> len; len += p->len;
if (askknj_num >= MaxKnjAskNumber) if(askknj_num >= MaxKnjAskNumber)
goto end; goto end;
} }
} } else {
else {
askknj[askknj_num++] = q; askknj[askknj_num++] = q;
len += p -> len; len += p->len;
} }
} }
} }
end: end:
{ {
int i, j, len; int i, j, len;
unsigned char *p; unsigned char* p;
for (i = 0 ; i < askknj_num ; i++) { for(i = 0; i < askknj_num; i++) {
len = askknj[i] -> klen; len = askknj[i]->klen;
p = askknj[i] -> kptr; p = askknj[i]->kptr;
if (len <= 2) continue; if(len <= 2) continue;
while (len > 0) { while(len > 0) {
if ((*p & KanjiModeMask) == OffsetAssyuku) { if((*p & KanjiModeMask) == OffsetAsshuku) {
printf("\245\252\245\325\245\273\245\303\245\310\260\265\275\314\244\362\264\336\244\340 %d\n", i); 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); j = codesize(*p);
@ -601,13 +497,10 @@ end:
return len; return len;
} }
void clear_hindo(void) {
int i;
void for(i = 0; i < hindo_num; i++) {
clear_hindo(void)
{
int i;
for (i = 0 ; i < hindo_num ; i++) {
Free(hindo[i]->kptr); Free(hindo[i]->kptr);
Free(hindo[i]); Free(hindo[i]);
} }
@ -615,15 +508,12 @@ clear_hindo(void)
kanji_num = 0; kanji_num = 0;
} }
void clear_asshuku(void) {
AsshukuRec* p;
void while(asshuku) {
clear_assyuku(void) p = asshuku;
{ asshuku = asshuku->anext;
AssyukuRec *p;
while (assyuku) {
p = assyuku;
assyuku = assyuku -> anext;
Free(p); Free(p);
} }
} }

249
hinshi.c Normal file
View file

@ -0,0 +1,249 @@
/*
* 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.
*
*/
#include "sj_hinshi.h"
static struct hlist {
int code;
char* str;
} hinshi[] = {
{MEISHI_1, "\314\276\273\354"},
{MEISHI_1, "\314\276\243\261"},
{MEISHI_2, "\314\276\243\262"},
{MEISHI_3, "\314\276\243\263"},
{MEISHI_4, "\314\276\243\264"},
{MEISHI_5, "\314\276\243\265"},
{MEISHI_6, "\314\276\243\266"},
{MEISHI_7, "\314\276\243\267"},
{MEISHI_8, "\314\276\243\270"},
{MEISHI_9, "\314\276\243\271"},
{MEISHI_10, "\314\276\243\261\243\260"},
{MEISHI_11, "\314\276\243\261\243\261"},
{MEISHI_20, "\314\276\243\262\243\260"},
{D_MEISHI_1, "\302\345\314\276\273\354"},
{D_MEISHI_1, "\302\345\243\261"},
{D_MEISHI_2, "\302\345\243\262"},
{D_MEISHI_3, "\302\345\243\263"},
{D_MEISHI_4, "\302\345\243\264"},
{D_MEISHI_5, "\302\345\243\265"},
{D_MEISHI_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"},
{RENTAISHI, "\317\242\302\316\273\354"},
{RENTAISHI, "\317\242\302\316"},
{SETSUZOKU, "\300\334\302\263\273\354"},
{SETSUZOKU, "\300\334\302\263"},
{KANDOUSHI, "\264\266\306\260"},
{JOSUUSHI, "\275\365\277\364\273\354"},
{JOSUUSHI, "\275\365\277\364"},
{SUUSHI, "\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"},
{SETSUBI_1, "\300\334\310\370\270\354"},
{SETSUBI_1, "\300\334\310\370\243\261"},
{SETSUBI_2, "\300\334\310\370\243\262"},
{SETSUBI_3, "\300\334\310\370\243\263"},
{SETSUBI_4, "\300\334\310\370\243\264"},
{SETSUBI_5, "\300\334\310\370\243\265"},
{SETSUBI_6, "\300\334\310\370\243\266"},
{SETSUBI_7, "\300\334\310\370\243\267"},
{SETSUBI_8, "\300\334\310\370\243\270"},
{SETSUBI_9, "\300\334\310\370\243\271"},
{FUKUSHI_1, "\311\373\273\354"},
{FUKUSHI_1, "\311\373\243\261"},
{FUKUSHI_2, "\311\373\243\262"},
{FUKUSHI_3, "\311\373\243\263"},
{FUKUSHI_4, "\311\373\243\264"},
{FUKUSHI_5, "\311\373\243\265"},
{FUKUSHI_6, "\311\373\243\266"},
{FUKUSHI_7, "\311\373\243\267"},
{FUKUSHI_8, "\311\373\243\270"},
{FUKUSHI_9, "\311\373\243\271"},
{JOSUUSHI2, "\275\365\277\364\243\262"},
{KEIYOUSHI_1, "\267\301\315\306\273\354"},
{KEIYOUSHI_1, "\267\301\243\261"},
{KEIYOUSHI_2, "\267\301\243\262"},
{KEIYOUSHI_3, "\267\301\243\263"},
{KEIYOUSHI_4, "\267\301\243\264"},
{KEIYOUSHI_5, "\267\301\243\265"},
{KEIYOUSHI_6, "\267\301\243\266"},
{KEIYOUSHI_7, "\267\301\243\267"},
{KEIYOUSHI_8, "\267\301\243\270"},
{KEIYOUSHI_9, "\267\301\243\271"},
{KEIYOUSHI_10, "\267\301\243\261\243\260"},
{KEIYOUSHI_11, "\267\301\243\261\243\261"},
{KE_DOUSHI_1, "\267\301\315\306\306\260\273\354"},
{KE_DOUSHI_1, "\267\301\306\260\243\261"},
{KE_DOUSHI_2, "\267\301\306\260\243\262"},
{KE_DOUSHI_3, "\267\301\306\260\243\263"},
{KE_DOUSHI_4, "\267\301\306\260\243\264"},
{KE_DOUSHI_5, "\267\301\306\260\243\265"},
{KE_DOUSHI_6, "\267\301\306\260\243\266"},
{KE_DOUSHI_7, "\267\301\306\260\243\267"},
{KE_DOUSHI_8, "\267\301\306\260\243\270"},
{KE_DOUSHI_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_SHU, "\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_SHU, "\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_FUKUSHI, "\306\303\274\354\311\373"},
{AISATSU, "\260\247\273\242"},
{SP_KEIYOUSHI, "\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(code)
int code;
{
struct hlist* p;
for(p = hinshi; p->code; p++) {
if(p->code == code)
return p->str;
}
return "ERROR";
}
int str2hns(str)
char* str;
{
struct hlist* p;
for(p = hinshi; p->code; p++) {
if(strcmp(p->str, str) == 0)
return p->code;
}
return 0;
}

259
hinsi.c
View file

@ -1,259 +0,0 @@
/*
* 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"
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(code)
int code;
{
struct hlist *p;
for (p = hinsi ; p -> code ; p++) {
if (p -> code == code)
return p -> str;
}
return "ERROR";
}
int str2hns(str)
char *str;
{
struct hlist *p;
for (p = hinsi ; p -> code ; p++) {
if (strcmp(p -> str, str) == 0)
return p -> code;
}
return 0;
}

View file

@ -27,15 +27,6 @@
* *
*/ */
/*
* $SonyRCSfile: hzstrlen.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:01:52 $
*
* $Id$
*/
#include "sj_euc.h" #include "sj_euc.h"
#include "sj_rename.h" #include "sj_rename.h"
#include "sj_typedef.h" #include "sj_typedef.h"
@ -43,26 +34,21 @@
#include "sj_dict.h" #include "sj_dict.h"
#include "kanakan.h" #include "kanakan.h"
int int euc_codesize(unsigned char c) {
euc_codesize (unsigned char c) if((c & KanjiModeMask) == 0x90) {
{
if ((c & KanjiModeMask) == 0x90) {
return 1; return 1;
} else if (isknj1(c)) { } else if(isknj1(c)) {
return 2; return 2;
} else if (c == SS3) { } else if(c == SS3) {
return 3; return 3;
} else { } else {
return 1; return 1;
} }
} }
int int hzstrlen(unsigned char* ptr, int len) {
hzstrlen (unsigned char *ptr, int len) unsigned char* head;
{
unsigned char *head;
head = ptr; head = ptr;
while (len-- > 0) ptr += euc_codesize(*ptr); while(len-- > 0) ptr += euc_codesize(*ptr);
return (ptr - head); return (ptr - head);
} }

46
init.c
View file

@ -27,44 +27,36 @@
* *
*/ */
/*
* $SonyRCSfile: init.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:01:54 $
*/
#include "sj_kcnv.h" #include "sj_kcnv.h"
void seg_count(dict) void seg_count(dict)
DICT *dict; DICT* dict;
{ {
unsigned char *p; unsigned char* p;
unsigned char *q; unsigned char* q;
TypeDicSeg segcnt = 0; TypeDicSeg segcnt = 0;
if (dict-> getidx) { if(dict->getidx) {
(*dict->getidx)(dict); (*dict->getidx)(dict);
p = idxbuf; p = idxbuf;
q = p + dict->idxlen; q = p + dict->idxlen;
while (p < q && *p) { while(p < q && *p) {
segcnt++; segcnt++;
while (*p++) ; while(*p++);
} }
} }
dict->segunit = (segcnt == 0) ? 1 : segcnt; dict->segunit = (segcnt == 0) ? 1 : segcnt;
} }
void mkidxtbl(dict) void mkidxtbl(dict)
DICT *dict; DICT* dict;
{ {
unsigned char *p; unsigned char* p;
TypeDicSeg seg; TypeDicSeg seg;
if (!dict->getidx || !dict->getofs) return; if(!dict->getidx || !dict->getofs) return;
seg = 0; seg = 0;
@ -72,15 +64,13 @@ DICT *dict;
(*dict->getofs)(dict); (*dict->getofs)(dict);
idxofs[0] = 0; idxofs[0] = 0;
for (p = idxbuf ; p < idxbuf + dict->idxlen && seg < dict->segunit ; ) { for(p = idxbuf; p < idxbuf + dict->idxlen && seg < dict->segunit;) {
idxofs[seg++] = p - idxbuf; idxofs[seg++] = p - idxbuf;
while (*p++) ; while(*p++);
} }
} }
void initwork() void initwork() {
{ jrt1st = jrt2nd = maxjptr = (JREC*)0;
jrt1st = jrt2nd = maxjptr = (JREC *)0; clt1st = clt2nd = maxclptr = (CLREC*)0;
clt1st = clt2nd = maxclptr = (CLREC *)0;
} }

18
inkey.h
View file

@ -27,18 +27,6 @@
* *
*/ */
/* #define KEYBUFSIZ 520
* $SonyRCSfile: inkey.h,v $ #define KEYBUFLIM 512
* $SonyRevision: 1.1 $ #define AVLEN 3
* $SonyDate: 1994/06/03 08:03:44 $
*/
#define KEYBUFSIZ 520
#define KEYBUFLIM 512
#define AVLEN 3

View file

@ -33,20 +33,18 @@
#include "const.h" #include "const.h"
#include "sj_typedef.h" #include "sj_typedef.h"
int int istrcmp(unsigned char* yomip, unsigned char* idxp, int ylen, int ilen) {
istrcmp(unsigned char *yomip, unsigned char *idxp, int ylen, int ilen) while(1) {
{ if((ilen | ylen) == 0)
while (1) {
if ((ilen | ylen) == 0)
return MATCH; return MATCH;
if (ilen == 0) if(ilen == 0)
return UNDER; return UNDER;
if ((ylen == 0) || (*yomip < *idxp)) if((ylen == 0) || (*yomip < *idxp))
return OVER; return OVER;
if (*yomip > *idxp) if(*yomip > *idxp)
return UNDER; return UNDER;
yomip++; yomip++;

103
kana.h
View file

@ -27,66 +27,55 @@
* *
*/ */
/* #define ZKATA1 0xa5
* $SonyRCSfile: kana.h,v $ #define ZHIRA1 0xa4
* $SonyRevision: 1.1 $ #define ZKATAF2 0xa1
* $SonyDate: 1994/06/03 08:03:45 $ #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 ZKATA1 0xa5 #define KANA_XA 0xa7
#define ZHIRA1 0xa4 #define KANA_XYA 0xac
#define ZKATAF2 0xa1 #define KANA_XTSU 0xaf
#define ZKATAE2 0xf6
#define ZHIRAF2 0xa1
#define ZHIRAE2 0xf3
#define ZKATAMU 0xe0
#define ZHIRAMU 0xe0
#define ZKATAn (ZKATAE2-ZKATAF2+1) #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 ZEN_SPACE 0xa1a1 #define KANA_DA (KANA_TA << 8) + KANA_DTEN
#define ZEN_KTEN 0xa1a3 #define KANA_BA (KANA_HA << 8) + KANA_DTEN
#define ZEN_FKAKKO 0xa1d6 #define KANA_PA (KANA_HA << 8) + KANA_HDTEN
#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

218
kanakan.h
View file

@ -32,154 +32,154 @@
*/ */
#ifndef _KANAKAN_H_ #ifndef _KANAKAN_H_
#define _KANAKAN_H_ 1 #define _KANAKAN_H_ 1
#include "sj_struct.h" #include "sj_struct.h"
#include "Struct.h" #include "Struct.h"
/* adddic.c */ /* adddic.c */
unsigned int adddic(unsigned char *yomi, unsigned char *kanji, TypeGram hinsi); unsigned int adddic(unsigned char* yomi, unsigned char* kanji, TypeGram hinshi);
/* addelcmn.c */ /* addelcmn.c */
void set_size(unsigned char *p, int size, int plen, int nlen); void set_size(unsigned char* p, int size, int plen, int nlen);
unsigned int addel_arg(unsigned char *yp, unsigned char *kp, TypeGram grm, unsigned char *nyp, int len); unsigned int addel_arg(unsigned char* yp, unsigned char* kp, TypeGram grm, unsigned char* nyp, int len);
int cvtknj(unsigned char *yomi, unsigned char *knj, unsigned char *dst); int cvtknj(unsigned char* yomi, unsigned char* knj, unsigned char* dst);
int srchkana(unsigned char **ptr, int *saml); int srchkana(unsigned char** ptr, int* saml);
int srchgram(unsigned char *ptr, unsigned char **dst, TypeGram hinsi); int srchgram(unsigned char* ptr, unsigned char** dst, TypeGram hinshi);
int srchkanji(unsigned char **dst, unsigned char *knj, int klen); int srchkanji(unsigned char** dst, unsigned char* knj, int klen);
TypeIdxOfs count_uidx(void); TypeIdxOfs count_uidx(void);
void chg_uidx(TypeDicSeg seg, unsigned char *yomi, int len); void chg_uidx(TypeDicSeg seg, unsigned char* yomi, int len);
/* alloc.c */ /* alloc.c */
JREC *alloc_jrec(void); JREC* alloc_jrec(void);
void free_jrec(JREC *p); void free_jrec(JREC* p);
CLREC *alloc_clrec(void); CLREC* alloc_clrec(void);
void free_clrec(CLREC *p); void free_clrec(CLREC* p);
/* charsize.c */ /* charsize.c */
int codesize(unsigned char code); int codesize(unsigned char code);
/* cl2knj.c */ /* cl2knj.c */
int cl2knj(unsigned char *yomi, int len, unsigned char *kouho); int cl2knj(unsigned char* yomi, int len, unsigned char* kouho);
int nextcl(unsigned char *kouho, int mode); int nextcl(unsigned char* kouho, int mode);
int prevcl(unsigned char *kouho, int mode); int prevcl(unsigned char* kouho, int mode);
int selectnum(void); int selectnum(void);
/* clstudy.c */ /* clstudy.c */
int clstudy(unsigned char *yomi1, unsigned char *yomi2, STDYOUT *stdy); int clstudy(unsigned char* yomi1, unsigned char* yomi2, STDYOUT* stdy);
void delclsub(unsigned char *target); void delclsub(unsigned char* target);
void mkclidx(void); void mkclidx(void);
/* cvtdict.c */ /* cvtdict.c */
void cvtdict(KHREC *krec, CLREC *clrec, int flg); void cvtdict(KHREC* krec, CLREC* clrec, int flg);
void cvtminasi(int len); void cvtminasi(int len);
void cvtwakachi(CLREC *clrec); void cvtwakachi(CLREC* clrec);
/* cvtkanji.c */ /* cvtkanji.c */
void cvtphknj(void); void cvtphknj(void);
void cvtkouho(KHREC *krec); void cvtkouho(KHREC* krec);
void setstyrec(KHREC *krec); void setstyrec(KHREC* krec);
/* deldic.c */ /* deldic.c */
unsigned int deldic(unsigned char *yomi, unsigned char *kanji, TypeGram hinsi); unsigned int deldic(unsigned char* yomi, unsigned char* kanji, TypeGram hinshi);
/* depend.c */ /* depend.c */
DictFile *opendict(char *name, char *passwd); DictFile* opendict(char* name, char* passwd);
int closedict(DictFile *dfp); int closedict(DictFile* dfp);
void lock_dict(DictFile *p, int fd); void lock_dict(DictFile* p, int fd);
void unlock_dict(DictFile *p, int fd); void unlock_dict(DictFile* p, int fd);
int is_dict_locked(DictFile *p); int is_dict_locked(DictFile* p);
StdyFile *openstdy(char *name, char *passwd); StdyFile* openstdy(char* name, char* passwd);
int closestdy(StdyFile *sfp); int closestdy(StdyFile* sfp);
int putstydic(void); int putstydic(void);
int putcldic(void); int putcldic(void);
int makedict(char *path, int idxlen, int seglen, int segnum); int makedict(char* path, int idxlen, int seglen, int segnum);
int makestdy(char *path, int stynum, int clstep, int cllen); int makestdy(char* path, int stynum, int clstep, int cllen);
void sj_closeall(void); void sj_closeall(void);
int set_dictpass(DictFile *dp, char *pass); int set_dictpass(DictFile* dp, char* pass);
int set_stdypass(char *pass); int set_stdypass(char* pass);
int set_dictcmnt(DictFile *dp, char *cmnt); int set_dictcmnt(DictFile* dp, char* cmnt);
int set_stdycmnt(char *cmnt); int set_stdycmnt(char* cmnt);
void get_stdysize(int *stynum, int *clstep, int *cllen); void get_stdysize(int* stynum, int* clstep, int* cllen);
/* dict.c */ /* dict.c */
void get_askknj(void); void get_askknj(void);
int seldict(TypeDicID id); int seldict(TypeDicID id);
unsigned char *get_idxptr(TypeDicSeg seg); unsigned char* get_idxptr(TypeDicSeg seg);
/* getkanji.c */ /* getkanji.c */
unsigned char *getkan_none(unsigned char *s, unsigned char *d, unsigned char *ym, int yl, int flg); unsigned char* getkan_none(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg);
unsigned char *getkan_hira(unsigned char *s, unsigned char *d, unsigned char *ym, int yl, int flg); unsigned char* getkan_hira(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg);
unsigned char *getkan_kata(unsigned char *s, unsigned char *d, unsigned char *ym, int yl, int flg); unsigned char* getkan_kata(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg);
unsigned char *getkan_knj(unsigned char *s, unsigned char *d, unsigned char *ym, int yl, int flg); unsigned char* getkan_knj(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg);
unsigned char *getkan_ofs(unsigned char *s, unsigned char *d, unsigned char *ym, int yl, int flg); unsigned char* getkan_ofs(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg);
unsigned char *getkan_norm(unsigned char *s, unsigned char *d, unsigned char *ym, int yl, int flg); unsigned char* getkan_norm(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg);
unsigned char *getkan_ascii(unsigned char *s, unsigned char *d, unsigned char *ym, int yl, int flg); unsigned char* getkan_ascii(unsigned char* s, unsigned char* d, unsigned char* ym, int yl, int flg);
int getkanji(unsigned char *ym, int yl, unsigned char *ptr, unsigned char *buf); int getkanji(unsigned char* ym, int yl, unsigned char* ptr, unsigned char* buf);
/* getrank.c */ /* getrank.c */
void getrank(void); void getrank(void);
/* hzstrlen.c */ /* hzstrlen.c */
int euc_codesize(unsigned char c); int euc_codesize(unsigned char c);
int hzstrlen(unsigned char *ptr, int len); int hzstrlen(unsigned char* ptr, int len);
/* mkbunset.c */ /* mkbunsetsu.c */
void mkbunsetu(void); void mkbunsetsu(void);
CLREC* argclrec(int len); CLREC* argclrec(int len);
/* mkjiritu.c */ /* mkjiritsu.c */
void mkjiritu(int mode); void mkjiritsu(int mode);
JREC *argjrec(int len, JREC *rec); JREC* argjrec(int len, JREC* rec);
/* mkkouho.c */ /* mkkouho.c */
unsigned char *makekan_none(unsigned char *s, unsigned char *d, int flg); unsigned char* makekan_none(unsigned char* s, unsigned char* d, int flg);
unsigned char *makekan_1byte(unsigned char *s, unsigned char *d, int flg); unsigned char* makekan_1byte(unsigned char* s, unsigned char* d, int flg);
unsigned char *makekan_knj(unsigned char *s, unsigned char *d, int flg); unsigned char* makekan_knj(unsigned char* s, unsigned char* d, int flg);
unsigned char *makekan_ofs(unsigned char *s, unsigned char *d, int flg); unsigned char* makekan_ofs(unsigned char* s, unsigned char* d, int flg);
unsigned char *makekan_norm(unsigned char *s, unsigned char *d, int flg); unsigned char* makekan_norm(unsigned char* s, unsigned char* d, int flg);
unsigned char *makekan_ascii(unsigned char *s, unsigned char *d, int flg); unsigned char* makekan_ascii(unsigned char* s, unsigned char* d, int flg);
void mkkouho(void); void mkkouho(void);
int sel_sjmode(JREC *jrec); int sel_sjmode(JREC* jrec);
/* mknumber.c */ /* mknumber.c */
void num_type00(unsigned char *s1, unsigned char *s2, JREC *jrec); void num_type00(unsigned char* s1, unsigned char* s2, JREC* jrec);
void num_type01(unsigned char *s1, unsigned char *s2, JREC *jrec); void num_type01(unsigned char* s1, unsigned char* s2, JREC* jrec);
void num_type02(unsigned char *s1, unsigned char *s2, JREC *jrec); void num_type02(unsigned char* s1, unsigned char* s2, JREC* jrec);
void num_type03(unsigned char *s1, unsigned char *s2, JREC *jrec); void num_type03(unsigned char* s1, unsigned char* s2, JREC* jrec);
void num_type04(unsigned char *s1, unsigned char *s2, JREC *jrec); void num_type04(unsigned char* s1, unsigned char* s2, JREC* jrec);
void num_type05(unsigned char *s1, unsigned char *s2, JREC *jrec); void num_type05(unsigned char* s1, unsigned char* s2, JREC* jrec);
void num_type06(unsigned char *s1, unsigned char *s2, JREC *jrec); void num_type06(unsigned char* s1, unsigned char* s2, JREC* jrec);
void num_type07(unsigned char *s1, unsigned char *s2, JREC *jrec); void num_type07(unsigned char* s1, unsigned char* s2, JREC* jrec);
void num_type08(unsigned char *s1, unsigned char *s2, JREC *jrec); void num_type08(unsigned char* s1, unsigned char* s2, JREC* jrec);
void num_type09(unsigned char *s1, unsigned char *s2, JREC *jrec); void num_type09(unsigned char* s1, unsigned char* s2, JREC* jrec);
void num_type10(unsigned char *s1, unsigned char *s2, JREC *jrec); void num_type10(unsigned char* s1, unsigned char* s2, JREC* jrec);
void num_type11(unsigned char *s1, unsigned char *s2, JREC *jrec); void num_type11(unsigned char* s1, unsigned char* s2, JREC* jrec);
void num_type12(unsigned char *s1, unsigned char *s2, JREC *jrec); void num_type12(unsigned char* s1, unsigned char* s2, JREC* jrec);
void num_type13(unsigned char *s1, unsigned char *s2, JREC *jrec); void num_type13(unsigned char* s1, unsigned char* s2, JREC* jrec);
void num_type14(unsigned char *s1, unsigned char *s2, JREC *jrec); void num_type14(unsigned char* s1, unsigned char* s2, JREC* jrec);
/* peepdic.c */ /* peepdic.c */
int getusr(unsigned char *buf); int getusr(unsigned char* buf);
int nextusr(unsigned char *buf); int nextusr(unsigned char* buf);
int prevusr(unsigned char *buf); int prevusr(unsigned char* buf);
/* ph2knj.c */ /* ph2knj.c */
int ph2knj(unsigned char *zyomi, unsigned char *kanji, int knjlen); int ph2knj(unsigned char* zyomi, unsigned char* kanji, int knjlen);
/* ph_khtbl.c */ /* ph_khtbl.c */
int ph_khtbl(CLREC *clrec); int ph_khtbl(CLREC* clrec);
/* setconj.c */ /* setconj.c */
int setconj(TypeGram hinsi, JREC *jrec, CREC *crec); int setconj(TypeGram hinshi, JREC* jrec, CREC* crec);
/* setjrec.c */ /* setjrec.c */
int setj_atrb(unsigned char* p); int setj_atrb(unsigned char* p);
int setj_ofs(unsigned char* p); int setj_ofs(unsigned char* p);
int setj_knj(unsigned char* p); int setj_knj(unsigned char* p);
int setj_norm1(unsigned char* p); int setj_norm1(unsigned char* p);
int setj_norm2(unsigned char* p); int setj_norm2(unsigned char* p);
int setj_norm3(unsigned char* p); int setj_norm3(unsigned char* p);
void setjrec(unsigned char* tagp, int mode); void setjrec(unsigned char* tagp, int mode);
void setnumrec(unsigned char* tagp, JREC* rec, TypeGram gram); void setnumrec(unsigned char* tagp, JREC* rec, TypeGram gram);
void setcrec(unsigned char* tagp); void setcrec(unsigned char* tagp);
@ -187,36 +187,36 @@ void setcrec(unsigned char* tagp);
/* setkouho.c */ /* setkouho.c */
void setkouho(CLREC* clrec, TypeDicOfs offs, int mode); void setkouho(CLREC* clrec, TypeDicOfs offs, int mode);
void ph_setkouho(CLREC* clrec, TypeDicOfs offs, STDYIN* sptr); void ph_setkouho(CLREC* clrec, TypeDicOfs offs, STDYIN* sptr);
int hiraknj_atrb(unsigned char*, int*); int hiraknj_atrb(unsigned char*, int*);
int hiraknj_ofs (unsigned char*, int*); int hiraknj_ofs(unsigned char*, int*);
int hiraknj_knj (unsigned char*, int*); int hiraknj_knj(unsigned char*, int*);
int hiraknj_hask(unsigned char*, int*); int hiraknj_hask(unsigned char*, int*);
int hiraknj_kask(unsigned char*, int*); int hiraknj_kask(unsigned char*, int*);
int hiraknj_norm(unsigned char*, int*); int hiraknj_norm(unsigned char*, int*);
int hiraknj_hira(unsigned char*, int*); int hiraknj_hira(unsigned char*, int*);
/* setubi.c */ /* setsubi.c */
unsigned char *getstb(TypeGram hinsi); unsigned char* getstb(TypeGram hinshi);
void setubi(JREC *rec, unsigned char *stbtbl); void setsubi(JREC* rec, unsigned char* stbtbl);
/* skipkstr.c */ /* skipkstr.c */
unsigned char* skipkstr(unsigned char* ptr); unsigned char* skipkstr(unsigned char* ptr);
/* srchdict.c */ /* srchdict.c */
int yomicmp(unsigned char *ptr1, unsigned char *ptr2, unsigned char *saml); int yomicmp(unsigned char* ptr1, unsigned char* ptr2, unsigned char* saml);
unsigned char *srchdict(unsigned char *tagp); unsigned char* srchdict(unsigned char* tagp);
/* srchidx.c */ /* srchidx.c */
TypeDicSeg srchidx(TypeDicSeg low, int len); TypeDicSeg srchidx(TypeDicSeg low, int len);
/* srchnum.c */ /* srchnum.c */
void srchnum(void); void srchnum(void);
void setwdnum(unsigned char *p, int len, unsigned short *wd); void setwdnum(unsigned char* p, int len, unsigned short* wd);
int setucnum(unsigned char *p, int len, unsigned char *ud); int setucnum(unsigned char* p, int len, unsigned char* ud);
/* study.c */ /* study.c */
int study(STDYOUT *stdy); int study(STDYOUT* stdy);
STDYIN *srchstdy(TypeDicSeg seg, TypeDicOfs ofs, TypeDicID dicid); STDYIN* srchstdy(TypeDicSeg seg, TypeDicOfs ofs, TypeDicID dicid);
/* wakachi.c */ /* wakachi.c */
void wakachi(void); void wakachi(void);

View file

@ -27,41 +27,33 @@
* *
*/ */
/*
* $SonyRCSfile: kctype.h,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:03:46 $
*/
#if !defined(__sony_news) || (defined(__sony_news) && !defined(SVR4)) #if !defined(__sony_news) || (defined(__sony_news) && !defined(SVR4))
#ifndef __KCTYPE #ifndef __KCTYPE
#define __KCTYPE #define __KCTYPE
#define sjis2euc sj3_sjis2euc #define sjis2euc sj3_sjis2euc
#define jis2sjis sj3_jis2sjis #define jis2sjis sj3_jis2sjis
#define euctosjis sj3_euctosjis #define euctosjis sj3_euctosjis
#define sjis2jis sj3_sjis2jis #define sjis2jis sj3_sjis2jis
#define euc2sjis sj3_euc2sjis #define euc2sjis sj3_euc2sjis
#define jis2euc sj3_jis2euc #define jis2euc sj3_jis2euc
#define sjistoeuc sj3_sjistoeuc #define sjistoeuc sj3_sjistoeuc
#ifdef issjis1 #ifdef issjis1
#undef issjis1 #undef issjis1
#endif #endif
#define issjis1(c) (((0x81 <= (c)) && ((c) <= 0x9f)) || \ #define issjis1(c) (((0x81 <= (c)) && ((c) <= 0x9f)) || \
((0xe0 <= (c)) && ((c) <= 0xfc))) ((0xe0 <= (c)) && ((c) <= 0xfc)))
#ifdef issjis2 #ifdef issjis2
#undef issjis2 #undef issjis2
#endif #endif
#define issjis2(c) (((0x40 <= (c)) && ((c) <= 0xfc)) && ((c) != 0x7f)) #define issjis2(c) (((0x40 <= (c)) && ((c) <= 0xfc)) && ((c) != 0x7f))
#ifdef iseuc #ifdef iseuc
#undef iseuc #undef iseuc
#endif #endif
#define iseuc(c) ((0xa1 <= (c)) && ((c) <= 0xfe)) #define iseuc(c) ((0xa1 <= (c)) && ((c) <= 0xfe))
#ifdef iseuckana #ifdef iseuckana
#undef iseuckana #undef iseuckana
@ -71,22 +63,22 @@
#ifdef iskana2 #ifdef iskana2
#undef iskana2 #undef iskana2
#endif #endif
#define iskana2(c) ((0xa1 <= (c)) && ((c) <= 0xdf)) #define iskana2(c) ((0xa1 <= (c)) && ((c) <= 0xdf))
#ifdef jiszen #ifdef jiszen
#undef jiszen #undef jiszen
#endif #endif
#define jiszen(c) (issjis1(((c) >> 8) & 0xff) && issjis2((c) & 0xff)) #define jiszen(c) (issjis1(((c) >> 8) & 0xff) && issjis2((c) & 0xff))
#ifdef isjjis #ifdef isjjis
#undef isjjis #undef isjjis
#endif #endif
#define isjjis(c) ((0x21 <= (c)) && ((c) <= 0x7e)) #define isjjis(c) ((0x21 <= (c)) && ((c) <= 0x7e))
#ifdef jstrlen #ifdef jstrlen
#undef jstrlen #undef jstrlen
#endif #endif
#define jstrlen(s) euclen(s, 65535) #define jstrlen(s) euclen(s, 65535)
#ifdef iseuc3byte #ifdef iseuc3byte
#undef iseuc3byte #undef iseuc3byte
@ -101,15 +93,14 @@
#ifdef iskanji #ifdef iskanji
#undef iskanji #undef iskanji
#endif #endif
#define iskanji issjis1 #define iskanji issjis1
#ifdef iskanji2 #ifdef iskanji2
#undef iskanji2 #undef iskanji2
#endif #endif
#define iskanji2 issjis2 #define iskanji2 issjis2
#ifdef iskana #ifdef iskana
#undef iskana #undef iskana
#endif #endif
#define iskana iskana2 #define iskana iskana2
#endif #endif
#endif #endif

107
key.h
View file

@ -27,72 +27,59 @@
* *
*/ */
/* #define KEY_NORMAL 0
* $SonyRCSfile: key.h,v $ #define KEY_CONV 1
* $SonyRevision: 1.1 $ #define KEY_HENKAN 2
* $SonyDate: 1994/06/03 08:03:47 $ #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_SHOUKYO 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_NORMAL 0 #define KEY_CANCEL 34
#define KEY_CONV 1 #define KEY_RECONV 35
#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_IGNORE 36
#define KEY_WRAPBACK 19 #define KEY_DEBUG 37
#define KEY_HELP 20
#define KEY_TOROKU 21
#define KEY_SYOUKYO 22
#define KEY_SJRC 23
#define KEY_HA_KET 24 #define KEY_TOP 38
#define KEY_FLUSH 25 #define KEY_END 39
#define KEY_BUFFER 26 #define KEY_RECONNECT 40
#define KEY_KILL 41
#define KEY_OTHER 42
#define KEY_HANKAKU 27 #define KEY_MORE 43
#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
#define UKEYNUM 64
#define SEQLEN 8
#define COMNUM 64

351
kigou.c
View file

@ -27,180 +27,168 @@
* *
*/ */
/*
* $SonyRCSfile: kigou.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:03:19 $
*/
#include "common.h" #include "common.h"
#include "kctype.h" #include "kctype.h"
#include "key.h" #include "key.h"
#define BEGIN_CODE 0x2121 #define BEGIN_CODE 0x2121
#define END_CODE 0x7f7e #define END_CODE 0x7f7e
#define INCRESE 16 #define INCRESE 16
static int lastcode = BEGIN_CODE; static int lastcode = BEGIN_CODE;
static unsigned short row, col; static unsigned short row, col;
void input_kigou(); void input_kigou();
kigou () kigou() {
{ extern int keyvalue;
extern int keyvalue; int increse, code, basecode;
int increse, code, basecode; int inc, ki, low;
int inc, ki, low; unsigned short num, CheckCcode(), strtocode();
unsigned short num, CheckCcode(), strtocode(); int rval;
int rval;
increse = INCRESE; increse = INCRESE;
disp_mode (); disp_mode();
basecode = lastcode & 0xfff0; basecode = lastcode & 0xfff0;
code = lastcode; code = lastcode;
StartGuide (&row, &col); StartGuide(&row, &col);
Clear_EOL (); Clear_EOL();
guide_kigou (basecode, code, increse); guide_kigou(basecode, code, increse);
rval = 0; rval = 0;
ki = 1; ki = 1;
SaveConversion (); SaveConversion();
while (ki) { while(ki) {
inc = inkey (); inc = inkey();
if (AnotherConversion ()) { if(AnotherConversion()) {
unget_key (inc); unget_key(inc);
break; break;
} }
top: top:
switch (keyvalue) { switch(keyvalue) {
case KEY_CONV: case KEY_CONV:
rval = 1; rval = 1;
ki = 0; ki = 0;
break; break;
case KEY_RIGHT: case KEY_RIGHT:
if (code >= END_CODE) { if(code >= END_CODE) {
code = BEGIN_CODE; code = BEGIN_CODE;
basecode = code & 0xfff0; basecode = code & 0xfff0;
} else { } else {
low = ++code & 0xff; low = ++code & 0xff;
if (low > 0x7e) { if(low > 0x7e) {
code &= 0xff00; code &= 0xff00;
code += 0x121; code += 0x121;
low = 0x21; low = 0x21;
} }
if (code >= basecode + increse) { if(code >= basecode + increse) {
if (low <= 0x21) if(low <= 0x21)
basecode = code & 0xfff0; basecode = code & 0xfff0;
else else
basecode += increse; basecode += increse;
} }
} }
guide_kigou (basecode, code, increse); guide_kigou(basecode, code, increse);
break; break;
case KEY_LEFT: case KEY_LEFT:
if (code <= BEGIN_CODE) { if(code <= BEGIN_CODE) {
code = END_CODE; code = END_CODE;
basecode = code & 0xfff0; basecode = code & 0xfff0;
} else { } else {
low = --code & 0xff; low = --code & 0xff;
if (low < 0x21) { if(low < 0x21) {
code &= 0xff00; code &= 0xff00;
code -= 0x82; code -= 0x82;
low = 0x7e; low = 0x7e;
} }
if (code < basecode) { if(code < basecode) {
if (low >= 0x7e) if(low >= 0x7e)
basecode = code & 0xfff0; basecode = code & 0xfff0;
else else
basecode -= increse; basecode -= increse;
} }
} }
guide_kigou (basecode, code, increse); guide_kigou(basecode, code, increse);
break; break;
case KEY_UP: case KEY_UP:
if (basecode <= BEGIN_CODE) { if(basecode <= BEGIN_CODE) {
code = basecode = END_CODE & 0xfff0; code = basecode = END_CODE & 0xfff0;
} else { } else {
basecode -= increse; basecode -= increse;
low = basecode & 0xff; low = basecode & 0xff;
if (low == 0x20) { if(low == 0x20) {
code = (basecode & 0xff00) + 0x21; code = (basecode & 0xff00) + 0x21;
} else { } else {
if (low < 0x20) { if(low < 0x20) {
basecode &= 0xff00; basecode &= 0xff00;
basecode -= 0x90; basecode -= 0x90;
} }
code = basecode; code = basecode;
} }
} }
guide_kigou (basecode, code, increse); guide_kigou(basecode, code, increse);
break; break;
case KEY_DOWN: case KEY_DOWN:
if (basecode >= (END_CODE & 0xfff0)) { if(basecode >= (END_CODE & 0xfff0)) {
code = BEGIN_CODE; code = BEGIN_CODE;
basecode = code & 0xfff0; basecode = code & 0xfff0;
} else { } else {
basecode += increse; basecode += increse;
low = basecode & 0xff; low = basecode & 0xff;
if (low > 0x70) { if(low > 0x70) {
basecode &= 0xff00; basecode &= 0xff00;
basecode += 0x120; basecode += 0x120;
code = basecode + 1; code = basecode + 1;
} else } else
code = basecode; code = basecode;
} }
guide_kigou (basecode, code, increse); guide_kigou(basecode, code, increse);
break; break;
case KEY_HENKAN: case KEY_HENKAN:
input_kigou (basecode, code, increse); input_kigou(basecode, code, increse);
break; break;
case KEY_KETTEI: case KEY_KETTEI:
input_kigou (basecode, code, increse); input_kigou(basecode, code, increse);
ki = 0; ki = 0;
break; break;
default: default:
if ((keyvalue = IsCKey (inc)) != KEY_NORMAL) if((keyvalue = IsCKey(inc)) != KEY_NORMAL)
goto top; goto top;
if (CheckCcode(inc)) { if(CheckCcode(inc)) {
if ((num = strtocode()) > 0) { if((num = strtocode()) > 0) {
code = num; code = num;
basecode = code & 0xfff0; basecode = code & 0xfff0;
guide_kigou(basecode, code, increse); guide_kigou(basecode, code, increse);
} }
} } else if(inc == ESC)
else if (inc == ESC)
ki = 0; ki = 0;
else if (inc == '\n' || inc == '\r' || inc == ' ') else if(inc == '\n' || inc == '\r' || inc == ' ')
input_kigou (basecode, code, increse); input_kigou(basecode, code, increse);
else if (IsRedraw (inc)) else if(IsRedraw(inc))
guide_kigou (basecode, code, increse); guide_kigou(basecode, code, increse);
else else
beep (); beep();
break; break;
} }
} }
EndGuide (row, col); EndGuide(row, col);
disp_mode (); disp_mode();
return (rval); return (rval);
} }
IsRedraw (c) IsRedraw(c) int c;
int c;
{ {
if (c == 0x0c) if(c == 0x0c)
return (1); return (1);
else else
return (0); return (0);
} }
IsCKey (inc) IsCKey(inc) int inc;
int inc;
{ {
switch (inc) { switch(inc) {
case 'l': case 'l':
return (KEY_RIGHT); return (KEY_RIGHT);
case 'k': case 'k':
@ -214,97 +202,94 @@ int inc;
} }
} }
guide_kigou (bcode, code, increse) guide_kigou(bcode, code, increse) int bcode, code, increse;
int bcode, code, increse;
{ {
int i; int i;
extern wchar16_t Mguide[]; extern wchar16_t Mguide[];
wchar16_t wtmp[20]; wchar16_t wtmp[20];
char tmp[20]; char tmp[20];
unsigned short prcode; unsigned short prcode;
TopGuide (); TopGuide();
printR (Mguide); printR(Mguide);
put_space (1); put_space(1);
put_space (1); put_space(1);
for (i = 0 ; i < increse ; i ++) for(i = 0; i < increse; i++)
pkigou (bcode + i); pkigou(bcode + i);
prcode = code; prcode = code;
if (((i = GetCcode()) == CODE_KUTEN) || (i == CODE_KUTEN2)) { if(((i = GetCcode()) == CODE_KUTEN) || (i == CODE_KUTEN2)) {
prcode -= 0x2020; prcode -= 0x2020;
sprintf (tmp, " [%02d%02d]", prcode >> 8, prcode & 0xff); sprintf(tmp, " [%02d%02d]", prcode >> 8, prcode & 0xff);
} else { } else {
if (i == CODE_SJIS) if(i == CODE_SJIS)
prcode = jis2sjis(prcode); prcode = jis2sjis(prcode);
else if ((i == CODE_EUC) || (i == CODE_EUC2)) else if((i == CODE_EUC) || (i == CODE_EUC2))
prcode |= 0x8080; prcode |= 0x8080;
sprintf (tmp, " [%04x]", prcode); sprintf(tmp, " [%04x]", prcode);
} }
(void) mbstowcs(wtmp, tmp, 20); (void)mbstowcs(wtmp, tmp, 20);
SJ_print (wtmp); SJ_print(wtmp);
backspace (8 + (bcode + increse - code) * 2); backspace(8 + (bcode + increse - code) * 2);
Flush (); Flush();
} }
pkigou(code) int code;
pkigou (code)
int code;
{ {
wchar16_t tmp[3]; wchar16_t tmp[3];
unsigned short ccode; unsigned short ccode;
if (jis2euc(code) == 0) { if(jis2euc(code) == 0) {
ccode = BEGIN_CODE; ccode = BEGIN_CODE;
} else { } else {
ccode = code; ccode = code;
} }
if ((GetCcode() == CODE_EUC2) || (GetCcode() == CODE_JIS2) || if((GetCcode() == CODE_EUC2) || (GetCcode() == CODE_JIS2) ||
(GetCcode() == CODE_KUTEN2)) { (GetCcode() == CODE_KUTEN2)) {
ccode = WcJIS2X0212(ccode); ccode = WcJIS2X0212(ccode);
} else { } else {
ccode = WcJIS2X0208(ccode); ccode = WcJIS2X0208(ccode);
} }
tmp[0] = ccode; tmp[0] = ccode;
tmp[1] = '\0'; tmp[1] = '\0';
SJ_print (tmp); SJ_print(tmp);
} }
void void
input_kigou (basecode, code, increse) input_kigou(basecode, code, increse) int basecode,
int basecode, code, increse; code, increse;
{ {
wchar16_t s[2]; wchar16_t s[2];
unsigned short ccode, svlen; unsigned short ccode, svlen;
Conversion *cv; Conversion* cv;
if (jis2euc(code) == 0) { if(jis2euc(code) == 0) {
beep(); beep();
return; return;
} }
if ((GetCcode() == CODE_EUC2) || (GetCcode() == CODE_JIS2) || if((GetCcode() == CODE_EUC2) || (GetCcode() == CODE_JIS2) ||
(GetCcode() == CODE_KUTEN2)) { (GetCcode() == CODE_KUTEN2)) {
ccode = WcJIS2X0212(code); ccode = WcJIS2X0212(code);
} else {
ccode = WcJIS2X0208(code);
}
EndGuide (row, col);
s[0] = ccode;
s[1] = '\0';
if (BuffYes ()) {
cv = GetConversion();
save_obuf();
(void)exec_romaji(s[0]);
if (os_point > 0) {
svlen = cv->Vlen;
vprintU(osave_buf, 1);
Cgoto(svlen);
}
restore_obuf();
} else { } else {
master_out (s, 2); ccode = WcJIS2X0208(code);
}
EndGuide(row, col);
s[0] = ccode;
s[1] = '\0';
if(BuffYes()) {
cv = GetConversion();
save_obuf();
(void)exec_romaji(s[0]);
if(os_point > 0) {
svlen = cv->Vlen;
vprintU(osave_buf, 1);
Cgoto(svlen);
}
restore_obuf();
} else {
master_out(s, 2);
master_flush(); master_flush();
} }
StartGuide (&row, &col); StartGuide(&row, &col);
guide_kigou (basecode, code, increse); guide_kigou(basecode, code, increse);
lastcode = code; lastcode = code;
} }

226
knjcvt.c
View file

@ -27,17 +27,6 @@
* *
*/ */
/*
* $SonyRCSfile: knjcvt.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:00:37 $
*
* $Id$
*/
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <sys/types.h> #include <sys/types.h>
@ -46,229 +35,190 @@
#include "dicttool.h" #include "dicttool.h"
typedef struct div_list { typedef struct div_list {
int len; int len;
unsigned char code[3]; unsigned char code[3];
struct div_list *child; struct div_list* child;
} DivList; } DivList;
extern HindoRec *askknj[]; extern HindoRec* askknj[];
extern int askknj_num; extern int askknj_num;
static void static void
free_divlist(DivList* p) free_divlist(DivList* p) {
{ DivList* q;
DivList *q;
while (p) { while(p) {
q = p -> child; q = p->child;
Free(p); Free(p);
p = q; p = q;
} }
} }
static DivList* static DivList*
make_divrec(void) make_divrec(void) {
{ DivList* p;
DivList *p;
p = (DivList *)Malloc(sizeof(DivList)); p = (DivList*)Malloc(sizeof(DivList));
if (!p) { if(!p) {
fprintf(stderr, "\245\341\245\342\245\352\244\254\302\255\244\352\244\336\244\273\244\363\n"); fprintf(stderr, "\245\341\245\342\245\352\244\254\302\255\244\352\244\336\244\273\244\363\n");
exit(1); exit(1);
} }
p -> child = NULL; p->child = NULL;
return p; return p;
} }
static int static int
make_divlist(DivList* parent, unsigned char *knj, int len) make_divlist(DivList* parent, unsigned char* knj, int len) {
{ int i, j;
int i, j; int num;
int num; int minlen;
int minlen; int tmplen;
int tmplen; DivList tmprec;
DivList tmprec; DivList* minrec;
DivList *minrec;
minrec = make_divrec(); minrec = make_divrec();
if(len == 0) {
if (len == 0) {
free_divlist(minrec); free_divlist(minrec);
parent -> child = NULL; parent->child = NULL;
return 0; return 0;
} }
else if (len == 1) { else if(len == 1) {
minrec -> len = len; minrec->len = len;
minrec -> code[0] = *knj; minrec->code[0] = *knj;
parent -> child = minrec; parent->child = minrec;
return len; return len;
} }
if(codesize(*knj) == 1) {
if (codesize(*knj) == 1) { minrec->len = 1;
minrec -> len = 1; minrec->code[0] = *knj;
minrec -> code[0] = *knj; minlen = make_divlist(minrec, knj + 1, len - 1) + 1;
minlen = make_divlist(minrec, knj + 1, len - 1) + 1;
} }
else if (codesize(*knj) == 2) { else if(codesize(*knj) == 2) {
minrec -> len = 2; minrec->len = 2;
minrec -> code[0] = *knj; minrec->code[0] = *knj;
minrec -> code[1] = *(knj + 1); minrec->code[1] = *(knj + 1);
minlen = make_divlist(minrec, knj + 2, len - 2) + 2; minlen = make_divlist(minrec, knj + 2, len - 2) + 2;
} }
for(i = 0; i < len; i = j) {
for (i = 0 ; i < len ; i = j) {
j = i + codesize(*(knj + i)); j = i + codesize(*(knj + i));
if(j <= 2 || !(num = isknjexist(knj, j))) continue;
if (j <= 2 || !(num = isknjexist(knj, j))) continue;
tmprec.len = 2; tmprec.len = 2;
tmprec.code[0] = (OffsetAssyuku | ((num >> 8) & 0xff)); tmprec.code[0] = (OffsetAsshuku | ((num >> 8) & 0xff));
tmprec.code[1] = (num & 0xff); tmprec.code[1] = (num & 0xff);
tmprec.child = NULL; tmprec.child = NULL;
tmplen = make_divlist(&tmprec, knj + j, len - j) + 2; tmplen = make_divlist(&tmprec, knj + j, len - j) + 2;
if(tmplen < minlen) {
if (tmplen < minlen) { free_divlist(minrec->child);
free_divlist(minrec -> child);
*minrec = tmprec; *minrec = tmprec;
minlen = tmplen; minlen = tmplen;
} } else
else
free_divlist(tmprec.child); free_divlist(tmprec.child);
} }
for(i = 0; i < askknj_num; i++) {
for (i = 0 ; i < askknj_num ; i++) { if((j = askknj[i]->klen) > len) continue;
if ((j = askknj[i] -> klen) > len) continue;
if (string_cmp(askknj[i]->kptr, j, knj, j)) continue;
if(string_cmp(askknj[i]->kptr, j, knj, j)) continue;
tmprec.len = 1; tmprec.len = 1;
tmprec.code[0] = (KanjiAssyuku | i); tmprec.code[0] = (KanjiAsshuku | i);
tmprec.child = NULL; tmprec.child = NULL;
tmplen = make_divlist(&tmprec, knj + j, len - j) + 1; tmplen = make_divlist(&tmprec, knj + j, len - j) + 1;
if(tmplen < minlen) {
if (tmplen < minlen) { free_divlist(minrec->child);
free_divlist(minrec -> child);
*minrec = tmprec; *minrec = tmprec;
minlen = tmplen; minlen = tmplen;
} } else
else
free_divlist(tmprec.child); free_divlist(tmprec.child);
} }
parent->child = minrec;
parent -> child = minrec;
return minlen; return minlen;
} }
unsigned char* unsigned char*
knjofscvt(unsigned char* ptr, int len, int* ret) knjofscvt(unsigned char* ptr, int len, int* ret) {
{ int i;
int i; unsigned char *p, *q;
unsigned char *p, *q; DivList parent, *dl;
DivList parent, *dl;
askknj_num = 0; askknj_num = 0;
parent.child = NULL; parent.child = NULL;
i = make_divlist(&parent, ptr, len); i = make_divlist(&parent, ptr, len);
*ret = i; *ret = i;
p = (unsigned char*)Malloc(i);
p = (unsigned char *)Malloc(i); if(!p) {
if (!p) {
fprintf(stderr, "\245\341\245\342\245\352\244\254\311\324\302\255\244\267\244\336\244\267\244\277"); fprintf(stderr, "\245\341\245\342\245\352\244\254\311\324\302\255\244\267\244\336\244\267\244\277");
exit(1); exit(1);
} }
for (q = p, dl = parent.child ; dl ; dl = dl -> child) { for(q = p, dl = parent.child; dl; dl = dl->child) {
*q++ = dl -> code[0]; *q++ = dl->code[0];
if (dl -> len == 2) { if(dl->len == 2) {
*q++ = dl -> code[1]; *q++ = dl->code[1];
} else if (dl -> len == 3) { } else if(dl->len == 3) {
*q++ = dl -> code[1]; *q++ = dl->code[1];
*q++ = dl -> code[2]; *q++ = dl->code[2];
} }
} }
free_divlist(parent.child); free_divlist(parent.child);
return p; return p;
} }
unsigned char* unsigned char*
knjcvt(unsigned char* ptr, int len, int* ret) knjcvt(unsigned char* ptr, int len, int* ret) {
{ int i;
int i; unsigned char *p, *q;
unsigned char *p, *q; DivList parent, *dl;
DivList parent, *dl;
parent.child = NULL; parent.child = NULL;
i = make_divlist(&parent, ptr, len); i = make_divlist(&parent, ptr, len);
*ret = i; *ret = i;
p = (unsigned char*)Malloc(i);
p = (unsigned char *)Malloc(i); if(!p) {
if (!p) {
fprintf(stderr, "\245\341\245\342\245\352\244\254\311\324\302\255\244\267\244\336\244\267\244\277"); fprintf(stderr, "\245\341\245\342\245\352\244\254\311\324\302\255\244\267\244\336\244\267\244\277");
exit(1); exit(1);
} }
for (q = p, dl = parent.child ; dl ; dl = dl -> child) { for(q = p, dl = parent.child; dl; dl = dl->child) {
*q++ = dl -> code[0]; *q++ = dl->code[0];
if (dl -> len == 2) { if(dl->len == 2) {
*q++ = dl -> code[1]; *q++ = dl->code[1];
} else if (dl -> len == 3) { } else if(dl->len == 3) {
*q++ = dl -> code[1]; *q++ = dl->code[1];
*q++ = dl -> code[2]; *q++ = dl->code[2];
} }
} }
free_divlist(parent.child); free_divlist(parent.child);
if (i != q - p) { if(i != q - p) {
printf("\244\263\244\263\n"); printf("\244\263\244\263\n");
exit(1); exit(1);
} }
return p; return p;
} }

974
level1.c

File diff suppressed because it is too large Load diff

364
libif.c
View file

@ -27,13 +27,6 @@
* *
*/ */
/*
* $SonyRCSfile: libif.c,v $
* $SonyRevision: 1.3 $
* $SonyDate: 1996/02/23 11:04:02 $
*/
#include "sj_sysvdef.h" #include "sj_sysvdef.h"
#ifdef SVR4 #ifdef SVR4
#include <sys/euc.h> #include <sys/euc.h>
@ -43,74 +36,66 @@
#include "kctype.h" #include "kctype.h"
#include "common.h" #include "common.h"
extern char user_name[];
extern char * cur_serv, **serv_list;
extern char** dict_list;
extern int dict_num;
char* chmyhname();
extern char user_name[]; extern int current_locale;
extern char *cur_serv, **serv_list; int sjislen(), euclen();
extern char **dict_list;
extern int dict_num;
char *chmyhname();
extern int current_locale;
int sjislen(), euclen();
int (*len_func[3])() = {0, sjislen, euclen}; int (*len_func[3])() = {0, sjislen, euclen};
#define YOMILEN 32 #define YOMILEN 32
#define KLEN 64 #define KLEN 64
SJ2_henkan(yomiout, bun, kanjiout, kanjilen) struct bunsetsu_sj3* bun;
wchar16_t *yomiout, *kanjiout;
int kanjilen;
SJ2_henkan (yomiout, bun, kanjiout, kanjilen)
struct bunsetu_sj3 *bun;
wchar16_t *yomiout, *kanjiout;
int kanjilen;
{ {
int retv; int retv;
SJ3_BUNSETU sbun[BUFFLENGTH]; SJ3_BUNSETSU sbun[BUFFLENGTH];
int i, sentou, saigo; int i, sentou, saigo;
unsigned char yomi[BUFFLENGTH * 3]; unsigned char yomi[BUFFLENGTH * 3];
unsigned char kanji[BUFFLENGTH * 6]; unsigned char kanji[BUFFLENGTH * 6];
(void) wcstombs((char *) yomi, yomiout, BUFFLENGTH*3); (void)wcstombs((char*)yomi, yomiout, BUFFLENGTH * 3);
if (current_locale == LC_CTYPE_SHIFTJIS) { if(current_locale == LC_CTYPE_SHIFTJIS) {
retv = sj3_getkan(yomi, sbun, kanji, BUFFLENGTH * 6); retv = sj3_getkan(yomi, sbun, kanji, BUFFLENGTH * 6);
} else { } else {
retv = sj3_getkan_euc(yomi, sbun, kanji, BUFFLENGTH * 6); retv = sj3_getkan_euc(yomi, sbun, kanji, BUFFLENGTH * 6);
} }
if (retv <= 0) return(retv); if(retv <= 0) return (retv);
(void) mbstowcs(kanjiout, (char *)kanji, kanjilen); (void)mbstowcs(kanjiout, (char*)kanji, kanjilen);
for(i = 0; i < retv; i++) { for(i = 0; i < retv; i++) {
sentou = (*len_func[current_locale])(yomi, sbun[i].srcstr - yomi); sentou = (*len_func[current_locale])(yomi, sbun[i].srcstr - yomi);
saigo = (*len_func[current_locale])(sbun[i].srcstr, sbun[i].srclen); saigo = (*len_func[current_locale])(sbun[i].srcstr, sbun[i].srclen);
bun[i].srclen = saigo; bun[i].srclen = saigo;
bun[i].srcstr = yomiout + sentou; bun[i].srcstr = yomiout + sentou;
sentou = (*len_func[current_locale])(kanji, sbun[i].deststr - kanji); sentou = (*len_func[current_locale])(kanji, sbun[i].deststr - kanji);
saigo = (*len_func[current_locale])(sbun[i].deststr, sbun[i].destlen); saigo = (*len_func[current_locale])(sbun[i].deststr, sbun[i].destlen);
bun[i].destlen = saigo; bun[i].destlen = saigo;
bun[i].deststr = kanjiout + sentou; bun[i].deststr = kanjiout + sentou;
(void) memcpy(&(bun[i].dcid), &(sbun[i].dcid), sizeof(sbun[i].dcid)); (void)memcpy(&(bun[i].dcid), &(sbun[i].dcid), sizeof(sbun[i].dcid));
} }
return(retv); return (retv);
} }
int int sjislen(str, max)
sjislen(str, max) unsigned char* str;
unsigned char *str; int max;
int max;
{ {
int len = 0, bytes = 1; int len = 0, bytes = 1;
if (!max) return 0; if(!max) return 0;
while ((bytes <= max) && *str) { while((bytes <= max) && *str) {
if (issjis1(*str)) { if(issjis1(*str)) {
str++; str++;
bytes++; bytes++;
if (!*str) break; if(!*str) break;
len++; len++;
} else { } else {
len++; len++;
@ -121,26 +106,25 @@ int max;
return len; return len;
} }
euclen(str, max) euclen(str, max) unsigned char* str;
unsigned char *str;
int max; int max;
{ {
int len = 0, bytes = 1; int len = 0, bytes = 1;
if (!max) return 0; if(!max) return 0;
while ((bytes <= max) && *str) { while((bytes <= max) && *str) {
if (*str == SS3) { if(*str == SS3) {
str++; str++;
bytes++; bytes++;
if (!*str) break; if(!*str) break;
str++; str++;
bytes++; bytes++;
if (!*str) break; if(!*str) break;
len++; len++;
} else if ((*str == SS2) || (*str & 0x80)) { } else if((*str == SS2) || (*str & 0x80)) {
str++; str++;
bytes++; bytes++;
if (!*str) break; if(!*str) break;
len++; len++;
} else { } else {
len++; len++;
@ -151,215 +135,209 @@ int max;
return len; return len;
} }
SJ2_getdouon(s, d, n, choice, reconv)
wchar16_t* s;
SJ2_getdouon (s, d, n, choice, reconv) struct douon_sj3* d;
wchar16_t *s; int n;
struct douon_sj3 *d; int choice;
int n; int reconv;
int choice;
int reconv;
{ {
int i, ret; int i, ret;
SJ3_DOUON d_sjis[DOUON_N]; SJ3_DOUON d_sjis[DOUON_N];
unsigned char yomi[BUFFLENGTH * 3]; unsigned char yomi[BUFFLENGTH * 3];
(void) wcstombs((char *) yomi, s, BUFFLENGTH*3); (void)wcstombs((char*)yomi, s, BUFFLENGTH * 3);
if (current_locale == LC_CTYPE_SHIFTJIS) { if(current_locale == LC_CTYPE_SHIFTJIS) {
ret = sj3_getdouon(yomi, d_sjis); ret = sj3_getdouon(yomi, d_sjis);
} else { } else {
ret = sj3_getdouon_euc(yomi, d_sjis); ret = sj3_getdouon_euc(yomi, d_sjis);
} }
for (i = 0; i < ret; i++) { for(i = 0; i < ret; i++) {
(void) memcpy(&(d[i].dcid), (void)memcpy(&(d[i].dcid),
&(d_sjis[i].dcid), SJ3_WORD_ID_SIZE); &(d_sjis[i].dcid), SJ3_WORD_ID_SIZE);
d[i].wlen = (int) mbstowcs(d[i].ddata, (char *)d_sjis[i].ddata, d[i].wlen = (int)mbstowcs(d[i].ddata, (char*)d_sjis[i].ddata,
SJ3_BUNSETU_KANJI*2); SJ3_BUNSETSU_KANJI * 2);
d[i].dlen = wcbyte(d[i].ddata); d[i].dlen = wcbyte(d[i].ddata);
d[i].valid = (char)1; d[i].valid = (char)1;
} }
if (ret < DOUON_N) { if(ret < DOUON_N) {
(void) memset(&(d[ret].dcid), 0, SJ3_WORD_ID_SIZE); (void)memset(&(d[ret].dcid), 0, SJ3_WORD_ID_SIZE);
d[ret].wlen = wslen(s); d[ret].wlen = wslen(s);
for (i = 0; i < d[ret].wlen; i++) { for(i = 0; i < d[ret].wlen; i++) {
d[ret].ddata[i] = sj_tokata(s[i]); d[ret].ddata[i] = sj_tokata(s[i]);
} }
d[ret].ddata[i] = (wchar_t) 0; d[ret].ddata[i] = (wchar_t)0;
d[ret].dlen = wcbyte(s); d[ret].dlen = wcbyte(s);
d[ret].valid = (char)0; d[ret].valid = (char)0;
} }
return(ret + 1); return (ret + 1);
} }
SJ2_study (dcid) SJ2_study(dcid) struct studyrec* dcid;
struct studyrec *dcid;
{ {
sj3_gakusyuu(dcid); sj3_gakushuu(dcid);
} }
SJ2_clstudy (yomi1, yomi2, dcid) SJ2_clstudy(yomi1, yomi2, dcid)
wchar16_t *yomi1, *yomi2; wchar16_t* yomi1,
struct studyrec *dcid; *yomi2;
struct studyrec* dcid;
{ {
unsigned char y1[BUFFLENGTH*2]; unsigned char y1[BUFFLENGTH * 2];
unsigned char y2[BUFFLENGTH*2]; unsigned char y2[BUFFLENGTH * 2];
(void) wcstombs((char *) y1, yomi1, BUFFLENGTH*2); (void)wcstombs((char*)y1, yomi1, BUFFLENGTH * 2);
(void) wcstombs((char *) y2, yomi2, BUFFLENGTH*2); (void)wcstombs((char*)y2, yomi2, BUFFLENGTH * 2);
if (current_locale == LC_CTYPE_SHIFTJIS) { if(current_locale == LC_CTYPE_SHIFTJIS) {
sj3_gakusyuu2(y1, y2, dcid); sj3_gakushuu2(y1, y2, dcid);
} else { } else {
sj3_gakusyuu2_euc(y1, y2, dcid); sj3_gakushuu2_euc(y1, y2, dcid);
} }
} }
SJ2_toroku (yomi, kanji, hinshi) SJ2_toroku(yomi, kanji, hinshi)
wchar16_t *yomi, *kanji; wchar16_t* yomi,
int hinshi; *kanji;
int hinshi;
{ {
unsigned char y[(YOMILEN+1)*3]; unsigned char y[(YOMILEN + 1) * 3];
unsigned char k[(KLEN+1)*3]; unsigned char k[(KLEN + 1) * 3];
int ret; int ret;
(void)wcstombs((char *) y, yomi, (YOMILEN+1)*3); (void)wcstombs((char*)y, yomi, (YOMILEN + 1) * 3);
(void)wcstombs((char *) k, kanji, (KLEN+1)*3); (void)wcstombs((char*)k, kanji, (KLEN + 1) * 3);
if (current_locale == LC_CTYPE_SHIFTJIS) { if(current_locale == LC_CTYPE_SHIFTJIS) {
ret = sj3_touroku (y, k, hinshi); ret = sj3_touroku(y, k, hinshi);
} else { } else {
ret = sj3_touroku_euc (y, k, hinshi); ret = sj3_touroku_euc(y, k, hinshi);
} }
return(ret); return (ret);
} }
SJ2_syoukyo (yomi, kanji, hinshi) SJ2_shoukyo(yomi, kanji, hinshi)
wchar16_t *yomi, *kanji; wchar16_t* yomi,
int hinshi; *kanji;
int hinshi;
{ {
unsigned char y[(YOMILEN+1)*3]; unsigned char y[(YOMILEN + 1) * 3];
unsigned char k[(KLEN+1)*3]; unsigned char k[(KLEN + 1) * 3];
int ret; int ret;
(void)wcstombs((char *) y, yomi, (YOMILEN+1)*3); (void)wcstombs((char*)y, yomi, (YOMILEN + 1) * 3);
(void)wcstombs((char *) k, kanji, (KLEN+1)*3); (void)wcstombs((char*)k, kanji, (KLEN + 1) * 3);
if (current_locale == LC_CTYPE_SHIFTJIS) { if(current_locale == LC_CTYPE_SHIFTJIS) {
ret = sj3_syoukyo (y, k, hinshi); ret = sj3_shoukyo(y, k, hinshi);
} else { } else {
ret = sj3_syoukyo_euc (y, k, hinshi); ret = sj3_shoukyo_euc(y, k, hinshi);
} }
return(ret); return (ret);
} }
sj_check_error (err) sj_check_error(err) int err;
int err;
{ {
if (err & SJ3_SERVER_DEAD) if(err & SJ3_SERVER_DEAD)
SJ_warnning(WCServer_Dead); SJ_warnning(WCServer_Dead);
if (err & SJ3_ALREADY_CONNECTED) if(err & SJ3_ALREADY_CONNECTED)
SJ_warnning(WCConnected); SJ_warnning(WCConnected);
if (err & SJ3_CONNECT_ERROR) if(err & SJ3_CONNECT_ERROR)
SJ_warnning(WCNconnect); SJ_warnning(WCNconnect);
if (err & SJ3_CANNOT_OPEN_MDICT) if(err & SJ3_CANNOT_OPEN_MDICT)
SJ_warnning(WCNopen_Mdic); SJ_warnning(WCNopen_Mdic);
if (err & SJ3_CANNOT_MAKE_UDIR) if(err & SJ3_CANNOT_MAKE_UDIR)
SJ_warnning(WCNmake_Udir); SJ_warnning(WCNmake_Udir);
if (err & SJ3_CANNOT_MAKE_UDICT) if(err & SJ3_CANNOT_MAKE_UDICT)
SJ_warnning(WCNmake_Udic); SJ_warnning(WCNmake_Udic);
if (err & SJ3_CANNOT_OPEN_UDICT) if(err & SJ3_CANNOT_OPEN_UDICT)
SJ_warnning(WCNopen_Udic); SJ_warnning(WCNopen_Udic);
if (err & SJ3_CANNOT_MAKE_STUDY) if(err & SJ3_CANNOT_MAKE_STUDY)
SJ_warnning(WCNmake_Study); SJ_warnning(WCNmake_Study);
if (err & SJ3_CANNOT_OPEN_STUDY) if(err & SJ3_CANNOT_OPEN_STUDY)
SJ_warnning(WCNopen_Study); SJ_warnning(WCNopen_Study);
} }
SJ2_reconnect () SJ2_reconnect() {
{
int err; int err;
sj3_close(); sj3_close();
if (dict_num && dict_list) if(dict_num && dict_list)
err = sj3_open_with_list(chmyhname(cur_serv), user_name, dict_num, dict_list, NULL, NULL); err = sj3_open_with_list(chmyhname(cur_serv), user_name, dict_num, dict_list, NULL, NULL);
else else
err = sj3_open(chmyhname(cur_serv), user_name); err = sj3_open(chmyhname(cur_serv), user_name);
return(err); return (err);
} }
SJ2_henkan_end() {
SJ2_henkan_end () sj3_close();
{
sj3_close ();
} }
SJ2_henkan_init () SJ2_henkan_init() {
{ int i, err;
int i, err; int* err_dict = NULL;
int *err_dict = NULL; int err_num = 0;
int err_num = 0;
sj3_set_timeout(5); sj3_set_timeout(5);
if (dict_num && dict_list) if(dict_num && dict_list)
err = sj3_open_with_list(chmyhname(cur_serv), user_name, dict_num, err = sj3_open_with_list(chmyhname(cur_serv), user_name, dict_num,
dict_list, &err_num, &err_dict); dict_list, &err_num, &err_dict);
else else
err = sj3_open(chmyhname(cur_serv), user_name); err = sj3_open(chmyhname(cur_serv), user_name);
i = 0; i = 0;
while (err && i < MAXSERVER - 1 && serv_list[i + 1] != NULL) { while(err && i < MAXSERVER - 1 && serv_list[i + 1] != NULL) {
if (dict_num && dict_list) if(dict_num && dict_list)
err = sj3_open_with_list(chmyhname(serv_list[++i]), user_name, err = sj3_open_with_list(chmyhname(serv_list[++i]), user_name,
dict_num, dict_list, &err_num, &err_dict); dict_num, dict_list, &err_num, &err_dict);
else else
err = sj3_open(chmyhname(cur_serv), user_name); err = sj3_open(chmyhname(cur_serv), user_name);
} }
if (err) { if(err) {
printf("Warning "); printf("Warning ");
sj_check_error(err); sj_check_error(err);
printf("\n\r"); printf("\n\r");
set_dcflag(1); set_dcflag(1);
return(1); return (1);
} else if (err_num && err_dict) { } else if(err_num && err_dict) {
printf("Warning "); printf("Warning ");
for( i = 0; i < err_num; i++) { for(i = 0; i < err_num; i++) {
printf("%s ", dict_list[err_dict[i]]); printf("%s ", dict_list[err_dict[i]]);
} }
printf(" files can't open\n"); printf(" files can't open\n");
cur_serv = serv_list[i]; cur_serv = serv_list[i];
return (0); return (0);
} else { } else {
cur_serv = serv_list[i]; cur_serv = serv_list[i];
return (0); return (0);
} }
} }
sj3_autocon() sj3_autocon() {
{ int i, err;
int i, err;
if (dict_num && dict_list) { if(dict_num && dict_list) {
if (!(err = sj3_open_with_list(chmyhname(cur_serv), user_name, dict_num, if(!(err = sj3_open_with_list(chmyhname(cur_serv), user_name, dict_num,
dict_list, NULL, NULL))) dict_list, NULL, NULL)))
return(0); return (0);
} else { } else {
if (!(err = sj3_open(chmyhname(cur_serv), user_name))) if(!(err = sj3_open(chmyhname(cur_serv), user_name)))
return(0); return (0);
} }
i = 0; i = 0;
while (serv_list[i] != NULL && i < MAXSERVER) { while(serv_list[i] != NULL && i < MAXSERVER) {
if (strcmp(cur_serv, serv_list[i]) != 0) { if(strcmp(cur_serv, serv_list[i]) != 0) {
if (dict_num && dict_list) { if(dict_num && dict_list) {
err = sj3_open_with_list(chmyhname(serv_list[i]), user_name, err = sj3_open_with_list(chmyhname(serv_list[i]), user_name,
dict_num, dict_list, NULL, NULL); dict_num, dict_list, NULL, NULL);
} else { } else {
err = sj3_open(chmyhname(cur_serv), user_name); err = sj3_open(chmyhname(cur_serv), user_name);
} }
if (!err) { if(!err) {
cur_serv = serv_list[i]; cur_serv = serv_list[i];
break; break;
} }
} }
i++; i++;
} }
return(err); return (err);
} }

73
main.c
View file

@ -46,76 +46,66 @@
#include "const.h" #include "const.h"
#include "server.h" #include "server.h"
extern int fork_flag; extern int fork_flag;
extern char *lock_file; extern char* lock_file;
char *version_number = "2.08C"; char* version_number = "2.08C";
char *time_stamp = "Mon Mar 23 16:42:59 JST 1998"; char* time_stamp = "Mon Mar 23 16:42:59 JST 1998";
static void static void
opening(void) opening(void) {
{
printf("Kana-Kanji Conversion Server Version %s\r\n", version_number); printf("Kana-Kanji Conversion Server Version %s\r\n", version_number);
printf("Copyright (c) 1990-1995 Sony Corporation\r\n"); printf("Copyright (c) 1990-1995 Sony Corporation\r\n");
printf("Created at %s\r\n", time_stamp); printf("Created at %s\r\n", time_stamp);
} }
#ifdef LOCK_FILE #ifdef LOCK_FILE
int int make_lockfile(void) {
make_lockfile(void) int fd;
{
int fd;
fd = open(lock_file, O_CREAT | O_EXCL, 0600); fd = open(lock_file, O_CREAT | O_EXCL, 0600);
if (fd < 0) if(fd < 0)
return ERROR; return ERROR;
close(fd); close(fd);
return 0; return 0;
} }
int int erase_lockfile(void) {
erase_lockfile(void)
{
return unlink(lock_file); return unlink(lock_file);
} }
#endif #endif
static int static int
signal_handler(int sig) signal_handler(int sig) {
{
warning_out("signal %d catched.", sig); warning_out("signal %d catched.", sig);
} }
static int static int
terminate_handler(int sig) terminate_handler(int sig) {
{
close_socket(); close_socket();
sj_closeall(); sj_closeall();
#ifdef LOCK_FILE #ifdef LOCK_FILE
erase_lockfile(); erase_lockfile();
#endif #endif
exit(0); exit(0);
} }
void void server_terminate(void) {
server_terminate(void)
{
close_socket(); close_socket();
sj_closeall(); sj_closeall();
#ifdef LOCK_FILE #ifdef LOCK_FILE
erase_lockfile(); erase_lockfile();
#endif #endif
exit(0); exit(0);
} }
static void static void
exec_fork(void) exec_fork(void) {
{ int tmp;
int tmp;
if (fork_flag && (tmp = fork())) { if(fork_flag && (tmp = fork())) {
if (tmp < 0) { if(tmp < 0) {
fprintf(stderr, "Can't fork child process\r\n"); fprintf(stderr, "Can't fork child process\r\n");
fflush(stderr); fflush(stderr);
} else { } else {
@ -135,14 +125,13 @@ exec_fork(void)
signal(SIGINT, (void (*)())terminate_handler); signal(SIGINT, (void (*)())terminate_handler);
signal(SIGQUIT, (void (*)())signal_handler); signal(SIGQUIT, (void (*)())signal_handler);
signal(SIGTERM, (void (*)())terminate_handler); signal(SIGTERM, (void (*)())terminate_handler);
if (fork_flag) if(fork_flag)
signal(SIGTSTP, SIG_IGN); signal(SIGTSTP, SIG_IGN);
} }
static void static void
leave_tty(void) leave_tty(void) {
{ int tmp;
int tmp;
tmp = open_error(); tmp = open_error();
tmp |= open_log(); tmp |= open_log();
@ -150,23 +139,21 @@ leave_tty(void)
kill(getppid(), SIGTERM); kill(getppid(), SIGTERM);
fclose(stdin); fclose(stdin);
fclose(stdout); fclose(stdout);
if (!tmp) if(!tmp)
fclose(stderr); fclose(stderr);
if (fork_flag) { if(fork_flag) {
if ((tmp = open("/dev/tty", O_RDWR)) >= 0) { if((tmp = open("/dev/tty", O_RDWR)) >= 0) {
ioctl(tmp, TIOCNOTTY, 0); ioctl(tmp, TIOCNOTTY, 0);
close(tmp); close(tmp);
} }
} }
} }
int int main(int argc, char** argv) {
main(int argc, char **argv)
{
opening(); opening();
#ifndef __NetBSD__ #ifndef __NetBSD__
if (setuid(geteuid())) { if(setuid(geteuid())) {
fprintf(stderr, "error at setuid.\r\n"); fprintf(stderr, "error at setuid.\r\n");
exit(1); exit(1);
} }
@ -176,8 +163,8 @@ main(int argc, char **argv)
read_runcmd(); read_runcmd();
set_default(); set_default();
#ifdef LOCK_FILE #ifdef LOCK_FILE
if (make_lockfile() == ERROR) { if(make_lockfile() == ERROR) {
fprintf(stderr, "Already running...\r\n"); fprintf(stderr, "Already running...\r\n");
exit(1); exit(1);
} }
@ -196,7 +183,7 @@ main(int argc, char **argv)
close_socket(); close_socket();
sj_closeall(); sj_closeall();
#ifdef LOCK_FILE #ifdef LOCK_FILE
erase_lockfile(); erase_lockfile();
#endif #endif
exit(0); exit(0);

View file

@ -27,15 +27,6 @@
* *
*/ */
/*
* $SonyRCSfile: makedict.c,v $
* $SonyRevision: 1.2 $
* $SonyDate: 1994/12/09 11:27:05 $
*
* $Id$
*/
/* #include "sj_sysvdef.h" */ /* XXX: no more need it? */ /* #include "sj_sysvdef.h" */ /* XXX: no more need it? */
#include <stdio.h> #include <stdio.h>
@ -48,30 +39,24 @@
#include "const.h" #include "const.h"
#include "dicttool.h" #include "dicttool.h"
FILE *infp = NULL; FILE* infp = NULL;
FILE *outfp = NULL; FILE* outfp = NULL;
static char *idxtop = NULL; static char* idxtop = NULL;
int main(int argc, char** argv) {
int
main(int argc, char** argv)
{
parse(argc, argv); parse(argc, argv);
while (readline()) setline(makelist); while(readline()) setline(makelist);
flush_douon(); flush_douon();
makehead((unsigned char *)argv[2]); makehead((unsigned char*)argv[2]);
return 0; return 0;
} }
char* make_idxlist(char* name) {
char* int i;
make_idxlist(char* name) char* p;
{
int i;
char *p;
i = strlen(name); i = strlen(name);
p = Zalloc(i + 2); p = Zalloc(i + 2);
@ -79,111 +64,89 @@ make_idxlist(char* name)
return p; return p;
} }
char* char* get_idxlist(char* name) {
get_idxlist(char* name) FILE* fp;
{ int i;
FILE *fp; char *p, *q, *r;
int i;
char *p, *q, *r;
fp = Fopen(name, "r"); fp = Fopen(name, "r");
i = Fsize(name); i = Fsize(name);
p = Zalloc(i + 2); p = Zalloc(i + 2);
Fseek(fp, 0L, 0); Fseek(fp, 0L, 0);
Fread(p, 1, i, fp); Fread(p, 1, i, fp);
Fclose(fp); Fclose(fp);
for(q = r = p; *q;) {
for (q = r = p ; *q ; ) { while(*q <= ' ') q++;
while (*q <= ' ') q++; while(*q > ' ') *r++ = *q++;
while (*q > ' ') *r++ = *q++;
*r++ = 0; *r++ = 0;
q++; q++;
} }
*r = 0; *r = 0;
i = 0; i = 0;
for (q = p ; *q ; ) { for(q = p; *q;) {
if ((fp = fopen(q, "r"))!=NULL) if((fp = fopen(q, "r")) != NULL)
fclose(fp); fclose(fp);
else { else {
fprintf(stderr, "Can't open %s mode \"r\"\n", q); fprintf(stderr, "Can't open %s mode \"r\"\n", q);
i++; i++;
} }
while (*q++) ; while(*q++);
} }
if (i) exit(1); if(i) exit(1);
return p; return p;
} }
void parse(int argc, char** argv) {
char* progname = NULL;
char* p;
void if((progname = strrchr(argv[0], '/')) != NULL)
parse(int argc, char** argv)
{
char *progname = NULL;
char *p;
if ((progname = strrchr(argv[0], '/'))!=NULL)
progname++; progname++;
else else
progname = argv[0]; progname = argv[0];
if(argc != 3) usage(progname);
if (argc != 3) usage(progname); p = argv[1];
p = argv[1];
idxtop = (*p == '-') ? get_idxlist(p + 1) : make_idxlist(p); idxtop = (*p == '-') ? get_idxlist(p + 1) : make_idxlist(p);
outfp = Fopen(argv[2], "w"); outfp = Fopen(argv[2], "w");
} }
int get_number(char* ptr) {
int i = 0;
int while(*ptr >= '0' && *ptr <= '9') {
get_number(char* ptr)
{
int i = 0;
while (*ptr >= '0' && *ptr <= '9') {
i = i * 10 + (*ptr++ - '0'); i = i * 10 + (*ptr++ - '0');
} }
return(i); return (i);
} }
void usage(char* name) {
void
usage(char* name)
{
fprintf(stderr, "Usage: %s text_file binary_file\n", fprintf(stderr, "Usage: %s text_file binary_file\n",
name ? name : "encode"); name ? name : "encode");
exit(0); exit(0);
} }
int getch(void) {
if(infp) {
int c;
int if((c = Fgetc(infp)) != EOF) return c;
getch(void)
{
if (infp) {
int c;
if ((c = Fgetc(infp)) != EOF) return c;
Fclose(infp); Fclose(infp);
infp = NULL; infp = NULL;
while (*idxtop++) ; while(*idxtop++);
} }
if (*idxtop) { if(*idxtop) {
infp = Fopen(idxtop, "r"); infp = Fopen(idxtop, "r");
fprintf(stderr, "Reading %s\n", idxtop); fprintf(stderr, "Reading %s\n", idxtop);
@ -195,29 +158,25 @@ getch(void)
return EOF; return EOF;
} }
void mark_file(FILE* out) {
static char pathname[MAXPATHLEN];
static long pos;
void if(out) {
mark_file(FILE* out) FILE* fp;
{ int c;
static char pathname[MAXPATHLEN];
static long pos;
if (out) {
FILE *fp;
int c;
fprintf(out, "%s:\t", pathname); fprintf(out, "%s:\t", pathname);
fp = Fopen(pathname, "r"); fp = Fopen(pathname, "r");
Fseek(fp, pos, 0); Fseek(fp, pos, 0);
c = Fgetc(fp); c = Fgetc(fp);
while (c != EOF && c != '\n') { while(c != EOF && c != '\n') {
fputc(c, out); fputc(c, out);
c = Fgetc(fp); c = Fgetc(fp);
} }
fputc('\n', out); fputc('\n', out);
Fclose(fp); Fclose(fp);
} } else {
else {
strcpy(pathname, idxtop); strcpy(pathname, idxtop);
pos = infp ? Ftell(infp) : 0; pos = infp ? Ftell(infp) : 0;
} }

View file

@ -27,15 +27,6 @@
* *
*/ */
/*
* $SonyRCSfile: makelist.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:00:39 $
*
* $Id$
*/
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@ -47,81 +38,62 @@
#define SS2 0x8e #define SS2 0x8e
#endif #endif
extern DouonRec *douon_ptr; extern DouonRec* douon_ptr;
extern int douon_num; extern int douon_num;
extern int yomi_len; extern int yomi_len;
extern int hinsi_num; extern int hinshi_num;
extern int kanji_len; extern int kanji_len;
extern HindoRec *hindo[]; extern HindoRec* hindo[];
extern int hindo_num; extern int hindo_num;
extern HindoRec *askknj[]; extern HindoRec* askknj[];
extern int askknj_num; extern int askknj_num;
extern HindoRec *assyuku; extern HindoRec* asshuku;
static DouonRec *drectmp = NULL;
static DouonRec* drectmp = NULL;
static void static void
clearklist(KanjiRec* krec) clearklist(KanjiRec* krec) {
{ KanjiRec* p;
KanjiRec *p;
while(krec) {
while (krec) { Free(krec->kptr);
Free(krec->aptr);
Free(krec -> kptr);
Free(krec -> aptr);
p = krec;
krec = krec -> knext;
p = krec;
krec = krec->knext;
Free(p); Free(p);
} }
} }
static void static void
clearhlist(HinsiRec* hrec) clearhlist(HinshiRec* hrec) {
{ HinshiRec* p;
HinsiRec *p;
while(hrec) {
while (hrec) { clearklist(hrec->krec);
clearklist(hrec -> krec);
p = hrec;
hrec = hrec -> hnext;
p = hrec;
hrec = hrec->hnext;
Free(p); Free(p);
} }
} }
void clear_list(void) {
DouonRec* p;
DouonRec* drec = douon_ptr;
void while(drec) {
clear_list(void)
{
DouonRec *p;
DouonRec *drec = douon_ptr;
Free(drec->yptr);
while (drec) { clearhlist(drec->hrec);
Free(drec -> yptr);
clearhlist(drec -> hrec);
p = drec;
drec = drec -> dnext;
p = drec;
drec = drec->dnext;
Free(p); Free(p);
} }
@ -129,71 +101,65 @@ clear_list(void)
douon_ptr = NULL; douon_ptr = NULL;
} }
static unsigned char* static unsigned char*
makekanji(int *yomi, int* kanji, int* atr, int* len) makekanji(int* yomi, int* kanji, int* atr, int* len) {
{ int kana[MaxYomiLength + 1];
int kana[MaxYomiLength + 1]; unsigned char ktmp[MaxKanjiLength * 3 + MaxAtrNumber * 2 + 1];
unsigned char ktmp[MaxKanjiLength * 3 + MaxAtrNumber * 2 + 1]; int i;
int i; int pos = 0;
int pos = 0; int* p;
int *p; unsigned char* q;
unsigned char *q;
for(p = yomi, i = 0; *p;)
for (p = yomi, i = 0 ; *p ; )
kana[i++] = h2kcode(*p++); kana[i++] = h2kcode(*p++);
kana[i] = 0; kana[i] = 0;
while (*atr) { while(*atr) {
i = *atr; i = *atr;
atr++; atr++;
#ifndef NO_ATR #ifndef NO_ATR
ktmp[pos++] = (AiAttribute | ((i >> 8) & 0xff)); ktmp[pos++] = (AiAttribute | ((i >> 8) & 0xff));
ktmp[pos++] = (i & 0xff); ktmp[pos++] = (i & 0xff);
#endif #endif
} }
if((i = top_strcmp(yomi, kanji)) != 0) {
if ((i = top_strcmp(yomi, kanji))!=0) {
kanji += i; kanji += i;
ktmp[pos++] = (ZenHiraAssyuku | (i - 1)); ktmp[pos++] = (ZenHiraAsshuku | (i - 1));
} }
else if ((i = top_strcmp(kana, kanji))!=0) { else if((i = top_strcmp(kana, kanji)) != 0) {
kanji += i; kanji += i;
ktmp[pos++] = (ZenKataAssyuku | (i - 1)); ktmp[pos++] = (ZenKataAsshuku | (i - 1));
} }
while(*kanji) {
while (*kanji) { if((i = last_strcmp(yomi, kanji)) != 0) {
if ((i = last_strcmp(yomi, kanji))!=0) {
kanji += i; kanji += i;
ktmp[pos++] = (ZenHiraAssyuku | (i - 1)); ktmp[pos++] = (ZenHiraAsshuku | (i - 1));
} }
else if ((i = last_strcmp(kana, kanji))!=0) { else if((i = last_strcmp(kana, kanji)) != 0) {
kanji += i; kanji += i;
ktmp[pos++] = (ZenKataAssyuku | (i - 1)); ktmp[pos++] = (ZenKataAsshuku | (i - 1));
} }
else if (((*kanji >> 8) & 0xff) == SS2 || *kanji < 0x100) { else if(((*kanji >> 8) & 0xff) == SS2 || *kanji < 0x100) {
ktmp[pos] = LeadingHankaku; ktmp[pos] = LeadingHankaku;
ktmp[pos + 1] = (*kanji & 0xff); ktmp[pos + 1] = (*kanji & 0xff);
kanji++; kanji++;
pos += 2; pos += 2;
} }
else { else {
if (*kanji < 0x10000) { if(*kanji < 0x10000) {
ktmp[pos] = ((*kanji >> 8) & NormalKanjiMask); ktmp[pos] = ((*kanji >> 8) & NormalKanjiMask);
ktmp[pos + 1] = (*kanji & NormalKanjiMask); ktmp[pos + 1] = (*kanji & NormalKanjiMask);
kanji++; kanji++;
pos += 2; pos += 2;
} else if (*kanji < 0x1000000) { } else if(*kanji < 0x1000000) {
ktmp[pos] = ((*kanji >> 8) & NormalKanjiMask); ktmp[pos] = ((*kanji >> 8) & NormalKanjiMask);
ktmp[pos + 1] = (*kanji & 0xff); ktmp[pos + 1] = (*kanji & 0xff);
kanji++; kanji++;
pos += 2; pos += 2;
@ -205,9 +171,8 @@ makekanji(int *yomi, int* kanji, int* atr, int* len)
} }
*len = pos; *len = pos;
q = (unsigned char*)Malloc(pos);
q = (unsigned char *)Malloc(pos); if(!q) {
if (!q) {
fprintf(stderr, "\245\341\245\342\245\352\244\254\311\324\302\255\244\267\244\336\244\267\244\277"); fprintf(stderr, "\245\341\245\342\245\352\244\254\311\324\302\255\244\267\244\336\244\267\244\277");
exit(1); exit(1);
} }
@ -216,32 +181,28 @@ makekanji(int *yomi, int* kanji, int* atr, int* len)
return q; return q;
} }
static unsigned char* static unsigned char*
makeyomi(int* yomi) makeyomi(int* yomi) {
{ unsigned char tmp[MaxYomiLength + 1];
unsigned char tmp[MaxYomiLength + 1]; int i;
int i; int j;
int j; int* y = yomi;
int *y = yomi; unsigned char* p;
unsigned char *p;
for(i = 0; *y;) {
for (i = 0 ; *y ; ) {
j = cnvyomi(*y++); j = cnvyomi(*y++);
if (j == 0) { 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"); 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); output_int(stderr, yomi);
fputc('\n', stderr);
exit(1); exit(1);
} }
tmp[i++] = j; tmp[i++] = j;
} }
tmp[i++] = 0; tmp[i++] = 0;
p = (unsigned char*)Malloc(i);
p = (unsigned char *)Malloc(i); if(!p) {
if (!p) {
fprintf(stderr, "\245\341\245\342\245\352\244\254\311\324\302\255\244\267\244\336\244\267\244\277"); fprintf(stderr, "\245\341\245\342\245\352\244\254\311\324\302\255\244\267\244\336\244\267\244\277");
exit(1); exit(1);
} }
@ -250,368 +211,303 @@ makeyomi(int* yomi)
return p; return p;
} }
static KanjiRec* static KanjiRec*
make_krec(unsigned char* kcode, int klen) make_krec(unsigned char* kcode, int klen) {
{ KanjiRec* krec;
KanjiRec *krec;
krec = (KanjiRec*)Malloc(sizeof(KanjiRec));
krec = (KanjiRec *)Malloc(sizeof(KanjiRec)); if(!krec) {
if (!krec) {
fprintf(stderr, "\245\341\245\342\245\352\244\254\311\324\302\255\244\267\244\336\244\267\244\277"); fprintf(stderr, "\245\341\245\342\245\352\244\254\311\324\302\255\244\267\244\336\244\267\244\277");
exit(1); exit(1);
} }
krec->klen = klen;
krec -> klen = klen; krec->kptr = kcode;
krec -> kptr = kcode; krec->alen = 0;
krec -> alen = 0; krec->aptr = NULL;
krec -> aptr = NULL; krec->knext = NULL;
krec -> knext = NULL;
return krec; return krec;
} }
static HinshiRec*
make_hrec(int hinshi) {
HinshiRec* hrec;
hrec = (HinshiRec*)Malloc(sizeof(HinshiRec));
static HinsiRec* if(!hrec) {
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"); fprintf(stderr, "\245\341\245\342\245\352\244\254\311\324\302\255\244\267\244\336\244\267\244\277");
exit(1); exit(1);
} }
hrec->hinshi = hinshi;
hrec -> hinsi = hinsi; hrec->krec = NULL;
hrec -> krec = NULL; hrec->hnext = NULL;
hrec -> hnext = NULL;
return hrec; return hrec;
} }
static DouonRec* static DouonRec*
make_drec(unsigned char* ycode) make_drec(unsigned char* ycode) {
{ DouonRec* drec;
DouonRec *drec;
drec = (DouonRec*)Malloc(sizeof(DouonRec));
drec = (DouonRec *)Malloc(sizeof(DouonRec)); if(!drec) {
if (!drec) {
fprintf(stderr, "\245\341\245\342\245\352\244\254\311\324\302\255\244\267\244\336\244\267\244\277"); fprintf(stderr, "\245\341\245\342\245\352\244\254\311\324\302\255\244\267\244\336\244\267\244\277");
exit(1); exit(1);
} }
drec->yptr = ycode;
drec -> yptr = ycode; drec->hrec_num = 0;
drec -> hrec_num = 0; drec->hrec = NULL;
drec -> hrec = NULL; drec->dnext = NULL;
drec -> dnext = NULL;
return drec; return drec;
} }
static int static int
diff_ylen(DouonRec *drec) diff_ylen(DouonRec* drec) {
{ DouonRec* dptr;
DouonRec *dptr; DouonRec* dprev;
DouonRec *dprev; unsigned char* p1;
unsigned char *p1; unsigned char* p2;
unsigned char *p2; int ylen = 0;
int ylen = 0;
dptr = douon_ptr;
dptr = douon_ptr; dprev = NULL; dprev = NULL;
while (dptr) { while(dptr) {
dprev = dptr; dprev = dptr;
dptr = dptr -> dnext; dptr = dptr->dnext;
} }
if (dprev) { if(dprev) {
p1 = dprev -> yptr; p2 = drec -> yptr; p1 = dprev->yptr;
while (*p1 && (*p1 == *p2)) { p1++; p2++; } p2 = drec->yptr;
while(*p1 && (*p1 == *p2)) {
p1++;
p2++;
}
if(*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"); 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); output_yomi(stderr, dprev->yptr);
fputc('\n', stderr);
exit(1); exit(1);
} }
else if (*p1 > *p2) { 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"); 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, dprev->yptr);
output_yomi(stderr, drec->yptr); fputc('\n', stderr); fputc('\n', stderr);
output_yomi(stderr, drec->yptr);
fputc('\n', stderr);
exit(1); exit(1);
} }
while(*p2++) ylen++;
while (*p2++) ylen++;
} }
return ylen; return ylen;
} }
static int static int
douon_knj(DouonRec* drec) douon_knj(DouonRec* drec) {
{ int i;
int i; int len = 0;
int len = 0; unsigned char* p;
unsigned char *p; unsigned char* knjofscvt();
unsigned char *knjofscvt(); HinshiRec* hrec;
HinsiRec *hrec; KanjiRec* krec;
KanjiRec *krec;
for(hrec = drec->hrec; hrec; hrec = hrec->hnext) {
for (hrec = drec -> hrec ; hrec ; hrec = hrec -> hnext) { for(krec = hrec->krec; krec; krec = krec->knext) {
for (krec = hrec -> krec ; krec ; krec = krec -> knext) {
p = knjofscvt(krec -> kptr, krec -> klen, &i);
p = knjofscvt(krec->kptr, krec->klen, &i);
len += i + 1; len += i + 1;
knjhnd_set(p, i); knjhnd_set(p, i);
krec->alen = i;
krec->aptr = p;
krec -> alen = i; set_ofsrec(krec->kptr, krec->klen, 0);
krec -> aptr = p;
set_ofsrec(krec -> kptr, krec -> klen, 0);
} }
} }
return len; return len;
} }
static void static void
make_d_list(DouonRec* drec) make_d_list(DouonRec* drec) {
{
DouonRec *dptr, *dprev; DouonRec *dptr, *dprev;
HinsiRec *hptr; HinshiRec* hptr;
KanjiRec *kptr; KanjiRec* kptr;
int ylen; int ylen;
int klen; int klen;
int hnum; int hnum;
int len; int len;
int i; int i;
start: start:
if (douon_ptr == NULL) { if(douon_ptr == NULL) {
douon_num = 0; douon_num = 0;
yomi_len = 0; yomi_len = 0;
hinsi_num = 0; hinshi_num = 0;
kanji_len = 0; kanji_len = 0;
assyuku = NULL; asshuku = NULL;
} }
klen = douon_knj(drec); klen = douon_knj(drec);
ylen = diff_ylen(drec); ylen = diff_ylen(drec);
hnum = drec->hrec_num;
hnum = drec -> hrec_num;
i = 1 + i = 1 +
MaxKnjAskNumber + MaxKnjAskNumber +
douon_num * DouonBlkSizeNumber + DouonBlkSizeNumber + douon_num * DouonBlkSizeNumber + DouonBlkSizeNumber +
yomi_len + ylen + yomi_len + ylen +
hinsi_num + hnum + hinshi_num + hnum +
hinsi_num + hnum + hinshi_num + hnum +
kanji_len + klen; kanji_len + klen;
len = (i <= MainSegmentLength) ? 0 : decide_knjask(); len = (i <= MainSegmentLength) ? 0 : decide_knjask();
if((i - len) <= MainSegmentLength) {
if ((i - len) <= MainSegmentLength) { if(douon_ptr) {
if (douon_ptr) { dptr = douon_ptr;
dprev = NULL;
dptr = douon_ptr; dprev = NULL; while(dptr) {
while (dptr) {
dprev = dptr; dprev = dptr;
dptr = dptr -> dnext; dptr = dptr->dnext;
} }
dprev->dnext = drec;
dprev -> dnext = drec;
} }
else { else {
douon_ptr = drec; douon_ptr = drec;
} }
drec -> dnext = NULL; drec->dnext = NULL;
drec -> dlen = ylen;
drec->dlen = ylen;
douon_num += 1; douon_num += 1;
yomi_len += ylen;
yomi_len += ylen; hinshi_num += hnum;
hinsi_num += hnum;
kanji_len += klen; kanji_len += klen;
return; return;
} }
else if (douon_ptr == NULL) { 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"); 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); exit(1);
} }
for(hptr = drec->hrec; hptr; hptr = hptr->hnext) {
for(kptr = hptr->krec; kptr; kptr = kptr->knext) {
for (hptr = drec -> hrec ; hptr ; hptr = hptr -> hnext) { knjhnd_reset(kptr->aptr, kptr->alen);
for (kptr = hptr -> krec ; kptr ; kptr = kptr -> knext) {
Free(kptr->aptr);
knjhnd_reset(kptr -> aptr, kptr -> alen); kptr->aptr = NULL;
Free(kptr -> aptr);
kptr -> aptr = NULL;
} }
} }
len = decide_knjask(); len = decide_knjask();
makeseg(); makeseg();
clear_list(); clear_list();
clear_hindo(); clear_hindo();
clear_ofsrec(); clear_ofsrec();
askknj_num = 0; askknj_num = 0;
clear_asshuku();
clear_assyuku();
goto start; goto start;
} }
void flush_douon(void) {
void if(drectmp) {
flush_douon(void)
{
if (drectmp) {
make_d_list(drectmp); make_d_list(drectmp);
drectmp = NULL; drectmp = NULL;
} }
if (douon_ptr) { if(douon_ptr) {
decide_knjask(); decide_knjask();
makeseg(); makeseg();
clear_list(); clear_list();
clear_hindo(); clear_hindo();
clear_ofsrec(); clear_ofsrec();
askknj_num = 0; askknj_num = 0;
} }
} }
void makelist(int* yomi, int* kanji, int hinshi, int* atr) {
void unsigned char* ycode;
makelist(int* yomi, int* kanji, int hinsi, int* atr) unsigned char* kcode;
{ int klen;
unsigned char *ycode; HinshiRec* hrec;
unsigned char *kcode; KanjiRec * krec, *kprev;
int klen;
HinsiRec *hrec;
KanjiRec *krec, *kprev;
ycode = makeyomi(yomi); ycode = makeyomi(yomi);
kcode = makekanji(yomi, kanji, atr, &klen); kcode = makekanji(yomi, kanji, atr, &klen);
if(drectmp && strcmp(ycode, drectmp->yptr)) {
if (drectmp && strcmp(ycode, drectmp -> yptr)) {
make_d_list(drectmp); make_d_list(drectmp);
drectmp = NULL; drectmp = NULL;
} }
if(!drectmp) {
if (!drectmp) {
drectmp = make_drec(ycode); drectmp = make_drec(ycode);
hrec = make_hrec(hinshi);
drectmp->hrec = hrec;
drectmp->hrec_num = 1;
hrec = make_hrec(hinsi); krec = make_krec(kcode, klen);
drectmp -> hrec = hrec; hrec->krec = krec;
drectmp -> hrec_num = 1;
krec = make_krec(kcode, klen);
hrec -> krec = krec;
return; return;
} }
for(hrec = drectmp->hrec; hrec->hnext; hrec = hrec->hnext)
if(hrec->hinshi == hinshi) break;
for (hrec = drectmp -> hrec ; hrec -> hnext ; hrec = hrec -> hnext) if(hrec->hinshi == hinshi) {
if (hrec -> hinsi == hinsi) break;
for(krec = hrec->krec; krec; krec = krec->knext) {
if (hrec -> hinsi == hinsi) { if((krec->klen == klen) &&
!memcmp(krec->kptr, kcode, klen)) {
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, "\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:"); fprintf(stderr, "\t\306\311\244\337:");
output_int(stderr, yomi); output_int(stderr, yomi);
@ -620,7 +516,6 @@ makelist(int* yomi, int* kanji, int hinsi, int* atr)
output_int(stderr, kanji); output_int(stderr, kanji);
fprintf(stderr, "\n"); fprintf(stderr, "\n");
Free(kcode); Free(kcode);
return; return;
@ -628,18 +523,15 @@ makelist(int* yomi, int* kanji, int hinsi, int* atr)
kprev = krec; kprev = krec;
} }
kprev->knext = make_krec(kcode, klen);
kprev -> knext = make_krec(kcode, klen);
return; return;
} }
hrec->hnext = make_hrec(hinshi);
hrec = hrec->hnext;
drectmp->hrec_num += 1;
hrec -> hnext = make_hrec(hinsi); krec = make_krec(kcode, klen);
hrec = hrec -> hnext; hrec->krec = krec;
drectmp -> hrec_num += 1;
krec = make_krec(kcode, klen);
hrec -> krec = krec;
} }

377
makeseg.c
View file

@ -27,15 +27,6 @@
* *
*/ */
/*
* $SonyRCSfile: makeseg.c,v $
* $SonyRevision: 1.2 $
* $SonyDate: 1994/12/09 11:27:05 $
*
* $Id$
*/
#include <time.h> #include <time.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -46,58 +37,55 @@
#include "Dict.h" #include "Dict.h"
#include "dicttool.h" #include "dicttool.h"
extern HindoRec *askknj[]; extern HindoRec* askknj[];
extern int askknj_num; extern int askknj_num;
extern DouonRec *douon_ptr; extern DouonRec* douon_ptr;
extern FILE *outfp; extern FILE* outfp;
extern int douon_num; extern int douon_num;
static unsigned char segindex[MainSegmentLength];
static int idxpos = 0;
static int idxnum = 0;
static unsigned char segindex[MainSegmentLength];
static int idxpos = 0;
static int idxnum = 0;
static unsigned char* static unsigned char*
set_ofsask(unsigned char* src, unsigned char* dst) set_ofsask(unsigned char* src, unsigned char* dst) {
{ int len;
int len; unsigned char* ptr;
unsigned char *ptr; OffsetRec* ofsrec;
OffsetRec *ofsrec;
ofsrec = real_ofsrec(src); ofsrec = real_ofsrec(src);
for (len = ofsrec->klen, ptr = ofsrec->kptr ; len > 0 ; ) { for(len = ofsrec->klen, ptr = ofsrec->kptr; len > 0;) {
switch (*ptr & KanjiModeMask) { switch(*ptr & KanjiModeMask) {
case ZenHiraAssyuku: case ZenHiraAsshuku:
case ZenKataAssyuku: case ZenKataAsshuku:
case KanjiAssyuku: case KanjiAsshuku:
*dst++ = *ptr++; *dst++ = *ptr++;
len -= 1; len -= 1;
break; break;
case LeadingHankaku: case LeadingHankaku:
#ifndef UseHankakuInDict #ifndef UseHankakuInDict
fprintf(stderr, "\302\260\300\255\245\263\241\274\245\311\241\246\245\250\245\351\241\274\n"); fprintf(stderr, "\302\260\300\255\245\263\241\274\245\311\241\246\245\250\245\351\241\274\n");
exit(1); exit(1);
#else #else
*dst++ = *ptr++; *dst++ = *ptr++;
*dst++ = *ptr++; *dst++ = *ptr++;
len -= 2; len -= 2;
break; break;
#endif #endif
case OffsetAssyuku: case OffsetAsshuku:
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"); 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); exit(1);
case AiAttribute: case AiAttribute:
*dst++ = *ptr++; *dst++ = *ptr++;
*dst++ = *ptr++; *dst++ = *ptr++;
len -= 2; len -= 2;
break; break;
case KanjiStrEnd: case KanjiStrEnd:
*dst++ = *ptr++; *dst++ = *ptr++;
len--; len--;
break; break;
default: default:
*dst++ = *ptr++; *dst++ = *ptr++;
*dst++ = *ptr++; *dst++ = *ptr++;
len -= 2; len -= 2;
@ -107,85 +95,74 @@ set_ofsask(unsigned char* src, unsigned char* dst)
return dst; return dst;
} }
size_t size_t
make_knjstr(unsigned char* src, int len, unsigned char* dst) make_knjstr(unsigned char* src, int len, unsigned char* dst) {
{ unsigned char* keep = dst;
unsigned char *keep = dst;
while (len > 0) { while(len > 0) {
switch (*src & KanjiModeMask) { switch(*src & KanjiModeMask) {
case ZenHiraAssyuku: case ZenHiraAsshuku:
case ZenKataAssyuku: case ZenKataAsshuku:
case KanjiAssyuku: case KanjiAsshuku:
*dst++ = *src++; *dst++ = *src++;
len -= 1; len -= 1;
break; break;
case LeadingHankaku: case LeadingHankaku:
#ifndef UseHankakuInDict #ifndef UseHankakuInDict
fprintf(stderr, "\302\260\300\255\245\263\241\274\245\311\241\246\245\250\245\351\241\274\n"); fprintf(stderr, "\302\260\300\255\245\263\241\274\245\311\241\246\245\250\245\351\241\274\n");
exit(1); exit(1);
#else #else
*dst++ = *src++; *dst++ = *src++;
*dst++ = *src++; *dst++ = *src++;
len -= 2; len -= 2;
break; break;
#endif #endif
case OffsetAssyuku: case OffsetAsshuku:
dst = set_ofsask(src, dst); dst = set_ofsask(src, dst);
src += 2; src += 2;
len -= 2; len -= 2;
break; break;
case AiAttribute: case AiAttribute:
*dst++ = *src++; *dst++ = *src++;
*dst++ = *src++; *dst++ = *src++;
len -= 2; len -= 2;
break; break;
case KanjiStrEnd: case KanjiStrEnd:
*dst++ = *src++; *dst++ = *src++;
len--; len--;
break; break;
default: default:
*dst++ = *src++; *dst++ = *src++;
*dst++ = *src++; *dst++ = *src++;
len -= 2; len -= 2;
} }
} }
return(dst - keep); return (dst - keep);
} }
static int static int
make_knjask(void) make_knjask(void) {
{ int i;
int i; unsigned char* p;
unsigned char *p; unsigned char buf[128];
unsigned char buf[128]; int len;
int len; int tlen = 0;
int tlen = 0;
for(i = 0; i < askknj_num; i++) {
for (i = 0 ; i < askknj_num ; i++) { len = make_knjstr(askknj[i]->kptr, askknj[i]->klen, buf);
Free(askknj[i]->kptr);
len = make_knjstr(askknj[i] -> kptr, askknj[i] -> klen, buf); p = (unsigned char*)Malloc(len);
if(!p) {
Free(askknj[i] -> kptr);
p = (unsigned 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"); fprintf(stderr, "\245\341\245\342\245\352\244\254\302\255\244\352\244\336\244\273\244\363\n");
exit(1); exit(1);
} }
memcpy(p, buf, len); memcpy(p, buf, len);
askknj[i] -> kptr = p; askknj[i]->kptr = p;
askknj[i] -> klen = len; askknj[i]->klen = len;
tlen += len + 1; tlen += len + 1;
} }
@ -193,172 +170,161 @@ make_knjask(void)
return tlen; return tlen;
} }
void makeseg(void) {
unsigned char buf[MainSegmentLength];
DouonRec* drec;
HinshiRec* hrec;
KanjiRec* krec;
int i, j, k;
int slen;
unsigned char* dst;
unsigned char* sdst;
unsigned char *p, *q;
void #ifndef HEHE
makeseg(void) #define datset(i) \
{ { \
unsigned char buf[MainSegmentLength]; if(dst >= buf + sizeof(buf)) goto err; \
DouonRec *drec; *dst++ = i; \
HinsiRec *hrec; }
KanjiRec *krec;
int i, j, k;
int slen;
unsigned char *dst;
unsigned char *sdst;
unsigned char *p, *q;
#ifndef HEHE
#define datset(i) { if (dst >= buf+sizeof(buf)) goto err; *dst++ = i; }
#else #else
#define datset(i) { *dst++; i; } #define datset(i) \
{ \
*dst++; \
i; \
}
#endif #endif
dst = buf; dst = buf;
i = make_knjask(); i = make_knjask();
if (i >= 0x100) { 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"); 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); exit(1);
} }
datset(i); datset(i);
for (i = 0 ; i < askknj_num ; i++) { for(i = 0; i < askknj_num; i++) {
p = askknj[i] -> kptr; p = askknj[i]->kptr;
j = askknj[i] -> klen; j = askknj[i]->klen;
while (j > 0) { while(j > 0) {
k = codesize(*p); k = codesize(*p);
datset(*p); p++; datset(*p);
if (k > 2) { p++;
datset(*p); p++; if(k > 2) {
datset(*p); p++; datset(*p);
} else if (k > 1) { p++;
datset(*p); p++; datset(*p);
p++;
} else if(k > 1) {
datset(*p);
p++;
} }
j -= k; j -= k;
} }
datset(KanjiStrEnd); datset(KanjiStrEnd);
} }
clear_ofsrec(); clear_ofsrec();
for(drec = douon_ptr; drec; drec = drec->dnext) {
for (drec = douon_ptr ; drec ; drec = drec->dnext) { sdst = dst;
dst += DouonBlkSizeNumber;
p = drec->yptr;
sdst = dst; dst += DouonBlkSizeNumber; slen = strlen(p) - drec->dlen;
p = drec -> yptr;
slen = strlen(p) - drec -> dlen;
p += slen; p += slen;
for (i = drec -> dlen ; i > 0 ; i--) { for(i = drec->dlen; i > 0; i--) {
datset(*p); p++; datset(*p);
p++;
} }
for (hrec = drec->hrec ; hrec ; hrec = hrec->hnext) { for(hrec = drec->hrec; hrec; hrec = hrec->hnext) {
datset(hrec->hinshi);
datset(hrec -> hinsi); for(krec = hrec->krec; krec; krec = krec->knext) {
for (krec = hrec->krec ; krec ; krec = krec->knext) {
p = q = knjcvt(krec -> kptr, krec -> klen, &i);
p = q = knjcvt(krec->kptr, krec->klen, &i);
set_ofsrec(krec->kptr, krec->klen, dst - buf); set_ofsrec(krec->kptr, krec->klen, dst - buf);
while(i-- > 0) {
while (i-- > 0) { datset(*p);
datset(*p); p++; p++;
} }
datset(KanjiStrEnd); datset(KanjiStrEnd);
Free(q); Free(q);
} }
datset(HinshiBlkTerm);
datset(HinsiBlkTerm);
} }
i = dst - sdst;
i = dst - sdst; *sdst = ((i >> 8) & 0x0f);
*sdst = ((i >> 8) & 0x0f);
*(sdst + 1) = (i & 0xff); *(sdst + 1) = (i & 0xff);
if(drec->dlen > 0x0f) *sdst |= 0x40;
*(sdst + 2) = (drec->dlen & 0x0f);
if (drec -> dlen > 0x0f) *sdst |= 0x40; if(slen > 0x0f) *sdst |= 0x80;
*(sdst + 2) = (drec -> dlen & 0x0f);
if (slen > 0x0f) *sdst |= 0x80;
*(sdst + 2) |= ((slen << 4) & 0xf0); *(sdst + 2) |= ((slen << 4) & 0xf0);
} }
if (dst < buf + sizeof(buf)) { if(dst < buf + sizeof(buf)) {
datset(DouonBlkTerm); datset(DouonBlkTerm);
} }
for(p = douon_ptr->yptr;;) {
for (p = douon_ptr -> yptr ; ; ) { if(idxpos < MainIndexLength) {
if (idxpos < MainIndexLength) {
segindex[idxpos++] = *p; segindex[idxpos++] = *p;
} } else {
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"); 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); exit(1);
} }
if (!*p++) break; if(!*p++) break;
} }
if (idxpos < MainIndexLength) { if(idxpos < MainIndexLength) {
segindex[idxpos] = 0; segindex[idxpos] = 0;
} } else {
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"); 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); exit(1);
} }
i = dst - buf; i = dst - buf;
while (dst < buf + sizeof(buf)) *dst++ = DouonBlkTerm; while(dst < buf + sizeof(buf)) *dst++ = DouonBlkTerm;
if(Fseek(outfp,
if (Fseek(outfp, (long)(HeaderLength + CommentLength + MainIndexLength + idxnum * MainSegmentLength),
(long)(HeaderLength + CommentLength + MainIndexLength 0) < 0) {
+ 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"); 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); exit(1);
} }
if (Fwrite(buf, sizeof(buf), 1, outfp) != 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"); 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); exit(1);
} }
Fflush(outfp); Fflush(outfp);
printf("\245\273\245\260\245\341\245\363\245\310\310\326\271\346:%d:", idxnum++); printf("\245\273\245\260\245\341\245\363\245\310\310\326\271\346:%d:", idxnum++);
output_yomi(stdout, douon_ptr -> yptr); output_yomi(stdout, douon_ptr->yptr);
printf("\t\245\273\245\260\245\341\245\363\245\310\304\271:%d", i); 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("\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:"); printf("\264\301\273\372\260\265\275\314\312\270\273\372\316\363:");
for (i = j = 0 ; i < askknj_num ; i++) { for(i = j = 0; i < askknj_num; i++) {
putchar('\t'); putchar('\t');
if (i && j == 0) putchar('\t'); if(i && j == 0) putchar('\t');
output_knj(stdout, askknj[i] -> kptr, askknj[i] -> klen); output_knj(stdout, askknj[i]->kptr, askknj[i]->klen);
printf(":%d", askknj[i] -> hindo + askknj[i] -> exist); printf(":%d", askknj[i]->hindo + askknj[i]->exist);
if (++j >= 4) { if(++j >= 4) {
putchar('\n'); putchar('\n');
j = 0; j = 0;
} }
} }
if (j) putchar('\n'); if(j) putchar('\n');
putchar('\n'); putchar('\n');
fflush(stdout); fflush(stdout);
@ -367,63 +333,66 @@ makeseg(void)
err: 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\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:"); 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); output_yomi(stderr, douon_ptr->yptr);
fputc('\n', stderr); fputc('\n', stderr);
exit(1); exit(1);
#undef datset #undef datset
} }
static void static void
put4byte(unsigned char* p, size_t n) put4byte(unsigned char* p, size_t n) {
{ p += 3;
p += 3; *p-- = n;
*p-- = n; n >>= 8; n >>= 8;
*p-- = n; n >>= 8; *p-- = n;
*p-- = n; n >>= 8; n >>= 8;
*p = n; *p-- = n;
n >>= 8;
*p = n;
} }
void void makehead(unsigned char* dict_name) {
makehead(unsigned char* dict_name) unsigned char header[HeaderLength + CommentLength];
{ long i;
unsigned char header[HeaderLength + CommentLength]; unsigned char* p;
long i; time_t curtime;
unsigned char *p;
time_t curtime;
#define IndexPos (HeaderLength + CommentLength) #define IndexPos (HeaderLength + CommentLength)
memset(header, '\0', sizeof(header)); memset(header, '\0', sizeof(header));
put4byte(header + VersionPos, DictVersion); put4byte(header + VersionPos, DictVersion);
time(&curtime); time(&curtime);
p = header + CommentPos; p = header + CommentPos;
sprintf((char *)p, "%s : %s", dict_name, ctime(&curtime)); sprintf((char*)p, "%s : %s", dict_name, ctime(&curtime));
while (*p) { while(*p) {
if (*p == '\n') { *p = 0; break; } if(*p == '\n') {
*p = 0;
break;
}
p++; p++;
} }
i = IndexPos; i = IndexPos;
put4byte(header + DictIdxPos, i); put4byte(header + DictIdxPos, i);
put4byte(header + DictIdxLen, MainIndexLength); put4byte(header + DictIdxLen, MainIndexLength);
i += MainIndexLength; i += MainIndexLength;
put4byte(header + DictSegPos, i); put4byte(header + DictSegPos, i);
put4byte(header + DictSegLen, MainSegmentLength); put4byte(header + DictSegLen, MainSegmentLength);
put4byte(header + DictSegMax, 0); put4byte(header + DictSegMax, 0);
put4byte(header + DictSegNum, idxnum); put4byte(header + DictSegNum, idxnum);
put4byte(header + DictAIdxPos, 0); put4byte(header + DictAIdxPos, 0);
put4byte(header + DictAIdxLen, 0); put4byte(header + DictAIdxLen, 0);
put4byte(header + DictASegPos, 0); put4byte(header + DictASegPos, 0);
put4byte(header + DictASegLen, 0); put4byte(header + DictASegLen, 0);
Fseek(outfp, (long)HeaderPos, 0); Fseek(outfp, (long)HeaderPos, 0);
Fwrite(header, sizeof(header), 1, outfp); Fwrite(header, sizeof(header), 1, outfp);
Fseek(outfp, (long)IndexPos, 0); Fseek(outfp, (long)IndexPos, 0);
Fwrite(segindex, MainIndexLength, 1, outfp); Fwrite(segindex, MainIndexLength, 1, outfp);
#undef IndexPos #undef IndexPos
} }

View file

@ -27,46 +27,31 @@
* *
*/ */
/*
* $SonyRCSfile: memory.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:00:42 $
*
* $Id$
*/
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <sys/types.h> #include <sys/types.h>
#include "dicttool.h" #include "dicttool.h"
void* void* Malloc(size_t size) {
Malloc(size_t size) void* p;
{
void* p;
p = malloc(size); p = malloc(size);
if (p == NULL) { 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"); 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); exit(1);
} }
return p; return p;
} }
void* void* Zalloc(size_t size) {
Zalloc (size_t size) void* p;
{
void* p;
p = Malloc(size); p = Malloc(size);
memset(p, '\0', size); memset(p, '\0', size);
return p; return p;
} }
void void Free(void* p) {
Free(void *p) free(p);
{
free(p);
} }

100
memory2.c
View file

@ -27,34 +27,26 @@
* *
*/ */
/*
* $SonyRCSfile: memory.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:01:58 $
*/
#include "sj_kcnv.h" #include "sj_kcnv.h"
void free_jrec(), free_clrec(); void free_jrec(), free_clrec();
JREC *free_jlst(p) JREC* free_jlst(p)
JREC *p; JREC* p;
{ {
JREC *jpk; JREC* jpk;
JREC *jp; JREC* jp;
JREC *jn; JREC* jn;
jp = NULL; jp = NULL;
for ( ; p ; p = jn) { for(; p; p = jn) {
jn = p -> jsort; jn = p->jsort;
if (p -> count) { if(p->count) {
if (jp) if(jp)
jp -> jsort = p; jp->jsort = p;
else else
jpk = p; jpk = p;
jp = p; jp = p;
@ -65,38 +57,36 @@ JREC *p;
} }
} }
if (jp) jp -> jsort = NULL; if(jp) jp->jsort = NULL;
return jpk; return jpk;
} }
CLREC *free_clst(p, l) CLREC* free_clst(p, l)
CLREC *p; CLREC* p;
int l; int l;
{ {
CLREC *cpk; CLREC* cpk;
CLREC *cp; CLREC* cp;
CLREC *cn; CLREC* cn;
int i = FALSE; int i = FALSE;
cp = cpk = NULL; cp = cpk = NULL;
for ( ; p ; p = cn) { for(; p; p = cn) {
cn = p -> clsort; cn = p->clsort;
if ((int)p -> cllen == l) { if((int)p->cllen == l) {
if (p == selcl) { if(p == selcl) {
if (cp) { if(cp) {
p -> clsort = cpk; p->clsort = cpk;
cpk = p; cpk = p;
} } else
else
cpk = cp = p; cpk = cp = p;
} } else {
else { if(cp)
if (cp) cp->clsort = p;
cp -> clsort = p;
else else
cpk = p; cpk = p;
cp = p; cp = p;
@ -104,48 +94,46 @@ int l;
} }
else { else {
(p -> jnode -> count)--; (p->jnode->count)--;
free_clrec(p); free_clrec(p);
} }
} }
if (cp) cp -> clsort = NULL; if(cp) cp->clsort = NULL;
return cpk; return cpk;
} }
void free_clall(p) void free_clall(p)
CLREC *p; CLREC* p;
{ {
CLREC *next; CLREC* next;
while (p) { while(p) {
(p -> jnode -> count)--; (p->jnode->count)--;
next = p -> clsort; next = p->clsort;
free_clrec(p); free_clrec(p);
p = next; p = next;
} }
} }
void free_jall(p) void free_jall(p)
JREC *p; JREC* p;
{ {
JREC *next; JREC* next;
while (p) { while(p) {
next = p -> jsort; next = p->jsort;
free_jrec(p); free_jrec(p);
p = next; p = next;
} }
} }
void freework() void freework() {
{
free_clall(maxclptr); free_clall(maxclptr);
clt1st = maxclptr = NULL; clt1st = maxclptr = NULL;
free_jall(maxjptr); free_jall(maxjptr);
jrt1st = maxjptr = NULL; jrt1st = maxjptr = NULL;
} }

View file

@ -27,69 +27,60 @@
* *
*/ */
/*
* $SonyRCSfile: mk2claus.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:02:00 $
*/
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "sj_right.h" #include "sj_right.h"
int terminate(), priority(); int terminate(), priority();
void mkjiritu(), mkbunsetu(), wakachi(), pritiny(); void mkjiritsu(), mkbunsetsu(), wakachi(), pritiny();
void free_clall(), free_jall(); void free_clall(), free_jall();
static int set2nd(clrec) static int set2nd(clrec)
CLREC *clrec; CLREC* clrec;
{ {
CLREC *rec2; CLREC* rec2;
mkjiritu(DO_IKKATU | DO_CLSTUDY); mkjiritsu(DO_IKKATU | DO_CLSTUDY);
mkbunsetu(); mkbunsetsu();
if (!maxclptr) { if(!maxclptr) {
wakachi(); wakachi();
return clrec -> cllen; return clrec->cllen;
} }
for (rec2 = maxclptr ; rec2 ; rec2 = rec2 -> clsort) { for(rec2 = maxclptr; rec2; rec2 = rec2->clsort) {
if (terminate(rec2->right, cnvstart+rec2->cllen) != SHU) if(terminate(rec2->right, cnvstart + rec2->cllen) != SHU)
break; break;
} }
return rec2 ? (clrec -> cllen + rec2 -> cllen) : (clrec -> cllen); return rec2 ? (clrec->cllen + rec2->cllen) : (clrec->cllen);
} }
void mk2claus() void mk2claus() {
{ unsigned char* keepptr;
unsigned char *keepptr; int keeplen;
int keeplen; CLREC* clrec;
CLREC *clrec; int len;
int len; int save2ln;
int save2ln; int prty;
int prty; int maxprty;
int maxprty; int count;
int count; int prty2;
int prty2;
prty = maxprty = prty2 = 0; prty = maxprty = prty2 = 0;
clt2nd = maxclptr = NULL; clt2nd = maxclptr = NULL;
jrt2nd = maxjptr = NULL; jrt2nd = maxjptr = NULL;
selcl = clt1st; selcl = clt1st;
if (selcl -> right == R_FZKKGU) { if(selcl->right == R_FZKKGU) {
pritiny(); pritiny();
return; return;
} }
if (cnvlen == selcl -> cllen) { if(cnvlen == selcl->cllen) {
pritiny(); pritiny();
return; return;
} }
@ -98,13 +89,13 @@ void mk2claus()
keeplen = cnvlen; keeplen = cnvlen;
len = count = 0; len = count = 0;
for (clrec = selcl ; clrec && count < 5 ; clrec = clrec -> clsort) { for(clrec = selcl; clrec && count < 5; clrec = clrec->clsort) {
cnvstart = keepptr + clrec -> cllen; cnvstart = keepptr + clrec->cllen;
cnvlen = keeplen - clrec -> cllen; cnvlen = keeplen - clrec->cllen;
if (len != clrec -> cllen) { if(len != clrec->cllen) {
if (clt2nd != maxclptr) { if(clt2nd != maxclptr) {
free_clall(maxclptr); free_clall(maxclptr);
free_jall(maxjptr); free_jall(maxjptr);
} }
@ -112,37 +103,37 @@ void mk2claus()
save2ln = set2nd(clrec); save2ln = set2nd(clrec);
count++; count++;
len = clrec -> cllen; len = clrec->cllen;
prty2 = 0; prty2 = 0;
} }
if (Termtbl[clrec -> right] & T_SHUUJO) if(Termtbl[clrec->right] & T_SHUUJO)
clrec -> cl2len = (unsigned char)len; clrec->cl2len = (unsigned char)len;
else else
clrec -> cl2len = (unsigned char)save2ln; clrec->cl2len = (unsigned char)save2ln;
if (selcl -> cl2len > clrec -> cl2len) continue; if(selcl->cl2len > clrec->cl2len) continue;
prty = priority(clrec) - prty2; prty = priority(clrec) - prty2;
prty2++; prty2++;
if (selcl -> cl2len == clrec -> cl2len) { if(selcl->cl2len == clrec->cl2len) {
if (clrec -> cllen == nextcllen) { if(clrec->cllen == nextcllen) {
if (selcl -> cllen != nextcllen) if(selcl->cllen != nextcllen)
; ;
else if (prty <= maxprty) else if(prty <= maxprty)
continue; continue;
} }
else if (prty <= maxprty) else if(prty <= maxprty)
continue; continue;
} }
selcl = clrec; selcl = clrec;
maxprty = prty; maxprty = prty;
if (clt2nd == maxclptr) continue; if(clt2nd == maxclptr) continue;
free_clall(clt2nd); free_clall(clt2nd);
free_jall(jrt2nd); free_jall(jrt2nd);
@ -150,14 +141,13 @@ void mk2claus()
clt2nd = maxclptr; clt2nd = maxclptr;
} }
if (clt2nd != maxclptr) { if(clt2nd != maxclptr) {
free_clall(maxclptr); free_clall(maxclptr);
maxclptr = NULL; maxclptr = NULL;
free_jall(maxjptr); free_jall(maxjptr);
maxjptr = NULL; maxjptr = NULL;
} }
cnvstart = keepptr; cnvstart = keepptr;
cnvlen = keeplen; cnvlen = keeplen;
} }

View file

@ -27,35 +27,24 @@
* *
*/ */
/*
* $SonyRCSfile: mkbunset.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:02:02 $
*
* $Id$
*/
#include <sys/types.h> #include <sys/types.h>
#include <string.h> #include <string.h>
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "sj_hinsi.h" #include "sj_hinshi.h"
#include "kanakan.h" #include "kanakan.h"
int terminate(); int terminate();
void setclrec(), srchfzk(); void setclrec(), srchfzk();
void void mkbunsetsu(void) {
mkbunsetu(void) JREC* jrec;
{ TypeGram hinshi;
JREC *jrec; unsigned char* cnj;
TypeGram hinsi; CREC crec[4];
unsigned char *cnj; int count;
CREC crec[4]; TypeCnct right;
int count; unsigned char* next;
TypeCnct right; int i;
unsigned char *next;
int i;
fzkcount = 0; fzkcount = 0;
@ -63,18 +52,18 @@ mkbunsetu(void)
jrec = maxjptr; jrec = maxjptr;
while (jrec) { while(jrec) {
if (jrec -> stbofs && (cnj = getstb(jrec -> hinsi))) if(jrec->stbofs && (cnj = getstb(jrec->hinshi)))
hinsi = StbHinsi(cnj + jrec -> stbofs - 1); hinshi = StbHinshi(cnj + jrec->stbofs - 1);
else else
hinsi = jrec -> hinsi; hinshi = jrec->hinshi;
if ((right = Connadr[hinsi]) != '\0') { if((right = Connadr[hinshi]) != '\0') {
gobilen = 0; gobilen = 0;
next = cnvstart + jrec->jlen; next = cnvstart + jrec->jlen;
if (terminate(right, next)) { if(terminate(right, next)) {
fzk_ka_flg = 0; fzk_ka_flg = 0;
setclrec(jrec, next, right); setclrec(jrec, next, right);
} }
@ -82,15 +71,15 @@ mkbunsetu(void)
srchfzk(jrec, next, right, 0); srchfzk(jrec, next, right, 0);
} }
else if ((count = setconj(hinsi, jrec, crec)) != 0) { else if((count = setconj(hinshi, jrec, crec)) != 0) {
for (i = count ; i-- > 0 ; ) { for(i = count; i-- > 0;) {
right = crec[i].right; right = crec[i].right;
gobilen = crec[i].len; gobilen = crec[i].len;
next = cnvstart + jrec->jlen + gobilen; next = cnvstart + jrec->jlen + gobilen;
if (terminate(right, next)) { if(terminate(right, next)) {
fzk_ka_flg = 0; fzk_ka_flg = 0;
setclrec(jrec, next, right); setclrec(jrec, next, right);
} }
@ -99,70 +88,66 @@ mkbunsetu(void)
} }
} }
jrec = jrec -> jsort; jrec = jrec->jsort;
} }
} }
CLREC* CLREC*
argclrec(int len) argclrec(int len) {
{ CLREC* ptr;
CLREC *ptr; CLREC* rec;
CLREC *rec; CLREC* child;
CLREC *child;
rec = alloc_clrec(); rec = alloc_clrec();
if (!rec) { if(!rec) {
if (maxclptr == NULL) return NULL; if(maxclptr == NULL) return NULL;
ptr = NULL; ptr = NULL;
rec = maxclptr; rec = maxclptr;
while ((child = rec -> clsort) != NULL) { while((child = rec->clsort) != NULL) {
ptr = rec; ptr = rec;
rec = child; rec = child;
} }
if (len <= (int) rec -> cllen) return NULL; if(len <= (int)rec->cllen) return NULL;
if (ptr) if(ptr)
ptr -> clsort = NULL; ptr->clsort = NULL;
else else
maxclptr = NULL; maxclptr = NULL;
if (rec -> jnode) (rec -> jnode)--; if(rec->jnode) (rec->jnode)--;
} }
memset((unsigned char*)rec, 0, sizeof(*rec)); memset((unsigned char*)rec, 0, sizeof(*rec));
rec -> cllen = rec -> cl2len = (unsigned char)len; rec->cllen = rec->cl2len = (unsigned char)len;
if (!maxclptr) { if(!maxclptr) {
maxclptr = rec; maxclptr = rec;
return rec; return rec;
} }
ptr = maxclptr; ptr = maxclptr;
if (((int)ptr -> cllen < len) || if(((int)ptr->cllen < len) ||
(((int)ptr -> cllen == len) && (((int)ptr->cllen == len) &&
(ptr -> jnode -> hinsi == TANKANJI))) { (ptr->jnode->hinshi == TANKANJI))) {
rec -> clsort = maxclptr; rec->clsort = maxclptr;
maxclptr = rec; maxclptr = rec;
return rec; return rec;
} }
while ((child = ptr -> clsort) != NULL) { while((child = ptr->clsort) != NULL) {
if ((int)child -> cllen < len || if((int)child->cllen < len ||
((int)child -> cllen == len && ((int)child->cllen == len &&
child->jnode->hinsi == TANKANJI)){ child->jnode->hinshi == TANKANJI)) {
ptr -> clsort = rec; ptr->clsort = rec;
rec -> clsort = child; rec->clsort = child;
return rec; return rec;
} } else
else
ptr = child; ptr = child;
} }
ptr -> clsort = rec; ptr->clsort = rec;
return rec; return rec;
} }

View file

@ -27,32 +27,21 @@
* *
*/ */
/*
* $SonyRCSfile: mkjiritu.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:02:03 $
*
* $Id$
*/
#include <sys/types.h> #include <sys/types.h>
#include <string.h> #include <string.h>
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "kanakan.h" #include "kanakan.h"
int srchhead(); int srchhead();
static void dic_mu(int mode); static void dic_mu(int mode);
static void dic_cl(void); static void dic_cl(void);
void void mkjiritsu(int mode) {
mkjiritu(int mode) unsigned char chkind1;
{ unsigned char chkind2;
unsigned char chkind1; JREC* jrec;
unsigned char chkind2; unsigned char* stb;
JREC *jrec;
unsigned char *stb;
headcode = headlen = 0; headcode = headlen = 0;
@ -60,25 +49,25 @@ mkjiritu(int mode)
chkind1 = Chrtbl[*cnvstart]; chkind1 = Chrtbl[*cnvstart];
if (chkind1 & DICTOP) { if(chkind1 & DICTOP) {
dic_mu(mode); dic_mu(mode);
} }
if (mode & DO_CLSTUDY) dic_cl(); if(mode & DO_CLSTUDY) dic_cl();
srchnum(); srchnum();
if (srchhead() && cnvlen != headlen) { if(srchhead() && cnvlen != headlen) {
cnvstart += headlen; cnvstart += headlen;
cnvlen -= headlen; cnvlen -= headlen;
chkind2 = Chrtbl[*cnvstart]; chkind2 = Chrtbl[*cnvstart];
if (chkind2 & DICTOP) { if(chkind2 & DICTOP) {
dic_mu(mode); dic_mu(mode);
} }
if (headcode == SETTOU_DAI) { if(headcode == SETTOU_DAI) {
srchnum(); srchnum();
} }
@ -86,111 +75,106 @@ mkjiritu(int mode)
cnvlen += headlen; cnvlen += headlen;
} }
for (jrec = maxjptr ; jrec ; jrec = jrec -> jsort) { for(jrec = maxjptr; jrec; jrec = jrec->jsort) {
if ((stb = getstb(jrec -> hinsi)) != NULL) if((stb = getstb(jrec->hinshi)) != NULL)
setubi(jrec, stb); setsubi(jrec, stb);
} }
} }
static void static void
dic_mu(int mode) dic_mu(int mode) {
{ unsigned char* tagp;
unsigned char *tagp; DICTL* dp;
DICTL *dp;
for (dp = dictlist ; dp ; dp = dp -> next) { for(dp = dictlist; dp; dp = dp->next) {
curdict = dp -> dict; curdict = dp->dict;
dicinl = 1; dicinl = 1;
dicsaml = 0; dicsaml = 0;
prevseg = -1; prevseg = -1;
while ((tagp = srchdict(tagp)) != NULL) setjrec(tagp, mode); while((tagp = srchdict(tagp)) != NULL) setjrec(tagp, mode);
} }
} }
JREC* JREC* argjrec(int len, JREC* rec) {
argjrec(int len, JREC* rec) JREC* ptr;
{ JREC* jrec;
JREC *ptr; JREC* child;
JREC *jrec;
JREC *child;
jrec = alloc_jrec(); jrec = alloc_jrec();
if (!jrec) { if(!jrec) {
if (!maxjptr) return NULL; if(!maxjptr) return NULL;
ptr = NULL; ptr = NULL;
jrec = maxjptr; jrec = maxjptr;
while ((child = jrec -> jsort) != NULL) { while((child = jrec->jsort) != NULL) {
ptr = jrec; ptr = jrec;
jrec = child; jrec = child;
} }
if (len <= (int) jrec -> jlen) return NULL; if(len <= (int)jrec->jlen) return NULL;
if (ptr) if(ptr)
ptr -> jsort = NULL; ptr->jsort = NULL;
else else
maxjptr = NULL; maxjptr = NULL;
} }
if (rec) if(rec)
memcpy((unsigned char*)rec, (unsigned char*)jrec, sizeof(JREC)); memcpy((unsigned char*)rec, (unsigned char*)jrec, sizeof(JREC));
else else
memset((unsigned char*)jrec, 0, sizeof(*jrec)); memset((unsigned char*)jrec, 0, sizeof(*jrec));
jrec -> jlen = (unsigned char)len; jrec->jlen = (unsigned char)len;
if (!maxjptr) { if(!maxjptr) {
maxjptr = jrec; maxjptr = jrec;
jrec -> jsort = NULL; jrec->jsort = NULL;
return jrec; return jrec;
} }
ptr = maxjptr; ptr = maxjptr;
if ((int)ptr -> jlen < len) { if((int)ptr->jlen < len) {
jrec -> jsort = maxjptr; jrec->jsort = maxjptr;
maxjptr = jrec; maxjptr = jrec;
return jrec; return jrec;
} }
while ((child = ptr -> jsort) != NULL) { while((child = ptr->jsort) != NULL) {
if ((int)child -> jlen < len) break; if((int)child->jlen < len) break;
ptr = child; ptr = child;
} }
ptr -> jsort = jrec; ptr->jsort = jrec;
jrec -> jsort = child; jrec->jsort = child;
return jrec; return jrec;
} }
static void static void
dic_cl(void) dic_cl(void) {
{ unsigned char* p;
unsigned char *p; unsigned short pos;
unsigned short pos; int len;
int len; int cmp;
int cmp;
if (!StudyExist()) return; if(!StudyExist()) return;
if ((pos = ClStudyIdx[(short) *cnvstart / ClStudyStep]) != (unsigned short)-1) { if((pos = ClStudyIdx[(short)*cnvstart / ClStudyStep]) != (unsigned short)-1) {
for (p = ClStudyDict + pos ; !iseocl(p) ; p = ClNextTag(p)) { for(p = ClStudyDict + pos; !iseocl(p); p = ClNextTag(p)) {
cmp = strncmp(cnvstart, (unsigned char*)ClYomiPos(p), cmp = strncmp(cnvstart, (unsigned char*)ClYomiPos(p),
len = ClYomiLen(p)); len = ClYomiLen(p));
if (cmp == MATCH) { if(cmp == MATCH) {
if (!isdpnd(*(cnvstart + len))) { if(!isdpnd(*(cnvstart + len))) {
setcrec(p); setcrec(p);
} }
} }
else if (cmp == OVER) else if(cmp == OVER)
break; break;
} }
} }
} }

367
mkkouho.c
View file

@ -27,61 +27,42 @@
* *
*/ */
/*
* $SonyRCSfile: mkkouho.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:02:04 $
*
* $Id$
*/
#include "sj_euc.h" #include "sj_euc.h"
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "sj_hinsi.h" #include "sj_hinshi.h"
#include "sj_suuji.h" #include "sj_suuji.h"
#include "sj_dict.h" #include "sj_dict.h"
#include "kanakan.h" #include "kanakan.h"
static void getkhtbl(CLREC* clrec);
static void getkhtbl(CLREC* clrec); static void cl_kanji(JREC* jrec, CLREC* clrec);
static void cl_kanji(JREC* jrec, CLREC* clrec);
static unsigned char* makekan(unsigned char* s, unsigned char* d, int flg); static unsigned char* makekan(unsigned char* s, unsigned char* d, int flg);
static int diffknj(JREC* jrec, unsigned char* ptr, int num); static int diffknj(JREC* jrec, unsigned char* ptr, int num);
static void cl_numcmn(JREC* jrec, CLREC* clrec); static void cl_numcmn(JREC* jrec, CLREC* clrec);
void
mkkouho(void)
{
CLREC *clrec;
int keeplen;
void mkkouho(void) {
CLREC* clrec;
int keeplen;
khcount = nkhcount = 0; khcount = nkhcount = 0;
keeplen = clt1st->cllen;
keeplen = clt1st -> cllen;
clrec = clt1st; clrec = clt1st;
do { do {
getkhtbl(clrec); getkhtbl(clrec);
clrec = clrec -> clsort; clrec = clrec->clsort;
} while (clrec && (keeplen == clrec -> cllen)); } while(clrec && (keeplen == clrec->cllen));
} }
static void static void
getkhtbl(CLREC* clrec) getkhtbl(CLREC* clrec) {
{ JREC* jrec;
JREC *jrec;
jrec = clrec -> jnode; jrec = clrec->jnode;
switch (jrec -> class) { switch(jrec->class) {
case C_DICT: case C_DICT:
cl_kanji(jrec, clrec); cl_kanji(jrec, clrec);
break; break;
@ -99,7 +80,7 @@ getkhtbl(CLREC* clrec)
cl_numcmn(jrec, clrec); cl_numcmn(jrec, clrec);
break; break;
case C_BUNSETU: case C_BUNSETSU:
break; break;
@ -110,166 +91,156 @@ getkhtbl(CLREC* clrec)
} }
} }
static void static void
cl_kanji(JREC* jrec, CLREC* clrec) cl_kanji(JREC* jrec, CLREC* clrec) {
{ unsigned char* ptr;
unsigned char *ptr; int kcount = khcount;
int kcount = khcount;
if(seldict(jrec->dicid)) {
if (seldict(jrec -> dicid)) { (*curdict->getdic)(curdict, jrec->jseg);
(*curdict->getdic)(curdict, jrec -> jseg);
ptr = dicbuf + jrec->jofsst + 1; ptr = dicbuf + jrec->jofsst + 1;
get_askknj(); get_askknj();
while(*ptr != HinshiBlkTerm) {
while (*ptr != HinsiBlkTerm) { if(diffknj(jrec, ptr, kcount)) {
if (diffknj(jrec, ptr, kcount)) {
setkouho(clrec, (TypeDicOfs)(ptr - dicbuf), 0); setkouho(clrec, (TypeDicOfs)(ptr - dicbuf), 0);
} }
ptr = skipkstr(ptr); ptr = skipkstr(ptr);
} }
} } else {
else {
setkouho(clrec, (TypeDicOfs)1, 0); setkouho(clrec, (TypeDicOfs)1, 0);
} }
} }
unsigned char* unsigned char*
makekan_none(unsigned char* s, unsigned char* d, int flg) makekan_none(unsigned char* s, unsigned char* d, int flg) {
{
return d; return d;
} }
unsigned char* unsigned char*
makekan_1byte(unsigned char* s, unsigned char* d, int flg) makekan_1byte(unsigned char* s, unsigned char* d, int flg) {
{ if((*s & KanjiModeMask) == ZenHiraAsshuku)
if ((*s & KanjiModeMask) == ZenHiraAssyuku) *d++ = 0x10 | (*s & KnjAsshukuMask);
*d++ = 0x10 | (*s & KnjAssyukuMask);
else else
*d++ = 0x90 | (*s & KnjAssyukuMask); *d++ = 0x90 | (*s & KnjAsshukuMask);
if (flg) *d++ = KanjiStrEnd; if(flg) *d++ = KanjiStrEnd;
return d; return d;
} }
unsigned char* unsigned char*
makekan_knj(unsigned char* s, unsigned char* d, int flg) makekan_knj(unsigned char* s, unsigned char* d, int flg) {
{
return makekan(askknj[*s & KnjAssyukuMask], d, flg); return makekan(askknj[*s & KnjAsshukuMask], d, flg);
} }
unsigned char* unsigned char*
makekan_ofs(unsigned char* s, unsigned char* d, int flg) makekan_ofs(unsigned char* s, unsigned char* d, int flg) {
{
return makekan(dicbuf + ((*s & KanjiCodeMask) << 8) + *(s + 1), return makekan(dicbuf + ((*s & KanjiCodeMask) << 8) + *(s + 1),
d, flg); d, flg);
} }
unsigned char* unsigned char*
makekan_norm(unsigned char* s, unsigned char* d, int flg) makekan_norm(unsigned char* s, unsigned char* d, int flg) {
{
unsigned char c; unsigned char c;
if (*s != 0) { if(*s != 0) {
c = s[1]; c = s[1];
if (c & 0x80) if(c & 0x80)
*d++ = SS3; *d++ = SS3;
*d++ = *s | 0x80; *d++ = *s | 0x80;
*d++ = c | 0x80; *d++ = c | 0x80;
} else { } else {
*d++ = *s; *d++ = *s;
} }
if (flg) *d++ = KanjiStrEnd; if(flg) *d++ = KanjiStrEnd;
return d; return d;
} }
unsigned char* unsigned char*
makekan_ascii(unsigned char* s, unsigned char* d, int flg) makekan_ascii(unsigned char* s, unsigned char* d, int flg) {
{
unsigned char c; unsigned char c;
c = s[1]; c = s[1];
if (c & 0x80) if(c & 0x80)
*d++ = SS2; *d++ = SS2;
*d++ = c; *d++ = c;
if (flg) *d++ = KanjiStrEnd; if(flg) *d++ = KanjiStrEnd;
return d; return d;
} }
static unsigned char* static unsigned char*
makekan(unsigned char* s, unsigned char* d, int flg) makekan(unsigned char* s, unsigned char* d, int flg) {
{
int csize; int csize;
for ( ; ; ) { for(;;) {
csize = codesize(*s); csize = codesize(*s);
if (s[csize] == KanjiStrEnd) { if(s[csize] == KanjiStrEnd) {
switch(*s & KanjiModeMask) { switch(*s & KanjiModeMask) {
case ZenHiraAssyuku: case ZenHiraAsshuku:
d = makekan_1byte(s, d, flg); break; d = makekan_1byte(s, d, flg);
break;
case ZenKataAssyuku: case ZenKataAsshuku:
d = makekan_1byte(s, d, flg); break; d = makekan_1byte(s, d, flg);
break;
case OffsetAssyuku: case OffsetAsshuku:
d = makekan_ofs(s, d, flg); break; d = makekan_ofs(s, d, flg);
break;
case AiAttribute: case AiAttribute:
d = makekan_none(s, d, flg); break; d = makekan_none(s, d, flg);
break;
case LeadingHankaku: case LeadingHankaku:
d = makekan_ascii(s, d, flg); break; d = makekan_ascii(s, d, flg);
break;
case KanjiAssyuku: case KanjiAsshuku:
d = makekan_knj(s, d, flg); break; d = makekan_knj(s, d, flg);
break;
default: default:
d = makekan_norm(s, d, flg); d = makekan_norm(s, d, flg);
} }
break; break;
} } else
else
switch(*s & KanjiModeMask) { switch(*s & KanjiModeMask) {
case ZenHiraAssyuku: case ZenHiraAsshuku:
d = makekan_1byte(s, d, FALSE); break; d = makekan_1byte(s, d, FALSE);
break;
case ZenKataAssyuku: case ZenKataAsshuku:
d = makekan_1byte(s, d, FALSE); break; d = makekan_1byte(s, d, FALSE);
break;
case OffsetAssyuku: case OffsetAsshuku:
d = makekan_ofs(s, d, FALSE); break; d = makekan_ofs(s, d, FALSE);
break;
case AiAttribute: case AiAttribute:
d = makekan_none(s, d, FALSE); break; d = makekan_none(s, d, FALSE);
break;
case LeadingHankaku: case LeadingHankaku:
d = makekan_ascii(s, d, FALSE); break; d = makekan_ascii(s, d, FALSE);
break;
case KanjiAssyuku: case KanjiAsshuku:
d = makekan_knj(s, d, FALSE); break; d = makekan_knj(s, d, FALSE);
break;
default: default:
d = makekan_norm(s, d, FALSE); d = makekan_norm(s, d, FALSE);
} }
@ -279,133 +250,124 @@ makekan(unsigned char* s, unsigned char* d, int flg)
return d; return d;
} }
#define PEND 2
#define PEND 2 #define QEND 1
#define QEND 1
static int static int
sameknj(unsigned char* p, int plen, unsigned char* q, int qlen) sameknj(unsigned char* p, int plen, unsigned char* q, int qlen) {
{ int i;
int i; int j;
int j; int endf = 0;
int endf = 0; int brkf;
int brkf;
do { do {
if ((i = euc_codesize(*p)) != euc_codesize(*q)) return FALSE; if((i = euc_codesize(*p)) != euc_codesize(*q)) return FALSE;
brkf = 0; brkf = 0;
for (j = 0; j < i; j++) { for(j = 0; j < i; j++) {
if (p[j] != q[j] ) { if(p[j] != q[j]) {
brkf = 1; brkf = 1;
break; break;
} }
} }
if (brkf) break; if(brkf) break;
if (p[i] == KanjiStrEnd) endf += PEND; if(p[i] == KanjiStrEnd) endf += PEND;
if (q[i] == KanjiStrEnd) endf += QEND; if(q[i] == KanjiStrEnd) endf += QEND;
p += i; p += i;
q += i; q += i;
} while (!endf); } while(!endf);
switch (endf) { switch(endf) {
case (PEND | QEND): case(PEND | QEND):
if (plen == qlen) return TRUE; if(plen == qlen) return TRUE;
break; break;
case PEND: case PEND:
i = plen; i = plen;
plen = qlen; plen = qlen;
qlen = i; qlen = i;
p = q; p = q;
case QEND: case QEND:
if (p[euc_codesize(*p)] != KanjiStrEnd) break; if(p[euc_codesize(*p)] != KanjiStrEnd) break;
if ((*p & KanjiModeMask) != 0x10 ) break; if((*p & KanjiModeMask) != 0x10) break;
if (qlen != plen - (*p & KanjiCodeMask) - 1) break; if(qlen != plen - (*p & KanjiCodeMask) - 1) break;
return TRUE; return TRUE;
default: default:
if (q[euc_codesize(*q)] != KanjiStrEnd) break; if(q[euc_codesize(*q)] != KanjiStrEnd) break;
if (p[euc_codesize(*p)] != KanjiStrEnd) break; if(p[euc_codesize(*p)] != KanjiStrEnd) break;
if ((*q & KanjiModeMask) != 0x10 ) break; if((*q & KanjiModeMask) != 0x10) break;
if ((*p & KanjiModeMask) != 0x10 ) break; if((*p & KanjiModeMask) != 0x10) break;
if (plen - (*p & KanjiCodeMask) != qlen - (*q & KanjiCodeMask)) if(plen - (*p & KanjiCodeMask) != qlen - (*q & KanjiCodeMask))
break; break;
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
} }
#undef PEND #undef PEND
#undef QEND #undef QEND
static int static int
diffknj(JREC* jrec, unsigned char* ptr, int num) diffknj(JREC* jrec, unsigned char* ptr, int num) {
{ KHREC* kptr;
KHREC *kptr; JREC* jptr;
JREC *jptr; int i;
int i; unsigned char kbuf1[MaxWdKanjiLen];
unsigned char kbuf1[MaxWdKanjiLen]; unsigned char kbuf2[MaxWdKanjiLen];
unsigned char kbuf2[MaxWdKanjiLen];
if (jrec -> hinsi == TANKANJI) return TRUE; if(jrec->hinshi == TANKANJI) return TRUE;
makekan(ptr, kbuf1, TRUE); makekan(ptr, kbuf1, TRUE);
for (i = 0, kptr = kouhotbl ; i < num ; i++, kptr++) { for(i = 0, kptr = kouhotbl; i < num; i++, kptr++) {
if ((jptr = kptr -> clrec -> jnode) == jrec) if((jptr = kptr->clrec->jnode) == jrec)
return FALSE; return FALSE;
if (jptr -> hinsi == TANKANJI) continue; if(jptr->hinshi == TANKANJI) continue;
if (jptr -> class != jrec -> class) continue; if(jptr->class != jrec->class) continue;
if (jptr -> dicid != jrec -> dicid) continue; if(jptr->dicid != jrec->dicid) continue;
if (jptr -> jseg != jrec -> jseg) continue; if(jptr->jseg != jrec->jseg) continue;
if (jptr -> sttofs != jrec -> sttofs) continue; if(jptr->sttofs != jrec->sttofs) continue;
if (jptr -> stbofs != jrec -> stbofs) continue; if(jptr->stbofs != jrec->stbofs) continue;
makekan(dicbuf + kptr -> offs, kbuf2, TRUE); makekan(dicbuf + kptr->offs, kbuf2, TRUE);
if (sameknj(kbuf1, jrec -> jlen, kbuf2, jptr -> jlen)) if(sameknj(kbuf1, jrec->jlen, kbuf2, jptr->jlen))
return FALSE; return FALSE;
} }
return TRUE; return TRUE;
} }
static int static int
chrck_numtbl(unsigned short flg, unsigned short cond) chrck_numtbl(unsigned short flg, unsigned short cond) {
{ unsigned short must;
unsigned short must;
if ((cond = SelNumCond(cond)) != 0) { if((cond = SelNumCond(cond)) != 0) {
if ((must = (cond & SelNumMust)) != 0) { if((must = (cond & SelNumMust)) != 0) {
if ((flg & must) != must) return FALSE; if((flg & must) != must) return FALSE;
cond &= ~must; cond &= ~must;
} }
if (cond && !(cond & flg)) return FALSE; if(cond && !(cond & flg)) return FALSE;
} }
return TRUE; return TRUE;
} }
int sel_sjmode(JREC* jrec) {
int
sel_sjmode(JREC* jrec)
{
unsigned short i; unsigned short i;
unsigned short *p; unsigned short* p;
unsigned short *q; unsigned short* q;
switch (jrec -> class) { switch(jrec->class) {
case C_N_ARABIA: case C_N_ARABIA:
case C_N_ARACMA: case C_N_ARACMA:
case C_N_KAZU: case C_N_KAZU:
@ -423,55 +385,45 @@ sel_sjmode(JREC* jrec)
return SelArb; return SelArb;
} }
while((i = *p++) != SelNumTerm) {
while ((i = *p++) != SelNumTerm) { if(chrck_numtbl(jrec->flags, i)) break;
if (chrck_numtbl(jrec -> flags, i)) break;
} }
if (i == SelNumTerm) i = *q; if(i == SelNumTerm) i = *q;
return SelNumFunc(i); return SelNumFunc(i);
} }
static void static void
cl_numcmn(JREC* jrec, CLREC* clrec) cl_numcmn(JREC* jrec, CLREC* clrec) {
{ unsigned char* p;
unsigned char *p; int i;
int i;
unsigned short j; unsigned short j;
unsigned short *tbl; unsigned short* tbl;
p = cnvstart; p = cnvstart;
if ((i = jrec -> sttofs) == SETTOU_DAI) if((i = jrec->sttofs) == SETTOU_DAI)
p += SttYomiLen(Settou_ptr(i)); p += SttYomiLen(Settou_ptr(i));
else if (i == SETTOU_KIGOU) else if(i == SETTOU_KIGOU)
p++; p++;
if(jrec->jofsst) {
if (jrec -> jofsst) {
i = sel_sjmode(jrec); i = sel_sjmode(jrec);
if(seldict(jrec->dicid)) {
if (seldict(jrec -> dicid)) { (*curdict->getdic)(curdict, jrec->jseg);
(*curdict->getdic)(curdict, jrec -> jseg);
p = dicbuf + jrec->jofsst + 1; p = dicbuf + jrec->jofsst + 1;
while(*p != HinshiBlkTerm) {
while (*p != HinsiBlkTerm) {
setkouho(clrec, (TypeDicOfs)(p - dicbuf), i); setkouho(clrec, (TypeDicOfs)(p - dicbuf), i);
p = skipkstr(p); p = skipkstr(p);
} }
} } else {
else {
setkouho(clrec, (TypeDicOfs)1, i); setkouho(clrec, (TypeDicOfs)1, i);
} }
@ -480,10 +432,9 @@ cl_numcmn(JREC* jrec, CLREC* clrec)
else { else {
tbl = Selsjadrs(jrec->class - C_N_ARABIA); tbl = Selsjadrs(jrec->class - C_N_ARABIA);
while ((j = *tbl++) != SelNumTerm) { while((j = *tbl++) != SelNumTerm) {
if (!chrck_numtbl(jrec -> flags, j)) continue;
if(!chrck_numtbl(jrec->flags, j)) continue;
setkouho(clrec, (TypeDicOfs)0, (int)SelNumFunc(j)); setkouho(clrec, (TypeDicOfs)0, (int)SelNumFunc(j));
} }

View file

@ -27,53 +27,41 @@
* *
*/ */
/*
* $SonyRCSfile: mknumber.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:02:05 $
*
* $Id$
*/
#include <sys/types.h> #include <sys/types.h>
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "sj_yomi.h" #include "sj_yomi.h"
#include "sj_suuji.h" #include "sj_suuji.h"
#include "kanakan.h" #include "kanakan.h"
static int static int
word2char(unsigned short wd, unsigned char* tbl, int keta, int flg) word2char(unsigned short wd, unsigned char* tbl, int keta, int flg) {
{ int mask;
int mask; int num;
int num; unsigned char* src;
unsigned char* src;
for (mask = 0x1000 ; mask ; mask >>= 4) { for(mask = 0x1000; mask; mask >>= 4) {
switch (num = (unsigned int)wd / mask) { switch(num = (unsigned int)wd / mask) {
case 0: case 0:
break; break;
case _Num0: case _Num0:
if (!flg) break; if(!flg) break;
default: default:
src = tbl + (num - _Num0) * 2; src = tbl + (num - _Num0) * 2;
*kanjitmp++ = *src++; *kanjitmp++ = *src++;
*kanjitmp++ = *src; *kanjitmp++ = *src;
flg = TRUE; flg = TRUE;
if (keta && !(keta % 3)) { if(keta && !(keta % 3)) {
*kanjitmp++ = CommaHigh; *kanjitmp++ = CommaHigh;
*kanjitmp++ = CommaLow; *kanjitmp++ = CommaLow;
} }
} }
if (keta) keta--; if(keta) keta--;
wd &= (mask - 1); wd &= (mask - 1);
} }
@ -81,190 +69,139 @@ word2char(unsigned short wd, unsigned char* tbl, int keta, int flg)
return flg; return flg;
} }
static void static void
words2num(unsigned short* wd, unsigned char* tbl, int flgc) words2num(unsigned short* wd, unsigned char* tbl, int flgc) {
{ int i;
int i; int keta;
int keta; int flg;
int flg; unsigned char* kp = kanjitmp;
unsigned char *kp = kanjitmp;
if (flgc) { if(flgc) {
keta = NumKetaLength - 1; keta = NumKetaLength - 1;
flg = FALSE; flg = FALSE;
} } else {
else {
keta = 0; keta = 0;
flg = TRUE; flg = TRUE;
} }
for (i = NumWordBuf ; i-- > 0 ; ) { for(i = NumWordBuf; i-- > 0;) {
flg = word2char(*(wd + i), tbl, keta, flg); flg = word2char(*(wd + i), tbl, keta, flg);
if (keta) keta -= 4; if(keta) keta -= 4;
} }
if(kp == kanjitmp) {
if (kp == kanjitmp) {
*kanjitmp++ = *tbl++; *kanjitmp++ = *tbl++;
*kanjitmp++ = *tbl; *kanjitmp++ = *tbl;
} }
} }
void num_type00(unsigned char* s1, unsigned char* s2, JREC* jrec) {
unsigned short num[NumWordBuf];
void setwdnum(s1, (int)jrec->numlen, num);
num_type00(unsigned char* s1, unsigned char* s2, JREC* jrec)
{
unsigned short num[NumWordBuf];
setwdnum(s1, (int)jrec -> numlen, num);
words2num(num, Num1tbl, FALSE); words2num(num, Num1tbl, FALSE);
} }
void num_type01(unsigned char* s1, unsigned char* s2, JREC* jrec) {
unsigned short num[NumWordBuf];
void setwdnum(s1, (int)jrec->numlen, num);
num_type01(unsigned char* s1, unsigned char* s2, JREC* jrec)
{
unsigned short num[NumWordBuf];
setwdnum(s1, (int)jrec -> numlen, num);
words2num(num, Num1tbl, FALSE); words2num(num, Num1tbl, FALSE);
} }
void num_type02(unsigned char* s1, unsigned char* s2, JREC* jrec) {
unsigned short num[NumWordBuf];
void setwdnum(s1, (int)jrec->numlen, num);
num_type02(unsigned char* s1, unsigned char* s2, JREC* jrec)
{
unsigned short num[NumWordBuf];
setwdnum(s1, (int)jrec -> numlen, num);
words2num(num, Num1tbl, TRUE); words2num(num, Num1tbl, TRUE);
} }
void num_type03(unsigned char* s1, unsigned char* s2, JREC* jrec) {
unsigned short num[NumWordBuf];
void setwdnum(s1, (int)jrec->numlen, num);
num_type03(unsigned char* s1, unsigned char* s2, JREC* jrec)
{
unsigned short num[NumWordBuf];
setwdnum(s1, (int)jrec -> numlen, num);
words2num(num, Num2tbl, FALSE); words2num(num, Num2tbl, FALSE);
} }
void num_type04(unsigned char* s1, unsigned char* s2, JREC* jrec) {
unsigned short num[NumWordBuf];
void setwdnum(s1, (int)jrec->numlen, num);
num_type04(unsigned char* s1, unsigned char* s2, JREC* jrec)
{
unsigned short num[NumWordBuf];
setwdnum(s1, (int)jrec -> numlen, num);
words2num(num, Num2tbl, FALSE); words2num(num, Num2tbl, FALSE);
} }
void num_type05(unsigned char* s1, unsigned char* s2, JREC* jrec) {
unsigned short num[NumWordBuf];
void setwdnum(s1, (int)jrec->numlen, num);
num_type05(unsigned char* s1, unsigned char* s2, JREC* jrec)
{
unsigned short num[NumWordBuf];
setwdnum(s1, (int)jrec -> numlen, num);
words2num(num, Num2tbl, TRUE); words2num(num, Num2tbl, TRUE);
} }
void num_type06(unsigned char* s1, unsigned char* s2, JREC* jrec) {
unsigned short num[NumWordBuf];
void setwdnum(s1, (int)jrec->numlen, num);
num_type06(unsigned char* s1, unsigned char* s2, JREC* jrec)
{
unsigned short num[NumWordBuf];
setwdnum(s1, (int)jrec -> numlen, num);
words2num(num, Num3tbl, FALSE); words2num(num, Num3tbl, FALSE);
} }
void num_type07(unsigned char* s1, unsigned char* s2, JREC* jrec) {
unsigned short num[NumWordBuf];
void setwdnum(s1, (int)jrec->numlen, num);
num_type07(unsigned char* s1, unsigned char* s2, JREC* jrec)
{
unsigned short num[NumWordBuf];
setwdnum(s1, (int)jrec -> numlen, num);
words2num(num, Num3tbl, FALSE); words2num(num, Num3tbl, FALSE);
} }
static void static void
kan_num(unsigned short* wd, unsigned char* tbl1, unsigned char* tbl2) kan_num(unsigned short* wd, unsigned char* tbl1, unsigned char* tbl2) {
{ int ii;
int ii; unsigned short tmp;
unsigned short tmp; int mask;
int mask; int num;
int num; int flg;
int flg; unsigned char* kurai1;
unsigned char* kurai1; unsigned char* kurai2;
unsigned char* kurai2; unsigned char* src;
unsigned char* src; unsigned char* keep = kanjitmp;
unsigned char* keep = kanjitmp;
kurai2 = Num6tbl - 2; kurai2 = Num6tbl - 2;
mask = 0; mask = 0;
wd += NumWordBuf - 1; wd += NumWordBuf - 1;
flg = FALSE; flg = FALSE;
for(ii = NumKetaLength; ii-- > 0;) {
for (ii = NumKetaLength ; ii-- > 0 ; ) { if(!mask) {
if (!mask) { if(flg) {
if (flg) {
*kanjitmp++ = *kurai2++; *kanjitmp++ = *kurai2++;
*kanjitmp++ = *kurai2++; *kanjitmp++ = *kurai2++;
} } else
else
kurai2 += 2; kurai2 += 2;
mask = 0x1000; mask = 0x1000;
tmp = *wd--; tmp = *wd--;
flg = FALSE; flg = FALSE;
kurai1 = tbl2; kurai1 = tbl2;
} }
if((num = (unsigned int)tmp / mask) > _Num0) {
if ((num = (unsigned int)tmp / mask) > _Num0) { if((num != _Num1) || !*kurai1) {
src = tbl1 + (num - _Num0) * 2;
if ((num != _Num1) || !*kurai1) {
src = tbl1 + (num - _Num0) * 2;
*kanjitmp++ = *src++; *kanjitmp++ = *src++;
*kanjitmp++ = *src; *kanjitmp++ = *src;
} }
if(*kurai1) {
if (*kurai1) {
*kanjitmp++ = *kurai1++; *kanjitmp++ = *kurai1++;
*kanjitmp++ = *kurai1++; *kanjitmp++ = *kurai1++;
} }
@ -274,54 +211,38 @@ kan_num(unsigned short* wd, unsigned char* tbl1, unsigned char* tbl2)
else else
kurai1 += 2; kurai1 += 2;
tmp &= (mask - 1); tmp &= (mask - 1);
mask >>= 4; mask >>= 4;
} }
if(kanjitmp == keep) {
if (kanjitmp == keep) {
*kanjitmp++ = *tbl1++; *kanjitmp++ = *tbl1++;
*kanjitmp++ = *tbl1; *kanjitmp++ = *tbl1;
} }
} }
void num_type08(unsigned char* s1, unsigned char* s2, JREC* jrec) {
unsigned short num[NumWordBuf];
void setwdnum(s1, (int)jrec->numlen, num);
num_type08(unsigned char* s1, unsigned char* s2, JREC* jrec)
{
unsigned short num[NumWordBuf];
setwdnum(s1, (int)jrec -> numlen, num);
kan_num(num, Num2tbl, Num4tbl); kan_num(num, Num2tbl, Num4tbl);
} }
void num_type09(unsigned char* s1, unsigned char* s2, JREC* jrec) {
unsigned short num[NumWordBuf];
void setwdnum(s1, (int)jrec->numlen, num);
num_type09(unsigned char* s1, unsigned char* s2, JREC* jrec)
{
unsigned short num[NumWordBuf];
setwdnum(s1, (int)jrec -> numlen, num);
kan_num(num, Num3tbl, Num5tbl); kan_num(num, Num3tbl, Num5tbl);
} }
void num_type10(unsigned char* s1, unsigned char* s2, JREC* jrec) {
int i;
void for(i = jrec->numlen; i > 0; i--) {
num_type10(unsigned char* s1, unsigned char* s2, JREC* jrec)
{
int i;
if(Chrtbl[*s1++] & NUMBER) {
for (i = jrec -> numlen ; i > 0 ; i--) {
if (Chrtbl[*s1++] & NUMBER) {
*kanjitmp++ = *s2++; *kanjitmp++ = *s2++;
*kanjitmp++ = *s2++; *kanjitmp++ = *s2++;
} }
@ -331,25 +252,20 @@ num_type10(unsigned char* s1, unsigned char* s2, JREC* jrec)
} }
} }
void num_type11(unsigned char* s1, unsigned char* s2, JREC* jrec) {
int i;
int j;
void i = j = jrec->numlen;
num_type11(unsigned char* s1, unsigned char* s2, JREC* jrec) if(!(Chrtbl[*(s1 + j - 4)] & NUMBER)) j -= (j - 1) / 4;
{
int i;
int j;
for(; i > 0; i--) {
i = j = jrec -> numlen; if(Chrtbl[*s1++] & NUMBER) {
if (!(Chrtbl[*(s1 + j - 4)] & NUMBER)) j -= (j - 1) / 4;
for ( ; i > 0 ; i--) {
if (Chrtbl[*s1++] & NUMBER) {
*kanjitmp++ = *s2++; *kanjitmp++ = *s2++;
*kanjitmp++ = *s2++; *kanjitmp++ = *s2++;
if (--j > 0) { if(--j > 0) {
if ((j % 3) == 0) { if((j % 3) == 0) {
*kanjitmp++ = CommaHigh; *kanjitmp++ = CommaHigh;
*kanjitmp++ = CommaLow; *kanjitmp++ = CommaLow;
} }
@ -361,72 +277,56 @@ num_type11(unsigned char* s1, unsigned char* s2, JREC* jrec)
} }
} }
void num_type12(unsigned char* s1, unsigned char* s2, JREC* jrec) {
int i;
int j;
void for(i = jrec->numlen; i > 0; i--) {
num_type12(unsigned char* s1, unsigned char* s2, JREC* jrec)
{
int i;
int j;
if(Chrtbl[j = *s1++] & NUMBER) {
for (i = jrec -> numlen ; i > 0 ; i--) { j = (j - N_0) * 2;
if (Chrtbl[j = *s1++] & NUMBER) {
j = (j - N_0) * 2;
*kanjitmp++ = Num2tbl[j]; *kanjitmp++ = Num2tbl[j];
*kanjitmp++ = Num2tbl[j + 1]; *kanjitmp++ = Num2tbl[j + 1];
} }
} }
} }
static void static void
num_kurai(unsigned char* p, int len, unsigned char* tbl) num_kurai(unsigned char* p, int len, unsigned char* tbl) {
{ int i;
int i; int j;
int j; unsigned char tmp;
unsigned char tmp;
for (i = 0 ; i < len ; i++) { for(i = 0; i < len; i++) {
tmp = *p++; tmp = *p++;
*kanjitmp++ = tbl[j = ((tmp & 0x0f) - _Num0) * 2]; *kanjitmp++ = tbl[j = ((tmp & 0x0f) - _Num0) * 2];
*kanjitmp++ = tbl[j + 1]; *kanjitmp++ = tbl[j + 1];
if ((j = ((tmp >> 4) & 3)) != 0) { if((j = ((tmp >> 4) & 3)) != 0) {
*kanjitmp++ = Num4tbl[j = (3 - j) * 2]; *kanjitmp++ = Num4tbl[j = (3 - j) * 2];
*kanjitmp++ = Num4tbl[j + 1]; *kanjitmp++ = Num4tbl[j + 1];
} }
if ((j = ((tmp >> 6) & 3)) != 0) { if((j = ((tmp >> 6) & 3)) != 0) {
*kanjitmp++ = Num6tbl[j = (3 - j) * 2]; *kanjitmp++ = Num6tbl[j = (3 - j) * 2];
*kanjitmp++ = Num6tbl[j + 1]; *kanjitmp++ = Num6tbl[j + 1];
} }
} }
} }
void num_type13(unsigned char* s1, unsigned char* s2, JREC* jrec) {
unsigned char num[NumKetaLength];
int len;
void len = setucnum(s1, (int)jrec->numlen, num);
num_type13(unsigned char* s1, unsigned char* s2, JREC* jrec)
{
unsigned char num[NumKetaLength];
int len;
len = setucnum(s1, (int)jrec -> numlen, num);
num_kurai(num, len, Num1tbl); num_kurai(num, len, Num1tbl);
} }
void num_type14(unsigned char* s1, unsigned char* s2, JREC* jrec) {
unsigned char num[NumKetaLength];
int len;
void len = setucnum(s1, (int)jrec->numlen, num);
num_type14(unsigned char* s1, unsigned char* s2, JREC* jrec)
{
unsigned char num[NumKetaLength];
int len;
len = setucnum(s1, (int)jrec -> numlen, num);
num_kurai(num, len, Num2tbl); num_kurai(num, len, Num2tbl);
} }

View file

@ -27,22 +27,12 @@
* *
*/ */
/*
* $SonyRCSfile: mvmemd.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:02:05 $
*/
#include "sj_rename.h" #include "sj_rename.h"
#include "sj_typedef.h" #include "sj_typedef.h"
void mvmemd(src, dest, len) void mvmemd(src, dest, len) unsigned char* src;
unsigned char *src; unsigned char* dest;
unsigned char *dest; int len;
int len;
{ {
while (len-- > 0) *(--dest) = *(--src); while(len-- > 0) *(--dest) = *(--src);
} }

View file

@ -27,22 +27,12 @@
* *
*/ */
/*
* $SonyRCSfile: mvmemi.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:02:06 $
*/
#include "sj_rename.h" #include "sj_rename.h"
#include "sj_typedef.h" #include "sj_typedef.h"
void mvmemi(src, dest, len) void mvmemi(src, dest, len) unsigned char* src;
unsigned char *src; unsigned char* dest;
unsigned char *dest; int len;
int len;
{ {
while (len-- > 0) *dest++ = *src++; while(len-- > 0) *dest++ = *src++;
} }

View file

@ -27,76 +27,61 @@
* *
*/ */
/*
* $SonyRCSfile: nmttyslot.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:03:20 $
*/
#include "sj2.h" #include "sj2.h"
#define LINESIZE 128 #define LINESIZE 128
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
static char* getttys();
static char* ttys = "/etc/ttys";
#define NULL 0
nmttyslot(name) char* name;
static char *getttys();
static char *ttys = "/etc/ttys";
#define NULL 0
nmttyslot (name)
char *name;
{ {
char *tp, *p; char *tp, *p;
int s, tf; int s, tf;
tp = name; tp = name;
if ((p = strrchr (tp, '/')) == NULL) if((p = strrchr(tp, '/')) == NULL)
p = tp; p = tp;
else else
p++; p++;
if ((tf = open (ttys, 0)) < 0) if((tf = open(ttys, 0)) < 0)
return(0); return (0);
s = 0; s = 0;
while (tp = getttys (tf)) { while(tp = getttys(tf)) {
s++; s++;
if (strcmp (p, tp) == 0) { if(strcmp(p, tp) == 0) {
close (tf); close(tf);
return (s); return (s);
} }
} }
close (tf); close(tf);
return (0); return (0);
} }
static char * static char*
getttys (f) getttys(f)
int f; int f;
{ {
static char line[LINESIZE]; static char line[LINESIZE];
char *lp; char* lp;
top: top:
for (lp = line ; lp < &line[LINESIZE] ; lp ++) { for(lp = line; lp < &line[LINESIZE]; lp++) {
if (read (f, lp, 1) != 1) if(read(f, lp, 1) != 1)
return (NULL); return (NULL);
if (*lp == '\n') { if(*lp == '\n') {
*lp = '\0'; *lp = '\0';
break; break;
} } else if(*lp == ' ' || *lp == '\t') {
else if (*lp == ' ' || *lp == '\t') {
while (1) { while(1) {
if (read (f, lp, 1) != 1) if(read(f, lp, 1) != 1)
break; break;
if (*lp == '\n') if(*lp == '\n')
break; break;
} }
*lp = '\0'; *lp = '\0';
@ -104,10 +89,9 @@ top:
} }
} }
lp = line; lp = line;
if (*lp == '0' || *lp == '1') if(*lp == '0' || *lp == '1')
lp += 2; lp += 2;
else if (*lp == '#') else if(*lp == '#')
goto top; goto top;
return (lp); return (lp);
} }

139
offset.c
View file

@ -27,15 +27,6 @@
* *
*/ */
/*
* $SonyRCSfile: offset.c,v $
* $SonyRevision: 1.2 $
* $SonyDate: 1994/08/17 01:50:26 $
*/
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@ -43,142 +34,116 @@
#include "sj_struct.h" #include "sj_struct.h"
#include "dicttool.h" #include "dicttool.h"
extern OffsetRec *ofsrec[]; extern OffsetRec* ofsrec[];
extern int ofsrec_num; extern int ofsrec_num;
static OffsetRec* static OffsetRec*
makeoffset(unsigned char* ptr, int len, int ofs) makeoffset(unsigned char* ptr, int len, int ofs) {
{ OffsetRec* orec;
OffsetRec *orec; unsigned char* p;
unsigned char *p;
orec = (OffsetRec*)Malloc(sizeof(OffsetRec));
orec = (OffsetRec *)Malloc(sizeof(OffsetRec)); p = (unsigned char*)Malloc(len);
p = (unsigned char *)Malloc(len);
memcpy(p, ptr, len); memcpy(p, ptr, len);
orec->kptr = p;
orec -> kptr = p; orec->klen = len;
orec -> klen = len; if(ofs)
if (ofs) orec->offset = ofs;
orec -> offset = ofs;
else else
orec -> offset = ofsrec_num + 1; orec->offset = ofsrec_num + 1;
return orec; return orec;
} }
void set_ofsrec(unsigned char* ptr, int len, int ofs) {
OffsetRec* orec;
int low, high, mid;
int i;
void if(ofsrec_num <= 0) {
set_ofsrec(unsigned char* ptr, int len, int ofs) orec = makeoffset(ptr, len, ofs);
{ ofsrec[0] = orec;
OffsetRec *orec;
int low, high, mid;
int i;
if (ofsrec_num <= 0) {
orec = makeoffset(ptr, len, ofs);
ofsrec[0]= orec;
ofsrec_num++; ofsrec_num++;
return; return;
} }
low = 0;
low = 0; high = ofsrec_num - 1; high = ofsrec_num - 1;
while (low <= high) { while(low <= high) {
mid = (low + high) / 2; mid = (low + high) / 2;
i = string_cmp(ofsrec[mid]->kptr, ofsrec[mid]->klen, ptr, len); i = string_cmp(ofsrec[mid]->kptr, ofsrec[mid]->klen, ptr, len);
if (i > 0) if(i > 0)
high = mid - 1; high = mid - 1;
else if (i < 0) else if(i < 0)
low = ++mid; low = ++mid;
else else
break; break;
} }
if(i) {
if (i) { if(ofsrec_num >= MaxOffsetNumber) {
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"); 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); exit(1);
} }
orec = makeoffset(ptr, len, ofs); orec = makeoffset(ptr, len, ofs);
for(i = ofsrec_num; i > mid; i--) ofsrec[i] = ofsrec[i - 1];
for (i = ofsrec_num ; i > mid ; i--) ofsrec[i] = ofsrec[i - 1];
ofsrec[mid] = orec; ofsrec[mid] = orec;
ofsrec_num++; ofsrec_num++;
} }
} }
int isknjexist(unsigned char* knj, int len) {
int low, high, mid;
int i;
int if(ofsrec_num <= 0) return 0;
isknjexist(unsigned char* knj, int len)
{
int low, high, mid;
int i;
low = 0;
if (ofsrec_num <= 0) return 0; high = ofsrec_num - 1;
while(low <= high) {
low = 0; high = ofsrec_num - 1;
while (low <= high) {
mid = (low + high) / 2; mid = (low + high) / 2;
i = string_cmp(ofsrec[mid]->kptr, ofsrec[mid]->klen, knj, len); i = string_cmp(ofsrec[mid]->kptr, ofsrec[mid]->klen, knj, len);
if (i > 0) if(i > 0)
high = mid - 1; high = mid - 1;
else if (i < 0) else if(i < 0)
low = ++mid; low = ++mid;
else else
return ofsrec[mid] -> offset; return ofsrec[mid]->offset;
} }
return 0; return 0;
} }
void clear_ofsrec(void) {
int i;
void for(i = 0; i < ofsrec_num; i++) {
clear_ofsrec(void) Free(ofsrec[i]->kptr);
{
int i;
for (i = 0 ; i < ofsrec_num ; i++) {
Free(ofsrec[i] -> kptr);
Free(ofsrec[i]); Free(ofsrec[i]);
} }
ofsrec_num = 0; ofsrec_num = 0;
} }
OffsetRec* OffsetRec*
real_ofsrec(unsigned char* ptr) real_ofsrec(unsigned char* ptr) {
{ int ofs;
int ofs; int i;
int i; OffsetRec** p;
OffsetRec **p;
ofs = (*ptr++ & KnjAsshukuMask);
ofs <<= 8;
ofs += *ptr;
ofs = (*ptr++ & KnjAssyukuMask); for(i = ofsrec_num, p = ofsrec; i-- > 0; p++)
ofs <<= 8; if((*p)->offset == ofs)
ofs += *ptr;
for (i = ofsrec_num, p = ofsrec ; i-- > 0 ; p++)
if ((*p) -> offset == ofs)
return *p; return *p;
fprintf(stderr, "real_ofsrec() \244\307\260\333\276\357\244\312\276\365\302\326 %x\n", ofs); fprintf(stderr, "real_ofsrec() \244\307\260\333\276\357\244\312\276\365\302\326 %x\n", ofs);
exit(1); exit(1);
} }

289
peepdic.c
View file

@ -27,39 +27,25 @@
* *
*/ */
/*
* $SonyRCSfile: peepdic.c,v $
* $SonyRevision: 1.2 $
* $SonyDate: 1995/07/21 05:22:51 $
*
* $Id$
*/
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "sj_yomi.h" #include "sj_yomi.h"
#include "kanakan.h" #include "kanakan.h"
unsigned char* skiphblk();
unsigned char *skiphblk(); static void add_yomi(void);
static void cd2sjh_chr(unsigned char ch, unsigned char* dst);
static int next_douon(void);
static int next_hinshi(void);
static int next_kanji(void);
static int prev_douon(void);
static int prev_hinshi(void);
static int prev_kanji(void);
static void set_buf(unsigned char* buf);
static void set_idxyomi(void);
static void set_kanji(void);
static void add_yomi (void); int getusr(unsigned char* buf) {
static void cd2sjh_chr (unsigned char ch, unsigned char *dst);
static int next_douon (void);
static int next_hinsi (void);
static int next_kanji (void);
static int prev_douon (void);
static int prev_hinsi (void);
static int prev_kanji (void);
static void set_buf (unsigned char *buf);
static void set_idxyomi (void);
static void set_kanji (void);
int
getusr (unsigned char *buf)
{
int nlen; int nlen;
peepyomi[0] = peepknj[0] = peepgrm = 0; peepyomi[0] = peepknj[0] = peepgrm = 0;
@ -69,12 +55,12 @@ getusr (unsigned char *buf)
peepdptr = segtop(); peepdptr = segtop();
if (segend(peepdptr)) return 0; if(segend(peepdptr)) return 0;
add_yomi(); add_yomi();
nlen = getnlen(peepdptr); nlen = getnlen(peepdptr);
peephptr = peepdptr + DouonBlkSizeNumber + nlen; peephptr = peepdptr + DouonBlkSizeNumber + nlen;
peepgrm = *peephptr; peepgrm = *peephptr;
@ -87,15 +73,11 @@ getusr (unsigned char *buf)
return -1; return -1;
} }
int nextusr(unsigned char* buf) {
int
nextusr (unsigned char *buf)
{
(*curdict->getdic)(curdict, peepidx); (*curdict->getdic)(curdict, peepidx);
get_askknj(); get_askknj();
if (next_kanji()) { if(next_kanji()) {
set_kanji(); set_kanji();
set_buf(buf); set_buf(buf);
return -1; return -1;
@ -104,15 +86,11 @@ nextusr (unsigned char *buf)
return 0; return 0;
} }
int prevusr(unsigned char* buf) {
int
prevusr (unsigned char *buf)
{
(*curdict->getdic)(curdict, peepidx); (*curdict->getdic)(curdict, peepidx);
get_askknj(); get_askknj();
if (prev_kanji()) { if(prev_kanji()) {
set_kanji(); set_kanji();
set_buf(buf); set_buf(buf);
return -1; return -1;
@ -121,32 +99,26 @@ prevusr (unsigned char *buf)
return 0; return 0;
} }
static void
set_kanji(void) {
int len;
len = getkanji(peepyomi, getnlen(peepdptr) + getplen(peepdptr),
static void peepkptr, peepknj);
set_kanji (void)
{
int len;
len = getkanji(peepyomi, getnlen(peepdptr) + getplen(peepdptr),
peepkptr, peepknj);
*(peepknj + len) = 0; *(peepknj + len) = 0;
} }
static void
set_buf(unsigned char* buf) {
unsigned char* p;
int i, csize;
for(p = peepyomi; *p;) *buf++ = *p++;
static void
set_buf (unsigned char *buf)
{
unsigned char *p;
int i, csize;
for (p = peepyomi ; *p ; ) *buf++ = *p++;
*buf++ = 0; *buf++ = 0;
for (p = peepknj ; *p ; ) { for(p = peepknj; *p;) {
csize = euc_codesize(*p); csize = euc_codesize(*p);
for (i = 0; i < csize; i++ ) *buf++ = *p++; for(i = 0; i < csize; i++) *buf++ = *p++;
} }
*buf++ = 0; *buf++ = 0;
@ -154,68 +126,59 @@ set_buf (unsigned char *buf)
*buf++ = 0; *buf++ = 0;
} }
static int
prev_kanji(void) {
static int unsigned char* p1;
prev_kanji (void) unsigned char* p2;
{
unsigned char *p1;
unsigned char *p2;
p1 = peephptr + 1; p1 = peephptr + 1;
if (peepkptr <= p1) return prev_hinsi(); if(peepkptr <= p1) return prev_hinshi();
p2 = peepkptr; p2 = peepkptr;
while (p1 < p2) { while(p1 < p2) {
peepkptr = p1; peepkptr = p1;
p1 = skipkstr(p1); p1 = skipkstr(p1);
} }
return -1; return -1;
} }
static int
prev_hinshi(void) {
static int unsigned char* p1;
prev_hinsi (void) unsigned char* p2;
{ int nlen;
unsigned char *p1;
unsigned char *p2;
int nlen;
nlen = getnlen(peepdptr); nlen = getnlen(peepdptr);
p1 = peepdptr + DouonBlkSizeNumber + nlen; p1 = peepdptr + DouonBlkSizeNumber + nlen;
if (peephptr <= p1) return prev_douon(); if(peephptr <= p1) return prev_douon();
p2 = peephptr; p2 = peephptr;
while (p1 < p2) { while(p1 < p2) {
peephptr = p1; peephptr = p1;
p1 = skiphblk(p1); p1 = skiphblk(p1);
} }
peepgrm = *peephptr; peepgrm = *peephptr;
p1 = peephptr + 1; p1 = peephptr + 1;
while (*p1 != HinsiBlkTerm) { while(*p1 != HinshiBlkTerm) {
peepkptr = p1; peepkptr = p1;
p1 = skipkstr(p1); p1 = skipkstr(p1);
} }
return -1; return -1;
} }
static int
prev_douon(void) {
unsigned char* p1;
unsigned char* p2;
int nlen;
if(peepdptr <= segtop()) {
static int if(peepidx <= DicSegBase) return 0;
prev_douon (void)
{
unsigned char *p1;
unsigned char *p2;
int nlen;
if (peepdptr <= segtop()) {
if (peepidx <= DicSegBase) return 0;
(*curdict->getdic)(curdict, --peepidx); (*curdict->getdic)(curdict, --peepidx);
get_askknj(); get_askknj();
@ -227,9 +190,8 @@ prev_douon (void)
peepdptr = p1; peepdptr = p1;
add_yomi(); add_yomi();
p1 = getntag(p1); p1 = getntag(p1);
} while (!segend(p1)); } while(!segend(p1));
} } else {
else {
set_idxyomi(); set_idxyomi();
p1 = segtop(); p1 = segtop();
@ -238,86 +200,75 @@ prev_douon (void)
peepdptr = p1; peepdptr = p1;
add_yomi(); add_yomi();
p1 = getntag(p1); p1 = getntag(p1);
} while (p1 < p2); } while(p1 < p2);
} }
nlen = getnlen(peepdptr); nlen = getnlen(peepdptr);
p1 = peepdptr + DouonBlkSizeNumber + nlen; p1 = peepdptr + DouonBlkSizeNumber + nlen;
p2 = getntag(peepdptr); p2 = getntag(peepdptr);
do { do {
peephptr = p1; peephptr = p1;
p1 = skiphblk(p1); p1 = skiphblk(p1);
} while (p1 < p2); } while(p1 < p2);
peepgrm = *peephptr; peepgrm = *peephptr;
p1 = peephptr + 1; p1 = peephptr + 1;
do { do {
peepkptr = p1; peepkptr = p1;
p1 = skipkstr(p1); p1 = skipkstr(p1);
} while (*p1 != HinsiBlkTerm); } while(*p1 != HinshiBlkTerm);
return -1; return -1;
} }
static int
next_kanji(void) {
static int unsigned char* p1;
next_kanji (void)
{
unsigned char *p1;
p1 = skipkstr(peepkptr); p1 = skipkstr(peepkptr);
if (*p1 == HinsiBlkTerm) return next_hinsi(); if(*p1 == HinshiBlkTerm) return next_hinshi();
peepkptr = p1; peepkptr = p1;
return -1; return -1;
} }
static int
next_hinshi(void) {
static int unsigned char* p1;
next_hinsi (void)
{
unsigned char *p1;
p1 = skiphblk(peephptr); p1 = skiphblk(peephptr);
if (p1 >= getntag(peepdptr)) return next_douon(); if(p1 >= getntag(peepdptr)) return next_douon();
peephptr = p1; peephptr = p1;
peepgrm = *p1; peepgrm = *p1;
peepkptr = p1 + 1; peepkptr = p1 + 1;
return -1; return -1;
} }
static int
next_douon(void) {
static int unsigned char* p1;
next_douon (void) int nlen;
{
unsigned char *p1;
int nlen;
p1 = getntag(peepdptr); p1 = getntag(peepdptr);
if (segend(p1)) { if(segend(p1)) {
if (peepidx + 1 < curdict->segunit) { if(peepidx + 1 < curdict->segunit) {
(*curdict->getdic)(curdict, ++peepidx); (*curdict->getdic)(curdict, ++peepidx);
get_askknj(); get_askknj();
peepdptr = segtop(); peepdptr = segtop();
set_idxyomi(); set_idxyomi();
} } else
else return 0;
return 0; } else {
}
else {
peepdptr = p1; peepdptr = p1;
} }
add_yomi(); add_yomi();
nlen = getnlen(peepdptr); nlen = getnlen(peepdptr);
peephptr = peepdptr + DouonBlkSizeNumber + nlen; peephptr = peepdptr + DouonBlkSizeNumber + nlen;
peepgrm = *peephptr; peepgrm = *peephptr;
@ -326,16 +277,13 @@ next_douon (void)
return -1; return -1;
} }
static void
set_idxyomi(void) {
unsigned char *p1, *p2;
if((p2 = get_idxptr(peepidx)) != NULL) {
static void
set_idxyomi (void)
{
unsigned char *p1, *p2;
if ((p2 = get_idxptr(peepidx)) != NULL) {
p1 = peepyomi; p1 = peepyomi;
while (*p2) { while(*p2) {
cd2sjh_chr(*p2++, p1); cd2sjh_chr(*p2++, p1);
p1 += 2; p1 += 2;
} }
@ -343,19 +291,16 @@ set_idxyomi (void)
} }
} }
static void
add_yomi(void) {
static void int nlen;
add_yomi (void) unsigned char *p1, *p2;
{
int nlen;
unsigned char *p1, *p2;
nlen = getnlen(peepdptr); nlen = getnlen(peepdptr);
p1 = peepyomi + getplen(peepdptr) * 2; p1 = peepyomi + getplen(peepdptr) * 2;
p2 = peepdptr + DouonBlkSizeNumber; p2 = peepdptr + DouonBlkSizeNumber;
while (nlen--) { while(nlen--) {
cd2sjh_chr(*p2++, p1); cd2sjh_chr(*p2++, p1);
p1 += 2; p1 += 2;
} }
@ -363,50 +308,36 @@ add_yomi (void)
*p1 = 0; *p1 = 0;
} }
static void
cd2sjh_chr(unsigned char ch, unsigned char* dst) {
static void if(ch == _TYOUON) {
cd2sjh_chr (unsigned char ch, unsigned char *dst)
{
if (ch == _TYOUON) {
*dst++ = 0xa1; *dst++ = 0xa1;
*dst++ = 0xbc; *dst++ = 0xbc;
} } else if(ch == _IGETA) {
else if (ch == _IGETA) {
*dst++ = 0xa1; *dst++ = 0xa1;
*dst++ = 0xf4; *dst++ = 0xf4;
} } else if(ch == _ATTO) {
else if (ch == _ATTO) {
*dst++ = 0xa1; *dst++ = 0xa1;
*dst++ = 0xf7; *dst++ = 0xf7;
} } else if(ch == _YUUBIN) {
else if (ch == _YUUBIN) {
*dst++ = 0xa2; *dst++ = 0xa2;
*dst++ = 0xa9; *dst++ = 0xa9;
} } else if(ch < N_0) {
else if (ch < N_0) { } else if(ch <= N_9) {
}
else if (ch <= N_9) {
*dst++ = 0xa3; *dst++ = 0xa3;
*dst++ = ch + 0xa0; *dst++ = ch + 0xa0;
} } else if(ch <= A_Z) {
else if (ch <= A_Z) {
*dst++ = 0xa3; *dst++ = 0xa3;
*dst++ = ch + 0xa7; *dst++ = ch + 0xa7;
} } else if(ch <= A_z) {
else if (ch <= A_z) {
*dst++ = 0xa3; *dst++ = 0xa3;
*dst++ = ch + 0xad; *dst++ = ch + 0xad;
} } else if(ch <= _NN) {
else if (ch <= _NN) {
*dst++ = 0xa4; *dst++ = 0xa4;
*dst++ = ch + 0x53; *dst++ = ch + 0x53;
} } else if(ch <= _XKE) {
else if (ch <= _XKE) {
*dst++ = 0xa5; *dst++ = 0xa5;
*dst++ = ch + 0x53; *dst++ = ch + 0x53;
} } else {
else {
} }
} }

View file

@ -27,39 +27,28 @@
* *
*/ */
/*
* $SonyRCSfile: ph2knj.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:02:09 $
*
* $Id$
*/
#include <string.h> #include <string.h>
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "sj_yomi.h" #include "sj_yomi.h"
#include "kanakan.h" #include "kanakan.h"
int sj2cd_chr();
void mk2claus();
void freework();
void selclrec();
CLREC* free_clst();
JREC* free_jlst();
int sj2cd_chr(); int ph2knj(unsigned char* zyomi, unsigned char* kanji, int knjlen) {
void mk2claus(); unsigned char* ptr;
void freework(); unsigned char* dst;
void selclrec(); int i;
CLREC *free_clst();
JREC *free_jlst();
for(ptr = zyomi, dst = hyomi, i = 0; *ptr;) {
if(i++ >= MaxPhInputLen) {
int ph2knj *kanji = 0;
(unsigned char *zyomi, unsigned char *kanji, int knjlen) return 0;
{ }
unsigned char *ptr;
unsigned char *dst;
int i;
for (ptr = zyomi, dst = hyomi, i = 0 ; *ptr ; ) {
if (i++ >= MaxPhInputLen) { *kanji = 0; return 0; }
ptr += sj2cd_chr(ptr, dst++); ptr += sj2cd_chr(ptr, dst++);
} }
*dst = 0; *dst = 0;
@ -68,21 +57,21 @@ int ph2knj
prevclgrm = 0; prevclgrm = 0;
prevclrow = 0; prevclrow = 0;
khcount = 0; khcount = 0;
nextcllen = 0; nextcllen = 0;
inputyomi = zyomi; inputyomi = zyomi;
cnvstart = ystart = hyomi; cnvstart = ystart = hyomi;
cnvlen = strlen(hyomi); cnvlen = strlen(hyomi);
kanjipos = kanji; kanjipos = kanji;
kanjilen = knjlen; kanjilen = knjlen;
while (cnvlen && kanjilen) { while(cnvlen && kanjilen) {
if (!clt1st) { if(!clt1st) {
mkjiritu(DO_CLSTUDY | DO_IKKATU); mkjiritsu(DO_CLSTUDY | DO_IKKATU);
mkbunsetu(); mkbunsetsu();
if (!maxclptr) wakachi(); if(!maxclptr) wakachi();
jrt1st = maxjptr; jrt1st = maxjptr;
clt1st = maxclptr; clt1st = maxclptr;
} }
@ -91,28 +80,27 @@ int ph2knj
selclrec(); selclrec();
prevclgrm = selcl -> jnode -> hinsi; prevclgrm = selcl->jnode->hinshi;
prevclrow = selcl -> right; prevclrow = selcl->right;
clt1st = free_clst(clt1st, (int)selcl -> cllen); clt1st = free_clst(clt1st, (int)selcl->cllen);
jrt1st = free_jlst(jrt1st); jrt1st = free_jlst(jrt1st);
cnvstart += selcl -> cllen; cnvstart += selcl->cllen;
cnvlen -= selcl -> cllen; cnvlen -= selcl->cllen;
cvtphknj(); cvtphknj();
clt1st = clt2nd; clt1st = clt2nd;
jrt1st = jrt2nd; jrt1st = jrt2nd;
} }
if (!kanjilen) { if(!kanjilen) {
free_clall(clt1st); free_clall(clt1st);
free_jall (jrt1st); free_jall(jrt1st);
} }
*kanjipos = 0; *kanjipos = 0;
return(inputyomi - zyomi); return (inputyomi - zyomi);
} }

View file

@ -27,69 +27,52 @@
* *
*/ */
/*
* $SonyRCSfile: ph_khtbl.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:02:09 $
*
* $Id$
*/
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "kanakan.h" #include "kanakan.h"
static void
ph_setsty(CLREC* clrec) {
JREC* jrec;
TypeDicOfs offset;
unsigned char* ptr;
STDYIN* sptr;
if(!seldict((jrec = clrec->jnode)->dicid)) {
static void if(!khcount)
ph_setsty (CLREC *clrec) ph_setkouho(clrec, (TypeDicOfs)1, (STDYIN*)NULL);
{
JREC *jrec;
TypeDicOfs offset;
unsigned char *ptr;
STDYIN *sptr;
if (!seldict((jrec = clrec -> jnode) -> dicid)) {
if (!khcount)
ph_setkouho(clrec, (TypeDicOfs)1, (STDYIN *)NULL);
return; return;
} }
(*curdict->getdic)(curdict, jrec -> jseg); (*curdict->getdic)(curdict, jrec->jseg);
ptr = dicbuf + jrec->jofsst + 1; ptr = dicbuf + jrec->jofsst + 1;
for ( ; *ptr != HinsiBlkTerm ; ptr = skipkstr(ptr)) { for(; *ptr != HinshiBlkTerm; ptr = skipkstr(ptr)) {
offset = ptr - dicbuf; offset = ptr - dicbuf;
sptr = srchstdy(jrec -> jseg, offset, jrec -> dicid); sptr = srchstdy(jrec->jseg, offset, jrec->dicid);
if (!khcount){ if(!khcount) {
ph_setkouho(clrec, offset, sptr); ph_setkouho(clrec, offset, sptr);
continue; continue;
} }
if (!sptr) continue; if(!sptr) continue;
if (sptr -> styno < kouhotbl[0].styno) { if(sptr->styno < kouhotbl[0].styno) {
ph_setkouho(clrec, offset, sptr); ph_setkouho(clrec, offset, sptr);
} } else if(sptr->styno == kouhotbl->styno) {
else if (sptr -> styno == kouhotbl -> styno) { if(!(kouhotbl[0].ka_fg &&
if (!(kouhotbl[0].ka_fg && sptr->ka_kj == kouhotbl[0].ka_kj)) {
sptr -> ka_kj == kouhotbl[0].ka_kj)) {
ph_setkouho(clrec, offset, sptr); ph_setkouho(clrec, offset, sptr);
} }
} }
} }
} }
int ph_khtbl(CLREC* clrec) {
JREC* jrec;
int flg = FALSE;
switch((jrec = clrec->jnode)->class) {
int
ph_khtbl (CLREC *clrec)
{
JREC *jrec;
int flg = FALSE;
switch((jrec = clrec -> jnode) -> class) {
case C_DICT: case C_DICT:
ph_setsty(clrec); ph_setsty(clrec);
break; break;
@ -104,19 +87,17 @@ ph_khtbl (CLREC *clrec)
case C_N_KAZULONG: case C_N_KAZULONG:
case C_N_KAZULCMA: case C_N_KAZULCMA:
case C_N_SUUJILONG: case C_N_SUUJILONG:
if (jrec -> jofsst) { if(jrec->jofsst) {
ph_setsty(clrec); ph_setsty(clrec);
break; break;
} } else
else
flg = TRUE; flg = TRUE;
case C_BUNSETU: case C_BUNSETSU:
case C_MINASI: case C_MINASI:
case C_WAKACHI: case C_WAKACHI:
if (!khcount) ph_setkouho(clrec, (TypeDicOfs)0, (STDYIN *)0); if(!khcount) ph_setkouho(clrec, (TypeDicOfs)0, (STDYIN*)0);
break; break;
} }
return flg; return flg;
} }

View file

@ -27,136 +27,124 @@
* *
*/ */
/*
* $SonyRCSfile: priority.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:02:10 $
*/
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "sj_hinsi.h" #include "sj_hinshi.h"
#include "sj_right.h" #include "sj_right.h"
#include "sj_prty.h" #include "sj_prty.h"
static int isfukusi(hinsi) static int isfukusi(hinshi)
TypeGram hinsi; TypeGram hinshi;
{ {
if (FUKUSI_1 <= hinsi && hinsi <= FUKUSI_7) if(FUKUSHI_1 <= hinshi && hinshi <= FUKUSHI_7)
return TRUE; return TRUE;
else if (hinsi == MEISI_11 || hinsi == D_MEISI_6) else if(hinshi == MEISHI_11 || hinshi == D_MEISHI_6)
return TRUE; return TRUE;
return FALSE; return FALSE;
} }
static int istaigen(right) static int istaigen(right)
TypeCnct right; TypeCnct right;
{ {
if (right == R_MEISI || right == R_DMEISI || right == R_SMEISI1) if(right == R_MEISHI || right == R_DMEISHI || right == R_SMEISHI1)
return TRUE; return TRUE;
if (right == R_WO_MEISI || right == R_DAIMEISI || right == R_JOSUUSI) if(right == R_WO_MEISHI || right == R_DAIMEISHI || right == R_JOSUUSHI)
return TRUE; return TRUE;
if (right == R_RENYOU1 || (R_RENYOU3 <= right && right <= R_SA5RENYOU4)) if(right == R_RENYOU1 || (R_RENYOU3 <= right && right <= R_SA5RENYOU4))
return TRUE; return TRUE;
return FALSE; return FALSE;
} }
static int taicnt(hinsi1, hinsi2) static int taicnt(hinshi1, hinshi2)
TypeGram hinsi1; TypeGram hinshi1;
TypeGram hinsi2; TypeGram hinshi2;
{ {
if (hinsi2 == TANKANJI) return 0; if(hinshi2 == TANKANJI) return 0;
if (MYOUJI <= hinsi1 && hinsi1 <= KEN_KU) { if(MYOUJI <= hinshi1 && hinshi1 <= KEN_KU) {
if (MEISI_1 <= hinsi2 && hinsi2 <= SETUBI_9) if(MEISHI_1 <= hinshi2 && hinshi2 <= SETSUBI_9)
return Taipri(hinsi1 - MYOUJI, hinsi2); return Taipri(hinshi1 - MYOUJI, hinshi2);
else else
return 3; return 3;
} } else if((MEISHI_1 <= hinshi1 && hinshi1 <= MEISHI_11) ||
else if ((MEISI_1 <= hinsi1 && hinsi1 <= MEISI_11) || hinshi1 == D_MEISHI_2) {
hinsi1 == D_MEISI_2) { if(MEISHI_1 <= hinshi2 && hinshi2 <= SETSUBI_9) {
if (MEISI_1 <= hinsi2 && hinsi2 <= SETUBI_9) { return Taipri(5, hinshi2);
return Taipri(5, hinsi2); } else
}
else
return 5; return 5;
} }
else { else {
if (MEISI_1 <= hinsi2 && hinsi2 <= SETUBI_9) if(MEISHI_1 <= hinshi2 && hinshi2 <= SETSUBI_9)
return Taipri(6, hinsi2); return Taipri(6, hinshi2);
else else
return 4; return 4;
} }
} }
static int sttcnt(hinsi1, hinsi2) static int sttcnt(hinshi1, hinshi2)
TypeGram hinsi1; TypeGram hinshi1;
TypeGram hinsi2; TypeGram hinshi2;
{ {
if (SETTOU_1 <= hinsi1 && hinsi1 <= SETTOU_5) { if(SETTOU_1 <= hinshi1 && hinshi1 <= SETTOU_5) {
if (MEISI_1 <= hinsi2 && hinsi2 <= SUUSI) if(MEISHI_1 <= hinshi2 && hinshi2 <= SUUSHI)
return Sttpri(hinsi1 - SETTOU_1, hinsi2); return Sttpri(hinshi1 - SETTOU_1, hinshi2);
} }
return 4; return 4;
} }
int priority(clrec) int priority(clrec)
CLREC *clrec; CLREC* clrec;
{ {
int prty; int prty;
CLREC *cl2rec; CLREC* cl2rec;
int keeplen; int keeplen;
TypeGram hinsi1; TypeGram hinshi1;
int i; int i;
int prev = 0; int prev = 0;
if (clrec->cllen == clrec->cl2len) return 0xff; if(clrec->cllen == clrec->cl2len) return 0xff;
if (clrec->jnode->class == C_BUNSETU) { if(clrec->jnode->class == C_BUNSETSU) {
prty = Termtbl[clrec->right] & GETPRI; prty = Termtbl[clrec->right] & GETPRI;
return(0xf0 + prty); return (0xf0 + prty);
} }
hinshi1 = clrec->jnode->hinshi;
hinsi1 = clrec->jnode->hinsi; if(prevclrow == R_WO || prevclrow == R_WO_S ||
prevclrow == R_NI1 || prevclrow == R_DRENYOU2) {
if (prevclrow == R_WO || prevclrow == R_WO_S || if(clrec->kubun == K_DOUSHI || isfukusi(hinshi1))
prevclrow == R_NI1 || prevclrow == R_DRENYOU2) {
if (clrec -> kubun == K_DOUSHI || isfukusi(hinsi1))
prev = 5; prev = 5;
} }
else if (istaigen(prevclrow)) { else if(istaigen(prevclrow)) {
if (clrec -> kubun == K_TAIGEN) if(clrec->kubun == K_TAIGEN)
prev = taicnt(prevclgrm, hinsi1); prev = taicnt(prevclgrm, hinshi1);
else else
prev = 0; prev = 0;
} }
else if (prevclrow == R_SETTOU) { else if(prevclrow == R_SETTOU) {
if (clrec -> jnode -> sttofs) if(clrec->jnode->sttofs)
prty = 2; prty = 2;
else else
prty = sttcnt(prevclgrm, hinsi1); prty = sttcnt(prevclgrm, hinshi1);
} }
if(hinshi1 >= SETSUBI_1 && hinshi1 <= SETSUBI_9 && (!prev)) {
if (hinsi1 >= SETUBI_1 && hinsi1 <= SETUBI_9 && (!prev)) {
prty = 1; prty = 1;
goto finish; goto finish;
} }
cl2rec = maxclptr; cl2rec = maxclptr;
keeplen = cl2rec -> cllen; keeplen = cl2rec->cllen;
if (clrec->right == R_WO || clrec->right == R_WO_S || if(clrec->right == R_WO || clrec->right == R_WO_S ||
clrec->right == R_NI1 || clrec->right == R_DRENYOU2) { clrec->right == R_NI1 || clrec->right == R_DRENYOU2) {
while (cl2rec && (int)cl2rec->cllen == keeplen) { while(cl2rec && (int)cl2rec->cllen == keeplen) {
if (cl2rec->kubun == K_DOUSHI) { if(cl2rec->kubun == K_DOUSHI) {
prty = 14; prty = 14;
goto finish; goto finish;
} }
@ -164,42 +152,40 @@ CLREC *clrec;
} }
} }
else if (clrec->right == R_SETTOU) { else if(clrec->right == R_SETTOU) {
prty = 0; prty = 0;
while (cl2rec && (int)cl2rec -> cllen == keeplen) { while(cl2rec && (int)cl2rec->cllen == keeplen) {
if (cl2rec -> jnode -> sttofs ) if(cl2rec->jnode->sttofs)
i = 2; i = 2;
else else
i = sttcnt(hinsi1, cl2rec->jnode->hinsi); i = sttcnt(hinshi1, cl2rec->jnode->hinshi);
if (i > prty) if(i > prty)
prty = i; prty = i;
cl2rec = cl2rec -> clsort; cl2rec = cl2rec->clsort;
} }
goto finish; goto finish;
} }
else if (istaigen(clrec->right)) { else if(istaigen(clrec->right)) {
prty = 0; prty = 0;
while (cl2rec && (int)cl2rec->cllen == keeplen) { while(cl2rec && (int)cl2rec->cllen == keeplen) {
i = taicnt(hinsi1, cl2rec->jnode->hinsi); i = taicnt(hinshi1, cl2rec->jnode->hinshi);
if (i > prty) if(i > prty)
prty = i; prty = i;
cl2rec = cl2rec->clsort; cl2rec = cl2rec->clsort;
} }
if (clrec->jnode->stbofs) { if(clrec->jnode->stbofs) {
prty -= 3; prty -= 3;
} }
goto finish; goto finish;
} }
prty = Termtbl[clrec->right]; prty = Termtbl[clrec->right];
if(prty & RENTAI) {
if (prty & RENTAI) { while(cl2rec && (int)cl2rec->cllen == keeplen) {
while (cl2rec && (int)cl2rec->cllen == keeplen) { if(cl2rec->kubun == K_TAIGEN) {
if (cl2rec -> kubun == K_TAIGEN) {
prty &= GETPRI; prty &= GETPRI;
goto finish; goto finish;
} }
@ -211,15 +197,14 @@ CLREC *clrec;
else { else {
prty &= GETPRI; prty &= GETPRI;
if (prty == P_RENYOU_J || prty == P_RENYOU_M ) { if(prty == P_RENYOU_J || prty == P_RENYOU_M) {
while (clrec->cllen != 1 && cl2rec && while(clrec->cllen != 1 && cl2rec &&
(int)cl2rec->cllen == keeplen ) { (int)cl2rec->cllen == keeplen) {
if (cl2rec->kubun == K_DOUSHI) { if(cl2rec->kubun == K_DOUSHI) {
prty = 6; prty = 6;
goto finish; goto finish;
} } else if(cl2rec->jnode->hinshi == SETSUBI_1 ||
else if (cl2rec->jnode->hinsi == SETUBI_1 || cl2rec->jnode->hinshi == SETSUBI_2) {
cl2rec->jnode->hinsi == SETUBI_2) {
prty = 7; prty = 7;
goto finish; goto finish;
} }
@ -229,56 +214,53 @@ CLREC *clrec;
} }
} }
finish: finish:
cl2rec = maxclptr; cl2rec = maxclptr;
if (hinsi1 == SUUSI) prty -= 4; if(hinshi1 == SUUSHI) prty -= 4;
if (cl2rec -> jnode -> hinsi == SUUSI) prty -= 3; if(cl2rec->jnode->hinshi == SUUSHI) prty -= 3;
if (cl2rec->jnode->class == C_DICT && if(cl2rec->jnode->class == C_DICT &&
cl2rec->jnode->jlen == 1 && (cl2rec->kubun != K_DOUSHI)) { cl2rec->jnode->jlen == 1 && (cl2rec->kubun != K_DOUSHI)) {
prty -= 2; prty -= 2;
} }
if ((!istaigen(clrec->right)) && (cl2rec->jnode->hinsi == SETUBI_2)) { if((!istaigen(clrec->right)) && (cl2rec->jnode->hinshi == SETSUBI_2)) {
prty -= 4; prty -= 4;
} }
prty += 20 - clrec->cllen + clrec->jnode->jlen + clrec->gobiln; prty += 20 - clrec->cllen + clrec->jnode->jlen + clrec->gobiln;
return(prty + prev); return (prty + prev);
} }
void pritiny() {
CLREC* clrec;
int keeplen;
int i, prty = 0;
void pritiny() clrec = selcl;
{ keeplen = clrec->cllen;
CLREC *clrec;
int keeplen;
int i, prty = 0;
clrec = selcl; if(istaigen(prevclrow)) {
keeplen = clrec -> cllen; while(clrec && (int)clrec->cllen == keeplen) {
i = taicnt(prevclgrm, clrec->jnode->hinshi);
if (istaigen(prevclrow)) { if(i > prty) {
while (clrec && (int)clrec -> cllen == keeplen) {
i = taicnt(prevclgrm, clrec -> jnode -> hinsi);
if (i > prty) {
selcl = clrec; selcl = clrec;
prty = i; prty = i;
} }
clrec = clrec -> clsort; clrec = clrec->clsort;
} }
} }
else { else {
while (clrec && (int)clrec -> cllen == keeplen) { while(clrec && (int)clrec->cllen == keeplen) {
if (clrec -> jnode -> hinsi >= MYOUJI && if(clrec->jnode->hinshi >= MYOUJI &&
clrec -> jnode -> hinsi <= KEN_KU) clrec->jnode->hinshi <= KEN_KU)
clrec = clrec -> clsort; clrec = clrec->clsort;
else if (clrec -> jnode -> hinsi == TANKANJI) else if(clrec->jnode->hinshi == TANKANJI)
return; return;
else { else {
selcl = clrec; selcl = clrec;
@ -287,4 +269,3 @@ void pritiny()
} }
} }
} }

252
prtytbl.c
View file

@ -27,76 +27,214 @@
* *
*/ */
/*
* $SonyRCSfile: prtytbl.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:02:11 $
*/
#include "sj_rename.h" #include "sj_rename.h"
#include "sj_typedef.h" #include "sj_typedef.h"
unsigned char taipri[7][45] = { unsigned char taipri[7][45] = {
{ 0, 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, 4, 4, 3, 3, 3, 3, 3, 3, 0, 0,
0, 3, 20, 4, 3, 3, 4, 4, 4, 4, 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}, 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, {0, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 3, 3, 3, 3, 3, 3, 0, 0, 4, 4, 3, 3, 3, 3, 3, 3, 0, 0,
0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 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}, 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, {0, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 3, 3, 3, 3, 3, 3, 0, 0, 4, 4, 3, 3, 3, 3, 3, 3, 0, 0,
0, 4, 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, 4, 4, 4, 4, 4, 4, 6}, 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, {0, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 3, 3, 3, 3, 3, 3, 0, 0, 5, 5, 3, 3, 3, 3, 3, 3, 0, 0,
0, 3, 3, 3, 4, 5, 4, 4, 4, 4, 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}, 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, {0, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 4, 4, 4, 4, 4, 4, 0, 0, 7, 7, 4, 4, 4, 4, 4, 4, 0, 0,
0, 4, 4, 4, 20, 20, 4, 4, 4, 4, 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}, 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, {0, 8, 8, 8, 8, 8, 7, 8, 8, 8,
8, 8, 3, 6, 7, 3, 3, 5, 0, 0, 8, 8, 3, 6, 7, 3, 3, 5, 0, 0,
0, 3, 3, 3, 3, 3, 5, 5, 5, 5, 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}, 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, {0, 5, 6, 6, 6, 6, 5, 6, 6, 6,
6, 6, 3, 3, 3, 3, 3, 5, 0, 0, 6, 6, 3, 3, 3, 3, 3, 5, 0, 0,
0, 3, 3, 3, 3, 3, 5, 5, 5, 5, 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} 4, 5, 5, 5, 5, 5, 5, 6, 6, 5, 5, 5, 5, 5, 5}};
};
unsigned 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,
},
unsigned char sttpri[5][31] = { {
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,
},
{ 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, {
7, 7, 2, 4, 4, 4, 4, 4, 0, 0, 4,
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,
0,
0,
0,
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, 4, 4, 4, 0, 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,
0,
0,
0,
4,
4,
4,
4,
4,
4,
4,
4,
4,
15,
},
{ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, {
4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0,
0, 10, 10, 4, 4, 4, 4, 4, 4, 4, 4, }, 12,
12,
{ 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 12,
4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 12,
0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 15, }, 12,
12,
{ 0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 9, 9, 9, 9, 9, 9, 0, 0, 12,
0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, } 12,
}; 12,
12,
9,
9,
9,
9,
9,
9,
0,
0,
0,
4,
4,
4,
4,
4,
4,
4,
4,
4,
4,
}};

View file

@ -27,15 +27,6 @@
* *
*/ */
/*
* $SonyRCSfile: readline.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:00:44 $
*
* $Id$
*/
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include "sj_euc.h" #include "sj_euc.h"
@ -43,139 +34,122 @@
#include "sj_macro.h" #include "sj_macro.h"
#include "dicttool.h" #include "dicttool.h"
/* static long lineloc; */ /* static long lineloc; */
static int yomi[MaxYomiLength + 1]; static int yomi[MaxYomiLength + 1];
static int kanji[MaxKanjiLength + 1]; static int kanji[MaxKanjiLength + 1];
static int hinsi[MaxHinsiNumber + 1]; static int hinshi[MaxHinshiNumber + 1];
static int atr[MaxAtrNumber + 1]; static int atr[MaxAtrNumber + 1];
static void static void
error(char *s) error(char* s) {
{ if(s) fprintf(stderr, "%s\n", s);
if (s) fprintf(stderr, "%s\n", s);
mark_file(stderr); mark_file(stderr);
exit(1); exit(1);
} }
static int static int
readchar(void) readchar(void) {
{ int c1;
int c1; int c2;
int c2;
c1 = getch();
if(c1 == EOF) return EOF;
c1 = getch(); if (c1 == EOF) return EOF; if(c1 != SS3) {
if(c1 & 0x80) {
c2 = getch();
if (c1 != SS3) { if(c2 == EOF) error(NULL);
if (c1 & 0x80) {
c2 = getch(); if (c2 == EOF) error(NULL);
c1 = ((c1 & 0xff) << 8) + (c2 & 0xff); c1 = ((c1 & 0xff) << 8) + (c2 & 0xff);
} }
} else { } else {
c2 = getch(); if (c2 == EOF) error(NULL); c2 = getch();
if(c2 == EOF) error(NULL);
c1 = ((c1 & 0xff) << 8) + (c2 & 0xff); c1 = ((c1 & 0xff) << 8) + (c2 & 0xff);
c2 = getch(); if (c2 == EOF) error(NULL); c2 = getch();
if(c2 == EOF) error(NULL);
c1 = ((c1 & 0xffff) << 8) + (c2 & 0xff); c1 = ((c1 & 0xffff) << 8) + (c2 & 0xff);
} }
return c1; return c1;
} }
static int static int
skip_blank(void) skip_blank(void) {
{ int c;
int c;
c = readchar(); c = readchar();
while (Isblank(c)) c = readchar(); while(Isblank(c)) c = readchar();
return c; return c;
} }
static int static int
readhinsi(void) readhinshi(void) {
{ static int c = 0;
static int c = 0; int i;
int i; unsigned char hinshi[128];
unsigned char hinsi[128]; int flg;
int flg;
retry: retry:
if (c == '\n') { if(c == '\n') {
c = 0; c = 0;
return 0; return 0;
} }
c = skip_blank(); c = skip_blank();
if (c == '\n') { if(c == '\n') {
c = 0; c = 0;
return 0; return 0;
} }
for(i = 0; !Isblank(c);) {
for (i = 0 ; !Isblank(c) ; ) { if(c == '\n' || c == ':') break;
if (c == '\n' || c == ':') break; if(Isillegal(c)) error(IllegalFormat);
if (Isillegal(c)) error(IllegalFormat); if(c > 0xffffff) {
if (c > 0xffffff) { if(i >= 126) error(TooLongHinshi);
if (i >= 126) error(TooLongHinsi); hinshi[i++] = ((c >> 24) & 0xff);
hinsi[i++] = ((c >> 24) & 0xff); if(i >= 126) error(TooLongHinshi);
if (i >= 126) error(TooLongHinsi); hinshi[i++] = ((c >> 16) & 0xff);
hinsi[i++] = ((c >> 16) & 0xff); if(i >= 126) error(TooLongHinshi);
if (i >= 126) error(TooLongHinsi); hinshi[i++] = ((c >> 8) & 0xff);
hinsi[i++] = ((c >> 8) & 0xff); } else if(c > 0xffff) {
} else if (c > 0xffff) { if(i >= 126) error(TooLongHinshi);
if (i >= 126) error(TooLongHinsi); hinshi[i++] = ((c >> 16) & 0xff);
hinsi[i++] = ((c >> 16) & 0xff); if(i >= 126) error(TooLongHinshi);
if (i >= 126) error(TooLongHinsi); hinshi[i++] = ((c >> 8) & 0xff);
hinsi[i++] = ((c >> 8) & 0xff); } else if(c > 0xff) {
} else if (c > 0xff) { if(i >= 126) error(TooLongHinshi);
if (i >= 126) error(TooLongHinsi); hinshi[i++] = ((c >> 8) & 0xff);
hinsi[i++] = ((c >> 8) & 0xff);
} }
if (i >= 127) error(TooLongHinsi); if(i >= 127) error(TooLongHinshi);
hinsi[i++] = (c & 0xff); hinshi[i++] = (c & 0xff);
c = readchar(); c = readchar();
} }
if(i == 0) return 0;
if (i == 0) return 0; if(hinshi[0] == '[' && hinshi[i - 1] == ']') {
hinshi[i - 1] = 0;
i = cnvhinshi(hinshi + 1);
if (hinsi[0] == '[' && hinsi[i - 1] == ']') { if(i > 0) {
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", 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); hinshi + 1);
} } else if(!i) {
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", 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); hinshi + 1);
goto retry; goto retry;
} }
} }
else { else {
hinsi[i] = 0; hinshi[i] = 0;
i = cnvhinsi(hinsi); i = cnvhinshi(hinshi);
if (!i) { 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); fprintf(stderr, "\"%s\" \244\254\245\263\241\274\245\311\262\275\244\307\244\255\244\336\244\273\244\363\n", hinshi);
goto retry; goto retry;
} }
} }
@ -183,93 +157,75 @@ retry:
return i; return i;
} }
int* readline(void) {
int c;
int i;
int j;
for(;;) {
int*
readline(void)
{
int c;
int i;
int j;
for ( ; ; ) {
mark_file(NULL); mark_file(NULL);
c = skip_blank(); c = skip_blank();
if(c == '#') {
if (c == '#') { while(c != '\n') c = skip_blank();
while (c != '\n') c = skip_blank();
} }
if(c == EOF) return NULL;
if (c == EOF) return NULL; if(c != '\n') break;
if (c != '\n') break;
} }
for(i = 0; !Isblank(c);) {
for (i = 0 ; !Isblank(c) ; ) { if(Isillegal(c)) error(IllegalFormat);
if (Isillegal(c)) error(IllegalFormat); if(i >= MaxYomiLength) error(TooLongYomi);
if (i >= MaxYomiLength) error(TooLongYomi);
yomi[i++] = c; yomi[i++] = c;
c = readchar(); c = readchar();
} }
yomi[i] = 0; yomi[i] = 0;
if (i == 0) error(NoYomiString); if(i == 0) error(NoYomiString);
c = skip_blank(); c = skip_blank();
if(c != '"') {
if (c != '"') { for(i = 0; !Isblank(c);) {
for (i = 0 ; !Isblank(c) ; ) { if(Isillegal(c)) error(IllegalFormat);
if (Isillegal(c)) error(IllegalFormat); if(i >= MaxKanjiLength) error(TooLongKanji);
if (i >= MaxKanjiLength) error(TooLongKanji);
kanji[i++] = c; kanji[i++] = c;
c = readchar(); c = readchar();
} }
} } else {
else {
c = readchar(); c = readchar();
for (i = 0 ; c != '"' ; ) { for(i = 0; c != '"';) {
if (Isillegal(c)) error(IllegalFormat); if(Isillegal(c)) error(IllegalFormat);
if (i >= MaxKanjiLength) error(TooLongKanji); if(i >= MaxKanjiLength) error(TooLongKanji);
kanji[i++] = c; kanji[i++] = c;
c = readchar(); c = readchar();
} }
} }
kanji[i] = 0; kanji[i] = 0;
if (i == 0) error(NoKanjiString); if(i == 0) error(NoKanjiString);
i = j = 0; i = j = 0;
while ((c = readhinsi())!=0) { while((c = readhinshi()) != 0) {
if (c < 0) { if(c < 0) {
if (i >= MaxAtrNumber) error(TooManyAtr); if(i >= MaxAtrNumber) error(TooManyAtr);
atr[i++] = -c; atr[i++] = -c;
} } else {
else { if(j >= MaxHinshiNumber) error(TooManyHinshi);
if (j >= MaxHinsiNumber) error(TooManyHinsi); hinshi[j++] = c;
hinsi[j++] = c;
} }
} }
atr[i] = 0; atr[i] = 0;
if (j == 0) hinsi[j++] = HinsiTankan; if(j == 0) hinshi[j++] = HinshiTankan;
hinsi[j] = 0; hinshi[j] = 0;
return yomi; return yomi;
} }
void setline(void (*func)(int*, int*, int, int*)) {
int i;
void for(i = 0; hinshi[i]; i++) (*func)(yomi, kanji, hinshi[i], atr);
setline(void (*func)(int*, int*, int, int*))
{
int i;
for (i = 0 ; hinsi[i] ; i++) (*func)(yomi, kanji, hinsi[i], atr);
} }

73
rk.h
View file

@ -27,56 +27,47 @@
* *
*/ */
/*
* $SonyRCSfile: rk.h,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:03:48 $
*/
#include <sys/types.h> #include <sys/types.h>
#include "wchar16.h" #include "wchar16.h"
#define SPACE 0x20 #define SPACE 0x20
#define TAB 0x09 #define TAB 0x09
#define EOL 0x0a #define EOL 0x0a
#define NSTR '\0' #define NSTR '\0'
#ifndef ESC #ifndef ESC
#define ESC 0x1b #define ESC 0x1b
#endif #endif
#define QUOTA '\'' #define QUOTA '\''
#define BSL '\\' #define BSL '\\'
#define MASK 0xff #define MASK 0xff
#define MAXLEN 256 #define MAXLEN 256
#define MAXWLEN 16 #define MAXWLEN 16
#define MAXLLEN 64 #define MAXLLEN 64
#define MAXCODE 256 #define MAXCODE 256
#define CONTINUE 0 #define CONTINUE 0
#define NOMACH -1 #define NOMACH -1
#define FAIL -1 #define FAIL -1
#define RKEND 0xffffffff #define RKEND 0xffffffff
#define ERRBEL 0xfffffffc #define ERRBEL 0xfffffffc
#define ERRCODE 0x80000000 #define ERRCODE 0x80000000
#define RKMASK 0x0000ffff #define RKMASK 0x0000ffff
#define RKZEN 0xff00 #define RKZEN 0xff00
#define SetMojilen(c) ((c << 16) & 0x00ff0000) #define SetMojilen(c) ((c << 16) & 0x00ff0000)
#define GetMojilen(c) ((c & ERRCODE) ? (1) : ((c >> 16) & 0xff)) #define GetMojilen(c) ((c & ERRCODE) ? (1) : ((c >> 16) & 0xff))
typedef struct rktable_w16 { typedef struct rktable_w16 {
wchar16_t *r_key; wchar16_t* r_key;
unsigned short *k_yomi; unsigned short* k_yomi;
wchar16_t *r_str; wchar16_t* r_str;
struct rktable_w16 *next; struct rktable_w16* next;
} RkTablW16; } RkTablW16;
typedef struct rktable { typedef struct rktable {
unsigned char *r_key; unsigned char* r_key;
unsigned short *k_yomi; unsigned short* k_yomi;
unsigned char *r_str; unsigned char* r_str;
struct rktable *next; struct rktable* next;
} RkTabl; } RkTabl;

1051
rk_conv.c

File diff suppressed because it is too large Load diff

397
romaji.c
View file

@ -27,50 +27,40 @@
* *
*/ */
/*
* $SonyRCSfile: romaji.c,v $
* $SonyRevision: 1.2 $
* $SonyDate: 1997/01/23 11:09:37 $
*/
#include "common.h" #include "common.h"
#include "rk.h" #include "rk.h"
#include "key.h" #include "key.h"
extern int rkerrbell; extern int rkerrbell;
exec_romaji(c) exec_romaji(c)
wchar16_t c; wchar16_t c;
{ {
Conversion *cv; Conversion* cv;
wchar16_t *p; wchar16_t* p;
unsigned short c1, cc; unsigned short c1, cc;
unsigned int c2; unsigned int c2;
unsigned short op; unsigned short op;
unsigned char mode; unsigned char mode;
int len, i; int len, i;
unsigned int rkstr[MAXLLEN], *rkp; unsigned int rkstr[MAXLLEN], *rkp;
extern char erase_str[]; extern char erase_str[];
cv = GetConversion (); cv = GetConversion();
op = cv->out_point; op = cv->out_point;
if (!is_bs(c) && BuffYes()) { if(!is_bs(c) && BuffYes()) {
if ((unsigned int) cv->ha_point + hs_point >= BUFFLENGTH - 2 && if((unsigned int)cv->ha_point + hs_point >= BUFFLENGTH - 2 &&
!iswcntrl(c)) { !iswcntrl(c)) {
beep(); beep();
return(1); return (1);
} }
cv->Halpha[cv->ha_point++] = c; cv->Halpha[cv->ha_point++] = c;
} }
if ((mode = cv->Imode) & MODE_CONV) { if((mode = cv->Imode) & MODE_CONV) {
sj3_rkconvc(c, rkstr); sj3_rkconvc(c, rkstr);
} else if (mode == MODE_CODE) { } else if(mode == MODE_CODE) {
codeconv(c, rkstr); codeconv(c, rkstr);
} else { } else {
rkstr[0] = SetMojilen(1) + c; rkstr[0] = SetMojilen(1) + c;
@ -78,30 +68,30 @@ wchar16_t c;
} }
rkp = rkstr; rkp = rkstr;
i = 1; i = 1;
while(*rkp != RKEND) { while(*rkp != RKEND) {
c1 = ((c2 = *rkp++) & RKMASK); c1 = ((c2 = *rkp++) & RKMASK);
if (c2 == ERRBEL) { if(c2 == ERRBEL) {
beep(); beep();
cv->ha_point--; cv->ha_point--;
break; break;
} }
if (is_bs(c1)) { if(is_bs(c1)) {
if (op <= 0) { if(op <= 0) {
if (os_point <= 0) { if(os_point <= 0) {
master_write(erase_str, 1); master_write(erase_str, 1);
} }
} else { } else {
if (WcIsZENKAKU(cv->out_buf[op - 1])) { if(WcIsZENKAKU(cv->out_buf[op - 1])) {
vbackchar(2); vbackchar(2);
op -=1; op -= 1;
} else { } else {
vbackchar(1); vbackchar(1);
op--; op--;
} }
cv->out_point = op; cv->out_point = op;
if (BuffYes() && is_bs(c)) { if(BuffYes() && is_bs(c)) {
if (!(cv->out_mode[op] & OMODE_MASK)) if(!(cv->out_mode[op] & OMODE_MASK))
chhstr(cv->Halpha, cv->out_buf, chhstr(cv->Halpha, cv->out_buf,
cv->out_mode, op); cv->out_mode, op);
cv->ha_point = getipos(op); cv->ha_point = getipos(op);
@ -109,111 +99,108 @@ wchar16_t c;
} }
continue; continue;
} }
if (WcIsZENKAKU(c1)) { if(WcIsZENKAKU(c1)) {
if (op >= 1 && (cc = addten(op - 1, c1)) != 0) { if(op >= 1 && (cc = addten(op - 1, c1)) != 0) {
c1 = cc; c1 = cc;
vbackchar(2); vbackchar(2);
op -= 1; op -= 1;
cv->out_point = op; cv->out_point = op;
len = cv->out_mode[op] + GetMojilen(c2); len = cv->out_mode[op] + GetMojilen(c2);
c2 = SetMojilen(len); c2 = SetMojilen(len);
} else { } else {
if (!GetMojilen(c2) && (mode == MODE_CODE)) if(!GetMojilen(c2) && (mode == MODE_CODE))
c2 = SetMojilen(1); c2 = SetMojilen(1);
} }
if (mode == MODE_ZKATA) { if(mode == MODE_ZKATA) {
c1 = sj_tokata(c1); c1 = sj_tokata(c1);
} else if (mode == MODE_HKATA) { } else if(mode == MODE_HKATA) {
c1 = sj_zen2han(c1); c1 = sj_zen2han(c1);
} }
} else { } else {
if ((c2 & ERRCODE) && is_bs(c)) if((c2 & ERRCODE) && is_bs(c))
cv->Halpha[cv->ha_point++] = c1; cv->Halpha[cv->ha_point++] = c1;
if (WcIsKANJI(c1)) { if(WcIsKANJI(c1)) {
c2 = SetMojilen(1); c2 = SetMojilen(1);
} else if (iswcntrl(c1) && !(c2 & ERRCODE)) { } else if(iswcntrl(c1) && !(c2 & ERRCODE)) {
if (BuffYes()) if(BuffYes())
cv->ha_point--; cv->ha_point--;
sj3_rkreset(); sj3_rkreset();
i = 0; i = 0;
break; break;
} else if (mode & MODE_ZEN) { } else if(mode & MODE_ZEN) {
c1 = sj_han2zen(c1); c1 = sj_han2zen(c1);
if (mode == MODE_ZKATA) if(mode == MODE_ZKATA)
c1 = sj_tokata(c1); c1 = sj_tokata(c1);
if (op >=1 && (cc = addten(op-1, c1)) != 0){ if(op >= 1 && (cc = addten(op - 1, c1)) != 0) {
c1 = cc; c1 = cc;
vbackchar(2); vbackchar(2);
op --; op--;
cv->out_point = op; cv->out_point = op;
len = cv->out_mode[op] len = cv->out_mode[op] + GetMojilen(c2);
+ GetMojilen(c2); c2 = SetMojilen(len);
c2 = SetMojilen(len);
} }
} }
} }
if ((unsigned int)cv->out_point + os_point >= BUFFLENGTH * 2 - 2) { if((unsigned int)cv->out_point + os_point >= BUFFLENGTH * 2 - 2) {
beep(); beep();
op = cv->out_point; op = cv->out_point;
break; break;
} }
if (WcIsZENKAKU(c1)) { if(WcIsZENKAKU(c1)) {
cv->out_buf[op] = c1; cv->out_buf[op] = c1;
cv->in_mode[op] = mode; cv->in_mode[op] = mode;
cv->out_mode[op++] = GetMojilen(c2); cv->out_mode[op++] = GetMojilen(c2);
if (mode == MODE_HKATA || WcIsKANA(cv->out_buf[op - 1])) { if(mode == MODE_HKATA || WcIsKANA(cv->out_buf[op - 1])) {
cv->out_buf[op - 1] = c1 >> 8; cv->out_buf[op - 1] = c1 >> 8;
cv->out_buf[op] = c1 &MASK; cv->out_buf[op] = c1 & MASK;
cv->in_mode[op] = mode; cv->in_mode[op] = mode;
cv->out_mode[op++] = 0; cv->out_mode[op++] = 0;
sj3_rkreset(); sj3_rkreset();
} }
} else { } else {
cv->out_buf[op] = c1; cv->out_buf[op] = c1;
cv->in_mode[op] = mode; cv->in_mode[op] = mode;
cv->out_mode[op++] = GetMojilen(c2); cv->out_mode[op++] = GetMojilen(c2);
} }
if (!BuffYes() && !(c2 & ERRCODE)) { if(!BuffYes() && !(c2 & ERRCODE)) {
cv->out_buf[op] = '\0'; cv->out_buf[op] = '\0';
master_out(cv->out_buf, op); master_out(cv->out_buf, op);
sj3_rkreset(); sj3_rkreset();
op = 0; op = 0;
} }
} }
cv->out_buf[op] = '\0'; cv->out_buf[op] = '\0';
cv->Halpha[cv->ha_point] = '\0'; cv->Halpha[cv->ha_point] = '\0';
if (is_bs(c) && op <= 0 && os_point <= 0) { if(is_bs(c) && op <= 0 && os_point <= 0) {
ResetHenkan(); ResetHenkan();
if (BuffYes()) { if(BuffYes()) {
SetCflag(); SetCflag();
buffers_clear(); buffers_clear();
} }
} } else if((len = op - cv->out_point) > 0) {
else if ((len = op - cv->out_point) > 0) {
p = &cv->out_buf[cv->out_point]; p = &cv->out_buf[cv->out_point];
if (BuffYes() && IsCflag ()) { if(BuffYes() && IsCflag()) {
Csave (); Csave();
ClearCflag (); ClearCflag();
} }
if (mode & MODE_ZEN) { if(mode & MODE_ZEN) {
if (!BuffYes() && len == 2) if(!BuffYes() && len == 2)
Csave(); Csave();
vprintU(p, 1); vprintU(p, 1);
} else { } else {
if (!BuffYes() && len == 1) if(!BuffYes() && len == 1)
Csave(); Csave();
vprintU(p, 0); vprintU(p, 0);
} }
} }
cv->out_point = op; cv->out_point = op;
return(i); return (i);
} }
move_cur(kval) move_cur(kval) int kval;
int kval;
{ {
Conversion *cv; Conversion* cv;
int i; int i;
cv = GetConversion(); cv = GetConversion();
switch(kval) { switch(kval) {
@ -222,112 +209,110 @@ int kval;
break; break;
case KEY_END: case KEY_END:
cv->out_point = cv->out_epoint; cv->out_point = cv->out_epoint;
cv->ha_point = cv->ha_epoint; cv->ha_point = cv->ha_epoint;
break; break;
case KEY_LEFT: case KEY_LEFT:
if ((i = cv->out_point) > 0) { if((i = cv->out_point) > 0) {
i--; i--;
if (i > 0 && (WcIsZENKAKU(cv->out_buf[i]))) if(i > 0 && (WcIsZENKAKU(cv->out_buf[i])))
i--; i--;
cv->out_point = i; cv->out_point = i;
} }
break; break;
case KEY_RIGHT: case KEY_RIGHT:
if ((i = cv->out_point) < cv->out_epoint) { if((i = cv->out_point) < cv->out_epoint) {
i++; i++;
if (i < cv->out_epoint && (WcIsZENKAKU(cv->out_buf[i]))) if(i < cv->out_epoint && (WcIsZENKAKU(cv->out_buf[i])))
i++; i++;
cv->out_point = i; cv->out_point = i;
if (cv->out_point >= cv->out_epoint) if(cv->out_point >= cv->out_epoint)
cv->ha_point = cv->ha_epoint; cv->ha_point = cv->ha_epoint;
} }
break; break;
} }
if (cv->out_point != cv->Vlen) { if(cv->out_point != cv->Vlen) {
Cgoto(cv->out_point); Cgoto(cv->out_point);
if (cv->out_point == cv->out_epoint) { if(cv->out_point == cv->out_epoint) {
os_point = 0; os_point = 0;
hs_point = 0; hs_point = 0;
} }
} }
} }
addten(pos, c) addten(pos, c) unsigned short pos, c;
unsigned short pos, c;
{ {
unsigned short prefix; unsigned short prefix;
Conversion *cv; Conversion* cv;
cv = GetConversion(); cv = GetConversion();
prefix = cv->out_buf[pos]; prefix = cv->out_buf[pos];
return(sj_addten(prefix, c)); return (sj_addten(prefix, c));
} }
getipos(pos) getipos(pos) unsigned short pos;
unsigned short pos;
{ {
Conversion *cv; Conversion* cv;
cv = GetConversion(); cv = GetConversion();
return(getipos2(cv->out_mode, pos)); return (getipos2(cv->out_mode, pos));
} }
getipos2(omode, pos) getipos2(omode, pos) unsigned short* omode;
unsigned short *omode;
unsigned short pos; unsigned short pos;
{ {
unsigned short ipos; unsigned short ipos;
int i; int i;
ipos = 0; ipos = 0;
for (i = 0; i < (unsigned int)pos; i++) { for(i = 0; i < (unsigned int)pos; i++) {
ipos += omode[i] & OMODE_MASK; ipos += omode[i] & OMODE_MASK;
} }
return(ipos); return (ipos);
} }
sj_rkconv(s1, s2, len) sj_rkconv(s1, s2, len)
wchar16_t *s1, *s2; wchar16_t* s1,
*s2;
int len; int len;
{ {
int i, rlen; int i, rlen;
unsigned int *kp; unsigned int* kp;
int res, klen; int res, klen;
wchar16_t roma[SHORTBUFFSIZE + 1]; wchar16_t roma[SHORTBUFFSIZE + 1];
unsigned int kstr[MAXLLEN]; unsigned int kstr[MAXLLEN];
sj3_rkebell(0); sj3_rkebell(0);
klen = 0; klen = 0;
res = 0; res = 0;
while (len > 0) { while(len > 0) {
if (len + res > SHORTBUFFSIZE) { if(len + res > SHORTBUFFSIZE) {
i = SHORTBUFFSIZE - res; i = SHORTBUFFSIZE - res;
len -= i; len -= i;
} else { } else {
i = len; i = len;
len = 0; len = 0;
} }
Strncpy(&roma[res], s2, i); Strncpy(&roma[res], s2, i);
s2 += i; s2 += i;
roma[res + i] = '\0'; roma[res + i] = '\0';
rlen = sj3_rkconv2(roma, kstr, i + res - 1); rlen = sj3_rkconv2(roma, kstr, i + res - 1);
res = wslen(roma); res = wslen(roma);
if (rlen > 0) { if(rlen > 0) {
kp = kstr; kp = kstr;
while (*kp != 0) { while(*kp != 0) {
*s1++ = (wchar16_t) *kp++; *s1++ = (wchar16_t)*kp++;
klen++; klen++;
} }
} }
} }
if (res > 0) { if(res > 0) {
roma[res] = 0x0a; roma[res] = 0x0a;
roma[res + 1] = '\0'; roma[res + 1] = '\0';
rlen = sj3_rkconv2(roma, kstr, res); rlen = sj3_rkconv2(roma, kstr, res);
if (rlen > 0) { if(rlen > 0) {
kp = kstr; kp = kstr;
while ((*kp & RKMASK) != 0x0a && *kp != 0) { while((*kp & RKMASK) != 0x0a && *kp != 0) {
*s1++ = (wchar16_t) *kp++; *s1++ = (wchar16_t)*kp++;
klen++; klen++;
} }
} else { } else {
@ -339,108 +324,109 @@ int len;
} }
*s1 = '\0'; *s1 = '\0';
sj3_rkebell(rkerrbell); sj3_rkebell(rkerrbell);
return(klen); return (klen);
} }
sj_rkconv2(s1, s2, omode, len) sj_rkconv2(s1, s2, omode, len)
wchar16_t *s1, *s2; wchar16_t* s1,
unsigned short *omode; *s2;
int len; unsigned short* omode;
int len;
{ {
int i, rlen; int i, rlen;
unsigned int *kp; unsigned int* kp;
int res, klen, mlen; int res, klen, mlen;
unsigned short cc, c, prefix; unsigned short cc, c, prefix;
wchar16_t roma[SHORTBUFFSIZE + 1]; wchar16_t roma[SHORTBUFFSIZE + 1];
unsigned int kstr[BUFFLENGTH]; unsigned int kstr[BUFFLENGTH];
sj3_rkebell(0); sj3_rkebell(0);
klen = 0; klen = 0;
res = 0; res = 0;
prefix = 0; prefix = 0;
while (len > 0) { while(len > 0) {
if (len + res > SHORTBUFFSIZE) { if(len + res > SHORTBUFFSIZE) {
i = SHORTBUFFSIZE - res; i = SHORTBUFFSIZE - res;
len -= i; len -= i;
} else { } else {
i = len; i = len;
len = 0; len = 0;
} }
Strncpy(&roma[res], s2, i); Strncpy(&roma[res], s2, i);
s2 += i; s2 += i;
roma[res + i] = '\0'; roma[res + i] = '\0';
rlen = sj3_rkconv2(roma, kstr, i + res - 1); rlen = sj3_rkconv2(roma, kstr, i + res - 1);
/* /*
* Remove warning. * Remove warning.
* Patched by Hidekazu Kuroki(hidekazu@cs.titech.ac.jp) 1996/8/10 * Patched by Hidekazu Kuroki(hidekazu@cs.titech.ac.jp) 1996/8/10
*/ */
res = strlen((char *)roma); res = strlen((char*)roma);
if (rlen <= 0) if(rlen <= 0)
continue; continue;
kp = kstr; kp = kstr;
while ((c = *kp & RKMASK) != 0) { while((c = *kp & RKMASK) != 0) {
if (c & RKZEN) { if(c & RKZEN) {
if ((cc = sj_addten(prefix, c)) != 0) { if((cc = sj_addten(prefix, c)) != 0) {
omode -= 1; omode -= 1;
s1 -= 1; s1 -= 1;
*omode += GetMojilen(*kp); *omode += GetMojilen(*kp);
c = cc; c = cc;
prefix = 0; prefix = 0;
} else { } else {
*omode = GetMojilen(*kp); *omode = GetMojilen(*kp);
klen += 1; klen += 1;
prefix = c; prefix = c;
} }
*s1++ = (wchar16_t) c; *s1++ = (wchar16_t)c;
omode++; omode++;
kp++; kp++;
} else { } else {
mlen = GetMojilen(*kp); mlen = GetMojilen(*kp);
*kp = sj_han2zen(c) + SetMojilen(mlen); *kp = sj_han2zen(c) + SetMojilen(mlen);
} }
} }
} }
if (res > 0) { if(res > 0) {
roma[res] = 0x0a; roma[res] = 0x0a;
roma[res + 1] = '\0'; roma[res + 1] = '\0';
rlen = sj3_rkconv2(roma, kstr, res); rlen = sj3_rkconv2(roma, kstr, res);
if (rlen > 0) { if(rlen > 0) {
kp = kstr; kp = kstr;
while ((c = *kp & RKMASK) != 0x0a && c != 0) { while((c = *kp & RKMASK) != 0x0a && c != 0) {
if (*kp & RKZEN) { if(*kp & RKZEN) {
if ((cc = sj_addten(prefix, c)) != 0) { if((cc = sj_addten(prefix, c)) != 0) {
omode -= 1; omode -= 1;
s1 -= 1; s1 -= 1;
*omode += GetMojilen(*kp); *omode += GetMojilen(*kp);
c = cc; c = cc;
prefix = 0; prefix = 0;
} else { } else {
*omode = GetMojilen(*kp); *omode = GetMojilen(*kp);
klen += 1; klen += 1;
prefix = c; prefix = c;
} }
*s1++ = (wchar16_t) c; *s1++ = (wchar16_t)c;
omode++; omode++;
kp++; kp++;
} else { } else {
mlen = GetMojilen(*kp); mlen = GetMojilen(*kp);
*kp = sj_han2zen(c) + SetMojilen(mlen); *kp = sj_han2zen(c) + SetMojilen(mlen);
} }
} }
} else { } else {
for (i = 0; i < res; i++) { for(i = 0; i < res; i++) {
if (WcIsKANJI(roma[i])) { if(WcIsKANJI(roma[i])) {
c = roma[i]; c = roma[i];
mlen = 1; mlen = 1;
} else { } else {
c = sj_han2zen(roma[i]); c = sj_han2zen(roma[i]);
mlen = 1; mlen = 1;
} }
if ((cc = sj_addten(prefix, c)) != 0) { if((cc = sj_addten(prefix, c)) != 0) {
s1 -= 1; s1 -= 1;
omode -= 1; omode -= 1;
*omode += mlen; *omode += mlen;
c = cc; c = cc;
prefix = 0; prefix = 0;
} else { } else {
prefix = c; prefix = c;
@ -454,97 +440,94 @@ int len;
} }
*s1 = '\0'; *s1 = '\0';
sj3_rkebell(rkerrbell); sj3_rkebell(rkerrbell);
return(klen); return (klen);
} }
exec_romaji2(c, hbuf, kbuf, omode, cur, hcur) exec_romaji2(c, hbuf, kbuf, omode, cur, hcur)
wchar16_t c, *hbuf, *kbuf; wchar16_t c,
unsigned short *omode; *hbuf, *kbuf;
int cur, hcur; unsigned short* omode;
int cur, hcur;
{ {
unsigned short c1, cc; unsigned short c1, cc;
unsigned int c2; unsigned int c2;
int i; int i;
int ocur, len, retv; int ocur, len, retv;
unsigned int rkstr[MAXLLEN], *rkp; unsigned int rkstr[MAXLLEN], *rkp;
retv = 1; retv = 1;
ocur = cur; ocur = cur;
if (hcur >= 0 && !is_bs(c)) if(hcur >= 0 && !is_bs(c))
hbuf[hcur++] = c; hbuf[hcur++] = c;
sj3_rkconvc(c, rkstr); sj3_rkconvc(c, rkstr);
rkp = rkstr; rkp = rkstr;
while(*rkp != RKEND) { while(*rkp != RKEND) {
c1 = ((c2 = *rkp++) & RKMASK); c1 = ((c2 = *rkp++) & RKMASK);
if (c2 == ERRBEL) { if(c2 == ERRBEL) {
if (c != 0) if(c != 0)
beep(); beep();
hcur--; hcur--;
break; break;
} }
if (is_bs(c1)) { if(is_bs(c1)) {
if (cur <= 0) { if(cur <= 0) {
beep(); beep();
} else { } else {
vbackchar(2); vbackchar(2);
cur -= 1; cur -= 1;
ocur = cur; ocur = cur;
} }
if (hcur >= 0 && is_bs(c)) { if(hcur >= 0 && is_bs(c)) {
for (i = cur; i > 0 ; i--){ for(i = cur; i > 0; i--) {
if (omode[i] & OMODE_MASK) if(omode[i] & OMODE_MASK)
break; break;
} }
hcur -= omode[i]; hcur -= omode[i];
while (i < cur) { while(i < cur) {
len = sj_zentohan(&hbuf[hcur],&kbuf[i],1); len = sj_zentohan(&hbuf[hcur], &kbuf[i], 1);
omode[i] = len; omode[i] = len;
hcur += len; hcur += len;
i ++; i++;
} }
} }
continue; continue;
} }
if (!WcIsZENKAKU(c1)) { if(!WcIsZENKAKU(c1)) {
if (hcur >= 0 && (c2 & ERRCODE) && is_bs(c)) if(hcur >= 0 && (c2 & ERRCODE) && is_bs(c))
hbuf[hcur++] = c1; hbuf[hcur++] = c1;
if (c1 == 0) { if(c1 == 0) {
hcur--; hcur--;
break; break;
} else { } else {
if (c2 & ERRCODE) if(c2 & ERRCODE)
retv = 0; retv = 0;
c1 = sj_han2zen(c1); c1 = sj_han2zen(c1);
} }
} }
if (cur >= 1) { if(cur >= 1) {
cc = kbuf[cur - 1]; cc = kbuf[cur - 1];
if ((cc = sj_addten(cc, c1)) != 0){ if((cc = sj_addten(cc, c1)) != 0) {
c1 = cc; c1 = cc;
vbackchar(2); vbackchar(2);
cur --; cur--;
ocur = cur; ocur = cur;
if (hcur >= 0) { if(hcur >= 0) {
len = omode[cur] + GetMojilen(c2); len = omode[cur] + GetMojilen(c2);
c2 = SetMojilen(len); c2 = SetMojilen(len);
} }
} }
} }
kbuf[cur] = c1; kbuf[cur] = c1;
if (hcur >= 0) { if(hcur >= 0) {
omode[cur] = GetMojilen(c2); omode[cur] = GetMojilen(c2);
} }
cur ++; cur++;
} }
kbuf[cur] = '\0'; kbuf[cur] = '\0';
if (hcur >= 0) if(hcur >= 0)
hbuf[hcur] = '\0'; hbuf[hcur] = '\0';
if (cur > ocur) if(cur > ocur)
vprintU(&kbuf[ocur], 1); vprintU(&kbuf[ocur], 1);
return(retv); return (retv);
} }

Some files were not shown because too many files have changed in this diff Show more