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