- p->csi_buf[p->csi_ptr++] = ch;
- if (csi_ender (ch) || (p->csi_ptr == VT102_CSI_LEN))
- {
- if (csi_starter (p->csi_buf[0]))
- {
- vt102_parse_csi (c, p->csi_buf, p->csi_ptr);
- }
- else if (scs_starter (p->csi_buf[0]))
- {
- vt102_scs (c, p->csi_buf[0], p->csi_buf[1]);
- }
- else
- {
- log_f (c->l,
- "<%s:%d no dispatcher for sequence starting \\033 \\%03o (ESC %c)>",
- __FILE__, __LINE__, p->csi_buf[0],
- safe_ch (p->csi_buf[0]));
- }
- p->in_csi = 0;
- }
+ p->cmd_buf[p->cmd_ptr++] = ch;
+ if (p->cmd_more_bytes) p->cmd_more_bytes--;
+
+
+ if (p->cmd_more_bytes==1) p->in_cmd=0;
+
+ switch (p->cmd_termination) {
+ case 0:
+ break;
+ default:
+ if (p->cmd_termination==ch) p->in_cmd=0;
+ break;
+ case CSI_ENDER:
+ if (csi_ender(ch)) p->in_cmd=0;
+ break;
+ }
+
+ if (!p->in_cmd) {
+ vt102_parse_esc(c);
+ p->cmd_more_bytes=0;
+ }