📄 ite.c
字号:
ip->cury = min(ip->pos, ip->rows-1); ip->pos = 0; ip->escape = 0; ite_movecursor(ip, sp); clr_attr(ip, ATTR_INV); break; case 'y': /* y coord first */ ip->cury = min(ip->pos, ip->rows-1); ip->pos = 0; ip->fpd = 0; break; case 'C': /* x coord */ ip->curx = min(ip->pos, ip->cols-1); ip->pos = 0; ip->escape = 0; ite_movecursor(ip, sp); clr_attr(ip, ATTR_INV); break; default: /* Possibly a 3 digit number. */ if (c >= '0' && c <= '9' && ip->fpd < 3) { ip->pos = ip->pos * 10 + (c - '0'); ip->fpd++; } else { ip->pos = 0; ip->escape = 0; } break; } return; case 'd': /* attribute change */ switch (c) { case 'B': set_attr(ip, ATTR_INV); break; case 'D': /* XXX: we don't do anything for underline */ set_attr(ip, ATTR_UL); break; case '@': clr_attr(ip, ATTR_ALL); break; } ip->escape = 0; return; case 's': /* keypad control */ switch (ip->fpd) { case 0: ip->hold = c; ip->fpd++; return; case 1: if (c == 'A') { switch (ip->hold) { case '0': clr_attr(ip, ATTR_KPAD); break; case '1': set_attr(ip, ATTR_KPAD); break; } } ip->hold = 0; } ip->escape = 0; return; case 'i': /* back tab */ if (ip->curx > TABSIZE) { n = ip->curx - (ip->curx & (TABSIZE - 1)); ip->curx -= n; } else ip->curx = 0; ite_movecursor(ip, sp); ip->escape = 0; return; case '3': /* clear all tabs */ goto ignore; case 'K': /* clear_eol */ ite_clrtoeol(ip, sp, ip->cury, ip->curx); ip->escape = 0; return; case 'J': /* clear_eos */ ite_clrtoeos(ip, sp); ip->escape = 0; return; case 'B': /* cursor down 1 line */ if (++ip->cury == ip->rows) { --ip->cury; ite_erasecursor(ip, sp); (*sp->ite_scroll)(ip, 1, 0, 1, SCROLL_UP); ite_clrtoeol(ip, sp, ip->cury, 0); } else ite_movecursor(ip, sp); clr_attr(ip, ATTR_INV); ip->escape = 0; return; case 'C': /* cursor forward 1 char */ ip->escape = 0; itecheckwrap(ip, sp); return; case 'A': /* cursor up 1 line */ if (ip->cury > 0) { ip->cury--; ite_movecursor(ip, sp); } ip->escape = 0; clr_attr(ip, ATTR_INV); return; case 'P': /* delete character */ ite_dchar(ip, sp); ip->escape = 0; return; case 'M': /* delete line */ ite_dline(ip, sp); ip->escape = 0; return; case 'Q': /* enter insert mode */ ip->imode = 1; ip->escape = 0; return; case 'R': /* exit insert mode */ ip->imode = 0; ip->escape = 0; return; case 'L': /* insert blank line */ ite_iline(ip, sp); ip->escape = 0; return; case 'h': /* home key */ ip->cury = ip->curx = 0; ite_movecursor(ip, sp); ip->escape = 0; return; case 'D': /* left arrow key */ if (ip->curx > 0) { ip->curx--; ite_movecursor(ip, sp); } ip->escape = 0; return; case '1': /* set tab in all rows */ goto ignore; case ESC: if ((ip->escape = c) == ESC) break; ip->fpd = 0; goto doesc; default:ignore: ip->escape = 0; return; } } switch (c &= 0x7F) { case '\n': if (++ip->cury == ip->rows) { --ip->cury; ite_erasecursor(ip, sp); (*sp->ite_scroll)(ip, 1, 0, 1, SCROLL_UP); ite_clrtoeol(ip, sp, ip->cury, 0); } else ite_movecursor(ip, sp); clr_attr(ip, ATTR_INV); break; case '\r': if (ip->curx) { ip->curx = 0; ite_movecursor(ip, sp); } break; case '\b': if (--ip->curx < 0) ip->curx = 0; else ite_movecursor(ip, sp); break; case '\t': if (ip->curx < TABEND(unit)) { n = TABSIZE - (ip->curx & (TABSIZE - 1)); ip->curx += n; ite_movecursor(ip, sp); } else itecheckwrap(ip, sp); break; case CTRL('G'): if (&ite_tty[unit] == kbd_tty) kbdbell(unit); break; case ESC: ip->escape = ESC; break; default: if (c < ' ' || c == DEL) break; if (ip->imode) ite_ichar(ip, sp); if ((ip->attribute & ATTR_INV) || attrtest(ip, ATTR_INV)) { attrset(ip, ATTR_INV); (*sp->ite_putc)(ip, c, ip->cury, ip->curx, ATTR_INV); } else (*sp->ite_putc)(ip, c, ip->cury, ip->curx, ATTR_NOR); ite_drawcursor(ip, sp); itecheckwrap(ip, sp); break; }}itecheckwrap(ip, sp) register struct ite_softc *ip; register struct itesw *sp;{ if (++ip->curx == ip->cols) { ip->curx = 0; clr_attr(ip, ATTR_INV); if (++ip->cury == ip->rows) { --ip->cury; ite_erasecursor(ip, sp); (*sp->ite_scroll)(ip, 1, 0, 1, SCROLL_UP); ite_clrtoeol(ip, sp, ip->cury, 0); return; } } ite_movecursor(ip, sp);}ite_dchar(ip, sp) register struct ite_softc *ip; register struct itesw *sp;{ if (ip->curx < ip->cols - 1) { ite_erasecursor(ip, sp); (*sp->ite_scroll)(ip, ip->cury, ip->curx + 1, 1, SCROLL_LEFT); attrmov(ip, ip->cury, ip->curx + 1, ip->cury, ip->curx, 1, ip->cols - ip->curx - 1); } attrclr(ip, ip->cury, ip->cols - 1, 1, 1); (*sp->ite_putc)(ip, ' ', ip->cury, ip->cols - 1, ATTR_NOR); ite_drawcursor(ip, sp);}ite_ichar(ip, sp) register struct ite_softc *ip; register struct itesw *sp;{ if (ip->curx < ip->cols - 1) { ite_erasecursor(ip, sp); (*sp->ite_scroll)(ip, ip->cury, ip->curx, 1, SCROLL_RIGHT); attrmov(ip, ip->cury, ip->curx, ip->cury, ip->curx + 1, 1, ip->cols - ip->curx - 1); } attrclr(ip, ip->cury, ip->curx, 1, 1); (*sp->ite_putc)(ip, ' ', ip->cury, ip->curx, ATTR_NOR); ite_drawcursor(ip, sp);}ite_dline(ip, sp) register struct ite_softc *ip; register struct itesw *sp;{ if (ip->cury < ip->rows - 1) { ite_erasecursor(ip, sp); (*sp->ite_scroll)(ip, ip->cury + 1, 0, 1, SCROLL_UP); attrmov(ip, ip->cury + 1, 0, ip->cury, 0, ip->rows - ip->cury - 1, ip->cols); } ite_clrtoeol(ip, sp, ip->rows - 1, 0);}ite_iline(ip, sp) register struct ite_softc *ip; register struct itesw *sp;{ if (ip->cury < ip->rows - 1) { ite_erasecursor(ip, sp); (*sp->ite_scroll)(ip, ip->cury, 0, 1, SCROLL_DOWN); attrmov(ip, ip->cury, 0, ip->cury + 1, 0, ip->rows - ip->cury - 1, ip->cols); } ite_clrtoeol(ip, sp, ip->cury, 0);}ite_clrtoeol(ip, sp, y, x) register struct ite_softc *ip; register struct itesw *sp; register int y, x;{ (*sp->ite_clear)(ip, y, x, 1, ip->cols - x); attrclr(ip, y, x, 1, ip->cols - x); ite_drawcursor(ip, sp);}ite_clrtoeos(ip, sp) register struct ite_softc *ip; register struct itesw *sp;{ (*sp->ite_clear)(ip, ip->cury, 0, ip->rows - ip->cury, ip->cols); attrclr(ip, ip->cury, 0, ip->rows - ip->cury, ip->cols); ite_drawcursor(ip, sp);}/* * Console functions */#include <hp/dev/cons.h>#ifdef hp300#include <hp/dev/grfreg.h>#endif#ifdef DEBUG/* * Minimum ITE number at which to start looking for a console. * Setting to 0 will do normal search, 1 will skip first ITE device, * NITE will skip ITEs and use serial port. */int whichconsole = 0;#endifitecnprobe(cp) struct consdev *cp;{ register struct ite_softc *ip; int i, sw, maj, unit, pri; /* locate the major number */ for (maj = 0; maj < nchrdev; maj++) if (cdevsw[maj].d_open == iteopen) break; /* urk! */ grfconfig(); /* check all the individual displays and find the best */ unit = -1; pri = CN_DEAD; for (i = 0; i < NITE; i++) { struct grf_softc *gp = &grf_softc[i]; ip = &ite_softc[i]; if ((gp->g_flags & GF_ALIVE) == 0) continue; ip->flags = (ITE_ALIVE|ITE_CONSOLE); /* locate the proper switch table. */ for (sw = 0; sw < nitesw; sw++) if (itesw[sw].ite_hwid == gp->g_sw->gd_hwid) break; if (sw == nitesw) continue;#ifdef DEBUG if (i < whichconsole) continue;#endif ip->isw = &itesw[sw]; ip->grf = gp;#ifdef hp300 if ((int)gp->g_display.gd_regaddr == GRFIADDR) { pri = CN_INTERNAL; unit = i; } else if (unit < 0) { pri = CN_NORMAL; unit = i; }#endif#ifdef hp800 /* XXX use the first one for now */ if (unit < 0) { pri = CN_INTERNAL; unit = i; }#endif } /* initialize required fields */ cp->cn_dev = makedev(maj, unit); cp->cn_tp = &ite_tty[unit]; cp->cn_pri = pri;}itecninit(cp) struct consdev *cp;{ int unit = UNIT(cp->cn_dev); struct ite_softc *ip = &ite_softc[unit]; ip->attrbuf = console_attributes; iteinit(cp->cn_dev); ip->flags |= (ITE_ACTIVE|ITE_ISCONS); kbd_tty = &ite_tty[unit];}/*ARGSUSED*/itecngetc(dev) dev_t dev;{ register int c; int stat; c = kbdgetc(0, &stat); /* XXX always read from keyboard 0 for now */ switch ((stat >> KBD_SSHIFT) & KBD_SMASK) { case KBD_SHIFT: c = kbd_shiftmap[c & KBD_CHARMASK]; break; case KBD_CTRL: c = kbd_ctrlmap[c & KBD_CHARMASK]; break; case KBD_KEY: c = kbd_keymap[c & KBD_CHARMASK]; break; default: c = 0; break; } return(c);}itecnputc(dev, c) dev_t dev; int c;{ static int paniced = 0; struct ite_softc *ip = &ite_softc[UNIT(dev)]; if (panicstr && !paniced && (ip->flags & (ITE_ACTIVE|ITE_INGRF)) != ITE_ACTIVE) { (void) iteon(dev, 3); paniced = 1; } iteputchar(c, dev);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -