follow up to:

Pre 3.0 branch cleanup casualty #4: pcvt
This commit is contained in:
Poul-Henning Kamp 1998-12-27 16:44:24 +00:00
parent 3581d64b8d
commit 1767866e4d
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=42090
109 changed files with 2 additions and 18911 deletions

View File

@ -1,4 +1,4 @@
# $Id: BSD.usr.dist,v 1.140 1998/12/16 05:47:53 peter Exp $
# $Id: BSD.usr.dist,v 1.141 1998/12/22 12:33:32 jkh Exp $
#
/set type=dir uname=root gname=wheel mode=0755
@ -643,8 +643,6 @@
misc
fonts
..
pcvtfonts
..
pkg_manage
..
..
@ -726,12 +724,6 @@
zh_CN.EUC
..
..
pcvt
Doc
..
Etc
..
..
perl
man
cat3 uname=man

View File

@ -1,589 +0,0 @@
/*
* Copyright (c) 1992, 1995 Hellmuth Michaelis and Joerg Wunsch.
*
* Copyright (c) 1992, 1993 Brian Dunford-Shore and Holger Veit.
*
* Copyright (C) 1992, 1993 Soeren Schmidt.
*
* All rights reserved.
*
* For the sake of compatibility, portions of this code regarding the
* X server interface are taken from Soeren Schmidt's syscons driver.
*
* This code is derived from software contributed to 386BSD by
* Holger Veit.
*
* This code is derived from software contributed to Berkeley by
* William Jolitz and Don Ahn.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by
* Hellmuth Michaelis, Brian Dunford-Shore, Joerg Wunsch, Holger Veit
* and Soeren Schmidt.
* 4. The name authors may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*
* @(#)ioctl_pcvt.h, 3.20, Last Edit-Date: [Fri Apr 7 10:17:13 1995]
*
*/
/*---------------------------------------------------------------------------
*
* pcvt_ioctl.h ioctl's for the VT220 video driver 'pcvt'
* ---------------------------------------------------------
* -hm ------------ Release 3.00 --------------
* -hm some new PCVT_xxx (and CONF_xxx) values
* -hm version definitions moved to begin of file
* -hm removed PCVT_FAKE_SYSCONS10
* -hm accept KERNEL or _KERNEL
* -hm changed _IOCTL_PCVT_H_ to _MACHINE_PCVT_IOCTL_H_ (bde)
*
*---------------------------------------------------------------------------*/
#ifndef _MACHINE_PCVT_IOCTL_H_
#define _MACHINE_PCVT_IOCTL_H_
/* pcvt version information for VGAPCVTID ioctl */
#define PCVTIDNAME "pcvt-b24" /* driver id - string */
#define PCVTIDMAJOR 3 /* driver id - major release */
#define PCVTIDMINOR 20 /* driver id - minor release */
#if !defined(KERNEL) && !defined(_KERNEL)
#include <sys/types.h>
#endif
#include <sys/ioccom.h>
/*---------------------------------------------------------------------------*
* IOCTLs for MF II and AT Keyboards
*---------------------------------------------------------------------------*/
#define KBDRESET _IO('K', 1) /* reset keyboard / set defaults */
#define KBDGTPMAT _IOR('K', 2, int) /* get current typematic value */
#define KBDSTPMAT _IOW('K', 3, int) /* set current typematic value */
/* Typematic Delay Values */
#define KBD_TPD250 0x00 /* 250 ms */
#define KBD_TPD500 0x20 /* 500 ms */
#define KBD_TPD750 0x40 /* 750 ms */
#define KBD_TPD1000 0x60 /* 1000 ms */
/* Typematic Repeat Rate */
#define KBD_TPM300 0x00 /* 30.0 char/second */
#define KBD_TPM267 0x01 /* 26.7 char/second */
#define KBD_TPM240 0x02 /* 24.0 char/second */
#define KBD_TPM218 0x03 /* 21.8 char/second */
#define KBD_TPM200 0x04 /* 20.0 char/second */
#define KBD_TPM185 0x05 /* 18.5 char/second */
#define KBD_TPM171 0x06 /* 17.1 char/second */
#define KBD_TPM160 0x07 /* 16.0 char/second */
#define KBD_TPM150 0x08 /* 15.0 char/second */
#define KBD_TPM133 0x09 /* 13.3 char/second */
#define KBD_TPM120 0x0A /* 12.0 char/second */
#define KBD_TPM109 0x0B /* 10.9 char/second */
#define KBD_TPM100 0x0C /* 10.0 char/second */
#define KBD_TPM92 0x0D /* 9.2 char/second */
#define KBD_TPM86 0x0E /* 8.6 char/second */
#define KBD_TPM80 0x0F /* 8.0 char/second */
#define KBD_TPM75 0x10 /* 7.5 char/second */
#define KBD_TPM67 0x11 /* 6.7 char/second */
#define KBD_TPM60 0x12 /* 6.0 char/second */
#define KBD_TPM55 0x13 /* 5.5 char/second */
#define KBD_TPM50 0x14 /* 5.0 char/second */
#define KBD_TPM46 0x15 /* 4.6 char/second */
#define KBD_TPM43 0x16 /* 4.3 char/second */
#define KBD_TPM40 0x17 /* 4.0 char/second */
#define KBD_TPM37 0x18 /* 3.7 char/second */
#define KBD_TPM33 0x19 /* 3.3 char/second */
#define KBD_TPM30 0x1A /* 3.0 char/second */
#define KBD_TPM27 0x1B /* 2.7 char/second */
#define KBD_TPM25 0x1C /* 2.5 char/second */
#define KBD_TPM23 0x1D /* 2.3 char/second */
#define KBD_TPM21 0x1E /* 2.1 char/second */
#define KBD_TPM20 0x1F /* 2.0 char/second */
#define KBDGREPSW _IOR('K', 4, int) /* get key repetition switch */
#define KBDSREPSW _IOW('K', 5, int) /* set key repetition switch */
#define KBD_REPEATOFF 0
#define KBD_REPEATON 1
#define KBDGLEDS _IOR('K', 6, int) /* get LED state */
#define KBDSLEDS _IOW('K', 7, int) /* set LED state, does not influence */
#define KBD_SCROLLLOCK 0x0001 /* the driver's idea of lock key state */
#define KBD_NUMLOCK 0x0002
#define KBD_CAPSLOCK 0x0004
#define KBDGLOCK _IOR('K', 8, int) /* gets state of SCROLL,NUM,CAPS */
#define KBDSLOCK _IOW('K', 9, int) /* sets state of SCROLL,NUM,CAPS + LEDs */
#define KBDMAXOVLKEYSIZE 15 /* + zero byte */
struct kbd_ovlkey /* complete definition of a key */
{
u_short keynum; /* the key itself */
u_short type; /* type of key, see below */
u_char subu; /* subtype, ignored on write */
char unshift[KBDMAXOVLKEYSIZE+1]; /* emitted string, unshifted */
u_char subs; /* subtype, ignored on write */
char shift[KBDMAXOVLKEYSIZE+1]; /* emitted string, shifted */
u_char subc; /* subtype, ignored on write */
char ctrl[KBDMAXOVLKEYSIZE+1]; /* emitted string, control */
u_char suba; /* subtype, ignored on write */
char altgr[KBDMAXOVLKEYSIZE+1]; /* emitted string, altgr */
};
/* Max value for keynum field */
#define KBDMAXKEYS 128 /* Max No. of Keys */
/* Values for type field */
#define KBD_NONE 0 /* no function, key is disabled */
#define KBD_SHIFT 1 /* keyboard shift */
#define KBD_META 2 /* alternate shift, sets bit8 to ASCII code */
#define KBD_NUM 3 /* numeric shift, keypad num / appl */
#define KBD_CTL 4 /* control code generation */
#define KBD_CAPS 5 /* caps shift - swaps case of letter */
#define KBD_ASCII 6 /* ascii code generating key */
#define KBD_SCROLL 7 /* stop output */
#define KBD_FUNC 8 /* function key */
#define KBD_KP 9 /* keypad keys */
#define KBD_BREAK 10 /* ignored */
#define KBD_ALTGR 11 /* AltGr Translation feature */
#define KBD_SHFTLOCK 12 /* shiftlock */
#define KBD_CURSOR 13 /* cursor keys */
#define KBD_RETURN 14 /* RETURN/ENTER keys */
/* Values for subtype field */
#define KBD_SUBT_STR 0 /* key is bound to a string */
#define KBD_SUBT_FNC 1 /* key is bound to a function */
#define KBD_OVERLOAD 0x8000 /* Key is overloaded, ignored in ioctl */
#define KBD_MASK (~KBD_OVERLOAD) /* mask for type */
#define KBDGCKEY _IOWR('K',16, struct kbd_ovlkey) /* get current key values */
#define KBDSCKEY _IOW('K',17, struct kbd_ovlkey) /* set new key assignment values*/
#define KBDGOKEY _IOWR('K',18, struct kbd_ovlkey) /* get original key assignment values*/
#define KBDRMKEY _IOW('K',19, int) /* remove a key assignment */
#define KBDDEFAULT _IO('K',20) /* remove all key assignments */
/* mouse emulator definitions */
struct mousedefs {
int leftbutton; /* (PC) scan code for "left button" key */
int middlebutton; /* (PC) scan code for "mid button" key */
int rightbutton; /* (PC) scan code for "right button" key */
int stickybuttons; /* if true, the buttons are "sticky" */
int acceltime; /* timeout in microseconds to start pointer */
/* movement acceleration */
/* defaults to: scan(F1), scan(F2), scan(F3), false, 500000 */
};
#define KBDMOUSEGET _IOR('K', 25, struct mousedefs) /* read defs */
#define KBDMOUSESET _IOW('K', 26, struct mousedefs) /* set defs */
/*---------------------------------------------------------------------------*
* IOCTLs for Video Adapter
*---------------------------------------------------------------------------*/
/* Definition of PC Video Adaptor Types */
#define UNKNOWN_ADAPTOR 0 /* Unidentified adaptor ... */
#define MDA_ADAPTOR 1 /* Monochrome Display Adaptor/Hercules Graphics Card */
#define CGA_ADAPTOR 2 /* Color Graphics Adaptor */
#define EGA_ADAPTOR 3 /* Enhanced Graphics Adaptor */
#define VGA_ADAPTOR 4 /* Video Graphics Adaptor/Array */
/* Definitions of Monitor types */
#define MONITOR_MONO 0 /* Monochrome Monitor */
#define MONITOR_COLOR 1 /* Color Monitor */
/* Types of VGA chips detectable by current driver version */
#define VGA_F_NONE 0 /* FAMILY NOT KNOWN */
#define VGA_UNKNOWN 0 /* default, no 132 columns */
#define VGA_F_TSENG 1 /* FAMILY TSENG */
#define VGA_ET4000 1 /* Tseng Labs ET4000 */
#define VGA_ET3000 2 /* Tseng Labs ET3000 */
#define VGA_F_WD 2 /* FAMILY WD */
#define VGA_PVGA 3 /* Western Digital Paradise VGA */
#define VGA_WD90C00 4 /* Western Digital WD90C00 */
#define VGA_WD90C10 5 /* Western Digital WD90C10 */
#define VGA_WD90C11 6 /* Western Digital WD90C11 */
#define VGA_F_V7 3 /* FAMILY VIDEO 7 */
#define VGA_V7VEGA 7 /* Video 7 VEGA VGA */
#define VGA_V7FWVR 8 /* Video 7 FASTWRITE/VRAM */
#define VGA_V7V5 9 /* Video 7 Version 5 */
#define VGA_V71024I 10 /* Video 7 1024i */
#define VGA_V7UNKNOWN 11 /* Video 7 unknown board .. */
#define VGA_F_TRI 4 /* FAMILY TRIDENT */
#define VGA_TR8800BR 12 /* Trident TVGA 8800BR */
#define VGA_TR8800CS 13 /* Trident TVGA 8800CS */
#define VGA_TR8900B 14 /* Trident TVGA 8900B */
#define VGA_TR8900C 15 /* Trident TVGA 8900C */
#define VGA_TR8900CL 16 /* Trident TVGA 8900CL */
#define VGA_TR9000 17 /* Trident TVGA 9000 */
#define VGA_TR9100 18 /* Trident TVGA 9100 */
#define VGA_TR9200 19 /* Trident TVGA 9200 */
#define VGA_TRUNKNOWN 20 /* Trident unknown */
#define VGA_F_S3 5 /* FAMILY S3 */
#define VGA_S3_911 21 /* S3 911 */
#define VGA_S3_924 22 /* S3 924 */
#define VGA_S3_80x 23 /* S3 801/805 */
#define VGA_S3_928 24 /* S3 928 */
#define VGA_S3_UNKNOWN 25 /* unknown S3 chipset */
#define VGA_F_CIR 6 /* FAMILY CIRRUS */
#define VGA_CL_GD5402 26 /* Cirrus CL-GD5402 */
#define VGA_CL_GD5402r1 27 /* Cirrus CL-GD5402r1 */
#define VGA_CL_GD5420 28 /* Cirrus CL-GD5420 */
#define VGA_CL_GD5420r1 29 /* Cirrus CL-GD5420r1 */
#define VGA_CL_GD5422 30 /* Cirrus CL-GD5422 */
#define VGA_CL_GD5424 31 /* Cirrus CL-GD5424 */
#define VGA_CL_GD5426 32 /* Cirrus CL-GD5426 */
#define VGA_CL_GD5428 33 /* Cirrus CL-GD5428 */
/*****************************************************************************/
/* NOTE: update the 'scon' utility when adding support for more chipsets !!! */
/*****************************************************************************/
/* Definitions of Vertical Screen Sizes for EGA/VGA Adaptors */
#define SIZ_25ROWS 0 /* VGA: 25 lines, 8x16 font */
/* EGA: 25 lines, 8x14 font */
#define SIZ_28ROWS 1 /* VGA: 28 lines, 8x14 font */
#define SIZ_35ROWS 2 /* EGA: 35 lines, 8x10 font */
#define SIZ_40ROWS 3 /* VGA: 40 lines, 8x10 font */
#define SIZ_43ROWS 4 /* EGA: 43 lines, 8x8 font */
#define SIZ_50ROWS 5 /* VGA: 50 lines, 8x8 font */
/* Definitions of Font Sizes for EGA/VGA Adaptors */
#define FNT_8x16 0 /* 8x16 Pixel Font, only VGA */
#define FNT_8x14 1 /* 8x14 Pixel Font, EGA/VGA */
#define FNT_8x10 2 /* 8x10 Pixel Font, EGA/VGA */
#define FNT_8x8 3 /* 8x8 Pixel Font, EGA/VGA */
/* Definitions of Character Set (Font) Numbers */
#define CH_SET0 0 /* Character Set (Font) 0, EGA/VGA */
#define CH_SET1 1 /* Character Set (Font) 1, EGA/VGA */
#define CH_SET2 2 /* Character Set (Font) 2, EGA/VGA */
#define CH_SET3 3 /* Character Set (Font) 3, EGA/VGA */
#define CH_SETMAX_EGA 3 /* EGA has 4 Character Sets / Fonts */
#define CH_SET4 4 /* Character Set (Font) 4, VGA */
#define CH_SET5 5 /* Character Set (Font) 5, VGA */
#define CH_SET6 6 /* Character Set (Font) 6, VGA */
#define CH_SET7 7 /* Character Set (Font) 7, VGA */
#define CH_SETMAX_VGA 7 /* VGA has 8 Character Sets / Fonts */
/* Definitions of Terminal Emulation Modes */
#define M_HPVT 0 /* VTxxx and HP Mode, Labels & Status Line on */
#define M_PUREVT 1 /* only VTxxx Sequences recognized, no Labels */
/*---*/
#define VGACURSOR _IOW('V',100, struct cursorshape) /* set cursor shape */
struct cursorshape {
int screen_no; /* screen number for which to set, */
/* or -1 to set on current active screen */
int start; /* top scanline, range 0... Character Height - 1 */
int end; /* end scanline, range 0... Character Height - 1 */
};
#define VGALOADCHAR _IOW('V',101, struct vgaloadchar) /* load vga char */
struct vgaloadchar {
int character_set; /* VGA character set to load into */
int character; /* Character to load */
int character_scanlines; /* Scanlines per character */
u_char char_table[32]; /* VGA character shape table */
};
#define VGASETFONTATTR _IOW('V',102, struct vgafontattr) /* set font attr */
#define VGAGETFONTATTR _IOWR('V',103, struct vgafontattr) /* get font attr */
struct vgafontattr {
int character_set; /* VGA character set */
int font_loaded; /* Mark font loaded or unloaded */
int screen_size; /* Character rows per screen */
int character_scanlines; /* Scanlines per character - 1 */
int screen_scanlines; /* Scanlines per screen - 1 byte */
};
#define VGASETSCREEN _IOW('V',104, struct screeninfo) /* set screen info */
#define VGAGETSCREEN _IOWR('V',105, struct screeninfo) /* get screen info */
struct screeninfo {
int adaptor_type; /* type of video adaptor installed */
/* read only, ignored on write */
int monitor_type; /* type of monitor (mono/color)installed*/
/* read only, ignored on write */
int totalfonts; /* no of downloadable fonts */
/* read only, ignored on write */
int totalscreens; /* no of virtual screens */
/* read only, ignored on write */
int screen_no; /* screen number, this was got from */
/* on write, if -1, apply pure_vt_mode */
/* and/or screen_size to current screen */
/* else to screen_no supplied */
int current_screen; /* screen number, which is displayed. */
/* on write, if -1, make this screen */
/* the current screen, else set current */
/* displayed screen to parameter */
int pure_vt_mode; /* flag, pure VT mode or HP/VT mode */
/* on write, if -1, no change */
int screen_size; /* screen size */
/* on write, if -1, no change */
int force_24lines; /* force 24 lines if 25 lines VT mode */
/* or 28 lines HP mode to get pure */
/* VT220 screen size */
/* on write, if -1, no change */
int vga_family; /* if adaptor_type = VGA, this reflects */
/* the chipset family after a read */
/* nothing happens on write ... */
int vga_type; /* if adaptor_type = VGA, this reflects */
/* the chipset after a read */
/* nothing happens on write ... */
int vga_132; /* set to 1 if driver has support for */
/* 132 column operation for chipset */
/* currently ignored on write */
};
#define VGAREADPEL _IOWR('V', 110, struct vgapel) /*r VGA palette entry */
#define VGAWRITEPEL _IOW('V', 111, struct vgapel) /*w VGA palette entry */
struct vgapel {
unsigned idx; /* index into palette, 0 .. 255 valid */
unsigned r, g, b; /* RGB values, masked by VGA_PMASK (63) */
};
/* NOTE: The next ioctl is only valid if option PCVT_SCREENSAVER is configured*/
/* this is *not* restricted to VGA's, but won't introduce new garbage... */
#define VGASCREENSAVER _IOW('V', 112, int) /* set timeout for screen */
/* saver in seconds; 0 turns */
/* it off */
#define VGAPCVTID _IOWR('V',113, struct pcvtid) /* get driver id */
struct pcvtid { /* THIS STRUCTURE IS NOW FROZEN !!! */
#define PCVTIDNAMELN 16 /* driver id - string length */
char name[PCVTIDNAMELN]; /* driver name, == PCVTIDSTR */
int rmajor; /* revision number, major */
int rminor; /* revision number, minor */
}; /* END OF COLD PART ... */
#define VGAPCVTINFO _IOWR('V',114, struct pcvtinfo) /* get driver info */
struct pcvtinfo { /* compile time option values */
u_int opsys; /* PCVT_xxx(x)BSD */
#define CONF_UNKNOWNOPSYS 0
#define CONF_386BSD 1 /* unsupported */
#define CONF_NETBSD 2
#define CONF_FREEBSD 3
u_int opsysrel; /* Release */
u_int nscreens; /* PCVT_NSCREENS */
u_int scanset; /* PCVT_SCANSET */
u_int updatefast; /* PCVT_UPDATEFAST */
u_int updateslow; /* PCVT_UPDATESLOW */
u_int sysbeepf; /* PCVT_SYSBEEPF */
u_int pcburst; /* PCVT_PCBURST */
u_int kbd_fifo_sz; /* PCVT_KBD_FIFO_SZ */
/* config booleans */
u_long compile_opts; /* PCVT_xxxxxxxxxxxxxxx */
#define CONF_VT220KEYB 0x00000001
#define CONF_SCREENSAVER 0x00000002
#define CONF_PRETTYSCRNS 0x00000004
#define CONF_CTRL_ALT_DEL 0x00000008
#define CONF_USEKBDSEC 0x00000010
#define CONF_24LINESDEF 0x00000020
#define CONF_EMU_MOUSE 0x00000040
#define CONF_SHOWKEYS 0x00000080
#define CONF_KEYBDID 0x00000100
#define CONF_SIGWINCH 0x00000200
#define CONF_NULLCHARS 0x00000400
#define CONF_BACKUP_FONTS 0x00000800
#define CONF_SW0CNOUTP 0x00001000 /* was FORCE8BIT */
/* 0x00002000 was NEEDPG */
#define CONF_SETCOLOR 0x00004000
#define CONF_132GENERIC 0x00008000
#define CONF_PALFLICKER 0x00010000
#define CONF_WAITRETRACE 0x00020000
#define CONF_XSERVER 0x00040000
#define CONF_USL_VT_COMPAT 0x00080000
#define CONF_PORTIO_DELAY 0x00100000 /* was FAKE_SYSCONS10 */
#define CONF_INHIBIT_NUMLOCK 0x00200000
#define CONF_META_ESC 0x00400000
#define CONF_NOFASTSCROLL 0x00800000
#define CONF_SLOW_INTERRUPT 0x01000000
#define CONF_KBD_FIFO 0x02000000
#define CONF_NO_LED_UPDATE 0x04000000
};
#define VGASETCOLMS _IOW('V', 115, int) /* set number of columns (80/132)*/
/*
* only useful if compiled with ``XSERVER'' defined, but always here:
* WARNING: DO NOT CHANGE THESE DEFINITIONS, the X server relies on
* it since it's defining its own values and doesn't know nothing about
* this header file.
*/
#define CONSOLE_X_MODE_ON _IO('t', 121) /* turn off pcvt, grant IOPL for X */
#define CONSOLE_X_MODE_OFF _IO('t', 122) /* back to pcvt */
#define CONSOLE_X_BELL _IOW('t', 123, int[2]) /* set bell behaviour */
/*
* start of USL VT compatibility stuff
* these definitions must match those ones used by syscons
*
* Note that some of the ioctl command definitions below break the Berkeley
* style. They accept a parameter of type "int" (instead of Berkeley style
* "int *") in order to pass a single integer to the ioctl. These macros
* below are marked with a dummy "int" comment. Dont blame anyone else
* than USL for that braindeadness. It is done here to be a bit source-
* level compatible to SysV. (N.B., within the ioctl, the argument is
* dereferenced by "int *" anyway. The translation is done by the upper-
* level ioctl stuff.)
*/
/*
* NB: Some of the definitions below apparently override the definitions
* in the KBD section above. But, due to BSDs encoding of the IO direction
* and transfer size, the resulting ioctl cmds differ, so we can take them
* here. The only real conflict would appear if we implemented KDGKBMODE,
* which would be identical to KBDGLEDS above. Since this command is not
* necessary for XFree86 2.0, we omit it.
*/
/* #define KDGKBMODE _IOR('K', 6, int) */ /* not yet implemented */
#define KDSKBMODE _IO('K', 7 /*, int */)
#define K_RAW 0 /* keyboard returns scancodes */
#define K_XLATE 1 /* keyboard returns ascii */
#define KDMKTONE _IO('K', 8 /*, int */)
/* #define KDGETMODE _IOR('K', 9, int) */ /* not yet implemented */
#define KDSETMODE _IO('K', 10 /*, int */)
#define KD_TEXT 0 /* set text mode restore fonts */
#define KD_GRAPHICS 1 /* set graphics mode */
/* we cannot see any sense to support KD_TEXT0 or KD_TEXT1 */
#define KDENABIO _IO('K', 60) /* only allowed if euid == 0 */
#define KDDISABIO _IO('K', 61)
#define KDGETLED _IOR('K', 65, int)
#define KDSETLED _IO('K', 66 /*, int */)
#define LED_CAP 1
#define LED_NUM 2
#define LED_SCR 4
#define KDSETRAD _IO('K', 67 /*, int */)
/*
* Note that since our idea of key mapping is much different from the
* SysV style, we _only_ support mapping layers base (0), shifted (1),
* alt (4), and alt-shift (5), and only for the basic keys (without
* any function keys). This is what XFree86 2.0+ needs to establish
* the default X keysym mapping.
*/
#define GIO_KEYMAP _IOR('k', 6, keymap_t)
#define VT_OPENQRY _IOR('v', 1, int)
#define VT_SETMODE _IOW('v', 2, vtmode_t)
#define VT_GETMODE _IOR('v', 3, vtmode_t)
#define VT_RELDISP _IO('v', 4 /*, int */)
/* acceptable values for the VT_RELDISP command */
#define VT_FALSE 0 /* release of VT refused */
#define VT_TRUE 1 /* VT released */
#define VT_ACKACQ 2 /* acknowledging VT acquisition */
#define VT_ACTIVATE _IO('v', 5 /*, int */)
#define VT_WAITACTIVE _IO('v', 6 /*, int */)
#define VT_GETACTIVE _IOR('v', 7, int)
#ifndef _VT_MODE_DECLARED
#define _VT_MODE_DECLARED
struct vt_mode {
char mode;
#define VT_AUTO 0 /* switching controlled by drvr */
#define VT_PROCESS 1 /* switching controlled by prog */
char waitv; /* not implemented yet SOS */
short relsig;
short acqsig;
short frsig; /* not implemented yet SOS */
};
typedef struct vt_mode vtmode_t;
#endif /* !_VT_MODE_DECLARED */
#define NUM_KEYS 256
#define NUM_STATES 8
#ifndef _KEYMAP_DECLARED
#define _KEYMAP_DECLARED
struct key_t {
u_char map[NUM_STATES];
u_char spcl;
u_char flgs;
};
struct keymap {
u_short n_keys;
struct key_t key[NUM_KEYS];
};
typedef struct keymap keymap_t;
#endif /* !_KEYMAP_DECLARED */
/* end of USL VT compatibility stuff */
#endif /* !_MACHINE_PCVT_IOCTL_H_ */

View File

@ -1,5 +1,5 @@
# From: @(#)Makefile 5.20 (Berkeley) 6/12/93
# $Id: Makefile,v 1.137 1998/12/12 11:47:31 n_hibma Exp $
# $Id: Makefile,v 1.138 1998/12/13 14:56:19 n_hibma Exp $
# XXX MISSING: mkproto
SUBDIR= IPXrouted \
@ -121,7 +121,6 @@ SUBDIR+=apm \
lptcontrol \
mixer \
mptable \
pcvt \
pnpinfo \
rndcontrol \
sgsc \

View File

@ -1,7 +0,0 @@
SUBDIR= keycap cursor fontedit fonts kcon loadfont scon \
userkeys vttest ispcvt mcon
SUBDIR+= vgaio kbdio set2061
SUBDIR+= demo
SUBDIR+= Misc
.include <bsd.subdir.mk>

View File

@ -1,9 +0,0 @@
# $Id$
FONTDIR = /usr/share/misc/pcvtfonts
MAN3EXT= 3
MAN5EXT= 5
MAN8EXT= 8
.include "../Makefile.inc"

View File

@ -1,111 +0,0 @@
Thank You, (in the order of appearance)
Lynne and Bill Jolitz
for your work on 386BSD and making all this possible !
Holger Veit (veit@du9ds3.uni-duisburg.de)
for the permission to use a modified version of his keyboard
driver and utilities for keyboard remapping / multinational
keyboard support.
Per Lindberg
for the extremely helpful vt100 terminal testprogram found
in the directory vttest.
John Birchfield
for the ncsa telnet package, which contains a vt100 emulation
and which was very helpful in studying some concepts.
Ralf Friedl (friedl@informatik.uni-kl.de)
for making his implementation of multi-sceens for the net-2
distribution available. i looked at this and took some ideas
and lines from his code.
Bruce Evans (bde@runx.oz.au)
for contributing some bugfixes and a complete termcap entry
Brian H. Dunford-Shore (brian@morpheus.wustl.edu)
for contributing most of the EGA/VGA screen switching code
and being a fast, reliable and responsive co-author. This
driver would not be what it is without Brian, Thank You !
Frank da Cruz (fdc@columbia.edu)
for my famous datacomm program and for giving the permission
to redistribute files from the msdos kermit distribution
located in the directory support/demo.
Joerg Wunsch (joerg_wunsch@uriah.sax.de)
for contributing precise bugreports and -fixes, the 8x10
EGA/VGA fonts and the color palette ioctls and for being
a very responsive contributor of various ideas.
Joerg wrote pcvt's interface to XFree86 1.2 and 1.3 and
the SYSV/syscons - like interface to XFree86 2.0.
There would be no support for X without Joerg's work!
Thank you very much Joerg, i enjoy it !!! :-)
Scott Turner (scotty@gagetalker.com)
for contributing code to change the winsize structure, many
discussions on the keyboard code and fine-tuning the driver
Gordon L. Burditt (gordon@sneaky.lonestar.org)
for the nicest and most complete bugreports i ever got
Theo Deraadt (deraadt@fsa.ca)
for pushing me forward. There would be no 3.00 release
if Theo didn't asked for features ... ;-)
Onno van der Linden (c/o frank@fwi.uva.nl)
for writing the 132 column support for the Cirrus
chipsets although he had no time to do it ... :-)
Wolfram Solfrank, Ingo Koenig
for putting some data onto tape (and handling and shipping
in the case of Wolfgang) to provide me with some latest
sources because i still have no ip-connectivity ....
Michael Havemester (tik@abqhh.hanse.de)
for giving me a chance to stay up to date with NetBSD-
current, for programming the initial version of the fast
scrolling code and for the keyboard fifo code!
Charles Hannum (mycroft@gnu.ai.mit.edu)
for getting bored by a slow-scrolling video driver and
for leaving me some bugs to fix ;-)
The NetBSD and FreeBSD teams
for giving me something to play, work and learn with !
There would be nothing to write a driver for without you !!!

View File

@ -1,189 +0,0 @@
VGA BOOKS
---------
Richard Wilton, "Programmers Guide to PC & PS/2 Video Systems",
Microsoft Press 1987
Richard F. Ferraro, "Programmers Guide to the EGA and VGA Cards",
Second Edition, Addison-Wesley 1990
Richard F. Ferraro, "Programmers Guide to the EGA and VGA Cards",
Third Edition, Addison-Wesley 1994
Matthias Uphoff, "Die Programmierung der EGA/VGA Grafikkarte",
Addison Wesley 1992
Bradley Dyck Kliewer, "EGA/VGA A Programmers Reference Guide",
McGraw Hill, 2nd Edition 1990
UNIX AND UNIX DEVICE DRIVERS
----------------------------
Bell Telephone Laboratories, Inc. "UNIX Programmer's Manual, Seventh
Edition, Volume 2". Revised and Expanded Version.
Holt, Rinehart and Winston 1983
George Pajari, "Writing Unix Device Drivers"
Addison Wesley 1992
Janet I. Egan and Thomas J. Teixeira, "Writing a UNIX Device Driver"
John Wiley & Sons 1988
Janet I. Egan and Thomas J. Teixeira, "Writing a UNIX Device Driver"
Second Edition. John Wiley & Sons 1992
Leffler, McKusick, Karels, Quarterman, "The Design and Implementation
of the 4.3BSD UNIX Operating System"
Addison Wesley 1988, corrected Reprint 1989
Leffler, McKusick, "The Design and Implementation of the 4.3BSD UNIX
Operating System, Answer Book"
Addison Wesley 1991
Maurice J. Bach, "The Design of the UNIX Operating System"
Prentice-Hall 1986
Sun Microsystems Inc., "Writing Device Drivers"
Part No. 800-3851-10, Revision A of 27 March 1990
Hewlett-Packard Company, "HP-UX Driver Development Guide",
Part No. 98577-90013, First Edition 07/91
W. Richard Stevens, "Advanced Programming in the UNIX Environment",
Addison Wesley 1992
Phillip M. Adams, Clovis L. Tondo, "Writing Unix Device Drivers in C",
Prentice Hall 1993
Berny Goodheart, James Cox, "The Magic Garden Explained",
Prentice Hall 1994
Peter Kettle, Steve Statler, "Writing Device Drivers for SCO Unix"
Addison Wesley 1993
TERMINAL MANUALS
----------------
Digital Equipment, VT100 Users Manual, 2nd ed. 1979
Digital Equipment, VT132 Users Manual
Digital Equipment, VT220 Programmers Reference Manual, 2nd ed. 1984
Digital Equipment Corporation
Hewlett Packard, 700/92 Technical Reference Manual (ANSI Operation)
Hewlett Packard, 2392a Users Manual (ANSI Operation)
Hewlett-Packard Company
Walker Richer & Quinn, Inc., "Reflection 2 and Reflection 4 Technical
Reference Manual", Version 4.2
Walker, Richer & Quinn, Seattle, August 1992
IBM PC HARDWARE/FIRMWARE
------------------------
Frank van Gilluwe, "The Undocumented PC",
Addison Wesley, First Edition May 1994
IBM Corporation, "Technical Reference Personal Computer AT",
Part No. 6280070, Form No. S229-9611-00, First Edition 1985
Phoenix Technologies Ltd., "System BIOS for IBM PC/XT/AT Computers
and Compatibles", Addison Wesley, Fourth Printing June 1990
Phoenix Technologies Ltd., "System BIOS for IBM PCs, Compatibles,
and EISA Computers", Second Edition
Addison Wesley, First Printing May 1991
American Megatrends, Inc., "Hi-Flex ISA and EISA AMIBIOS Technical
Reference", American Megatrends, Inc. 1992 (9/25/92)
Thom Hogan, "The Programmers PC Sourcebook", 2nd Edition
Microsoft Press, 1991
TERMCAP/TERMINFO
----------------
John Strang, Linda Mui and Tim O'Reilly, "Termcap and Terminfo",
O'Reilly & Associates, Inc. , April 1991
Richard M. Stallman, "Termcap - The Termcap Library and Data Base",
Free Software Foundation, Second Edition November 1988
DATABOOKS/DATASHEETS
--------------------
Intel Corporation, "Microsystem Components Handbook Volume II",
Intel Corporation, 1984
Intel Corporation, "Peripheral Design Handbook",
Intel Corporation, 1980
Tseng Labs, Inc. "ET4000 Graphics Controller Data Book", 1990
Western Digital Corporation, "WD90C11, WD90C11A (PVGA1C) Enhanced
VGA Controller", Western Digital 9/18/91
Western Digital Corporation, "WD90C00 Enhanced VGA Controller",
Western Digital 1/14/91
Western Digital Corporation, "WD90C00 Interface Guide",
Western Digital 1/10/91
Western Digital Corporation, "VGA Register Based Programmers Manual",
Western Digital 1/30/91
Western Digital Corporation, "VGA BIOS Programmers Manual",
Western Digital 1/10/91
Cirrus Logic, "True Color VGA Family - CL-GD542X", Technical Ref.
Manual, Cirrus Logic, Inc. April 1993
S3 Inc, "86C801/86C805 GUI Accelerators"
S3 Incorporated, September 1992
S3 Inc, "86C928 GUI Accelerator"
S3 Incorporated, July 1993
Trident Microsystems Inc., "TVGA9000i Technical Reference Manual",
Trident Microsystems, Inc. (c) 1992, March 1993, Rev 1

View File

@ -1,62 +0,0 @@
List of known Bugs Last Edit-Date: [Sun Mar 5 13:03:51 1995]
================================================================================
Description: Fixed/done by/date
------------------------------------------- --------------------------------
Util/keycap/man5/keycap.5 does STILL not
build correctly when doing a make obj.
Will there ever be a solution ... :-)
------------------------------------------- --------------------------------
NetBSD PR #404: Meta-Control-Space broken
with PCVT_META_ESC and PCVT_NULLCHARS set
Meta-Control-Space should (theoretically)
send ESC NUL if PCVT_NULLCHARS and
PCVT_META_ESC are defined; in reality, it
just sends ESC. Because of the grody
encoding hack used by sgets() to implement
PCVT_NULLCHARS (if the first character is
a null, send it), there isn't a trivial
one-line fix.
How-To-Repeat: in a kernel with
PCVT_NULLCHARS and PCVT_META_ESC, type a
M-C-SPC to emacs.
------------------------------------------- --------------------------------
when auto switching to vt0 is enabled by
PCVT_SW0CNOUTP and the screen is switched
from an X-vt to screen 0, the video mem
is irrecoverably destroyed - no data loss
------------------------------------------- --------------------------------
Altgr+Shift+key is not separately They way the keyboard mapping
mappable. is done is subject to a sub-
stantial rewrite in a future
release
------------------------------------------- --------------------------------
132 column mode not working with #9 GXE
(S3-based) (sorry, i don't have one -hm)
(see discussion of 132 column mode in the
NotesAndHints file!)
------------------------------------------- --------------------------------
WD90Cxx chip detection fails to detect
chips other than C00,C10 and C11. C30
chips are detected as C11s ....
------------------------------------------- --------------------------------
Xfree86 2.0 locks the console when started
under NetBSD 0.9. SuperProbe and X both
show process status "DE+" in ps. Work-
around is to disable PCVT_USL_VT_COMPAT.
------------------------------------------- --------------------------------
On one keyboard, if a "Lock" key is pressed
the leds do not get updated and the key-
board hangs.
------------------------------------------- --------------------------------
HP function key labels code needs to set
the user defined fkey string somehow!
------------------------------------------- --------------------------------
Video 7 1024i not fully supported yet, has
sometimes problems with some chars to displ
------------------------------------------- --------------------------------
The HP-Escape sequences need to be FULLY 28.12.93, -hm did a bit to supp-
implemented port elm. Needs MORE work !
------------------------------------------- --------------------------------

View File

@ -1,899 +0,0 @@
ChangeLog last edit-date: [Thu Apr 6 10:52:50 1995]
================================================================================
Changes 3.10 -> 3.20 April 1995
--------------------------------------------------------------------------------
- bugfix from Thomas Eberhardt: the force 24 lines enable function key
label was not updated when changing force 24 lines mode with
'scon -f on|off', this is now fixed.
- bugfix from John Kohl fixing divide by zero problem in pcvt_ext.c when
ringing the bell and pitch is 0: this avoids an integer divide
trap in supervisor mode.
- changed the default behaviour of keyboard controller delay from using
delay()/DELAY() to using dummy reads to port 0x84 because i got
keyboard hangs in X.
- bugfix: in pcvt_ext.c, MDA state restore when leaving X was lost, should
function now again.
- renamed PCVT_XSERVER to XSERVER in ispcvt.c
- bugfix in pcvt_vtf.c: renamed PCVT_USL_COMPAT to PCVT_USL_VT_COMPAT
- added '-d <device>' option to ispcvt and loadfont
- removed PCVT_NEEDPG
- almost completely removed support for 386BSD 0.1 with patchkit 0.2.4
- applied a patch from Joerg providing missing FreeBSD 2.1 functionality and
a some minor bugfixes and checks.
- provide a single place PCVT_KBD_DELAY in pcvt_hdr.h. made it configurable
via PCVT_PORTIO_DELAY to use either 6 dummy reads from port 0x84
or the delay/DELAY function of the operating system. Changed ispcvt
to report status of compile time switch.
- release beta 23 --------------------------------------------------------------
- removed some files for 386BSD as there is virtually noone outside
using it anymore
- make pcvt_ioctl.h accept "KERNEL" or "_KERNEL" for NetBSD-current
- configuration fix: patch from Rafal Boni for pcvt_vtf.c, he writes:
This patch lets one compile pcvt on a system that is lacking XSERVER
and UCONSOLE [or either?] in the config file. I found this while
trying to build a minimal floppy-based test kernel. The problem is
that roll_up and roll_down assume that PCVT_USL_COMPAT is
unconditionally set, and hence muck with parts of the video structure
that are only there if PCVT_USL_COMPAT is set.
(generalized the patch a bit so that fastscroll functionality is
not lost in case of PCVT_USL_COMPAT not being defined. -hm)
- bugfix: pcvt_ext.c switch_screen() - when switching to a 25 line charset
pure VT emulation screen which has force 24 lines set, then we have
to clear the last line on screen (bugreport from Joerg).
- added define PCVT_NONRESP_KEYB_TRY for how many times to try to detect
a non-connected keyboard. This was previously set to 100 and
Joerg reports a 5+ minutes delay for a 386 booting without keyboard.
Set to 25 now in the definition. Also made shure the messages in
the corresponding loop display only once. [doreset() in pcvt_kbd.c]
- updated kbdio utility to include the 7 us delay and added a 'what' command
detect type of MCA motherboard keyboard controller according to
Frank van Gilluwe, "The Undocumented PC", Addison Wesley, pp 273
- "Gateway 2000" problem: after some discussion on the NetBSD port-i386
mailing list about hanging keyboards, Martin Husemann sent in a
patch where each inb(CONTROLLER_DATA) is now preceeded by a
delay(6). This fixed his keyboard problem, the same was reported
from Roland McGrath for his Gateway 2000 keyboard/machine.
- patch from John Kohl for usl_vt_ioctl() in file pcvt_ext.c, he writes:
This is probably a long standing bug. tsleep() returns ERESTART
if it's interrupted. ERESTART is -1, which means that the
VT_WAITACTIVE call returns from usl_vt_ioctl() with -1,
meaning "not one of my ioctl's".
- patch from Matthieu Herrb for NetBSD-current (post 1.0) support
- patch from Joerg for FreeBSD pre-2.1 support
- added file ToDo in directory Doc
- fix for Util/Makefile.inc.NetBSD-c from Onno
- removing unnecessary Trident support code from pcvt_out.c
- fix from Onno for IST_EDGE in NetBSD-current
- patch from Thomas Eberhardt to fix the bell frequency and duration setting
for NetBSD
- some fixes from Onno van der Linden for NetBSD
- added patch for NetBSD-current from Rafal Boni and Lon Willett
- added another mega patch from Lon Willett fixing several bugs:
1 -- Misc porting changes to deal with NetBSD-current, including
a new Util/Makefile.inc.NetBSD-current.
2 -- The Control_R scancodes were being mapped to the Control_L
pcvt keynum.
3 -- FASTSCROLL/graphics-mode problem: there was a problem where
switching from a graphics screen to a text screen would corrupt
the text screen's content if it had been scrolling using the
FASTSCROLL code. (The problem is the bcopy() from kernel to
video memory was using the vs[i].Memory pointer as the source,
instead of the vs[i].Crtat pointer). This is fixed in the beta
21 release by just disabling the fast scroll code for screens
which aren't active.
The patch I'm sending you re-enables the fast scroll code on
inactive (i.e. in kernel memory) screens, saving a few cpu
cycles.
4 -- This is a big one: running multiple X servers was not
really working. The USL handshaking code was a mess (not very
well designed to begin with, but there's not much that can be
done about that). I did manage to get it fairly functional, but
there's a lot of changes.
- changing example rc.local to take care of good old EGA's
- fixing support for EGA boards in vt_coldinit()
- removing vt100 font files from Util/fonts, updated Manifest
- fixing an obviously longstanding bug in roll_up() / roll_down() which was
triggered by Joergs "Crtat" cleanup mega patch.
- removing PCVT_FAKE_SYSCONS10
- removing duplicate names in termcap entries
- fixing vt_coldinit: setting variable "color" for mda/hercules and cga
initializing cursor position
- fixing roll_up() and roll_down() for mda/hercules: mda's have ALWAYS
just one page of memory, original hercules boards too so they
can NEVER use the fastscroll option. SOME hercules are somehow
enhanced in that they support 2 pages. pcvt now just supports
one page hercules/mda!
- made cleanups to 8x14 high and 8x8 high fonts: adjust the 5 scanline
characters to adjust with the corner characters from the low fonts
- applying patch from Joerg which fixes some bugs:
writing to a tty containing an X server resulted in some stange
behaviour depending on the opsys and opsys version used
the init code preserving the screen contents and cursor shape
can only be done on boards allowing the reading of
several crtc registers
- removed bcopyb declaration from pcvt_hdr.h for FreeBSD 2.1
- another patch from Lon Willett (willett@math.utah.edu), he writes:
1 -- Very minor: One of my previous changes didn't get merged
into "pcvt_out.c"; the caclulation of ws_row doesn't account for
"force24" at one spot. It's easier to just set it from
screen_rows anyway, unless there's something that I didn't
understand happening here.
2 -- Debugging stuff: I don't know if you care to add it, but I
found it useful, so I left it in. I rearranged the
PCVT_SHOWKEYS code a little, and added a few lines to show
keyboard commands and responses, with special delimiters.
[file: pcvt_kbd.c]
3 -- "kcon" utility enhancement: I added a "-R" switch to kcon
to do a KBDRESET ioctl. [file: Util/kcon/kcon.c]
4 -- KBDRESET-ioctl bug: the code was trying to read kbd
responses without an spltty(), so naturally it would fail, since
pcrint() was grabbing the ACKs. [file: pcvt_kbd.c]
5 -- update_led() makes kbd hang: the problem here is that
update_led() makes the keyboard generate two KEYB_R_ACK
responses, and one of the interrupts sometimes gets lost when
there is a lot of other I/O happening. See the comment in the
code. My fix seems to work for me, but you may want to handle
it some other way. It would probably be quite reasonable to
check for lost interrupts periodically anyway, whether
update_led() has been called or not. [file: pcvt_kbd.c]
(NOTE: item 5 has been disabled because it causes older
FreeBSD's to panic because of the timer queue not being
initialized at the time called. -hm)
- partly rewrote doreset() in pcvt_kbd.c to enable boot procedure to proceed
if no (PC) keyboard is found. The current behaviour and implementation
is subject to change.
- patch from Thomas Gellekum to Util/keycap/keycap.src
- minor modification to main.c in Util/set2061
- patch from Onno and John Kohl to make pcvt beta 16 work on NetBSD current:
1. pcvt_conf.h
_real_ 1.0 ===> NetBSD1_0 == 1
current 1.0 (1.0A) ===> NetBSD1_0 == 2
2. pcvt_hdr.h
Put pcvt_conf.h before _all_ the #ifdef PCVT_*. This way
the #ifdef NetBSDx_y stuff can do its work.
- size of PCVT_BURST was still reported as 1 for FreeBSD 2.0, fixed
- made some adjustments for FreeBSD 2.0 in Util/vgaio
- Another patch from Joerg for FreeBSD 2.0
- included vgaio, kbdio and set2061 into the outer Makefile, this programs
are build and cleaned but don't install anything.
All program's in the Util dir should now cleanly make <anything> ...
- enable 132 column support for Trident TVGA8900CL, some NetBSDisms
- addend patch from Joerg for pcvt-320b7 to fix FreeBSD 2.0's ttymalloc's
encapsulation into #if's. Also new keycap.src entry.
- fixed keyboard status/LED not updated on soft reset emulator
- on 23rd of December i had some spare time, so i added some demos to the
Util/demo directory as well a a time-killer program (playvt) to view
some of the VT animations and a christmas animation i got from Joerg.
- added a new utility set2061 to program the clock generator on my S3 based
ELSA Winner VGA board. This eventually lets me use 132 columns on this
board, because i'm now able to program the clock to generate 40MHz
on clock output #2.
- debugged winsize patch on FreeBSD 1.1, line discipline open init's the
queues, winsize initialization must happen after line disc. open!
- got a bunch of NetBSD PR's from J.T. Conklin:
PR #214: PCVT treats ctrl-shift exactly like shift for most characters.
(fixed by Lon Willet's Mega Patch described below -hm)
PR #399: If you define PCVT_META_ESC when builting PCVT, Meta-Return
sends 0x8d instead of ESC RET.
(fixed by applying the patch from Bill Sommerfeld. -hm)
PR #400: pcvt sometimes gets confused about window size
(fixed by applying the patch from Bill Sommerfeld. -hm)
PR #404: Meta-Control-Space broken with PCVT_META_ESC and PCVT_NULLCHARS
(put into "BugList" file, no solution yet .. -hm)
PR #488: pcvt can loose keyboard control if you start an xserver from
an xterm
(already fixed by a patch from John Kohl, see below -hm)
PR #580: NetBSD i386/pcvt bugs/enhancements; fixes included
(already integrated the patch from Lon Willet, see below -hm)
- on coldinit, if FAT_CURSOR is defined, the old large blockcursor is used
- enhanced the vgaio output in an attempt to make 132 column mode work
for my S3 board ....
- applied patch from Thomas Gellekum: install instructions for FreeBSD 2.0,
patch to fontedit to compile under FreeBSD 2.0, an addition to
keycap.src and a fix for kbdio
- changed installation instructions to reflect recent changes, removed
instructions for FreeBSD 1.0 and added instructions for FreeBSD 2.0
- upgraded all utilities version strings to 3.20
- new example of rc.local
- changing timeout()/untimeout() function parameter type to TIMEOUT_FUNC_T
definition in pcvt_hdr.h
- changed install instructions to reference Etc dir instead of Doc dir for
several files which were moved from Doc to Etc.
- new parameter -d for the cursor utility, updated cursor manpage
- applying a patch from Lon Willett, willett@math.utah.edu which fixes
several bugs and provides some enhancements. Lon writes:
1 -- The displayed cursor is not updated during kernel I/O,
because async_update() doesn't get called. This is merely ugly
while the system startup messages are being displayed, but it is
positively annoying when using the kernel debugger.
2 -- CONTROL-SHIFT-<KEY> is taken to be the same as SHIFT-<KEY>.
It should be interpretted as CONTROL-<KEY>, or even have its own
binding. One of the lines below fixes it in the former way.
This is especially bad (i.e. clearly buggy) when I type
CONTROL-SHIFT-<6/^> to get a "Control-^", and instead get a "^".
3 -- The "special" region at the bottom of the screen, i.e. the
function-key-labels/status-line in HPVT mode, and the blank line
in FORCE24LINES mode, do not get properly cleared/updated.
4 -- When switching screen sizes/modes, the FORCE24LINES setting
is not always handled.
5 -- The PCVT_VT220KEYB functions are missing some features.
The control key settings are bug fixes; they apply only if
system function key labels are on, and match the labels. The
shift key definitions are enhancements.
The new keys (previously undefined) are:
Control-F1 -- toggle 80/132 columns
Control-F2 -- soft reset emulator
Control-F3 -- toggle force 24 lines mode
Control-F4 -- toggle keyboard debugging
Shift-F1 -- select screen 4
Shift-F2 -- select screen 5
Shift-F3 -- select screen 6
Shift-F4 -- select screen 7
Shift-F5 -- select (current screen - 1)
6 -- [Enhancement] The initial startup screen is cleared, and
the screen gets cleared when changing modes/sizes. I don't like
this. I want a chance to see bootstrap loader messages, and I
also want the command "scon -d/dev/ttyv0 -H -s28" in my
rc.local, but then I lose various messages from daemons, etc
(which aren't always logged to syslog). So I have fixed the
code so that it tries to preserve the contents of the screen
when starting up, and when changing modes/sizes.
7 -- [Enhancement?] I added code to preserve the initial cursor
shape at startup. This isn't really necessary, since the
"cursor" command can be used to set it to your preference; but
it seems like this is the preferable policy to use for the
default.
- applying patches from Onno van der Linden and Martin Husemann: adding
support for post 1.0 NetBSD-current and adding PCVT_NO_LED_UPDATE
- patch from Joerg Wunsch: support for FreeBSD 2.0 and better support
for serial console coexistence
- bugreport from Michael Havemester regarding PCVT_NOFASTSCROLL: it was
not enabled in pcvt_vtf.c, fixed.
- renamed pcvt_disable_intr and pcvt_enable_intr to PCVT_DISABLE_INTR and
PCVT_ENABLE_INTR (Joerg)
- attempt to automatically compile time configure in pcvt_conf.h, how
does FreeBSD do this ? should work for NetBSD (from Onno v.d. Linden)
- split off pcvt_kbd.h from pcvt_kbd.c, file > 100k
- split off pcvt_config.h from pcvt_hdr.h. All compile time configurations
should be put into pcvt_config.h now.
- moved version definitions to begin of file in pcvt_ioctl.h and pcvt_hdr.h
- fixing NetBSD #ifdef in pcvt_drv.c
- fixed bug in scon. when doing "scon -c <num>" the destination screen was
cleared, this is fixed now by properly setting "force_24lines"
- added kbdio utility from Joerg into Util directory
- changed font dir from /usr/share/misc/vgafonts to /usr/share/misc/pcvtfonts
- Fix for Gateway 2000 keyboard problems from Brian Moore
- Starting to implement more keymoard mapping layers in pcvt_kbd.c. This
section is a building site, enclosed in NOT_YET_DEF ifdef's
- VT_SETMODE ioctl patch from John Kohl <jtk@kolvir.blrc.ma.us>, see text
from John in the source file pcvt_ext.c
- patch from Joerg for kbd_emulate_pc(), intro of timeout
- fixed bug in soft/hard reset and real system fkey labels
- added patch from Joerg for FreeBSD 1.1.5.1R
- fixed both SR and SF entries in termcap database file
- removed SR entry in termcap database file (bugreport from John Perry)
- bugfix in cirrus 132 column switching got from Onno/Charles
- french keycap database entry from Matthieu Herrb
- cleanup patch from Joerg for Util/demo/Makefile und Util/fonts/Makefile
Changes 3.00 -> 3.10 June 1994
--------------------------------------------------------------------------------
- patch from Joerg correcting my assumed timeout/untimeout FreeBSD casts
- adjusted some #if's while validating NetBSD 0.9 and NetBSD-current
- rolled in Joerg's changes for a pre-1.1.5 (?) FreeBSD-current
- Util/fonts: install only the necessary fontfiles, vt100 not used anymore
- updated and commented Etc/rc.local and updated to more recent /etc/ttys files
- updated all installation instructions and changed their names
- documenting more PCVT_ options in pcvt_hdr.h
- adding CONF_ options to driver config ioctl and upgrading ispcvt
- commenting the source, housekeeping, step up to 3.10 beta 2
- casting timeout()/untimeout() for FreeBSD 1.1R :-(
- unprotecting vgapage() routine with #if !PCVT_KBD_FIFO
- adding Michael Havemester's keyboard fifo diffs to source tree
- pcvt_drv.c: made declaration of Crtat global for this file for NetBSD
- changing Util/fonts/Makefile and Util/demo/Makefile to run in all
supported environments
- moving inline from pcvt_vtf.h into pcvt_hdr.h, i still feel that this is
not the best solution, but i got annoyed by the 10 line pcvt_vtf.h
- bugfix, in hpmode, clear last 4 lines when 28 column mode and force
24 lines are true
- applying patch from Thomas Gellekum <thomas@ghpc8.ihf.rwth-aachen.de>:
- discard escape sequences ESC space F and ESC space G
- discard escape sequences DECELR = enable locator report
and DECSLE = select type of locator event
- disable scrolling when writing outside the scrolling region
at an absolute position.
[ pcvt now seems to be "VAX resistant" :-) ]
- optional switch to screen 0 can be done on kernel/console output
- fixed kernel output cursor positioning
- removed PCVT_FORCE8BIT
- pcvt_ext.c, changed screen switching bcopyb's to bcopy's
- new patch from Onno to support all BIOS versions of the Cirrus chipset.
- pcvt_x_hook() has to care about fkey labels now
- updated Doc/NotesAndHints and Doc/BugList
- applied patch from Onno van der Linden for updated Cirrus chipset support
- updated Doc/Bibliography
- removed paranoid delay()/DELAY() from vga_test()
- added prototype ttrstrt() into pcvt_drv.c for NetBSD 0.9
- made INSTALLATION.NetBSD and INSTALLATION.NetBSD.bundled from mycrofts base
- Charles Hannum took Michael Havemesters speedup modifications, made some
further enhancements and after adding support for pcvt, put it into
the NetBSD-current tree. THANK YOU, Charles !
The NetBSD version of May 20th '94 was taken as the base for 3.10.
Changes 2.20 -> 3.00 March 1994
--------------------------------------------------------------------------------
- Release 3.00
- last minute patch from Joerg (pcvt_hdr.h, BugList, NotesAndHints)
- included speedup patch from Michael Havemester as Etc/LAST-MINUTE
- updated Doc/pcvt.4
- removed bug in Util/ispcvt/Makefile which caused ispcvt to be installed
into /usr/sbin and /usr/local/bin
- split ioctl VGAPCVTID into two: intro of ioctl VGAPCVTINFO for compile
time options only.
VGAPCVTID is now frozen for identification purposes (XFree86 3.0)
updated Util/ispcvt for the above mentioned changes
- issued patch to upgrade beta14 to beta16
- bugfix: when scrolling up (bcopy) is interrupted by a keystroke requesting
a change of the current screen, the "new" screen is scrolled up. Fixed
in pcvt_kbd.c and pcvt_out.c (check_scroll)
- fixed bug "Jumping through vt's with ALT-F12 does jump over vt0"
- PCVT_PCBURST intro, update of ioctl and Util/ispcvt
- NetBSD speedup patch from Michael Havemester (factor 6-10)
- issued patch to upgrade beta14 to beta15 (never officially announced)
- added patch for ttioctl parameters NetBSD-current 12 Feb 94 from Michael
Havemester in pcvt_drv.c
- INSTALLATION.xxx(x)BSD upgraded to reflect changes in Util and NetBSD-current
- struct pcvtid changed to hold the value of PCVT_xxx(x)BSD, ispcvt upgraded
- applied patch from Szabolcs Szigeti for 132 column operation for Trident
TVGA 8900B and TVGA8900C based boards
- PCVT_NETBSD can/must now be 1 or 09 for Release 0.9 and > 09 for current
- applied patches from John Brezak and Szabolcs Szigeti for recent
NetBSD-current changes (syscframe -> trapframe)
- in Util, removed Makefile.inc. Make Makefile.inc.FreeBSD and
Makefile.inc.NetBSD and added a check to the toplevel and every
other Makefile in this part of the tree. sigh ...
- patch from Joerg for pcvt.4 Makefile and Debugger in FreeBSD
- issued pcvt-beta14, code freeze for 3.00 release, just bugfixes now
- INSTALLATION.FreeBSD and a small cleanup patch from Joerg
- large patch from Joerg to get pcvt FreeBSD-current compliant
- permission/owner cleanup, files:664, dirs:775, user:root, group:wheel
- got rid of the verbose error message when installing in Util/fonts
- new make-method in Util/kcon to workaround make portability problems
- NetBSD-current detection workaroundaroundaround for NEW_AVERRUNNABLE in
pcvt_header.h
- MONO_BUF and COLOR_BUF now ifndef'ed
- fixed typo in pcvt_kbd.h in cfkey11() and cfkey12()
- machine/pio.h must be included in pcvt_hdr.h for recent NetBSD-current
- protected every tsleep call with an "if(curproc)" otherwise there is
chance to panic the system (Joerg has an idea why ...)
- more fixes from Joerg: keyboard scansets fixed, X server is now aware
of redefined keys (ioctl implemented)
- patch from Heiko Rupp, configuration with XSERVER not defined didn't compile
- new version of vgaio from Joerg installed
- large keyboard cleanup patch from Joerg merged in
- bugfixes from Joerg: fix crash on not-open vt, remove pcxint, add option
PCVT_INHIBIT_NUMLOCK (for notebook owners :-), support for EGA/VGA
fonts with up to 32 scanlines.
- included vgaio, a program to read/write vga register values from Joerg.
- included mcon, the keyboard mouse emulator control program from Joerg.
- applied averrunnable patch to satisfy the most recent NetBSD-current.
- fixing cursor not updated bug if usl/vt server is running on vt0
- polished some chars in Util/fonts/vt220l.810, fixed all permissions in
the uuencoded fontfiles.
- debugged the EGA/VGA curses based font editor 'fed' in Util/fed. It seems
it's working ok now now.
- updated copyright header files
- synchronize asynchronous cursor position update with having a valid
(new) cursor (row) position from sputc(). (Otherwise a cursor
would appear temporarily in the first position of the first
function key label in the HP mode)
- updated screeninfo ioctl and scon to report the monitor type
- added file Doc/Notes for random notes and hints for pcvt-users.
- enhanced the pcvtid-ioctl and the ispcvt(8) utility to print out the
values of all "PCVT_XXXXXX" compile time options.
- included work from Joerg to convert all ifdef's to if's, to be able
to compile various configurations of pcvt without changing
options in the header file.
- included (currently untested !) patch for a keyboard mouse emulator
from Joerg. (he got problems after he bought a notebook with
just one serial port, which he wanted to use for slip ...)
- screensaver reset is now also done asynchronously to get more speed. the
function average() was renamed to async_update().
- cursor position update and cursor position display in HP mode is now done
asynchronously in function average() in pcvt_sup.c. the function
update_cursor does no longer exist. this gave about 10..30% increase
in speed depending on the data cat'ed (termcap, kernel, 1Mb nulls)
- HP function key emulation processing debugged, this has to be rewritten
to use a stack and a new parser. elm -K now works a bit more, the
display is not garbled anymore, but fkey strings do not work.
- pcvt_vtf.c split off from pcvt_out.c, file got > 100k. Checked all
forward declarations in header and source files
- 132 column support for Cirrus Logic CL-GD542X chipsets written by
Onno van der Linden, c/o vdlinden@fwi.uva.nl
- keyboard scancode display (#define PCVT_SHOWKEYS)
- printscreen keycode fix form Onno van der Linden
- Util/Makefile.inc added .depend dependency for make depend
- pcvt_ioctl.h is now installed into /usr/include/machine.
- keyboard scancode 1 is now used by default, perhaps it cures some problems
- support for keyboard scancodes sets 1 and 2 (compile time selectable via
PCVT_SCANSET), patch from Onno van der Linden, c/o vdlinden@fwi.uva.nl
- Util/fontedit.c updated to "#if defined (__386BSD__) || defined (__NetBSD__)"
(suggested by Mark Weaver, Mark_Weaver@brown.edu)
- 132 column support for S3 86c928 chipsets
- split off pcvt_ext.c from pcvt_sup.c, it was more than 100k ....
- intro of Doc/Manifest and Doc/TestedHardware, removed README.X-PATCH because
it was now really outdated
- superprobe compatibility patches from Joerg
- intro of file Doc/BugList
- another powerpatch from Joerg:
- some vgaioctl's are now available if in X mode (i.e. to scon to
another screen from within an xterm)
- removed bug in keyboardhandling, numlock'ed numkeys did send an
additional null (0x00) char, this has been fixed now.
- SysRq key made functional
- made force 24 lines (see below) the default configuration to have a well
behaving vt220 emulator at startup.
- every vt now has a separate caps-lock, num-lock and scroll-lock flag and
a separate handling of these lock-keys.
- made sleeping in case of scroll lock working from an earlier patch from Joerg.
- large patch from Joerg:
- Doc/pcvt.4 updated to reflect recent changes
- struct winsize set ok when switching between HP/VT
- struct winsize pixels reflect real values now
- ioctl for switching between 80 and 132 cols
- 132 columns for generic VGA's
- updated scon to provide access to ioctl 80/132 col switching
- removed pcconcoftc and kbdsoftc structures from header files, removed
pcconsintr variable and introduced kbd polling synchronization
variable kbd_polling.
- merging Joerg's patch to support 132 columns on Tseng Labs ET3000
- moved Util/uemacs/* --> Etc/uemacs.tar.Z.uu
- added patches from Joerg for new Makefiles in Util
- added keyboard security define's to the new X server code
- adding bugfixes from Joerg Wunsch for "old" (= non vt switching) X server
- Control-Alt-Functionkey(1...12) switches now virtual screens/terminals to
behave consistently with xfree 2.0, also the pages are now checked
against the real no. of terminals available ALL the time ...
- pcvt_hdr.h: changed "int pcstart();" to "void pcstart();" to avoid warning
message when compiling under NetBSD-current
- Doc dir split into Doc and Etc, Support renamed to Util
- adding NetBSD-current support for new X server support (syscframe changed
to trapframe in NetBSD-current as of 11/11/93)
- adding Joergs changes for XFree86 2.0 multiple X server and/or terminal
session support
- adding entries from patchkit 0.2.4 codrv keymap to Support/keycap/keycap.src
- Keyboard security introduced into the XSERVER dependent part in pcvt_drv.c
- renamed device files from /dev/ttycXX to /dev/ttyvXX
- added file Doc/pcvt.el from Joerg Wunsch to distribution
- added HP-mode function key map from Gordon L. Burditt to description
in Doc/Keyboard.HP
- fixed bug in scon which prevents it from showing the correct status of
132 column support of chipset
- 132 column mode for Trident TVGA9000 works now, after 2 1/5 months of
calling everybody i eventually got a tech ref manual from Trident ....
- it is now possible to "force" pcvt into a 24 line mode when operating
in pure VT mode with 25 lines or in HP mode with 28 lines. This
is sometimes necessary when running software which assumes it runs
on a "real" VT220 which has just 24 lines.
- updated scon to support the 24 lines force mode (scon -f [ on | off ])
- soft reset fkey now positions cursor into left upper corner, update_cursor()
made global function
- updated scon (-l) to print out additional info about the vga chipset,
family and 132 column support if VGA detected.
- added additional fields to screeninfo structure in pcvt_ioctl.h to be
able to return information about current vga chipset.
- moved VGA type/family definitions from pcvt_hdr.h to pcvt_ioctl.h
- Terminfo and Termcap updated to support 132 columns
- fixed bug in kcon which outputs garbage for remapped keys in kcon -l.
(reported by Gordon L. Burditt, gordon@sneaky.lonestar.org)
- modified Makefile for Support/ispcvt to copy it for installation instead
of moving it ..
- renamed /usr/share/misc/keycap -> /usr/share/misc/keycap.pcvt to
avoid nameclash with same file for codrv (Gordon Burditt)
- security bit no longer ignored when initializing keyboard (see #define
PCVT_USEKBDSEC in pcvt_hdr.h, suggested by Terry Lambert)
- cpufunc.h include made only for NetBSD (Gordon Burditt)
- switch statement in pcvt_drv.c removed for 386BSD (Gordon Burditt)
- Trident cursor size bug removed
- keyboard initialization for ddb
- added support for cursor on/of switching, screensaver and DECTCEM
- removed explicit Hercules support, MDA = Hercules in this context now
- patchkit from Joerg Wunsch (kbd-overlay malloc, scroll_sleep, clip fix)
- ispcvt now installed into /usr/sbin
- removed PCVT_NETBSD08 and PCVT_NETBSDCU, intro of PCVT_NETBSD
- implemented 132 column operation for wd90c11 chipsets
- PCVT_PREPATCH022 renamed to PCVT_NEEDPG
- INSTALLATION.NetBSD written
- DEVICE in kcon makefile changed from /dev/console to /dev/ttyc0
- new keyboard code in pcvt_kbd.c from NetBSD current
- new /etc/rc.local script in INSTALLATION
- implemented 132 column operation for et4000 chipsets
- detection of super vga chipsets as a prerequisite for 132 col mode
- switched to memory mapped virtual screen operation, configurable no. of
virtual screens, virtual screens now also on MDA and Hercules boards
Changes 2.10 -> 2.20 June 1993
--------------------------------------------------------------------------------
- added new option -a to scon to get the video adaptor in scripts
- support for NetBSD-current, define PCVT_NETBSDCU to enable it
- Support for NetBSD 0.8, define PCVT_NETBSD08 in pcvt_hdr.h to enable it.
- Change Support/Makefile to use <bsd.subdir.mk> instead of <bsd.prog.mk>
- Font editor for the EGA/VGA font-files added to support the design of new
fonts. One will need Zeyd M. Ben-Halim's ncurses library to compile it, see
file README.FIRST for information where to get it
- Doc/INSTALLATION upgraded
- Terminfo entry added to support Zeyd M. Ben-Halim's ncurses port
- ispcvt is now installed in /sbin to have it at boottime if /usr is not
yet mounted.
- applied a patch which prevents CAPS LOCK, SHIFT LOCK, and SCROLL LOCK
from being repeated (causing i.e a flashing CAPS LOCK led while
holding CAPS LOCK key down).
(diff from Gordon L. Burditt, gordon@sneaky.lonestar.org)
- merging patches to support the pccons-model of X11 server support
(diff from Joerg Wunsch, joerg_wunsch@uriah.sax.de)
- file pcvt_drv.c routine pg() enclosed in "#ifdef PCVT_PREPATCH022" to solve
multiple defined symbols beginning with patchkit 0.2.2
(reported by Marko Karppinen, dreamer@purkki.apu.fi)
- added british keycap entry into keycap source file
(from Andy Duplain, duplain@rtf.bt.co.uk)
Changes 2.00 -> 2.10 March 1993
--------------------------------------------------------------------------------
- detecting the presence of video boards has been changed to ask the
BIOS "equipment byte" in the RTC-CMOS ram what's installed. this caused
many discussions but solved also many problems ....
- driver name changed from "pc" to "vt" for multiple driver coexistence
(diff from Joerg Wunsch, joerg_wunsch@uriah.sax.de)
- new devicenames recommended for showup in utils like "ps"
(many people suggested that ..)
- new location for manual pcvt.0
(diff from Joerg Wunsch, joerg_wunsch@uriah.sax.de)
- new demo file "sgr.vt" to show available graphic renditions
- intro of Doc/ChangeLog (this file)
- fixed bug in Support/keycap/Makefile
(diff from Gordon L. Burditt, gordon@sneaky.lonestar.org)
- make vttest (main.c) compile after applying patchkit-beta2
- screensaver fixed by Joerg Wunsch
- screensaver now compiled in by default
- made recognition of CONTROL-ALT-DELETE an optional #ifdef'ed feature
- added sgr-conversion table for MDA adaptors
- fixed sgr-conversion table for VGA monochrome environments
- added support for using the kernel debugger
(diff from Bruce Evans, bde@runx.oz.au)
- fixed several bugs regarding monochrome environments in pcvt_sup.c
- fixed bug in scon preventing one from piping output though more
(reported by Gordon L. Burditt, gordon@sneaky.lonestar.org)
- display current screen number in HP-mode in the bottom right of screen
- changed names of all #define-able compile time options to start with
"PCVT_" for easy identification and installation into the kernel config file
- applied another pcvt_kbd.c patchkit from Bruce Evans, bde@runx.oz.au. he
writes:
These fixes are mainly related to ddb. sgetc has a weird interface that
has caused some bugs, and it was too easy for ddb to reenter itself.
1. Don't use char for keypad2num, char might be unsigned. Space is not
important since the array is small.
2. Don't use u_short for n.
3. Change some 0's to NULLs.
4. sgetc must not return NULL for the !noblock case. Only callers with
noblock set check for the null pointer. When the kernel follows a
null pointer, I think page 0 is sometimes mapped in so nothing bad
happens. The kernel panics if the page is not mapped in.
5. Reentrancy fix. The debugger really ought to check for reentrancy
itself, but the driver still needs to return early after the
debugger returns, so that it doesn't return a junk ESC from
ctrl-alt-ESC.
6. xlatkey2ascii may return NULL too.
--------------------------------------------------------------------------------

View File

@ -1,149 +0,0 @@
Character Generator description (before it gets lost ..)
--------------------------------------------------------------------------------
The lower character generator is the default IBM character set II.
The description of the higher character generator follows below. The
character names are taken from the "Postscript Language Reference
Manual", 2nd Edition, Fourth printing July 1991, pp 596.
NOTE: The hex values here are NOT the values the character is identified
by in the emulator. The "physical" (vt220 character) to "logical"
(this table, character generator) conversion is done in the character
output routine by using the tables from file pcvt_tbl.h.
The order of the characters is not regular and was largely influenced by
the status of my brain while pixel-placing characters ....
HEX What
--- -------------------------------------------------
00 Control code display for
. control characters in the
1f range 0x00 - 0x1f
20 Control code display for
. control characters in the
3f range 0x80 - 0x9f
HEX What
--- -------------------------------------------------
40 rho
41 psi
42 partialdiff
43 lambda
44 iota
45 eta
46 epsilon
47 chi
48 logicaland
49 logicalor
4a union
4b propersuperset
4c propersubset
4d gamma
4e Xi
4f Psi
HEX What
--- -------------------------------------------------
50 Pi
51 arrowdblright
52 arrowdblboth
53 Lambda
54 Theta
55 congruent
56 gradient
57 Delta
58 proportional
59 therefore
5a integral
5b fraction
5c (inverted fraction ????)
5d angle
5e (inverted angle ????)
5f braceleftmid
HEX What
--- -------------------------------------------------
60 bracerightmid
61 bracelefttp
62 braceleftbt
63 bracerighttp
64 bracerightbt
65 radical
66 omega
67 (Yen ??)
68 xi
69 yacute
6a thorn
6b eth
6c Thorn
6d Yacute
6e multiply
6f Eth
HEX What
--- -------------------------------------------------
70 threequarters
71 Cedillasmall
72 Acutesmall
73 emdash
74 registered
75 endash
76 logicalnot
77 dieresis
78 notequal
79 scan 9
7a scan 7
7b scan 5
7c scan 3
7d scan 1
7e upsilon
7f emptyset
HEX What
--- -------------------------------------------------
80 oe
81 Otilde
82 atilde
83 Ydieresis
84 Ucircumflex
85 Uacute
86 Ugrave
87 Oslash
88 OE
89 Otilde
8a Ocircumflex
8b Oacute
8c Ograve
8d Idieresis
8e Icircumflex
8f Iacute
HEX What
--- -------------------------------------------------
90 Igrave
91 Edieresis
92 Ecircumflex
93 Egrave
94 Atilde
95 Acircumflex
96 Aacute
97 Agrave
98 onesuperior
99 (small black rectangle)
9a zeta
9b threesuperior
9c copyright
9d currency
9e kappa
9f (inverted question mark)
HEX What
--- -------------------------------------------------
a0 the remaining positions
. are used for the vt220
ff downloadable characterset
-------------------------------------------------------------------------------
(phoooo ..)

View File

@ -1,99 +0,0 @@
I. Character Set Selection on VT220 Terminals
==================================================
name C0 GL C1 GR
+---+ +-------------------+ +---+ +-------------------+
|00h| | | |80h| | |
range | | | | 20h .. 7fh | | | | | a0h .. ffh |
|1fh| | | |9fh| | |
+---+ +-------------------+ +---+ +-------------------+
length 32 96 32 96
/\
SECOND /||\ "lock"- or "single"-shift one set of G0, G1, G2 or
STEP || G3 into one of the "displayable" charactersets GL
|| or GR. (escape) sequences are: SI, SO, ESC ~, ESC n,
|| ESC }, ESC o, ESC |, ESC N and ESC O.
+----+ +----+ +----+ +----+
name | G0 | | G1 | | G2 | | G3 |
length |(96)| |(96)| |(96)| |(96)|
+----+ +----+ +----+ +----+
/\
/||\ designate a hard or a soft character set as
|| one of G0, G1, G2 or G3, used escape sequences
FIRST || are, ESC ( X, ESC ) X, ESC * X and ESC + X - where X is
STEP || B for ascii, < for supplemental, 0 for special, A for
|| british, 4 for dutch, C and 5 for finnish etc. etc. ...
||
+-----+ +------------+ +--------+ +-----------+ +------------+
name |ascii| |supplemental| |special | | national | |downloadable|
| | | graphics | |graphics| |replacement| |characterset|
length | (96)| | (96)| | (96)| | (96)| | (96)|
+-----+ +------------+ +--------+ +-----------+ +------------+
\-------\ /----------/ norway/danish
| dutch
together, this is also finnish
referred to as the french
multinational character french canada
set (power on default german
on a dec vt220) italian
spanish
swedish
swiss
II. Emulating Character Set Selection
=========================================
MDA/HCG/CGA:
just a partial emulation is done, because these boards don't allow
downloadable charactersets. some characters simply don't display
because they are not in the characterset roms on the video board.
if you want to change the mapping, have a look at the default tables
in pcvt_tbl.h.
EGA/VGA:
these cards have provisions for downloadable charactersets and so
many vt220/vt320 charactersets are fully supported:
- US Ascii
- DEC Supplemental
- DEC Special Graphic
- DEC Technical
- ISO Latin-1
- Downloadable
when the emulator is started, it behaves initially similar to
the MDA/CGA/HCG method described above.
when a second (special) characterset for a given screen resolution
is loaded via the "loadfont" utility, the emulator detects this fact
and uses from then on extended tables to access the second charset
as an upper half 512 characterset in terms of ega/vga speak.
from this time on, vt220 downloadable fonts are usable.
the organization of this extended characterset is as follows:
0x00 ... 0x1f C0 display function fonts
0x20 ... 0x3f C1 display function fonts
0x40 ... 0x9f fonts for DEC Supplemental, DEC Special
Graphic, DEC Technical and ISO Latin-1
0xa0 ... 0xff VT220 Downloadable Font
the mapping between vt220 charactersets and the charactersets inside
the ega/vga is done by tables found in the file pcvt_tbl.h.
there is a MSDOS fonteditor called "EVAFONT" available on the
SIMTEL-20 archive, which i used to edit the character sets in the
distribution.

View File

@ -1,268 +0,0 @@
Control Codes and Escape Sequences supported by pcvt
===============================================================================
CONTROL CODES
-------------------------------------------------------------------------------
NUL (0x00) ignored
SOH (0x01) ignored
STX (0x02) ignored
ETX (0x03) ignored
EOT (0x04) ignored
ENQ (0x05) ignored
ACK (0x06) ignored
BEL (0x07) beep
BS (0x08) move one character position to the left
until at left margin
HT (0x09) move to next tab stop
LF (0x0a) move to next line, same column
VT (0x0b) move to next line, same column
FF (0x0c) move to next line, same column
CR (0x0d) move to left margin on current column
SO (0x0e) invoke character set G1 into GL
SI (0x0f) invoke character set G0 into GL
DLE (0x10) ignored
DC1 (0x11) ignored
DC2 (0x12) ignored
DC3 (0x13) ignored
DC4 (0x14) ignored
NAK (0x15) ignored
SYN (0x16) ignored
ETB (0x17) ignored
CAN (0x18) abort current escape sequence
EM (0x19) ignored
SUB (0x1a) abort current escape sequence
ESC (0x1b) start of escape sequence
FS (0x1c) ignored
GS (0x1d) ignored
RS (0x1e) ignored
US (0x1f) ignored
VT220 control codes in the range 0x80 .. 0x9f are completely ignored,
but displayed as C1 display controls.
ESCAPE SEQUENCES DIGITAL EQUIPMENT
-------------------------------------------------------------------------------
(ni) = not implemented yet, all hooks available inside emulator!
<p> = numeric parameter
ESC space F select 7-bit c1 control transmission (ni)
ESC space G select 8-bit c1 control transmission (ni)
ESC # 3 double height top half (ni)
ESC # 4 double height bottom half (ni)
ESC # 5 single width single height (ni)
ESC # 6 double width single height (ni)
ESC # 8 fill screen with 'E's
ESC 7 save cursor
ESC 8 restore cursor
ESC = keypad application mode
ESC > keypad numeric mode
ESC D index
ESC E next line
ESC H set tab at cur col
ESC M reverse index
ESC N single shift G2
ESC O single shift G3
ESC Z who are you
ESC d Only available if PCVT_SETCOLOR was defined when
compiling the kernel, allows to set custom color table
for more info, see pcvt_out.c ...
ESC c power up reset
ESC n Lock Shift G2 -> GL
ESC o Lock Shift G3 -> GL
ESC } Lock Shift G2 -> GR
ESC | Lock Shift G3 -> GR
ESC ~ Lock Shift G1 -> GR
ESC [ ? <p> h set dec private modes
ESC [ ? <p> l reset dec private modes
1 CKM - cursor key mode
6 OM - origin mode
7 AWM - auto wrap mode
ESC [ <p> ' z DECELR - Enable Locator Report (ni)
ESC [ <p> ' { DECSLE - Select type of locator events (ni)
ESC [ ? n Terminal Reports
ESC [ ? K selective erase in line
ESC [ ? J selective erase in display
ESC [ <p> @ insert char(s)
ESC [ <p> A cursor up
ESC [ <p> B cursor down
ESC [ <p> C cursor forward
ESC [ <p> D cursor backward
ESC [ <p> H cursor direct cursor addressing
ESC [ <p> J erase screen
ESC [ <p> K erase line
ESC [ <p> L insert line
ESC [ <p> M delete line
ESC [ <p> P delete char
ESC [ <p> S scroll up
ESC [ <p> T scroll down
ESC [ <p> X erase character
ESC [ <p> c device attributes
ESC [ <p> f direct cursor addressing
ESC [ <p> g clear tabs
ESC [ <p> h set mode
ESC [ <p> l reset mode
4 IRM - insert replacement mode
20 LNM - line feed / newline mode
ESC [ <p> i media copy (ni)
ESC [ <p> m select graphic rendition
0 reset to normal attributes
1 bold
4 underline
5 blinking
7 reverse
22 bold off
24 underline off
25 blinking off
27 reverse off
30-37 foreground colors (on color display)
40-47 background colors (on color display)
ESC [ <p> n device status report
ESC [ <p> r set scrolling region
ESC [ <p> x request / report terminal parameters
ESC [ <p> y invoke selftests (ni)
ESC [ x request/report parameters
ESC [ y invoke seftest(s)
ESC [ " q SCA
ESC [ ! p SCA
ESC ( <p> designate G0
ESC ) <p> designate G1
ESC * <p> designate G2
ESC + <p> designate G3
ESC - <p> designate G1 (96)
ESC . <p> designate G2 (96)
ESC / <p> designate G3 (96)
A British or ISO-Latin-1
B USASCII
C Finnish
5 Finnish
E Norwegian/Danish
6 Norwegian/Danish
H Swedish
7 Swedish
K German
Q French Canadien
R French
Y Italian
Z Spanish
0 special graphics
1 alternate ROM
2 alt ROM, spec graphics
3 HP Roman 8, upper 128 chars*/
4 Dutch
< DEC Supplemental
= Swiss
> DEC Technical
ESCAPE SEQUENCES HEWLETT-PACKARD
-------------------------------------------------------------------------------
ESC&f<attr>a<key>k<llen>d<slen>L<label><string> set function key label
attr = attribute, 0 - normal (not implemented)
1 - local only (not implemented)
2 - transmit only (not implemented)
key = function key number, range 1 .. 8
llen = label string length
slen = string string length
label = label data (up to 16 chars per label)
string = string to send data (up to 80 chars per label)
(not implemented)
EXAMPLE:
========
ESC&f0a1k16d1LFUNCTION KEY 0
sets function key label 1 to "FUNCTION KEY ".
should program fkey 1 to emit "0" on keypress
ESC&j<parm> function key operations
parm = '@' remove the function key labels from screen
parm = 'A' display the modes set of function key labels
parm = 'B' enable & display user function key labels
parm = 'C' clear message & restore the current key labels
parm = 'R' enable usr/sys and menu and label modes
parm = 'S' disable usr/sys and menu and label modes

View File

@ -1,286 +0,0 @@
================================================================================
# #
# Function key mapping for the "more HP" - like layout #
# #
================================================================================
I. Function Key Map
========================
PC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
Key
_________________________________________________________________________
UNSHF| 132 | Soft| | | | 7/8 | Dspl| Auto| SCRN| SCRN| SCRN| SCRN|
SYS | Cols|Reset| | | Beep| Bit | Func| Wrap| 0 | 1 | 2 | 3 |
LABEL|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|
UNSHF| | | | | | | | | SCRN| SCRN| SCRN| SCRN|
USER | F6 | F7 | F8 | F9 | F10 | F11 | F12 | F13 | 0 | 1 | 2 | 3 |
LABEL|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|
| | | | | | | | | Fkey| U/S |VT/HP| Next|
ALT | F14 | HELP| DO | F17 | F18 | F19 | F20 | F21 |Label|Label| Mode| SCRN|
|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|
| User| User| User| User| User| User| User| User| | | | |
SHIFT| F6 | F7 | F8 | F9 | F10 | F11 | F12 | F13 | | | | |
|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|
ALT- | User| User| User| User| User| User| User| User| | | | |
SHIFT| F14 | F15 | F16 | F17 | F18 | F19 | F20 | F21 | | | | |
|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|
CTRL-| SCRN| SCRN| SCRN| SCRN| SCRN| SCRN| SCRN| SCRN| SCRN| SCRN| SCRN| SCRN|
ALT | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|_____|
PC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
Key
II. Special Keys Used To Change The General Runtime Functionality
=====================================================================
To be consistent with XFfree86 2.0 Virtual Screen switching, it is
now also possible to switch screens by using:
CTRL - ALT - Fx , where x can be 1 ... No of screens compiled,
see the definition of PCVT_NSCREENS !
Virtual Screen/Terminal switching
---------------------------------
F9 or CTRL-ALT-F1 switches to screen 0
F10 or CTRL-ALT-F2 switches to screen 1
F11 or CTRL-ALT-F3 switches to screen 2
F12 or CTRL-ALT-F4 switches to screen 3
CTRL-ALT-F5 switches to screen 4
CTRL-ALT-F6 switches to screen 5
CTRL-ALT-F7 switches to screen 6
CTRL-ALT-F8 switches to screen 7
CTRL-ALT-F9 switches to screen 8
CTRL-ALT-F10 switches to screen 9
CTRL-ALT-F11 switches to screen 10
CTRL-ALT-F12 switches to screen 11
(see also ALT-F12 below)
ALT-F9 Function key labels ON / OFF
------------------------------------
this key is only operational, when in HP/VT mode, see F11
ALT-F9 toggles between function key labels displayed or not.
ON: screen has either 25-3 = 22, 28-3 = 25 or 50-3 = 47 lines
2 lines fkey labels displayed
row/col display enabled
1 line status/load avg line
OFF: screen has either 25-3 = 22, 28-3 = 25 or 50-3 = 47 lines
no function key labels displayed
no row/col display
no status/load avg line
applicable escape sequences:
switch OFF:
ESC & j @ remove labels from screen
switch ON:
ESC & j A display system fkey labels
ESC & j B display user fkey labels
ESC & j C display current fkey labels
ALT-F10 User / System Function key labels
-----------------------------------------
this key is only operational, when in HP/VT mode, see ALT-F11
ALT-F10 toggles between the display of user or system
function key labels
this key is only active if labels are toggled on via
the ALT-F9 function key
screen has either 25-3 = 22, 28-3 = 25 or 50-3 = 47 lines
2 lines fkey labels displayed
row/col display enabled
1 line status/load avg line
applicable escape sequences: (see above)
ESC & j A display system fkey labels
ESC & j B display user fkey labels
ESC & j C display current fkey labels
ALT-F11 Toggle between pure VT and HP-VT Emulation
--------------------------------------------------
This key switches between pure vt100/vt220 mode and
vt100/vt220 with hp-fkey-labels mode of operation.
this is not dependent of any screen resolution the
virtual consoles are in.
initially, after power on, all virtual screens are in
the pure vt-mode:
- the emulator does not execute any hp escape sequences
- the function key label lines are switched off
- no load average or status line is displayed
- no row / column counter is displayed
- no window number is displayed
- the full screen 25x80, 28x80 or 50x80 is usable
- ALT-F9 and ALT-F10 have no function
when toggled to the vt/hp mix of operation, the following
changes take place:
- the emulator executes the supported hp-esc sequences
- the function key labels are displayable depending
on the state of ALT-F9/F10
- the load average is displayed
- the row / column counters are displayed
- the window number is displayed in the lower right corner
- in any screen resolution, the last 3 lines are lost,
so one has a 22x80, 25x80 and 47x80 resolution
- F9 and F10 are operational.
when switching modes by means of ALT-F11, the following
changes to the current environment, the emulator may
be in, apply:
- the screen is cleared
- the cursor moves to the home position
- the scrolling region is reset to default
(this functionality is available via an ioctl)
ALT-F12 Cycle current screen
----------------------------
This key cycles through the display of the video
screens. on startup, screen 0 is displayed; with every
keypress of F12, the next screen is displayed, wrapping
from the maximum screen number back to screen 0.
(this functionality is available via an ioctl)
III. Special Keys used to change the Runtime Functionality of a Page
=======================================================================
when in mixed HP/VT mode, one has two types of function key labels
on screen, user function keys and system function keys.
this functionality is NOT available in pure VT220 mode !
the user function keys emit the below mentioned VT220 function-
key sequences. the labels can be reprogrammed by use of escape
sequences.
in system function key mode, several pre-programmed functions inside
the emulator can be toggled, currently implemented are:
- F1, if a chipset is detected for which 132 operation is supported,
F1 toggles between 80 columns and 132 columns.
- F2, does a soft reset of the emulator code
- F3, -/-
- F4, -/-
- F5, toggle the audible beep generation
- F6, toggle 7/8 bit char width
- F7, toggle display functions. this means that control codes
in the range 0x00 to 0x1f are not EXECUTED by the emulator
any longer, but displayed on the screen
- F8, toggle automatic cursor wraparound at end of line
these functions operate just for the selected screen
IV. Keyboard VT220 compatibility
====================================
The following keys behave different as probably expected.
They were mapped to provide more VT220 compatibility.
To have F1-F8 emit something in HP-mode, you have to switch
to user function key labels by using ALT-F10 (see ALT-F10 above) !
PC Keyboard VT220 Keyboard
------------- --------------------------------------------------
F1 F6 (ESC [ 17 ~)
F2 F7 (ESC [ 18 ~)
F3 F8 (ESC [ 19 ~)
F4 F9 (ESC [ 20 ~)
F5 F10 (ESC [ 21 ~)
F6 F11 (ESC [ 23 ~)
F7 F12 (ESC [ 24 ~)
F8 F13 (ESC [ 25 ~)
ALT-F1 F14 (ESC [ 26 ~)
ALT-F2 HELP (ESC [ 28 ~)
ALT-F3 DO (ESC [ 29 ~)
ALT-F4 F17 (ESC [ 31 ~)
ALT-F5 F18 (ESC [ 32 ~)
ALT-F6 F19 (ESC [ 33 ~)
ALT-F7 F20 (ESC [ 34 ~)
ALT-F8 F21 (ESC [ 35 ~) (i know !!!!)
SHIFT-F1 ... SHIFT-F8
User Defined Keys for F6 - F13
ALT-SHIFT-F1 ... ALT-SHIFT-F8
User Defined Keys for F14 - F20
Insert Insert Here (ESC [ 2 ~)
Delete Remove (ESC [ 3 ~)
Home Find (ESC [ 1 ~)
End Select (ESC [ 4 ~)
PgUp Prev Screen (ESC [ 5 ~)
PgDn Next Screen (ESC [ 6 ~)
PrtSc (ignored)
Pause (ignored)
Break (ignored)
Cursor Keys dependent upon state of cursor key mode either
ESC [ A ... ESC [ D or ESC O A ... ESC O D
NumLock toggles Numeric Keypad for Keypad Numeric Mode
and Keypad Application Mode
ALT-Keypad-0 can be used to generate any keycode in the
ALT-Keypad-1 rage 0-255.
ALT-Keypad-2 this was modeled with the behaviour of a
ALT-Keypad-3 popular boot loader in mind
ALT-Keypad-4
ALT-Keypad-5
ALT-Keypad-6
ALT-Keypad-7
ALT-Keypad-8
ALT-Keypad-9
Numeric Keypad dependent upon state of keypad numeric/application
mode either 0 ... 9 or ESC O p ... ESC O y
ALT-NumLock emits PF1 sequence (ESC O P)
ALT-Keypad-/ emits PF2 sequence (ESC O Q)
ALT-Keypad-* emits PF3 sequence (ESC O R)
ALT-Keypad-- emits PF4 sequence (ESC O S)
/* EOF */

View File

@ -1,231 +0,0 @@
================================================================================
# #
# Function key mapping for the "more VT220" - like layout #
# #
================================================================================
I. Special Keys Used To Change The General Runtime Functionality
=====================================================================
CTRL-F9 Function key labels ON / OFF
------------------------------------
this key is only operational, when in HP/VT mode, see CTRL-F11
CTRL-F9 toggles between function key labels displayed or not.
ON: screen has either 25-3 = 22, 28-3 = 25 or 50-3 = 47 lines
2 lines fkey labels displayed
row/col display enabled
1 line status/load avg line
OFF: screen has either 25-3 = 22, 28-3 = 25 or 50-3 = 47 lines
no function key labels displayed
no row/col display
no status/load avg line
applicable escape sequences:
switch OFF:
ESC & j @ remove labels from screen
switch ON:
ESC & j A display system fkey labels
ESC & j B display user fkey labels
ESC & j C display current fkey labels
CTRL-F10 User / System Function key labels
-------------------------------------------------
this key is only operational, when in HP/VT mode, see CTRL-F11
CTRL-F10 toggles between the display of user or system
function key labels
this key is only active if labels are toggled on via
the CTRL-F9 function key
screen has either 25-3 = 22, 28-3 = 25 or 50-3 = 47 lines
2 lines fkey labels displayed
row/col display enabled
1 line status/load avg line
applicable escape sequences: (see above)
ESC & j A display system fkey labels
ESC & j B display user fkey labels
ESC & j C display current fkey labels
CTRL-F11 Toggle between pure VT and HP-VT Emulation
----------------------------------------------------------
This key switches between pure vt100/vt220 mode and
vt100/vt220 with hp-fkey-labels mode of operation.
this is not dependent of any screen resolution the
virtual consoles are in.
initially, after power on, all virtual screens are in
the pure vt-mode:
- the emulator does not execute any hp escape sequences
- the function key label lines are switched off
- no load average or status line is displayed
- no row / column counter is displayed
- the full screen 25x80, 28x80 or 50x80 is usable
- CTRL-F9 and CTRL-F10 have no function
when toggled to the vt/hp mix of operation, the following
changes take place:
- the emulator executes the supported hp-esc sequences
- the function key labels are displayable depending
on the state of CTRL-F9/CTRL-F10
- the load average is displayed
- the row / column counters are displayed
- in any screen resolution, the last 3 lines are lost,
so one has a 22x80, 25x80 and 47x80 resolution
- CTRL-F9 and CTRL-F10 are operational.
when switching modes by means of CTRL-F11, the following
changes to the current environment, the emulator may
be in, apply:
- the screen is cleared
- the cursor moves to the home position
- the scrolling region is reset to default
(this functionality is available via an ioctl)
F5 Cycle current page
--------------------------
This key cycles through the display of the video
pages. on startup, page 0 is displayed; with every
keypress of F5, the next page is displayed, wrapping
from the maximum page number back to page 0.
F1 switches to page 0
F2 switches to page 1
F3 switches to page 2
F4 switches to page 3
Shift-F1 -- select screen 4
Shift-F2 -- select screen 5
Shift-F3 -- select screen 6
Shift-F4 -- select screen 7
Shift-F5 -- select (current screen - 1)
(this functionality is available via an ioctl)
II. Special Keys used to change the Runtime Functionality of a Page
=======================================================================
when in mixed HP/VT mode, one has two types of function key labels
on screen, user function keys and system function keys. they are
accessed by using the CTRL key while pressing a function key.
the function key labels are NOT available in pure VT220 mode--although
the function keys are still active
the user function keys and their labels can be reprogrammed by use of
escape sequences.
in system function key mode, several pre-programmed functions inside
the emulator can be toggled, currently implemented are:
- CTRL-F1, toggle 80/132 columns
- CTRL-F2, soft reset emulator
- CTRL-F3, toggle force 24 lines mode
- CTRL-F4, toggle keyboard debugging (if compiled in)
- CTRL-F5, toggle the audible beep generation
- CTRL-F6, toggle 7/8 bit char width
- CTRL-F7, toggle display functions. this means that control codes
in the range 0x00 to 0x1f are not EXECUTED by the emulator
any longer, but displayed on the screen
- CTRL-F8, toggle automatic cursor wraparound at end of line
these functions operate just for the selected page
III. Keyboard VT220 compatibility
====================================
The following keys behave different as probably expected.
They were mapped to provide more VT220 compatibility.
PC Keyboard VT220 Keyboard
------------- --------------------------------------------------
F6 - F12 emit the sequences for VT220 F6 - F12 keys
(ESC [ 17 ~ .... ESC [ 24 ~)
ALT F1 - F10 emit the sequences for VT220 F11 - F14, HELP, DO,
F17 - F20 keys
(ESC [ 23 ~ .... ESC [ 34 ~)
SHIFT F6 - F12 emit the User Definable Key sequences for VT220
F6 - F12 keys or
(ESC [ 17 ~ .... ESC [ 24 ~) for cleared sequences
ALTSHIFT F1-F10 emit the User Definable Key sequences for VT220
F11 - F14, HELP, DO, F17 - F20 keys or
(ESC [ 23 ~ .... ESC [ 34 ~) for cleared sequences
Insert Insert Here (ESC [ 2 ~)
Delete Remove (ESC [ 3 ~)
Home Find (ESC [ 1 ~)
End Select (ESC [ 4 ~)
PgUp Prev Screen (ESC [ 5 ~)
PgDn Next Screen (ESC [ 6 ~)
PrtSc (ignored)
Pause (ignored)
Break (ignored)
Cursor Keys dependent upon state of cursor key mode either
ESC [ A ... ESC [ D or ESC O A ... ESC O D
NumLock toggles Numeric Keypad for Keypad Numeric Mode
and Keypad Application Mode
ALT-Keypad-0 can be used to generate any keycode in the
ALT-Keypad-1 rage 0-255.
ALT-Keypad-2 this was modeled with the behaviour of a
ALT-Keypad-3 popular boot loader in mind
ALT-Keypad-4
ALT-Keypad-5
ALT-Keypad-6
ALT-Keypad-7
ALT-Keypad-8
ALT-Keypad-9
Numeric Keypad dependent upon state of keypad numeric/application
mode either 0 ... 9 or ESC O p ... ESC O y
ALT-NumLock emits PF1 sequence (ESC O P)
ALT-Keypad-/ emits PF2 sequence (ESC O Q)
ALT-Keypad-* emits PF3 sequence (ESC O R)
ALT-Keypad-- emits PF4 sequence (ESC O S)
ALT-F11 emits PF1 sequence (ESC O P)
ALT-F12 emits PF2 sequence (ESC O Q)
/* EOF */

View File

@ -1,15 +0,0 @@
FILES= Acknowledgements Bibliography BugList ChangeLog CharGen \
Charsets EscapeSequences Keyboard.HP Keyboard.VT \
Manifest NotesAndHints TestedHardware ToDo
beforeinstall:
for file in ${FILES}; \
do \
${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
${.CURDIR}/$$file ${DESTDIR}${BINDIR}/Doc/$$file ; \
done
afterdistribute: beforeinstall
.include "../Makefile.inc"
.include <bsd.subdir.mk>

View File

@ -1,162 +0,0 @@
FILES AND DIRECTORIES - Base Directory [pcvt Release 3.20]
--------------------------------------------------------------------------------
Doc Documentation, see below
Etc Additional things, see below
README.FIRST guess what
Util Additional utilities and support, see below
Driversource Description
------------ --------------------------------------------------------
pcvt_conf.h Driver, compile-time configuration file
pcvt_drv.c Driver, os-interface
pcvt_ext.c Driver, USL-VT Xserver ioctl's and 132 column support
pcvt_hdr.h Driver, global include file
pcvt_ioctl.h Driver, ioctl's available for the driver
pcvt_kbd.c Driver, keyboard handling
pcvt_kbd.h Driver, keyboard handling header file
pcvt_out.c Driver, VT220 emulator state machine and misc
pcvt_sup.c Driver, support code for ega's/vga's
pcvt_tbl.h Driver, character set to vga charset mapping tables
pcvt_vtf.c Driver, VT220 emulator support functions
FILES AND DIRECTORIES - Doc
--------------------------------------------------------------------------------
Acknowledgements Everyone and everything who/what helped
Bibliography Useful Books and documentation
BugList Things to do
ChangeLog Driver development history
CharGen Description of the character set files
Charsets VT220 and mda/cga/hcs/ega/vga charactersets
EscapeSequences List of supported control codes & escape sequences
INSTALL.FreeBSD-1.1 Install instructions for FreeBSD Release 1.1 or 1.1.5.1
INSTALL.FreeBSD-2.0 Install instructions for FreeBSD Release 2.0
INSTALL.NetBSD-0.9 Install instructions for NetBSD Release 0.9
INSTALL.NetBSD-1.0 Install instructions for NetBSD Release 1.0
Keyboard.HP Special keys and emulated VT220 keys, one style
Keyboard.VT Special keys and emulated VT220 keys, other style
Makefile Makefile for the pcvt.4 manualpage
Manifest This file
NotesAndHints Random notes and hints
TestedHardware A list of tested Hardware, this is just what we got ...
ToDo A list of things to do
pcvt.4 Manual page for the driver and ioctl's
FILES AND DIRECTORIES - Etc
--------------------------------------------------------------------------------
MAKEDEV.pcvt A shell script to mknod the device files
Terminfo A terminfo entry for the emulator, this IS in
fact a VT220 terminfo entry !
Termcap A termcap entry for the emulator, this IS in fact
a series of VT220 termcap entries which
are extended by 24/25/40/50 lines, 80/132
columns and HP-function key labels
pcvt.el GNU emacs configuration
rc.local sample script for driver initialization
ttys.pcvt.netbsd sample /etc/ttys.pcvt for NetBSD-current
ttys.pcvt.freebsd sample /etc/ttys.pcvt for FreeBSD 1.1R
ttys.pccons.netbsd sample /etc/ttys.pccons for NetBSD-current
ttys.pccons.freebsd sample /etc/ttys.pccons for FreeBSD 1.1R
uemacs.tar.Z.uu an example of how to use the function key labels.
It consists of some files from/for MicroEmacs 3.11a:
- dot-emacsrc, to be moved to /usr/local/.emacsrc,
startup file for micro emacs, contains setup of
the function key labels
- emacs.hlp, interactive uemacs help system
- unix.c-3.11a the source for the terminal handling
xmodmap-german X-server german keyboard mapping sample
FILES AND DIRECTORIES - Util
--------------------------------------------------------------------------------
directory description
--------- ---------------------------------------------------------------
loadfont Program to download charactersets into EGA/VGA character
generator memory.
cursor Very simple program to set the cursor shape.
scon Program to control various aspects of terminal emulation,
such as: emulation mode, screen switching etc.
kcon Program to control various aspects of the keyboard such as
key remapping for national keyboards etc.
keycap A library for accessing the keycap database
ispcvt A short program usable in shell scripts to verify that the
current running kernel has pcvt compiled in and that the
the utility version and the driver version are the same.
fontedit A program to edit VT220 downloadable character sets.
userkeys A program to edit the VT220 programmable function keys.
fonts Contains uuencoded binary fontfiles following the naming rule:
vt220<X>.<YYY>.uu
<X> can be 'l' or 'h', where 'l' stands for a standard
IBM II charset and is to be loaded first for the
base characterset to support a desired resolution,
and 'h' is the extended characterset needed for proper
VT220 emulation and is to be loaded as the second set
in addition to the above mentioned base characterset.
<YYY> is the identifier for the character cell size, currently
we have:
808 = 8x8 - 50 lines on VGA, 43 lines on EGA
810 = 8x10 - 40 lines on VGA
814 = 8x14 - 28 lines on VGA, 25 lines on EGA
816 = 8x16 - 25 lines on VGA
Files distributed:
vt220l.808.uu, vt220h.808.uu
vt220l.810.uu, vt220h.810.uu
vt220l.814.uu, vt220h.814.uu
vt220l.816.uu, vt220h.816.uu
vttest A VT100 compatibility tester. This is a test tool for
VT100 emulation writers and terminal buyers.
demo - chardemo.vt and colors.vt: These two files are from the
MSDOS-Kermit distribution from the Columbia University.
They can be "cat"-ed to the terminal screen and display
all supported VT220 charactersets and all possible colors
respectively.
- sgr.vt: A demonstration of the various display enhancement
combinations for the DECSGR escape sequence.
- some other VT animations i collected over the time and a
program to play them on pcvt with adjustable delay.
fed - a simple, System V curses based font-editor for the EGA/VGA
fonts in the above mentioned font - directory.
Fed was developed using Zeyd M. Ben-Halim's ncurses library,
which is available by ftp from netcom.com:pub/zmbenhal/.
mcon - a program to control the mouse emulation via the keyboard
kbdio - keyboard controller debugging utility
vgaio - a program to read and write VGA registers.
---------------------- CAUTION ------------------------------
Because you are able to change the timings without check
or warning, this program may permanently damage your monitor.
If you don't know what you are doing, DO NOT USE IT !!!!!!!!!
-------------------------------------------------------------
set2061 - a program to set the programmable clock generator on my S3-
based ELSA Winner 1000 VGA board.
---------------------- CAUTION ------------------------------
Because you are able to change the timings without check
or warning, this program may permanently damage your monitor.
If you don't know what you are doing, DO NOT USE IT !!!!!!!!!
-------------------------------------------------------------

View File

@ -1,321 +0,0 @@
Random Notes and Hints Last Edit-Date: [Sun Apr 2 18:28:09 1995]
--------------------------------------------------------------------------------
First of all, please read the file BugList in this directory !
Can't get pcvt working on a ThinkPad
===============================================================================
Anyway, back to the keyboard. The problem is that by default the
ThinkPad uses PS/2 scan code mode.
You can fix this by using an option and building a kernel, as shown
below.
] Just for the record, in case someone else is asking for this: Al's
] confirmation that pcvt w/ PCVT_SCANSET=2 works for the ThinkPad:
]
] As Al Elia wrote:
] | Date: Mon, 28 Nov 1994 18:24:42 GMT
] | From: Al Elia <aelia%aelia.student.harvard.edu@sax.sax.de>
] | Message-Id: <199411281824.SAA01554@aelia.student.harvard.edu>
] | To: joerg_wunsch@bonnie.tcd-dresden.de
] | Subject: Re: Anyone got FreeBSD 1.1.5.1 running on a ThinkPad?
] |
] | PCVT_SCANSET=2 worked...I had put in PCVT_SCAN_SET=2 (Doh!)
] |
] | --Al Elia
] | <aelia@aelia.student.harvard,edu>
(Terry Lambert quoting Joerg Wunsch quoting Al Elia)
If one of the "lock" keys is pressed, LEDs do not get updated, keyboard hangs
===============================================================================
This entry used to be a long time in the BugList file, and i could never
reproduce the problem. Today i got an explanation in german from someone
owning such a keyboard, i'll try to translate:
"This are old keyboards manufactured (~1985/1986) which manage their LED
setting only internally.
It is not possible to set the LEDs from the (main-) processor, if you
try, the keyboard processor hangs and the PC has to be reset by switching
power on and off, hard- and/or softreset does not work in this case.
Workaround: recompile pcvt with the LED update removed"
In other words, define PCVT_NO_LED_UPDATE if you have such a beast!
Cursor not visible anymore in 40 and 50 lines mode
===============================================================================
You have programmed an underline cursor in i.e. 28 line mode by doing
"cursor -s 10 -e 12". Then you switch to 40 line mode using "scon -s 40".
At this point the cursor is no longer visible because the 40 line font
is only 10 pixels high and the cursor size is programmed with a value
expressing its size from the top down and NOT from the bottom up!
If anyone has a good idea how to solve this problem, please tell me!
The only solution i see so far is having some sort of "generic" cursor
sizes/descriptions (i.e. underline, rectangle, block) which are
recalculated in case of a switch to another line size.
386BSD port
===============================================================================
I don't have access to a 386BSD 0.1 machine anymore so the 386BSD pcvt is
considered unsupported and will disappear in the future.
386BSD support was dropped with release 3.20.
Keyboard hangs after first update of keyboard LED's
===============================================================================
Define PCVT_NO_LED_UPDATE and recompile pcvt. (Or, get yourself a better
keyboard. Some keyboards just don't work the documented way, this fact is
"normally" masked by the manufacturers BIOS but unhides when one accesses
the hardware directly.)
Garbled screen when running vi
===============================================================================
When the terminal speed in the tty structure is set to low speeds (i.e. 1200
Baud), pcvt shows a strange behaviour in some environments due to the changed
screen update sequences from vi.
Please check your shell startup files, /etc/ttys and /etc/gettytab and change
the baudrate (i.e. by using stty(1)) to a higher value, i.e. 19200 Baud.
Since i'm not a vi specialist, i never managed to find out wheter to blame
vi or pcvt.
Stty influences on the driver
===============================================================================
There used to be an entry in the BugList:
(printf with 9 x tab) printf "\n\t\t\t\t\t\t\t\t\tGotcha" works ok,
while one tab more: printf "\n\t\t\t\t\t\t\t\t\t\tGotcha" doesn't
work (it doesn't print Gotcha at column 80, but at column 131).
This was solved some time ago:
On another note: if I use stty xtabs, the 'printf "\t\t\t\t\t\t\t"
bug goes away. With stty xtabs the tab handling is done in the kernel.
(See also below: "Vttest shows strange results")
After running some graphics application, the cursor is stuck on the
bottom line, though everything else appears well
===============================================================================
Though this might initially appear to be a driver problem, it's rather
an application program's bogosity. The cursor update is done asynchron-
ously (to gain output speed), but this cursor update is inhibited while
an application has put a virtual terminal into ``graphics mode'' (i.e.,
the application program tells the driver that it's now responsible for
anything and all on this vty). This is notably the case while X11 is
running.
If the application fails to properly shut down itself, the terminal
might be left in an undefined state. The driver stand no chance there,
even if it could detect this bad status, since it doesn't know enough
about each piece of hardware to deal with. One possibility is that
the X server has been shot up and didn't get it to do its cleanups.
Another case (which i've often noticed on my slow notebook) is, killing
the Xserver is too slow for the (unfortunately hard-coded) 10-second
timeout from xinit, so it's being aborted ridiculously. (``X server
slow to shut down, sending KILL signal.'') This way, the state of
damage might range from ``almost okay, but cursor is stuck'' up to
a totally unusable machine (moon bitmap from xphoon still displayed,
no keyboard responses, only network is working and can be used to
shut down cleanly).
If the state of damage is only minimal, you might try to run the pure
X server on that vty again, and exit it with Ctrl-Alt-BkSpc. This might
be a workaround.
Vttest shows strange results
===============================================================================
Verify your stty "oxtabs" settings, it has to be "oxtabs", NOT "-oxtabs".
Get yourself an original DEC terminal to verify vttest's output, i have
until now not seen any (!) VTxxx clone, which does it right !!!
VT220-like Keyboard Layout
===============================================================================
I have to say, i don't use it and i don't like it, so it's mostly unsupported
and untested. Patches welcome!
132-column mode
===============================================================================
There are known difficulties running pcvt in 132 column mode in conjunction
with X. Switching to 132 column mode does not only depend on a given chipset,
but on the board/manufacturers method of clock generation also. Even if your
chipset is detected, there may be still a problem with your board and it's
method of generating clocks. You may run in severe difficulties if your
board has a programmable clock generator and you run X and you switch from
132 col mode into X and back.
I have currently no idea how to solve this, other than having a similar
scheme as XFree86 applied to pcvt: Letting the user probe his board by using
SuperProbe and recompiling pcvt according to the result.
I stumbled a bit deeper into this with my ELSA Winner 1000, which is equipped
with a ICD2061 clock synthesizer chip. For 132 column mode to work properly,
clock generator 2 must deliver 40 MHz to the S3 VGA chip, but this value has
to be programmed or initialized. If this VGA board has ever been switched
into 132 colums, i.e. in my case from a DOS program, it will continue to do
so until X runs or the machine is power cycled. If that occurs, the clock
generator 2 does contain nothing or garbage (in case of power cycling) or it
does contain the value for the current resolution in X in case of having been
in the X Server screen recently.
The X Server reprograms the clock generator each time the server is entered,
so the only thing to do is to reprogram the clock generator too when pcvt is
entered. Until now i found no way of identifying the clock oscillator chip
used, so an automatic clock switching seems to be a problem.
NetBSD 0.9 and Xfree86 2.0
===============================================================================
To get the X server up and running on 0.9, you have to compile pcvt with
PCVT_USL_VT_COMPAT disabled, otherwise X (and SuperProbe) will hang the
video driver (not the whole machine !). This bug is reproducible but not
found yet ...
This does not apply to NetBSD-current, 386BSD and FreeBSD.
X server ioctl compatibility:
===============================================================================
The compatibility X-Mode ioctl commands CONSOLE_X_MODE_ON and
CONSOLE_X_MODE_OFF should not be used intermixed with the USL VT style
commands on another virtual terminal. NB, that this situation could happen
if you run an XFree86 2.0 server on one virtual terminal and attempt to
run SuperProbe version 1.0 (as delivered with the XFree86 2.0 release)
on another vty. SuperProbe is still using the old commands in order to
gain IO privileges.
Since the old commands cannot care for things like terminal switching,
serious corruption could result from this, which need not to be detected
immediately (i.e., apparently SuperProbe ran well). Known problems are
font corruptions after the X server has been shut down later, or palette
flickers in 1-second intervals due to an erroneously re-enabled screen
saver.
Once that SuperProbe has been fixed in its release to use the USL VT style
commands, any support for the old CONSOLE_X_MODE_XXX commands will be
eliminated.
(Recent comment: SuperProbe 1.3 has been fixed. It will be delivered with
XFree86 2.1.)
How to set the foreground intensity to high on VGA mono screens:
===============================================================================
try to issue the command: "scon -p8,60,60,60", EXPERIMENT !!!
How to change the color palette on VGA cards:
===============================================================================
try out the following commands:
/usr/local/bin/scon -d/dev/ttyv0 -pblack:0,0,0 -pblue:20,20,40
/usr/local/bin/scon -d/dev/ttyv0 -pbrown:55,55,15 -plightgray:0,42,0
/usr/local/bin/scon -d/dev/ttyv1 -pblack:42,42,42 -pblue:60,60,60
/usr/local/bin/scon -d/dev/ttyv1 -pbrown:60,60,30 -plightgray:30,10,0
/usr/local/bin/scon -d/dev/ttyv2 -pblack:42,42,42 -pblue:63,63,63
/usr/local/bin/scon -d/dev/ttyv2 -pbrown:60,60,20 -plightgray:0,22,0
/usr/local/bin/scon -d/dev/ttyv3 -pblack:38,38,38 -pblue:63,63,63
/usr/local/bin/scon -d/dev/ttyv3 -pbrown:60,40,0 -plightgray:0,0,20
("scon -p default" resets the colors ...)
I have the screensaver compiled in, but can't see any effect
===============================================================================
Don't forget to turn it on with the scon utility. E.g.,
scon -t 120
sets the timeout to 2 minutes.
Your Notebook uses the NumLock state to switch half of the keyboard into a
numeric keypad
===============================================================================
Sigh, each time you leave "vi", your NumLock LED is on again and you
get a "6" instead of "o"? Try
options "PCVT_INHIBIT_NUMLOCK"
this prevents applications from turning NumLock on/off (except the
Xserver - but you want this).
Your notebook significantly loses contrast when using pcvt
===============================================================================
Pcvt turns off the "high intensity" attribute bit internally (to enable
the use of a 512-characters charset). Some notebooks hard-code the out-
put intensity versus the character attribute though (i know it for a
Cirrus Logic CL-GD610/620 chipset).
As a quick & dirty workaround, you can reverse what pcvt did to the
Attribute Controller. Do not hack pcvt_sup.c, instead patch your
VGA registers during rc.local with the help of the vgaio utility:
echo "ar12=0f" | vgaio > /dev/null
For the CL-GD610/620, i'm remapping some attribute registers and
get a simple gray scale emulation with this (i.e., i DO NOT use
the hack above):
eagle_id=`echo 'cr1f?' | vgaio | cut -dx -f2`
echo "sr 6 = $eagle_id" | vgaio > /dev/null # enable extended regs
echo "sr d5 = 40" | vgaio > /dev/null # not inverse, enable
# color emulation
echo "ar0=0;ar1=9;ar2=12;ar3=1b;ar4=24;ar5=2d;ar6=36;ar7=3f"|vgaio>/dev/null
echo "ar8=0;ar9=9;ara=12;arb=1b;arc=24;ard=2d;are=36;arf=3f"|vgaio>/dev/null
NOTE THAT THIS IS ONLY FROM EXPERIMENTS! There's no warranty that something
like this wouldn't damage your screen/VGA!
(If you have chipset documentation, you're lucky...)
How to set the "LINES"-Environment variable for sh/csh:
===============================================================================
(Note: this is mostly obsoleted now since the driver properly generates
SIGWINCH'es to notify applications about a changed screen size.)
first for the csh:
alias linesw scon -s \!^ \; setenv LINES \!^
now for the bash/ash/sh/bash users:
linesw()
{
scon -s $1
LINES=$1; export LINES
}
/* EOF */

View File

@ -1,79 +0,0 @@
Tested Hardware List last edit-date: [Mon Feb 20 19:36:20 1995]
This is by no means a complete list of hardware pcvt runs on, it is just
compiled from reports people sent in and from hardware owned/loaned !
TESTED VIDEO BOARDS (80 column operation)
--------------------------------------------------------------------------------
Manufacturer Chipset Monitor Notes
------------------------------ -------------- ---------------------- --------
2theMax (?) ET4000 VGA Color
Video7 Inc. VEGA VGA VGA Color/Mono (2)
Diamond Stealth VRAM S3 NEC 3FGx
Trident TVGA 8800CS NEC 3D
Trident TVGA 9000B VGA Color/Mono (2)
Data General C&T P82C604 VGA Color
NoName Hercules W86855AF Mono
Tandon Monochrome (Hercules) TD3088A Tandon Mono
Kyocera ML III25 (Mainboard) WD90C00 JVC VGA Color (1)
Kyocera ML III25 (Mainboard) WD90C00 Nokia CED1 VGA Mono (1)
Kyocera ML IIII33 (Mainboard) WD90C11 Nokia CED1 VGA Mono (1)
NoName VGA TVGA9000B JVC VGA Color (1,2)
Tseng Labs ET3000AX JVC VGA Color (2)
Video7 Inc. VEGA VGA VGA Mono (2)
Video7 Inc. 1024i VGA Mono (2)
ELSA GmbH S3 928 VGA Mono/Color
IBM EGA 6845 Monochrome (2,3)
IBM EGA 6845 Tandon EGA Color (2,3)
Trident TVGA 8900CL VGA Mono (2)
Notes:
(1) - slight display distortion when switching between screens
(2) - remarkable display distortion and/or loss of sync while loading fonts
(3) - snow while scrolling with HP function key labels turned on
TESTED VIDEO BOARDS (132 column operation)
--------------------------------------------------------------------------------
Manufacturer Chipset Monitor Notes
------------------------------ -------------- ---------------------- --------
2theMax (?) ET4000 VGA Color
2theMax (?) ET4000 Tandon VGA Mono
Kyocera ML III33 (Mainboard) WD90C11 Tandon VGA Mono (1,2)
Kyocera ML IIII33 (Mainboard) WD90C11 Tandon VGA Mono (1,2)
Kyocera ML IIII33 (Mainboard) WD90C11 VGA Color (1,2)
Trident (?) TVGA9000B VGA Mono (1,3)
Tseng Labs (?) ET3000 NEC 3D
ELSA GmbH S3 928 VGA Mono/Color
Trident TVGA 8900CL VGA Mono
Notes:
(1) - slight display distortion when switching between screens
(2) - all fonts must be loaded in ascending order prior to switching to 132 cols
(3) - remarkable display distortion and/or loss of sync while loading fonts
TESTED KEYBOARDS
--------------------------------------------------------------------------------
Manufacturer Type Layout
------------------------------ ---------------------- ------------------------
Cherry MF II US
Cherry/Tandon MF II German
Hewlett-Packard MF II US
Hewlett-Packard MF II German
Tatung AT German
Kyocera MF II German
There is absolutely NO support for the ancient PC-keyboards (they had 83 keys).
There is only limited support for AT-keyboards (they have 84 keys, and a
separate numeric keypad, they don't have F9-F12 keys) because the emulator
needs F9-F12 for control functions, and due to the current design of the
keyboard driver there is no (full) support for national keyboards because
of the lack of a ALTGR key.
MF-keyboards are fully supported, 101- and 102-key versions.

View File

@ -1,13 +0,0 @@
Things to do Last Edit-Date: [Sun Apr 2 18:29:16 1995]
================================================================================
- implement secondary DA request: ESC [ > c and/or ESC [ > 0 c
- implement user settable primary DA response and secondary DA response
- retrying for a non-connected keyboard in doreset() must be made cpu and
speed independent. in case of a not connected keyboard, a fast machine
runs doreset() fast and a slow machine runs doreset() slow - bad !!
- remove single screen X server support and make PCVT_USL_VT the default

View File

@ -1,13 +0,0 @@
# $Id$
FILES= Termcap Terminfo pcvt.el rc.local uemacs.tar.Z.uu xmodmap-german
NOOBJ=
beforeinstall:
${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} ${FILES} \
${DESTDIR}${BINDIR}/Etc
afterdistribute: beforeinstall
.include <bsd.prog.mk>

View File

@ -1,284 +0,0 @@
#---------------------------------------------------------------------------
#
# pcvt termcap database entry (release 3.20)
#
# last edit-date: [Sun Apr 2 18:31:04 1995]
#
# -hm new entries for SR and SF
# -hm removing duplicate entries
#
#---------------------------------------------------------------------------
#---------------------------------------------------------------------------
# NetBSD/FreeBSD vt220 terminal emulator console (pc keyboard & monitor)
# termcap entries for pure VT220-Emulation and 25, 28, 35, 40, 43 and
# 50 lines entries
# 80 columns
#---------------------------------------------------------------------------
pcvt25|dec vt220 with 25 lines:\
:li#25:\
:co#80:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;25r\E[25;1H:\
:tc=pcvtXX:
pcvt28|dec vt220 with 28 lines:\
:li#28:\
:co#80:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;28r\E[28;1H:\
:tc=pcvtXX:
pcvt35|dec vt220 with 35 lines:\
:li#35:\
:co#80:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;35r\E[35;1H:\
:tc=pcvtXX:
pcvt40|dec vt220 with 40 lines:\
:li#40:\
:co#80:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;40r\E[40;1H:\
:tc=pcvtXX:
pcvt43|dec vt220 with 43 lines:\
:li#43:\
:co#80:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;43r\E[43;1H:\
:tc=pcvtXX:
pcvt50|dec vt220 with 50 lines:\
:li#50:\
:co#80:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;50r\E[50;1H:\
:tc=pcvtXX:
#---------------------------------------------------------------------------
# NetBSD/FreeBSD vt220 terminal emulator console (pc keyboard & monitor)
# termcap entries for pure VT220-Emulation and 25, 28, 35, 40, 43 and
# 50 lines entries
# 132 columns
#---------------------------------------------------------------------------
pcvt25w|dec vt220 with 25 lines and 132 cols:\
:li#25:\
:co#132:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;25r\E[25;1H:\
:tc=pcvtXX:
pcvt28w|dec vt220 with 28 lines and 132 cols:\
:li#28:\
:co#132:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;28r\E[28;1H:\
:tc=pcvtXX:
pcvt35w|dec vt220 with 35 lines and 132 cols:\
:li#35:\
:co#132:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;35r\E[35;1H:\
:tc=pcvtXX:
pcvt40w|dec vt220 with 40 lines and 132 cols:\
:li#40:\
:co#132:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;40r\E[40;1H:\
:tc=pcvtXX:
pcvt43w|dec vt220 with 43 lines and 132 cols:\
:li#43:\
:co#132:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;43r\E[43;1H:\
:tc=pcvtXX:
pcvt50w|dec vt220 with 50 lines and 132 cols:\
:li#50:\
:co#132:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;50r\E[50;1H:\
:tc=pcvtXX:
#---------------------------------------------------------------------------
# NetBSD/FreeBSD vt220 terminal emulator console (pc keyboard & monitor)
# termcap entries for HP-Emulation and 25, 28, 35, 40, 43 and 50
# lines entries. note that the HP-Emulation uses the bottom 3 lines
# for status and function key labels, so we get always 3 lines less.
# "Xs" is a nonstandard, private flag indicating HP-like fkey labels
# 80 column entries
#---------------------------------------------------------------------------
pcvt22h|dec vt220 with HP-fkey labels and 22 lines:\
:li#22:\
:co#80:\
:Xs:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;22r\E[22;1H:\
:tc=pcvtXX:
pcvt25h|dec vt220 with HP-fkey labels and 25 lines:\
:li#25:\
:co#80:\
:Xs:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;25r\E[25;1H:\
:tc=pcvtXX:
pcvt32h|dec vt220 with HP-fkey labels and 32 lines:\
:li#32:\
:co#80:\
:Xs:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;32r\E[32;1H:\
:tc=pcvtXX:
pcvt37h|dec vt220 with HP-fkey labels and 37 lines:\
:li#37:\
:co#80:\
:Xs:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;37r\E[37;1H:\
:tc=pcvtXX:
pcvt40h|dec vt220 with HP-fkey labels and 40 lines:\
:li#40:\
:co#80:\
:Xs:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;40r\E[40;1H:\
:tc=pcvtXX:
pcvt47h|dec vt220 with HP-fkey labels and 47 lines:\
:li#47:\
:co#80:\
:Xs:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;47r\E[47;1H:\
:tc=pcvtXX:
#---------------------------------------------------------------------------
# NetBSD/FreeBSD vt220 terminal emulator console (pc keyboard & monitor)
# termcap entries for HP-Emulation and 25, 28, 35, 40, 43 and 50
# lines entries. note that the HP-Emulation uses the bottom 3 lines
# for status and function key labels, so we get always 3 lines less.
# "Xs" is a nonstandard, private flag indicating HP-like fkey labels
# 132 column entries
#---------------------------------------------------------------------------
pcvt22hw|dec vt220 with HP-fkey labels, 22 lines and 132 cols:\
:li#22:\
:co#132:\
:Xs:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;22r\E[22;1H:\
:tc=pcvtXX:
pcvt25hw|dec vt220 with HP-fkey labels, 25 lines and 132 cols:\
:li#25:\
:co#132:\
:Xs:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;25r\E[25;1H:\
:tc=pcvtXX:
pcvt32hw|dec vt220 with HP-fkey labels, 32 lines and 132 cols:\
:li#32:\
:co#132:\
:Xs:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;32r\E[32;1H:\
:tc=pcvtXX:
pcvt37hw|dec vt220 with HP-fkey labels, 37 lines and 132 cols:\
:li#37:\
:co#132:\
:Xs:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;37r\E[37;1H:\
:tc=pcvtXX:
pcvt40hw|dec vt220 with HP-fkey labels, 40 lines and 132 cols:\
:li#40:\
:co#132:\
:Xs:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;40r\E[40;1H:\
:tc=pcvtXX:
pcvt47hw|dec vt220 with HP-fkey labels, 47 lines and 132 cols:\
:li#47:\
:co#132:\
:Xs:\
:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;47r\E[47;1H:\
:tc=pcvtXX:
#---------------------------------------------------------------------------
# main entry, without "is" and "li" capabilities
#
# NOTE: because the 386BSD "vi"/"elvis" seems to have a bug if
# both "ic" and "im" are specified (an original VT220
# shows the same buggy behaviour!), "ic" has been taken
# out of this entry. for reference, it should be "ic=\E[@".
#
#---------------------------------------------------------------------------
pcvtXX|pcvt vt200 emulator (DEC VT220):\
:AL=\E[%dL:\
:DC=\E[%dP:\
:DL=\E[%dM:\
:DO=\E[%dB:\
:IC=\E[%d@:\
:LE=\E[%dD:\
:RI=\E[%dC:\
:SF=\E[%dS:\
:SR=\E[%dT:\
:UP=\E[%dA:\
:ae=^O:\
:al=\E[L:\
:am:\
:as=^N:\
:bl=^G:\
:bs:\
:cb=\E[1K:\
:cd=\E[J:\
:ce=\E[K:\
:cl=\E[H\E[J:\
:cm=\E[%i%d;%dH:\
:cr=^M:\
:cs=\E[%i%d;%dr:\
:ct=\E[3g:\
:dc=\E[P:\
:dl=\E[M:\
:do=^J:\
:ei=\E[4l:\
:ho=\E[H:\
:im=\E[4h:\
:it#8:\
:k1=\E[17~:\
:k2=\E[18~:\
:k3=\E[19~:\
:k4=\E[20~:\
:k5=\E[21~:\
:k6=\E[23~:\
:k7=\E[24~:\
:k8=\E[25~:\
:kD=\E[3~:\
:kH=\E[4~:\
:kI=\E[2~:\
:kN=\E[6~:\
:kP=\E[5~:\
:kb=\177:\
:kd=\EOB:\
:ke=\E[?1l\E>:\
:kh=\E[1~:\
:kl=\EOD:\
:km:\
:kr=\EOC:\
:ks=\E[?1h\E=:\
:ku=\EOA:\
:le=^H:\
:mb=\E[5m:\
:md=\E[1m:\
:me=\E[m:\
:mi:\
:mr=\E[7m:\
:ms:\
:nd=\E[C:\
:pb#16000000:\
:pt:\
:rc=\E8:\
:rf=/usr/share/tabset/vt100:\
:rs=\Ec\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:\
:sc=\E7:\
:se=\E[27m:\
:sf=\ED:\
:so=\E[7m:\
:sr=\EM:\
:st=\EH:\
:ue=\E[24m:\
:up=\E[A:\
:us=\E[4m:\
:vt#3:\
:xn:
#---------------------------- E O F -------------------------------------------

View File

@ -1,41 +0,0 @@
pcvt25h|pcvt vt220 emulator video driver 80 cols,
lines#25, cols#80,
am, bel=^G, blink=^[[5m, bold=^[[1m, clear=^[[H^[[J,
cr=^M, csr=^[[%i%p1%d;%p2%dr, cub1=^H, cub=^[[%p1%dD, cud1=^J,
cud=^[[%p1%dB, cuf1=^[[C, cuf=^[[%p1%dC, cup=^[[%i%p1%d;%p2%dH,
cuu1=^[[A, cuu=^[[%p1%dA, dch1=^[[P, dch=^[[%p1%dP, dl1=^[[M,
dl=^[[%p1%dM, ed=^[[J, el=^[[K, home=^[[H, ht=^I, hts=^[H,
ich1=^[[@, ich=^[[%p1%d@, il1=^[[L, il=^[[%p1%dL, ind=^[D,
indn=^[%p1%dD, is1=^[>^[[?3l^[[?4l^[[?5l^[[?7h^[[?8h^[[1;25r^[[25;1H,
it#8, kbs=^?, kcub1=^[OD, kcud1=^[OB, kcuf1=^[OC, kcuu1=^[OA,
kdch1=^[[3~, kf1=^[[17~, kf2=^[[18~, kf3=^[[19~, kf4=^[[20~,
kf5=^[[21~, kf6=^[[23~, kf7=^[[24~, kf8=^[[25~, khome=^[[1~,
kich1=^[[2~, kll=^[[4~, km, knp=^[[6~, kpp=^[[5~,
mir, msgr, nel=^M^J, pb#16000000, rc=^[8, rev=^[[7m,
rf=/usr/share/tabset/vt100, ri=^[M, rin=^[%p1%dM, rmacs=^O,
rmir=^[[4l, rmkx=^[[?1l^[>, rmso=^[[27m, rmul=^[[24m,
rs1=^[c^[>^[[?3l^[[?4l^[[?5l^[[?7h^[[?8h, sc=^[7, sgr0=^[[m,
smacs=^N, smir=^[[4h, smkx=^[[?1h^[=, smso=^[[7m, smul=^[[4m,
tbc=^[[3g, vt#3, xenl, colors#8, pairs#64, setf=\E[%p1%{30}%+%dm,
setb=\E[%p1%{40}%+%dm,
pcvt25hw|pcvt vt220 emulator video driver 132 cols,
lines#25, cols#132,
am, bel=^G, blink=^[[5m, bold=^[[1m, clear=^[[H^[[J,
cr=^M, csr=^[[%i%p1%d;%p2%dr, cub1=^H, cub=^[[%p1%dD, cud1=^J,
cud=^[[%p1%dB, cuf1=^[[C, cuf=^[[%p1%dC, cup=^[[%i%p1%d;%p2%dH,
cuu1=^[[A, cuu=^[[%p1%dA, dch1=^[[P, dch=^[[%p1%dP, dl1=^[[M,
dl=^[[%p1%dM, ed=^[[J, el=^[[K, home=^[[H, ht=^I, hts=^[H,
ich1=^[[@, ich=^[[%p1%d@, il1=^[[L, il=^[[%p1%dL, ind=^[D,
indn=^[%p1%dD, is1=^[>^[[?3l^[[?4l^[[?5l^[[?7h^[[?8h^[[1;25r^[[25;1H,
it#8, kbs=^?, kcub1=^[OD, kcud1=^[OB, kcuf1=^[OC, kcuu1=^[OA,
kdch1=^[[3~, kf1=^[[17~, kf2=^[[18~, kf3=^[[19~, kf4=^[[20~,
kf5=^[[21~, kf6=^[[23~, kf7=^[[24~, kf8=^[[25~, khome=^[[1~,
kich1=^[[2~, kll=^[[4~, km, knp=^[[6~, kpp=^[[5~,
mir, msgr, nel=^M^J, pb#16000000, rc=^[8, rev=^[[7m,
rf=/usr/share/tabset/vt100, ri=^[M, rin=^[%p1%dM, rmacs=^O,
rmir=^[[4l, rmkx=^[[?1l^[>, rmso=^[[27m, rmul=^[[24m,
rs1=^[c^[>^[[?3l^[[?4l^[[?5l^[[?7h^[[?8h, sc=^[7, sgr0=^[[m,
smacs=^N, smir=^[[4h, smkx=^[[?1h^[=, smso=^[[7m, smul=^[[4m,
tbc=^[[3g, vt#3, xenl, colors#8, pairs#64, setf=\E[%p1%{30}%+%dm,
setb=\E[%p1%{40}%+%dm,

View File

@ -1,19 +0,0 @@
;; pcvt25.el, by J"org Wunsch <joerg_wunsch@uriah.sax.de>
;;
;; pcvt is a good VT emulator
(load "term/vt220")
;; ...but i don't like `find' and `select' on `home' and `end' keys
(global-set-key [find] 'beginning-of-line)
(global-set-key [select] 'end-of-line)
;; and the f1 thru f8 keys are designated as f6 thru f13
(define-key function-key-map "\e[17~" [f1])
(define-key function-key-map "\e[18~" [f2])
(define-key function-key-map "\e[19~" [f3])
(define-key function-key-map "\e[20~" [f4])
(define-key function-key-map "\e[21~" [f5])
(define-key function-key-map "\e[23~" [f6])
(define-key function-key-map "\e[24~" [f7])
(define-key function-key-map "\e[25~" [f8])

View File

@ -1,264 +0,0 @@
#---------------------------------------------------------------------------
#
# sample rc.local
# ---------------
#
# last edit-date: [Sun Feb 19 19:20:42 1995]
#
#---------------------------------------------------------------------------
#
# NOTE:
# assumptions: - 8 screens configured
# - /dev/ttyv0 ... /dev/ttyv7 exist
#
#---------------------------------------------------------------------------
# start xdm on screen 8
#xdm_start=YES
xdm_start=NO
# setup german keyboard layout
#set_keybd=YES
set_keybd=NO
# setup keyboard delay & rate
set_keydr=YES
# very fast settings
set_keydr_rate=0
set_keydr_delay=0
#set_keydr=NO
# constuct a new /etc/motd file
construct_motd=NO
#construct_motd=YES
# setup cursor start and end scanline
set_cursor=YES
#set_cursor=NO
# block cursor
set_cur_start=0
set_cur_end=15
#-----------------------------------------------------
# construct /etc/motd file
#-----------------------------------------------------
if [ X${construct_motd} = X"YES" ]
then
if [ -f /netbsd ]
then
if [ ! -f /etc/motd ]; then
install -c -o root -g wheel -m 664 /dev/null /etc/motd
fi
T=/tmp/_motd
rm -f $T
sysctl -n kern.version | sed 1q > $T
echo "" >> $T
sed '1,/^$/d' < /etc/motd >> $T
cmp -s $T /etc/motd || cp $T /etc/motd
rm -f $T
echo 'runtime link editor directory cache'
ldconfig
else
T=/tmp/_motd
rm -f $T
uname -a > $T
echo "" >> $T
sed '1,/^$/d' < /etc/motd >> $T
cp $T /etc/motd
chmod 644 /etc/motd
rm -f $T
fi
fi
#-----------------------------------------------------
# local daemons
#-----------------------------------------------------
echo -n 'starting local daemons:'
# Kerberos runs ONLY on the Kerberos server machine
if [ X${kerberos_server} = X"YES" ]; then
echo -n ' kerberos'; kerberos >> /var/log/kerberos.log &
fi
echo '.'
#-----------------------------------------------------
# check for correct driver and driver version matching
#-----------------------------------------------------
if [ -x /usr/sbin/ispcvt ]
then
if /usr/sbin/ispcvt
then
#--------------------------------------------------
# loading fonts into vga
#--------------------------------------------------
echo 'console driver type: pcvt'
if [ -x /usr/sbin/loadfont -a -x /usr/sbin/scon ]
then
adaptor=`/usr/sbin/scon -a`
if [ $adaptor = VGA ]
then
echo 'loading 25 lines base font into character set 0'
/usr/sbin/loadfont -c0 -f/usr/share/misc/pcvtfonts/vt220l.816
echo 'loading 25 lines extension font into character set 1'
/usr/sbin/loadfont -c1 -f/usr/share/misc/pcvtfonts/vt220h.816
echo 'loading 28 lines base font into character set 2'
/usr/sbin/loadfont -c2 -f/usr/share/misc/pcvtfonts/vt220l.814
echo 'loading 28 lines extension font into character set 3'
/usr/sbin/loadfont -c3 -f/usr/share/misc/pcvtfonts/vt220h.814
echo 'loading 40 lines base font into character set 4'
/usr/sbin/loadfont -c4 -f/usr/share/misc/pcvtfonts/vt220l.810
echo 'loading 40 lines extension font into character set 5'
/usr/sbin/loadfont -c5 -f/usr/share/misc/pcvtfonts/vt220h.810
echo 'loading 50 lines base font into character set 6'
/usr/sbin/loadfont -c6 -f/usr/share/misc/pcvtfonts/vt220l.808
echo 'loading 50 lines extension font into character set 7'
/usr/sbin/loadfont -c7 -f/usr/share/misc/pcvtfonts/vt220h.808
elif [ $adaptor = EGA ]
then
echo 'loading 25 lines base font into character set 0'
/usr/sbin/loadfont -c0 -f/usr/share/misc/pcvtfonts/vt220l.814
echo 'loading 25 lines extension font into character set 1'
/usr/sbin/loadfont -c1 -f/usr/share/misc/pcvtfonts/vt220h.814
echo 'loading 35 lines base font into character set 2'
/usr/sbin/loadfont -c2 -f/usr/share/misc/pcvtfonts/vt220l.810
echo 'loading 35 lines extension font into character set 3'
/usr/sbin/loadfont -c3 -f/usr/share/misc/pcvtfonts/vt220h.810
# echo 'loading 43 lines base font into character set 2'
# /usr/sbin/loadfont -c2 -f/usr/share/misc/pcvtfonts/vt220l.808
# echo 'loading 43 lines extension font into character set 3'
# /usr/sbin/loadfont -c3 -f/usr/share/misc/pcvtfonts/vt220h.808
fi
fi
#--------------------------------------------------
# setting screen sizes and emulation
#--------------------------------------------------
if [ -x /usr/sbin/scon ]
then
if [ $adaptor = VGA ]
then
size=-s28
echo 'switching to 28 lines and VT/HP-emulation'
elif [ $adaptor = EGA ]
then
size=-s25
echo 'switching to 25 lines and VT/HP-emulation'
else
size=
echo 'switching to VT/HP-emulation'
fi
# get monitor type (mono/color)
monitor=`/usr/sbin/scon -m`
# for all screens do
for device in /dev/ttyv*
do
# setup HP mode
/usr/sbin/scon -d$device $size -H
# setup cursor size
if [ X${set_cursor} = X"YES" -a -x /usr/sbin/cursor ]
then
/usr/sbin/cursor -d$device -s$set_cur_start -e$set_cur_end
fi
# if monochrome monitor, set color palette to use a higher intensity
if [ $monitor = MONO ]
then
if [ $adaptor = VGA ]
then
/usr/sbin/scon -d$device -p8,60,60,60
fi
fi
done
# switch to screen 0
/usr/sbin/scon -c0
# set screensaver timeout to one minute
/usr/sbin/scon -t360
fi
#------------------------------------------------------
# if desired, setup keyboard for german keyboard layout
#------------------------------------------------------
if [ X${set_keybd} = X"YES" -a -x /usr/sbin/kcon ]
then
echo 'switching to german keyboard layout'
/usr/sbin/kcon -m de
fi
#------------------------------------------------------
# if desired, setup rate and delay keyboard values
#------------------------------------------------------
if [ X${set_keydr} = X"YES" -a -x /usr/sbin/kcon ]
then
echo setting keyboard typematic rate = $set_keydr_rate and delay = $set_keydr_delay
/usr/sbin/kcon -r $set_keydr_rate -d $set_keydr_delay
fi
#--------------------------------------------------
# if desired, start xdm on screen 8
#--------------------------------------------------
if [ X${xdm_start} = X"YES" -a -x /usr/X386/bin/xdm ]
then
/usr/sbin/scon -c 7
/usr/X386/bin/xdm
sleep 5
/usr/sbin/scon -c 0
fi
#--------------------------------------------------
# cp /etc/ttys corresponding to console driver
#--------------------------------------------------
if [ -f /etc/ttys.pcvt ]
then
echo 'copying /etc/ttys.pcvt -> /etc/ttys'
cp /etc/ttys.pcvt /etc/ttys
fi
else
echo 'console driver type: not pcvt or pcvt utility/driver mismatch:'
echo '--------------------------------------------------------------'
/usr/sbin/ispcvt -v
echo '--------------------------------------------------------------'
if [ -f /etc/ttys.pccons ]
then
echo 'copying /etc/ttys.pccons -> /etc/ttys'
cp /etc/ttys.pccons /etc/ttys
fi
fi
else
echo 'console driver type: not pcvt'
if [ -f /etc/ttys.pccons ]
then
echo 'copying /etc/ttys.pccons -> /etc/ttys'
cp /etc/ttys.pccons /etc/ttys
fi
fi
echo
# EOF ----------------------------------------------------------------------

View File

@ -1,594 +0,0 @@
begin 666 uemacs.tar.Z
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
C`9^`4,`HH!1P"D@%K`):`:^`6,`LH!9P"\@%[`)Z`;^`8`$D
`
end

View File

@ -1,117 +0,0 @@
! German keyboard with a programmer-like mapping,
! J"org Wunsch <joerg_wunsch@uriah.sax.de>
!
! (``programmer-like'' stands for having brackets and braces on diaeresis
! keys, whereas the ModeShifted keys result in umlauts)
!
! Note: the modifier keys are commented out, since they are remapped
! within Xconfig to match internationalization requirements
!
keycode 8 =
keycode 9 = Escape
keycode 10 = 1 exclam
keycode 11 = 2 quotedbl twosuperior
keycode 12 = 3 paragraph threesuperior
keycode 13 = 4 dollar
keycode 14 = 5 percent
keycode 15 = 6 ampersand
keycode 16 = 7 slash braceleft
keycode 17 = 8 parenleft bracketleft
keycode 18 = 9 parenright bracketright
keycode 19 = 0 equal braceright
keycode 20 = ssharp question backslash
keycode 21 = apostrophe grave
keycode 22 = Delete
keycode 23 = Tab
keycode 24 = q Q at
keycode 25 = W
keycode 26 = E
keycode 27 = R
keycode 28 = T
keycode 29 = Z
keycode 30 = U
keycode 31 = I
keycode 32 = O
keycode 33 = P
keycode 34 = bracketright braceright udiaeresis Udiaeresis
keycode 35 = plus asterisk asciitilde
keycode 36 = Return
! keycode 37 = Control_L
keycode 38 = A
keycode 39 = S
keycode 40 = D
keycode 41 = F
keycode 42 = G
keycode 43 = H
keycode 44 = J
keycode 45 = K
keycode 46 = L
keycode 47 = backslash bar odiaeresis Odiaeresis
keycode 48 = bracketleft braceleft adiaeresis Adiaeresis
keycode 49 = asciicircum degree
! keycode 50 = Shift_L
keycode 51 = numbersign apostrophe
keycode 52 = Y
keycode 53 = X
keycode 54 = C
keycode 55 = V
keycode 56 = B
keycode 57 = N
keycode 58 = m M mu
keycode 59 = comma semicolon
keycode 60 = period colon
keycode 61 = minus underscore
! keycode 62 = Shift_R
keycode 63 = KP_Multiply
! keycode 64 = Alt_L Meta_L
keycode 65 = space
! keycode 66 = Caps_Lock
keycode 67 = F1
keycode 68 = F2
keycode 69 = F3
keycode 70 = F4
keycode 71 = F5
keycode 72 = F6
keycode 73 = F7
keycode 74 = F8
keycode 75 = F9
keycode 76 = F10
! keycode 77 = Num_Lock
keycode 78 = Multi_key
keycode 79 = KP_7
keycode 80 = KP_8
keycode 81 = KP_9
keycode 82 = KP_Subtract
keycode 83 = KP_4
keycode 84 = KP_5
keycode 85 = KP_6
keycode 86 = KP_Add
keycode 87 = KP_1
keycode 88 = KP_2
keycode 89 = KP_3
keycode 90 = KP_0
keycode 91 = KP_Decimal
keycode 92 = X386Sys_Req
keycode 93 =
keycode 94 = less greater bar
keycode 95 = F11
keycode 96 = F12
keycode 97 = Home
keycode 98 = Up
keycode 99 = Prior
keycode 100 = Left
keycode 101 = Begin
keycode 102 = Right
keycode 103 = End
keycode 104 = Down
keycode 105 = Next
keycode 106 = Insert
keycode 107 = Delete
keycode 108 = KP_Enter
! keycode 109 = Control_R
keycode 110 = Pause
keycode 111 = Print
keycode 112 = KP_Divide
! keycode 113 = Alt_R Meta_R
keycode 114 = Break

View File

@ -1,15 +0,0 @@
SUBDIR= Doc Etc
FILES= README.FIRST
beforeinstall:
for file in ${FILES}; \
do \
${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
${.CURDIR}/$$file ${DESTDIR}${BINDIR}/$$file ; \
done
afterdistribute: beforeinstall
.include "Makefile.inc"
.include <bsd.subdir.mk>

View File

@ -1,3 +0,0 @@
DISTRIBUTION= doc
BINDIR= /usr/share/pcvt
BINMODE= 0444

View File

@ -1,291 +0,0 @@
================================================================================
| |
| P C V T - VT220 Terminal Emulation Driver |
| ------------------------------------------- |
| |
| NetBSD 0.9, 1.0 |
| FreeBSD 1.0, 1.1, 1.1.5.1, 2.0 |
| |
| Release 3.20 April 1995 |
| |
| ---------------------------- |
| ========>> BETA 24 <<======= |
| ---------------------------- |
| |
| (c) Copyright 1992,1993,1994,1995 by |
| |
| Hellmuth Michaelis |
| Eggerstedtstrasse 28 |
| 22765 Hamburg |
| Europe |
| |
| For the contributors copyrights which apply to parts of the source |
| see the header sections of the respective source files. |
| |
================================================================================
Written by: Hellmuth Michaelis (hm@hcs.de)
The major contributors to pcvt are Brian and Joerg, pcvt would not be what it
is without the help, the support and the code from Joerg:
Brian Dunford-Shore (brian@athe.wustl.edu)
wrote parts of the EGA/VGA hardware handling and
some of the more ugly aspects of the VT220.
Joerg Wunsch (joerg_wunsch@uriah.heep.sax.de)
added ALL support for XFree86, the screensaver sub-
system and support for FreeBSD (and much more ...).
I have to thank the following people for their help, for beta-testing, bugfixes,
code, keymaps, suggestions, hints, patience and too much more to mention:
Scott Turner (scotty@gagetalker.com)
Peter Galbavy (peter@wonderland.org)
Michael Havemester (tik@abqhh.hanse.de)
Gordon L. Burditt (gordon@sneaky.lonestar.org)
Bruce Evans (bde@runx.oz.au)
Heiko W. Rupp (hwr@pilhuhn.ka.sub.org)
Carsten Lutz (clu@malihh.hanse.de)
Christian Rohrmueller (internal@doitcr.doit.sub.org)
Andy Duplain (duplain@rtf.bt.co.uk)
Marko Karppinen (dreamer@purkki.apu.fi)
Onno van der Linden (c/o frank@fwi.uva.nl)
Dave Nelson (dcn@ignatz.acs.depaul.edu)
Mark Weaver (Mark_Weaver@brown.edu)
John Brezak (brezak@apollo.hp.com)
Jan-Oliver Neumann (jan@encap.hanse.de)
Kim Andersen (kim@dde.dk)
Michael Graff (explorer@iastate.edu)
Randy Terbush (randyt@cse.unl.edu)
Benjamin Lewis (blewis@vet.vet.purdue.edu)
Daniel Harris (daniel@reubio.apana.org.au)
Alistair G. Crooks (agc@uts.amdahl.com)
Szabolcs Szigeti (pink@bagira.fsz.bme.hu)
Charles Hannum (mycroft@gnu.ai.mit.edu)
Thomas Gellekum (thomas@ghpc8.ihf.rwth-aachen.de)
Matthieu Herrb (matthieu@laas.fr)
John A. Perry (perry@jpunix.com)
John Kohl (jtk@kolvir.blrc.ma.us)
Brian Moore (ziff@eecs.umich.edu)
Martin Husemann (martin@euterpe.owl.de)
Lon Willett (willett@math.utah.edu)
Mark Willey (mwilley@mipos2.intel.com)
Bill Sommerfeld (sommerfeld@orchard.medford.ma.us)
Rafal Boni (r-boni@uiuc.edu)
Thomas Eberhardt (thomas@mathematik.uni-bremen.de)
History (see also Doc/ChangeLog)
--------------------------------------------------------------------------------
Release Changes/Features
------------- ----------------------------------------------------------------
1.00 (08/92) Released as "pccons_vga" to alt.sources, VT100 emulation
2.00 (01/93) VT220 emulation, many bugfixes and enhancements
2.10 (03/93) Fixed bugs, monochrome environments, configuration changes
2.20 (10/93) never released (experimental internal release)
3.00 (03/94) Support for XFree86 >= 1.2, support for XFree86 2.0's
syscons/USL model for multiple X servers and/or terminal
sessions from Joerg Wunsch (Thank You, Joerg !!!), fixed
bugs, (n)curses-based EGA/VGA font editor, memory mapped
screens, full MDA/CGA virtual screen support, 132 columns
on some super VGA chipsets, support for NetBSD >= 0.9,
support for FreeBSD >= 1.0 and much more ....
(posted to comp.sources.misc, Volume 41, Issue 140-152)
3.10 (08/94) never released (experimental internal release)
3.20 Fast forward/backward scrolling from Michael Havemester,
further optimization by Charles Hannum. Keyboard queueing
for silo overflow minimization also from Michael.
Many bugfixes, cleanups and enhancements.
Support for NetBSD 1.0 and FreeBSD 2.0.
Features
--------------------------------------------------------------------------------
The 'pcvt' VT220 emulator driver has:
- Almost full DEC VT220 (VT100/VT102) Terminal functionality
- support for XFree86 >= 1.2 using the pccons model
- full multiple virtual screen / multiple X-server support
for XFree86 >= 2.0 using the USL-VT/syscons model
- Full Support for MDA, CGA, EGA and VGA display adaptors
- configurable number of virtual screens on any video board
- completely independent virtual terminals for any video board
- (24), 25, 28, 40, or 50 lines for each virtual screen on VGA's
- (24), 25, 35, or 43 lines for each virtual screen on EGA's
- Fully remappable keyboard to support national keyboards
- All VT220 character sets plus ISO Latin-1 and DEC Technical supported
- VT220 downloadable character set supported when run on EGA/VGA
- VT220 user defined keys for each virtual terminal
- Optional function key label support a 'la Hewlett-Packard
- Display function codes (0x00-0x1f/0x90-0xaf) functionality
- Optional screen-saving feature
- 132 column operation on several VGA chipsets:
o Tseng Labs ET3000 and ET4000
o Western Digital WD90C11
o Trident TVGA9000, TVGA8900B, TVGA8900C, TVGA8900CL
o Video 7 1024i
o S3 80C928 (board dependent)
o Cirrus Logic GD542x (board dependent)
What it cannot:
- No double wide/high characters
- No softscroll
- No inverse background
- No VT220 printer output support
- No VT52 support at all
- No 8-bit controls
- Only limited AT-keyboard (84 keys) support
- Help you to make money ....
The entire pcvt package consists of:
- the VT220 emulating driver itself
- complete documentation for installation and operation
- termcap/terminfo, pcvt.el, rc.local, /etc/ttys, xmodmap examples
- cursor: utility to set the cursor size and shape
- fed: curses-based EGA/VGA character set editor
- fontedit: utility to edit the vt220 downloadable character set
- ispcvt: utility to display the drivers compile time configuration
- kcon: utility to setup national keyboard layouts and remap keys
- keycap: keyboard mapping database library similar to termcap
- loadfont: utility to load up to 4/8 fonts into an EGA/VGA board
- mcon: utility to control/configure a keyboard based mouse emulator
- scon: utility to runtime configure the video part of pcvt
- userkeys: utility to set the VT220 user programmable function keys
- vttest: VT100 compatibility torture test program
- some color- characterset- and attribute demos
- vga and keyboard register-level debugging utilities
Tested Operating Systems
--------------------------------------------------------------------------------
NetBSD 0.9 pcvt release 3.20-b2 tested
NetBSD 1.0 pcvt release 3.20-b24 tested
NetBSD-current (post 1.0) reported to run (end of March '95)
FreeBSD 1.1R pcvt release 3.20-b7 tested
FreeBSD 1.1.5.1R pcvt release 3.20-b24 tested
FreeBSD 2.0 pcvt release 3.20-b24 tested
FreeBSD-current (post 2.0) reported to run (end of March '95)
Installation / Upgrade
--------------------------------------------------------------------------------
R E A D (!!!) THE INSTRUCTIONS IN THE Doc/INSTALL.xxxBSD FILES CAREFULLY !
==========================================================================
Again: PLEASE R E A D T H E M !!!!! (Thank You! ;-)
========================================
If you read them, you should have NO problems installing pcvt on your
system, if you don't read them, you'll probably run into problems ...
If you run into any difficulties, please read Doc/NotesAndHints !
NOTE 1:
-------
It is highly recommended in order to configure the driver into the system,
that you remove (and/or backup) your previous kernel compile directory and
do a fresh "config" with the new pcvt configuration. This has to be done
because the chain "config/make depend/make" obviously does not resolve ALL
dependencies!
NOTE 2:
-------
You MUST copy or link the Util/Makefile.inc.X for your flavour of xxx(x)BSD
to Util/Makefile.inc . This is because FreeBSD handles manual pages
in a differnet way than NetBSD. Also you have to edit Doc/Makefile
to make this changes for the pcvt(4) manpage.
NOTE 3:
-------
The driver now (from 2.10 on) DEPENDS on the BIOS video display setting
stored in the RTC CMOS Ram - verify your configuration setting!
NOTE 4:
-------
If you are using the pcvt termcap entry from Etc/Termcap, please reinstall
this into /usr/share/misc/termcap if you are upgrading, the entry had bugs
in release 3.10 and all earlier releases.
After doing that, you may need to generate a new termcap database for newer
FreeBSD (2.0 and up) and NetBSD (1.0 and up) Releases:
cd to /usr/share/misc and execute 'cap_mkdb termcap'.
NOTE 5:
-------
The default keyboard layout is documented in Doc/Keyboard.HP unless you
compiled with PCVT_VT220KEY which is described in Doc/Keyboard.VT. Please
note that PCVT_VT220KEYB is not much supported, because i don't use it.
NOTE 6:
-------
When upgrading from a previous version of the driver, you can remove now
the directory /usr/share/misc/vgafonts. It was moved in release 3.20 to
/usr/share/misc/pcvtfonts.
NOTE 7:
-------
In case you don't like pcvt's white on red kernel messages, have a look at
the end of pcvt_conf.h, this is the place to change them.
WYSIWYG - What You Share Is What You Get
--------------------------------------------------------------------------------
PLEASE, if you fix bugs, add features, hack this driver to work on your
hardware or simply don't get it up and running, get in contact with me!
Help us to avoid reinventing the wheel over and over again!
-----------------------------------------------------------
The code is far from being perfect, YOU are very welcome to enhance it !
Please mail bug reports/fixes, suggestions, enhancements & diffs to
hm@hcs.de or
hm@altona.hamburg.com
I will support this driver as my time permits it, feel free to contact me!
Have fun!
Hellmuth
@home
-----
e-mail: hm@altona.hamburg.com
tel: +49 / 40 / 384298
s-mail: Eggerstedtstr. 28, 22765 Hamburg, Europe
@work
-----
e-mail: hm@hcs.de
tel: +49 / 40 / 55903-170
fax: +49 / 40 / 5591486
s-mail: GFKT HCS Computertechnik GmbH, Oldesloer Str. 97-99,
22457 Hamburg, Europe

View File

@ -1,3 +0,0 @@
PROG= cursor
.include <bsd.prog.mk>

View File

@ -1,76 +0,0 @@
.\" Copyright (c) 1992,1993,1994 Hellmuth Michaelis
.\"
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by Hellmuth Michaelis
.\" 4. The name authors may not be used to endorse or promote products
.\" derived from this software without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" @(#)cursor.1, 3.20, Last Edit-Date: [Mon Dec 19 20:30:40 1994]
.\"
.Dd December 19, 1994
.Dt CURSOR 1
.Sh NAME
.Nm cursor
.Nd set cursor shape for the pcvt VT220 video driver
.Sh SYNOPSIS
.Nm cursor
.Op Fl d Ar device
.Op Fl n Ar screenno
.Op Fl s Ar lineno
.Op Fl e Ar lineno
.Sh DESCRIPTION
The
.Nm cursor
utility allows the user to set the cursor shape in a given virtual screen
of the above mentioned driver.
.Pp
The options are as follows:
.Bl -tag -width Ds
.It Fl d
Specifies a device for which the cursor shape is set.
.It Fl n
Sets the virtual screen number to apply the following parameters to. Not
specifying this parameter implies the current virtual screen or the screen
referenced by the -d parameter.
.It Fl s
Specifies the starting (top) scanline the cursor should have.
.It Fl e
Specifies the last (bottom) scanline the cursor should have.
.El
.Pp
Be aware of the fact that the parameters need to be adjusted for the current
size of the characterfont in use, on EGA and VGA boards sizes of 8, 14 and
16 scanlines are currently supported.
.Sh EXAMPLES
The command
.Dq Li cursor -s3 -e10
sets the cursor on the current virtual screen to a rectangular shape on a
14 line VGA screen.
.Sh BUGS
No known bugs
.Sh SEE ALSO
.Xr loadfont 1 ,
.Xr scon 1 ,
.Xr pcvt 4

View File

@ -1,157 +0,0 @@
/*
* Copyright (c) 1992, 1995 Hellmuth Michaelis
*
* Copyright (c) 1992, 1994 Brian Dunford-Shore
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by
* Hellmuth Michaelis and Brian Dunford-Shore
* 4. The name authors may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
static char *id =
"@(#)cursor.c, 3.20, Last Edit-Date: [Tue Apr 4 12:27:54 1995]";
/*---------------------------------------------------------------------------*
*
* history:
*
* -hm adding option -d <device>
*
*---------------------------------------------------------------------------*/
#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <machine/pcvt_ioctl.h>
#define DEFAULTFD 0
main(argc,argv)
int argc;
char *argv[];
{
extern int optind;
extern int opterr;
extern char *optarg;
struct cursorshape cursorshape;
int fd;
int c;
int screen = -1;
int start = -1;
int end = -1;
int dflag = -1;
char *device;
while( (c = getopt(argc, argv, "d:n:s:e:")) != -1)
{
switch(c)
{
case 'd':
device = optarg;
dflag = 1;
break;
case 'n':
screen = atoi(optarg);
break;
case 's':
start = atoi(optarg);
break;
case 'e':
end = atoi(optarg);
break;
case '?':
default:
usage();
break;
}
}
if(start == -1 || end == -1)
usage();
if(dflag == -1)
{
fd = DEFAULTFD;
}
else
{
if((fd = open(device, O_RDWR)) == -1)
{
char buffer[80];
strcpy(buffer,"ERROR opening ");
strcat(buffer,device);
perror(buffer);
exit(1);
}
}
if(screen == -1)
{
struct stat stat;
if((fstat(fd, &stat)) == -1)
{
char buffer[80];
strcpy(buffer,"ERROR opening ");
strcat(buffer,device);
perror(buffer);
exit(1);
}
screen = minor(stat.st_rdev);
}
cursorshape.start = start;
cursorshape.end = end;
cursorshape.screen_no = screen;
if(ioctl(fd, VGACURSOR, &cursorshape) == -1)
{
perror("cursor - ioctl VGACURSOR failed, error");
exit(1);
}
else
exit(0);
}
usage()
{
fprintf(stderr,"\ncursor - set cursor shape for pcvt video driver\n");
fprintf(stderr,"usage: cursor -d [device] -n [no] -s [line] -e [line]\n");
fprintf(stderr," -d <device> device to use (/dev/ttyvX), default current\n");
fprintf(stderr," -n <no> screen no if specified, else current screen\n");
fprintf(stderr," -s <line> start scan line (topmost scan line)\n");
fprintf(stderr," -e <line> ending scan line (bottom scan line)\n\n");
exit(1);
}

View File

@ -1,54 +0,0 @@
PROG= playvt
SRCS= playvt.c
DEMOS= chardemo.vt colors.vt sgr.vt
DEMOS+= outerlimit.vt twzone.vt cowscene.vt xmas.vt
NOMAN=
all: $(DEMOS) $(PROG)
install:
@${ECHO} "to look at the demos, execute:"
@${ECHO} " \"cat <filename>.vt\""
@${ECHO} "if it is an animation and it runs too fast, try out:"
@${ECHO} " \"playvt -f <filename>.vt -d<some-delay-val>\""
.include <bsd.prog.mk>
CLEANFILES+= ${DEMOS}
# this seems to be the lowest common denominator
chardemo.vt: ${.CURDIR}/${.TARGET}.gz.uu
uudecode ${.CURDIR}/${.TARGET}.gz.uu
gunzip -f ${.TARGET}.gz
rm -f ${.TARGET}.gz
colors.vt: ${.CURDIR}/${.TARGET}.gz.uu
uudecode ${.CURDIR}/${.TARGET}.gz.uu
gunzip -f ${.TARGET}.gz
rm -f ${.TARGET}.gz
sgr.vt: ${.CURDIR}/${.TARGET}.gz.uu
uudecode ${.CURDIR}/${.TARGET}.gz.uu
gunzip -f ${.TARGET}.gz
rm -f ${.TARGET}.gz
cowscene.vt: ${.CURDIR}/${.TARGET}.gz.uu
uudecode ${.CURDIR}/${.TARGET}.gz.uu
gunzip -f ${.TARGET}.gz
rm -f ${.TARGET}.gz
xmas.vt: ${.CURDIR}/${.TARGET}.gz.uu
uudecode ${.CURDIR}/${.TARGET}.gz.uu
gunzip -f ${.TARGET}.gz
rm -f ${.TARGET}.gz
outerlimit.vt: ${.CURDIR}/${.TARGET}.gz.uu
uudecode ${.CURDIR}/${.TARGET}.gz.uu
gunzip -f ${.TARGET}.gz
rm -f ${.TARGET}.gz
twzone.vt: ${.CURDIR}/${.TARGET}.gz.uu
uudecode ${.CURDIR}/${.TARGET}.gz.uu
gunzip -f ${.TARGET}.gz
rm -f ${.TARGET}.gz

View File

@ -1,20 +0,0 @@
- The files "chardemo.vt" and "colors.vt" are taken from the MSDOS Kermit
distribution and are redistributed with permission from Frank da Cruz.
- cat chardemo.vt - displays all available character sets
- cat colors.vt - displays all available back/foreground color combinations
- cat sgr.vt - displays all possible graphic renditions
- all other files are some VT100 animations collected over the time from
unkown sources, play them with playvt.
- Playvt is a program to play an animation file on pcvt: because pcvt is
_much_ faster than an original VT100/VT220, it adds a programmable delay
for each character so one can enjoy smooth-running animations! :-)
There is no manpage available for playvt, just try to run playvt -? which
should give sufficient information. You have to empirically find out which
delay value fit's your needs!
have fun!

View File

@ -1,53 +0,0 @@
begin 664 chardemo.vt.gz
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
64(2@"$$1?CT_'&^W^B\8)0@*\AL``,4&
`
end

View File

@ -1,15 +0,0 @@
begin 664 colors.vt.gz
M'XL("):V^BX"`V-O;&]R<RYV=`#MU+UNG$`4!>!^I7T"FGD`Q^+^S)TB2N-8
M;B(GA=UMM;*1C;(8":\E/W[,G(.SX0E2+,WE(#%\@N$T._.O7H;MYO;NR_6O
MN_2CFX;^F.RR3??=^S'=CH]=^CX>QNGU(ME[^I9NQJE[FL:WE\>+Y/.%J_W#
M;US8;K:;A*/963LO_'&+MVF^TP5#,0S#,3)&8)24MIMEA63MLEP[I#EYBRB,
M@JB,BFB,ANB,CI@9,V(PQN=3:RRG#*D,(4/`$#($#"%#P!`R!`PA0\`0,@0,
M(4/`$#*DOH_T<YR&_>'4H]6C]"@\2H_"H_0H/$J/PJ/T*#Q*C\*C]"@\2H_"
M\W<;G)JLFHPF@\EH,IB,)H/):#*8C":#R6@RF(PF@\EHLM6G\LIP,AP,)\/!
M<#(<#"?#P7`R'`PGP\%P,AP,)\-7C%P9F8P,1B8C@Y')R&!D,C(8F8P,1B8C
M@Y')R&!D,O**$9419`0804:`$60$&$%&@!%D!!A!1H`19`0804:L&*4R"AD%
MC$)&`:.04<`H9!0P"AD%C$)&`:.04<`H9)1_&/?/_6M:_BZ<UHV]3\MV&MX.
MQW[YJ`]S\Z7EW1[ZEVY9Z++YK,YF)\.YKU9]=37U3\_'<U^=^^K<5_]57S6[
-]J.M_@#AP6KE^0D``&Y9
`
end

View File

@ -1,90 +0,0 @@
begin 644 cowscene.vt.gz
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
>.?"2C#BW34UWQQ.;K+_C\C-JOWWU+THZ&OFDJ0``
`
end

View File

@ -1,193 +0,0 @@
begin 644 outerlimit.vt.gz
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
#^0``
`
end

View File

@ -1,111 +0,0 @@
/*
* Copyright (c) 1995 Hellmuth Michaelis
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Hellmuth Michaelis
* 4. The name authors may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
static char *id =
"@(#)playvt.c, 1.00, Last Edit-Date: [Sun Jan 1 18:32:22 1995]";
/*---------------------------------------------------------------------------*
*
* history:
*
* -hm want to see my xmas greeting ... :-)
*
*---------------------------------------------------------------------------*/
#include <stdio.h>
#include <unistd.h>
main(argc,argv)
int argc;
char *argv[];
{
extern int optind;
extern int opterr;
extern char *optarg;
int c;
FILE *fp = stdin;
volatile int i;
int delay = 0;
int fflag = -1;
char *filename;
while( (c = getopt(argc, argv, "d:f:")) != -1)
{
switch(c)
{
case 'd':
delay = atoi(optarg);
break;
case 'f':
filename = optarg;
fflag = 1;
break;
case '?':
default:
usage();
break;
}
}
if(fflag == 1)
{
if((fp = fopen(filename, "r")) == NULL)
{
char buffer[80];
strcpy(buffer,"ERROR opening file ");
strcat(buffer,filename);
perror(buffer);
exit(1);
}
}
while((c = getc(fp)) != EOF)
{
putchar(c);
for(i = delay; i > 0; i--)
;
}
}
usage()
{
fprintf(stderr,"\nplayvt - play a VT animation with programmable delay\n");
fprintf(stderr,"usage: playvt -f [filename] -d [delay]\n");
fprintf(stderr," -f <filename> file containing the animation\n");
fprintf(stderr," -d <delay> delay between characters\n");
exit(1);
}

View File

@ -1,11 +0,0 @@
begin 664 sgr.vt.gz
M'XL("):V^BX"`W-G<BYV=`"%44U/@T`0/2]_H9<Y:AH;MMT5#?&`L*D8^Q&H
MIYYJNU0BA0:HO]]AV18L&"=D=LE[,^\]&*Q-VXP&ZU=CL#8/)!1OPEW!-'"6
M+[X+@9A[_LI?S,$3L\4\7`6.>KOQA!M.`W@"$;JP+&Q\1B/L<+@U#"**[>8H
M"0ED<4K*.-W#/M\</^,MY#+=Q66<I0:Y4T7TV5NU)Y3`0UV)DR3@E&4>?YQ*
M64`610V'(H<BAP(\9\FN`1@"#($QP'NZDWD2I[)!.:(<T0F.(?*%=AO00M!"
MD`$$\EOF16N0VM7BJA->2PY[UE.;*Q9*W&M65X;:EB*AE*5)'3FF%E6=/+2"
M]&QC:EO5R6.;V5G)%;'JA)J7],.^I#J%DJ?T*FUO(J8S*1]T?#W2(\+U1&UH
F\OMC=0<L[<K2KMCY%_UKC%^LU5+\KSQGT6K:P/H!L`MLDRX#``#2
`
end

View File

@ -1,350 +0,0 @@
begin 644 twzone.vt.gz
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
0]]ZO?G=^^'_[0&'EA?,``'E+
`
end

View File

@ -1,110 +0,0 @@
begin 644 xmas.vt.gz
M'XL(".RV^BX"`WAM87,N=G0`[5U;;R.YL7X<0`A:/T`O#/9EL]A8S6NWH#B7
M'2!HY"#8Q_-@XV`-'"N>&6EDR7/Q`H/][>&UR>IFR3.>5LXFA[W><9MB?:PB
M/Q:+U90T^\WB#XNK;G'UM\6W?UG\KEY<_4G<Z7_D=G&UF\T65\V:L>Y_%E?M
MFM%NN;B2N_WBJMY=+ZY6:U9W2T*(OJ?UFJXTBM@MS:NZ8/?++^9.OVQ*KWTI
M7=-6R^B&*@.UL<7?_C`GJ83!8VO:6'`+T+]VK36B?$U5;,M6T6AT[?'FJ<C:
MMVWDQ)I*8T*B6[BN*Z_H]G#X\^'P1E>2:\Z[=X?#V\/AO?Y3F3^-U.YP^'`X
MO)[;*E18)7.8UU:(\JXZN.OC86/_-__IUQK3?8^ZXJ/^H^V[3\,?7H?NTIVN
M.JV256AE_K`OSVSGT^[/KJ-67?63[18FNMK:R9INOJ^<AK(SVFT\HEPSWGTW
MGUD%:%=]NKP<_CC=9)=YZ7-^%E=,D^&YTMC/W'62[DU-2=W+C[;3&U-BARAT
MMG]%L\!UDA70@V-[2C/Y%\>?UM[4IL=,Y0O7,\*6"M.U04B7MMU%P"*NF^ON
MPHY'8\;,4"R07A>UH:BZ<86Z-W2]C6&YM<$*T;58:S.B6!/%$KFVVWR*@BT4
MG`6;2-`^F*JM=Z@J04U@FVYSF>`V$)=46R<M4^E$7&GQR\0@-9)W=&W$"(`X
M!*GMNMSX0;7M#.3)+(P3L5W/0H]S#%(8FS:7'E)D(!T`PP"XM2H`<!2`8@`,
M&,40HWK.$3=\JJM^\:-58\@4V$8QU=0*`ZB!;34*T"(`&CFQ3:T0VRP)W1RA
MEE2[*I)1-1AXFYJG6E0[A0$TJ7FJ00$D!J"`>0HQCQJOZ'BH,&KK-E)C)*H+
M1F0E@#$HD15&9(V<&L,18ZR7<YY#CY6W"N.V;BRUBJ%*8116%%B%4EAB%-;(
MJ54USD#K,DR@L1KY0]EV+_+PNMW$0+E"]<-(+-O40(F26&(DULB)@;(YY3Z"
MQY`2M4<!>Q2J#L9C*8$]*(\EQF.-G-HC4!^O5U/B@K.5IZ'$J"TYL`KUT1+C
ML63`*I3'$N.Q1DZMHHA5UJ^3L(0YJP1&;5D#JU#O+##O+%:I50(EK\#(*]K4
M*M&>\G]NK/2"/)Q<`F.V:%+[!.J>!>:>A0+VH606&)D%B#?$B7BC\?&&CI&3
MD$]#8S07(.X0J+L6&*<%B#L$RFF!<5J`N$,PU#,ZX\PHTD!)C.8"1!P"==<<
MX[0`$8=`.<TQ3G,0<?#5*7?HX]\827&,Z!R$&ASUTASC,@>A!D>YS#$N<Q!J
M<(6O8\Z!U'8+$^S"",Y!U,%1;\TQ&G,0=7"4QARC,0=1!\>C#NWE_7A9IIJM
ME]\#<8SA'$0?'/7:'*,S!]$'1^G,,#IS$'WP^HGX-]EWSGOS&$9U!F(/-J!Z
M]:;7#F,U`[$'&["Z.O0`&*L9B#U8DP%(]V/&SK!6LS'17SM,$($P-<8,6HU)
M?7`((`1A`U)7V^V;D!;A&`*(01ADM:Y?V3R+QIGY328)@;$WCF'`(!!A?`3\
MV@,[F#&QW4Z:@7"$L1',P<&X_3C#Z,U`4,(H!M,GXGS\'P-)BA&?@=B$U:>@
M7_=4IQC5*8A4Z&H$MXMPAPB'$9^"N(6V([CE`&X6R#M(Y%!L9E`0N]#AS"`C
M53&_3T$,0^%TT+\J$E7=13C,X5,0T5`YA"-5A%LF0]XGB^HX]MB:0$%H0\5(
MY4?71LQB46QUH"#(H1RW/DV*46Q!H"#DH0RW'J;*W(8W67(H-J4H"(`HS8U[
MLWOL@;#Y0T$<1.L\3C09FS@@&EKE\FV)I318*D)TM%IC4P@$1.U8/;^OQQ)+
M(*^$2:-I%["EQR,\'O,4-J>4+*KH]A5LJ3#%T*`>!*^8-!H*@5CAJ?2+,"M;
M/Q<Q-PR\,*90D!YR$%#P<X13V62>=6F@4W<C.2`6&ZS&34#E^HI]/1)>K#Y=
MAK8)F3BC?S)YKJRV\<&5LMUN=+_NGZ3042+?/E+9I/*Z6Z[GB03)BGP:RD`A
MUS%1;!Z?WFSFGVN)906$W6*XAC!!EN2%R4@Z&G,9[&%Y:89)LZZZW`2C1NE_
MM>9Y/([A<8/7:R/RT@*3%L`6F9>6F+1,;<&R_FJM\K`*@U7`I"8OW6#2#3"I
M3:3]RADQ6@RC30T[D?)7ZU7$7UR]U#\1?>70W4.\E;/)53"DJWO!N1.T/X%[
M=>>6O*2T,:65=SK*+-@>(!%/6J>6O^$%(TV-"KXQD.M7)KX@*8R3D9ER`\2Z
MR[1$N6@G(STL=@\S!V7*Q5VQK.KCS?X!]!AF(.)&:ISP5RYP!,@IM,Q`IP*]
MCU#=`.)E@J(R*+V`?;#K#37T`1`I2I-!<0*;3\FPG<K_*^-/S(;%=N#+41-M
MIHDVH46OZ,JB`%X9^14B_VD^'M0\A-U?#2`&98-G`,JM;`-NC<N:3)ER.TZ$
M6.EK/0;+8/`!QB;!R'"\+ZN"EQ\^`%#.5V)Z90COROI5E,D3*F5([<IZ.IMX
M[#":LE")#*F-3[?K9OX!@'(5+)`[`1+6/-5=QO66-9ZBIHXY0J)=KUOC[.0-
M,DV7KK)M!$["$YZ--G3EZ+U/9?25V2<'76X@;G;M7J5V\#KH=#.0=9O2=\ZT
M9*FN4Y-T/=?TS5`\;KD'\K0#H4,^DZ],^K`B&62&(S-@F(XI=AEYWGFSPK;[
M[0B'`PM%WD+1]5S#]!%=NOX.T_K*Y'^ST/)I:`E,U83]D,%QAZ_>1ISW(QP%
M3&WR^C2I/KGHK>D&$=0@TZ],"C\+W3X%W0)#-=%?9U#<D:SW.,HJ-5/4:3`6
MP\NZ(_GPL@;C.$[X*_/D)0M),4B:FB587IIAT@R8P_/2')/FB3EXGE^9AV19
M8($!"V"4S$M+3%H"HU1>6F'2JAO'NIGTOC+/-;/(#8;<`*O:O'2+2;?`JE5>
M>H5)K[KQ-BMF]95Y")T#E!B599T:(_.LE1AK)4V-D7G62HRUDD5CQDE\98X)
M9/$P'DL.;,F356)DU2^DMN3)*C&R2@GF4!+FR3QQ)49<":(*F2>GQ,@I07PA
M\^24&#EE"R?-(-VNS/F:+"#&5PE""Y4GI\+(J4!DH?+D5!@Y%85#,LJ@*W,>
M*@N),5:!@$+E^:DP?BH01J@\/Q7&3Y4&#^.4N#)'UK*`&&45"!E4GJ8*HZD"
M@8+*TU1A-%4-C&4'66]E#A-F`3'F*A`6J#Q-%493!<*!)D_3!J-I4\-H!\UZ
M*W,$-`N-<;@!84&3IVN#T;4!84&3IVN#T;6!8<$XZZW,:=TL),;A!@0$C819
M+"_<\[4Q]\8`7UVE2:E06[GHWU2V*_X<9+F5.2,=I**0H:63,3ST\&W,/(5Z
M;GEMS(W/3S4A./(WC;FI/I4SZ^7,>CFS7LZLES/KY<QZ.;->SJR7,^OES'HY
MLU[.K/];G%F?<N-BHW:^UD.@`_8K=U3V;F:N/WSWQ]GL]'O6PV7?%[X]A.OC
MQX_]_1LRN!Y.71;IT5B_^_OM\?@S>7EWU(::XW_4_+-SK^UN'LAW1->PKPU;
MN";XM?0M..A7#^^J!-IAZI>J$2:Y/R*(Q_M$:8>IU<LH#0W*(.T/QX=A9QT/
M>P_O<+6*J<:)&8AZ^_W]O7E#O!Z1^_N]`WO7C\[K`+7KB]Z34]<C>7001K"7
M.?P4;S789T)$C@0MME^HQ3/&,0_SU6.7`WWFB.5T@X2'ND&]44!-I<-KHL?L
MZ&99'+T/'SY$0N1$39:%'`_W^Y17]X>C?L'D)]:T/FI/8E,L6_/Q%?JW+K>Y
MET?SL1;FMZO0=MN#K=%VYI&A3>(\$EO'W+A*C:[TT=9J=*T/MEJC7W58]LY5
M-!_8\-'AF8]K^.`0E:G@,-VMJRQC91DKRUA9)I5%K"QB91$KBZ0RCY5YK,QC
M99Y49K$RBY59K,R2RC16IK$RC95I4KF.E>M8N8Z5ZU#9[M&7ILS\M@N**[#[
MZZ5?.EV1W_93D\0RJY"M0H(P,6UX$!TZA*V_K>Q`[&>0.!028"!*A%^ZX-BA
M!`S:[_EW2Y+`DJ77>X`Z!/6QF[/&H#N-`JYF=E0V!0.&!U!35Z7U/#CH(M=(
M8JWOA]";H:/)4-.T,WEH+BJ:Z$7ZL?(8RZ`8Z85[<X>*D.&HDMAUH6;C*YXV
MMN_0H.9#:".Q:17T:U/&^"R#WJ6ER_](=W*"`<O``!([%.B_S!D@S,;NP=XH
MT<4F29X=2]A[J[[WR'(X!DGS<1RMB<=X8819A4Y<Q4XD"!M'TS"T)+K>D8.N
M3`9KU6'D3V?J<!+%CCOV+1P?^IF5)7WL0@+)!Z;K<,A\2U2W%,8H:>A<4]BV
M>#S:#[<1)H.ES3N>;6X+DS&Y=]=7S_6@NM.<=ZGBYW$!KD4=3H;.TA'F<5K?
MX)NI;5]H(NQT:SIZM9>^.X3B?Y'#J,,9IUVOA=,D%)_5B\QF#EZ3QOO),!NU
M#GV8OW>%37=!YON*;&;G\32N%=5=;$RS03/CQ5USK`OJF4^(<K5BQ:G\46S!
M7L%8T=H>,G[6N2A]Q?ZJN]'V:G8.%Q:FR(5IXL*U=!$T;+I4P43)(&5[;.,$
M-U&_Z!2F=("VQ=`;&]-FU-/K>!\NY_-[[GGKQESSX=\4SC*T9?H$$$ZKYU5+
M)N-]JAY)R'<1]7MXAI<-'GM#`-V866_[T*57RZF4[K^]6MS4OS#]Y90*L)&.
M:3?"T9[,?P<]@BT;G*S,KO</?>22F)@:Z/>"P42NH4]2N85;A&>L$:$9S3W?
M?H53F9F,L!NBX]&U9^(Q.&CALP^Y/<WC_U*Q.9.CMJ5SL`6N^E',3`<6[,D[
MD2?6HJ3E?EA<^X$_&V1R,)/!]J-V`)>QVL8)W#X3"-9XP(O0"<CT8:D9SJBG
M5C5=0,Q&U.>%_(F<P\=08/>DQ&[L5;QUZGE]Y@-S,[-0F^L-O0=7V#?W*O@M
M=:^!WT'W"M"H@'GH8BP/XWW1<VPT7]G`.Y]:6/UHF_,_7BF?$P@Z^0Q`KQ(#
M*OGIY!E.3DU=W2F^._;@\ED*W[Q/7_C6?:ZB;YPGC?MI;1?XZ+QR4YP%^_.+
M$_%)%:>!3[8X!7QBI6]?)(1HK)5V=J7S/OJO[,S74;8S>Y#.LCD@XG(D_@"3
M39W8+%#??K@U2(;*?KHD/N=YGH&Z!T$Z@CUU!?<H>L:YSA4=L$-9.WPZC-C$
MF4U\]5:HQ`KS6:4D,<+=YQS-:3_CDW-D=_`).[(]^.2<33:I_LZU&AQ)<&&P
M"[_,%_GT(=GYA*(Y&&;3A]Y>=^,Z[L(/3*!-11)-+K[$U?BT)O%I3N+3FL2G
M.4EH<4-27]V3P;!R\R6>91[>C^3>1_4-)R_O;F^/#[\UG>_>=_6-Z,O\!P@'
MMEP`KEZ$?MWX->YS/4D8O4T8N,J^N.E[:O,EOB%R(6EX$[G\C%D^[=2<>HJ<
M@_K3TWI:VA82%A(6$A82%A(6$A82%A(6$A82%A(6$OY'DM!]+-E_+;Z1=D^>
M_/'KIV>][@N7,$.XOYZ>OK&UI3L!&DZ"FM.:T_,[-O=(R+<FT_;PX\/B:O<[
M,OSS\5S3`:C@KI_ZHWWGF2_)D%[KG_[)U-*<>IUZ/L'V!D=NEV=Q^6E[B7G:
MP.EG'&C+GZ&U#XW./QVS[9UE+F*FG6$>XKUXIEF7;_!\,PYI[DS3#31VAKG6
M+?[^E/.:;K*EC7VVLYYP\O7MXVO3=-.O;VR\[)+))Z!N[$PS+2)/.Z52W.GF
M3HIZKA4IOP*>:TG*+W]E32IKTI/+Q*33ZBG'>9Y5Z93OG'!5.MMR4R90F4#D
M\P@]]00J\^2I1?0_<*(LKH[_'BDZ8?#F+U[\[=7;:NH)X.#;;OZ/[6TUZ328
MGO^3$G]29MM>U`7S%S_<;K</WU=G(//D7)V8JF=@9B'C\\FX&GB,B:EHW^&4
M.HW"RV?R4IC/SLHYCO\/1"U.\M=%1CD.-::EHAP&&X67S^6E=!''S79;E:7\
MJVDIC1-^=U=X.0$O5:W[\N/-S]\78I:E^_^2BLHM9S_>_;8P\6N9:+^48?[B
MO^]NWA4?^?7$E(:8F_=O"S$G(*;=[+Z:GI?VJQ7FKQZJ<MIPDM2^_78''6;M
MJW+\]:O3]O;;)>8OCJ_^]_;[0M")SA,53GX5)QN?/_CQ[?2,M%\Z-;^I"CFG
M(F?C0KH7^[>WOZ\F)ZO]+JKYW?[X<%N5MQ,4BOX*_&?C4A,O]O=G8J3];JWY
M[=NJL+.P\U>PNC<NX'[8WK[ZQ]U%865A97D;8.%@X6#A8.%@X6"&@P1\9&*9
M<V7.E3E7.%@X6#A8.%@X6#A8.%@X6#A8./BOW8.!\7V2A&1(PLP0)R0D@(1)
M7ZZ@+"$G*(-0,*)YRIQ$F\\&G^T-5`_OA#.?)W5E)?OO'W3?]!?.K^L*X>R?
LK:O,4Y_?D[\>]SORP^WQS>WV]N?PK-K59<Q^3M6?Q'9Q/?LG-?=D49*R``"?
`
end

View File

@ -1,29 +0,0 @@
.if !exists(${.CURDIR}/../Makefile.inc)
error:
@echo
@echo " You MUST link/copy"
@echo
@echo " ../Makefile.inc.NetBSD or ../Makefile.inc.FreeBSD"
@echo
@echo " to ../Makefile.inc before you can proceed !"
@echo
.else
#CFLAGS = -g -Wall -pipe
CFLAGS = -O -Wall -pipe -I/usr/local/include
OBJS = fed.o select.o edit.o misc.o
LIB = ncurses
DEST = /usr/local/bin
fed: $(OBJS)
$(CC) -o fed $(OBJS) -l$(LIB) -L/usr/local/lib
$(OBJS): fed.h
clean:
rm -f *.o fed *core* trace*
install:
${INSTALL} -c -s -o bin -g bin fed $(DEST)
.endif

View File

@ -1,340 +0,0 @@
/*
* Copyright (c) 1992, 1993, 1994 by Hellmuth Michaelis
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Hellmuth Michaelis.
* 4. The name of the developer may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPER ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* edit.c, 3.00, last edit-date: [Sun Jan 2 20:08:27 1994]
*/
/*---------------------------------------------------------------------------
*
* edit.c font editor edit character
* ------------------------------------------
*
* written by Hellmuth Michaelis, hm@hcshh.hcs.de
*
* -hm first public release
* -hm some debugging & cleanup
*
*---------------------------------------------------------------------------*/
#include "fed.h"
#define UP 0
#define DOWN 1
static int pen;
/*---------------------------------------------------------------------------*
* fill edit mode command window
*---------------------------------------------------------------------------*/
void edit_mode(void)
{
mvwprintw(cmd_win,1,1,"(W)hite ");
mvwprintw(cmd_win,2,1,"(Black ");
mvwprintw(cmd_win,3,1,"(I)nvert ");
mvwprintw(cmd_win,4,1,"(R)ow BLACK ");
mvwprintw(cmd_win,5,1,"(r)ow WHITE ");
mvwprintw(cmd_win,6,1,"(C)ol BLACK ");
mvwprintw(cmd_win,7,1,"(c)ol WHITE ");
mvwprintw(cmd_win,8,1,"(Q)uit/Save ");
mvwprintw(cmd_win,9 ,1,"e(X)it/undo ");
mvwprintw(cmd_win,10,1,"Pen (U)p ");
mvwprintw(cmd_win,11,1,"Pen (D)own ");
mvwprintw(cmd_win,12,1," ");
mvwprintw(cmd_win,13,1,"(^P)rev Line");
mvwprintw(cmd_win,14,1,"(^N)ext Line");
mvwprintw(cmd_win,15,1,"(^F)orwd Col");
mvwprintw(cmd_win,16,1,"(^B)ack Col");
wrefresh(cmd_win);
}
/*---------------------------------------------------------------------------*
* edit mode command loop
*---------------------------------------------------------------------------*/
int edit(void)
{
int c, r;
char l;
unsigned int k_ch;
c = r = 0;
pen = UP;
for(;;)
{
if(pen == DOWN)
dis_cmd(" Edit Mode, the Pen is DOWN");
else
dis_cmd(" Edit Mode, the Pen is UP");
l = ((mvwinch(ch_win,(r+1),(c+1))) & A_CHARTEXT);
wattron(ch_win,A_REVERSE);
mvwprintw(ch_win,(r+1),(c+1),"%c",l);
wattroff(ch_win,A_REVERSE);
wmove(ch_win,(r+1),(c+1));
wrefresh(ch_win);
k_ch = wgetch(ch_win);
switch(k_ch)
{
case K_LEFT:
case KEY_LEFT:
if(c > 0)
{
normal_ch(r,c);
c--;
}
break;
case K_DOWN:
case KEY_DOWN:
if(r < (ch_height-1))
{
normal_ch(r,c);
r++;
}
break;
case K_UP:
case KEY_UP:
if(r > 0)
{
normal_ch(r,c);
r--;
}
break;
case K_RIGHT:
case KEY_RIGHT:
if(c < (ch_width-1))
{
normal_ch(r,c);
c++;
}
break;
case KEY_HOME:
normal_ch(r,c);
c = r = 0;
break;
case KEY_LL:
normal_ch(r,c);
c = ch_width-1;
r = ch_height-1;
break;
case 0x0c:
wrefresh(curscr);
break;
case '\n':
case '\r':
case ' ' :
chg_pt(r,c);
break;
case 'q':
pen = UP;
normal_ch(r,c);
wrefresh(ch_win);
return(1);
break;
case 'x':
pen = UP;
normal_ch(r,c);
wrefresh(ch_win);
return(0);
break;
case 'w':
case 'W':
setchr(WHITE);
break;
case 'b':
case 'B':
setchr(BLACK);
break;
case 'i':
case 'I':
invert();
break;
case 'r':
setrow(WHITE);
break;
case 'R':
setrow(BLACK);
break;
case 'c':
setcol(WHITE);
break;
case 'C':
setcol(BLACK);
break;
case 'u':
case 'U':
pen = UP;
break;
case 'd':
case 'D':
pen = DOWN;
break;
default:
beep();
break;
}
}
}
/*---------------------------------------------------------------------------*
*
*---------------------------------------------------------------------------*/
void normal_ch(int r, int c)
{
char l = ((mvwinch(ch_win,(r+1),(c+1))) & A_CHARTEXT);
wattroff(ch_win,A_REVERSE);
if(pen == DOWN)
mvwprintw(ch_win,(r+1),(c+1),"*");
else
mvwprintw(ch_win,(r+1),(c+1),"%c",l);
wmove(ch_win,(r+1),(c+1));
}
/*---------------------------------------------------------------------------*
*
*---------------------------------------------------------------------------*/
void chg_pt(int r, int c)
{
char l;
l = ((mvwinch(ch_win,(r+1),(c+1))) & A_CHARTEXT);
if(l == WHITE)
l = BLACK;
else
l = WHITE;
mvwprintw(ch_win,(r+1),(c+1),"%c",l);
wmove(ch_win,(r+1),(c+1));
}
/*---------------------------------------------------------------------------*
* invert current character
*---------------------------------------------------------------------------*/
void invert(void)
{
int r,c;
r = 1;
while(r <= ch_height)
{
c = 1;
while(c <= ch_width)
{
if(WHITE == mvwinch(ch_win, r, c))
mvwaddch(ch_win, r, c, BLACK);
else
mvwaddch(ch_win, r, c, WHITE);
c++;
}
r++;
}
}
/*---------------------------------------------------------------------------*
* fill current character black/white
*---------------------------------------------------------------------------*/
void setchr(char type)
{
int r,c;
r = 1;
while(r <= ch_height)
{
c = 1;
while(c <= ch_width)
{
mvwaddch(ch_win, r, c, type);
c++;
}
r++;
}
}
/*---------------------------------------------------------------------------*
* set current row to black/white
*---------------------------------------------------------------------------*/
void setrow(char type)
{
int r,c;
getyx(ch_win,r,c);
c = 1;
while(c <= ch_width)
{
mvwaddch(ch_win, r, c, type);
c++;
}
}
/*---------------------------------------------------------------------------*
* set current column to black/white
*---------------------------------------------------------------------------*/
void setcol(char type)
{
int r,c;
getyx(ch_win,r,c);
r = 1;
while(r <= ch_height)
{
mvwaddch(ch_win, r, c, type);
r++;
}
}
/*---------------------------------- E O F ----------------------------------*/

View File

@ -1,168 +0,0 @@
/*
* Copyright (c) 1992, 1993, 1994 by Hellmuth Michaelis
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Hellmuth Michaelis.
* 4. The name of the developer may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPER ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* fed.c, 3.00, last edit-date: [Sun Jan 2 20:08:45 1994]
*/
/*---------------------------------------------------------------------------
*
* fed.c font editor main file
* -------------------------------------
*
* written by Hellmuth Michaelis, hm@hcshh.hcs.de
*
* -hm first public release
* -hm activating font save
*
*---------------------------------------------------------------------------*/
#define FED
#include "fed.h"
void main(int argc, char *argv[])
{
int i;
int row, col;
int ret;
if(argc != 2)
{
fprintf(stderr,"EGA/VGA Fonteditor, Rel 1.00\n");
fprintf(stderr,"usage: %s <fontfilename>\n",argv[0]);
exit(1);
}
readfont(argv[1]); /* read fontfile into memory */
initscr();
cbreak();
noecho();
nonl();
keypad(stdscr,TRUE);
idlok(stdscr, TRUE);
move(0,0);
standout();
addstr(" Interactive EGA/VGA Fonteditor - (c) 1993, 1994 Hellmuth Michaelis ");
standend();
/* character horizontal ruler */
move(WINROW-1, CHCOL + ((WIDTH16 - ch_width)/2) + 1);
if(ch_width == WIDTH16)
addstr("1234567890123456");
else
addstr("12345678");
/* charcater vertical ruler */
for(i=1; i < ch_height+1; i++)
mvprintw((WINROW+i), (CHCOL + ((WIDTH16 - ch_width)/2) - 2), "%2d", i);
/* select horizontal ruler */
move(WINROW-1,SETCOL+2);
addstr("0 1 2 3 4 5 6 7 8 9 A B C D E F ");
/* select vertical ruler */
for(i=0; i<10; i++)
mvaddch((WINROW+i+1),(SETCOL-1),(i+'0'));
for(i=0; i<6; i++)
mvaddch((WINROW+10+i+1),(SETCOL-1),(i+'A'));
/* label available commands window */
move(WINROW-1,CMDCOL+1);
addstr("Commands");
refresh();
/* command window */
cmd_win = newwin(((WSIZE)+(2*WBORDER)),(CMDSIZE+(2*WBORDER)),
WINROW,CMDCOL);
keypad(cmd_win,TRUE);
idlok(cmd_win, TRUE);
box(cmd_win,'|','-');
sel_mode();
/* character font window */
ch_win = newwin((ch_height+(2*WBORDER)),(ch_width+(2*WBORDER)),
WINROW, CHCOL+((WIDTH16 - ch_width)/2));
keypad(ch_win,TRUE);
idlok(ch_win, TRUE);
box(ch_win,'|','-');
wrefresh(ch_win);
/* character select window */
set_win = newwin((WSIZE+(2*WBORDER)),((WSIZE*2)+(2*WBORDER)),
WINROW,SETCOL); /* whole character set */
keypad(set_win,TRUE);
idlok(set_win, TRUE);
box(set_win,'|','-');
row = 0;
col = 0;
for(i=0; i<256; i++)
{
mvwprintw(set_win,row+1,col+1,"%02.2X",i);
if(++row > 15)
{
row = 0;
col += 2;
}
}
wmove(set_win,1,1);
wrefresh(set_win);
/* start */
clr_cmd();
curchar = 0;
if((ret = selectc()) == 1)
{
writefont();
}
endwin();
}
/*---------------------------------- E O F ----------------------------------*/

View File

@ -1,127 +0,0 @@
/*
* Copyright (c) 1992, 1993, 1994 by Hellmuth Michaelis
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Hellmuth Michaelis.
* 4. The name of the developer may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPER ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* fed.h, 3.00, last edit-date: [Sun Jan 2 20:10:31 1994]
*/
#include <ncurses.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#ifdef FED
int ch_height;
int ch_width;
int curchar;
WINDOW *ch_win;
WINDOW *set_win;
WINDOW *cmd_win;
#else
extern int ch_height; /* current fontfile character dimensions */
extern int ch_width;
extern int curchar; /* character being edited */
extern WINDOW *ch_win; /* windows */
extern WINDOW *set_win;
extern WINDOW *cmd_win;
#endif
#define FONTCHARS 256 /* no of chars in a fontfile */
#define WHITE ('.')
#define BLACK ('*')
#define K_UP 0x10 /* ^P */
#define K_DOWN 0x0e /* ^N */
#define K_RIGHT 0x06 /* ^F */
#define K_LEFT 0x02 /* ^B */
#define WINROW 3
#define CMDCOL 3
#define CHCOL 20
#define SETCOL 41
#define WSIZE 16
#define CMDSIZE 12
#define WBORDER 1
/* fonts */
#define WIDTH8 8 /* 8 bits wide font */
#define WIDTH16 16 /* 16 bits wide font */
#define FONT8X8 2048 /* filesize for 8x8 font */
#define HEIGHT8X8 8 /* 8 scan lines char cell height */
#define FONT8X10 2560 /* filesize for 8x10 font */
#define HEIGHT8X10 10 /* 10 scan lines char cell height */
#define FONT8X14 3584 /* filesize for 8x14 font */
#define HEIGHT8X14 14 /* 14 scan lines char cell height */
#define WIDTH8X14 8 /* 8 bits wide font */
#define FONT8X16 4096 /* filesize for 8x16 font */
#define HEIGHT8X16 16 /* 16 scan lines char cell height */
#define FONT16X16 8192 /* filesize for 16x16 font */
#define HEIGHT16X16 16 /* 16 scan lines char cell height */
void edit_mode ( void );
int edit ( void );
void normal_ch ( int r, int c );
void chg_pt ( int r, int c );
void invert ( void );
void setchr ( char type );
void setrow ( char type );
void setcol ( char type );
void main ( int argc, char *argv[] );
void readfont ( char *filename );
void dis_cmd ( char *strg );
void clr_cmd ( void );
void save_ch ( void );
void move_ch ( int src, int dest );
void xchg_ch ( int src, int dest );
void display ( int no );
void sel_mode ( void );
int selectc ( void );
void normal_set ( int r, int c );
int sel_dest ( void );
void normal_uset ( int r, int c );
void writefont( void );
/* ------------------------------ EOF ----------------------------------- */

View File

@ -1,353 +0,0 @@
/*
* Copyright (c) 1992, 1993, 1994 by Hellmuth Michaelis
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Hellmuth Michaelis.
* 4. The name of the developer may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPER ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* misc.c, 3.00, last edit-date: [Sun Jan 2 20:09:21 1994]
*/
/*---------------------------------------------------------------------------
*
* misc.c font editor misc routines
* -----------------------------------------
*
* written by Hellmuth Michaelis, hm@hcshh.hcs.de
*
* -hm first public release
* -hm writefont routine
*
*---------------------------------------------------------------------------*/
#include "fed.h"
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
static unsigned char *fonttab; /* ptr to font in core memory */
static char *bitmask[] = {
"....", /* 0 */
"...*", /* 1 */
"..*.", /* 2 */
"..**", /* 3 */
".*..", /* 4 */
".*.*", /* 5 */
".**.", /* 6 */
".***", /* 7 */
"*...", /* 8 */
"*..*", /* 9 */
"*.*.", /* A */
"*.**", /* B */
"**..", /* C */
"**.*", /* D */
"***.", /* E */
"****", /* F */
NULL };
static char lfilename[1024]; /* current filename */
static unsigned int lfilesize; /* current filename's size */
/*---------------------------------------------------------------------------*
* read fontfile into memory
*---------------------------------------------------------------------------*/
void readfont(char *filename)
{
FILE *in;
struct stat sbuf, *sbp;
int ret;
char buffer[1024];
sbp = &sbuf;
if((in = fopen(filename, "r")) == NULL)
{
sprintf(buffer, "cannot open file %s for reading", filename);
perror(buffer);
exit(1);
}
if((fstat(fileno(in), sbp)) != 0)
{
sprintf(buffer, "cannot fstat file %s", filename);
perror(buffer);
exit(1);
}
switch(sbp->st_size)
{
case FONT8X8:
ch_height = HEIGHT8X8;
ch_width = WIDTH8;
break;
case FONT8X10:
ch_height = HEIGHT8X10;
ch_width = WIDTH8;
break;
case FONT8X14:
ch_height = HEIGHT8X14;
ch_width = WIDTH8;
break;
case FONT8X16:
ch_height = HEIGHT8X16;
ch_width = WIDTH8;
break;
case FONT16X16:
ch_height = HEIGHT16X16;
ch_width = WIDTH16;
break;
default:
fprintf(stderr,"error, file %s is no valid font file, size=%d\n",filename,sbp->st_size);
exit(1);
}
if((fonttab = (unsigned char *)malloc((size_t)sbp->st_size)) == NULL)
{
fprintf(stderr,"error, malloc failed\n");
exit(1);
}
strcpy(lfilename, filename); /* save for write */
lfilesize = sbp->st_size; /* save for write */
if((ret = fread(fonttab, sizeof(*fonttab), sbp->st_size, in)) != sbp->st_size)
{
sprintf(buffer,"error reading file %s, size = %d, ret = %d\n",filename,sbp->st_size, ret);
perror(buffer);
exit(1);
}
}
/*---------------------------------------------------------------------------*
* write fontfile to disk
*---------------------------------------------------------------------------*/
void writefont()
{
FILE *in, *out;
int ret;
char buffer[1024];
if((in = fopen(lfilename, "r")) != NULL)
{
int c;
char wfn[1024];
strcpy(wfn, lfilename);
strcat(wfn, ".BAK");
if((out = fopen(wfn, "w")) == NULL)
{
sprintf(buffer, "cannot open file %s for writing", wfn);
perror(buffer);
exit(1);
}
while(( c = fgetc(in) ) != EOF )
fputc(c, out);
fclose(out);
fclose(in);
}
if((out = fopen(lfilename, "w")) == NULL)
{
sprintf(buffer, "cannot open file %s for writing", lfilename);
perror(buffer);
exit(1);
}
if((ret = fwrite(fonttab, sizeof(*fonttab), lfilesize, out)) != lfilesize)
{
sprintf(buffer,"error writing file %s, size=%d, ret=%d\n",lfilename,lfilesize, ret);
perror(buffer);
exit(1);
}
}
/*---------------------------------------------------------------------------*
* display a string
*---------------------------------------------------------------------------*/
void dis_cmd(char *strg)
{
move(22,0);
clrtoeol();
mvaddstr(22,0,strg);
refresh();
}
/*---------------------------------------------------------------------------*
* clear a command string
*---------------------------------------------------------------------------*/
void clr_cmd(void)
{
move(22,0);
clrtoeol();
refresh();
}
/*---------------------------------------------------------------------------*
* move char from src to dest
*---------------------------------------------------------------------------*/
void move_ch(int src, int dst)
{
unsigned char *s, *d;
int offset = 0;
if(ch_width == WIDTH16)
offset = 2;
else
offset = 1;
s = &(fonttab[ch_height * offset * src]);
d = &(fonttab[ch_height * offset * dst]);
bcopy(s, d, (ch_height*offset)); /* src -> dst */
}
/*---------------------------------------------------------------------------*
* exchange char's src and dest
*---------------------------------------------------------------------------*/
void xchg_ch(int src, int dst)
{
unsigned char *s, *d;
unsigned char buf[32];
int offset = 0;
if(ch_width == WIDTH16)
offset = 2;
else
offset = 1;
s = &(fonttab[ch_height * offset * src]);
d = &(fonttab[ch_height * offset * dst]);
bcopy(s, buf, (ch_height*offset)); /* src -> tmp */
bcopy(d, s, (ch_height*offset)); /* dst -> src */
bcopy(buf, d, (ch_height*offset)); /* tmp -> dst */
}
/*---------------------------------------------------------------------------*
* display the current selected character
*---------------------------------------------------------------------------*/
void display(int no)
{
unsigned char *fontchar;
char line[32];
int ln_no;
unsigned char hibyte;
unsigned char lobyte;
int offset;
int r;
offset = 0;
r = 1;
lobyte = 0;
if(ch_width == WIDTH16)
fontchar = &(fonttab[ch_height * 2 * no]);
else
fontchar = &(fonttab[ch_height * no]);
for (ln_no = 0; ln_no < ch_height; ln_no++)
{
hibyte = *(fontchar + (offset++));
if(ch_width == WIDTH16)
{
lobyte = *(fontchar + offset++);
}
strcpy(line,bitmask[(int)((hibyte >> 4) & 0x0f)]);
strcat(line,bitmask[(int)(hibyte & 0x0f)]);
if(ch_width == WIDTH16)
{
strcat(line,bitmask[(int)((lobyte >> 4) & 0x0f)]);
strcat(line,bitmask[(int)(lobyte & 0x0f)]);
mvwprintw(ch_win, r, 1, "%16.16s", line);
}
else
{
mvwprintw(ch_win, r, 1, "%8.8s", line);
}
r++;
}
wmove(ch_win, 1, 1);
wrefresh(ch_win);
}
/*---------------------------------------------------------------------------*
* save character
*---------------------------------------------------------------------------*/
void save_ch(void)
{
unsigned char *s;
int offset = 0;
int r, c;
unsigned short byte;
unsigned short shift;
if(ch_width == WIDTH16)
offset = 2;
else
offset = 1;
s = &(fonttab[ch_height * offset * curchar]);
r = 1;
while(r <= ch_height)
{
c = 1;
byte = 0;
if(offset == 2)
shift = 0x8000;
else
shift = 0x80;
while(c <= ch_width)
{
if(mvwinch(ch_win, r, c) == BLACK)
byte |= shift;
shift = (shift >> 1);
c++;
}
*s++ = byte;
r++;
}
}
/*---------------------------------- E O F ----------------------------------*/

View File

@ -1,334 +0,0 @@
/*
* Copyright (c) 1992, 1993, 1994 by Hellmuth Michaelis
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Hellmuth Michaelis.
* 4. The name of the developer may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPER ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* select.c, 3.00, last edit-date: [Sun Jan 2 20:09:36 1994]
*/
/*---------------------------------------------------------------------------
*
* select.c font editor select character
* ----------------------------------------------------
*
* written by Hellmuth Michaelis, hm@hcshh.hcs.de
*
* -hm first public release
* -hm debugging
*
*---------------------------------------------------------------------------*/
#include "fed.h"
int sc, sr, scurchar;
int edit();
void sel_mode(void)
{
mvwprintw(cmd_win,1,1,"(E)dit ");
mvwprintw(cmd_win,2,1,"(M)ove ");
mvwprintw(cmd_win,3,1,"exchan(G)e ");
mvwprintw(cmd_win,4,1,"(Q)uit/Save ");
mvwprintw(cmd_win,5,1,"e(X)it/Undo ");
mvwprintw(cmd_win,6,1," ");
mvwprintw(cmd_win,7,1," ");
mvwprintw(cmd_win,8,1," ");
mvwprintw(cmd_win,9 ,1," ");
mvwprintw(cmd_win,10,1," ");
mvwprintw(cmd_win,11,1," ");
mvwprintw(cmd_win,12,1," ");
mvwprintw(cmd_win,13,1,"(^P)rev Line");
mvwprintw(cmd_win,14,1,"(^N)ext Line");
mvwprintw(cmd_win,15,1,"(^F)orwd Col");
mvwprintw(cmd_win,16,1,"(^B)ack Col");
wrefresh(cmd_win);
}
int selectc()
{
int c, r;
int ret;
char h, l;
unsigned int k_ch;
c = (curchar / 16);
r = (curchar % 16);
for(;;)
{
dis_cmd(" Select Character");
sel_mode();
curchar = r + (c*16);
display(curchar);
h = ((mvwinch(set_win,(r+1),((c*2)+1))) & A_CHARTEXT);
l = ((mvwinch(set_win,(r+1),((c*2)+2))) & A_CHARTEXT);
wattron(set_win,A_REVERSE);
mvwprintw(set_win,(r+1),((c*2)+1),"%c%c",h,l);
wattroff(set_win,A_REVERSE);
wmove(set_win,(r+1),((c*2)+1));
wrefresh(set_win);
k_ch = wgetch(set_win);
switch(k_ch)
{
case K_LEFT:
case KEY_LEFT:
if(c > 0)
{
normal_set(r,c);
c--;
}
break;
case K_DOWN:
case KEY_DOWN:
if(r < 15)
{
normal_set(r,c);
r++;
}
break;
case K_UP:
case KEY_UP:
if(r > 0)
{
normal_set(r,c);
r--;
}
break;
case K_RIGHT:
case KEY_RIGHT:
if(c < 15)
{
normal_set(r,c);
c++;
}
break;
case 'e':
case 'E':
edit_mode();
dis_cmd(" Edit Character");
display(curchar);
ret = edit();
if(ret == 1)
save_ch();
break;
case 'g':
case 'G':
dis_cmd(" Exchange: select Destination, then press RETURN or any other Key to ABORT");
sr = r;
sc = c;
scurchar = curchar;
if((curchar = sel_dest()) == -1)
{ /* failsafe */
r = sr;
c = sc;
curchar = scurchar;
}
else
{ /* valid return */
normal_set(r,c);
c = (curchar / 16);
r = (curchar % 16);
xchg_ch(scurchar,curchar);
}
break;
case 'm':
case 'M':
dis_cmd(" Move: select Destination, then press RETURN or any other Key to ABORT");
sr = r;
sc = c;
scurchar = curchar;
if((curchar = sel_dest()) == -1)
{ /* failsafe */
r = sr;
c = sc;
curchar = scurchar;
}
else
{ /* valid return */
normal_set(r,c);
c = (curchar / 16);
r = (curchar % 16);
move_ch(scurchar,curchar);
}
break;
case 'q':
case 'Q':
normal_set(r,c);
wrefresh(set_win);
return(1);
break;
case 'x':
case 'X':
normal_set(r,c);
wrefresh(set_win);
return(0);
break;
case 0x0c:
wrefresh(curscr);
break;
default:
beep();
break;
}
}
}
void normal_set(int r, int c)
{
char h, l;
h = ((mvwinch(set_win,(r+1),((c*2)+1))) & A_CHARTEXT);
l = ((mvwinch(set_win,(r+1),((c*2)+2))) & A_CHARTEXT);
wattroff(set_win,A_REVERSE);
mvwprintw(set_win,(r+1),((c*2)+1),"%c%c",h,l);
wmove(set_win,(r+1),((c*2)+1));
}
int sel_dest(void)
{
int c, r;
char h, l;
unsigned int k_ch;
c = (curchar / 16);
r = (curchar % 16);
for(;;)
{
curchar = r + (c*16);
display(curchar);
h = ((mvwinch(set_win,(r+1),((c*2)+1))) & A_CHARTEXT);
l = ((mvwinch(set_win,(r+1),((c*2)+2))) & A_CHARTEXT);
wattron(set_win,A_UNDERLINE);
mvwprintw(set_win,(r+1),((c*2)+1),"%c%c",h,l);
wattroff(set_win,A_UNDERLINE);
wmove(set_win,(r+1),((c*2)+1));
wrefresh(set_win);
k_ch = wgetch(set_win);
switch(k_ch)
{
case K_LEFT:
case KEY_LEFT:
if(c > 0)
{
normal_uset(r,c);
c--;
}
break;
case K_DOWN:
case KEY_DOWN:
if(r < 15)
{
normal_uset(r,c);
r++;
}
break;
case K_UP:
case KEY_UP:
if(r > 0)
{
normal_uset(r,c);
r--;
}
break;
case K_RIGHT:
case KEY_RIGHT:
if(c < 15)
{
normal_uset(r,c);
c++;
}
break;
case '\r':
case '\n':
normal_uset(r,c);
return(r + (c*16));
case 0x0c:
wrefresh(curscr);
break;
default:
normal_uset(r,c);
return(-1);
}
}
}
void normal_uset(int r, int c)
{
char h, l;
h = ((mvwinch(set_win,(r+1),((c*2)+1))) & A_CHARTEXT);
l = ((mvwinch(set_win,(r+1),((c*2)+2))) & A_CHARTEXT);
wattroff(set_win,A_UNDERLINE);
mvwprintw(set_win,(r+1),((c*2)+1),"%c%c",h,l);
wmove(set_win,(r+1),((c*2)+1));
if((r==sr) && (c==sc))
{
wattron(set_win,A_REVERSE);
mvwprintw(set_win,(r+1),((c*2)+1),"%c%c",h,l);
wattroff(set_win,A_REVERSE);
wmove(set_win,(r+1),((c*2)+1));
}
}
/*---------------------------------- E O F ----------------------------------*/

View File

@ -1,3 +0,0 @@
PROG= fontedit
.include <bsd.prog.mk>

View File

@ -1,36 +0,0 @@
When I first saw this posted to rn, I tried to compile this on a machine
running BSD UNIX. Much to my dissapointment, It said "unable to find
/usr/include/termio.h" and thus it sat for a couple months. I was able to
compile it on a 3b5, but I didn't have a vt220 hooked up to it. I was doing
some unrelated work with ioctl calls and finally realized that it would not be
too hard to convert it from System V to BSD. It also looked kind of strange
with the cursor on, so I turned this off. To implement this, compile with
the "-DCURFIX" flag in the Makefile.
I am working on a new version that uses curses and that would enable you to
change the file that your are working on without leaving the program.
I thought I'd post it as it is now, since it has a lot of uses right away.
Imagine changing your favorite game to have objects that look like what they
are instead of the regular characters. Also, I think people should post their
own character sets, if they come up with some neat stuff.
Please send any comments or suggestions to:
UUCP : ..!harvard!bu-cs!bucsb!eap
ARPANET: eap@bucsb.bu.edu
CSNET : eap%bucsb@bu-cs
Have fun,
- Eric Pearce
Boston University

View File

@ -1,58 +0,0 @@
.TH FONTEDIT 1 LOCAL
.SH NAME
fontedit \- Edit fonts.
.SH SYNOPSIS
.B fontedit file
.SH DESCRIPTION
.I Fontedit
is used to edit the down line reloadable character set (DRCS) of a VT220
terminal. The editor has two display areas, one for displaying the
entry currently being manipulated, and one for displaying the complete
DRCS. Commands to the editor take the form of function keys.
.PP
.I Fontedit
takes one command line parameter, a file name. This file is
used to save the character set. If the file exists when \fIfontedit\fP
is invoked, it is read in to initialize the DRCS. The file is written
to when \fIfontedit\fP exits.
.PP
Commands to fontedit take the form of function keys. The current
definitions are:
.IP \fBHELP\fP
Display a help screen.
.IP \fBF6\fP
Turn the pixel under the cursor on.
.IP \fBF7\fP
Turn the pixel under the cursor off.
.IP \fBF13\fP
Clear the display area.
.IP \fBFind\fP
Save the current font in the font table. Update the DRCS display.
.IP \fBSelect\fP
Extract the entry selected by the cursor in the DRCS display.
.IP \fBPrev\fP
Move the cursor to the previous entry in the DRCS display.
.IP \fBNext\fP
Move the cursor to the next entry in the DRCS display.
.IP \fBInsert\fP
Insert a blank line at the current cursor position. The bottom row is lost.
.IP \fBRemove\fP
Remove the row at the current cursor position. All rows below the
current one are shifted up.
.IP \fBCursors\fP
Move the cursor in the main display area.
.PP
If the screen gets garbled, press <control-L>.
.PP
To exit \fIfontedit\fP, press <control-D>. The DRCS will be saved in
\fIfile\fP. To exit without saving the DRCS, hit interrupt (usually
DEL).
.SH DIAGNOSTICS
.I Fontedit
will issue a warning when the entry being worked on is not saved, and
some potentially destructive command, like \fBSelect\fP is used. To
override the warning message, immediately reissue the command.
.SH AUTHOR
Greg Franks.

View File

@ -1,925 +0,0 @@
/*
* fontedit
* Fonteditor for VT220
*
* BUGS:
* o Cursor motion is less than optimal (but who cares at 9600),
*
* COMPILE:
* cc -O fontedit.c -o fontedit
* (use Makefile)
*
* Copyright (c) 1987 by Greg Franks.
*
* Permission is granted to do anything you want with this program
* except claim that you wrote it.
*
*
* REVISION HISTORY:
*
* Nov 21, 1987 - Fixed man page to say "Fontedit" instead of "Top"
* Nov 22, 1987 - Added BSD Compatible ioctl, turned cursor on/off
* - eap@bucsf.bu.edu
*/
void clear_screen();
#include <stdio.h>
#ifdef SYSV
#include <sys/termio.h>
#endif SYSV
#ifdef BSD
#include <sys/ioctl.h>
#endif BSD
#if defined (__NetBSD__) || defined (__FreeBSD__)
#include <sys/termios.h>
#include <sys/ioctl.h>
#endif /* __NetBSD__ || __FreeBSD__ */
#include <signal.h>
#ifdef CURFIX
#define CURSORON "\033[?25h"
#define CURSOROFF "\033[?25l"
#endif CURFIX
#define MAX_ROWS 10
#define MAX_COLS 8
typedef enum { false, true } bool;
#define KEY_FIND 0x0100
#define KEY_INSERT 0x0101
#define KEY_REMOVE 0x0102
#define KEY_SELECT 0x0103
#define KEY_PREV 0x0104
#define KEY_NEXT 0x0105
#define KEY_F6 0X0106
#define KEY_F7 0x0107
#define KEY_F8 0x0108
#define KEY_F9 0x0109
#define KEY_F10 0x010a
#define KEY_F11 0x010b
#define KEY_F12 0x010c
#define KEY_F13 0x010d
#define KEY_F14 0x010e
#define KEY_HELP 0x010f
#define KEY_DO 0x0110
#define KEY_F17 0x0111
#define KEY_F18 0x0112
#define KEY_F19 0x0113
#define KEY_F20 0x0114
#define KEY_UP 0x0115
#define KEY_DOWN 0x0116
#define KEY_RIGHT 0x0117
#define KEY_LEFT 0x0118
/*
* Position of main drawing screen.
*/
#define ROW_OFFSET 3
#define COL_OFFSET 10
/*
* Position of the DRCS table.
*/
#define TABLE_ROW 4
#define TABLE_COL 50
/*
*
*/
#define ERROR_ROW 20
#define ERROR_COL 40
bool display_table[MAX_ROWS][MAX_COLS];
#define TOTAL_ENTRIES (128 - 32)
#define SIXELS_PER_CHAR 16
char font_table[TOTAL_ENTRIES][SIXELS_PER_CHAR];
unsigned int current_entry;
#ifdef SYSV
struct termio old_stty, new_stty;
#endif SYSV
#ifdef BSD
struct sgttyb old_stty, new_stty;
#endif BSD
#if defined (__NetBSD__) || defined (__FreeBSD__)
struct termios old_stty, new_stty;
#endif /* __NetBSD__ || __FreeBSD__ */
FILE * font_file = (FILE *)0;
/*
* Interrupt
* Exit gracefully.
*/
interrupt()
{
void clear_screen();
#ifdef CURFIX
printf("%s\n",CURSORON);
#endif CURFIX
#ifdef SYSV
ioctl( 0, TCSETA, &old_stty );
#endif SYSV
#ifdef BSD
ioctl( 0, TIOCSETP, &old_stty );
#endif BSD
#if defined (__NetBSD__) || defined (__FreeBSD__)
ioctl( 0, TIOCSETA, &old_stty );
#endif /* __NetBSD__ || __FreeBSD__ */
clear_screen();
exit( 0 );
}
/*
* Main
* Grab input/output file and call main command processor.
*/
main( argc, argv )
int argc;
char *argv[];
{
void command(), init_restore(), clear_screen();
void save_table(), get_table(), extract_entry();
if ( argc != 2 ) {
fprintf( stderr, "usage: fontedit filename\n" );
exit( 1 );
}
printf( "Press HELP for help\n" );
printf( "\033P1;1;2{ @\033\\" ); /* Clear font buffer */
fflush( stdout );
sleep( 1 ); /* Let terminal catch up */
/* otherwise we get frogs */
if ( ( font_file = fopen( argv[1], "r" ) ) == (FILE *)0 ) {
if ( ( font_file = fopen( argv[1], "w" ) ) == (FILE *)0 ) {
fprintf( stderr, "Cannot create file %s \n", argv[1] );
exit( 1 );
}
}
fclose( font_file );
if ( ( font_file = fopen( argv[1], "r" ) ) != (FILE *)0 ) {
get_table( font_file );
fclose( font_file );
}
if ( ( font_file = fopen( argv[1], "r+" ) ) == (FILE *)0 ) {
fprintf( stderr, "Cannot open %s for writing\n", argv[1] );
exit( 1 );
}
#ifdef CURFIX
printf("%s\n",CURSOROFF);
#endif CURFIX
#ifdef SYSV
ioctl( 0, TCGETA, &old_stty );
#endif SYSV
#ifdef BSD
ioctl( 0, TIOCGETP, &old_stty );
#endif BSD
#if defined (__NetBSD__) || defined (__FreeBSD__)
ioctl( 0, TIOCGETA, &old_stty );
#endif /* __NetBSD__ || __FreeBSD__ */
signal( SIGINT, (void *) interrupt );
new_stty = old_stty;
#ifdef SYSV
new_stty.c_lflag &= ~ICANON;
new_stty.c_cc[VMIN] = 1;
ioctl( 0, TCSETA, &new_stty );
#endif SYSV
#if defined (__NetBSD__) || defined (__FreeBSD__)
new_stty.c_lflag &= ~ICANON;
new_stty.c_lflag &= ~ECHO;
new_stty.c_cc[VMIN] = 1;
ioctl( 0, TIOCSETA, &new_stty );
#endif /* __NetBSD__ || __FreeBSD__ */
#ifdef BSD
new_stty.sg_flags |= CBREAK;
new_stty.sg_flags &= ~ECHO;
ioctl( 0, TIOCSETP, &new_stty );
#endif BSD
current_entry = 1;
extract_entry( current_entry );
init_restore();
command();
#ifdef SYSV
ioctl( 0, TCSETA, &old_stty );
#endif SYSV
#ifdef BSD
ioctl( 0, TIOCSETP, &old_stty );
#endif BSD
#if defined (__NetBSD__) || defined (__FreeBSD__)
ioctl( 0, TIOCSETA, &old_stty );
#endif /* __NetBSD__ || __FreeBSD__ */
clear_screen();
/* Overwrite the old file. */
fseek( font_file, 0L, 0 );
save_table( font_file );
fclose( font_file );
#ifdef CURFIX
printf("%s\n",CURSORON);
#endif CURFIX
}
/*
* Command
* Process a function key.
*
* The user cannot fill in slots 0 or 95 (space and del respecitively).
*/
void
command()
{
register int c;
register int row, col;
register int i, j;
bool change, error, override;
void build_entry(), extract_entry(), send_entry(), print_entry();
void highlight(), draw_current(), init_restore(), help();
void warning();
change = false;
error = false;
override = false;
row = 0; col = 0;
highlight( row, col, true );
for ( ;; ) {
c = get_key();
highlight( row, col, false ); /* turn cursor off */
if ( error ) {
move ( ERROR_ROW, ERROR_COL );
printf( "\033[K" ); /* Clear error message */
move ( ERROR_ROW+1, ERROR_COL );
printf( "\033[K" ); /* Clear error message */
error = false;
} else {
override = false;
}
switch ( c ) {
case KEY_FIND: /* update DRCS */
if ( !change && !override ) {
warning( "No changes to save" );
override = true;
error = true;
} else {
build_entry( current_entry );
send_entry( current_entry );
print_entry( current_entry, true );
change = false;
}
break;
case KEY_F6: /* Turn on pixel */
change = true;
display_table[row][col] = true;
highlight( row, col, false );
col = ( col + 1 ) % MAX_COLS;
if ( col == 0 )
row = ( row + 1 ) % MAX_ROWS;
break;
case KEY_F7: /* Turn off pixel */
change = true;
display_table[row][col] = false;
highlight( row, col, false );
col = ( col + 1 ) % MAX_COLS;
if ( col == 0 )
row = ( row + 1 ) % MAX_ROWS;
break;
case KEY_INSERT: /* Insert a blank row */
change = true;
for ( j = 0; j < MAX_COLS; ++j ) {
for ( i = MAX_ROWS - 1; i > row; --i ) {
display_table[i][j] = display_table[i-1][j];
}
display_table[row][j] = false;
}
draw_current();
break;
case KEY_REMOVE: /* Remove a row */
change = true;
for ( j = 0; j < MAX_COLS; ++j ) {
for ( i = row; i < MAX_ROWS - 1; ++i ) {
display_table[i][j] = display_table[i+1][j];
}
display_table[MAX_ROWS-1][j] = false;
}
draw_current();
break;
case KEY_F13: /* Clear buffer */
if ( change && !override ) {
warning( "Changes not saved" );
error = true;
override = true;
} else {
for ( j = 0; j < MAX_COLS; ++j ) {
for ( i = 0; i < MAX_ROWS; ++i ) {
display_table[i][j] = false;
}
}
draw_current();
}
break;
case KEY_SELECT: /* Select font from DRCS */
if ( change && !override ) {
warning( "Changes not saved" );
error = true;
override = true;
} else {
extract_entry( current_entry );
draw_current();
}
break;
case KEY_PREV: /* Move to prev entry in DRCS */
if ( change && !override ) {
warning( "Changes not saved" );
override = true;
error = true;
} else {
print_entry( current_entry, false );
current_entry = current_entry - 1;
if ( current_entry == 0 )
current_entry = TOTAL_ENTRIES - 2;
print_entry( current_entry, true );
}
break;
case KEY_NEXT: /* Move to next entry in DRCS */
if ( change && !override ) {
warning( "Changes not saved" );
override = true;
error = true;
} else {
print_entry( current_entry, false );
current_entry = current_entry + 1;
if ( current_entry == TOTAL_ENTRIES - 1 )
current_entry = 1;
print_entry( current_entry, true );
}
break;
case KEY_UP: /* UP one row. */
if ( row == 0 )
row = MAX_ROWS;
row = row - 1;
break;
case KEY_DOWN: /* Guess. */
row = ( row + 1 ) % MAX_ROWS;
break;
case KEY_RIGHT:
col = ( col + 1 ) % MAX_COLS;
break;
case KEY_LEFT:
if ( col == 0 )
col = MAX_COLS;
col = col - 1;
break;
case KEY_HELP: /* Display helpful info */
clear_screen();
help();
c = getchar();
init_restore();
break;
case '\004': /* All done! */
return;
case '\f': /* Redraw display */
init_restore();
break;
default: /* user is a klutzy typist */
move ( ERROR_ROW, ERROR_COL );
printf( "Unknown key: " );
if ( c < 0x20 ) {
printf( "^%c", c );
} else if ( c < 0x0100 ) {
printf( "%c", c );
} else {
printf( "0x%04x", c );
}
fflush( stdout );
error = true;
}
highlight( row, col, true ); /* turn cursor on */
}
}
char *key_table[] = {
"\033[1~", /* Find */
"\033[2~", /* Insert */
"\033[3~", /* Remove */
"\033[4~", /* Select */
"\033[5~", /* Prev */
"\033[6~", /* Next */
"\033[17~",
"\033[18~",
"\033[19~",
"\033[20~",
"\033[21~",
"\033[23~",
"\033[24~",
"\033[25~",
"\033[26~",
"\033[28~",
"\033[29~",
"\033[31~",
"\033[32~",
"\033[33~",
"\033[34~",
"\033[A",
"\033[B",
"\033[C",
"\033[D",
(char *)0 };
/*
* get_key
* Convert VT220 escape sequence into something more reasonable.
*/
int
get_key()
{
register char *p;
char s[10];
register int i, j;
p = s;
for ( i = 0; i < 10; ++i ) {
*p = getchar();
if ( i == 0 && *p != '\033' )
return( (int)*p ); /* Not an escape sequence */
if ( *p != '\033' && *p < 0x0020 )
return( (int)*p ); /* Control character */
*++p = '\0'; /* Null terminate */
for ( j = 0; key_table[j]; ++j ) {
if ( strcmp( s, key_table[j] ) == 0 ) {
return( j | 0x0100 );
}
}
}
return( -1 );
}
/*
* pad
* Emit nulls so that the terminal can catch up.
*/
pad()
{
int i;
for ( i = 0; i < 20; ++i )
putchar( '\000' );
fflush( stdout );
}
/*
* init_restore
* refresh the main display table.
*/
void
init_restore()
{
register int row, col;
register int i;
void draw_current(), clear_screen(), print_entry();
clear_screen();
for ( col = 0; col < MAX_COLS; ++col ) {
move( ROW_OFFSET - 2, col * 3 + COL_OFFSET + 1 );
printf( "%d", col );
}
move( ROW_OFFSET - 1, COL_OFFSET );
printf( "+--+--+--+--+--+--+--+--+" );
move( ROW_OFFSET + MAX_ROWS * 2, COL_OFFSET );
printf( "+--+--+--+--+--+--+--+--+" );
for ( row = 0; row < MAX_ROWS; ++row ) {
if ( row != 0 && row != 7 ) {
move( row * 2 + ROW_OFFSET, COL_OFFSET - 2 );
printf( "%d|", row );
move( row * 2 + ROW_OFFSET + 1, COL_OFFSET - 1 );
printf( "|" );
move( row * 2 + ROW_OFFSET, COL_OFFSET + MAX_COLS * 3 );
printf( "|" );
move( row * 2 + ROW_OFFSET + 1, COL_OFFSET + MAX_COLS * 3 );
printf( "|" );
} else {
move( row * 2 + ROW_OFFSET, COL_OFFSET - 2 );
printf( "%d*", row );
move( row * 2 + ROW_OFFSET + 1, COL_OFFSET - 1 );
printf( "*" );
move( row * 2 + ROW_OFFSET, COL_OFFSET + MAX_COLS * 3 );
printf( "*" );
move( row * 2 + ROW_OFFSET + 1, COL_OFFSET + MAX_COLS * 3 );
printf( "*" );
}
}
draw_current();
move( TABLE_ROW - 1, TABLE_COL - 1 );
printf( "+-+-+-+-+-+-+-+-+-+-+-+-+" );
move( TABLE_ROW + 8 * 2 - 1, TABLE_COL - 1 );
printf( "+-+-+-+-+-+-+-+-+-+-+-+-+" );
for ( i = 0; i < 8; ++i ) {
move ( TABLE_ROW + i * 2, TABLE_COL - 1 );
printf( "|" );
move ( TABLE_ROW + i * 2 + 1, TABLE_COL - 1 );
printf( "+" );
move ( TABLE_ROW + i * 2, TABLE_COL + 12 * 2 - 1);
printf( "|" );
move ( TABLE_ROW + i * 2 + 1, TABLE_COL +12 * 2 - 1);
printf( "+" );
}
for ( i = 0; i < TOTAL_ENTRIES; ++i )
print_entry( i, (i == current_entry) ? true : false );
}
/*
* draw_current
* Draw the complete current entry.
*/
void
draw_current()
{
register int row, col;
printf( "\033)0" ); /* Special graphics in G1 */
printf( "\016" ); /* Lock in G1 (SO) */
for ( row = 0; row < MAX_ROWS; ++row ) {
for ( col = 0; col < MAX_COLS; ++col ) {
if ( display_table[row][col] ) {
move( row * 2 + ROW_OFFSET, col * 3 + COL_OFFSET );
printf( "\141\141\141" );
move( row * 2 + ROW_OFFSET + 1, col * 3 + COL_OFFSET );
printf( "\141\141\141" );
} else {
move( row * 2 + ROW_OFFSET, col * 3 + COL_OFFSET );
printf( " " ); /* erase splat */
move( row * 2 + ROW_OFFSET + 1, col * 3 + COL_OFFSET );
printf( " " ); /* erase splat */
}
}
pad();
}
printf( "\017" ); /* Lock in G0 (SI) */
fflush( stdout );
}
/*
* highlight
* Draw the cursor in the main display area.
*/
void
highlight( row, col, on )
unsigned int row, col;
bool on;
{
printf( "\033)0" ); /* Special graphics in G1 */
printf( "\016" ); /* Lock in G1 (SO) */
if ( on ) {
printf( "\033[7m" ); /* Reverse video cursor */
}
if ( display_table[row][col] ) {
move( row * 2 + ROW_OFFSET, col * 3 + COL_OFFSET );
printf( "\141\141\141" );
move( row * 2 + ROW_OFFSET + 1, col * 3 + COL_OFFSET );
printf( "\141\141\141" );
} else {
move( row * 2 + ROW_OFFSET, col * 3 + COL_OFFSET );
printf( " " ); /* erase splat */
move( row * 2 + ROW_OFFSET + 1, col * 3 + COL_OFFSET );
printf( " " ); /* erase splat */
}
pad();
printf( "\017" ); /* Lock in G0 (SI) */
printf( "\033[0m" ); /* normal video */
printf( "\b" ); /* Back up one spot */
fflush( stdout );
}
/*
* Clear_screen
*/
void
clear_screen()
{
printf( "\033[H\033[J" ); /* Clear screen. */
fflush( stdout );
}
/*
* move
*/
move( y, x )
int y, x;
{
printf( "\033[%d;%df", y, x );
}
/*
* Build_entry
* Convert the bit pattern used in the main display area into something
* that the vt220 can digest - namely sixels...
*/
void
build_entry( entry_no )
unsigned int entry_no;
{
register int row, col;
register unsigned int mask;
for ( col = 0; col < 8; ++col ) {
/* Top set of sixels */
mask = 0;
for ( row = 5; row >= 0; --row ) {
mask = mask << 1;
if ( display_table[row][col] )
mask |= 1;
}
font_table[entry_no][col] = mask + 077;
/* Bottom set of sixels */
mask = 0;
for ( row = 9; row >= 6; --row ) {
mask = mask << 1;
if ( display_table[row][col] )
mask |= 1;
}
font_table[entry_no][col+8] = mask + 077;
}
}
/*
* Extract_engry
* convert sixel representation into an array of bits.
*/
void
extract_entry( entry_no )
unsigned int entry_no;
{
register int row, col;
register unsigned int mask;
for ( col = 0; col < 8; ++col ) {
/* Top set of sixels */
mask = font_table[entry_no][col];
if ( mask >= 077 )
mask -= 077;
else
mask = 0; /* Bogus entry */
for ( row = 0; row <= 5; ++row ) {
display_table[row][col] = (bool)(mask & 0x0001);
mask = mask >> 1;
}
/* Bottom set of sixels */
mask = font_table[entry_no][col+8];
if ( mask >= 077 )
mask -= 077;
else
mask = 0;
for ( row = 6; row <= 9; ++row ) {
display_table[row][col] = (bool)(mask & 0x0001);
mask = mask >> 1;
}
}
}
/*
* Send_entry
* Emit the stuff used by the VT220 to load a character into the
* DRCS. We could, of course, send more than one entry at a time...
*/
void
send_entry( entry_no )
int entry_no;
{
register char *fp = font_table[entry_no];
printf( "\033P1;%d;1;0;0;0{ @%c%c%c%c%c%c%c%c/%c%c%c%c%c%c%c%c\033\\",
entry_no,
fp[ 0], fp[ 1], fp[ 2], fp[ 3], fp[ 4], fp[ 5], fp[ 6], fp[ 7],
fp[ 8], fp[ 9], fp[10], fp[11], fp[12], fp[13], fp[14], fp[15] );
}
/*
* Print_entry
* The terminal normally has G0 in GL. We don't want to change
* this, nor do we want to use GR. Sooooo send out the necessary
* magic for shifting in G2 temporarily for the character that we
* want to display.
*/
void
print_entry( entry_no, highlight )
register unsigned int entry_no;
bool highlight;
{
register int y, x;
y = entry_no & 0x07;
x = entry_no >> 3 & 0x1f;
entry_no += 32; /* Map up to G set */
move( y * 2 + TABLE_ROW, x * 2 + TABLE_COL );
if ( highlight )
printf( "\033[7m" );
printf( "\033* @" ); /* select DRCS into G2 */
printf( "\033N" ); /* select single shift */
printf( "%c", entry_no ); /* Draw the character */
if ( highlight )
printf( "\033[0m" );
}
/*
* Save_table
* Save a font table
*/
void
save_table( font_file )
FILE *font_file;
{
register char *fp;
register int i;
for ( i = 0; i < TOTAL_ENTRIES; ++i ) {
fp = font_table[i];
fprintf( font_file, "\033P1;%d;1;0;0;0{ @%c%c%c%c%c%c%c%c/%c%c%c%c%c%c%c%c\033\\\n",
i,
fp[ 0], fp[ 1], fp[ 2], fp[ 3], fp[ 4], fp[ 5], fp[ 6], fp[ 7],
fp[ 8], fp[ 9], fp[10], fp[11], fp[12], fp[13], fp[14], fp[15] );
}
}
/*
* Get_table
* Extract font table entries from a file
*/
void
get_table( font_file )
FILE *font_file;
{
char s[256];
register char *p;
char *fp;
int i;
register int j;
while( fgets( s, 255, font_file ) ) {
if ( strncmp( s, "\033P1;", 4 ) != 0 )
continue; /* Bogus line */
p = &s[4];
if ( sscanf( p, "%d", &i ) != 1 )
continue; /* Illegal entry number */
if ( i <= 0 || TOTAL_ENTRIES <= i )
continue; /* Bogues entry */
fp = font_table[i];
while ( *p && *p != '@' )
++p; /* Skip to font definition */
if ( ! *p++ )
continue; /* Skip @ */
for ( j = 0; *p && *p != '\033' && j < 16; ++j, ++p ) {
if ( *p == '/' ) {
j = 8;
++p;
}
fp[j] = *p;
}
send_entry( i );
}
}
/*
* Help
* Print out help information.
*/
void
help()
{
printf( "Font editor\n\n" );
printf( "F6 - Pixel on\n" );
printf( "F7 - Pixel off\n" );
printf( "F13 - Clear display area\n" );
printf( "HELP - This screen\n" );
printf( "FIND - Update font table\n" );
printf( "INSERT - Insert a blank row\n" );
printf( "REMOVE - Remove a row\n" );
printf( "SELECT - Select current font table entry\n" );
printf( "PREV - Move to previous font table entry\n" );
printf( "NEXT - Move to next font table entry\n" );
printf( "^D - Exit\n" );
printf( "\n\n\n\nPress any key to continue\n" );
}
/*
* Warning
* Issue a warning to the regarding the current status.
*/
void
warning( s )
char *s;
{
move( ERROR_ROW, ERROR_COL );
printf( "Warning: %s!\n", s );
move( ERROR_ROW+1, ERROR_COL );
printf( " Reissue command to override\n" );
}

View File

@ -1,38 +0,0 @@
The font files:
vt100pc.814.uu, vt100sg.814.uu, vt220h.808.uu, vt220h.810.uu,
vt220h.814.uu, vt220h.816.uu, vt220l.808.uu, vt220l.810.uu,
vt220l.814.uu and vt220l.816.uu
in this directory are
Copyright (c) 1992, 1993, 1994 Hellmuth Michaelis and Joerg Wunsch
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. All advertising materials mentioning features or use of this software
must display the following acknowledgement:
This product includes software developed by
Hellmuth Michaelis and Joerg Wunsch
4. The name authors may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,19 +0,0 @@
# $Id$
.SUFFIXES: .uu
.uu:
rm -f ${.TARGET}
uudecode ${.IMPSRC}
FONTS= vt220h.808 vt220h.810 vt220h.814 vt220h.816 \
vt220l.808 vt220l.810 vt220l.814 vt220l.816
#FONTS+= vt100pc.814 vt100sg.814
CLEANFILES= ${FONTS}
all: ${FONTS}
beforeinstall:
${INSTALL} ${COPY} -o ${BINOWN} -g ${BINGRP} -m ${NOBINMODE} \
${FONTS} ${DESTDIR}${FONTDIR}
.include <bsd.prog.mk>

View File

@ -1,83 +0,0 @@
begin 644 vt100pc.814
M`$1D5$Q$`"`@("`^````/$`X!'@`(B(^(B(````\0#@$>``B%`@4(@```'Q`
M>$!\`"(4"!0B````?$!X0'P`/@@("`@```!\0'A`?``<(B(J'`(``#A$?$1$
M`"0H,"@D````>$1X1'@`("`@(#X```!X1'A$>``>(!P"/````$1$?$1$`#X(
M"`@(````0$!`0'P`/B`\("````!$1$0H$``^"`@("````'Q`>$!``#X@/"`@
M````/$!`0#P`/"(\)"(````\0#@$>``<(B(B'````#Q`.`1X`!P("`@<````
M>$1$1'@`("`@(#X```!X1$1$>``$#`0$#@```'A$1$1X`!PB#!`^````>$1$
M1'@`'`(,`AP```!X1$1$>``$"!(^`@```$1D5$Q$`"(D."0B````/$`X!'@`
M(A0("`@```!\0'A`?``\(CPB/````#Q`0$`\`"(R*B8B````?$!X0'P`(C8J
M(B(````\0#@$>``B(B(B'````'Q`>$!\`!X@("`>````?$!X0$``'B`<`CP`
M```\0$Q$/``>(!P"/````'A$>$A$`!X@'`(\````1$1$1#@`'B`<`CP`````
M```````````````````8/#P\&!@`&!@`````8V-C(@``````````````-C9_
M-C8V?S8V````#`P^8V%@/@-#8SX,#```````86,&#!@S8P``````'#8V'#MN
M9F8[`````#`P,&````````````````P8,#`P,#`8#```````&`P&!@8&!@P8
M`````````&8\_SQF```````````8&!C_&!@8````````````````&!@8,```
M````````_P`````````````````````8&````````0,&#!@P8$`````````^
M8V=O>W-C8SX```````P</`P,#`P,/P``````/F,#!@P8,&-_```````^8P,#
M'@,#8SX```````8.'C9F?P8&#P``````?V!@8'X#`V,^```````<,&!@?F-C
M8SX``````']C`P8,&!@8&```````/F-C8SYC8V,^```````^8V-C/P,#!CP`
M```````8&````!@8`````````!@8````&!@P```````&#!@P8#`8#`8`````
M`````'X``'X`````````8#`8#`8,&#!@```````^8V,&#`P`#`P``````#YC
M8V]O;VY@/@``````"!PV8V-_8V-C``````!^,S,S/C,S,WX``````!XS86!@
M8&$S'@``````?#8S,S,S,S9\``````!_,3$T/#0Q,7\``````'\Q,30\-#`P
M>```````'C-A8&!O8S,=``````!C8V-C?V-C8V,``````#P8&!@8&!@8/```
M````#P8&!@8&9F8\``````!S,S8V/#8V,W,``````'@P,#`P,#$Q?P``````
MP^?_V\/#P\/#``````!C<WM_;V=C8V,``````!PV8V-C8V,V'```````?C,S
M,SXP,#!X```````^8V-C8VMO/@8'`````'XS,S,^-C,S<P``````/F-C,!P&
M8V,^``````#_F9D8&!@8&#P``````&-C8V-C8V-C/@``````P\/#P\/#9CP8
M``````##P\/#V]O_9F8``````,/#9CP8/&;#PP``````P\/#9CP8&!@\````
M``#_@X8,&#!AP?\``````#PP,#`P,#`P/```````0&!P.!P.!P,!```````\
M#`P,#`P,##P````('#9C`````````````````````````````/\`&!@,````
M`````````````````#P&/F9F.P``````<#`P/#8S,S-N```````````^8V!@
M8SX```````X&!AXV9F9F.P``````````/F-_8&,^```````<-C(P?#`P,'@`
M`````````#MF9F8^!F8\````<#`P-CLS,S-S```````,#``<#`P,#!X`````
M``8&``X&!@8&9F8\````<#`P,S8\-C-S```````<#`P,#`P,#!X`````````
M`.;_V]O;VP``````````;C,S,S,S```````````^8V-C8SX``````````&XS
M,S,^,#!X````````.V9F9CX&!@\```````!N.S,P,'@``````````#YC.`YC
M/@``````"!@8?A@8&!L.``````````!F9F9F9CL``````````,/#PV8\&```
M````````P\/;V_]F``````````!C-AP<-F,``````````&-C8V,_`P8\````
M````?V8,&#-_```````.&!@8<!@8&`X``````!@8&!@`&!@8&```````<!@8
M&`X8&!AP```````[;@``````````````J@"J`*H`J@"J`*H`J@``/&;"P,#"
M9CP,!GP```#,S`#,S,S,S'8`````#!@P`'S&_L#&?``````0.&P`>`Q\S,QV
M``````#,S`!X#'S,S'8`````8#`8`'@,?,S,=@`````X;#@`>`Q\S,QV````
M`````'C,P,QX&`QX````$#AL`'S&_L#&?```````S,P`?,;^P,9\`````&`P
M&`!\QO[`QGP``````,S,`'`P,#`P>``````P>,P`<#`P,#!X`````,!@,`!P
M,#`P,'@`````QL80.&S&QO[&Q@```#AL.``X;,;&_L;&````&#!@`/YB8'Q@
M8OX`````````;+H2?I"8?@``````/FS,S/[,S,S.`````!`X;`!\QL;&QGP`
M`````,;&`'S&QL;&?`````!@,!@`?,;&QL9\`````#!XS`#,S,S,S'8`````
M8#`8`,S,S,S,=@``````QL8`QL;&QGX&#'@``,;&.&S&QL;&;#@`````QL8`
MQL;&QL;&?``````("'[(R,C(?@@(`````#AL9&#P8&!@YOP``````,9L.!#^
M$/X0$`````#XS,SXQ,S>S,SF`````!PT,#`P_#`P,#"PX```&#!@`'@,?,S,
M=@`````,&#``.!@8&!@\`````!@P8`!\QL;&QGP`````&#!@`,S,S,S,=@``
M````=MP`W&9F9F9F````=MP`QN;V_M[.QL8`````/&QL/@!^```````````X
M;&PX`'P````````````P,``P,&#&QGP```````````!_8&!@````````````
M`'\!`0$``````,#`QLS8,&#<A@P8/@``P,#&S-@P9LZ:/@8&````&!@`&!@\
M/#P8`````````#9LV&PV````````````V&PV;-@``````"*((H@BB"*((H@B
MB"*(JE2J5*I4JE2J5*I4JE2Z[KKNNNZZ[KKNNNZZ[A@8&!@8&!@8&!@8&!@8
M&!@8&!@8&/@8&!@8&!@8&!@8&/@8^!@8&!@8&#8V-C8V-C;V-C8V-C8V````
M`````/XV-C8V-C8``````/@8^!@8&!@8&#8V-C8V]@;V-C8V-C8V-C8V-C8V
M-C8V-C8V-C8``````/X&]C8V-C8V-C8V-C8V]@;^````````-C8V-C8V-OX`
M```````8&!@8&/@8^`````````````````#X&!@8&!@8&!@8&!@8&!\`````
M```8&!@8&!@8_P````````````````#_&!@8&!@8&!@8&!@8&!\8&!@8&!@`
M````````_P```````!@8&!@8&!C_&!@8&!@8&!@8&!@?&!\8&!@8&!@V-C8V
M-C8V-S8V-C8V-C8V-C8V-S`_```````````````_,#<V-C8V-C8V-C8V-O<`
M_P``````````````_P#W-C8V-C8V-C8V-C8W,#<V-C8V-C8``````/\`_P``
M`````#8V-C8V]P#W-C8V-C8V&!@8&!C_`/\````````V-C8V-C8V_P``````
M````````_P#_&!@8&!@8`````````/\V-C8V-C8V-C8V-C8V/P```````!@8
M&!@8'Q@?```````````````?&!\8&!@8&!@`````````/S8V-C8V-C8V-C8V
M-C;_-C8V-C8V&!@8&!C_&/\8&!@8&!@8&!@8&!@8^``````````````````?
M&!@8&!@8__________________\`````````__________#P\/#P\/#P\/#P
M\/#P#P\/#P\/#P\/#P\/#P__________````````````````=MS8V-QV````
M`````'S&_,;&_,#`0````/[&QL#`P,#`P`````````#^;&QL;&QL``````#^
MQF`P&#!@QOX``````````'[8V-C8<`````````!F9F9F?&!@P````````';<
M&!@8&!@``````/PP>,S,S'@P_```````.&S&QO[&QFPX```````X;,;&QFQL
M;.X``````#Q@,!A\S,S,>```````````?-;6?``````````&#'S.UN9\8,``
M`````#A@P,#XP,!@.````````'S&QL;&QL;&````````_@``_@``_@``````
M`#`P,/PP,#``_```````8#`8#!@P8`#\```````8,&#`8#`8`/P```````X:
M&A@8&!@8&!@8&!@8&!@8&!@86%AP```````P,```_```,#``````````=MP`
M=MP```````!PV-AP````````````````````&!@`````````````````&```
M```````>&!@8&!C8V'@X`````-AL;&QL;```````````<-@P8,CX````````
=```````^/CX^/CX`````````````````````````
`
end

View File

@ -1,83 +0,0 @@
begin 644 vt100sg.814
M`$1D5$Q$`"`@("`^````/$`X!'@`(B(^(B(````\0#@$>``B%`@4(@```'Q`
M>$!\`"(4"!0B````?$!X0'P`/@@("`@```!\0'A`?``<(B(J'`(``#A$?$1$
M`"0H,"@D````>$1X1'@`("`@(#X```!X1'A$>``>(!P"/````$1$?$1$`#X(
M"`@(````0$!`0'P`/B`\("````!$1$0H$``^"`@("````'Q`>$!``#X@/"`@
M````/$!`0#P`/"(\)"(````\0#@$>``<(B(B'````#Q`.`1X`!P("`@<````
M>$1$1'@`("`@(#X```!X1$1$>``$#`0$#@```'A$1$1X`!PB#!`^````>$1$
M1'@`'`(,`AP```!X1$1$>``$"!(^`@```$1D5$Q$`"(D."0B````/$`X!'@`
M(A0("`@```!\0'A`?``\(CPB/````#Q`0$`\`"(R*B8B````?$!X0'P`(C8J
M(B(````\0#@$>``B(B(B'````'Q`>$!\`!X@("`>````?$!X0$``'B`<`CP`
M```\0$Q$/``>(!P"/````'A$>$A$`!X@'`(\````1$1$1#@`'B`<`CP`````
M```````````````````8/#P\&!@`&!@`````8V-C(@``````````````-C9_
M-C8V?S8V````#`P^8V%@/@-#8SX,#```````86,&#!@S8P``````'#8V'#MN
M9F8[`````#`P,&````````````````P8,#`P,#`8#```````&`P&!@8&!@P8
M`````````&8\_SQF```````````8&!C_&!@8````````````````&!@8,```
M````````_P`````````````````````8&````````0,&#!@P8$`````````^
M8V=O>W-C8SX```````P</`P,#`P,/P``````/F,#!@P8,&-_```````^8P,#
M'@,#8SX```````8.'C9F?P8&#P``````?V!@8'X#`V,^```````<,&!@?F-C
M8SX``````']C`P8,&!@8&```````/F-C8SYC8V,^```````^8V-C/P,#!CP`
M```````8&````!@8`````````!@8````&!@P```````&#!@P8#`8#`8`````
M`````'X``'X`````````8#`8#`8,&#!@```````^8V,&#`P`#`P``````#YC
M8V]O;VY@/@``````"!PV8V-_8V-C``````!^,S,S/C,S,WX``````!XS86!@
M8&$S'@``````?#8S,S,S,S9\``````!_,3$T/#0Q,7\``````'\Q,30\-#`P
M>```````'C-A8&!O8S,=``````!C8V-C?V-C8V,``````#P8&!@8&!@8/```
M````#P8&!@8&9F8\``````!S,S8V/#8V,W,``````'@P,#`P,#$Q?P``````
MP^?_V\/#P\/#``````!C<WM_;V=C8V,``````!PV8V-C8V,V'```````?C,S
M,SXP,#!X```````^8V-C8VMO/@8'`````'XS,S,^-C,S<P``````/F-C,!P&
M8V,^``````#_F9D8&!@8&#P``````&-C8V-C8V-C/@``````P\/#P\/#9CP8
M``````##P\/#V]O_9F8``````,/#9CP8/&;#PP``````P\/#9CP8&!@\````
M``#_@X8,&#!AP?\``````#PP,#`P,#`P/```````0&!P.!P.!P,!```````\
M#`P,#`P,##P````('#9C```````````````````````````````````0.'S^
M_GPX$```````_H*"_H*"_H*"_@````!$1'Q$1``^"`@("````'Q`>$!\`#X@
M."`@````/$!`0#P`/"(\)"(```!`0$!`?``^(#P@(````'#8V'``````````
M`````#`P,/PP,#``_`````!$9%1,1``@("`@/@```$1$1"@0`#X("`@(```8
M&!@8&!@8^`````````````````#X&!@8&!@8`````````!\8&!@8&!@8&!@8
M&!@8'P```````!@8&!@8&!C_&!@8&!@8``#_````````````````````_P``
M`````````````````/\```````````````````#_````````````````````
M_P```!@8&!@8&!@?&!@8&!@8&!@8&!@8&/@8&!@8&!@8&!@8&!@8_P``````
M``````````#_&!@8&!@8&!@8&!@8&!@8&!@8&!@``!@P8,!@,!@`_```````
M8#`8#!@P8`#\`````````/YL;&QL;&P````````"!'X($'X@0``````X;&1@
M\&!@8.;\`````````````!@`````````J@"J`*H`J@"J`*H`J@``````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````&!@`&!@\/#P8``````@(?LC(R,A^"`@`````.&QD8/!@8&#F_```
M``````````````````````#&;#@0$/X0$!````````````````````````!\
MQF`X;,;&;#@,QGP```"!F3QF9F8\F8$``````'R"FJ*BHIJ"?``````\;&P^
M`'X``````````````#9LV&PV````````````````````````````````````
M```````````````````````````````````````````````````\)"0\````
M````````&!A^&!@`?@```````'S&!@0,&##&_@``````?,8&!CP&!L9\````
M````````````````````````9F9F9GQ@8,``````?O3T]'04%!04````````
M```8&```````````````````````````````"!@X&!@8&!A^`````#AL;#@`
M?```````````````V&PV;-@```````#`P,;,V#!FSIH^!@8``,#`QLS8,&#<
MA@P8/@``````-FS8;#8`````````,#``,#!@QL9\````,!@`$#ALQL;^QL8`
M```,&``0.&S&QO[&Q@```!!LQA`X;,;&_L;&````=MP`$#ALQL;^QL8`````
MQL80.&S&QO[&Q@```#AL.``X;,;&_L;&```````^;,S,_LS,S,X``````#QF
MPL#`PF8\#`9\`#`8#`#^8F!\8&+^````&#!@`/YB8'Q@8OX````0;,8`_F)@
M?&!B_@````#&Q@#^8F!\8&+^````,!@`/!@8&!@8&#P````,&``\&!@8&!@8
M/````#QF`#P8&!@8&!@\````9F8`/!@8&!@8&#P`````````````````````
M`';<`,;F]O[>SL;&````8#``.&S&QL;&;#@````,&``X;,;&QL9L.````!!L
M@CALQL;&QFPX````=MP`.&S&QL;&;#@`````QL8X;,;&QL9L.```````?LS,
MS,[,S,Q^```````".FS.UM;F;+B```!@,!@`QL;&QL;&?`````8,&`#&QL;&
MQL9\`````';<`,;&QL;&QGP`````QL8`QL;&QL;&?````,;&`,;&;#@0$!`X
M`````````````````````````'S&QMS&QOS`P,````!@,!@`>`Q\S,QV````
M`!@P8`!X#'S,S'8`````$#AL`'@,?,S,=@``````=MP`>`Q\S,QV``````#,
MS`!X#'S,S'8`````.&PX`'@,?,S,=@````````!LNA)^D)A^`````````'C,
MP,QX&`QX````8#`8`'S&_L#&?``````,&#``?,;^P,9\`````!`X;`!\QO[`
MQGP``````,S,`'S&_L#&?`````#`8#``<#`P,#!X``````P8,``X&!@8&#P`
M````,'C,`'`P,#`P>```````S,P`<#`P,#!X````````````````````````
M`';<`-QF9F9F9@````!@,!@`?,;&QL9\`````!@P8`!\QL;&QGP`````.&S&
M`'S&QL;&?```````=MP`?,;&QL9\``````#&Q@!\QL;&QGP``````````'R2
MDIR0?@````````)\SM;6YGR``````&`P&`#,S,S,S'8`````&#!@`,S,S,S,
M=@`````P>,P`S,S,S,QV``````#,S`#,S,S,S'8``````,;&`,;&QL9^!@QX
=````````````````````````````````````````
`
end

View File

@ -1,49 +0,0 @@
begin 644 vt220h.808
M9%1,1"`@(#X\0#@$>"(^(CQ`.`1X-@@V?$!X0'PV"#9\0'A`?#X("'Q`>'P<
M(BH<.$1\1"PP*"1X1'A$>"`@/GA$>$1^$`P\1$1\1#X("`A`0$!\/B`\($1$
M*!`^"`@(?$!X0#X@/"`\0$`\/"(\)CQ`.`1X'"(</$`X!'@<"!QX1$1X("`@
M/GA$1'@$#`0.>$1X'"(,$#YX1'@<`@P"''A$1'@,$CX"9%1,(B0X)"(\0#@$
M>"(<"'Q`>'P\(CP^/$`\(C(J)B)\0'A`?"(V*CQ`.`1X(B(<?$!X0'P>(!Y\
M0'A`'B`>/#Q`3#P>(!X\>$1X3!X@'CQ$1#@>(!P"/'"(<(AP#!(,<(APB'`,
M!`YPB'"(?"0(/'"(<(QB#@(<<(APC'@2/@)PB'"><!P"''"(<(YP/"(<<(AP
MCG($"`APB'"<<APB''"(<)QR#@(<<(APB'P2'A)PB'"<<AP2''"(<(AP#A`.
M<(APB'`<$AQPB'"><!P0'G"(<)YP'!`0<(AX"'`,$@QPB'@(<`P$#G"(>`A\
M)`@\<(AX#&(.`AQPB'@,>!(^`G"(>!YP'`(<<(AX#G`\(AQPB'@><@0("'"(
M>!QR'"(<<(AX''(.`AQPB'@(?!(>$G"(>!QR'!(<<(AX"'`.$`YPB'@(<!P2
M''"(>!YP'!`><(AX'G`<$!```'S&QOS`P````,945'P8`'S&!G[&?```8+`8
M+$V&`````!@X&!H,````_+8V-@0``'SD<.1\````PJ08*L8``$1$*"@0$```
M$!`H*$1$``#&QL;&QGP```#\!@8&_````'[`P,!^````PD(D&"08`/Z"*#BJ
M_@``QE14?!@\`````/YL;.X````$_@'^!````"1^@7XD````$!`H1.X`.$2"
MJKJJ1#@``-QV`/X``/Z"Q,1H:#``&"PL1$:&_@`````VS,PV```8&`!F9@``
M`!PT,#`PL.`!`@0($"!`@(!`(!`(!`(!`0($"!`@0/\``#\0"`0"`1@8,&`P
M&!@8&!@,!@P8&!@```X8&!@8&!@8&!@8&`X```!P&!@8&!@8&!@8&!AP```"
M`@(B$@H&``#NQM;6?```9F8\&'X8`%@D&"0X8`QX`!@`QL9^#'@`P,#XS/C`
MP%`@4`P\9CP`\&!X;'A@\``.`&9F/!@\````1"@0*$0`_&9F]F9F_`#P$'(6
M_CINP@``````&`QX&#!@````````````_@```'R"NJJRJH)\`````'@`````
M``!X"`@``,;&``````````($?AA^($````````#_````````_P```````/\`
M``````#_````````_P````````#N9F8L&````GS.UN9\@```?-;<T'P``/X`
M?,;&?`#^`'@,?,QV`,P`S$AX,'@`.&P`QL;&?``<`,;&QL9\`'``QL;&QGP`
M`CILUM9LN(``?LS.S,Q^`/XX;,;&;#@`.,8X;,9L.``.`#ALQFPX`'``.&S&
M;#@`9@`\&!@8/``8)``\&!@\``X`/!@8&#P`<``\&!@8/`#&`/YB>&+^`#A$
M_F)X8OX`<`#^8GAB_@#^`#ALQO[&`#AL$&S&_L8`#@`X;,;^Q@!P`#ALQO[&
M```<#!X`````````&!@````('CIB>#P$&'@,.`QX````?(*:HJ*:@GP`P]L\
M9CS;PP``S%1@4$P``'S&8#``,```?,9@,``P``!\QF`P`#```'S&8#``,```
M?,9@,``P``!\QF`P`#```'S&8#``,```?,9@,``P``!\QF`P`#```'S&8#``
M,```?,9@,``P``!\QF`P`#```'S&8#``,```?,9@,``P``!\QF`P`#```'S&
M8#``,```?,9@,``P``!\QF`P`#```'S&8#``,```?,9@,``P``!\QF`P`#``
M`'S&8#``,```?,9@,``P``!\QF`P`#```'S&8#``,```?,9@,``P``!\QF`P
M`#```'S&8#``,```?,9@,``P``!\QF`P`#```'S&8#``,```?,9@,``P``!\
MQF`P`#```'S&8#``,```?,9@,``P``!\QF`P`#```'S&8#``,```?,9@,``P
M``!\QF`P`#```'S&8#``,```?,9@,``P``!\QF`P`#```'S&8#``,```?,9@
M,``P``!\QF`P`#```'S&8#``,```?,9@,``P``!\QF`P`#```'S&8#``,```
M?,9@,``P``!\QF`P`#```'S&8#``,```?,9@,``P``!\QF`P`#```'S&8#``
M,```?,9@,``P``!\QF`P`#```'S&8#``,```?,9@,``P``!\QF`P`#```'S&
M8#``,```?,9@,``P``!\QF`P`#```'S&8#``,```?,9@,``P``!\QF`P`#``
M`'S&8#``,```?,9@,``P``!\QF`P`#```'S&8#``,```?,9@,``P``!\QF`P
M`#```'S&8#``,```?,9@,``P``!\QF`P`#```'S&8#``,```?,9@,``P``!\
MQF`P`#```'S&8#``,```?,9@,``P``!\QF`P`#```'S&8#``,```?,9@,``P
M``!\QF`P`#```'S&8#``,```?,9@,``P``!\QF`P`#```'S&8#``,```?,9@
M,``P``!\QF`P`#```'S&8#``,```?,9@,``P``!\QF`P`#```'S&8#``,```
7?,9@,``P``!\QF`P`#```'S&8#``,`!@
`
end

View File

@ -1,60 +0,0 @@
begin 644 vt220h.810
M1&143$0@("`@/CQ`.`1X(B(^(B(\0#@$>"(4"!0B?$!X0'PB%`@4(GQ`>$!\
M/@@("`A\0'A`?!PB(BH<.$1\1$0D*#`H)'A$>$1X("`@(#YX1'A$>!X@'`(\
M1$1\1$0^"`@("$!`0$!\/B`\("!$1$0H$#X("`@(?$!X0$`^(#P@(#Q`0$`\
M/"(\)"(\0#@$>!PB(B(</$`X!'@<"`@(''A$1$1X("`@(#YX1$1$>`0,!`0.
M>$1$1'@<(@P0/GA$1$1X'`(,`AQX1$1$>`0($CX"1&143$0B)#@D(CQ`.`1X
M(A0("`A\0'A`?#PB/"(\/$!`0#PB,BHF(GQ`>$!\(C8J(B(\0#@$>"(B(B(<
M?$!X0'P>("`@'GQ`>$!`'B`<`CP\0$Q$/!X@'`(\>$1X2$0>(!P"/$1$1$0X
M'B`<`CQPB'"(<`P2$A(,<(APB'`$#`0$#G"(<(AP'"(,$#YPB'"(<!P"#`(<
M<(APB'`$"!(^`G"(<(AP'A`<`AQPB'"(<!P@/"(<<(APB'`^`@0("'"(<(AP
M'"(<(AQPB'"(<!PB'@(<<(APB'`,$AX2$G"(<(AP'!(<$AQPB'"(<`X0$!`.
M<(APB'`<$A(2''"(<(AP'A`<$!YPB'"(<!X0'!`0<(AX"'`,$A(2#'"(>`AP
M!`P$!`YPB'@(<!PB#!`^<(AX"'`<`@P"''"(>`AP!`@2/@)PB'@(<!X0'`(<
M<(AX"'`<(!PB''"(>`AP/@($"`APB'@(<!PB'"(<<(AX"'`<(AX"''"(>`AP
M#!(>$A)PB'@(<!P2'!(<<(AX"'`.$!`0#G"(>`AP'!(2$AQPB'@(<!X0'!`>
M<(AX"'`>$!P0$```?,;&QOS`P,````#&5%14?!@8`'S&!@9^QL9\``!@L#`8
M&"Q-A@`````8.!@8&!H,````_+8V-C8&!`````!\Y'#D?`````#"I!@8*L8`
M``""@D1$*"@0$```$!`H*$1$@H(``,;&QL;&QGP`````_`8&!@;\`````'[`
MP,#`?@```,)")!@8)!@```#^@B@X*(+^``#&5%14?#@0.````/YL;&QL;.X`
M````!/X!_@0``````"1^@7XD`````!`0*"A$1.X``#A$@JJZJH)$.````-QV
M`/X``````/Z"Q,1H:#```!@8+"Q$1H;^```````V2$@V`````!@8``!F9@``
M`!PT,#`P,+#@```!`@0($"!`@```@$`@$`@$`@$```$"!`@0($#_`````#\0
M"`0"`0`8&!@P8#`8&!@8&!@8#`8,&!@8&```#A@8&!@8&!@8&!@8&!@8&`X`
M``!P&!@8&!@8&!@8&!@8&!@8<`````("`B(2"@8``````.[&UM9\``!F9CP8
M&'X8&`!8)!@8)#A@>`1X`!@P`,;&QGX,>`#`P/C,S/C`P```4"!0&`P\9F8\
M`/!@>&QX8&#P``8,`&9F/!@8/`````!$*!`H1````/QF9O9F9F;\`/`0<!;N
M&C9JSH(`````````&`QX&#!@````````````````_@``````?(*ZJKJRJH)\
M``````!X``````````!X"`@```#&Q@````````````($?@@0?B!`````````
M`````/\`````````_P````````#_`````````/\`````````_P``````````
M````[FYF9BP8```"?,[6UN9\@`````!\UM;<T'P``';<`'S&QL9\`';<`'@,
M?,S,=@#,`,S,2'@P,'@`.&P`QL;&QL9\``P8`,;&QL;&?``P&`#&QL;&QGP`
M`CILSM;F;+B```!^S,S.S,S,?@!VS#ALQL;&;#@`.,8X;,;&QFPX``X`.&S&
MQL9L.`!P`#ALQL;&;#@`9@`\&!@8&!@\`!@D`#P8&!@8/``,&``\&!@8&#P`
M,!@`/!@8&!@\`,8`_F9B>&!B_@`X;`#^8GA@8OX`,!@`_F)X8&+^`';<`!`X
M;,;^Q@`X;``0.&S&_L8`#!@`$#ALQO[&`&`P`!`X;,;^Q@``#!P,#!X`````
M`````!@8```````('CID8'@\!!@`>`PX#'@``````'R"FJ*BHIJ"?`##VSQF
M9CS;PP``````S%1@4$P``'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#``
M`'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#```'S&QF`P,``P``!\QL9@
M,#``,```?,;&8#`P`#```'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#``
M`'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#```'S&QF`P,``P``!\QL9@
M,#``,```?,;&8#`P`#```'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#``
M`'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#```'S&QF`P,``P``!\QL9@
M,#``,```?,;&8#`P`#```'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#``
M`'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#```'S&QF`P,``P``!\QL9@
M,#``,```?,;&8#`P`#```'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#``
M`'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#```'S&QF`P,``P``!\QL9@
M,#``,```?,;&8#`P`#```'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#``
M`'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#```'S&QF`P,``P``!\QL9@
M,#``,```?,;&8#`P`#```'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#``
M`'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#```'S&QF`P,``P``!\QL9@
M,#``,```?,;&8#`P`#```'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#``
M`'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#```'S&QF`P,``P``!\QL9@
M,#``,```?,;&8#`P`#```'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#``
M`'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#```'S&QF`P,``P``!\QL9@
M,#``,```?,;&8#`P`#```'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#``
M`'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#```'S&QF`P,``P``!\QL9@
M,#``,```?,;&8#`P`#```'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#``
H`'S&QF`P,``P``!\QL9@,#``,```?,;&8#`P`#```'S&QF`P,``P`#`P
`
end

View File

@ -1,83 +0,0 @@
begin 644 vt220h.814
M`$1D5$Q$`"`@("`^````/$`X!'@`(B(^(B(````\0#@$>``B%`@4(@```'Q`
M>$!\`"(4"!0B````?$!X0'P`/@@("`@```!\0'A`?``<(B(J'`(``#A$?$1$
M`"0H,"@D````>$1X1'@`("`@(#X```!X1'A$>``>(!P"/````$1$?$1$`#X(
M"`@(````0$!`0'P`/B`\("````!$1$0H$``^"`@("````'Q`>$!``#X@/"`@
M````/$!`0#P`/"(\)"(````\0#@$>``<(B(B'````#Q`.`1X`!P("`@<````
M>$1$1'@`("`@(#X```!X1$1$>``$#`0$#@```'A$1$1X`!PB#!`^````>$1$
M1'@`'`(,`AP```!X1$1$>``$"!(^`@```$1D5$Q$`"(D."0B````/$`X!'@`
M(A0("`@```!\0'A`?``\(CPB/````#Q`0$`\`"(R*B8B````?$!X0'P`(C8J
M(B(````\0#@$>``B(B(B'````'Q`>$!\`!X@("`>````?$!X0$``'B`<`CP`
M```\0$Q$/``>(!P"/````'A$>$A$`!X@'`(\````1$1$1#@`'B`<`CP```!P
MB'"(<``,$A(2#````'"(<(AP``0,!`0.````<(APB'``'"(,$#X```!PB'"(
M<``<`@P"'````'"(<(AP``0($CX"````<(APB'``'A`<`AP```!PB'"(<``<
M(#PB'````'"(<(AP`#X"!`@(````<(APB'``'"(<(AP```!PB'"(<``<(AX"
M'````'"(<(AP``P2'A(2````<(APB'``'!(<$AP```!PB'"(<``.$!`0#@``
M`'"(<(AP`!P2$A(<````<(APB'``'A`<$!X```!PB'"(<``>$!P0$````'"(
M>`AP``P2$A(,````<(AX"'``!`P$!`X```!PB'@(<``<(@P0/@```'"(>`AP
M`!P"#`(<````<(AX"'``!`@2/@(```!PB'@(<``>$!P"'````'"(>`AP`!P@
M'"(<````<(AX"'``/@($"`@```!PB'@(<``<(APB'````'"(>`AP`!PB'@(<
M````<(AX"'``#!(>$A(```!PB'@(<``<$AP2'````'"(>`AP``X0$!`.````
M<(AX"'``'!(2$AP```!PB'@(<``>$!P0'@```'"(>`AP`!X0'!`0````````
M`'S&QL;&_,#`P``````8V]O;V]M^&!@8````?,8&!G[&QGP``````,#`8#`8
M'#9C00`````````P<#`P,#08``````````#<9F9F9F8&!@8``````'S&\,#&
M?`````````#BMAP8.&S&````````@L;&;&PX.!`````````0.#AL;,;&@@``
M`````,;&QL;&QL9\`````````/P&!@8&_```````````?L#`P,!^````````
M``#&9CP8/&8\``````#^Q@!L?&P`QOX``````#P8V]O;VWX8/```````_FQL
M;&QL;&SN````````"`S^`_X,"``````````D9G[#?F8D```````````0$"@H
M1$3N```````\9L/G_^?#9CP``````````-QV`/X``````````/[&QLQL:#@P
M````````&#@L;$3&QOX``````````&[8V&X````````````8&```9F8`````
M```<-#`P,#`PL.`````````!`@0($"!`@````````(!`(!`(!`(!````````
M``$"!`@0('\````````````_$`@$`@$``!@8&!@8,&`P&!@8&!@8&!@8&!@,
M!@P8&!@8&!@```X8&!@8&!@8&!@8&!@8&!@8&!@8&!@.``````!P&!@8&!@8
M&!@8&!@8&!@8&!@8&!@8<````````@("`B(2"@8"``````````!LQM;6UFP`
M`````,S,>#`P_#`P,```````X'S@P'C`P&`X#'@```P8,`#&QL;&?@8,>```
M`,#`^,S,^,#`P`````#8<.`P&`P^9F8\``````#P8'AL>&!@8/`````,&`#,
MS,QX,#`P>`````````!$*!`H1`````````#\9F9F]F9F9OP```#P$'`6_!@P
M9LZ:/@8&```````````````8#'@`&#!@``````````````````````#^````
M````````?(*ZJKJRJH)\````````````>````````````````'@("```````
M`,;&`````````````````````@9^"!!^8$```````````````````/\`````
M`````````/\``````````````/\``````````````/\``````````````/\`
M``````````````````#N;F9F;#@````````&?,[>]N9\P```````````?-;6
MW-!^``````!VW`!\QL;&QGP``````';<`'@,?,S,=@```,S,`,S,2'@P,#!X
M````.&S&`,;&QL;&QGP````&#!@`QL;&QL;&?````&`P&`#&QL;&QL9\````
M```&/FS.UM;F;/C``````'[,S,S.S,S,?@```';<`#ALQL;&QFPX````.&S&
M.&S&QL;&;#@````,&``X;,;&QL9L.````&`P`#ALQL;&QFPX````9F8`/!@8
M&!@8&#P````\9@`\&!@8&!@8/`````P8`#P8&!@8&!@\````,!@`/!@8&!@8
M&#P```#&Q@#^9F)X8&)F_@```#ALQ@#^9F!X8&;^````,!@,`/YF8'A@9OX`
M``!VW``0.&S&QO[&Q@```#ALQA`X;,;&_L;&````#!@`$#ALQL;^QL8````P
M&``0.&S&QO[&Q@`````,'`P,'@`````````````````8&````````````.`\
M8,#`P,!@.`QX```\!AP&/`````````````!\@IJBHJ*:@GP```````##VSQF
M9CS;PP``````````YFQX;&9F``````!\QL9@,#``,#```````'S&QF`P,``P
M,```````?,;&8#`P`#`P``````!\QL9@,#``,#```````'S&QF`P,``P,```
M````?,;&8#`P`#`P``````!\QL9@,#``,#```````'S&QF`P,``P,```````
M?,;&8#`P`#`P``````!\QL9@,#``,#```````'S&QF`P,``P,```````?,;&
M8#`P`#`P``````!\QL9@,#``,#```````'S&QF`P,``P,```````?,;&8#`P
M`#`P``````!\QL9@,#``,#```````'S&QF`P,``P,```````?,;&8#`P`#`P
M``````!\QL9@,#``,#```````'S&QF`P,``P,```````?,;&8#`P`#`P````
M``!\QL9@,#``,#```````'S&QF`P,``P,```````?,;&8#`P`#`P``````!\
MQL9@,#``,#```````'S&QF`P,``P,```````?,;&8#`P`#`P``````!\QL9@
M,#``,#```````'S&QF`P,``P,```````?,;&8#`P`#`P``````!\QL9@,#``
M,#```````'S&QF`P,``P,```````?,;&8#`P`#`P``````!\QL9@,#``,#``
M`````'S&QF`P,``P,```````?,;&8#`P`#`P``````!\QL9@,#``,#``````
M`'S&QF`P,``P,```````?,;&8#`P`#`P``````!\QL9@,#``,#```````'S&
MQF`P,``P,```````?,;&8#`P`#`P``````!\QL9@,#``,#```````'S&QF`P
M,``P,```````?,;&8#`P`#`P``````!\QL9@,#``,#```````'S&QF`P,``P
M,```````?,;&8#`P`#`P``````!\QL9@,#``,#```````'S&QF`P,``P,```
M````?,;&8#`P`#`P``````!\QL9@,#``,#```````'S&QF`P,``P,```````
M?,;&8#`P`#`P``````!\QL9@,#``,#```````'S&QF`P,``P,```````?,;&
M8#`P`#`P``````!\QL9@,#``,#```````'S&QF`P,``P,```````?,;&8#`P
M`#`P``````!\QL9@,#``,#```````'S&QF`P,``P,```````?,;&8#`P`#`P
M``````!\QL9@,#``,#```````'S&QF`P,``P,```````?,;&8#`P`#`P````
M``!\QL9@,#``,#```````'S&QF`P,``P,```````?,;&8#`P`#`P``````!\
MQL9@,#``,#```````'S&QF`P,``P,```````?,;&8#`P`#`P``````!\QL9@
M,#``,#```````'S&QF`P,``P,```````?,;&8#`P`#`P``````!\QL9@,#``
M,#```````'S&QF`P,``P,```````?,;&8#`P`#`P``````!\QL9@,#``,#``
M`````'S&QF`P,``P,```````?,;&8#`P`#`P``````!\QL9@,#``,#``````
M`'S&QF`P,``P,```````?,;&8#`P`#`P``````!\QL9@,#``,#```````'S&
MQF`P,``P,```````?,;&8#`P`#`P``````!\QL9@,#``,#```````'S&QF`P
M,``P,```````?,;&8#`P`#`P``````!\QL9@,#``,#```````'S&QF`P,``P
M,```````?,;&8#`P`#`P``````!\QL9@,#``,#```````'S&QF`P,``P,```
=````?,;&8#`P`#`P``````!\QL9@,#``,#``````
`
end

View File

@ -1,95 +0,0 @@
begin 644 vt220h.816
M``!$9%1,1``@("`@/@``````/$`X!'@`(B(^(B(``````#Q`.`1X`"(4"!0B
M``````!\0'A`?``B%`@4(@``````?$!X0'P`/@@("`@``````'Q`>$!\`!PB
M(BH<`@`````X1'Q$1``D*#`H)```````>$1X1'@`("`@(#X``````'A$>$1X
M`!X@'`(\``````!$1'Q$1``^"`@("```````0$!`0'P`/B`\("```````$1$
M1"@0`#X("`@(``````!\0'A`0``^(#P@(```````/$!`0#P`/"(\)"(`````
M`#Q`.`1X`!PB(B(<```````\0#@$>``<"`@('```````>$1$1'@`("`@(#X`
M`````'A$1$1X``0,!`0.``````!X1$1$>``<(@P0/@``````>$1$1'@`'`(,
M`AP``````'A$1$1X``0($CX"``````!$9%1,1``B)#@D(@``````/$`X!'@`
M(A0("`@``````'Q`>$!\`#PB/"(\```````\0$!`/``B,BHF(@``````?$!X
M0'P`(C8J(B(``````#Q`.`1X`"(B(B(<``````!\0'A`?``>("`@'@``````
M?$!X0$``'B`<`CP``````#Q`3$0\`!X@'`(\``````!X1'A(1``>(!P"/```
M````1$1$1#@`'B`<`CP`````<(APB'``#!(2$@P``````'"(<(AP``0,!`0.
M``````!PB'"(<``<(@P0/@``````<(APB'``'`(,`AP``````'"(<(AP``0(
M$CX"``````!PB'"(<``>$!P"'```````<(APB'``'"`\(AP``````'"(<(AP
M`#X"!`@(``````!PB'"(<``<(APB'```````<(APB'``'"(>`AP``````'"(
M<(AP``P2'A(2``````!PB'"(<``<$AP2'```````<(APB'``#A`0$`X`````
M`'"(<(AP`!P2$A(<``````!PB'"(<``>$!P0'@``````<(APB'``'A`<$!``
M`````'"(>`AP``P2$A(,``````!PB'@(<``$#`0$#@``````<(AX"'``'"(,
M$#X``````'"(>`AP`!P"#`(<``````!PB'@(<``$"!(^`@``````<(AX"'``
M'A`<`AP``````'"(>`AP`!P@/"(<``````!PB'@(<``^`@0("```````<(AX
M"'``'"(<(AP``````'"(>`AP`!PB'@(<``````!PB'@(<``,$AX2$@``````
M<(AX"'``'!(<$AP``````'"(>`AP``X0$!`.``````!PB'@(<``<$A(2'```
M````<(AX"'``'A`<$!X``````'"(>`AP`!X0'!`0`````````````#YC8V-C
M?F!@8&```````!C;V]O;VWX8&!@8`````'S&!@9^QL9\`````````,#`8#`8
M'#9C00```````````#!P,#`P-!@`````````````W&9F9F9F!@8&!@``````
M``!\Y'#D?````````````.:V'!@X;,8```````````""QD1L*#@0````````
M````$#@H;$3&@@````````#&QL;&QL;&QGP``````````/P&!@8&_```````
M``````!^P,#`P'X``````````````,9F/!@\9CP```````#^Q@!L?'QL`,;^
M```````\&-O;V]O;?A@8/````````/YL;&QL;&QL;.X```````````@,_@/^
M#`@````````````D9G[#?F8D````````````$!`X*&Q$1.X````````X1(*J
MNKJJ@D0X````````````W'8`_@``````````````_H+$Q&AH,#``````````
M`!@8+"Q$1H;^````````````=HB(=@``````````````&!@``&9F````````
M```,'A@8&!@8&'@P```````````!`@0($"!`@```````````@$`@$`@$`@$`
M```````````!`@0($"!_```````````````_$`@$`@$````8&!@8&!@P8#`8
M&!@8&!@8&!@8&!@8#`8,&!@8&!@8&```#A@8&!@8&!@8&!@8&!@8&!@8&!@8
M&!@8&`X```````!P&!@8&!@8&!@8&!@8&!@8&!@8&!@8&!@8<``````````"
M`@("(A(*!@(``````````````&S&UM9L````````9F9F/!@8?A@8&```````
M<#YP8#Q@8#`<!CP`````````#!@P`,;&QL9^!@QX````P,#XS,S,^,#`P```
M`````+!@X+`8##YF9CP```````#P8'QF9GQ@8&#P``````P8`,S,S'@P,#`P
M>```````````1"@0*$0```````````#\9F9F]F9F9F;\`````.`0<!#F#!@P
M9LJ2/@(``````````````````!@,>```&#!@````````````````````````
M``#^`````````````'R"NJJJLJJJ@GP``````````````'@`````````````
M`````'@("`````````#&Q@```````````````````````@9^"!!^8$``````
M````````````````_P````````````````#_`````````````````/\`````
M````````````_P````````````````#_````````````````````````YF9B
M8C08```````````&?,[>]N9\P`````````````!\UM;<T'X`````````=MP`
M?,;&QL9\`````````';<`'@,?,S,=@````#,S`#,S,QX,#`P,'@`````.&S&
M`,;&QL;&QL9\``````8,&`#&QL;&QL;&?`````!@,!@`QL;&QL;&QGP`````
M```&/FS.WO;F;/C`````````?MC8V-[>V-C8?@````!VW``X;,;&QL;&;#@`
M````.&S&.&S&QL;&QFPX``````P8`#ALQL;&QL9L.`````!@,``X;,;&QL;&
M;#@`````9F8`/!@8&!@8&!@\`````!@\9@`\&!@8&!@8/``````&#!@`/!@8
M&!@8&#P`````8#`8`#P8&!@8&!@\`````,;&`/YB8&!\8&!B_@`````X;,8`
M_F)@?&!@8OX`````8#`8`/YB8'Q@8&+^`````';<`!`X;,;&_L;&Q@`````X
M;,80.&S&QO[&QL8`````&#!@$#ALQL;^QL;&`````#`8#!`X;,;&_L;&Q@``
M````"!@("!P`````````````````````&!@`````````````X#Q@P,#`8#@,
M>```````.`08!#@```````````````!\@IJBHJ*BFH)\``````````##VSQF
M9CS;PP``````````````YFYX;&8```````!\QL9@,#`P`#`P````````````
M`````````````````'S&QF`P,#``,#````````!\QL9@,#`P`#`P````````
M?,;&8#`P,``P,````````'S&QF`P,#``,#````````!\QL9@,#`P`#`P````
M````?,;&8#`P,``P,````````'S&QF`P,#``,#````````!\QL9@,#`P`#`P
M````````?,;&8#`P,``P,````````'S&QF`P,#``,#````````!\QL9@,#`P
M`#`P````````?,;&8#`P,``P,````````'S&QF`P,#``,#````````!\QL9@
M,#`P`#`P````````?,;&8#`P,``P,````````'S&QF`P,#``,#````````!\
MQL9@,#`P`#`P````````?,;&8#`P,``P,````````'S&QF`P,#``,#``````
M``!\QL9@,#`P`#`P````````?,;&8#`P,``P,````````'S&QF`P,#``,#``
M``````!\QL9@,#`P`#`P````````?,;&8#`P,``P,````````'S&QF`P,#``
M,#````````!\QL9@,#`P`#`P````````?,;&8#`P,``P,````````'S&QF`P
M,#``,#````````!\QL9@,#`P`#`P````````?,;&8#`P,``P,````````'S&
MQF`P,#``,#````````!\QL9@,#`P`#`P````````?,;&8#`P,``P,```````
M`'S&QF`P,#``,#````````!\QL9@,#`P`#`P````````?,;&8#`P,``P,```
M`````'S&QF`P,#``,#````````!\QL9@,#`P`#`P````````?,;&8#`P,``P
M,````````'S&QF`P,#``,#````````!\QL9@,#`P`#`P````````?,;&8#`P
M,``P,````````'S&QF`P,#``,#````````!\QL9@,#`P`#`P````````?,;&
M8#`P,``P,````````'S&QF`P,#``,#````````!\QL9@,#`P`#`P````````
M?,;&8#`P,``P,````````'S&QF`P,#``,#````````!\QL9@,#`P`#`P````
M````?,;&8#`P,``P,````````'S&QF`P,#``,#````````!\QL9@,#`P`#`P
M````````?,;&8#`P,``P,````````'S&QF`P,#``,#````````!\QL9@,#`P
M`#`P````````?,;&8#`P,``P,````````'S&QF`P,#``,#````````!\QL9@
M,#`P`#`P````````?,;&8#`P,``P,````````'S&QF`P,#``,#````````!\
MQL9@,#`P`#`P````````?,;&8#`P,``P,````````'S&QF`P,#``,#``````
M``!\QL9@,#`P`#`P````````?,;&8#`P,``P,````````'S&QF`P,#``,#``
M``````!\QL9@,#`P`#`P````````?,;&8#`P,``P,````````'S&QF`P,#``
M,#````````!\QL9@,#`P`#`P````````?,;&8#`P,``P,````````'S&QF`P
M,#``,#````````!\QL9@,#`P`#`P````````?,;&8#`P,``P,````````'S&
MQF`P,#``,#````````!\QL9@,#`P`#`P````````?,;&8#`P,``P,```````
M`'S&QF`P,#``,#````````!\QL9@,#`P`#`P````````?,;&8#`P,``P,```
M`````'S&QF`P,#``,#````````!\QL9@,#`P`#`P````````?,;&8#`P,``P
M,````````'S&QF`P,#``,#````````!\QL9@,#`P`#`P````````?,;&8#`P
M,``P,````````'S&QF`P,#``,#````````!\QL9@,#`P`#`P````````?,;&
M8#`P,``P,````````'S&QF`P,#``,#````````!\QL9@,#`P`#`P````````
M?,;&8#`P,``P,````````'S&QF`P,#``,#``````````````````````````
!`,;&
`
end

View File

@ -1,49 +0,0 @@
begin 644 vt220l.808
M``````````!^@:6!O9F!?G[_V__#Y_]^;/[^_GPX$``0.'S^?#@0`#A\./[^
MUA`X$#A\_OY\$#@``!@\/!@``/__Y\/#Y___/&;#P\/#9CS_PYF]O9G#_Q\'
M#7G-S,QX/&9F9CP8?A@X/#8R-'#PX']C?V-C9^;`&-L\Y^<\VQB`X/C^^."`
M``(./OX^#@(`&#Q^&!A^/!AF9F9F9@!F`'_;VWL;&QL`?L/\9F8_PWX``'Y^
M?@```!@\?AA^/!C_&#Q^&!@8&``8&!@8?CP8```8#/X,&````#!@_F`P````
M`&!@8'X````D9O]F)````!`X?/[^````_OY\.!``````````````&#P\&!@`
M&`!L;&P``````&QL_FS^;&P`,'S`?`;\,```QLP8,&;&`#AL.';<SGL`8&#`
M```````8,&!@8#`8`#`8#`P,&#```&PX_CAL````,##\,#``````````,#!@
M````_````````````!@8``8,&#!@P(``?,[>]N;&?``P<+`P,##\`'C,##A@
MP/P`>,P,.`S,>``</&S,_@P>`/S`^`P,S'@`>,S`^,S,>`#\S`P8,#`P`'C,
MS'C,S'@`>,S,?`S,>```,#```#`P```P,```,#!@&#!@P&`P&````'X``'X`
M`#`8#`8,&#``/&8&#!@`&`!\QM[>WL!^`#!XS,S\S,P`_&9F?&9F_``\9L#`
MP&8\`/AL9F9F;/@`_F)H>&AB_@#^8FAX:&#P`#QFP,#.9CX`S,S,_,S,S`!X
M,#`P,#!X`!X,#`S,S'@`YFQX<'ALY@#P8&!@8F;^`,;N_M;&QL8`QN;VWL[&
MQ@`X;,;&QFPX`/QF9GQ@8/``>,S,S-QX'`#\9F9\;&;F`'C,P'@,S'@`_+0P
M,#`P>`#,S,S,S,QX`,S,S,S,>#``QL;&UO[^Q@#&QFPX.&S&`,S,S'@P,'@`
M_,R8,&3,_`!X8&!@8&!X`,!@,!@,!@(`>!@8&!@8>``0.&S&````````````
M``#_,#`8`````````'@,?,QV`.!@8'QF9OP```!XS,#,>``<#`Q\S,Q^````
M>,S\P'@`.&Q@^&!@\````';,S'P,^.!@;'9F9N8`,`!P,#`P>``,`!P,#,S,
M>.!@9FQX;.8`<#`P,#`P>````,S^_M;&````^,S,S,P```!XS,S,>````-QF
M9GQ@\```=LS,?`P>``#<=F!@\````'S`?`;\`!`P?#`P-AP```#,S,S,=@``
M`,;&QGPX````QM;^_FP```#&;#ALQ@```,S,S'P,^```_)@P9/P`'#`PX#`P
M'``8&!@`&!@8`.`P,!PP,.``=MP````````0.&QLQL;^`'C,P,QX&`QX`,P`
MS,S,?@`<`'C,_,!X`'[#/`8^9C\`S`!X#'S,?@#@`'@,?,Q^`#`P>`Q\S'X`
M``!XP,!X##A^PSQF?F`\`,P`>,S\P'@`X`!XS/S`>`#,`'`P,#!X`'S&.!@8
M&#P`X`!P,#`P>`#&.&S&_L;&`#`P`'C,_,P`'`#\8'A@_````'\,?\Q_`#YL
MS/[,S,X`>,P`>,S,>```S`!XS,QX``#@`'C,S'@`>,P`S,S,?@``X`#,S,Q^
M``#,`,S,?`SXPQ@\9F8\&`#,`,S,S,QX`!@8?L#`?A@8.&QD\&#F_`#,S'C\
M,/PP,/C,S/K&S\;'#AL8/!@8V'`<`'@,?,Q^`#@`<#`P,'@``!P`>,S,>```
M'`#,S,Q^``#X`/C,S,P`_`#,[/S<S``\;&P^`'X``#AL;#@`?```,``P8,#,
M>`````#\P,```````/P,#```P\;,WC-FS`_#QLS;-V_/`Q@8`!@8&!@``#-F
MS&8S````S&8S9LP``"*((H@BB"*(5:I5JE6J5:K;=]ONVW?;[A@8&!@8&!@8
M&!@8&/@8&!@8&/@8^!@8&#8V-C;V-C8V`````/XV-C8``/@8^!@8&#8V]@;V
M-C8V-C8V-C8V-C8``/X&]C8V-C8V]@;^````-C8V-OX````8&/@8^```````
M``#X&!@8&!@8&!\````8&!@8_P````````#_&!@8&!@8&!\8&!@`````_P``
M`!@8&!C_&!@8&!@?&!\8&!@V-C8V-S8V-C8V-S`_```````_,#<V-C8V-O<`
M_P``````_P#W-C8V-C8W,#<V-C8``/\`_P```#8V]P#W-C8V&!C_`/\````V
M-C8V_P``````_P#_&!@8`````/\V-C8V-C8V/P```!@8'Q@?```````?&!\8
M&!@`````/S8V-C8V-C;_-C8V&!C_&/\8&!@8&!@8^``````````?&!@8____
M______\`````______#P\/#P\/#P#P\/#P\/#P______````````=MS(W'8`
M`'C,^,SXP,``_,S`P,#```#^;&QL;&P`_,Q@,&#,_````'[8V-AP``!F9F9F
M?&#``';<&!@8&`#\,'C,S'@P_#ALQO[&;#@`.&S&QFQL[@`<,!A\S,QX````
M?MO;?@``!@Q^V]M^8,`\8,#\P&`\`'C,S,S,S,P``/P`_`#\```P,/PP,`#\
M`&`P&#!@`/P`&#!@,!@`_``.&QL8&!@8&!@8&!@8V-AP,#``_``P,```=MP`
M=MP``#AL;#@`````````&!@`````````&`````\,#`SL;#P<>&QL;&P```!P
7&#!@>```````/#P\/```````````````
`
end

View File

@ -1,60 +0,0 @@
begin 644 vt220l.810
M`````````````'Z!I:6!@;V9@7Y^_]O;___#Y_]^;/[^?'PX.!`0````$#A\
M_GPX$``X?'PX?/[^?#A\$!`X.'S^_GPX?````!@\/!@```#____GP\/G____
M```\9D)"9CP``/__PYF]O9G#__\`#P</?<S,S'@``#QF9F8\&'X8`#\S/S`P
M,'#PX`!_8W]C8V-GYL```-M^/.?G/'[;````@.#X_OC@@`````(./OX^#@(`
M&!@\?A@8?CP8&&9F9F9F9@!F9@!_V]O;>QL;&QL`/&8P;,9L&,QX````````
M?GY^?@`8&#Q^&!A^/!C_&!@\/'X8&!@8&!@8&!@8?CP\&!@`````&`S^#!@`
M`````#!@_F`P``````#`P,#`_@``````)&;_9B0``!@8/#Q^?O__``#__WY^
M/#P8&```````````````,'AX>#`P`#`P`&QL;"@```````!L;/YL;&S^;&P`
M&'[8V'PV-OPP`,;,#!@X,&!FQ@`X;&PX,';<S'8`X.!@8,````````P8,#`P
M,#`8#`!@,!@8&!@8,&````#&;#C^.&S&`````#`P_#`P````````<'`P,&``
M``````#^```````````````P,```#`P8&#`P8&``?,;.WM;VYL9\`#!P,#`P
M,#`P_`!\QL8&##A@QOX`?,;&!CP&QL9\``P,'#QLS/X,'@#^P,#\!@8&QGP`
M'#!@P/S&QL9\`/[&!@P,&!@8&`!\QL;&?,;&QGP`?,;&QGX&#!AP`````#`P
M```P,````#`P```P,&`````8,&#`8#`8``````#\``#\`````&`P&`P8,&``
M?,;&!@P8&``8`'S&SMK6WL#&?``X?,;&QO[&QL8`_&9F9GQF9F;\`#QFP,#`
MP,!F/`#X;&9F9F9F;/@`_F)@:'AH8&+^`/YB8&AX:&!@\``\9L#`P,[&9CP`
MQL;&QO[&QL;&`#P8&!@8&!@8/``>#`P,#`S,S'@`YF9L;'AL;&;F`/!@8&!@
M8&)F_@#&[O[^UL;&QL8`QN;F]M[.SL;&`#ALQL;&QL9L.`#\9F9F?&!@8/``
M?,;&QL;&SGP.`/QF9F9X;&QFY@!\QL!@.`P&QGP`?EH8&!@8&!@\`,;&QL;&
MQL;&?`!F9F9F9F9F/!@`QL;&QL;6_N[&`,;&;#@0.&S&Q@#,S,S,>#`P,'@`
M_L:,&#!@PL;^`!X8&!@8&!@8'@``8&`P,!@8#`P`\#`P,#`P,##P`!`X;,8`
M``````````````````#_,#`8`````````````'@,?,S,=@#@8&!\9F9F9MP`
M````?,;`P,9\`!P,#'S,S,S,=@````!\QO[`P'P`.&Q@\&!@8&#P`````';,
MS'P,S'C@8&!L=F9F9N8`,#``<#`P,#!X``P,``P,#`S,S'C@8&!F;'AX;.8`
M<#`P,#`P,#!X`````,S^_M;6U@````#<YL;&QL8`````?,;&QL9\`````-QF
M9F9\8/````!VS,S,?`P>````W'9F8&#P`````'S&<!S&?``@8&#\8&!@;#@`
M````S,S,S,QV`````,;&QL9L.`````#&UM;^_FP`````QFPX.&S&`````,;&
MQGX&!OP```#^C!@P8OX`#A@8&'`8&!@.`!@8&!@`&!@8&`#@,#`P'#`P,.``
M=MP``````````````!`X;,;&_@!\QL#`P,9\#`8\`,P`S,S,S,QV```.`'S&
M_L#`?``\9@`\!CYF9C\``,P`>`Q\S,QV``!P`'@,?,S,=@`P,`!X#'S,S'8`
M````?L#`P'X&/#QF`#QF?F!@/`#,``!\QO[`P'P``'``?,;^P,!\``#,`'`P
M,#`P>``X;``X&!@8&#P``.``<#`P,#!X`,8`.&S&_L;&Q@`P,`!XS/S,S,P`
M'`#\8&!X8&#\`````'X;?MC8?P`^;,S,_LS,S,X`.&P`?,;&QL9\``#&`'S&
MQL;&?```<`!\QL;&QGP`>,P`S,S,S,QV``!P`,S,S,S,=@``Q@#&QL9^!@;\
MQCALQL;&QFPX`,8`QL;&QL;&?``8&'[`P,#`?A@8.&QD8/A@8.;\`,S,>##\
M,/PP,`#XS,S,^L;/QL<`#AL8&#P8&!C8<``<`'@,?,S,=@``.`!P,#`P,'@`
M`!P`?,;&QL9\```<`,S,S,S,=@!P_AP`W.;&QL8`_@#&YO;^WL[&`#QL;&P^
M`'X````X;&QL.`!\````,``P,&#`QL9\``````#^P,``````````_@8&````
MP\;,V#Y[PP8,#\/&S-DS9\T/`P,8&``8&#P\/!@`````,V;,9C,``````,QF
M,V;,```BB"*((H@BB"*(5:I5JE6J5:I5JMMWV^[;=]ONVW<8&!@8&!@8&!@8
M&!@8&!CX&!@8&!@8&/@8^!@8&!@V-C8V-O8V-C8V``````#^-C8V-@```/@8
M^!@8&!@V-C;V!O8V-C8V-C8V-C8V-C8V-@```/X&]C8V-C8V-C;V!OX`````
M-C8V-C;^`````!@8&/@8^````````````/@8&!@8&!@8&!@?`````!@8&!@8
M_P```````````/\8&!@8&!@8&!@?&!@8&```````_P`````8&!@8&/\8&!@8
M&!@8'Q@?&!@8&#8V-C8V-S8V-C8V-C8W,#\`````````/S`W-C8V-C8V-O<`
M_P````````#_`/<V-C8V-C8V-S`W-C8V-@```/\`_P`````V-C;W`/<V-C8V
M&!@8_P#_`````#8V-C8V_P````````#_`/\8&!@8``````#_-C8V-C8V-C8V
M/P`````8&!@?&!\`````````'Q@?&!@8&```````/S8V-C8V-C8V-O\V-C8V
M&!@8_QC_&!@8&!@8&!@8^````````````!\8&!@8_____________P``````
M_______P\/#P\/#P\/#P#P\/#P\/#P\/#_______``````````!VW-C,W'8`
M`'S&QMS&QMS`P/YF9&!@8&!@\`#^;&QL;&QL;.X`_L9@,!@P8,;^`````'_,
MS,S,>`````!F9F9V;&#`````=MP8&!@8`#P8?MO;VWX8/``X;,;&_L;&;#@`
M.&S&QL9L;&SN`!PR,!A\S,S,>`````!VV]O;;@```P9\S]O;\SY@P```'#!@
M?&`P'````'S&QL;&QL8`````_@#^`/X`````,##\,#``_`!@,!@,&#!@`/X`
M#!@P8#`8#`#^``X;&Q@8&!@8&!@8&!@8&!@8V-AP```P,`#\`#`P`````';<
M`';<```X;&QL.````````````!@8````````````&``````/#`P,[&QL-#P<
H>&QL;&QL`````'#8&'#`^``````````\/#P\`````````````````&QL
`
end

View File

@ -1,83 +0,0 @@
begin 644 vt220l.814
M`````````````````````'Z!I8&!O9F!?@``````?O_;___#Y_]^````````
M;/[^_OY\.!`````````0.'S^?#@0````````&#P\Y^?G&!@\```````8/'[_
M_WX8&#P``````````!@\/!@``````/______Y\/#Y_______`````#QF0D)F
M/`````#_____PYF]O9G#_____P``'@X:,GC,S,QX```````\9F9F/!A^&!@`
M`````#\S/S`P,'#PX```````?V-_8V-C9^?FP``````8&-L\YSS;&!@`````
M`(#`X/C^^.#`@````````@8./OX^#@8"```````8/'X8&!A^/!@``````&9F
M9F9F9@!F9@``````?]O;VWL;&QL;`````'S&8#ALQL9L.`S&?```````````
M`/[^_@``````&#Q^&!@8?CP8?@`````8/'X8&!@8&!@``````!@8&!@8&'X\
M&``````````8#/X,&````````````#!@_F`P`````````````,#`P/X`````
M```````H;/YL*```````````$#@X?'S^_@````````#^_GQ\.#@0````````
M```````````````````8/#P\&!@`&!@`````9F9F)```````````````;&S^
M;&QL_FQL````&!A\QL+`?`:&QGP8&```````PL8,&#!FQ@``````.&QL.';<
MS,QV`````#`P,&````````````````P8,#`P,#`8#```````,!@,#`P,#!@P
M`````````&8\_SQF````````````&!A^&!@`````````````````&!@8,```
M````````_@`````````````````````8&````````@8,&#!@P(````````!\
MQL[>]N;&QGP``````!@X>!@8&!@8?@``````?,8&#!@P8,;^``````!\Q@8&
M/`8&QGP```````P</&S,_@P,'@``````_L#`P/P&!L9\```````X8,#`_,;&
MQGP``````/[&!@P8,#`P,```````?,;&QGS&QL9\``````!\QL;&?@8&#'@`
M```````8&````!@8`````````!@8````&!@P```````&#!@P8#`8#`8`````
M`````'X``'X`````````8#`8#`8,&#!@``````!\QL8,&!@`&!@``````'S&
MQM[>WMS`?```````$#ALQL;^QL;&``````#\9F9F?&9F9OP``````#QFPL#`
MP,)F/```````^&QF9F9F9FSX``````#^9F)H>&AB9OX``````/YF8FAX:&!@
M\```````/&;"P,#>QF8Z``````#&QL;&_L;&QL8``````#P8&!@8&!@8/```
M````'@P,#`P,S,QX``````#F9FQL>&QL9N8``````/!@8&!@8&)F_@``````
MQN[^_M;&QL;&``````#&YO;^WL[&QL8``````#ALQL;&QL9L.```````_&9F
M9GQ@8&#P``````!\QL;&QM;>?`P.`````/QF9F9\;&9FY@``````?,;&8#@,
MQL9\``````!^?EH8&!@8&#P``````,;&QL;&QL;&?```````QL;&QL;&;#@0
M``````#&QL;&UM;^?&P``````,;&;#@X.&S&Q@``````9F9F9CP8&!@\````
M``#^QHP8,&#"QOX``````#PP,#`P,#`P/```````@,#@<#@<#@8"```````\
M#`P,#`P,##P````0.&S&`````````````````````````````/\`,#`8````
M`````````````````'@,?,S,=@``````X&!@>&QF9F9\``````````!\QL#`
MQGP``````!P,##QLS,S,=@``````````?,;^P,9\```````X;&1@\&!@8/``
M`````````';,S,Q\#,QX````X&!@;'9F9F;F```````8&``X&!@8&#P`````
M``8&``X&!@8&9F8\````X&!@9FQX;&;F```````X&!@8&!@8&#P`````````
M`.S^UM;6Q@``````````W&9F9F9F``````````!\QL;&QGP``````````-QF
M9F9\8&#P````````=LS,S'P,#!X```````#<=F9@8/```````````'S&<!S&
M?```````$#`P_#`P,#8<``````````#,S,S,S'8``````````,;&QFPX$```
M````````QL;6UOYL``````````#&;#@X;,8``````````,;&QL9^!@SX````
M````_LP8,&;^```````.&!@8<!@8&`X``````!@8&!@`&!@8&```````<!@8
M&`X8&!AP``````!VW```````````````````$#ALQL;^````````/&;"P,#"
M9CP,!GP```#,S`#,S,S,S'8`````#!@P`'S&_L#&?``````0.&P`>`Q\S,QV
M``````#,S`!X#'S,S'8`````8#`8`'@,?,S,=@`````X;#@`>`Q\S,QV````
M`````#QF8&8\#`8\````$#AL`'S&_L#&?```````S,P`?,;^P,9\`````&`P
M&`!\QO[`QGP``````&9F`#@8&!@8/``````8/&8`.!@8&!@\`````&`P&``X
M&!@8&#P`````QL80.&S&QO[&Q@```#AL.``X;,;&_L;&````&#!@`/YF8'Q@
M9OX`````````S'8V?MC8;@``````/FS,S/[,S,S.`````!`X;`!\QL;&QGP`
M`````,;&`'S&QL;&?`````!@,!@`?,;&QL9\`````#!XS`#,S,S,S'8`````
M8#`8`,S,S,S,=@``````QL8`QL;&QGX&#'@`QL8`.&S&QL;&;#@```#&Q@#&
MQL;&QL;&?``````8&#QF8&!F/!@8`````#AL9&#P8&!@YOP``````&9F/!A^
M&'X8&`````#XS,SXQ,S>S,S&``````X;&!@8?A@8&!C8<```&#!@`'@,?,S,
M=@`````,&#``.!@8&!@\`````!@P8`!\QL;&QGP`````&#!@`,S,S,S,=@``
M````=MP`W&9F9F9F````=MP`QN;V_M[.QL8`````/&QL/@!^```````````X
M;&PX`'P````````````P,``P,&#&QGP```````````#^P,#`````````````
M`/X&!@8``````,#`QLS8,&#<A@P8/@``P,#&S-@P9LZ>/@8&````&!@`&!@\
M/#P8`````````#9LV&PV````````````V&PV;-@``````!%$$4011!%$$401
M1!%$5:I5JE6J5:I5JE6J5:K==]UWW7?==]UWW7?==Q@8&!@8&!@8&!@8&!@8
M&!@8&!@8&/@8&!@8&!@8&!@8&/@8^!@8&!@8&#8V-C8V-C;V-C8V-C8V````
M`````/XV-C8V-C8``````/@8^!@8&!@8&#8V-C8V]@;V-C8V-C8V-C8V-C8V
M-C8V-C8V-C8``````/X&]C8V-C8V-C8V-C8V]@;^````````-C8V-C8V-OX`
M```````8&!@8&/@8^`````````````````#X&!@8&!@8&!@8&!@8&!\`````
M```8&!@8&!@8_P````````````````#_&!@8&!@8&!@8&!@8&!\8&!@8&!@`
M````````_P```````!@8&!@8&!C_&!@8&!@8&!@8&!@?&!\8&!@8&!@V-C8V
M-C8V-S8V-C8V-C8V-C8V-S`_```````````````_,#<V-C8V-C8V-C8V-O<`
M_P``````````````_P#W-C8V-C8V-C8V-C8W,#<V-C8V-C8``````/\`_P``
M`````#8V-C8V]P#W-C8V-C8V&!@8&!C_`/\````````V-C8V-C8V_P``````
M````````_P#_&!@8&!@8`````````/\V-C8V-C8V-C8V-C8V/P```````!@8
M&!@8'Q@?```````````````?&!\8&!@8&!@`````````/S8V-C8V-C8V-C8V
M-C;_-C8V-C8V&!@8&!C_&/\8&!@8&!@8&!@8&!@8^``````````````````?
M&!@8&!@8__________________\`````````__________#P\/#P\/#P\/#P
M\/#P#P\/#P\/#P\/#P\/#P__________````````````````=MS8V-QV````
M`````'S&_,;&_,#`0````/[&QL#`P,#`P`````````#^;&QL;&QL``````#^
MQF`P&#!@QOX``````````'[8V-C8<`````````!F9F9F?&!@P````````';<
M&!@8&!@``````'X8/&9F9CP8?@``````.&S&QO[&QFPX```````X;,;&QFQL
M;.X``````!XP&`P^9F9F/```````````?MO;?@`````````#!G[;V_-^8,``
M`````!XP8&!^8&`P'@```````'S&QL;&QL;&````````_@``_@``_@``````
M```8&'X8&```_P``````,!@,!@P8,`!^```````,&#!@,!@,`'X```````X;
M&Q@8&!@8&!@8&!@8&!@8&!@8V-AP````````&!@`?@`8&```````````=MP`
M=MP````````X;&PX````````````````````&!@`````````````````&```
M```````/#`P,#`SL;#P<`````-AL;&QL;```````````<-@P8,CX````````
=``````!\?'Q\?'P`````````````````````````
`
end

View File

@ -1,95 +0,0 @@
begin 644 vt220l.816
M````````````````````````?H&E@8&]F8&!?@```````'[_V___P^?__WX`
M`````````&S^_O[^?#@0```````````0.'S^?#@0```````````8/#SGY^<8
M&#P`````````&#Q^__]^&!@\`````````````!@\/!@```````#________G
MP\/G________```````\9D)"9CP``````/______PYF]O9G#______\``!X.
M&C)XS,S,S'@````````\9F9F9CP8?A@8````````/S,_,#`P,'#PX```````
M`']C?V-C8V-GY^;`````````&!C;/.<\VQ@8``````"`P.#P^/[X\.#`@```
M`````@8.'C[^/AX.!@(````````8/'X8&!A^/!@`````````9F9F9F9F9@!F
M9@```````'_;V]M[&QL;&QL``````'S&8#ALQL9L.`S&?```````````````
M_O[^_@```````!@\?A@8&'X\&'X````````8/'X8&!@8&!@8````````&!@8
M&!@8&'X\&````````````!@,_@P8```````````````P8/Y@,```````````
M`````,#`P/X``````````````"AL_FPH`````````````!`X.'Q\_OX`````
M``````#^_GQ\.#@0```````````````````````````````8/#P\&!@8`!@8
M``````!F9F8D``````````````````!L;/YL;&S^;&P``````!@8?,;"P'P&
MAL9\&!@```````#"Q@P8,&#&A@```````#AL;#AVW,S,S'8``````#`P,&``
M````````````````#!@P,#`P,#`8#````````#`8#`P,#`P,&#``````````
M``!F//\\9@``````````````&!A^&!@````````````````````8&!@P````
M`````````'X````````````````````````8&````````````@8,&#!@P(``
M``````!\QL;.WO;FQL9\````````&#AX&!@8&!@8?@```````'S&!@P8,&#`
MQOX```````!\Q@8&/`8&!L9\````````#!P\;,S^#`P,'@```````/[`P,#\
M!@8&QGP````````X8,#`_,;&QL9\````````_L8&!@P8,#`P,````````'S&
MQL9\QL;&QGP```````!\QL;&?@8&!@QX```````````8&````!@8````````
M````&!@````8&#``````````!@P8,&`P&`P&````````````?@``?@``````
M``````!@,!@,!@P8,&````````!\QL8,&!@8`!@8````````?,;&QM[>WMS`
M?````````!`X;,;&_L;&QL8```````#\9F9F?&9F9F;\````````/&;"P,#`
MP,)F/````````/AL9F9F9F9F;/@```````#^9F)H>&A@8F;^````````_F9B
M:'AH8&!@\````````#QFPL#`WL;&9CH```````#&QL;&_L;&QL;&````````
M/!@8&!@8&!@8/````````!X,#`P,#,S,S'@```````#F9F9L>'AL9F;F````
M````\&!@8&!@8&)F_@```````,;N_O[6QL;&QL8```````#&YO;^WL[&QL;&
M````````?,;&QL;&QL;&?````````/QF9F9\8&!@8/````````!\QL;&QL;&
MUMY\#`X`````_&9F9GQL9F9FY@```````'S&QF`X#`;&QGP```````!^?EH8
M&!@8&!@\````````QL;&QL;&QL;&?````````,;&QL;&QL9L.!````````#&
MQL;&UM;6_NYL````````QL9L?#@X?&S&Q@```````&9F9F8\&!@8&#P`````
M``#^QH8,&#!@PL;^````````/#`P,#`P,#`P/`````````"`P.!P.!P.!@(`
M```````\#`P,#`P,#`P\`````!`X;,8`````````````````````````````
M````_P``,#`8````````````````````````>`Q\S,S,=@```````.!@8'AL
M9F9F9GP```````````!\QL#`P,9\````````'`P,/&S,S,S,=@``````````
M`'S&_L#`QGP````````X;&1@\&!@8&#P````````````=LS,S,S,?`S,>```
M`.!@8&QV9F9F9N8````````8&``X&!@8&!@\````````!@8`#@8&!@8&!F9F
M/````.!@8&9L>'AL9N8````````X&!@8&!@8&!@\````````````[/[6UM;6
MQ@```````````-QF9F9F9F8```````````!\QL;&QL9\````````````W&9F
M9F9F?&!@\````````';,S,S,S'P,#!X```````#<=F9@8&#P````````````
M?,9@.`S&?````````!`P,/PP,#`P-AP```````````#,S,S,S,QV````````
M````QL;&QFPX$````````````,;&UM;6_FP```````````#&;#@X.&S&````
M````````QL;&QL;&?@8,^````````/[,&#!@QOX````````.&!@8<!@8&!@.
M````````&!@8&``8&!@8&````````'`8&!@.&!@8&'````````!VW```````
M```````````````0.&S&QL;^`````````#QFPL#`P,)F/`P&?`````#,``#,
MS,S,S,QV```````,&#``?,;^P,#&?```````$#AL`'@,?,S,S'8```````#,
M``!X#'S,S,QV``````!@,!@`>`Q\S,S,=@``````.&PX`'@,?,S,S'8`````
M`````#QF8&!F/`P&/``````0.&P`?,;^P,#&?````````,8``'S&_L#`QGP`
M`````&`P&`!\QO[`P,9\````````9@``.!@8&!@8/```````&#QF`#@8&!@8
M&#P``````&`P&``X&!@8&!@\``````#&`!`X;,;&_L;&Q@`````X;#@`.&S&
MQO[&QL8`````&#!@`/YF8'Q@8&;^``````````!L_K(R?MC8;@```````#YL
MS,S^S,S,S,X``````!`X;`!\QL;&QL9\````````Q@``?,;&QL;&?```````
M8#`8`'S&QL;&QGP``````#!XS`#,S,S,S,QV``````!@,!@`S,S,S,S,=@``
M````QL8``,;&QL;&QGX&#'@`QL8`?,;&QL;&QL9\`````,;&`,;&QL;&QL;&
M?```````&!@\9F!@8&8\&!@``````#AL9&#P8&!@8.;\````````9F8\&'X8
M?A@8&```````^,S,^,3,WLS,S,8```````X;&!@8?A@8&!@8V'`````8,&``
M>`Q\S,S,=@``````#!@P`#@8&!@8&#P``````!@P8`!\QL;&QL9\```````8
M,&``S,S,S,S,=@```````';<`-QF9F9F9F8`````=MP`QN;V_M[.QL;&````
M```\;&P^`'X`````````````.&QL.`!\```````````````P,``P,&#`QL9\
M`````````````/[`P,#```````````````#^!@8&!@```````,#`PL;,&#!@
MW(8,&#X```#`P,+&S!@P9LZ>/@8&`````!@8`!@8&#P\/!@````````````V
M;-AL-@``````````````V&PV;-@````````11!%$$4011!%$$4011!%$5:I5
MJE6J5:I5JE6J5:I5JMUWW7?==]UWW7?==]UWW7<8&!@8&!@8&!@8&!@8&!@8
M&!@8&!@8&/@8&!@8&!@8&!@8&!@8^!CX&!@8&!@8&!@V-C8V-C8V]C8V-C8V
M-C8V`````````/XV-C8V-C8V-@``````^!CX&!@8&!@8&!@V-C8V-O8&]C8V
M-C8V-C8V-C8V-C8V-C8V-C8V-C8V-@``````_@;V-C8V-C8V-C8V-C8V-O8&
M_@``````````-C8V-C8V-OX``````````!@8&!@8^!CX````````````````
M````^!@8&!@8&!@8&!@8&!@8&!\``````````!@8&!@8&!C_````````````
M````````_Q@8&!@8&!@8&!@8&!@8&!\8&!@8&!@8&`````````#_````````
M```8&!@8&!@8_Q@8&!@8&!@8&!@8&!@?&!\8&!@8&!@8&#8V-C8V-C8W-C8V
M-C8V-C8V-C8V-C<P/P`````````````````_,#<V-C8V-C8V-C8V-C8V]P#_
M`````````````````/\`]S8V-C8V-C8V-C8V-C8W,#<V-C8V-C8V-@``````
M_P#_```````````V-C8V-O<`]S8V-C8V-C8V&!@8&!C_`/\``````````#8V
M-C8V-C;_`````````````````/\`_Q@8&!@8&!@8`````````/\V-C8V-C8V
M-C8V-C8V-C8_```````````8&!@8&!\8'P`````````````````?&!\8&!@8
M&!@8&``````````_-C8V-C8V-C8V-C8V-C8V_S8V-C8V-C8V&!@8&!C_&/\8
M&!@8&!@8&!@8&!@8&!CX````````````````````'Q@8&!@8&!@8________
M_____________P````````#____________P\/#P\/#P\/#P\/#P\/#P#P\/
M#P\/#P\/#P\/#P\/#_________\``````````````````';<V-C8W'8`````
M``!XS,S,V,S&QL;,````````_L;&P,#`P,#`P```````````_FQL;&QL;&P`
M````````_L9@,!@P8,;^````````````?MC8V-C8<```````````9F9F9F9\
M8&#``````````';<&!@8&!@8`````````'X8/&9F9CP8?@`````````X;,;&
M_L;&;#@````````X;,;&QFQL;&SN````````'C`8##YF9F9F/```````````
M`'[;V]M^`````````````P9^V]OS?F#`````````'C!@8'Y@8&`P'@``````
M``!\QL;&QL;&QL8``````````/X``/X``/X````````````8&'X8&```_P``
M```````P&`P&#!@P`'X`````````#!@P8#`8#`!^````````#AL;&Q@8&!@8
M&!@8&!@8&!@8&!@8&-C8V'```````````!@8`'X`&!@`````````````=MP`
M=MP`````````.&QL.````````````````````````!@8````````````````
M````&```````````#PP,#`P,[&QL/!P``````-AL;&QL;`````````````!P
MV#!@R/@`````````````````?'Q\?'Q\?```````````````````````````
!`#!@
`
end

View File

@ -1,4 +0,0 @@
PROG= ispcvt
MAN8= ispcvt.${MAN8EXT}
.include <bsd.prog.mk>

View File

@ -1,91 +0,0 @@
.\" Copyright (c) 1992, 1995 Hellmuth Michaelis
.\"
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by Hellmuth Michaelis
.\" 4. The name authors may not be used to endorse or promote products
.\" derived from this software without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" @(#)ispcvt.1, 3.20, Last Edit-Date: [Tue Apr 4 12:35:54 1995]
.\"
.Dd April 4, 1995
.Dt ISPCVT 8
.Sh NAME
.Nm ispcvt
.Nd verify if current video driver is pcvt driver
.Sh SYNOPSIS
.Nm ispcvt
.Op Fl c
.Op Fl d Ar device
.Op Fl v
.Sh DESCRIPTION
The
.Nm ispcvt
utility allows the user to check whether the current video driver compiled
into the kernel is a pcvt driver. The major and minor release numbers of
the driver are also checked.
Furthermore
.Nm ispcvt
is also able to print out the values of all the
.Dq Ar PCVT_XXXXXX
compile time options, the driver in the current running kernel was
compiled with.
.Pp
The options are as follows:
.Bl -tag -width Ds
.It Fl d
Specifies a device for which the check is done.
.It Fl v
Specifies being verbose. On success the name and revision is reported, on
failure which comparison failed.
.It Fl c
This options prints out the values of all
.Dq Ar PCVT_XXXXXX
#defines which were given to the compiler at the time the currently running
kernel was compiled. Specifying
.Fl v
with the
.Fl c
option gives a verbose listing of the compile-time options.
.Sh RETURN VALUE
.Bl -tag -width Ds
.Pp
.It Sy 0
driver is pcvt and major and minor numbers match
.It Sy 1
open or ioctl system call failed
.It Sy 2
driver name mismatch
.It Sy 3
name matched, release major number mismatch
.It Sy 4
name & major number matched, release minor number mismatch
.It Sy 5
usage error
.El
.Pp
.Sh BUGS
No known bugs
.Sh SEE ALSO
.Xr pcvt 4

View File

@ -1,308 +0,0 @@
/*
* Copyright (c) 1992, 1995 Hellmuth Michaelis
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Hellmuth Michaelis
* 4. The name authors may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
static char *id =
"@(#)ispcvt.c, 3.20, Last Edit-Date: [Wed Apr 5 17:53:28 1995]";
/*---------------------------------------------------------------------------*
*
* history:
*
* -hm upgraded to report pcvt compile time configuration
* -hm PCVT_INHIBIT_NUMLOCK patch from Joerg
* -hm PCVT_META_ESC patch from Joerg
* -hm PCVT_PCBURST
* -hm new ioctl VGAPCVTINFO
* -hm new CONF_ values for 3.10
* -hm new CONF_ values for 3.20
* -hm removed PCVT_FAKE_SYSCONS10
* -hm added PCVT_PORTIO_DELAY
* -hm removed PCVT_386BSD
* -hm add -d option to specify a device
* -hm PCVT_XSERVER -> XSERVER
*
*---------------------------------------------------------------------------*/
#include <stdio.h>
#include <fcntl.h>
#include <machine/pcvt_ioctl.h>
#define DEFAULTFD 0
main(argc,argv)
int argc;
char *argv[];
{
extern int optind;
extern int opterr;
extern char *optarg;
struct pcvtid pcvtid;
struct pcvtinfo pcvtinfo;
int c;
char *p;
int verbose = 0;
int config = 0;
int dflag = 0;
int fd;
char *device;
while( (c = getopt(argc, argv, "vcd:")) != -1)
{
switch(c)
{
case 'v':
verbose = 1;
break;
case 'c':
config = 1;
break;
case 'd':
device = optarg;
dflag = 1;
break;
case '?':
default:
usage();
break;
}
}
if(dflag)
{
if((fd = open(device, O_RDWR)) == -1)
{
if(verbose)
{
char buffer[80];
strcpy(buffer,"ERROR opening ");
strcat(buffer,device);
perror(buffer);
}
exit(1);
}
}
else
{
fd = DEFAULTFD;
}
if(ioctl(fd, VGAPCVTID, &pcvtid) == -1)
{
if(verbose)
perror("ispcvt - ioctl VGAPCVTID failed, error");
exit(1);
}
if(!strcmp(pcvtid.name, PCVTIDNAME))
{
if(pcvtid.rmajor == PCVTIDMAJOR)
{
if(pcvtid.rminor != PCVTIDMINOR)
{
if(verbose)
fprintf(stderr,"ispcvt - minor revision: expected %d, got %d\n", PCVTIDMINOR, pcvtid.rminor);
exit(4); /* minor revision mismatch */
}
}
else
{
if(verbose)
fprintf(stderr,"ispcvt - major revision: expected %d, got %d\n", PCVTIDMAJOR, pcvtid.rmajor);
exit(3); /* major revision mismatch */
}
}
else
{
if(verbose)
fprintf(stderr,"ispcvt - name check: expected %s, got %s\n", PCVTIDNAME, pcvtid.name);
exit(2); /* name mismatch */
}
if(verbose)
{
fprintf(stderr,"\nispcvt: kernel and utils match, driver name [%s], release [%1.1d.%02.2d]\n\n",pcvtid.name,pcvtid.rmajor,pcvtid.rminor);
}
if(config == 0)
exit(0);
if(ioctl(fd, VGAPCVTINFO, &pcvtinfo) == -1)
{
if(verbose)
perror("ispcvt - ioctl VGAPCVTINFO failed, error");
exit(1);
}
if(verbose)
{
switch(pcvtinfo.opsys)
{
case CONF_NETBSD:
p = "PCVT_NETBSD";
break;
case CONF_FREEBSD:
p = "PCVT_FREEBSD";
break;
default:
case CONF_UNKNOWNOPSYS:
p = "UNKNOWN";
break;
}
fprintf(stderr,"Operating System = %s\t", p);
fprintf(stderr,"OS Release Id = %u\n", pcvtinfo.opsysrel);
fprintf(stderr,"PCVT_NSCREENS = %u\t\t", pcvtinfo.nscreens);
fprintf(stderr,"PCVT_UPDATEFAST = %u\n", pcvtinfo.updatefast);
fprintf(stderr,"PCVT_UPDATESLOW = %u\t\t", pcvtinfo.updateslow);
fprintf(stderr,"PCVT_SYSBEEPF = %u\n", pcvtinfo.sysbeepf);
fprintf(stderr,"PCVT_PCBURST = %u\t\t", pcvtinfo.pcburst);
fprintf(stderr,"PCVT_KBD_FIFO_SZ = %u\n\n", pcvtinfo.kbd_fifo_sz);
/* config booleans */
fprintf(stderr,"PCVT_132GENERIC = %s",
(pcvtinfo.compile_opts & CONF_132GENERIC) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_24LINESDEF = %s",
(pcvtinfo.compile_opts & CONF_24LINESDEF) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_BACKUP_FONTS = %s",
(pcvtinfo.compile_opts & CONF_BACKUP_FONTS) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_CTRL_ALT_DEL = %s",
(pcvtinfo.compile_opts & CONF_CTRL_ALT_DEL) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_EMU_MOUSE = %s",
(pcvtinfo.compile_opts & CONF_EMU_MOUSE) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_INHIBIT_NUMLOCK = %s",
(pcvtinfo.compile_opts & CONF_INHIBIT_NUMLOCK) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_KEYBDID = %s",
(pcvtinfo.compile_opts & CONF_KEYBDID) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_KBD_FIFO = %s",
(pcvtinfo.compile_opts & CONF_KBD_FIFO) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_META_ESC = %s",
(pcvtinfo.compile_opts & CONF_META_ESC) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_NOFASTSCROLL = %s",
(pcvtinfo.compile_opts & CONF_NOFASTSCROLL) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_NO_LED_UPDATE = %s",
(pcvtinfo.compile_opts & CONF_NO_LED_UPDATE) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_NULLCHARS = %s",
(pcvtinfo.compile_opts & CONF_NULLCHARS) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_PALFLICKER = %s",
(pcvtinfo.compile_opts & CONF_PALFLICKER) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_PORTIO_DELAY = %s",
(pcvtinfo.compile_opts & CONF_PORTIO_DELAY) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_PRETTYSCRNS = %s",
(pcvtinfo.compile_opts & CONF_PRETTYSCRNS) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_SCREENSAVER = %s",
(pcvtinfo.compile_opts & CONF_SCREENSAVER) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_SETCOLOR = %s",
(pcvtinfo.compile_opts & CONF_SETCOLOR) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_SHOWKEYS = %s",
(pcvtinfo.compile_opts & CONF_SHOWKEYS) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_SIGWINCH = %s",
(pcvtinfo.compile_opts & CONF_SIGWINCH) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_SLOW_INTERRUPT = %s",
(pcvtinfo.compile_opts & CONF_SLOW_INTERRUPT) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_SW0CNOUTP = %s",
(pcvtinfo.compile_opts & CONF_SW0CNOUTP) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_USEKBDSEC = %s",
(pcvtinfo.compile_opts & CONF_USEKBDSEC) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_USL_VT_COMPAT = %s",
(pcvtinfo.compile_opts & CONF_USL_VT_COMPAT) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_VT220KEYB = %s",
((u_int)pcvtinfo.compile_opts & (u_int)CONF_VT220KEYB) ? "ON" : "OFF");
next();
fprintf(stderr,"PCVT_WAITRETRACE = %s",
(pcvtinfo.compile_opts & CONF_WAITRETRACE) ? "ON" : "OFF");
next();
fprintf(stderr,"XSERVER = %s",
(pcvtinfo.compile_opts & CONF_XSERVER) ? "ON" : "OFF");
fprintf(stderr,"\n\n");
}
else /* !verbose */
{
fprintf(stderr,"BSD Version = %u\n", pcvtinfo.opsys);
fprintf(stderr,"PCVT_NSCREENS = %u\n", pcvtinfo.nscreens);
fprintf(stderr,"PCVT_UPDATEFAST = %u\n", pcvtinfo.updatefast);
fprintf(stderr,"PCVT_UPDATESLOW = %u\n", pcvtinfo.updateslow);
fprintf(stderr,"PCVT_SYSBEEPF = %u\n", pcvtinfo.sysbeepf);
fprintf(stderr,"Compile options = 0x%08X\n", pcvtinfo.compile_opts);
}
}
usage()
{
fprintf(stderr,"\nispcvt - verify current video driver is the pcvt-driver\n");
fprintf(stderr," usage: ispcvt [-v] [-c] [-d device]\n");
fprintf(stderr,"options: -v be verbose\n");
fprintf(stderr," -c print compile time configuration\n");
fprintf(stderr," -d <name> use devicefile <name> for verification\n\n");
exit(5);
}
next()
{
static int i = 0;
fprintf(stderr, "%s", (i == 0) ? "\t\t" : "\n");
i = ~i;
}
/* EOF */

View File

@ -1,36 +0,0 @@
.if !exists(${.CURDIR}/../Makefile.inc)
error:
@echo
@echo " You MUST link/copy"
@echo
@echo " ../Makefile.inc.NetBSD or ../Makefile.inc.FreeBSD"
@echo
@echo " to ../Makefile.inc before you can proceed !"
@echo
.else
PROG= kbdio
SRCS= kbdio.y lex.l y.tab.h
#YACC= bison
#YFLAGS+= -yd # Bison only
YFLAGS+= -v # verbose
LFLAGS+= -I
DPADD= ${LIBM} ${LIBY} ${LIBL}
LDADD= -lm -ly -ll
NOMAN=
CFLAGS+= -I${.OBJDIR} -I${.CURDIR} #-g
CLEANFILES+= y.output # comment file from bison
install:
@${ECHO} "kbdio is not installed automatically ...."
.include <bsd.prog.mk>
.endif

View File

@ -1,333 +0,0 @@
/* Hello emacs, this should be edited in -*- Fundamental -*- mode */
%{
/*
* Copyright (c) 1994 Joerg Wunsch
*
* All rights reserved.
*
* This program is free software.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Joerg Wunsch
* 4. The name of the developer may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ident "$Header: /home/ncvs/src/usr.sbin/pcvt/kbdio/kbdio.y,v 1.1.1.1 1995/02/05 13:49:24 jkh Exp $"
/*
* $Log: kbdio.y,v $
* Revision 1.1.1.1 1995/02/05 13:49:24 jkh
* PCVT userland utilities.
* Submitted by: hm
*
* Revision 1.2 1994/09/18 19:49:22 j
* Refined expr handling; can now set/clear bits.
*
* Revision 1.1 1994/09/18 12:57:13 j
* Initial revision
*
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <sys/fcntl.h>
#include <machine/cpufunc.h>
#include <machine/pcvt_ioctl.h>
#ifdef __NetBSD__
#include <machine/pio.h>
#endif
#define KBD_DELAY \
{ u_char x = inb(0x84); } \
{ u_char x = inb(0x84); } \
{ u_char x = inb(0x84); } \
{ u_char x = inb(0x84); } \
{ u_char x = inb(0x84); } \
{ u_char x = inb(0x84); }
#define YYDEBUG 1
void yyerror(const char *msg);
static void help(int), status(void), data(int), kbd(int), cmdbyte(int),
kbc(int), whatMCA(void);
static int kbget(void);
%}
%union {
int num;
}
%token NEWLINE
%token ALL CMD DATA DEFAULTS ECHOC ENABLE EXPR HELP ID LED
%token MAKE ONLY RELEASE RESEND RESET SCAN STATUS TYPEMATIC
%token WHAT
%token <num> NUM
%type <num> expr opr
%%
interpret: lines ;
lines: line
| lines line
;
line: statements NEWLINE
| NEWLINE
| error NEWLINE { fprintf(stderr, "bing!\n"); }
;
statements: statement
| statements ';' statement
;
statement: '?' { help(0); }
| HELP { help(0); }
| HELP EXPR { help(1); }
| STATUS '?' { status(); }
| WHAT '?' { whatMCA(); }
| DATA '?' { data(kbget()); }
| LED '=' NUM { kbd(0xed); kbd($3); }
| ECHOC { kbd(0xee); kbget(); }
| SCAN '=' NUM { kbd(0xf0); kbd($3);
if($3 == 0) data(kbget()); }
| SCAN '?' { kbd(0xf0); kbd(0); data(kbget()); }
| ID '?' { kbd(0xf2); data(kbget());
data(kbget()); }
| TYPEMATIC '=' NUM ',' NUM
{ kbd(0xf3);
if($3 > 1000) $3 = 1000;
if($5 > 30) $5 = 30;
if($5 < 2) $5 = 2;
kbd(
(int)
(8.0 * log(30.0 / (double)$5)
/ log(2))
| ((($3 / 250) - 1) * 32)
);
}
| ENABLE { kbd(0xf4); }
| DEFAULTS { kbd(0xf6); }
| ALL TYPEMATIC { kbd(0xf7); }
| ALL MAKE RELEASE { kbd(0xf8); }
| ALL MAKE ONLY { kbd(0xf9); }
| ALL TYPEMATIC MAKE RELEASE
{ kbd(0xfa); }
| NUM TYPEMATIC { kbd(0xfb); kbd($1); }
| NUM MAKE RELEASE { kbd(0xfc); kbd($1); }
| NUM MAKE ONLY { kbd(0xfd); kbd($1); }
| RESEND { kbd(0xfe); }
| RESET { kbd(0xff); }
| CMD '?' { kbc(0x20); cmdbyte(kbget()); }
| CMD '=' expr { kbc(0x60); kbd($3); }
| /* lambda */
;
expr: opr { $$ = $1; }
| expr '+' opr { $$ = $1 | $3; }
| expr '-' opr { $$ = $1 & ~($3); }
;
opr: NUM { $$ = $1; }
| CMD { kbc(0x20); $$ = kbget(); }
;
%%
static void
help(int topic) {
switch(topic) {
case 0:
printf(
"Input consists of lines, containing one or more semicolon-separated\n"
"statements. Numbers are implicitly hexadecimal, append a dot for\n"
"decimal numbers. Valid statements include:\n"
"help [expr]; give help [to expression syntax]\n"
"status ? interpret kbd ctrl status byte\n"
"what ? check for MCA type 1 or 2 motherboard controller\n"
"data ? get one byte of data\n"
"led = NUM set kbd LEDs\n"
"echo = NUM echo byte to kbd\n"
"scan = NUM; scan ? set scan code set; return current set\n"
"id ? get two id bytes\n"
"typematic=delay,rate set typematic delay(ms)&rate(1/s)\n"
"enable; defaults enable kbd; back to defaults\n"
"all typematic make all keys typematic\n"
"all make release make all keys sending make/release\n"
"all make only make all keys sending make only\n"
"all typematic make release make all keys typematic & make/release\n"
"NUM typematic make specific key typematic\n"
"NUM make release make specific key sending make/release\n"
"NUM make only make specific key sending make only\n"
"resend; reset resend last byte from kbd; reset kbd\n"
"cmd ? fetch kbd ctrl command byte\n"
"cmd = expr set kbd ctrl command byte\n"
"\n");
break;
case 1:
printf(
"Expressions can either consist of a number, possibly followed\n"
"by a + or - sign and bit values in numeric or symbolic form.\n"
"Symbolic bit values are:\n"
"SCCONV IGNPAR CLKLOW OVRINH TEST IRQ\n"
"\n");
break;
}
}
static void
status(void) {
int c = inb(0x64);
if(c&0x80) printf("parity error | ");
if(c&0x40) printf("rx timeout | ");
if(c&0x20) printf("tx timeout | ");
if(c&0x10) printf("kbd released ");
else printf("kbd locked ");
if(c&0x08) printf("| cmd last sent ");
else printf("| data last sent ");
if(c&0x04) printf("| power-on ");
else printf("| test ok ");
if(c&0x02) printf("| ctrl write busy ");
else printf("| ctrl write ok ");
if(c&0x01) printf("| ctrl read ok\n");
else printf("| ctrl read empty\n");
}
/* see: Frank van Gilluwe, "The Undocumented PC", Addison Wesley 1994, pp 273 */
static void
whatMCA(void) {
int new, sav;
kbc(0x20); /* get command byte */
sav = kbget(); /* sav = command byte */
kbc(0x60); /* set command byte */
kbd(sav | 0x40); /* set keyboard xlate bit */
kbc(0x20); /* get keyboard command */
new = kbget(); /* new = command byte */
kbc(0x60); /* set command byte */
kbd(sav); /* restore command byte */
if(new & 0xbf)
printf("Hmm - looks like MCA type 1 motherboard controller\n");
else
printf("Hmm - looks like MCA type 2 motherboard controller\n");
}
static void
kbd(int d) {
int i = 100000;
while(i && (inb(0x64) & 2)) i--;
if(i == 0) { printf("kbd write: timed out\n"); return; }
outb(0x60, d);
}
static void
kbc(int d) {
int i = 100000;
while(i && (inb(0x64) & 2)) i--;
if(i == 0) { printf("ctrl write: timed out\n"); return; }
outb(0x64, d);
}
static int
kbget(void) {
int i, c;
for(;;) {
i = 10000;
while(i && (inb(0x64) & 1) == 0) i--;
if(i == 0) { printf("data read: timed out\n"); return -1; }
KBD_DELAY
c = (unsigned char)inb(0x60);
switch(c) {
case 0: case 0xff:
printf("got kbd overrun\n"); break;
case 0xaa:
printf("got self-test OK\n"); break;
case 0xee:
printf("got ECHO byte\n"); break;
case 0xfa:
printf("got ACK\n"); break;
case 0xfc:
printf("got self-test FAIL\n"); break;
case 0xfd:
printf("got internal failure\n"); break;
case 0xfe:
printf("got RESEND request\n"); break;
default:
goto done;
}
}
done:
return c;
}
static void
cmdbyte(int d) {
if(d&0x40) printf("scan conv ");
else printf("pass thru ");
if(d&0x20) printf("| ign parity ");
else printf("| check parity ");
if(d&0x10) printf("| kbd clk low ");
else printf("| enable kbd ");
if(d&0x08) printf("| override kbd inh ");
if(d&0x04) printf("| test ok ");
else printf("| power-on ");
if(d&0x01) printf("| irq 1 enable\n");
else printf("| no irq\n");
}
static void
data(int d) {
if(d < 0) return;
printf("data: 0x%02x\n", d);
}
void yyerror(const char *msg) {
fprintf(stderr, "yyerror: %s\n", msg);
}
int main(int argc, char **argv) {
int fd;
if(argc > 1) yydebug = 1;
if((fd = open("/dev/console", O_RDONLY)) < 0)
fd = 0;
if(ioctl(fd, KDENABIO, 0) < 0) {
perror("ioctl(KDENABIO)");
return 1;
}
yyparse();
(void)ioctl(fd, KDDISABIO, 0);
return 0;
}

View File

@ -1,102 +0,0 @@
%{
/*
* Copyright (c) 1994 Joerg Wunsch
*
* All rights reserved.
*
* This program is free software.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Joerg Wunsch
* 4. The name of the developer may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ident "$Header: /home/ncvs/src/usr.sbin/pcvt/kbdio/lex.l,v 1.1.1.1 1995/02/05 13:49:24 jkh Exp $"
/*
* $Log: lex.l,v $
* Revision 1.1.1.1 1995/02/05 13:49:24 jkh
* PCVT userland utilities.
* Submitted by: hm
*
* Revision 1.2 1994/09/18 19:48:45 j
* Added the symbolic values for kbd cmd byte.
*
* Revision 1.1 1994/09/18 12:57:13 j
* Initial revision
*
*
*/
#include <stdio.h>
#include <stdlib.h>
#include "y.tab.h"
extern YYSTYPE yylval;
%}
D [0-9a-fA-F]
%%
all { return ALL; }
cmd { return CMD; }
data { return DATA; }
defaults { return DEFAULTS; }
echo { return ECHOC; }
enable { return ENABLE; }
expr { return EXPR; }
help { return HELP; }
id { return ID; }
led { return LED; }
make { return MAKE; }
only { return ONLY; }
release { return RELEASE; }
resend { return RESEND; }
reset { return RESET; }
scan { return SCAN; }
status { return STATUS; }
typematic { return TYPEMATIC; }
what { return WHAT; }
/* numeric values */
clklow { yylval.num = 0x10; return NUM; }
ignpar { yylval.num = 0x20; return NUM; }
irq { yylval.num = 0x01; return NUM; }
ovrinh { yylval.num = 0x08; return NUM; }
scconv { yylval.num = 0x40; return NUM; }
test { yylval.num = 0x04; return NUM; }
{D}({D}*)\. { sscanf(yytext, "%d", &yylval.num); return NUM; }
{D}({D}*) { sscanf(yytext, "%x", &yylval.num); return NUM; }
[ \t] { /* ignore */ }
\n { return NEWLINE; }
. { return yytext[0]; }

View File

@ -1,14 +0,0 @@
PROG= kcon
DEVICE= /dev/ttyv0
CFLAGS+= -I${.CURDIR}/../keycap -DKEYB_DEVICE=\"${DEVICE}\"
.if exists(${.OBJDIR}/../keycap)
LIBKEYCAP= ${.OBJDIR}/../keycap/libkeycap.a
.else
LIBKEYCAP= ${.CURDIR}/../keycap/libkeycap.a
.endif
DPADD= ${LIBKEYCAP}
LDADD= ${LIBKEYCAP}
.include <bsd.prog.mk>

View File

@ -1,122 +0,0 @@
.\" Copyright (c) 1992,1993,1994 Hellmuth Michaelis
.\"
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by Hellmuth Michaelis
.\" 4. The name authors may not be used to endorse or promote products
.\" derived from this software without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" @(#)kcon.1, 3.20, Last Edit-Date: [Wed Jan 25 16:34:56 1995]
.\"
.Dd January 25, 1995
.Dt KCON 1
.Sh NAME
.Nm kcon
.Nd keyboard control and remapping
.Sh SYNOPSIS
.Nm kcon
.Op Fl d Ar delay
.Op Fl l
.Op Fl m Ar map
.Op Fl o
.Op Fl p
.Op Fl R
.Op Fl r Ar rate
.Op Fl s
.Op Fl t Ns Ar +/-
.Op Fl x
.Sh DESCRIPTION
.Nm kcon
is used for controlling all aspects of keyboard configuration for the 'pcvt'
video driver.
.Pp
The available options are:
.Bl -tag -width flag
.It Fl d Ar delay
Specifies the delay after which the last key entered will be repeated by the
Keyboard. Valid values are 0..3 corresponding to delays of 250, 500, 750 and
1000 milliseconds.
.It Fl l
Displays the current keyboard map in use by the driver.
.It Fl m Ar map
Specifies the map entry to be searched in the keyboard capabilities database
.Nm keycap.
The database is searched for the entry and if found, the mapping
is loaded and is used in the driver from then on.
.It Fl o
Switches display of control codes to octal in the listing of the current map.
To be used in conjunction with the
.Fl l
option.
.It Fl p
Uses 'pure' output when listing - the Escape character is displayed in either
octal or hexadecimal and not as 'ESC'. To be used in conjunction with the
.Fl l
option.
.It Fl r Ar rate
Specifies the character repetition rate. Valid argument values are 0...31
corresponding to rates of 30 characters/second ... 2 characters/second.
.It Fl R
Reset the Keyboard.
.It Fl s
Displays the current settings of the rate and delay values.
.It Fl t Ar +/-
Specify this option to enable (
.Ar +
) or disable (
.Ar -
) the repetition of keys.
.It Fl x
Switches display of control codes to hexadecimal in the listing of the current map.
To be used in conjunction with the
.Fl l
option. This is the default behaviour.
.Sh FILES
.Bl -tag -width /usr/share/misc/keycap.pcvt -compact
.It Pa /usr/share/misc/keycap.pcvt
Keyboard capabilities data base file if nothing else was chosen during installation.
.It Pa /dev/console
Keyboard raw device.
.Sh SEE ALSO
.Xr keycap 3 ,
.Xr keycap 5
.Sh BUGS
.Nm kcon
detects several inconsistencies in the keycap database. In case of errors
.Nm kcon
exits with an error message. If this happens, the keyboard may remain in
an undefined state. To recover from such situation, execute
.Nm kcon -m default
.Sh EXAMPLES
The command
.Dq Li kcon -m gb
loads the entry 'gb' from the keycap file into the keyboard to switch to
a british keyboard behaviour.
The command
.Dq Li kcon -r 0 -d 0
switches the keyboard to emit characters at a rate of 30 characters per second
after a key has been held down for 250 milliseconds.

View File

@ -1,753 +0,0 @@
/*
* Copyright (c) 1992,1993,1994 Hellmuth Michaelis
*
* Copyright (c) 1992,1993 Holger Veit.
*
* All rights reserved.
*
* This code is derived from software contributed to 386BSD by
* Holger Veit
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by
* Hellmuth Michaelis and Holger Veit
* 4. The name authors may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
static char *id =
"@(#)kcon.c, 3.20, Last Edit-Date: [Wed Jan 25 16:33:08 1995]";
/*---------------------------------------------------------------------------*
*
* kcon.c Keyboard control and remapping
* ----------------------------------------------
*
* based on "keymap" which was written by
* Holger Veit (veit@du9ds3.uni-duisburg.de)
*
* -hm a first rewrite
* -hm rewrite for pcvt 2.0 distribution
* -hm adding show current typematic values
* -hm hex/octal/esc output choices
* -hm remapping debugging
* -hm garbage output for remapped keys bugfix
* -hm patch from Lon Willet, adding -R
*
*---------------------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <machine/pcvt_ioctl.h>
#include "keycap.h"
int Rf = 0;
int df = 0;
int lf = 0;
int mf = 0;
int of = 0;
int pf = 0;
int rf = 0;
int tf = 0;
int xf = 0;
int sf = 0;
/*---------------------------------------------------------------------------*
* main entry
*---------------------------------------------------------------------------*/
main(argc, argv)
int argc;
char *argv[];
{
extern char *optarg;
extern int optind;
int c = 0;
int errf = 0;
int rate = -1;
int delay = -1;
char *map;
int kbfd;
while((c = getopt(argc, argv, "Rd:lm:opr:st:x")) != -1)
{
switch(c)
{
case 'R':
Rf = 1;
break;
case 'd':
df = 1;
delay = atoi(optarg);
break;
case 'l':
lf = 1;
break;
case 'm':
mf = 1;
map = optarg;
break;
case 'o':
if(xf)
errf = 1;
else
of = 1;
break;
case 'p':
pf = 1;
break;
case 'r':
rf = 1;
rate = atoi(optarg);
break;
case 's':
sf = 1;
break;
case 't':
if(*optarg == '+')
tf = 1;
else if(*optarg == '-')
tf = -1;
else
errf = 1;
break;
case 'x':
if(of)
errf = 1;
else
xf = 1;
break;
default:
usage();
}
}
if((Rf == 0 && df == 0 && lf == 0 && tf == 0 && sf == 0 &&
rf == 0 && mf == 0 ) || errf)
{
usage();
}
if((kbfd = open(KEYB_DEVICE, 0)) < 0)
{
perror("kcon: keyboard open failiure");
exit(1);
}
if(sf)
{
showtypeamatic(kbfd);
exit(0);
}
if(lf)
{
listcurrent(kbfd);
exit(0);
}
if (Rf)
{
if (ioctl(kbfd, KBDRESET, 0) < 0) {
perror ("kcon: ioctl KBDRESET failed");
exit (1);
}
}
if(tf)
{
setrepeat(kbfd, tf);
}
if(df || rf)
{
if(delay > 3)
{
fprintf(stderr,"Delay value (%d) out of range, possible values are 0..3!\n",delay);
exit(1);
}
if(rate > 31)
{
fprintf(stderr,"Rate value (%d) out of range, possible values are 0..31!\n",rate);
exit(1);
}
settypeam(kbfd, delay, rate);
}
if(mf)
{
remapkeys(kbfd, map);
}
close(kbfd);
exit(0);
}
/*---------------------------------------------------------------------------*
* display usage info & exit
*---------------------------------------------------------------------------*/
usage()
{
fprintf(stderr, "\nkcon: keyboard control and remapping utility for pcvt video driver\n");
fprintf(stderr, "usage: [-R] [-d delay] [-l] [-m map] [-o] [-p] [-r rate] [-t +/-] [-x]\n");
fprintf(stderr, " -R full reset of keyboard\n");
fprintf(stderr, " -d delay until a key is repeated (range: 0...3 => 250...1000ms)\n");
fprintf(stderr, " -l produce listing of current keyboard mapping\n");
fprintf(stderr, " -m set keyboard remapping from a keycap entry\n");
fprintf(stderr, " -o set octal output for listing\n");
fprintf(stderr, " -p pure, don't display escape as 'ESC' for listing\n");
fprintf(stderr, " -r chars/second repeat value (range: 0...31 => 30...2 chars/sec)\n");
fprintf(stderr, " -s show, display the current keyboard typematic values\n");
fprintf(stderr, " -t switch repeat on(+) or off(-)\n");
fprintf(stderr, " -x set hexadecimal output for listing\n\n");
exit(1);
}
/*---------------------------------------------------------------------------*
* convert control char in string to printable values
*---------------------------------------------------------------------------*/
char *showcntrl(s)
u_char *s;
{
static char res_str[80];
static char conv_buf[80];
int i;
res_str[0] = '\0';
for(i = 0; s[i]; i++)
{
if(((s[i] > 0x20) && (s[i] <= 0x7e)) || ((s[i] >= 0xa0) && (s[i] <= 0xff)))
{
conv_buf[0] = s[i];
conv_buf[1] = '\0';
}
else if((s[i] == 0x1b) && (pf == 0))
{
strcpy(conv_buf,"ESC ");
}
else if(of)
{
sprintf(conv_buf,"\\%03.3o ", s[i]);
}
else
{
sprintf(conv_buf,"0x%02.2X ", s[i]);
}
strcat(res_str, conv_buf);
}
return(res_str);
}
/*---------------------------------------------------------------------------*
* list the current keyboard mapping
*---------------------------------------------------------------------------*/
listcurrent(kbfd)
int kbfd;
{
static char *keytypetab[] = {
"NONE ",
"SHIFT ",
"ALT/META ",
"NUMLOCK ",
"CONTROL ",
"CAPSLOCK ",
"ASCII ",
"SCROLL ",
"FUNCTION ",
"KEYPAD ",
"BREAK ",
"ALTGR ",
"SHIFTLOCK",
"CURSOR ",
"RETURN "
};
struct kbd_ovlkey keyboardmap[KBDMAXKEYS];
struct kbd_ovlkey *kbmapp;
int keytype;
int altgr_defined;
int i;
altgr_defined = 0;
kbmapp = keyboardmap;
for (i = 0; i < KBDMAXKEYS; i++)
{
kbmapp->keynum = i;
if(ioctl(kbfd, KBDGCKEY, kbmapp) < 0)
{
perror("kcon: ioctl KBDGCKEY failed");
exit(1);
}
if((kbmapp->type & KBD_MASK) == KBD_ALTGR)
altgr_defined = i;
kbmapp++;
}
if(altgr_defined)
{
printf("S Key KeyType Normal Shift Control Altgr \n");
printf("- --- --------- --------------- --------------- --------------- ---------------\n");
}
else
{
printf("S Key KeyType Normal Shift Control \n");
printf("- --- --------- --------------- --------------- ---------------\n");
}
kbmapp = &keyboardmap[1];
for(i = 1; i < KBDMAXKEYS; i++)
{
keytype = kbmapp->type;
if(keytype)
{
if(keytype & KBD_OVERLOAD)
printf("! %3.3d %9.9s ", i, keytypetab[keytype & KBD_MASK]);
else
printf("- %3.3d %9.9s ", i, keytypetab[keytype & KBD_MASK]);
switch(keytype & KBD_MASK)
{
case KBD_NUM:
case KBD_ASCII:
case KBD_FUNC:
case KBD_KP:
case KBD_CURSOR:
case KBD_RETURN: /* ??? */
if(kbmapp->subu == KBD_SUBT_STR)
printf("%-15s ",showcntrl(kbmapp->unshift));
else
printf("Function() ");
if(kbmapp->subs == KBD_SUBT_STR)
printf("%-15s ",showcntrl(kbmapp->shift));
else
printf("Function() ");
if(kbmapp->subc == KBD_SUBT_STR)
printf("%-15s ",showcntrl(kbmapp->ctrl));
else
printf("Function() ");
if(altgr_defined)
{
if(kbmapp->suba == KBD_SUBT_STR)
printf("%-15s ",showcntrl(kbmapp->altgr));
else
printf("Function() ");
}
break;
}
putchar('\n');
}
kbmapp++;
}
}
/*---------------------------------------------------------------------------*
* show delay and rate values for keyboard
*---------------------------------------------------------------------------*/
showtypeamatic(kbfd)
int kbfd;
{
static char *delaytab[] = {
"250",
"500",
"750",
"1000"
};
static char *ratetab[] = {
"30.0",
"26.7",
"24.0",
"21.8",
"20.0",
"18.5",
"17.1",
"16.0",
"15.0",
"13.3",
"12.0",
"10.9",
"10.0",
"9.2",
"8.6",
"8.0",
"7.5",
"6.7",
"6.0",
"5.5",
"5.0",
"4.6",
"4.3",
"4.0",
"3.7",
"3.3",
"3.0",
"2.7",
"2.5",
"2.3",
"2.1",
"2.0"
};
int cur_typemat_val;
int delay, rate;
if((ioctl(kbfd, KBDGTPMAT, &cur_typemat_val)) < 0)
{
perror("kcon: ioctl KBDGTPMAT failed");
exit(1);
}
delay = ((cur_typemat_val & 0x60) >> 5);
rate = cur_typemat_val & 0x1f;
printf("\nDisplaying the current keyboard typematic values:\n\n");
printf("The delay-until-repeat time is [ %s ] milliseconds\n",delaytab[delay]);
printf("The repeat-rate is [ %s ] characters per second\n\n",ratetab[rate]);
}
/*---------------------------------------------------------------------------*
* set repeat feature on/off
*---------------------------------------------------------------------------*/
setrepeat(kbfd, tf)
int kbfd;
int tf;
{
int srepsw_val;
if(tf == 1)
srepsw_val = KBD_REPEATON;
else
srepsw_val = KBD_REPEATOFF;
if(ioctl(kbfd, KBDSREPSW, &srepsw_val) < 0)
{
perror("kcon: ioctl KBDREPSW failed");
exit(1);
}
}
/*---------------------------------------------------------------------------*
* set delay and rate values for keyboard
*---------------------------------------------------------------------------*/
settypeam(kbfd, delay, rate)
int kbfd;
int delay;
int rate;
{
int cur_typemat_val;
int new_typemat_val;
if((ioctl(kbfd, KBDGTPMAT, &cur_typemat_val)) < 0)
{
perror("kcon: ioctl KBDGTPMAT failed");
exit(1);
}
if(delay == -1)
delay = (cur_typemat_val & 0x60);
else
delay = ((delay << 5) & 0x60);
if(rate == -1)
rate = (cur_typemat_val & 0x1f);
else
rate &= 0x1f;
new_typemat_val = delay | rate;
if((ioctl(kbfd, KBDSTPMAT, &new_typemat_val)) < 0)
{
perror("kcon: ioctl KBDSTPMAT failed");
exit(1);
}
}
/*---------------------------------------------------------------------------*
* remap keyboard from keycap entry
*---------------------------------------------------------------------------*/
remapkeys(kbfd, map)
int kbfd;
char *map;
{
char cap_entry[1024];
int ret;
char keyflag[128];
int i;
/* try to find the entry */
ret = kgetent(cap_entry, map);
if(ret == -1)
{
fprintf(stderr, "kcon: keycap database not found or not accessible!\n");
exit(1);
}
else if(ret == 0)
{
fprintf(stderr, "kcon: keycap entry [%s] not found in database!\n", map);
exit(1);
}
/* set default mapping */
if((ioctl(kbfd, KBDDEFAULT)) < 0)
{
perror("kcon: ioctl KBDDEFAULT failed");
exit(1);
}
/* DE flag present? */
if(kgetflag("de"))
return;
for(i = 0; i < KBDMAXKEYS; i++)
keyflag[i] = 0;
set_lock(keyflag, kbfd);
set_shift(keyflag, kbfd);
set_char(keyflag, kbfd);
}
/*---------------------------------------------------------------------------*
* care for lock keys
*---------------------------------------------------------------------------*/
set_lock(keyflag, kbfd)
char keyflag[];
int kbfd;
{
int i, j;
char cap[16];
struct kbd_ovlkey entry;
struct {
char *ch;
u_short typ;
} lock[] =
{
"ca", KBD_CAPS,
"sh", KBD_SHFTLOCK,
"nl", KBD_NUMLOCK,
"sc", KBD_SCROLL
};
for(i = 0; i < 4; i++)
{
int n;
sprintf(cap, "%s", lock[i].ch);
n = kgetnum(cap);
if(n > 0)
{
if (keyflag[n])
{
fprintf(stderr,"kcon: duplicate key definition for key [%d]!\n",n);
exit(1);
}
keyflag[n] = 1;
entry.keynum = n;
entry.type = lock[i].typ;
if((ioctl(kbfd, KBDSCKEY, &entry)) < 0)
{
perror("kcon: ioctl KBDSCKEY failed");
exit(1);
}
}
}
}
/*---------------------------------------------------------------------------*
* care for shifting keys
*---------------------------------------------------------------------------*/
set_shift(keyflag, kbfd)
char keyflag[];
int kbfd;
{
int i, j;
char cap[16];
struct kbd_ovlkey entry;
struct {
char ch;
u_short typ;
} shift[] =
{
'm', KBD_META,
'l', KBD_ALTGR,
'h', KBD_SHIFT,
't', KBD_CTL
};
for(i = 0; i < 4; i++)
{
for(j = 1; j < 10; j++)
{
int n;
sprintf(cap, "%c%d", shift[i].ch,j);
n = kgetnum(cap);
if (n >= 0)
{
if (keyflag[n])
{
fprintf(stderr,"kcon: duplicate key definition for key [%d]!\n",n);
exit(1);
}
keyflag[n] = 1;
entry.keynum = n;
entry.type = shift[i].typ;
if((ioctl(kbfd, KBDSCKEY, &entry)) < 0)
{
perror("kcon: ioctl KBDSCKEY failed");
exit(1);
}
}
}
}
}
/*---------------------------------------------------------------------------*
* care for normal keys
*---------------------------------------------------------------------------*/
set_char(keyflag, kbfd)
char keyflag[];
int kbfd;
{
int i, j;
char cap[16];
int setflag;
char *addr_str;
char *new_str;
struct kbd_ovlkey entry;
struct {
char *addr;
char ch;
} standard[] = {
0, 'D',
&entry.unshift[0], 'K',
&entry.shift[0], 'S',
&entry.ctrl[0], 'C',
&entry.altgr[0], 'A'
};
for(i = 1; i < KBDMAXKEYS; i++)
{
setflag = 0;
entry.keynum = i;
if((ioctl(kbfd, KBDGOKEY, &entry)) < 0)
{
perror("kcon: ioctl KBDGOKEY failed");
exit(1);
}
entry.type = KBD_ASCII;
for(j = 0; j < 5; j++)
{
sprintf(cap, "%c%d", standard[j].ch,i);
if((j == 0) && (kgetflag(cap)))
{
/* delete a key */
entry.type = KBD_NONE;
setflag = 1;
goto setit;
}
else
{
addr_str = standard[j].addr;
if(new_str = kgetstr(cap, &addr_str))
{
if(strlen(new_str) > KBDMAXOVLKEYSIZE)
{
fprintf(stderr, "kcon: database entry string [%s] longer than max [%d]!\n",new_str,KBDMAXOVLKEYSIZE);
exit(1);
}
setflag = 1;
}
}
}
setit: if (setflag)
{
if (keyflag[i])
{
fprintf(stderr,"kcon: duplicate key definition for key [%d]!\n",i);
exit(1);
}
keyflag[i] = 1;
if((ioctl(kbfd, KBDSCKEY, &entry)) < 0)
{
perror("kcon: ioctl KBDSCKEY failed");
exit(1);
}
}
}
}
/*------------------- EOF ------------------------------------------------*/

View File

@ -1,32 +0,0 @@
.if !exists(${.CURDIR}/../Makefile.inc)
error:
@echo
@echo " You MUST link/copy"
@echo
@echo " ../Makefile.inc.NetBSD or ../Makefile.inc.FreeBSD"
@echo
@echo " to ../Makefile.inc before you can proceed !"
@echo
.else
LIB = keycap
CAPDIR = /usr/share/misc
CAPPATH = $(CAPDIR)/keycap.pcvt
KEYCAPSRC= keycap.src
CFLAGS += -DKEYCAP_PATH=\"$(CAPPATH)\"
SRCS = keycap.c
MAN3 = keycap.${MAN3EXT}
MLINKS+= keycap.${MAN3EXT} kgetent.${MAN3EXT} \
keycap.${MAN3EXT} kgetnum.${MAN3EXT} \
keycap.${MAN3EXT} kgetflag.${MAN3EXT} \
keycap.${MAN3EXT} kgetstr.${MAN3EXT}
MAN5 = man5/keycap.${MAN5EXT}
#CLEANFILES+= keycap.0 man5/keycap.0
beforeinstall:
${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m ${NOBINMODE} \
${.CURDIR}/${KEYCAPSRC} ${DESTDIR}${CAPPATH}
.include <bsd.lib.mk>
.endif

View File

@ -1,124 +0,0 @@
.\"
.\" Copyright (c) 1992,1993,1994 Hellmuth Michaelis
.\"
.\" Copyright (c) 1990 The Regents of the University of California.
.\"
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by the University of
.\" California, Berkeley and its contributors.
.\" 4. Neither the name of the University nor the names of its contributors
.\" may be used to endorse or promote products derived from this software
.\" without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" @(#)keycap.3, 3.00, Last Edit-Date: [Sun Jan 2 13:46:43 1994]
.\"
.Dd January 3, 1993
.Dt KEYCAP 3
.Sh NAME
.Nm kgetent ,
.Nm kgetnum ,
.Nm kgetflag ,
.Nm kgetstr
.Nd routines for accessing the keycap database
.Sh SYNOPSIS
.Ft int
.Fn kgetent "char *bp" "char *name"
.Ft int
.Fn kgetnum "char *id"
.Ft int
.Fn kgetflag "char *id"
.Ft char *
.Fn kgetstr "char *id" "char *area"
.Sh DESCRIPTION
These functions extract and use capabilities from a keyboard capability data
base, usually
.Pa /usr/share/misc/keycap.pcvt ,
the format of which is described in
.Xr keycap 5 .
.Pp
The
.Fn kgetent
function
extracts the entry for keyboard mapping
.Fa name
into the buffer at
.Fa bp .
The
.Fa bp
argument
should be a character buffer of size
1024 and must be retained through all subsequent calls to
.Fn kgetnum ,
.Fn kgetflag ,
and
.Fn kgetstr .
The
.Fn kgetent
function
returns \-1 if none of the
.Nm keycap
data base files could be opened,
0 if the map name given does not have an entry,
and 1 if all goes well.
.Pp
The
.Fn kgetnum
function
gets the numeric value of capability
.Fa id ,
returning \-1 if is not given for the map.
.Pp
The
.Fn kgetflag
function
returns 1 if the specified capability is present in
the map's entry, 0 if it is not.
.Pp
The
.Fn kgetstr
function
returns the string value of the capability
.Fa id ,
places it in the buffer at
.Fa area ,
and advances the
.Fa area
pointer.
The
.Fn kgetstr
function
returns
.Dv NULL
if the capability was not found.
.Pp
.Sh FILES
.Bl -tag -width /usr/share/misc/keycap.pcvt -compact
.It Pa /usr/share/misc/keycap.pcvt
Keyboard capabilities database (if nothing else chosen during installation).
.El
.Sh SEE ALSO
.Xr kcon 1 ,
.Xr keycap 5

View File

@ -1,377 +0,0 @@
/*-
* Copyright (c) 1992, 1993 The Regents of the University of California.
* All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Holger Veit
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*/
static char *id =
"@(#)keycap.c, 3.20, Last Edit-Date: [Tue Dec 20 14:51:50 1994]";
/*---------------------------------------------------------------------------*
*
* keycap.c Keyboard capabilities database handling
* -------------------------------------------------------
*
* converted from printcap by Holger Veit (veit@du9ds3.uni-duisburg.de)
*
* BUG: Should use a "last" pointer in tbuf, so that searching
* for capabilities alphabetically would not be a n**2/2
* process when large numbers of capabilities are given.
*
* Note: If we add a last pointer now we will screw up the
* tc capability. We really should compile termcap.
*
* modified by Hellmuth Michaelis (hm@hcshh.hcs.de) to fit into the
* vt220 driver pcvt 2.0 distribution
*
* -hm header conversion & cosmetic changes for pcvt 2.0 distribution
* -hm debugging remapping
* -hm cleaning up from termcap ....
* -hm split off header file keycap.h
*
*---------------------------------------------------------------------------*/
#include <stdio.h>
#include <ctype.h>
#include "keycap.h"
#define KEYCAP_BUFSIZ 1024
#define MAXHOP 32 /* max number of tc= indirections */
char *getenv();
static FILE *pfp = NULL; /* keycap data base file pointer */
static char *tbuf;
static int hopcount; /* detect infinite loops in keycap, init 0 */
static int knchktc();
static int knamatch();
static char *kdecode();
/*---------------------------------------------------------------------------*
* match a name
*---------------------------------------------------------------------------*/
static char *nmatch(id,cstr)
char *id,*cstr;
{
register n = strlen(id);
register char *c = cstr+n;
if (strncmp(id,cstr,n)==0 &&
(*c==':' || *c=='|' || *c=='=' || *c=='#') || *c=='@')
return c;
return 0;
}
/*---------------------------------------------------------------------------*
* Get an entry for keyboard name in buffer bp from the keycap file.
* Parse is very rudimentary, we just notice escaped newlines.
*---------------------------------------------------------------------------*/
kgetent(bp, name)
char *bp, *name;
{
register char *cp;
register int c;
register int i = 0, cnt = 0;
char ibuf[KEYCAP_BUFSIZ];
char *cp2;
int tf;
tbuf = bp;
tf = 0;
tf = open(KEYCAP_PATH, 0);
if (tf < 0)
return (-1);
for (;;) {
cp = bp;
for (;;) {
if (i == cnt) {
cnt = read(tf, ibuf, KEYCAP_BUFSIZ);
if (cnt <= 0) {
close(tf);
return (0);
}
i = 0;
}
c = ibuf[i++];
if (c == '\n') {
if (cp > bp && cp[-1] == '\\'){
cp--;
continue;
}
break;
}
if (cp >= bp+KEYCAP_BUFSIZ) {
write(2,"Keycap entry too long\n", 23);
break;
} else
*cp++ = c;
}
*cp = 0;
/*
* The real work for the match.
*/
if (knamatch(name)) {
close(tf);
return(knchktc());
}
}
}
/*---------------------------------------------------------------------------*
* knchktc: check the last entry, see if it's tc=xxx. If so, recursively
* find xxx and append that entry (minus the names) to take the place of
* the tc=xxx entry. Note that this works because of the left to right scan.
*---------------------------------------------------------------------------*/
static int knchktc()
{
register char *p, *q;
char tcname[16]; /* name of similar keyboard */
char tcbuf[KEYCAP_BUFSIZ];
char *holdtbuf = tbuf;
int l;
p = tbuf + strlen(tbuf) - 2; /* before the last colon */
while (*--p != ':')
if (p<tbuf) {
write(2, "Bad keycap entry\n", 18);
return (0);
}
p++;
/* p now points to beginning of last field */
if (p[0] != 't' || p[1] != 'c')
return(1);
strcpy(tcname,p+3);
q = tcname;
while (q && *q != ':')
q++;
*q = 0;
if (++hopcount > MAXHOP) {
write(2, "Infinite tc= loop\n", 18);
return (0);
}
if (kgetent(tcbuf, tcname) != 1)
return(0);
for (q=tcbuf; *q != ':'; q++)
;
l = p - holdtbuf + strlen(q);
if (l > KEYCAP_BUFSIZ) {
write(2, "Keycap entry too long\n", 23);
q[KEYCAP_BUFSIZ - (p-tbuf)] = 0;
}
strcpy(p, q+1);
tbuf = holdtbuf;
return(1);
}
/*---------------------------------------------------------------------------*
* knamatch deals with name matching. The first field of the keycap entry
* is a sequence of names separated by |'s, so we compare against each such
* name. The normal : terminator after the last name (before the first field)
* stops us.
*---------------------------------------------------------------------------*/
static int knamatch(np)
char *np;
{
register char *Np, *Bp;
Bp = tbuf;
if (*Bp == '#' || *Bp == 0)
return(0);
for (;;) {
for (Np = np; *Np && *Bp == *Np; Bp++, Np++)
continue;
if (*Np == 0 && (*Bp == '|' || *Bp == ':' || *Bp == 0))
return (1);
while (*Bp && *Bp != ':' && *Bp != '|')
Bp++;
if (*Bp == 0 || *Bp == ':')
return (0);
Bp++;
}
}
/*---------------------------------------------------------------------------*
* Skip to the next field. Notice that this is very dumb, not knowing about
* \: escapes or any such. If necessary, :'s can be put into the keycap file
* in octal.
*---------------------------------------------------------------------------*/
static char *kskip(bp)
char *bp;
{
while (*bp && *bp != ':')
bp++;
if (*bp == ':')
bp++;
return (bp);
}
/*---------------------------------------------------------------------------*
* Return the (numeric) option id. Numeric options look like 'li#80' i.e.
* the option string is separated from the numeric value by a # character.
* If the option is not found we return -1. Note that we handle octal
* numbers beginning with 0.
*---------------------------------------------------------------------------*/
int kgetnum(id)
char *id;
{
register int i, base;
register char *bp = tbuf,*xp;
for (;;) {
bp = kskip(bp);
if (*bp == 0)
return (-1);
if ((xp=nmatch(id,bp)) == 0)
continue;
bp = xp; /* we have an entry */
if (*bp == '@')
return(-1);
if (*bp != '#')
continue;
bp++;
base = 10;
if (*bp == '0')
base = 8;
i = 0;
while (isdigit(*bp))
i *= base, i += *bp++ - '0';
return (i);
}
}
/*---------------------------------------------------------------------------*
* Handle a flag option. Flag options are given "naked", i.e. followed by
* a : or the end of the buffer. Return 1 if we find the option, or 0 if
* it is not given.
*---------------------------------------------------------------------------*/
int kgetflag(id)
char *id;
{
register char *bp = tbuf,*xp;
for (;;) {
bp = kskip(bp);
if (!*bp)
return (0);
if ((xp=nmatch(id,bp)) != 0) {
bp = xp;
if (!*bp || *bp == ':')
return (1);
else if (*bp == '@')
return(0);
}
}
}
/*---------------------------------------------------------------------------*
* Get a string valued option. These are given as 'cl=^Z'. Much decoding
* is done on the strings, and the strings are placed in area, which is a
* ref parameter which is updated. No checking on area overflow.
*---------------------------------------------------------------------------*/
char *kgetstr(id, area)
char *id;
char **area;
{
register char *bp = tbuf,*xp;
for (;;) {
bp = kskip(bp);
if (!*bp)
return (0);
if ((xp = nmatch(id,bp)) == 0)
continue;
bp = xp;
if (*bp == '@')
return(0);
if (*bp != '=')
continue;
bp++;
return (kdecode(bp, area));
}
}
/*---------------------------------------------------------------------------*
* kdecode does the grung work to decode the string capability escapes.
*---------------------------------------------------------------------------*/
static char *kdecode(str, area)
char *str;
char **area;
{
register char *cp;
register int c;
register char *dp;
int i;
cp = *area;
while ((c = *str++) && c != ':') {
switch (c) {
case '^':
c = *str++ & 037;
break;
case '\\':
dp = "E\033^^\\\\::n\nr\rt\tb\bf\f";
c = *str++;
nextc:
if (*dp++ == c) {
c = *dp++;
break;
}
dp++;
if (*dp)
goto nextc;
if (isdigit(c)) {
c -= '0', i = 2;
do
c <<= 3, c |= *str++ - '0';
while (--i && isdigit(*str));
}
break;
}
*cp++ = c;
}
*cp++ = 0;
str = *area;
*area = cp;
return (str);
}
/*-------------------------------- EOF --------------------------------------*/

View File

@ -1,49 +0,0 @@
/*-
* Copyright (c) 1992, 1993 The Regents of the University of California.
* All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Holger Veit
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)keycap.h, 3.20, Last Edit-Date: [Tue Dec 20 14:52:11 1994]
*/
#ifndef _KEYCAP_H_
#define _KEYCAP_H_
int kgetent( char*, char* );
int kgetnum( char* );
int kgetflag( char* );
char *kgetstr( char*, char** );
#endif /* _KEYCAP_H_ */
/*-------------------------------- EOF -------------------------------------*/

View File

@ -1,630 +0,0 @@
# Copyright (c) 1992, 1993, 1994 Hellmuth Michaelis, Joerg Wunsch and
# Holger Veit.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. All advertising materials mentioning features or use of this software
# must display the following acknowledgement:
# This product includes software developed by Hellmuth Michaelis,
# Joerg Wunsch and Holger Veit.
# 4. The names of the Authors may not be used to endorse or promote
# products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# @(#)keycap.src, 3.20, Last Edit-Date: [Wed Mar 8 20:53:01 1995]
#
#---------------------------------------------------------------------------
#
# keyboard mappings for vt220 emulator pcvt 3.00
# ----------------------------------------------
#
# DEC MCS and/or ISO-Latin-1 Characterset used
#
# MF II Keyboards fully supported
# AT Keyboards lack a ALTGR Key, so they cannot be handled by
# the current driver implementation .... sorry
#
# If you design a new entry for national keyboards, please
# send it to hm@hcshh.hcs.de, thank you !
#
# Many entries are taken from the 386BSD patchkit 0.2.4 codrv
#
#---------------------------------------------------------------------------
#
# -hm patch from Thomas Gellekum
# -hm renamed finnish "f8" entry to "f1"
#
#---------------------------------------------------------------------------
df|default|default entry:\
:de:
tt|test|Test entry which swaps y and z:\
:K22=z:S22=Z:C22=\032:\
:K46=y:S46=Y:C46=\031:
# from codrv, untested
be|belgium|Belgian mapping:\
:K1=\262:S1=\263:\
:K2=&:S2=1:A2=|:\
:K3=\351:S3=2:A3=@:\
:K4=":S4=3:A4=#:\
:K5=':S5=4:\
:K6=(:S6=5:\
:K7=\247:S7=6:A7=\136:\
:K8=\350:S8=7:\
:K9=!:S9=8:\
:K10=\347:S10=9:A10={:\
:K11=\340:S11=0:A11=}:\
:K12=):S12=\260:\
:K13=-:S13=_:\
:K17=a:S17=A:C17=^A:\
:K18=z:S18=Z:C18=^z:\
:K27=\136:S27=\250:A27=[:p1#27:\
:K28=$:S28=*:A28=]:\
:K31=q:S31=Q:C31=^q:\
:K40=m:S40=M:C40=^m:\
:K41=\371:S41=%:A41=':p2#41:\
:K42=\265:S42=\243:A42=\264:p3#42:\
:K45=<:S45=>:A45=\\:\
:K46=w:S46=W:C46=^w:\
:K52=,:S52=\077:\
:K53=;:S53=.:\
:K54=\072:S54=/:\
:K55==:S55=+:A55=~:\
:l1#62:a0:
# from codrv, untested
ca|canadafr|Canadian French mapping:\
:K1=#:S1=|:A1=\\:\
:A2=\261:S3=":A3=@:S4=/:A4=\243:A5=\242:\
:A6=\244:S7=\077:A7=\254:S8=&:A8=\246:S9=*:A9=\262:\
:S10=(:A10=\263:S11=):A11=\274:\
:K12=-:S12=_:A12=\275:\
:K13==:S13=+:A13=\276:\
:A25=\247:A26=\266:\
:K27=\136:S27=\136:A27=[:\
:K28=\270:S28=\250:A28=]:p1#28:\
:A40=~:K41=`:S41=`:A41={:\
:K42=<:S42=>:A42=}:\
:K45=\253:S45=\273:A45=\260:\
:A49=\253:A50=\273:A51=\260:\
:A52=\265:K53=,:S53=,:A53=-:\
:K54=\351:S54=\311:A54=':\
:l1#62:a0:
# from codrv, untested
c1|swissde|Swiss German mapping:\
:K1=\247:S1=\260:p1#1:\
:S2=+:A2=|:S3=":A3=@:S4=*:A4=#:S5=\347:S7=&:A7=\254:\
:S8=/:A8=\246:S9=(:A9=\242:S10=):S11==:\
:K12=`:S12=\077:A12=':p2#12:\
:K13=^:S13=\\:A13=~:p3#13:\
:K22=z:S22=Z:C22=\032:\
:S27=\350:K27=\374:A27=[:\
:K28=\250:S28=!:A28=]:\
:S40=\351:K40=\366:\
:S41=\340:K41=\344:A41={:\
:K42=$:S42=\243:A42=}:\
:K45=<:S45=>:A45=\\:\
:K46=y:S46=Y:C46=\031:
:S53=;:S54=\072:K55=-:S55=_:\
:l1#62:a0:
# from codrv, untested
c2|swissfr|Swiss French mapping:\
:K27=\350:S27=\374:A27=[:\
:K40=\351:S40=\366:\
:K41=\340:S41=\344:A41={:\
:tc=swissde:
# more programmer-like than an original German kbd, you needn't
# have gum-fingers to get `{}' and the like:-)
# maps: ae -> [, oe -> \, ue -> ], Ae -> {, Oe -> |, Ue -> }
# umlaute are available as AltGr- and Control-Mappings
# also maps Pause -> ^Z
#
# (from Joerg Wunsch)
#
# l1/m1 bindings: left Alt is AltGr
# Emacs functions:
# C79/C89: ctrl-{leftarrow,rightarrow} {backward,forward} word
# A79/A89: {backward,forward} sexp
# C83/C84: ctrl-{uparrow,downarrow} {backward,forward} window
#
de-prog|germany-prog|programmer's mapping for german keyboard:\
:K27=]:S27=}:A27=\374:C27=\334:\
:K40=\\:S40=|:A40=\366:C40=\326:\
:K41=[:S41={:A41=\344:C41=\304:\
:K126=\032:C126=\003:\
:tc=de:
# :l1#60:l2#62:\
# :C79=^[B:K79=^[[D:S79=^[OD:A79=^[^B:\
# :C89=^[F:K89=^[[C:S89=^[OC:A89=^[^F:\
# :C83=^U-1^XO:K83=^[[A:S84=^[OA:\
# :C84=^XO:K84=^[[B:S84=^[OB:\
de|germany|German mapping for MF II-Keyboard:\
:K1=\136:S1=\260:\
:S3=\042:S4=\247:S7=&:S8=/:S9=(:S10=):S11=\075:\
:A3=\262:A4=\263:A8={:A9=[:A10=]:A11=}:A12=\134:\
:K12=\337:S12=?:C12=\034:\
:K13=':S13=`:\
:A17=\100:\
:K22=z:S22=Z:C22=\032:\
:K27=\374:S27=\334:\
:K28=+:S28=*:A28=\176:\
:K29=\043:S29=':A29=\174:\
:K40=\366:S40=\326:\
:K41=\344:S41=\304:\
:A45=\174:\
:K46=y:S46=Y:C46=\031:\
:A52=\265:\
:S53=;:S54=\072:\
:K55=-:S55=_:\
:l1#62:
de-at|germany-at|German mapping for AT-Keyboard:\
:K1=<:S1=>:\
:S3=\042:\
:S4=\247:\
:S7=&:\
:S8=/:\
:S9=(:\
:S10=):\
:S11=\075:\
:K12=\337:S12=?:C12=\034:\
:K13=':S13=`:\
:K14=#:S14=\136:\
:K22=z:S22=Z:C22=\032:\
:K27=\374:S27=\334:\
:K28=+:S28=*:\
:K29=\043:S29=':\
:K40=\366:S40=\326:\
:K41=\344:S41=\304:\
:K46=y:S46=Y:C46=\031:\
:S53=;:S54=\072:\
:K55=-:S55=_:\
# from codrv, untested
# Includes improvements by Thomas Hiller (hiller@fzi.de)
# and Andreas Israel (ai@hrz.tu-chemnitz.de)
de-hi|germany-hiller|yet another German mapping:\
:K1=\136:S1=\260:C1=|:\
:S3=\042:S4=#:S7=&:S8=/:S9=(:S10=):S11=\075:\
:A8={:A9=[:A10=]:A11=}:A17=@:A28=~:\
:K12=\337:S12=\077:C12=\036:A12=\\:\
:K13=':S13=`:C13=\134:p1#13:\
:K22=z:S22=Z:C22=\032:\
:K27=\374:S27=\334:C27=\035:\
:K28=+:S28=*:C28=\000:\
:K29=<:S29=>:C29=\134:\
:K40=\366:S40=\326:C40=\034:\
:K41=\344:S41=\304:C41=\033:\
:K46=y:S46=Y:C46=\031:\
:S53=;:S54=\072:\
:K55=-:S55=_:\
:l1#62:a0:
# from codrv, untested
# Contribution by Thomas Hiller (hiller@fzi.de)
# "K42 may not work on 102 keys kbds, K29 seems to work"
d1|de-102|german with mf2:\
:K29=#:\
:K42=#:\
:K45=<:S45=>:A45=|:\
:tc=germany:
# from codrv, untested
hv|holgi|Holgi's special MF1 keyboard mapping:\
:K1=<:S1=>:C1=|:\
:K29=#:S29=\136:A29=\\:C29=~:\
:tc=germany:
# from codrv, untested
# Contributed by Andreas Israel (ai@hrz.tu-chemnitz.de)
de-ai|nixmf2|ct22|nix|nix7|German Nixdorf MF2:\
:A28=~:\
:K29=#:S29=':\
:K45=<:S45=>:A45=|:\
:tc=germany:
# from codrv, untested
dk|denmark|Danish mapping:\
:K1=\275:S1=\247:\
:S3=":A3=@:\
:A4=\243:\
:S5=\244:A5=$:\
:S7=&:S8=/:A8={:S9=(:A9=[:S10=):A10=]:S11==:A11=}:\
:K12=+:S12=\077:\
:K13=':S13=`:A13=|:p1#13:\
:K27=\345:S27=\305:\
:K28=\250:S28=\136:A28=~:p2#28:\
:K40=\346:S40=\306:\
:K41=\370:S41=\330:\
:K42=:S42=*:\
:K45=<:S45=>:A45=\\:\
:S53=;:S54=\072:\
:K55=-:S55=_:\
:l1#62:a0:
# from codrv, untested
# Finnish keyboard map with 7-bit versions of the national
# chars. The Latin1 chars are available with Alt-7, Alt-8, etc
# (where normally you would have the 7-bit ones).
# Makes C/C++ programming more comfortable, since the 7-bit chars
# (|\{[}]) are needed much more often than the Latin1 chars.
# -- Petri.Wessman@hut.fi
fi|finland|finland7b|finland-ascii|Finnish ASCII mapping:\
:l1#60:l2#62:\
:A8=\344:A9=\304:A10=\305:A11=\345:A12=\326:A13=\366:\
:K40=|:S40=\\:K41={:S41=[:K27=}:S27=]:\
:S1=\275:K1=\247:\
:S3=":A3=@:\
:A4=\243:\
:S5=$:A5=$:\
:S7=&:S8=/:S9=(:S10=):S11==:\
:K12=+:S12=\077:\
:K13=':S13=`:\
:K28=~:S28=\136:A28=~:\
:K29=':S29=*:\
:K45=<:S45=>:A45=|:\
:S53=;:S54=\072:\
:K55=-:S55=_:\
:a0:
# from codrv, untested
# Finnish keyboard map with the Latin1 national chars in
# their "right" place. --Petri.Wessman@hut.fi
f1|finland8b|finland-latin1|Finnish Latin1 mapping:\
:A8={:A9=[:A10=]:A11=}:A12=\\:\
:K40=\366:S40=\326:K41=\344:S41=\304:K27=\345:S27=\305:\
:tc=finland:
# French keyboard mapping
# From Matthieu Herrb <matthieu@laas.fr>
# For 102 keys keyboards, produces 8 bits characters
# with ISO Latin-1 encoding
f8|france-iso-8859-1|French ISO 8859-1 102 keys keyboard:\
:l1#62:\
:K1=\262:S1=:\
:K2=&:S2=1:\
:K3=\351:S3=2:C3=\211:A3=~:\
:K4=":S4=3:A4=#:\
:K5=':S5=4:A5={:\
:K6=(:S6=5:A6=[:\
:K7=-:S7=6:C7=\036:A7=|:\
:K8=\350:S8=7:C8=\210:A8=`:\
:K9=_:S9=8:C9=\037:A9=\\:\
:K10=\347:S10=9:C10=\207:A10=\136:\
:K11=\340:S11=0:C11=\340:A11=@:\
:K12=):S12=\260:A12=]:\
:A13=}:\
:K17=a:S17=A:C17=\001:\
:K18=z:S18=Z:C18=\032:\
:D27:\
:K28=$:S28=\243:\
:K29=*:S29=\265:\
:K31=q:S31=Q:C31=\021:\
:K40=m:S40=M:C40=\015;\
:K41=\371:C41=\231:S41=%:\
:K42=*:S42=\265:\
:K46=w:S46=W:C46=\027:\
:K52=,:S52=?:\
:K53=;:S53=.:\
:K54=\072:S54=/:C54=\037\
:K55=!:S55=\266:
# fr|france|French mapping:\
# :de:
#
# from codrv, untested
# f1|france120|French 120 mapping:\
# :tc=belgium:
#
#
# from codrv, untested
#f2|france189|French 189 mapping:\
# :S1=:A1=':p3#1:\
# :A2=:A3=~:A5={:A6=[:A7=|:A8=`:\
# :S9=_:A9=\\:A10=\136:A11=@:A12=]:A13=}:\
# :A27=:A28=\244:A41=:A42=:\
# :A45=:!:S45=\247:\
# :tc=belgium:
# From: Andy Duplain, duplain@rtf.bt.co.uk
gb|greatbritain|British mapping for MF-2 keyboard:\
:S1=|:S3=":C3=2:C12=-:S41=@:K42=#:S42=~:C42=#:K45=\\:S45=|:C45=\\:
# from codrv, untested
# This entry has been corrected by Mike Trim (mtrim@crucible.demon.co.uk)
# (hv's comment: For the keys # and ~ you might also check the following
# line
# :K42=#:S42=~:\
# Also I think I was wrong with the ALTGR key. If you need one, add this:
# :l1#62:
g1|greatbritain166|British 166 mapping:\
:K1=`:S1=\254:A1=|:\
:S3=":S4=\243:\
:K41=':S41=@:\
:K29=#:S29=~:\
:K45=\\:S45=|:
# from codrv, untested
g2|greatbritain168|British 168 mapping:\
:K1=\\:S1=|:\
:S3=":S4=\243:S7=&:S8=:S9=(:S10=):A10=\261:\
:S11=#:A11=\260:S12=:K13=\254:S13=-:\
:K27=@:S27=`:\
:K28=[:S28={:A28=~:\
:K40=;:S40=+:\
:K41=\072:S41=*:A41=\136:\
:K42=]:S42=}:\
:K45=|:S45=_:\
:A52=\265:\
:l1#62:a0:
# from codrv, untested
is:iceland:Island mapping:\
:K1=\260:S1=\250:p1#1:\
:S2=":S7=&:S8=/:A8={:S9=(:A9=[:S10=):A10=]:S11==:A11=}:\
:K12=\\:S12=\326:\
:K13=':S13=`:A13=|:\
:A17=@:K27=\360:S27=\320:\
:K28=':S28=\077:A28=~:\
:K40=\346:S40=\306:\
:K41=':S41=':A41=\136:p2#41:\
:K42=+:S42=*:A42=`:p3#42:\
:K45=<:S45=>:A45=|:\
:S53=;:S54=\072:\
:K54=\376:S54=\336:\
:K104=,:104=,:\
:l1#62:a0:
# from codrv, untested
i1|italy141|Italian 141 mapping:\
:K1=\\:S1=|:\
:S3=":S4=\243:S7=&:S8=/:S9=(:S10=):S11==:\
:K12=':S12=\077:\
:K13=\354:S13=\136:\
:K27=\350:S27=\351:\A27=[:\
:K28=+:S28=*:A28=]:\
:K40=\362:S40=\347:A40=@:\
:K41=\340:S41=\260:A41=#:\
:K42=\371:S42=\247:\
:K45=<:S45=>:\
:S53=;:S54=\072:\
:K55=-:S55=_:\
:l1#62:a0:
# from codrv, untested
i2|italy142|Italian 142 mapping:\
:A8={:A9=[:A10=]:A11=}:\
:A17=@:A27=:A28=~:A40=:A41=:\
:tc=italy141:a0:
# from codrv, untested
nl|netherlands|Dutch mapping:\
:K1=@:S1=\247:A1=\254:\
:A2=\271:S3=":A3=\262:S4=#:A4=\263:A5=\274:A6=\275:S7=&:\
:A7=\276:S8=_:A8=\243:S9=(:A9={:S10=):A10=}:S11=':\
:K12=/:S12=\077:A12=\\:\
:K13=\260:S13=~:A13=\270:p1#13:\
:K20=\266:K27=\250:S27=^:p2#27:\
:K28=*:S28=|:\
:K40=+:S40=\261:\
:K41=':S41=`:\
:K42=<:S42=>:\
:K45=[:S45=]:A45=|:\
:S53=;:S54=\072:K55=-:S55=_:\
:K104=,:S104=,:\
:l1#62:a0:
# Norwegian keyboard map with national characters.
# Anders Nordby, anders@fix.no
no|norway|Norwegian 8bit mapping ISO 8859-1:\
:K1=\174:S1=\247:\
:K2=\61:S2=\41:\
:K3=\62:S3=\42:A3=\100:\
:K4=\63:S4=\43:A4=\243:\
:K5=\64:S5=\244:A5=\44:\
:K6=\65:S6=\45:\
:K7=\66:S7=\46:\
:K8=\67:S8=\57:A8=\173:\
:K9=\70:S9=\50:A9=\133:\
:K10=\71:S10=\51:A10=\135:\
:K11=\60:S11=\75:A11=\175:\
:K12=\53:S12=\77:\
:K13=\134:S13=\140:A13=\264:\
:K28=\250:S28=\136:A28=\176:\
:K29=\47:S29=\52:\
:K54=\56:S54=\72:\
:K53=\54:S53=\73:\
:K55=\55:S55=\137:\
:K41=\346:S41=\306:\
:K40=\370:S40=\330:\
:K27=\345:S27=\305:\
:l1#62:a0:
# from codrv, untested
pt|portugal|Portugesian mapping:\
:K1=\\:S1=|:\
:S3=":A3=@:A4=\243:A5=\247:S7=&:S8=/:A8={:S9=(:A9=[:\
:S10=):A10=]:S11=}:A11==:\
:K12=':S12=\077:\
:K13=\253:S13=\273:\
:K40=\347:S40=\307:\
:K41=\272:S41=\252:\
:K42=~:S42=^:p1#42:\
:K45=<:S45=>:\
:S53=;:S54=\072:K55=-:S55=_:\
:l1#62:a0:
# from codrv, untested
es|spain|Spainish mapping:\
:K1=\272:S1=\252:A1=\\:\
:A2=|:S3=":A3=@:S4=:A4=#:S7=&:A7=\254:S8=/:S9=(:S10=):S11==:\
:K12=':S12=\077:p1#12:\
:K13=\277:S13=\241:\
:K27=`:S27=^:A27=[:p2#27:\
:K28=+:S28=*:A28=]:\
:K40=\361:S41=\321:\
:K41=/:S41=\250:A41={:p3#41:\
:K42=\347:S42=\307:A42=}:\
:K45=<:S45=>:\
:S53=;:S54=\072:\
:K55=-:S55=_:\
:K104=,:S104=,:\
:l1#62:a0:
# from codrv, untested
# Contributed by Mats O Jansson, moj@stacken.kth.se
# "Here is my map, rather large, but i want ALTGR normaly to be dead.
# Only seven bit national characters have been placed where national characters
# is on the keyboard."
# We can help this man, just use the 'a0' capability -hv-
s1|sweden1|Swedish mapping:\
:l1#62:a0:\
:D1:\
:K12=+:K13=':K29=':\
:S2=!:S3=":S4=#:S5=$:S6=%:S7=&:S8=/:\
:S9=(:S10=):S11=\075:S12=\077:S13=`:S29=*:\
:C2=:C3=\000:C4=\033:C5=\034:C6=\035:C7=:C8=:C9=:\
:C10=:C11=:C12=:C13=:C29=:\
:A3=\100:A5=$:A8={:\
:A9=[:A10=]:A11=}:A12=\134:\
:K27=]:K28=:\
:S27=}:S28=\136:\
:C27=\035:C28=:\
:A28=\176:\
:K40=\134:K41=[:\
:S40=|:S41={:\
:C40=\034:C41=\033:\
:K45=<:K53=,:K54=.:K55=-:\
:S45=>:S53=;:S54=\072:S55=_:\
:C45=\034:C53=:C54=:C55=:\
:A45=|:\
:C61=\000:
# from codrv, untested
# Contributed by Mats O Jansson, moj@stacken.kth.se
# "Here is my map, rather large, but i want ALTGR normaly to be dead.
# Only seven bit national characters have been placed where national
# characters is on the keyboard."
# We can help this man, just use the 'a0' capability -hv-
# Corrected by Paul Pries, 5322@msg.abc.se (Some national shifts were
# wrong).
sa|sweden1a|Swedish 7bit mapping ISO 646:\
:l1#62:a0:\
:D1:\
:K12=+:K13=':K29=':\
:S2=!:S3=":S4=#:S5=$:S6=%:S7=&:S8=/:\
:S9=(:S10=):S11=\075:S12=\077:S13=`:S29=*:\
:C2=:C3=\000:C4=\033:C5=\034:C6=\035:C7=:C8=:C9=:\
:C10=:C11=:C12=:C13=:C29=:\
:A3=\100:A5=$:A8={:\
:A9=[:A10=]:A11=}:A12=\134:\
:K27=}:K28=:\
:S27=]:S28=\136:\
:C27=\035:C28=:\
:A28=\176:\
:S40=\134:S41=[:\
:K40=|:K41={:\
:C40=\034:C41=\033:\
:K45=<:K53=,:K54=.:K55=-:\
:S45=>:S53=;:S54=\072:S55=_:\
:C45=\034:C53=:C54=:C55=:\
:A45=|:\
:C61=\000:
# from codrv, untested
# Swedish keyboard map with national characters.
# Paul Pries, 5322@msg.abc.se
s2|sweden2|Swedish 8bit mapping ISO 8859-1:\
:l1#62:\
:K1=\247:S1=:\
:K12=+:K13=':K29=':\
:S2=!:S3=":S4=#:S5=$:S6=%:S7=&:S8=/:\
:S9=(:S10=):S11=\075:S12=\077:S13=`:S29=*:\
:C2=:C3=\000:C4=\033:C5=\034:C6=\035:C7=:C8=:C9=:\
:C10=:C11=:C12=:C13=:C29=:\
:A3=\100:A4=\234:A5=$:A8={:\
:A9=[:A10=]:A11=}:A12=\134:\
:K27=\206:K28=:\
:S27=\217:S28=\136:\
:C27=\035:C28=:\
:A28=\176:\
:S40=\231:S41=\216:\
:K40=\224:K41=\204:\
:C40=\034:C41=\033:\
:K45=<:K53=,:K54=.:K55=-:\
:S45=>:S53=;:S54=\072:S55=_:\
:C45=\034:C53=:C54=:C55=:\
:A45=|:\
:C61=\000:
#
# tg: my idiosyncratic mappings (thomas@ghpc8.ihf.rwth-aachen.de)
#
# the six function keys above the cursor keys are arranged
# identical to a real VT220:
#
# find insert remove
# select up down
#
# since i don't have a use for the numbers on the keypad,
# i map NumLock, /, *, - to PF1-PF4;
# + is mapped to SS3 l, shifted + is mapped to SS3 m
#
# they convinced me finally to add some support for german umlauts.
# so, i stole the mapping from jörg wunsch's de-prog entry.
#
# tg
#
tg:\
:l1#62:\
:A12=\337:\
:A27=\374:C27=\334:\
:A40=\366:C40=\326:\
:A41=\344:C41=\304:\
:K126=\032:C126=\003:\
:K75=[1~:S75=[1~:C75=[1~:\
:K76=[4~:S76=[4~:C76=[4~:\
:K80=[2~:S80=[2~:C80=[2~:\
:K81=[5~:S81=[5~:C81=[5~:\
:K85=[3~:S85=[3~:C85=[3~:\
:K86=[6~:S86=[6~:C86=[6~:\
:K90=OP:S90=OP:C90=OP:\
:K95=OQ:S95=OQ:C95=OQ:\
:K100=OR:S100=OR:C100=OR:\
:K104=On:S104=On:C104=On:\
:K105=OS:S105=OS:C105=OS:\
:K106=Ol:S106=Om:\
:K108=OM:S108=OM:C108=OM:
us|usa|United States mapping:\
:de:
# EOF

View File

@ -1,130 +0,0 @@
.\"
.\" Copyright (c) 1992,1993,1994 Hellmuth Michaelis
.\"
.\" Copyright (c) 1990 The Regents of the University of California.
.\"
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by the University of
.\" California, Berkeley and its contributors.
.\" 4. Neither the name of the University nor the names of its contributors
.\" may be used to endorse or promote products derived from this software
.\" without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" @(#)keycap.5, 3.00, Last Edit-Date: [Sun Jan 2 13:45:59 1994]
.\" $Id$
.\"
.Dd January 3, 1993
.Dt KEYCAP 5
.Sh NAME
.Nm keycap
.Nd keyboard mapping data base
.Sh SYNOPSIS
.Nm keycap
.Sh DESCRIPTION
The
.Nm keycap
file
is a data base describing keyboard mappings, used by
.Xr kcon 1 .
.Pp
Entries in
.Nm keycap
consist of a number of `:'-separated fields.
The first entry for each mapping gives the names that are known for the
mapping, separated by `|' characters.
All names but the first and last
should be in lower case and contain no blanks;
the last name may well contain
upper case and blanks for readability.
.Sh CAPABILITIES
.Pp
.Bl -column indent indent
.Sy Name Type Description
.It "de bool Resets Keyboard mapping to compiled-in default"
.It "D<n> bool Disables key <n> completely"
.It "m<n> num specify key numbers for ALT keys
.It "l<n> num specify key numbers for ALTGR keys
.It "h<n> num specify key numbers for SHIFT keys
.It "t<n> num specify key numbers for CONTROL keys
.It "ca<n> num specify key number for the CAPS LOCK key
.It "sh<n> num specify key number for the SHIFT LOCK key
.It "nl<n> num specify key number for the NUM LOCK key
.It "sc<n> num specify key number for the SCROLL LOCK key
.It "K<n> str bind a string to a unshifted (normal) key
.It "S<n> str bind a string to a shifted key
.It "C<n> str bind a string to a control key
.It "A<n> str bind a string to a altgr key
.It "tc str Entry of similar map \- must be last."
.El
Parameter <n> describing the key number can have values from 1 to 128.
A string parameter may have up to 15 characters.
.Pp
.Ss A Sample Entry
The following entry, which describes a test entry, is among the very
easy entries in the
.Nm keycap
file as of this writing.
.Pp
.Bd -literal
tt\||test\||Test entry which swaps y and z:\e
:K22=z:S22=Z:C22=\e032:\e
:K46=y:S46=Y:C46=\e031:
.Ed
.Pp
Entries may continue onto multiple lines by giving a \e as the last
character of a line. Comments may be included on lines beginning with
.Dq # .
.Sh FILES
.Bl -tag -width /usr/share/misc/keycap.pcvt -compact
.It Pa /usr/share/misc/keycap.pcvt
File containing keyboard mapping descriptions.
.El
.Sh SEE ALSO
.Xr kcon 1 ,
.Xr keycap 3
.Sh EXAMPLES
The entry
.Dq Li l1#60
sets the keynumber for the ALTGR key to 60.
The entry
.Dq Li K100=hugo
binds the string 'hugo' to the key number 100.
The entry
.Dq Li K100=^D
binds the control character EOT (0x04) to the key number 100.
The entry
.Dq Li K100=\e000
binds the control character NUL (0x00) to the key number 100.

View File

@ -1,3 +0,0 @@
PROG= loadfont
.include <bsd.prog.mk>

View File

@ -1,90 +0,0 @@
.\" Copyright (c) 1992, 1995 Hellmuth Michaelis
.\"
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by Hellmuth Michaelis
.\" 4. The name authors may not be used to endorse or promote products
.\" derived from this software without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" @(#)loadfont.1, 3.20, Last Edit-Date: [Tue Apr 4 13:06:00 1995]
.\"
.Dd April 4, 1995
.Dt LOADFONT 1
.Sh NAME
.Nm loadfont
.Nd is used to load fonts into EGA or VGA boards for use by the 'pcvt' video
driver.
.Sh SYNOPSIS
.Nm loadfont
.Op Fl c Ar charsetno
.Op Fl d Ar devicefile
.Op Fl f Ar fontfilename
.Op Fl i
.Sh DESCRIPTION
The
.Nm loadfont
utility is used to load fonts needed for proper operation of the pcvt
VT220 driver on EGA and VGA boards into the font ram of this boards.
.Pp
The options are as follows:
.Bl -tag -width Ds
.It Fl c
Specifies the slot, the font is to load into. EGA boards have four
slots and VGA boards have eight slots available for downloading fonts.
.It Fl d
Specifies the devicefile to use.
.It Fl f
Specifies the file which contains the font to be downloaded.
.It Fl i
Gives information what type(s) of font do currently reside in which slot.
This is also the default behaviour if no options are specified on the commandline.
.El
.Pp
This utility is used only on EGA and VGA boards, as MDA, HCG and CGA boards
do not have downloadable charactersets available.
.Sh FILES
The following fontfiles are available in the pcvt distribution:
.nf
/usr/share/misc/pcvtfonts/vt220l.808: 8x8 IBM II font
/usr/share/misc/pcvtfonts/vt220h.808: 8x8 Extension font
/usr/share/misc/pcvtfonts/vt220l.810: 8x10 IBM II font
/usr/share/misc/pcvtfonts/vt220h.810: 8x10 Extension font
/usr/share/misc/pcvtfonts/vt220l.814: 8x14 IBM II font
/usr/share/misc/pcvtfonts/vt220h.814: 8x14 Extension font
/usr/share/misc/pcvtfonts/vt220l.816: 8x16 IBM II font
/usr/share/misc/pcvtfonts/vt220h.816: 8x16 Extension font
.fi
.Sh EXAMPLES
The command
.Dq Li loadfont -c0 -f/usr/share/misc/pcvtfonts/vt220l.816
loads a 8x16 font containing the standard IBM characterset II into font slot
0 on a VGA or EGA board.
.Sh BUGS
No known bugs
.Sh SEE ALSO
.Xr cursor 1 ,
.Xr scon 1 ,
.Xr pcvt 4 ,
.Xr ispcvt 8

View File

@ -1,345 +0,0 @@
/*
* Copyright (c) 1992, 1995 Hellmuth Michaelis
*
* Copyright (c) 1992, 1994 Brian Dunford-Shore
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by
* Hellmuth Michaelis and Brian Dunford-Shore
* 4. The name authors may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
static char *id =
"@(#)loadfont.c, 3.20, Last Edit-Date: [Fri Apr 7 10:13:16 1995]";
/*---------------------------------------------------------------------------*
*
* load a font into vga character font memory
*
* -hm removing explicit HGC support (same as MDA ..)
* -hm new pcvt_ioctl.h SIZ_xxROWS
* -hm add -d option
*
*---------------------------------------------------------------------------*/
#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <machine/pcvt_ioctl.h>
#define FONT8X8 2048 /* filesize for 8x8 font */
#define HEIGHT8X8 8 /* 8 scan lines char cell height */
#define SSCAN8X8 143 /* 400 scan lines on screen - 256 - 1 */
#define FONT8X10 2560 /* filesize for 8x10 font */
#define HEIGHT8X10 10 /* 10 scan lines char cell height */
#define SSCAN8X10 143 /* 400 scan lines on screen - 256 - 1 */
#define FONT8X14 3584 /* filesize for 8x14 font */
#define HEIGHT8X14 14 /* 14 scan lines char cell height */
#define SSCAN8X14 135 /* 392 scan lines on screen - 256 - 1 */
#define FONT8X16 4096 /* filesize for 8x16 font */
#define HEIGHT8X16 16 /* 16 scan lines char cell height */
#define SSCAN8X16 143 /* 400 scan lines on screen - 256 - 1 */
struct screeninfo screeninfo;
#define DEFAULTFD 0
int fd;
main(argc,argv)
int argc;
char *argv[];
{
extern int optind;
extern int opterr;
extern char *optarg;
FILE *in;
struct stat sbuf, *sbp;
unsigned char *fonttab;
int ret;
int chr_height;
int scr_scan;
int scr_rows;
int c;
int chr_set = -1;
char *filename;
int fflag = -1;
int info = -1;
int dflag = 0;
char *device;
while( (c = getopt(argc, argv, "c:d:f:i")) != -1)
{
switch(c)
{
case 'c':
chr_set = atoi(optarg);
break;
case 'd':
device = optarg;
dflag = 1;
break;
case 'f':
filename = optarg;
fflag = 1;
break;
case 'i':
info = 1;
break;
case '?':
default:
usage();
break;
}
}
if(chr_set == -1 || fflag == -1)
info = 1;
if(dflag)
{
if((fd = open(device, O_RDWR)) == -1)
{
char buffer[80];
strcpy(buffer,"ERROR opening ");
strcat(buffer,device);
perror(buffer);
exit(1);
}
}
else
{
fd = DEFAULTFD;
}
if(info == 1)
{
int i;
if(ioctl(fd, VGAGETSCREEN, &screeninfo) == -1)
{
perror("ioctl VGAGETSCREEN failed");
exit(1);
}
switch(screeninfo.adaptor_type)
{
case UNKNOWN_ADAPTOR:
case MDA_ADAPTOR:
case CGA_ADAPTOR:
printf("Adaptor does not support Downloadable Fonts!\n");
break;
case EGA_ADAPTOR:
printheader();
for(i = 0;i < 4;i++)
{
printvgafontattr(i);
}
break;
case VGA_ADAPTOR:
printheader();
for(i = 0;i < 8;i++)
{
printvgafontattr(i);
}
}
printf("\n");
exit(0);
}
if(chr_set < 0 || chr_set > 7)
usage();
sbp = &sbuf;
if((in = fopen(filename, "r")) == NULL)
{
char buffer[80];
sprintf(buffer, "cannot open file %s for reading", filename);
perror(buffer);
exit(1);
}
if((fstat(fileno(in), sbp)) != 0)
{
char buffer[80];
sprintf(buffer, "cannot fstat file %s", filename);
perror(buffer);
exit(1);
}
switch(sbp->st_size)
{
case FONT8X8:
chr_height = HEIGHT8X8;
scr_scan = SSCAN8X8;
scr_rows = SIZ_50ROWS;
break;
case FONT8X10:
chr_height = HEIGHT8X10;
scr_scan = SSCAN8X10;
scr_rows = SIZ_40ROWS;
break;
case FONT8X14:
chr_height = HEIGHT8X14;
scr_scan = SSCAN8X14;
scr_rows = SIZ_28ROWS;
break;
case FONT8X16:
chr_height = HEIGHT8X16;
scr_scan = SSCAN8X16;
scr_rows = SIZ_25ROWS;
break;
default:
fprintf(stderr,"error, file %s is no valid font file, size=%d\n",argv[1],sbp->st_size);
exit(1);
}
if((fonttab = (unsigned char *)malloc((size_t)sbp->st_size)) == NULL)
{
fprintf(stderr,"error, malloc failed\n");
exit(1);
}
if((ret = fread(fonttab, sizeof(*fonttab), sbp->st_size, in)) != sbp->st_size)
{
fprintf(stderr,"error reading file %s, size = %d, read = is no valid font file, size=%d\n",argv[1],sbp->st_size, ret);
exit(1);
}
loadfont(chr_set, chr_height, fonttab);
setfont(chr_set, 1, chr_height - 1, scr_scan, scr_rows);
exit(0);
}
setfont(charset, fontloaded, charscan, scrscan, scrrow)
int charset, fontloaded, charscan, scrscan, scrrow;
{
struct vgafontattr vfattr;
vfattr.character_set = charset;
vfattr.font_loaded = fontloaded;
vfattr.character_scanlines = charscan;
vfattr.screen_scanlines = scrscan;
vfattr.screen_size = scrrow;
if(ioctl(fd, VGASETFONTATTR, &vfattr) == -1)
{
perror("loadfont - ioctl VGASETFONTATTR failed, error");
exit(1);
}
}
loadfont(fontset,charscanlines,font_table)
int fontset;
int charscanlines;
unsigned char *font_table;
{
int i, j;
struct vgaloadchar vlc;
vlc.character_set = fontset;
vlc.character_scanlines = charscanlines;
for(i = 0; i < 256; i++)
{
vlc.character = i;
for (j = 0; j < charscanlines; j++)
{
vlc.char_table[j] = font_table[j];
}
font_table += charscanlines;
if(ioctl(fd, VGALOADCHAR, &vlc) == -1)
{
perror("loadfont - ioctl VGALOADCHAR failed, error");
exit(1);
}
}
}
printvgafontattr(charset)
int charset;
{
struct vgafontattr vfattr;
static int sizetab[] = { 25, 28, 35, 40, 43, 50 };
vfattr.character_set = charset;
if(ioctl(fd, VGAGETFONTATTR, &vfattr) == -1)
{
perror("loadfont - ioctl VGAGETFONTATTR failed, error");
exit(1);
}
printf(" %d ",charset);
if(vfattr.font_loaded)
{
printf("Loaded ");
printf(" %2.2d ", sizetab[vfattr.screen_size]);
printf(" %2.2d ",
(((int)vfattr.character_scanlines) & 0x1f) + 1);
printf(" %3.3d",
((int)vfattr.screen_scanlines+0x101));
}
else
{
printf("Empty");
}
printf("\n");
}
printheader()
{
printf("\nEGA/VGA Charactersets Status Info:\n\n");
printf("Set Status Lines CharScanLines ScreenScanLines\n");
printf("--- ------ ----- ------------- ---------------\n");
}
usage()
{
fprintf(stderr,"\nloadfont - load font into ega/vga font ram for pcvt video driver\n");
fprintf(stderr,"usage: loadfont -c <cset> -d <dev> -f <name> -i\n");
fprintf(stderr," -c <cset> characterset to load (ega 0..3, vga 0..7)\n");
fprintf(stderr," -d <dev> specify device\n");
fprintf(stderr," -f <name> filename containing binary font data\n");
fprintf(stderr," -i print status and types of loaded fonts (default)\n");
exit(1);
}

View File

@ -1,3 +0,0 @@
PROG= mcon
.include <bsd.prog.mk>

View File

@ -1,166 +0,0 @@
.\" Copyright (c) 1994 Joerg Wunsch
.\"
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by Joerg Wunsch
.\" 4. The name authors may not be used to endorse or promote products
.\" derived from this software without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" @(#)mcon.1, 3.00, Last Edit-Date: [Mon Jan 10 21:28:22 1994]
.\"
.Dd January 3, 1994
.Dt MCON 1
.Sh NAME
.Nm mcon
.Nd controls pcvt mouse emulator
.Sh SYNOPSIS
.Nm mcon
.Op Fl l Ar left-button-key
.Op Fl m Ar mid-button-key
.Op Fl r Ar right-button-key
.Op Fl a Ar accel-time
.Op Fl s Ar 0 | false | \&no
.Op Fl s Ar 1 | true | yes
.Ar device
.Sh DESCRIPTION
The
.Nm mcon
utility controls the configurable parameters for the mouse emulator of
.Xr pcvt 4 .
.br
.Em NB :
The mouse emulator is not configured in by default; the system's config
file needs to specify an option line
.Em options Dq PCVT_EMU_MOUSE
in order to get its functionality.
.Pp
Either way, the
.Nm
program must be called with an argument
.Ar device
that specifies the device node used for the mouse emulation. This is
usually the first device node of the
.Xr pcvt 4
driver not being used as a virtual terminal device. E.\ g., if you
have configured eight virtual terminals
.Pq the default value ,
named
.Pa /dev/ttyv0
through
.Pa /dev/ttyv7 ,
the mouse emulator would allocate
.Pa /dev/ttyv8 .
If
.Nm
is called without any option, it will print the actual values of the
configurable parameters.
If called with an option, the program attempts to set up the new value.
.Pp
The options are as follows:
.Bl -tag -width Ds
.It Fl l Ar left-button-key
.It Fl m Ar mid-button-key
.It Fl r Ar right-button-key
Maps the named
.Ar button key
to emulate either the left, middle, or right mouse button.
.Ar Button key
is the usual name for that key. Normal ASCII keys are denoted by the
character they're labeled with, function keys are named
.Em f1
through
.Em f10 .
Note that the AT function keys
.Em f11
and
.Em f12
are
.Em extended
keys that cannot be mapped to be used with the mouse emulator since
it only allows basic PC-scancode keys to be used.
.It Fl a Ar accel-time
Set the time limit for the internal accelerator to
.Ar accel-time
milliseconds. Key events occurring after a longer time than this limit
will move the mouse cursor in single steps. Key events arriving more
frequently will move the cursor accelerated by a factor of 6. Note that
despite of
.Em milliseconds
being the unit of choice here, the time resolution is restricted by the
timer tick distance of the underlying operating system, usually to a
granularity of 10 milliseconds.
.It Fl s Ar 0 | false | \&no
.It Fl s Ar 1 | true | yes
The first form disables, the second form enables the
.Em sticky
behaviour of the mouse buttons. Sticky mouse keys behave much like
toggle-buttons: on first press, they become active, on second press,
they're deactivated. Pressing another button will deactivate any
other sticky button anyway.
Sticky buttons might be more convenient since you don't need 20 fingers
at all; on the other hand, they make it virtually impossible to initiate
double or triple mouse clicks.
.El
.Sh EXAMPLES
The following example would install the default behaviour of the
mouse emulator:
.Nm mcon
.Fl l Ar f1
.Fl m Ar f2
.Fl r Ar f3
.Fl a Ar 250
.Fl s Ar \&no
.Pa /dev/ttyv8
.Sh BUGS
The key names used to map the button-emulating keys to scan codes
.Pq and vica verse
are based on the American keyboard layout. This would usually not
cause any trouble since the
.Dq button-of-choice
is certainly some function key that should be equal for any national
keyboard layout.
.Pp
The mouse emulator is a rude hack at all; its only purpose is to provide
a device to move the pointer within an X-windowing environment.
.Sh SEE ALSO
.Xr X 1 ,
.Xr pcvt 4
.Sh HISTORY
The
.Nm
utility appeared in
.Xr pcvt 4 ,
release 3.00.
.Sh AUTHORS
The mouse emulator has been contributed by
.if n Joerg Wunsch.
.if t J\(:org Wunsch.

View File

@ -1,193 +0,0 @@
/*
* Copyright (c) 1994 Joerg Wunsch
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Joerg Wunsch
* 4. The name authors may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*
* @(#)mcon.c, 3.20, Last Edit-Date: [Tue Dec 20 14:53:15 1994]
*/
/*---------------------------------------------------------------------------*
*
* history:
*
* -jw initial version; includes a basic mapping between PeeCee
* scan codes and key names
* -hm changed sys/pcvt_ioctl.h -> machine/pcvt_ioctl.h
*
*---------------------------------------------------------------------------*/
/*
* Utility program to wire the mouse emulator control ioctl to the
* user level. Allows setting of any configurable parameter, or
* display the current configuration.
*/
#include <machine/pcvt_ioctl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/fcntl.h>
static const char *keynames[] = {
"", "esc", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0",
"-", "+", "bksp", "tab", "q", "w", "e", "r", "t", "y", "u",
"i", "o", "p", "[", "]", "enter", "ctrl", "a", "s", "d", "f",
"g", "h", "j", "k", "l", ";", "\"", "`", "lshift", "\\",
"z", "x", "c", "v", "b", "n", "m", ",", ".", "/", "rshift",
"prtscr", "alt", "space", "caps", "f1", "f2", "f3", "f4",
"f5", "f6", "f7", "f8", "f9", "f10", "numlock", "scrolllock",
"kp7", "kp8", "kp9", "kp-", "kp4", "kp5", "kp6", "kp+",
"kp1", "kp2", "kp3", "kp0", "kp."
};
const char *scantoname(int scan) {
if(scan >= sizeof keynames / sizeof(const char *))
return "???";
else
return keynames[scan];
}
int nametoscan(const char *name) {
int i;
for(i = 0; i < sizeof keynames / sizeof(const char *); i++)
if(strcmp(keynames[i], name) == 0)
return i;
return -1;
}
int main(int argc, char **argv) {
int c, errs = 0, fd, do_set = 0;
int left = 0, mid = 0, right = 0, accel = 0, sticky = -1;
struct mousedefs mdef;
while((c = getopt(argc, argv, "l:m:r:a:s:")) != -1)
switch(c) {
case 'l':
left = nametoscan(optarg);
do_set = 1;
if(left == -1) goto keynameerr;
break;
case 'm':
mid = nametoscan(optarg);
do_set = 1;
if(mid == -1) goto keynameerr;
break;
case 'r':
right = nametoscan(optarg);
do_set = 1;
if(right == -1) goto keynameerr;
break;
keynameerr:
{
fprintf(stderr, "unknown key name: %s\n",
optarg);
errs++;
}
break;
case 'a':
accel = 1000 * strtol(optarg, 0, 10);
do_set = 1;
break;
case 's':
if(strcmp(optarg, "0") == 0
|| strcmp(optarg, "false") == 0
|| strcmp(optarg, "no") == 0)
sticky = 0;
else if(strcmp(optarg, "1") == 0
|| strcmp(optarg, "true") == 0
|| strcmp(optarg, "yes") == 0)
sticky = 1;
else {
fprintf(stderr, "invalid argument to -s: %s\n",
optarg);
errs++;
}
do_set = 1;
break;
default:
errs++;
}
argc -= optind;
argv += optind;
if(errs || argc != 1) {
fprintf(stderr, "usage: "
"mouse [-l key][-m key][-r key][-a acctime][-s 0|1] "
"mousedev\n");
return 2;
}
if((fd = open(argv[0], O_RDONLY)) < 0) {
perror("open(mousedev)");
return 2;
}
if(ioctl(fd, KBDMOUSEGET, &mdef) < 0) {
perror("ioctl(KBDMOUSEGET)");
return 1;
}
if(!do_set) {
printf("Current mouse emulator definitions:\n"
"left button: %s\n"
"middle button: %s\n"
"right button: %s\n"
"acceleration limit: %d msec\n"
"sticky buttons: %s\n",
scantoname(mdef.leftbutton),
scantoname(mdef.middlebutton),
scantoname(mdef.rightbutton),
mdef.acceltime / 1000,
mdef.stickybuttons? "yes": "no");
return 0;
}
if(left) mdef.leftbutton = left & 0x7f;
if(mid) mdef.middlebutton = mid & 0x7f;
if(right) mdef.rightbutton = right & 0x7f;
if(accel) mdef.acceltime = accel;
if(sticky != -1) mdef.stickybuttons = sticky;
if(ioctl(fd, KBDMOUSESET, &mdef) < 0) {
perror("ioctl(KBDMOUSESET)");
return 1;
}
return 0;
}

View File

@ -1,3 +0,0 @@
PROG= scon
.include <bsd.prog.mk>

View File

@ -1,214 +0,0 @@
.\" Copyright (c) 1992,1993,1994 Hellmuth Michaelis and Joerg Wunsch
.\"
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\" 3. All advertising materials mentioning features or use of this software
.\" must display the following acknowledgement:
.\" This product includes software developed by
.\" Hellmuth Michaelis and Joerg Wunsch
.\" 4. The name authors may not be used to endorse or promote products
.\" derived from this software without specific prior written permission.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
.\" IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.\" @(#)scon.1, 3.00, Last Edit-Date: [Mon Jan 10 21:30:48 1994]
.\"
.Dd December 31, 1993
.Dt SCON 1
.Sh NAME
.Nm scon
.Nd controls screen modes for pcvt video driver
.Sh SYNOPSIS
.Nm scon
.Op Fl a
.Op Fl c Ar screenno
.Op Fl d Ar device
.Op Fl f Ar on|off
.Op Fl h
.Op Fl H
.Op Fl l
.Op Fl m
.Op Fl v
.Op Fl V
.Op Fl s Ar lines
.br
.Nm scon
.Op Fl v
.Op Fl d Ar device
.Fl p Ar entry,red,green,blue
.br
.Nm scon
.Op Fl v
.Op Fl d Ar device
.Fl p Ar default
.br
.Nm scon
.Op Fl v
.Op Fl d Ar device
.Fl p Ar list
.Nm scon
.Op Fl v
.Fl t Ar timeout
.Nm scon
.Op Fl v
.Fl 1 | Fl 8
.Sh DESCRIPTION
The
.Nm scon
utility controls several aspects of the runtime behaviour of the pcvt vt220
driver.
.Pp
The options are as follows:
.Bl -tag -width Ds
.It Fl a
Returns a string describing the video adaptor found by pcvt, the string
returned could be MDA, HGC, CGA, EGA, VGA or UNKNOWN.
.It Fl c
Specify the screen number the current (displayed) screen should be switched
to.
.It Fl d
Specify the device filename (i.e. /dev/ttyv2) further operations specified on
the command line should be applied to.
.It Fl f
Some programs which silently assume 24 lines when they run on a VT220 show
incorrect behaviour when the terminal has really 25 lines. To support full
VT220 behaviour, it is possible to force pcvt to select only 24 lines when
it is running in 25-lines pure VT mode and/or in 28-lines HP-mode. The
.Fl f
option requires one additional parameter, the string 'on' or 'off' to switch
this mode for a virtual screen on or off respectively. This mode has no effect
if any other vertical resolutions are selected than the two above mentioned.
.It Fl h
Prints a usage/help text.
.It Fl l
Lists the current configuration of runtime changeable options and fixed
parameters (such as the type of the adaptor, and in case of a VGA adaptor,
the Manufacturer, Chipset and 132 column support) of the output portion
of the pcvt driver.
.It Fl m
Returns a string describing the connected display monitor type found by pcvt,
the string returned can be MONO, COLOR or UNKNOWN.
.It Fl v
Specify verbose operation of the program.
.It Fl V
Switch the specified/current screen into a pure VT220 mode without recognizing
any HP escape sequences and without displaying function key labels.
.It Fl H
Switch the specified/current screen into a mixed HP/VT220 mode. That is, that
in addition to the full VT220 emulation, the HP function key labels and the
escape sequences for handling the labels are available to the user.
.It Fl s
Specify the number of character lines on the screen. Possible parameters are
25, 28, 35, 40, 43 or 50. To use all this screen sizes, the fonts required
for proper operation of a desired size have to be downloaded to the EGA/VGA
font ram. This option is available only for EGA and VGA boards.
.It Fl p
Modify VGA palette
.Pq DAC .
The
.Fl p
is mutually exclusive with
.Fl s ,
.Fl H ,
and
.Fl V .
Naturally, option
.Fl p
is available only for VGA boards. Three flavors are available.
If used with argument
.Dq Ar default ,
this flag will restore the default palette
.Po
as installed by VGA ROM BIOS after hardware reset
.Pc .
If used with argument
.Dq Ar list ,
the current VGA DAC palette entries are listed. Each entry contains
the table index, values for red, green, and blue, and if there's a
known name for this entry, the color name. Trailing empty table
slots (RGB values all zero) are omitted.
Otherwise, four comma-separated arguments are expected. The first
denotes the number of palette entry to be modified. This may be either
a number between 0 and 255, or the usual name of an associated color
.Pq case-insensitive .
The following values for red, green and blue are restricted to 0 through 63
due to VGA DAC conventions.
Note that the first delimiter within such an argument may be a colon
.Dq \&:
instead of a comma
.Dq \&,
for better readability, but this violates common command argument
conventions.
Multiple
.Fl p
options may be specified if unambiguous.
.It Fl t
Specifying
.Fl t
will activate the screen saver. The behaviour depends on
.Ar timeout :
if
.Ar timeout
is given as 0, the screen saver is turned off. Otherwise,
.Ar timeout
is taken as a number of seconds to wait until activating the
screen saver.
NOTE: the
.Fl t
option is only available if screen saver support has been compiled into
the driver !
.It Fl 1
Sets 132 columns mode
.Pq only available on VGA adaptors .
.It Fl 8
Sets 80 columns mode.
.El
.Pp
When switching between HP and VT mode, when switching the force 24 lines
mode on and off, or when switching between 80 and 132 columns operation,
the screen is cleared, the scrolling
region is reset and the cursor is placed in the home position.
.Sh EXAMPLES
The command
.Dq Li scon Fl H s Ar 28
places the current screen into HP mode and sets the screen size to 28x80.
Invoking
.Do
.Li scon Fl p
.Ar lightgray,0,15,0
.Fl p
.Ar 0:45,45,45
.Dc
will result in green on gray output for normal text.
Note that normal text color is light gray, and not white as one might expect.
.Sh BUGS
the
.Fl c
and
.Fl d
options collide somehow, this will change in a future release.
.Sh SEE ALSO
.Xr cursor 1 ,
.Xr loadfont 1 ,
.Xr pcvt 4

View File

@ -1,856 +0,0 @@
/*
* Copyright (c) 1992,1993,1994 Hellmuth Michaelis and Joerg Wunsch
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by
* Hellmuth Michaelis and Joerg Wunsch
* 4. The name authors may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
static char *id =
"@(#)scon.c, 3.20, Last Edit-Date: [Sun Sep 25 12:33:21 1994]";
/*---------------------------------------------------------------------------*
*
* history:
*
* -hm moving fd for default device from 1 -> 0 for such things
* as "scon -p list | more" to be possible
* (reported by Gordon L. Burditt, gordon@sneaky.lonestar.org)
* -hm adding option "a" for just returning the type of video adaptor
* -hm removing explicit HGC support, same as MDA ...
* -hm vga type/family/132col support info on -l
* -hm force 24 lines in DEC 25 lines mode and HP 28 lines mode
* -hm fixed bug with 132 column mode display status display
* -jw added 132/80 col mode switching
* -hm removed -h flag, use -? now ... ;-)
* -hm S3 chipsets ..
* -hm Cirrus chipsets support from Onno van der Linden
* -hm -m option, display monitor type
* -hm bugfix, scon -c <screen-num> cleared dest screen, fixed
*
*---------------------------------------------------------------------------*/
#include <stdio.h>
#include <fcntl.h>
#include <machine/pcvt_ioctl.h>
#define DEFAULTFD 0
int aflag = -1;
int lflag = -1;
int mflag = -1;
int current = -1;
int pflag = -1;
int hflag = -1;
int res = -1;
char *device;
int dflag = -1;
int vflag = 0;
int Pflag = 0;
int tflag = 0;
int fflag = -1;
int colms = 0;
char *onoff;
unsigned timeout;
struct screeninfo screeninfo;
#define NVGAPEL 256
struct rgb {
unsigned r, g, b;
int dothis;
};
static struct rgb palette[NVGAPEL] = {
{ 0x00, 0x00, 0x00, 0}, /* 0 - black */
{ 0x00, 0x00, 0x2a, 0}, /* 1 - blue */
{ 0x00, 0x2a, 0x00, 0}, /* 2 - green */
{ 0x00, 0x2a, 0x2a, 0}, /* 3 - cyan */
{ 0x2a, 0x00, 0x00, 0}, /* 4 - red */
{ 0x2a, 0x00, 0x2a, 0}, /* 5 - magenta */
{ 0x2a, 0x2a, 0x00, 0}, /* 6 */
{ 0x2a, 0x2a, 0x2a, 0}, /* 7 - lightgray */
{ 0x00, 0x00, 0x15, 0}, /* 8 */
{ 0x00, 0x00, 0x3f, 0}, /* 9 */
{ 0x00, 0x2a, 0x15, 0}, /* 10 */
{ 0x00, 0x2a, 0x3f, 0}, /* 11 */
{ 0x2a, 0x00, 0x15, 0}, /* 12 */
{ 0x2a, 0x00, 0x3f, 0}, /* 13 */
{ 0x2a, 0x2a, 0x15, 0}, /* 14 */
{ 0x2a, 0x2a, 0x3f, 0}, /* 15 */
{ 0x00, 0x15, 0x00, 0}, /* 16 */
{ 0x00, 0x15, 0x2a, 0}, /* 17 */
{ 0x00, 0x3f, 0x00, 0}, /* 18 */
{ 0x00, 0x3f, 0x2a, 0}, /* 19 */
{ 0x2a, 0x15, 0x00, 0}, /* 20 - brown */
{ 0x2a, 0x15, 0x2a, 0}, /* 21 */
{ 0x2a, 0x3f, 0x00, 0}, /* 22 */
{ 0x2a, 0x3f, 0x2a, 0}, /* 23 */
{ 0x00, 0x15, 0x15, 0}, /* 24 */
{ 0x00, 0x15, 0x3f, 0}, /* 25 */
{ 0x00, 0x3f, 0x15, 0}, /* 26 */
{ 0x00, 0x3f, 0x3f, 0}, /* 27 */
{ 0x2a, 0x15, 0x15, 0}, /* 28 */
{ 0x2a, 0x15, 0x3f, 0}, /* 29 */
{ 0x2a, 0x3f, 0x15, 0}, /* 30 */
{ 0x2a, 0x3f, 0x3f, 0}, /* 31 */
{ 0x15, 0x00, 0x00, 0}, /* 32 */
{ 0x15, 0x00, 0x2a, 0}, /* 33 */
{ 0x15, 0x2a, 0x00, 0}, /* 34 */
{ 0x15, 0x2a, 0x2a, 0}, /* 35 */
{ 0x3f, 0x00, 0x00, 0}, /* 36 */
{ 0x3f, 0x00, 0x2a, 0}, /* 37 */
{ 0x3f, 0x2a, 0x00, 0}, /* 38 */
{ 0x3f, 0x2a, 0x2a, 0}, /* 39 */
{ 0x15, 0x00, 0x15, 0}, /* 40 */
{ 0x15, 0x00, 0x3f, 0}, /* 41 */
{ 0x15, 0x2a, 0x15, 0}, /* 42 */
{ 0x15, 0x2a, 0x3f, 0}, /* 43 */
{ 0x3f, 0x00, 0x15, 0}, /* 44 */
{ 0x3f, 0x00, 0x3f, 0}, /* 45 */
{ 0x3f, 0x2a, 0x15, 0}, /* 46 */
{ 0x3f, 0x2a, 0x3f, 0}, /* 47 */
{ 0x15, 0x15, 0x00, 0}, /* 48 */
{ 0x15, 0x15, 0x2a, 0}, /* 49 */
{ 0x15, 0x3f, 0x00, 0}, /* 50 */
{ 0x15, 0x3f, 0x2a, 0}, /* 51 */
{ 0x3f, 0x15, 0x00, 0}, /* 52 */
{ 0x3f, 0x15, 0x2a, 0}, /* 53 */
{ 0x3f, 0x3f, 0x00, 0}, /* 54 */
{ 0x3f, 0x3f, 0x2a, 0}, /* 55 */
{ 0x15, 0x15, 0x15, 0}, /* 56 - darkgray */
{ 0x15, 0x15, 0x3f, 0}, /* 57 - lightblue */
{ 0x15, 0x3f, 0x15, 0}, /* 58 - lightgreen */
{ 0x15, 0x3f, 0x3f, 0}, /* 59 - lightcyan */
{ 0x3f, 0x15, 0x15, 0}, /* 60 - lightred */
{ 0x3f, 0x15, 0x3f, 0}, /* 61 - lightmagenta */
{ 0x3f, 0x3f, 0x15, 0}, /* 62 - yellow */
{ 0x3f, 0x3f, 0x3f, 0}, /* 63 - white */
{ 0x00, 0x00, 0x00, 0} /* 64 ... - empty */
};
static struct colname {
const char *name;
unsigned idx;
} colnames[] = {
{"black", 0},
{"blue", 1},
{"green", 2},
{"cyan", 3},
{"red", 4},
{"magenta", 5},
{"brown", 20},
{"lightgray", 7},
{"lightgrey", 7},
{"darkgray", 56},
{"darkgrey", 56},
{"lightblue", 57},
{"lightgreen", 58},
{"lightcyan", 59},
{"lightred", 60},
{"lightmagenta", 61},
{"yellow", 62},
{"white", 63},
/* must be terminator: */ {(const char *)NULL, 0}
};
static void parsepopt(char *arg, unsigned *idx,
unsigned *r, unsigned *g, unsigned *b);
static void printpalette(int fd);
main(argc,argv)
int argc;
char *argv[];
{
extern int optind;
extern int opterr;
extern char *optarg;
int c;
int fd;
while( (c = getopt(argc, argv, "ac:d:f:HVlms:t:vp:18")) != -1)
{
switch(c)
{
case 'a':
aflag = 1;
break;
case 'l':
lflag = 1;
break;
case 'm':
mflag = 1;
break;
case 'c':
current = atoi(optarg);
break;
case 'd':
device = optarg;
dflag = 1;
break;
case 'f':
onoff = optarg;
fflag = 1;
break;
case 'V':
pflag = 1;
break;
case 'H':
hflag = 1;
break;
case 's':
if (!strncmp(optarg, "25", 2))
res = SIZ_25ROWS;
else if(!strncmp(optarg, "28", 2))
res = SIZ_28ROWS;
else if(!strncmp(optarg, "35", 2))
res = SIZ_35ROWS;
else if(!strncmp(optarg, "40", 2))
res = SIZ_40ROWS;
else if(!strncmp(optarg, "43", 2))
res = SIZ_43ROWS;
else if(!strncmp(optarg, "50", 2))
res = SIZ_50ROWS;
break;
case 'v':
vflag++;
break;
case 'p':
if(!strcmp(optarg, "list"))
{
if(Pflag)
{
fprintf(stderr,
"-p list is mutual exclusive "
"with other -p options\n");
return 2;
}
Pflag = 3;
}
else if(!strcmp(optarg, "default"))
{
if(Pflag)
{
fprintf(stderr,
"multiple -p default not "
"allowed\n");
return 2;
}
Pflag = 2;
} else {
unsigned idx, r, g, b;
if(Pflag > 1)
{
fprintf(stderr,
"-p default and -p i,r,g,b "
"ambiguous\n");
return 2;
}
Pflag = 1;
parsepopt(optarg, &idx, &r, &g, &b);
if(idx >= NVGAPEL)
{
fprintf(stderr,
"index %u in -p option "
"out of range\n", idx);
return 2;
}
palette[idx].r = r;
palette[idx].g = g;
palette[idx].b = b;
palette[idx].dothis = 1;
}
break;
case 't':
tflag++;
timeout = atoi(optarg);
break;
case '1':
colms = 132;
break;
case '8':
colms = 80;
break;
case '?':
default:
usage();
break;
}
}
if((pflag == 1) && (hflag == 1))
usage();
if(dflag == -1 && lflag == -1 && current == -1 && pflag == -1 &&
hflag == -1 && res == -1 && Pflag == 0 && tflag == 0 && fflag == -1
&& colms == 0 && mflag == -1)
{
lflag = 1;
}
if(dflag == -1)
{
if(vflag)
printf("using current device\n");
fd = DEFAULTFD; /* -hm, Feb 12 1993 */
}
else
{
if((fd = open(device, O_RDWR)) == -1)
{
char buffer[80];
strcpy(buffer,"ERROR opening ");
strcat(buffer,device);
perror(buffer);
exit(1);
}
if(vflag)
printf("using device %s\n",device);
}
if(aflag == 1) /* return adaptor type */
{
printadaptor(fd);
exit(0);
}
if(mflag == 1) /* return monitor type */
{
printmonitor(fd);
exit(0);
}
if(lflag == 1) /* list information */
{
if(vflag)
printf("processing option -l, listing screen info\n");
printinfo(fd);
exit(0);
}
if(tflag) /* set screen saver timeout */
{
if(vflag)
{
printf(
"processing option -t, setting screen saver timeout: "
);
if(timeout)
printf("new timeout = %d s\n", timeout);
else
printf("turned off\n");
}
if(ioctl(fd, VGASCREENSAVER, &timeout) < 0)
{
perror("ioctl(VGASCREENSAVER)");
fprintf(stderr, "Check the driver, the screensaver is probably not compiled in!\n");
exit(2);
}
goto success;
}
if(colms)
{
if(vflag)
printf("Setting number of columns to %d\n", colms);
if(ioctl(fd, VGASETCOLMS, &colms) < 0)
{
perror("ioctl(VGASETCOLMS)");
exit(2);
}
goto success;
}
if(Pflag == 3)
{
/* listing VGA palette */
if(vflag)
printf("processing option -p list, "
"listing VGA palette\n");
printpalette(fd);
goto success;
}
if(Pflag)
{
unsigned int idx;
/* setting VGA palette */
if(vflag)
printf("processing option -p, setting VGA palette%s\n",
Pflag == 2? " to default": "");
for(idx = 0; idx < NVGAPEL; idx++)
if(Pflag == 2 || palette[idx].dothis)
{
struct vgapel p;
p.idx = idx;
p.r = palette[idx].r;
p.g = palette[idx].g;
p.b = palette[idx].b;
if(ioctl(fd, VGAWRITEPEL, (caddr_t)&p) < 0)
{
perror("ioctl(fd, VGAWRITEPEL)");
return 2;
}
}
goto success;
}
screeninfo.screen_no = -1; /* We are using fd */
screeninfo.current_screen = current;
screeninfo.pure_vt_mode = -1;
screeninfo.screen_size = res;
screeninfo.force_24lines = -1;
if(current != -1) /* set current screen */
{
if(vflag)
printf("processing option -c, setting current screen to %d\n",current);
if(ioctl(1, VGASETSCREEN, &screeninfo) == -1)
{
perror("ioctl VGASETSCREEN failed");
exit(1);
}
exit(0);
}
if(pflag == 1)
{
if(vflag)
printf("processing option -V, setting emulation to pure VT220\n");
screeninfo.pure_vt_mode = M_PUREVT;
}
else if(hflag == 1)
{
if(vflag)
printf("processing option -H, setting emulation to VT220 + HP Labels\n");
screeninfo.pure_vt_mode = M_HPVT;
}
else
{
if(vflag)
printf("no change in terminal emulation\n");
}
if(vflag)
{
if(res == -1)
printf("no change in screen resolution\n");
else if(res == SIZ_25ROWS)
printf("change screen resolution to 25 lines\n");
else if(res == SIZ_28ROWS)
printf("change screen resolution to 28 lines\n");
else if(res == SIZ_35ROWS)
printf("change screen resolution to 35 lines\n");
else if(res == SIZ_40ROWS)
printf("change screen resolution to 40 lines\n");
else if(res == SIZ_43ROWS)
printf("change screen resolution to 43 lines\n");
else if(res == SIZ_50ROWS)
printf("change screen resolution to 50 lines\n");
}
if(fflag == 1) /* force 24 lines on/off */
{
if(!strcmp(onoff, "on"))
{
fflag = 1;
}
else if(!strcmp(onoff, "off"))
{
fflag = 0;
}
else
{
fprintf(stderr,"you must specify 'on' or 'off' with -f option!\n");
exit(1);
}
}
screeninfo.force_24lines = fflag;
if(ioctl(fd, VGASETSCREEN, &screeninfo) == -1)
{
perror("ioctl VGASETSCREEN failed");
exit(1);
}
success:
if(vflag)
printf("successful execution of ioctl VGASETSCREEN!\n");
exit(0);
}
usage()
{
fprintf(stderr,"\nscon - screen control utility for the pcvt video driver\n");
fprintf(stderr,"usage: scon -a -l -m -v -c [n] -d [dev] -f [on|off] -V -H -s [n]\n");
fprintf(stderr,"usage: scon -p [default | list | i,r,g,b] | -t [sec] | -1 | -8\n");
fprintf(stderr," -a list video adaptor type (MDA,CGA,EGA or VGA)\n");
fprintf(stderr," -c <screen no> switch current virtual screen to <screen no>\n");
fprintf(stderr," -d <device> set parameters(-V|-H|-s) for virtual device\n");
fprintf(stderr," -f <on|off> force 24 lines in VT 25 lines and HP 28 lines mode\n");
fprintf(stderr," -H set VT220/HP emulation mode for a virtual screen\n");
fprintf(stderr," -l list current parameters for a virtual screen\n");
fprintf(stderr," -m report monitor type (MONO/COLOR)\n");
fprintf(stderr," -p default set default VGA palette\n");
fprintf(stderr," -p list list current VGA palette\n");
fprintf(stderr," -p <i,r,g,b> set VGA palette entry i to r/g/b\n");
fprintf(stderr," -p <name,r,g,b> set VGA palette entry for color name to r/g/b\n");
fprintf(stderr," -s <lines> set 25, 28, 35, 40, 43 or 50 lines for a virtual screen\n");
fprintf(stderr," -t <timeout> set screen saver timeout [seconds]\n");
fprintf(stderr," -1 set 132 columns mode\n");
fprintf(stderr," -8 set 80 columns mode\n");
fprintf(stderr," -v verbose mode\n");
fprintf(stderr," -V set pure VT220 emulation for a virtual screen\n");
fprintf(stderr," -? display help (this message)\n\n");
exit(1);
}
printadaptor(fd)
int fd;
{
if(ioctl(fd, VGAGETSCREEN, &screeninfo) == -1)
{
perror("ioctl VGAGETSCREEN failed");
exit(1);
}
switch(screeninfo.adaptor_type)
{
default:
case UNKNOWN_ADAPTOR:
printf("UNKNOWN\n");
break;
case MDA_ADAPTOR:
printf("MDA\n");
break;
case CGA_ADAPTOR:
printf("CGA\n");
break;
case EGA_ADAPTOR:
printf("EGA\n");
break;
case VGA_ADAPTOR:
printf("VGA\n");
break;
}
}
printmonitor(fd)
int fd;
{
if(ioctl(fd, VGAGETSCREEN, &screeninfo) == -1)
{
perror("ioctl VGAGETSCREEN failed");
exit(1);
}
switch(screeninfo.monitor_type)
{
default:
printf("UNKNOWN\n");
break;
case MONITOR_MONO:
printf("MONO\n");
break;
case MONITOR_COLOR:
printf("COLOR\n");
break;
}
}
char *vga_type(int number)
{
static char *vga_tab[] = {
"Generic VGA",
"ET4000",
"ET3000",
"PVGA1A",
"WD90C00",
"WD90C10",
"WD90C11",
"VIDEO 7 VEGA",
"VIDEO 7 FAST",
"VIDEO 7 VER5",
"VIDEO 7 1024I",
"Unknown VIDEO 7",
"TVGA 8800BR",
"TVGA 8800CS",
"TVGA 8900B",
"TVGA 8900C",
"TVGA 8900CL",
"TVGA 9000",
"TVGA 9100",
"TVGA 9200",
"Unknown TRIDENT",
"S3 80C911",
"S3 80C924",
"S3 80C801/80C805",
"S3 80C928",
"Unknown S3",
"CL-GD5402",
"CL-GD5402r1",
"CL-GD5420",
"CL-GD5420r1",
"CL-GD5422",
"CL-GD5424",
"CL-GD5426",
"CL-GD5428",
};
return(vga_tab[number]);
}
char *vga_family(int number)
{
static char *vga_tab[] = {
"Generic VGA",
"Tseng Labs",
"Western Digital",
"Video Seven",
"Trident",
"S3 Incorporated",
"Cirrus Logic",
};
return(vga_tab[number]);
}
printinfo(fd)
int fd;
{
if(ioctl(fd, VGAGETSCREEN, &screeninfo) == -1)
{
perror("ioctl VGAGETSCREEN failed");
exit(1);
}
printf( "\nVideo Adaptor Type = ");
switch(screeninfo.adaptor_type)
{
default:
case UNKNOWN_ADAPTOR:
printf("UNKNOWN Video Adaptor\n");
break;
case MDA_ADAPTOR:
printf("MDA - Monochrome Display Adaptor\n");
break;
case CGA_ADAPTOR:
printf("CGA - Color Graphics Adaptor\n");
break;
case EGA_ADAPTOR:
printf("EGA - Enhanced Graphics Adaptor\n");
break;
case VGA_ADAPTOR:
printf("VGA - Video Graphics Adaptor/Array\n");
printf(" VGA Chipset Manufacturer = %s\n",
vga_family(screeninfo.vga_family));
printf(" VGA Chipset Type = %s\n",
vga_type(screeninfo.vga_type));
printf(" Support for 132 Column Mode = %s\n",
screeninfo.vga_132 ? "Yes" : "No");
break;
}
printf( "Display Monitor Type = ");
switch(screeninfo.monitor_type)
{
default:
printf("UNKNOWN Monitor Type\n");
break;
case MONITOR_MONO:
printf("Monochrome Monitor\n");
break;
case MONITOR_COLOR:
printf("Color Monitor\n");
break;
}
printf( "Number of Downloadable Fonts = %d\n",screeninfo.totalfonts);
printf( "Number of Virtual Screens = %d\n",screeninfo.totalscreens);
printf( "Info Request Screen Number = %d\n",screeninfo.screen_no);
printf( "Current Displayed Screen = %d\n",screeninfo.current_screen);
if(screeninfo.pure_vt_mode == M_PUREVT)
printf( "Terminal Emulation Mode = VT220\n");
else
printf( "Terminal Emulation Mode = VT220 with HP Features\n");
printf( "Lines = ");
switch(screeninfo.screen_size)
{
case SIZ_25ROWS:
printf( "25\n");
break;
case SIZ_28ROWS:
printf( "28\n");
break;
case SIZ_35ROWS:
printf( "35\n");
break;
case SIZ_40ROWS:
printf( "40\n");
break;
case SIZ_43ROWS:
printf( "43\n");
break;
case SIZ_50ROWS:
printf( "50\n");
break;
default:
printf( "UNKNOWN\n");
break;
}
printf( "Force 24 Lines = %s",
screeninfo.force_24lines ? "Yes" : "No");
printf("\n\n");
}
static const char *findname(unsigned idx)
{
/* try to find a name for palette entry idx */
/* if multiple names exist, returns first matching */
register struct colname *cnp;
for(cnp = colnames; cnp->name; cnp++)
if(cnp->idx == idx)
return cnp->name;
/* not found */
return (const char *)NULL;
}
static void printpalette(int fd)
{
register unsigned idx, last;
for(idx = 0; idx < NVGAPEL; idx++)
{
struct vgapel p;
p.idx = idx;
if(ioctl(fd, VGAREADPEL, &p) < 0)
{
perror("ioctl(VGAREADPEL)");
exit(2);
}
palette[idx].r = p.r;
palette[idx].g = p.g;
palette[idx].b = p.b;
}
/* find last non-empty entry */
for(last = NVGAPEL - 1; last; last--)
if(palette[last].r || palette[last].g || palette[last].b)
break;
if(last != NVGAPEL - 1)
last++;
/* now, everything's collected. print out table */
printf("VGA palette status\n");
printf("index red green blue name\n");
for(idx = 0; idx < last; idx++)
{
const char *cp;
printf("%5d %5d %5d %5d",
idx, palette[idx].r, palette[idx].g, palette[idx].b);
if(cp = findname(idx))
printf(" %s\n", cp);
else
putchar('\n');
}
putchar('\n');
}
static void parsepopt(char *arg, unsigned *idx,
unsigned *r, unsigned *g, unsigned *b)
{
char firstarg[21];
register unsigned i;
if(sscanf(arg, "%20[a-zA-Z0-9]%*[,:]%u,%u,%u", firstarg, r, g, b) < 4
|| strlen(firstarg) == 0) {
fprintf(stderr, "too few args in -p i,r,g,b\n");
exit(2);
}
if(firstarg[0] >= '0' && firstarg[0] <= '9') {
*idx = strtoul(firstarg, NULL, 10);
return;
}
for(i = 0; colnames[i].name; i++)
if(strcasecmp(colnames[i].name, firstarg) == 0) {
*idx = colnames[i].idx;
return;
}
fprintf(stderr, "arg ``%s'' in -p option not recognized\n",
firstarg);
exit(2);
}

View File

@ -1,28 +0,0 @@
CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION
CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION
CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION
THE USE OF THIS PROGRAM MAY DESTROY YOUR MONITOR !!!
====================================================
IF YOU DON'T KNOW WHAT YOU ARE DOING, STAY AWAY FROM IT !!!
===========================================================
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION
CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION
CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION

View File

@ -1,297 +0,0 @@
/*
* This code is derived from code available from the STB bulletin board
*/
/* $XFree86: mit/server/ddx/x386/common_hw/ICD2061Aalt.c,v 2.6 1994/04/15 05:10:30 dawes Exp $ */
#ifndef KERNEL
#include "compiler.h"
#else
#define GCCUSESGAS
#define PCVT_STANDALONE 1
#endif
#define SEQREG 0x03C4
#define MISCREG 0x03C2
#define MISCREAD 0x03CC
double fref = 14.31818 * 2.0;
char ascclk[] = "VIDEO CLOCK ?";
unsigned short clknum;
unsigned short vlbus_flag;
unsigned short card;
unsigned short crtcaddr;
unsigned short clockreg;
static double range[15] = {50.0, 51.0, 53.2, 58.5, 60.7, 64.4, 66.8, 73.5,
75.6, 80.9, 83.2, 91.5, 100.0, 120.0, 120.0};
#ifdef __STDC__
static double genratio(unsigned int *p, unsigned int *q, double tgt);
static double f(unsigned int p, unsigned int q, double basefreq);
#if 0
static void prtbinary(unsigned int size, unsigned int val);
#endif
static void wait_vb();
static void wrt_clk_bit(unsigned int value);
static void init_clock(unsigned long setup, unsigned short crtcport);
#else
static double genratio();
static double f();
#if 0
static void prtbinary();
#endif
static void wait_vb();
static void wrt_clk_bit();
static void init_clock();
#endif
void AltICD2061SetClock(frequency, select)
register long frequency; /* in Hz */
int select;
{
unsigned int m, mval, ival;
int i;
long dwv;
double realval;
double freq, fvco;
double dev, devx;
double delta, deltax;
unsigned int p, q;
unsigned int bestp, bestq;
unsigned char tmp;
crtcaddr=(inb(0x3CC) & 0x01) ? 0x3D4 : 0x3B4;
outb(crtcaddr, 0x11); /* Unlock CRTC registers */
tmp = inb(crtcaddr + 1);
outb(crtcaddr + 1, tmp & ~0x80);
outw(crtcaddr, 0x4838); /* Unlock S3 register set */
outw(crtcaddr, 0xA039);
clknum = select;
freq = ((double)frequency)/1000000.0;
if (freq > range[14])
freq =range[14];
else if (freq <= 6.99)
freq = 7.0;
/*
* Calculate values to load into ICD 2061A clock chip to set frequency
*/
delta = 999.0;
dev = 999.0;
ival = 99;
mval = 99;
fvco = freq / 2;
for (m = 0; m < 8; m++) {
fvco *= 2.0;
for (i = 14; i >= 0; i--)
if (fvco >= range[i])
break;
if (i < 0)
continue;
if (i == 14)
break;
devx = (fvco - (range[i] + range[i+1])/2)/fvco;
if (devx < 0)
devx = -devx;
deltax = genratio(&p, &q, fvco);
if (delta < deltax)
continue;
if (deltax < delta || devx < dev) {
bestp = p;
bestq = q;
delta = deltax;
dev = devx;
ival = i;
mval = m;
}
}
fvco = fref;
for (m=0; m<mval; m++)
fvco /= 2.0;
realval = f(bestp, bestq, fvco);
dwv = ((((((long)ival << 7) | bestp) << 3) | mval) << 7) | bestq;
/*
* Write ICD 2061A clock chip
*/
init_clock(((unsigned long)dwv) | (((long)clknum) << 21), crtcaddr);
wait_vb();
wait_vb();
wait_vb();
wait_vb();
wait_vb();
wait_vb();
wait_vb(); /* 0.10 second delay... */
}
static double f(p, q, base)
unsigned int p;
unsigned int q;
double base;
{
return(base * (p + 3)/(q + 2));
}
static double genratio(p, q, tgt)
unsigned int *p;
unsigned int *q;
double tgt;
{
int k, m;
double test, mindiff;
unsigned int mmax;
mindiff = 999999999.0;
for (k = 13; k < 69; k++) { /* q={15..71}:Constraint 2 on page 14 */
m = 50.0*k/fref - 3;
if (m < 0)
m = 0;
mmax = 120*k/fref - 3; /* m..mmax is constraint 3 on page 14 */
if (mmax > 128)
mmax = 128;
while (m < mmax) {
test = f(m, k, fref) - tgt;
if (test < 0) test = -test;
if (mindiff > test) {
mindiff = test;
*p = m;
*q = k;
}
m++;
}
}
return (mindiff);
}
#if 0
static void prtbinary(size, val)
unsigned int size;
unsigned int val;
{
unsigned int mask;
int k;
mask = 1;
for (k=size; --k > 0 || mask <= val/2;)
mask <<= 1;
while (mask) {
fputc((mask&val)? '1': '0' , stderr);
mask >>= 1;
}
}
#endif
static void wait_vb()
{
while ((inb(crtcaddr+6) & 0x08) == 0)
;
while (inb(crtcaddr+6) & 0x08)
;
}
#ifdef __STDC__
static void init_clock(unsigned long setup, unsigned short crtcport)
#else
static void init_clock(setup, crtcport)
unsigned long setup;
unsigned short crtcport;
#endif
{
unsigned char nclk[2], clk[2];
unsigned short restore42;
unsigned short oldclk;
unsigned short bitval;
int i;
unsigned char c;
#ifndef PCVT_STANDALONE
(void)xf86DisableInterrupts();
#endif
oldclk = inb(0x3CC);
outb(crtcport, 0x42);
restore42 = inb(crtcport+1);
outw(0x3C4, 0x0100);
outb(0x3C4, 1);
c = inb(0x3C5);
outb(0x3C5, 0x20 | c);
outb(crtcport, 0x42);
outb(crtcport+1, 0x03);
outw(0x3C4, 0x0300);
nclk[0] = oldclk & 0xF3;
nclk[1] = nclk[0] | 0x08;
clk[0] = nclk[0] | 0x04;
clk[1] = nclk[0] | 0x0C;
outb(crtcport, 0x42);
i = inw(crtcport);
outw(0x3C4, 0x0100);
wrt_clk_bit(oldclk | 0x08);
wrt_clk_bit(oldclk | 0x0C);
for (i=0; i<5; i++) {
wrt_clk_bit(nclk[1]);
wrt_clk_bit(clk[1]);
}
wrt_clk_bit(nclk[1]);
wrt_clk_bit(nclk[0]);
wrt_clk_bit(clk[0]);
wrt_clk_bit(nclk[0]);
wrt_clk_bit(clk[0]);
for (i=0; i<24; i++) {
bitval = setup & 0x01;
setup >>= 1;
wrt_clk_bit(clk[1-bitval]);
wrt_clk_bit(nclk[1-bitval]);
wrt_clk_bit(nclk[bitval]);
wrt_clk_bit(clk[bitval]);
}
wrt_clk_bit(clk[1]);
wrt_clk_bit(nclk[1]);
wrt_clk_bit(clk[1]);
outb(0x3C4, 1);
c = inb(0x3C5);
outb(0x3C5, 0xDF & c);
outb(crtcport, 0x42);
outb(crtcport+1, restore42);
outb(0x3C2, oldclk);
outw(0x3C4, 0x0300);
#ifndef PCVT_STANDALONE
xf86EnableInterrupts();
#endif
}
static void wrt_clk_bit(value)
unsigned int value;
{
int j;
outb(0x3C2, value);
for (j=2; --j; )
inb(0x200);
}

View File

@ -1,13 +0,0 @@
PROG= set2061
SRCS= main.c ICD2061Aalt.c
CFLAGS+= -DGCCUSESGAS -DPCVT_STANDALONE
NOMAN=
all: $(PROG)
install:
@${ECHO} "set2061 is not installed automatically ...."
.include <bsd.prog.mk>
$(PROG): compiler.h

View File

@ -1,22 +0,0 @@
CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION
THE USE OF THIS PROGRAM MAY DESTROY YOUR MONITOR !!!
====================================================
IF YOU DON'T KNOW WHAT YOU ARE DOING, STAY AWAY FROM IT !!!
===========================================================
Read the file "CAUTION" before proceeding !!!
The files:
ICD2061Aalt.c and
compiler.h
come from the Xfree86 2.1 distribution and have been slightly modified to
fit in a non-XFree environment.
I use it to program the clock generator ICD2061a on my S3 928 based ELSA
Winner VGA board to 40MHz for clock generator #2: set2061 -n2 -f40000000.
This enables me to use 132 columns mode on this VGA board.

View File

@ -1,341 +0,0 @@
/* $XFree86: mit/server/ddx/x386/common/compiler.h,v 2.3 1993/10/03 14:55:28 dawes Exp $ */
/*
* Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting
* documentation, and that the name of Thomas Roell not be used in
* advertising or publicity pertaining to distribution of the software without
* specific, written prior permission. Thomas Roell makes no representations
* about the suitability of this software for any purpose. It is provided
* "as is" without express or implied warranty.
*
* THOMAS ROELL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
* EVENT SHALL THOMAS ROELL BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*
* $Header: /home/ncvs/src/usr.sbin/pcvt/set2061/compiler.h,v 1.1.1.1 1995/02/05 13:49:25 jkh Exp $
*/
#ifndef _COMPILER_H
#define _COMPILER_H
#ifndef __STDC__
# ifdef signed
# undef signed
# endif
# ifdef volatile
# undef volatile
# endif
# ifdef const
# undef const
# endif
# define signed /**/
# ifdef __GNUC__
# define volatile __volatile__
# define const __const__
# else
# define const /**/
# endif /* __GNUC__ */
#endif /* !__STDC__ */
#ifdef NO_INLINE
extern void outb();
extern void outw();
extern unsigned int inb();
extern unsigned int inw();
#if NeedFunctionPrototypes
extern unsigned char rdinx(unsigned short, unsigned char);
extern void wrinx(unsigned short, unsigned char, unsigned char);
extern void modinx(unsigned short, unsigned char, unsigned char, unsigned char);
extern int testrg(unsigned short, unsigned char);
extern int textinx2(unsigned short, unsigned char, unsigned char);
extern int textinx(unsigned short, unsigned char);
#else /* NeedFunctionProtoypes */
extern unsigned char rdinx();
extern void wrinx();
extern void modinx();
extern int testrg();
extern int textinx2();
extern int textinx();
#endif /* NeedFunctionProtoypes */
#else /* NO_INLINE */
#ifdef __GNUC__
#ifndef FAKEIT
#ifdef GCCUSESGAS
/*
* If gcc uses gas rather than the native assembler, the syntax of these
* inlines has to be different. DHD
*/
static __inline__ void
outb(port, val)
short port;
char val;
{
__asm__ __volatile__("outb %0,%1" : :"a" (val), "d" (port));
}
static __inline__ void
outw(port, val)
short port;
short val;
{
__asm__ __volatile__("outw %0,%1" : :"a" (val), "d" (port));
}
static __inline__ unsigned int
inb(port)
short port;
{
unsigned char ret;
__asm__ __volatile__("inb %1,%0" :
"=a" (ret) :
"d" (port));
return ret;
}
static __inline__ unsigned int
inw(port)
short port;
{
unsigned short ret;
__asm__ __volatile__("inw %1,%0" :
"=a" (ret) :
"d" (port));
return ret;
}
#else /* GCCUSESGAS */
static __inline__ void
outb(port, val)
short port;
char val;
{
__asm__ __volatile__("out%B0 (%1)" : :"a" (val), "d" (port));
}
static __inline__ void
outw(port, val)
short port;
short val;
{
__asm__ __volatile__("out%W0 (%1)" : :"a" (val), "d" (port));
}
static __inline__ unsigned int
inb(port)
short port;
{
unsigned char ret;
__asm__ __volatile__("in%B0 (%1)" :
"=a" (ret) :
"d" (port));
return ret;
}
static __inline__ unsigned int
inw(port)
short port;
{
unsigned short ret;
__asm__ __volatile__("in%W0 (%1)" :
"=a" (ret) :
"d" (port));
return ret;
}
#endif /* GCCUSESGAS */
#else /* FAKEIT */
static __inline__ void
outb(port, val)
short port;
char val;
{
}
static __inline__ void
outw(port, val)
short port;
short val;
{
}
static __inline__ unsigned int
inb(port)
short port;
{
return 0;
}
static __inline__ unsigned int
inw(port)
short port;
{
return 0;
}
#endif /* FAKEIT */
#else /* __GNUC__ */
#if !defined(AMOEBA) && !defined(_MINIX)
# if defined(__STDC__) && (__STDC__ == 1)
# define asm __asm
# endif
# ifdef SVR4
# include <sys/types.h>
# ifndef __USLC__
# define __USLC__
# endif
# endif
# include <sys/inline.h>
#endif
#endif
/*
*-----------------------------------------------------------------------
* Port manipulation convenience functions
*-----------------------------------------------------------------------
*/
#ifndef __GNUC__
#define __inline__ /**/
#endif
/*
* rdinx - read the indexed byte port 'port', index 'ind', and return its value
*/
static __inline__ unsigned char
#ifdef __STDC__
rdinx(unsigned short port, unsigned char ind)
#else
rdinx(port, ind)
unsigned short port;
unsigned char ind;
#endif
{
if (port == 0x3C0) /* reset attribute flip-flop */
(void) inb(0x3DA);
outb(port, ind);
return(inb(port+1));
}
/*
* wrinx - write 'val' to port 'port', index 'ind'
*/
static __inline__ void
#ifdef __STDC__
wrinx(unsigned short port, unsigned char ind, unsigned char val)
#else
wrinx(port, ind, val)
unsigned short port;
unsigned char ind, val;
#endif
{
outb(port, ind);
outb(port+1, val);
}
/*
* modinx - in register 'port', index 'ind', set the bits in 'mask' as in 'new';
* the other bits are unchanged.
*/
static __inline__ void
#ifdef __STDC__
modinx(unsigned short port, unsigned char ind,
unsigned char mask, unsigned char new)
#else
modinx(port, ind, mask, new)
unsigned short port;
unsigned char ind, mask, new;
#endif
{
unsigned char tmp;
tmp = (rdinx(port, ind) & ~mask) | (new & mask);
wrinx(port, ind, tmp);
}
/*
* tstrg - returns true iff the bits in 'mask' of register 'port' are
* readable & writable.
*/
static __inline__ int
#ifdef __STDC__
testrg(unsigned short port, unsigned char mask)
#else
tstrg(port, mask)
unsigned short port;
unsigned char mask;
#endif
{
unsigned char old, new1, new2;
old = inb(port);
outb(port, old & ~mask);
new1 = inb(port) & mask;
outb(port, old | mask);
new2 = inb(port) & mask;
outb(port, old);
return((new1 == 0) && (new2 == mask));
}
/*
* testinx2 - returns true iff the bits in 'mask' of register 'port', index
* 'ind' are readable & writable.
*/
static __inline__ int
#ifdef __STDC__
testinx2(unsigned short port, unsigned char ind, unsigned char mask)
#else
testinx2(port, ind, mask)
unsigned short port;
unsigned char ind, mask;
#endif
{
unsigned char old, new1, new2;
old = rdinx(port, ind);
wrinx(port, ind, old & ~mask);
new1 = rdinx(port, ind) & mask;
wrinx(port, ind, old | mask);
new2 = rdinx(port, ind) & mask;
wrinx(port, ind, old);
return((new1 == 0) && (new2 == mask));
}
/*
* testinx - returns true iff all bits of register 'port', index 'ind' are
* readable & writable.
*/
static __inline__ int
#ifdef __STDC__
testinx(unsigned short port, unsigned char ind)
#else
testinx(port, ind, mask)
unsigned short port;
unsigned char ind;
#endif
{
return(testinx2(port, ind, 0xFF));
}
#endif /* NO_INLINE */
#endif /* _COMPILER_H */

View File

@ -1,112 +0,0 @@
/*
* Copyright (c) 1994 Hellmuth Michaelis
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by
* Hellmuth Michaelis
* 4. The name authors may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
static char *id =
"@(#)set2061.c, 1.00, Last Edit-Date: [Sun Jan 15 19:52:05 1995]";
/*---------------------------------------------------------------------------*
*
* history:
*
* -hm start using 132 columns on my Elsa Winner
*
*---------------------------------------------------------------------------*/
#include <stdio.h>
#include <fcntl.h>
#include <machine/pcvt_ioctl.h>
#define DEFAULTFD 0
void AltICD2061SetClock(long frequency, int select);
main(argc,argv)
int argc;
char *argv[];
{
extern int optind;
extern int opterr;
extern char *optarg;
int fd;
int c;
long freq = -1;
int no = -1;
while( (c = getopt(argc, argv, "f:n:")) != -1)
{
switch(c)
{
case 'f':
freq = atoi(optarg);
break;
case 'n':
no = atoi(optarg);
break;
case '?':
default:
usage();
break;
}
}
if(freq == -1 || no == -1)
usage();
if((fd = open("/dev/console", O_RDONLY)) < 0)
fd = DEFAULTFD;
if(ioctl(fd, KDENABIO, 0) < 0)
{
perror("ioctl(KDENABIO)");
return 1;
}
AltICD2061SetClock(freq, no);
(void)ioctl(fd, KDDISABIO, 0);
exit(0);
}
usage()
{
fprintf(stderr,"\nset2061 - program the ICD2061 video clock chip\n");
fprintf(stderr,"usage: set2061 -f <freq> -n <no>\n");
fprintf(stderr," -f <freq> frequency in Hz\n");
fprintf(stderr," -n <no> clock generator number\n");
exit(1);
}

View File

@ -1,3 +0,0 @@
PROG= vt220keys
.include <bsd.prog.mk>

View File

@ -1,131 +0,0 @@
.TH VT220KEYS 1
.UC 4
.SH NAME
vt220keys \- define SHIFTED function keys on VT220 terminal
.SH SYNTAX
.B vt220keys
[
.B \-cil
]
[ keyname keystring ] ...
.SH DESCRIPTION
.I Vt220keys
sets up a "vt220 terminal" in vt200 mode to allow user
definition of the SHIFTED function keys. Each
\f2keyname\f1 specified on the command line will be loaded with
the corresponding \f2keystring\f1.
A \f2keyname\f1 is one of the following "words":
F6 F7 F8 F9 F10 F11 ESC F12 BS F13 LF F14 HELP DO F17 F18 F19 F20.
\f2Keystrings\f1
must be quoted if spaces, tabs, or shell metacharacters are included.
.PP
.B Vt220keys
expects to receive some combination of option flags and/or
argument pair(s), otherwise a usage message
is printed.
.PP
The options are:
.TP
.B \-c
Clears all SHIFTED function key definitions before setting them to user
defined strings.
.TP
.B \-i
Read the initialization file
.I $HOME/.vt220rc
for SHIFTED function key definitions. This is done before any
argument pair specified on the command line is processed.
Each line in the file must consist of two fields (separated by spaces
or tabs) where the first field is the
\f2keyname\f1 and the second field is the \f2keystring\f1.
The second field extends to the end of the line, thus a
\f2keystring\f1
may include spaces or tabs. A newline (return) may be specified
within the string by using the C Language notation for newline (\\n).
.TP
.B \-l
Locks the function keys from further definition.
Locking occurs after processing the initialization file (if the "i"
option is specified) and any argument
pairs.
The only way
to unlock is by turning the power off.
.SH EXAMPLES
vt220keys -ci
.br
vt220keys F6 'nroff -ms '
.br
vt220keys -i F20 'cc -O -c '
.br
vt220keys -l HELP man
.SH "OTHER FEATURES"
Pressing the function keys without using the shift key, generates
a string of characters. With
\f2csh\f1(1) this string can be aliased to some command. For example:
.br
alias ^[[17~ "ls -CR | more"
.br
where ^[[17~ is what is generated by pressing the F6 key. Therefore
F6 can perform two commands, depending if pressed with/without the SHIFT
key.
.PP
.B Vt220keys
can be called from your .login or .profile file. Typically an user
will create a initialization file and include a line like
.br
vt220keys -ci
.br
OR
.br
vt220keys -cil
.br
in the above mentioned files. This way the SHIFTED function keys
will be set to your favorite commands when logging in.
.SH CAVEATS
If the SHIFTED function keys are unlocked, redefinition of a SHIFTED
function key will rewrite the old string.
.PP
There are 256 bytes available for the SHIFTED function keys. Space is
supplied on a first-come/first-serve basis. After the 256 bytes are
used, you can't define any more keys unless space is cleared. This
can be done by redefining a key to contain a string of fewer bytes.
.PP
All key definitions are stored in volatile RAM, and are lost when
terminal power is lost.
.PP
The ESC key (unshifted) no longer generates the proper escape character. This
is of particular importance since many editors require use of the
ESC key. Here are some available alternatives:
.sp
.in +.5i
The escape character can be generated by typing ^[ (control-[).
.sp
Use
.B vt220keys
as follows (note ^[ is control-[)
.br
.in +.5i
vt220keys ESC '^['
.in
.br
This will require you
to press the SHIFT key and ESC to generate the escape sequence.
.sp
Some editors, allow other character(s) to be substituted for the
escape character. For example with
.B emacs
include this line in your .emacs_pro:
.br
(bind-to-key "ESC-prefix" "\\033[23~")
.br
Thus when the ESC key is pressed, emacs will allow the characters
generated (^[[23~) to perform the same function as the escape
character.
.in
.SH FILES
$HOME/.vt220rc \- initialization file
.SH "SEE ALSO"
VT220 Programmer Reference Manual
.br
VT220 Programmer Pocket Guide

View File

@ -1,297 +0,0 @@
/*
* Trivial program to load VT220 Function keys with strings,
* note that the values only get sent when the key is shifted
* (shoulda been an option to flip the shift set like the Z19!)
*
* Typing no args gives help, basically pairs of keyname/value
* strings.
*
* Author, Author: Barry Shein, Boston University
*
* HISTORY
{1} 30-Oct-85 Kenneth J. Lester (ken) at ektools
Added the necessary code to read an initialization file. This
should make it easier to used this program. Also added code
that will set-up the terminal in vt200 (this saves the user the
trouble of checking if the set-up is in vt200).
Restructed the main function to use getopt, for argument
processing.
Alterated usage function to include new "i" option (init file)
-hm minor modifications for pcvt 2.0 release
*/
#include <stdio.h>
#include <ctype.h>
/*
* The default toupper() macro is stupid, will toupper anything
*/
#ifdef toupper
#undef toupper
#endif
#define toupper(c) (islower(c) ? ((c)-' ') : c)
#define VT200_7BIT 1
#define ESC 033
#define INITFILE ".vt220rc"
struct keynames {
char *name ;
char *string ;
} keys[] = {
"F6", "17",
"F7", "18",
"F8", "19",
"F9", "20",
"F10", "21",
"F11", "23",
"ESC", "23",
"F12", "24",
"BS", "24",
"F13", "25",
"LF", "25",
"F14", "26",
"HELP", "28",
"DO", "29",
"F17", "31",
"F18", "32",
"F19", "33",
"F20", "34",
NULL, NULL
};
char prog[BUFSIZ];
main(argc,argv)
int argc;
char *argv[];
{
/* these are defined in the getopt routine */
extern char *optarg; /* argument give to an option */
extern int optind; /* argv index after option processing */
int option; /* option character returned by getopt */
int initf = 0; /* read initialization file */
int lockf = 0; /* lock keys after loading strings */
int clearf = 0; /* clear all keys before loading strings */
char *strcpy();
(void) strcpy(prog, *argv); /* store program name */
if(argc == 1) usage(); /* program requires options */
/* get options */
while ((option = getopt(argc, argv, "cli")) != -1)
switch(option)
{
case 'c' :
clearf++;
break;
case 'l' :
lockf++;
break;
case 'i' :
initf++;
break;
case '?' :
usage();
}
if (VT200_7BIT)
printf("\033[62;1\"p"); /* vt200 7 bits */
else
printf("\033[62;2\"p"); /* vt200 8 bits */
if(clearf) clearkeys();
if (initf) getinit();
/* process {key, key string} pairs. Note optind is index to argv
for first pair. By adding 1 to optind insures that a pair exists
i.e. the last key has a key string. */
while(optind + 1 < argc)
{
dokey(argv[optind], argv[optind+1]);
optind += 2;
}
if(lockf) lockkeys();
exit(0);
}
/****************************************************************************/
/*
* Load the VT220 SHIFT-FNKEY value, the basic pattern is
* "\EP1;1|"+KEYNAME+"/"+VAL_AS_HEX+"\E\\"
* that is, literally what is in quotes (w/o quotes) then the
* name of the key from the keytable above (a numeric string)
* then a slash, then the string value as hex pairs then ESC-BACKSLASH
*
* Note: you can gang together key defns with semicolons but that
* would complicate things, especially error handling, so do it all
* for each pair, who cares, really.
*/
dokey(nm,val) char *nm, *val;
{
register char *scr;
register struct keynames *kp;
for(scr = nm; *scr = toupper(*scr); scr++)
;
for(kp = keys; kp->name != NULL; kp++)
if(strcmp(nm,kp->name) == 0) {
printf("%cP1;1|%s/",ESC,kp->string);
while(*val) printf("%02x",*val++);
printf("%c\\",ESC);
fflush(stdout);
return;
}
fprintf(stderr,"Bad key name: %s\n",nm);
usage(); /* bad key name, give up */
}
/****************************************************************************/
clearkeys()
{
printf("%cP0;1|%c\\",ESC,ESC);
fflush(stdout);
}
/****************************************************************************/
lockkeys()
{
printf("%cP1;0|%c\\",ESC,ESC);
fflush(stdout);
}
/****************************************************************************/
usage()
{
int i;
fprintf(stderr,"Usage: %s [-cil] [keyname string keyname string...]\n\n",prog);
fprintf(stderr,"The following options are available\n");
fprintf(stderr,"\t-c\tclears keys first\n");
fprintf(stderr,"\t-l\t[sets then] locks further setting\n");
fprintf(stderr,"\t-i\tfirst read initialization file $HOME/%s\n",INITFILE);
fprintf(stderr,"(note that the only way to unlock is via Set-Up)\n\n");
fprintf(stderr,"Keyname is one of:\n\t");
for(i=0; keys[i].name != NULL; i++)
fprintf(stderr,"%s ",keys[i].name);
fprintf(stderr,"\nKeyname is SHIFTED function key that sends the string\n\n");
fprintf(stderr,"Strings may need quoting to protect from shell\n");
fprintf(stderr,"You must specify an option or key,string pairs\n\n");
exit(1);
}
/****************************************************************************/
/* This routine process the INITFILE. This file expects lines in the format
<ws> keyname ws string
Where ws is white space (spaces or tabs) and <ws> is optional white space.
The string may include spaces or tabs and need not be quoted. If the
string has the sequence of "\n" then a newline character is included in
the string.
examples:
F6 ls -lg\n
F7 uulog -s
*/
#include <sys/types.h>
#include <sys/stat.h>
getinit()
{
char *home; /* user's home directory */
char path[BUFSIZ]; /* full path name of init file */
char buf[BUFSIZ]; /* buffer to hold 1 line from init file */
char key[BUFSIZ]; /* buffer, to hold specified fcn key */
char keystr[BUFSIZ]; /* string associated with fcn key */
char *ptr; /* pointer to transverse buf */
int i, j; /* array indices */
int statflag; /* whether init file is regular & readable */
struct stat statbuf; /* stat of the init file */
FILE *fp; /* file pointer to init file */
/* system calls and subroutines */
FILE *fopen();
char *strcpy();
char *strcat();
char *fgets();
char *getenv();
/* construct full path name for init file */
home = getenv("HOME");
(void) strcpy(path, home);
(void) strcat(path,"/");
(void) strcat(path,INITFILE);
/* check status if init file */
if (stat(path, &statbuf) != -1)
{
statflag = statbuf.st_mode & S_IFREG && statbuf.st_mode & S_IREAD;
if (!statflag || (fp = fopen(path, "r")) == NULL)
{
fprintf(stderr, "couldn't open initalization file: %s\n", path);
exit(1);
}
/* process lines from init file */
while (fgets(buf, BUFSIZ, fp) != NULL)
{
/* variable initializations */
i = 0; j = 0;
key[0] = '\0'; keystr[0] = '\0';
ptr = buf;
while (*ptr == ' ' || *ptr == '\t') ptr++; /*skip whitespace*/
if (*ptr == '\n') break; /* we hit an emtpy line */
while (!isspace(*ptr) && *ptr != '\0') /* get keyname */
key[i++] = *ptr++;
key[i] = '\0'; /* place EOS in buffer */
while (*ptr == ' ' || *ptr == '\t') ptr++; /*skip whitespace*/
while (*ptr != '\n' && *ptr != '\0') /* get string */
{
/* check if string is to include newline i.e. \n */
if (*ptr == '\\' && *(ptr+1) == 'n')
{
keystr[j] = '\012';
ptr++;
}
else
keystr[j] = *ptr;
j++; ptr++;
}
keystr[j] = '\0'; /* place EOS in buffer */
dokey(key, keystr); /* load key with string */
}
}
else
{
fprintf(stderr, "init file %s not found\n\n", path);
usage();
}
}

View File

@ -1,28 +0,0 @@
CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION
CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION
CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION
THE USE OF THIS PROGRAM MAY DESTROY YOUR MONITOR !!!
====================================================
IF YOU DON'T KNOW WHAT YOU ARE DOING, STAY AWAY FROM IT !!!
===========================================================
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION
CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION
CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION CAUTION

View File

@ -1,38 +0,0 @@
# $Id$
.if !exists(${.CURDIR}/../Makefile.inc)
error:
@echo
@echo " You MUST link/copy"
@echo
@echo " ../Makefile.inc.NetBSD or ../Makefile.inc.FreeBSD"
@echo
@echo " to ../Makefile.inc before you can proceed !"
@echo
.else
PROG= vgaio
MAN8= vgaio.${MAN8EXT}
SRCS= vgaio.y lex.l y.tab.h
YACC= yacc
#YFLAGS+= -yd # Bison
#YFLAGS+= -v # verbose
LFLAGS+= -I
DPADD= ${LIBM} ${LIBY} ${LIBL}
LDADD= -lm -ly -ll
CFLAGS= -O2 # due to a gcc bug, it compiles only with -O2!
CFLAGS+= -I${.OBJDIR} -I${.CURDIR}
CLEANFILES+= y.output # comment file from bison
install:
@${ECHO} "vgaio is not installed automatically ...."
.include <bsd.prog.mk>
.endif

View File

@ -1,82 +0,0 @@
%{
/*
* Copyright (c) 1994 Joerg Wunsch
*
* All rights reserved.
*
* This program is free software.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Joerg Wunsch
* 4. The name of the developer may not be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ident "$Header: /b/source/CVS/src/sys/arch/i386/isa/pcvt/Util/vgaio/lex.l,v 1.1 1994/03/29 02:47:20 mycroft Exp $"
/*
* $Log: lex.l,v $
* Revision 1.1 1994/03/29 02:47:20 mycroft
* pcvt 3.0, with some performance enhancements by Joerg Wunsch and me.
*
* Revision 1.2 1994/01/08 17:42:58 j
* cleanup
* made multiple commands per line work
* wrote man page
*
* Revision 1.3 21.12.1994 -hm
* Added mi command for accessing the misc out register
*/
#include <stdio.h>
#include <stdlib.h>
#include "vgaio.h"
#include "y.tab.h"
extern YYSTYPE yylval;
%}
D [0-9a-fA-F]
%%
cr|CR { return CR; }
ar|AR { return AR; }
gr|GR { return GR; }
sr|SR { return SR; }
mi|MI { return MI; }
{D}({D}*) { sscanf(yytext, "%x", &yylval.num); return NUM; }
[ \t] { /* ignore */ }
\n { return NEWLINE; }
. { return yytext[0]; }

Some files were not shown because too many files have changed in this diff Show More