Module Name: src Committed By: christos Date: Wed Jan 18 17:02:17 UTC 2023
Modified Files: src/sys/dev/wscons: wsemul_vt100_subr.c Log Message: Add rin, indn, vpa, hpa, and cbt terminfo capabilities (Crystal Kolipe) To generate a diff of this commit: cvs rdiff -u -r1.25 -r1.26 src/sys/dev/wscons/wsemul_vt100_subr.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/wscons/wsemul_vt100_subr.c diff -u src/sys/dev/wscons/wsemul_vt100_subr.c:1.25 src/sys/dev/wscons/wsemul_vt100_subr.c:1.26 --- src/sys/dev/wscons/wsemul_vt100_subr.c:1.25 Mon Jan 9 16:53:44 2023 +++ src/sys/dev/wscons/wsemul_vt100_subr.c Wed Jan 18 12:02:17 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: wsemul_vt100_subr.c,v 1.25 2023/01/09 21:53:44 christos Exp $ */ +/* $NetBSD: wsemul_vt100_subr.c,v 1.26 2023/01/18 17:02:17 christos Exp $ */ /* * Copyright (c) 1998 @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: wsemul_vt100_subr.c,v 1.25 2023/01/09 21:53:44 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: wsemul_vt100_subr.c,v 1.26 2023/01/18 17:02:17 christos Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -188,7 +188,7 @@ wsemul_vt100_el(struct vt100base_data *e void wsemul_vt100_handle_csi(struct vt100base_data *edp, u_char c) { - int n, help, flags, fgcol, bgcol; + int n, m, help, flags, fgcol, bgcol; long attr, bkgdattr; #define A3(a, b, c) (((a) << 16) | ((b) << 8) | (c)) @@ -410,6 +410,9 @@ wsemul_vt100_handle_csi(struct vt100base edp->ccol -= uimin(DEF1_ARG(edp, 0), edp->ccol); edp->flags &= ~VTFL_LASTCHAR; break; + case 'G': /* CHA */ + edp->ccol = uimin(DEF1_ARG(edp, 0) - 1, edp->ncols -1); + break; case 'H': /* CUP */ case 'f': /* HVP */ if (edp->flags & VTFL_DECOM) @@ -445,15 +448,40 @@ wsemul_vt100_handle_csi(struct vt100base COPYCOLS(edp, edp->ccol + n, edp->ccol, help); ERASECOLS(edp, NCOLS(edp) - n, n, edp->bkgdattr); break; + case 'S': /* SU */ + wsemul_vt100_scrollup(edp, DEF1_ARG(edp, 0)); + break; + case 'T': /* SD */ + wsemul_vt100_scrolldown(edp, DEF1_ARG(edp, 0)); + break; case 'X': /* ECH erase character */ n = uimin(DEF1_ARG(edp, 0), COLS_LEFT(edp) + 1); ERASECOLS(edp, edp->ccol, n, edp->bkgdattr); break; + case 'Z': /* CBT */ + if (edp->ccol == 0) + break; + for (m = 0; m < DEF1_ARG(edp, 0); m++) { + if (edp->tabs) { + for (n = edp->ccol - 1; n > 0; n--) { + if (edp->tabs[n]) + break; + } + } else + n = (edp->ccol - 1) & ~7; + edp->ccol = n; + if (n == 0) + break; + } + break; case 'c': /* DA primary */ if (ARG(edp, 0) == 0) wsdisplay_emulinput(edp->cbcookie, WSEMUL_VT_ID1, sizeof(WSEMUL_VT_ID1) - 1); break; + case 'd': /* VPA */ + edp->crow = uimin(DEF1_ARG(edp, 0) - 1, edp->nrows - 1); + break; case 'g': /* TBC */ KASSERT(edp->tabs != 0); switch (ARG(edp, 0)) {