/* Autoconf patching by David Hedbor, neotron@lysator.liu.se */ /*****************************************************************/ /* functions for the #help command */ /* Some small patches by David Hedbor (neotron@lysator.liu.se) */ /* to make it work better. */ /*****************************************************************/ #include <ctype.h> #include "tintin.h" #ifdef HAVE_STDLIB_H #include <stdlib.h> #endif extern void printline(); FILE *check_file(filestring) char *filestring; { struct stat *b; #if COMPRESSED_HELP char sysfile[BUFFER_SIZE]; sprintf(sysfile, "%s %s", DEFAULT_EXPANSION_STR, filestring); if (fopen(filestring, "r")) return (FILE *) popen(sysfile, "r"); return NULL; #else return (FILE *) fopen(filestring, "r"); #endif } void help_command(arg) char *arg; { FILE *myfile; char *cptr, text[80], line[80], temp_ch, filestring[500]; int tmp, flag, counter; flag = TRUE; if (strcmp(DEFAULT_FILE_DIR, "HOME")) { sprintf(filestring, "%s/.tt_help.txt", DEFAULT_FILE_DIR); #if COMPRESSED_HELP strcat(filestring, DEFAULT_COMPRESSION_EXT); #endif myfile = check_file(filestring); } if (myfile == NULL) { sprintf(filestring, "%s/.tt_help.txt", getenv("HOME")); #if COMPRESSED_HELP strcat(filestring, DEFAULT_COMPRESSION_EXT); #endif if ((myfile = check_file(filestring)) == NULL) { char err[1000]; sprintf(err, "#Help file '%s' not found - no help available.", filestring); tintin_puts2(err, NULL); prompt(NULL); return; } } if (*arg) { sprintf(text, "~%s", arg); cptr = text; while (*++cptr) { *cptr = toupper(*cptr); } while (flag) { fgets(line, sizeof(line), myfile); if (*line == '~') { if (*(line + 1) == '*') { tintin_puts2("#Sorry, no help on that word.", (struct session *) NULL); flag = FALSE; } else if (is_abrev(text, line)) { counter = 0; while (flag) { fgets(line, sizeof(line), myfile); if (*line == '~') flag = FALSE; else { *(line + strlen(line) - 1) = '\0'; tintin_puts2(line, (struct session *) NULL); } if (flag && (counter++ > 20)) { /* NEW: no alarms alarm(0); */ /* @@@changed -- perry */ printline("\033[31m<Return for more>\033[0m", 1); getchar(); /* NEW: no alarms alarm(1); */ counter = 0; } } } } } } else { while (flag) { fgets(line, sizeof(line), myfile); if (*line == '~') flag = FALSE; else { *(line + strlen(line) - 1) = '\0'; tintin_puts2(line, (struct session *) NULL); } } } prompt(NULL); #if COMPRESSED_HELP pclose(myfile); #else fclose(myfile); #endif }