1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
/*
* ========================================================================
* Copyright 2013-2022 Eduardo Chappa
* Copyright 2006-2007 University of Washington
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* ========================================================================
*/
/*
* very short, very specialized
*
*
*
*/
#include "system.h"
#define HELP_KEY_MAX 64 /* maximum length of a key */
struct hindx {
char key[HELP_KEY_MAX]; /* name of help section */
long offset; /* where help text starts */
short lines; /* how many lines there are */
};
int
main(int argc, char **argv)
{
char *p, s[1024];
long index;
int section,
len,
line,
i;
FILE *hp,
*hip, /* help index ptr */
*hhp; /* help header ptr */
struct hindx irec;
if(argc < 4){
fprintf(stderr,
"usage: helpindx <help_file> <index_file> <header_file>\n");
exit(-1);
}
if((hp = fopen(argv[1], "rb")) == NULL){ /* problems */
perror(argv[1]);
exit(-1);
}
if((hip = fopen(argv[2], "wb")) == NULL){ /* problems */
perror(argv[2]);
exit(-1);
}
if((hhp = fopen(argv[3], "w")) == NULL){ /* problems */
perror(argv[3]);
exit(-1);
}
fprintf(hhp,"/*\n * Alpine Help text header file\n */\n");
fprintf(hhp,"\n#ifndef PITH_HELPTEXT_INCLUDED\n#define PITH_HELPTEXT_INCLUDED\n");
fprintf(hhp,"\n#define\tHELP_KEY_MAX\t%d\n", HELP_KEY_MAX);
fprintf(hhp,"\ntypedef\tshort\tHelpType;\n");
fprintf(hhp,"\n#define\tNO_HELP\t(-1)\n");
fprintf(hhp,"struct hindx {\n char key[HELP_KEY_MAX];");
fprintf(hhp,"\t\t/* name of help section */\n");
fprintf(hhp," long offset;\t\t\t/* where help text starts */\n");
fprintf(hhp," short lines;\t\t\t/* how many lines there are */\n");
fprintf(hhp,"};\n\n\n/*\n * defs for help section titles\n */\n");
index = 0L;
line = section = 0;
while(fgets(s, sizeof(s) - 1, hp) != NULL){
line++;
len = strlen(s);
if(s[0] == '='){ /* new section? */
i = 0;
while((s[i] == '=' || isspace((unsigned char)s[i])) && i < len)
i++;
if(section)
fwrite(&irec, sizeof(struct hindx), 1, hip);
irec.offset = index + (long)i; /* save where name starts */
irec.lines = 0;
p = &irec.key[0]; /* save name field */
while(!isspace((unsigned char)s[i]) && i < len)
*p++ = s[i++];
*p = '\0';
if(irec.key[0] == '\0'){
fprintf(stderr,"Invalid help line %d: %s", line, s);
exit(-1);
}
else
fprintf(hhp, "#define\t%s\t%d\n", irec.key, section++);
}
else if(s[0] == '#' && section){
fprintf(stderr,"Comments not allowed in help text: line %d", line);
exit(-1);
}
else{
irec.lines++;
}
index += len;
}
if(section) /* write last entry */
fwrite(&irec, sizeof(struct hindx), 1, hip);
fprintf(hhp, "#define\tLASTHELP\t%d\n", section);
fprintf(hhp,"\n#endif /* PITH_HELPTEXT_INCLUDED */\n");
fclose(hp);
fclose(hip);
fclose(hhp);
exit(0);
}
|