diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/cwpuzzle/AcrossLite/usaconv.c')
-rw-r--r-- | Master/texmf-dist/source/latex/cwpuzzle/AcrossLite/usaconv.c | 229 |
1 files changed, 0 insertions, 229 deletions
diff --git a/Master/texmf-dist/source/latex/cwpuzzle/AcrossLite/usaconv.c b/Master/texmf-dist/source/latex/cwpuzzle/AcrossLite/usaconv.c deleted file mode 100644 index 9f8433d4fd3..00000000000 --- a/Master/texmf-dist/source/latex/cwpuzzle/AcrossLite/usaconv.c +++ /dev/null @@ -1,229 +0,0 @@ - -#include <stdio.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#define ROWSIZE 256 - -FILE *infile; -int width, height, j, k, ccount, mcount, anum, dnum; -int apos, dpos; -int acount, dcount; - -char inbuf[ROWSIZE]; - -/* Here is a lazy programmer's waste of space. */ -char aspace[ROWSIZE][ROWSIZE]; -char dspace[ROWSIZE][ROWSIZE]; - -char rowtext[10*ROWSIZE]; -char tmp[ROWSIZE]; - -char title[80]; -char author[80]; -char copyright[80]; -char matrix[ROWSIZE*ROWSIZE*10]; -char actext[ROWSIZE][80]; -char dctext[ROWSIZE][80]; -char aclues[ROWSIZE*15*16]; -char dclues[ROWSIZE*15*16]; - -void fgetsa(char *, int, FILE *); - -void main(int argc, char *argv[]) -{ - -/* Open the puzzle file. */ - if (argc < 2) { - printf("Usage: usaconv <puzzle file>\n"); - exit(1); - } - infile = fopen(argv[1], "r"); - if (infile == NULL) { - printf("Error opening %s.\n"); - exit(1); - } - -/* From here on we're assuming a non-corrupt puzzle file. - An enhancement later could be to check for this. */ - -/* start reading stuff in */ - fgetsa(inbuf, 80, infile); /*<ACROSS PUZZLE>*/ - fgetsa(inbuf, 80, infile); /*<TITLE>*/ - fgetsa(title, 80, infile); - fgetsa(inbuf, 80, infile); /*<AUTHOR>*/ - fgetsa(author, 80, infile); - fgetsa(inbuf, 80, infile); /*<COPYRIGHT>*/ - fgetsa(copyright,80, infile); - fgetsa(inbuf, 80, infile); /*<SIZE>*/ - - fgetsa(inbuf, 80, infile); - height = width = 0 ; /* we calculate instead */ - - fgetsa(inbuf, 80, infile); /*<GRID>*/ - -/* Read in the first line of the solution/diagram and determine width */ - fgetsa(&aspace[height][0], 80, infile); - width = strlen(&aspace[height][0]); - height++; - while (1) { - fgetsa(&aspace[height][0], 80, infile); - if(strcmp(&aspace[height][0],"<ACROSS>")==0) goto didit; - height++; - } -didit: - /* Read and save across and down clues */ - - apos=dpos=0; - while(1) { - fgetsa(&actext[apos][0], 80, infile); - if(strcmp(&actext[apos][0],"<DOWN>")==0)goto dida; - apos++; - } -dida: - while(1) { - fgetsa(&dctext[dpos][0], 80, infile); - if(feof(infile)) goto didd; - dpos++; - } -didd: - apos=dpos=0; - -/* Now we are ready to produce the LaTeX stuff for the - puzzle diagram. Again we are assuming we have an unscrambled - solution. How can we know this? Put on TODO list. */ - -/* We write to standard out. Lazy but effective. */ - - printf("\\documentclass{article}\n"); - printf("\\usepackage{cwpuzzle}\n"); - printf("\\title{%s}\n", title); - printf("\\author{%s}\n", author); - printf("\\date{%s}\n", copyright); - printf("\\voffset -1in\n"); - printf("\\hoffset -1in\n"); - printf("\\begin{document}\n"); - - ccount = 0; - mcount = 0; - acount = dcount = 0; - - for (j=0; j<height; j++) { - strcpy(rowtext,"\0"); - for (k=0; k<width; k++) { - /* Analyze position for across-number */ - /* Left edge non-black followed by non-black */ - anum = 0; - if ( (k==0 && aspace[j][k]!='.' && aspace[j][k+1]!='.') || - /* Previous black - nonblack - nonblack */ - ( (k+1)<width && (k-1)>=0 && aspace[j][k]!='.' - && aspace[j][k-1]=='.' - && aspace[j][k+1]!='.' ) - ){ - ccount++; - anum = ccount; - } - /* Analyze position for down-number */ - dnum = 0; - /* Top row non-black followed by non-black */ - if ( (j==0 && aspace[j][k]!='.' && aspace[j+1][k]!='.') || - /* Black above - nonblack - nonblack below */ - ( (j-1)>=0 && (j+1)<height && aspace[j][k]!='.' - && aspace[j-1][k]=='.' - && aspace[j+1][k]!='.' ) - ){ - /* Don't double number the same space */ - if (anum == 0) ccount++; - dnum = ccount; - } - /* Now, if necessary, assign some clues and save them. */ - if (anum != 0) { - sprintf(&aclues[apos], "\\Clue{%d}{}{%s}\\\\\n", - anum, actext[acount]); - acount++; - apos = strlen(aclues); - } - if (dnum != 0) { - sprintf(&dclues[dpos], "\\Clue{%d}{}{%s}\\\\\n", - dnum, dctext[dcount]); - dcount++; - dpos = strlen(dclues); - } - /* Concat the current info to the current row. */ - strcat(rowtext, "|"); - if (aspace[j][k] == '.') strcat(rowtext, "*"); - else { - /* see if we need a grid number */ - if (dnum != 0) { - sprintf(tmp, "[%d]", dnum); - strcat(rowtext, tmp); - } - else if (anum != 0) { - sprintf(tmp, "[%d]", anum); - strcat(rowtext, tmp); - } - /* Put in solution letter */ -/* this is for real */ if (aspace[j][k]== '&') strncat(rowtext, "\\", 1); - strncat(rowtext, &aspace[j][k], 1); - } - } - /* End of the row. Put in marker and output it. */ - strcat(rowtext, "|."); - sprintf(&matrix[mcount], "%s\n", rowtext); - mcount = strlen(matrix); - } - /* That's it for the puzzle. */ - - /* Now output the clue section */ - printf("\\begin{PuzzleClues}{\\textbf{Across}}\\\\\n"); - for (j=0; j<strlen(aclues); j++){ - printf("%c",aclues[j]); - } - printf("\\end{PuzzleClues}\n"); - printf("\\begin{PuzzleClues}{\\textbf{Down}}\\\\\n"); - for (j=0; j<strlen(dclues); j++){ - printf("%c",dclues[j]); - } - printf("\\end{PuzzleClues}\n"); - - /* Now output the diagram */ - printf("\\newpage\n"); - printf("\\maketitle\n"); - printf("\\begin{Puzzle}{%d}{%d}\n", width, height); - printf("%s", matrix); - printf("\\end{Puzzle}\n"); - - - printf("\\end{document}\n"); - - exit(0); - -} - - void fgetsa(char *foo, int size, FILE *infile) { - int i, oe; - fgets(tmp, size, infile); - tmp[strlen(tmp)-1] = '\0'; - strcpy(foo, "\0"); - oe = 0; - for (i=0; i<strlen(tmp); i++) { - if (tmp[i]=='$' || tmp[i] == '_' || tmp[i] =='&' || tmp[i] == '#') strcat(foo, "\\"); - if (tmp[i] == '"') { - if (oe == 0) { - oe = 1; - strcat(foo, "``"); - } - else { - oe = 0; - strcat(foo, "''"); - } - } - else strncat(foo, &tmp[i], 1); - } - } - - - - - - |