/
tintin++/
tintin++/docs/
tintin++/src/support/
/* 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
}