~ubuntu-branches/ubuntu/lucid/kterm/lucid

« back to all changes in this revision

Viewing changes to charproc.c

  • Committer: Bazaar Package Importer
  • Author(s): ISHIKAWA Mutsumi
  • Date: 2002-02-15 00:30:40 UTC
  • Revision ID: james.westby@ubuntu.com-20020215003040-6cphq76lfqka32oq
Tags: 6.2.0-40
add Build-Depends: m4, closes: #133904

Show diffs side-by-side

added added

removed removed

Lines of Context:
188
188
#ifdef KTERM
189
189
#define XtNromanKanaFont "romanKanaFont"
190
190
#define XtNromanKanaBoldFont "romanKanaBoldFont"
 
191
#define XtNoldKanjiFont "oldKanjiFont"
 
192
#define XtNoldKanjiBoldFont "oldKanjiBoldFont"
 
193
#define XtNkanji90Font "kanji90Font"
 
194
#define XtNkanji90BoldFont "kanji90BoldFont"
 
195
#define XtNhojoKanjiFont "hojoKanjiFont"
 
196
#define XtNhojoKanjiBoldFont "hojoKanjiBoldFont"
 
197
#define XtNhanziFont "hanziFont"
 
198
#define XtNhanziBoldFont "hanziBoldFont"
 
199
#define XtNhanglFont "hanglFont"
 
200
#define XtNhanglBoldFont "hanglBoldFont"
 
201
#define XtNcnsOneFont   "cnsOneFont"
 
202
#define XtNcnsOneBoldFont   "cnsOneBoldFont"
 
203
#define XtNcnsTwoFont   "cnsTwoFont"
 
204
#define XtNcnsTwoBoldFont   "cnsTwoBoldFont"
 
205
#define XtNcnsThreeFont "cnsThreeFont"
 
206
#define XtNcnsThreeBoldFont "cnsThreeBoldFont"
 
207
#define XtNcnsFourFont  "cnsFourFont"
 
208
#define XtNcnsFourBoldFont  "cnsFourBoldFont"
 
209
#define XtNcnsFiveFont  "cnsFiveFont"
 
210
#define XtNcnsFiveBoldFont  "cnsFiveBoldFont"
 
211
#define XtNcnsSixFont   "cnsSixFont"
 
212
#define XtNcnsSixBoldFont   "cnsSixBoldFont"
 
213
#define XtNcnsSevenFont "cnsSevenFont"
 
214
#define XtNcnsSevenBoldFont "cnsSevenBoldFont"
 
215
#define XtNextOneKanjiFont "extOneKanjiFont"
 
216
#define XtNextOneKanjiBoldFont "extOneKanjiBoldFont"
 
217
#define XtNextTwoKanjiFont "extTwoKanjiFont"
 
218
#define XtNextTwoKanjiBoldFont "extTwoKanjiBoldFont"
191
219
# ifdef KTERM_MBCS
192
220
#define XtNkanjiFont "kanjiFont"
193
221
#define XtNkanjiBoldFont "kanjiBoldFont"
277
305
extern int igntable[];
278
306
extern int scrtable[];
279
307
extern int scstable[];
 
308
extern int escversiontable[];
280
309
#ifdef KTERM_MBCS
281
310
extern int mbcstable[];
282
311
extern int smbcstable[];
504
533
{XtNkanjiBoldFont, XtCKanjiFont, XtRString, sizeof(String),
505
534
        XtOffset(XtermWidget, screen._menu_bfont_names[F_JISX0208_0][fontMenu_fontdefault]),
506
535
        XtRString, (XtPointer) NULL},
 
536
{XtNoldKanjiFont, XtCKanjiFont, XtRString, sizeof(String),
 
537
        XtOffset(XtermWidget, screen._menu_font_names[F_JISC6226_0][fontMenu_fontdefault]),
 
538
        XtRString, (XtPointer) NULL},
 
539
{XtNoldKanjiBoldFont, XtCKanjiFont, XtRString, sizeof(String),
 
540
        XtOffset(XtermWidget, screen._menu_bfont_names[F_JISC6226_0][fontMenu_fontdefault]),
 
541
        XtRString, (XtPointer) NULL},
 
542
{XtNkanji90Font, XtCKanjiFont, XtRString, sizeof(String),
 
543
        XtOffset(XtermWidget, screen._menu_font_names[F_JISX0208_1990_0][fontMenu_fontdefault]),
 
544
        XtRString,(XtPointer) NULL},
 
