1258945Sroberto/* 2258945Sroberto * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC") 3258945Sroberto * Copyright (C) 2000, 2001 Internet Software Consortium. 4258945Sroberto * 5258945Sroberto * Permission to use, copy, modify, and/or distribute this software for any 6258945Sroberto * purpose with or without fee is hereby granted, provided that the above 7258945Sroberto * copyright notice and this permission notice appear in all copies. 8258945Sroberto * 9258945Sroberto * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 10258945Sroberto * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 11258945Sroberto * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 12258945Sroberto * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 13258945Sroberto * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 14258945Sroberto * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 15258945Sroberto * PERFORMANCE OF THIS SOFTWARE. 16258945Sroberto */ 17258945Sroberto 18258945Sroberto/* $Id: keyboard.c,v 1.7 2007/06/19 23:47:19 tbox Exp $ */ 19258945Sroberto 20258945Sroberto#include <config.h> 21258945Sroberto 22258945Sroberto#include <sys/types.h> 23258945Sroberto 24258945Sroberto#include <windows.h> 25258945Sroberto#include <errno.h> 26258945Sroberto#include <stdlib.h> 27258945Sroberto#include <string.h> 28258945Sroberto#include <stdio.h> 29258945Sroberto#include <unistd.h> 30258945Sroberto#include <fcntl.h> 31258945Sroberto 32258945Sroberto#include <io.h> 33258945Sroberto 34258945Sroberto#include <isc/keyboard.h> 35258945Sroberto#include <isc/util.h> 36258945Sroberto 37258945Srobertoisc_result_t 38258945Srobertoisc_keyboard_open(isc_keyboard_t *keyboard) { 39258945Sroberto int fd; 40258945Sroberto 41258945Sroberto REQUIRE(keyboard != NULL); 42258945Sroberto 43258945Sroberto fd = _fileno(stdin); 44258945Sroberto if (fd < 0) 45258945Sroberto return (ISC_R_IOERROR); 46258945Sroberto 47258945Sroberto keyboard->fd = fd; 48258945Sroberto 49258945Sroberto keyboard->result = ISC_R_SUCCESS; 50258945Sroberto 51258945Sroberto return (ISC_R_SUCCESS); 52258945Sroberto} 53258945Sroberto 54258945Srobertoisc_result_t 55258945Srobertoisc_keyboard_close(isc_keyboard_t *keyboard, unsigned int sleeptime) { 56258945Sroberto REQUIRE(keyboard != NULL); 57258945Sroberto 58258945Sroberto if (sleeptime > 0 && keyboard->result != ISC_R_CANCELED) 59258945Sroberto (void)Sleep(sleeptime*1000); 60258945Sroberto 61258945Sroberto keyboard->fd = -1; 62258945Sroberto 63258945Sroberto return (ISC_R_SUCCESS); 64258945Sroberto} 65258945Sroberto 66258945Srobertoisc_result_t 67258945Srobertoisc_keyboard_getchar(isc_keyboard_t *keyboard, unsigned char *cp) { 68258945Sroberto ssize_t cc; 69258945Sroberto unsigned char c; 70258945Sroberto 71258945Sroberto REQUIRE(keyboard != NULL); 72258945Sroberto REQUIRE(cp != NULL); 73258945Sroberto 74258945Sroberto cc = read(keyboard->fd, &c, 1); 75258945Sroberto if (cc < 0) { 76258945Sroberto keyboard->result = ISC_R_IOERROR; 77258945Sroberto return (keyboard->result); 78258945Sroberto } 79258945Sroberto 80258945Sroberto *cp = c; 81258945Sroberto 82258945Sroberto return (ISC_R_SUCCESS); 83258945Sroberto} 84258945Sroberto 85258945Srobertoisc_boolean_t 86258945Srobertoisc_keyboard_canceled(isc_keyboard_t *keyboard) { 87258945Sroberto return (ISC_TF(keyboard->result == ISC_R_CANCELED)); 88258945Sroberto} 89258945Sroberto 90