home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume8 / gnuplot1.10A / part07 / help / scan_topics.c < prev   
C/C++ Source or Header  |  1989-09-09  |  3KB  |  113 lines

  1. /*
  2.  * Program    : help
  3.  * Module    : scan_topics.c
  4.  * Programmer    : R. Stolfa
  5.  *
  6.  * Purpose :    To scan the current directory for all "topic"
  7.  *        directories in the DIRFILE file.
  8.  *
  9.  * Modification History:
  10.  *   08/26/87    Created
  11.  *   08/31/87    Changed input routine to change spaces in the topic
  12.  *        field to be underscores.
  13.  */
  14.  
  15. #include    "global.h"
  16.  
  17. scan_topics ()
  18. {
  19.     FILE    *fd;            /* DIRFILE descriptor */
  20.     int    i,j,k,            /* temp */
  21.         cmd,            /* directed to man page? */
  22.         count;            /* is there any help? */
  23.     char    buff[BSIZE],        /* for reading DIRFILE */
  24.         help_topic[BSIZE],    /* used to parse DIRFILE lines */
  25.         base_path[BSIZE],    /* used to parse DIRFILE lines */
  26.         cmd_buf[BSIZE],        /* used to parse DIRFILE lines */
  27.         prt_flag;        /* used to parse DIRFILE lines */
  28.  
  29.     count = 0;
  30.     gen_path(DIRFILE);
  31.  
  32.     if ((fd = fopen (Path, "r")) == NULL) {
  33.         printf ("There are no subtopics for this area.\n");
  34.         return;
  35.     }
  36.  
  37.     /*
  38.      * Here we need to read in the lines in DIRFILE
  39.      * that are of the format
  40.      * <basename><print_flag><help_topic_string>
  41.      * and capitalize the <help_topic_string>.
  42.      *
  43.      * if <print_flag> is a "*" then the <help_topic_string> is
  44.      * for viewing.
  45.      *
  46.      * if <print_flag> is a ":" then it is an acronym for lookups.
  47.      *
  48.      * if find "!" before <print_flag> then there's a command.
  49.      */
  50.  
  51.     while (fgets (buff, BSIZE, fd) != NULL) {
  52.  
  53.         cmd = 0;
  54.         k = j = 0;
  55.         for (i = 0;
  56.              i < strlen(buff) && buff[i] != ':' && buff[i] != '*';
  57.              i ++) {
  58.             if (buff[i] == '!')
  59.                ++cmd;
  60.             else if (!cmd)
  61.                base_path[j++] = buff[i];
  62.             else
  63.                cmd_buf[k++] = buff[i];
  64.             }
  65.         base_path[j] = '\0';
  66.         cmd_buf[k]   = '\0';
  67.  
  68.         if (i < strlen (buff))
  69.             prt_flag = buff[i];
  70.         else
  71.             /* Bad input line */
  72.             continue;
  73.  
  74.         strcpy (help_topic, &buff[i+1]);
  75.         for (i = 0; i < strlen (help_topic); i ++) {
  76.             help_topic[i] = toupper (help_topic[i]);
  77.             if (help_topic[i] == ' ')
  78.                 help_topic[i] = '_';
  79.             if (help_topic[i] == '\n')
  80.                 help_topic[i] = '\0';
  81.         }
  82.  
  83.         /*
  84.          * At this point, we have a fairly legal line,
  85.          * so, let's finish it off...
  86.          */
  87.  
  88.         if ((strlen (base_path) == 0) || (strlen (help_topic) == 0))
  89.             continue;
  90.         count ++;
  91.  
  92.         if (prt_flag == '*')
  93.             /*
  94.              * Append this line to the list of things to
  95.              * output as topics
  96.              */
  97.             append (PRINT, base_path, help_topic, cmd_buf);
  98.  
  99.         /*
  100.          * Append this line to the list of acronymns
  101.          * for reference later...
  102.          */
  103.         append (ACRON, base_path, help_topic, cmd_buf);
  104.     }
  105.  
  106.     fclose (fd);
  107.  
  108.     if (count == 0) {
  109.         printf ("There are no subtopics for this area.\n");
  110.         return;
  111.     }
  112. }
  113.