545
{XtNkanji90BoldFont, XtCKanjiFont, XtRString, sizeof(String),
 
546
        XtOffset(XtermWidget, screen._menu_bfont_names[F_JISX0208_1990_0][fontMenu_fontdefault]),
 
547
        XtRString, (XtPointer) NULL},
 
548
{XtNhojoKanjiFont, XtCKanjiFont, XtRString, sizeof(String),
 
549
        XtOffset(XtermWidget, screen._menu_font_names[F_JISX0212_0][fontMenu_fontdefault]),
 
550
        XtRString, (XtPointer) NULL},
 
551
{XtNhojoKanjiBoldFont, XtCKanjiFont, XtRString, sizeof(String),
 
552
        XtOffset(XtermWidget, screen._menu_bfont_names[F_JISX0212_0][fontMenu_fontdefault]),
 
553
        XtRString, (XtPointer) NULL},
 
554
{XtNhanziFont, XtCKanjiFont, XtRString, sizeof(String),
 
555
        XtOffset(XtermWidget, screen._menu_font_names[F_GB2312_0][fontMenu_fontdefault]),
 
556
        XtRString, (XtPointer) NULL},
 
557
{XtNhanziBoldFont, XtCKanjiFont, XtRString, sizeof(String),
 
558
        XtOffset(XtermWidget, screen._menu_bfont_names[F_GB2312_0][fontMenu_fontdefault]),
 
559
        XtRString, (XtPointer) NULL},
 
560
{XtNhanglFont, XtCKanjiFont, XtRString, sizeof(String),
 
561
        XtOffset(XtermWidget, screen._menu_font_names[F_KSC5601_0][fontMenu_fontdefault]),
 
562
        XtRString, (XtPointer) NULL},
 
563
{XtNhanglBoldFont, XtCKanjiFont, XtRString, sizeof(String),
 
564
        XtOffset(XtermWidget, screen._menu_bfont_names[F_KSC5601_0][fontMenu_fontdefault]),
 
565
        XtRString, (XtPointer) NULL},
 
566
{XtNcnsOneFont, XtCKanjiFont, XtRString, sizeof(String),
 
567
        XtOffset(XtermWidget, screen._menu_font_names[F_CNS11643_1][fontMenu_fontdefault]),
 
568
        XtRString, (XtPointer) NULL},
 
569
{XtNcnsOneBoldFont, XtCKanjiFont, XtRString, sizeof(String),
 
570
        XtOffset(XtermWidget, screen._menu_bfont_names[F_CNS11643_1][fontMenu_fontdefault]),
 
571
        XtRString, (XtPointer) NULL},
 
572
{XtNcnsTwoFont, XtCKanjiFont, XtRString, sizeof(String),
 
573
        XtOffset(XtermWidget, screen._menu_font_names[F_CNS11643_2][fontMenu_fontdefault]),
 
574
        XtRString, (XtPointer) NULL},
 
575
{XtNcnsTwoBoldFont, XtCKanjiFont, XtRString, sizeof(String),
 
576
        XtOffset(XtermWidget, screen._menu_bfont_names[F_CNS11643_2][fontMenu_fontdefault]),
 
577
        XtRString, (XtPointer) NULL},
 
578
{XtNcnsThreeFont, XtCKanjiFont, XtRString, sizeof(String),
 
579
        XtOffset(XtermWidget, screen._menu_font_names[F_CNS11643_3][fontMenu_fontdefault]),
 
580
        XtRString, (XtPointer) NULL},
 
581
{XtNcnsThreeBoldFont, XtCKanjiFont, XtRString, sizeof(String),
 
582
        XtOffset(XtermWidget, screen._menu_bfont_names[F_CNS11643_3][fontMenu_fontdefault]),
 
583
        XtRString, (XtPointer) NULL},
 
584
{XtNcnsFourFont, XtCKanjiFont, XtRString, sizeof(String),
 
585
        XtOffset(XtermWidget, screen._menu_font_names[F_CNS11643_4][fontMenu_fontdefault]),
 
586
        XtRString, (XtPointer) NULL},
 
587
{XtNcnsFourBoldFont, XtCKanjiFont, XtRString, sizeof(String),
 
588
        XtOffset(XtermWidget, screen._menu_bfont_names[F_CNS11643_4][fontMenu_fontdefault]),
 
589
        XtRString, (XtPointer) NULL},
 
590
{XtNcnsFiveFont, XtCKanjiFont, XtRString, sizeof(String),
 
591
        XtOffset(XtermWidget, screen._menu_font_names[F_CNS11643_5][fontMenu_fontdefault]),
 
592
        XtRString, (XtPointer) NULL},
 
