/* Copyright (c) 1990-2004 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in zip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* ttyio.h */ #ifndef __ttyio_h /* don't include more than once */ #define __ttyio_h #ifndef __crypt_h # include "crypt.h" /* ensure that encryption header file has been seen */ #endif #if (CRYPT || (defined(UNZIP) && !defined(FUNZIP))) /* * Non-echo keyboard/console input support is needed and enabled. */ #ifndef __G /* UnZip only, for now (DLL stuff) */ # define __G # define __G__ # define __GDEF # define __GPRO void # define __GPRO__ #endif #ifndef ZCONST /* UnZip only (until have configure script like Zip) */ # define ZCONST const #endif #if (defined(MSDOS) || defined(OS2) || defined(WIN32)) # ifndef DOS_OS2_W32 # define DOS_OS2_W32 # endif #endif #if (defined(DOS_OS2_W32) || defined(__human68k__)) # ifndef DOS_H68_OS2_W32 # define DOS_H68_OS2_W32 # endif #endif #if (defined(DOS_OS2_W32) || defined(FLEXOS)) # ifndef DOS_FLX_OS2_W32 # define DOS_FLX_OS2_W32 # endif #endif #if (defined(DOS_H68_OS2_W32) || defined(FLEXOS)) # ifndef DOS_FLX_H68_OS2_W32 # define DOS_FLX_H68_OS2_W32 # endif #endif #if (defined(__ATHEOS__) || defined(__BEOS__) || defined(UNIX)) # ifndef ATH_BEO_UNX # define ATH_BEO_UNX # endif #endif #if (defined(VM_CMS) || defined(MVS)) # ifndef CMS_MVS # define CMS_MVS # endif #endif /* Function prototypes */ /* The following systems supply a `non-echo' character input function "getch()" * (or an alias) and do not need the echoff() / echon() function pair. */ #ifdef AMIGA # define echoff(f) # define echon() # define getch() Agetch() # define HAVE_WORKING_GETCH #endif /* AMIGA */ #ifdef ATARI # define echoff(f) # define echon() # include # define getch() (Cnecin() & 0x000000ff) # define HAVE_WORKING_GETCH #endif #ifdef MACOS # define echoff(f) # define echon() # define getch() macgetch() # define HAVE_WORKING_GETCH #endif #ifdef NLM # define echoff(f) # define echon() # define HAVE_WORKING_GETCH #endif #ifdef QDOS # define echoff(f) # define echon() # define HAVE_WORKING_GETCH #endif #ifdef RISCOS # define echoff(f) # define echon() # define getch() SWI_OS_ReadC() # define HAVE_WORKING_GETCH #endif #ifdef DOS_H68_OS2_W32 # define echoff(f) # define echon() # ifdef WIN32 # ifndef getch # define getch() getch_win32() # endif # else /* !WIN32 */ # ifdef __EMX__ # ifndef getch # define getch() _read_kbd(0, 1, 0) # endif # else /* !__EMX__ */ # ifdef __GO32__ # include # define getch() getkey() # else /* !__GO32__ */ # include # endif /* ?__GO32__ */ # endif /* ?__EMX__ */ # endif /* ?WIN32 */ # define HAVE_WORKING_GETCH #endif /* DOS_H68_OS2_W32 */ #ifdef FLEXOS # define echoff(f) # define echon() # define getch() getchar() /* not correct, but may not be on a console */ # define HAVE_WORKING_GETCH #endif /* For VM/CMS and MVS, we do not (yet) have any support to switch terminal * input echo on and off. The following "fake" definitions allow inclusion * of crypt support and UnZip's "pause prompting" features, but without * any echo suppression. */ #ifdef CMS_MVS # define echoff(f) # define echon() #endif #ifdef TANDEM # define echoff(f) # define echon() # define getch() zgetch() /* defined in TANDEMC */ # define HAVE_WORKING_GETCH #endif /* The THEOS C runtime library supplies the function conmask() to toggle * terminal input echo on (conmask("e")) and off (conmask("n")). But, * since THEOS C RTL also contains a working non-echo getch() function, * the echo toggles are not needed. */ #ifdef THEOS # define echoff(f) # define echon() # define HAVE_WORKING_GETCH #endif /* VMS has a single echo() function in ttyio.c to toggle terminal * input echo on and off. */ #ifdef VMS # define echoff(f) echo(0) # define echon() echo(1) # define getch() tt_getch() # define FGETCH(f) tt_getch() int echo OF((int)); int tt_getch OF((void)); #endif /* For all other systems, ttyio.c supplies the two functions Echoff() and * Echon() for suppressing and (re)enabling console input echo. */ #ifndef echoff # define echoff(f) Echoff(__G__ f) # define echon() Echon(__G) void Echoff OF((__GPRO__ int f)); void Echon OF((__GPRO)); #endif /* this stuff is used by MORE and also now by the ctrl-S code; fileio.c only */ #if (defined(UNZIP) && !defined(FUNZIP)) # ifdef HAVE_WORKING_GETCH # define FGETCH(f) getch() # endif # ifndef FGETCH /* default for all systems where no getch()-like function is available */ int zgetch OF((__GPRO__ int f)); # define FGETCH(f) zgetch(__G__ f) # endif #endif /* UNZIP && !FUNZIP */ #if (CRYPT && !defined(WINDLL)) char *getp OF((__GPRO__ ZCONST char *m, char *p, int n)); #endif #else /* !(CRYPT || (UNZIP && !FUNZIP)) */ /* * No need for non-echo keyboard/console input; provide dummy definitions. */ #define echoff(f) #define echon() #endif /* ?(CRYPT || (UNZIP && !FUNZIP)) */ #endif /* !__ttyio_h */