After almost 5 years, it is now time to decommission pcvt. Bon voyage.

This commit is contained in:
mycroft 2000-06-11 02:34:23 +00:00
parent ea313649ff
commit 6e7ce465e9
107 changed files with 0 additions and 34120 deletions

View File

@ -1,121 +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 ... :-)
Wolfgang 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 !!!
J.T. Conklin
for forwarding the pcvt-related NetBSD PR's to me !
John Kohl
for producing patches for NetBSD-current !

View File

@ -1,193 +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
Tim Burke, Mark A. Parenti, Al Wojtas, "Writing Device Drivers,
Tutorial and Reference", Digital Press 1995
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,57 +0,0 @@
List of known bugs Last Edit-Date: [Tue Sep 5 17:52:05 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 ....
------------------------------------------- --------------------------------
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 !
------------------------------------------- --------------------------------

File diff suppressed because it is too large Load Diff

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,405 +0,0 @@
FAQ's, Notes and Hints Last Edit-Date: [Tue Oct 3 11:05:55 1995]
--------------------------------------------------------------------------------
How to start the X server at boot time in a dedicated virtual screen
================================================================================
> I'm trying to keep an xdm session open on screen 4 at all times so I
> don't have to keep starting X whenever I login. However, I don't want
> the xdm login screen to be the default since I usually prefer
> character mode screens.
>
> I'm using the pcvt console driver and in rc.local I'm doing this:
>
> /usr/sbin/scon -c 3 # go to screen 4
> /usr/X11R6/bin/xdm -daemon # fire up xdm
> sleep 10 # give xdm some time to start
> /usr/sbin/scon -c 0 # come back to preferred login screen
>
> When I reboot, I see xdm start, come up with the graphical login, then
> switch back to screen 1. However, if I hit CTRL+ALT+F4, the xdm
> screen is gone and I'm met with just a blank (character mode) screen.
Hmm - I'm doing this all the time with 2.0.5 on the 8th virtual screen.
Did you disable the getty for the corresponding screen in /etc/ttys ?
You need a configuration for xdm in /usr/X11R6/lib/X11/xdm/Xservers similar
to this (from my system):
:0 local /usr/X11R6/bin/X vt8
My (part of) rc.local looks like this for starting xdm at boot time on
screen 8:
[....]
# path for xdm (X11R6)
XDMP=/usr/X11R6/bin
# path for xdm (X11R5)
#XDMP=/usr/X386/bin
# set to YES to start xdm on screen 8
xdm_start=YES
#xdm_start=NO
[....]
#--------------------------------------------------
# if desired, start xdm on screen 8
#--------------------------------------------------
if [ X${xdm_start} = X"YES" -a -x $XDMP/xdm ]
then
$SCONP/scon -d /dev/ttyv7
$XDMP/xdm
sleep 10
$SCONP/scon -d /dev/ttyv0
fi
pcvt (german) keyboard remapping not adopted by X server
================================================================================
1) make shure your xterm is able to display national (8-bit) characters,
i.e. issue something like "stty cs8 -parenb -istrip".
2) and more important, in the XFree86 3.x configuration file XF86Config,
you have to enable the AltGr - Key by uncommenting the line:
RightAlt ModeShift
in the Keyboard Section.
Keyboard not working with pcvt
================================================================================
From Leo Bicknell (bicknell@ufp.org):
I have two systems I am trying to use your PCVT driver on
running NetBSD 1.0. One is a plain vanilla PC, but it has a
Northgate Omnikey Ultra programmable keyboard, the other is a IBM
Thinkpad 755c laptop. Both exhibit the same behavior. Under scan
set 1 they both are completely broken. Virtual consoles don't work
at all, in fact on the laptop none of the keys work properly.
After using PCVT_SCANSET=2 both keyboards are running (-hm).
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)
Scancode 2 is also reported to work for a Thinkpad 755c (-hm)
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 to compile pcvt with:
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,160 +0,0 @@
Note: As of FreeBSD 2.0.5 pcvt is integrated into the FreeBSD source tree and
the item #1 no longer applies!
How to install the pcvt driver on a FreeBSD 2.0 machine (pcvt rel. 3.20)
-------------------------------------------------------------------------------
last edit-date: [Fri Jun 30 20:35:28 1995]
(1) Copy the driver distribution files into appropriate directories:
(1a) make a fresh directory
mkdir /usr/src/sys/i386/isa/pcvt
cd /usr/src/sys/i386/isa/pcvt
(1b) copy the pcvt distribution (or unshar it) into this newly
created directory (/usr/src/sys/i386/isa/pcvt)
(1c) copy the ioctl-header file into its destination directory
cp pcvt_ioctl.h /usr/include/machine
(2) You have the choice of two keyboard layouts regarding the placement of
the vt220 function keys and the HELP and DO keys.
Both configurations are documented in the files Keyboard.HP and Keyboard.VT
respectively.
Decide which one to use and set the "#define" of PCVT_VT220KEYB to
compile the one you choosed.(see also pcvt_conf.h and pcvt_kbd.c)
Note: the preferable way to do all option hacking is to add "options"
lines to the kernel's config file. See the pcvt(4) man page (in this
directory).
(3) There are several other configuration "#define"-able options located at
the beginning of pcvt_conf.h. "user"-settable options all start with
"PCVT_".
Please (!!!) read the comments for them in the header file !
(4) Add a line
option "PCVT_FREEBSD=200"
into your kernel config file. The quotes are important. The number
should represent the version of your kernel, "200" stands for "2.00",
which is the official version number for FreeBSD 2.0 (Release).
(5) Edit your kernel configuration file and comment the following line out
by placing a "#" in front of it:
device sc0 at isa? port "IO_KBD" tty irq 1 vector scintr
add a new config-line just below it:
device vt0 at isa? port "IO_KBD" tty irq 1 vector pcrint
The lines in my config file look like this:
#device sc0 at isa? port "IO_KBD" tty irq 1 vector scintr
device vt0 at isa? port "IO_KBD" tty irq 1 vector pcrint
You can use now either the pccons driver or the pcvt driver (or possibly
other console drivers too!) by simply un-commenting ONE of them.
YOU CANNOT USE/UNCOMMENT MORE THAN __ONE__ CONSOLE DRIVER !!!
(6) Configure a new kernel using config(8).
(7) Run "make depend" for the new kernel !!!!
(8) Compile the new kernel
(9) Test the new kernel and check whether it still works with your
keyboard and your videoboard. Testing could be done best by entering
the kernel name (e.g. /kernel.pcvt) at the boot prompt, append a
"-s" flag to prevent it from booting multi-user! The multi-user
boot phase requires the kernel to be named "/kernel".
If the kernel works, rename the old kernel (you don't need it any
more?), link the new one to "/kernel", and reboot up to multi-user.
(10) Change into the distribution subdirectory "Util".
Copy Makefile.inc.FreeBSD to Makefile.inc and edit Makefile.inc
to suit your needs, especially have a look at "MANDIR" and "BINDIR".
Then execute "make". This makes all the utilities in their directories.
when you are satisfied with the results, execute "make install". This
installs all programs in all subdirs in "BINDIR" and all manual pages
in "MANDIR", all fonts in "FONTDIR" and the keycap database in "CAPDIR".
NB: unless you've got this distribution along with a FreeBSD distrib-
ution (where it is pre-installed:-), you WILL have to edit Makefile.inc
in order to get the man pages installed in source form.
Change into the distribution subdirectory "Doc" and edit Makefile
to suit your needs. Then execute "make" to prepare the manpage for
the driver.
(11) If necessary, edit /usr/share/misc/keycap to match your keyboard.
Keycap uses special codes which are documented in Util/kcon/keycap.3
and Util/kcon/keycap.5. Also have a look at Util/kcon/kcon.1.
(12) There are example termcap entries for the various screen resolutions
in the file "Etc/Termcap". Integrate them into your termcap file if
you don't have a "normal" vt220 entry or want to use pcvt's extensions.
Don't forget to run cap_mkdb after changing your termcap file !
NOTE: pcvt works with an unmodified VT220 termcap entry !
(it was written to do that .... ;-)
(13) To use the virtual terminals, one must "mknod" this devices, they have
major number 12 and minor numbers 0 to n. The MAKEDEV script in the
/dev directory is suitable for this task, just change into the /dev
directory and execute 'sh ./MAKEDEV vty8' to make devicefiles for 8
virtual terminals.
If you want to use the mouse emulator, see the comments in pcvt(4).
(14) edit /etc/ttys to enable login on the virtual consoles, mine looks like
this:
ttyv0 "/usr/libexec/getty Pc" pcvt25h on secure
ttyv1 "/usr/libexec/getty Pc" pcvt25h on secure
ttyv2 "/usr/libexec/getty Pc" pcvt25h on secure
ttyv3 "/usr/libexec/getty Pc" pcvt25h on secure
ttyv4 "/usr/libexec/getty Pc" pcvt25h on secure
ttyv5 "/usr/libexec/getty Pc" pcvt25h on secure
ttyv6 "/usr/libexec/getty Pc" pcvt25h on secure
ttyv7 "/usr/libexec/getty Pc" pcvt25h on secure
(15) Edit /etc/rc.local to download fonts and establish emulation modes, mine
looks like the example provided in Etc/rc.local
(16) For FreeBSD 2.0 there is a patch to cons.c necessary, if you don't
apply this patch, you don't have a console device; Joerg Wunsch
provided this patch:
*** cons.c.orig Mon Oct 31 18:20:14 1994
--- cons.c Tue Dec 13 16:16:52 1994
***************
*** 67,73 ****
#endif
struct consdev constab[] = {
! #if NSC > 0
{ pccnprobe, pccninit, pccngetc, pccncheckc, pccnputc },
#endif
#if NSIO > 0
--- 67,73 ----
#endif
struct consdev constab[] = {
! #if NSC > 0 || NVT > 0
{ pccnprobe, pccninit, pccngetc, pccncheckc, pccnputc },
#endif
#if NSIO > 0
good luck !

View File

@ -1,115 +0,0 @@
How to install the pcvt driver on a NetBSD 1.0 machine (pcvt rel. 3.20)
--------------------------------------------------------------------------------
last edit-date: [Thu Jan 5 16:11:17 1995]
(1) you have the choice of two keyboard layouts regarding the placement of
the vt220 function keys and the HELP and DO keys.
both configurations are documented in the files Keyboard.HP and Keyboard.VT
respectively.
decide which one to use and set the "#define" of PCVT_VT220KEYB to
compile the one you choosed. (see also pcvt_hdr.h and pcvt_kbd.c)
(2) add a line ''option PCVT_NETBSD="100"'' into your kernel config file.
(3) there are several other configuration "#define"-able options located at
the beginning of pcvt_conf.h. "user"-settable options all start with
"PCVT_". Please (!!!) read the comments for them in the header file !
(4) edit your kernel configuration file and comment the following line out
by placing a "#" in front of it:
device pc0 at isa? port "IO_KBD" tty irq 1
add a new config-line just below it:
device vt0 at isa? port "IO_KBD" tty irq 1
the lines in my config file look like this:
#device pc0 at isa? port "IO_KBD" tty irq 1
device vt0 at isa? port "IO_KBD" tty irq 1
you can use now either the pccons driver or the pcvt driver (or possibly
other console drivers too!) by simply un-commenting ONE of them.
YOU CANNOT USE/UNCOMMENT MORE THAN __ONE__ CONSOLE DRIVER !!!
(5) configure a new kernel using config(8).
(6) run "make depend" for the new kernel !!!!
(if you upgrade from a previous version of pcvt, or get unresolved
symbols during step 11, it may be necessary to run a "make clean"
prior to running "make depend" !!)
(7) compile the new kernel
(8) test the new kernel (i.e. on a floppy) and check whether it still works
with your keyboard and your videoboard.
if the kernel works, install it on your harddisk and reboot.
(9) change into the distribution subdirectory "Util".
Edit Makefile.inc to suit your needs, especially have a look at "MANDIR"
and "BINDIR". Execute "make depend" and then "make".
this makes all the utilities in their directories. when you are satisfied
with the results, execute "make install". this installs all programs in
all subdirs in "BINDIR" and all manual pages in "MANDIR", all fonts in
"FONTDIR" and the keycap database in "CAPDIR".
change into the distribution subdirectory "Doc" and edit Makefile
to suit your needs. then execute "make" to prepare the manpage for
the driver.
(10) if necessary, edit /usr/share/misc/keycap to match your keyboard.
keycap uses special codes which are documented in Util/kcon/keycap.3
and Util/kcon/keycap.5. also have a look at Util/kcon/kcon.1.
(11) there are example termcap entries for the various screen resolutions
in the file "Etc/Termcap". integrate them into your termcap file if
you don't have a "normal" vt220 entry or want to use pcvt's extensions.
NOTE: pcvt works with an unmodified VT220 termcap entry !
(it was written to do that .... ;-)
Don't forget to make a new compiled termcap database using cap_mkdb !
(12) to use the virtual terminals, one must "mknod" this devices, they have
major number 12 and minor numbers 0 to n:
mknod /dev/ttyv0 c 12 0
mknod /dev/ttyv1 c 12 1
mknod /dev/ttyv2 c 12 2
mknod /dev/ttyv3 c 12 3
...
mknod /dev/ttyv<n> c 12 <n>
There is a shell-script available (Etc/MAKEDEV.pcvt) for this purpose.
(13) edit /etc/ttys to enable login on the virtual consoles, mine looks like
this:
ttyv0 "/usr/libexec/getty console" pcvt25h on secure
ttyv1 "/usr/libexec/getty console" pcvt25h on secure
ttyv2 "/usr/libexec/getty console" pcvt25h on secure
ttyv3 "/usr/libexec/getty console" pcvt25h on secure
(14) because the driver is (mostly) 8-bit clean, the entry to be used with it
in /etc/gettytab has to contain a ":np:" (no parity) entry, the "default"
entry has a ":ap:" (any parity), if you want to use this entry, you have
to change the ":ap:" to ":np:"!
my default entry looks like this:
default:\
:np:fd#1000:im=\r\n NetBSD (%h) (%t)\r\n\r\n:sp#9600:
(15) edit /etc/rc.local to download fonts and establish emulation modes, mine
looks like the example provided in Etc/rc.local
good luck !

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,170 +0,0 @@
FILES AND DIRECTORIES - Base Directory [pcvt Release 3.31]
--------------------------------------------------------------------------------
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-2.0 Install instructions for FreeBSD Release 2.0
INSTALL.NetBSD-1.0 Install instructions for NetBSD Release 1.0
Keyboard-Layout.HP Special keys and emulated VT220 keys, one style
Keyboard-Layout.VT Special keys and emulated VT220 keys, other style
Manifest This file
FAQ FAQ's, notes and hints to get pcvt up and running
TestedHardware A list of tested Hardware, this is just what we got ...
ToDo A list of things to do
FILES AND DIRECTORIES - Etc
--------------------------------------------------------------------------------
MAKEDEV.pcvt A shell script to mknod the device files
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
Terminfo A terminfo entry for the emulator, this IS in
fact a VT220 terminfo entry !
pcvt.el GNU emacs configuration
rc.local sample script for driver initialization
ttys.pcvt.netbsd sample /etc/ttys.pcvt for NetBSD
ttys.pcvt.freebsd sample /etc/ttys.pcvt for FreeBSD
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
--------------------------------------------------------------------------------
Makefile main makefile for all systems
Makefile.inc.FreeBSD1 Makefile.inc for FreeBSD 1.x
Makefile.inc.FreeBSD2 Makefile.inc for FreeBSD 2.0.5 and higher
Makefile.inc.NetBSD Makefile.inc for NetBSD 1.0 and lower
Makefile.inc.NetBSD-current Makefile.inc for NetBSD post 1.0
directory description
--------- ---------------------------------------------------------------
cursor Very simple program to set the cursor shape.
demo Files demonstrating pcvts capabilities:
- 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 (n)curses based font-editor for the EGA/VGA
fonts in the below mentioned font - directory.
fontedit A program to edit VT220 downloadable character sets.
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
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,
also used to display all compile-time options.
kbdio Keyboard controller debugging utility
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
loadfont Program to download charactersets into EGA/VGA character
generator memory.
mcon A program to control the mouse emulation via the keyboard
pcvtdoc Makefile and manual page for the driver and ioctl's
scon Program to control various aspects of terminal emulation,
such as: emulation mode, screen switching etc.
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 !!!!!!!!!
-------------------------------------------------------------
userkeys A program to edit the VT220 programmable function keys.
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 !!!!!!!!!
-------------------------------------------------------------
vttest A VT100 compatibility tester. This is a test tool for
VT100 emulation writers and terminal buyers.

View File

@ -1,80 +0,0 @@
Tested Hardware List last edit-date: [Sat Jun 24 14:50:46 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
HP Vectra VE 5/75 Motherbd CL-GD5430 MAG
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,15 +0,0 @@
Things to do Last Edit-Date: [Tue Sep 5 18:47:12 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 support for FreeBSD < 1.1.5.1 and NetBSD <= 0.9
- rewrite the whole thing ....

View File

@ -1,16 +0,0 @@
#!/bin/sh -
#
PATH=/sbin:/bin/:/usr/bin:/usr/sbin:
umask 77
for i
do
case $i in
ttyv*)
unit=`expr $i : 'ttyv\(.*\)'`
rm -f /dev/ttyv$unit
mknod /dev/ttyv$unit c 12 $unit
;;
esac
done

View File

@ -1,289 +0,0 @@
#---------------------------------------------------------------------------
#
# pcvt termcap database entry (release 3.31)
#
# last edit-date: [Fri Sep 15 20:29:10 1995]
#
# -hm new entries for SR and SF
# -hm removing duplicate entries
# -hm changed: ae, as, do added: ac, nw, ta deleted: pb
#
#---------------------------------------------------------------------------
#---------------------------------------------------------------------------
# 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:\
:ac=llmmkkjjuuttvvwwqqxxnnoosspprr\140\140aaffgg~~..--++\054\054hhII00yyzz:\
:ae=\E(B:\
:al=\E[L:\
:am:\
:as=\E(0:\
: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=\E[B:\
: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:\
:nw=\EE:\
: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:\
:ta=^I:\
:ue=\E[24m:\
:up=\E[A:\
:us=\E[4m:\
:vt#3:\
:ve=\E[?25h:\
:vi=\E[?25l:\
: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,288 +0,0 @@
#---------------------------------------------------------------------------
#
# sample rc.local used for pcvt driver boot time initialization
# -------------------------------------------------------------
#
# last edit-date: [Sun Jul 2 10:33:53 1995]
#
#---------------------------------------------------------------------------
#
# NOTE:
# assumptions: - 8 screens configured
# - /dev/ttyv0 ... /dev/ttyv7 exist
#
#---------------------------------------------------------------------------
# path for pcvt utility programs: kcon, scon, loadfont, ispcvt and cursor
# FreeBSD 2.0.5 and later
#KCONP=/usr/sbin
#SCONP=/usr/sbin
#LDFNP=/usr/sbin
#ISPCP=/usr/sbin
#CURSP=/usr/sbin
# path for pcvt utility programs: kcon, scon, loadfont, ispcvt and cursor
# FreeBSD 2.0 and earlier and all NetBSD releases
KCONP=/usr/local/bin
SCONP=/usr/local/bin
LDFNP=/usr/local/bin
ISPCP=/usr/sbin
CURSP=/usr/local/bin
# path for pcvt's EGA/VGA download fonts
FONTP=/usr/share/misc/pcvtfonts
# path for xdm (X11R6)
XDMP=/usr/X11R6/bin
# path for xdm (X11R5)
#XDMP=/usr/X386/bin
# set to YES to start xdm on screen 8
#xdm_start=YES
xdm_start=NO
# set to YES to set up for german keyboard layout
#set_keybd=YES
set_keybd=NO
# set to YES to set up keyboard delay & rate
set_keydr=YES
#set_keydr=NO
# if set to YES, this are the (very fast) settings
set_keydr_rate=0
set_keydr_delay=0
# set to YES to construct a new /etc/motd file
#construct_motd=YES
construct_motd=NO
# set to YES to set up cursor start and end scanline
set_cursor=YES
#set_cursor=NO
# if YES set up a 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 $ISPCP/ispcvt ]
then
if $ISPCP/ispcvt -d /dev/ttyv0
then
#--------------------------------------------------
# loading fonts into vga
#--------------------------------------------------
echo 'console driver type: pcvt'
if [ -x $LDFNP/loadfont -a -x $SCONP/scon ]
then
adaptor=`$SCONP/scon -d /dev/ttyv0 -a`
if [ $adaptor = VGA ]
then
echo 'loading 25 lines base font into character set 0'
$LDFNP/loadfont -d /dev/ttyv0 -c0 -f $FONTP/vt220l.816
echo 'loading 25 lines extension font into character set 1'
$LDFNP/loadfont -d /dev/ttyv0 -c1 -f $FONTP/vt220h.816
echo 'loading 28 lines base font into character set 2'
$LDFNP/loadfont -d /dev/ttyv0 -c2 -f $FONTP/vt220l.814
echo 'loading 28 lines extension font into character set 3'
$LDFNP/loadfont -d /dev/ttyv0 -c3 -f $FONTP/vt220h.814
echo 'loading 40 lines base font into character set 4'
$LDFNP/loadfont -d /dev/ttyv0 -c4 -f $FONTP/vt220l.810
echo 'loading 40 lines extension font into character set 5'
$LDFNP/loadfont -d /dev/ttyv0 -c5 -f $FONTP/vt220h.810
echo 'loading 50 lines base font into character set 6'
$LDFNP/loadfont -d /dev/ttyv0 -c6 -f $FONTP/vt220l.808
echo 'loading 50 lines extension font into character set 7'
$LDFNP/loadfont -d /dev/ttyv0 -c7 -f $FONTP/vt220h.808
elif [ $adaptor = EGA ]
then
echo 'loading 25 lines base font into character set 0'
$LDFNP/loadfont -d /dev/ttyv0 -c0 -f $FONTP/vt220l.814
echo 'loading 25 lines extension font into character set 1'
$LDFNP/loadfont -d /dev/ttyv0 -c1 -f $FONTP/vt220h.814
echo 'loading 35 lines base font into character set 2'
$LDFNP/loadfont -d /dev/ttyv0 -c2 -f $FONTP/vt220l.810
echo 'loading 35 lines extension font into character set 3'
$LDFNP/loadfont -d /dev/ttyv0 -c3 -f $FONTP/vt220h.810
# echo 'loading 43 lines base font into character set 2'
# $LDFNP/loadfont -d /dev/ttyv0 -c2 -f $FONTP/vt220l.808
# echo 'loading 43 lines extension font into character set 3'
# $LDFNP/loadfont -d /dev/ttyv0 -c3 -f $FONTP/vt220h.808
fi
fi
#--------------------------------------------------
# setting screen sizes and emulation
#--------------------------------------------------
if [ -x $SCONP/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=`$SCONP/scon -d /dev/ttyv0 -m`
# for all screens do
for device in /dev/ttyv*
do
# setup HP mode
$SCONP/scon -d$device $size -H
# setup cursor size
if [ X${set_cursor} = X"YES" -a -x $CURSP/cursor ]
then
$CURSP/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
$SCONP/scon -d$device -p8,60,60,60
fi
fi
done
# switch to screen 0
$SCONP/scon -d /dev/ttyv0
# set screensaver timeout to one minute
$SCONP/scon -d /dev/ttyv0 -t360
fi
#------------------------------------------------------
# if desired, setup keyboard for german keyboard layout
#------------------------------------------------------
if [ X${set_keybd} = X"YES" -a -x $KCONP/kcon ]
then
echo 'switching to german keyboard layout'
$KCONP/kcon -m de
fi
#------------------------------------------------------
# if desired, setup rate and delay keyboard values
#------------------------------------------------------
if [ X${set_keydr} = X"YES" -a -x $KCONP/kcon ]
then
echo setting keyboard typematic rate = $set_keydr_rate and delay = $set_keydr_delay
$KCONP/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 $XDMP/xdm ]
then
$SCONP/scon -d /dev/ttyv7
$XDMP/xdm
sleep 5
$SCONP/scon -d /dev/ttyv0
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 '--------------------------------------------------------------'
$ISPCP/ispcvt -v -d /dev/ttyv0
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,148 +0,0 @@
#---------------------------------------------------------------------------
#
# @(#)ttys 5.1 (Berkeley) 4/17/89
#
# example /etc/ttys for pcvt 3.31
# -------------------------------
#
# FreeBSD 2.0.5-Release with entries for pcvt
#
# last edit-date: [Tue Sep 5 18:49:47 1995]
#
#---------------------------------------------------------------------------
#
# name getty type status comments
#
# This entry needed for asking password when init goes to single-user mode
# If you want to be asked for password, change "secure" to "insecure" here
console none unknown off secure
#
ttyv0 "/usr/libexec/getty Pc" pcvt25h on secure
ttyv1 "/usr/libexec/getty Pc" pcvt25h on secure
ttyv2 "/usr/libexec/getty Pc" pcvt25h on secure
ttyv3 "/usr/libexec/getty Pc" pcvt25h on secure
ttyv4 "/usr/libexec/getty Pc" pcvt25h on secure
ttyv5 "/usr/libexec/getty Pc" pcvt25h on secure
ttyv6 "/usr/libexec/getty Pc" pcvt25h off secure # syslog
ttyv7 "/usr/libexec/getty Pc" pcvt25h off secure # X11
# Serial terminals
ttyd1 "/usr/libexec/getty std.19200" unknown on # Modem
# Pseudo terminals
ttyp0 none network
ttyp1 none network
ttyp2 none network
ttyp3 none network
ttyp4 none network
ttyp5 none network
ttyp6 none network
ttyp7 none network
ttyp8 none network
ttyp9 none network
ttypa none network
ttypb none network
ttypc none network
ttypd none network
ttype none network
ttypf none network
ttypg none network
ttyph none network
ttypi none network
ttypj none network
ttypk none network
ttypl none network
ttypm none network
ttypn none network
ttypo none network
ttypp none network
ttypq none network
ttypr none network
ttyps none network
ttypt none network
ttypu none network
ttypv none network
#
# name getty type status comments
#----- ----------------------------- ------- ---------- --------------
#
# This entry needed for asking password when init goes to single-user mode
# If you want to be asked for password, change "secure" to "insecure" here
#
console none unknown off secure
#
# syscons
#
#ttyv0 "/usr/libexec/getty Pc" cons25 on secure
## Virtual terminals
#ttyv1 "/usr/libexec/getty Pc" cons25 on secure
#ttyv2 "/usr/libexec/getty Pc" cons25 on secure
#ttyv3 "/usr/libexec/getty Pc" cons25 off secure
#
# pcvt
#
ttyv0 "/usr/libexec/getty Pc" pcvt25h on secure
ttyv1 "/usr/libexec/getty Pc" pcvt25h on secure
ttyv2 "/usr/libexec/getty Pc" pcvt25h on secure
ttyv3 "/usr/libexec/getty Pc" pcvt25h on secure
ttyv4 "/usr/libexec/getty Pc" pcvt25h on secure
ttyv5 "/usr/libexec/getty Pc" pcvt25h on secure
ttyv6 "/usr/libexec/getty Pc" pcvt25h off secure # syslog msgs
ttyv7 "/usr/libexec/getty Pc" pcvt25h off secure # used for X11
#
# Modem dialin/dialout port
#
ttyd1 "/usr/libexec/getty D19200" unknown on # T2500
#
# Hardwired ports
#
#tty00 "/usr/libexec/getty std.9600" unknown off secure # -N/C-
#tty02 "/usr/libexec/getty std.9600" unknown off secure # DCF77
#tty03 "/usr/libexec/getty std.9600" unknown off secure # Mouse
#
# Orig Hardwired terminals
#
#tty00 "/usr/libexec/getty std.9600" unknown off secure
#tty01 "/usr/libexec/getty std.9600" unknown off secure
#
# Orig Dialin terminals
#
#ttyd2 "/usr/libexec/getty std.9600" unknown off secure
#ttyd3 "/usr/libexec/getty std.9600" unknown off secure
#
# Pseudo terminals
#
ttyp0 none network
ttyp1 none network
ttyp2 none network
ttyp3 none network
ttyp4 none network
ttyp5 none network
ttyp6 none network
ttyp7 none network
ttyp8 none network
ttyp9 none network
ttypa none network
ttypb none network
ttypc none network
ttypd none network
ttype none network
ttypf none network
ttyq0 none network
ttyq1 none network
ttyq2 none network
ttyq3 none network
ttyq4 none network
ttyq5 none network
ttyq6 none network
ttyq7 none network
ttyq8 none network
ttyq9 none network
ttyqa none network
ttyqb none network
ttyqc none network
ttyqd none network
ttyqe none network
ttyqf none network

View File

@ -1,70 +0,0 @@
#---------------------------------------------------------------------------
#
# sample /etc/ttys file for pcvt driver and pcvt25 terminal emulation
#
# last edit-date: [Sun Feb 26 12:30:09 1995]
#
#---------------------------------------------------------------------------
#
# from: @(#)ttys 5.1 (Berkeley) 4/17/89
# ttys,v 1.4.2.1 1993/08/20 07:58:39 cgd Exp
#
# name getty type status comments
#
console "/usr/libexec/getty Pcvt" pcvt25 off secure
#
# the following lines are for the pcvt driver
#
ttyv0 "/usr/libexec/getty Pcvt" pcvt25 on secure
ttyv1 "/usr/libexec/getty Pcvt" pcvt25 on secure
ttyv2 "/usr/libexec/getty Pcvt" pcvt25 on secure
ttyv3 "/usr/libexec/getty Pcvt" pcvt25 on secure
ttyv4 "/usr/libexec/getty Pcvt" pcvt25 on secure
ttyv5 "/usr/libexec/getty Pcvt" pcvt25 on secure
ttyv6 "/usr/libexec/getty Pcvt" pcvt25 off secure # X11 :1
ttyv7 "/usr/libexec/getty Pcvt" pcvt25 off secure # X11 :0
#
# Hardwired lines are marked off, by default, so getty(8)
# is quiet when they don't exist.
#
tty00 "/usr/libexec/getty std.9600" unknown off
tty01 "/usr/libexec/getty std.9600" unknown off
tty02 "/usr/libexec/getty std.9600" unknown off
tty03 "/usr/libexec/getty std.9600" unknown off
tty04 "/usr/libexec/getty std.9600" unknown off
tty05 "/usr/libexec/getty std.9600" unknown off
tty06 "/usr/libexec/getty std.9600" unknown off
tty07 "/usr/libexec/getty std.9600" unknown off
#
ttyp0 none network
ttyp1 none network
ttyp2 none network
ttyp3 none network
ttyp4 none network
ttyp5 none network
ttyp6 none network
ttyp7 none network
ttyp8 none network
ttyp9 none network
ttypa none network
ttypb none network
ttypc none network
ttypd none network
ttype none network
ttypf none network
ttyq0 none network
ttyq1 none network
ttyq2 none network
ttyq3 none network
ttyq4 none network
ttyq5 none network
ttyq6 none network
ttyq7 none network
ttyq8 none network
ttyq9 none network
ttyqa none network
ttyqb none network
ttyqc none network
ttyqd none network
ttyqe none network
ttyqf none network

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,9 +0,0 @@
# $NetBSD: Makefile,v 1.3 1998/10/26 21:03:21 hubertf Exp $
INCSDIR= /usr/include/i386
INCS= pcvt_ioctl.h
SUBDIR+= Util
.include <bsd.kinc.mk>

View File

@ -1,298 +0,0 @@
================================================================================
| |
| P C V T - VT220 Terminal Emulation Driver |
| ------------------------------------------- |
| |
| Release 3.32 October 1995 |
| ------------------------------------ |
| |
| for NetBSD/i386 1.x |
| and FreeBSD 2.x |
| |
| (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)
Jukka A. Ukkonen (ukkonen@csc.fi)
Frank van der Linden (frank@fwi.uva.nl)
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 never released (experimental internal release)
3.20 never released (several beta testing cycles in '94/'95)
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.
3.30 (07/95) Public release after almost a year of beta cycles.
Support for NetBSD-current as of 06/30/95 and FreeBSD 2.0.5.
3.32 (10/95) Minor bugfixes for release 3.30, C1 controls support, removed
support for old single virtual screen Xserver (pccons-like),
NetBSD < 1.0 and FreeBSD < 2.0 no longer supported.
Features
--------------------------------------------------------------------------------
The 'pcvt' VT220 emulator driver has:
- Almost full DEC VT220 (VT100/VT102) Terminal functionality
- 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, GD5430, GD6225 (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
- 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 1.0 pcvt release 3.32 tested
NetBSD-current (post 1.0) reported to run (June 30 1995)
FreeBSD 2.0.5R pcvt release 3.32 tested
FreeBSD-stable (pre 2.1) pcvt release 3.32 tested (SNAP-950928)
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 the file Doc/FAQ !
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 (release 3.32 added a few entries
to properly support the alternate charcterset!).
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.
FreeBSD upgrade to 2.0.5R
-------------------------
The locations of the support binaries and libs have changed, be sure to
remove all old binaries from /usr/local/bin, man pages from /usr/local/man
and libs from /usr/local/lib. The new Makefile now places binaries into
/usr/sbin, libs into /usr/lib and manual pages into /usr/share/man.
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 / 559795-70
tel: +49 / 40 / 55903-170
fax: +49 / 40 / 5591486
s-mail: HCS Hanseatischer Computerservice GmbH, Oldesloer Str. 97-99,
22457 Hamburg, Europe

View File

@ -1,20 +0,0 @@
# $NetBSD: Makefile,v 1.9 1999/06/04 18:47:33 thorpej Exp $
#SUBDIR=keycap
#SUBDIR+=cursor
SUBDIR+=fontedit
SUBDIR+=fonts
#SUBDIR+=kcon
#SUBDIR+=loadfont
#SUBDIR+=scon
#SUBDIR+=userkeys
SUBDIR+=vttest
#SUBDIR+=ispcvt
#SUBDIR+=mcon
.if make(clean) || make(cleandir) || make(distclean) || make(obj)
SUBDIR+= vgaio kbdio set2061
SUBDIR+= demo
.endif
.include <bsd.subdir.mk>

View File

@ -1,24 +0,0 @@
# $NetBSD: Makefile.inc,v 1.11 1999/06/04 18:47:33 thorpej Exp $
ECHO ?= echo
BINDIR ?= /usr/bin
FONTDIR = /usr/share/pcvt/fonts
LIBDIR = /usr/lib
LIBMODE = 644
INCDIR= ${DESTDIR}/usr/include/machine
#${PROG}: ${INCDIR}/pcvt_ioctl.h
MAN3EXT = 3
MAN4EXT = 4
MAN5EXT = 5
MAN8EXT = 8
MANDIR = /usr/share/man
MAN = ${MAN1} ${MAN3} ${MAN4} ${MAN5} ${MAN8}
.if empty(MAN) && defined(PROG)
MAN+= ${PROG}.1
.endif

View File

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

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.30, Last Edit-Date: [Fri Jun 30 20:07:13 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
MKMAN= no
all: $(DEMOS) $(PROG)
install: ${DEMOS}
@${ECHO} "to look at the demos, execute:"
@${ECHO} " \"cat <filename>.vt\""
@${ECHO} "if it is an animation an 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}/$@.gz.uu
uudecode ${.CURDIR}/$@.gz.uu
gunzip -f $@.gz
rm -f $@.gz
colors.vt: ${.CURDIR}/$@.gz.uu
uudecode ${.CURDIR}/$@.gz.uu
gunzip -f $@.gz
rm -f $@.gz
sgr.vt: ${.CURDIR}/$@.gz.uu
uudecode ${.CURDIR}/$@.gz.uu
gunzip -f $@.gz
rm -f $@.gz
cowscene.vt: ${.CURDIR}/$@.gz.uu
uudecode ${.CURDIR}/$@.gz.uu
gunzip -f $@.gz
rm -f $@.gz
xmas.vt: ${.CURDIR}/$@.gz.uu
uudecode ${.CURDIR}/$@.gz.uu
gunzip -f $@.gz
rm -f $@.gz
outerlimit.vt: ${.CURDIR}/$@.gz.uu
uudecode ${.CURDIR}/$@.gz.uu
gunzip -f $@.gz
rm -f $@.gz
twzone.vt: ${.CURDIR}/$@.gz.uu
uudecode ${.CURDIR}/$@.gz.uu
gunzip -f $@.gz
rm -f $@.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
M'XL("):V^BX"`V-H87)D96UO+G9T`*7829,=5Q5%X3D1X!]0DZ(1($`F[VLR
M\UI"IF3`1V",<=DT%IT0!MF6)6%D^N:OLW*OO!',J<E>\09U[N2;Y,6CBP>'
MVZT^^YE+_MY\^.*#9T\?/KF\O+I^[?[][:<W^.GIK79Y>?WI\\O7/^&7Z^>/
MC,MWW[J^WO;RG?<?/=[VZLF+6V\_^]A_]K]_]T9<C;AQWF,:O]P9<7=$V__1
MX7@ZS\O_'Q</YMN'NIQ>H9:MVE;K5H>M^E;'K=JTY2G9MCPG#UO.R>.62_*T
MY9H\;]F3VZF64VV[U7*K;<=:CK7M6LNUPW:MY=IAN]9R[=73X?'%\KGMT7/E
MQ7-]?GON7%_8WCK7%_/0N;Z45\YU(T^<Z\MYWUQ?R>/F^FI>-M?-/&NNK^5-
M<WT]#YKK&WG-7+?RE+E>SCOF^N9V>ZEIN[U4VVXO==AN+W7,[:5.N;W4.;>7
MFG-[J26WEUIS>ZF>VTN]DMM+W<[MI>[D]E+?RNVE[N;V4J]NM]?Z]G9[K:OM
M]EKWMMMKO9;;:WTGM]?Z;FZO];W<7NOUW%ZK<GNM^[F]UO=S>ZT?Y/9:;^3V
M6C_,[;7>S.VU?K3=[O76=KO7C[?;O=[>;O>ZSNU>[^1VKW=SN]=/<KO73W.[
MU\]RN]?/<[O7>[G=ZT%N]_I%;O?Z96[W^E5N]_KU=KM-]9OM./MPN\[^=CO/
M/LI]XG=Y`/%^7D#\/D\@_I`W$(_S".*#O(+X,,\@/LH[B"=Y"/%Q7D(\S5.(
M9WE+J^=Y2ZL_YBVM/LE;6OW)M[1ZX5M:?>I;6OW9M[3ZBV]I]5??TNIOOJ75
MWWU+JW_XEE;_]"VM_N5;6OW;M[3ZSTL7:TP\N;AY;V?1SKI@`X.-#%8:A#8(
M<1#J(.1!Z(,0"*$00B*$1@B1$"HAPJ3-.F$#A8T45BJ$5@BQ$&HAY$+HA1`,
MH1A",H1F"-$0JB'"IBVZ80.'C1Q6.H1V"/$0ZB'D0^B'$!"A($)"A(8($1$J
M(L*HK3IB`XF-)%9*A)8(,1%J(N1$Z(D0%*$H0E*$I@A1$:HB9-5W5GUGU7=6
M?;#J@U4?K/I@U0>K/ECUP:H/5GVPZH-5'ZSZ8-5E=9ADQ885&U:LK`A9$;(B
M9$7(BI`5(2M"5H2L"%D1LB)D1835K:L=U.$D*#:@V(!B!44(BA`4(2A"4(2@
M"$$1@B($10B*$!0A*"*@#F=!L0'%!A0K*$)0A*`(01&"(@1%"(H0%"$H0E"$
MH`A!$0%UF`7%!A0;4*R@"$$1@B($10B*$!0A*$)0A*`(01&"(@1%!-1A$10;
M4&Q`L8(B!$4(BA`4(2A"4(2@"$$1@B($10B*$!014(=54&Q`L0'%"HH0%"$H
M0E"$H`A!$8(B!$4(BA`4(2A"4(2@^@ZJ[Z#Z#JH/4'V`Z@-4'Z#Z`-4'J#Y`
M]0&J#U!]@.H#5!^@NJ!NWCCOHHY'1;$1Q484JRA"482B"$41BB(412B*4!2A
M*$)1A*((11$1=3PIBHTH-J)811&*(A1%*(I0%*$H0E&$H@A%$8HB%$4HBHBH
MXUE1;$2Q$<4JBE`4H2A"482B"$41BB(412B*4!2A*$)11$0=9T6Q$<5&%*LH
M0E&$H@A%$8HB%$4HBE`4H2A"482B"$41$75<%,5&%!M1K*((11&*(A1%*(I0
M%*$H0E&$H@A%$8HB%$5$U'%5%!M1;$2QBB(412B*4!2A*$)1A*((11&*(A1%
M*(I0%*&H:0=U.@B*#2@VH%A!$8(B!$4(BA`4(2A"4(2@"$$1@B($10B*"*C3
M45!L0+$!Q0J*$!0A*$)0A*`(01&"(@1%"(H0%"$H0E!$0)U.@F(#B@TH5E"$
MH`A!$8(B!$4(BA`4(2A"4(2@"$$1@B("ZG06%!M0;$"Q@B($10B*$!0A*$)0
MA*`(01&"(@1%"(H0%!%0IUE0;$"Q`<4*BA`4(2A"4(2@"$$1@B($10B*$!0A
M*$)01$"=%D&Q`<4&%"LH0E"$H`A!$8(B!$4(BA`4(2A"4(2@"$$1@KJS@SHW
M0;$!Q084*RA"4(2@"$$1@B($10B*$!0A*$)0A*`(01$!=3X(B@TH-J!801&"
M(@1%"(H0%"$H0E"$H`A!$8(B!$4(B@BH\U%0;$"Q`<4*BA`4(2A"4(2@"$$1
M@B($10B*$!0A*$)01$"=3X)B`XH-*%90A*`(01&"(@1%"(H0%"$H0E"$H`A!
M$8(B`NI\%A0;4&Q`L8(B!$4(BA`4(2A"4(2@"$$1@B($10B*$!014.=94&Q`
ML0'%"HH0%"$H0E"$H`A!$8(B!$4(BA`4(2A"4(2@[HZ/==/^M6[:/]=-^_>Z
M:7RPF\87NVE\LIO&-[MI?+2;QE>[:7RVF\9WNVE\N)O&E[MI?+J;QK>[25!S
M$Q0;4&Q`L8(B!$4(BA`4(2A"4(2@"$$1@B($10B*$!014/-!4&Q`L0'%"HH0
M%"$H0E"$H`A!$8(B!$4(BA`4(2A"4$1`S4=!L0'%!A0K*$)0A*`(01&"(@1%
M"(H0%"$H0E"$H`A!$0$UGP3%!A0;4*R@"$$1@B($10B*$!0A*$)0A*`(01&"
M(@1%!-1\%A0;4&Q`L8(B!$4(BA`4(2A"4(2@"$$1@B($10B*$!0AJ#9`]1U4
MWT'U'50?H/H`U0>H/D#U`:H/4'V`Z@-4'Z#Z`-4'J#Y`]?UK^+1_#I_V[^'3
M_D%\&E_$I_%)?!K?Q*?Q47P:7\6G\5E\&M_%I_%A?!I?QJ?Q:7P:W\:G\7%\
M$M32!,4&%!M0K*`(01&"(@1%"(H0%"$H0E"$H`A!$8(B!$4$U'(0%!M0;$"Q
M@B($10B*$!0A*$)0A*`(01&"(@1%"(H0%!%0RU%0;$"Q`<4*BA`4(2A"4(2@
M"$$1@B($10B*$!0A*$)01$`M)T&Q`<4&%"LH0E"$H`A!$8(B!$4(BA`4(2A"
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
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
LK:O,4Y_?D[\>]SORP^WQS>WV]N?PK-K59<Q^3M6?Q'9Q/?LG-?=D49*R``"?
`
end

View File

@ -1,8 +0,0 @@
PROG= fed
SRCS= fed.c select.c edit.c misc.c
LDADD= -lncurses
BINDIR= /usr/local/bin
MKMAN= no
.include <bsd.prog.mk>

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,7 +0,0 @@
PROG= fontedit
CLEANFILES+= core.fontedit fontedit.core
MKMAN= no
.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,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,37 +0,0 @@
The font files:
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, 1995 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,56 +0,0 @@
FONTS = vt220l.814 vt220h.814 vt220l.808 vt220h.808 \
vt220l.816 vt220h.816 vt220l.810 vt220h.810
LIBMODE = 644
LIBOWN = bin
LIBGRP = bin
CLEANFILES= ${FONTS}
all: $(FONTS)
install: ${FONTS}
@if [ ! -d ${DESTDIR}${FONTDIR} ]; then \
mkdir -p ${DESTDIR}${FONTDIR}; \
fi
@for i in ${FONTS}; do \
${ECHO} "installing font $$i into ${DESTDIR}${FONTDIR}"; \
${INSTALL} -c -m ${LIBMODE} -o ${LIBOWN} -g ${LIBGRP} \
$$i ${DESTDIR}${FONTDIR}; \
done
clean:
rm -f ${CLEANFILES}
.include <bsd.prog.mk>
# this seems to be the lowest common denominator
vt100pc.814: ${.CURDIR}/vt100pc.814.uu
uudecode ${.CURDIR}/$@.uu
vt100sg.814: ${.CURDIR}/vt100sg.814.uu
uudecode ${.CURDIR}/$@.uu
vt220l.814: ${.CURDIR}/vt220l.814.uu
uudecode ${.CURDIR}/$@.uu
vt220h.814: ${.CURDIR}/vt220h.814.uu
uudecode ${.CURDIR}/$@.uu
vt220l.808: ${.CURDIR}/vt220l.808.uu
uudecode ${.CURDIR}/$@.uu
vt220h.808: ${.CURDIR}/vt220h.808.uu
uudecode ${.CURDIR}/$@.uu
vt220l.816: ${.CURDIR}/vt220l.816.uu
uudecode ${.CURDIR}/$@.uu
vt220h.816: ${.CURDIR}/vt220h.816.uu
uudecode ${.CURDIR}/$@.uu
vt220l.810: ${.CURDIR}/vt220l.810.uu
uudecode ${.CURDIR}/$@.uu
vt220h.810: ${.CURDIR}/vt220h.810.uu
uudecode ${.CURDIR}/$@.uu

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,8 +0,0 @@
PROG= ispcvt
MKMAN= no
BINDIR= /usr/sbin
.include <bsd.prog.mk>

View File

@ -1,303 +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.31, Last Edit-Date: [Tue Sep 5 16:31:24 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
* -hm PCVT_MDAFASTSCROLL
* -hm removed PCVT_USL_VT_COMPAT
*
*---------------------------------------------------------------------------*/
#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_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_MDAFASTSCROLL = %s",
(pcvtinfo.compile_opts & CONF_MDAFASTSCROLL) ? "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_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_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_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,24 +0,0 @@
PROG= kbdio
SRCS= kbdio.y lex.l
#YACC= bison
#YFLAGS+= -yd # Bison only
YFLAGS+= -v # verbose
LFLAGS+= -I
LDADD= -lm -ly -ll
DPADD= ${LIBM} ${LIBY} ${LIBL}
MKMAN= no
MKPIC= no
CFLAGS+= -I. #-g
YFLAGS+= -d
CLEANFILES+= y.tab.h
CLEANFILES+= y.output # comment file from bison
.include <bsd.prog.mk>
lex.o: y.tab.h lex.l

View File

@ -1,343 +0,0 @@
/* Hello emacs, this should be edited in -*- Fundamental -*- mode */
%{
/* $NetBSD: kbdio.y,v 1.4 1997/11/01 06:49:38 lukem Exp $ */
/*
* Copyright (c) 1994,1995 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.
*/
#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 send kbd ECHO command\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");
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;
case 2:
fprintf(stderr, "usage: kbdio [-d] [-f devname]\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 & 0x40)
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, c;
const char *devname = "/dev/console";
while((c = getopt(argc, argv, "df:")) != -1)
switch(c) {
case 'd':
yydebug = 1;
break;
case 'f':
devname = optarg;
break;
case '?':
default:
help(2);
return 2;
}
argc -= optind;
argv += optind;
if(argc > 0) {
help(2);
return 2;
}
if((fd = open(devname, O_RDONLY)) < 0) {
perror("open(kbd)");
return 1;
}
if(ioctl(fd, KDENABIO, 0) < 0) {
perror("ioctl(KDENABIO)");
return 1;
}
yyparse();
(void)ioctl(fd, KDDISABIO, 0);
return 0;
}

View File

@ -1,86 +0,0 @@
%{
/* $NetBSD: lex.l,v 1.3 1997/10/13 14:22:25 lukem Exp $ */
/*
* Copyright (c) 1994,1995 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.
*/
#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,11 +0,0 @@
PROG= kcon
DEVICE= /dev/ttyv0
CFLAGS+= -I${.CURDIR}/../keycap -DKEYB_DEVICE=\"${DEVICE}\"
MKMAN= no
KEYCAPOBJDIR!= cd ${.CURDIR}/../keycap; make print-objdir
LDADD= -L${KEYCAPOBJDIR} -lkeycap
.include <bsd.prog.mk>

View File

@ -1,753 +0,0 @@
/*
* Copyright (c) 1992, 1995 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.30, Last Edit-Date: [Fri Jun 30 20:11:42 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,17 +0,0 @@
LIB = keycap
CAPDIR = /usr/share/pcvt
CAPPATH = $(CAPDIR)/keycap.pcvt
KEYCAPSRC= keycap.src
CPPFLAGS+= -DKEYCAP_PATH=\"$(CAPPATH)\"
SRCS = keycap.c
MKMAN= no
beforeinstall:
@if [ ! -d ${DESTDIR}${CAPDIR} ]; then mkdir ${DESTDIR}${CAPDIR};fi
@${ECHO} "Saving old keycap database"
-mv -f ${DESTDIR}${CAPPATH} ${DESTDIR}${CAPPATH}.BAK
${INSTALL} -c -m ${LIBMODE} -o ${LIBOWN} -g ${LIBGRP} \
${.CURDIR}/${KEYCAPSRC} ${DESTDIR}${CAPPATH}
.include <bsd.lib.mk>

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.
*
*/
#ifndef lint
static char *id =
"@(#)keycap.c, 3.20, Last Edit-Date: [Tue Dec 20 14:51:50 1994]";
#endif
/*---------------------------------------------------------------------------*
*
* 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 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.
*---------------------------------------------------------------------------*/
int kgetent(bp, name)
char *bp, *name;
{
register char *cp;
register int c;
register int i = 0, cnt = 0;
char ibuf[KEYCAP_BUFSIZ];
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,613 +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:\
:K29=':S29=*:\
:K40=\346:S40=\306:\
:K41=\370:S41=\330:\
: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:
# from codrv, untested
no|norway|Norwegian mapping:\
:K1=|:\
:K13=\\:S13=`:A13=':p1#13:\
:K41=\346:S41=\306:\
:K40=\370:S40=\330:\
:A45=:\
:tc=denmark:
# 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,4 +0,0 @@
# $NetBSD: shlib_version,v 1.1 1998/11/01 17:14:27 hubertf Exp $
#
major=0
minor=0

View File

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

View File

@ -1,392 +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.31, Last Edit-Date: [Thu Aug 24 10:40:50 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
* -hm patch from Joerg, -s scanlines option
*
*---------------------------------------------------------------------------*/
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <machine/pcvt_ioctl.h>
struct screeninfo screeninfo;
#define DEFAULTFD 0
int fd;
static int roundrows(int scrrow);
static int codetosize(int code);
static void setfont(int charset, int fontloaded, int charscan,
int scrscan, int scrrow);
static void loadfont(int fontset, int charscanlines,
unsigned char *font_table);
static void printvgafontattr(int charset);
static void printheader(void);
static void usage(void);
main(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 scan_lines = -1;
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:is:")) != -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 's':
scan_lines = atoi(optarg);
if(scan_lines == 0)
usage();
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(ioctl(fd, VGAGETSCREEN, &screeninfo) == -1)
{
perror("ioctl VGAGETSCREEN failed");
exit(1);
}
if(info == 1)
{
int i;
switch(screeninfo.adaptor_type)
{
case UNKNOWN_ADAPTOR:
case MDA_ADAPTOR:
case CGA_ADAPTOR:
fprintf(stderr,
"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);
}
switch(screeninfo.adaptor_type)
{
case UNKNOWN_ADAPTOR:
case MDA_ADAPTOR:
case CGA_ADAPTOR:
fprintf(stderr,
"Adaptor does not support "
"Downloadable Fonts!\n");
exit(1);
case EGA_ADAPTOR:
if(scan_lines == -1) scan_lines = 350;
else if(scan_lines != 350) {
fprintf(stderr,
"EGA adaptors can only operate with "
"350 scan lines.\n");
exit(1);
}
break;
case VGA_ADAPTOR:
if(scan_lines == -1) scan_lines = 400;
else if(scan_lines != 400 && scan_lines != 480) {
fprintf(stderr,
"VGA adaptors can only operate with "
"400/480 scan lines.\n");
exit(1);
}
break;
}
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);
}
chr_height = sbp->st_size / 256; /* 256 chars per font */
if(chr_height * 256 != sbp->st_size ||
chr_height < 8 || chr_height > 20) {
fprintf(stderr,
"File is no valid font file, size = %d.\n",
sbp->st_size);
exit(1);
}
scr_rows = codetosize(roundrows(scan_lines / chr_height));
scr_scan = scr_rows * chr_height - 256 - 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 = %d, "
"errno %d\n",
argv[1], sbp->st_size, ret, errno);
exit(1);
}
loadfont(chr_set, chr_height, fonttab);
setfont(chr_set, 1, chr_height - 1, scr_scan, scr_rows);
exit(0);
}
static int
roundrows(int scrrow)
{
if(scrrow >= 50) return SIZ_50ROWS;
else if(scrrow >= 43) return SIZ_43ROWS;
else if(scrrow >= 40) return SIZ_40ROWS;
else if(scrrow >= 35) return SIZ_35ROWS;
else if(scrrow >= 28) return SIZ_28ROWS;
else return SIZ_25ROWS;
}
static int
codetosize(int code)
{
static int sizetab[] = { 25, 28, 35, 40, 43, 50 };
if(code < 0 || code >= sizeof sizetab / sizeof(int))
return -1;
return sizetab[code];
}
static void
setfont(int charset, int fontloaded, int charscan, int scrscan, int 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);
}
}
static void
loadfont(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);
}
}
}
static void
printvgafontattr(int charset)
{
struct vgafontattr vfattr;
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 ", codetosize(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");
}
static void
printheader(void)
{
printf("\nEGA/VGA Charactersets Status Info:\n\n");
printf("Set Status Lines CharScanLines ScreenScanLines\n");
printf("--- ------ ----- ------------- ---------------\n");
}
static void
usage(void)
{
fprintf(stderr,
"\nloadfont - "
"load a font into EGA/VGA font ram for the pcvt video driver\n");
fprintf(stderr,
"usage: loadfont -c <charset> -d <device> -f <filename>"
" -i -s <scan_lines>\n");
fprintf(stderr,
" -c <charset> characterset to load (EGA 0..3, VGA 0..7)\n");
fprintf(stderr,
" -d <device> specify device\n");
fprintf(stderr,
" -f <filename> filename containing binary font data\n");
fprintf(stderr,
" -i print status and types of loaded fonts\n");
fprintf(stderr,
" -s <scan_lines> number of scan lines on screen\n");
exit(2);
}

View File

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

View File

@ -1,193 +0,0 @@
/*
* Copyright (c) 1994, 1995 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.30, Last Edit-Date: [Fri Jun 30 20:15:02 1995]
*/
/*---------------------------------------------------------------------------*
*
* 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 <string.h>
#include <unistd.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,5 +0,0 @@
PROG= scon
MKMAN= no
.include <bsd.prog.mk>

View File

@ -1,860 +0,0 @@
/*
* Copyright (c) 1992, 1995 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.30, Last Edit-Date: [Wed Aug 30 13:57:10 1995]";
/*---------------------------------------------------------------------------*
*
* 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
* -hm patch to support Cirrus CL-GD62x5 from Martin
*
*---------------------------------------------------------------------------*/
#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",
"CL-GD5430",
"CL-GD62x5",
"Unknown Cirrus",
};
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,10 +0,0 @@
PROG= set2061
SRCS= main.c ICD2061Aalt.c
CFLAGS+= -DGCCUSESGAS -DPCVT_STANDALONE
MKMAN= no
all: $(PROG)
.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 into 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,340 +0,0 @@
/* $NetBSD: compiler.h,v 1.3 1997/10/13 14:22:29 lukem Exp $ */
/* $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.
*/
#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,5 +0,0 @@
PROG= vt220keys
MKMAN= no
.include <bsd.prog.mk>

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,22 +0,0 @@
PROG= vgaio
MAN8= vgaio.${MAN8EXT}
SRCS= vgaio.y lex.l
YACC= yacc
#YFLAGS+= -yd # Bison
#YFLAGS+= -v # verbose
LFLAGS+= -I
LDADD= -lm -ly -ll
DPADD= ${LIBM} ${LIBY} ${LIBL}
CFLAGS+= -I. -g
YFLAGS+= -d
CLEANFILES+= y.tab.h
CLEANFILES+= y.output # comment file from bison
MKMAN= no
.include <bsd.prog.mk>

View File

@ -1,67 +0,0 @@
%{
/* $NetBSD: lex.l,v 1.4 1997/10/13 14:22:32 lukem Exp $ */
/*
* Copyright (c) 1994,1995 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.
*/
#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]; }

View File

@ -1,45 +0,0 @@
/* $NetBSD: vgaio.h,v 1.4 1997/10/13 14:22:34 lukem Exp $ */
/*
* 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.
*/
/* common structure to hold the definition for a VGA register */
#ifndef VGAIO_H
#define VGAIO_H
struct reg {
int group, num;
};
#endif /* VGAIO_H */

View File

@ -1,262 +0,0 @@
/* Hello emacs, this should be edited in -*- Fundamental -*- mode */
%{
/* $NetBSD: vgaio.y,v 1.5 1997/11/01 06:49:49 lukem Exp $ */
/*
* Copyright (c) 1994,1995 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.
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/fcntl.h>
#include <machine/cpufunc.h>
#include <machine/pcvt_ioctl.h>
#ifdef __NetBSD__
#include <machine/pio.h>
#endif
#include "vgaio.h"
void setreg(struct reg r, int val);
void getreg(struct reg r);
void yyerror(const char *msg);
#define YYDEBUG 1
unsigned short vgabase;
%}
%union {
int num;
struct reg reg;
}
%token MI GR CR SR AR NEWLINE
%token <num> NUM
%type <num> reggroup
%type <reg> register
%%
interpret: lines ;
lines: line
| lines line
;
line: statements NEWLINE
| NEWLINE
| error NEWLINE { fprintf(stderr, "bing!\n"); }
;
statements: statement
| statements ';' statement
;
statement: register '?' { getreg($1); }
| register '=' NUM { setreg($1, $3); }
| /* lambda */
;
register: reggroup NUM { $$.num = $2; $$.group = $1; }
/* useful for the MI register: */
| reggroup { $$.num = 0; $$.group = $1; }
;
reggroup: GR { $$ = GR; }
| CR { $$ = CR; }
| SR { $$ = SR; }
| AR { $$ = AR; }
| MI { $$ = MI; }
;
%%
static struct {
int id;
const char *name;
} regnames[] = {
{GR, "gr"}, {CR, "cr"}, {SR, "sr"}, {AR, "ar"}, {MI, "mi"},
{0, 0}
};
const char *getname(struct reg r) {
int idx;
for(idx = 0; regnames[idx].id; idx++)
if(regnames[idx].id == r.group)
return regnames[idx].name;
return "??";
}
/* return ptr to string of 1s and 0s for value */
char *
bin_str(unsigned long val, int length) {
static char buffer[80];
int i = 0;
if (length > 32)
length = 32;
val = val << (32 - length);
while (length--)
{
if (val & 0x80000000)
buffer[i++] = '1';
else
buffer[i++] = '0';
if ((length % 4) == 0 && length)
buffer[i++] = '.';
val = val << 1;
}
return (buffer);
}
void getreg(struct reg r) {
int val; /* FreeBSD gcc ONLY accepts an int */
switch(r.group) {
case GR:
outb(0x3ce, r.num);
val = inb(0x3cf);
break;
case AR:
r.num &= 0x1f;
(void)inb(vgabase + 0x0a);
outb(0x3c0, r.num + 0x20);
val = inb(0x3c1);
break;
case CR:
outb(vgabase + 4, r.num);
val = inb(vgabase + 5);
break;
case SR:
outb(0x3c4, r.num);
val = inb(0x3c5);
break;
case MI:
val = inb(0x3cc);
break;
}
printf("%s%02x = 0x%02x = %sB\n",
getname(r), r.num, val, bin_str(val, 8));
}
void setreg(struct reg r, int val) {
switch(r.group) {
case GR:
outb(0x3ce, r.num);
outb(0x3cf, val);
break;
case AR:
r.num &= 0x1f;
(void)inb(vgabase + 0x0a);
outb(0x3c0, r.num);
outb(0x3c0, val);
outb(0x3c0, r.num + 0x20);
break;
case CR:
outb(vgabase + 4, r.num);
outb(vgabase + 5, val);
break;
case SR:
outb(0x3c4, r.num);
outb(0x3c5, val);
break;
case MI:
outb(0x3c2, val);
break;
}
printf("%s%02x set to 0x%02x = %sB now\n",
getname(r), r.num, val, bin_str(val, 8));
}
void yyerror(const char *msg) {
fprintf(stderr, "yyerror: %s\n", msg);
}
void usage(void) {
fprintf(stderr, "usage: vgaio [-d] [-f devname]\n");
exit(2);
}
int main(int argc, char **argv) {
int fd, c;
const char *devname = "/dev/console";
while((c = getopt(argc, argv, "df:")) != -1)
switch(c) {
case 'd':
yydebug = 1;
break;
case 'f':
devname = optarg;
break;
case '?':
default:
usage();
}
argc -= optind;
argv += optind;
if(argc > 0)
usage();
if((fd = open(devname, O_RDONLY)) < 0) {
perror("open(vga)");
return 1;
}
if(ioctl(fd, KDENABIO, 0) < 0) {
perror("ioctl(KDENABIO)");
return 1;
}
vgabase = (inb(0x3cc) & 1)? 0x3d0: 0x3b0;
yyparse();
(void)ioctl(fd, KDDISABIO, 0);
return 0;
}

View File

@ -1,6 +0,0 @@
PROG= vttest
SRCS= main.c esc.c
MKMAN= no
.include <bsd.prog.mk>

View File

@ -1,57 +0,0 @@
NOTES FROM THE MOD.SOURCES MODERATOR:
I split the source up into the three separate pieces it now is.
In doing this, I put lines like "int reading;" in a header file
that both C modules include. If your Unix requires one of these
to be "extern int reading;" then you will have some editing to do.
Also note that this program uses FIONREAD, which must be implemented
differently in SystemV, etc., and check out the setjmp() call...
/Rich $alz
Oh, yeah: I also wrote the Makefile and manpage, such as they are.
-------------------------------------------------------------------
This is a program to test the compatibility (or to demonstrate the
non-compatibility) of so-called "VT100-compatible" terminals. In
conformance of the good old hacker traditions, the only documentation
of this program is the source code itself. To understand it, you also
need a copy of the original VT100 manual from DEC.
Comments and bug reports: Since this is a release (via USENET) to the
whole world, a lot of people are going to have opinions and fresh
ideas about it. (What -- bugs in MY program? Aww...) I can't deal
with everyone sending me a hacked version, but if you have found a
serious bug, or ported it to VMS, do tell me. I can't promise any new
version release, though. From this version on (1.7b) VTTEST will have
to live its own life without its father holding its hand.
My adress is:
Network-mail adress: (mcvax,seismo)!enea!suadb!lindberg
Real-world-mail address: Per Lindberg
QZ, Stockholm University Computing Center
Box 27322
S - 102 54 Stockholm
SWEDEN
The original version of this program is written for the Sargasso C
compiler for the DECsystem-10. Many thanks to all sales persons with
quote VT100-compatible unquote terminals, who prompted me to write
this program, and also to:
-- Bo Kleve, LIDAC, Linkoping University, Sweden
for the portation to DECSYSTEM-20 with the Sargasso C compiler
-- Johan Widen, TTDS, Royal Institute of Technology, Stockholm, Sweden
for the portation to various UNIX systems (incl. System III and Xenix)
-- Russ Herman, AES Data Inc., Missisauga, Ont. Canada
for fixes and code for the VT102 test
Thanx also to JMR "Gremlin" at KTH, and Goran Wallberg at QZ
for suggestions, bug fixes, etc.
This program does not have support for all the different variations
of VT100, like VT125, VT131 nor the new VT200 series. Feel free to
add that yourself. Happy Hacking!
/TMP

View File

@ -1,398 +0,0 @@
#include "header.h"
println(s) char *s; {
printf("%s\n", s);
}
esc(s) char *s; {
printf("%c%s", 27, s);
}
esc2(s1, s2) char s1, s2; {
printf("%c%s%s", 27, s1, s2);
}
brcstr(ps, c) char *ps, c; {
printf("%c[%s%c", 27, ps, c);
}
brc(pn,c) int pn; char c; {
printf("%c[%d%c", 27, pn, c);
}
brc2(pn1, pn2 ,c) int pn1, pn2; char c; {
printf("%c[%d;%d%c", 27, pn1, pn2, c);
}
cub(pn) int pn; { /* Cursor Backward */
brc(pn,'D');
}
cud(pn) int pn; { /* Cursor Down */
brc(pn,'B');
}
cuf(pn) int pn; { /* Cursor Forward */
brc(pn,'C');
}
cup(pn1, pn2) int pn1, pn2; { /* Cursor Position */
brc2(pn1, pn2, 'H');
}
cuu(pn) int pn; { /* Cursor Up */
brc(pn,'A');
}
da() { /* Device Attributes */
brc(0,'c');
}
decaln() { /* Screen Alignment Display */
esc("#8");
}
decdhl(lower) int lower; { /* Double Height Line (also double width) */
if (lower) esc("#4");
else esc("#3");
}
decdwl() { /* Double Wide Line */
esc("#6");
}
deckpam() { /* Keypad Application Mode */
esc("=");
}
deckpnm() { /* Keypad Numeric Mode */
esc(">");
}
decll(ps) char *ps; { /* Load LEDs */
brcstr(ps, 'q');
}
decrc() { /* Restore Cursor */
esc("8");
}
decreqtparm(pn) int pn; { /* Request Terminal Parameters */
brc(pn,'x');
}
decsc() { /* Save Cursor */
esc("7");
}
decstbm(pn1, pn2) int pn1, pn2; { /* Set Top and Bottom Margins */
if (pn1 || pn2) brc2(pn1, pn2, 'r');
else esc("[r");
/* Good for >24-line terminals */
}
decswl() { /* Single With Line */
esc("#5");
}
dectst(pn) int pn; { /* Invoke Confidence Test */
brc2(2, pn, 'y');
}
dsr(pn) int pn; { /* Device Status Report */
brc(pn, 'n');
}
ed(pn) int pn; { /* Erase in Display */
brc(pn, 'J');
}
el(pn) int pn; { /* Erase in Line */
brc(pn,'K');
}
hts() { /* Horizontal Tabulation Set */
esc("H");
}
hvp(pn1, pn2) int pn1, pn2; { /* Horizontal and Vertical Position */
brc2(pn1, pn2, 'f');
}
ind() { /* Index */
esc("D");
}
nel() { /* Next Line */
esc("E");
}
ri() { /* Reverse Index */
esc("M");
}
ris() { /* Reset to Initial State */
esc("c");
}
rm(ps) char *ps; { /* Reset Mode */
brcstr(ps, 'l');
}
scs(g,c) int g; char c; { /* Select character Set */
printf("%c%c%c%c%c%c%c", 27, g ? ')' : '(', c,
27, g ? '(' : ')', 'B',
g ? 14 : 15);
}
sgr(ps) char *ps; { /* Select Graphic Rendition */
brcstr(ps, 'm');
}
sm(ps) char *ps; { /* Set Mode */
brcstr(ps, 'h');
}
tbc(pn) int pn; { /* Tabulation Clear */
brc(pn, 'g');
}
vt52cup(l,c) int l,c; {
printf("%cY%c%c", 27, l + 31, c + 31);
}
char inchar() {
/*
* Wait until a character is typed on the terminal
* then read it, without waiting for CR.
*/
#ifdef UNIX
int lval, waittime, getpid(); static int val; char ch;
fflush(stdout);
lval = val;
brkrd = 0;
reading = 1;
read(0,&ch,1);
reading = 0;
if (brkrd)
val = 0177;
else
val = ch;
if ((val==0177) && (val==lval))
kill(getpid(), (int) SIGTERM);
#endif
#ifdef SARG10
int val, waittime;
waittime = 0;
while(!uuo(051,2,&val)) { /* TTCALL 2, (INCHRS) */
zleep(100); /* Wait 0.1 seconds */
if ((waittime += ttymode) > 600) /* Time-out, in case */
return('\177'); /* of hung in ttybin(1) */
}
#endif
#ifdef SARG20 /* try to fix a time-out function */
int val, waittime;
waittime = 0;
while(jsys(SIBE,2,_PRIIN) == 0) { /* Is input empty? */
zleep(100);
if ((waittime += ttymode) > 600)
return('\177');
}
ejsys(BIN,_PRIIN);
val = jsac[2];
#endif
return(val);
}
char *instr() {
/*
* Get an unfinished string from the terminal:
* wait until a character is typed on the terminal,
* then read it, and all other available characters.
* Return a pointer to that string.
*/
int i, val, crflag; long l1; char ch;
static char result[80];
i = 0;
result[i++] = inchar();
/* Wait 0.1 seconds (1 second in vanilla UNIX) */
#ifdef SARG10
if (trmop(01031,0) < 5) zleep(500); /* wait longer if low speed */
else zleep(100);
#else
zleep(100);
#endif
#ifdef UNIX
fflush(stdout);
#ifdef XENIX
while(rdchk(0)) {
read(0,result+i,1);
if (i++ == 78) break;
}
#else
#ifdef SIII
while(read(2,result+i,1) == 1)
if (i++ == 78) break;
#else
while(ioctl(0,FIONREAD,&l1), l1 > 0L) {
while(l1-- > 0L) {
read(0,result+i,1);
if (i++ == 78) goto out1;
}
}
out1:
#endif
#endif
#endif
#ifdef SARG10
while(uuo(051,2,&val)) { /* TTCALL 2, (INCHRS) */
if (!(val == '\012' && crflag)) /* TOPS-10 adds LF to CR */
result[i++] = val;
crflag = val == '\015';
if (i == 79) break;
zleep(50); /* Wait 0.05 seconds */
}
#endif
#ifdef SARG20
while(jsys(SIBE,2,_PRIIN) != 0) { /* read input until buffer is empty */
ejsys(BIN,_PRIIN);
result[i++] = jsac[2];
if (i == 79) break;
zleep(50); /* Wait 0.05 seconds */
}
#endif
result[i] = '\0';
return(result);
}
ttybin(bin) int bin; {
#ifdef SARG10
#define OPEN 050
#define IO_MOD 0000017
#define _IOPIM 2
#define _IOASC 0
#define _TOPAG 01021
#define _TOSET 01000
int v;
static int arglst[] = {
_IOPIM,
`TTY`,
0
};
arglst[0] = bin ? _IOPIM : _IOASC;
v = uuo(OPEN, 1, &arglst[0]);
if (!v) { printf("OPEN failed"); exit(); }
trmop(_TOPAG + _TOSET, bin ? 0 : 1);
ttymode = bin;
#endif
#ifdef SARG20
/* TTYBIN will set the line in BINARY/ASCII mode
* BINARY mode is needed to send control characters
* Bit 28 must be 0 (we don't flip it).
* Bit 29 is used for the mode change.
*/
#define _TTASC 0000100
#define _MOXOF 0000043
int v;
ejsys(RFMOD,_CTTRM);
v = ejsys(SFMOD,_CTTRM, bin ? (~_TTASC & jsac[2]) : (_TTASC | jsac[2]));
if (v) { printf("SFMOD failed"); exit(); }
v = ejsys(MTOPR,_CTTRM,_MOXOF,0);
if (v) { printf("MTOPR failed"); exit(); }
#endif
}
#ifdef SARG20
/*
* SUPERBIN turns off/on all input character interrupts
* This affects ^C, ^O, ^T
* Beware where and how you use it !!!!!!!
*/
superbin(bin) int bin; {
int v;
v = ejsys(STIW,(0//-5), bin ? 0 : -1);
if (v) { printf("STIW superbinary setting failed"); exit(); }
ttymode = bin;
}
/*
* PAGE affects the ^S/^Q handshake.
* Set bit 34 to turn it on. Clear it for off.
*/
page(bin) int bin; {
int v;
#define TT_PGM 0000002
ejsys(RFMOD,_CTTRM); /* Get the current terminal status */
v = ejsys(STPAR,_CTTRM, bin ? (TT_PGM | jsac[2]) : (~TT_PGM & jsac[2]));
if (v) { printf("STPAR failed"); exit(); }
}
#endif
trmop(fc,arg) int fc, arg; {
#ifdef SARG10
int retvalp;
int arglst[3];
/* TRMOP is a TOPS-10 monitor call that does things to the terminal. */
/* Find out TTY nbr (PA1050 barfs if TRMOP get -1 instead of udx) */
/* A TRMNO monitor call returns the udx (Universal Device Index) */
arglst[0] = fc; /* function code */
arglst[1] = calli(0115, -1); /* udx, TRMNO. UUO */
arglst[2] = arg; /* Optional argument */
if (calli(0116, 3 // &arglst[0], &retvalp)) /* TRMOP. UUO */
return (retvalp);
else {
printf("?Error return in TRMOP.");
exit();
}
#endif
}
inputline(s) char *s; {
scanf("%s",s);
#ifdef SARG10
readnl();
#endif
#ifdef SARG20
readnl();
#endif
}
inflush() {
/*
* Flush input buffer, make sure no pending input character
*/
int val;
#ifdef UNIX
#ifdef XENIX
while(rdchk(0)) read(0,&val,1);
#else
#ifdef SIII
while(read(2,&val,1));
#else
long l1;
ioctl (0, FIONREAD, &l1);
while(l1-- > 0L) read(0,&val,1);
#endif
#endif
#endif
#ifdef SARG10
while(uuo(051,2,&val)) /* TTCALL 2, (INCHRS) */
;
#endif
#ifdef SARG20
ejsys(CFIBF,_PRIIN); /* Clear input buffer */
#endif
}
zleep(t) int t; {
/*
* Sleep and do nothing (don't waste CPU) for t milliseconds
*/
#ifdef SARG10
calli(072,t); /* (HIBER) t milliseconds */
#endif
#ifdef SARG20
ejsys(DISMS,t); /* DISMISS for t milliseconds */
#endif
#ifdef UNIX
t = t / 1000;
if (t == 0) t = 1;
sleep(t); /* UNIX can only sleep whole seconds */
#endif
}

View File

@ -1,50 +0,0 @@
#define VERSION "1.7b 1985-04-19"
/* Choose one of these */
/* #define XENIX /* XENIX implies UNIX */
/* #define SIII /* SIII implies UNIX, (NDELAY a la System III) */
#define UNIX /* UNIX */
/* #define VMS /* VMS not done yet -- send me your version!!!! */
/* #define SARG20 /* Sargasso C for TOPS-20 */
/* #define SARG10 /* Sargasso C for TOPS-10 */
/* These #ifdef:s are implementation dependent stuff for the Sargasso C */
/* Unix C barfs on directives like "#strings", so we keep them */
/* indented. Then unix c can't find them, but Sargasso C *can*. */
/* Admittedly kludgey, but it works...) */
#ifdef SARG10
#define _UNIXCON /* Make UNIX-flavored I/O on TOPS */
#strings low /* put strings in lowseg mem so we can modify them. */
#endif
#ifdef SARG20
#define _UNIXCON /* Make UNIX-flavored I/O on TOPS */
#strings low /* put strings in lowseg mem so we can modify them. */
#include <TOPS20.HDR>
#endif
#include <stdio.h>
#ifdef UNIX
# include <sys/param.h>
# include <ctype.h>
# ifndef BSD4_4
# include <sgtty.h>
struct sgttyb ttyOrg, ttyNew;
# else
# include <termios.h>
# include <sys/ioctl.h>
struct termios ttyOrg, ttyNew;
# endif
# include <signal.h>
# include <setjmp.h>
jmp_buf intrenv;
char stdioBuf[BUFSIZ];
int brkrd, reading;
extern onterm(), onbrk();
# ifdef SIII
# include <fcntl.h>
# endif
#endif
int ttymode;

File diff suppressed because it is too large Load Diff

View File

@ -1,385 +0,0 @@
/*
* Copyright (c) 1992, 1995 Hellmuth Michaelis and Joerg Wunsch.
*
* 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, Brian Dunford-Shore 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.
*
*
* @(#)pcvt_conf.h, 3.32, Last Edit-Date: [Tue Oct 3 11:19:47 1995]
*
*/
/*---------------------------------------------------------------------------
*
* pcvt_conf.h VT220 driver global configuration file
* ------------------------------------------------------
* -hm introduced pcvt_conf.h
* -hm re-integrated selfconfiguration for NetBSD from Onno
* -hm patch from Onno for NetBSD-current
* -hm removed PCVT_FAKE_SYSCONS10
* -hm ---------------- Release 3.30 -----------------------
* -hm patch from Ulf Kieber to support changeable kernel msg colors
* -hm ---------------- Release 3.32 -----------------------
*
*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
* Note that each of the options below should rather be overriden by the
* kernel config file instead of this .h file - this allows for different
* definitions in different kernels compiled at the same machine
*
* The convention is as follows:
*
* options "PCVT_FOO=1" - enables the option
* options "PCVT_FOO" - is a synonym for the above
* options "PCVT_FOO=0" - disables the option
*
* omitting an option defaults to what is shown below
*
* exceptions from this rule are i.e.:
*
* options "PCVT_NSCREENS=x"
* options "PCVT_SCANSET=x"
* options "PCVT_SYSBEEPF=x"
*
* which are always numeric!
*---------------------------------------------------------------------------*/
/* -------------------------------------------------------------------- */
/* ---------------- USER PREFERENCE DRIVER OPTIONS -------------------- */
/* -------------------------------------------------------------------- */
/*----------------------------------------------------------------------*/
/* NOTE: if FAT_CURSOR is defined, a block cursor is used instead of */
/* the cursor shape we got from the BIOS, see pcvt_out.c */
/*----------------------------------------------------------------------*/
#if !defined PCVT_NSCREENS /* ---------- DEFAULT: 8 -------------- */
# define PCVT_NSCREENS 8 /* this option defines how many virtual */
#endif /* screens you want to have in your */
/* system. each screen allocates memory,*/
/* so you can't have an unlimited num- */
/* ber...; the value is intented to be */
/* compile-time overridable by a config */
/* options "PCVT_NSCREENS=x" line */
#if !defined PCVT_VT220KEYB /* ---------- DEFAULT: OFF ------------ */
# define PCVT_VT220KEYB 0 /* this compiles a more vt220-like */
#elif PCVT_VT220KEYB != 0 /* keyboardlayout as described in the */
# undef PCVT_VT220KEYB /* file Keyboard.VT220. */
# define PCVT_VT220KEYB 1 /* if undefined, a more HP-like */
#endif /* keyboardlayout is compiled */
/* try to find out what YOU like ! */
#if !defined PCVT_SCREENSAVER /* ---------- DEFAULT: ON ------------- */
# define PCVT_SCREENSAVER 1 /* enable screen saver feature - this */
#elif PCVT_SCREENSAVER != 0 /* just blanks the display screen. */
# undef PCVT_SCREENSAVER /* see PCVT_PRETTYSCRNS below ... */
# define PCVT_SCREENSAVER 1
#endif
#if !defined PCVT_PRETTYSCRNS /* ---------- DEFAULT: OFF ------------ */
# define PCVT_PRETTYSCRNS 0 /* for the cost of some microseconds of */
#elif PCVT_PRETTYSCRNS != 0 /* cpu time this adds a more "pretty" */
# undef PCVT_PRETTYSCRNS /* version to the screensaver, an "*" */
# define PCVT_PRETTYSCRNS 1 /* in random locations of the display. */
#endif /* NOTE: this should not be defined if */
/* you have an energy-saving monitor */
/* which turns off the display if its */
/* black !!!!!! */
#if !defined PCVT_CTRL_ALT_DEL /* ---------- DEFAULT: OFF ------------ */
# define PCVT_CTRL_ALT_DEL 0 /* this enables the execution of a cpu */
#elif PCVT_CTRL_ALT_DEL != 0 /* reset by pressing the CTRL, ALT and */
# undef PCVT_CTRL_ALT_DEL /* DEL keys simultanously. Because this */
# define PCVT_CTRL_ALT_DEL 1 /* is a feature of an ancient simple */
#endif /* bootstrap loader, it does not belong */
/* into modern operating systems and */
/* was commented out by default ... */
#if !defined PCVT_KBD_FIFO /* ---------- DEFAULT: ON ------------- */
# define PCVT_KBD_FIFO 1 /* this enables Keyboad fifo so that we */
#elif PCVT_KBD_FIFO != 0 /* are not any longer forced to switch */
# undef PCVT_KBD_FIFO /* off tty interrupts while switching */
# define PCVT_KBD_FIFO 1 /* virtual screens - AND loosing chars */
#endif /* on the serial lines is gone :-) */
#if PCVT_KBD_FIFO
# if !defined PCVT_KBD_FIFO_SZ /* ---------- DEFAULT: 256 ------------ */
# define PCVT_KBD_FIFO_SZ 256 /* this specifies the size of the above */
# elif PCVT_KBD_FIFO_SZ < 16 /* mentioned keyboard buffer. buffer */
# undef PCVT_KBD_FIFO_SZ /* overflows are logged via syslog, so */
# define PCVT_KBD_FIFO_SZ 256 /* have a look at /var/log/messages */
# endif
#endif /* PCVT_KBD_FIFO */
#if !defined PCVT_USEKBDSEC /* ---------- DEFAULT: ON ------------- */
# define PCVT_USEKBDSEC 1 /* do not set the COMMAND_INHOVR bit */
#elif PCVT_USEKBDSEC != 0 /* (1 = override security lock inhibit) */
# undef PCVT_USEKBDSEC /* when initializing the keyboard, so */
# define PCVT_USEKBDSEC 1 /* that security locking should work */
#endif /* now. I guess this has to be done also*/
/* in the boot code to prevent single */
/* user startup .... */
#if !defined PCVT_24LINESDEF /* ---------- DEFAULT: OFF ------------ */
# define PCVT_24LINESDEF 0 /* use 24 lines in VT 25 lines mode and */
#elif PCVT_24LINESDEF != 0 /* HP 28 lines mode by default to have */
# undef PCVT_24LINESDEF /* the the better compatibility to the */
# define PCVT_24LINESDEF 1 /* real VT220 - you can switch between */
#endif /* the maximum possible screensizes in */
/* those two modes (25 lines) and true */
/* compatibility (24 lines) by using */
/* the scon utility at runtime */
#if !defined PCVT_EMU_MOUSE /* ---------- DEFAULT: OFF ------------ */
# define PCVT_EMU_MOUSE 0 /* emulate a mouse systems mouse via */
#elif PCVT_EMU_MOUSE != 0 /* the keypad; this is experimental */
# undef PCVT_EMU_MOUSE /* code intented to be used on note- */
# define PCVT_EMU_MOUSE 1 /* books in conjunction with XFree86; */
#endif /* look at the comments in pcvt_kbd.c */
/* if you are interested in testing it. */
#if !defined PCVT_META_ESC /* ---------- DEFAULT: OFF ------------ */
# define PCVT_META_ESC 0 /* if ON, send the sequence "ESC key" */
#elif PCVT_META_ESC != 0 /* for a meta-shifted key; if OFF, */
# undef PCVT_META_ESC /* send the normal key code with 0x80 */
# define PCVT_META_ESC 1 /* added. */
#endif
#if !defined PCVT_SW0CNOUTP /* ---------- DEFAULT: OFF ------------ */
# define PCVT_SW0CNOUTP 0 /* if ON, on console/kernel output the */
#elif PCVT_SW0CNOUTP != 0 /* current screen is switched to screen */
# undef PCVT_SW0CNOUTP /* 0 if not already at screen 0. */
# define PCVT_SW0CNOUTP 1 /* CAUTION: CURRENTLY THIS CAUSES AN X- */
#endif /* SESSION TO CLUTTER VIDEO MEMORY !!!! */
/* -------------------------------------------------------------------- */
/* -------------------- DRIVER DEBUGGING ------------------------------ */
/* -------------------------------------------------------------------- */
#if !defined PCVT_SHOWKEYS /* ---------- DEFAULT: OFF ------------ */
# define PCVT_SHOWKEYS 0 /* this replaces the system load line */
#elif PCVT_SHOWKEYS != 0 /* on the vt 0 in hp mode with a display*/
# undef PCVT_SHOWKEYS /* of the most recent keyboard scan- */
# define PCVT_SHOWKEYS 1 /* and status codes received from the */
#endif /* keyboard controller chip. */
/* this is just for some hardcore */
/* keyboarders .... */
/* -------------------------------------------------------------------- */
/* -------------------- DRIVER OPTIONS -------------------------------- */
/* -------------------------------------------------------------------- */
/* it is unlikely that anybody wants to change anything below */
#if !defined PCVT_NO_LED_UPDATE /* ---------- DEFAULT: OFF ------------ */
# define PCVT_NO_LED_UPDATE 0 /* On some (Notebook?) keyboards it is */
#elif PCVT_NO_LED_UPDATE != 0 /* not possible to update the LED's */
# undef PCVT_NO_LED_UPDATE /* without hanging the keyboard after- */
# define PCVT_NO_LED_UPDATE 1 /* wards. If you experience Problems */
#endif /* like this, try to enable this option */
#if !defined PCVT_PORTIO_DELAY /* ---------- DEFAULT: ON ------------- */
# define PCVT_PORTIO_DELAY 1 /* Defining PCVT_PORTIO_DELAY lets pcvt */
#elif PCVT_PORTIO_DELAY != 0 /* use multiple accesses to port 0x84 */
# undef PCVT_PORTIO_DELAY /* to produce a delay of 7 us needed for*/
# define PCVT_PORTIO_DELAY 1 /* accessing the keyboard controller, */
#endif /* otherwise the system delay functions */
/* are used. */
#if !defined PCVT_PCBURST /* ---------- DEFAULT: 256 ------------ */
# define PCVT_PCBURST 256 /* NETBSD and FreeBSD >= 2.0 only: this */
#endif /* is the number of output characters */
/* handled together as a burst in */
/* routine pcstart(), file pcvt_drv.c */
#if !defined PCVT_SCANSET /* ---------- DEFAULT: 1 -------------- */
# define PCVT_SCANSET 1 /* define the keyboard scancode set you */
#endif /* want to use: */
/* 1 - code set 1 (supported) */
/* 2 - code set 2 (supported) */
/* 3 - code set 3 (UNsupported) */
#if !defined PCVT_KEYBDID /* ---------- DEFAULT: ON ------------- */
# define PCVT_KEYBDID 1 /* check type of keyboard connected. at */
#elif PCVT_KEYBDID != 0 /* least HP-keyboards send an id other */
# undef PCVT_KEYBDID /* than the industry standard, so it */
# define PCVT_KEYBDID 1 /* CAN lead to problems. if you have */
#endif /* problems with this, TELL ME PLEASE ! */
#if !defined PCVT_SIGWINCH /* ---------- DEFAULT: ON ------------- */
# define PCVT_SIGWINCH 1 /* this sends a SIGWINCH signal in case */
#elif PCVT_SIGWINCH != 0 /* the window size is changed. to try, */
# undef PCVT_SIGWINCH /* issue "scons -s<size>" while in elvis*/
# define PCVT_SIGWINCH 1 /* and you'll see the effect. */
#endif /* i'm not sure, whether this feature */
/* has to be in the driver or has to */
/* move as an ioctl call to scon .... */
#if !defined PCVT_NULLCHARS /* ---------- DEFAULT: ON ------------- */
# define PCVT_NULLCHARS 1 /* allow the keyboard to send null */
#elif PCVT_NULLCHARS != 0 /* (0x00) characters to the calling */
# undef PCVT_NULLCHARS /* program. this has the side effect */
# define PCVT_NULLCHARS 1 /* that every undefined key also sends */
#endif /* out nulls. take it as experimental */
/* code, this behaviour will change in */
/* a future release */
#if !defined PCVT_BACKUP_FONTS /* ---------- DEFAULT: ON ------------- */
# define PCVT_BACKUP_FONTS 1 /* fonts are always kept memory-backed; */
#elif PCVT_BACKUP_FONTS != 0 /* otherwise copies are only made if */
# undef PCVT_BACKUP_FONTS /* they are needed. */
# define PCVT_BACKUP_FONTS 1
#endif
#ifndef PCVT_SYSBEEPF /* timer chip value to be used for the */
# define PCVT_SYSBEEPF 1193182 /* sysbeep frequency value. */
#endif /* this should really go somewhere else,*/
/* e.g. in isa.h; but it used to be in */
/* each driver, sometimes even with */
/* different values (:-) */
#if !defined PCVT_SETCOLOR /* ---------- DEFAULT: OFF ------------ */
# define PCVT_SETCOLOR 0 /* enable making colors settable. this */
#elif PCVT_SETCOLOR != 0 /* introduces a new escape sequence */
# undef PCVT_SETCOLOR /* <ESC d> which is (i think) not */
# define PCVT_SETCOLOR 1 /* standardized, so this is an option */
#endif /* (Birthday present for Bruce ! :-) */
#if !defined PCVT_132GENERIC /* ---------- DEFAULT: OFF ------------ */
# define PCVT_132GENERIC 0 /* if you #define this, you enable */
#elif PCVT_132GENERIC != 0 /* EXPERIMENTAL (!!!!!!!!!!!!) */
# undef PCVT_132GENERIC /* USE-AT-YOUR-OWN-RISK, */
# define PCVT_132GENERIC 1 /* MAY-DAMAGE-YOUR-MONITOR */
#endif /* code to switch generic VGA boards/ */
/* chipsets to 132 column mode. Since */
/* i could not verify this option, i */
/* prefer to NOT generally enable this, */
/* if you want to play, look at the */
/* hints and the code in pcvt_sup.c and */
/* get in contact with Joerg Wunsch, who*/
/* submitted this code. Be careful !!! */
#if !defined PCVT_PALFLICKER /* ---------- DEFAULT: OFF ------------ */
# define PCVT_PALFLICKER 0 /* this option turns off the screen */
#elif PCVT_PALFLICKER != 0 /* during accesses to the VGA DAC */
# undef PCVT_PALFLICKER /* registers. why: on one fo the tested */
# define PCVT_PALFLICKER 1 /* pc's (WD-chipset), accesses to the */
#endif /* vga dac registers caused distortions */
/* on the screen. Ferraro says, one has */
/* to blank the screen. the method used */
/* to accomplish this stopped the noise */
/* but introduced another flicker, so */
/* this is for you to experiment ..... */
/* - see also PCVT_WAITRETRACE below -- */
#if !defined PCVT_WAITRETRACE /* ---------- DEFAULT: OFF ------------ */
# define PCVT_WAITRETRACE 0 /* this option waits for being in a */
#elif PCVT_WAITRETRACE != 0 /* retrace window prior to accessing */
# undef PCVT_WAITRETRACE /* the VGA DAC registers. */
# define PCVT_WAITRETRACE 1 /* this is the other method Ferraro */
#endif /* mentioned in his book. this option */
/* did eleminate the flicker noticably */
/* but not completely. besides that, it */
/* is implemented as a busy-wait loop */
/* which is a no-no-no in environments */
/* like this - VERY BAD PRACTICE !!!!! */
/* the other method implementing it is */
/* using the vertical retrace irq, but */
/* we get short of irq-lines on pc's. */
/* this is for you to experiment ..... */
/* -- see also PCVT_PALFLICKER above -- */
#if !defined PCVT_INHIBIT_NUMLOCK /* --------- DEFAULT: OFF ----------- */
# define PCVT_INHIBIT_NUMLOCK 0 /* A notebook hack: since i am getting */
#elif PCVT_INHIBIT_NUMLOCK != 0 /* tired of the numlock LED always */
# undef PCVT_INHIBIT_NUMLOCK /* being turned on - which causes the */
# define PCVT_INHIBIT_NUMLOCK 1 /* right half of my keyboard being */
#endif /* interpreted as a numeric keypad and */
/* thus going unusable - i want to */
/* have a better control over it. If */
/* this option is enabled, only the */
/* numlock key itself and the related */
/* ioctls will modify the numlock */
/* LED. (The ioctl is needed for the */
/* ServerNumLock feature of XFree86.) */
/* The default state is changed to */
/* numlock off, and the escape */
/* sequences to switch between numeric */
/* and application mode keypad are */
/* silently ignored. */
#if !defined PCVT_NOFASTSCROLL /* ---------- DEFAULT: OFF ------------ */
# define PCVT_NOFASTSCROLL 0 /* If off, enables code for fast scroll.*/
#elif PCVT_NOFASTSCROLL != 0 /* This is done by changing the CRTC */
# undef PCVT_NOFASTSCROLL /* screen start address for scrolling */
# define PCVT_NOFASTSCROLL 1 /* and using 2 times the screen size as */
#endif /* buffer. The fastscroll code works */
/* ONLY for VGA/EGA/CGA because it uses */
/* the crtc for hardware scrolling and */
/* therefore needs more than the one */
/* page video memory MDA and most */
/* Hercules boards support. */
/* If you run pcvt ONLY on MDA/Hercules */
/* you should disable fastscroll to save*/
/* the time to decide which board you */
/* are running pcvt on at runtime. */
/* [see roll_up() and roll_down().] */
#if !defined PCVT_MDAFASTSCROLL /* ---------- DEFAULT: OFF ------------ */
# define PCVT_MDAFASTSCROLL 0 /* If on, enables code for fast scroll */
#elif PCVT_MDAFASTSCROLL != 0 /* on MDA/Hercules (see notes for */
# undef PCVT_MDAFASTSCROLL /* PCVT_NOFASTSCROLL). Works only on */
# define PCVT_MDAFASTSCROLL 1 /* MDA/Hercules which do support more */
#endif /* than one page of video memory. */
/*---------------------------------------------------------------------------*
* Kernel messages attribute definitions
* These define the foreground and background attributes used to
* emphasize messages from the kernel on color and mono displays.
*---------------------------------------------------------------------------*/
#if !defined COLOR_KERNEL_FG /* color displays */
#define COLOR_KERNEL_FG FG_LIGHTGREY /* kernel messages, foreground */
#endif
#if !defined COLOR_KERNEL_BG
#define COLOR_KERNEL_BG BG_RED /* kernel messages, background */
#endif
#if !defined MONO_KERNEL_FG /* monochrome displays */
#define MONO_KERNEL_FG FG_UNDERLINE /* kernel messages, foreground */
#endif
#if !defined MONO_KERNEL_BG
#define MONO_KERNEL_BG BG_BLACK /* kernel messages, background */
#endif
/*---------------------------------- E O F ----------------------------------*/

View File

@ -1 +0,0 @@
int pccnattach __P((void));

View File

@ -1,936 +0,0 @@
/*
* Copyright (c) 1992, 1995 Hellmuth Michaelis and Joerg Wunsch.
*
* Copyright (c) 1992, 1993 Brian Dunford-Shore and Scott Turner.
*
* Copyright (c) 1993 Charles M. Hannum.
*
* All rights reserved.
*
* Parts of this code regarding the NetBSD interface were written
* by Charles M. Hannum.
*
* 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, Scott Turner
* and Charles M. Hannum.
* 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.
*
*
* @(#)pcvt_drv.c, 3.32, Last Edit-Date: [Tue Oct 3 11:19:47 1995]
*
*/
/*---------------------------------------------------------------------------*
*
* pcvt_drv.c VT220 Driver Main Module / OS - Interface
* ---------------------------------------------------------
* -hm ------------ Release 3.00 --------------
* -hm integrating NetBSD-current patches
* -hm adding ttrstrt() proto for NetBSD 0.9
* -hm kernel/console output cursor positioning fixed
* -hm kernel/console output switches optional to screen 0
* -hm FreeBSD 1.1 porting
* -hm the NetBSD 0.9 compiler detected a nondeclared var which was
* NOT detected by neither the NetBSD-current nor FreeBSD 1.x!
* -hm including Michael's keyboard fifo code
* -hm Joergs patch for FreeBSD tty-malloc code
* -hm adjustments for NetBSD-current
* -hm FreeBSD bugfix from Joerg re timeout/untimeout casts
* -jw including Thomas Gellekum's FreeBSD 1.1.5 patch
* -hm adjusting #if's for NetBSD-current
* -hm applying Joerg's patch for FreeBSD 2.0
* -hm patch from Onno & Martin for NetBSD-current (post 1.0)
* -hm some adjustments for NetBSD 1.0
* -hm NetBSD PR #400: screen size report for new session
* -hm patch from Rafael Boni/Lon Willett for NetBSD-current
* -hm bell patch from Thomas Eberhardt for NetBSD
* -hm multiple X server bugfixes from Lon Willett
* -hm patch from joerg - pcdevtotty for FreeBSD pre-2.1
* -hm delay patch from Martin Husemann after port-i386 ml-discussion
* -jw add some code to provide more FreeBSD pre-2.1 support
* -hm patches from Michael for NetBSD-current (Apr/21/95) support
* -hm merged in changes from FreeBSD 2.0.5-RELEASE
* -hm NetBSD-current patches from John Kohl
* -hm ---------------- Release 3.30 -----------------------
* -hm patch from Joerg in pcopen() to make mouse emulator work again
* -hm patch from Frank van der Linden for keyboard state per VT
* -hm no TS_ASLEEP anymore in FreeBSD 2.1.0 SNAP 950928
* -hm ---------------- Release 3.32 -----------------------
*
*---------------------------------------------------------------------------*/
#define EXTERN /* allocate mem */
#include "pcvt_hdr.h" /* global include */
#include "pcvt_cons.h" /* NetBSD only */
/* consistency check: pcvt can't coexist with pckbc, vga or pcdisplay */
#include "pckbc.h"
#include "vga.h"
#include "pcdisplay.h"
#if (NPCKBC > 0) || (NVGA > 0) || (NPCDISPLAY > 0)
#error "pcvt and (pckbc or vga or pcdisplay) can't coexist"
#endif
#ifdef NOTDEF
unsigned __debug = 0; /*0xffe */;
static __color;
static nrow;
#endif
static void vgapelinit(void); /* read initial VGA DAC palette */
int getchar(void);
void pccnpollc(Dev_t, int);
int pcprobe(struct device *, struct cfdata *, void *);
void pcattach(struct device *, struct device *, void *);
int
pcprobe(struct device *parent, struct cfdata *match, void *aux)
{
kbd_code_init();
((struct isa_attach_args *)aux)->ia_iosize = 16;
return 1;
}
void
pcattach(struct device *parent, struct device *self, void *aux)
{
struct isa_attach_args *ia = aux;
struct vt_softc *sc = (void *) self;
int i;
if(do_initialization)
vt_coldinit();
vt_coldmalloc(); /* allocate memory for screens */
printf("\n%s: ", self->dv_xname);
switch(adaptor_type)
{
case MDA_ADAPTOR:
printf("mda");
break;
case CGA_ADAPTOR:
printf("cga");
break;
case EGA_ADAPTOR:
printf("ega");
break;
case VGA_ADAPTOR:
printf("%s, ", (char *)vga_string(vga_type));
if(can_do_132col)
printf("80/132 col");
else
printf("80 col");
vgapelinit();
break;
default:
printf("unknown");
break;
}
if(color == 0)
printf(", mono");
else
printf(", color");
printf(", %d scr, ", totalscreens);
switch(keyboard_type)
{
case KB_AT:
printf("at-");
break;
case KB_MFII:
printf("mf2-");
break;
default:
printf("unknown ");
break;
}
printf("kbd, [R%s]\n", PCVT_REL);
for(i = 0; i < totalscreens; i++)
{
vs[i].vs_tty = ttymalloc();
tty_attach(vs[i].vs_tty);
}
#if PCVT_EMU_MOUSE
pc_tty[totalscreens] = ttymalloc(); /* the mouse emulator tty */
#endif /* PCVT_EMU_MOUSE */
pcconsp = vs[0].vs_tty;
async_update();
sc->sc_ih = isa_intr_establish(ia->ia_ic, ia->ia_irq, IST_EDGE,
IPL_TTY, pcintr, (void *)0);
/*
* Look for children of the keyboard controller.
* XXX Really should decouple keyboard controller
* from the console code.
*/
while (config_found(self, ia->ia_ic, NULL) != NULL)
/* will break when no more children */ ;
if(pcvt_is_console) {
int maj;
/* locate the major number */
for (maj = 0; maj < nchrdev; maj++)
if (cdevsw[maj].d_open == pcopen)
break;
cn_tab->cn_dev = makedev(maj, 0);
/* minor number selects virtual screen,
console always uses "0" (hardwired at
various places) */
printf("%s: console\n", sc->sc_dev.dv_xname);
}
}
/* had a look at the friedl driver */
struct tty *
get_pccons(Dev_t dev)
{
register int i = minor(dev);
#if PCVT_EMU_MOUSE
if(i == totalscreens)
return(pc_tty[i]);
#endif /* PCVT_EMU_MOUSE */
if(i >= PCVT_NSCREENS)
return(NULL);
return(vs[i].vs_tty);
}
/*---------------------------------------------------------------------------*
* /dev/ttyc0, /dev/ttyc1, etc.
*---------------------------------------------------------------------------*/
int
pcopen(Dev_t dev, int flag, int mode, struct proc *p)
{
register struct tty *tp;
register struct video_state *vsx;
int s, retval;
int winsz = 0;
int i = minor(dev);
#if PCVT_EMU_MOUSE
if(i == totalscreens)
vsx = 0;
else
#endif /* PCVT_EMU_MOUSE */
vsx = &vs[i];
if((tp = get_pccons(dev)) == NULL)
return ENXIO;
#if PCVT_EMU_MOUSE
if(i == totalscreens)
{
if(mouse.opened == 0)
mouse.buttons = mouse.extendedseen =
mouse.breakseen = mouse.lastmove.tv_sec = 0;
mouse.minor = i;
mouse.opened++;
}
else
#endif /* PCVT_EMU_MOUSE */
vsx->openf++;
tp->t_oproc = pcstart;
tp->t_param = pcparam;
tp->t_dev = dev;
if ((tp->t_state & TS_ISOPEN) == 0)
{
ttychars(tp);
tp->t_iflag = TTYDEF_IFLAG;
tp->t_oflag = TTYDEF_OFLAG;
tp->t_cflag = TTYDEF_CFLAG;
tp->t_lflag = TTYDEF_LFLAG;
tp->t_ispeed = tp->t_ospeed = TTYDEF_SPEED;
pcparam(tp, &tp->t_termios);
ttsetwater(tp);
}
else if (tp->t_state & TS_XCLUDE && p->p_ucred->cr_uid != 0)
return (EBUSY);
tp->t_state |= TS_CARR_ON;
tp->t_cflag |= CLOCAL; /* cannot be a modem (:-) */
if ((tp->t_state & TS_ISOPEN) == 0) /* is this a "cold" open ? */
winsz = 1; /* yes, set winsize later */
retval = ((*linesw[tp->t_line].l_open)(dev, tp));
if(winsz == 1
#if PCVT_EMU_MOUSE
&& vsx /* the mouse device has no vsx */
#endif /* PCVT_EMU_MOUSE */
)
{
/*
* The line discipline has clobbered t_winsize if TS_ISOPEN
* was clear. (NetBSD PR #400 from Bill Sommerfeld)
* We have to do this after calling the open routine, because
* it does some other things in other/older *BSD releases -hm
*/
s = spltty();
tp->t_winsize.ws_col = vsx->maxcol;
tp->t_winsize.ws_row = vsx->screen_rows;
tp->t_winsize.ws_xpixel = (vsx->maxcol == 80)? 720: 1056;
tp->t_winsize.ws_ypixel = 400;
splx(s);
}
return(retval);
}
int
pcclose(Dev_t dev, int flag, int mode, struct proc *p)
{
register struct tty *tp;
register struct video_state *vsx;
int i = minor(dev);
#if PCVT_EMU_MOUSE
if(i == totalscreens)
vsx = 0;
else
#endif /* PCVT_EMU_MOUSE */
vsx = &vs[i];
if((tp = get_pccons(dev)) == NULL)
return ENXIO;
(*linesw[tp->t_line].l_close)(tp, flag);
ttyclose(tp);
#if PCVT_EMU_MOUSE
if(i == totalscreens)
mouse.opened = 0;
else
#endif /* PCVT_EMU_MOUSE */
vsx->openf = 0;
#if PCVT_EMU_MOUSE
if(i == totalscreens)
return (0);
#endif /* PCVT_EMU_MOUSE */
reset_usl_modes(vsx);
return(0);
}
int
pcread(Dev_t dev, struct uio *uio, int flag)
{
register struct tty *tp;
if((tp = get_pccons(dev)) == NULL)
return ENXIO;
return ((*linesw[tp->t_line].l_read)(tp, uio, flag));
}
int
pcwrite(Dev_t dev, struct uio *uio, int flag)
{
register struct tty *tp;
if((tp = get_pccons(dev)) == NULL)
return ENXIO;
return ((*linesw[tp->t_line].l_write)(tp, uio, flag));
}
struct tty *
pctty(Dev_t dev)
{
register struct tty *tp;
if((tp = get_pccons(dev)) == NULL)
return 0;
return tp;
}
int
pcioctl(Dev_t dev, int cmd, caddr_t data, int flag, struct proc *p)
{
register int error;
register struct tty *tp;
if((tp = get_pccons(dev)) == NULL)
return(ENXIO);
/* note that some ioctl's are global, e.g. KBSTPMAT: There is
* only one keyboard and different repeat rates for instance between
* sessions are a suspicious wish. If you really need this make the
* appropriate variables arrays
*/
#if PCVT_EMU_MOUSE
if(minor(dev) == totalscreens)
{
if((error = mouse_ioctl(dev, cmd, data)) >= 0)
return error;
goto do_standard;
}
#endif /* PCVT_EMU_MOUSE */
if((error = usl_vt_ioctl(dev, cmd, data, flag, p)) >= 0)
return (error == PCVT_ERESTART) ? ERESTART : error;
#ifdef XSERVER
/*
* just for compatibility:
* XFree86 < 2.0 and SuperProbe still might use it
*
* NB: THIS IS A HACK! Do not use it unless you explicitly need.
* Especially, since the vty is not put into process-controlled
* mode (this would require the application to co-operate), any
* attempts to switch vtys while this kind of X mode is active
* may cause serious trouble.
*/
switch(cmd)
{
case CONSOLE_X_MODE_ON:
{
int i;
if((error = usl_vt_ioctl(dev, KDENABIO, 0, flag, p)) > 0)
return error;
i = KD_GRAPHICS;
if((error = usl_vt_ioctl(dev, KDSETMODE, (caddr_t)&i, flag, p))
> 0)
return error;
i = K_RAW;
error = usl_vt_ioctl(dev, KDSKBMODE, (caddr_t)&i, flag, p);
return error;
}
case CONSOLE_X_MODE_OFF:
{
int i;
(void)usl_vt_ioctl(dev, KDDISABIO, 0, flag, p);
i = KD_TEXT;
(void)usl_vt_ioctl(dev, KDSETMODE, (caddr_t)&i, flag, p);
i = K_XLATE;
(void)usl_vt_ioctl(dev, KDSKBMODE, (caddr_t)&i, flag, p);
return 0;
}
case CONSOLE_X_BELL:
/*
* If `data' is non-null, the first int value denotes
* the pitch, the second a duration. Otherwise, behaves
* like BEL.
*/
if (data)
{
sysbeep(((int *)data)[0],
((int *)data)[1] * hz / 1000);
}
else
{
sysbeep(PCVT_SYSBEEPF / 1493, hz / 4);
}
return (0);
default: /* fall through */ ;
}
#endif /* XSERVER */
if((error = kbdioctl(dev,cmd,data,flag)) >= 0)
return error;
if((error = vgaioctl(dev,cmd,data,flag)) >= 0)
return error;
#if PCVT_EMU_MOUSE
do_standard:
#endif /* PCVT_EMU_MOUSE */
if((error = (*linesw[tp->t_line].l_ioctl)(tp, cmd, data, flag, p)) >= 0)
return (error);
if((error = ttioctl(tp, cmd, data, flag, p)) >= 0)
return (error);
return (ENOTTY);
}
int
pcmmap(Dev_t dev, int offset, int nprot)
{
if ((u_int)offset >= 0x20000)
return -1;
return i386_btop((0xa0000 + offset));
}
/*---------------------------------------------------------------------------*
*
* handle a keyboard receive interrupt
*
* NOTE: the keyboard is multiplexed by means of "pcconsp"
* between virtual screens. pcconsp - switching is done in
* the vgapage() routine
*
*---------------------------------------------------------------------------*/
#if PCVT_KBD_FIFO
u_char pcvt_kbd_fifo[PCVT_KBD_FIFO_SZ];
int pcvt_kbd_wptr = 0;
int pcvt_kbd_rptr = 0;
short pcvt_kbd_count= 0;
static u_char pcvt_timeout_scheduled = 0;
static struct callout pcvt_timeout_ch = CALLOUT_INITIALIZER;
static void pcvt_timeout (void *arg)
{
u_char *cp;
int s;
pcvt_timeout_scheduled = 0;
#if PCVT_SCREENSAVER
pcvt_scrnsv_reset();
#endif /* PCVT_SCREENSAVER */
while (pcvt_kbd_count)
{
if (((cp = sgetc(1)) != 0) &&
(vs[current_video_screen].openf))
{
#if PCVT_NULLCHARS
if(*cp == '\0')
{
/* pass a NULL character */
(*linesw[pcconsp->t_line].l_rint)('\0', pcconsp);
}
/* XXX */ else
#endif /* PCVT_NULLCHARS */
while (*cp)
(*linesw[pcconsp->t_line].l_rint)(*cp++ & 0xff, pcconsp);
}
s = spltty();
if (!pcvt_kbd_count)
pcvt_timeout_scheduled = 0;
splx(s);
}
return;
}
#endif
int
pcintr(void *arg)
{
#if PCVT_KBD_FIFO
u_char dt;
u_char ret = -1;
int s;
#else /* !PCVT_KBD_FIFO */
u_char *cp;
#endif /* PCVT_KBD_FIFO */
#if PCVT_SCREENSAVER
pcvt_scrnsv_reset();
#endif /* PCVT_SCREENSAVER */
#if PCVT_KBD_FIFO
if (kbd_polling)
{
if(sgetc(1) == 0)
return -1;
else
return 1;
}
while (inb(CONTROLLER_CTRL) & STATUS_OUTPBF) /* check 8042 buffer */
{
ret = 1; /* got something */
PCVT_KBD_DELAY(); /* 7 us delay */
dt = inb(CONTROLLER_DATA); /* get it 8042 data */
if (pcvt_kbd_count >= PCVT_KBD_FIFO_SZ) /* fifo overflow ? */
{
log (LOG_WARNING, "pcvt: keyboard buffer overflow\n");
}
else
{
pcvt_kbd_fifo[pcvt_kbd_wptr++] = dt; /* data -> fifo */
s = spltty(); /* XXX necessary ? */
pcvt_kbd_count++; /* update fifo count */
splx(s);
if (pcvt_kbd_wptr >= PCVT_KBD_FIFO_SZ)
pcvt_kbd_wptr = 0; /* wraparound pointer */
}
}
if (ret == 1) /* got data from keyboard ? */
{
if (!pcvt_timeout_scheduled) /* if not already active .. */
{
s = spltty();
pcvt_timeout_scheduled = 1; /* flag active */
callout_reset(&pcvt_timeout_ch, 1,
(TIMEOUT_FUNC_T)pcvt_timeout, NULL); /* fire off */
splx(s);
}
}
return (ret);
#else /* !PCVT_KBD_FIFO */
if((cp = sgetc(1)) == 0)
return -1;
if (kbd_polling)
return 1;
if(!(vs[current_video_screen].openf)) /* XXX was vs[minor(dev)] */
return 1;
#if PCVT_NULLCHARS
if(*cp == '\0')
{
/* pass a NULL character */
(*linesw[pcconsp->t_line].l_rint)('\0', pcconsp);
return 1;
}
#endif /* PCVT_NULLCHARS */
while (*cp)
(*linesw[pcconsp->t_line].l_rint)(*cp++ & 0xff, pcconsp);
return 1;
#endif /* PCVT_KBD_FIFO */
}
void
pcstart(register struct tty *tp)
{
int s, len;
u_char buf[PCVT_PCBURST];
s = spltty();
if (tp->t_state & (TS_TIMEOUT|TS_BUSY|TS_TTSTOP))
goto out;
if (tp->t_outq.c_cc == 0) {
async_update();
goto low;
}
tp->t_state |= TS_BUSY;
splx(s);
/*
* We need to do this outside spl since it could be fairly
* expensive and we don't want our serial ports to overflow.
*/
while ((len = q_to_b(&tp->t_outq, buf, PCVT_PCBURST)) != 0)
sput(&buf[0], 0, len, minor(tp->t_dev));
s = spltty();
tp->t_state &= ~TS_BUSY;
tp->t_state |= TS_TIMEOUT;
callout_reset(&tp->t_rstrt_ch, 1, ttrstrt, tp);
if (tp->t_outq.c_cc <= tp->t_lowat)
{
low:
if (tp->t_state&TS_ASLEEP)
{
tp->t_state &= ~TS_ASLEEP;
wakeup((caddr_t)&tp->t_outq);
}
selwakeup(&tp->t_wsel);
}
out:
splx(s);
}
void
pcstop(struct tty *tp, int flag)
{
}
/*---------------------------------------------------------------------------*
* /dev/console
*---------------------------------------------------------------------------*/
int
pccnattach()
{
static struct consdev pccons = { NULL, NULL,
pccngetc, pccnputc, pccnpollc, NULL, NODEV, CN_NORMAL};
cn_tab = &pccons;
pcvt_is_console = 1;
return(0);
}
void
pccnputc(Dev_t dev, U_char c)
{
#if PCVT_SW0CNOUTP
if(current_video_screen != 0)
{
switch_screen(0, 0);
}
#endif /* PCVT_SW0CNOUTP */
if (c == '\n')
sput("\r", 1, 1, 0);
sput((char *) &c, 1, 1, 0);
async_update();
}
int
pccngetc(Dev_t dev)
{
register int s;
register u_char *cp;
#ifdef XSERVER
if (dev != NODEV && vs[minor(dev)].kbd_state == K_RAW)
return 0;
#endif /* XSERVER */
s = spltty(); /* block pcrint while we poll */
cp = sgetc(0);
splx(s);
async_update();
/* this belongs to cons.c */
if (*cp == '\r')
return('\n');
return (*cp);
}
void
pccnpollc(Dev_t dev, int on)
{
struct vt_softc *sc = NULL; /* XXX not used */
kbd_polling = on;
if (!on) {
register int s;
/*
* If disabling polling, make sure there are no bytes left in
* the FIFO, holding up the interrupt line. Otherwise we
* won't get any further interrupts.
*/
s = spltty();
pcintr(sc);
splx(s);
}
}
/*---------------------------------------------------------------------------*
* Set line parameters
*---------------------------------------------------------------------------*/
int
pcparam(struct tty *tp, struct termios *t)
{
register int cflag = t->c_cflag;
/* and copy to tty */
tp->t_ispeed = t->c_ispeed;
tp->t_ospeed = t->c_ospeed;
tp->t_cflag = cflag;
return(0);
}
/* special characters */
#define bs 8
#define lf 10
#define cr 13
#define cntlc 3
#define del 0177
#define cntld 4
int
getchar(void)
{
u_char thechar;
int x;
kbd_polling = 1;
x = splhigh();
sput(">", 1, 1, 0);
async_update();
thechar = *(sgetc(0));
kbd_polling = 0;
splx(x);
switch (thechar)
{
default:
if (thechar >= ' ')
sput(&thechar, 1, 1, 0);
return(thechar);
case cr:
case lf:
sput("\r\n", 1, 2, 0);
return(lf);
case bs:
case del:
sput("\b \b", 1, 3, 0);
return(thechar);
case cntlc:
sput("^C\r\n", 1, 4, 0) ;
cpu_reset();
case cntld:
sput("^D\r\n", 1, 4, 0) ;
return(0);
}
}
/*----------------------------------------------------------------------*
* read initial VGA palette (as stored by VGA ROM BIOS) into
* palette save area
*----------------------------------------------------------------------*/
void
vgapelinit(void)
{
register unsigned idx;
register struct rgb *val;
/* first, read all and store to first screen's save buffer */
for(idx = 0, val = vs[0].palette; idx < NVGAPEL; idx++, val++)
vgapaletteio(idx, val, 0 /* read it */);
/* now, duplicate for remaining screens */
for(idx = 1; idx < PCVT_NSCREENS; idx++)
bcopy(vs[0].palette, vs[idx].palette,
NVGAPEL * sizeof(struct rgb));
}
/*-------------------------- E O F -------------------------------------*/

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

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