593
{XtNcnsFiveBoldFont, XtCKanjiFont, XtRString, sizeof(String),
 
594
        XtOffset(XtermWidget, screen._menu_bfont_names[F_CNS11643_5][fontMenu_fontdefault]),
 
595
        XtRString, (XtPointer) NULL},
 
596
{XtNcnsSixFont, XtCKanjiFont, XtRString, sizeof(String),
 
597
        XtOffset(XtermWidget, screen._menu_font_names[F_CNS11643_6][fontMenu_fontdefault]),
 
598
        XtRString, (XtPointer) NULL},
 
599
{XtNcnsSixBoldFont, XtCKanjiFont, XtRString, sizeof(String),
 
600
        XtOffset(XtermWidget, screen._menu_bfont_names[F_CNS11643_6][fontMenu_fontdefault]),
 
601
        XtRString, (XtPointer) NULL},
 
602
{XtNcnsSevenFont, XtCKanjiFont, XtRString, sizeof(String),
 
603
        XtOffset(XtermWidget, screen._menu_font_names[F_CNS11643_7][fontMenu_fontdefault]),
 
604
        XtRString, (XtPointer) NULL},
 
605
{XtNcnsSevenBoldFont, XtCKanjiFont, XtRString, sizeof(String),
 
606
        XtOffset(XtermWidget, screen._menu_bfont_names[F_CNS11643_7][fontMenu_fontdefault]),
 
607
        XtRString, (XtPointer) NULL},
 
608
{XtNextOneKanjiFont, XtCKanjiFont, XtRString, sizeof(String),
 
609
        XtOffset(XtermWidget, screen._menu_font_names[F_JISX0213_1][fontMenu_fontdefault]),
 
610
        XtRString, (XtPointer) NULL},
 
611
{XtNextOneKanjiBoldFont, XtCKanjiFont, XtRString, sizeof(String),
 
612
        XtOffset(XtermWidget, screen._menu_bfont_names[F_JISX0213_1][fontMenu_fontdefault]),
 
613
        XtRString, (XtPointer) NULL},
 
614
{XtNextTwoKanjiFont, XtCKanjiFont, XtRString, sizeof(String),
 
615
        XtOffset(XtermWidget, screen._menu_font_names[F_JISX0213_2][fontMenu_fontdefault]),
 
616
        XtRString, (XtPointer) NULL},
 
617
{XtNextTwoKanjiBoldFont, XtCKanjiFont, XtRString, sizeof(String),
 
618
        XtOffset(XtermWidget, screen._menu_bfont_names[F_JISX0213_2][fontMenu_fontdefault]),
 
619
        XtRString, (XtPointer) NULL},
507
620
#  endif /* KTERM_MBCS */
508
621
#  ifdef KTERM_KANJIMODE
509
622
{XtNkanjiMode, XtCKanjiMode, XtRString, sizeof(char *),
813
926
        XtOffsetOf(XtermWidgetRec, screen._menu_bfont_names[F_JISX0201_0][fontMenu_font6]),
814
927
        XtRString, (XtPointer) NULL},
815
928
# ifdef KTERM_MBCS
816
 
{"kanjiFont1", "KanjiFont1", XtRString, sizeof(String),
817
 
        XtOffsetOf(XtermWidgetRec, screen._menu_font_names[F_JISX0208_0][fontMenu_font1]),
818
 
        XtRString, (XtPointer) NULL},
819
 
{"kanjiFont2", "KanjiFont2", XtRString, sizeof(String),
820
 
        XtOffsetOf(XtermWidgetRec, screen._menu_font_names[F_JISX0208_0][fontMenu_font2]),
821
 
        XtRString, (XtPointer) NULL},
822
 
{"kanjiFont3", "KanjiFont3", XtRString, sizeof(String),
823
 
        XtOffsetOf(XtermWidgetRec, screen._menu_font_names[F_JISX0208_0][fontMenu_font3]),
824
 
        XtRString, (XtPointer) NULL},
825
 
{"kanjiFont4", "KanjiFont4", XtRString, sizeof(String),
826
 
        XtOffsetOf(XtermWidgetRec, screen._menu_font_names[F_JISX0208_0][fontMenu_font4]),
827
 
        XtRString, (XtPointer) NULL},
828
 
{"kanjiFont5", "KanjiFont5", XtRString, sizeof(String),
829
 
        XtOffsetOf(XtermWidgetRec, screen._menu_font_names[F_JISX0208_0][fontMenu_font5]),
830
 
        XtRString, (XtPointer) NULL},
831
 
