| @@ -82,27 +82,26 @@ const long kDefault = -1; | | | @@ -82,27 +82,26 @@ const long kDefault = -1; |
82 | short unget_buf[UNGET_MAX_COUNT+1]; | | 82 | short unget_buf[UNGET_MAX_COUNT+1]; |
83 | int unget_count; | | 83 | int unget_count; |
84 | char io_buffer[MAXIOSIZE]; | | 84 | char io_buffer[MAXIOSIZE]; |
85 | | | 85 | |
86 | | | 86 | |
87 | // | | 87 | // |
88 | // Forward declarations | | 88 | // Forward declarations |
89 | // | | 89 | // |
90 | long get_number(int first_char); | | 90 | long get_number(int first_char); |
91 | char* get_string(int eos); | | 91 | char* get_string(int eos); |
92 | int my_getch(void); | | 92 | int my_getch(void); |
93 | void my_ungetch(int c); | | 93 | void my_ungetch(int c); |
94 | | | 94 | |
95 | | | | |
96 | // | | 95 | // |
97 | // Routines | | 96 | // Routines |
98 | // | | 97 | // |
99 | int | | 98 | int |
100 | my_getch() | | 99 | my_getch() |
101 | { | | 100 | { |
102 | if (unget_count > 0) { | | 101 | if (unget_count > 0) { |
103 | return (unget_buf[--unget_count]); | | 102 | return (unget_buf[--unget_count]); |
104 | } else { | | 103 | } else { |
105 | return (getc(stdin)); | | 104 | return (getc(stdin)); |
106 | } | | 105 | } |
107 | } | | 106 | } |
108 | | | 107 | |
| @@ -140,93 +139,93 @@ flush_to_newline(int keep_newline) | | | @@ -140,93 +139,93 @@ flush_to_newline(int keep_newline) |
140 | // skip | | 139 | // skip |
141 | } | | 140 | } |
142 | } | | 141 | } |
143 | return; | | 142 | return; |
144 | } | | 143 | } |
145 | | | 144 | |
146 | | | 145 | |
147 | int | | 146 | int |
148 | get_okay(const char *prompt, int default_value) | | 147 | get_okay(const char *prompt, int default_value) |
149 | { | | 148 | { |
150 | int c; | | 149 | int c; |
151 | | | 150 | |
152 | flush_to_newline(0); | | 151 | flush_to_newline(0); |
153 | printf(prompt); | | 152 | printf("%s", prompt); |
154 | | | 153 | |
155 | for (;;) { | | 154 | for (;;) { |
156 | c = my_getch(); | | 155 | c = my_getch(); |
157 | | | 156 | |
158 | if (c <= 0) { | | 157 | if (c <= 0) { |
159 | break; | | 158 | break; |
160 | } else if (c == ' ' || c == '\t') { | | 159 | } else if (c == ' ' || c == '\t') { |
161 | // skip blanks and tabs | | 160 | // skip blanks and tabs |
162 | } else if (c == '\n') { | | 161 | } else if (c == '\n') { |
163 | my_ungetch(c); | | 162 | my_ungetch(c); |
164 | return default_value; | | 163 | return default_value; |
165 | } else if (c == 'y' || c == 'Y') { | | 164 | } else if (c == 'y' || c == 'Y') { |
166 | return 1; | | 165 | return 1; |
167 | } else if (c == 'n' || c == 'N') { | | 166 | } else if (c == 'n' || c == 'N') { |
168 | return 0; | | 167 | return 0; |
169 | } else { | | 168 | } else { |
170 | flush_to_newline(0); | | 169 | flush_to_newline(0); |
171 | printf(prompt); | | 170 | printf("%s", prompt); |
172 | } | | 171 | } |
173 | } | | 172 | } |
174 | return -1; | | 173 | return -1; |
175 | } | | 174 | } |
176 | | | 175 | |
177 | | | 176 | |
178 | int | | 177 | int |
179 | get_command(const char *prompt, int promptBeforeGet, int *command) | | 178 | get_command(const char *prompt, int promptBeforeGet, int *command) |
180 | { | | 179 | { |
181 | int c; | | 180 | int c; |
182 | | | 181 | |
183 | if (promptBeforeGet) { | | 182 | if (promptBeforeGet) { |
184 | printf(prompt); | | 183 | printf("%s", prompt); |
185 | } | | 184 | } |
186 | for (;;) { | | 185 | for (;;) { |
187 | c = my_getch(); | | 186 | c = my_getch(); |
188 | | | 187 | |
189 | if (c <= 0) { | | 188 | if (c <= 0) { |
190 | break; | | 189 | break; |
191 | } else if (c == ' ' || c == '\t') { | | 190 | } else if (c == ' ' || c == '\t') { |
192 | // skip blanks and tabs | | 191 | // skip blanks and tabs |
193 | } else if (c == '\n') { | | 192 | } else if (c == '\n') { |
194 | printf(prompt); | | 193 | printf("%s", prompt); |
195 | } else { | | 194 | } else { |
196 | *command = c; | | 195 | *command = c; |
197 | return 1; | | 196 | return 1; |
198 | } | | 197 | } |
199 | } | | 198 | } |
200 | return 0; | | 199 | return 0; |
201 | } | | 200 | } |
202 | | | 201 | |
203 | | | 202 | |
204 | int | | 203 | int |
205 | get_number_argument(const char *prompt, long *number, long default_value) | | 204 | get_number_argument(const char *prompt, long *number, long default_value) |
206 | { | | 205 | { |
207 | int c; | | 206 | int c; |
208 | int result = 0; | | 207 | int result = 0; |
209 | | | 208 | |
210 | for (;;) { | | 209 | for (;;) { |
211 | c = my_getch(); | | 210 | c = my_getch(); |
212 | | | 211 | |
213 | if (c <= 0) { | | 212 | if (c <= 0) { |
214 | break; | | 213 | break; |
215 | } else if (c == ' ' || c == '\t') { | | 214 | } else if (c == ' ' || c == '\t') { |
216 | // skip blanks and tabs | | 215 | // skip blanks and tabs |
217 | } else if (c == '\n') { | | 216 | } else if (c == '\n') { |
218 | if (default_value == kDefault) { | | 217 | if (default_value == kDefault) { |
219 | printf(prompt); | | 218 | printf("%s", prompt); |
220 | } else { | | 219 | } else { |
221 | my_ungetch(c); | | 220 | my_ungetch(c); |
222 | *number = default_value; | | 221 | *number = default_value; |
223 | result = 1; | | 222 | result = 1; |
224 | break; | | 223 | break; |
225 | } | | 224 | } |
226 | } else if ('0' <= c && c <= '9') { | | 225 | } else if ('0' <= c && c <= '9') { |
227 | *number = get_number(c); | | 226 | *number = get_number(c); |
228 | result = 1; | | 227 | result = 1; |
229 | break; | | 228 | break; |
230 | } else { | | 229 | } else { |
231 | my_ungetch(c); | | 230 | my_ungetch(c); |
232 | *number = 0; | | 231 | *number = 0; |
| @@ -285,27 +284,27 @@ get_string_argument(const char *prompt, | | | @@ -285,27 +284,27 @@ get_string_argument(const char *prompt, |
285 | { | | 284 | { |
286 | int c; | | 285 | int c; |
287 | int result = 0; | | 286 | int result = 0; |
288 | | | 287 | |
289 | for (;;) { | | 288 | for (;;) { |
290 | c = my_getch(); | | 289 | c = my_getch(); |
291 | | | 290 | |
292 | if (c <= 0) { | | 291 | if (c <= 0) { |
293 | break; | | 292 | break; |
294 | } else if (c == ' ' || c == '\t') { | | 293 | } else if (c == ' ' || c == '\t') { |
295 | // skip blanks and tabs | | 294 | // skip blanks and tabs |
296 | } else if (c == '\n') { | | 295 | } else if (c == '\n') { |
297 | if (reprompt) { | | 296 | if (reprompt) { |
298 | printf(prompt); | | 297 | printf("%s", prompt); |
299 | } else { | | 298 | } else { |
300 | my_ungetch(c); | | 299 | my_ungetch(c); |
301 | *string = NULL; | | 300 | *string = NULL; |
302 | break; | | 301 | break; |
303 | } | | 302 | } |
304 | } else if (c == '"' || c == '\'') { | | 303 | } else if (c == '"' || c == '\'') { |
305 | *string = get_string(c); | | 304 | *string = get_string(c); |
306 | result = 1; | | 305 | result = 1; |
307 | break; | | 306 | break; |
308 | } else if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') | | 307 | } else if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') |
309 | || (c == '-' || c == '/' || c == '.' || c == ':')) { | | 308 | || (c == '-' || c == '/' || c == '.' || c == ':')) { |
310 | my_ungetch(c); | | 309 | my_ungetch(c); |
311 | *string = get_string(' '); | | 310 | *string = get_string(' '); |