sj3/kigou.c
SASANO Takayoshi a9a6c86f12 replace u_xxxx style, defined <sys/types.h>
replace:
	u_char -> unsigned char
	u_short -> unsigned short
	u_int -> unsigned int
	u_long (not used)

include <sys/types.h> is kept.

dicttool.h:
	fix include guard DICTTOLL -> DICTTOOL

addelcmn.c:unsigned int addel_arg()
deldic.c:unsigned int deldic()
	change u_short err -> unsigned int err (used for return value)

Signed-off-by: SASANO Takayoshi <uaa@uaa.org.uk>
2023-12-10 17:14:16 +09:00

310 lines
8.3 KiB
C

/*
* Copyright (c) 1994 Sony Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM,
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
* THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* Except as contained in this notice, the name of Sony Corporation
* shall not be used in advertising or otherwise to promote the sale, use
* or other dealings in this Software without prior written authorization
* from Sony Corporation.
*
*/
/*
* $SonyRCSfile: kigou.c,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:03:19 $
*/
#include "common.h"
#include "kctype.h"
#include "key.h"
#define BEGIN_CODE 0x2121
#define END_CODE 0x7f7e
#define INCRESE 16
static int lastcode = BEGIN_CODE;
static unsigned short row, col;
void input_kigou();
kigou ()
{
extern int keyvalue;
int increse, code, basecode;
int inc, ki, low;
unsigned short num, CheckCcode(), strtocode();
int rval;
increse = INCRESE;
disp_mode ();
basecode = lastcode & 0xfff0;
code = lastcode;
StartGuide (&row, &col);
Clear_EOL ();
guide_kigou (basecode, code, increse);
rval = 0;
ki = 1;
SaveConversion ();
while (ki) {
inc = inkey ();
if (AnotherConversion ()) {
unget_key (inc);
break;
}
top:
switch (keyvalue) {
case KEY_CONV:
rval = 1;
ki = 0;
break;
case KEY_RIGHT:
if (code >= END_CODE) {
code = BEGIN_CODE;
basecode = code & 0xfff0;
} else {
low = ++code & 0xff;
if (low > 0x7e) {
code &= 0xff00;
code += 0x121;
low = 0x21;
}
if (code >= basecode + increse) {
if (low <= 0x21)
basecode = code & 0xfff0;
else
basecode += increse;
}
}
guide_kigou (basecode, code, increse);
break;
case KEY_LEFT:
if (code <= BEGIN_CODE) {
code = END_CODE;
basecode = code & 0xfff0;
} else {
low = --code & 0xff;
if (low < 0x21) {
code &= 0xff00;
code -= 0x82;
low = 0x7e;
}
if (code < basecode) {
if (low >= 0x7e)
basecode = code & 0xfff0;
else
basecode -= increse;
}
}
guide_kigou (basecode, code, increse);
break;
case KEY_UP:
if (basecode <= BEGIN_CODE) {
code = basecode = END_CODE & 0xfff0;
} else {
basecode -= increse;
low = basecode & 0xff;
if (low == 0x20) {
code = (basecode & 0xff00) + 0x21;
} else {
if (low < 0x20) {
basecode &= 0xff00;
basecode -= 0x90;
}
code = basecode;
}
}
guide_kigou (basecode, code, increse);
break;
case KEY_DOWN:
if (basecode >= (END_CODE & 0xfff0)) {
code = BEGIN_CODE;
basecode = code & 0xfff0;
} else {
basecode += increse;
low = basecode & 0xff;
if (low > 0x70) {
basecode &= 0xff00;
basecode += 0x120;
code = basecode + 1;
} else
code = basecode;
}
guide_kigou (basecode, code, increse);
break;
case KEY_HENKAN:
input_kigou (basecode, code, increse);
break;
case KEY_KETTEI:
input_kigou (basecode, code, increse);
ki = 0;
break;
default:
if ((keyvalue = IsCKey (inc)) != KEY_NORMAL)
goto top;
if (CheckCcode(inc)) {
if ((num = strtocode()) > 0) {
code = num;
basecode = code & 0xfff0;
guide_kigou(basecode, code, increse);
}
}
else if (inc == ESC)
ki = 0;
else if (inc == '\n' || inc == '\r' || inc == ' ')
input_kigou (basecode, code, increse);
else if (IsRedraw (inc))
guide_kigou (basecode, code, increse);
else
beep ();
break;
}
}
EndGuide (row, col);
disp_mode ();
return (rval);
}
IsRedraw (c)
int c;
{
if (c == 0x0c)
return (1);
else
return (0);
}
IsCKey (inc)
int inc;
{
switch (inc) {
case 'l':
return (KEY_RIGHT);
case 'k':
return (KEY_UP);
case 'j':
return (KEY_DOWN);
case 'h':
return (KEY_LEFT);
default:
return (KEY_NORMAL);
}
}
guide_kigou (bcode, code, increse)
int bcode, code, increse;
{
int i;
extern wchar16_t Mguide[];
wchar16_t wtmp[20];
char tmp[20];
unsigned short prcode;
TopGuide ();
printR (Mguide);
put_space (1);
put_space (1);
for (i = 0 ; i < increse ; i ++)
pkigou (bcode + i);
prcode = code;
if (((i = GetCcode()) == CODE_KUTEN) || (i == CODE_KUTEN2)) {
prcode -= 0x2020;
sprintf (tmp, " [%02d%02d]", prcode >> 8, prcode & 0xff);
} else {
if (i == CODE_SJIS)
prcode = jis2sjis(prcode);
else if ((i == CODE_EUC) || (i == CODE_EUC2))
prcode |= 0x8080;
sprintf (tmp, " [%04x]", prcode);
}
(void) mbstowcs(wtmp, tmp, 20);
SJ_print (wtmp);
backspace (8 + (bcode + increse - code) * 2);
Flush ();
}
pkigou (code)
int code;
{
wchar16_t tmp[3];
unsigned short ccode;
if (jis2euc(code) == 0) {
ccode = BEGIN_CODE;
} else {
ccode = code;
}
if ((GetCcode() == CODE_EUC2) || (GetCcode() == CODE_JIS2) ||
(GetCcode() == CODE_KUTEN2)) {
ccode = WcJIS2X0212(ccode);
} else {
ccode = WcJIS2X0208(ccode);
}
tmp[0] = ccode;
tmp[1] = '\0';
SJ_print (tmp);
}
void
input_kigou (basecode, code, increse)
int basecode, code, increse;
{
wchar16_t s[2];
unsigned short ccode, svlen;
Conversion *cv;
if (jis2euc(code) == 0) {
beep();
return;
}
if ((GetCcode() == CODE_EUC2) || (GetCcode() == CODE_JIS2) ||
(GetCcode() == CODE_KUTEN2)) {
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 {
master_out (s, 2);
master_flush();
}
StartGuide (&row, &col);
guide_kigou (basecode, code, increse);
lastcode = code;
}