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