home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 8
/
amigaformatcd08.iso
/
in_the_mag
/
html_tutorial
/
mas_cgi.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1996-09-03
|
2KB
|
104 lines
// (C) M.A.Smith University of Brighton
//
// Permission is granted to use this code
// provided this declaration and copyright notice remains intact.
//
// 26 August 1995
#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include "parse.h"
#include "parse.cpp"
void process_script( char [] );
void process( char [] );
char* getenv_n( char [] );
// Main program
//
int main()
{
char *query_str = getenv("QUERY_STRING");
Parse list( query_str == 0 ? "file=mas2" : query_str );
process_script( list.get_item( "file" ) );
return 0;
}
void process_script( char file[] )
{
enum State { NORMAL, IN_ESC };
cout << "Content-type: text/html" << "\n"
<< "\n" << "\n";
ifstream script( file );
if ( script.fail() ) return;
script >> resetiosflags( ios::skipws );
const int MAX_MES = 200;
char c;
char mes[ MAX_MES ];
char start[] = "[="; const int START_LEN = strlen( start );
char end[] = "=]"; const int END_LEN = strlen( start );
int i, p=0, mes_len = 0;
State state_is = NORMAL;
while ( script >> c, !script.eof() )
{
switch ( state_is )
{
case NORMAL :
if ( c == start[p] ) { // Escape Sequence
p++;
if ( p >= START_LEN ) { // Recognized Escape Seq.
state_is = IN_ESC;
mes_len = 0; p = 0;
}
} else { // Not Escape Seq.
for ( i=0; i<p; i++ ) // Write any gather chars
cout << start[i];
cout << c; // Current char
p = 0;
}
break;
case IN_ESC : // In Escape Sequence
if ( c == end[p] ) { // End of Escape Seq
p++;
if ( p >= END_LEN ) { // End of Escape Seq
mes[ mes_len ] = '\0'; // Message to process
process( mes );
p = 0; state_is = NORMAL;
}
} else { // Process goatherd chrs
if ( mes_len < MAX_MES - 10 ) {
for ( i = 0; i< p; i++ ) {
mes[mes_len++] = end[i];
}
mes[mes_len++] = c; p = 0; // Add to goatherd chrs
}
}
break;
}
}
}
void process( char mes[] )
{
Parse list( mes );
if ( list.get_item( "put_env" ) != 0 )
{
cout << getenv_n( list.get_item("put_env") );
}
if ( list.get_item( "exec" ) != 0 )
{
cout << list.get_item("exec");
}
}