/* $NetBSD: wsconscfg.c,v 1.3 1999/05/15 14:24:45 drochner Exp $ */ /* * Copyright (c) 1999 * Matthias Drochner. 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 for the NetBSD Project * by Matthias Drochner. * 4. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ #include #include #include #include #include #include #include #define DEFDEV "/dev/ttyEcfg" static void usage __P((void)); int main __P((int, char**)); static void usage() { extern char *__progname; (void)fprintf(stderr, "Usage: %s [-f wsdev] [-d [-F]] [-k] [-t type] [-e emul]" " {vt | [kbd]}\n", __progname); exit(1); } int main(argc, argv) int argc; char **argv; { char *wsdev; int c, delete, kbd, idx, wsfd, res; struct wsdisplay_addscreendata asd; struct wsdisplay_delscreendata dsd; struct wsdisplay_kbddata kd; wsdev = DEFDEV; delete = 0; kbd = 0; asd.screentype = 0; asd.emul = 0; dsd.flags = 0; while ((c = getopt(argc, argv, "f:dkt:e:F")) != -1) { switch (c) { case 'f': wsdev = optarg; break; case 'd': delete++; break; case 'k': kbd++; break; case 't': asd.screentype = optarg; break; case 'e': asd.emul = optarg; break; case 'F': dsd.flags |= WSDISPLAY_DELSCR_FORCE; break; case '?': default: usage(); break; } } argc -= optind; argv += optind; if (kbd ? (argc > 1) : (argc != 1)) usage(); idx = -1; if (argc > 0 && sscanf(argv[0], "%d", &idx) != 1) errx(1, "invalid index"); wsfd = open(wsdev, O_RDWR, 0); if (wsfd < 0) err(2, wsdev); if (kbd) { kd.op = delete ? WSDISPLAY_KBD_DEL : WSDISPLAY_KBD_ADD; kd.idx = idx; res = ioctl(wsfd, WSDISPLAYIO_SETKEYBOARD, &kd); if (res < 0) err(3, "WSDISPLAYIO_SETKEYBOARD"); } else if (delete) { dsd.idx = idx; res = ioctl(wsfd, WSDISPLAYIO_DELSCREEN, &dsd); if (res < 0) err(3, "WSDISPLAYIO_DELSCREEN"); } else { asd.idx = idx; res = ioctl(wsfd, WSDISPLAYIO_ADDSCREEN, &asd); if (res < 0) err(3, "WSDISPLAYIO_ADDSCREEN"); } return (0); }