C Programming Column by Al Stevens Listing One Listing Two /* order_proc.c -- An order-entry processing cgi script. It accepts buyer and order data from a Web page and mails an order to a seller */ #include #define PRODUCT "MidiFitz" #define mail_program "/usr/lib/sendmail -t" #define order_processor "midifitz@midifitz.com" #define order_taker "midifitz@midifitz.com" #define link_to "http://www.midifitz.com/index.html" void PageHeader(const char* title); void PageTrailer(void); void PageHead(int level, const char* hed); void PageLine(const char* line); void PageParagraph(const char* text); void PageLink(const char* link, const char* msg); int main() { char line[601]; FILE* fp; if (fgets(line, 600, stdin) != 0) { char* cp = line; while (*cp) { if (*cp == '&') *cp = '\n'; else if (*cp == '+') *cp = ' '; cp++; } } PageHeader(PRODUCT " On-line Order System"); if ((fp = popen(mail_program, "w")) != NULL) { fprintf(fp, "To: " order_processor "\n" "From: " order_taker "\n" "Subject: " PRODUCT " on-line order\n" "%s\n", line); pclose(fp); PageParagraph("Your " PRODUCT " order has been placed."); } PageLink(link_to, "Click to return"); PageTrailer(); return 0; } void PageHeader(const char* title) { puts("Content-type: text/html\n"); puts(""); puts(""); if (title != 0) printf("%s\n", title); puts(""); puts(""); } void PageTrailer(void) { puts(""); puts(""); } void PageHead(int level, const char* hed) { printf("%s\n", level, hed, level); } void PageLine(const char* line) { printf("%s
\n", line); } void PageParagraph(const char* text) { puts("

"); PageLine(text); } void PageLink(const char* link, const char* msg) { printf("

%s
\n", link, msg); } 6