{"kanjiFont6", "KanjiFont6", XtRString, sizeof(String),
832
 
        XtOffsetOf(XtermWidgetRec, screen._menu_font_names[F_JISX0208_0][fontMenu_font6]),
833
 
        XtRString, (XtPointer) NULL},
834
 
{"kanjiBoldFont1", "KanjiBoldFont1", XtRString, sizeof(String),
835
 
        XtOffsetOf(XtermWidgetRec, screen._menu_bfont_names[F_JISX0208_0][fontMenu_font1]),
836
 
        XtRString, (XtPointer) NULL},
837
 
{"kanjiBoldFont2", "KanjiBoldFont2", XtRString, sizeof(String),
838
 
        XtOffsetOf(XtermWidgetRec, screen._menu_bfont_names[F_JISX0208_0][fontMenu_font2]),
839
 
        XtRString, (XtPointer) NULL},
840
 
{"kanjiBoldFont3", "KanjiBoldFont3", XtRString, sizeof(String),
841
 
        XtOffsetOf(XtermWidgetRec, screen._menu_bfont_names[F_JISX0208_0][fontMenu_font3]),
842
 
        XtRString, (XtPointer) NULL},
843
 
{"kanjiBoldFont4", "KanjiBoldFont4", XtRString, sizeof(String),
844
 
        XtOffsetOf(XtermWidgetRec, screen._menu_bfont_names[F_JISX0208_0][fontMenu_font4]),
845
 
        XtRString, (XtPointer) NULL},
846
 
{"kanjiBoldFont5", "KanjiBoldFont5", XtRString, sizeof(String),
847
 
        XtOffsetOf(XtermWidgetRec, screen._menu_bfont_names[F_JISX0208_0][fontMenu_font5]),
848
 
        XtRString, (XtPointer) NULL},
849
 
{"kanjiBoldFont6", "KanjiBoldFont6", XtRString, sizeof(String),
850
 
        XtOffsetOf(XtermWidgetRec, screen._menu_bfont_names[F_JISX0208_0][fontMenu_font6]),
851
 
        XtRString, (XtPointer) NULL},
 
929
# include "kfontlist.c"
852
930
# endif /* KTERM_MBCS */
853
931
#else /* !KTERM */
854
932
{"font1", "Font1", XtRString, sizeof(String),
1102
1180
}
1103
1181
 
1104
1182
# ifdef KTERM_KANJIMODE
1105
 
doSJIS()
 
1183
int isJISX0208_1990();
 
1184
int isJISX0213_1();
 
1185
int isJISX0213_2();
 
1186
doSJIS_p1()
1106
1187
{
1107
1188
        Char dotextbuf[TEXT_BUF_SIZE];
1108
1189
        register Char c1, c2;
1110
1191
        register Char *dcp = dotextbuf;
1111
1192
        register int cnt = bcnt > TEXT_BUF_SIZE ? TEXT_BUF_SIZE : bcnt;
1112
1193
                                /* TEXT_BUF_SIZE must be an even number */
 
1194
        int do_next = 0;
1113
1195
 
1114
1196
#  define SJIS1(c) ((0x81 <= c && c <= 0x9F) || (0xE0 <= c && c <= 0xEF))
1115
1197
#  define SJIS2(c) (0x40 <= c && c <= 0xFC && c != 0x7F)
1144
1226
                if (c2 <= 0x7e)      c2 -= 0x1f;
1145
1227
                else if (c2 <= 0x9e) c2 -= 0x20;
1146
1228
                else                 c2 -= 0x7e, c1 += 1;
1147
 
                /* copy to buffer */
1148
 
                *dcp++ = c1;
1149
 
                *dcp++ = c2;
1150
 
        }
1151
 
        dotext(&term->screen, term->flags, GSET_KANJI, dotextbuf, dcp);
1152
 
        bcnt -= cp - bptr;
1153
 
        bptr = cp;
1154
 
}
 
1229
 
 
1230
                if (isJISX0213_1(c1, c2)) {
 
1231
                        do_next = GSET_EXTKANJI1;
 
1232
                        break;
 
1233
                } else if (isJISX0208_1990(c1, c2)) {
 
1234
                        do_next = GSET_90KANJI;
 
1235
                        break;
 
1236
                }
 
1237
                /* copy to buffer */
 
1238
                *dcp++ = c1;
 
1239
                *dcp++ = c2;
 
1240
        }
 
1241
        dotext(&term->screen, term->flags, GSET_KANJI, dotextbuf, dcp);
 
