#include char *qual[10]; /* array of qualifiers from input line */ int n = 0; unsigned i; int argcnt; char rootfile[19]; char *p; char level; int nlvl; FILE *help1, *help2, *help3, *help4, *help5, *help6, *help7; FILE *help8, *help9; main(argc,argv) int argc; char *argv[]; BEGIN char line[133], c; cmdlin(argc,argv); /* read in qualifiers from command line */ p = cpystr(rootfile,"[1,2]"); p = cpystr(p, qual[0]); p = cpystr(p, ".HLP"); printf ("%s %s\n", "rootfile is",rootfile); if ((help1 = fopen (rootfile, "R")) == NULL) error("cannot open ",rootfile); level = '1'; /* we start at level 1 help */ nlvl = 1; findlevel(); done: fclose (help1); END findlevel() BEGIN while ((fgetss (line, 132, help1)) != NULL) BEGIN /* if it is @, open a new file */ /* if it is #, it is a synonym */ /* if it is not a digit, skip rest of while loop */ if(!isdigit(c = line[0])) continue; /* only examine level headings */ if (c == level) BEGIN if (argcnt == nlvl) return (-1); /* we have finished */ if ((index(line,qual[nlvl])) == 2) BEGIN printf("%s\n",line); nlvl++; level++; /* OK to increment ASCII character */ findlevel(); END END END cmdlin(argc,argv) int argc; char *argv[]; BEGIN /* read help qualifiers from command line */ int cliok; argcnt = argc - 1; /* save arguement count */ if (argc > 1) cliok = (!(strcmp(argv[1],"DCL"))) || (!(strcmp(argv[1],"MCR"))); if ((argc==1) || (!cliok)) BEGIN printf ("%s\n", "usage: HDX help-tree [qual1 [qual2...]]"); printf ("%s\n", " where help-tree is either 'MCR' or 'DCL'"); exit(0); END n = 0; while ((--argc > 0) && (n <= 9)) BEGIN i = strlen(*++argv) + 1; /* plus one for EOL character */ if ((p = malloc(i)) == NULL) printf ("%s%d\n", "allocated for ", n); strcpy (p, *argv); qual[n] = p; /* assign pointer to qual element */ n++; END printf ("%s", "Help file qualifiers for: "); for (n=0; n < argcnt; n++) printf ("%s%c", qual[n], (n == (argcnt-1)) ? '\n' : ' '); END /* function index -- find location of string t in string s */ index (s,t) /* returns -1 if t not contained in s */ char s[], t[]; BEGIN int h, j, k; for (h=0; s[h] != '\0'; h++) BEGIN for (j=h, k=0; t[k] != NULL && s[j] == t[k]; j++, k++) ; if (t[k] == NULL) return (h); END return (-1); END