1/* 2 * Copyright (C) 1984-2012 Mark Nudelman 3 * Modified for use with illumos by Garrett D'Amore. 4 * Copyright 2014 Garrett D'Amore <garrett@damore.org> 5 * 6 * You may distribute under the terms of either the GNU General Public 7 * License or the Less License, as specified in the README file. 8 * 9 * For more information, see the README file. 10 */ 11 12/* 13 * Routines dealing with getting input from the keyboard (i.e. from the user). 14 */ 15 16#include "less.h" 17 18int tty; 19extern int utf_mode; 20 21/* 22 * Open keyboard for input. 23 */ 24void 25open_getchr(void) 26{ 27 /* 28 * Try /dev/tty. 29 * If that doesn't work, use file descriptor 2, 30 * which in Unix is usually attached to the screen, 31 * but also usually lets you read from the keyboard. 32 */ 33 tty = open("/dev/tty", O_RDONLY); 34 if (tty == -1) 35 tty = STDERR_FILENO; 36} 37 38/* 39 * Get a character from the keyboard. 40 */ 41int 42getchr(void) 43{ 44 unsigned char c; 45 int result; 46 47 do { 48 result = iread(tty, &c, sizeof (char)); 49 if (result == READ_INTR) 50 return (READ_INTR); 51 if (result < 0) { 52 /* 53 * Don't call error() here, 54 * because error calls getchr! 55 */ 56 quit(QUIT_ERROR); 57 } 58 /* 59 * Various parts of the program cannot handle 60 * an input character of '\0'. 61 * If a '\0' was actually typed, convert it to '\340' here. 62 */ 63 if (c == '\0') 64 c = 0340; 65 } while (result != 1); 66 67 return (c & 0xFF); 68} 69