/**********************************************************************
 
	Copyright (C) 2003 Hirohisa MORI <joshua@nichibun.ac.jp>
 
	This program is free software; you can redistribute it 
	and/or modify it under the terms of the GLOBALBASE 
	Library General Public License (G-LGPL) as published by 

	http://www.globalbase.org/
 
	This program is distributed in the hope that it will be 
	useful, but WITHOUT ANY WARRANTY; without even the 
	implied warranty of MERCHANTABILITY or FITNESS FOR A 
	PARTICULAR PURPOSE.

**********************************************************************/

#ifndef ___HTMLDB_H___
#define ___HTMLDB_H___

#include "xllisp.h"
#include	"http.h"



extern XL_SEXP* HTMLDataBase;	//データベース本体へのポインタ
extern XL_SEXP* CurrentPage;	//現在表示しているデータ
extern L_CHAR CurrentURL[1024];//現在表示しているURL

extern XL_SEXP* PrimitiveFunctions;

typedef enum HTMLFileType{html,cgi,other}HTMLFileType;
typedef enum UpdateOption{force,immediate,regist,non}UpdateOption;
typedef enum ElementType{HTMLDoc,XLScript,Raw,Primitive}ElementType;
typedef enum EvalType{EvalOn,EvalOff}EvalType;

XL_SEXP* exec_option(L_CHAR*,XL_SEXP*,L_CHAR*,XL_FILE*,int);

L_CHAR* GetOption(L_CHAR*,XL_SYM_FIELD *);	//タグ内のオプションを取ってくる
HTMLFileType CheckFileType(L_CHAR *);		//GetOptionで取ってきたオプションをチェックする
UpdateOption CheckUpdateOption(L_CHAR *);	//同上
EvalType CheckEvalType(L_CHAR *);		//同上
XL_SEXP* MakeURLList(L_CHAR*,XLISP_ENV *);	//URL文字列から/で分割したリストを作る


XL_SEXP* RemoveElement(L_CHAR*,XL_SEXP*);	//url文字列を持つデータを消去
XL_SEXP* GetElement(L_CHAR*,XL_SEXP*);		//URL文字列でデータベース内を検索
XL_SEXP* IsExist(L_CHAR*,XL_SEXP*);		//データベース内に同じurlのデータが存在するかチェック

ElementType CheckElementType(XL_SEXP*);		//要素がHTML,XLScript,Primitiveのどれかを判別
L_CHAR* GetURLString(XL_SEXP*);			//要素のURLを文字列として取ってくる
int CheckWildCard(L_CHAR*);			//URL文字列に*が入っているかどうかを確かめる
XL_SEXP* GetDocument(XL_SEXP*);			//HTML文書を取ってくる
XL_SEXP* GetScript(XL_SEXP*);			//XLScriptを取ってくる
void* GetFunction(XL_SEXP*);			//関数へのポインタを取ってくる
L_CHAR* GetKey(XL_SEXP*);			//key文字列を取ってくる


//ページ表示など
void SetCurrentPage(L_CHAR*,XL_SEXP*);		//表示するページのURLをセットする
void PutCurrentPage();				//ページを表示する
void ExecScript(XL_SEXP*);			//スクリプト実行
int ExecPrimitive(STREAM*,XL_SEXP*);		//プリミティブ実行

extern SEM html_db_lock;
void init_html_db();
/* mori
XLISP_ENV* dbENV;
*/


#endif
