[BACK]Return to oxgentexi.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / util

Diff for /OpenXM/src/util/oxgentexi.c between version 1.8 and 1.19

version 1.8, 2005/04/14 02:21:49 version 1.19, 2020/10/03 08:24:14
Line 1 
Line 1 
 /*  $OpenXM: OpenXM/src/util/oxgentexi.c,v 1.7 2005/04/11 11:13:32 takayama Exp $ */  /*  $OpenXM: OpenXM/src/util/oxgentexi.c,v 1.18 2017/03/28 12:00:04 takayama Exp $ */
   
 #include <stdio.h>  #include <stdio.h>
   #include <stdlib.h>
   #include <string.h>
 int Debug = 0;  int Debug = 0;
 #define VMAX 20  #define VMAX 20
 #define LIMIT   65536  #define LIMIT   65536
Line 16  struct item {
Line 18  struct item {
   char *shortDescription;    char *shortDescription;
   char *description;    char *description;
   char *algorithm;    char *algorithm;
     char *changelog;
   char *examplev[VMAX];    char *examplev[VMAX];
   char *exampleDescv[VMAX];    char *exampleDescv[VMAX];
     char *options;
   int examplec;    int examplec;
   int refc;    int refc;
   char *refv[VMAX];    char *refv[VMAX];
Line 29  struct item *getItem(void);
Line 33  struct item *getItem(void);
 char *str(char *key);  char *str(char *key);
 char *str2(char *key,int size);  char *str2(char *key,int size);
 int cmpItem(struct item *it,struct item *it2);  int cmpItem(struct item *it,struct item *it2);
   void printItem(struct item *it);
   void shell(struct item *v[],int n);
   void printMenu(FILE *fp, struct item **it, int n);
   void printBye();
   void printTitlePage(char *title, char *author,char *infoName);
   void printItem(struct item *it);
   void printTexi(FILE *fp, struct item *it);
   void printTexi_common(FILE *fp,struct item *it);
   void printTexi0(FILE *fp, struct item *it);
   void printTexi1(FILE *fp, struct item *it);
   void outputExample(FILE *fp,char *s);
   void outputOfExample(char *com);
   
 char *S;  char *S;
 int Ssize = 256;  int Ssize = 256;
Line 44  char *Author = NULL;
Line 60  char *Author = NULL;
 char *InfoName = NULL;  char *InfoName = NULL;
 int NoSorting = 0;  int NoSorting = 0;
   
   int
 main(int argc,char *argv[]) {  main(int argc,char *argv[]) {
   char *t;    char *t;
   int p,c,n,i;    int c,n,i;
   struct item *tt;    struct item *tt;
   struct item *items[ITEMMAX];    struct item *items[ITEMMAX];
   
Line 140  main(int argc,char *argv[]) {
Line 157  main(int argc,char *argv[]) {
   exit(0);    exit(0);
 }  }
   
   int
 genInclude(char *name) {  genInclude(char *name) {
   char fname[4098];    char fname[4098];
   FILE *fp;    FILE *fp;
Line 159  genInclude(char *name) {
Line 177  genInclude(char *name) {
   return 0;    return 0;
 }  }
   
   int
 cmpItem(struct item *it,struct item *it2) {  cmpItem(struct item *it,struct item *it2) {
   return strcmp(it->sortKey,it2->sortKey);    return strcmp(it->sortKey,it2->sortKey);
 }  }
Line 169  struct item * newItem(){
Line 188  struct item * newItem(){
     fprintf(stderr,"newItem: No more memory.\n");      fprintf(stderr,"newItem: No more memory.\n");
     exit(20);      exit(20);
   }    }
   a->argc = 0; a->optc = 0; a->refc=0; a->examplec = 0;    memset(a, 0, sizeof(struct item));
   a->type=0;  
   a->category = a->category2 = a->name = a->shortDescription  
     = a->description = a->author = a->algorithm = a->sortKey = NULL;  
   return a;    return a;
 }  }
   
   int
 nextToken(char *key,int n) {  nextToken(char *key,int n) {
   static int pos = 0;    static int pos = 0;
   int i = 0;    int i = 0;
Line 213  nextToken(char *key,int n) {
Line 230  nextToken(char *key,int n) {
   return pos;    return pos;
 }  }
   
   void
 printItem(struct item *it) {  printItem(struct item *it) {
   int i;    int i;
   if (it == NULL) return;    if (it == NULL) return;
Line 236  printItem(struct item *it) {
Line 254  printItem(struct item *it) {
     printf("examplev[%d]=%s\n",i,it->examplev[i]);      printf("examplev[%d]=%s\n",i,it->examplev[i]);
   for (i=0; i <it->examplec; i++)    for (i=0; i <it->examplec; i++)
     printf("exampleDescv[%d]=%s\n",i,it->exampleDescv[i]);      printf("exampleDescv[%d]=%s\n",i,it->exampleDescv[i]);
     if (it->changelog != NULL)
       printf("changelog=%s\n",it->changelog);
     if (it->options != NULL)
       printf("options=%s\n",it->options);
   for (i=0; i<it->refc; i++)    for (i=0; i<it->refc; i++)
     printf("  refv[%d]=%s\n",i,it->refv[i]);      printf("  refv[%d]=%s\n",i,it->refv[i]);
   if (it->author != NULL)    if (it->author != NULL)
Line 269  char *str2(char *key,int size) {
Line 291  char *str2(char *key,int size) {
   return s;    return s;
 }  }
 char *getCategory(char *key) {  char *getCategory(char *key) {
   int i,n;    int i;
   char *s;    char *s;
   s = str(key);    s = str(key);
   for (i=0; i<strlen(s); i++) {    for (i=0; i<strlen(s); i++) {
Line 281  char *getCategory(char *key) {
Line 303  char *getCategory(char *key) {
   return s;    return s;
 }  }
 char *getCategory2(char *key) {  char *getCategory2(char *key) {
   int i,n;    int i;
   char *s;    char *s;
   int count;    int count=0;
   s = str(key);    s = str(key);
   for (i=0; i<strlen(s); i++) {    for (i=0; i<strlen(s); i++) {
     if ((s[i] == '_') || (s[i] == '.')) count++;      if ((s[i] == '_') || (s[i] == '.')) count++;
Line 375  struct item *getItem() {
Line 397  struct item *getItem() {
     if (strcmp(key,"description:") == 0 ||      if (strcmp(key,"description:") == 0 ||
         strcmp(key,"algorithm:") == 0 ||          strcmp(key,"algorithm:") == 0 ||
         strcmp(key,"author:") == 0 ||          strcmp(key,"author:") == 0 ||
           strcmp(key,"changelog:") == 0 ||
         strcmp(key,"sortKey:") == 0 ||          strcmp(key,"sortKey:") == 0 ||
         strcmp(key,"example:") == 0 ||          strcmp(key,"example:") == 0 ||
         strcmp(key,"example_description:") ==0 ) {          strcmp(key,"example_description:") ==0 ||
           strcmp(key,"options:") ==0  ||
           strcmp(key,"Options:") ==0  ||
           strcmp(key,"Example:") ==0
           ) {
       pp = p;        pp = p;
       strcpy(key2,key);        strcpy(key2,key);
       do {        do {
Line 392  struct item *getItem() {
Line 419  struct item *getItem() {
       if (strcmp(key2,"description:") == 0) {        if (strcmp(key2,"description:") == 0) {
         it->description = str2(&(S[pp]),pOld-pp);          it->description = str2(&(S[pp]),pOld-pp);
       }        }
       if (strcmp(key2,"example:") == 0) {        if ((strcmp(key2,"example:") == 0) || (strcmp(key2,"Example:") == 0)) {
         it->examplev[examplec++] = str2(&(S[pp]),pOld-pp);          it->examplev[examplec++] = str2(&(S[pp]),pOld-pp);
         it->exampleDescv[examplec-1] = "";          it->exampleDescv[examplec-1] = "";
         it->examplec = examplec;          it->examplec = examplec;
Line 414  struct item *getItem() {
Line 441  struct item *getItem() {
       if (strcmp(key2,"algorithm:") == 0) {        if (strcmp(key2,"algorithm:") == 0) {
         it->algorithm = str2(&(S[pp]),pOld-pp);          it->algorithm = str2(&(S[pp]),pOld-pp);
       }        }
         if (strcmp(key2,"changelog:") == 0) {
           it->changelog = str2(&(S[pp]),pOld-pp);
         }
         if ((strcmp(key2,"options:") == 0) || (strcmp(key2,"Options:")==0)) {
           it->options = str2(&(S[pp]),pOld-pp);
         }
     }else if (strcmp(key,"ref:") == 0) {      }else if (strcmp(key,"ref:") == 0) {
       argc = 0;        argc = 0;
       while ((pp=nextToken(key,LIMIT)) >= 0) {        while ((pp=nextToken(key,LIMIT)) >= 0) {
Line 429  struct item *getItem() {
Line 462  struct item *getItem() {
         }          }
       }        }
     }else{      }else{
       fprintf(stderr,"Error: unknown keyword << %s >> at %s.\n",key, it->name);        fprintf(stderr,"Warning: unknown keyword << %s >> at %s.\n",key, it->name);
           fprintf(stderr,"       The error occurs around ");            fprintf(stderr,"       The error occurs around ");
           for (i=pp ; i < p; i++) fputc(S[i],stderr);            for (i=pp ; i < p; i++) fputc(S[i],stderr);
           fprintf(stderr,"\n\n");            fprintf(stderr,"\n\n");
           exit(1);  
       p = nextToken(key,LIMIT);        p = nextToken(key,LIMIT);
     }      }
   }while (p >= 0);    }while (p >= 0);
Line 441  struct item *getItem() {
Line 473  struct item *getItem() {
   return it;    return it;
 }  }
   
   void
 shell(struct item *v[],int n) {  shell(struct item *v[],int n) {
   int gap,i,j;    int gap,i,j;
   struct item *temp;    struct item *temp;
Line 456  shell(struct item *v[],int n) {
Line 489  shell(struct item *v[],int n) {
   }    }
 }  }
   
   void
 printMenu(FILE *fp, struct item **it, int n) {  printMenu(FILE *fp, struct item **it, int n) {
   int i,m;    int i,m;
   
Line 470  printMenu(FILE *fp, struct item **it, int n) {
Line 504  printMenu(FILE *fp, struct item **it, int n) {
   }    }
 }  }
   
   void
 printTexi(FILE *fp, struct item *it) {  printTexi(FILE *fp, struct item *it) {
   int i;    if (it->type == 1) printTexi1(fp,it);
   if (it->type == 1) return printTexi1(fp,it);    else printTexi0(fp,it);
   else return printTexi0(fp,it);    return;
 }  }
   
   void
 printTexi_common(FILE *fp,struct item *it) {  printTexi_common(FILE *fp,struct item *it) {
   int i;    int i;
   if (it->description != NULL) {    int elen;
     fprintf(fp,"%s\n\n",it->description);    if ((it->shortDescription != NULL) || (it->refc >0)
         || (it->examplec > 0)) {
       if (it->description != NULL) {
         fprintf(fp,"\nDescription:\n");
         fprintf(fp,"@quotation\n%s\n@end quotation\n\n",it->description);
       }
     }else {
       if (it->description != NULL) {
         fprintf(fp,"%s\n\n",it->description);
       }
   }    }
   
   if (it->algorithm != NULL) {    if (it->algorithm != NULL) {
     fprintf(fp,"\n\n@noindent\nAlgorithm: \n");      fprintf(fp,"\n\n@noindent\nAlgorithm: \n@quotation\n");
     fprintf(fp,"%s\n\n",it->algorithm);      fprintf(fp,"%s\n@end quotation\n",it->algorithm);
   }    }
   
   if (it->examplec > 0) {    if (it->examplec > 0) {
Line 499  printTexi_common(FILE *fp,struct item *it) {
Line 544  printTexi_common(FILE *fp,struct item *it) {
       if (GenExample) {        if (GenExample) {
         outputOfExample(it->examplev[i]);          outputOfExample(it->examplev[i]);
       }        }
       fprintf(fp,"@end example\n");        elen=strlen(it->examplev[i]);
         if ((it->examplev[i])[elen-1] == '\n') fprintf(fp,"@end example\n");
         else fprintf(fp,"\n@end example\n");
       if (it->exampleDescv[i] != NULL && strlen(it->exampleDescv[i]) > 0) {        if (it->exampleDescv[i] != NULL && strlen(it->exampleDescv[i]) > 0) {
         fprintf(fp,"%s\n\n",it->exampleDescv[i]);          fprintf(fp,"%s\n\n",it->exampleDescv[i]);
       }        }
Line 508  printTexi_common(FILE *fp,struct item *it) {
Line 555  printTexi_common(FILE *fp,struct item *it) {
   if (it->author != NULL) {    if (it->author != NULL) {
     fprintf(fp,"Author : %s\n\n",it->author);      fprintf(fp,"Author : %s\n\n",it->author);
   }    }
     if (it->changelog != NULL) {
       fprintf(fp,"\n\nChange Log:\n@quotation\n");
       fprintf(fp,"%s\n@end quotation\n",it->changelog);
     }
     if (it->options != NULL) {
       fprintf(fp,"\nOptinal variabes:");
       fprintf(fp,"%s\n\n",it->options);
     }
   if (it->refc > 0) {    if (it->refc > 0) {
     fprintf(fp,"@table @t\n");      fprintf(fp,"\n\nReferences:\n@quotation\n");
     fprintf(fp,"@item References\n");  
     for (i=0; i <it->refc; i++) {      for (i=0; i <it->refc; i++) {
       fprintf(fp,"@code{%s} ",it->refv[i]);        fprintf(fp," @code{%s} ",it->refv[i]);
       if (i != it->refc-1) fprintf(fp,", ");        if (i != it->refc-1) fprintf(fp,", \n");
     }      }
     fprintf(fp,"\n@end table\n");      fprintf(fp,"\n@end quotation\n");
   }    }
   fprintf(fp,"\n");    fprintf(fp,"\n");
 }  }
   
   void
 printTexi0(FILE *fp, struct item *it) {  printTexi0(FILE *fp, struct item *it) {
   int i;    int i;
   
Line 593  printTexi0(FILE *fp, struct item *it) {
Line 648  printTexi0(FILE *fp, struct item *it) {
   printTexi_common(fp,it);    printTexi_common(fp,it);
 }  }
   
   void
 printTexi1(FILE *fp, struct item *it) {  printTexi1(FILE *fp, struct item *it) {
   int i;    int i;
   /* For  it->type == 1 */    /* For  it->type == 1 */
Line 620  printTexi1(FILE *fp, struct item *it) {
Line 676  printTexi1(FILE *fp, struct item *it) {
   printTexi_common(fp,it);    printTexi_common(fp,it);
 }  }
   
   void
 outputExample(FILE *fp,char *s) {  outputExample(FILE *fp,char *s) {
   int i;    int i;
     /* Remove unnecessary spaces at the tail. */
     for (i=strlen(s)-1; i>=0; i--) {
           if (s[i] == '\n') break;
           else if (s[i] <= ' ') {s[i] = 0;}
           else break;
     }
   for (i=0; s[i] != 0; i++) {    for (i=0; s[i] != 0; i++) {
         if (s[i] == '@') {          if (s[i] == '@') {
           if (s[i+1] == '{') {fprintf(fp,"%s","@{"); i += 1;}            if (s[i+1] == '{') {fprintf(fp,"%s","@{"); i += 1;}
Line 638  outputExample(FILE *fp,char *s) {
Line 701  outputExample(FILE *fp,char *s) {
   }    }
 }  }
   
   void
 outputOfExample(char *com) {  outputOfExample(char *com) {
   FILE *fp2;    FILE *fp2;
   int c;    int c;
     int r;
   fp2 = fopen("gentexi-in.tmp","w");    fp2 = fopen("gentexi-in.tmp","w");
   if (fp2 == NULL) {    if (fp2 == NULL) {
     fprintf(stderr,"Cannot open tentexi-in.tmp\n");      fprintf(stderr,"Cannot open tentexi-in.tmp\n");
     exit(10);      exit(10);
   }    }
   system("rm -f gentexi-out.tmp");    r=system("rm -f gentexi-out.tmp");
   fprintf(fp2,"output(\"gentexi-out.tmp\")$\n");    fprintf(fp2,"output(\"gentexi-out.tmp\")$\n");
   fprintf(fp2,"%s\n",com);    fprintf(fp2,"%s\n",com);
   fprintf(fp2,"output()$\n");    fprintf(fp2,"output()$\n");
   fprintf(fp2,"quit;");    fprintf(fp2,"quit;");
   fclose(fp2);    fclose(fp2);
   system("asir <gentexi-in.tmp >/dev/null");    r=system("asir <gentexi-in.tmp >/dev/null");
   
   fp2 = fopen("gentexi-out.tmp","r");    fp2 = fopen("gentexi-out.tmp","r");
   if (fp2 == NULL) {    if (fp2 == NULL) {
Line 665  outputOfExample(char *com) {
Line 730  outputOfExample(char *com) {
   putchar('\n');    putchar('\n');
 }  }
   
   void
 printTitlePage(char *title, char *author,char *infoName) {  printTitlePage(char *title, char *author,char *infoName) {
   printf("\\input texinfo\n");    printf("\\input texinfo\n");
   printf("@def@colon{:}\n\n");    printf("@def@colon{:}\n\n");
Line 688  printTitlePage(char *title, char *author,char *infoNam
Line 754  printTitlePage(char *title, char *author,char *infoNam
   printf("@node Top,, (dir), (dir)\n\n");    printf("@node Top,, (dir), (dir)\n\n");
 }  }
   
   void
 printBye() {  printBye() {
   printf("@node Index,,, Top\n");    printf("@node Index,,, Top\n");
   printf("@unnumbered Index\n");    printf("@unnumbered Index\n");

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.19

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>