diff options
author | svn2git <svn2git@FreeBSD.org> | 1994-07-01 08:00:00 +0000 |
---|---|---|
committer | svn2git <svn2git@FreeBSD.org> | 1994-07-01 08:00:00 +0000 |
commit | 5e0e9b99dc3fc0ecd49d929db0d57c784b66f481 (patch) | |
tree | e779b5a6edddbb949b7990751b12d6f25304ba86 /games/hack/hack.tty.c | |
parent | a16f65c7d117419bd266c28a1901ef129a337569 (diff) |
Diffstat (limited to 'games/hack/hack.tty.c')
-rw-r--r-- | games/hack/hack.tty.c | 338 |
1 files changed, 0 insertions, 338 deletions
diff --git a/games/hack/hack.tty.c b/games/hack/hack.tty.c deleted file mode 100644 index 68fefc4e3958..000000000000 --- a/games/hack/hack.tty.c +++ /dev/null @@ -1,338 +0,0 @@ -/*- - * Copyright (c) 1988 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. - */ - -#ifndef lint -static char sccsid[] = "@(#)hack.tty.c 5.3 (Berkeley) 5/13/91"; -#endif /* not lint */ - -/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ -/* hack.tty.c - version 1.0.3 */ -/* With thanks to the people who sent code for SYSV - hpscdi!jon, - arnold@ucsf-cgl, wcs@bo95b, cbcephus!pds and others. */ - -#include "hack.h" -#include <stdio.h> - -/* - * The distinctions here are not BSD - rest but rather USG - rest, as - * BSD still has the old sgttyb structure, but SYSV has termio. Thus: - */ -#ifdef BSD -#define V7 -#else -#define USG -#endif BSD - -/* - * Some systems may have getchar() return EOF for various reasons, and - * we should not quit before seeing at least NR_OF_EOFS consecutive EOFs. - */ -#ifndef BSD -#define NR_OF_EOFS 20 -#endif BSD - - -#ifdef USG - -#include <termio.h> -#define termstruct termio -#define kill_sym c_cc[VKILL] -#define erase_sym c_cc[VERASE] -#define EXTABS TAB3 -#define tabflgs c_oflag -#define echoflgs c_lflag -#define cbrkflgs c_lflag -#define CBRKMASK ICANON -#define CBRKON ! /* reverse condition */ -#define OSPEED(x) ((x).c_cflag & CBAUD) -#define GTTY(x) (ioctl(0, TCGETA, x)) -#define STTY(x) (ioctl(0, TCSETA, x)) /* TCSETAF? TCSETAW? */ - -#else /* V7 */ - -#include <sgtty.h> -#define termstruct sgttyb -#define kill_sym sg_kill -#define erase_sym sg_erase -#define EXTABS XTABS -#define tabflgs sg_flags -#define echoflgs sg_flags -#define cbrkflgs sg_flags -#define CBRKMASK CBREAK -#define CBRKON /* empty */ -#define OSPEED(x) (x).sg_ospeed -#define GTTY(x) (gtty(0, x)) -#define STTY(x) (stty(0, x)) - -#endif USG - -extern short ospeed; -static char erase_char, kill_char; -static boolean settty_needed = FALSE; -struct termstruct inittyb, curttyb; - -/* - * Get initial state of terminal, set ospeed (for termcap routines) - * and switch off tab expansion if necessary. - * Called by startup() in termcap.c and after returning from ! or ^Z - */ -gettty(){ - if(GTTY(&inittyb) < 0) - perror("Hack (gettty)"); - curttyb = inittyb; - ospeed = OSPEED(inittyb); - erase_char = inittyb.erase_sym; - kill_char = inittyb.kill_sym; - getioctls(); - - /* do not expand tabs - they might be needed inside a cm sequence */ - if(curttyb.tabflgs & EXTABS) { - curttyb.tabflgs &= ~EXTABS; - setctty(); - } - settty_needed = TRUE; -} - -/* reset terminal to original state */ -settty(s) char *s; { - clear_screen(); - end_screen(); - if(s) printf(s); - (void) fflush(stdout); - if(STTY(&inittyb) < 0) - perror("Hack (settty)"); - flags.echo = (inittyb.echoflgs & ECHO) ? ON : OFF; - flags.cbreak = (CBRKON(inittyb.cbrkflgs & CBRKMASK)) ? ON : OFF; - setioctls(); -} - -setctty(){ - if(STTY(&curttyb) < 0) - perror("Hack (setctty)"); -} - - -setftty(){ -register int ef = 0; /* desired value of flags & ECHO */ -register int cf = CBRKON(CBRKMASK); /* desired value of flags & CBREAK */ -register int change = 0; - flags.cbreak = ON; - flags.echo = OFF; - /* Should use (ECHO|CRMOD) here instead of ECHO */ - if((curttyb.echoflgs & ECHO) != ef){ - curttyb.echoflgs &= ~ECHO; -/* curttyb.echoflgs |= ef; */ - change++; - } - if((curttyb.cbrkflgs & CBRKMASK) != cf){ - curttyb.cbrkflgs &= ~CBRKMASK; - curttyb.cbrkflgs |= cf; -#ifdef USG - /* be satisfied with one character; no timeout */ - curttyb.c_cc[VMIN] = 1; /* was VEOF */ - curttyb.c_cc[VTIME] = 0; /* was VEOL */ -#endif USG - change++; - } - if(change){ - setctty(); - } - start_screen(); -} - - -/* fatal error */ -/*VARARGS1*/ -error(s,x,y) char *s; { - if(settty_needed) - settty((char *) 0); - printf(s,x,y); - putchar('\n'); - exit(1); -} - -/* - * Read a line closed with '\n' into the array char bufp[BUFSZ]. - * (The '\n' is not stored. The string is closed with a '\0'.) - * Reading can be interrupted by an escape ('\033') - now the - * resulting string is "\033". - */ -getlin(bufp) -register char *bufp; -{ - register char *obufp = bufp; - register int c; - - flags.toplin = 2; /* nonempty, no --More-- required */ - for(;;) { - (void) fflush(stdout); - if((c = getchar()) == EOF) { - *bufp = 0; - return; - } - if(c == '\033') { - *obufp = c; - obufp[1] = 0; - return; - } - if(c == erase_char || c == '\b') { - if(bufp != obufp) { - bufp--; - putstr("\b \b"); /* putsym converts \b */ - } else bell(); - } else if(c == '\n') { - *bufp = 0; - return; - } else if(' ' <= c && c < '\177') { - /* avoid isprint() - some people don't have it - ' ' is not always a printing char */ - *bufp = c; - bufp[1] = 0; - putstr(bufp); - if(bufp-obufp < BUFSZ-1 && bufp-obufp < COLNO) - bufp++; - } else if(c == kill_char || c == '\177') { /* Robert Viduya */ - /* this test last - @ might be the kill_char */ - while(bufp != obufp) { - bufp--; - putstr("\b \b"); - } - } else - bell(); - } -} - -getret() { - cgetret(""); -} - -cgetret(s) -register char *s; -{ - putsym('\n'); - if(flags.standout) - standoutbeg(); - putstr("Hit "); - putstr(flags.cbreak ? "space" : "return"); - putstr(" to continue: "); - if(flags.standout) - standoutend(); - xwaitforspace(s); -} - -char morc; /* tell the outside world what char he used */ - -xwaitforspace(s) -register char *s; /* chars allowed besides space or return */ -{ -register int c; - - morc = 0; - - while((c = readchar()) != '\n') { - if(flags.cbreak) { - if(c == ' ') break; - if(s && index(s,c)) { - morc = c; - break; - } - bell(); - } - } -} - -char * -parse() -{ - static char inputline[COLNO]; - register foo; - - flags.move = 1; - if(!Invisible) curs_on_u(); else home(); - while((foo = readchar()) >= '0' && foo <= '9') - multi = 10*multi+foo-'0'; - if(multi) { - multi--; - save_cm = inputline; - } - inputline[0] = foo; - inputline[1] = 0; - if(foo == 'f' || foo == 'F'){ - inputline[1] = getchar(); -#ifdef QUEST - if(inputline[1] == foo) inputline[2] = getchar(); else -#endif QUEST - inputline[2] = 0; - } - if(foo == 'm' || foo == 'M'){ - inputline[1] = getchar(); - inputline[2] = 0; - } - clrlin(); - return(inputline); -} - -char -readchar() { - register int sym; - - (void) fflush(stdout); - if((sym = getchar()) == EOF) -#ifdef NR_OF_EOFS - { /* - * Some SYSV systems seem to return EOFs for various reasons - * (?like when one hits break or for interrupted systemcalls?), - * and we must see several before we quit. - */ - register int cnt = NR_OF_EOFS; - while (cnt--) { - clearerr(stdin); /* omit if clearerr is undefined */ - if((sym = getchar()) != EOF) goto noteof; - } - end_of_input(); - noteof: ; - } -#else - end_of_input(); -#endif NR_OF_EOFS - if(flags.toplin == 1) - flags.toplin = 2; - return((char) sym); -} - -end_of_input() -{ - settty("End of input?\n"); - clearlocks(); - exit(0); -} |