4 * Copyright (c) 2008 James McKenzie <james@fishsoup.dhs.org>,
9 static char rcsid[] = "$Id$";
13 * Revision 1.4 2008/02/04 05:45:55 james
16 * Revision 1.3 2008/02/04 02:05:06 james
17 * *** empty log message ***
19 * Revision 1.2 2008/02/04 01:32:39 james
20 * *** empty log message ***
22 * Revision 1.1 2008/02/03 23:36:41 james
23 * *** empty log message ***
32 :al=\E[L:dc=\E[P:dl=\E[M:ei=\E[4l:im=\E[4h:tc=vt100:
34 vt100|vt100-am|dec vt100 (w/advanced video):\
36 :co#80:it#8:li#24:vt#3:\
37 :DO=\E[%dB:LE=\E[%dD:RA=\E[?7l:RI=\E[%dC:SA=\E[?7h:\
39 :ac=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~:\
40 :ae=^O:as=^N:bl=^G:cb=\E[1K:cd=\E[J:ce=\E[K:cl=\E[H\E[J:\
41 :cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:ct=\E[3g:do=^J:\
42 :eA=\E(B\E)0:ho=\E[H:kb=^H:kd=\EOB:ke=\E[?1l\E>:kl=\EOD:\
43 :kr=\EOC:ks=\E[?1h\E=:ku=\EOA:le=^H:mb=\E[5m:md=\E[1m:\
44 :me=\E[m\017:mr=\E[7m:nd=\E[C:rc=\E8:\
45 :rs=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:sc=\E7:se=\E[m:\
46 :sf=^J:so=\E[7m:sr=\EM:st=\EH:ta=^I:ue=\E[m:up=\E[A:\
47 :us=\E[4m:tc=vt100+fnkeys:
49 vt100+fnkeys|dec vt100 numeric keypad:\
50 :k0=\EOy:k5=\EOt:k6=\EOu:k7=\EOv:k8=\EOl:k9=\EOw:k;=\EOx:\
53 vt100+pfkeys|dec vt100 numeric keypad:\
54 :@8=\EOM:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:tc=vt100+keypad:
56 vt100+keypad|dec vt100 numeric keypad no fkeys:\
57 :K1=\EOq:K2=\EOr:K3=\EOs:K4=\EOp:K5=\EOn:
62 so the parser needs to be able to at least do
119 if ((c >= 'a') && (c <= 'z'))
121 if ((c >= 'A') && (c <= 'Z'))
139 void vt102_scroll(VT102 *v,int start,int end)
145 vt102_cursor_normalize (VT102 * v, int wrap, int scroll)
147 if (v->pos.x < -1) /*don't wrap backwards */
150 if (v->pos.x >= CRT_COLS)
159 v->pos.x = CRT_COLS - 1;
166 if (v->pos.y >= CRT_ROWS)
169 vt102_scroll (v, 0, CRT_ROWS - 1);
170 v->pos.y = CRT_ROWS - 1;
176 vt102_cursor_motion (VT102 * v, int x, int y, int wrap, int scroll)
182 vt102_cursor_normalize (v, wrap, scroll);
189 vt102_cursor_normalize (v, wrap, scroll);
196 vt102_cursor_normalize (v, wrap, scroll);
203 vt102_cursor_normalize (v, wrap, scroll);
207 void vt102_parse_esc(VT102 *v,int c)
209 fprintf(stderr, "ESC %d(%c)\n",c,c);
212 void vt102_parse_csi(VT102 *v,char *buf,int len)
215 fprintf(stderr, "CSI %s\n",buf);
219 vt102_parse_char (VT102 * v, int c)
221 VT102_parser *p = &v->parser;
223 fprintf(stderr,"%c pc %d %d %d %d %d\n",c,c,p->in_csi,p->in_escape,v->pos.x,v->pos.y);
226 p->csi_buf[p->csi_ptr++] = c;
227 if (csi_ender (c) || (p->csi_ptr == VT102_CSI_LEN))
229 vt102_parse_csi (v, p->csi_buf, p->csi_ptr);
233 else if (p->in_escape)
238 p->csi_buf[p->csi_ptr++] = c;
245 vt102_parse_esc (v, c);
262 vt102_cursor_motion (v, -1, 0, 0, 0);
267 vt102_cursor_motion (v, 0, 1, 0, 1);
299 /*regular character */ default:
300 v->crt.screen[CRT_ADDR_POS (&v->pos)].chr = c;
301 v->crt.screen[CRT_ADDR_POS (&v->pos)].attr = v->attr;
302 vt102_cursor_motion (v, 1, 0, 1, 1);