EIT is releasing, for your programming pleasure, a freeware
library of functions that aid CGI-program creation in C
(or another language that can use C libraries). Look at
http://wsk.eit.com/wsk/dist/doc/libcgi/libcgi.html
for documentation and pointers to the distributions, including
source. Compiled libraries are there for SunOS 4.1.3, Solaris 2.3,
IRIX 5.2, and OSF/1 V2.0.
These are functions we found useful, especially for programs that
process forms. The get_form_entries function, for example, handles
parameter names and values of arbitrary length with exponential
allocation. It is also more efficient than a lot of the other parsing
code we've seen.
I've attached a template program that uses libcgi so you can
see basically what it does for you.
Isn't it time we started calling them "CGI programs" instead of
"CGI scripts"? ;-)
Jay
--
Jay C. Weber weber@eit.com
Enterprise Integration Technologies weber@cis.stanford.edu
800 El Camino Real (415)617-8002
Menlo Park, CA 94025 fax: (415)617-8019
http://www.eit.com/people/weber.html
--***
/*
* This file is part of the LIBCGI library
*
* Copyright 1994 by Enterprise Integration Technologies Corporation
*
* This is freeware with commercialization rights reserved; see the
* LICENSE included in the distribution for specifics.
*/
#include<stdio.h>
#include "cgi.h"
cgi_main(cgi_info *ci) {
char *parmval(form_entry *, char *);
form_entry *parms, *p;
form_entry *get_form_entries(cgi_info *);
char *foo, *bar;
print_mimeheader("text/html");
puts("<title>Your Title Here</title>");
puts("<h1>Your heading here</h1>");
parms = get_form_entries(ci);
if (parms) {
/* extract specific form parameters */
for(p=parms; p; p = p->next) {
if (strcasecmp(p->name, "foo")) foo = p->val;
else if (strcasecmp(p->name, "bar")) bar = p->val;
}
}
switch(mcode(ci)) {
case MCODE_HEAD:
return;
case MCODE_GET:
puts("Your GET response here");
printf("based on foo=%s and bar=%s.\n", foo, bar);
break;
case MCODE_POST:
puts("Your POST response here");
printf("based on foo=%s and bar=%s.\n", foo, bar);
break;
default:
printf("Unrecognized method '%s'.\n", ci->request_method);
}
free_form_entries(parms);
}
--***--