1242
        if (do_next) {
 
1243
                dcp = dotextbuf;
 
1244
                *dcp++ = c1;
 
1245
                *dcp++ = c2;
 
1246
                dotext(&term->screen, term->flags, do_next, dotextbuf, dcp);
 
1247
        }
 
1248
        bcnt -= cp - bptr;
 
1249
        bptr = cp;
 
1250
}
 
1251
 
 
1252
doSJIS_p2()
 
1253
{
 
1254
        Char dotextbuf[TEXT_BUF_SIZE];
 
1255
        register Char c1, c2;
 
1256
        register Char *cp = bptr;
 
1257
        register Char *dcp = dotextbuf;
 
1258
        register int cnt = bcnt > TEXT_BUF_SIZE ? TEXT_BUF_SIZE : bcnt;
 
1259
                                /* TEXT_BUF_SIZE must be an even number */
 
1260
 
 
1261
#  define SJIS3(c) (0xF0 <= c && c <= 0xFC)
 
1262
        while (cnt > 0) {
 
1263
                /* first byte */
 
1264
                c1 = *cp;
 
1265
                if (!SJIS3(c1))
 
1266
                        break;
 
1267
                cnt--;
 
1268
                cp++;
 
1269
                if (cnt == 0) { /* must be (bcnt == cp-bptr) */
 
1270
                        /*
 
1271
                         * Incomplete multi-byte character.
 
1272
                         * Preserve and skip its first byte.
 
1273
                         */
 
1274
                        pending_byte = c1;
 
1275
                        break;
 
1276
                }
 
1277
                /* second byte */
 
1278
                c2 = *cp;
 
1279
                if (!SJIS2(c2)) {
 
1280
                        /*
 
1281
                         * Illegal shift-jis character. Skip it.
 
1282
                         */
 
1283
                        break;
 
1284
                }
 
1285
                cnt--;
 
1286
                cp++;
 
1287
 
 
1288
                /* SJIS to JIS code conversion */
 
1289
                if (c1 == 0xf0)
 
1290
                        if (c2 <= 0x9e) c1 = 0x21;
 
1291
                        else            c1 = 0x27;
 
1292
                else if (c1 == 0xf1)
 
1293
                                        c1 = 0x23;
 
1294
                else if (c1 == 0xf2)
 
1295
                        if (c2 <= 0x9e) c1 = 0x25;
 
1296
                        else            c1 = 0x2b;
 
1297
                else if (c1 == 0xf3)
 
1298
                                        c1 = 0x2d;
 
1299
                else if (c1 == 0xf4)
 
1300
                        if (c2 <= 0x9e) c1 = 0x2f;
 
1301
                        else            c1 = 0x6d;
 
1302
                else c1 = (c1 - 0xf5) * 2 + 0x6f;
 
1303
                if (c2 <= 0x7e)      c2 -= 0x1f;
 
1304
                else if (c2 <= 0x9e) c2 -= 0x20;
 
1305
                else                 c2 -= 0x7e, c1 += 1;
 
1306
 
 
1307
                /* copy to buffer */
 
1308
                *dcp++ = c1;
 
1309
                *dcp++ = c2;
 
1310
        }
 
1311
        dotext(&term->screen, term->flags, GSET_EXTKANJI2, dotextbuf, dcp);
 
1312
        bcnt -= cp - bptr;
 
1313
        bptr = cp;
 
1314
}
 
1315
 
 
1316
doEUC_p1()
 
1317
{
 
1318
        Char dotextbuf[TEXT_BUF_SIZE];
 
1319
        register Char c1, c2;
 
1320
        register Char *cp = bptr;
 
1321
        register Char *dcp = dotextbuf;
 
1322
        register int cnt = bcnt > TEXT_BUF_SIZE ? TEXT_BUF_SIZE : bcnt;
 
1323
                                /* TEXT_BUF_SIZE must be an even number */
 
1324
        int do_next = 0;
 
1325
 
 
1326
#  define EUC(c) ((0xA1 <= c && c <= 0xFE))
 
1327
        while (cnt > 0) {
 
1328
                /* first byte */
 
1329
                c1 = *cp;
 
1330
                if (!EUC(c1))
 
1331
                        break;
 
1332
                cnt--;
 
1333
                cp++;
 
1334
                if (cnt == 0) {
 
1335
                        pending_byte = c1;
 
1336
                        break;
 
1337
                }
 
1338
                /* second byte */
 
1339
                c2 = *cp;
 
1340
                if (!EUC(c2)) {
 
1341
                        break;
 
1342
                }
 
1343
 
 
1344
                /* check JIS X 0213 */
 
1345
                if (isJISX0213_1(c1, c2)) {
 
1346
                        cnt ++;
 
1347
                        cp --;
 
1348
                        do_next = GSET_EXTKANJI1;
 
1349
                        break;
 
1350
                } else if (isJISX0208_1990(c1, c2)) {
 
1351
                        cnt ++;
 
1352
                        cp --;
 
1353
                        do_next = GSET_90KANJI;
 
1354
                        break;
 
1355
                }
 
1356
                cnt--;
 
1357
                cp++;
 
1358
 
 
1359
                /* copy to buffer */
 
1360
                *dcp++ = c1 & 0x7f;
 
1361
                *dcp++ = c2 & 0x7f;
 
1362
        }
 
1363
        dotext(&term->screen, term->flags, GSET_KANJI, dotextbuf, dcp);
 
1364
        bcnt -= cp - bptr;
 
1365
        bptr = cp;
 
1366
 
 
1367
        if (do_next) {
 
1368
                doSS(do_next);
 
1369
        }
 
1370
}
 
