#include #include #include #include "libcgi++.H" #include void BailOut(char *reason) { cout << "Content-type: text/html" << endl << endl << "" << endl << "" << endl << "Unable to process form" << endl << "" << endl << "" << endl << "

Unable to process form

" << endl << "Unable to process form because" << endl << "
" << endl << "
" << endl << reason << endl << "" << endl << "" << endl ; exit(1) ; } void BailOut(string reason) { BailOut(reason.c_str()) ; } main(int argc, char *argv[]) { Cgi *input ; string cir_name ; int cir_num_inputs, cir_num_outputs ; int i ; char *envVar ; try { input = new Cgi() ; } catch (Cgi::CgiException &e) { BailOut("Unable to parse CGI input string") ; } // Verify that the three CGI variables are defined if ( ! (input->exist("mn_name") && input->exist("mn_num_inputs") && input->exist("mn_num_outputs"))) BailOut("CGI script invoked with missing variables") ; cir_name = (*input)["mn_name"] ; // Read and verify the two CGI integer variables { istringstream b_inputs((*input) ["mn_num_inputs"]) ; istringstream b_outputs((*input)["mn_num_outputs"]) ; ostringstream err_msg ; if ( ! ( b_inputs >> cir_num_inputs ) || cir_num_inputs <= 0 || cir_num_inputs > 9 ) { err_msg << "Number of input variables ( " << (*input)["mn_num_inputs"] << ") is not an integer between 1 and 9." ; BailOut(err_msg.str()) ; } if ( ! ( b_outputs >> cir_num_outputs ) || cir_num_outputs <= 0 || cir_num_outputs > 9 ) { err_msg << "Number of output variables ( " << (*input)["mn_num_outputs"] << ") is not an integer between 1 and 9." ; BailOut(err_msg.str()) ; } } // OK.... I'm satisfied.... Let's generate the page cout << "Content-type: text/html" << endl << endl << "" << endl << "" << endl << "Set connection names for " << cir_name << "" << endl << "" << endl << "" << endl << "

Set connection names for " << cir_name << "

" << endl << "
" << endl << "
" << endl << "" << endl << "" << endl << "" << endl << "

Input connections

" << endl ; for(i=1; i <= cir_num_inputs; ++i) cout << "
Name of input variable " << i << endl ; cout << "

Output connections

" << endl ; for(i=1; i <= cir_num_outputs; ++i) cout << "
Name of output variable " << i << endl ; cout << "
" << endl << "" << endl << "
" << endl << "
" << endl ; envVar = getenv("REMOTE_HOST") ; if (envVar != (char *)NULL) cout << "Received from " << envVar << "" << endl ; cout << "" << endl << "" << endl ; }