Module Name: src
Committed By: tsutsui
Date: Sat Jun 25 03:18:38 UTC 2022
Modified Files:
src/sys/arch/x68k/dev: ite.c ite_tv.c itevar.h
Log Message:
Add a minimum box drawing character support for x68k ite(4).
This is for proper appearance of menus in sysinst(8) with TERM=vt220.
Discussed on port-x68k@ etc.
There was "why not all G0/G1/G2/G3" comment, but terminfo and curses
with TERM=vt220 only require "ESC ( <F>" against G0 for DEC special
graphics (including box drawing characters) by smacs/rmacs/acsc.
I hope other various unimplemented ISO/IEC 2022 specifications will
be motivated per further visible demends.
To generate a diff of this commit:
cvs rdiff -u -r1.68 -r1.69 src/sys/arch/x68k/dev/ite.c
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/x68k/dev/ite_tv.c
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/x68k/dev/itevar.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/x68k/dev/ite.c
diff -u src/sys/arch/x68k/dev/ite.c:1.68 src/sys/arch/x68k/dev/ite.c:1.69
--- src/sys/arch/x68k/dev/ite.c:1.68 Sat May 28 10:36:22 2022
+++ src/sys/arch/x68k/dev/ite.c Sat Jun 25 03:18:38 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: ite.c,v 1.68 2022/05/28 10:36:22 andvar Exp $ */
+/* $NetBSD: ite.c,v 1.69 2022/06/25 03:18:38 tsutsui Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -45,7 +45,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ite.c,v 1.68 2022/05/28 10:36:22 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ite.c,v 1.69 2022/06/25 03:18:38 tsutsui Exp $");
#include "ite.h"
#if NITE > 0
@@ -94,33 +94,33 @@ void opm_bell(void);
struct consdev;
-inline static void itesendch(int);
-inline static void alignment_display(struct ite_softc *);
-inline static void snap_cury(struct ite_softc *);
-inline static void ite_dnchar(struct ite_softc *, int);
+static inline void itesendch(int);
+static inline void alignment_display(struct ite_softc *);
+static inline void snap_cury(struct ite_softc *);
+static inline void ite_dnchar(struct ite_softc *, int);
static void ite_inchar(struct ite_softc *, int);
-inline static void ite_clrtoeol(struct ite_softc *);
-inline static void ite_clrtobol(struct ite_softc *);
-inline static void ite_clrline(struct ite_softc *);
-inline static void ite_clrtoeos(struct ite_softc *);
-inline static void ite_clrtobos(struct ite_softc *);
-inline static void ite_clrscreen(struct ite_softc *);
-inline static void ite_dnline(struct ite_softc *, int);
-inline static void ite_inline(struct ite_softc *, int);
-inline static void ite_index(struct ite_softc *);
-inline static void ite_lf(struct ite_softc *);
-inline static void ite_crlf(struct ite_softc *);
-inline static void ite_cr(struct ite_softc *);
-inline static void ite_rlf(struct ite_softc *);
+static inline void ite_clrtoeol(struct ite_softc *);
+static inline void ite_clrtobol(struct ite_softc *);
+static inline void ite_clrline(struct ite_softc *);
+static inline void ite_clrtoeos(struct ite_softc *);
+static inline void ite_clrtobos(struct ite_softc *);
+static inline void ite_clrscreen(struct ite_softc *);
+static inline void ite_dnline(struct ite_softc *, int);
+static inline void ite_inline(struct ite_softc *, int);
+static inline void ite_index(struct ite_softc *);
+static inline void ite_lf(struct ite_softc *);
+static inline void ite_crlf(struct ite_softc *);
+static inline void ite_cr(struct ite_softc *);
+static inline void ite_rlf(struct ite_softc *);
static void iteprecheckwrap(struct ite_softc *);
static void itecheckwrap(struct ite_softc *);
static int ite_argnum(struct ite_softc *);
static int ite_zargnum(struct ite_softc *);
static void ite_sendstr(struct ite_softc *, const char *);
-inline static int atoi(const char *);
-struct ite_softc *getitesp(dev_t);
+static inline int atoi(const char *);
+static struct ite_softc *getitesp(dev_t);
-struct itesw itesw[] = {
+static struct itesw itesw[] = {
{0, tv_init, tv_deinit, 0,
0, 0, 0}
};
@@ -134,35 +134,38 @@ struct itesw itesw[] = {
#define ITEBURST 64
struct tty *ite_tty[NITE];
-struct ite_softc *kbd_ite = NULL;
-struct ite_softc con_itesoftc;
-struct device con_itedev;
-struct tty *kbd_tty = NULL;
+static struct ite_softc *kbd_ite = NULL;
+static struct ite_softc con_itesoftc;
+static struct device con_itedev;
-int start_repeat_timeo = 20; /* /100: initial timeout till pressed key repeats */
-int next_repeat_timeo = 3; /* /100: timeout when repeating for next char */
+static struct tty *kbd_tty = NULL;
-u_char cons_tabs[MAX_TABS];
+static int start_repeat_timeo = 20; /* /100: initial timeout till pressed
+ key repeats */
+static int next_repeat_timeo = 3; /* /100: timeout when repeating for
+ next char */
-void itestart(struct tty *);
+static u_char cons_tabs[MAX_TABS];
-void iteputchar(int, struct ite_softc *);
-void ite_putstr(const u_char *, int, dev_t);
+static void itestart(struct tty *);
-int itematch(device_t, cfdata_t, void *);
-void iteattach(device_t, device_t, void *);
+static void iteputchar(int, struct ite_softc *);
+static void ite_putstr(const u_char *, int, dev_t);
+
+static int itematch(device_t, cfdata_t, void *);
+static void iteattach(device_t, device_t, void *);
CFATTACH_DECL_NEW(ite, sizeof(struct ite_softc),
itematch, iteattach, NULL, NULL);
-dev_type_open(iteopen);
-dev_type_close(iteclose);
-dev_type_read(iteread);
-dev_type_write(itewrite);
-dev_type_ioctl(iteioctl);
-dev_type_tty(itetty);
-dev_type_poll(itepoll);
+static dev_type_open(iteopen);
+static dev_type_close(iteclose);
+static dev_type_read(iteread);
+static dev_type_write(itewrite);
+static dev_type_ioctl(iteioctl);
+static dev_type_tty(itetty);
+static dev_type_poll(itepoll);
const struct cdevsw ite_cdevsw = {
.d_open = iteopen,
@@ -179,7 +182,7 @@ const struct cdevsw ite_cdevsw = {
.d_flag = D_TTY
};
-int
+static int
itematch(device_t parent, cfdata_t cf, void *aux)
{
struct grf_softc *gp;
@@ -195,7 +198,7 @@ itematch(device_t parent, cfdata_t cf, v
* iteinit() is the standard entry point for initialization of
* an ite device, it is also called from ite_cninit().
*/
-void
+static void
iteattach(device_t parent, device_t self, void *aux)
{
struct ite_softc *ip;
@@ -223,7 +226,7 @@ iteattach(device_t parent, device_t self
aprint_normal("\n");
}
-struct ite_softc *
+static struct ite_softc *
getitesp(dev_t dev)
{
@@ -232,7 +235,7 @@ getitesp(dev_t dev)
if (con_itesoftc.grf == NULL)
panic("no ite_softc for console");
- return(&con_itesoftc);
+ return &con_itesoftc;
}
void
@@ -254,8 +257,9 @@ iteinit(dev_t dev)
ip->isw = &itesw[device_unit(ip->device)]; /* XXX */
SUBR_INIT(ip);
SUBR_CURSOR(ip, DRAW_CURSOR);
- if (!ip->tabs)
- ip->tabs = malloc(MAX_TABS*sizeof(u_char), M_DEVBUF, M_WAITOK);
+ if (ip->tabs == NULL)
+ ip->tabs = malloc(MAX_TABS * sizeof(u_char),
+ M_DEVBUF, M_WAITOK);
ite_reset(ip);
ip->flags |= ITE_INITED;
}
@@ -282,29 +286,29 @@ iteon(dev_t dev, int flag)
struct ite_softc *ip;
if (unit < 0 || unit >= ite_cd.cd_ndevs ||
- (ip = getitesp(dev)) == NULL || (ip->flags&ITE_ALIVE) == 0)
- return(ENXIO);
+ (ip = getitesp(dev)) == NULL || (ip->flags & ITE_ALIVE) == 0)
+ return ENXIO;
/* force ite active, overriding graphics mode */
- if (flag & 1) {
+ if ((flag & 1) != 0) {
ip->flags |= ITE_ACTIVE;
ip->flags &= ~(ITE_INGRF|ITE_INITED);
}
/* leave graphics mode */
- if (flag & 2) {
+ if ((flag & 2) != 0) {
ip->flags &= ~ITE_INGRF;
if ((ip->flags & ITE_ACTIVE) == 0)
- return(0);
+ return 0;
}
ip->flags |= ITE_ACTIVE;
- if (ip->flags & ITE_INGRF)
- return(0);
+ if ((ip->flags & ITE_INGRF) != 0)
+ return 0;
iteinit(dev);
- if (flag & 2)
+ if ((flag & 2) != 0)
ite_reset(ip);
#if NKBD > 0
mfp_send_usart(0x49); /* XXX */
#endif
- return(0);
+ return 0;
}
/*
@@ -321,15 +325,15 @@ iteoff(dev_t dev, int flag)
/* XXX check whether when call from grf.c */
if (unit < 0 || unit >= ite_cd.cd_ndevs ||
- (ip = getitesp(dev)) == NULL || (ip->flags&ITE_ALIVE) == 0)
+ (ip = getitesp(dev)) == NULL || (ip->flags & ITE_ALIVE) == 0)
return;
- if (flag & 2)
+ if ((flag & 2) != 0)
ip->flags |= ITE_INGRF;
if ((ip->flags & ITE_ACTIVE) == 0)
return;
- if ((flag & 1) ||
- (ip->flags & (ITE_INGRF|ITE_ISCONS|ITE_INITED)) == ITE_INITED)
+ if ((flag & 1) != 0 ||
+ (ip->flags & (ITE_INGRF | ITE_ISCONS | ITE_INITED)) == ITE_INITED)
SUBR_DEINIT(ip);
/*
@@ -352,7 +356,7 @@ iteoff(dev_t dev, int flag)
*/
/* ARGSUSED */
-int
+static int
iteopen(dev_t dev, int mode, int devtype, struct lwp *l)
{
int unit = UNIT(dev);
@@ -362,18 +366,18 @@ iteopen(dev_t dev, int mode, int devtype
int first = 0;
if (unit >= ite_cd.cd_ndevs || (ip = getitesp(dev)) == NULL)
- return (ENXIO);
- if (!ite_tty[unit]) {
+ return ENXIO;
+ if (ite_tty[unit] == NULL) {
tp = ite_tty[unit] = tty_alloc();
tty_attach(tp);
} else
tp = ite_tty[unit];
if (kauth_authorize_device_tty(l->l_cred, KAUTH_DEVICE_TTY_OPEN, tp))
- return (EBUSY);
+ return EBUSY;
if ((ip->flags & ITE_ACTIVE) == 0) {
error = iteon(dev, 0);
if (error)
- return (error);
+ return error;
first = 1;
}
tp->t_oproc = itestart;
@@ -395,11 +399,11 @@ iteopen(dev_t dev, int mode, int devtype
tp->t_winsize.ws_col = ip->cols;
} else if (first)
iteoff(dev, 0);
- return (error);
+ return error;
}
/*ARGSUSED*/
-int
+static int
iteclose(dev_t dev, int flag, int mode, struct lwp *l)
{
struct tty *tp = ite_tty[UNIT(dev)];
@@ -409,43 +413,43 @@ iteclose(dev_t dev, int flag, int mode,
iteoff(dev, 0);
#if 0
tty_free(tp);
- ite_tty[UNIT(dev)] = (struct tty *)0;
+ ite_tty[UNIT(dev)] = NULL;
#endif
- return(0);
+ return 0;
}
-int
+static int
iteread(dev_t dev, struct uio *uio, int flag)
{
struct tty *tp = ite_tty[UNIT(dev)];
- return ((*tp->t_linesw->l_read)(tp, uio, flag));
+ return (*tp->t_linesw->l_read)(tp, uio, flag);
}
-int
+static int
itewrite(dev_t dev, struct uio *uio, int flag)
{
struct tty *tp = ite_tty[UNIT(dev)];
- return ((*tp->t_linesw->l_write)(tp, uio, flag));
+ return (*tp->t_linesw->l_write)(tp, uio, flag);
}
-int
+static int
itepoll(dev_t dev, int events, struct lwp *l)
{
struct tty *tp = ite_tty[UNIT(dev)];
- return ((*tp->t_linesw->l_poll)(tp, events, l));
+ return (*tp->t_linesw->l_poll)(tp, events, l);
}
-struct tty *
+static struct tty *
itetty(dev_t dev)
{
- return (ite_tty[UNIT(dev)]);
+ return ite_tty[UNIT(dev)];
}
-int
+static int
iteioctl(dev_t dev, u_long cmd, void *addr, int flag, struct lwp *l)
{
struct iterepeat *irp;
@@ -454,24 +458,24 @@ iteioctl(dev_t dev, u_long cmd, void *ad
error = (*tp->t_linesw->l_ioctl)(tp, cmd, addr, flag, l);
if (error != EPASSTHROUGH)
- return (error);
+ return error;
error = ttioctl(tp, cmd, addr, flag, l);
if (error != EPASSTHROUGH)
- return (error);
+ return error;
switch (cmd) {
case ITEIOCSKMAP:
- if (addr == 0)
- return(EFAULT);
+ if (addr == NULL)
+ return EFAULT;
memcpy(&kbdmap, addr, sizeof(struct kbdmap));
- return(0);
+ return 0;
case ITEIOCGKMAP:
if (addr == NULL)
- return(EFAULT);
+ return EFAULT;
memcpy(addr, &kbdmap, sizeof(struct kbdmap));
- return(0);
+ return 0;
case ITEIOCGREPT:
irp = (struct iterepeat *)addr;
@@ -486,7 +490,7 @@ iteioctl(dev_t dev, u_long cmd, void *ad
next_repeat_timeo = irp->next;
#if x68k
case ITELOADFONT:
- if (addr) {
+ if (addr != NULL) {
memcpy(kern_font, addr, 4096 /*sizeof(kernel_font)*/);
ite_set_glyph();
return 0;
@@ -494,21 +498,21 @@ iteioctl(dev_t dev, u_long cmd, void *ad
return EFAULT;
case ITETVCTRL:
- if (addr && *(u_int8_t *)addr < 0x40) {
- return mfp_send_usart(* (u_int8_t *)addr);
+ if (addr != NULL && *(uint8_t *)addr < 0x40) {
+ return mfp_send_usart(*(uint8_t *)addr);
} else {
return EFAULT;
}
#endif
}
- return (EPASSTHROUGH);
+ return EPASSTHROUGH;
}
-void
+static void
itestart(struct tty *tp)
{
struct clist *rbp;
- u_char buf[ITEBURST];
+ uint8_t buf[ITEBURST];
int s, len;
getitesp(tp->t_dev);
@@ -518,7 +522,7 @@ itestart(struct tty *tp)
* state of our tty (kernel printf doesn't go through this routine).
*/
s = spltty();
- if (tp->t_state & (TS_TIMEOUT | TS_BUSY | TS_TTSTOP))
+ if ((tp->t_state & (TS_TIMEOUT | TS_BUSY | TS_TTSTOP)) != 0)
goto out;
tp->t_state |= TS_BUSY;
rbp = &tp->t_outq;
@@ -535,7 +539,7 @@ itestart(struct tty *tp)
tp->t_state |= TS_TIMEOUT;
callout_schedule(&tp->t_rstrt_ch, 1);
}
-out:
+ out:
splx(s);
}
@@ -602,7 +606,7 @@ ite_cnfilter(u_char c)
{
static u_char mod = 0;
struct key key;
- u_char code, up, mask;
+ uint8_t code, up, mask;
int s;
up = c & 0x80 ? 1 : 0;
@@ -612,7 +616,8 @@ ite_cnfilter(u_char c)
s = spltty();
mask = 0;
- if (c >= KBD_LEFT_ALT && !(c >= 0x63 && c <= 0x6c)) { /* 0x63: F1, 0x6c:F10 */
+ if (c >= KBD_LEFT_ALT &&
+ !(c >= 0x63 && c <= 0x6c)) { /* 0x63: F1, 0x6c:F10 */
switch (c) {
case KBD_LEFT_SHIFT:
mask = KBD_MOD_SHIFT;
@@ -660,7 +665,8 @@ ite_cnfilter(u_char c)
}
} else if (up)
mod &= ~mask;
- else mod |= mask;
+ else
+ mod |= mask;
splx(s);
return -1;
}
@@ -671,61 +677,63 @@ ite_cnfilter(u_char c)
}
/* translate modifiers */
- if (mod & KBD_MOD_SHIFT) {
- if (mod & KBD_MOD_ALT)
+ if ((mod & KBD_MOD_SHIFT) != 0) {
+ if ((mod & KBD_MOD_ALT) != 0)
key = kbdmap.alt_shift_keys[c];
else
key = kbdmap.shift_keys[c];
- } else if (mod & KBD_MOD_ALT)
+ } else if ((mod & KBD_MOD_ALT) != 0)
key = kbdmap.alt_keys[c];
else {
key = kbdmap.keys[c];
/* if CAPS and key is CAPable (no pun intended) */
- if ((mod & KBD_MOD_CAPS) && (key.mode & KBD_MODE_CAPS))
+ if ((mod & KBD_MOD_CAPS) != 0 &&
+ (key.mode & KBD_MODE_CAPS) != 0)
key = kbdmap.shift_keys[c];
}
code = key.code;
/* if string return */
- if (key.mode & (KBD_MODE_STRING | KBD_MODE_KPAD)) {
+ if ((key.mode & (KBD_MODE_STRING | KBD_MODE_KPAD)) != 0) {
splx(s);
return -1;
}
/* handle dead keys */
- if (key.mode & KBD_MODE_DEAD) {
+ if ((key.mode & KBD_MODE_DEAD) != 0) {
splx(s);
return -1;
}
- if (mod & KBD_MOD_CTRL)
+ if ((mod & KBD_MOD_CTRL) != 0)
code &= 0x1f;
- if (mod & KBD_MOD_META)
+ if ((mod & KBD_MOD_META) != 0)
code |= 0x80;
/* do console mapping. */
code = code == '\r' ? '\n' : code;
splx(s);
- return (code);
+ return code;
}
/* And now the old stuff. */
-inline static void
+static inline void
itesendch(int ch)
{
+
(*kbd_tty->t_linesw->l_rint)(ch, kbd_tty);
}
-
void
ite_filter(u_char c)
{
- static u_short mod = 0;
- unsigned char code, *str;
- u_short up, mask;
+ static uint16_t mod = 0;
+ uint8_t code, *str;
+ uint16_t up, mask;
struct key key;
int s, i;
- if (!kbd_ite || !(kbd_tty = ite_tty[device_unit(kbd_ite->device)]))
+ if (kbd_ite == NULL ||
+ (kbd_tty = ite_tty[device_unit(kbd_ite->device)]) == NULL)
return;
/* have to make sure we're at spltty in here */
@@ -786,7 +794,7 @@ ite_filter(u_char c)
break;
}
- if (mask & KBD_MOD_CAPS) {
+ if ((mask & KBD_MOD_CAPS) != 0) {
if (!up) {
mod ^= KBD_MOD_CAPS;
kbdled ^= LED_CAPS_LOCK;
@@ -794,7 +802,8 @@ ite_filter(u_char c)
}
} else if (up) {
mod &= ~mask;
- } else mod |= mask;
+ } else
+ mod |= mask;
/*
* return even if it wasn't a modifier key, the other
@@ -821,39 +830,41 @@ ite_filter(u_char c)
}
/* translate modifiers */
- if (mod & KBD_MOD_SHIFT) {
- if (mod & KBD_MOD_ALT)
+ if ((mod & KBD_MOD_SHIFT) != 0) {
+ if ((mod & KBD_MOD_ALT) != 0)
key = kbdmap.alt_shift_keys[c];
else
key = kbdmap.shift_keys[c];
- } else if (mod & KBD_MOD_ALT)
+ } else if ((mod & KBD_MOD_ALT) != 0)
key = kbdmap.alt_keys[c];
else {
key = kbdmap.keys[c];
/* if CAPS and key is CAPable (no pun intended) */
- if ((mod & KBD_MOD_CAPS) && (key.mode & KBD_MODE_CAPS))
+ if ((mod & KBD_MOD_CAPS) != 0 &&
+ (key.mode & KBD_MODE_CAPS) != 0)
key = kbdmap.shift_keys[c];
- else if ((mod & KBD_MOD_OPT2) && (key.mode & KBD_MODE_KPAD))
+ else if ((mod & KBD_MOD_OPT2) != 0 &&
+ (key.mode & KBD_MODE_KPAD) != 0)
key = kbdmap.shift_keys[c];
}
code = key.code;
/* handle dead keys */
- if (key.mode & KBD_MODE_DEAD) {
+ if ((key.mode & KBD_MODE_DEAD) != 0) {
splx(s);
return;
}
/* if not string, apply META and CTRL modifiers */
- if (! (key.mode & KBD_MODE_STRING)
- && (!(key.mode & KBD_MODE_KPAD) ||
- (kbd_ite && !kbd_ite->keypad_appmode))) {
- if ((mod & KBD_MOD_CTRL) &&
+ if ((key.mode & KBD_MODE_STRING) == 0 &&
+ ((key.mode & KBD_MODE_KPAD) == 0 ||
+ (kbd_ite != NULL && kbd_ite->keypad_appmode == 0))) {
+ if ((mod & KBD_MOD_CTRL) != 0 &&
(code == ' ' || (code >= '@' && code <= 'z')))
code &= 0x1f;
- if (mod & KBD_MOD_META)
+ if ((mod & KBD_MOD_META) != 0)
code |= 0x80;
- } else if ((key.mode & KBD_MODE_KPAD) &&
- (kbd_ite && kbd_ite->keypad_appmode)) {
+ } else if ((key.mode & KBD_MODE_KPAD) != 0 &&
+ (kbd_ite != NULL && kbd_ite->keypad_appmode != 0)) {
static const char * const in = "0123456789-+.\r()/*";
static const char * const out = "pqrstuvwxymlnMPQRS";
char *cp = strchr(in, code);
@@ -869,12 +880,12 @@ ite_filter(u_char c)
return;
} else {
/* *NO* I don't like this.... */
- static u_char app_cursor[] =
- {
+ static u_char app_cursor[] = {
3, 27, 'O', 'A',
3, 27, 'O', 'B',
3, 27, 'O', 'C',
- 3, 27, 'O', 'D'};
+ 3, 27, 'O', 'D'
+ };
str = kbdmap.strings + code;
/*
@@ -882,9 +893,9 @@ ite_filter(u_char c)
* keymap setting, AND we're in app-cursor mode, switch
* to the above table. This is *nasty* !
*/
- if (c >= 0x3b && c <= 0x3e && kbd_ite->cursor_appmode
- && !memcmp(str, "\x03\x1b[", 3) &&
- strchr("ABCD", str[3]))
+ if (c >= 0x3b && c <= 0x3e && kbd_ite->cursor_appmode != 0 &&
+ memcmp(str, "\x03\x1b[", 3) == 0 &&
+ strchr("ABCD", str[3]) != 0)
str = app_cursor + 4 * (str[3] - 'A');
/*
@@ -904,14 +915,15 @@ ite_filter(u_char c)
}
/* helper functions, makes the code below more readable */
-inline static void
+static inline void
ite_sendstr(struct ite_softc *ip, const char *str)
{
- while (*str)
+
+ while (*str != 0)
itesendch(*str++);
}
-inline static void
+static inline void
alignment_display(struct ite_softc *ip)
{
int i, j;
@@ -922,10 +934,11 @@ alignment_display(struct ite_softc *ip)
attrclr(ip, 0, 0, ip->rows, ip->cols);
}
-inline static void
+static inline void
snap_cury(struct ite_softc *ip)
{
- if (ip->inside_margins) {
+
+ if (ip->inside_margins != 0) {
if (ip->cury < ip->top_margin)
ip->cury = ip->top_margin;
if (ip->cury > ip->bottom_margin)
@@ -933,14 +946,15 @@ snap_cury(struct ite_softc *ip)
}
}
-inline static void
+static inline void
ite_dnchar(struct ite_softc *ip, int n)
{
+
n = uimin(n, ip->cols - ip->curx);
if (n < ip->cols - ip->curx) {
SUBR_SCROLL(ip, ip->cury, ip->curx + n, n, SCROLL_LEFT);
attrmov(ip, ip->cury, ip->curx + n, ip->cury, ip->curx,
- 1, ip->cols - ip->curx - n);
+ 1, ip->cols - ip->curx - n);
attrclr(ip, ip->cury, ip->cols - n, 1, n);
}
while (n-- > 0)
@@ -951,58 +965,65 @@ static void
ite_inchar(struct ite_softc *ip, int n)
{
int c = ip->save_char;
+
ip->save_char = 0;
n = uimin(n, ip->cols - ip->curx);
if (n < ip->cols - ip->curx) {
SUBR_SCROLL(ip, ip->cury, ip->curx, n, SCROLL_RIGHT);
attrmov(ip, ip->cury, ip->curx, ip->cury, ip->curx + n,
- 1, ip->cols - ip->curx - n);
+ 1, ip->cols - ip->curx - n);
attrclr(ip, ip->cury, ip->curx, 1, n);
}
- while (n--)
+ while (n-- != 0)
SUBR_PUTC(ip, ' ', ip->cury, ip->curx + n, ATTR_NOR);
ip->save_char = c;
}
-inline static void
+static inline void
ite_clrtoeol(struct ite_softc *ip)
{
int y = ip->cury, x = ip->curx;
+
if (ip->cols - x > 0) {
SUBR_CLEAR(ip, y, x, 1, ip->cols - x);
attrclr(ip, y, x, 1, ip->cols - x);
}
}
-inline static void
+static inline void
ite_clrtobol(struct ite_softc *ip)
{
int y = ip->cury, x = uimin(ip->curx + 1, ip->cols);
+
SUBR_CLEAR(ip, y, 0, 1, x);
attrclr(ip, y, 0, 1, x);
}
-inline static void
+static inline void
ite_clrline(struct ite_softc *ip)
{
int y = ip->cury;
+
SUBR_CLEAR(ip, y, 0, 1, ip->cols);
attrclr(ip, y, 0, 1, ip->cols);
}
-inline static void
+static inline void
ite_clrtoeos(struct ite_softc *ip)
{
+
ite_clrtoeol(ip);
if (ip->cury < ip->rows - 1) {
- SUBR_CLEAR(ip, ip->cury + 1, 0, ip->rows - 1 - ip->cury, ip->cols);
+ SUBR_CLEAR(ip, ip->cury + 1, 0,
+ ip->rows - 1 - ip->cury, ip->cols);
attrclr(ip, ip->cury, 0, ip->rows - ip->cury, ip->cols);
}
}
-inline static void
+static inline void
ite_clrtobos(struct ite_softc *ip)
{
+
ite_clrtobol(ip);
if (ip->cury > 0) {
SUBR_CLEAR(ip, 0, 0, ip->cury, ip->cols);
@@ -1010,18 +1031,18 @@ ite_clrtobos(struct ite_softc *ip)
}
}
-inline static void
+static inline void
ite_clrscreen(struct ite_softc *ip)
{
+
SUBR_CLEAR(ip, 0, 0, ip->rows, ip->cols);
attrclr(ip, 0, 0, ip->rows, ip->cols);
}
-
-
-inline static void
+static inline void
ite_dnline(struct ite_softc *ip, int n)
{
+
/*
* interesting.. if the cursor is outside the scrolling
* region, this command is simply ignored..
@@ -1033,15 +1054,16 @@ ite_dnline(struct ite_softc *ip, int n)
if (n <= ip->bottom_margin - ip->cury) {
SUBR_SCROLL(ip, ip->cury + n, 0, n, SCROLL_UP);
attrmov(ip, ip->cury + n, 0, ip->cury, 0,
- ip->bottom_margin + 1 - ip->cury - n, ip->cols);
+ ip->bottom_margin + 1 - ip->cury - n, ip->cols);
}
SUBR_CLEAR(ip, ip->bottom_margin - n + 1, 0, n, ip->cols);
attrclr(ip, ip->bottom_margin - n + 1, 0, n, ip->cols);
}
-inline static void
+static inline void
ite_inline(struct ite_softc *ip, int n)
{
+
/*
* interesting.. if the cursor is outside the scrolling
* region, this command is simply ignored..
@@ -1051,20 +1073,22 @@ ite_inline(struct ite_softc *ip, int n)
if (n <= 0)
n = 1;
- else n = uimin(n, ip->bottom_margin + 1 - ip->cury);
+ else
+ n = uimin(n, ip->bottom_margin + 1 - ip->cury);
if (n <= ip->bottom_margin - ip->cury) {
SUBR_SCROLL(ip, ip->cury, 0, n, SCROLL_DOWN);
attrmov(ip, ip->cury, 0, ip->cury + n, 0,
- ip->bottom_margin + 1 - ip->cury - n, ip->cols);
+ ip->bottom_margin + 1 - ip->cury - n, ip->cols);
}
SUBR_CLEAR(ip, ip->cury, 0, n, ip->cols);
attrclr(ip, ip->cury, 0, n, ip->cols);
ip->curx = 0;
}
-inline static void
+static inline void
ite_index(struct ite_softc *ip)
{
+
++ip->cury;
if ((ip->cury == ip->bottom_margin+1) || (ip->cury == ip->rows)) {
ip->cury--;
@@ -1074,16 +1098,17 @@ ite_index(struct ite_softc *ip)
/*clr_attr(ip, ATTR_INV);*/
}
-inline static void
+static inline void
ite_lf(struct ite_softc *ip)
{
+
++ip->cury;
if (ip->cury > ip->bottom_margin) {
ip->cury--;
SUBR_SCROLL(ip, ip->top_margin + 1, 0, 1, SCROLL_UP);
ite_clrline(ip);
}
-/* SUBR_CURSOR(ip, MOVE_CURSOR);*/
+ /*SUBR_CURSOR(ip, MOVE_CURSOR);*/
/*clr_attr(ip, ATTR_INV);*/
/* reset character set ... thanks for mohta. */
ip->G0 = CSET_ASCII;
@@ -1096,24 +1121,27 @@ ite_lf(struct ite_softc *ip)
ip->save_char = 0;
}
-inline static void
+static inline void
ite_crlf(struct ite_softc *ip)
{
+
ip->curx = 0;
- ite_lf (ip);
+ ite_lf(ip);
}
-inline static void
+static inline void
ite_cr(struct ite_softc *ip)
{
- if (ip->curx) {
+
+ if (ip->curx != 0) {
ip->curx = 0;
}
}
-inline static void
+static inline void
ite_rlf(struct ite_softc *ip)
{
+
ip->cury--;
if ((ip->cury < 0) || (ip->cury == ip->top_margin - 1)) {
ip->cury++;
@@ -1123,7 +1151,7 @@ ite_rlf(struct ite_softc *ip)
clr_attr(ip, ATTR_INV);
}
-inline static int
+static inline int
atoi(const char *cp)
{
int n;
@@ -1133,7 +1161,7 @@ atoi(const char *cp)
return n;
}
-inline static int
+static inline int
ite_argnum(struct ite_softc *ip)
{
char ch;
@@ -1150,7 +1178,7 @@ ite_argnum(struct ite_softc *ip)
return n;
}
-inline static int
+static inline int
ite_zargnum(struct ite_softc *ip)
{
char ch;
@@ -1167,7 +1195,7 @@ ite_zargnum(struct ite_softc *ip)
return n; /* don't "n ? n : 1" here, <CSI>0m != <CSI>1m ! */
}
-void
+static void
ite_putstr(const u_char *s, int len, dev_t dev)
{
struct ite_softc *ip;
@@ -1181,28 +1209,35 @@ ite_putstr(const u_char *s, int len, dev
SUBR_CURSOR(ip, START_CURSOROPT);
for (i = 0; i < len; i++)
- if (s[i])
+ if (s[i] != 0)
iteputchar(s[i], ip);
SUBR_CURSOR(ip, END_CURSOROPT);
}
-void
+static void
iteputchar(int c, struct ite_softc *ip)
{
int n, x, y;
char *cp;
- if (c >= 0x20 && ip->escape) {
+ if (c >= 0x20 && ip->escape != 0) {
switch (ip->escape) {
case ESC:
switch (c) {
- /* first 7bit equivalents for the 8bit control characters */
+ /*
+ * first 7bit equivalents for the 8bit control
+ * characters
+ */
case 'D':
c = IND;
ip->escape = 0;
- break; /* and fall into the next switch below (same for all `break') */
+ break;
+ /*
+ * and fall into the next switch below
+ * (same for all `break')
+ */
case 'E':
/* next line */
@@ -1266,16 +1301,14 @@ iteputchar(int c, struct ite_softc *ip)
ip->escape = 0;
break;
-
/* introduces 7/8bit control */
case ' ':
/* can be followed by either F or G */
ip->escape = ' ';
break;
-
- /* a lot of character set selections, not yet used...
- 94-character sets: */
+ /* a lot of character set selections, not yet used... */
+ /* 94-character sets: */
case '(': /* G0 */
case ')': /* G1 */
ip->escape = c;
@@ -1356,7 +1389,6 @@ iteputchar(int c, struct ite_softc *ip)
ip->escape = 0;
return;
-
case '7':
/* save cursor */
ip->save_curx = ip->curx;
@@ -1401,10 +1433,13 @@ iteputchar(int c, struct ite_softc *ip)
return;
case 'Z': /* request ID */
- if (ip->emul_level == EMUL_VT100)
- ite_sendstr(ip, "\033[61;0c"); /* XXX not clean */
- else
- ite_sendstr(ip, "\033[63;0c"); /* XXX not clean */
+ if (ip->emul_level == EMUL_VT100) {
+ /* XXX not clean */
+ ite_sendstr(ip, "\033[61;0c");
+ } else {
+ /* XXX not clean */
+ ite_sendstr(ip, "\033[63;0c");
+ }
ip->escape = 0;
return;
@@ -1415,7 +1450,6 @@ iteputchar(int c, struct ite_softc *ip)
}
break;
-
case '(': /* designate G0 */
switch (c) {
case 'B': /* USASCII */
@@ -1430,6 +1464,10 @@ iteputchar(int c, struct ite_softc *ip)
ip->G0 = CSET_JISROMA;
ip->escape = 0;
return;
+ case '0': /* dec special graphics */
+ ip->G0 = CSET_DECGRAPH;
+ ip->escape = 0;
+ return;
case 'A': /* British or ISO-Latin-1 */
case 'H': /* Swedish */
case 'K': /* German */
@@ -1443,7 +1481,34 @@ iteputchar(int c, struct ite_softc *ip)
}
case ')': /* designate G1 */
- ip->escape = 0;
+ switch (c) {
+ case 'B': /* USASCII */
+ ip->G1 = CSET_ASCII;
+ ip->escape = 0;
+ return;
+ case 'I':
+ ip->G1 = CSET_JISKANA;
+ ip->escape = 0;
+ return;
+ case 'J':
+ ip->G1 = CSET_JISROMA;
+ ip->escape = 0;
+ return;
+ case '0': /* dec special graphics */
+ ip->G1 = CSET_DECGRAPH;
+ ip->escape = 0;
+ return;
+ case 'A': /* British or ISO-Latin-1 */
+ case 'H': /* Swedish */
+ case 'K': /* German */
+ case 'R': /* French */
+ case 'Y': /* Italian */
+ case 'Z': /* Spanish */
+ default:
+ /* not supported */
+ ip->escape = 0;
+ return;
+ }
return;
case '$': /* 94-multibyte character set */
@@ -1519,14 +1584,23 @@ iteputchar(int c, struct ite_softc *ip)
}
break;
-
-
case CSI:
/* the biggie... */
switch (c) {
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- case ';': case '\"': case '$': case '>':
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case ';':
+ case '\"':
+ case '$':
+ case '>':
if (ip->ap < ip->argbuf + MAX_ARGSIZE)
*ip->ap++ = c;
return;
@@ -1535,44 +1609,50 @@ iteputchar(int c, struct ite_softc *ip)
*ip->ap = 0;
if (!strncmp(ip->argbuf, "61\"", 3))
ip->emul_level = EMUL_VT100;
- else if (!strncmp(ip->argbuf, "63;1\"", 5)
- || !strncmp(ip->argbuf, "62;1\"", 5))
+ else if (!strncmp(ip->argbuf, "63;1\"", 5) ||
+ !strncmp(ip->argbuf, "62;1\"", 5))
ip->emul_level = EMUL_VT300_7;
else
ip->emul_level = EMUL_VT300_8;
ip->escape = 0;
return;
-
case '?':
*ip->ap = 0;
ip->escape = '?';
ip->ap = ip->argbuf;
return;
-
case 'c':
/* device attributes */
*ip->ap = 0;
if (ip->argbuf[0] == '>') {
ite_sendstr(ip, "\033[>24;0;0;0c");
- } else
+ } else {
switch (ite_zargnum(ip)) {
case 0:
- /* primary DA request, send primary DA response */
- if (ip->emul_level == EMUL_VT100)
- ite_sendstr(ip, "\033[?1;1c");
+ /*
+ * primary DA request, send
+ * primary DA response
+ */
+ if (ip->emul_level ==
+ EMUL_VT100)
+ ite_sendstr(ip,
+ "\033[?1;1c");
else
- ite_sendstr(ip, "\033[63;0c");
+ ite_sendstr(ip,
+ "\033[63;0c");
break;
}
+ }
ip->escape = 0;
return;
case 'n':
switch (ite_zargnum(ip)) {
case 5:
- ite_sendstr(ip, "\033[0n"); /* no malfunction */
+ /* no malfunction */
+ ite_sendstr(ip, "\033[0n");
break;
case 6:
/* cursor position report */
@@ -1585,21 +1665,21 @@ iteputchar(int c, struct ite_softc *ip)
ip->escape = 0;
return;
-
case 'x':
switch (ite_zargnum(ip)) {
case 0:
/* Fake some terminal parameters. */
- ite_sendstr(ip, "\033[2;1;1;112;112;1;0x");
+ ite_sendstr(ip,
+ "\033[2;1;1;112;112;1;0x");
break;
case 1:
- ite_sendstr(ip, "\033[3;1;1;112;112;1;0x");
+ ite_sendstr(ip,
+ "\033[3;1;1;112;112;1;0x");
break;
}
ip->escape = 0;
return;
-
case 'g':
/* clear tabs */
switch (ite_zargnum(ip)) {
@@ -1619,13 +1699,13 @@ iteputchar(int c, struct ite_softc *ip)
ip->escape = 0;
return;
-
case 'h': /* set mode */
case 'l': /* reset mode */
n = ite_zargnum(ip);
switch (n) {
case 4:
- ip->imode = (c == 'h'); /* insert/replace mode */
+ /* insert/replace mode */
+ ip->imode = (c == 'h');
break;
case 20:
ip->linefeed_newline = (c == 'h');
@@ -1634,28 +1714,24 @@ iteputchar(int c, struct ite_softc *ip)
ip->escape = 0;
return;
-
case 'M':
/* delete line */
ite_dnline(ip, ite_argnum(ip));
ip->escape = 0;
return;
-
case 'L':
/* insert line */
ite_inline(ip, ite_argnum(ip));
ip->escape = 0;
return;
-
case 'P':
/* delete char */
ite_dnchar(ip, ite_argnum(ip));
ip->escape = 0;
return;
-
case '@':
/* insert char(s) */
ite_inchar(ip, ite_argnum(ip));
@@ -1668,12 +1744,15 @@ iteputchar(int c, struct ite_softc *ip)
return;
case 'G':
- /* this one was *not* in my vt320 manual but in
- a vt320 termcap entry.. who is right?
- It's supposed to set the horizontal cursor position. */
+ /*
+ * this one was *not* in my vt320 manual but
+ * in a vt320 termcap entry.. who is right?
+ * It's supposed to set the horizontal cursor
+ * position.
+ */
*ip->ap = 0;
x = atoi(ip->argbuf);
- if (x)
+ if (x != 0)
x--;
ip->curx = uimin(x, ip->cols - 1);
ip->escape = 0;
@@ -1681,10 +1760,12 @@ iteputchar(int c, struct ite_softc *ip)
clr_attr(ip, ATTR_INV);
return;
-
case 'd':
- /* same thing here, this one's for setting the absolute
- vertical cursor position. Not documented... */
+ /*
+ * same thing here, this one's for setting
+ * the absolute vertical cursor position.
+ * Not documented...
+ */
*ip->ap = 0;
y = atoi(ip->argbuf);
if (y)
@@ -1698,20 +1779,19 @@ iteputchar(int c, struct ite_softc *ip)
clr_attr(ip, ATTR_INV);
return;
-
case 'H':
case 'f':
*ip->ap = 0;
y = atoi(ip->argbuf);
x = 0;
cp = strchr(ip->argbuf, ';');
- if (cp)
+ if (cp != NULL)
x = atoi(cp + 1);
- if (x)
+ if (x != 0)
x--;
- if (y)
+ if (y != 0)
y--;
- if (ip->inside_margins)
+ if (ip->inside_margins != 0)
y += ip->top_margin;
ip->cury = uimin(y, ip->rows - 1);
ip->curx = uimin(x, ip->cols - 1);
@@ -1730,8 +1810,11 @@ iteputchar(int c, struct ite_softc *ip)
if (ip->inside_margins)
n = uimax(ip->top_margin, n);
else if (n == ip->top_margin - 1)
- /* allow scrolling outside region, but don't scroll out
- of active region without explicit CUP */
+ /*
+ * allow scrolling outside region,
+ * but don't scroll out of active
+ * region without explicit CUP
+ */
n = ip->top_margin;
ip->cury = n;
ip->escape = 0;
@@ -1750,8 +1833,11 @@ iteputchar(int c, struct ite_softc *ip)
n = uimin(ip->bottom_margin, n);
#if 0
else if (n == ip->bottom_margin + 1)
- /* allow scrolling outside region, but don't scroll out
- of active region without explicit CUP */
+ /*
+ * allow scrolling outside region,
+ * but don't scroll out of active
+ * region without explicit CUP
+ */
n = ip->bottom_margin;
#endif
ip->cury = n;
@@ -1781,7 +1867,6 @@ iteputchar(int c, struct ite_softc *ip)
clr_attr(ip, ATTR_INV);
return;
-
case 'J':
/* erase screen */
*ip->ap = 0;
@@ -1795,7 +1880,6 @@ iteputchar(int c, struct ite_softc *ip)
ip->escape = 0;
return;
-
case 'K':
/* erase line */
n = ite_zargnum(ip);
@@ -1835,13 +1919,14 @@ iteputchar(int c, struct ite_softc *ip)
n = ite_argnum(ip) - 1;
n = uimin(n, ip->cols - 1 - ip->curx);
for (; n >= 0; n--) {
- attrclr(ip, ip->cury, ip->curx + n, 1, 1);
- SUBR_PUTC(ip, ' ', ip->cury, ip->curx + n, ATTR_NOR);
+ attrclr(ip, ip->cury, ip->curx + n,
+ 1, 1);
+ SUBR_PUTC(ip, ' ',
+ ip->cury, ip->curx + n, ATTR_NOR);
}
ip->escape = 0;
return;
-
case '}': case '`':
/* status line control */
ip->escape = 0;
@@ -1872,11 +1957,11 @@ iteputchar(int c, struct ite_softc *ip)
ip->curx = 0;
return;
-
case 'm':
/* big attribute setter/resetter */
{
char *c_p;
+
*ip->ap = 0;
/* kludge to make CSIm work (== CSI0m) */
if (ip->ap == ip->argbuf)
@@ -1909,7 +1994,8 @@ iteputchar(int c, struct ite_softc *ip)
break;
case '5':
- clr_attr(ip, ATTR_BLINK);
+ clr_attr(ip,
+ ATTR_BLINK);
c_p += 2;
break;
@@ -1926,10 +2012,17 @@ iteputchar(int c, struct ite_softc *ip)
case '3':
switch (c_p[1]) {
- case '0': case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
/* foreground colors */
- ip->fgcolor = c_p[1] - '0';
+ ip->fgcolor =
+ c_p[1] - '0';
c_p += 2;
break;
default:
@@ -1940,10 +2033,17 @@ iteputchar(int c, struct ite_softc *ip)
case '4':
switch (c_p[1]) {
- case '0': case '1': case '2': case '3':
- case '4': case '5': case '6': case '7':
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
/* background colors */
- ip->bgcolor = c_p[1] - '0';
+ ip->bgcolor =
+ c_p[1] - '0';
c_p += 2;
break;
default:
@@ -1973,7 +2073,6 @@ iteputchar(int c, struct ite_softc *ip)
ip->escape = 0;
return;
-
case 'u':
/* DECRQTSR */
ite_sendstr(ip, "\033P\033\\");
@@ -1986,20 +2085,29 @@ iteputchar(int c, struct ite_softc *ip)
}
break;
-
-
case '?': /* CSI ? */
switch (c) {
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- case ';': case '\"': case '$':
- /* Don't fill the last character; it's needed. */
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case ';':
+ case '\"':
+ case '$':
+ /*
+ * Don't fill the last character; it's needed.
+ */
/* XXX yeah, where ?? */
if (ip->ap < ip->argbuf + MAX_ARGSIZE - 1)
*ip->ap++ = c;
return;
-
case 'n':
/* Terminal Reports */
*ip->ap = 0;
@@ -2007,11 +2115,9 @@ iteputchar(int c, struct ite_softc *ip)
if (!strncmp(ip->argbuf, "15", 2))
/* printer status: no printer */
ite_sendstr(ip, "\033[13n");
-
else if (!strncmp(ip->argbuf, "25", 2))
/* udk status */
ite_sendstr(ip, "\033[20n");
-
else if (!strncmp(ip->argbuf, "26", 2))
/* keyboard dialect: US */
ite_sendstr(ip, "\033[27;1n");
@@ -2019,7 +2125,6 @@ iteputchar(int c, struct ite_softc *ip)
ip->escape = 0;
return;
-
case 'h': /* set dec private modes */
case 'l': /* reset dec private modes */
n = ite_zargnum(ip);
@@ -2037,14 +2142,18 @@ iteputchar(int c, struct ite_softc *ip)
break;
case 5:
- /* light background (=='h') /dark background(=='l') */
+ /*
+ * light background (=='h') /
+ * dark background (=='l')
+ */
break;
case 6: /* origin mode */
ip->inside_margins = (c == 'h');
#if 0
ip->curx = 0;
- ip->cury = ip->inside_margins ? ip->top_margin : 0;
+ ip->cury = ip->inside_margins ?
+ ip->top_margin : 0;
SUBR_CURSOR(ip, MOVE_CURSOR);
#endif
break;
@@ -2062,7 +2171,8 @@ iteputchar(int c, struct ite_softc *ip)
break;
case 25: /* cursor on/off */
- SUBR_CURSOR(ip, (c == 'h') ? DRAW_CURSOR : ERASE_CURSOR);
+ SUBR_CURSOR(ip, (c == 'h') ?
+ DRAW_CURSOR : ERASE_CURSOR);
break;
}
ip->escape = 0;
@@ -2079,7 +2189,6 @@ iteputchar(int c, struct ite_softc *ip)
}
break;
-
default:
ip->escape = 0;
return;
@@ -2123,8 +2232,10 @@ iteputchar(int c, struct ite_softc *ip)
case VT: /* VT is treated like LF */
case FF: /* so is FF */
case LF:
- /* cr->crlf distinction is done here, on output,
- not on input! */
+ /*
+ * cr->crlf distinction is done here, on output,
+ * not on input!
+ */
if (ip->linefeed_newline)
ite_crlf(ip);
else
@@ -2135,7 +2246,6 @@ iteputchar(int c, struct ite_softc *ip)
ite_cr(ip);
break;
-
case SO:
ip->GL = &ip->G1;
break;
@@ -2218,15 +2328,18 @@ iteputchar(int c, struct ite_softc *ip)
/* ignore, if not used as terminator */
break;
- case OSC: /* introduces OS command. Ignore everything upto ST */
+ case OSC: /* introduces OS command. */
+ /* Ignore everything upto ST */
ip->escape = OSC;
break;
- case PM: /* privacy message, ignore everything upto ST */
+ case PM: /* privacy message */
+ /* ignore everything upto ST */
ip->escape = PM;
break;
- case APC: /* application program command, ignore everything upto ST */
+ case APC: /* application program command */
+ /* ignore everything upto ST */
ip->escape = APC;
break;
@@ -2234,11 +2347,12 @@ iteputchar(int c, struct ite_softc *ip)
break;
default:
- if (!ip->save_char && (*((c & 0x80) ? ip->GR : ip->GL) & CSET_MULTI)) {
+ if (ip->save_char == 0 &&
+ (*((c & 0x80) ? ip->GR : ip->GL) & CSET_MULTI) != 0) {
ip->save_char = c;
break;
}
- if (ip->imode)
+ if (ip->imode != 0)
ite_inchar(ip, ip->save_char ? 2 : 1);
iteprecheckwrap(ip);
#ifdef DO_WEIRD_ATTRIBUTES
@@ -2251,7 +2365,7 @@ iteputchar(int c, struct ite_softc *ip)
#else
SUBR_PUTC(ip, c, ip->cury, ip->curx, ip->attribute);
#endif
-/* SUBR_CURSOR(ip, DRAW_CURSOR);*/
+ /*SUBR_CURSOR(ip, DRAW_CURSOR);*/
itecheckwrap(ip);
if (ip->save_char) {
itecheckwrap(ip);
@@ -2271,6 +2385,7 @@ iteputchar(int c, struct ite_softc *ip)
static void
iteprecheckwrap(struct ite_softc *ip)
{
+
if (ip->auto_wrap && ip->curx + (ip->save_char ? 1 : 0) == ip->cols) {
ip->curx = 0;
clr_attr(ip, ATTR_INV);
@@ -2287,6 +2402,7 @@ iteprecheckwrap(struct ite_softc *ip)
static void
itecheckwrap(struct ite_softc *ip)
{
+
#if 0
if (++ip->curx == ip->cols) {
if (ip->auto_wrap) {
@@ -2295,7 +2411,8 @@ itecheckwrap(struct ite_softc *ip)
if (++ip->cury >= ip->bottom_margin + 1) {
ip->cury = ip->bottom_margin;
SUBR_CURSOR(ip, MOVE_CURSOR);
- SUBR_SCROLL(ip, ip->top_margin + 1, 0, 1, SCROLL_UP);
+ SUBR_SCROLL(ip, ip->top_margin + 1, 0, 1,
+ SCROLL_UP);
ite_clrtoeol(ip);
return;
}
@@ -2311,6 +2428,62 @@ itecheckwrap(struct ite_softc *ip)
#endif
}
+/*
+ * A convertion table from DEC special graphics characters to ASCII characters.
+ * Mostly for box drawing on sysinst(8).
+ */
+const uint8_t ite_decgraph2ascii[128] = {
+ /* same as ASCII from 0x00 to 0x5e */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
+ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
+ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
+ 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e,
+
+ /* special graphics characters from 0x5f to 0x7e */
+ ' ', /* 0x5f NBSP */
+ '*', /* 0x60 diamond */
+ ' ', /* 0x61 medium shade */
+ ' ', /* 0x62 HT */
+ ' ', /* 0x63 FF */
+ ' ', /* 0x64 CR */
+ ' ', /* 0x65 LF */
+ ' ', /* 0x66 degree symbol */
+ ' ', /* 0x67 plus-minus sign */
+ ' ', /* 0x68 NL */
+ ' ', /* 0x69 VT */
+ '+', /* 0x6a box drawings up left */
+ '+', /* 0x6b box drawings down left */
+ '+', /* 0x6c box drawings down right */
+ '+', /* 0x6d box drawings up right */
+ '+', /* 0x6e box drawings vertical horizontal */
+ '~', /* 0x6f scan line 1 */
+ '-', /* 0x70 scan line 3 */
+ '-', /* 0x71 scan line 5 */
+ '-', /* 0x72 scan line 7 */
+ '_', /* 0x73 scan line 9 */
+ '+', /* 0x74 box drawings vertical right */
+ '+', /* 0x75 box drawings vertical left */
+ '+', /* 0x76 box drawings horizontal up */
+ '+', /* 0x77 box drawings horizontal down */
+ '|', /* 0x78 box drawings vertical */
+ '<', /* 0x79 less than or equal to */
+ '>', /* 0x7a greater than or equal to */
+ ' ', /* 0x7b pi */
+ ' ', /* 0x7c not equal */
+ ' ', /* 0x7d pound sign */
+ '.', /* 0x7e middle dot */
+ /* end of special graphics characters */
+ 0x7f
+};
+
#endif
#if NITE > 0 && NKBD > 0
@@ -2350,7 +2523,6 @@ itecnprobe(struct consdev *cd)
cd->cn_pri = CN_INTERNAL;
cd->cn_dev = makedev(maj, 0);
}
-
}
void
Index: src/sys/arch/x68k/dev/ite_tv.c
diff -u src/sys/arch/x68k/dev/ite_tv.c:1.17 src/sys/arch/x68k/dev/ite_tv.c:1.18
--- src/sys/arch/x68k/dev/ite_tv.c:1.17 Thu Feb 8 09:05:18 2018
+++ src/sys/arch/x68k/dev/ite_tv.c Sat Jun 25 03:18:38 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: ite_tv.c,v 1.17 2018/02/08 09:05:18 dholland Exp $ */
+/* $NetBSD: ite_tv.c,v 1.18 2022/06/25 03:18:38 tsutsui Exp $ */
/*
* Copyright (c) 1997 Masaru Oki.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ite_tv.c,v 1.17 2018/02/08 09:05:18 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ite_tv.c,v 1.18 2022/06/25 03:18:38 tsutsui Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -69,39 +69,38 @@ __KERNEL_RCSID(0, "$NetBSD: ite_tv.c,v 1
#define ROWBYTES (PLANEWIDTH / FONTWIDTH)
#define PLANESIZE (PLANEHEIGHT * ROWBYTES)
-u_int tv_top;
-u_char *tv_row[PLANELINES];
-char *tv_font[256];
-volatile char *tv_kfont[0x7f];
+static u_int tv_top;
+static uint8_t *tv_row[PLANELINES];
+static uint8_t *tv_font[256];
+static volatile uint8_t *tv_kfont[0x7f];
-u_char kern_font[256 * FONTHEIGHT];
+uint8_t kern_font[256 * FONTHEIGHT];
#define PHYSLINE(y) ((tv_top + (y)) % PLANELINES)
#define ROWOFFSET(y) ((y) * FONTHEIGHT * ROWBYTES)
#define CHADDR(y, x) (tv_row[PHYSLINE(y)] + (x))
-#define SETGLYPH(to,from) memcpy(&kern_font[(from)*16],&kern_font[(to)*16], 16)
+#define SETGLYPH(to,from) \
+ memcpy(&kern_font[(from) * 16],&kern_font[(to) * 16], 16)
#define KFONTBASE(left) ((left) * 32 * 0x5e - 0x21 * 32)
/* prototype */
-void tv_init(struct ite_softc *);
-void tv_deinit(struct ite_softc *);
-void tv_putc(struct ite_softc *, int, int, int, int);
-void tv_cursor(struct ite_softc *, int);
-void tv_clear(struct ite_softc *, int, int, int, int);
-void tv_scroll(struct ite_softc *, int, int, int, int);
+static void tv_putc(struct ite_softc *, int, int, int, int);
+static void tv_cursor(struct ite_softc *, int);
+static void tv_clear(struct ite_softc *, int, int, int, int);
+static void tv_scroll(struct ite_softc *, int, int, int, int);
-inline static int expbits(int);
-inline static void txrascpy(u_char, u_char, short, signed short);
+static inline uint32_t expbits(uint32_t);
+static inline void txrascpy(uint8_t, uint8_t, int16_t, uint16_t);
static inline void
-txrascpy(u_char src, u_char dst, short size, short mode)
+txrascpy(uint8_t src, uint8_t dst, int16_t size, uint16_t mode)
{
/*int s;*/
- u_short saved_r21 = CRTC.r21;
- char d;
+ uint16_t saved_r21 = CRTC.r21;
+ int8_t d;
- d = (mode < 0) ? -1 : 1;
+ d = ((mode & 0x8000) != 0) ? -1 : 1;
src *= FONTHEIGHT / 4;
dst *= FONTHEIGHT / 4;
size *= 4;
@@ -117,10 +116,10 @@ txrascpy(u_char src, u_char dst, short s
/*s = splhigh();*/
while (--size >= 0) {
/* wait for hsync */
- mfp_wait_for_hsync ();
+ mfp_wait_for_hsync();
CRTC.r22 = (src << 8) | dst; /* specify raster number */
/* start raster copy */
- CRTC.crtctrl = 8;
+ CRTC.crtctrl = 0x0008;
src += d;
dst += d;
@@ -128,10 +127,10 @@ txrascpy(u_char src, u_char dst, short s
/*splx(s);*/
/* wait for hsync */
- mfp_wait_for_hsync ();
+ mfp_wait_for_hsync();
/* stop raster copy */
- CRTC.crtctrl = 0;
+ CRTC.crtctrl = 0x0000;
CRTC.r21 = saved_r21;
}
@@ -142,13 +141,13 @@ txrascpy(u_char src, u_char dst, short s
void
ite_set_glyph(void)
{
- u_char glyph = IODEVbase->io_sram[0x59];
+ uint8_t glyph = IODEVbase->io_sram[0x59];
- if (glyph & 4)
+ if ((glyph & 4) != 0)
SETGLYPH(0x82, '|');
- if (glyph & 2)
+ if ((glyph & 2) != 0)
SETGLYPH(0x81, '~');
- if (glyph & 1)
+ if ((glyph & 1) != 0)
SETGLYPH(0x80, '\\');
}
@@ -165,7 +164,8 @@ tv_init(struct ite_softc *ip)
*/
tv_top = 0;
for (i = 0; i < PLANELINES; i++)
- tv_row[i] = (void *)__UNVOLATILE(&IODEVbase->tvram[ROWOFFSET(i)]);
+ tv_row[i] =
+ (void *)__UNVOLATILE(&IODEVbase->tvram[ROWOFFSET(i)]);
/* shadow ANK font */
memcpy(kern_font, (void *)&IODEVbase->cgrom0_8x16, 256 * FONTHEIGHT);
ite_set_glyph();
@@ -212,9 +212,11 @@ tv_init(struct ite_softc *ip)
void
tv_deinit(struct ite_softc *ip)
{
+
ip->flags &= ~ITE_INITED; /* XXX? */
}
+static inline uint8_t *tv_getfont(int, int);
typedef void tv_putcfunc(struct ite_softc *, int, char *);
static tv_putcfunc tv_putc_nm;
static tv_putcfunc tv_putc_in;
@@ -226,32 +228,32 @@ static tv_putcfunc tv_putc_bd_ul;
static tv_putcfunc tv_putc_bd_ul_in;
static tv_putcfunc *putc_func[ATTR_ALL + 1] = {
- tv_putc_nm,
- tv_putc_in,
- tv_putc_ul,
- tv_putc_ul_in,
- tv_putc_bd,
- tv_putc_bd_in,
- tv_putc_bd_ul,
- tv_putc_bd_ul_in,
+ [ATTR_NOR] = tv_putc_nm,
+ [ATTR_INV] = tv_putc_in,
+ [ATTR_UL] = tv_putc_ul,
+ [ATTR_INV | ATTR_UL] = tv_putc_ul_in,
+ [ATTR_BOLD] = tv_putc_bd,
+ [ATTR_BOLD | ATTR_INV] = tv_putc_bd_in,
+ [ATTR_BOLD | ATTR_UL] = tv_putc_bd_ul,
+ [ATTR_BOLD | ATTR_UL | ATTR_INV] = tv_putc_bd_ul_in,
/* no support for blink */
- tv_putc_nm,
- tv_putc_in,
- tv_putc_ul,
- tv_putc_ul_in,
- tv_putc_bd,
- tv_putc_bd_in,
- tv_putc_bd_ul,
- tv_putc_bd_ul_in,
+ [ATTR_BLINK] = tv_putc_nm,
+ [ATTR_BLINK | ATTR_INV] = tv_putc_in,
+ [ATTR_BLINK | ATTR_UL] = tv_putc_ul,
+ [ATTR_BLINK | ATTR_UL | ATTR_INV] = tv_putc_ul_in,
+ [ATTR_BLINK | ATTR_BOLD] = tv_putc_bd,
+ [ATTR_BLINK | ATTR_BOLD | ATTR_INV] = tv_putc_bd_in,
+ [ATTR_BLINK | ATTR_BOLD | ATTR_UL] = tv_putc_bd_ul,
+ [ATTR_BLINK | ATTR_BOLD | ATTR_UL | ATTR_INV] = tv_putc_bd_ul_in,
};
/*
* simple put character function
*/
-void
+static void
tv_putc(struct ite_softc *ip, int ch, int y, int x, int mode)
{
- char *p = CHADDR(y, x);
+ uint8_t *p = CHADDR(y, x);
short fh;
/* multi page write mode */
@@ -264,7 +266,7 @@ tv_putc(struct ite_softc *ip, int ch, in
CRTC.r21 ^= 0x00f0;
if (ip->save_char) {
for (fh = 0; fh < FONTHEIGHT; fh++, p += ROWBYTES)
- *(u_short *)p = 0;
+ *(uint16_t *)p = 0;
} else {
for (fh = 0; fh < FONTHEIGHT; fh++, p += ROWBYTES)
*p = 0;
@@ -274,138 +276,152 @@ tv_putc(struct ite_softc *ip, int ch, in
CRTC.r21 = 0;
}
-void
+static inline uint8_t *
+tv_getfont(int cset, int ch)
+{
+
+ if (cset == CSET_JISKANA) {
+ ch |= 0x80;
+ } else if (cset == CSET_DECGRAPH) {
+ if (ch < 0x80) {
+ ch = ite_decgraph2ascii[ch];
+ }
+ }
+
+ return tv_font[ch];
+}
+
+static void
tv_putc_nm(struct ite_softc *ip, int ch, char *p)
{
short fh, hi;
- char *f;
- volatile short *kf;
+ volatile uint16_t *kf;
+ uint8_t *f;
hi = ip->save_char & 0x7f;
- if (hi >= 0x21 && hi <= 0x7e && ch >= 0x21 && ch <= 0x7e) {
+ if (hi >= 0x21 && hi <= 0x7e &&
+ (ch & 0x7f) >= 0x21 && (ch & 0x7f) <= 0x7e) {
/* multibyte character */
- kf = (volatile short *)tv_kfont[hi];
- kf += ch * FONTHEIGHT;
+ kf = (volatile uint16_t *)tv_kfont[hi];
+ kf += (ch & 0x7f) * FONTHEIGHT;
/* draw plane */
for (fh = 0; fh < FONTHEIGHT; fh++, p += ROWBYTES)
- *(u_short *)p = *kf++;
+ *(uint16_t *)p = *kf++;
return;
}
/* singlebyte character */
- if (*ip->GL == CSET_JISKANA)
- ch |= 0x80;
- f = tv_font[ch];
+ f = tv_getfont(*ip->GL, ch);
/* draw plane */
for (fh = 0; fh < FONTHEIGHT; fh++, p += ROWBYTES)
*p = *f++;
}
-void
+static void
tv_putc_in(struct ite_softc *ip, int ch, char *p)
{
short fh, hi;
- char *f;
- volatile short *kf;
+ volatile uint16_t *kf;
+ uint8_t *f;
hi = ip->save_char & 0x7f;
- if (hi >= 0x21 && hi <= 0x7e && ch >= 0x21 && ch <= 0x7e) {
+ if (hi >= 0x21 && hi <= 0x7e &&
+ (ch & 0x7f) >= 0x21 && (ch & 0x7f) <= 0x7e) {
/* multibyte character */
- kf = (volatile short *)tv_kfont[hi];
- kf += ch * FONTHEIGHT;
+ kf = (volatile uint16_t *)tv_kfont[hi];
+ kf += (ch & 0x7f) * FONTHEIGHT;
/* draw plane */
for (fh = 0; fh < FONTHEIGHT; fh++, p += ROWBYTES)
- *(u_short *)p = ~*kf++;
+ *(uint16_t *)p = ~*kf++;
return;
}
/* singlebyte character */
- if (*ip->GL == CSET_JISKANA)
- ch |= 0x80;
- f = tv_font[ch];
+ f = tv_getfont(*ip->GL, ch);
/* draw plane */
for (fh = 0; fh < FONTHEIGHT; fh++, p += ROWBYTES)
*p = ~*f++;
}
-void
+static void
tv_putc_bd(struct ite_softc *ip, int ch, char *p)
{
short fh, hi;
- char *f;
- volatile short *kf;
+ u_int data;
+ volatile uint16_t *kf;
+ uint8_t *f;
hi = ip->save_char & 0x7f;
- if (hi >= 0x21 && hi <= 0x7e && ch >= 0x21 && ch <= 0x7e) {
+ if (hi >= 0x21 && hi <= 0x7e &&
+ (ch & 0x7f) >= 0x21 && (ch & 0x7f) <= 0x7e) {
/* multibyte character */
- kf = (volatile short *)tv_kfont[hi];
- kf += ch * FONTHEIGHT;
+ kf = (volatile uint16_t *)tv_kfont[hi];
+ kf += (ch & 0x7f) * FONTHEIGHT;
/* draw plane */
for (fh = 0; fh < FONTHEIGHT; fh++, p += ROWBYTES) {
- ch = *kf++;
- *(u_short *)p = ch | (ch >> 1);
+ data = *kf++;
+ *(uint16_t *)p = data | (data >> 1);
}
return;
}
/* singlebyte character */
- if (*ip->GL == CSET_JISKANA)
- ch |= 0x80;
- f = tv_font[ch];
+ f = tv_getfont(*ip->GL, ch);
/* draw plane */
for (fh = 0; fh < FONTHEIGHT; fh++, p += ROWBYTES) {
- ch = *f++;
- *p = ch | (ch >> 1);
+ data = *f++;
+ *p = data | (data >> 1);
}
}
-inline static int
-expbits(int data)
+static inline uint32_t
+expbits(uint32_t data)
{
- int i, nd = 0;
- if (data & 1)
+ int i;
+ u_int nd = 0;
+
+ if ((data & 1) != 0)
nd |= 0x02;
- for (i=1; i < 32; i++) {
- if (data & (1 << i))
- nd |= 0x5 << (i-1);
+ for (i = 1; i < 32; i++) {
+ if ((data & (1 << i)) != 0)
+ nd |= 0x5 << (i - 1);
}
nd &= ~data;
- return (~nd);
+ return ~nd;
}
-void
+static void
tv_putc_ul(struct ite_softc *ip, int ch, char *p)
{
short fh, hi;
- char *f;
- volatile short *kf;
+ volatile uint16_t *kf;
+ uint8_t *f;
hi = ip->save_char & 0x7f;
- if (hi >= 0x21 && hi <= 0x7e && ch >= 0x21 && ch <= 0x7e) {
+ if (hi >= 0x21 && hi <= 0x7e &&
+ (ch & 0x7f) >= 0x21 && (ch & 0x7f) <= 0x7e) {
/* multibyte character */
- kf = (volatile short *)tv_kfont[hi];
- kf += ch * FONTHEIGHT;
+ kf = (volatile uint16_t *)tv_kfont[hi];
+ kf += (ch & 0x7f) * FONTHEIGHT;
/* draw plane */
for (fh = 0; fh < UNDERLINE; fh++, p += ROWBYTES)
- *(u_short *)p = *kf++;
- *(u_short *)p = expbits(*kf++);
+ *(uint16_t *)p = *kf++;
+ *(uint16_t *)p = expbits(*kf++);
p += ROWBYTES;
for (fh++; fh < FONTHEIGHT; fh++, p += ROWBYTES)
- *(u_short *)p = *kf++;
+ *(uint16_t *)p = *kf++;
return;
}
/* singlebyte character */
- if (*ip->GL == CSET_JISKANA)
- ch |= 0x80;
- f = tv_font[ch];
+ f = tv_getfont(*ip->GL, ch);
/* draw plane */
for (fh = 0; fh < UNDERLINE; fh++, p += ROWBYTES)
@@ -416,66 +432,65 @@ tv_putc_ul(struct ite_softc *ip, int ch,
*p = *f++;
}
-void
+static void
tv_putc_bd_in(struct ite_softc *ip, int ch, char *p)
{
short fh, hi;
- char *f;
- volatile short *kf;
+ u_int data;
+ volatile uint16_t *kf;
+ uint8_t *f;
hi = ip->save_char & 0x7f;
- if (hi >= 0x21 && hi <= 0x7e && ch >= 0x21 && ch <= 0x7e) {
+ if (hi >= 0x21 && hi <= 0x7e &&
+ (ch & 0x7f) >= 0x21 && (ch & 0x7f) <= 0x7e) {
/* multibyte character */
- kf = (volatile short *)tv_kfont[hi];
- kf += ch * FONTHEIGHT;
+ kf = (volatile uint16_t *)tv_kfont[hi];
+ kf += (ch & 0x7f) * FONTHEIGHT;
/* draw plane */
for (fh = 0; fh < FONTHEIGHT; fh++, p += ROWBYTES) {
- ch = *kf++;
- *(u_short *)p = ~(ch | (ch >> 1));
+ data = *kf++;
+ *(uint16_t *)p = ~(data | (data >> 1));
}
return;
}
/* singlebyte character */
- if (*ip->GL == CSET_JISKANA)
- ch |= 0x80;
- f = tv_font[ch];
+ f = tv_getfont(*ip->GL, ch);
/* draw plane */
for (fh = 0; fh < FONTHEIGHT; fh++, p += ROWBYTES) {
- ch = *f++;
- *p = ~(ch | (ch >> 1));
+ data = *f++;
+ *p = ~(data | (data >> 1));
}
}
-void
+static void
tv_putc_ul_in(struct ite_softc *ip, int ch, char *p)
{
short fh, hi;
- char *f;
- volatile short *kf;
+ volatile uint16_t *kf;
+ uint8_t *f;
hi = ip->save_char & 0x7f;
- if (hi >= 0x21 && hi <= 0x7e && ch >= 0x21 && ch <= 0x7e) {
+ if (hi >= 0x21 && hi <= 0x7e &&
+ (ch & 0x7f) >= 0x21 && (ch & 0x7f) <= 0x7e) {
/* multibyte character */
- kf = (volatile short *)tv_kfont[hi];
- kf += ch * FONTHEIGHT;
+ kf = (volatile uint16_t *)tv_kfont[hi];
+ kf += (ch & 0x7f) * FONTHEIGHT;
/* draw plane */
for (fh = 0; fh < UNDERLINE; fh++, p += ROWBYTES)
- *(u_short *)p = ~*kf++;
- *(u_short *)p = ~expbits(*kf++);
+ *(uint16_t *)p = ~*kf++;
+ *(uint16_t *)p = ~expbits(*kf++);
p += ROWBYTES;
for (fh++; fh < FONTHEIGHT; fh++, p += ROWBYTES)
- *(u_short *)p = ~*kf++;
+ *(uint16_t *)p = ~*kf++;
return;
}
/* singlebyte character */
- if (*ip->GL == CSET_JISKANA)
- ch |= 0x80;
- f = tv_font[ch];
+ f = tv_getfont(*ip->GL, ch);
/* draw plane */
for (fh = 0; fh < UNDERLINE; fh++, p += ROWBYTES)
@@ -486,108 +501,108 @@ tv_putc_ul_in(struct ite_softc *ip, int
*p = ~*f++;
}
-void
+static void
tv_putc_bd_ul(struct ite_softc *ip, int ch, char *p)
{
short fh, hi;
- char *f;
- volatile short *kf;
+ u_int data;
+ volatile uint16_t *kf;
+ uint8_t *f;
hi = ip->save_char & 0x7f;
- if (hi >= 0x21 && hi <= 0x7e && ch >= 0x21 && ch <= 0x7e) {
+ if (hi >= 0x21 && hi <= 0x7e &&
+ (ch & 0x7f) >= 0x21 && (ch & 0x7f) <= 0x7e) {
/* multibyte character */
- kf = (volatile short *)tv_kfont[hi];
- kf += ch * FONTHEIGHT;
+ kf = (volatile uint16_t *)tv_kfont[hi];
+ kf += (ch & 0x7f) * FONTHEIGHT;
/* draw plane */
for (fh = 0; fh < UNDERLINE; fh++, p += ROWBYTES) {
- ch = *kf++;
- *(u_short *)p = ch | (ch >> 1);
+ data = *kf++;
+ *(uint16_t *)p = data | (data >> 1);
}
- ch = *kf++;
- *(u_short *)p = expbits(ch | (ch >> 1));
+ data = *kf++;
+ *(uint16_t *)p = expbits(data | (data >> 1));
p += ROWBYTES;
for (fh++; fh < FONTHEIGHT; fh++, p += ROWBYTES) {
- ch = *kf++;
- *(u_short *)p = ch | (ch >> 1);
+ data = *kf++;
+ *(uint16_t *)p = data | (data >> 1);
}
return;
}
/* singlebyte character */
- if (*ip->GL == CSET_JISKANA)
- ch |= 0x80;
- f = tv_font[ch];
+ f = tv_getfont(*ip->GL, ch);
/* draw plane */
for (fh = 0; fh < UNDERLINE; fh++, p += ROWBYTES) {
- ch = *f++;
- *p = ch | (ch >> 1);
+ data = *f++;
+ *p = data | (data >> 1);
}
- ch = *f++;
- *p = expbits(ch | (ch >> 1));
+ data = *f++;
+ *p = expbits(data | (data >> 1));
p += ROWBYTES;
for (fh++; fh < FONTHEIGHT; fh++, p += ROWBYTES) {
- ch = *f++;
- *p = ch | (ch >> 1);
+ data = *f++;
+ *p = data | (data >> 1);
}
}
-void
+static void
tv_putc_bd_ul_in(struct ite_softc *ip, int ch, char *p)
{
short fh, hi;
- char *f;
- volatile short *kf;
+ u_int data;
+ volatile uint16_t *kf;
+ uint8_t *f;
hi = ip->save_char & 0x7f;
- if (hi >= 0x21 && hi <= 0x7e && ch >= 0x21 && ch <= 0x7e) {
+ if (hi >= 0x21 && hi <= 0x7e &&
+ (ch & 0x7f) >= 0x21 && (ch & 0x7f) <= 0x7e) {
/* multibyte character */
- kf = (volatile short *)tv_kfont[hi];
- kf += ch * FONTHEIGHT;
+ kf = (volatile uint16_t *)tv_kfont[hi];
+ kf += (ch & 0x7f) * FONTHEIGHT;
/* draw plane */
for (fh = 0; fh < UNDERLINE; fh++, p += ROWBYTES) {
- ch = *kf++;
- *(u_short *)p = ~(ch | (ch >> 1));
+ data = *kf++;
+ *(uint16_t *)p = ~(data | (data >> 1));
}
- ch = *kf++;
- *(u_short *)p = ~expbits(ch | (ch >> 1));
+ data = *kf++;
+ *(uint16_t *)p = ~expbits(data | (data >> 1));
p += ROWBYTES;
for (fh++; fh < FONTHEIGHT; fh++, p += ROWBYTES) {
- ch = *kf++;
- *(u_short *)p = ~(ch | (ch >> 1));
+ data = *kf++;
+ *(uint16_t *)p = ~(data | (data >> 1));
}
return;
}
/* singlebyte character */
- if (*ip->GL == CSET_JISKANA)
- ch |= 0x80;
- f = tv_font[ch];
+ f = tv_getfont(*ip->GL, ch);
/* draw plane */
for (fh = 0; fh < UNDERLINE; fh++, p += ROWBYTES) {
- ch = *f++;
- *p = ~(ch | (ch >> 1));
+ data = *f++;
+ *p = ~(data | (data >> 1));
}
- ch = *f++;
- *p = ~expbits(ch | (ch >> 1));
+ data = *f++;
+ *p = ~expbits(data | (data >> 1));
p += ROWBYTES;
for (fh++; fh < FONTHEIGHT; fh++, p += ROWBYTES) {
- ch = *f++;
- ch |= ch >> 1;
- *p = ~(ch | (ch >> 1));
+ data = *f++;
+ data |= data >> 1;
+ *p = ~(data | (data >> 1));
}
}
/*
* draw/erase/move cursor
*/
-void
+static void
tv_cursor(struct ite_softc *ip, int flag)
{
- u_char *p;
+ uint8_t *p;
short fh;
/* erase */
@@ -626,10 +641,10 @@ tv_cursor(struct ite_softc *ip, int flag
/*
* clear rectangle
*/
-void
+static void
tv_clear(struct ite_softc *ip, int y, int x, int height, int width)
{
- char *p;
+ uint8_t *p;
short fh;
/* XXX: reset scroll register on clearing whole screen */
@@ -651,7 +666,7 @@ tv_clear(struct ite_softc *ip, int y, in
/*
* scroll lines/columns
*/
-void
+static void
tv_scroll(struct ite_softc *ip, int srcy, int srcx, int count, int dir)
{
int dst, siz, pl;
@@ -698,8 +713,8 @@ tv_scroll(struct ite_softc *ip, int srcy
case SCROLL_LEFT:
for (pl = 0; pl < PLANESIZE * 4; pl += PLANESIZE) {
short fh;
- char *src = CHADDR(srcy, srcx) + pl;
- char *dest = CHADDR(srcy, srcx - count) + pl;
+ uint8_t *src = CHADDR(srcy, srcx) + pl;
+ uint8_t *dest = CHADDR(srcy, srcx - count) + pl;
siz = ip->cols - srcx;
for (fh = 0; fh < FONTHEIGHT; fh++) {
@@ -713,8 +728,8 @@ tv_scroll(struct ite_softc *ip, int srcy
case SCROLL_RIGHT:
for (pl = 0; pl < PLANESIZE * 4; pl += PLANESIZE) {
short fh;
- char *src = CHADDR(srcy, srcx) + pl;
- char *dest = CHADDR(srcy, srcx + count) + pl;
+ uint8_t *src = CHADDR(srcy, srcx) + pl;
+ uint8_t *dest = CHADDR(srcy, srcx + count) + pl;
siz = ip->cols - (srcx + count);
for (fh = 0; fh < FONTHEIGHT; fh++) {
Index: src/sys/arch/x68k/dev/itevar.h
diff -u src/sys/arch/x68k/dev/itevar.h:1.15 src/sys/arch/x68k/dev/itevar.h:1.16
--- src/sys/arch/x68k/dev/itevar.h:1.15 Wed Oct 10 17:49:50 2012
+++ src/sys/arch/x68k/dev/itevar.h Sat Jun 25 03:18:38 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: itevar.h,v 1.15 2012/10/10 17:49:50 tsutsui Exp $ */
+/* $NetBSD: itevar.h,v 1.16 2022/06/25 03:18:38 tsutsui Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -223,6 +223,7 @@ enum tab_size { TABSIZE = 8 };
#define CSET_JIS1978 (3|CSET_MULTI) /* iso2022jp old jis kanji */
#define CSET_JIS1983 (4|CSET_MULTI) /* iso2022jp new jis kanji */
#define CSET_JIS1990 (5|CSET_MULTI) /* iso2022jp hojo kanji */
+#define CSET_DECGRAPH 6 /* DEC special graphics characters */
struct consdev;
@@ -235,7 +236,6 @@ void itecnfinish(struct ite_softc *);
/* standard ite device entry points. */
void iteinit(dev_t);
-void itestart(struct tty *);
/* ite functions */
int iteon(dev_t, int);
@@ -256,4 +256,7 @@ extern unsigned char kern_font[];
extern unsigned char kbdled;
void ite_set_glyph(void);
void kbd_setLED(void);
+
+/* DEC special graphics character to ASCII table for box drawing etc. */
+extern const uint8_t ite_decgraph2ascii[];
#endif