1371
 
 
1372
doEUC_p2()
 
1373
{
 
1374
        Char dotextbuf[TEXT_BUF_SIZE];
 
1375
        register Char c1, c2;
 
1376
        register Char *cp = bptr;
 
1377
 
 
1378
        c1 = cp[0];
 
1379
        c2 = cp[1];
 
1380
        if (EUC(c1) && EUC(c2) && isJISX0213_2(c1, c2)) {
 
1381
                doSS(GSET_EXTKANJI2);
 
1382
        } else {
 
1383
                doSS(GSET_HOJOKANJI);
 
1384
        }
 
1385
}
 
1386
 
1155
1387
# endif /* KTERM_KANJIMODE */
1156
1388
#endif /* KTERM */
1157
1389
 
1167
1399
        Char cs96;
1168
1400
# ifdef KTERM_MBCS
1169
1401
        Char mbcs;
 
1402
        int gsetversion = 0;
1170
1403
# endif /* KTERM_MBCS */
1171
1404
#endif /* KTERM */
1172
1405
        extern int TrackMouse();
1193
1426
#endif /* KTERM */
1194
1427
#ifdef KTERM_KANJIMODE
1195
1428
                c = doinput();
 
1429
                if (term->flags & EUC_KANJI && EUC(c)
 
1430
                    && screen->curss == 0 
 
1431
                    && screen->gsets[1] == GSET_KANJI) {
 
1432
                        bcnt ++;
 
1433
                        *--bptr = c;
 
1434
                        doEUC_p1();
 
1435
                        continue;
 
1436
                }
 
1437
                if (term->flags & EUC_KANJI && EUC(c)
 
1438
                    && screen->curss == 3 
 
1439
                    && screen->gsets[3] == GSET_HOJOKANJI) {
 
1440
                        bcnt ++;
 
1441
                        *--bptr = c;
 
1442
                        doEUC_p2();
 
1443
                        if (pending_byte == 0)
 
1444
                                screen->curss = 0;
 
1445
                        continue;
 
1446
                }
1196
1447
                if (term->flags & SJIS_KANJI && SJIS1(c)) {
1197
1448
                        bcnt++;
1198
1449
                        *--bptr = c;
1199
 
                        doSJIS();
 
1450
                        doSJIS_p1();
 
1451
                        screen->curss = 0;
 
1452
                        continue;
 
1453
                }
 
1454
                if (term->flags & SJIS_KANJI && SJIS3(c)) {
 
1455
                        bcnt++;
 
1456
                        *--bptr = c;
 
1457
                        doSJIS_p2();
1200
1458
                        screen->curss = 0;
1201
1459
                        continue;
1202
1460
                }
1243
1501
 
1244
1502
                 case CASE_GROUND_STATE:
1245
1503
                        /* exit ignore mode */
 
1504
#ifdef KTERM
 
1505
                        cs96 = 0;
 
1506
#ifdef KTERM_MBCS
 
1507
                        mbcs = 0;
 
1508
                        gsetversion = 0;
 
1509
#endif /* KTERM_MBCS */
 
1510
#endif /* KTERM */
1246
1511
                        parsestate = groundtable;
1247
1512
                        break;
1248
1513
 
1328
1593
                        scstype = 0; /* for ESC-$-F */
1329
1594
                        parsestate = mbcstable;
1330
1595
                        break;
 
1596
 
 
1597
                case CASE_GSET_VERSION_STATE:
 
1598
                        parsestate = escversiontable;
 
1599
                        break;
 
1600
 
 
1601
                case CASE_GSET_VERSION:
 
1602
                        gsetversion = c;
 
1603
                        parsestate = groundtable;
 
1604
                        break;
 
1605
 
1331
1606
#endif /* KTERM_MBCS */
1332
1607
 
1333
1608
#ifdef KTERM
1374
1649
 
1375
1650
                 case CASE_ESC_IGNORE:
1376
1651
                        /* unknown escape sequence */
 
1652
#ifdef KTERM
 
1653
                        cs96 = 0;
 
1654
#ifdef KTERM_MBCS
 
1655
                        mbcs = 0;
 
1656
#endif /* KTERM_MBCS */
 
1657
#endif /* KTERM */
1377
1658
                        parsestate = eigtable;
1378
1659
                        break;
1379
1660
 
1773
2054
 
1774
2055
                 case CASE_GSETS:
1775
2056
#ifdef KTERM
 
2057
                        if (c == '0' && !cs96
 
2058
# ifdef KTERM_MBCS
 
2059
                            && !mbcs
 
2060
# endif
 
2061
                            ) { /* hack for ESC ( 0 */
 
2062
                                c = '@' - 1;
 
2063
                                cs96 = CS96;
 
2064
                        }
1776
2065
# ifdef KTERM_MBCS
1777
2066
                        screen->gsets[scstype] = GSET(c) | cs96 | mbcs;
 
2067
                        if (gsetversion) {
 
2068
                                if (screen->gsets[scstype] == GSET_KANJI) {
 
2069
                                        if (gsetversion == '@'){
 
2070
                                                screen->gsets[scstype] = GSET_90KANJI;
 
2071
                                        }
 
2072
                                }
 
2073
                                gsetversion = 0;
 
2074
                        }
1778
2075
# else /* !KTERM_MBCS */
1779
2076
                        screen->gsets[scstype] = GSET(c) | cs96;
1780
2077
# endif /* !KTERM_MBCS */
1976
2273
static char *v_bufstr = NULL;   /* beginning of area to write */
1977
2274
static char *v_bufptr;          /* end of area to write */
1978
2275
static char *v_bufend;          /* end of physical buffer */
1979
 
#define ptymask()       (v_bufptr > v_bufstr ? pty_mask : 0)
1980
2276
 
1981
2277
/* Write data to the pty as typed by the user, pasted with the mouse,
1982
2278
   or generated by us in response to a query ESC sequence. */
3291
3587
#ifdef KTERM
3292
3588
   new->screen.dynamic_font_load = request->screen.dynamic_font_load;
