sj3/etc.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

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