#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include "suck_config.h"
/* create a text file with the default*phrases arrays in them */
/* and create phrases.h */
#define PHRASES_H "phrases.h"
extern const char *default_both_phrases[];
extern const char *default_rpost_phrases[];
extern const char *default_test_phrases[];
extern const char *default_suck_phrases[];
extern const char *default_timer_phrases[];
extern const char *default_chkh_phrases[];
extern const char *default_dedupe_phrases[];
extern const char *default_killf_reasons[];
extern const char *default_killf_phrases[];
extern const char *default_killp_phrases[];
extern const char *default_sucku_phrases[];
extern const char *default_lmove_phrases[];
extern const char *default_active_phrases[];
extern const char *default_batch_phrases[];
extern const char *default_xover_phrases[];
extern const char *default_xover_reasons[];
extern int nr_both_phrases;
extern int nr_rpost_phrases;
extern int nr_test_phrases;
extern int nr_suck_phrases;
extern int nr_timer_phrases;
extern int nr_chkh_phrases;
extern int nr_dedupe_phrases;
extern int nr_killf_reasons;
extern int nr_killf_phrases;
extern int nr_killp_phrases;
extern int nr_sucku_phrases;
extern int nr_lmove_phrases;
extern int nr_active_phrases;
extern int nr_batch_phrases;
extern int nr_xover_phrases;
extern int nr_xover_reasons;
int do_one_array(FILE *, int, const char **);
int do_phrases_h(void);
int count_vars(const char **, int);
int main(int argc, char *argv[]) {
int retval = 0;
FILE *fpo;
if(argc != 2) {
fprintf(stderr, "Usage: %s outfile <RETURN>\n", argv[0]);
retval = -1;
}
else if(strcmp(argv[1],"phrases.h") == 0) {
retval = do_phrases_h();
}
else if((fpo = fopen(argv[1], "w")) == NULL) {
perror(argv[1]);
retval = -1;
}
else { /* first put version number */
fprintf(fpo, "%s\n", SUCK_VERSION);
retval = do_one_array(fpo, nr_both_phrases, default_both_phrases);
if(retval == 0) {
retval = do_one_array(fpo, nr_rpost_phrases, default_rpost_phrases);
}
if(retval == 0) {
retval = do_one_array(fpo, nr_test_phrases, default_test_phrases);
}
if(retval == 0) {
retval = do_one_array(fpo, nr_suck_phrases, default_suck_phrases);
}
if(retval == 0) {
retval = do_one_array(fpo, nr_timer_phrases, default_timer_phrases);
}
if(retval == 0) {
retval = do_one_array(fpo, nr_chkh_phrases, default_chkh_phrases);
}
if(retval == 0) {
retval = do_one_array(fpo, nr_dedupe_phrases, default_dedupe_phrases);
}
if(retval == 0) {
retval = do_one_array(fpo, nr_killf_reasons, default_killf_reasons);
}
if(retval == 0) {
retval = do_one_array(fpo, nr_killf_phrases, default_killf_phrases);
}
if(retval == 0) {
retval = do_one_array(fpo, nr_killp_phrases, default_killp_phrases);
}
if(retval == 0) {
retval = do_one_array(fpo, nr_sucku_phrases, default_sucku_phrases);
}
if(retval == 0) {
retval = do_one_array(fpo, nr_lmove_phrases, default_lmove_phrases);
}
if(retval == 0) {
retval = do_one_array(fpo, nr_active_phrases, default_active_phrases);
}
if(retval == 0) {
retval = do_one_array(fpo, nr_batch_phrases, default_batch_phrases);
}
if(retval == 0) {
retval = do_one_array(fpo, nr_xover_phrases, default_xover_phrases);
}
if(retval == 0) {
retval = do_one_array(fpo, nr_xover_reasons, default_xover_reasons);
}
fclose(fpo);
if(retval == -1 ) {
perror(argv[1]);
}
else {
printf("Created %s\n", argv[1]);
}
}
exit(retval);
}
/*------------------------------------------------------------------------*/
int do_one_array(FILE *fpo, int nr, const char **phrases) {
int i, x;
int retval = 0;
for(i=0;i<nr && retval == 0;i++) {
fputc('"', fpo);
for(x = 0; x < strlen(phrases[i]); x++) {
/* handle control codes */
switch(phrases[i][x]) {
case '\r':
fputs("\\r", fpo);
break;
case '\t':
fputs("\\t", fpo);
break;
case '\n':
fputs("\\n", fpo);
break;
default:
fputc(phrases[i][x], fpo);
break;
}
}
if(fputs("\"\n", fpo) == EOF) {
retval = -1;
}
}
return retval;
}
/*------------------------------------------------------------------------*/
int do_phrases_h(void) {
FILE *fpo;
int i, maxvar, retval = 0;
/* generate phrases.h */
if((fpo = fopen(PHRASES_H, "w")) == NULL) {
perror(PHRASES_H);
retval = -1;
}
else {
maxvar = count_vars(default_both_phrases, nr_both_phrases);
i = count_vars(default_rpost_phrases, nr_rpost_phrases);
if( i > maxvar) {
maxvar = i;
}
i = count_vars(default_test_phrases, nr_test_phrases);
if( i > maxvar) {
maxvar = i;
}
i = count_vars(default_suck_phrases, nr_suck_phrases);
if( i > maxvar) {
maxvar = i;
}
i = count_vars(default_timer_phrases, nr_timer_phrases);
if( i > maxvar) {
maxvar = i;
}
i = count_vars(default_chkh_phrases, nr_chkh_phrases);
if( i > maxvar) {
maxvar = i;
}
i = count_vars(default_dedupe_phrases, nr_dedupe_phrases);
if( i > maxvar) {
maxvar = i;
}
i = count_vars(default_killf_reasons, nr_killf_reasons);
if( i > maxvar) {
maxvar = i;
}
i = count_vars(default_killf_phrases, nr_killf_phrases);
if( i > maxvar) {
maxvar = i;
}
i = count_vars(default_sucku_phrases, nr_sucku_phrases);
if( i > maxvar) {
maxvar = i;
}
i = count_vars(default_lmove_phrases, nr_lmove_phrases);
if( i > maxvar) {
maxvar = i;
}
i = count_vars(default_active_phrases, nr_active_phrases);
if(i > maxvar) {
maxvar = i;
}
i = count_vars(default_batch_phrases, nr_batch_phrases);
if(i > maxvar) {
maxvar = i;
}
i = count_vars(default_xover_phrases, nr_xover_phrases);
if(i > maxvar) {
maxvar = i;
}
i = count_vars(default_xover_reasons, nr_xover_reasons);
if(i > maxvar) {
maxvar = i;
}
fprintf(fpo, "/* AUTOMATICALLY GENERATED BY makephrases */\n\n");
fprintf(fpo, "#define NR_BOTH_PHRASES %d\n", nr_both_phrases);
fprintf(fpo, "#define NR_RPOST_PHRASES %d\n", nr_rpost_phrases);
fprintf(fpo, "#define NR_TEST_PHRASES %d\n", nr_test_phrases);
fprintf(fpo, "#define NR_SUCK_PHRASES %d\n", nr_suck_phrases);
fprintf(fpo, "#define NR_TIMER_PHRASES %d\n", nr_timer_phrases);
fprintf(fpo, "#define NR_CHKH_PHRASES %d\n", nr_chkh_phrases);
fprintf(fpo, "#define NR_DEDUPE_PHRASES %d\n", nr_dedupe_phrases);
fprintf(fpo, "#define NR_KILLF_REASONS %d\n", nr_killf_reasons);
fprintf(fpo, "#define NR_KILLF_PHRASES %d\n", nr_killf_phrases);
fprintf(fpo, "#define NR_KILLP_PHRASES %d\n", nr_killp_phrases);
fprintf(fpo, "#define NR_SUCKU_PHRASES %d\n", nr_sucku_phrases);
fprintf(fpo, "#define NR_LMOVE_PHRASES %d\n", nr_lmove_phrases);
fprintf(fpo, "#define NR_ACTIVE_PHRASES %d\n", nr_active_phrases);
fprintf(fpo, "#define NR_BATCH_PHRASES %d\n", nr_batch_phrases);
fprintf(fpo, "#define NR_XOVER_PHRASES %d\n", nr_xover_phrases);
fprintf(fpo, "#define NR_XOVER_REASONS %d\n", nr_xover_reasons);
fprintf(fpo, "#define PHRASES_MAX_NR_VARS %d\n\n", maxvar);
fprintf(fpo, "extern char *default_both_phrases[];\n");
fprintf(fpo, "extern char *default_rpost_phrases[];\n");
fprintf(fpo, "extern char *default_test_phrases[];\n");
fprintf(fpo, "extern char *default_suck_phrases[];\n");
fprintf(fpo, "extern char *default_timer_phrases[];\n");
fprintf(fpo, "extern char *default_chkh_phrases[];\n");
fprintf(fpo, "extern char *default_dedupe_phrases[];\n");
fprintf(fpo, "extern char *default_killf_reasons[];\n");
fprintf(fpo, "extern char *default_killf_phrases[];\n");
fprintf(fpo, "extern char *default_killp_phrases[];\n");
fprintf(fpo, "extern char *default_sucku_phrases[];\n");
fprintf(fpo, "extern char *default_lmove_phrases[];\n");
fprintf(fpo, "extern char *default_active_phrases[];\n");
fprintf(fpo, "extern char *default_batch_phrases[];\n");
fprintf(fpo, "extern char *default_xover_phrases[];\n");
fprintf(fpo, "extern char *default_xover_reasons[];\n");
fprintf(fpo, "extern char **both_phrases;\n");
fprintf(fpo, "extern char **rpost_phrases;\n");
fprintf(fpo, "extern char **test_phrases;\n");
fprintf(fpo, "extern char **suck_phrases;\n");
fprintf(fpo, "extern char **timer_phrases;\n");
fprintf(fpo, "extern char **chkh_phrases;\n");
fprintf(fpo, "extern char **dedupe_phrases;\n");
fprintf(fpo, "extern char **killf_reasons;\n");
fprintf(fpo, "extern char **killf_phrases;\n");
fprintf(fpo, "extern char **killp_phrases;\n");
fprintf(fpo, "extern char **sucku_phrases;\n");
fprintf(fpo, "extern char **lmove_phrases;\n");
fprintf(fpo, "extern char **active_phrases;\n");
fprintf(fpo, "extern char **batch_phrases;\n");
fprintf(fpo, "extern char **xover_phrases;\n");
fprintf(fpo, "extern char **xover_reasons;\n");
fclose(fpo);
printf("Created phrases.h\n");
}
return retval;
}
/*--------------------------------------------------------------*/
/* find highest nr of vars in any string in the array */
/* var == %v#% */
/*--------------------------------------------------------------*/
int count_vars(const char **phrases, int nr) {
int i, x, max, nrline, match, nrat, len;
max = 0;
for(i=0;i<nr;i++) {
x = 0;
nrline = 0;
len = strlen(phrases[i]);
while( x < len-3 ) {
match = 0;
if(phrases[i][x] == PHRASES_SEPARATOR && phrases[i][x+1] == PHRASES_VAR_CHAR) {
nrat = x+2;
while(isdigit(phrases[i][nrat])) {
nrat++;
}
if((x < len-3) && (nrat > x+2) && (phrases[i][nrat] == PHRASES_SEPARATOR)) {
match = 1;
nrline++;
x = nrat+1;
}
}
if (match == 0) {
x++;
}
}
if(nrline > max) {
max = nrline;
}
}
return max;
}
syntax highlighted by Code2HTML, v. 0.9.1