home *** CD-ROM | disk | FTP | other *** search
/ back2roots/padua / padua.7z / padua / shell / csh531s.lha / hypdoc.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-06-26  |  2.8 KB  |  128 lines

  1. #include <strings.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <exec/types.h>
  5.  
  6.  
  7. #define ASCII_DOC    "csh:csh.doc"
  8. #define HYPER_GUIDE    "csh:csh-tutorial.guide"
  9. #define HYPER_INDEX    "csh:csh-reference.guide"
  10.  
  11.  
  12. char indx[300][20];
  13.  
  14.  
  15. int main(int argc, char *argv[])
  16. {
  17.     char Line[256];
  18.     FILE *in,*out1,*out2;
  19.     int index_mode = 0;
  20.     int indx_i = 0;
  21.     int indx_w = 0;
  22.     char *p;
  23.  
  24.     if (!(in=fopen(ASCII_DOC,"r"))) {
  25.         exit(5);
  26.     }
  27.  
  28.     if (!(out1=fopen(HYPER_GUIDE,"w"))) {
  29.         fclose(in);
  30.         exit(5);
  31.     }
  32.  
  33.     if (!(out2=fopen(HYPER_INDEX,"w"))) {
  34.         fclose(in);
  35.         fclose(out1);
  36.         exit(5);
  37.     }
  38.  
  39.     fprintf(out2,    "@database csh-reference\n\n"
  40.             "##\n"
  41.             "## Use AmigaGuide to view this document.\n"
  42.             "##\n\n"
  43.             "@node main \"C-Shell documentation\"\n"
  44.             "@width 77\n\n"
  45.             "  C-SHELL 5.20+ REFERENCE,  Copyright 1991-1993 by the authors.\n\n"
  46.             "  @{\"   Commands    \" link Commands  }\n"
  47.             "  @{\"   Variables   \" link Variables }\n"
  48.             "  @{\"   Functions   \" link Functions }\n"
  49.             "\n@endnode\n\n"
  50.         );
  51.  
  52.     while (fgets(Line,255,in)) {
  53. #if 0
  54.         if (strcmp(Line,"LIST OF COMMANDS:\n")==0) {
  55.             fgets(Line,255,in);
  56.             index_mode = TRUE;
  57.         }
  58. #endif
  59.  
  60.         if (strcmp(Line,"LIST OF COMMANDS:\n")==0) {
  61.             index_mode = 1;
  62.             indx_i = indx_w = 0;
  63.             fgets(Line,255,in);
  64.         }
  65.         else if (strcmp(Line,"LIST OF VARIABLES:\n")==0) {
  66.             index_mode = 2;
  67.             indx_i = indx_w = 0;
  68.             fgets(Line,255,in);
  69.         }
  70.         else if (strcmp(Line,"LIST OF FUNCTIONS:\n")==0) {
  71.             index_mode = 3;
  72.             indx_i = indx_w = 0;
  73.             fgets(Line,255,in);
  74.         }
  75.  
  76.         else if (index_mode) {
  77.             if (Line[0]!=' ' && Line[0]!='\t' && Line[0]!='\n' && Line[0]!='\0') {
  78.                 char cmd_lower[80];
  79.                 int i;
  80.                 fprintf(out2,"@endnode\n\n");
  81.                 switch (index_mode) {
  82.                   case 1: fprintf(out2,"@node Commands\n\n"); break;
  83.                   case 2: fprintf(out2,"@node Variables\n\n"); break;
  84.                   case 3: fprintf(out2,"@node Functions\n\n"); break;
  85.                 }
  86.                 for (i=1; i<=indx_i; i++) {
  87.                     strcpy(cmd_lower,indx[i]);
  88.                     strlwr(cmd_lower);
  89.                     fprintf(out2,"  @{\"%-*.*s\" Link %-*.*s}",indx_w,indx_w,cmd_lower,indx_w,indx_w,indx[i]);
  90.                     /* AG-Window (topaz8, 640x200) is 76 chars wide */
  91.                     if (i% (76/(indx_w+3)) == 0 || i==indx_i)
  92.                         fprintf(out2,"\n");
  93.                 }
  94.                 fprintf(out2,"@endnode\n\n");
  95.                 fprintf(out1,"%s",Line);
  96.                 index_mode = 0;
  97.             }
  98.             else if (strncmp(Line,"    ",4)==0 && Line[4]!=' ' && Line[4]!='\0' && Line[4]!='\n') {
  99.                 int i;
  100.                 strncpy(indx[++indx_i],Line+4,19);
  101.                 indx[indx_i][20] = 0;
  102.                 if (p=strchr(indx[indx_i],'\n'))
  103.                     *p = 0;
  104.                 if (p=strchr(indx[indx_i],'('))
  105.                     *p = 0;
  106.                 if (indx_i>1)
  107.                     fprintf(out2,"@endnode\n");
  108.                 if ((i=strlen(indx[indx_i]))>indx_w)
  109.                     indx_w = i;
  110.                 fprintf(out2,"@node %s\n\n%s\n",indx[indx_i],Line);
  111.             }
  112.             else {
  113.                 fprintf(out2,"%s",Line);
  114.             }
  115.         }
  116.         else {
  117.             fprintf(out1,"%s",Line);
  118.         }
  119.     }
  120.  
  121.     fclose(in);
  122.     fclose(out1);
  123.     fclose(out2);
  124.  
  125.     exit(0);
  126. }
  127.  
  128.