=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/less/ttyin.c,v retrieving revision 1.1.1.1 retrieving revision 1.1.1.2 diff -c -r1.1.1.1 -r1.1.1.2 *** src/usr.bin/less/ttyin.c 1996/09/21 05:39:43 1.1.1.1 --- src/usr.bin/less/ttyin.c 2003/04/13 18:21:21 1.1.1.2 *************** *** 1,27 **** /* ! * Copyright (c) 1984,1985,1989,1994,1995 Mark Nudelman ! * 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 in the documentation and/or other materials provided with ! * the distribution. * ! * 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. */ --- 1,11 ---- /* ! * Copyright (C) 1984-2002 Mark Nudelman * ! * You may distribute under the terms of either the GNU General Public ! * License or the Less License, as specified in the README file. * ! * For more information about less, or for information on how to ! * contact the author, see the README file. */ *************** *** 30,37 **** */ #include "less.h" ! static int tty; /* * Open keyboard for input. --- 14,31 ---- */ #include "less.h" + #if OS2 + #include "cmd.h" + #include "pckeys.h" + #endif + #if MSDOS_COMPILER==WIN32C + #include "windows.h" + extern char WIN32getch(); + static DWORD console_mode; + #endif ! public int tty; ! extern int sigs; /* * Open keyboard for input. *************** *** 39,45 **** public void open_getchr() { ! #if MSOFTC || OS2 extern int fd0; /* * Open a new handle to CON: in binary mode --- 33,52 ---- public void open_getchr() { ! #if MSDOS_COMPILER==WIN32C ! /* Need this to let child processes inherit our console handle */ ! SECURITY_ATTRIBUTES sa; ! memset(&sa, 0, sizeof(SECURITY_ATTRIBUTES)); ! sa.nLength = sizeof(SECURITY_ATTRIBUTES); ! sa.bInheritHandle = TRUE; ! tty = (int) CreateFile("CONIN$", GENERIC_READ, ! FILE_SHARE_READ, &sa, ! OPEN_EXISTING, 0L, NULL); ! GetConsoleMode((HANDLE)tty, &console_mode); ! /* Make sure we get Ctrl+C events. */ ! SetConsoleMode((HANDLE)tty, ENABLE_PROCESSED_INPUT); ! #else ! #if MSDOS_COMPILER extern int fd0; /* * Open a new handle to CON: in binary mode *************** *** 47,53 **** */ fd0 = dup(0); close(0); ! tty = OPEN_TTYIN(); #else /* * Try /dev/tty. --- 54,67 ---- */ fd0 = dup(0); close(0); ! tty = open("CON", OPEN_READ); ! #if MSDOS_COMPILER==DJGPPC ! /* ! * Setting stdin to binary causes Ctrl-C to not ! * raise SIGINT. We must undo that side-effect. ! */ ! (void) __djgpp_set_ctrl_c(1); ! #endif #else /* * Try /dev/tty. *************** *** 55,67 **** * which in Unix is usually attached to the screen, * but also usually lets you read from the keyboard. */ ! tty = OPEN_TTYIN(); if (tty < 0) tty = 2; #endif } /* * Get a character from the keyboard. */ public int --- 69,99 ---- * which in Unix is usually attached to the screen, * but also usually lets you read from the keyboard. */ ! #if OS2 ! /* The __open() system call translates "/dev/tty" to "con". */ ! tty = __open("/dev/tty", OPEN_READ); ! #else ! tty = open("/dev/tty", OPEN_READ); ! #endif if (tty < 0) tty = 2; #endif + #endif } /* + * Close the keyboard. + */ + public void + close_getchr() + { + #if MSDOS_COMPILER==WIN32C + SetConsoleMode((HANDLE)tty, console_mode); + CloseHandle((HANDLE)tty); + #endif + } + + /* * Get a character from the keyboard. */ public int *************** *** 72,95 **** do { ! #if MSOFTC /* * In raw read, we don't see ^C so look here for it. */ flush(); c = getch(); result = 1; if (c == '\003') return (READ_INTR); #else - #if OS2 - flush(); - while (_read_kbd(0, 0, 0) != -1) - continue; - if ((c = _read_kbd(0, 1, 0)) == -1) - return (READ_INTR); - result = 1; - #else result = iread(tty, &c, sizeof(char)); if (result == READ_INTR) return (READ_INTR); --- 104,125 ---- do { ! #if MSDOS_COMPILER && MSDOS_COMPILER != DJGPPC /* * In raw read, we don't see ^C so look here for it. */ flush(); + #if MSDOS_COMPILER==WIN32C + if (ABORT_SIGS()) + return (READ_INTR); + c = WIN32getch(tty); + #else c = getch(); + #endif result = 1; if (c == '\003') return (READ_INTR); #else result = iread(tty, &c, sizeof(char)); if (result == READ_INTR) return (READ_INTR); *************** *** 101,107 **** */ quit(QUIT_ERROR); } - #endif #endif /* * Various parts of the program cannot handle --- 131,136 ----