Lines Matching +full:8 +full:- +full:ch
1 /*-
2 * Copyright (c) 1999 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp>
34 static __inline void sc_term_ins_line(scr_stat *scp, int y, int n, int ch,
36 static __inline void sc_term_del_line(scr_stat *scp, int y, int n, int ch,
38 static __inline void sc_term_ins_char(scr_stat *scp, int n, int ch,
40 static __inline void sc_term_del_char(scr_stat *scp, int n, int ch,
48 static __inline void sc_term_up_scroll(scr_stat *scp, int n, int ch,
50 static __inline void sc_term_down_scroll(scr_stat *scp, int n, int ch,
52 static __inline void sc_term_clr_eos(scr_stat *scp, int n, int ch, int attr);
53 static __inline void sc_term_clr_eol(scr_stat *scp, int n, int ch, int attr);
59 static __inline void sc_term_gen_scroll(scr_stat *scp, int ch, int attr);
62 sc_term_ins_line(scr_stat *scp, int y, int n, int ch, int attr, int tail) in sc_term_ins_line() argument
65 tail = scp->ysize; in sc_term_ins_line()
68 if (n > tail - y) in sc_term_ins_line()
69 n = tail - y; in sc_term_ins_line()
70 sc_vtb_ins(&scp->vtb, y*scp->xsize, n*scp->xsize, ch, attr); in sc_term_ins_line()
71 mark_for_update(scp, y*scp->xsize); in sc_term_ins_line()
72 mark_for_update(scp, scp->xsize*tail - 1); in sc_term_ins_line()
76 sc_term_del_line(scr_stat *scp, int y, int n, int ch, int attr, int tail) in sc_term_del_line() argument
79 tail = scp->ysize; in sc_term_del_line()
82 if (n > tail - y) in sc_term_del_line()
83 n = tail - y; in sc_term_del_line()
84 sc_vtb_delete(&scp->vtb, y*scp->xsize, n*scp->xsize, ch, attr); in sc_term_del_line()
85 mark_for_update(scp, y*scp->xsize); in sc_term_del_line()
86 mark_for_update(scp, scp->xsize*tail - 1); in sc_term_del_line()
90 sc_term_ins_char(scr_stat *scp, int n, int ch, int attr) in sc_term_ins_char() argument
96 if (n > scp->xsize - scp->xpos) in sc_term_ins_char()
97 n = scp->xsize - scp->xpos; in sc_term_ins_char()
98 count = scp->xsize - (scp->xpos + n); in sc_term_ins_char()
99 sc_vtb_move(&scp->vtb, scp->cursor_pos, scp->cursor_pos + n, count); in sc_term_ins_char()
100 sc_vtb_erase(&scp->vtb, scp->cursor_pos, n, ch, attr); in sc_term_ins_char()
101 mark_for_update(scp, scp->cursor_pos); in sc_term_ins_char()
102 mark_for_update(scp, scp->cursor_pos + n + count - 1); in sc_term_ins_char()
106 sc_term_del_char(scr_stat *scp, int n, int ch, int attr) in sc_term_del_char() argument
112 if (n > scp->xsize - scp->xpos) in sc_term_del_char()
113 n = scp->xsize - scp->xpos; in sc_term_del_char()
114 count = scp->xsize - (scp->xpos + n); in sc_term_del_char()
115 sc_vtb_move(&scp->vtb, scp->cursor_pos + n, scp->cursor_pos, count); in sc_term_del_char()
116 sc_vtb_erase(&scp->vtb, scp->cursor_pos + count, n, ch, attr); in sc_term_del_char()
117 mark_for_update(scp, scp->cursor_pos); in sc_term_del_char()
118 mark_for_update(scp, scp->cursor_pos + n + count - 1); in sc_term_del_char()
126 sc_move_cursor(scp, n - 1, scp->ypos); in sc_term_col()
134 sc_move_cursor(scp, scp->xpos, n - 1); in sc_term_row()
142 n = imin(n, scp->ypos - head); in sc_term_up()
145 sc_move_cursor(scp, scp->xpos, scp->ypos - n); in sc_term_up()
152 tail = scp->ysize; in sc_term_down()
155 n = imin(n, tail - scp->ypos - 1); in sc_term_down()
158 sc_move_cursor(scp, scp->xpos, scp->ypos + n); in sc_term_down()
166 sc_move_cursor(scp, scp->xpos - n, scp->ypos); in sc_term_left()
174 sc_move_cursor(scp, scp->xpos + n, scp->ypos); in sc_term_right()
178 sc_term_up_scroll(scr_stat *scp, int n, int ch, int attr, int head, int tail) in sc_term_up_scroll() argument
181 tail = scp->ysize; in sc_term_up_scroll()
184 if (n <= scp->ypos - head) { in sc_term_up_scroll()
185 sc_move_cursor(scp, scp->xpos, scp->ypos - n); in sc_term_up_scroll()
187 sc_term_ins_line(scp, head, n - (scp->ypos - head), in sc_term_up_scroll()
188 ch, attr, tail); in sc_term_up_scroll()
189 sc_move_cursor(scp, scp->xpos, head); in sc_term_up_scroll()
194 sc_term_down_scroll(scr_stat *scp, int n, int ch, int attr, int head, int tail) in sc_term_down_scroll() argument
197 tail = scp->ysize; in sc_term_down_scroll()
200 if (n < tail - scp->ypos) { in sc_term_down_scroll()
201 sc_move_cursor(scp, scp->xpos, scp->ypos + n); in sc_term_down_scroll()
203 sc_term_del_line(scp, head, n - (tail - scp->ypos) + 1, in sc_term_down_scroll()
204 ch, attr, tail); in sc_term_down_scroll()
205 sc_move_cursor(scp, scp->xpos, tail - 1); in sc_term_down_scroll()
210 sc_term_clr_eos(scr_stat *scp, int n, int ch, int attr) in sc_term_clr_eos() argument
214 sc_vtb_erase(&scp->vtb, scp->cursor_pos, in sc_term_clr_eos()
215 scp->xsize*scp->ysize - scp->cursor_pos, in sc_term_clr_eos()
216 ch, attr); in sc_term_clr_eos()
217 mark_for_update(scp, scp->cursor_pos); in sc_term_clr_eos()
218 mark_for_update(scp, scp->xsize*scp->ysize - 1); in sc_term_clr_eos()
222 sc_vtb_erase(&scp->vtb, 0, scp->cursor_pos + 1, ch, attr); in sc_term_clr_eos()
224 mark_for_update(scp, scp->cursor_pos); in sc_term_clr_eos()
228 sc_vtb_erase(&scp->vtb, 0, scp->xsize*scp->ysize, ch, attr); in sc_term_clr_eos()
230 mark_for_update(scp, scp->xsize*scp->ysize - 1); in sc_term_clr_eos()
237 sc_term_clr_eol(scr_stat *scp, int n, int ch, int attr) in sc_term_clr_eol() argument
241 sc_vtb_erase(&scp->vtb, scp->cursor_pos, in sc_term_clr_eol()
242 scp->xsize - scp->xpos, ch, attr); in sc_term_clr_eol()
243 mark_for_update(scp, scp->cursor_pos); in sc_term_clr_eol()
244 mark_for_update(scp, scp->cursor_pos + in sc_term_clr_eol()
245 scp->xsize - 1 - scp->xpos); in sc_term_clr_eol()
248 sc_vtb_erase(&scp->vtb, scp->cursor_pos - scp->xpos, in sc_term_clr_eol()
249 scp->xpos + 1, ch, attr); in sc_term_clr_eol()
250 mark_for_update(scp, scp->ypos*scp->xsize); in sc_term_clr_eol()
251 mark_for_update(scp, scp->cursor_pos); in sc_term_clr_eol()
254 sc_vtb_erase(&scp->vtb, scp->cursor_pos - scp->xpos, in sc_term_clr_eol()
255 scp->xsize, ch, attr); in sc_term_clr_eol()
256 mark_for_update(scp, scp->ypos*scp->xsize); in sc_term_clr_eol()
257 mark_for_update(scp, (scp->ypos + 1)*scp->xsize - 1); in sc_term_clr_eol()
269 i = (scp->xpos & ~7) + 8*n; in sc_term_tab()
270 if (i >= scp->xsize) { in sc_term_tab()
271 if (scp->ypos >= scp->ysize - 1) { in sc_term_tab()
272 scp->xpos = 0; in sc_term_tab()
273 scp->ypos++; in sc_term_tab()
274 scp->cursor_pos = scp->ypos*scp->xsize; in sc_term_tab()
276 sc_move_cursor(scp, 0, scp->ypos + 1); in sc_term_tab()
278 sc_move_cursor(scp, i, scp->ypos); in sc_term_tab()
288 if ((i = scp->xpos & ~7) == scp->xpos) in sc_term_backtab()
289 i -= 8*n; in sc_term_backtab()
291 i -= 8*(n - 1); in sc_term_backtab()
294 sc_move_cursor(scp, i, scp->ypos); in sc_term_backtab()
317 p = sc_vtb_pointer(&scp->vtb, scp->cursor_pos); in sc_term_gen_print()
318 map = scp->sc->scr_map; in sc_term_gen_print()
320 cnt = imin(l, scp->xsize - scp->xpos); in sc_term_gen_print()
323 p = sc_vtb_putchar(&scp->vtb, p, map[*ptr], attr); in sc_term_gen_print()
325 --i; in sc_term_gen_print()
328 l -= cnt - i; in sc_term_gen_print()
329 mark_for_update(scp, scp->cursor_pos); in sc_term_gen_print()
330 scp->cursor_pos += cnt - i; in sc_term_gen_print()
331 mark_for_update(scp, scp->cursor_pos - 1); in sc_term_gen_print()
332 scp->xpos += cnt - i; in sc_term_gen_print()
334 if (scp->xpos >= scp->xsize) { in sc_term_gen_print()
335 scp->xpos = 0; in sc_term_gen_print()
336 scp->ypos++; in sc_term_gen_print()
342 sc_bell(scp, scp->bell_pitch, scp->bell_duration); in sc_term_gen_print()
345 case 0x08: /* non-destructive backspace */ in sc_term_gen_print()
347 if (scp->cursor_pos > 0) { in sc_term_gen_print()
349 mark_for_update(scp, scp->cursor_pos); in sc_term_gen_print()
350 scp->cursor_pos--; in sc_term_gen_print()
351 mark_for_update(scp, scp->cursor_pos); in sc_term_gen_print()
353 scp->cursor_pos--; in sc_term_gen_print()
355 if (scp->xpos > 0) { in sc_term_gen_print()
356 scp->xpos--; in sc_term_gen_print()
358 scp->xpos += scp->xsize - 1; in sc_term_gen_print()
359 scp->ypos--; in sc_term_gen_print()
364 case 0x09: /* non-destructive tab */ in sc_term_gen_print()
368 mark_for_update(scp, scp->cursor_pos); in sc_term_gen_print()
369 scp->cursor_pos += (8 - scp->xpos % 8u); in sc_term_gen_print()
370 mark_for_update(scp, scp->cursor_pos); in sc_term_gen_print()
371 scp->xpos += (8 - scp->xpos % 8u); in sc_term_gen_print()
372 if (scp->xpos >= scp->xsize) { in sc_term_gen_print()
373 scp->xpos = 0; in sc_term_gen_print()
374 scp->ypos++; in sc_term_gen_print()
381 mark_for_update(scp, scp->cursor_pos); in sc_term_gen_print()
382 scp->cursor_pos += scp->xsize; in sc_term_gen_print()
383 mark_for_update(scp, scp->cursor_pos); in sc_term_gen_print()
385 scp->cursor_pos += scp->xsize; in sc_term_gen_print()
388 scp->ypos++; in sc_term_gen_print()
397 mark_for_update(scp, scp->cursor_pos); in sc_term_gen_print()
398 scp->cursor_pos -= scp->xpos; in sc_term_gen_print()
399 mark_for_update(scp, scp->cursor_pos); in sc_term_gen_print()
401 scp->cursor_pos -= scp->xpos; in sc_term_gen_print()
403 scp->xpos = 0; in sc_term_gen_print()
406 ptr++; l--; in sc_term_gen_print()
414 sc_term_gen_scroll(scr_stat *scp, int ch, int attr) in sc_term_gen_scroll() argument
417 if (scp->cursor_pos >= scp->ysize*scp->xsize) { in sc_term_gen_scroll()
420 if (scp->history != NULL) in sc_term_gen_scroll()
423 sc_vtb_delete(&scp->vtb, 0, scp->xsize, ch, attr); in sc_term_gen_scroll()
424 scp->cursor_pos -= scp->xsize; in sc_term_gen_scroll()
425 scp->ypos--; in sc_term_gen_scroll()