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>
482 lines
9.9 KiB
C
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);
|
|
}
|
|
|
|
|