16df4657fSmckusick /* 26df4657fSmckusick * Copyright (c) 1988 University of Utah. 3*37b2dff4Sbostic * Copyright (c) 1990, 1993 4*37b2dff4Sbostic * The Regents of the University of California. All rights reserved. 56df4657fSmckusick * 66df4657fSmckusick * This code is derived from software contributed to Berkeley by 76df4657fSmckusick * the Systems Programming Group of the University of Utah Computer 86df4657fSmckusick * Science Department. 96df4657fSmckusick * 106df4657fSmckusick * %sccs.include.redist.c% 116df4657fSmckusick * 12c980d09dShibler * from: Utah $Hdr: itevar.h 1.15 92/12/20$ 136df4657fSmckusick * 14*37b2dff4Sbostic * @(#)itevar.h 8.1 (Berkeley) 06/10/93 156df4657fSmckusick */ 166df4657fSmckusick 176df4657fSmckusick #define UNIT(dev) minor(dev) 186df4657fSmckusick 196df4657fSmckusick struct itesw { 2066fe6478Shibler int ite_hwid; /* Hardware id */ 216df4657fSmckusick int (*ite_init)(); 226df4657fSmckusick int (*ite_deinit)(); 236df4657fSmckusick int (*ite_clear)(); 246df4657fSmckusick int (*ite_putc)(); 256df4657fSmckusick int (*ite_cursor)(); 266df4657fSmckusick int (*ite_scroll)(); 2766fe6478Shibler u_char (*ite_readbyte)(); 2866fe6478Shibler int (*ite_writeglyph)(); 296df4657fSmckusick }; 306df4657fSmckusick 3166fe6478Shibler #define getbyte(ip, offset) \ 3266fe6478Shibler ((*(ip)->isw->ite_readbyte)(ip, offset)) 3366fe6478Shibler 3466fe6478Shibler #define getword(ip, offset) \ 3566fe6478Shibler ((getbyte(ip, offset) << 8) | getbyte(ip, (offset) + 2)) 3666fe6478Shibler 3766fe6478Shibler #define writeglyph(ip, offset, fontbuf) \ 3866fe6478Shibler ((*(ip)->isw->ite_writeglyph)((ip), (offset), (fontbuf))) 3966fe6478Shibler 406df4657fSmckusick struct ite_softc { 416df4657fSmckusick int flags; 4266fe6478Shibler struct itesw *isw; 4366fe6478Shibler struct grf_softc *grf; 446df4657fSmckusick caddr_t regbase, fbbase; 456df4657fSmckusick short curx, cury; 466df4657fSmckusick short cursorx, cursory; 476df4657fSmckusick short cblankx, cblanky; 486df4657fSmckusick short rows, cols; 496df4657fSmckusick short cpl; 506df4657fSmckusick short dheight, dwidth; 516df4657fSmckusick short fbheight, fbwidth; 526df4657fSmckusick short ftheight, ftwidth; 536df4657fSmckusick short fontx, fonty; 546df4657fSmckusick short attribute; 556df4657fSmckusick u_char *attrbuf; 566df4657fSmckusick short planemask; 576df4657fSmckusick short pos; 586df4657fSmckusick char imode, escape, fpd, hold; 5966fe6478Shibler caddr_t devdata; /* display dependent data */ 606df4657fSmckusick }; 616df4657fSmckusick 626df4657fSmckusick /* Flags */ 636df4657fSmckusick #define ITE_ALIVE 0x01 /* hardware exists */ 646df4657fSmckusick #define ITE_INITED 0x02 /* device has been initialized */ 656df4657fSmckusick #define ITE_CONSOLE 0x04 /* device can be console */ 666df4657fSmckusick #define ITE_ISCONS 0x08 /* device is console */ 676df4657fSmckusick #define ITE_ACTIVE 0x10 /* device is being used as ITE */ 686df4657fSmckusick #define ITE_INGRF 0x20 /* device in use as non-ITE */ 69c980d09dShibler #define ITE_CURSORON 0x40 /* cursor being tracked */ 706df4657fSmckusick 716df4657fSmckusick #define attrloc(ip, y, x) \ 726df4657fSmckusick (ip->attrbuf + ((y) * ip->cols) + (x)) 736df4657fSmckusick 746df4657fSmckusick #define attrclr(ip, sy, sx, h, w) \ 756df4657fSmckusick bzero(ip->attrbuf + ((sy) * ip->cols) + (sx), (h) * (w)) 766df4657fSmckusick 776df4657fSmckusick #define attrmov(ip, sy, sx, dy, dx, h, w) \ 786df4657fSmckusick bcopy(ip->attrbuf + ((sy) * ip->cols) + (sx), \ 796df4657fSmckusick ip->attrbuf + ((dy) * ip->cols) + (dx), \ 806df4657fSmckusick (h) * (w)) 816df4657fSmckusick 826df4657fSmckusick #define attrtest(ip, attr) \ 836df4657fSmckusick ((* (u_char *) attrloc(ip, ip->cury, ip->curx)) & attr) 846df4657fSmckusick 856df4657fSmckusick #define attrset(ip, attr) \ 866df4657fSmckusick ((* (u_char *) attrloc(ip, ip->cury, ip->curx)) = attr) 876df4657fSmckusick 886df4657fSmckusick /* 896df4657fSmckusick * X and Y location of character 'c' in the framebuffer, in pixels. 906df4657fSmckusick */ 916df4657fSmckusick #define charX(ip,c) \ 926df4657fSmckusick (((c) % (ip)->cpl) * (ip)->ftwidth + (ip)->fontx) 936df4657fSmckusick 946df4657fSmckusick #define charY(ip,c) \ 956df4657fSmckusick (((c) / (ip)->cpl) * (ip)->ftheight + (ip)->fonty) 966df4657fSmckusick 9766fe6478Shibler /* 9866fe6478Shibler * The cursor is just an inverted space. 9966fe6478Shibler */ 10066fe6478Shibler #define draw_cursor(ip) { \ 10166fe6478Shibler WINDOWMOVER(ip, ip->cblanky, ip->cblankx, \ 10266fe6478Shibler ip->cury * ip->ftheight, \ 10366fe6478Shibler ip->curx * ip->ftwidth, \ 10466fe6478Shibler ip->ftheight, ip->ftwidth, RR_XOR); \ 10566fe6478Shibler ip->cursorx = ip->curx; \ 10666fe6478Shibler ip->cursory = ip->cury; } 10766fe6478Shibler 10866fe6478Shibler #define erase_cursor(ip) \ 10966fe6478Shibler WINDOWMOVER(ip, ip->cblanky, ip->cblankx, \ 11066fe6478Shibler ip->cursory * ip->ftheight, \ 11166fe6478Shibler ip->cursorx * ip->ftwidth, \ 11266fe6478Shibler ip->ftheight, ip->ftwidth, RR_XOR); 11366fe6478Shibler 1146df4657fSmckusick /* Character attributes */ 1156df4657fSmckusick #define ATTR_NOR 0x0 /* normal */ 1166df4657fSmckusick #define ATTR_INV 0x1 /* inverse */ 1176df4657fSmckusick #define ATTR_UL 0x2 /* underline */ 1186df4657fSmckusick #define ATTR_ALL (ATTR_INV | ATTR_UL) 1196df4657fSmckusick 1206df4657fSmckusick /* Keyboard attributes */ 1216df4657fSmckusick #define ATTR_KPAD 0x4 /* keypad transmit */ 1226df4657fSmckusick 1236df4657fSmckusick /* Replacement Rules */ 1246df4657fSmckusick #define RR_CLEAR 0x0 1256df4657fSmckusick #define RR_COPY 0x3 1266df4657fSmckusick #define RR_XOR 0x6 1276df4657fSmckusick #define RR_COPYINVERTED 0xc 1286df4657fSmckusick 1296df4657fSmckusick #define SCROLL_UP 0x01 1306df4657fSmckusick #define SCROLL_DOWN 0x02 1316df4657fSmckusick #define SCROLL_LEFT 0x03 1326df4657fSmckusick #define SCROLL_RIGHT 0x04 1336df4657fSmckusick #define DRAW_CURSOR 0x05 1346df4657fSmckusick #define ERASE_CURSOR 0x06 1356df4657fSmckusick #define MOVE_CURSOR 0x07 1366df4657fSmckusick 1376df4657fSmckusick #define KBD_SSHIFT 4 /* bits to shift status */ 1386df4657fSmckusick #define KBD_CHARMASK 0x7F 1396df4657fSmckusick 1406df4657fSmckusick /* keyboard status */ 1416df4657fSmckusick #define KBD_SMASK 0xF /* service request status mask */ 1426df4657fSmckusick #define KBD_CTRLSHIFT 0x8 /* key + CTRL + SHIFT */ 1436df4657fSmckusick #define KBD_CTRL 0x9 /* key + CTRL */ 1446df4657fSmckusick #define KBD_SHIFT 0xA /* key + SHIFT */ 1456df4657fSmckusick #define KBD_KEY 0xB /* key only */ 1466df4657fSmckusick 1476df4657fSmckusick #define KBD_CAPSLOCK 0x18 1486df4657fSmckusick 1496df4657fSmckusick #define KBD_EXT_LEFT_DOWN 0x12 1506df4657fSmckusick #define KBD_EXT_LEFT_UP 0x92 1516df4657fSmckusick #define KBD_EXT_RIGHT_DOWN 0x13 1526df4657fSmckusick #define KBD_EXT_RIGHT_UP 0x93 1536df4657fSmckusick 1546df4657fSmckusick #define TABSIZE 8 1556df4657fSmckusick #define TABEND(u) (ite_tty[u].t_winsize.ws_col - TABSIZE) 1566df4657fSmckusick 1576df4657fSmckusick #ifdef KERNEL 1586df4657fSmckusick extern struct ite_softc ite_softc[]; 15966fe6478Shibler extern struct itesw itesw[]; 16066fe6478Shibler extern int nitesw; 1616df4657fSmckusick #endif 162