3293
3589
   for (fnum = F_ISO8859_1; fnum < FCNT; fnum++) {
3294
 
    if (fnum == F_ISO8859_1 || fnum == F_JISX0201_0 || fnum == F_JISX0208_0) {
 
3590
     if (fnum == F_ISO8859_1 
 
3591
         || fnum == F_JISX0201_0 
 
3592
         || fnum == F_JISX0208_0
 
3593
         || fnum == F_JISC6226_0
 
3594
         || fnum == F_JISX0208_1990_0
 
3595
         || fnum == F_JISX0212_0
 
3596
         || fnum == F_GB2312_0
 
3597
         || fnum == F_KSC5601_0
 
3598
         || fnum == F_CNS11643_1
 
3599
         || fnum == F_CNS11643_2
 
3600
         || fnum == F_CNS11643_3
 
3601
         || fnum == F_CNS11643_4
 
3602
         || fnum == F_CNS11643_5
 
3603
         || fnum == F_CNS11643_6
 
3604
         || fnum == F_CNS11643_7
 
3605
         || fnum == F_JISX0213_1
 
3606
         || fnum == F_JISX0213_2 ) {
3295
3607
     for (i = fontMenu_fontdefault; i <= fontMenu_lastBuiltin; i++) {
3296
3608
       new->screen.menu_font_names[i] = request->screen.menu_font_names[i];
3297
3609
       new->screen.menu_bfont_names[i] = request->screen.menu_bfont_names[i];
3564
3876
        setupgset();
3565
3877
        screen->gsets[0] = GSET_ASCII;
3566
3878
# ifdef KTERM_KANJIMODE
3567
 
        screen->gsets[1] = (term->flags & EUC_KANJI) ? GSET_KANJI : GSET_KANA;
 
3879
        screen->gsets[1] = (term->flags & EUC_KANJI) ? GSET_KANJI : 
 
3880
                (term->flags & SJIS_KANJI) ? GSET_KANA : GSET_LATIN1R;
3568
3881
        screen->gsets[2] = (term->flags & EUC_KANJI) ? GSET_KANA : GSET_ASCII;
3569
3882
        screen->gsets[3] = (term->flags & EUC_KANJI) ? GSET_HOJOKANJI : GSET_ASCII;
3570
3883
# else /* !KTERM_KANJIMODE */
3642
3955
               *s,
3643
3956
               *ns,
3644
3957
               *end,
3645
 
                tmp[1024],
3646
3958
                buf[32];
3647
3959
    XIM         xim = (XIM) NULL;
3648
3960
    XIMStyles  *xim_styles;
3669
3981
        if ((p = XSetLocaleModifiers("@im=none")) != NULL && *p)
3670
3982
            xim = XOpenIM(XtDisplay(term), NULL, NULL, NULL);
3671
3983
    } else {
3672
 
        strcpy(tmp, term->misc.input_method);
3673
 
        for(ns=s=tmp; ns && *s;) {
 
3984
        for(ns=s=term->misc.input_method; ns && *s;) {
3674
3985
            while (*s && isspace(*s)) s++;
3675
3986
            if (!*s) break;
3676
3987
            if ((ns = end = index(s, ',')) == 0)
3677
3988
                end = s + strlen(s);
3678
3989
            while (isspace(*end)) end--;
3679
 
            *end = '\0';
3680
3990
 
3681
3991
            strcpy(buf, "@im=");
3682
 
            strcat(buf, s);
 
3992
            if (end - (s + (sizeof(buf) - 5)) > 0)
 
3993
                end = s + (sizeof(buf) - 5);
 
3994
            strncat(buf, s, end - s);
 
3995
 
3683
3996
            if ((p = XSetLocaleModifiers(buf)) != NULL && *p
3684
3997
                && (xim = XOpenIM(XtDisplay(term), NULL, NULL, NULL)) != NULL)
3685
3998
                break;
3708
4021
    }
3709
4022
 
3710
4023
    found = False;
3711
 
    strcpy(tmp, term->misc.preedit_type);
3712
 
    for(s = tmp; s && !found;) {
 
4024
    for(s = term->misc.preedit_type; s && !found;) {
3713
4025
        while (*s && isspace(*s)) s++;
3714
4026
        if (!*s) break;
3715
4027
        if (ns = end = index(s, ','))
3717
4029
        else
3718
4030
            end = s + strlen(s);
3719
4031
        while (isspace(*end)) end--;
3720
 
        *end = '\0';
3721
4032
 
3722
 
        if (!strcmp(s, "OverTheSpot")) {
 
4033
        if (!strncmp(s, "OverTheSpot", end - s)) {
3723
4034
            input_style = (XIMPreeditPosition | XIMStatusArea);
3724
 
        } else if (!strcmp(s, "OffTheSpot")) {
 
4035
        } else if (!strncmp(s, "OffTheSpot", end - s)) {
3725
4036
            input_style = (XIMPreeditArea | XIMStatusArea);
3726
 
        } else if (!strcmp(s, "Root")) {
 
4037
        } else if (!strncmp(s, "Root", end - s)) {
3727
4038
            input_style = (XIMPreeditNothing | XIMStatusNothing);
3728
4039
        }
3729
4040
        for (i = 0; (unsigned short)i < xim_styles->count_styles; i++)
4105
4416
                screen->gsets[0] = GSET_ASCII;
4106
4417
# ifdef KTERM_KANJIMODE
4107
4418
                screen->gsets[1] = (term->flags & EUC_KANJI)
4108
 
                                        ? GSET_KANJI : GSET_KANA;
 
4419
                                        ? GSET_KANJI 
 
4420
                                        : (term->flags & SJIS_KANJI)
 
4421
                                                ? GSET_KANA : GSET_LATIN1R;
4109
4422
                screen->gsets[2] = (term->flags & EUC_KANJI)
4110
4423
                                        ? GSET_KANA : GSET_ASCII;
4111
4424
                screen->gsets[3] = (term->flags & EUC_KANJI)
4407
4720
        XtOverrideTranslations(w, original);
4408
4721
        return;
4409
4722
    }
4410
 
    (void) sprintf( mapName, "%sKeymap", params[0] );
 
4723
    (void) sprintf( mapName, "%*sKeymap", (int)sizeof(mapName) - 10, params[0] );
4411
4724
    (void) strcpy( mapClass, mapName );
4412
4725
    if (islower(mapClass[0])) mapClass[0] = toupper(mapClass[0]);
4413
4726
    XtGetSubresources( w, (XtPointer)&keymap, mapName, mapClass,