/[qemacs]/qemacs/shell.c
ViewVC logotype

Diff of /qemacs/shell.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.9 by chqrlie, Mon May 9 03:24:22 2005 UTC revision 1.10 by chqrlie, Mon May 9 03:32:19 2005 UTC
# Line 42  static ModeDef shell_mode; Line 42  static ModeDef shell_mode;
42  enum TTYState {  enum TTYState {
43      TTY_STATE_NORM,      TTY_STATE_NORM,
44      TTY_STATE_ESC,      TTY_STATE_ESC,
45        TTY_STATE_ESC2,
46      TTY_STATE_CSI,      TTY_STATE_CSI,
47  };  };
48    
# Line 54  typedef struct ShellState { Line 55  typedef struct ShellState {
55      int esc_params[MAX_ESC_PARAMS];      int esc_params[MAX_ESC_PARAMS];
56      int nb_esc_params;      int nb_esc_params;
57      int state;      int state;
58        int esc1;
59      int shifted;      int shifted;
60      EditBuffer *b;      EditBuffer *b;
61      EditBuffer *b_color; /* color buffer, one byte per char */      EditBuffer *b_color; /* color buffer, one byte per char */
# Line 302  static void tty_emulate(ShellState *s, i Line 304  static void tty_emulate(ShellState *s, i
304              }              }
305              break;              break;
306          case 14:          case 14:
             //eb_set_charset(s->b, &charset_8859_1);  
307              s->shifted = 1;              s->shifted = 1;
308              break;              break;
309          case 15:          case 15:
             //eb_set_charset(s->b, &charset_cp1125);  
310              s->shifted = 0;              s->shifted = 0;
311              break;              break;
312          case 27:          case 27:
# Line 315  static void tty_emulate(ShellState *s, i Line 315  static void tty_emulate(ShellState *s, i
315          default:          default:
316              if (c >= 32 || c == 9) {              if (c >= 32 || c == 9) {
317                  int c1, cur_len, len;                  int c1, cur_len, len;
318                    /* CG: assuming ISO-8859-1 characters */
319                  /* CG: horrible kludge for alternate charset support */                  /* CG: horrible kludge for alternate charset support */
320                  if (s->shifted && c >= 96 && c < 128)                  if (s->shifted && c >= 96 && c < 128)
321                      c += 32;                      c += 32;
# Line 346  static void tty_emulate(ShellState *s, i Line 347  static void tty_emulate(ShellState *s, i
347              s->nb_esc_params = 0;              s->nb_esc_params = 0;
348              s->state = TTY_STATE_CSI;              s->state = TTY_STATE_CSI;
349          } else {          } else {
350              s->state = TTY_STATE_NORM;              /* CG: should deal with other sequences:
351                 * ansi: hts=\EH, s0ds=\E(B, s1ds=\E)B, s2ds=\E*B, s3ds=\E+B,
352                 * linux: hts=\EH, rc=\E8, ri=\EM, rs1=\Ec\E]R, sc=\E7,
353                 * vt100: enacs=\E(B\E)0, hts=\EH, rc=\E8, ri=\EM$<5>,
354                 *        rmkx=\E[?1l\E>,
355                 *        rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
356                 *        smkx=\E[?1h\E=,
357                 * xterm: enacs=\E(B\E)0, hts=\EH, is2=\E[!p\E[?3;4l\E[4l\E>,
358                 *        rc=\E8, ri=\EM, rmkx=\E[?1l\E>, rs1=\Ec,
359                 *        rs2=\E[!p\E[?3;4l\E[4l\E>, sc=\E7, smkx=\E[?1h\E=,
360                 */
361                switch (c) {
362                case '(':
363                case ')':
364                case '*':
365                case '+':
366                case ']':
367                    s->esc1 = c;
368                    s->state = TTY_STATE_ESC2;
369                    break;
370                case 'H':   // hts
371                case '7':   // sc
372                case '8':   // rc
373                case 'M':   // ri
374                case 'c':   // rs1
375                case '>':   // rmkx, is2, rs2
376                case '=':   // smkx
377                    // XXX: do these
378                default:
379                    s->state = TTY_STATE_NORM;
380                    break;
381                }
382          }          }
383          break;          break;
384        case TTY_STATE_ESC2:
385            s->state = TTY_STATE_NORM;
386    #define ESC2(c1,c2)  (((c1)<<8)|((unsigned char)c2))
387            switch (ESC2(s->esc1, c)) {
388            case ESC2('(','B'):
389            case ESC2(')','B'):
390            case ESC2('(','0'):
391            case ESC2(')','0'):
392            case ESC2('*','B'):
393            case ESC2('+','B'):
394            case ESC2(']','R'):
395                /* XXX: ??? */
396                break;
397            }
398    #undef ESC2
399            break;
400      case TTY_STATE_CSI:      case TTY_STATE_CSI:
401          if (c >= '0' && c <= '9') {          if (c >= '0' && c <= '9') {
402              if (s->nb_esc_params < MAX_ESC_PARAMS) {              if (s->nb_esc_params < MAX_ESC_PARAMS) {

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.10

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26