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