|
|
|
|
|
|
|
|
va_end(args); |
|
|
va_end(args); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
static FILE *fopen_log(FILE *f_log, const char *fname, const char *access) |
|
|
|
|
|
{ |
|
|
|
|
|
// performs fopen, but produces error message to f_log if it fails |
|
|
|
|
|
FILE *f; |
|
|
|
|
|
|
|
|
|
|
|
if ((f = fopen(fname, access)) == NULL) { |
|
|
|
|
|
if (f_log != NULL) |
|
|
|
|
|
fprintf(f_log, "Can't access (%s) file '%s'\n", access, fname); |
|
|
|
|
|
} |
|
|
|
|
|
return f; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static unsigned int StringToWord(const char *string) |
|
|
static unsigned int StringToWord(const char *string) |
|
|
{ |
|
|
{ |
|
|
// Pack 4 characters into a word |
|
|
// Pack 4 characters into a word |
|
|
|
|
|
|
|
|
NextItem(tSTRING); |
|
|
NextItem(tSTRING); |
|
|
sprintf(buf, "%s/../phsource/%s", path_home, item_string); |
|
|
sprintf(buf, "%s/../phsource/%s", path_home, item_string); |
|
|
|
|
|
|
|
|
if ((stack_ix < N_STACK) && (f = fopen_log(f_errors, buf, "rb")) != NULL) { |
|
|
|
|
|
|
|
|
if ((stack_ix < N_STACK) && (f = fopen(buf, "rb")) != NULL) { |
|
|
stack[stack_ix].linenum = linenum; |
|
|
stack[stack_ix].linenum = linenum; |
|
|
strcpy(stack[stack_ix].fname, current_fname); |
|
|
strcpy(stack[stack_ix].fname, current_fname); |
|
|
stack[stack_ix++].file = f_in; |
|
|
stack[stack_ix++].file = f_in; |
|
|
|
|
|
|
|
|
return create_file_error_context(context, errno, fname); |
|
|
return create_file_error_context(context, errno, fname); |
|
|
|
|
|
|
|
|
sprintf(fname, "%s/../phsource/%s", path_home, "compile_report"); |
|
|
sprintf(fname, "%s/../phsource/%s", path_home, "compile_report"); |
|
|
f_report = fopen_log(f_errors, fname, "w"); |
|
|
|
|
|
|
|
|
f_report = fopen(fname, "w"); |
|
|
if (f_report == NULL) { |
|
|
if (f_report == NULL) { |
|
|
int error = errno; |
|
|
int error = errno; |
|
|
fclose(f_in); |
|
|
fclose(f_in); |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
sprintf(fname, "%s/%s", path_home, "phondata-manifest"); |
|
|
sprintf(fname, "%s/%s", path_home, "phondata-manifest"); |
|
|
if ((f_phcontents = fopen_log(f_phcontents, fname, "w")) == NULL) |
|
|
|
|
|
|
|
|
if ((f_phcontents = fopen(fname, "w")) == NULL) |
|
|
f_phcontents = stderr; |
|
|
f_phcontents = stderr; |
|
|
|
|
|
|
|
|
fprintf(f_phcontents, |
|
|
fprintf(f_phcontents, |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
sprintf(fname, "%s/../phsource/compile_prog_log", path_home); |
|
|
sprintf(fname, "%s/../phsource/compile_prog_log", path_home); |
|
|
f_prog_log = fopen_log(f_errors, fname, "wb"); |
|
|
|
|
|
|
|
|
f_prog_log = fopen(fname, "wb"); |
|
|
|
|
|
|
|
|
fprintf(log, "Compiling phoneme data: %s/../phsource\n", path_home); |
|
|
fprintf(log, "Compiling phoneme data: %s/../phsource\n", path_home); |
|
|
|
|
|
|