mirror of
https://github.com/NishiOwO/ncsa-httpd.git
synced 2025-04-21 16:54:46 +00:00
260 lines
9.7 KiB
C
260 lines
9.7 KiB
C
/*
|
|
* Submarine ordering form through FAX gateway
|
|
*
|
|
* Rob McCool
|
|
*
|
|
*/
|
|
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#if 1
|
|
#define JJ_FAX "JIMMY_JOHNS_3440603@fax.uiuc.edu"
|
|
#else
|
|
#define JJ_FAX "robm@imsa.edu"
|
|
#endif
|
|
|
|
#define PASSWORD "SDGROCKS"
|
|
#define LF 10
|
|
|
|
void getword(char *word, char *line, char stop);
|
|
char x2c(char *what);
|
|
void unescape_url(char *url);
|
|
void plustospace(char *str);
|
|
|
|
|
|
char *sublist[] = {
|
|
"The Pepe Gourmet Sub",
|
|
"Big John Gourmet Sub",
|
|
"Sorry Charlie Gourmet Sub",
|
|
"Turkey Tom Gourmet Sub",
|
|
"Vito Gourmet Sub",
|
|
"Vegetarian Gourmet Sub",
|
|
"Gourmet Smoked Ham Club",
|
|
"Billy Club",
|
|
"Italian Night Club",
|
|
"Hunter's Club",
|
|
"Country Club",
|
|
"The Beach Club"
|
|
};
|
|
|
|
char *slimlist[] = {
|
|
"Ham and Cheese",
|
|
"Rare Roast Beef",
|
|
"California Tuna",
|
|
"Sliced Turkey",
|
|
"Salami and Capacola",
|
|
"Double Provolone"
|
|
};
|
|
|
|
char *sidelist[] = {
|
|
"Lay's Potato Chips",
|
|
"Jumbo Kosher Dill"
|
|
};
|
|
|
|
char *poplist[] = {
|
|
"Pepsi",
|
|
"Mountain Dew",
|
|
"Diet Pepsi",
|
|
"Iced Tea"
|
|
};
|
|
|
|
void dump_form() {
|
|
printf("<TITLE>Form for Submarine Order</TITLE>%c",LF);
|
|
printf("<H1>Jimmy John's Submarine Order Form</H1>%c",LF);
|
|
printf("This form will send a faxed order to Jimmy John's in Champaign. Proper password is requred%c",LF);
|
|
printf("for order to be submitted, otherwise a copy of the order that would have been submitted will%c",LF);
|
|
printf("will be displayed.<P>%c",LF);
|
|
printf("<HR>%c",LF);
|
|
printf("<FORM ACTION=\"http://hoohoo.ncsa.uiuc.edu:80/htbin/jj\">%c",LF);
|
|
printf("Password: <INPUT TYPE=\"text\" NAME=\"pwd\" MAXLENGTH=\"20\"><P>%c",LF);
|
|
printf("<H3>Sub Type</H3>%c",LF);
|
|
printf("Select which you would like of the following:<P>%c",LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"sub\" VALUE=\"0\">%s:%c",sublist[0],LF);
|
|
printf("Smoked virginia ham and provolone cheese topped with lettuce, tomato, and mayo.<P>%c",LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"sub\" VALUE=\"1\">%s:%c",sublist[1],LF);
|
|
printf("Medium rare shaved roast beef topped with mayo, lettuce, and tomato.<P>%c",LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"sub\" VALUE=\"2\">%s:%c",sublist[2],LF);
|
|
printf("Tuna, mixed with celery, onions, and sauce, topped with lettuce,%c",LF);
|
|
printf("tomato, and alfalfa sprouts.<P>%c",LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"sub\" VALUE=\"3\">%s:%c",sublist[3],LF);
|
|
printf("Turkey breast topped with lettuce, mayo, alfalfa sprouts, and mayo.<P>%c",LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"sub\" VALUE=\"4\">%s:%c",sublist[4],LF);
|
|
printf("Genoa salami and provolone cheese topped with capacola, onion, lettuce, tomato, and Italian sauce.<P>%c",LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"sub\" VALUE=\"5\">%s:%c",sublist[5],LF);
|
|
printf("Layers of provolone cheese, separated by avocado, sprouts, lettuce, tomato, and mayo.<P>%c",LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"sub\" VALUE=\"6\">%s:%c",sublist[6],LF);
|
|
printf("1/4 pound of smoked ham, provolone cheese, topped with lettuce,%c",LF);
|
|
printf("tomato, and mayo.<P>%c",LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"sub\" VALUE=\"7\">%s:%c",sublist[7],LF);
|
|
printf("Shaved roast beef, provolone cheese, french dijon mustard, topped with shaved ham, lettuce,%c",LF);
|
|
printf("tomato, and mayo.<P>%c",LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"sub\" VALUE=\"8\">%s:%c",sublist[8],LF);
|
|
printf("Genoa salami, Italian capacola, smoked ham, and provolone cheese topped with lettuce,%c",LF);
|
|
printf("tomato, onions, mayo, and Italian sauce.<P>%c",LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"sub\" VALUE=\"9\">%s:%c",sublist[9],LF);
|
|
printf("1/4 pound of sliced roast beef, provolone cheese, topped with lettuce, tomato, and mayo.<P>%c",LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"sub\" VALUE=\"10\">%s:%c",sublist[10],LF);
|
|
printf("Turkey breast, smoked ham, and provolonecheese topped with lettuce, tomato, and mayo.<P>%c",LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"sub\" VALUE=\"11\">%s:%c",sublist[11],LF);
|
|
printf("Turkey breast, avocado, and cheese topped with lettuce, mayo, alfalfa, and tomato.<P>%c",LF);
|
|
printf("<H3>Slim Jim Subs</H3>%c",LF);
|
|
printf("Subs without veggies or sauce.<P>%c",LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"slj\" VALUE=\"0\">%s<P>%c",slimlist[0],LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"slj\" VALUE=\"1\">%s<P>%c",slimlist[1],LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"slj\" VALUE=\"2\">%s<P>%c",slimlist[2],LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"slj\" VALUE=\"3\">%s<P>%c",slimlist[3],LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"slj\" VALUE=\"4\">%s<P>%c",slimlist[4],LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"slj\" VALUE=\"5\">%s<P>%c",slimlist[5],LF);
|
|
printf("<H3>Side orders</H3>%c",LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"sde\" VALUE=\"0\">%s<P>%c",sidelist[0],LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"sde\" VALUE=\"1\">%s<P>%c",sidelist[1],LF);
|
|
printf("<H3>Drinks</H3>%c",LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"pop\" VALUE=\"0\">%s<P>%c",poplist[0],LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"pop\" VALUE=\"1\">%s<P>%c",poplist[1],LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"pop\" VALUE=\"2\">%s<P>%c",poplist[2],LF);
|
|
printf("<INPUT TYPE=\"checkbox\" NAME=\"pop\" VALUE=\"3\">%s<P>%c",poplist[3],LF);
|
|
printf("<H3>Your Address, Phone Number, and Name</H3>%c",LF);
|
|
printf("<INPUT TYPE=\"text\" NAME=\"name\" MAXLENGTH=\"32\">Name<P>%c",LF);
|
|
printf("<INPUT TYPE=\"text\" NAME=\"adr\" MAXLENGTH=\"64\">Address<P>%c",LF);
|
|
printf("<INPUT TYPE=\"text\" NAME=\"phone\" MAXLENGTH=\"10\">Phone Number<P>%c",LF);
|
|
printf("<INPUT type=\"submit\">%c",LF);
|
|
printf("</FORM>%c",LF);
|
|
exit(0);
|
|
}
|
|
|
|
void print_error(char *reason) {
|
|
printf("<TITLE>Order Not Submitted</TITLE>%c",LF);
|
|
printf("<H1>Order Not Submitted</H1>%c",LF);
|
|
printf("Your order has not been submitted, because %s.<P>%c",reason,LF);
|
|
exit(1);
|
|
}
|
|
|
|
main(int argc, char *argv[]) {
|
|
register int x,m=0;
|
|
char *cl;
|
|
char w[256];
|
|
char tfile[L_tmpnam];
|
|
int subs,slims,sides,drinks,allow;
|
|
char name[32];
|
|
char phone[10];
|
|
char address[64];
|
|
FILE *tfp,*order;
|
|
|
|
printf("Content-type: text/html%c%c",LF,LF);
|
|
|
|
cl=getenv("QUERY_STRING");
|
|
if((!cl) || (!cl[0]))
|
|
dump_form();
|
|
|
|
tmpnam(tfile);
|
|
if(!(tfp=fopen(tfile,"w"))) {
|
|
printf("<TITLE>Server Error</TITLE>%c",LF);
|
|
printf("<H1>Server Error</H1>%c",LF);
|
|
printf("Server unable to get a temporary file. Please try again later.<P>%c",LF);
|
|
exit(1);
|
|
}
|
|
|
|
subs=0;slims=0;sides=0;drinks=0;allow=0;
|
|
name[0]='\0';
|
|
phone[0]='\0';
|
|
address[0]='\0';
|
|
|
|
for(x=0;cl[0] != '\0'; x++) {
|
|
m=x;
|
|
getword(w,cl,'=');
|
|
plustospace(w);
|
|
unescape_url(w);
|
|
if(!strcmp(w,"pwd")) {
|
|
getword(w,cl,'&');
|
|
plustospace(w);
|
|
unescape_url(w);
|
|
allow=(strcmp(w,PASSWORD) ? 0 : 1);
|
|
}
|
|
if(!strcmp(w,"sub")) {
|
|
getword(w,cl,'&');
|
|
plustospace(w);
|
|
unescape_url(w);
|
|
subs |= (1 << atoi(w));
|
|
}
|
|
else if(!strcmp(w,"slj")) {
|
|
getword(w,cl,'&');
|
|
plustospace(w);
|
|
unescape_url(w);
|
|
slims |= (1 << atoi(w));
|
|
}
|
|
else if(!strcmp(w,"sde")) {
|
|
getword(w,cl,'&');
|
|
plustospace(w);
|
|
unescape_url(w);
|
|
sides |= (1 << atoi(w));
|
|
}
|
|
else if(!strcmp(w,"pop")) {
|
|
getword(w,cl,'&');
|
|
plustospace(w);
|
|
unescape_url(w);
|
|
drinks |= (1 << atoi(w));
|
|
}
|
|
else if(!strcmp(w,"name")) {
|
|
getword(w,cl,'&');
|
|
plustospace(w);
|
|
unescape_url(w);
|
|
strcpy(name,w);
|
|
}
|
|
else if(!strcmp(w,"phone")) {
|
|
getword(w,cl,'&');
|
|
plustospace(w);
|
|
unescape_url(w);
|
|
strcpy(phone,w);
|
|
}
|
|
else if(!strcmp(w,"adr")) {
|
|
getword(w,cl,'&');
|
|
plustospace(w);
|
|
unescape_url(w);
|
|
strcpy(address,w);
|
|
}
|
|
}
|
|
|
|
if(!name[0]) print_error("you didn't give your name");
|
|
if(!address[0]) print_error("you didn't give your address");
|
|
if(!phone[0]) print_error("you didn't give your phone number");
|
|
if((!subs) && (!slims) && (!sides) && (!drinks)) print_error("you didn't order anything");
|
|
|
|
if(allow) {
|
|
char t[256];
|
|
sprintf(t,"/bin/mail %s",JJ_FAX);
|
|
if(!(order=popen(t,"w")))
|
|
print_error("the server was unable to open a pipe to mail");
|
|
printf("<TITLE>Order Sent</TITLE>%c",LF);
|
|
printf("<H1>Order Sent</H1>%c",LF);
|
|
printf("Your order has been sent to the UIUC e-mail to FAX gateway.<P>%c",LF);
|
|
} else {
|
|
printf("<TITLE>Your Order</TITLE>%c",LF);
|
|
printf("<H1>Your Order</H1>%c",LF);
|
|
printf("This is how your order would have looked if it had been sent.<P><PLAINTEXT>%c",LF);
|
|
order=stdout;
|
|
}
|
|
|
|
fprintf(order,"My name is %s, and I would like to have the following%c",
|
|
name,LF);
|
|
fprintf(order,"order delivered to %s:%c%c",address,LF,LF);
|
|
for(x=0;x<12;x++)
|
|
if(subs & (1 << x))
|
|
fprintf(order,"\t(1) %s%c",sublist[x],LF);
|
|
for(x=0;x<6;x++)
|
|
if(slims & (1 << x))
|
|
fprintf(order,"\t(1) %s Slim Jim%c",slimlist[x],LF);
|
|
for(x=0;x<2;x++)
|
|
if(sides & (1 << x))
|
|
fprintf(order,"\t(1) %s%c",sidelist[x],LF);
|
|
for(x=0;x<4;x++)
|
|
if(drinks & (1 << x))
|
|
fprintf(order,"\t(1) %s%c",poplist[x],LF);
|
|
fprintf(order,"%cPlease feel free to call me at %s if there is any%c",LF,
|
|
phone,LF);
|
|
fprintf(order,"problem. Thank you.%c%c.%c",LF,LF,LF);
|
|
fclose(order);
|
|
exit(0);
|
|
}
|