// TO DO: make it check the environment and do something
// sensible if invoked from the command line. (I.e. don't just crash)
// Add an option for loading .gcg files such as http://web.mit.edu/abader/Public/scrabble/find_treys_move.gcg
/*
allmoves.cgi to generate moves
- initial half ply
global to estimate average response to play
- equivalent to 1 full ply
evaluate *our* response given held tiles. (null-move heuristic)
- gives value of leave
*/
// this is UNSUPPORTED code to provide a front-end to findmoves.c
// I strongly recommend a rewrite, but I'm putting it online as
// a help to anyone who wants to hook these engines into a web site...
// - graham toal 13Jul03
//
// The master is /usr/local/apache2/cgi-src/bsdi/, and the
// variation on this file, "allmoves-latin1.c" is a work-in-progress
// to make it more 8-bit clean.
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include "cgi_c/www.h"
#define TRUE (0==0)
#define FALSE (0!=0)
static char saved[15][15];
static char rack1[7];
/*static char rack2[7];*/
static int score = 0;
static int remaining = 0;
static long thisrand = 10000L;
#define DEFDICT "enable-wwf"
static char *dict = DEFDICT;
const char *dicts[] = {
"enable-wwf", "twl98", "sowpods", "osw", "ospd",
"afrikaans", "french", "italian", "malaysian", "romanian",
/* only foreign languages which use A-Z for now... */
NULL
};
const char premium[6] = {
/* "star", "empty", "double", "triplet", "doublwrd", "triplwrd"*/
/* "dws", "sq", "dls", "tls", "dws", "tws" */
'+', '.', '-', '=', '+', '#'
};
// http://www.bolsboardgames.com/2011/01/words-with-friends-board-and-tile.html
const int premiums[15][15] = {
{1,1,1,5,1,1,3,1,3,1,1,5,1,1,1},
{1,1,2,1,1,4,1,1,1,4,1,1,2,1,1},
{1,2,1,1,2,1,1,1,1,1,2,1,1,2,1},
{5,1,1,3,1,1,1,4,1,1,1,3,1,1,5},
{1,1,2,1,1,1,2,1,2,1,1,1,2,1,1},
{1,4,1,1,1,3,1,1,1,3,1,1,1,4,1},
{3,1,1,1,2,1,1,1,1,1,2,1,1,1,3},
{1,1,1,4,1,1,1,0,1,1,1,4,1,1,1},
{3,1,1,1,2,1,1,1,1,1,2,1,1,1,3},
{1,4,1,1,1,3,1,1,1,3,1,1,1,4,1},
{1,1,2,1,1,1,2,1,2,1,1,1,2,1,1},
{5,1,1,3,1,1,1,4,1,1,1,3,1,1,5},
{1,2,1,1,2,1,1,1,1,1,2,1,1,2,1},
{1,1,2,1,1,4,1,1,1,4,1,1,2,1,1},
{1,1,1,5,1,1,3,1,3,1,1,5,1,1,1}
};
char *safedict(char *s)
{
int i = 0;
for (;;) {
if (dicts[i] == NULL) break;
if (strcmp(dicts[i], s) == 0) return(s);
i += 1;
}
return(DEFDICT);
}
long getseq(void)
{
int rc;
long seq = 10000L;
FILE *seqfile = fopen("/home/gtoal/gtoal.com/wordgames/boardgen/SEQNO", "r");
if (seqfile == NULL) {
return(random() & 65535L);
} else {
/* read seq from file */
rc = fscanf(seqfile, "%ld", &seq);
fclose(seqfile);
seqfile = fopen("/home/gtoal/gtoal.com/wordgames/boardgen/SEQNO", "w");
/* write seq to file */
fprintf(seqfile, "%0ld\n", seq+1L);
fclose(seqfile);
if (rc == 1) {
return(seq);
} else return(random() & 65535L);
}
}
void generate_graphic(char saved[15][15], char *format)
{
int x,y;
int pass;
FILE *outf, *commfile;
char *NL, *GT, *LT;
char *path = "/usr/local/bin/";
remove("/home/gtoal/tmp/SCRABBLEBOARD");
commfile = fopen("/home/gtoal/tmp/SCRABBLEBOARD", "w");
if (commfile == NULL) {
fprintf(stdout, "ERROR: Cannot generate script file /home/gtoal/tmp/SCRABBLEBOARD - %s<BR>\n",
strerror(errno));
return;
}
thisrand = getseq();
for (pass = 1; pass >= 0; --pass) {
if (pass == 0) {
NL = "<BR>";
GT = ">";
LT = "<";
outf = stdout;
} else {
NL = "";
GT = ">";
LT = "<";
outf = commfile;
}
if (pass == 0) fprintf(outf, "<!--\n");
fprintf(outf, "#!/bin/sh%s\n", NL);
fprintf(outf, "cd /home/gtoal/gtoal.com/wordgames/in-progress/png\n", NL);
fprintf(outf, "cat %s /home/gtoal/gtoal.com/wordgames/boardgen/temp/wsc_%0ld.dat %s%sEOD%s\n", GT, thisrand, LT, LT, NL);
for (y = 0; y < 15; y++) {
for (x = 0; x < 15; x++) {
if (isalpha(saved[x][y])) {
if (islower(saved[x][y])) {
fprintf(outf, "%c", toupper(saved[x][y]));
} else {
fprintf(outf, "%c", tolower(saved[x][y]));
}
} else {
fprintf(outf, "%c", premium[premiums[x][y]]);
}
}
fprintf(outf, "%s\n", NL);
}
for (x = 0; x < 7; x++) {
if (isalpha(rack1[x])) {
fprintf(outf, "%c", toupper(rack1[x]));
} else if (rack1[x] == '?') {
fprintf(outf, "*");
} else if (rack1[x] == ' ') {
fprintf(outf, "?");
}
}
/***
fprintf(outf, "?");
for (x = 0; x < 7; x++) {
if (isalpha(rack2[x])) {
fprintf(outf, "%c", toupper(rack2[x]));
} else if (rack2[x] == '?') {
fprintf(outf, "_");
} else if (rack2[x] == ' ') {
}
}
***/
/* Add score and tiles left (0 prints as nothing) */
fprintf(outf, " %d %d%s\n", score, remaining, NL);
fprintf(outf, "EOD%s\n", NL);
fprintf(outf,
"./wsc_png /home/gtoal/gtoal.com/wordgames/boardgen/temp/wsc_%0ld.dat /home/gtoal/gtoal.com/wordgames/boardgen/temp/wsc_%0ld.png %s\n",
thisrand, thisrand, NL);
/* Find all plays! */
/* print board */
if (pass == 0) {
char command[1024];
fprintf(stdout, "\n-->\n<IMG SRC='/wordgames/boardgen/temp/wsc_%0ld.png'>%s\n", thisrand, NL);
fprintf(stdout, "<H2>Here are all the possible plays on this board:</H2>\n<PRE>");
fflush(stdout);
sprintf(command,
"/home/gtoal/gtoal.com/wordgames/scrabble_solver/friendsmoves /home/gtoal/gtoal.com/wordgames/boardgen/temp/wsc_%0ld.dat %s",
thisrand, safedict(dict));
system(command);
fflush(stdout);
fprintf(stdout, "\n - executed by %s\n", command);
fprintf(stdout, "</PRE>\n");
fprintf(stdout,
"You can bookmark these results at <A HREF=\"http://www.gtoal.com/cgi-bin/friends.cgi?savedgame=%0ld\">http://www.gtoal.com/cgi-bin/friends.cgi?savedgame=%0ld</A><BR>\n",
thisrand, thisrand);
fflush(stdout);
}
fflush(outf);
if (pass == 1) {
char cline[256];
fclose(commfile);
/* Execute the batch file now */
fprintf(stdout, "\n<PRE>\n");
fflush(stdout);
remove("/home/gtoal/tmp/SCRABBLELOG");
system("/bin/chmod +x /home/gtoal/tmp/SCRABBLEBOARD");
system("/bin/sh -x < /home/gtoal/tmp/SCRABBLEBOARD > /home/gtoal/tmp/SCRABBLELOG 2>&1");
system("/bin/chmod 777 /home/gtoal/tmp/SCRABBLELOG");
sprintf(cline, "/bin/rm /home/gtoal/gtoal.com/wordgames/boardgen/temp/sc%0ld-*.pnm", thisrand);
/* system(cline);*/
sprintf(cline, "/bin/rm /home/gtoal/gtoal.com/wordgames/boardgen/temp/ra%0ld*.pnm", thisrand);
/* system(cline);*/
fflush(stdout);
fprintf(stdout, "\n</PRE>\n");
fflush(stdout);
}
}
}
void dumpargs(stringArray name, stringArray value, int num)
{
int i;
char *s;
fprintf(stdout, "<H1>CGI FORM test script reports:</H1>\n");
fprintf(stdout, "The following %d name/value pairs are submitted<p>\n",num);
fprintf(stdout, "<ul>\n");
for(i=0; i < num; i++)
fprintf(stdout, "<li> <code>%s = %s</code>\n",name[i],value[i]);
fprintf(stdout, "</ul>\n");
}
void cgi_bin(int argc, char **argv)
{
int t, r, c, i, num;
char tile[128];
char *board, *s, *oldboard, *startline;
char urls[1024], *url;
char *line[128];
int lines = 0;
int startrow, startcol;
int Found = FALSE;
char *format;
stringArray name; /* name[i] is a string of char with a passed name */
stringArray value; /* value[i] is a string of char with a passed value */
tile[0] = '\0';
num = getnamevalue(&name, &value);
if (strcasecmp(getenv("REQUEST_METHOD"), "GET") == 0) {
for (i = 0; i < num; i++) {
if ((name[i] != NULL) && (strcasecmp(name[i], "savedgame")) == 0) {
/* file number is in 'value[i]' */
if (value[i] != NULL) {
char command[1024];
int fnum;
if (isdigit(value[i][0])) fnum = (int)atol(value[i]); else break;
/* display saved game and exit */
fprintf(stdout, "Content-type: text/html\n");
fprintf(stdout, "\n");
fprintf(stdout, "<HTML><HEAD><TITLE>Scrabble Move Generator</TITLE></HEAD><BODY BGCOLOR='#FFFFFF'>\n");
fprintf(stdout, "\n");
fprintf(stdout, "<IMG SRC='http://www.gtoal.com/wordgames/boardgen/temp/wsc_%0ld.png'>\n", fnum);
fprintf(stdout, "<H2>Here are all the possible plays on this board:</H2>\n<PRE>");
fflush(stdout);
sprintf(command,
"/home/gtoal/gtoal.com/wordgames/scrabble_solver/friendsmoves /home/gtoal/gtoal.com/wordgames/boardgen/temp/wsc_%0ld.dat %s",
fnum, "enable-wwf"); /* Hack */
system(command);
fflush(stdout);
fprintf(stdout, "</PRE>\n"); fflush(stdout);
exit(0);
}
}
}
fprintf(stdout, "Content-type: text/html\n");
fprintf(stdout, "\n");
fprintf(stdout, "<HTML><HEAD><TITLE>Scrabble Move Generator</TITLE></HEAD><BODY BGCOLOR='#FFFFFF'>\n");
fprintf(stdout, "\n");
fprintf(stdout, "<FORM ACTION='/cgi-bin/friends.cgi' METHOD='POST'>\n");
// fprintf(stdout, "Enter your Scrabble position and I'll generate all the possible moves using ");
fprintf(stdout, "It's your turn. Enter your tiles and I'll work out the possible moves and likely replies.<BR><BR><BR>\n");
fprintf(stdout, "<input name=\"dict\" type=\"hidden\" value=\"enable-wwf\">");
//fprintf(stdout, "<select name=\"dict\"><option>twl98<option selected>enable-wwf<option>osw<option>ospd");
//fprintf(stdout, "<option>afrikaans<option>french<option>italian<option>romanian</select>");
//fprintf(stdout, ".<BR><BR>\n");
fprintf(stdout, "Enter your rack here:<BR>\n");
fprintf(stdout, "<select name=\"R0\" size=\"1\"><option>a<option>b<option>c<option>d<option>e<option>f<option>g<option>h<option>i<option>j<option>k<option>l<option>m<option>n<option>o<option>p<option>q<option>r<option>s<option>t<option>u<option>v<option>w<option>x<option>y<option>z<option>BLANK<option selected>No tile</SELECT>");
fprintf(stdout, "<select name=\"R1\" size=\"1\"><option>a<option>b<option>c<option>d<option>e<option>f<option>g<option>h<option>i<option>j<option>k<option>l<option>m<option>n<option>o<option>p<option>q<option>r<option>s<option>t<option>u<option>v<option>w<option>x<option>y<option>z<option>BLANK<option selected>No tile</SELECT>");
fprintf(stdout, "<select name=\"R2\" size=\"1\"><option>a<option>b<option>c<option>d<option>e<option>f<option>g<option>h<option>i<option>j<option>k<option>l<option>m<option>n<option>o<option>p<option>q<option>r<option>s<option>t<option>u<option>v<option>w<option>x<option>y<option>z<option>BLANK<option selected>No tile</SELECT>");
fprintf(stdout, "<select name=\"R3\" size=\"1\"><option>a<option>b<option>c<option>d<option>e<option>f<option>g<option>h<option>i<option>j<option>k<option>l<option>m<option>n<option>o<option>p<option>q<option>r<option>s<option>t<option>u<option>v<option>w<option>x<option>y<option>z<option>BLANK<option selected>No tile</SELECT>");
fprintf(stdout, "<select name=\"R4\" size=\"1\"><option>a<option>b<option>c<option>d<option>e<option>f<option>g<option>h<option>i<option>j<option>k<option>l<option>m<option>n<option>o<option>p<option>q<option>r<option>s<option>t<option>u<option>v<option>w<option>x<option>y<option>z<option>BLANK<option selected>No tile</SELECT>");
fprintf(stdout, "<select name=\"R5\" size=\"1\"><option>a<option>b<option>c<option>d<option>e<option>f<option>g<option>h<option>i<option>j<option>k<option>l<option>m<option>n<option>o<option>p<option>q<option>r<option>s<option>t<option>u<option>v<option>w<option>x<option>y<option>z<option>BLANK<option selected>No tile</SELECT>");
fprintf(stdout, "<select name=\"R6\" size=\"1\"><option>a<option>b<option>c<option>d<option>e<option>f<option>g<option>h<option>i<option>j<option>k<option>l<option>m<option>n<option>o<option>p<option>q<option>r<option>s<option>t<option>u<option>v<option>w<option>x<option>y<option>z<option>BLANK<option selected>No tile</select><br>\n");
fprintf(stdout, "\n");
#ifdef NEVER
fprintf(stdout, "Enter Player 2's rack here:<BR>\n");
fprintf(stdout, "<select name=\"S0\" size=\"1\"><option>a<option>b<option>c<option>d<option>e<option>f<option>g<option>h<option>i<option>j<option>k<option>l<option>m<option>n<option>o<option>p<option>q<option>r<option>s<option>t<option>u<option>v<option>w<option>x<option>y<option>z<option>BLANK<option selected>No tile</SELECT>");
fprintf(stdout, "<select name=\"S1\" size=\"1\"><option>a<option>b<option>c<option>d<option>e<option>f<option>g<option>h<option>i<option>j<option>k<option>l<option>m<option>n<option>o<option>p<option>q<option>r<option>s<option>t<option>u<option>v<option>w<option>x<option>y<option>z<option>BLANK<option selected>No tile</SELECT>");
fprintf(stdout, "<select name=\"S2\" size=\"1\"><option>a<option>b<option>c<option>d<option>e<option>f<option>g<option>h<option>i<option>j<option>k<option>l<option>m<option>n<option>o<option>p<option>q<option>r<option>s<option>t<option>u<option>v<option>w<option>x<option>y<option>z<option>BLANK<option selected>No tile</SELECT>");
fprintf(stdout, "<select name=\"S3\" size=\"1\"><option>a<option>b<option>c<option>d<option>e<option>f<option>g<option>h<option>i<option>j<option>k<option>l<option>m<option>n<option>o<option>p<option>q<option>r<option>s<option>t<option>u<option>v<option>w<option>x<option>y<option>z<option>BLANK<option selected>No tile</SELECT>");
fprintf(stdout, "<select name=\"S4\" size=\"1\"><option>a<option>b<option>c<option>d<option>e<option>f<option>g<option>h<option>i<option>j<option>k<option>l<option>m<option>n<option>o<option>p<option>q<option>r<option>s<option>t<option>u<option>v<option>w<option>x<option>y<option>z<option>BLANK<option selected>No tile</SELECT>");
fprintf(stdout, "<select name=\"S5\" size=\"1\"><option>a<option>b<option>c<option>d<option>e<option>f<option>g<option>h<option>i<option>j<option>k<option>l<option>m<option>n<option>o<option>p<option>q<option>r<option>s<option>t<option>u<option>v<option>w<option>x<option>y<option>z<option>BLANK<option selected>No tile</SELECT>");
fprintf(stdout, "<select name=\"S6\" size=\"1\"><option>a<option>b<option>c<option>d<option>e<option>f<option>g<option>h<option>i<option>j<option>k<option>l<option>m<option>n<option>o<option>p<option>q<option>r<option>s<option>t<option>u<option>v<option>w<option>x<option>y<option>z<option>BLANK<option selected>No tile</select><br>\n");
fprintf(stdout, "\n");
#endif
fprintf(stdout, "Score: <INPUT NAME=score VALUE=\"\"><BR>\n");
fprintf(stdout, "Number of tiles left: <INPUT NAME=remaining VALUE=\"\"><BR>\n");
fprintf(stdout, "\n");
fprintf(stdout, "<TABLE BORDER Align='center'>\n");
fprintf(stdout, "\n");
fprintf(stdout, "Enter this play in <em>lower case</em>. Enter blanks in UPPER CASE.\n");
fprintf(stdout, "\n");
fprintf(stdout, "<TR Align='center'><TD></TD>\n");
fprintf(stdout, "\n");
fprintf(stdout, "<TD>A</TD><TD>B</TD><TD>C</TD><TD>D</TD><TD>E</TD><TD>F</TD><TD>G</TD><TD>H</TD><TD>I</TD><TD>J</TD><TD>K</TD><TD>L</TD><TD>M</TD><TD>N</TD><TD>O</TD></TR>\n");
fprintf(stdout, "<TR Align='center'><TD>1</TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='a1' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='a2' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='a3' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='a4' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='a5' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='a6' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='a7' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='a8' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='a9' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='a10' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='a11' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='a12' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='a13' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='a14' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='a15' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "</TR>\n");
fprintf(stdout, "\n");
fprintf(stdout, "<TR Align='center'><TD>2</TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='b1' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='b2' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='b3' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='b4' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='b5' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='b6' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='b7' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='b8' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='b9' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='b10' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='b11' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='b12' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='b13' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='b14' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='b15' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "</TR>\n");
fprintf(stdout, "\n");
fprintf(stdout, "<TR Align='center'><TD>3</TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='c1' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='c2' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='c3' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='c4' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='c5' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='c6' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='c7' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='c8' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='c9' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='c10' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='c11' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='c12' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='c13' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='c14' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='c15' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "</TR>\n");
fprintf(stdout, "\n");
fprintf(stdout, "<TR Align='center'><TD>4</TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='d1' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='d2' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='d3' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='d4' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='d5' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='d6' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='d7' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='d8' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='d9' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='d10' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='d11' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='d12' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='d13' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='d14' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='d15' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "</TR>\n");
fprintf(stdout, "\n");
fprintf(stdout, "<TR Align='center'><TD>5</TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='e1' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='e2' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='e3' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='e4' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='e5' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='e6' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='e7' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='e8' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='e9' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='e10' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='e11' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='e12' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='e13' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='e14' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='e15' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "</TR>\n");
fprintf(stdout, "\n");
fprintf(stdout, "<TR Align='center'><TD>6</TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='f1' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='f2' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='f3' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='f4' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='f5' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='f6' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='f7' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='f8' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='f9' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='f10' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='f11' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='f12' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='f13' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='f14' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='f15' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "</TR>\n");
fprintf(stdout, "\n");
fprintf(stdout, "<TR Align='center'><TD>7</TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='g1' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='g2' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='g3' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='g4' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='g5' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='g6' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='g7' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='g8' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='g9' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='g10' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='g11' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='g12' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='g13' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='g14' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='g15' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "</TR>\n");
fprintf(stdout, "\n");
fprintf(stdout, "<TR Align='center'><TD>8</TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='h1' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='h2' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='h3' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='h4' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='h5' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='h6' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='h7' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='h8' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='h9' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='h10' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='h11' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='h12' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='h13' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='h14' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='h15' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "</TR>\n");
fprintf(stdout, "\n");
fprintf(stdout, "<TR Align='center'><TD>9</TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='i1' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='i2' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='i3' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='i4' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='i5' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='i6' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='i7' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='i8' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='i9' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='i10' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='i11' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='i12' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='i13' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='i14' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='i15' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "</TR>\n");
fprintf(stdout, "\n");
fprintf(stdout, "<TR Align='center'><TD>10</TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='j1' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='j2' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='j3' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='j4' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='j5' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='j6' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='j7' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='j8' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='j9' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='j10' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='j11' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='j12' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='j13' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='j14' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='j15' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "</TR>\n");
fprintf(stdout, "\n");
fprintf(stdout, "<TR Align='center'><TD>11</TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='k1' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='k2' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='k3' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='k4' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='k5' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='k6' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='k7' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='k8' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='k9' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='k10' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='k11' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='k12' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='k13' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='k14' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='k15' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "</TR>\n");
fprintf(stdout, "\n");
fprintf(stdout, "<TR Align='center'><TD>12</TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='l1' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='l2' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='l3' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='l4' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='l5' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='l6' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='l7' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='l8' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='l9' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='l10' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='l11' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='l12' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='l13' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='l14' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='l15' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "</TR>\n");
fprintf(stdout, "\n");
fprintf(stdout, "<TR Align='center'><TD>13</TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='m1' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='m2' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='m3' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='m4' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='m5' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='m6' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='m7' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='m8' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='m9' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='m10' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='m11' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='m12' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='m13' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='m14' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='m15' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "</TR>\n");
fprintf(stdout, "\n");
fprintf(stdout, "<TR Align='center'><TD>14</TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='n1' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='n2' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='n3' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='n4' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='n5' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='n6' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='n7' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='n8' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='n9' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='n10' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='n11' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='n12' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='n13' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='n14' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='n15' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "</TR>\n");
fprintf(stdout, "\n");
fprintf(stdout, "<TR Align='center'><TD>15</TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='o1' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='o2' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='o3' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='o4' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='o5' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='o6' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='o7' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='o8' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='o9' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='o10' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='o11' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='o12' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='o13' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='o14' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "<TD><INPUT TYPE='Text' NAME='o15' VALUE='' SIZE=1 MAXLENGTH=1></TD>\n");
fprintf(stdout, "</TR>\n");
fprintf(stdout, "</TABLE><BR>\n");
fprintf(stdout, "\n");
fprintf(stdout, "<INPUT TYPE='submit' VALUE='Find all moves!'>\n");
fprintf(stdout, "</FORM><BR>\n");
} else if (strcasecmp(getenv("REQUEST_METHOD"), "POST") == 0) {
int i;
int row, col, x, y;
fprintf(stdout, "Content-type: text/html\n");
fprintf(stdout, "\n");
#ifdef NEVER
fprintf(stdout, "<HTML><HEAD><TITLE>Scrabble Move Generator</TITLE></HEAD><BODY BGCOLOR='#FFFFFF'>\n");
fprintf(stdout, "<PRE>\n"); fflush(stdout);
for (r = 0; r <= argc; r++) {
fprintf(stdout, "Argv[%d] = \"%s\"<BR>\n", r, (argv[r] == NULL ? "NULL" : argv[r]));
}
fprintf(stdout, "QUERY_STRING = \"%s\"<BR>\n", (getenv("QUERY_STRING") == NULL ? "NULL" : getenv("QUERY_STRING")));
fflush(stdout); fprintf(stdout, "</PRE>\n");
fprintf(stdout, "<PRE>\n"); fflush(stdout);
system("printenv");
fflush(stdout);
fprintf(stdout, "*********** POST DATA:");
for (;;) {
i = fgetc(stdin);
if (i == EOF) break;
fputc(i&255, stdout);
}
fprintf(stdout, ":POST DATA **********\n");
dumpargs(name, value, num);
fprintf(stdout, "</PRE>\n");
#else
fprintf(stdout, "<HTML><HEAD><TITLE>Scrabble Move Generator</TITLE></HEAD><BODY BGCOLOR='#FFFFFF'>\n");
for (x = 0; x < 15; x++) {
for (y = 0; y < 15; y++) {
saved[x][y] = '.';
}
}
format = "GIF";
for (i = 0; i < num; i++) {
if (strcasecmp(name[i], "format") == 0) {
format = strdup(value[i]);
} else if (strcasecmp(name[i], "dict") == 0) {
dict = value[i]; /* TO DO - IMPORTANT - VET THE FILENAME */
} else if (strcasecmp(name[i], "score") == 0) {
if (value[i] != NULL) if (isdigit(value[i][0])) score = (int)atol(value[i]);
} else if (strcasecmp(name[i], "remaining") == 0) {
if (value[i] != NULL) if (isdigit(value[i][0])) remaining = (int)atol(value[i]);
} else if (isalpha(name[i][0]) && isdigit(name[i][1])) {
if (name[i][0] == 'R') {
/* Rack element */
int tile = value[i][0];
if (tile == 'B') tile = '?';
if (tile == 'N') tile = ' ';
rack1[name[i][1]-'0'] = tile;
#ifdef NEVER
} else if (name[i][0] == 'S') {
/* Rack element */
int tile = value[i][0];
if (tile == 'B') tile = '?';
if (tile == 'N') tile = ' ';
rack2[name[i][1]-'0'] = tile;
#endif
} else {
/* Must be a board square */
if (name[i] != NULL) {
y = (name[i][0])-'a'; /* 0-15 */
x = (atoi(name[i]+1))-1; /* 0-15 */
/* Should have an assertion for 0..15 */
if (value[i] == NULL) {
saved[x][y] = '.';
} else {
saved[x][y] = value[i][0];
}
}
}
}
}
generate_graphic(saved, format);
#endif
fflush(stdout);
} else {
fprintf(stdout, "Content-type: text/html\n");
fprintf(stdout, "\n");
fprintf(stdout, "<HTML><BODY>Error!\n");
/* ERROR */
}
fprintf(stdout, "<BR>\n");
fprintf(stdout, "</BODY></HTML>\n\n");
fflush(stdout);
}
int main(int argc, char **argv)
{
cgi_bin(argc, argv);
exit(0);
return(0);
}