File:  [parser3project] / parser3 / src / targets / cgi / parser3.C
Revision 1.3: download - view: text, annotated - select for diffs - revision graph
Tue Mar 13 18:32:48 2001 UTC (25 years, 4 months ago) by paf
Branches: MAIN
CVS tags: HEAD
before error show with parser

/*
	Parser
	Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
	Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)

	$Id: parser3.C,v 1.3 2001/03/13 18:32:48 paf Exp $
*/

#include "pa_config.h"

#ifdef WIN32
#	include <windows.h>
#	include <io.h>
#endif
#include <stdlib.h>

#include "core.h"
#include "pa_request.h"
#include "pa_common.h"

#ifdef WIN32
// TODO:  LONG WINAPI TopLevelExceptionFilter (
#endif

int main(int argc, char *argv[]) {
#ifdef WIN32
	_fmode=_O_BINARY;			/*sets default for file streams to binary */
	setmode(_fileno(stdin), O_BINARY);		/* make the stdio mode be binary */
	setmode(_fileno(stdout), O_BINARY);		/* make the stdio mode be binary */
	setmode(_fileno(stderr), O_BINARY);		/* make the stdio mode be binary */

	//TODO:	SetUnhandledExceptionFilter(&TopLevelExceptionFilter);
	//TODO: initSocks();
#endif

	
	Pool pool;
	core(pool);

	// were we started as CGI?
	bool cgi=
		getenv("SERVER_SOFTWARE") || 
		getenv("SERVER_NAME") || 
		getenv("GATEWAY_INTERFACE") || 
		getenv("REQUEST_METHOD");

	// TODO: ifdef WIN32 flip \\ to /
	const char *document_root="Y:/parser3/src/";
	const char *page_filespec="Y:/parser3/src/test.p";

	// request
	Request request(pool,
		cgi ? String::Untaint_lang::HTML_TYPO : String::Untaint_lang::NO,
		document_root,
		page_filespec
		);
	
	bool error;
	// some root-controlled location
	char *sys_auto_path1;
#ifdef WIN32
	sys_auto_path1=(char *)pool.malloc(MAX_STRING);
	GetWindowsDirectory(sys_auto_path1, MAX_STRING-1/*for \*/);
	strcat(sys_auto_path1, '\\');
#else
	sys_auto_path1=getenv("HOME");
#endif
	
	// beside by binary
	const char *sys_auto_path2=(char *)pool.malloc(MAX_STRING);
	strncpy(sys_auto_path2, argv[0]);  // filespec of my binary
	rsplit(sys_auto_path2, '\\');  rsplit(sys_auto_path2, '/'); // strip filename
	
	char *result=request.core(
		sys_auto_path1, 
		sys_auto_path2);
	
	if(cgi) {
		const char *content_type="text/html";
		printf(
			"Content-type: %s\n"
			"Content-length: %d\n"
			"\n", 
				content_type,
				strlen(result));
		stdout_write(result);
	} else
		printf("%s", result);

	return 0;
}

E-mail: