1/* 2 Copyright (c) 1990-2004 Info-ZIP. All rights reserved. 3 4 See the accompanying file LICENSE, version 2000-Apr-09 or later 5 (the contents of which are also included in zip.h) for terms of use. 6 If, for some reason, all these files are missing, the Info-ZIP license 7 also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html 8*/ 9/* 10 ttyio.h 11 */ 12 13#ifndef __ttyio_h /* don't include more than once */ 14#define __ttyio_h 15 16#ifndef __crypt_h 17# include "crypt.h" /* ensure that encryption header file has been seen */ 18#endif 19 20#if (CRYPT || (defined(UNZIP) && !defined(FUNZIP))) 21/* 22 * Non-echo keyboard/console input support is needed and enabled. 23 */ 24 25#ifndef __G /* UnZip only, for now (DLL stuff) */ 26# define __G 27# define __G__ 28# define __GDEF 29# define __GPRO void 30# define __GPRO__ 31#endif 32 33#ifndef ZCONST /* UnZip only (until have configure script like Zip) */ 34# define ZCONST const 35#endif 36 37#if (defined(MSDOS) || defined(OS2) || defined(WIN32)) 38# ifndef DOS_OS2_W32 39# define DOS_OS2_W32 40# endif 41#endif 42 43#if (defined(DOS_OS2_W32) || defined(__human68k__)) 44# ifndef DOS_H68_OS2_W32 45# define DOS_H68_OS2_W32 46# endif 47#endif 48 49#if (defined(DOS_OS2_W32) || defined(FLEXOS)) 50# ifndef DOS_FLX_OS2_W32 51# define DOS_FLX_OS2_W32 52# endif 53#endif 54 55#if (defined(DOS_H68_OS2_W32) || defined(FLEXOS)) 56# ifndef DOS_FLX_H68_OS2_W32 57# define DOS_FLX_H68_OS2_W32 58# endif 59#endif 60 61#if (defined(__ATHEOS__) || defined(__BEOS__) || defined(UNIX)) 62# ifndef ATH_BEO_UNX 63# define ATH_BEO_UNX 64# endif 65#endif 66 67#if (defined(VM_CMS) || defined(MVS)) 68# ifndef CMS_MVS 69# define CMS_MVS 70# endif 71#endif 72 73 74/* Function prototypes */ 75 76/* The following systems supply a `non-echo' character input function "getch()" 77 * (or an alias) and do not need the echoff() / echon() function pair. 78 */ 79#ifdef AMIGA 80# define echoff(f) 81# define echon() 82# define getch() Agetch() 83# define HAVE_WORKING_GETCH 84#endif /* AMIGA */ 85 86#ifdef ATARI 87# define echoff(f) 88# define echon() 89# include <osbind.h> 90# define getch() (Cnecin() & 0x000000ff) 91# define HAVE_WORKING_GETCH 92#endif 93 94#ifdef MACOS 95# define echoff(f) 96# define echon() 97# define getch() macgetch() 98# define HAVE_WORKING_GETCH 99#endif 100 101#ifdef NLM 102# define echoff(f) 103# define echon() 104# define HAVE_WORKING_GETCH 105#endif 106 107#ifdef QDOS 108# define echoff(f) 109# define echon() 110# define HAVE_WORKING_GETCH 111#endif 112 113#ifdef RISCOS 114# define echoff(f) 115# define echon() 116# define getch() SWI_OS_ReadC() 117# define HAVE_WORKING_GETCH 118#endif 119 120#ifdef DOS_H68_OS2_W32 121# define echoff(f) 122# define echon() 123# ifdef WIN32 124# ifndef getch 125# define getch() getch_win32() 126# endif 127# else /* !WIN32 */ 128# ifdef __EMX__ 129# ifndef getch 130# define getch() _read_kbd(0, 1, 0) 131# endif 132# else /* !__EMX__ */ 133# ifdef __GO32__ 134# include <pc.h> 135# define getch() getkey() 136# else /* !__GO32__ */ 137# include <conio.h> 138# endif /* ?__GO32__ */ 139# endif /* ?__EMX__ */ 140# endif /* ?WIN32 */ 141# define HAVE_WORKING_GETCH 142#endif /* DOS_H68_OS2_W32 */ 143 144#ifdef FLEXOS 145# define echoff(f) 146# define echon() 147# define getch() getchar() /* not correct, but may not be on a console */ 148# define HAVE_WORKING_GETCH 149#endif 150 151/* For VM/CMS and MVS, we do not (yet) have any support to switch terminal 152 * input echo on and off. The following "fake" definitions allow inclusion 153 * of crypt support and UnZip's "pause prompting" features, but without 154 * any echo suppression. 155 */ 156#ifdef CMS_MVS 157# define echoff(f) 158# define echon() 159#endif 160 161#ifdef TANDEM 162# define echoff(f) 163# define echon() 164# define getch() zgetch() /* defined in TANDEMC */ 165# define HAVE_WORKING_GETCH 166#endif 167 168/* The THEOS C runtime library supplies the function conmask() to toggle 169 * terminal input echo on (conmask("e")) and off (conmask("n")). But, 170 * since THEOS C RTL also contains a working non-echo getch() function, 171 * the echo toggles are not needed. 172 */ 173#ifdef THEOS 174# define echoff(f) 175# define echon() 176# define HAVE_WORKING_GETCH 177#endif 178 179/* VMS has a single echo() function in ttyio.c to toggle terminal 180 * input echo on and off. 181 */ 182#ifdef VMS 183# define echoff(f) echo(0) 184# define echon() echo(1) 185# define getch() tt_getch() 186# define FGETCH(f) tt_getch() 187 int echo OF((int)); 188 int tt_getch OF((void)); 189#endif 190 191/* For all other systems, ttyio.c supplies the two functions Echoff() and 192 * Echon() for suppressing and (re)enabling console input echo. 193 */ 194#ifndef echoff 195# define echoff(f) Echoff(__G__ f) 196# define echon() Echon(__G) 197 void Echoff OF((__GPRO__ int f)); 198 void Echon OF((__GPRO)); 199#endif 200 201/* this stuff is used by MORE and also now by the ctrl-S code; fileio.c only */ 202#if (defined(UNZIP) && !defined(FUNZIP)) 203# ifdef HAVE_WORKING_GETCH 204# define FGETCH(f) getch() 205# endif 206# ifndef FGETCH 207 /* default for all systems where no getch()-like function is available */ 208 int zgetch OF((__GPRO__ int f)); 209# define FGETCH(f) zgetch(__G__ f) 210# endif 211#endif /* UNZIP && !FUNZIP */ 212 213#if (CRYPT && !defined(WINDLL)) 214 char *getp OF((__GPRO__ ZCONST char *m, char *p, int n)); 215#endif 216 217#else /* !(CRYPT || (UNZIP && !FUNZIP)) */ 218 219/* 220 * No need for non-echo keyboard/console input; provide dummy definitions. 221 */ 222#define echoff(f) 223#define echon() 224 225#endif /* ?(CRYPT || (UNZIP && !FUNZIP)) */ 226 227#endif /* !__ttyio_h */ 228