diff --git a/share/man/man1/man1.i386/kcon.1 b/share/man/man1/man1.i386/kcon.1 new file mode 100644 index 000000000000..5c0bcec11b69 --- /dev/null +++ b/share/man/man1/man1.i386/kcon.1 @@ -0,0 +1,119 @@ +.\" Copyright (c) 1992,1993,1994 Hellmuth Michaelis +.\" +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by Hellmuth Michaelis +.\" 4. The name authors may not be used to endorse or promote products +.\" derived from this software without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR +.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +.\" IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, +.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" @(#)kcon.1, 3.00, Last Edit-Date: [Mon Jan 10 21:20:55 1994] +.\" +.Dd January 3, 1993 +.Dt KCON 1 +.Sh NAME +.Nm kcon +.Nd keyboard control and remapping +.Sh SYNOPSIS +.Nm kcon +.Op Fl d Ar delay +.Op Fl l +.Op Fl m Ar map +.Op Fl o +.Op Fl p +.Op Fl r Ar rate +.Op Fl s +.Op Fl t Ns Ar +/- +.Op Fl x +.Sh DESCRIPTION +.Nm kcon +is used for controlling all aspects of keyboard configuration for the 'pcvt' +video driver. +.Pp +The available options are: +.Bl -tag -width flag +.It Fl d Ar delay +Specifies the delay after which the last key entered will be repeated by the +Keyboard. Valid values are 0..3 corresponding to delays of 250, 500, 750 and +1000 milliseconds. +.It Fl l +Displays the current keyboard map in use by the driver. +.It Fl m Ar map +Specifies the map entry to be searched in the keyboard capabilities database +.Nm keycap. +The database is searched for the entry and if found, the mapping +is loaded and is used in the driver from then on. +.It Fl o +Switches display of control codes to octal in the listing of the current map. +To be used in conjunction with the +.Fl l +option. +.It Fl p +Uses 'pure' output when listing - the Escape character is displayed in either +octal or hexadecimal and not as 'ESC'. To be used in conjunction with the +.Fl l +option. +.It Fl r Ar rate +Specifies the character repetition rate. Valid argument values are 0...31 +corresponding to rates of 30 charcters/second ... 2 characters/second. +.It Fl s +Displays the current settings of the rate and delay values. +.It Fl t Ar +/- +Specify this option to enable ( +.Ar + +) or disable ( +.Ar - +) the repetition of keys. +.It Fl x +Switches display of control codes to hexadecimal in the listing of the current map. +To be used in conjunction with the +.Fl l +option. This is the default behaviour. +.Sh FILES +.Bl -tag -width /usr/share/misc/keycap -compact +.It Pa /usr/share/misc/keycap +Keyboard capabilities data base file if nothing else was choosen during installation. +.It Pa /dev/console +Keyboard raw device. +.Sh SEE ALSO +.Xr keycap 3 , +.Xr keycap 5 +.Sh BUGS +.Nm kcon +detects several inconsistencies in the keycap database. In case of errors +.Nm kcon +exits with an error message. If this happens, the keyboard may remain in +an undefined state. To recover from such situation, execute +.Nm kcon -m default +.Sh EXAMPLES +The command +.Dq Li kcon -m gb +loads the entry 'gb' from the keycap file into the keyboard to switch to +a british keyboard behaviour. + +The command +.Dq Li kcon -r 0 -d 0 +switches the keyboard to emit characters at a rate of 30 characters per second +after a key has been held down for 250 milliseconds. + + diff --git a/share/man/man1/man1.i386/loadfont.1 b/share/man/man1/man1.i386/loadfont.1 new file mode 100644 index 000000000000..f799574775d7 --- /dev/null +++ b/share/man/man1/man1.i386/loadfont.1 @@ -0,0 +1,87 @@ +.\" Copyright (c) 1992,1993,1994 Hellmuth Michaelis +.\" +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by Hellmuth Michaelis +.\" 4. The name authors may not be used to endorse or promote products +.\" derived from this software without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR +.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +.\" IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, +.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" @(#)loadfont.1, 3.00, Last Edit-Date: [Mon Jan 10 21:25:01 1994] +.\" +.Dd January 3, 1993 +.Dt LOADFONT 1 +.Sh NAME +.Nm loadfont +.Nd is used to load fonts into EGA or VGA boards for use by the 'pcvt' video +driver. +.Sh SYNOPSIS +.Nm loadfont +.Op Fl c Ar charsetno +.Op Fl f Ar fontfilename +.Op Fl i +.Sh DESCRIPTION +The +.Nm loadfont +utility is used to load fonts needed for proper operation of the pcvt +VT220 driver on EGA and VGA boards into the font ram of this boards. +.Pp +The options are as follows: +.Bl -tag -width Ds +.It Fl c +Specifies the slot, the font is to load into. EGA boards have four +slots and VGA boards have eight slots available for downloading fonts. +.It Fl f +Specifies the file which contains the font to be downloaded. +.It Fl i +Gives information what type(s) of font do currently reside in which slot. +This is also the default behaviour if no options are specified on the commandline. +.El +.Pp +This utility is used only on EGA and VGA boards, as MDA, HCG and CGA boards +do not have downloadable charactersets available. +.Sh FILES +Unless otherwise specified in the Makefile, the following fontfiles are +available for the pcvt 2.0 distribution: + +.nf +/usr/share/misc/vgafonts/vt220l.808: 8x8 IBM II font +/usr/share/misc/vgafonts/vt220h.808: 8x8 Extension font +/usr/share/misc/vgafonts/vt220l.810: 8x10 IBM II font +/usr/share/misc/vgafonts/vt220h.810: 8x10 Extension font +/usr/share/misc/vgafonts/vt220l.814: 8x14 IBM II font +/usr/share/misc/vgafonts/vt220h.814: 8x14 Extension font +/usr/share/misc/vgafonts/vt220l.816: 8x16 IBM II font +/usr/share/misc/vgafonts/vt220h.816: 8x16 Extension font +.fi +.Sh EXAMPLES +The command +.Dq Li loadfont -c0 -f/usr/share/misc/vgafonts/vt220l.816 +loads a 8x16 font containing the standard IBM characterset II into font slot +0 on a VGA or EGA board. +.Sh BUGS +No known bugs +.Sh SEE ALSO +.Xr cursor 1 , +.Xr scon 1 , +.Xr pcvt 8 diff --git a/share/man/man3/man3.i386/keycap.3 b/share/man/man3/man3.i386/keycap.3 new file mode 100644 index 000000000000..af0cbc837635 --- /dev/null +++ b/share/man/man3/man3.i386/keycap.3 @@ -0,0 +1,121 @@ +.\" +.\" Copyright (c) 1992,1993,1994 Hellmuth Michaelis +.\" +.\" Copyright (c) 1990 The Regents of the University of California. +.\" +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)keycap.3, 3.00, Last Edit-Date: [Sun Jan 2 13:46:43 1994] +.\" +.Dd January 3, 1993 +.Dt KEYCAP 3 +.Sh NAME +.Nm kgetent , +.Nm kgetnum , +.Nm kgetflag , +.Nm kgetstr +.Nd routines for accessing the keycap database +.Sh SYNOPSIS +.Fn kgetent "char *bp" "char *name" +.Fn kgetnum "char *id" +.Fn kgetflag "char *id" +.Ft char * +.Fn kgetstr "char *id" "char *area" +.Sh DESCRIPTION +These functions extract and use capabilities from a keyboard capability data +base, usually +.Pa /usr/share/misc/keycap , +the format of which is described in +.Xr keycap 5 . +.Pp +The +.Fn kgetent +function +extracts the entry for keyboard mapping +.Fa name +into the buffer at +.Fa bp . +The +.Fa bp +argument +should be a character buffer of size +1024 and must be retained through all subsequent calls to +.Fn kgetnum , +.Fn kgetflag , +and +.Fn kgetstr . +The +.Fn kgetent +function +returns \-1 if none of the +.Nm keycap +data base files could be opened, +0 if the map name given does not have an entry, +and 1 if all goes well. +.Pp +The +.Fn kgetnum +function +gets the numeric value of capability +.Fa id , +returning \-1 if is not given for the map. +.Pp +The +.Fn kgetflag +function +returns 1 if the specified capability is present in +the map's entry, 0 if it is not. +.Pp +The +.Fn kgetstr +function +returns the string value of the capability +.Fa id , +places it in the buffer at +.Fa area , +and advances the +.Fa area +pointer. +The +.Fn kgetstr +function +returns +.Dv NULL +if the capability was not found. +.Pp +.Sh FILES +.Bl -tag -width /usr/share/misc/keycap -compact +.It Pa /usr/share/misc/keycap +Keyboard capabilities database (if nothing else choosen during installation). +.El +.Sh SEE ALSO +.Xr kcon 1 , +.Xr keycap 5 diff --git a/share/man/man5/man5.i386/keycap.5 b/share/man/man5/man5.i386/keycap.5 new file mode 100644 index 000000000000..8a11f59a5075 --- /dev/null +++ b/share/man/man5/man5.i386/keycap.5 @@ -0,0 +1,133 @@ +.\" +.\" Copyright (c) 1992,1993,1994 Hellmuth Michaelis +.\" +.\" Copyright (c) 1990 The Regents of the University of California. +.\" +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)keycap.5, 3.00, Last Edit-Date: [Sun Jan 2 13:45:59 1994] +.\" +.Dd January 3, 1993 +.Dt KEYCAP 5 +.Sh NAME +.Nm keycap +.Nd keyboard mapping data base +.Sh SYNOPSIS +.Nm keycap +.Sh DESCRIPTION +The +.Nm keycap +file +is a data base describing keyboard mappings, used by +.Xr kcon 1 . +.Pp +Entries in +.Nm keycap +consist of a number of `:'-separated fields. +The first entry for each mapping gives the names that are known for the +mapping, separated by `|' characters. +All names but the first and last +should be in lower case and contain no blanks; +the last name may well contain +upper case and blanks for readability. +.Sh CAPABILITIES +.Pp +.Bl -column indent indent +.Sy Name Type Description +.It "de bool Resets Keyboard mapping to compiled-in default" +.It "D bool Disables key completely" + +.It "m num specify key numbers for ALT keys +.It "l num specify key numbers for ALTGR keys +.It "h num specify key numbers for SHIFT keys +.It "t num specify key numbers for CONTROL keys +.It "ca num specify key number for the CAPS LOCK key +.It "sh num specify key number for the SHIFT LOCK key +.It "nl num specify key number for the NUM LOCK key +.It "sc num specify key number for the SCROLL LOCK key + +.It "K str bind a string to a unshifted (normal) key +.It "S str bind a string to a shifted key +.It "C str bind a string to a control key +.It "A str bind a string to a altgr key + +.It "tc str Entry of similar map \- must be last." +.El + +Parameter describing the key number can have values from 1 to 128. + +A string parameter may have up to 15 characters. + +.Pp +.Ss A Sample Entry +The following entry, which describes a test entry, is among the very +easy entries in the +.Nm keycap +file as of this writing. +.Pp +.Bd -literal +tt\||test\||Test entry which swaps y and z:\e + :K22=z:S22=Z:C22=\e032:\e + :K46=y:S46=Y:C46=\e031: + +.Ed +.Pp +Entries may continue onto multiple lines by giving a \e as the last +character of a line. Comments may be included on lines beginning with +.Dq # . +.Sh FILES +.Bl -tag -width /usr/share/misc/keycap -compact +.It Pa /usr/share/misc/keycap +File containing keyboard mapping descriptions. +.El +.Sh SEE ALSO +.Xr kcon 1 , +.Xr keycap 3 , +.Sh EXAMPLES +The entry +.Dq Li l1#60 +sets the keynumber for the ALTGR key to 60. + +The entry +.Dq Li K100=hugo +binds the string 'hugo' to the key number 100. + +The entry +.Dq Li K100=^D +binds the control character EOT (0x04) to the key number 100. + +The entry +.Dq Li K100=\e000 +binds the control character NUL (0x00) to the key number 100. + + + + diff --git a/share/man/man8/man8.i386/ispcvt.8 b/share/man/man8/man8.i386/ispcvt.8 new file mode 100644 index 000000000000..1820db279d8c --- /dev/null +++ b/share/man/man8/man8.i386/ispcvt.8 @@ -0,0 +1,88 @@ +.\" Copyright (c) 1992,1993,1994 Hellmuth Michaelis +.\" +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by Hellmuth Michaelis +.\" 4. The name authors may not be used to endorse or promote products +.\" derived from this software without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR +.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +.\" IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, +.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" @(#)ispcvt.1, 3.00, Last Edit-Date: [Mon Jan 10 21:19:00 1994] +.\" +.Dd December 30, 1993 +.Dt ISPCVT 1 +.Sh NAME +.Nm ispcvt +.Nd verify if current video driver is pcvt driver +.Sh SYNOPSIS +.Nm ispcvt +.Op Fl v +.Op Fl c +.Sh DESCRIPTION +The +.Nm ispcvt +utility allows the user to check wether the current video driver compiled +into the kernel is a pcvt driver. The major and minor release numbers of +the driver are also checked. +Furthermore +.Nm ispcvt +is also able to print out the values of all the +.Dq Ar PCVT_XXXXXX +compile time options, the driver in the current running kernel was +compiled with. +.Pp +The options are as follows: +.Bl -tag -width Ds +.It Fl v +Specifies being verbose. On success the name and revision is reported, on +failure which comparison failed. +.It Fl c +This options prints out the values of all +.Dq Ar PCVT_XXXXXX +#defines which were given to the compiler at the time the currently running +kernel was compiled. Specifying +.Fl v +with the +.Fl c +option gives a verbose listing of the compile-time options. +.Sh RETURN VALUE +.Bl -tag -width Ds +.Pp +.It Sy 0 +driver is pcvt and major and minor numbers match +.It Sy 1 +ioctl system call failed +.It Sy 2 +driver name mismatch +.It Sy 3 +name matched, release major number mismatch +.It Sy 4 +name & major number matched, release minor number mismatch +.It Sy 5 +usage error +.El +.Pp +.Sh BUGS +No known bugs +.Sh SEE ALSO +.Xr pcvt 8 diff --git a/sys/arch/i386/isa/pcvt/Util/ispcvt/Makefile b/sys/arch/i386/isa/pcvt/Util/ispcvt/Makefile new file mode 100644 index 000000000000..1787cc2dd0f4 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/ispcvt/Makefile @@ -0,0 +1,27 @@ + +.if !exists(${.CURDIR}/../Makefile.inc) +error: + @echo + @echo " You MUST link/copy" + @echo + @echo " ../Makefile.inc.NetBSD or ../Makefile.inc.FreeBSD" + @echo + @echo " to ../Makefile.inc before you can proceed !" + @echo +.else + +PROG = ispcvt +MAN8 = ispcvt.${MAN8EXT} + +.include + +# special bindir, this MUST stand after include +BINDIR = /usr/sbin + +$(PROG): $(INCDIR)/pcvt_ioctl.h + +beforeinstall: + @if [ ! -d $(MANDIR)8 ] ; then \ + echo making $(MANDIR)8; mkdir $(MANDIR)8; fi + +.endif diff --git a/sys/arch/i386/isa/pcvt/Util/ispcvt/ispcvt.8 b/sys/arch/i386/isa/pcvt/Util/ispcvt/ispcvt.8 new file mode 100644 index 000000000000..1820db279d8c --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/ispcvt/ispcvt.8 @@ -0,0 +1,88 @@ +.\" Copyright (c) 1992,1993,1994 Hellmuth Michaelis +.\" +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by Hellmuth Michaelis +.\" 4. The name authors may not be used to endorse or promote products +.\" derived from this software without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR +.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +.\" IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, +.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" @(#)ispcvt.1, 3.00, Last Edit-Date: [Mon Jan 10 21:19:00 1994] +.\" +.Dd December 30, 1993 +.Dt ISPCVT 1 +.Sh NAME +.Nm ispcvt +.Nd verify if current video driver is pcvt driver +.Sh SYNOPSIS +.Nm ispcvt +.Op Fl v +.Op Fl c +.Sh DESCRIPTION +The +.Nm ispcvt +utility allows the user to check wether the current video driver compiled +into the kernel is a pcvt driver. The major and minor release numbers of +the driver are also checked. +Furthermore +.Nm ispcvt +is also able to print out the values of all the +.Dq Ar PCVT_XXXXXX +compile time options, the driver in the current running kernel was +compiled with. +.Pp +The options are as follows: +.Bl -tag -width Ds +.It Fl v +Specifies being verbose. On success the name and revision is reported, on +failure which comparison failed. +.It Fl c +This options prints out the values of all +.Dq Ar PCVT_XXXXXX +#defines which were given to the compiler at the time the currently running +kernel was compiled. Specifying +.Fl v +with the +.Fl c +option gives a verbose listing of the compile-time options. +.Sh RETURN VALUE +.Bl -tag -width Ds +.Pp +.It Sy 0 +driver is pcvt and major and minor numbers match +.It Sy 1 +ioctl system call failed +.It Sy 2 +driver name mismatch +.It Sy 3 +name matched, release major number mismatch +.It Sy 4 +name & major number matched, release minor number mismatch +.It Sy 5 +usage error +.El +.Pp +.Sh BUGS +No known bugs +.Sh SEE ALSO +.Xr pcvt 8 diff --git a/sys/arch/i386/isa/pcvt/Util/ispcvt/ispcvt.c b/sys/arch/i386/isa/pcvt/Util/ispcvt/ispcvt.c new file mode 100644 index 000000000000..ee540f319d1c --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/ispcvt/ispcvt.c @@ -0,0 +1,254 @@ +/* + * Copyright (c) 1992,1993,1994 Hellmuth Michaelis + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Hellmuth Michaelis + * 4. The name authors may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +static char *id = + "@(#)ispcvt.c, 3.00, Last Edit-Date: [Sun Feb 20 22:30:58 1994]"; + +/*---------------------------------------------------------------------------* + * + * 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 + * + *---------------------------------------------------------------------------*/ + +#include +#include + +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; + + while( (c = getopt(argc, argv, "vc")) != EOF) + { + switch(c) + { + case 'v': + verbose = 1; + break; + + case 'c': + config = 1; + break; + + case '?': + default: + usage(); + break; + } + } + + if(ioctl(0, 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 - success: driver name [%s], revision [%1.1d.%02.2d]\n\n",pcvtid.name,pcvtid.rmajor,pcvtid.rminor); + } + + if(config == 0) + exit(0); + + if(ioctl(0, VGAPCVTINFO, &pcvtinfo) == -1) + { + if(verbose) + perror("ispcvt - ioctl VGAPCVTINFO failed, error"); + exit(1); + } + + + if(verbose) + { + switch(pcvtinfo.opsys) + { + case CONF_386BSD: + p = "PCVT_386BSD"; + break; + + 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,"Release Id = %u\n", pcvtinfo.opsysrel); + fprintf(stderr,"PCVT_NSCREENS = %u\t\t", pcvtinfo.nscreens); + fprintf(stderr,"PCVT_UPDATEFAST = %u\n", pcvtinfo.updatefast); + fprintf(stderr,"PCVT_UPDATESLOW = %u\t\t", pcvtinfo.updateslow); + fprintf(stderr,"PCVT_SYSBEEPF = %u\n", pcvtinfo.sysbeepf); + + fprintf(stderr,"PCVT_PCBURST = %u\n", pcvtinfo.pcburst); + + /* config booleans */ + + fprintf(stderr,"PCVT_VT220KEYB = %s\t\t", + ((u_int)pcvtinfo.compile_opts & (u_int)CONF_VT220KEYB) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_SCREENSAVER = %s\n", + (pcvtinfo.compile_opts & CONF_SCREENSAVER) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_PRETTYSCRNS = %s\t\t", + (pcvtinfo.compile_opts & CONF_PRETTYSCRNS) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_CTRL_ALT_DEL = %s\n", + (pcvtinfo.compile_opts & CONF_CTRL_ALT_DEL) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_USEKBDSEC = %s\t\t", + (pcvtinfo.compile_opts & CONF_USEKBDSEC) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_24LINESDEF = %s\n", + (pcvtinfo.compile_opts & CONF_24LINESDEF) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_EMU_MOUSE = %s\t\t", + (pcvtinfo.compile_opts & CONF_EMU_MOUSE) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_SHOWKEYS = %s\n", + (pcvtinfo.compile_opts & CONF_SHOWKEYS) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_KEYBDID = %s\t\t", + (pcvtinfo.compile_opts & CONF_KEYBDID) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_SIGWINCH = %s\n", + (pcvtinfo.compile_opts & CONF_SIGWINCH) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_NULLCHARS = %s\t\t", + (pcvtinfo.compile_opts & CONF_NULLCHARS) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_BACKUP_FONTS = %s\n", + (pcvtinfo.compile_opts & CONF_BACKUP_FONTS) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_FORCE8BIT = %s\t\t", + (pcvtinfo.compile_opts & CONF_FORCE8BIT) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_NEEDPG = %s\n", + (pcvtinfo.compile_opts & CONF_NEEDPG) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_SETCOLOR = %s\t\t", + (pcvtinfo.compile_opts & CONF_SETCOLOR) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_132GENERIC = %s\n", + (pcvtinfo.compile_opts & CONF_132GENERIC) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_PALFLICKER = %s\t\t", + (pcvtinfo.compile_opts & CONF_PALFLICKER) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_WAITRETRACE = %s\n", + (pcvtinfo.compile_opts & CONF_WAITRETRACE) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_XSERVER = %s\t\t", + (pcvtinfo.compile_opts & CONF_XSERVER) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_USL_VT_COMPAT = %s\n", + (pcvtinfo.compile_opts & CONF_USL_VT_COMPAT) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_FAKE_SYSCONS10 = %s\t\t", + (pcvtinfo.compile_opts & CONF_FAKE_SYSCONS10) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_INHIBIT_NUMLOCK = %s\n", + (pcvtinfo.compile_opts & CONF_INHIBIT_NUMLOCK) ? "ON" : "OFF"); + + fprintf(stderr,"PCVT_META_ESC = %s\n\n", + (pcvtinfo.compile_opts & CONF_META_ESC) ? "ON" : "OFF"); + } + else /* !verbose */ + { + fprintf(stderr,"BSD Version = %u\n", pcvtinfo.opsys); + fprintf(stderr,"PCVT_NSCREENS = %u\n", pcvtinfo.nscreens); + fprintf(stderr,"PCVT_UPDATEFAST = %u\n", pcvtinfo.updatefast); + fprintf(stderr,"PCVT_UPDATESLOW = %u\n", pcvtinfo.updateslow); + fprintf(stderr,"PCVT_SYSBEEPF = %u\n", pcvtinfo.sysbeepf); + fprintf(stderr,"Compile options = 0x%08X\n", pcvtinfo.compile_opts); + } +} + +usage() +{ + fprintf(stderr,"\nispcvt - verify current video driver is the pcvt-driver\n"); + fprintf(stderr,"usage: ispcvt [-v] [-c]\n"); + fprintf(stderr," -v be verbose\n"); + fprintf(stderr," -c print compile time configuration\n\n"); + exit(5); +} + diff --git a/sys/arch/i386/isa/pcvt/Util/kcon/Makefile b/sys/arch/i386/isa/pcvt/Util/kcon/Makefile new file mode 100644 index 000000000000..31c5acc93796 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/kcon/Makefile @@ -0,0 +1,26 @@ + +.if !exists(${.CURDIR}/../Makefile.inc) +error: + @echo + @echo " You MUST link/copy" + @echo + @echo " ../Makefile.inc.NetBSD or ../Makefile.inc.FreeBSD" + @echo + @echo " to ../Makefile.inc before you can proceed !" + @echo +.else + +PROG = kcon +DEVICE = /dev/ttyv0 +CFLAGS += -I${.CURDIR}/../keycap -DKEYB_DEVICE=\"${DEVICE}\" + +# the -Lfoo could be omitted if libkeycap.a were installed before +# making those programs here + +LDADD = -L${.CURDIR}/../keycap -L${.CURDIR}/../keycap/obj -lkeycap + +.include + +$(PROG): $(INCDIR)/pcvt_ioctl.h + +.endif diff --git a/sys/arch/i386/isa/pcvt/Util/kcon/kcon.1 b/sys/arch/i386/isa/pcvt/Util/kcon/kcon.1 new file mode 100644 index 000000000000..5c0bcec11b69 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/kcon/kcon.1 @@ -0,0 +1,119 @@ +.\" Copyright (c) 1992,1993,1994 Hellmuth Michaelis +.\" +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by Hellmuth Michaelis +.\" 4. The name authors may not be used to endorse or promote products +.\" derived from this software without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR +.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +.\" IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, +.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" @(#)kcon.1, 3.00, Last Edit-Date: [Mon Jan 10 21:20:55 1994] +.\" +.Dd January 3, 1993 +.Dt KCON 1 +.Sh NAME +.Nm kcon +.Nd keyboard control and remapping +.Sh SYNOPSIS +.Nm kcon +.Op Fl d Ar delay +.Op Fl l +.Op Fl m Ar map +.Op Fl o +.Op Fl p +.Op Fl r Ar rate +.Op Fl s +.Op Fl t Ns Ar +/- +.Op Fl x +.Sh DESCRIPTION +.Nm kcon +is used for controlling all aspects of keyboard configuration for the 'pcvt' +video driver. +.Pp +The available options are: +.Bl -tag -width flag +.It Fl d Ar delay +Specifies the delay after which the last key entered will be repeated by the +Keyboard. Valid values are 0..3 corresponding to delays of 250, 500, 750 and +1000 milliseconds. +.It Fl l +Displays the current keyboard map in use by the driver. +.It Fl m Ar map +Specifies the map entry to be searched in the keyboard capabilities database +.Nm keycap. +The database is searched for the entry and if found, the mapping +is loaded and is used in the driver from then on. +.It Fl o +Switches display of control codes to octal in the listing of the current map. +To be used in conjunction with the +.Fl l +option. +.It Fl p +Uses 'pure' output when listing - the Escape character is displayed in either +octal or hexadecimal and not as 'ESC'. To be used in conjunction with the +.Fl l +option. +.It Fl r Ar rate +Specifies the character repetition rate. Valid argument values are 0...31 +corresponding to rates of 30 charcters/second ... 2 characters/second. +.It Fl s +Displays the current settings of the rate and delay values. +.It Fl t Ar +/- +Specify this option to enable ( +.Ar + +) or disable ( +.Ar - +) the repetition of keys. +.It Fl x +Switches display of control codes to hexadecimal in the listing of the current map. +To be used in conjunction with the +.Fl l +option. This is the default behaviour. +.Sh FILES +.Bl -tag -width /usr/share/misc/keycap -compact +.It Pa /usr/share/misc/keycap +Keyboard capabilities data base file if nothing else was choosen during installation. +.It Pa /dev/console +Keyboard raw device. +.Sh SEE ALSO +.Xr keycap 3 , +.Xr keycap 5 +.Sh BUGS +.Nm kcon +detects several inconsistencies in the keycap database. In case of errors +.Nm kcon +exits with an error message. If this happens, the keyboard may remain in +an undefined state. To recover from such situation, execute +.Nm kcon -m default +.Sh EXAMPLES +The command +.Dq Li kcon -m gb +loads the entry 'gb' from the keycap file into the keyboard to switch to +a british keyboard behaviour. + +The command +.Dq Li kcon -r 0 -d 0 +switches the keyboard to emit characters at a rate of 30 characters per second +after a key has been held down for 250 milliseconds. + + diff --git a/sys/arch/i386/isa/pcvt/Util/kcon/kcon.c b/sys/arch/i386/isa/pcvt/Util/kcon/kcon.c new file mode 100644 index 000000000000..0c5a2e125695 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/kcon/kcon.c @@ -0,0 +1,738 @@ +/* + * Copyright (c) 1992,1993,1994 Hellmuth Michaelis + * + * Copyright (c) 1992,1993 Holger Veit. + * + * All rights reserved. + * + * This code is derived from software contributed to 386BSD by + * Holger Veit + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by + * Hellmuth Michaelis and Holger Veit + * 4. The name authors may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +static char *id = + "@(#)kcon.c, 3.00, Last Edit-Date: [Mon Jan 10 21:23:24 1994]"; + +/*---------------------------------------------------------------------------* + * + * 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 + * + *---------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include + +#include "keycap.h" + +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, "d:lm:opr:st:x")) != EOF) + { + switch(c) + { + case 'd': + df = 1; + delay = atoi(optarg); + break; + + case 'l': + lf = 1; + break; + + case 'm': + mf = 1; + map = argv[optind-1]; + 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((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(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: [-d delay] [-l] [-m map] [-o] [-p] [-r rate] [-t +/-] [-x]\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 ------------------------------------------------*/ diff --git a/sys/arch/i386/isa/pcvt/Util/keycap/Makefile b/sys/arch/i386/isa/pcvt/Util/keycap/Makefile new file mode 100644 index 000000000000..e151ab987895 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/keycap/Makefile @@ -0,0 +1,32 @@ + +.if !exists(${.CURDIR}/../Makefile.inc) +error: + @echo + @echo " You MUST link/copy" + @echo + @echo " ../Makefile.inc.NetBSD or ../Makefile.inc.FreeBSD" + @echo + @echo " to ../Makefile.inc before you can proceed !" + @echo +.else + +LIB = keycap +CAPDIR = /usr/share/misc +CAPPATH = $(CAPDIR)/keycap.pcvt +KEYCAPSRC= keycap.src +CFLAGS += -DKEYCAP_PATH=\"$(CAPPATH)\" +SRCS = keycap.c +MAN3 = keycap.${MAN3EXT} +MAN5 = man5/keycap.${MAN5EXT} +#CLEANFILES+= keycap.0 man5/keycap.0 + +beforeinstall: + @if [ ! -d ${LIBDIR} ]; then mkdir ${LIBDIR};fi + @echo "Saving old keycap database" + -mv -f ${CAPPATH} ${CAPPATH}.BAK + install -c -m ${LIBMODE} -o ${LIBOWN} -g ${LIBGRP} \ + ${.CURDIR}/${KEYCAPSRC} ${CAPPATH} + +.include + +.endif diff --git a/sys/arch/i386/isa/pcvt/Util/keycap/keycap.3 b/sys/arch/i386/isa/pcvt/Util/keycap/keycap.3 new file mode 100644 index 000000000000..af0cbc837635 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/keycap/keycap.3 @@ -0,0 +1,121 @@ +.\" +.\" Copyright (c) 1992,1993,1994 Hellmuth Michaelis +.\" +.\" Copyright (c) 1990 The Regents of the University of California. +.\" +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)keycap.3, 3.00, Last Edit-Date: [Sun Jan 2 13:46:43 1994] +.\" +.Dd January 3, 1993 +.Dt KEYCAP 3 +.Sh NAME +.Nm kgetent , +.Nm kgetnum , +.Nm kgetflag , +.Nm kgetstr +.Nd routines for accessing the keycap database +.Sh SYNOPSIS +.Fn kgetent "char *bp" "char *name" +.Fn kgetnum "char *id" +.Fn kgetflag "char *id" +.Ft char * +.Fn kgetstr "char *id" "char *area" +.Sh DESCRIPTION +These functions extract and use capabilities from a keyboard capability data +base, usually +.Pa /usr/share/misc/keycap , +the format of which is described in +.Xr keycap 5 . +.Pp +The +.Fn kgetent +function +extracts the entry for keyboard mapping +.Fa name +into the buffer at +.Fa bp . +The +.Fa bp +argument +should be a character buffer of size +1024 and must be retained through all subsequent calls to +.Fn kgetnum , +.Fn kgetflag , +and +.Fn kgetstr . +The +.Fn kgetent +function +returns \-1 if none of the +.Nm keycap +data base files could be opened, +0 if the map name given does not have an entry, +and 1 if all goes well. +.Pp +The +.Fn kgetnum +function +gets the numeric value of capability +.Fa id , +returning \-1 if is not given for the map. +.Pp +The +.Fn kgetflag +function +returns 1 if the specified capability is present in +the map's entry, 0 if it is not. +.Pp +The +.Fn kgetstr +function +returns the string value of the capability +.Fa id , +places it in the buffer at +.Fa area , +and advances the +.Fa area +pointer. +The +.Fn kgetstr +function +returns +.Dv NULL +if the capability was not found. +.Pp +.Sh FILES +.Bl -tag -width /usr/share/misc/keycap -compact +.It Pa /usr/share/misc/keycap +Keyboard capabilities database (if nothing else choosen during installation). +.El +.Sh SEE ALSO +.Xr kcon 1 , +.Xr keycap 5 diff --git a/sys/arch/i386/isa/pcvt/Util/keycap/keycap.5 b/sys/arch/i386/isa/pcvt/Util/keycap/keycap.5 new file mode 100644 index 000000000000..8a11f59a5075 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/keycap/keycap.5 @@ -0,0 +1,133 @@ +.\" +.\" Copyright (c) 1992,1993,1994 Hellmuth Michaelis +.\" +.\" Copyright (c) 1990 The Regents of the University of California. +.\" +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)keycap.5, 3.00, Last Edit-Date: [Sun Jan 2 13:45:59 1994] +.\" +.Dd January 3, 1993 +.Dt KEYCAP 5 +.Sh NAME +.Nm keycap +.Nd keyboard mapping data base +.Sh SYNOPSIS +.Nm keycap +.Sh DESCRIPTION +The +.Nm keycap +file +is a data base describing keyboard mappings, used by +.Xr kcon 1 . +.Pp +Entries in +.Nm keycap +consist of a number of `:'-separated fields. +The first entry for each mapping gives the names that are known for the +mapping, separated by `|' characters. +All names but the first and last +should be in lower case and contain no blanks; +the last name may well contain +upper case and blanks for readability. +.Sh CAPABILITIES +.Pp +.Bl -column indent indent +.Sy Name Type Description +.It "de bool Resets Keyboard mapping to compiled-in default" +.It "D bool Disables key completely" + +.It "m num specify key numbers for ALT keys +.It "l num specify key numbers for ALTGR keys +.It "h num specify key numbers for SHIFT keys +.It "t num specify key numbers for CONTROL keys +.It "ca num specify key number for the CAPS LOCK key +.It "sh num specify key number for the SHIFT LOCK key +.It "nl num specify key number for the NUM LOCK key +.It "sc num specify key number for the SCROLL LOCK key + +.It "K str bind a string to a unshifted (normal) key +.It "S str bind a string to a shifted key +.It "C str bind a string to a control key +.It "A str bind a string to a altgr key + +.It "tc str Entry of similar map \- must be last." +.El + +Parameter describing the key number can have values from 1 to 128. + +A string parameter may have up to 15 characters. + +.Pp +.Ss A Sample Entry +The following entry, which describes a test entry, is among the very +easy entries in the +.Nm keycap +file as of this writing. +.Pp +.Bd -literal +tt\||test\||Test entry which swaps y and z:\e + :K22=z:S22=Z:C22=\e032:\e + :K46=y:S46=Y:C46=\e031: + +.Ed +.Pp +Entries may continue onto multiple lines by giving a \e as the last +character of a line. Comments may be included on lines beginning with +.Dq # . +.Sh FILES +.Bl -tag -width /usr/share/misc/keycap -compact +.It Pa /usr/share/misc/keycap +File containing keyboard mapping descriptions. +.El +.Sh SEE ALSO +.Xr kcon 1 , +.Xr keycap 3 , +.Sh EXAMPLES +The entry +.Dq Li l1#60 +sets the keynumber for the ALTGR key to 60. + +The entry +.Dq Li K100=hugo +binds the string 'hugo' to the key number 100. + +The entry +.Dq Li K100=^D +binds the control character EOT (0x04) to the key number 100. + +The entry +.Dq Li K100=\e000 +binds the control character NUL (0x00) to the key number 100. + + + + diff --git a/sys/arch/i386/isa/pcvt/Util/keycap/keycap.c b/sys/arch/i386/isa/pcvt/Util/keycap/keycap.c new file mode 100644 index 000000000000..bc9570e6ab4d --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/keycap/keycap.c @@ -0,0 +1,377 @@ +/*- + * Copyright (c) 1992, 1993 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Holger Veit + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +static char *id = + "@(#)keycap.c, 3.00, Last Edit-Date: [Sun Jan 2 14:00:27 1994]"; + +/*---------------------------------------------------------------------------* + * + * keycap.c Keyboard capabilities database handling + * ------------------------------------------------------- + * + * converted from printcap by Holger Veit (veit@du9ds3.uni-duisburg.de) + * + * BUG: Should use a "last" pointer in tbuf, so that searching + * for capabilities alphabetically would not be a n**2/2 + * process when large numbers of capabilities are given. + * + * Note: If we add a last pointer now we will screw up the + * tc capability. We really should compile termcap. + * + * modified by Hellmuth Michaelis (hm@hcshh.hcs.de) to fit into the + * vt220 driver pcvt 2.0 distribution + * + * -hm header conversion & cosmetic changes for pcvt 2.0 distribution + * -hm debugging remapping + * -hm cleaning up from termcap .... + * -hm split off header file keycap.h + * + *---------------------------------------------------------------------------*/ + +#include +#include + +#include "keycap.h" + +#define KEYCAP_BUFSIZ 1024 + +#define MAXHOP 32 /* max number of tc= indirections */ + +char *getenv(); + +static FILE *pfp = NULL; /* keycap data base file pointer */ +static char *tbuf; +static int hopcount; /* detect infinite loops in keycap, init 0 */ + +static int knchktc(); +static int knamatch(); +static char *kdecode(); + +/*---------------------------------------------------------------------------* + * match a name + *---------------------------------------------------------------------------*/ +static char *nmatch(id,cstr) +char *id,*cstr; +{ + register n = strlen(id); + register char *c = cstr+n; + + if (strncmp(id,cstr,n)==0 && + (*c==':' || *c=='|' || *c=='=' || *c=='#') || *c=='@') + return c; + return 0; +} + +/*---------------------------------------------------------------------------* + * Get an entry for keyboard name in buffer bp from the keycap file. + * Parse is very rudimentary, we just notice escaped newlines. + *---------------------------------------------------------------------------*/ +kgetent(bp, name) +char *bp, *name; +{ + register char *cp; + register int c; + register int i = 0, cnt = 0; + char ibuf[KEYCAP_BUFSIZ]; + char *cp2; + int tf; + + tbuf = bp; + tf = 0; + + tf = open(KEYCAP_PATH, 0); + + if (tf < 0) + return (-1); + for (;;) { + cp = bp; + for (;;) { + if (i == cnt) { + cnt = read(tf, ibuf, KEYCAP_BUFSIZ); + if (cnt <= 0) { + close(tf); + return (0); + } + i = 0; + } + c = ibuf[i++]; + if (c == '\n') { + if (cp > bp && cp[-1] == '\\'){ + cp--; + continue; + } + break; + } + if (cp >= bp+KEYCAP_BUFSIZ) { + write(2,"Keycap entry too long\n", 23); + break; + } else + *cp++ = c; + } + *cp = 0; + + /* + * The real work for the match. + */ + if (knamatch(name)) { + close(tf); + return(knchktc()); + } + } +} + +/*---------------------------------------------------------------------------* + * knchktc: check the last entry, see if it's tc=xxx. If so, recursively + * find xxx and append that entry (minus the names) to take the place of + * the tc=xxx entry. Note that this works because of the left to right scan. + *---------------------------------------------------------------------------*/ +static int knchktc() +{ + register char *p, *q; + char tcname[16]; /* name of similar keyboard */ + char tcbuf[KEYCAP_BUFSIZ]; + char *holdtbuf = tbuf; + int l; + + p = tbuf + strlen(tbuf) - 2; /* before the last colon */ + while (*--p != ':') + if (p 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 --------------------------------------*/ diff --git a/sys/arch/i386/isa/pcvt/Util/keycap/keycap.h b/sys/arch/i386/isa/pcvt/Util/keycap/keycap.h new file mode 100644 index 000000000000..1fc7fae75b50 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/keycap/keycap.h @@ -0,0 +1,49 @@ +/*- + * 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.00, Last Edit-Date: [Sun Jan 2 13:48:53 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 -------------------------------------*/ diff --git a/sys/arch/i386/isa/pcvt/Util/keycap/keycap.src b/sys/arch/i386/isa/pcvt/Util/keycap/keycap.src new file mode 100644 index 000000000000..b4d293493034 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/keycap/keycap.src @@ -0,0 +1,532 @@ +# 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.00, Last Edit-Date: [Sun Jan 2 13:50:08 1994] +# +#--------------------------------------------------------------------------- +# +# 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 +# +#--------------------------------------------------------------------------- + +df|default|default entry:\ + :de: + +tt|test|Test entry which swaps y and z:\ + :K22=z:S22=Z:C22=\032:\ + :K46=y:S46=Y:C46=\031: + +# from codrv, untested +be|belgium|Belgian mapping:\ + :K1=\262:S1=\263:\ + :K2=&:S2=1:A2=|:\ + :K3=\351:S3=2:A3=@:\ + :K4=":S4=3:A4=#:\ + :K5=':S5=4:\ + :K6=(:S6=5:\ + :K7=\247:S7=6:A7=\136:\ + :K8=\350:S8=7:\ + :K9=!:S9=8:\ + :K10=\347:S10=9:A10={:\ + :K11=\340:S11=0:A11=}:\ + :K12=):S12=\260:\ + :K13=-:S13=_:\ + :K17=a:S17=A:C17=^A:\ + :K18=z:S18=Z:C18=^z:\ + :K27=\136:S27=\250:A27=[:p1#27:\ + :K28=$:S28=*:A28=]:\ + :K31=q:S31=Q:C31=^q:\ + :K40=m:S40=M:C40=^m:\ + :K41=\371:S41=%:A41=':p2#41:\ + :K42=\265:S42=\243:A42=\264:p3#42:\ + :K45=<:S45=>:A45=\\:\ + :K46=w:S46=W:C46=^w:\ + :K52=,:S52=\077:\ + :K53=;:S53=.:\ + :K54=\072:S54=/:\ + :K55==:S55=+:A55=~:\ + :l1#62:a0: + +# from codrv, untested +ca|canadafr|Canadian French mapping:\ + :K1=#:S1=|:A1=\\:\ + :A2=\261:S3=":A3=@:S4=/:A4=\243:A5=\242:\ + :A6=\244:S7=\077:A7=\254:S8=&:A8=\246:S9=*:A9=\262:\ + :S10=(:A10=\263:S11=):A11=\274:\ + :K12=-:S12=_:A12=\275:\ + :K13==:S13=+:A13=\276:\ + :A25=\247:A26=\266:\ + :K27=\136:S27=\136:A27=[:\ + :K28=\270:S28=\250:A28=]:p1#28:\ + :A40=~:K41=`:S41=`:A41={:\ + :K42=<:S42=>:A42=}:\ + :K45=\253:S45=\273:A45=\260:\ + :A49=\253:A50=\273:A51=\260:\ + :A52=\265:K53=,:S53=,:A53=-:\ + :K54=\351:S54=\311:A54=':\ + :l1#62:a0: + +# from codrv, untested +c1|swissde|Swiss German mapping:\ + :K1=\247:S1=\260:p1#1:\ + :S2=+:A2=|:S3=":A3=@:S4=*:A4=#:S5=\347:S7=&:A7=\254:\ + :S8=/:A8=\246:S9=(:A9=\242:S10=):S11==:\ + :K12=`:S12=\077:A12=':p2#12:\ + :K13=^:S13=\\:A13=~:p3#13:\ + :K22=z:S22=Z:C22=\032:\ + :S27=\350:K27=\374:A27=[:\ + :K28=\250:S28=!:A28=]:\ + :S40=\351:K40=\366:\ + :S41=\340:K41=\344:A41={:\ + :K42=$:S42=\243:A42=}:\ + :K45=<:S45=>:A45=\\:\ + :K46=y:S46=Y:C46=\031: + :S53=;:S54=\072:K55=-:S55=_:\ + :l1#62:a0: + +# from codrv, untested +c2|swissfr|Swiss French mapping:\ + :K27=\350:S27=\374:A27=[:\ + :K40=\351:S40=\366:\ + :K41=\340:S41=\344:A41={:\ + :tc=swissde: + +# more programmer-like than an original German kbd, you needn't +# have gum-fingers to get `{}' and the like:-) +# maps: ae -> [, oe -> \, ue -> ], Ae -> {, Oe -> |, Ue -> } +# umlaute are available as AltGr- and Control-Mappings +# also maps Pause -> ^Z +# +# (from Joerg Wunsch) +# +# l1/m1 bindings: left Alt is AltGr +# Emacs functions: +# C79/C89: ctrl-{leftarrow,rightarrow} {backward,forward} word +# A79/A89: {backward,forward} sexp +# C83/C84: ctrl-{uparrow,downarrow} {backward,forward} window +# +de-prog|germany-prog|programmer's mapping for german keyboard:\ + :K27=]:S27=}:A27=\374:C27=\334:\ + :K40=\\:S40=|:A40=\366:C40=\326:\ + :K41=[:S41={:A41=\344:C41=\304:\ + :K126=\032:C126=\003:\ + :tc=de: +# :l1#60:l2#62:\ +# :C79=^[B:K79=^[[D:S79=^[OD:A79=^[^B:\ +# :C89=^[F:K89=^[[C:S89=^[OC:A89=^[^F:\ +# :C83=^U-1^XO:K83=^[[A:S84=^[OA:\ +# :C84=^XO:K84=^[[B:S84=^[OB:\ + +de|germany|German mapping for MF II-Keyboard:\ + :K1=\136:S1=\260:\ + :S3=\042:S4=\247:S7=&:S8=/:S9=(:S10=):S11=\075:\ + :A3=\262:A4=\263:A8={:A9=[:A10=]:A11=}:A12=\134:\ + :K12=\337:S12=?:C12=\034:\ + :K13=':S13=`:\ + :A17=\100:\ + :K22=z:S22=Z:C22=\032:\ + :K27=\374:S27=\334:\ + :K28=+:S28=*:A28=\176:\ + :K29=\043:S29=':A29=\174:\ + :K40=\366:S40=\326:\ + :K41=\344:S41=\304:\ + :A45=\174:\ + :K46=y:S46=Y:C46=\031:\ + :A52=\265:\ + :S53=;:S54=\072:\ + :K55=-:S55=_:\ + :l1#62: + +de-at|germany-at|German mapping for AT-Keyboard:\ + :K1=<:S1=>:\ + :S3=\042:\ + :S4=\247:\ + :S7=&:\ + :S8=/:\ + :S9=(:\ + :S10=):\ + :S11=\075:\ + :K12=\337:S12=?:C12=\034:\ + :K13=':S13=`:\ + :K14=#:S14=\136:\ + :K22=z:S22=Z:C22=\032:\ + :K27=\374:S27=\334:\ + :K28=+:S28=*:\ + :K29=\043:S29=':\ + :K40=\366:S40=\326:\ + :K41=\344:S41=\304:\ + :K46=y:S46=Y:C46=\031:\ + :S53=;:S54=\072:\ + :K55=-:S55=_:\ + +# from codrv, untested +# Includes improvements by Thomas Hiller (hiller@fzi.de) +# and Andreas Israel (ai@hrz.tu-chemnitz.de) +de-hi|germany-hiller|yet another German mapping:\ + :K1=\136:S1=\260:C1=|:\ + :S3=\042:S4=#:S7=&:S8=/:S9=(:S10=):S11=\075:\ + :A8={:A9=[:A10=]:A11=}:A17=@:A28=~:\ + :K12=\337:S12=\077:C12=\036:A12=\\:\ + :K13=':S13=`:C13=\134:p1#13:\ + :K22=z:S22=Z:C22=\032:\ + :K27=\374:S27=\334:C27=\035:\ + :K28=+:S28=*:C28=\000:\ + :K29=<:S29=>:C29=\134:\ + :K40=\366:S40=\326:C40=\034:\ + :K41=\344:S41=\304:C41=\033:\ + :K46=y:S46=Y:C46=\031:\ + :S53=;:S54=\072:\ + :K55=-:S55=_:\ + :l1#62:a0: + +# from codrv, untested +# Contribution by Thomas Hiller (hiller@fzi.de) +# "K42 may not work on 102 keys kbds, K29 seems to work" +d1|de-102|german with mf2:\ + :K29=#:\ + :K42=#:\ + :K45=<:S45=>:A45=|:\ + :tc=germany: + +# from codrv, untested +hv|holgi|Holgi's special MF1 keyboard mapping:\ + :K1=<:S1=>:C1=|:\ + :K29=#:S29=\136:A29=\\:C29=~:\ + :tc=germany: + +# from codrv, untested +# Contributed by Andreas Israel (ai@hrz.tu-chemnitz.de) +de-ai|nixmf2|ct22|nix|nix7|German Nixdorf MF2:\ + :A28=~:\ + :K29=#:S29=':\ + :K45=<:S45=>:A45=|:\ + :tc=germany: + +# from codrv, untested +dk|denmark|Danish mapping:\ + :K1=\275:S1=\247:\ + :S3=":A3=@:\ + :A4=\243:\ + :S5=\244:A5=$:\ + :S7=&:S8=/:A8={:S9=(:A9=[:S10=):A10=]:S11==:A11=}:\ + :K12=+:S12=\077:\ + :K13=':S13=`:A13=|:p1#13:\ + :K27=\345:S27=\305:\ + :K28=\250:S28=\136:A28=~:p2#28:\ + :K40=\346:S40=\306:\ + :K41=\370:S41=\330:\ + :K42=:S42=*:\ + :K45=<:S45=>:A45=\\:\ + :S53=;:S54=\072:\ + :K55=-:S55=_:\ + :l1#62:a0: + +# from codrv, untested +# Finnish keyboard map with 7-bit versions of the national +# chars. The Latin1 chars are available with Alt-7, Alt-8, etc +# (where normally you would have the 7-bit ones). +# Makes C/C++ programming more comfortable, since the 7-bit chars +# (|\{[}]) are needed much more often than the Latin1 chars. +# -- Petri.Wessman@hut.fi +fi|finland|finland7b|finland-ascii|Finnish ASCII mapping:\ + :l1#60:l2#62:\ + :A8=\344:A9=\304:A10=\305:A11=\345:A12=\326:A13=\366:\ + :K40=|:S40=\\:K41={:S41=[:K27=}:S27=]:\ + :S1=\275:K1=\247:\ + :S3=":A3=@:\ + :A4=\243:\ + :S5=$:A5=$:\ + :S7=&:S8=/:S9=(:S10=):S11==:\ + :K12=+:S12=\077:\ + :K13=':S13=`:\ + :K28=~:S28=\136:A28=~:\ + :K29=':S29=*:\ + :K45=<:S45=>:A45=|:\ + :S53=;:S54=\072:\ + :K55=-:S55=_:\ + :a0: + +# from codrv, untested +# Finnish keyboard map with the Latin1 national chars in +# their "right" place. --Petri.Wessman@hut.fi +f8|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: + +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: + +us|usa|United States mapping:\ + :de: + +# EOF diff --git a/sys/arch/i386/isa/pcvt/Util/keycap/man5/keycap.5 b/sys/arch/i386/isa/pcvt/Util/keycap/man5/keycap.5 new file mode 100644 index 000000000000..8a11f59a5075 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/keycap/man5/keycap.5 @@ -0,0 +1,133 @@ +.\" +.\" Copyright (c) 1992,1993,1994 Hellmuth Michaelis +.\" +.\" Copyright (c) 1990 The Regents of the University of California. +.\" +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)keycap.5, 3.00, Last Edit-Date: [Sun Jan 2 13:45:59 1994] +.\" +.Dd January 3, 1993 +.Dt KEYCAP 5 +.Sh NAME +.Nm keycap +.Nd keyboard mapping data base +.Sh SYNOPSIS +.Nm keycap +.Sh DESCRIPTION +The +.Nm keycap +file +is a data base describing keyboard mappings, used by +.Xr kcon 1 . +.Pp +Entries in +.Nm keycap +consist of a number of `:'-separated fields. +The first entry for each mapping gives the names that are known for the +mapping, separated by `|' characters. +All names but the first and last +should be in lower case and contain no blanks; +the last name may well contain +upper case and blanks for readability. +.Sh CAPABILITIES +.Pp +.Bl -column indent indent +.Sy Name Type Description +.It "de bool Resets Keyboard mapping to compiled-in default" +.It "D bool Disables key completely" + +.It "m num specify key numbers for ALT keys +.It "l num specify key numbers for ALTGR keys +.It "h num specify key numbers for SHIFT keys +.It "t num specify key numbers for CONTROL keys +.It "ca num specify key number for the CAPS LOCK key +.It "sh num specify key number for the SHIFT LOCK key +.It "nl num specify key number for the NUM LOCK key +.It "sc num specify key number for the SCROLL LOCK key + +.It "K str bind a string to a unshifted (normal) key +.It "S str bind a string to a shifted key +.It "C str bind a string to a control key +.It "A str bind a string to a altgr key + +.It "tc str Entry of similar map \- must be last." +.El + +Parameter describing the key number can have values from 1 to 128. + +A string parameter may have up to 15 characters. + +.Pp +.Ss A Sample Entry +The following entry, which describes a test entry, is among the very +easy entries in the +.Nm keycap +file as of this writing. +.Pp +.Bd -literal +tt\||test\||Test entry which swaps y and z:\e + :K22=z:S22=Z:C22=\e032:\e + :K46=y:S46=Y:C46=\e031: + +.Ed +.Pp +Entries may continue onto multiple lines by giving a \e as the last +character of a line. Comments may be included on lines beginning with +.Dq # . +.Sh FILES +.Bl -tag -width /usr/share/misc/keycap -compact +.It Pa /usr/share/misc/keycap +File containing keyboard mapping descriptions. +.El +.Sh SEE ALSO +.Xr kcon 1 , +.Xr keycap 3 , +.Sh EXAMPLES +The entry +.Dq Li l1#60 +sets the keynumber for the ALTGR key to 60. + +The entry +.Dq Li K100=hugo +binds the string 'hugo' to the key number 100. + +The entry +.Dq Li K100=^D +binds the control character EOT (0x04) to the key number 100. + +The entry +.Dq Li K100=\e000 +binds the control character NUL (0x00) to the key number 100. + + + + diff --git a/sys/arch/i386/isa/pcvt/Util/loadfont/Makefile b/sys/arch/i386/isa/pcvt/Util/loadfont/Makefile new file mode 100644 index 000000000000..4a45ff7c8c7a --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/loadfont/Makefile @@ -0,0 +1,19 @@ + +.if !exists(${.CURDIR}/../Makefile.inc) +error: + @echo + @echo " You MUST link/copy" + @echo + @echo " ../Makefile.inc.NetBSD or ../Makefile.inc.FreeBSD" + @echo + @echo " to ../Makefile.inc before you can proceed !" + @echo +.else + +PROG = loadfont + +.include + +$(PROG): $(INCDIR)/pcvt_ioctl.h + +.endif diff --git a/sys/arch/i386/isa/pcvt/Util/loadfont/loadfont.1 b/sys/arch/i386/isa/pcvt/Util/loadfont/loadfont.1 new file mode 100644 index 000000000000..f799574775d7 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/loadfont/loadfont.1 @@ -0,0 +1,87 @@ +.\" Copyright (c) 1992,1993,1994 Hellmuth Michaelis +.\" +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by Hellmuth Michaelis +.\" 4. The name authors may not be used to endorse or promote products +.\" derived from this software without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR +.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +.\" IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, +.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" @(#)loadfont.1, 3.00, Last Edit-Date: [Mon Jan 10 21:25:01 1994] +.\" +.Dd January 3, 1993 +.Dt LOADFONT 1 +.Sh NAME +.Nm loadfont +.Nd is used to load fonts into EGA or VGA boards for use by the 'pcvt' video +driver. +.Sh SYNOPSIS +.Nm loadfont +.Op Fl c Ar charsetno +.Op Fl f Ar fontfilename +.Op Fl i +.Sh DESCRIPTION +The +.Nm loadfont +utility is used to load fonts needed for proper operation of the pcvt +VT220 driver on EGA and VGA boards into the font ram of this boards. +.Pp +The options are as follows: +.Bl -tag -width Ds +.It Fl c +Specifies the slot, the font is to load into. EGA boards have four +slots and VGA boards have eight slots available for downloading fonts. +.It Fl f +Specifies the file which contains the font to be downloaded. +.It Fl i +Gives information what type(s) of font do currently reside in which slot. +This is also the default behaviour if no options are specified on the commandline. +.El +.Pp +This utility is used only on EGA and VGA boards, as MDA, HCG and CGA boards +do not have downloadable charactersets available. +.Sh FILES +Unless otherwise specified in the Makefile, the following fontfiles are +available for the pcvt 2.0 distribution: + +.nf +/usr/share/misc/vgafonts/vt220l.808: 8x8 IBM II font +/usr/share/misc/vgafonts/vt220h.808: 8x8 Extension font +/usr/share/misc/vgafonts/vt220l.810: 8x10 IBM II font +/usr/share/misc/vgafonts/vt220h.810: 8x10 Extension font +/usr/share/misc/vgafonts/vt220l.814: 8x14 IBM II font +/usr/share/misc/vgafonts/vt220h.814: 8x14 Extension font +/usr/share/misc/vgafonts/vt220l.816: 8x16 IBM II font +/usr/share/misc/vgafonts/vt220h.816: 8x16 Extension font +.fi +.Sh EXAMPLES +The command +.Dq Li loadfont -c0 -f/usr/share/misc/vgafonts/vt220l.816 +loads a 8x16 font containing the standard IBM characterset II into font slot +0 on a VGA or EGA board. +.Sh BUGS +No known bugs +.Sh SEE ALSO +.Xr cursor 1 , +.Xr scon 1 , +.Xr pcvt 8 diff --git a/sys/arch/i386/isa/pcvt/Util/loadfont/loadfont.c b/sys/arch/i386/isa/pcvt/Util/loadfont/loadfont.c new file mode 100644 index 000000000000..6ed59ea93956 --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/loadfont/loadfont.c @@ -0,0 +1,317 @@ +/* + * Copyright (c) 1992,1993,1994 Hellmuth Michaelis and 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.00, Last Edit-Date: [Mon Jan 10 21:26:09 1994]"; + +/*---------------------------------------------------------------------------* + * + * load a font into vga character font memory + * + * -hm removing explicit HGC support (same as MDA ..) + * -hm new pcvt_ioctl.h SIZ_xxROWS + * + *---------------------------------------------------------------------------*/ + +#include +#include +#include +#include + +#define FONT8X8 2048 /* filesize for 8x8 font */ +#define HEIGHT8X8 8 /* 8 scan lines char cell height */ +#define SSCAN8X8 143 /* 400 scan lines on screen - 256 - 1 */ +#define SROWS8X8 50 /* 50 character lines on screen */ + +#define FONT8X10 2560 /* filesize for 8x10 font */ +#define HEIGHT8X10 10 /* 10 scan lines char cell height */ +#define SSCAN8X10 143 /* 400 scan lines on screen - 256 - 1 */ +#define SROWS8X10 40 /* 50 character lines on screen */ + +#define FONT8X14 3584 /* filesize for 8x14 font */ +#define HEIGHT8X14 14 /* 14 scan lines char cell height */ +#define SSCAN8X14 135 /* 392 scan lines on screen - 256 - 1 */ +#define SROWS8X14 28 /* 28 character lines on screen */ + +#define FONT8X16 4096 /* filesize for 8x16 font */ +#define HEIGHT8X16 16 /* 16 scan lines char cell height */ +#define SSCAN8X16 143 /* 400 scan lines on screen - 256 - 1 */ +#define SROWS8X16 25 /* 25 character lines on screen */ + +struct screeninfo screeninfo; + +main(argc,argv) +int argc; +char *argv[]; +{ + extern int optind; + extern int opterr; + extern char *optarg; + + FILE *in; + struct stat sbuf, *sbp; + unsigned char *fonttab; + int ret; + int chr_height; + int scr_scan; + int scr_rows; + int c; + int chr_set = -1; + char *filename; + int fflag = -1; + int info = -1; + + while( (c = getopt(argc, argv, "c:f:i")) != EOF) + { + switch(c) + { + case 'c': + chr_set = atoi(optarg); + break; + + case 'f': + filename = optarg; + fflag = 1; + break; + + case 'i': + info = 1; + break; + + case '?': + default: + usage(); + break; + } + } + + if(chr_set == -1 || fflag == -1) + info = 1; + + if(info == 1) + { + int i; + + if(ioctl(0, VGAGETSCREEN, &screeninfo) == -1) + { + perror("ioctl VGAGETSCREEN failed"); + exit(1); + } + + switch(screeninfo.adaptor_type) + { + case UNKNOWN_ADAPTOR: + case MDA_ADAPTOR: + case CGA_ADAPTOR: + printf("Adaptor does not support Downloadable Fonts!\n"); + break; + case EGA_ADAPTOR: + printheader(); + for(i = 0;i < 4;i++) + { + printvgafontattr(i); + } + break; + case VGA_ADAPTOR: + printheader(); + for(i = 0;i < 8;i++) + { + printvgafontattr(i); + } + } + printf("\n"); + exit(0); + } + + if(chr_set < 0 || chr_set > 7) + usage(); + + sbp = &sbuf; + + if((in = fopen(filename, "r")) == NULL) + { + char buffer[80]; + sprintf(buffer, "cannot open file %s for reading", filename); + perror(buffer); + exit(1); + } + + if((fstat(fileno(in), sbp)) != 0) + { + char buffer[80]; + sprintf(buffer, "cannot fstat file %s", filename); + perror(buffer); + exit(1); + } + + switch(sbp->st_size) + { + case FONT8X8: + chr_height = HEIGHT8X8; + scr_scan = SSCAN8X8; + scr_rows = SIZ_50ROWS; + break; + + case FONT8X10: + chr_height = HEIGHT8X10; + scr_scan = SSCAN8X10; + scr_rows = SIZ_40ROWS; + break; + + case FONT8X14: + chr_height = HEIGHT8X14; + scr_scan = SSCAN8X14; + scr_rows = SIZ_28ROWS; + break; + + case FONT8X16: + chr_height = HEIGHT8X16; + scr_scan = SSCAN8X16; + scr_rows = SIZ_25ROWS; + break; + + default: + fprintf(stderr,"error, file %s is no valid font file, size=%d\n",argv[1],sbp->st_size); + exit(1); + } + + if((fonttab = (unsigned char *)malloc((size_t)sbp->st_size)) == NULL) + { + fprintf(stderr,"error, malloc failed\n"); + exit(1); + } + + if((ret = fread(fonttab, sizeof(*fonttab), sbp->st_size, in)) != sbp->st_size) + { + fprintf(stderr,"error reading file %s, size = %d, read = is no valid font file, size=%d\n",argv[1],sbp->st_size, ret); + exit(1); + } + + loadfont(chr_set, chr_height, fonttab); + setfont(chr_set, 1, chr_height - 1, scr_scan, scr_rows); + + exit(0); +} + +setfont(charset, fontloaded, charscan, scrscan, scrrow) +int charset, fontloaded, charscan, scrscan, scrrow; +{ + struct vgafontattr vfattr; + + vfattr.character_set = charset; + vfattr.font_loaded = fontloaded; + vfattr.character_scanlines = charscan; + vfattr.screen_scanlines = scrscan; + vfattr.screen_size = scrrow; + + if(ioctl(1, VGASETFONTATTR, &vfattr) == -1) + { + perror("loadfont - ioctl VGASETFONTATTR failed, error"); + exit(1); + } +} + +loadfont(fontset,charscanlines,font_table) +int fontset; +int charscanlines; +unsigned char *font_table; +{ + int i, j; + struct vgaloadchar vlc; + + vlc.character_set = fontset; + vlc.character_scanlines = charscanlines; + + for(i = 0; i < 256; i++) + { + vlc.character = i; + for (j = 0; j < charscanlines; j++) + { + vlc.char_table[j] = font_table[j]; + } + font_table += charscanlines; + if(ioctl(1, VGALOADCHAR, &vlc) == -1) + { + perror("loadfont - ioctl VGALOADCHAR failed, error"); + exit(1); + } + } +} + +printvgafontattr(charset) +int charset; +{ + struct vgafontattr vfattr; + static int sizetab[] = { 25, 28, 35, 40, 43, 50 }; + + vfattr.character_set = charset; + + if(ioctl(1, VGAGETFONTATTR, &vfattr) == -1) + { + perror("loadfont - ioctl VGAGETFONTATTR failed, error"); + exit(1); + } + printf(" %d ",charset); + if(vfattr.font_loaded) + { + + printf("Loaded "); + printf(" %2.2d ", sizetab[vfattr.screen_size]); + printf(" %2.2d ", + (((int)vfattr.character_scanlines) & 0x1f) + 1); + printf(" %3.3d", + ((int)vfattr.screen_scanlines+0x101)); + } + else + { + printf("Empty"); + } + printf("\n"); +} + +printheader() +{ + printf("\nEGA/VGA Charactersets Status Info:\n\n"); + printf("Set Status Lines CharScanLines ScreenScanLines\n"); + printf("--- ------ ----- ------------- ---------------\n"); +} + +usage() +{ + fprintf(stderr,"\nloadfont - load font into ega/vga font ram for pcvt video driver\n"); + fprintf(stderr,"usage: loadfont -c -f -i\n"); + fprintf(stderr," -c characterset to load (ega 0..3, vga 0..7)\n"); + fprintf(stderr," -f filename containing binary font data\n"); + fprintf(stderr," -i print status and types of loaded fonts (default)\n"); + exit(1); +} diff --git a/sys/arch/i386/isa/pcvt/Util/mcon/Makefile b/sys/arch/i386/isa/pcvt/Util/mcon/Makefile new file mode 100644 index 000000000000..156e431bc5df --- /dev/null +++ b/sys/arch/i386/isa/pcvt/Util/mcon/Makefile @@ -0,0 +1,19 @@ + +.if !exists(${.CURDIR}/../Makefile.inc) +error: + @echo + @echo " You MUST link/copy" + @echo + @echo " ../Makefile.inc.NetBSD or ../Makefile.inc.FreeBSD" + @echo + @echo " to ../Makefile.inc before you can proceed !" + @echo +.else + +PROG= mcon + +.include + +$(PROG): $(INCDIR)/pcvt_ioctl.h + +.endif