home *** CD-ROM | disk | FTP | other *** search
- From: hm@hcshh.hcs.de (Hellmuth Michaelis)
- Newsgroups: comp.sources.misc
- Subject: v41i145: pcvt - Video Driver for 386BSD/NetBSD/FreeBSD, v3.00, Part06/13
- Date: 1 Mar 1994 17:10:17 -0600
- Organization: Sterling Software
- Sender: root@news.sterling.com
- Approved: kent@sparky.sterling.com
- Message-ID: <2l0i0p$5l9@sparky.sterling.com>
- X-Md4-Signature: 579316d31533d797614cc4d0487c9dae
-
- Submitted-by: hm@hcshh.hcs.de (Hellmuth Michaelis)
- Posting-number: Volume 41, Issue 145
- Archive-name: pcvt/part06
- Environment: 386BSD, NETBSD, FREEBSD
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then feed it
- # into a shell via "sh file" or similar. To overwrite existing files,
- # type "sh file -c".
- # Contents: pcvt/Doc/TestedHardware pcvt/Util/keycap/keycap.c
- # pcvt/pcvt_tbl.h pcvt/pcvt_vtf.c
- # Wrapped by kent@sparky on Tue Mar 1 16:46:19 1994
- PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin:$PATH ; export PATH
- echo If this archive is complete, you will see the following message:
- echo ' "shar: End of archive 6 (of 13)."'
- if test -f 'pcvt/Doc/TestedHardware' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'pcvt/Doc/TestedHardware'\"
- else
- echo shar: Extracting \"'pcvt/Doc/TestedHardware'\" \(2961 characters\)
- sed "s/^X//" >'pcvt/Doc/TestedHardware' <<'END_OF_FILE'
- XTested Hardware List last edit-date: [Thu Dec 9 21:39:51 1993]
- X
- XThis is by no means a complete list of hardware pcvt runs on, it is just
- Xcompiled from reports people sent in and from hardware owned/loaned !
- X
- X
- XTESTED VIDEO BOARDS (80 column operation)
- X--------------------------------------------------------------------------------
- X
- XManufacturer Chipset Monitor Notes
- X------------------------------ -------------- ---------------------- --------
- X2theMax (?) ET4000 VGA Color
- XVideo7 Inc. VEGA VGA VGA Color/Mono (2)
- XDiamond Stealth VRAM S3 NEC 3FGx
- XTrident TVGA 8800CS NEC 3D
- XTrident TVGA 9000B VGA Color/Mono (2)
- XData General C&T P82C604 VGA Color
- XNoName Hercules W86855AF Mono
- XTandon Monochrome (Hercules) TD3088A Tandon Mono
- XKyocera ML III25 (Mainboard) WD90C00 JVC VGA Color (1)
- XKyocera ML III25 (Mainboard) WD90C00 Nokia CED1 VGA Mono (1)
- XKyocera ML IIII33 (Mainboard) WD90C11 Nokia CED1 VGA Mono (1)
- XNoName VGA TVGA9000B JVC VGA Color (1,2)
- XTseng Labs ET3000AX JVC VGA Color (2)
- XVideo7 Inc. VEGA VGA VGA Mono (2)
- XVideo7 Inc. 1024i VGA Mono (2)
- XELSA GmbH S3 928 VGA Mono/Color
- X
- XNotes:
- X(1) - slight display distortion when switching between screens
- X(2) - remakable display distortion and/or loss of sync while loading fonts
- X
- X
- XTESTED VIDEO BOARDS (132 column operation)
- X--------------------------------------------------------------------------------
- X
- XManufacturer Chipset Monitor Notes
- X------------------------------ -------------- ---------------------- --------
- X2theMax (?) ET4000 VGA Color
- X2theMax (?) ET4000 Tandon VGA Mono
- XKyocera ML III33 (Mainboard) WD90C11 Tandon VGA Mono (1,2)
- XKyocera ML IIII33 (Mainboard) WD90C11 Tandon VGA Mono (1,2)
- XKyocera ML IIII33 (Mainboard) WD90C11 VGA Color (1,2)
- XTrident (?) TVGA9000B VGA Mono (1,3)
- XTseng Labs (?) ET3000 NEC 3D
- XELSA GmbH S3 928 VGA Mono/Color
- X
- XNotes:
- X(1) - slight display distortion when switching between screens
- X(2) - all fonts must be loaded in ascending order prior to switching to 132 cols
- X(3) - remakable display distortion and/or loss of sync while loading fonts
- X
- X
- XTESTED KEYBOARDS
- X--------------------------------------------------------------------------------
- X
- XManufacturer Type Layout
- X------------------------------ ---------------------- ------------------------
- XCherry MF II US
- XCherry/Tandon MF II German
- XHewlett-Packard MF II US
- XHewlett-Packard MF II German
- XTatung AT German
- XKyocera MF II German
- X
- XThere is absolutely NO support for the ancient PC-keyboards (they had 83 keys).
- X
- XThere is only limited support for AT-keyboards (they have 84 keys, and a
- Xseparate numeric keypad, they don't have F9-F12 keys) because the emulator
- Xneeds F9-F12 for control functions, and due to the current design of the
- Xkeyboard driver there is no (full) support for national keyboards because
- Xof the lack of a ALTGR key.
- X
- XMF-keyboards are fully supported, 101- and 102-key versions.
- X
- END_OF_FILE
- if test 2961 -ne `wc -c <'pcvt/Doc/TestedHardware'`; then
- echo shar: \"'pcvt/Doc/TestedHardware'\" unpacked with wrong size!
- fi
- # end of 'pcvt/Doc/TestedHardware'
- fi
- if test -f 'pcvt/Util/keycap/keycap.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'pcvt/Util/keycap/keycap.c'\"
- else
- echo shar: Extracting \"'pcvt/Util/keycap/keycap.c'\" \(10205 characters\)
- sed "s/^X//" >'pcvt/Util/keycap/keycap.c' <<'END_OF_FILE'
- X/*-
- X * Copyright (c) 1992, 1993 The Regents of the University of California.
- X * All rights reserved.
- X *
- X * This code is derived from software contributed to Berkeley by
- X * Holger Veit
- X *
- X * Redistribution and use in source and binary forms, with or without
- X * modification, are permitted provided that the following conditions
- X * are met:
- X * 1. Redistributions of source code must retain the above copyright
- X * notice, this list of conditions and the following disclaimer.
- X * 2. Redistributions in binary form must reproduce the above copyright
- X * notice, this list of conditions and the following disclaimer in the
- X * documentation and/or other materials provided with the distribution.
- X * 3. All advertising materials mentioning features or use of this software
- X * must display the following acknowledgement:
- X * This product includes software developed by the University of
- X * California, Berkeley and its contributors.
- X * 4. Neither the name of the University nor the names of its contributors
- X * may be used to endorse or promote products derived from this software
- X * without specific prior written permission.
- X *
- X * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- X * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- X * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- X * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- X * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- X * SUCH DAMAGE.
- X *
- X */
- X
- Xstatic char *id =
- X "@(#)keycap.c, 3.00, Last Edit-Date: [Sun Jan 2 14:00:27 1994]";
- X
- X/*---------------------------------------------------------------------------*
- X *
- X * keycap.c Keyboard capabilities database handling
- X * -------------------------------------------------------
- X *
- X * converted from printcap by Holger Veit (veit@du9ds3.uni-duisburg.de)
- X *
- X * BUG: Should use a "last" pointer in tbuf, so that searching
- X * for capabilities alphabetically would not be a n**2/2
- X * process when large numbers of capabilities are given.
- X *
- X * Note: If we add a last pointer now we will screw up the
- X * tc capability. We really should compile termcap.
- X *
- X * modified by Hellmuth Michaelis (hm@hcshh.hcs.de) to fit into the
- X * vt220 driver pcvt 2.0 distribution
- X *
- X * -hm header conversion & cosmetic changes for pcvt 2.0 distribution
- X * -hm debugging remapping
- X * -hm cleaning up from termcap ....
- X * -hm split off header file keycap.h
- X *
- X *---------------------------------------------------------------------------*/
- X
- X#include <stdio.h>
- X#include <ctype.h>
- X
- X#include "keycap.h"
- X
- X#define KEYCAP_BUFSIZ 1024
- X
- X#define MAXHOP 32 /* max number of tc= indirections */
- X
- Xchar *getenv();
- X
- Xstatic FILE *pfp = NULL; /* keycap data base file pointer */
- Xstatic char *tbuf;
- Xstatic int hopcount; /* detect infinite loops in keycap, init 0 */
- X
- Xstatic int knchktc();
- Xstatic int knamatch();
- Xstatic char *kdecode();
- X
- X/*---------------------------------------------------------------------------*
- X * match a name
- X *---------------------------------------------------------------------------*/
- Xstatic char *nmatch(id,cstr)
- Xchar *id,*cstr;
- X{
- X register n = strlen(id);
- X register char *c = cstr+n;
- X
- X if (strncmp(id,cstr,n)==0 &&
- X (*c==':' || *c=='|' || *c=='=' || *c=='#') || *c=='@')
- X return c;
- X return 0;
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * Get an entry for keyboard name in buffer bp from the keycap file.
- X * Parse is very rudimentary, we just notice escaped newlines.
- X *---------------------------------------------------------------------------*/
- Xkgetent(bp, name)
- Xchar *bp, *name;
- X{
- X register char *cp;
- X register int c;
- X register int i = 0, cnt = 0;
- X char ibuf[KEYCAP_BUFSIZ];
- X char *cp2;
- X int tf;
- X
- X tbuf = bp;
- X tf = 0;
- X
- X tf = open(KEYCAP_PATH, 0);
- X
- X if (tf < 0)
- X return (-1);
- X for (;;) {
- X cp = bp;
- X for (;;) {
- X if (i == cnt) {
- X cnt = read(tf, ibuf, KEYCAP_BUFSIZ);
- X if (cnt <= 0) {
- X close(tf);
- X return (0);
- X }
- X i = 0;
- X }
- X c = ibuf[i++];
- X if (c == '\n') {
- X if (cp > bp && cp[-1] == '\\'){
- X cp--;
- X continue;
- X }
- X break;
- X }
- X if (cp >= bp+KEYCAP_BUFSIZ) {
- X write(2,"Keycap entry too long\n", 23);
- X break;
- X } else
- X *cp++ = c;
- X }
- X *cp = 0;
- X
- X /*
- X * The real work for the match.
- X */
- X if (knamatch(name)) {
- X close(tf);
- X return(knchktc());
- X }
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * knchktc: check the last entry, see if it's tc=xxx. If so, recursively
- X * find xxx and append that entry (minus the names) to take the place of
- X * the tc=xxx entry. Note that this works because of the left to right scan.
- X *---------------------------------------------------------------------------*/
- Xstatic int knchktc()
- X{
- X register char *p, *q;
- X char tcname[16]; /* name of similar keyboard */
- X char tcbuf[KEYCAP_BUFSIZ];
- X char *holdtbuf = tbuf;
- X int l;
- X
- X p = tbuf + strlen(tbuf) - 2; /* before the last colon */
- X while (*--p != ':')
- X if (p<tbuf) {
- X write(2, "Bad keycap entry\n", 18);
- X return (0);
- X }
- X p++;
- X /* p now points to beginning of last field */
- X if (p[0] != 't' || p[1] != 'c')
- X return(1);
- X strcpy(tcname,p+3);
- X q = tcname;
- X while (q && *q != ':')
- X q++;
- X *q = 0;
- X if (++hopcount > MAXHOP) {
- X write(2, "Infinite tc= loop\n", 18);
- X return (0);
- X }
- X if (kgetent(tcbuf, tcname) != 1)
- X return(0);
- X for (q=tcbuf; *q != ':'; q++)
- X ;
- X l = p - holdtbuf + strlen(q);
- X if (l > KEYCAP_BUFSIZ) {
- X write(2, "Keycap entry too long\n", 23);
- X q[KEYCAP_BUFSIZ - (p-tbuf)] = 0;
- X }
- X strcpy(p, q+1);
- X tbuf = holdtbuf;
- X return(1);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * knamatch deals with name matching. The first field of the keycap entry
- X * is a sequence of names separated by |'s, so we compare against each such
- X * name. The normal : terminator after the last name (before the first field)
- X * stops us.
- X *---------------------------------------------------------------------------*/
- Xstatic int knamatch(np)
- Xchar *np;
- X{
- X register char *Np, *Bp;
- X
- X Bp = tbuf;
- X if (*Bp == '#' || *Bp == 0)
- X return(0);
- X for (;;) {
- X for (Np = np; *Np && *Bp == *Np; Bp++, Np++)
- X continue;
- X if (*Np == 0 && (*Bp == '|' || *Bp == ':' || *Bp == 0))
- X return (1);
- X while (*Bp && *Bp != ':' && *Bp != '|')
- X Bp++;
- X if (*Bp == 0 || *Bp == ':')
- X return (0);
- X Bp++;
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * Skip to the next field. Notice that this is very dumb, not knowing about
- X * \: escapes or any such. If necessary, :'s can be put into the keycap file
- X * in octal.
- X *---------------------------------------------------------------------------*/
- Xstatic char *kskip(bp)
- Xchar *bp;
- X{
- X while (*bp && *bp != ':')
- X bp++;
- X if (*bp == ':')
- X bp++;
- X return (bp);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * Return the (numeric) option id. Numeric options look like 'li#80' i.e.
- X * the option string is separated from the numeric value by a # character.
- X * If the option is not found we return -1. Note that we handle octal
- X * numbers beginning with 0.
- X *---------------------------------------------------------------------------*/
- Xint kgetnum(id)
- Xchar *id;
- X{
- X register int i, base;
- X register char *bp = tbuf,*xp;
- X
- X for (;;) {
- X bp = kskip(bp);
- X if (*bp == 0)
- X return (-1);
- X if ((xp=nmatch(id,bp)) == 0)
- X continue;
- X bp = xp; /* we have an entry */
- X if (*bp == '@')
- X return(-1);
- X if (*bp != '#')
- X continue;
- X bp++;
- X base = 10;
- X if (*bp == '0')
- X base = 8;
- X i = 0;
- X while (isdigit(*bp))
- X i *= base, i += *bp++ - '0';
- X return (i);
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * Handle a flag option. Flag options are given "naked", i.e. followed by
- X * a : or the end of the buffer. Return 1 if we find the option, or 0 if
- X * it is not given.
- X *---------------------------------------------------------------------------*/
- Xint kgetflag(id)
- Xchar *id;
- X{
- X register char *bp = tbuf,*xp;
- X
- X for (;;) {
- X bp = kskip(bp);
- X if (!*bp)
- X return (0);
- X if ((xp=nmatch(id,bp)) != 0) {
- X bp = xp;
- X if (!*bp || *bp == ':')
- X return (1);
- X else if (*bp == '@')
- X return(0);
- X }
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * Get a string valued option. These are given as 'cl=^Z'. Much decoding
- X * is done on the strings, and the strings are placed in area, which is a
- X * ref parameter which is updated. No checking on area overflow.
- X *---------------------------------------------------------------------------*/
- Xchar *kgetstr(id, area)
- Xchar *id;
- Xchar **area;
- X{
- X register char *bp = tbuf,*xp;
- X
- X for (;;) {
- X bp = kskip(bp);
- X if (!*bp)
- X return (0);
- X if ((xp = nmatch(id,bp)) == 0)
- X continue;
- X bp = xp;
- X if (*bp == '@')
- X return(0);
- X if (*bp != '=')
- X continue;
- X bp++;
- X return (kdecode(bp, area));
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * kdecode does the grung work to decode the string capability escapes.
- X *---------------------------------------------------------------------------*/
- Xstatic char *kdecode(str, area)
- Xchar *str;
- Xchar **area;
- X{
- X register char *cp;
- X register int c;
- X register char *dp;
- X int i;
- X
- X cp = *area;
- X while ((c = *str++) && c != ':') {
- X switch (c) {
- X
- X case '^':
- X c = *str++ & 037;
- X break;
- X
- X case '\\':
- X dp = "E\033^^\\\\::n\nr\rt\tb\bf\f";
- X c = *str++;
- Xnextc:
- X if (*dp++ == c) {
- X c = *dp++;
- X break;
- X }
- X dp++;
- X if (*dp)
- X goto nextc;
- X if (isdigit(c)) {
- X c -= '0', i = 2;
- X do
- X c <<= 3, c |= *str++ - '0';
- X while (--i && isdigit(*str));
- X }
- X break;
- X }
- X *cp++ = c;
- X }
- X *cp++ = 0;
- X str = *area;
- X *area = cp;
- X return (str);
- X}
- X
- X/*-------------------------------- EOF --------------------------------------*/
- END_OF_FILE
- if test 10205 -ne `wc -c <'pcvt/Util/keycap/keycap.c'`; then
- echo shar: \"'pcvt/Util/keycap/keycap.c'\" unpacked with wrong size!
- fi
- # end of 'pcvt/Util/keycap/keycap.c'
- fi
- if test -f 'pcvt/pcvt_tbl.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'pcvt/pcvt_tbl.h'\"
- else
- echo shar: Extracting \"'pcvt/pcvt_tbl.h'\" \(21126 characters\)
- sed "s/^X//" >'pcvt/pcvt_tbl.h' <<'END_OF_FILE'
- X/*
- X * Copyright (c) 1992,1993,1994 Hellmuth Michaelis
- X *
- X * All rights reserved.
- X *
- X * Redistribution and use in source and binary forms, with or without
- X * modification, are permitted provided that the following conditions
- X * are met:
- X * 1. Redistributions of source code must retain the above copyright
- X * notice, this list of conditions and the following disclaimer.
- X * 2. Redistributions in binary form must reproduce the above copyright
- X * notice, this list of conditions and the following disclaimer in the
- X * documentation and/or other materials provided with the distribution.
- X * 3. All advertising materials mentioning features or use of this software
- X * must display the following acknowledgement:
- X * This product includes software developed by Hellmuth Michaelis
- X * 4. The name authors may not be used to endorse or promote products
- X * derived from this software without specific prior written permission.
- X *
- X * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
- X * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- X * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- X * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- X * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- X * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- X * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- X * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- X * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- X * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- X *
- X *
- X * @(#)pcvt_tbl.h, 3.00, Last Edit-Date: [Sun Feb 27 17:04:53 1994]
- X *
- X */
- X
- X/*---------------------------------------------------------------------------*
- X *
- X * pcvt_tbl.h VT220 Driver Character Set Conversion Tables
- X * ------------------------------------------------------------
- X * -hm splitting off pccons_out.c
- X * -hm default tables for pure mda/hcg/cga
- X *
- X * in pcvt_out.c, hooks are provided for the following charactersets:
- X *
- X * HAVECS_BRITISH
- X * HAVECS_ASCII
- X * HAVECS_FINNISH
- X * HAVECS_NORWEGIANDANISH
- X * HAVECS_SWEDISH
- X * HAVECS_GERMAN
- X * HAVECS_FRENCHCANADA
- X * HAVECS_FRENCH
- X * HAVECS_ITALIAN
- X * HAVECS_SPANISH
- X * HAVECS_SPECIAL
- X * HAVECS_ALTERNATEROM1
- X * HAVECS_ALTERNATEROM2
- X * HAVECS_ROMAN8
- X * HAVECS_DUTCH
- X * HAVECS_SUPPLEMENTAL
- X * HAVECS_SWISS
- X * HAVECS_TECHNICAL
- X * HAVECS_ISOLATIN
- X *
- X * to add support for a new charcterset, you have to provide the
- X * table named "cs_<charset>",define the according "HAVECS_<CHARSET>"
- X * and recompile everything. ref: pcvt_out.c, vt_designate()
- X *
- X *---------------------------------------------------------------------------*/
- X
- X/*===========================================================================*
- X * DEFAULT TABLES FOR MDA/HCG/CGA
- X *===========================================================================*/
- X
- X/*---------------------------------------------------------------------------*
- X * ASCII Characterset
- X *---------------------------------------------------------------------------*/
- X#define HAVECSD_ASCII
- Xu_short csd_ascii[CSSIZE] = {
- X/* 20 */ 0x20 | CSL, 0x21 | CSL, 0x22 | CSL, 0x23 | CSL,
- X/* 24 */ 0x24 | CSL, 0x25 | CSL, 0x26 | CSL, 0x27 | CSL,
- X/* 28 */ 0x28 | CSL, 0x29 | CSL, 0x2A | CSL, 0x2B | CSL,
- X/* 2C */ 0x2C | CSL, 0x2D | CSL, 0x2E | CSL, 0x2F | CSL,
- X
- X/* 30 */ 0x30 | CSL, 0x31 | CSL, 0x32 | CSL, 0x33 | CSL,
- X/* 34 */ 0x34 | CSL, 0x35 | CSL, 0x36 | CSL, 0x37 | CSL,
- X/* 38 */ 0x38 | CSL, 0x39 | CSL, 0x3A | CSL, 0x3B | CSL,
- X/* 3C */ 0x3C | CSL, 0x3D | CSL, 0x3E | CSL, 0x3F | CSL,
- X
- X/* 40 */ 0x40 | CSL, 0x41 | CSL, 0x42 | CSL, 0x43 | CSL,
- X/* 44 */ 0x44 | CSL, 0x45 | CSL, 0x46 | CSL, 0x47 | CSL,
- X/* 48 */ 0x48 | CSL, 0x49 | CSL, 0x4A | CSL, 0x4B | CSL,
- X/* 4C */ 0x4C | CSL, 0x4D | CSL, 0x4E | CSL, 0x4F | CSL,
- X
- X/* 50 */ 0x50 | CSL, 0x51 | CSL, 0x52 | CSL, 0x53 | CSL,
- X/* 54 */ 0x54 | CSL, 0x55 | CSL, 0x56 | CSL, 0x57 | CSL,
- X/* 58 */ 0x58 | CSL, 0x59 | CSL, 0x5A | CSL, 0x5B | CSL,
- X/* 5C */ 0x5C | CSL, 0x5D | CSL, 0x5E | CSL, 0x5F | CSL,
- X
- X/* 60 */ 0x60 | CSL, 0x61 | CSL, 0x62 | CSL, 0x63 | CSL,
- X/* 64 */ 0x64 | CSL, 0x65 | CSL, 0x66 | CSL, 0x67 | CSL,
- X/* 68 */ 0x68 | CSL, 0x69 | CSL, 0x6A | CSL, 0x6B | CSL,
- X/* 6C */ 0x6C | CSL, 0x6D | CSL, 0x6E | CSL, 0x6F | CSL,
- X
- X/* 70 */ 0x70 | CSL, 0x71 | CSL, 0x72 | CSL, 0x73 | CSL,
- X/* 74 */ 0x74 | CSL, 0x75 | CSL, 0x76 | CSL, 0x77 | CSL,
- X/* 78 */ 0x78 | CSL, 0x79 | CSL, 0x7A | CSL, 0x7B | CSL,
- X/* 7C */ 0x7C | CSL, 0x7D | CSL, 0x7E | CSL, 0x7F | CSL,
- X};
- X
- X/*---------------------------------------------------------------------------*
- X * DEC Supplemental Graphic Characterset
- X *---------------------------------------------------------------------------*/
- X#define HAVECSD_SUPPLEMENTAL
- Xu_short csd_supplemental[CSSIZE] = {
- X/* 20 */ 0x20 | CSL, 0xAD | CSL, 0x9B | CSL, 0x9C | CSL,
- X/* 24 */ 0x20 | CSL, 0x9D | CSL, 0x20 | CSL, 0x20 | CSL,
- X/* 28 */ 0x20 | CSL, 0x20 | CSL, 0xA6 | CSL, 0xAE | CSL,
- X/* 2C */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL,
- X
- X/* 30 */ 0xF8 | CSL, 0xF1 | CSL, 0xFD | CSL, 0x20 | CSL,
- X/* 34 */ 0x20 | CSL, 0xE6 | CSL, 0x20 | CSL, 0x20 | CSL,
- X/* 38 */ 0x20 | CSL, 0x20 | CSL, 0xA7 | CSL, 0xAF | CSL,
- X/* 3C */ 0xAC | CSL, 0xAB | CSL, 0x20 | CSL, 0xA8 | CSL,
- X
- X/* 40 */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL,
- X/* 44 */ 0x8E | CSL, 0x8F | CSL, 0x92 | CSL, 0x80 | CSL,
- X/* 48 */ 0x20 | CSL, 0x90 | CSL, 0x20 | CSL, 0x20 | CSL,
- X/* 4C */ 0x8D | CSL, 0xA1 | CSL, 0x8C | CSL, 0x8B | CSL,
- X
- X/* 50 */ 0x20 | CSL, 0xA5 | CSL, 0x20 | CSL, 0x20 | CSL,
- X/* 54 */ 0x20 | CSL, 0x20 | CSL, 0x99 | CSL, 0x20 | CSL,
- X/* 58 */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL,
- X/* 5C */ 0x9A | CSL, 0x20 | CSL, 0x20 | CSL, 0xE1 | CSL,
- X
- X/* 60 */ 0x85 | CSL, 0xA0 | CSL, 0x83 | CSL, 0x20 | CSL,
- X/* 64 */ 0x84 | CSL, 0x86 | CSL, 0x91 | CSL, 0x87 | CSL,
- X/* 68 */ 0x8A | CSL, 0x82 | CSL, 0x88 | CSL, 0x89 | CSL,
- X/* 6C */ 0x8D | CSL, 0xA1 | CSL, 0x8C | CSL, 0x8B | CSL,
- X
- X/* 70 */ 0x20 | CSL, 0xA4 | CSL, 0x95 | CSL, 0xA2 | CSL,
- X/* 74 */ 0x93 | CSL, 0x20 | CSL, 0x94 | CSL, 0x20 | CSL,
- X/* 78 */ 0x20 | CSL, 0x97 | CSL, 0xA3 | CSL, 0x96 | CSL,
- X/* 7C */ 0x81 | CSL, 0x98 | CSL, 0x20 | CSL, 0x20 | CSL
- X};
- X
- X/*---------------------------------------------------------------------------*
- X * DEC Special Graphic Characterset
- X *---------------------------------------------------------------------------*/
- X#define HAVECSD_SPECIAL
- Xu_short csd_special[CSSIZE] = {
- X/* 20 */ 0x20 | CSL, 0x21 | CSL, 0x22 | CSL, 0x23 | CSL,
- X/* 24 */ 0x24 | CSL, 0x25 | CSL, 0x26 | CSL, 0x27 | CSL,
- X/* 28 */ 0x28 | CSL, 0x29 | CSL, 0x2A | CSL, 0x2B | CSL,
- X/* 2C */ 0x2C | CSL, 0x2D | CSL, 0x2E | CSL, 0x2F | CSL,
- X
- X/* 30 */ 0x30 | CSL, 0x31 | CSL, 0x32 | CSL, 0x33 | CSL,
- X/* 34 */ 0x34 | CSL, 0x35 | CSL, 0x36 | CSL, 0x37 | CSL,
- X/* 38 */ 0x38 | CSL, 0x39 | CSL, 0x3A | CSL, 0x3B | CSL,
- X/* 3C */ 0x3C | CSL, 0x3D | CSL, 0x3E | CSL, 0x3F | CSL,
- X
- X/* 40 */ 0x40 | CSL, 0x41 | CSL, 0x42 | CSL, 0x43 | CSL,
- X/* 44 */ 0x44 | CSL, 0x45 | CSL, 0x46 | CSL, 0x47 | CSL,
- X/* 48 */ 0x48 | CSL, 0x49 | CSL, 0x4A | CSL, 0x4B | CSL,
- X/* 4C */ 0x4C | CSL, 0x4D | CSL, 0x4E | CSL, 0x4F | CSL,
- X
- X/* 50 */ 0x50 | CSL, 0x51 | CSL, 0x52 | CSL, 0x53 | CSL,
- X/* 54 */ 0x54 | CSL, 0x55 | CSL, 0x56 | CSL, 0x57 | CSL,
- X/* 58 */ 0x58 | CSL, 0x59 | CSL, 0x5A | CSL, 0x5B | CSL,
- X/* 5C */ 0x5C | CSL, 0x5D | CSL, 0x5E | CSL, 0x20 | CSL,
- X
- X/* 60 */ 0x20 | CSL, 0xB0 | CSL, 0x20 | CSL, 0x20 | CSL,
- X/* 64 */ 0x20 | CSL, 0x20 | CSL, 0xF8 | CSL, 0xF1 | CSL,
- X/* 68 */ 0x20 | CSL, 0x20 | CSL, 0xD9 | CSL, 0xBF | CSL,
- X/* 6C */ 0xDA | CSL, 0xC0 | CSL, 0xC5 | CSL, 0x20 | CSL,
- X
- X/* 70 */ 0x20 | CSL, 0xC4 | CSL, 0x20 | CSL, 0x20 | CSL,
- X/* 74 */ 0xC3 | CSL, 0xB4 | CSL, 0xC1 | CSL, 0xC2 | CSL,
- X/* 78 */ 0xB3 | CSL, 0xF3 | CSL, 0xF2 | CSL, 0xE3 | CSL,
- X/* 7C */ 0x20 | CSL, 0x9C | CSL, 0x20 | CSL, 0x20 | CSL
- X};
- X
- X/*---------------------------------------------------------------------------*
- X * DEC Technical Characterset
- X *---------------------------------------------------------------------------*/
- X#define HAVECSD_TECHNICAL
- Xu_short csd_technical[CSSIZE] = {
- X/* 20 */ 0xFE | CSH, 0xFB | CSL, 0xDA | CSL, 0xC4 | CSL,
- X/* 24 */ 0xF4 | CSL, 0xF5 | CSL, 0xB3 | CSL, 0xDA | CSL,
- X/* 28 */ 0xC0 | CSL, 0xBF | CSL, 0xD9 | CSL, 0x20 | CSL,
- X/* 2C */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL,
- X
- X/* 30 */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL,
- X/* 34 */ 0x20 | CSL, 0xAA | CSL, 0xA9 | CSL, 0x3E | CSL,
- X/* 38 */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL,
- X/* 3C */ 0xF3 | CSL, 0x20 | CSL, 0xF2 | CSL, 0x20 | CSL,
- X
- X/* 40 */ 0x20 | CSL, 0x20 | CSL, 0xEC | CSL, 0xF6 | CSL,
- X/* 44 */ 0x20 | CSL, 0x20 | CSL, 0xE8 | CSL, 0xE2 | CSL,
- X/* 48 */ 0x20 | CSL, 0xF7 | CSL, 0xE9 | CSL, 0x78 | CSL,
- X/* 4C */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0xF0 | CSL,
- X
- X/* 50 */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0xE4 | CSL,
- X/* 54 */ 0x20 | CSL, 0x20 | CSL, 0xFB | CSL, 0xEA | CSL,
- X/* 58 */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL,
- X/* 5C */ 0xEF | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL,
- X
- X/* 60 */ 0xAA | CSL, 0xE0 | CSL, 0xE1 | CSL, 0x20 | CSL,
- X/* 64 */ 0xEB | CSL, 0x20 | CSL, 0xED | CSL, 0x59 | CSL,
- X/* 68 */ 0x20 | CSL, 0x20 | CSL, 0xE9 | CSL, 0x20 | CSL,
- X/* 6C */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL,
- X
- X/* 70 */ 0xE3 | CSL, 0x20 | CSL, 0x20 | CSL, 0xE5 | CSL,
- X/* 74 */ 0xE7 | CSL, 0x20 | CSL, 0x9F | CSL, 0x20 | CSL,
- X/* 78 */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL,
- X/* 7C */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL
- X};
- X
- X/*---------------------------------------------------------------------------*
- X * ISO Latin-1 Characterset
- X *---------------------------------------------------------------------------*/
- X#define HAVECSD_ISOLATIN
- Xu_short csd_isolatin[CSSIZE] = {
- X/* 20 */ 0x20 | CSL, 0xAD | CSL, 0x9B | CSL, 0x9C | CSL,
- X/* 24 */ 0x20 | CSL, 0x9D | CSL, 0x7C | CSL, 0x20 | CSL,
- X/* 28 */ 0x22 | CSL, 0x20 | CSL, 0xA6 | CSL, 0xAE | CSL,
- X/* 2C */ 0xAA | CSL, 0x2D | CSL, 0x20 | CSL, 0x2D | CSL,
- X
- X/* 30 */ 0xF8 | CSL, 0xF1 | CSL, 0xFD | CSL, 0x20 | CSL,
- X/* 34 */ 0x27 | CSL, 0xE6 | CSL, 0x20 | CSL, 0x20 | CSL,
- X/* 38 */ 0x20 | CSL, 0x20 | CSL, 0xA7 | CSL, 0xAF | CSL,
- X/* 3C */ 0xAC | CSL, 0xAB | CSL, 0x20 | CSL, 0xA8 | CSL,
- X
- X/* 40 */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL,
- X/* 44 */ 0x8E | CSL, 0x8F | CSL, 0x92 | CSL, 0x80 | CSL,
- X/* 48 */ 0x20 | CSL, 0x90 | CSL, 0x20 | CSL, 0x20 | CSL,
- X/* 4C */ 0x8D | CSL, 0xA1 | CSL, 0x8C | CSL, 0x8B | CSL,
- X
- X/* 50 */ 0x20 | CSL, 0xA5 | CSL, 0x20 | CSL, 0x20 | CSL,
- X/* 54 */ 0x20 | CSL, 0x20 | CSL, 0x99 | CSL, 0x78 | CSL,
- X/* 58 */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL,
- X/* 5C */ 0x9A | CSL, 0x20 | CSL, 0x20 | CSL, 0xE1 | CSL,
- X
- X/* 60 */ 0x85 | CSL, 0xA0 | CSL, 0x83 | CSL, 0x20 | CSL,
- X/* 64 */ 0x84 | CSL, 0x86 | CSL, 0x91 | CSL, 0x87 | CSL,
- X/* 68 */ 0x8A | CSL, 0x82 | CSL, 0x88 | CSL, 0x89 | CSL,
- X/* 6C */ 0x8D | CSL, 0xA1 | CSL, 0x8C | CSL, 0x8B | CSL,
- X
- X/* 70 */ 0x20 | CSL, 0xA4 | CSL, 0x95 | CSL, 0xA2 | CSL,
- X/* 74 */ 0x93 | CSL, 0x20 | CSL, 0x94 | CSL, 0xF6 | CSL,
- X/* 78 */ 0x20 | CSL, 0x97 | CSL, 0xA3 | CSL, 0x96 | CSL,
- X/* 7C */ 0x81 | CSL, 0x20 | CSL, 0x20 | CSL, 0x98 | CSL
- X};
- X
- X/*===========================================================================*
- X * EXTENDED TABLES FOR EGA/VGA
- X *===========================================================================*/
- X
- X/*---------------------------------------------------------------------------*
- X * ASCII Characterset
- X *---------------------------------------------------------------------------*/
- X#define HAVECSE_ASCII
- Xu_short cse_ascii[CSSIZE] = {
- X/* 20 */ 0x20 | CSL, 0x21 | CSL, 0x22 | CSL, 0x23 | CSL,
- X/* 24 */ 0x24 | CSL, 0x25 | CSL, 0x26 | CSL, 0x27 | CSL,
- X/* 28 */ 0x28 | CSL, 0x29 | CSL, 0x2A | CSL, 0x2B | CSL,
- X/* 2C */ 0x2C | CSL, 0x2D | CSL, 0x2E | CSL, 0x2F | CSL,
- X
- X/* 30 */ 0x30 | CSL, 0x31 | CSL, 0x32 | CSL, 0x33 | CSL,
- X/* 34 */ 0x34 | CSL, 0x35 | CSL, 0x36 | CSL, 0x37 | CSL,
- X/* 38 */ 0x38 | CSL, 0x39 | CSL, 0x3A | CSL, 0x3B | CSL,
- X/* 3C */ 0x3C | CSL, 0x3D | CSL, 0x3E | CSL, 0x3F | CSL,
- X
- X/* 40 */ 0x40 | CSL, 0x41 | CSL, 0x42 | CSL, 0x43 | CSL,
- X/* 44 */ 0x44 | CSL, 0x45 | CSL, 0x46 | CSL, 0x47 | CSL,
- X/* 48 */ 0x48 | CSL, 0x49 | CSL, 0x4A | CSL, 0x4B | CSL,
- X/* 4C */ 0x4C | CSL, 0x4D | CSL, 0x4E | CSL, 0x4F | CSL,
- X
- X/* 50 */ 0x50 | CSL, 0x51 | CSL, 0x52 | CSL, 0x53 | CSL,
- X/* 54 */ 0x54 | CSL, 0x55 | CSL, 0x56 | CSL, 0x57 | CSL,
- X/* 58 */ 0x58 | CSL, 0x59 | CSL, 0x5A | CSL, 0x5B | CSL,
- X/* 5C */ 0x5C | CSL, 0x5D | CSL, 0x5E | CSL, 0x5F | CSL,
- X
- X/* 60 */ 0x60 | CSL, 0x61 | CSL, 0x62 | CSL, 0x63 | CSL,
- X/* 64 */ 0x64 | CSL, 0x65 | CSL, 0x66 | CSL, 0x67 | CSL,
- X/* 68 */ 0x68 | CSL, 0x69 | CSL, 0x6A | CSL, 0x6B | CSL,
- X/* 6C */ 0x6C | CSL, 0x6D | CSL, 0x6E | CSL, 0x6F | CSL,
- X
- X/* 70 */ 0x70 | CSL, 0x71 | CSL, 0x72 | CSL, 0x73 | CSL,
- X/* 74 */ 0x74 | CSL, 0x75 | CSL, 0x76 | CSL, 0x77 | CSL,
- X/* 78 */ 0x78 | CSL, 0x79 | CSL, 0x7A | CSL, 0x7B | CSL,
- X/* 7C */ 0x7C | CSL, 0x7D | CSL, 0x7E | CSL, 0xB0 | CSL,
- X};
- X
- X/*---------------------------------------------------------------------------*
- X * DEC Supplemental Graphic Characterset
- X *---------------------------------------------------------------------------*/
- X#define HAVECSE_SUPPLEMENTAL
- Xu_short cse_supplemental[CSSIZE] = {
- X/* 20 */ 0x20 | CSL, 0xAD | CSL, 0x9B | CSL, 0x9C | CSL,
- X/* 24 */ 0x9F | CSH, 0x67 | CSH, 0x9F | CSH, 0x15 | CSL,
- X/* 28 */ 0x9D | CSH, 0x9C | CSH, 0xA6 | CSL, 0xAE | CSL,
- X/* 2C */ 0x9F | CSH, 0x9F | CSH, 0x9F | CSH, 0x9F | CSH,
- X
- X/* 30 */ 0xF8 | CSL, 0xF1 | CSL, 0xFD | CSL, 0x9B | CSH,
- X/* 34 */ 0x9F | CSH, 0xE6 | CSL, 0x14 | CSL, 0x99 | CSH,
- X/* 38 */ 0x9F | CSH, 0x98 | CSH, 0xA7 | CSL, 0xAF | CSL,
- X/* 3C */ 0xAC | CSL, 0xAB | CSL, 0x9F | CSH, 0xA8 | CSL,
- X
- X/* 40 */ 0x97 | CSH, 0x96 | CSH, 0x95 | CSH, 0x94 | CSH,
- X/* 44 */ 0x8E | CSL, 0x8F | CSL, 0x92 | CSL, 0x80 | CSL,
- X/* 48 */ 0x93 | CSH, 0x90 | CSL, 0x92 | CSH, 0x91 | CSH,
- X/* 4C */ 0x90 | CSH, 0x8F | CSH, 0x8E | CSH, 0x8D | CSH,
- X
- X/* 50 */ 0x9F | CSH, 0xA5 | CSL, 0x8C | CSH, 0x8B | CSH,
- X/* 54 */ 0x8A | CSH, 0x89 | CSH, 0x99 | CSL, 0x88 | CSH,
- X/* 58 */ 0x87 | CSH, 0x86 | CSH, 0x85 | CSH, 0x84 | CSH,
- X/* 5C */ 0x9A | CSL, 0x83 | CSH, 0x9F | CSH, 0xE1 | CSL,
- X
- X/* 60 */ 0x85 | CSL, 0xA0 | CSL, 0x83 | CSL, 0x82 | CSH,
- X/* 64 */ 0x84 | CSL, 0x86 | CSL, 0x91 | CSL, 0x87 | CSL,
- X/* 68 */ 0x8A | CSL, 0x82 | CSL, 0x88 | CSL, 0x89 | CSL,
- X/* 6C */ 0x8D | CSL, 0xA1 | CSL, 0x8C | CSL, 0x8B | CSL,
- X
- X/* 70 */ 0x9F | CSH, 0xA4 | CSL, 0x95 | CSL, 0xA2 | CSL,
- X/* 74 */ 0x93 | CSL, 0x81 | CSH, 0x94 | CSL, 0x80 | CSH,
- X/* 78 */ 0x7F | CSH, 0x97 | CSL, 0xA3 | CSL, 0x96 | CSL,
- X/* 7C */ 0x81 | CSL, 0x98 | CSL, 0x9F | CSH, 0x20 | CSL
- X};
- X
- X/*---------------------------------------------------------------------------*
- X * DEC Special Graphic Characterset
- X *---------------------------------------------------------------------------*/
- X#define HAVECSE_SPECIAL
- Xu_short cse_special[CSSIZE] = {
- X/* 20 */ 0x20 | CSL, 0x21 | CSL, 0x22 | CSL, 0x23 | CSL,
- X/* 24 */ 0x24 | CSL, 0x25 | CSL, 0x26 | CSL, 0x27 | CSL,
- X/* 28 */ 0x28 | CSL, 0x29 | CSL, 0x2A | CSL, 0x2B | CSL,
- X/* 2C */ 0x2C | CSL, 0x2D | CSL, 0x2E | CSL, 0x2F | CSL,
- X
- X/* 30 */ 0x30 | CSL, 0x31 | CSL, 0x32 | CSL, 0x33 | CSL,
- X/* 34 */ 0x34 | CSL, 0x35 | CSL, 0x36 | CSL, 0x37 | CSL,
- X/* 38 */ 0x38 | CSL, 0x39 | CSL, 0x3A | CSL, 0x3B | CSL,
- X/* 3C */ 0x3C | CSL, 0x3D | CSL, 0x3E | CSL, 0x3F | CSL,
- X
- X/* 40 */ 0x40 | CSL, 0x41 | CSL, 0x42 | CSL, 0x43 | CSL,
- X/* 44 */ 0x44 | CSL, 0x45 | CSL, 0x46 | CSL, 0x47 | CSL,
- X/* 48 */ 0x48 | CSL, 0x49 | CSL, 0x4A | CSL, 0x4B | CSL,
- X/* 4C */ 0x4C | CSL, 0x4D | CSL, 0x4E | CSL, 0x4F | CSL,
- X
- X/* 50 */ 0x50 | CSL, 0x51 | CSL, 0x52 | CSL, 0x53 | CSL,
- X/* 54 */ 0x54 | CSL, 0x55 | CSL, 0x56 | CSL, 0x57 | CSL,
- X/* 58 */ 0x58 | CSL, 0x59 | CSL, 0x5A | CSL, 0x5B | CSL,
- X/* 5C */ 0x5C | CSL, 0x5D | CSL, 0x5E | CSL, 0x20 | CSL,
- X
- X/* 60 */ 0x04 | CSL, 0xB0 | CSL, 0x09 | CSH, 0x0C | CSH,
- X/* 64 */ 0x0D | CSH, 0x0A | CSH, 0xF8 | CSL, 0xF1 | CSL,
- X/* 68 */ 0x00 | CSH, 0x0B | CSH, 0xD9 | CSL, 0xBF | CSL,
- X/* 6C */ 0xDA | CSL, 0xC0 | CSL, 0xC5 | CSL, 0x7D | CSH,
- X
- X/* 70 */ 0x7C | CSH, 0x7B | CSH, 0x7A | CSH, 0x79 | CSH,
- X/* 74 */ 0xC3 | CSL, 0xB4 | CSL, 0xC1 | CSL, 0xC2 | CSL,
- X/* 78 */ 0xB3 | CSL, 0xF3 | CSL, 0xF2 | CSL, 0xE3 | CSL,
- X/* 7C */ 0x78 | CSH, 0x9C | CSL, 0x99 | CSH, 0x20 | CSL
- X};
- X
- X/*---------------------------------------------------------------------------*
- X * DEC Technical Characterset
- X *---------------------------------------------------------------------------*/
- X#define HAVECSE_TECHNICAL
- Xu_short cse_technical[CSSIZE] = {
- X/* 20 */ 0x20 | CSL, 0x65 | CSH, 0xDA | CSL, 0xC4 | CSL,
- X/* 24 */ 0xF4 | CSL, 0xF5 | CSL, 0xB3 | CSL, 0xDA | CSL,
- X/* 28 */ 0xC0 | CSL, 0xBF | CSL, 0xD9 | CSL, 0x61 | CSH,
- X/* 2C */ 0x62 | CSH, 0x63 | CSH, 0x64 | CSH, 0x5F | CSH,
- X
- X/* 30 */ 0x60 | CSH, 0x5E | CSH, 0x5D | CSH, 0x5C | CSH,
- X/* 34 */ 0x5B | CSH, 0xAA | CSL, 0xA9 | CSL, 0x3E | CSL,
- X/* 38 */ 0x9F | CSH, 0x9F | CSH, 0x9F | CSH, 0x9F | CSH,
- X/* 3C */ 0xF3 | CSL, 0x78 | CSH, 0xF2 | CSL, 0x5A | CSH,
- X
- X/* 40 */ 0x59 | CSH, 0x58 | CSH, 0xEC | CSL, 0xF6 | CSL,
- X/* 44 */ 0x57 | CSH, 0x56 | CSH, 0xE8 | CSL, 0xE2 | CSL,
- X/* 48 */ 0x77 | CSH, 0x55 | CSH, 0x54 | CSH, 0x6E | CSH,
- X/* 4C */ 0x53 | CSH, 0x52 | CSH, 0x51 | CSH, 0xF0 | CSL,
- X
- X/* 50 */ 0x50 | CSH, 0x4F | CSH, 0x9F | CSH, 0xE4 | CSL,
- X/* 54 */ 0x9F | CSH, 0x9F | CSH, 0xFB | CSL, 0xEA | CSL,
- X/* 58 */ 0x4E | CSH, 0x4D | CSH, 0x4C | CSH, 0x4B | CSH,
- X/* 5C */ 0xEF | CSL, 0x4A | CSH, 0x49 | CSH, 0x48 | CSH,
- X
- X/* 60 */ 0xAA | CSL, 0xE0 | CSL, 0xE1 | CSL, 0x47 | CSH,
- X/* 64 */ 0xEB | CSL, 0x46 | CSH, 0xED | CSL, 0x59 | CSL,
- X/* 68 */ 0x45 | CSH, 0x44 | CSH, 0xE9 | CSL, 0x9E | CSH,
- X/* 6C */ 0x43 | CSH, 0x9F | CSH, 0x76 | CSL, 0x42 | CSH,
- X
- X/* 70 */ 0xE3 | CSL, 0x41 | CSH, 0x40 | CSH, 0xE5 | CSL,
- X/* 74 */ 0xE7 | CSL, 0x9F | CSH, 0x9F | CSL, 0x66 | CSH,
- X/* 78 */ 0x68 | CSH, 0x7E | CSH, 0x9A | CSH, 0x1B | CSL,
- X/* 7C */ 0x18 | CSL, 0x1A | CSL, 0x19 | CSL, 0x20 | CSL
- X};
- X
- X/*---------------------------------------------------------------------------*
- X * ISO Latin-1 Characterset
- X *---------------------------------------------------------------------------*/
- X#define HAVECSE_ISOLATIN
- Xu_short cse_isolatin[CSSIZE] = {
- X/* 20 */ 0x20 | CSL, 0xAD | CSL, 0x9B | CSL, 0x9C | CSL,
- X/* 24 */ 0x9D | CSH, 0x9D | CSL, 0x7C | CSL, 0x15 | CSL,
- X/* 28 */ 0x77 | CSH, 0x9C | CSH, 0xA6 | CSL, 0xAE | CSL,
- X/* 2C */ 0x76 | CSH, 0x75 | CSH, 0x74 | CSH, 0x73 | CSH,
- X
- X/* 30 */ 0xF8 | CSL, 0xF1 | CSL, 0xFD | CSL, 0x9B | CSH,
- X/* 34 */ 0x72 | CSH, 0xE6 | CSL, 0x14 | CSL, 0x99 | CSH,
- X/* 38 */ 0x71 | CSH, 0x98 | CSH, 0xA7 | CSL, 0xAF | CSL,
- X/* 3C */ 0xAC | CSL, 0xAB | CSL, 0x70 | CSH, 0xA8 | CSL,
- X
- X/* 40 */ 0x97 | CSH, 0x96 | CSH, 0x95 | CSH, 0x94 | CSH,
- X/* 44 */ 0x8E | CSL, 0x8F | CSL, 0x92 | CSL, 0x80 | CSL,
- X/* 48 */ 0x93 | CSH, 0x90 | CSL, 0x92 | CSH, 0x91 | CSH,
- X/* 4C */ 0x90 | CSH, 0x8F | CSH, 0x8E | CSH, 0x8D | CSH,
- X
- X/* 50 */ 0x6F | CSH, 0xA5 | CSL, 0x8C | CSH, 0x8B | CSH,
- X/* 54 */ 0x8A | CSH, 0x89 | CSH, 0x99 | CSL, 0x6E | CSH,
- X/* 58 */ 0x87 | CSH, 0x86 | CSH, 0x85 | CSH, 0x84 | CSH,
- X/* 5C */ 0x9A | CSL, 0x6D | CSH, 0x6C | CSH, 0xE1 | CSL,
- X
- X/* 60 */ 0x85 | CSL, 0xA0 | CSL, 0x83 | CSL, 0x82 | CSH,
- X/* 64 */ 0x84 | CSL, 0x86 | CSL, 0x91 | CSL, 0x87 | CSL,
- X/* 68 */ 0x8A | CSL, 0x82 | CSL, 0x88 | CSL, 0x89 | CSL,
- X/* 6C */ 0x8D | CSL, 0xA1 | CSL, 0x8C | CSL, 0x8B | CSL,
- X
- X/* 70 */ 0x6B | CSH, 0xA4 | CSL, 0x95 | CSL, 0xA2 | CSL,
- X/* 74 */ 0x93 | CSL, 0x81 | CSH, 0x94 | CSL, 0xF6 | CSL,
- X/* 78 */ 0x7F | CSH, 0x97 | CSL, 0xA3 | CSL, 0x96 | CSL,
- X/* 7C */ 0x81 | CSL, 0x69 | CSL, 0x6A | CSH, 0x98 | CSL
- X};
- X
- X/*---------------------------------------------------------------------------*
- X * Downloadable Characterset
- X *---------------------------------------------------------------------------*/
- X#define HAVECSE_DOWNLOADABLE
- Xu_short cse_downloadable[CSSIZE] = {
- X/* 20 */ 0xA0 | CSH, 0xA1 | CSH, 0xA2 | CSH, 0xA3 | CSH,
- X/* 24 */ 0xA4 | CSH, 0xA5 | CSH, 0xA6 | CSH, 0xA7 | CSH,
- X/* 28 */ 0xA8 | CSH, 0xA9 | CSH, 0xAA | CSH, 0xAB | CSH,
- X/* 2C */ 0xAC | CSH, 0xAD | CSH, 0xAE | CSH, 0xAF | CSH,
- X
- X/* 30 */ 0xB0 | CSH, 0xB1 | CSH, 0xB2 | CSH, 0xB3 | CSH,
- X/* 34 */ 0xB4 | CSH, 0xB5 | CSH, 0xB6 | CSH, 0xB7 | CSH,
- X/* 38 */ 0xB8 | CSH, 0xB9 | CSH, 0xBA | CSH, 0xBB | CSH,
- X/* 3C */ 0xBC | CSH, 0xBD | CSH, 0xBE | CSH, 0xBF | CSH,
- X
- X/* 40 */ 0xC0 | CSH, 0xC1 | CSH, 0xC2 | CSH, 0xC3 | CSH,
- X/* 44 */ 0xC4 | CSH, 0xC5 | CSH, 0xC6 | CSH, 0xC7 | CSH,
- X/* 48 */ 0xC8 | CSH, 0xC9 | CSH, 0xCA | CSH, 0xCB | CSH,
- X/* 4C */ 0xCC | CSH, 0xCD | CSH, 0xCE | CSH, 0xCF | CSH,
- X
- X/* 50 */ 0xD0 | CSH, 0xD1 | CSH, 0xD2 | CSH, 0xD3 | CSH,
- X/* 54 */ 0xD4 | CSH, 0xD5 | CSH, 0xD6 | CSH, 0xD7 | CSH,
- X/* 58 */ 0xD8 | CSH, 0xD9 | CSH, 0xDA | CSH, 0xDB | CSH,
- X/* 5C */ 0xDC | CSH, 0xDD | CSH, 0xDE | CSH, 0xDF | CSH,
- X
- X/* 60 */ 0xE0 | CSH, 0xE1 | CSH, 0xE2 | CSH, 0xE3 | CSH,
- X/* 64 */ 0xE4 | CSH, 0xE5 | CSH, 0xE6 | CSH, 0xE7 | CSH,
- X/* 68 */ 0xE8 | CSH, 0xE9 | CSH, 0xEA | CSH, 0xEB | CSH,
- X/* 6C */ 0xEC | CSH, 0xED | CSH, 0xEE | CSH, 0xEF | CSH,
- X
- X/* 70 */ 0xF0 | CSH, 0xF1 | CSH, 0xF2 | CSH, 0xF3 | CSH,
- X/* 74 */ 0xF4 | CSH, 0xF5 | CSH, 0xF6 | CSH, 0xF7 | CSH,
- X/* 78 */ 0xF8 | CSH, 0xF9 | CSH, 0xFA | CSH, 0xFB | CSH,
- X/* 7C */ 0xFC | CSH, 0xFD | CSH, 0xFE | CSH, 0xFF | CSH,
- X};
- X
- X/* ------------------------- E O F ------------------------------------------*/
- END_OF_FILE
- if test 21126 -ne `wc -c <'pcvt/pcvt_tbl.h'`; then
- echo shar: \"'pcvt/pcvt_tbl.h'\" unpacked with wrong size!
- fi
- # end of 'pcvt/pcvt_tbl.h'
- fi
- if test -f 'pcvt/pcvt_vtf.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'pcvt/pcvt_vtf.c'\"
- else
- echo shar: Extracting \"'pcvt/pcvt_vtf.c'\" \(51018 characters\)
- sed "s/^X//" >'pcvt/pcvt_vtf.c' <<'END_OF_FILE'
- X/*
- X * Copyright (c) 1992,1993,1994 Hellmuth Michaelis, Brian Dunford-Shore
- X * and Joerg Wunsch.
- X *
- X * All rights reserved.
- X *
- X * This code is derived from software contributed to Berkeley by
- X * William Jolitz and Don Ahn.
- X *
- X * Redistribution and use in source and binary forms, with or without
- X * modification, are permitted provided that the following conditions
- X * are met:
- X * 1. Redistributions of source code must retain the above copyright
- X * notice, this list of conditions and the following disclaimer.
- X * 2. Redistributions in binary form must reproduce the above copyright
- X * notice, this list of conditions and the following disclaimer in the
- X * documentation and/or other materials provided with the distribution.
- X * 3. All advertising materials mentioning features or use of this software
- X * must display the following acknowledgement:
- X * This product includes software developed by Hellmuth Michaelis,
- X * Brian Dunford-Shore and Joerg Wunsch.
- X * 4. The name authors may not be used to endorse or promote products
- X * derived from this software without specific prior written permission.
- X *
- X * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
- X * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- X * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- X * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- X * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- X * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- X * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- X * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- X * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- X * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- X *
- X *
- X * @(#)pcvt_vtf.c, 3.00, Last Edit-Date: [Sun Feb 27 17:04:53 1994]
- X */
- X
- X/*---------------------------------------------------------------------------*
- X *
- X * pcvt_vtf.c VT220 Terminal Emulator Functions
- X * -------------------------------------------------
- X * -hm splitting off from pcvt_out.c
- X * -jw/hm all ifdef's converted to if's
- X * -hm patch from Joerg: PCVT_INHIBIT_NUMLOCK
- X * -hm ------------ Release 3.00 --------------
- X *
- X *---------------------------------------------------------------------------*/
- X
- X#include "vt.h"
- X#if NVT > 0
- X
- X#include "pcvt_hdr.h" /* global include */
- X#include "pcvt_tbl.h" /* character set conversion tables */
- X
- Xstatic void clear_dld ( struct video_state *svsp );
- Xstatic void init_dld ( struct video_state *svsp );
- Xstatic void init_udk ( struct video_state *svsp );
- Xstatic void respond ( struct video_state *svsp );
- Xstatic void roll_down ( struct video_state *svsp );
- Xstatic void roll_up ( struct video_state *svsp );
- Xstatic void selective_erase ( struct video_state *svsp, u_short *pcrtat,
- X int length );
- Xstatic void swcsp ( struct video_state *svsp, u_short *ctp );
- X
- X/*---------------------------------------------------------------------------*
- X * DECSTBM - set top and bottom margins
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_stbm(struct video_state *svsp)
- X{
- X /* both 0 => scrolling region = entire screen */
- X
- X if((svsp->parms[0] == 0) && (svsp->parms[1] == 0))
- X {
- X svsp->cur_offset = 0;
- X svsp->scrr_beg = 0;
- X svsp->scrr_len = svsp->screen_rows-1;
- X svsp->col = 0;
- X return;
- X }
- X
- X if(svsp->parms[1] <= svsp->parms[0])
- X return;
- X
- X /* range parm 1 */
- X
- X if(svsp->parms[0] < 1)
- X svsp->parms[0] = 1;
- X else if(svsp->parms[0] > svsp->screen_rows-1)
- X svsp->parms[0] = svsp->screen_rows-1;
- X
- X /* range parm 2 */
- X
- X if(svsp->parms[1] < 2)
- X svsp->parms[1] = 2;
- X else if(svsp->parms[1] > svsp->screen_rows)
- X svsp->parms[1] = svsp->screen_rows;
- X
- X svsp->scrr_beg = svsp->parms[0]-1; /* begin of scrolling region */
- X svsp->scrr_len = svsp->parms[1] - svsp->parms[0]; /* no of lines */
- X if(svsp->m_om)
- X svsp->cur_offset = svsp->scrr_beg * svsp->maxcol; /* cursor to first pos */
- X else
- X svsp->cur_offset = 0; /* cursor to first pos */
- X svsp->col = 0;
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * SGR - set graphic rendition
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_sgr(struct video_state *svsp)
- X{
- X register int i = 0;
- X u_short setcolor = 0;
- X char colortouched = 0;
- X
- X do
- X {
- X switch(svsp->parms[i++])
- X {
- X case 0: /* reset to normal attributes */
- X svsp->vtsgr = VT_NORMAL;
- X break;
- X
- X case 1: /* bold */
- X svsp->vtsgr |= VT_BOLD;
- X break;
- X
- X case 4: /* underline */
- X svsp->vtsgr |= VT_UNDER;
- X break;
- X
- X case 5: /* blinking */
- X svsp->vtsgr |= VT_BLINK;
- X break;
- X
- X case 7: /* reverse */
- X svsp->vtsgr |= VT_INVERSE;
- X break;
- X
- X case 22: /* not bold */
- X svsp->vtsgr &= ~VT_BOLD;
- X break;
- X
- X case 24: /* not underlined */
- X svsp->vtsgr &= ~VT_UNDER;
- X break;
- X
- X case 25: /* not blinking */
- X svsp->vtsgr &= ~VT_BLINK;
- X break;
- X
- X case 27: /* not reverse */
- X svsp->vtsgr &= ~VT_INVERSE;
- X break;
- X
- X case 30: /* foreground colors */
- X case 31:
- X case 32:
- X case 33:
- X case 34:
- X case 35:
- X case 36:
- X case 37:
- X if(color)
- X {
- X colortouched = 1;
- X setcolor |= ((fgansitopc[(svsp->parms[i-1]-30) & 7]) << 8);
- X }
- X break;
- X
- X case 40: /* background colors */
- X case 41:
- X case 42:
- X case 43:
- X case 44:
- X case 45:
- X case 46:
- X case 47:
- X if(color)
- X {
- X colortouched = 1;
- X setcolor |= ((bgansitopc[(svsp->parms[i-1]-40) & 7]) << 8);
- X }
- X break;
- X }
- X }
- X while(i <= svsp->parmi);
- X if(color)
- X {
- X if(colortouched)
- X svsp->c_attr = setcolor;
- X else
- X svsp->c_attr = ((sgr_tab_color[svsp->vtsgr]) << 8);
- X }
- X else
- X {
- X if(adaptor_type == MDA_ADAPTOR)
- X svsp->c_attr = ((sgr_tab_imono[svsp->vtsgr]) << 8);
- X else
- X svsp->c_attr = ((sgr_tab_mono[svsp->vtsgr]) << 8);
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * CUU - cursor up
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_cuu(struct video_state *svsp)
- X{
- X register int p = svsp->parms[0];
- X
- X if(svsp->row <= svsp->scrr_beg) /* cursor above scrolling region ? */
- X return;
- X
- X if(p <= 0) /* parameter min */
- X p = 1;
- X
- X if(p >= (svsp->row - svsp->scrr_beg)) /* parameter max */
- X p = svsp->row - svsp->scrr_beg;
- X
- X svsp->cur_offset -= (svsp->maxcol * p);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * CUD - cursor down
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_cud(struct video_state *svsp)
- X{
- X register int p = svsp->parms[0];
- X
- X if(svsp->row >= (svsp->scrr_beg + svsp->scrr_len)) /* already at end of screen */
- X return;
- X
- X if(p <= 0) /* parameter min */
- X p = 1;
- X
- X if(p >= (svsp->scrr_beg+svsp->scrr_len-svsp->row)) /* parameter max */
- X p = svsp->scrr_beg+svsp->scrr_len-svsp->row;
- X
- X svsp->cur_offset += (svsp->maxcol * p);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * CUF - cursor forward
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_cuf(struct video_state *svsp)
- X{
- X register int p = svsp->parms[0];
- X
- X if(svsp->col == ((svsp->maxcol)-1)) /* already at right margin */
- X return;
- X if(p <= 0) /* parameter min = 1 */
- X p = 1;
- X else if(p > ((svsp->maxcol)-1)) /* parameter max = 79 */
- X p = ((svsp->maxcol)-1);
- X if((svsp->col + p) > ((svsp->maxcol)-1)) /* not more than right margin */
- X p = ((svsp->maxcol)-1) - svsp->col;
- X svsp->cur_offset += p;
- X svsp->col += p;
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * CUB - cursor backward
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_cub(struct video_state *svsp)
- X{
- X register int p = svsp->parms[0];
- X
- X if(svsp->col == 0) /* already at left margin ? */
- X return;
- X if(p <= 0) /* parameter min = 1 */
- X p = 1;
- X else if(p > ((svsp->maxcol)-1)) /* parameter max = 79 */
- X p = ((svsp->maxcol)-1);
- X if((svsp->col - p) <= 0) /* not more than left margin */
- X p = svsp->col;
- X svsp->cur_offset -= p;
- X svsp->col -= p;
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * ED - erase in display
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_clreos(struct video_state *svsp)
- X{
- X switch(svsp->parms[0])
- X {
- X case 0:
- X fillw(user_attr | ' ', (svsp->Crtat + svsp->cur_offset),
- X svsp->Crtat + (svsp->maxcol * svsp->screen_rows) - (svsp->Crtat + svsp->cur_offset));
- X break;
- X case 1:
- X fillw(user_attr | ' ', svsp->Crtat, (svsp->Crtat + svsp->cur_offset) - svsp->Crtat + 1 );
- X break;
- X case 2:
- X fillw(user_attr | ' ', svsp->Crtat, svsp->maxcol * svsp->screen_rows);
- X break;
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * EL - erase in line
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_clreol(struct video_state *svsp)
- X{
- X switch(svsp->parms[0])
- X {
- X case 0:
- X fillw(user_attr | ' ', (svsp->Crtat + svsp->cur_offset), svsp->maxcol-svsp->col);
- X break;
- X case 1:
- X fillw(user_attr | ' ', (svsp->Crtat + svsp->cur_offset)-svsp->col, svsp->col + 1);
- X break;
- X case 2:
- X fillw(user_attr | ' ', (svsp->Crtat + svsp->cur_offset)-svsp->col, svsp->maxcol);
- X break;
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * CUP - cursor position / HVP - horizontal & vertical position
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_curadr(struct video_state *svsp)
- X{
- X if(svsp->m_om) /* relative to scrolling region */
- X {
- X if((svsp->parms[0] == 0) && (svsp->parms[1] == 0))
- X {
- X svsp->cur_offset = svsp->scrr_beg * svsp->maxcol;
- X svsp->col = 0;
- X return;
- X }
- X
- X if(svsp->parms[0] <= 0)
- X svsp->parms[0] = 1;
- X else if(svsp->parms[0] > (svsp->scrr_len + 1))
- X svsp->parms[0] = svsp->scrr_len + 1;
- X
- X if(svsp->parms[1] <= 0 )
- X svsp->parms[1] = 1;
- X if(svsp->parms[1] > svsp->maxcol)
- X svsp->parms[1] = svsp->maxcol;
- X
- X svsp->cur_offset = (svsp->scrr_beg * svsp->maxcol) + ((svsp->parms[0] - 1) * svsp->maxcol) + svsp->parms[1] - 1;
- X svsp->col = svsp->parms[1] - 1;
- X }
- X else /* relative to screen start */
- X {
- X if((svsp->parms[0] == 0) && (svsp->parms[1] == 0))
- X {
- X svsp->cur_offset = 0;
- X svsp->col = 0;
- X return;
- X }
- X
- X if(svsp->parms[0] <= 0)
- X svsp->parms[0] = 1;
- X else if(svsp->parms[0] > svsp->screen_rows)
- X svsp->parms[0] = svsp->screen_rows;
- X
- X if(svsp->parms[1] <= 0 )
- X svsp->parms[1] = 1;
- X if(svsp->parms[1] > svsp->maxcol) /* col */
- X svsp->parms[1] = svsp->maxcol;
- X
- X svsp->cur_offset = (((svsp->parms[0]-1)*svsp->maxcol)+(svsp->parms[1]-1));
- X svsp->col = svsp->parms[1]-1;
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * RIS - reset to initial state (hard emulator runtime reset)
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_ris(struct video_state *svsp)
- X{
- X fillw(user_attr | ' ', svsp->Crtat, svsp->maxcol * svsp->screen_rows);
- X svsp->cur_offset = 0; /* cursor upper left corner */
- X svsp->col = 0;
- X svsp->row = 0;
- X svsp->lnm = 0; /* CR only */
- X clear_dld(svsp); /* clear download charset */
- X vt_clearudk(svsp); /* clear user defined keys */
- X svsp->selchar = 0; /* selective attribute off */
- X vt_str(svsp); /* and soft terminal reset */
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * DECSTR - soft terminal reset (SOFT emulator runtime reset)
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_str(struct video_state *svsp)
- X{
- X int i;
- X
- X clr_parms(svsp); /* escape parameter init */
- X svsp->state = STATE_INIT; /* initial state */
- X
- X init_ufkl(svsp); /* init user fkey labels */
- X init_sfkl(svsp); /* init system fkey labels */
- X
- X svsp->sc_flag = 0; /* save cursor position */
- X svsp->transparent = 0; /* enable control code processing */
- X
- X for(i = 0; i < MAXTAB; i++) /* setup tabstops */
- X {
- X if(!(i % 8))
- X svsp->tab_stops[i] = 1;
- X else
- X svsp->tab_stops[i] = 0;
- X }
- X
- X svsp->irm = 0; /* replace mode */
- X svsp->m_om = 0; /* origin mode */
- X svsp->m_awm = 1; /* auto wrap mode */
- X#if PCVT_INHIBIT_NUMLOCK
- X svsp->num_lock = 0; /* keypad application mode */
- X#else
- X svsp->num_lock = 1; /* keypad numeric mode */
- X#endif
- X svsp->ckm = 1; /* cursor key mode = "normal" ... */
- X svsp->scrr_beg = 0; /* start of scrolling region */
- X svsp->scrr_len = svsp->screen_rows-1; /* no. of lines in scrolling region */
- X
- X if(adaptor_type == EGA_ADAPTOR || adaptor_type == VGA_ADAPTOR)
- X {
- X svsp->G0 = cse_ascii; /* G0 = ascii */
- X svsp->G1 = cse_ascii; /* G1 = ascii */
- X svsp->G2 = cse_supplemental; /* G2 = supplemental */
- X svsp->G3 = cse_supplemental; /* G3 = supplemental */
- X svsp->GL = svsp->G0; /* GL = G0 */
- X svsp->GR = svsp->G2; /* GR = G2 */
- X }
- X else
- X {
- X svsp->G0 = csd_ascii; /* G0 = ascii */
- X svsp->G1 = csd_ascii; /* G1 = ascii */
- X svsp->G2 = csd_supplemental; /* G2 = supplemental */
- X svsp->G3 = csd_supplemental; /* G3 = supplemental */
- X svsp->GL = svsp->G0; /* GL = G0 */
- X svsp->GR = svsp->G2; /* GR = G2 */
- X }
- X
- X svsp->vtsgr = VT_NORMAL; /* no attributes */
- X svsp->c_attr = user_attr; /* reset sgr to normal */
- X
- X svsp->selchar = 0; /* selective attribute off */
- X vt_initsel(svsp);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * RI - reverse index, move cursor up
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_ri(struct video_state *svsp)
- X{
- X if(svsp->cur_offset >= ((svsp->scrr_beg * svsp->maxcol) + svsp->maxcol))
- X svsp->cur_offset -= svsp->maxcol;
- X else
- X roll_down(svsp);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * IND - index, move cursor down
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_ind(struct video_state *svsp)
- X{
- X if(svsp->cur_offset <= ((svsp->scrr_beg + svsp->scrr_len) * svsp->maxcol))
- X svsp->cur_offset += svsp->maxcol;
- X else
- X roll_up(svsp);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * NEL - next line, first pos of next line
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_nel(struct video_state *svsp)
- X{
- X if(svsp->cur_offset <= ((svsp->scrr_beg + svsp->scrr_len) * svsp->maxcol))
- X {
- X svsp->cur_offset += (svsp->maxcol-svsp->col);
- X svsp->col = 0;
- X }
- X else
- X {
- X roll_up(svsp);
- X svsp->cur_offset -= svsp->col;
- X svsp->col = 0;
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * set dec private modes, esc [ ? x h
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_set_dec_priv_qm(struct video_state *svsp)
- X{
- X switch(svsp->parms[0])
- X {
- X case 0: /* error, ignored */
- X case 1: /* CKM - cursor key mode */
- X svsp->ckm = 1;
- X break;
- X
- X case 2: /* ANM - ansi/vt52 mode */
- X break;
- X
- X case 3: /* COLM - column mode */
- X vt_col(svsp, SCR_COL132);
- X break;
- X
- X case 4: /* SCLM - scrolling mode */
- X case 5: /* SCNM - screen mode */
- X break;
- X
- X case 6: /* OM - origin mode */
- X svsp->m_om = 1;
- X break;
- X
- X case 7: /* AWM - auto wrap mode */
- X svsp->m_awm = 1;
- X swritefkl(7,(u_char *)"AUTOWRAPENABLE *",svsp);
- X break;
- X
- X case 8: /* ARM - auto repeat mode */
- X kbrepflag = 1;
- X break;
- X
- X case 9: /* INLM - interlace mode */
- X case 10: /* EDM - edit mode */
- X case 11: /* LTM - line transmit mode */
- X case 12: /* */
- X case 13: /* SCFDM - space compression / field delimiting */
- X case 14: /* TEM - transmit execution mode */
- X case 15: /* */
- X case 16: /* EKEM - edit key execution mode */
- X break;
- X
- X case 25: /* TCEM - text cursor enable mode */
- X if(vsp == svsp)
- X sw_cursor(1); /* cursor on */
- X svsp->cursor_on = 1;
- X break;
- X
- X case 42: /* NRCM - 7bit NRC characters */
- X break;
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * reset dec private modes, esc [ ? x l
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_reset_dec_priv_qm(struct video_state *svsp)
- X{
- X switch(svsp->parms[0])
- X {
- X case 0: /* error, ignored */
- X case 1: /* CKM - cursor key mode */
- X svsp->ckm = 0;
- X break;
- X
- X case 2: /* ANM - ansi/vt52 mode */
- X break;
- X
- X case 3: /* COLM - column mode */
- X vt_col(svsp, SCR_COL80);
- X break;
- X
- X case 4: /* SCLM - scrolling mode */
- X case 5: /* SCNM - screen mode */
- X break;
- X
- X case 6: /* OM - origin mode */
- X svsp->m_om = 0;
- X break;
- X
- X case 7: /* AWM - auto wrap mode */
- X svsp->m_awm = 0;
- X swritefkl(7,(u_char *)"AUTOWRAPENABLE ",svsp);
- X break;
- X
- X case 8: /* ARM - auto repeat mode */
- X kbrepflag = 0;
- X break;
- X
- X case 9: /* INLM - interlace mode */
- X case 10: /* EDM - edit mode */
- X case 11: /* LTM - line transmit mode */
- X case 12: /* */
- X case 13: /* SCFDM - space compression / field delimiting */
- X case 14: /* TEM - transmit execution mode */
- X case 15: /* */
- X case 16: /* EKEM - edit key execution mode */
- X break;
- X
- X case 25: /* TCEM - text cursor enable mode */
- X if(vsp == svsp)
- X sw_cursor(0); /* cursor off */
- X svsp->cursor_on = 0;
- X break;
- X
- X case 42: /* NRCM - 7bit NRC characters */
- X break;
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * set ansi modes, esc [ x
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_set_ansi(struct video_state *svsp)
- X{
- X switch(svsp->parms[0])
- X {
- X case 0: /* error, ignored */
- X case 1: /* GATM - guarded area transfer mode */
- X case 2: /* KAM - keyboard action mode */
- X case 3: /* CRM - Control Representation mode */
- X break;
- X
- X case 4: /* IRM - insert replacement mode */
- X svsp->irm = 1; /* Insert mode */
- X break;
- X
- X case 5: /* SRTM - status report transfer mode */
- X case 6: /* ERM - erasue mode */
- X case 7: /* VEM - vertical editing mode */
- X case 10: /* HEM - horizontal editing mode */
- X case 11: /* PUM - position unit mode */
- X case 12: /* SRM - send-receive mode */
- X case 13: /* FEAM - format effector action mode */
- X case 14: /* FETM - format effector transfer mode */
- X case 15: /* MATM - multiple area transfer mode */
- X case 16: /* TTM - transfer termination */
- X case 17: /* SATM - selected area transfer mode */
- X case 18: /* TSM - tabulation stop mode */
- X case 19: /* EBM - editing boundary mode */
- X break;
- X
- X case 20: /* LNM - line feed / newline mode */
- X svsp->lnm = 1;
- X break;
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * reset ansi modes, esc [ x
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_reset_ansi(struct video_state *svsp)
- X{
- X switch(svsp->parms[0])
- X {
- X case 0: /* error, ignored */
- X case 1: /* GATM - guarded area transfer mode */
- X case 2: /* KAM - keyboard action mode */
- X case 3: /* CRM - Control Representation mode */
- X break;
- X
- X case 4: /* IRM - insert replacement mode */
- X svsp->irm = 0; /* Replace mode */
- X break;
- X
- X case 5: /* SRTM - status report transfer mode */
- X case 6: /* ERM - erasue mode */
- X case 7: /* VEM - vertical editing mode */
- X case 10: /* HEM - horizontal editing mode */
- X case 11: /* PUM - position unit mode */
- X case 12: /* SRM - send-receive mode */
- X case 13: /* FEAM - format effector action mode */
- X case 14: /* FETM - format effector transfer mode */
- X case 15: /* MATM - multiple area transfer mode */
- X case 16: /* TTM - transfer termination */
- X case 17: /* SATM - selected area transfer mode */
- X case 18: /* TSM - tabulation stop mode */
- X case 19: /* EBM - editing boundary mode */
- X break;
- X
- X case 20: /* LNM - line feed / newline mode */
- X svsp->lnm = 0;
- X break;
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * clear tab stop(s)
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_clrtab(struct video_state *svsp)
- X{
- X int i;
- X
- X if(svsp->parms[0] == 0)
- X svsp->tab_stops[svsp->col] = 0;
- X else if(svsp->parms[0] == 3)
- X {
- X for(i=0; i<MAXTAB; i++)
- X svsp->tab_stops[i] = 0;
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * DECSC - save cursor & attributes
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_sc(struct video_state *svsp)
- X{
- X svsp->sc_flag = 1;
- X svsp->sc_row = svsp->row;
- X svsp->sc_col = svsp->col;
- X svsp->sc_cur_offset = svsp->cur_offset;
- X svsp->sc_attr = svsp->c_attr;
- X svsp->sc_awm = svsp->m_awm;
- X svsp->sc_om = svsp->m_om;
- X svsp->sc_G0 = svsp->G0;
- X svsp->sc_G1 = svsp->G1;
- X svsp->sc_G2 = svsp->G2;
- X svsp->sc_G3 = svsp->G3;
- X svsp->sc_GL = svsp->GL;
- X svsp->sc_GR = svsp->GR;
- X svsp->sc_sel = svsp->selchar;
- X svsp->sc_vtsgr = svsp->vtsgr;
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * DECRC - restore cursor & attributes
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_rc(struct video_state *svsp)
- X{
- X if(svsp->sc_flag == 1)
- X {
- X svsp->sc_flag = 0;
- X svsp->row = svsp->sc_row;
- X svsp->col = svsp->sc_col;
- X svsp->cur_offset = svsp->sc_cur_offset;
- X svsp->c_attr = svsp->sc_attr;
- X svsp->m_awm = svsp->sc_awm;
- X svsp->m_om = svsp->sc_om;
- X svsp->G0 = svsp->sc_G0;
- X svsp->G1 = svsp->sc_G1;
- X svsp->G2 = svsp->sc_G2;
- X svsp->G3 = svsp->sc_G3;
- X svsp->GL = svsp->sc_GL;
- X svsp->GR = svsp->sc_GR;
- X svsp->selchar = svsp->sc_sel;
- X svsp->vtsgr = svsp->sc_vtsgr;
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * designate a character set as G0, G1, G2 or G3 for 94/96 char sets
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_designate(struct video_state *svsp)
- X{
- X u_short *ctp = NULL;
- X u_char ch;
- X
- X if(svsp->whichi == 1)
- X ch = svsp->which[0];
- X else
- X {
- X int i;
- X
- X if(svsp->dld_id[0] == '\0')
- X return;
- X
- X if(!(((adaptor_type == EGA_ADAPTOR) || (adaptor_type == VGA_ADAPTOR)) &&
- X (vgacs[svsp->vga_charset].secondloaded)))
- X return;
- X
- X for(i = (svsp->whichi)-1; i >= 0; i--)
- X {
- X if(svsp->which[i] != svsp->dld_id[i])
- X return;
- X }
- X#ifdef HAVECSE_DOWNLOADABLE
- X ctp = cse_downloadable;
- X swcsp(svsp, ctp);
- X#endif
- X return;
- X }
- X
- X if(((adaptor_type == EGA_ADAPTOR) || (adaptor_type == VGA_ADAPTOR)) &&
- X (vgacs[svsp->vga_charset].secondloaded))
- X {
- X if((ch == svsp->dld_id[0]) && (svsp->dld_id[1] == '\0'))
- X {
- X#ifdef HAVECSE_DOWNLOADABLE
- X ctp = cse_downloadable;
- X swcsp(svsp, ctp);
- X#endif
- X return;
- X }
- X
- X switch(ch)
- X {
- X case 'A': /* British or ISO-Latin-1 */
- X switch(svsp->state)
- X {
- X case STATE_BROPN: /* designate G0 */
- X case STATE_BRCLO: /* designate G1 */
- X case STATE_STAR: /* designate G2 */
- X case STATE_PLUS: /* designate G3 */
- X#ifdef HAVECSE_BRITISH
- X ctp = cse_british;
- X#endif
- X break;
- X
- X case STATE_MINUS: /* designate G1 (96) */
- X case STATE_DOT: /* designate G2 (96) */
- X case STATE_SLASH: /* designate G3 (96) */
- X#ifdef HAVECSE_ISOLATIN
- X ctp = cse_isolatin;
- X#endif
- X break;
- X }
- X break;
- X
- X case 'B': /* USASCII */
- X#ifdef HAVECSE_ASCII
- X ctp = cse_ascii;
- X#endif
- X break;
- X
- X case 'C': /* Finnish */
- X case '5': /* Finnish */
- X#ifdef HAVECSE_FINNISH
- X ctp = cse_finnish;
- X#endif
- X break;
- X
- X case 'E': /* Norwegian/Danish */
- X case '6': /* Norwegian/Danish */
- X#ifdef HAVECSE_NORWEGIANDANISH
- X ctp = cse_norwegiandanish;
- X#endif
- X break;
- X
- X case 'H': /* Swedish */
- X case '7': /* Swedish */
- X#ifdef HAVECSE_SWEDISH
- X ctp = cse_swedish;
- X#endif
- X break;
- X
- X case 'K': /* German */
- X#ifdef HAVECSE_GERMAN
- X ctp = cse_german;
- X#endif
- X break;
- X
- X case 'Q': /* French Canadien */
- X#ifdef HAVECSE_FRENCHCANADA
- X ctp = cse_frenchcanada;
- X#endif
- X break;
- X
- X case 'R': /* French */
- X#ifdef HAVECSE_FRENCH
- X ctp = cse_french;
- X#endif
- X break;
- X
- X case 'Y': /* Italian */
- X#ifdef HAVECSE_ITALIAN
- X ctp = cse_italian;
- X#endif
- X break;
- X
- X case 'Z': /* Spanish */
- X#ifdef HAVECSE_SPANISH
- X ctp = cse_spanish;
- X#endif
- X break;
- X
- X case '0': /* special graphics */
- X#ifdef HAVECSE_SPECIAL
- X ctp = cse_special;
- X#endif
- X break;
- X
- X case '1': /* alternate ROM */
- X#ifdef HAVECSE_ALTERNATEROM1
- X ctp = cse_alternaterom1;
- X#endif
- X break;
- X
- X case '2': /* alt ROM, spec graphics */
- X#ifdef HAVECSE_ALTERNATEROM2
- X ctp = cse_alternaterom2;
- X#endif
- X break;
- X
- X case '3': /* HP Roman 8, upper 128 chars*/
- X#ifdef HAVECSE_ROMAN8
- X ctp = cse_roman8;
- X#endif
- X break;
- X
- X case '4': /* Dutch */
- X#ifdef HAVECSE_DUTCH
- X ctp = cse_dutch;
- X#endif
- X break;
- X
- X case '<': /* DEC Supplemental */
- X#ifdef HAVECSE_SUPPLEMENTAL
- X ctp = cse_supplemental;
- X#endif
- X break;
- X
- X case '=': /* Swiss */
- X#ifdef HAVECSE_SWISS
- X ctp = cse_swiss;
- X#endif
- X break;
- X
- X case '>': /* DEC Technical */
- X#ifdef HAVECSE_TECHNICAL
- X ctp = cse_technical;
- X#endif
- X break;
- X
- X default:
- X break;
- X }
- X }
- X else
- X {
- X switch(ch)
- X {
- X case 'A': /* British or ISO-Latin-1 */
- X switch(svsp->state)
- X {
- X case STATE_BROPN: /* designate G0 */
- X case STATE_BRCLO: /* designate G1 */
- X case STATE_STAR: /* designate G2 */
- X case STATE_PLUS: /* designate G3 */
- X#ifdef HAVECSD_BRITISH
- X ctp = csd_british;
- X#endif
- X break;
- X
- X case STATE_MINUS: /* designate G1 (96) */
- X case STATE_DOT: /* designate G2 (96) */
- X case STATE_SLASH: /* designate G3 (96) */
- X#ifdef HAVECSD_ISOLATIN
- X ctp = csd_isolatin;
- X#endif
- X break;
- X }
- X break;
- X
- X case 'B': /* USASCII */
- X#ifdef HAVECSD_ASCII
- X ctp = csd_ascii;
- X#endif
- X break;
- X
- X case 'C': /* Finnish */
- X case '5': /* Finnish */
- X#ifdef HAVECSD_FINNISH
- X ctp = csd_finnish;
- X#endif
- X break;
- X
- X case 'E': /* Norwegian/Danish */
- X case '6': /* Norwegian/Danish */
- X#ifdef HAVECSD_NORWEGIANDANISH
- X ctp = csd_norwegiandanish;
- X#endif
- X break;
- X
- X case 'H': /* Swedish */
- X case '7': /* Swedish */
- X#ifdef HAVECSD_SWEDISH
- X ctp = csd_swedish;
- X#endif
- X break;
- X
- X case 'K': /* German */
- X#ifdef HAVECSD_GERMAN
- X ctp = csd_german;
- X#endif
- X break;
- X
- X case 'Q': /* French Canadien */
- X#ifdef HAVECSD_FRENCHCANADA
- X ctp = csd_frenchcanada;
- X#endif
- X break;
- X
- X case 'R': /* French */
- X#ifdef HAVECSD_FRENCH
- X ctp = csd_french;
- X#endif
- X break;
- X
- X case 'Y': /* Italian */
- X#ifdef HAVECSD_ITALIAN
- X ctp = csd_italian;
- X#endif
- X break;
- X
- X case 'Z': /* Spanish */
- X#ifdef HAVECSD_SPANISH
- X ctp = csd_spanish;
- X#endif
- X break;
- X
- X case '0': /* special graphics */
- X#ifdef HAVECSD_SPECIAL
- X ctp = csd_special;
- X#endif
- X break;
- X
- X case '1': /* alternate ROM */
- X#ifdef HAVECSD_ALTERNATEROM1
- X ctp = csd_alternaterom1;
- X#endif
- X break;
- X
- X case '2': /* alt ROM, spec graphics */
- X#ifdef HAVECSD_ALTERNATEROM2
- X ctp = csd_alternaterom2;
- X#endif
- X break;
- X
- X case '3': /* HP Roman 8, upper 128 chars*/
- X#ifdef HAVECSD_ROMAN8
- X ctp = csd_roman8;
- X#endif
- X break;
- X
- X case '4': /* Dutch */
- X#ifdef HAVECSD_DUTCH
- X ctp = csd_dutch;
- X#endif
- X break;
- X
- X case '<': /* DEC Supplemental */
- X#ifdef HAVECSD_SUPPLEMENTAL
- X ctp = csd_supplemental;
- X#endif
- X break;
- X
- X case '=': /* Swiss */
- X#ifdef HAVECSD_SWISS
- X ctp = csd_swiss;
- X#endif
- X break;
- X
- X case '>': /* DEC Technical */
- X#ifdef HAVECSD_TECHNICAL
- X ctp = csd_technical;
- X#endif
- X break;
- X
- X default:
- X break;
- X }
- X }
- X swcsp(svsp, ctp);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * device attributes
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_da(struct video_state *svsp)
- X{
- X static u_char *response = (u_char *)DA_VT220;
- X
- X svsp->report_chars = response;
- X svsp->report_count = 18;
- X respond(svsp);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * screen alignment display
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_aln(struct video_state *svsp)
- X{
- X register int i;
- X
- X svsp->cur_offset = 0;
- X svsp->col = 0;
- X
- X for(i=0; i < (svsp->screen_rows*svsp->maxcol); i++)
- X {
- X *(svsp->Crtat + svsp->cur_offset) = user_attr | 'E';
- X vt_selattr(svsp);
- X svsp->cur_offset++;
- X svsp->col++;
- X }
- X
- X svsp->cur_offset = 0; /* reset everything ! */
- X svsp->col = 0;
- X svsp->row = 0;
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * request terminal parameters
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_reqtparm(struct video_state *svsp)
- X{
- X static u_char *answr = (u_char *)"\033[3;1;1;120;120;1;0x";
- X
- X svsp->report_chars = answr;
- X svsp->report_count = 20;
- X respond(svsp);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * invoke selftest
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_tst(struct video_state *svsp)
- X{
- X clear_dld(svsp);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * device status reports
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_dsr(struct video_state *svsp)
- X{
- X static u_char *answr = (u_char *)"\033[0n";
- X static u_char *panswr = (u_char *)"\033[?13n"; /* Printer Unattached */
- X static u_char *udkanswr = (u_char *)"\033[?21n"; /* UDK Locked */
- X static u_char *langanswr = (u_char *)"\033[?27;1n"; /* North American*/
- X static u_char buffer[16];
- X int i = 0;
- X
- X switch(svsp->parms[0])
- X {
- X case 5: /* return status */
- X svsp->report_chars = answr;
- X svsp->report_count = 4;
- X respond(svsp);
- X break;
- X
- X case 6: /* return cursor position */
- X buffer[i++] = 0x1b;
- X buffer[i++] = '[';
- X if((svsp->row+1) > 10)
- X buffer[i++] = ((svsp->row+1) / 10) + '0';
- X buffer[i++] = ((svsp->row+1) % 10) + '0';
- X buffer[i++] = ';';
- X if((svsp->col+1) > 10)
- X buffer[i++] = ((svsp->col+1) / 10) + '0';
- X buffer[i++] = ((svsp->col+1) % 10) + '0';
- X buffer[i++] = 'R';
- X buffer[i++] = '\0';
- X
- X svsp->report_chars = buffer;
- X svsp->report_count = i;
- X respond(svsp);
- X break;
- X
- X case 15: /* return printer status */
- X svsp->report_chars = panswr;
- X svsp->report_count = 6;
- X respond(svsp);
- X break;
- X
- X case 25: /* return udk status */
- X svsp->report_chars = udkanswr;
- X svsp->report_count = 6;
- X respond(svsp);
- X break;
- X
- X case 26: /* return language status */
- X svsp->report_chars = langanswr;
- X svsp->report_count = 8;
- X respond(svsp);
- X break;
- X
- X default: /* nothing else valid */
- X break;
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * IL - insert line
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_il(struct video_state *svsp)
- X{
- X register int p = svsp->parms[0];
- X
- X if((svsp->row >= svsp->scrr_beg) && (svsp->row <= svsp->scrr_beg + svsp->scrr_len))
- X {
- X if(p <= 0)
- X p = 1;
- X else if(p > svsp->scrr_beg + svsp->scrr_len - svsp->row)
- X p = svsp->scrr_beg + svsp->scrr_len - svsp->row;
- X
- X svsp->cur_offset -= svsp->col;
- X svsp->col = 0;
- X while(p--)
- X {
- X ovbcopy((svsp->Crtat + svsp->cur_offset),
- X (svsp->Crtat + svsp->cur_offset) + svsp->maxcol,
- X svsp->maxcol * (svsp->scrr_beg + svsp->scrr_len - svsp->row) * CHR );
- X fillw( user_attr | ' ',
- X (svsp->Crtat + svsp->cur_offset),
- X svsp->maxcol);
- X }
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * ICH - insert character
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_ic(struct video_state *svsp)
- X{
- X register int p = svsp->parms[0];
- X
- X if(p <= 0)
- X p = 1;
- X else if(p > svsp->maxcol-svsp->col)
- X p = svsp->maxcol-svsp->col;
- X
- X while(p--)
- X {
- X ovbcopy((svsp->Crtat + svsp->cur_offset), (svsp->Crtat + svsp->cur_offset) + 1,(((svsp->maxcol)-1)-svsp->col) * CHR);
- X *(svsp->Crtat + svsp->cur_offset) = user_attr | ' ';
- X vt_selattr(svsp);
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * DL - delete line
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_dl(struct video_state *svsp)
- X{
- X register int p = svsp->parms[0];
- X
- X if((svsp->row >= svsp->scrr_beg) && (svsp->row <= svsp->scrr_beg + svsp->scrr_len))
- X {
- X if(p <= 0)
- X p = 1;
- X else if(p > svsp->scrr_beg + svsp->scrr_len - svsp->row)
- X p = svsp->scrr_beg + svsp->scrr_len - svsp->row;
- X
- X svsp->cur_offset -= svsp->col;
- X svsp->col = 0;
- X while(p--)
- X {
- X bcopyb( svsp->Crtat + svsp->cur_offset + svsp->maxcol,
- X svsp->Crtat + svsp->cur_offset,
- X svsp->maxcol * (svsp->scrr_beg + svsp->scrr_len - svsp->row) * CHR );
- X fillw( user_attr | ' ',
- X svsp->Crtat + ((svsp->scrr_beg + svsp->scrr_len) * svsp->maxcol),
- X svsp->maxcol);
- X }
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * DCH - delete character
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_dch(struct video_state *svsp)
- X{
- X register int p = svsp->parms[0];
- X
- X if(p <= 0)
- X p = 1;
- X else if(p > svsp->maxcol-svsp->col)
- X p = svsp->maxcol-svsp->col;
- X
- X while(p--)
- X {
- X bcopyb((svsp->Crtat + svsp->cur_offset)+1 , (svsp->Crtat + svsp->cur_offset),(((svsp->maxcol)-1) - svsp->col)* CHR );
- X *((svsp->Crtat + svsp->cur_offset)+((svsp->maxcol)-1)-svsp->col) = user_attr | ' ';
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * scroll up
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_su(struct video_state *svsp)
- X{
- X register int p = svsp->parms[0];
- X
- X if(p <= 0)
- X p = 1;
- X else if(p > svsp->screen_rows-1)
- X p = svsp->screen_rows-1;
- X
- X while(p--)
- X roll_up(svsp);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * scroll down
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_sd(struct video_state *svsp)
- X{
- X register int p = svsp->parms[0];
- X
- X if(p <= 0)
- X p = 1;
- X else if(p > svsp->screen_rows-1)
- X p = svsp->screen_rows-1;
- X
- X while(p--)
- X roll_down(svsp);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * ECH - erase character
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_ech(struct video_state *svsp)
- X{
- X register int p = svsp->parms[0];
- X
- X if(p <= 0)
- X p = 1;
- X else if(p > svsp->maxcol-svsp->col)
- X p = svsp->maxcol-svsp->col;
- X
- X fillw(user_attr | ' ', (svsp->Crtat + svsp->cur_offset), p);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * media copy (NO PRINTER AVAILABLE IN KERNEL ...)
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_mc(struct video_state *svsp)
- X{
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * Device Control String State Machine Entry for:
- X *
- X * DECUDK - user-defined keys and
- X * DECDLD - downloadable charset
- X *
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_dcsentry(U_char ch, struct video_state *svsp)
- X{
- X switch(svsp->dcs_state)
- X {
- X case DCS_INIT:
- X switch(ch)
- X {
- X case '0':
- X case '1':
- X case '2':
- X case '3':
- X case '4':
- X case '5':
- X case '6':
- X case '7':
- X case '8':
- X case '9': /* parameters */
- X svsp->parms[svsp->parmi] *= 10;
- X svsp->parms[svsp->parmi] += (ch -'0');
- X break;
- X
- X case ';': /* next parameter */
- X svsp->parmi =
- X (svsp->parmi+1 < MAXPARMS) ?
- X svsp->parmi+1 : svsp->parmi;
- X break;
- X
- X case '|': /* DECUDK */
- X svsp->transparent = 1;
- X init_udk(svsp);
- X svsp->dcs_state = DCS_AND_UDK;
- X break;
- X
- X case '{': /* DECDLD */
- X svsp->transparent = 1;
- X init_dld(svsp);
- X svsp->dcs_state = DCS_DLD_DSCS;
- X break;
- X
- X default: /* failsafe */
- X svsp->transparent = 0;
- X svsp->state = STATE_INIT;
- X svsp->dcs_state = DCS_INIT;
- X break;
- X }
- X break;
- X
- X case DCS_AND_UDK: /* DCS ... | */
- X switch(ch)
- X {
- X case '0':
- X case '1':
- X case '2':
- X case '3':
- X case '4':
- X case '5':
- X case '6':
- X case '7':
- X case '8':
- X case '9': /* fkey number */
- X svsp->udk_fnckey *= 10;
- X svsp->udk_fnckey += (ch -'0');
- X break;
- X
- X case '/': /* Key */
- X svsp->dcs_state = DCS_UDK_DEF;
- X break;
- X
- X case 0x1b: /* ESC */
- X svsp->dcs_state = DCS_UDK_ESC;
- X break;
- X
- X default:
- X svsp->transparent = 0;
- X svsp->state = STATE_INIT;
- X svsp->dcs_state = DCS_INIT;
- X break;
- X }
- X break;
- X
- X case DCS_UDK_DEF: /* DCS ... | fnckey / */
- X switch(ch)
- X {
- X case '0':
- X case '1':
- X case '2':
- X case '3':
- X case '4':
- X case '5':
- X case '6':
- X case '7':
- X case '8':
- X case '9':
- X if(svsp->udk_deflow) /* low nibble */
- X {
- X svsp->udk_def[svsp->udk_defi] |= (ch -'0');
- X svsp->udk_deflow = 0;
- X svsp->udk_defi = (svsp->udk_defi+1 >= MAXUDKDEF) ?
- X svsp->udk_defi : svsp->udk_defi+1;
- X }
- X else /* high nibble */
- X {
- X svsp->udk_def[svsp->udk_defi] = ((ch -'0') << 4);
- X svsp->udk_deflow = 1;
- X }
- X break;
- X
- X case 'a':
- X case 'b':
- X case 'c':
- X case 'd':
- X case 'e':
- X case 'f':
- X if(svsp->udk_deflow) /* low nibble */
- X {
- X svsp->udk_def[svsp->udk_defi] |= (ch - 'a' + 10);
- X svsp->udk_deflow = 0;
- X svsp->udk_defi = (svsp->udk_defi+1 >= MAXUDKDEF) ?
- X svsp->udk_defi : svsp->udk_defi+1;
- X }
- X else /* high nibble */
- X {
- X svsp->udk_def[svsp->udk_defi] = ((ch - 'a' + 10) << 4);
- X svsp->udk_deflow = 1;
- X }
- X break;
- X
- X
- X
- X case 'A':
- X case 'B':
- X case 'C':
- X case 'D':
- X case 'E':
- X case 'F':
- X if(svsp->udk_deflow) /* low nibble */
- X {
- X svsp->udk_def[svsp->udk_defi] |= (ch - 'A' + 10);
- X svsp->udk_deflow = 0;
- X svsp->udk_defi = (svsp->udk_defi+1 >= MAXUDKDEF) ?
- X svsp->udk_defi : svsp->udk_defi+1;
- X }
- X else /* high nibble */
- X {
- X svsp->udk_def[svsp->udk_defi] = ((ch - 'A' + 10) << 4);
- X svsp->udk_deflow = 1;
- X }
- X break;
- X
- X case ';': /* next function key */
- X vt_udk(svsp);
- X svsp->dcs_state = DCS_AND_UDK;
- X break;
- X
- X case 0x1b: /* ESC */
- X svsp->dcs_state = DCS_UDK_ESC;
- X break;
- X
- X default:
- X svsp->transparent = 0;
- X svsp->state = STATE_INIT;
- X svsp->dcs_state = DCS_INIT;
- X break;
- X }
- X break;
- X
- X case DCS_UDK_ESC: /* DCS ... | fkey/def ... ESC */
- X switch(ch)
- X {
- X case '\\': /* ST */
- X vt_udk(svsp);
- X svsp->transparent = 0;
- X svsp->state = STATE_INIT;
- X svsp->dcs_state = DCS_INIT;
- X break;
- X
- X default:
- X svsp->transparent = 0;
- X svsp->state = STATE_INIT;
- X svsp->dcs_state = DCS_INIT;
- X break;
- X }
- X break;
- X
- X
- X case DCS_DLD_DSCS: /* got DCS ... { */
- X if(ch >= ' ' && ch <= '/') /* intermediates ... */
- X {
- X svsp->dld_dscs[svsp->dld_dscsi] = ch;
- X svsp->dld_id[svsp->dld_dscsi] = ch;
- X if(svsp->dld_dscsi >= DSCS_LENGTH)
- X {
- X svsp->transparent = 0;
- X svsp->state = STATE_INIT;
- X svsp->dcs_state = DCS_INIT;
- X svsp->dld_id[0] = '\0';
- X }
- X else
- X {
- X svsp->dld_dscsi++;
- X }
- X }
- X else if(ch >= '0' && ch <= '~') /* final .... */
- X {
- X svsp->dld_dscs[svsp->dld_dscsi] = ch;
- X svsp->dld_id[svsp->dld_dscsi++] = ch;
- X svsp->dld_id[svsp->dld_dscsi] = '\0';
- X svsp->dcs_state = DCS_DLD_DEF;
- X }
- X else
- X {
- X svsp->transparent = 0;
- X svsp->state = STATE_INIT;
- X svsp->dcs_state = DCS_INIT;
- X svsp->dld_id[0] = '\0';
- X }
- X break;
- X
- X case DCS_DLD_DEF: /* DCS ... { dscs */
- X switch(ch)
- X {
- X case 0x1b: /* ESC */
- X svsp->dcs_state = DCS_DLD_ESC;
- X break;
- X
- X case '/': /* sixel upper / lower divider */
- X svsp->dld_sixel_lower = 1;
- X break;
- X
- X case ';': /* character divider */
- X vt_dld(svsp);
- X svsp->parms[1]++; /* next char */
- X break;
- X
- X default:
- X if (svsp->dld_sixel_lower)
- X {
- X if(ch >= '?' && ch <= '~')
- X svsp->sixel.lower[svsp->dld_sixelli] = ch - '?';
- X svsp->dld_sixelli =
- X (svsp->dld_sixelli+1 < MAXSIXEL) ?
- X svsp->dld_sixelli+1 : svsp->dld_sixelli;
- X }
- X else
- X {
- X if(ch >= '?' && ch <= '~')
- X svsp->sixel.upper[svsp->dld_sixelui] = ch - '?';
- X svsp->dld_sixelui =
- X (svsp->dld_sixelui+1 < MAXSIXEL) ?
- X svsp->dld_sixelui+1 : svsp->dld_sixelui;
- X }
- X break;
- X }
- X break;
- X
- X case DCS_DLD_ESC: /* DCS ... { dscs ... / ... ESC */
- X switch(ch)
- X {
- X case '\\': /* String Terminator ST */
- X vt_dld(svsp);
- X svsp->transparent = 0;
- X svsp->state = STATE_INIT;
- X svsp->dcs_state = DCS_INIT;
- X break;
- X
- X default:
- X svsp->transparent = 0;
- X svsp->state = STATE_INIT;
- X svsp->dcs_state = DCS_INIT;
- X svsp->dld_id[0] = '\0';
- X break;
- X }
- X break;
- X
- X default:
- X svsp->transparent = 0;
- X svsp->state = STATE_INIT;
- X svsp->dcs_state = DCS_INIT;
- X break;
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * User Defineable Keys
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_udk(struct video_state *svsp)
- X{
- X int key, start, max, i;
- X int usedff = 0;
- X
- X if(svsp->parms[0] != 1) /* clear all ? */
- X {
- X vt_clearudk(svsp);
- X svsp->parms[0] = 1;
- X }
- X
- X if(svsp->udk_fnckey < 17 || svsp->udk_fnckey > 34)
- X {
- X init_udk(svsp);
- X return;
- X }
- X
- X key = svsp->udk_fnckey - 17; /* index into table */
- X
- X if(svsp->ukt.length[key] == 0) /* never used ? */
- X {
- X if(svsp->udkff < MAXUDKDEF-2) /* space available ? */
- X {
- X start = svsp->udkff; /* next sequential */
- X max = MAXUDKDEF - svsp->udkff; /* space available */
- X svsp->ukt.first[key] = start; /* start entry */
- X usedff = 1; /* flag to update later */
- X }
- X else /* no space */
- X {
- X init_udk(svsp);
- X return;
- X }
- X }
- X else /* in use, redefine */
- X {
- X start = svsp->ukt.first[key]; /* start entry */
- X max = svsp->ukt.length[key]; /* space available */
- X }
- X
- X if(max < 2) /* hmmm .. */
- X {
- X init_udk(svsp);
- X return;
- X }
- X
- X max--; /* adjust for tailing '\0' */
- X
- X for(i = 0; i < max && i < svsp->udk_defi; i++)
- X svsp->udkbuf[start++] = svsp->udk_def[i];
- X
- X svsp->udkbuf[start] = '\0'; /* make it a string, see pcvt_kbd.c */
- X svsp->ukt.length[key] = i+1; /* count for tailing '\0' */
- X if(usedff)
- X svsp->udkff += (i+2); /* new start location */
- X
- X init_udk(svsp);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * clear all User Defineable Keys
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_clearudk(struct video_state *svsp)
- X{
- X register int i;
- X
- X for(i = 0; i < MAXUDKEYS; i++)
- X {
- X svsp->ukt.first[i] = 0;
- X svsp->ukt.length[i] = 0;
- X }
- X svsp->udkff = 0;
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * Down line LoaDable Fonts
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_dld(struct video_state *svsp)
- X{
- X unsigned char vgacharset;
- X unsigned char vgachar[16];
- X unsigned char vgacharb[16];
- X
- X if(vgacs[svsp->vga_charset].secondloaded)
- X vgacharset = vgacs[svsp->vga_charset].secondloaded;
- X else
- X return;
- X
- X svsp->parms[1] = (svsp->parms[1] < 1) ? 1 :
- X ((svsp->parms[1] > 0x7E) ? 0x7E : svsp->parms[1]);
- X
- X if(svsp->parms[2] != 1) /* Erase all characters ? */
- X {
- X clear_dld(svsp);
- X svsp->parms[2] = 1; /* Only erase all characters once per sequence */
- X }
- X
- X sixel_vga(&(svsp->sixel),vgachar);
- X
- X switch(vgacs[vgacharset].char_scanlines & 0x1F)
- X {
- X case 7:
- X vga10_vga8(vgachar,vgacharb);
- X break;
- X
- X case 9:
- X default:
- X vga10_vga10(vgachar,vgacharb);
- X break;
- X
- X case 13:
- X vga10_vga14(vgachar,vgacharb);
- X break;
- X
- X case 15:
- X vga10_vga16(vgachar,vgacharb);
- X break;
- X }
- X
- X loadchar(vgacharset, svsp->parms[1] + 0xA0, 16, vgacharb);
- X
- X init_dld(svsp);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * select character attributes
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_sca(struct video_state *svsp)
- X{
- X switch(svsp->parms[0])
- X {
- X case 1:
- X svsp->selchar = 1;
- X break;
- X case 0:
- X case 2:
- X default:
- X svsp->selchar = 0;
- X break;
- X }
- X}
- X
- X#define INT_BITS (sizeof(unsigned int) * 8)
- X#define INT_INDEX(n) ((n) / INT_BITS)
- X#define BIT_INDEX(n) ((n) % INT_BITS)
- X
- X/*---------------------------------------------------------------------------*
- X * initalize selective attribute bit array
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_initsel(struct video_state *svsp)
- X{
- X register int i;
- X
- X for(i = 0;i < MAXDECSCA;i++)
- X svsp->decsca[i] = 0;
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * set selective attribute if appropriate
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_selattr(struct video_state *svsp)
- X{
- X int i;
- X
- X i = (svsp->Crtat + svsp->cur_offset) - svsp->Crtat;
- X
- X if(svsp->selchar)
- X svsp->decsca[INT_INDEX(i)] |= (1 << BIT_INDEX(i));
- X else
- X svsp->decsca[INT_INDEX(i)] &= ~(1 << BIT_INDEX(i));
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * DECSEL - selective erase in line
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_sel(struct video_state *svsp)
- X{
- X switch(svsp->parms[0])
- X {
- X case 0:
- X selective_erase(svsp, (svsp->Crtat + svsp->cur_offset), svsp->maxcol-svsp->col);
- X break;
- X
- X case 1:
- X selective_erase(svsp, (svsp->Crtat + svsp->cur_offset)-svsp->col, svsp->col + 1);
- X break;
- X
- X case 2:
- X selective_erase(svsp, (svsp->Crtat + svsp->cur_offset)-svsp->col, svsp->maxcol);
- X break;
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * DECSED - selective erase in display
- X *---------------------------------------------------------------------------*/
- Xvoid
- Xvt_sed(struct video_state *svsp)
- X{
- X switch(svsp->parms[0])
- X {
- X case 0:
- X selective_erase(svsp, (svsp->Crtat + svsp->cur_offset), svsp->Crtat + (svsp->maxcol * svsp->screen_rows) - (svsp->Crtat + svsp->cur_offset));
- X break;
- X
- X case 1:
- X selective_erase(svsp, svsp->Crtat, (svsp->Crtat + svsp->cur_offset) - svsp->Crtat + 1 );
- X break;
- X
- X case 2:
- X selective_erase(svsp, svsp->Crtat, svsp->maxcol * svsp->screen_rows);
- X break;
- X }
- X}
- X
- X/* ====================== */
- X/* module local functions */
- X/* ====================== */
- X
- X/*---------------------------------------------------------------------------*
- X * scroll screen one line up
- X *---------------------------------------------------------------------------*/
- Xstatic void
- Xroll_up(struct video_state *svsp)
- X{
- X bcopyb( svsp->Crtat + (svsp->scrr_beg * svsp->maxcol) + svsp->maxcol,
- X svsp->Crtat + (svsp->scrr_beg * svsp->maxcol),
- X svsp->maxcol * svsp->scrr_len * CHR );
- X
- X fillw( user_attr | ' ',
- X svsp->Crtat + ((svsp->scrr_beg + svsp->scrr_len) * svsp->maxcol),
- X svsp->maxcol);
- X
- X/*XXX*/ if(svsp->scroll_lock && svsp->openf && curproc)
- X tsleep((caddr_t)&(svsp->scroll_lock), PUSER, "scrlck", 0);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * scroll screen one line down
- X *---------------------------------------------------------------------------*/
- Xstatic void
- Xroll_down(struct video_state *svsp)
- X{
- X ovbcopy(svsp->Crtat + (svsp->scrr_beg * svsp->maxcol),
- X svsp->Crtat + (svsp->scrr_beg * svsp->maxcol) + svsp->maxcol,
- X svsp->maxcol * svsp->scrr_len * CHR );
- X
- X fillw( user_attr | ' ',
- X svsp->Crtat + (svsp->scrr_beg * svsp->maxcol),
- X svsp->maxcol);
- X
- X/*XXX*/ if(svsp->scroll_lock && svsp->openf && curproc)
- X tsleep((caddr_t)&(svsp->scroll_lock), PUSER, "scrlck", 0);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * switch charset pointers
- X *---------------------------------------------------------------------------*/
- Xstatic void
- Xswcsp(struct video_state *svsp, u_short *ctp)
- X{
- X if(ctp == NULL)
- X return;
- X
- X switch(svsp->state)
- X {
- X case STATE_BROPN: /* designate G0 */
- X svsp->G0 = ctp;
- X break;
- X
- X case STATE_BRCLO: /* designate G1 */
- X case STATE_MINUS: /* designate G1 (96) */
- X svsp->G1 = ctp;
- X break;
- X
- X case STATE_STAR: /* designate G2 */
- X case STATE_DOT: /* designate G2 (96) */
- X svsp->G2 = ctp;
- X break;
- X
- X case STATE_PLUS: /* designate G3 */
- X case STATE_SLASH: /* designate G3 (96) */
- X svsp->G3 = ctp;
- X break;
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * process terminal responses
- X *---------------------------------------------------------------------------*/
- Xstatic void
- Xrespond(struct video_state *svsp)
- X{
- X if(!(svsp->openf)) /* are we opened ? */
- X return;
- X
- X while (*svsp->report_chars && svsp->report_count > 0)
- X {
- X (*linesw[svsp->vs_tty->t_line].l_rint)
- X (*svsp->report_chars++ & 0xff, svsp->vs_tty);
- X svsp->report_count--;
- X }
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * Initialization for User Defineable Keys
- X *---------------------------------------------------------------------------*/
- Xstatic void
- Xinit_udk(struct video_state *svsp)
- X{
- X svsp->udk_defi = 0;
- X svsp->udk_deflow = 0;
- X svsp->udk_fnckey = 0;
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * Clear loaded downloadable (DLD) character set
- X *---------------------------------------------------------------------------*/
- Xstatic void
- Xclear_dld(struct video_state *svsp)
- X{
- X register int i;
- X unsigned char vgacharset;
- X unsigned char vgachar[16];
- X
- X if(vgacs[svsp->vga_charset].secondloaded)
- X vgacharset = vgacs[svsp->vga_charset].secondloaded;
- X else
- X return;
- X
- X for(i=0;i < 16;i++) /* A zeroed character, vt220 has inverted '?' */
- X vgachar[i] = 0x00;
- X
- X for(i=1;i <= 94;i++) /* Load (erase) all characters */
- X loadchar(vgacharset, i + 0xA0, 16, vgachar);
- X}
- X
- X/*---------------------------------------------------------------------------*
- X * Initialization for Down line LoaDable Fonts
- X *---------------------------------------------------------------------------*/
- Xstatic void
- Xinit_dld(struct video_state *svsp)
- X{
- X register int i;
- X
- X svsp->dld_dscsi = 0;
- X svsp->dld_sixel_lower = 0;
- X svsp->dld_sixelli = 0;
- X svsp->dld_sixelui = 0;
- X
- X for(i = 0;i < MAXSIXEL;i++)
- X svsp->sixel.lower[i] = svsp->sixel.upper[i] = 0;
- X}
- X
- X
- X/*---------------------------------------------------------------------------*
- X * selective erase a region
- X *---------------------------------------------------------------------------*/
- Xstatic void
- Xselective_erase(struct video_state *svsp, u_short *pcrtat, int length)
- X{
- X register int i, j;
- X
- X for(j = pcrtat - svsp->Crtat, i = 0;i < length;i++,pcrtat++)
- X {
- X if(!(svsp->decsca[INT_INDEX(j+i)] & (1 << BIT_INDEX(j+i))))
- X {
- X *pcrtat &= 0xFF00; /* Keep the video character attributes */
- X *pcrtat += ' '; /* Erase the character */
- X }
- X }
- X}
- X
- X#endif /* NVT > 0 */
- X
- X/* ------------------------- E O F ------------------------------------------*/
- X
- END_OF_FILE
- if test 51018 -ne `wc -c <'pcvt/pcvt_vtf.c'`; then
- echo shar: \"'pcvt/pcvt_vtf.c'\" unpacked with wrong size!
- fi
- # end of 'pcvt/pcvt_vtf.c'
- fi
- echo shar: End of archive 6 \(of 13\).
- cp /dev/null ark6isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 13 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still must unpack the following archives:
- echo " " ${MISSING}
- fi
- exit 0
- exit 0 # Just in case...
-