diff options
author | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2015-12-17 07:20:42 +0000 |
---|---|---|
committer | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2015-12-17 07:20:42 +0000 |
commit | 643f37f986567ca5af6baab87421f8ef22b23403 (patch) | |
tree | e6784bed247736f1867b6c3a7b3e670de30b7bc0 /Build/source/utils/m-tx/mtx-src/files.c | |
parent | 76de76558a202700f48fa5aadef763a2be07a730 (diff) |
Import m-tx 0.61
git-svn-id: svn://tug.org/texlive/trunk@39128 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/utils/m-tx/mtx-src/files.c')
-rw-r--r-- | Build/source/utils/m-tx/mtx-src/files.c | 390 |
1 files changed, 390 insertions, 0 deletions
diff --git a/Build/source/utils/m-tx/mtx-src/files.c b/Build/source/utils/m-tx/mtx-src/files.c new file mode 100644 index 00000000000..972d34ac573 --- /dev/null +++ b/Build/source/utils/m-tx/mtx-src/files.c @@ -0,0 +1,390 @@ +/* Output from p2c 1.21alpha-07.Dec.93, the Pascal-to-C translator */ +/* From input file "files.pas" */ + + + +#include "p2c.h" + +#define FILES_G +#include "files.h" + + +#ifndef CONTROL_H +#include "control.h" +#endif + +#ifndef STRINGS_H +#include "strings.h" +#endif + +#ifndef UTILITY_H +#include "utility.h" +#endif + + +#define param_leader '-' + + +Static Char stylefilename[256] = "mtxstyle.txt"; + +Static short teststyle; + + +boolean endOfInfile(void) +{ + return (eofAll()); +} + + +Static void putTeXlines(Char *s_) +{ + Char s[256]; + short p; + Char STR1[256], STR3[256]; + + strcpy(s, s_); + p = pos1('\n', s); + while (p > 0) { + sprintf(STR3, "\\%s\\", substr_(STR1, s, 1, p - 1)); + putLine(STR3); + predelete(s, p); + p = pos1('\n', s); + } + if (*s != '\0') { + sprintf(STR3, "\\%s\\", s); + putLine(STR3); + } +} + + +void TeXtype2(Char *s) +{ + Char STR2[256]; + + if (!pmx_preamble_done) { + putLine(s); + return; + } + if (s[0] == '%') { + putLine(s); + return; + } + if (first_paragraph) + putTeXlines(s); + else { + sprintf(STR2, "\\\\%s\\", s); + putLine(STR2); + } +} + + +void putLine(Char *line) +{ + if (outlen + strlen(line) >= PMXlinelength) + putc('\n', outfile); + fprintf(outfile, "%s\n", line); + outlen = 0; +} + + +void put(Char *line_, boolean putspace_) +{ + Char line[256]; + short l; + Char STR1[256]; + + strcpy(line, line_); + l = strlen(line); + if (l > PMXlinelength) + error("Item longer than PMX line length", print); + if (outlen + l >= PMXlinelength) { + putLine(""); + put(line, false); + return; + } + if (putspace_ && outlen > 0 && line[0] != ' ') + sprintf(line, " %s", strcpy(STR1, line)); + fputs(line, outfile); + outlen += l; +} + + +boolean styleFileFound(void) +{ + return (teststyle != 0); +} + + +Static void helpmessage(void) +{ + printf("Usage: prepmx [-bcfnhimtuvwDH0123456789] MTXFILE [TEXDIR] [STYLEFILE]\n"); +} + + +Static void bighelpmessage(void) +{ + helpmessage(); + printf("\nMTXFILE: name of .mtx file without its extension\n"); + printf("TEXDIR: directory where the TeX file made by PMX goes, default is ./\n"); + printf("STYLEFILE: name of a file containing style definitions. Default is\n"); + printf(" mtxstyle.txt. This feature is now deprecated; use Include: STYLEFILE\n"); + printf(" in the preamble of the .mtx file instead.\n"); + printf("Options: (can also be entered separately: -b -c ...)\n"); + printf(" -b: disable unbeamVocal\n"); + printf(" -c: disable doChords\n"); + printf(" -f: enable solfaNoteNames\n"); + printf(" -h: display this message and quit\n"); + printf(" -i: enable ignoreErrors\n"); + printf(" -m: disable doLyrics\n"); + printf(" -n: enable instrumentNames\n"); + printf(" -t: disable doUptext\n"); + printf(" -u: disable uptextOnRests\n"); + printf(" -v: enable beVerbose\n"); + printf(" -w: enable pedanticWarnings\n"); + printf(" -D: enable debugMode\n"); + printf(" -0123456789: select Case\n"); + printf(" -H: print enabled status of all options\n"); + printf("All the above, and some other, options can be enabled or disabled\n"); + printf(" in the preamble. What you do there overrides what you do here.\n"); +} + + +void processOption(Char j) +{ + switch (j) { + + case 'b': + setFeature("unbeamVocal", false); + break; + + case 'c': + setFeature("doChords", false); + break; + + case 'f': + setFeature("solfaNoteNames", true); + break; + + case 'h': + bighelpmessage(); + _Escape(255); + break; + + case 'i': + setFeature("ignoreErrors", true); + break; + + case 'm': + setFeature("doLyrics", false); + break; + + case 'n': + setFeature("instrumentNames", true); + break; + + case 't': + setFeature("doUptext", false); + break; + + case 'u': + setFeature("uptextOnRests", false); + break; + + case 'v': + setFeature("beVerbose", true); + break; + + case 'w': + setFeature("pedanticWarnings", true); + break; + + case 'D': + setFeature("debugMode", true); + break; + + case 'H': + printFeatures(true); + break; + + default: + if (isdigit(j)) + choice = j; + else { + putchar(j); + error(": invalid option", !print); + } + break; + } +} + + +/* Local variables for OpenFiles: */ +struct LOC_OpenFiles { + short testin; + Char basename[256]; +} ; + +Local void checkExistingFile(struct LOC_OpenFiles *LINK) +{ + FILE *tryfile; + Char tryfile_NAME[_FNSIZE]; + + strcpy(tryfile_NAME, LINK->basename); + tryfile = fopen(tryfile_NAME, "r+b"); + _SETIO(tryfile != NULL, FileNotFound); + LINK->testin = P_ioresult; + if (LINK->testin != 0) + return; + if (tryfile != NULL) + fclose(tryfile); + printf("There exists a file named %s. I am treating this\n", + LINK->basename); + error(" as a fatal error unless you specify -i", !print); +} + + +void OpenFiles(void) +{ + struct LOC_OpenFiles V; + short i, j, l; + short fileid = 0; + Char infilename[256], outfilename[256], param[256], ext[256]; + short FORLIM1; + Char STR3[256]; + + line_no = 0; + paragraph_no = 0; + for (i = 1; i <= P_argc - 1; i++) { + strcpy(param, P_argv[i]); + if (param[0] == param_leader) { + FORLIM1 = strlen(param); + for (j = 1; j <= FORLIM1 - 1; j++) + processOption(param[j]); + } else if (fileid == 0) + fileid = i; + else if (*texdir == '\0') + strcpy(texdir, param); + else + strcpy(stylefilename, param); + } + if (fileid == 0) { + helpmessage(); + printf("Try \"prepmx -h\" for more information.\n"); + _Escape(255); + } + strcpy(V.basename, P_argv[fileid]); + l = strlen(V.basename); + if (l > 4 && V.basename[l-4] == '.') { + substr_(ext, V.basename, l - 2, 3); + toUpper(ext); + if (!strcmp(ext, "MTX")) { + warning(".mtx extension deleted from basename", !print); + shorten(V.basename, l - 4); + } + } + if (pos1('.', V.basename) > 0) + checkExistingFile(&V); + sprintf(infilename, "%s.mtx", V.basename); + sprintf(outfilename, "%s.pmx", V.basename); + pushFile(infilename); + strcpy(outfile_NAME, outfilename); + if (outfile != NULL) + outfile = freopen(outfile_NAME, "wb", outfile); + else + outfile = fopen(outfile_NAME, "wb"); + _SETIO(outfile != NULL, FileNotFound); + strcpy(stylefile_NAME, stylefilename); + if (stylefile != NULL) + stylefile = freopen(stylefile_NAME, "r", stylefile); + else + stylefile = fopen(stylefile_NAME, "r"); + _SETIO(stylefile != NULL, FileNotFound); + teststyle = P_ioresult; + if (teststyle != 0 && strcmp(stylefilename, "mtxstyle.txt")) + _SETIO(printf("Can't read %s\n", stylefilename) >= 0, FileWriteError); + if (fileError()) { + sprintf(STR3, "Input file %s not found", infilename); + fatalerror(STR3); + } + outfile_open = true; + printf("Writing to %s.pmx\n", V.basename); +} + + +void CloseFiles(void) +{ + if (outfile != NULL) + fclose(outfile); + outfile = NULL; + closeAll(); + if (teststyle != 0) + return; + if (stylefile != NULL) + fclose(stylefile); + stylefile = NULL; +} + + +void readParagraph(Char (*P)[256], short *no, paragraph_index0 *L) +{ + boolean another; + Char filename[256], buffer[256]; + Char STR1[256], STR3[256]; + + *L = 0; + readData(buffer); + line_no = currentLineNo(); + if (isEmpty(buffer)) + return; + if (debugMode()) + printf(">>>> %s\n", buffer); + paragraph_no++; + /* Handle directives affecting the processing of the input file */ + do { + another = false; + if (startsWithIgnoreCase(buffer, "SUSPEND")) { + ignore_input = true; + another = true; + if (beVerbose()) + printf("-->> Suspending input file %s at line %d\n", + currentFilename(STR3), line_no); + } + if (startsWithIgnoreCase(buffer, "RESUME")) { + ignore_input = false; + another = true; + if (beVerbose()) + printf("-->> Resuming input file %s at line %d\n", + currentFilename(STR1), line_no); + } + if (startsWithIgnoreCase(buffer, "INCLUDE:")) { + predelete(buffer, 8); + NextWord(filename, buffer, ' ', ' '); + pushFile(filename); + another = true; + } + if (another) { + readLine(buffer); + line_no = currentLineNo(); + } + } while (another); + /* Normal paragraph input*/ + do { + if (*L < lines_in_paragraph) { + (*L)++; + strcpy(P[*L - 1], buffer); + *buffer = '\0'; + no[*L - 1] = line_no; + } else + warning("Paragraph too long: skipping line", !print); + readLine(buffer); + line_no = currentLineNo(); + if (debugMode()) + printf("%d >> %s\n", line_no, buffer); + } while (!isEmpty(buffer)); + skipBlanks(); /* needed to identify final paragraph */ +} + + + + +/* End. */ |