diff options
Diffstat (limited to 'vietnamese/vnterm/files/patch-charproc.c')
-rw-r--r-- | vietnamese/vnterm/files/patch-charproc.c | 294 |
1 files changed, 294 insertions, 0 deletions
diff --git a/vietnamese/vnterm/files/patch-charproc.c b/vietnamese/vnterm/files/patch-charproc.c new file mode 100644 index 000000000000..b7978ee7a709 --- /dev/null +++ b/vietnamese/vnterm/files/patch-charproc.c @@ -0,0 +1,294 @@ +--- charproc.c.orig Mon Aug 21 08:47:46 2000 ++++ charproc.c Sat Feb 10 05:32:41 2001 +@@ -72,6 +72,10 @@ + #include <X11/Shell.h> + #endif /* NO_ACTIVE_ICON */ + ++#ifndef NO_VIETNAMESE ++#include <vnkeys.h> ++#endif /* NO_VIETNAMESE */ ++ + /* + * Check for both EAGAIN and EWOULDBLOCK, because some supposedly POSIX + * systems are broken and return EWOULDBLOCK when they should return EAGAIN. +@@ -619,6 +623,10 @@ + for( ; ; ) { + switch (parsestate[c = doinput()]) { + case CASE_PRINT: ++#ifndef NO_VIETNAMESE ++label_CASE_PRINT: /* for escaping from the CASE_IGNORE ++ state with Vietnamese characters */ ++#endif /* NO_VIETNAMESE */ + /* printable characters */ + top = bcnt > TEXT_BUF_SIZE ? TEXT_BUF_SIZE : bcnt; + cp = bptr; +@@ -656,6 +664,9 @@ + break; + + case CASE_IGNORE: ++#ifndef NO_VIETNAMESE ++ if (isgraph(c)) goto label_CASE_PRINT; ++#endif /* NO_VIETNAMESE */ + /* Ignore character */ + break; + +@@ -666,17 +677,32 @@ + + case CASE_BS: + /* backspace */ ++#ifndef NO_VIETNAMESE ++ /* flush the Vietnamese FSM */ ++ dotext(screen, term->flags, ++ screen->gsets[screen->curgl], 0, 0); ++#endif /* NO_VIETNAMESE */ + CursorBack(screen, 1); + break; + + case CASE_CR: + /* carriage return */ ++#ifndef NO_VIETNAMESE ++ /* flush the Vietnamese FSM */ ++ dotext(screen, term->flags, ++ screen->gsets[screen->curgl], 0, 0); ++#endif /* NO_VIETNAMESE */ + CarriageReturn(screen); + parsestate = groundtable; + break; + + case CASE_ESC: + /* escape */ ++#ifndef NO_VIETNAMESE ++ /* flush the Vietnamese FSM */ ++ dotext(screen, term->flags, ++ screen->gsets[screen->curgl], 0, 0); ++#endif /* NO_VIETNAMESE */ + parsestate = esctable; + break; + +@@ -684,6 +710,11 @@ + /* + * form feed, line feed, vertical tab + */ ++#ifndef NO_VIETNAMESE ++ /* flush the Vietnamese FSM */ ++ dotext(screen, term->flags, ++ screen->gsets[screen->curgl], 0, 0); ++#endif /* NO_VIETNAMESE */ + Index(screen, 1); + if (term->flags & LINEFEED) + CarriageReturn(screen); +@@ -695,6 +726,11 @@ + + case CASE_TAB: + /* tab */ ++#ifndef NO_VIETNAMESE ++ /* flush the Vietnamese FSM */ ++ dotext(screen, term->flags, ++ screen->gsets[screen->curgl], 0, 0); ++#endif /* NO_VIETNAMESE */ + screen->cur_col = TabNext(term->tabs, screen->cur_col); + if (screen->cur_col > screen->max_col) + screen->cur_col = screen->max_col; +@@ -762,6 +798,11 @@ + + case CASE_ICH: + /* ICH */ ++#ifndef NO_VIETNAMESE ++ /* flush the Vietnamese FSM */ ++ dotext(screen, term->flags, ++ screen->gsets[screen->curgl], 0, 0); ++#endif /* NO_VIETNAMESE */ + if((row = param[0]) < 1) + row = 1; + InsertChar(screen, row); +@@ -770,6 +811,11 @@ + + case CASE_CUU: + /* CUU */ ++#ifndef NO_VIETNAMESE ++ /* flush the Vietnamese FSM */ ++ dotext(screen, term->flags, ++ screen->gsets[screen->curgl], 0, 0); ++#endif /* NO_VIETNAMESE */ + if((row = param[0]) < 1) + row = 1; + CursorUp(screen, row); +@@ -778,6 +824,11 @@ + + case CASE_CUD: + /* CUD */ ++#ifndef NO_VIETNAMESE ++ /* flush the Vietnamese FSM */ ++ dotext(screen, term->flags, ++ screen->gsets[screen->curgl], 0, 0); ++#endif /* NO_VIETNAMESE */ + if((row = param[0]) < 1) + row = 1; + CursorDown(screen, row); +@@ -786,6 +837,11 @@ + + case CASE_CUF: + /* CUF */ ++#ifndef NO_VIETNAMESE ++ /* flush the Vietnamese FSM */ ++ dotext(screen, term->flags, ++ screen->gsets[screen->curgl], 0, 0); ++#endif /* NO_VIETNAMESE */ + if((row = param[0]) < 1) + row = 1; + CursorForward(screen, row); +@@ -794,6 +850,11 @@ + + case CASE_CUB: + /* CUB */ ++#ifndef NO_VIETNAMESE ++ /* flush the Vietnamese FSM */ ++ dotext(screen, term->flags, ++ screen->gsets[screen->curgl], 0, 0); ++#endif /* NO_VIETNAMESE */ + if((row = param[0]) < 1) + row = 1; + CursorBack(screen, row); +@@ -802,6 +863,11 @@ + + case CASE_CUP: + /* CUP | HVP */ ++#ifndef NO_VIETNAMESE ++ /* flush the Vietnamese FSM */ ++ dotext(screen, term->flags, ++ screen->gsets[screen->curgl], 0, 0); ++#endif /* NO_VIETNAMESE */ + if((row = param[0]) < 1) + row = 1; + if(nparam < 2 || (col = param[1]) < 1) +@@ -821,6 +887,11 @@ + + case CASE_ED: + /* ED */ ++#ifndef NO_VIETNAMESE ++ /* flush the Vietnamese FSM */ ++ dotext(screen, term->flags, ++ screen->gsets[screen->curgl], 0, 0); ++#endif /* NO_VIETNAMESE */ + switch (param[0]) { + case DEFAULT: + case 0: +@@ -840,6 +911,11 @@ + + case CASE_EL: + /* EL */ ++#ifndef NO_VIETNAMESE ++ /* flush the Vietnamese FSM */ ++ dotext(screen, term->flags, ++ screen->gsets[screen->curgl], 0, 0); ++#endif /* NO_VIETNAMESE */ + switch (param[0]) { + case DEFAULT: + case 0: +@@ -857,6 +933,11 @@ + + case CASE_IL: + /* IL */ ++#ifndef NO_VIETNAMESE ++ /* flush the Vietnamese FSM */ ++ dotext(screen, term->flags, ++ screen->gsets[screen->curgl], 0, 0); ++#endif /* NO_VIETNAMESE */ + if((row = param[0]) < 1) + row = 1; + InsertLine(screen, row); +@@ -865,6 +946,11 @@ + + case CASE_DL: + /* DL */ ++#ifndef NO_VIETNAMESE ++ /* flush the Vietnamese FSM */ ++ dotext(screen, term->flags, ++ screen->gsets[screen->curgl], 0, 0); ++#endif /* NO_VIETNAMESE */ + if((row = param[0]) < 1) + row = 1; + DeleteLine(screen, row); +@@ -873,6 +959,11 @@ + + case CASE_DCH: + /* DCH */ ++#ifndef NO_VIETNAMESE ++ /* flush the Vietnamese FSM */ ++ dotext(screen, term->flags, ++ screen->gsets[screen->curgl], 0, 0); ++#endif /* NO_VIETNAMESE */ + if((row = param[0]) < 1) + row = 1; + DeleteChar(screen, row); +@@ -1092,6 +1183,11 @@ + + case CASE_NEL: + /* NEL */ ++#ifndef NO_VIETNAMESE ++ /* flush the Vietnamese FSM */ ++ dotext(screen, term->flags, ++ screen->gsets[screen->curgl], 0, 0); ++#endif /* NO_VIETNAMESE */ + Index(screen, 1); + CarriageReturn(screen); + +@@ -1109,6 +1205,11 @@ + + case CASE_RI: + /* RI */ ++#ifndef NO_VIETNAMESE ++ /* flush the Vietnamese FSM */ ++ dotext(screen, term->flags, ++ screen->gsets[screen->curgl], 0, 0); ++#endif /* NO_VIETNAMESE */ + RevIndex(screen, 1); + parsestate = groundtable; + break; +@@ -1460,6 +1561,13 @@ + register int len; + register int n; + register int next_col; ++#ifndef NO_VIETNAMESE ++ extern Boolean vn_filter_screen; ++ extern Vk_Fsm vn_screen_id; ++ unsigned char buf2[TEXT_BUF_SIZE+3]; /* at most three pending ++ chars from previous ++ call */ ++#endif /* NO_VIETNAMESE */ + + switch (charset) { + case 'A': /* United Kingdom set */ +@@ -1480,6 +1588,32 @@ + default: /* any character sets we don't recognize*/ + return; + } ++ ++#ifndef NO_VIETNAMESE ++ if (buf == 0 && ptr == 0) { /* flush the FSM */ ++ ++ int count; ++ ++ vk_flush(vn_screen_id, buf2, &count); ++ buf = (char *)buf2; ++ ptr = (char *)buf + count; ++ } else if (vn_filter_screen) { ++ /* translate output into 8-bit Vietnamese */ ++ register unsigned char *s1, *s2; ++ register int i; ++ unsigned char outchars[5]; ++ int count; ++ ++ for (s1 = (unsigned char*)buf, s2 = buf2; ++ s1 < (unsigned char*)ptr; s1++) { ++ vk_step(vn_screen_id, *s1, outchars, &count); ++ for (i = 0; i < count; i++) *s2++ = outchars[i]; ++ } ++ ++ buf = (char *)buf2; ++ ptr = (char *)s2; ++ } ++#endif /* NO_VIETNAMESE */ + + len = ptr - buf; + ptr = buf; |