1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <grass/gis.h>
#include "local_proto.h"
extern FILE *tracefd;
extern FILE *inputfd;
int input(int level, char *buf, char *help[])
{
char temp1[10], temp2[3];
int i;
if (level && isatty(fileno(inputfd)))
fprintf(stdout,
"enter 'help' for help, 'end' when done, 'exit' to quit\n");
do {
if (level && isatty(fileno(inputfd)))
fprintf(stdout, "%s ", level == 1 ? ">" : ">>>");
if (!G_getl2(buf, 1024, inputfd)) {
if (inputfd != stdin) {
fclose(inputfd);
inputfd = stdin;
}
return 0;
}
if (tracefd != NULL) {
fprintf(tracefd, "%s\n", buf);
fflush(tracefd);
}
if (sscanf(buf, "%5s %1s", temp1, temp2) == 1) {
if (strcmp(temp1, "end") == 0)
return 0;
if (strcmp(temp1, "exit") == 0)
exit(0);
if (strcmp(temp1, "help") == 0) {
*buf = '#';
if (help != NULL) {
for (i = 0; help[i] && help[i][0]; i++)
fprintf(stdout, "%s\n", help[i]);
fprintf(stdout, "enter 'end' when done, 'exit' to quit\n");
}
}
}
} while (*buf == '#');
if (level)
add_to_session(level > 1, buf);
if (*buf == '\\')
for (i = 0; (buf[i] = buf[i + 1]); i++)
;
return 1;
}
int gobble_input(void)
{
char buf[1024];
if (inputfd != stdin) {
fclose(inputfd);
inputfd = stdin;
}
else if (!isatty(0))
while (input(0, buf, (char **)NULL))
;
return 0;
}
|