[YukiWiki] [[read.cgiを高速化]]の変更点

[ トップ | 一覧 | 単語検索 | 最終更新 | ]


#include	<stdio.h>

#include	<stdlib.h>

#include	<string.h>

#include	<sys/types.h>

#include	<sys/stat.h>

#include	<fcntl.h>

#include	<time.h>

#include	<unistd.h>

#include	"read2ch.h"



#define	CGINAME	"read.cgi"

#define	CGIVER	"read.cgi ver10.01.04 (2001/8/26)"

#define	RES_YELLOW	 900

#define	RES_REDZONE	 950

#define	RES_RED		1000

#define	RES_IMODE	10

#define	RES_NORMAL	100

#define	MAX_FILESIZE	(8192 * 64)

#define	SIZE_BUF	0xa000



#define	LIMIT_PM	23

#define	LIMIT_AM	 3



char	*zz_remote_addr		;

char	*zz_remote_host		;

char	*zz_http_referer	;

char	*zz_http_cookie		;

char	*zz_query_string	;

char	*zz_temp		;

char	*zz_http_user_agent	;

char	*zz_http_language	;

#ifdef GZIP

char	*zz_http_encoding	;

int	 gzip_flag;

#endif



#ifdef LASTMOD

char	*zz_http_if_modified_since	;

time_t  zz_fileLastmod;

char    lastmod_str[1024];

#endif



char	zz_bs[1024]		;

char	zz_ky[1024]		;

char	zz_ls[1024]		;

char	zz_st[1024]		;

char	zz_to[1024]		;

char	zz_nf[1024]		;

char	zz_im[1024]		;

int	nn_st,nn_to,nn_ls	;

char	*BigBuffer = NULL	;

char	*BigLine[RES_RED+16]	;



char	*KARA	= ""		;

int	zz_fileSize = 0		;

int	lineMax = -1		;

int	out_resN = 0		;



time_t		t_now		;

struct	tm	*tm_now		;

long		currentTime	;



char	*LastChar(char *src,char *c)		;

char	*findSplitter(char *stt,int sp)		;

char	*zz_GetString(char *dst,char *tgt)	;

char	*doReplace(char *des,char *str0,char *str1);



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

/*	BadAccess							*/

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

int	BadAccess()

{

	if(strstr(zz_http_user_agent,"DreamPassport"))	return 0;

	if(strstr(zz_http_user_agent,"DoCoMo"))		return 0;

	if(strstr(zz_http_user_agent,"J-PHONE"))	return 0;

	if(strstr(zz_http_user_agent,"ASTEL"))		return 0;

	if(strstr(zz_http_user_agent,"[ja]"))		return 0;

	if(strstr(zz_http_user_agent,"iCab"))		return 0;	/* MAC		*/

	if(strstr(zz_http_user_agent,"iBOX"))		return 0;	/* MAC		*/

	if(strstr(zz_http_user_agent,"WannaBe"))	return 0;	/* MAC		*/

	if(strstr(zz_http_user_agent,"Macintosh; I;"))	return 0;	/* MAC		*/



	if(strstr(zz_http_user_agent,"Mozilla/3.0N"))	return 0;	/* small?	*/

	if(strstr(zz_http_user_agent,"CBBoard"))	return 0;	/* small?	*/

	if(strstr(zz_http_user_agent,"PersonaWare"))	return 0;	/* small?	*/

	if(strstr(zz_http_user_agent,"Sharp"))		return 0;	/* small?	*/



	if(strstr(zz_http_user_agent,"95"))		return 0;	/* win95	*/

	if(strstr(zz_http_user_agent,"NT 4.0"))		return 0;	/* winNT	*/

	if(strstr(zz_http_user_agent,"WinNT"))		return 0;	/* winNT	*/



	if(!*zz_http_user_agent && !*zz_http_language)	return 1;

/*	if(!*zz_http_user_agent)			return 1;*/

#ifdef	Katjusha_Beta_kisei

	if(strstr(zz_http_user_agent,"Katjusha"))	return 1;

#endif

	if(strstr(zz_http_user_agent,"WebFetch"))	return 1;

	if(strstr(zz_http_user_agent,"origin"))		return 1;

	if(strstr(zz_http_user_agent,"Nozilla"))	return 1;

	if(strstr(zz_http_user_agent,"WWWD"))		return 1;



/*	if(!*zz_http_language)				return 1;*/



	return	0;

}

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

/*	Log Out							*/

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

int	logOut(char *txt)

{

	FILE	*fp			;



#ifdef DEBUG

return 1;

#endif



	if(!BadAccess())	return 1;



#ifdef	LOGLOGOUT

/*

if(strcmp(zz_bs,"ascii"))	return 1;

*/

	fp = fopen("./logout.txt","a+")	;

	if(fp == NULL)	return		;

	fprintf(fp,"%02d:%02d:%02d %8s:",tm_now->tm_hour,tm_now->tm_min,tm_now->tm_sec,zz_bs)	;

	fprintf(fp,"(%15s)",zz_remote_addr)	;

	fprintf(fp,"%s***%s\n",zz_http_language,zz_http_user_agent)	;



/*

	fprintf(fp,"%s\n",zz_query_string)	;

	if(strstr(zz_http_user_agent,"compatible"))

	fprintf(fp,"%s\n",zz_http_language)	;

	else

	fprintf(fp,"%s***%s\n",zz_http_language,zz_http_user_agent)	;

	if(*zz_http_referer)	fprintf(fp,"%s\n",zz_http_referer)	;

	else			fprintf(fp,"%s***%s\n",zz_http_language,zz_http_user_agent)	;

	else			fprintf(fp,"%s\n",zz_http_user_agent)	;

*/



	fclose(fp)				;

#endif

	html_error("なんか不調です。")		;

	return	1				;

}

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

/*	HTML BANNER						*/

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

int	html_bannerNew()

{

printf("<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=1 WIDTH=100%%><TR><TD>\n")	;

/**/

printf("<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=100%%>\n")	;

printf("<TR><TD HEIGHT=1 BGCOLOR=#eeeeee><IMG HEIGHT=1 WIDTH=1 SRC=\"/space1.gif\"></TD></TR>\n")	;

printf("<TR BGCOLOR=#cccccc><TD HEIGHT=20 NOWRAP><FONT SIZE=2> \n")	;

printf("| <A HREF=\"http://www.maido3.com/\" CLASS=\"BigLine\"> おすすめ </A>\n")	;

printf("| <A HREF=\"http://news.kakiko.com/2chwatch/\" CLASS=\"BigLine\"> 2chサーバ監視所 </A>\n")	;

printf("| <A HREF=\"http://www.binboserver.com/\" CLASS=\"BigLine\"> BinboServer </A>\n")	;

printf("| <A HREF=\"http://www.maido3.com/server/subdomain.html\" CLASS=\"BigLine\"> Hikky.Zansu.com </A>\n")	;

printf("| <A HREF=\"http://news.kakiko.com/\" CLASS=\"BigLine\"> 無料サービス </A>\n")	;

printf("|</FONT></TD></TR>\n")	;

printf("<TR><TD HEIGHT=1 BGCOLOR=#333333><IMG HEIGHT=1 WIDTH=1 SRC=\"/space1.gif\"></TD></TR>\n")	;

printf("<TR><TD HEIGHT=1 BGCOLOR=#eeeeee><IMG HEIGHT=1 WIDTH=1 SRC=\"/space1.gif\"></TD></TR>\n")	;

printf("<TR><TD HEIGHT=1 BGCOLOR=#333333><IMG HEIGHT=1 WIDTH=1 SRC=\"/space1.gif\"></TD></TR>\n")	;

printf("</TABLE>\n")	;

/**/



printf("<CENTER>\n")	;



printf("<BR>\n")				;

printf("さぶドメインシリーズ登場<BR>\n")	;

printf("   *****.<B><FONT SIZE=+1 FACE=\"Arial\" COLOR=DEEPPINK>syo-ten</FONT></B>.com<BR>\n")		;

printf("   *****.<B><FONT SIZE=+1 FACE=\"Arial\" COLOR=DEEPPINK>gasuki</FONT></B>.com<BR>\n")		;

printf("   *****.<B><FONT SIZE=+1 FACE=\"Arial\" COLOR=DEEPPINK>zansu</FONT></B>.com<BR>\n")		;

printf("おすきな名前を無料で使えます。早い者勝ち。<BR>\n")		;

printf("<FONT COLOR=DEEPPINK><B>工夫しだいで、楽しさ100倍。</B></FONT>\n")		;



printf("<P><A HREF=\"http://www.maido3.com/server/\">")		;

printf("深夜でも快適なレンタルサーバサービス(n)")		;

printf("</A>\n")					;

printf("<BR>あの巨大なサイトも使っています。\n")	;



printf("</CENTER><P>\n")	;

printf("</TD></TR></TABLE><P>\n")	;



}



#ifdef	CM_BBSPINK

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

/*	HTML BANNER						*/

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

int	html_banner()

{

printf("<CENTER>\n")	;

printf("<A TARGET=\"_blank\" HREF=\"http://www.pinknavi.com/?pinkid=PB0001&prg=3&act=0&txt=おいでませ&url=http://www.seiai.com/\">おいでませアダルトサイト</A><br>\n")	;

printf("<br><a href=\"http://www.maido3.com/mentai/\"><b><font size=4>深夜でも快適なレンタルサーバサービス</font></b></a><br>\n")	;

printf("</CENTER>\n")	;

printf("<P>\n")	;



}

#else

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

/*	HTML BANNER						*/

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

int	html_banner()

{

printf("<CENTER>\n")	;



printf("<A HREF=\"http://www.maido3.com/server/\" TARGET=\"_blank\">")		;

printf("深夜でも快適なレンタルサーバサービス")		;

printf("</A>\n")					;

printf("<BR>あの巨大なサイトも使っています。\n")	;



printf("</CENTER><P>\n")	;



}

#endif

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

/*	Get file size						*/

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

int	out_html1()

{

	char	*s[20]		;

	char	r0[SIZE_BUF],r1[SIZE_BUF],r2[SIZE_BUF],r3[SIZE_BUF],r4[SIZE_BUF]	;

	char	p[SIZE_BUF]			;



	if(out_resN)	return 0	;

	strncpy(p,BigLine[0],1024)		;

	BigLine[1024 -1] = '\0';

	if(!*p)	return	1		;

	res_split(s,p)			;

#ifdef	TYPE_TERI

	/*someReplace(s[4],r4,"@`",",")	;*/

	html_head(s[4],lineMax)		;

#else

	someReplace(s[4],r4,"@`",",")	;

	html_head(r4,lineMax)		;

#endif

if(strcmp(zz_im,"true"))	/* no imode	*/

{

	printf("<DL>")		;

}

	out_resN ++			;

	return	0			;

}

int	out_html(int line,int lineNo)

{

	char	*s[20]		;

#ifdef	TYPE_TERI

	char	*r0,*r1,*r2,*r3,*r4	;

#else

	char	r0[SIZE_BUF],r1[SIZE_BUF],r2[SIZE_BUF],r3[SIZE_BUF],r4[SIZE_BUF]	;

#endif

	char	p[SIZE_BUF]			;



/*printf("line=%d[%s]<P>\n",line,BigLine[line]);return 0;*/



	if(!out_resN)				/* Can I write header ?	*/

	#include	<stdio.h>

	#include	<stdlib.h>

	#include	<string.h>

	#include	<sys/types.h>

	#include	<sys/stat.h>

	#include	<fcntl.h>

	#include	<time.h>

	#include	<unistd.h>

	#include	"read2ch.h"

	

	#define	CGINAME	"read.cgi"

	#define	CGIVER	"read.cgi ver10.01.04 (2001/8/26)"

	#define	RES_YELLOW	 900

	#define	RES_REDZONE	 950

	#define	RES_RED		1000

	#define	RES_IMODE	10

	#define	RES_NORMAL	100

	#define	MAX_FILESIZE	(8192 * 64)

	#define	SIZE_BUF	0xa000

	

	#define	LIMIT_PM	23

	#define	LIMIT_AM	 3

	

	char	*zz_remote_addr		;

	char	*zz_remote_host		;

	char	*zz_http_referer	;

	char	*zz_http_cookie		;

	char	*zz_query_string	;

	char	*zz_temp		;

	char	*zz_http_user_agent	;

	char	*zz_http_language	;

	#ifdef GZIP

	char	*zz_http_encoding	;

	int	 gzip_flag;

	#endif

	

	#ifdef LASTMOD

	char	*zz_http_if_modified_since	;

	time_t  zz_fileLastmod;

	char    lastmod_str[1024];

	#endif

	

	char	zz_bs[1024]		;

	char	zz_ky[1024]		;

	char	zz_ls[1024]		;

	char	zz_st[1024]		;

	char	zz_to[1024]		;

	char	zz_nf[1024]		;

	char	zz_im[1024]		;

	int	nn_st,nn_to,nn_ls	;

	char	*BigBuffer = NULL	;

	char	*BigLine[RES_RED+16]	;

	

	char	*KARA	= ""		;

	int	zz_fileSize = 0		;

	int	lineMax = -1		;

	int	out_resN = 0		;

	

	time_t		t_now		;

	struct	tm	*tm_now		;

	long		currentTime	;

	

	char	*LastChar(char *src,char *c)		;

	char	*findSplitter(char *stt,int sp)		;

	char	*zz_GetString(char *dst,char *tgt)	;

	char	*doReplace(char *des,char *str0,char *str1);

	

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

	/*	BadAccess							*/

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

	int	BadAccess()

	{
		if(strstr(zz_http_user_agent,"DreamPassport"))	return 0;

		if(strstr(zz_http_user_agent,"DoCoMo"))		return 0;

		if(strstr(zz_http_user_agent,"J-PHONE"))	return 0;

		if(strstr(zz_http_user_agent,"ASTEL"))		return 0;

		if(strstr(zz_http_user_agent,"[ja]"))		return 0;

		if(strstr(zz_http_user_agent,"iCab"))		return 0;	/* MAC		*/

		if(strstr(zz_http_user_agent,"iBOX"))		return 0;	/* MAC		*/

		if(strstr(zz_http_user_agent,"WannaBe"))	return 0;	/* MAC		*/

		if(strstr(zz_http_user_agent,"Macintosh; I;"))	return 0;	/* MAC		*/

	

		if(strstr(zz_http_user_agent,"Mozilla/3.0N"))	return 0;	/* small?	*/

		if(strstr(zz_http_user_agent,"CBBoard"))	return 0;	/* small?	*/

		if(strstr(zz_http_user_agent,"PersonaWare"))	return 0;	/* small?	*/

		if(strstr(zz_http_user_agent,"Sharp"))		return 0;	/* small?	*/

	

		if(strstr(zz_http_user_agent,"95"))		return 0;	/* win95	*/

		if(strstr(zz_http_user_agent,"NT 4.0"))		return 0;	/* winNT	*/

		if(strstr(zz_http_user_agent,"WinNT"))		return 0;	/* winNT	*/

	

		if(!*zz_http_user_agent && !*zz_http_language)	return 1;

	/*	if(!*zz_http_user_agent)			return 1;*/

	#ifdef	Katjusha_Beta_kisei

		if(strstr(zz_http_user_agent,"Katjusha"))	return 1;

	#endif

		if(strstr(zz_http_user_agent,"WebFetch"))	return 1;

		if(strstr(zz_http_user_agent,"origin"))		return 1;

		if(strstr(zz_http_user_agent,"Nozilla"))	return 1;

		if(strstr(zz_http_user_agent,"WWWD"))		return 1;

	

	/*	if(!*zz_http_language)				return 1;*/

	

		return	0;

	}

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

	/*	Log Out							*/

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

	int	logOut(char *txt)

	{

		FILE	*fp			;

	

	#ifdef DEBUG

	return 1;

	#endif

	

		if(!BadAccess())	return 1;

	

	#ifdef	LOGLOGOUT

	/*

	if(strcmp(zz_bs,"ascii"))	return 1;

	*/

		fp = fopen("./logout.txt","a+")	;

		if(fp == NULL)	return		;

		fprintf(fp,"%02d:%02d:%02d %8s:",tm_now->tm_hour,tm_now->tm_min,tm_now->tm_sec,zz_bs)	;

		fprintf(fp,"(%15s)",zz_remote_addr)	;

		fprintf(fp,"%s***%s\n",zz_http_language,zz_http_user_agent)	;

	

	/*

		fprintf(fp,"%s\n",zz_query_string)	;

		if(strstr(zz_http_user_agent,"compatible"))

		fprintf(fp,"%s\n",zz_http_language)	;

		else

		fprintf(fp,"%s***%s\n",zz_http_language,zz_http_user_agent)	;

		if(*zz_http_referer)	fprintf(fp,"%s\n",zz_http_referer)	;

		else			fprintf(fp,"%s***%s\n",zz_http_language,zz_http_user_agent)	;

		else			fprintf(fp,"%s\n",zz_http_user_agent)	;

	*/

	

		fclose(fp)				;

	#endif

		html_error("なんか不調です。")		;

		return	1				;

	}

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

	/*	HTML BANNER						*/

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

	int	html_bannerNew()

	{

	printf("<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=1 WIDTH=100%%><TR><TD>\n")	;

	/**/

	printf("<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=100%%>\n")	;

	printf("<TR><TD HEIGHT=1 BGCOLOR=#eeeeee><IMG HEIGHT=1 WIDTH=1 SRC=\"/space1.gif\"></TD></TR>\n")	;

	printf("<TR BGCOLOR=#cccccc><TD HEIGHT=20 NOWRAP><FONT SIZE=2> \n")	;

	printf("| <A HREF=\"http://www.maido3.com/\" CLASS=\"BigLine\"> おすすめ </A>\n")	;

	printf("| <A HREF=\"http://news.kakiko.com/2chwatch/\" CLASS=\"BigLine\"> 2chサーバ監視所 </A>\n")	;

	printf("| <A HREF=\"http://www.binboserver.com/\" CLASS=\"BigLine\"> BinboServer </A>\n")	;

	printf("| <A HREF=\"http://www.maido3.com/server/subdomain.html\" CLASS=\"BigLine\"> Hikky.Zansu.com </A>\n")	;

	printf("| <A HREF=\"http://news.kakiko.com/\" CLASS=\"BigLine\"> 無料サービス </A>\n")	;

	printf("|</FONT></TD></TR>\n")	;

	printf("<TR><TD HEIGHT=1 BGCOLOR=#333333><IMG HEIGHT=1 WIDTH=1 SRC=\"/space1.gif\"></TD></TR>\n")	;

	printf("<TR><TD HEIGHT=1 BGCOLOR=#eeeeee><IMG HEIGHT=1 WIDTH=1 SRC=\"/space1.gif\"></TD></TR>\n")	;

	printf("<TR><TD HEIGHT=1 BGCOLOR=#333333><IMG HEIGHT=1 WIDTH=1 SRC=\"/space1.gif\"></TD></TR>\n")	;

	printf("</TABLE>\n")	;

	/**/

	

	printf("<CENTER>\n")	;

	

	printf("<BR>\n")				;

	printf("さぶドメインシリーズ登場<BR>\n")	;

	printf("   *****.<B><FONT SIZE=+1 FACE=\"Arial\" COLOR=DEEPPINK>syo-ten</FONT></B>.com<BR>\n")		;

	printf("   *****.<B><FONT SIZE=+1 FACE=\"Arial\" COLOR=DEEPPINK>gasuki</FONT></B>.com<BR>\n")		;

	printf("   *****.<B><FONT SIZE=+1 FACE=\"Arial\" COLOR=DEEPPINK>zansu</FONT></B>.com<BR>\n")		;

	printf("おすきな名前を無料で使えます。早い者勝ち。<BR>\n")		;

	printf("<FONT COLOR=DEEPPINK><B>工夫しだいで、楽しさ100倍。</B></FONT>\n")		;

	

	printf("<P><A HREF=\"http://www.maido3.com/server/\">")		;

	printf("深夜でも快適なレンタルサーバサービス(n)")		;

	printf("</A>\n")					;

	printf("<BR>あの巨大なサイトも使っています。\n")	;

	

	printf("</CENTER><P>\n")	;

	printf("</TD></TR></TABLE><P>\n")	;

	

	}

	

	#ifdef	CM_BBSPINK

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

	/*	HTML BANNER						*/

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

	int	html_banner()

	{

	printf("<CENTER>\n")	;

	printf("<A TARGET=\"_blank\" HREF=\"http://www.pinknavi.com/?pinkid=PB0001&prg=3&act=0&txt=おいでませ&url=http://www.seiai.com/\">おいでませアダルトサイト</A><br>\n")	;

	printf("<br><a href=\"http://www.maido3.com/mentai/\"><b><font size=4>深夜でも快適なレンタルサーバサービス</font></b></a><br>\n")	;

	printf("</CENTER>\n")	;

	printf("<P>\n")	;

	

	}

	#else

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

	/*	HTML BANNER						*/

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

	int	html_banner()

	{

	printf("<CENTER>\n")	;

	

	printf("<A HREF=\"http://www.maido3.com/server/\" TARGET=\"_blank\">")		;

	printf("深夜でも快適なレンタルサーバサービス")		;

	printf("</A>\n")					;

	printf("<BR>あの巨大なサイトも使っています。\n")	;

	

	printf("</CENTER><P>\n")	;

	

	}

	#endif

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

	/*	Get file size						*/

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

	int	out_html1()

	{

		char	*s[20]		;

		char	r0[SIZE_BUF],r1[SIZE_BUF],r2[SIZE_BUF],r3[SIZE_BUF],r4[SIZE_BUF]	;

		char	p[SIZE_BUF]			;

	

		if(out_resN)	return 0	;

		strncpy(p,BigLine[0],1024)		;
		BigLine[1024 -1] = '\0';
		if(!*p)	return	1		;
		res_split(s,p)			;
#ifdef	TYPE_TERI

	r4 = s[4]			;

#else

	someReplace(s[4],r4,"@`",",")	;

#endif

	#ifdef	TYPE_TERI

		/*someReplace(s[4],r4,"@`",",")	;*/

		html_head(s[4],lineMax)		;

	#else

		someReplace(s[4],r4,"@`",",")	;

		html_head(r4,lineMax)		;
if(strcmp(zz_im,"true"))	/* no imode	*/

{

	#endif

	if(strcmp(zz_im,"true"))	/* no imode	*/

	{

		printf("<DL>")		;
}

	}
	out_resN ++				;



	strncpy(p,BigLine[line],1024)			;

	BigLine[1024 -1] = '\0';

	if(!*p)	return	1	;

	res_split(s,p)		;



#ifdef	TYPE_TERI

		r0 = s[0]			;

		r1 = s[1]			;

		r3 = s[3]			;

#else

		someReplace(s[0],r0,"@`" , ",")	;

		someReplace(s[1],r1,"@`" , ",")	;

		someReplace(s[3],r3,"@`" , ",")	;

		someReplace(r3,r3,"&" , "&")		;

#endif

		hlinkReplace(r3)			;



	    if(strcmp(zz_im,"true"))		 /* no imode */

	    {

		if(*r3 && strlen(r3) < 8192)

		out_resN ++			;

		return	0			;

	}

	int	out_html(int line,int lineNo)

	{

		char	*s[20]		;

	#ifdef	TYPE_TERI

		char	*r0,*r1,*r2,*r3,*r4	;

	#else

		char	r0[SIZE_BUF],r1[SIZE_BUF],r2[SIZE_BUF],r3[SIZE_BUF],r4[SIZE_BUF]	;

	#endif

		char	p[SIZE_BUF]			;

	

	/*printf("line=%d[%s]<P>\n",line,BigLine[line]);return 0;*/

	

		if(!out_resN)				/* Can I write header ?	*/

		{
		printf("<dt>")		;

		printf("%d",lineNo)	;

		printf(" 名前:")	;



		if(*r1)	{printf("<a href=\"mailto:%s \">",r1)	;}

		else	{printf("<font color=green>")	;}



		printf("<b>%s </b>",r0)	;



		if(*r1)	{printf("</a>")		;}

		else	{printf("</font>")	;}



		printf(" 投稿日:%s",s[2])	;

		printf("<dd>")			;

		printf("%s",r3)			;

		printf("<br><br>")		;

			strncpy(p,BigLine[0],1024)		;

			BigLine[1024 -1] = '\0';

			if(!*p)	return	1		;

			res_split(s,p)			;

	#ifdef	TYPE_TERI

		r4 = s[4]			;

	#else

		someReplace(s[4],r4,"@`",",")	;

	#endif

			html_head(r4,lineMax)		;

	if(strcmp(zz_im,"true"))	/* no imode	*/

	{

			printf("<DL>")		;

	}

		}
		else

		out_resN ++				;

	

		strncpy(p,BigLine[line],1024)			;

		BigLine[1024 -1] = '\0';

		if(!*p)	return	1	;

		res_split(s,p)		;

	

	#ifdef	TYPE_TERI

			r0 = s[0]			;

			r1 = s[1]			;

			r3 = s[3]			;

	#else

			someReplace(s[0],r0,"@`" , ",")	;

			someReplace(s[1],r1,"@`" , ",")	;

			someReplace(s[3],r3,"@`" , ",")	;

			someReplace(r3,r3,"&" , "&")		;

	#endif

			hlinkReplace(r3)			;

	

		    if(strcmp(zz_im,"true"))		 /* no imode */

		    {

			if(*r3 && strlen(r3) < 8192)

			{

			printf("<dt>")		;

			printf("%d",lineNo)	;

			printf(" 名前:")	;

	

			if(*r1)	{printf("<a href=\"mailto:%s \">",r1)	;}

			else	{printf("<font color=green>")	;}

	

			printf("<b>%s </b>",r0)	;

	

			if(*r1)	{printf("</a>")		;}

			else	{printf("</font>")	;}

	

			printf(" 投稿日:%s",s[2])	;

			printf("<dd>")			;

			printf("%s",r3)			;

			printf("<br><br>")		;

			}

			else

			{

			printf("<dt>")		;

			printf("%d",lineNo)	;

			printf(" 名前:<font color=green><b>");

			printf("%s","")					;

			printf("</b></font>")				;

			printf(" 投稿日:[ここ壊れています]")		;

			printf("<DD>")					;

			printf("[ここ壊れています]")			;

			printf("<br><br>")				;

			}

	if(IsBusy2ch() && out_resN > RES_NORMAL)

	{

	printf(" <a href=\"./%s?bbs=%s&key=%s&st=%d&to=%d\">次の %d レスを見る</a>\n",

	CGINAME,zz_bs,zz_ky,lineNo,lineNo+RES_NORMAL,RES_NORMAL)	;

	printf(" <a href=\"./%s?bbs=%s&key=%s&ls=%d\">最新レス %d</a>\n",

	CGINAME,zz_bs,zz_ky,RES_NORMAL,RES_NORMAL)	;

	printf(" (%02d:00PM - %02d:00AM の間一気に全部は読めません)<BR>\n",LIMIT_PM-12,LIMIT_AM)	;

		return 1	;

	}

		    }

		    else			/* imode	*/

		    {

			if(*r3)

			{

			printf("<p>[%d:",lineNo)	;

			if(*s[1])	{printf("<a href=\"mailto:%s \">",r1)	;}

			printf("<b>%s </b>",r0)	;

			if(*s[1])	{printf("</a>")	;}

			printf("(%s)]",s[2])		;

			printf("<br>%s</p>",r3)		;

			printf("<hr>\n")		;

			}

			else

			{

			printf("<p>[%d:",lineNo)		;

			printf("ここ壊れています]</p>")	;

			printf("<hr>\n")		;

			}

	if(out_resN > RES_IMODE)

	{

	printf(" <a href=\"./%s?bbs=%s&key=%s&st=%d&to=%d&imode=true\">次の %d レスを見る</a>\n",

	CGINAME,zz_bs,zz_ky,lineNo,lineNo+RES_IMODE,RES_IMODE)	;

	printf(" <a href=\"./%s?bbs=%s&key=%s&ls=%d&imode=true\">最新レス %d</a><BR>\n",

	CGINAME,zz_bs,zz_ky,RES_IMODE,RES_IMODE)	;

		return 1	;

	}

		    }

	

		return	0				;

	}

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

	/*	Get file size						*/

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

	int	dat_out()

	{

		int	line,lineNo			;

	

		for(line=0;line<lineMax;line++)

		{
		printf("<dt>")		;

		printf("%d",lineNo)	;

		printf(" 名前:<font color=green><b>");

		printf("%s","")					;

		printf("</b></font>")				;

		printf(" 投稿日:[ここ壊れています]")		;

		printf("<DD>")					;

		printf("[ここ壊れています]")			;

		printf("<br><br>")				;

			lineNo = line + 1	;

	

			if(lineNo == 1)

			{

				if(!strcmp(zz_nf,"true"))	continue	;

			}

			else

			{

				if(nn_st && lineNo < nn_st)	continue	;

				if(nn_to && lineNo > nn_to)	continue	;

				if(nn_ls && line < lineMax - nn_ls)	continue	;

			}

	

			if(out_html(line,lineNo))	break	;

		}
if(IsBusy2ch() && out_resN > RES_NORMAL)

{

printf(" <a href=\"./%s?bbs=%s&key=%s&st=%d&to=%d\">次の %d レスを見る</a>\n",

CGINAME,zz_bs,zz_ky,lineNo,lineNo+RES_NORMAL,RES_NORMAL)	;

printf(" <a href=\"./%s?bbs=%s&key=%s&ls=%d\">最新レス %d</a>\n",

CGINAME,zz_bs,zz_ky,RES_NORMAL,RES_NORMAL)	;

printf(" (%02d:00PM - %02d:00AM の間一気に全部は読めません)<BR>\n",LIMIT_PM-12,LIMIT_AM)	;

	return 1	;

}

	    }

	    else			/* imode	*/

	    {

		if(*r3)

		out_html1()	;

		html_foot(lineMax)	;

	

	return	0	;

	}

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

	/*	Get file size						*/

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

	int	dat_read()

	{

		int	i				;

		FILE	*fp				;

		char	fname[1024]			;

	

	

		sprintf(fname,"../%.256s/dat/%.256s.dat",zz_bs,zz_ky);

		//sprintf(fname,"../%s/dat/%s.dat",zz_bs,zz_ky)	;

	#ifdef DEBUG

		sprintf(fname,"998695422.dat")	;

	#endif

		zz_fileSize    = getFileSize(fname)	;

	

		if(zz_fileSize > MAX_FILESIZE)

			html_error("このスレッド大きすぎます。")	;

		if(*zz_ky == '.')

			html_error("そんな板orスレッドないです。")	;

	

	

		nn_st = atoi(zz_st)		;

		nn_to = atoi(zz_to)		;

		nn_ls = atoi(zz_ls)		;

		if(nn_st < 0)	nn_st = 0	;

		if(nn_to < 0)	nn_to = 0	;

		if(nn_st == 1 && nn_to ==1)	strcpy(zz_nf,KARA)	;

		if(!strcmp(zz_im,"true"))	 /* imode */

		{
		printf("<p>[%d:",lineNo)	;

		if(*s[1])	{printf("<a href=\"mailto:%s \">",r1)	;}

		printf("<b>%s </b>",r0)	;

		if(*s[1])	{printf("</a>")	;}

		printf("(%s)]",s[2])		;

		printf("<br>%s</p>",r3)		;

		printf("<hr>\n")		;

			if(!nn_st && !nn_to && !nn_ls)	nn_ls = RES_IMODE	;

		}
		else

		if(strcmp(zz_nf,"true"))	nn_ls --	;

		if(nn_ls < 0)	nn_ls = 0	;

	

		BigBuffer = malloc(zz_fileSize + 32)		;

		if(!BigBuffer)	html_error("メモリの確保に失敗しました。")	;

	

		fp = fopen(fname,"r")	;

		if(!fp)

		{
		printf("<p>[%d:",lineNo)		;

		printf("ここ壊れています]</p>")	;

		printf("<hr>\n")		;

			html_error("そんな板orスレッドないです。")	;

			return	0	;

		}
if(out_resN > RES_IMODE)

{

printf(" <a href=\"./%s?bbs=%s&key=%s&st=%d&to=%d&imode=true\">次の %d レスを見る</a>\n",

CGINAME,zz_bs,zz_ky,lineNo,lineNo+RES_IMODE,RES_IMODE)	;

printf(" <a href=\"./%s?bbs=%s&key=%s&ls=%d&imode=true\">最新レス %d</a><BR>\n",

CGINAME,zz_bs,zz_ky,RES_IMODE,RES_IMODE)	;

	return 1	;

}

	    }



	return	0				;

}

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

/*	Get file size						*/

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

int	dat_out()

{

	int	line,lineNo			;



	for(line=0;line<lineMax;line++)

	{

		lineNo = line + 1	;



		if(lineNo == 1)

		fread(BigBuffer,zz_fileSize,1,fp)	;

		fclose(fp)				;

		BigBuffer[zz_fileSize] = '\0'		;

		for(i=0;i<zz_fileSize;i++)

		{
			if(!strcmp(zz_nf,"true"))	continue	;

			if(BigBuffer[i] == '\0')	BigBuffer[i] = '*'	;

		}
		else

	

		lineMax = getLineMax()			;

	/*

	html_error("調整中。。。")	;

	*/

		return 0;

	}

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

	/*	Get line number						*/

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

	int	getLineMax()

	{

		int	line = 0	;

		char	*p = BigBuffer	;

		char	*p1		;

		char	b[SIZE_BUF]	;

	

		if(!p)	return -8	;

	

		while(p1 = strchr(p,'\n'))

		{
			if(nn_st && lineNo < nn_st)	continue	;

			if(nn_to && lineNo > nn_to)	continue	;

			if(nn_ls && line < lineMax - nn_ls)	continue	;

			BigLine[line] = p	;

			*p1 = '\0'	;

			p = p1		;

			if(line > RES_RED)	break	;

			line ++		;

			p++		;

		}


		if(out_html(line,lineNo))	break	;

		return line		;

	}
	out_html1()	;

	html_foot(lineMax)	;



return	0	;

}

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

/*	Get file size						*/

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

int	dat_read()

{

	int	i				;

	FILE	*fp				;

	char	fname[1024]			;





	sprintf(fname,"../%.256s/dat/%.256s.dat",zz_bs,zz_ky);

	//sprintf(fname,"../%s/dat/%s.dat",zz_bs,zz_ky)	;

#ifdef DEBUG

	sprintf(fname,"998695422.dat")	;

#endif

	zz_fileSize    = getFileSize(fname)	;



	if(zz_fileSize > MAX_FILESIZE)

		html_error("このスレッド大きすぎます。")	;

	if(*zz_ky == '.')

		html_error("そんな板orスレッドないです。")	;





	nn_st = atoi(zz_st)		;

	nn_to = atoi(zz_to)		;

	nn_ls = atoi(zz_ls)		;

	if(nn_st < 0)	nn_st = 0	;

	if(nn_to < 0)	nn_to = 0	;

	if(nn_st == 1 && nn_to ==1)	strcpy(zz_nf,KARA)	;

	if(!strcmp(zz_im,"true"))	 /* imode */

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

	/*	Get file size						*/

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

	int	getFileSize(char *file)

	{
		if(!nn_st && !nn_to && !nn_ls)	nn_ls = RES_IMODE	;

		struct	stat	CountStat		;

		int	ccc = 0				;

		if(!stat(file,&CountStat))	ccc = (int)CountStat.st_size;

		return	ccc				;

	}
	if(strcmp(zz_nf,"true"))	nn_ls --	;

	if(nn_ls < 0)	nn_ls = 0	;



	BigBuffer = malloc(zz_fileSize + 32)		;

	if(!BigBuffer)	html_error("メモリの確保に失敗しました。")	;



	fp = fopen(fname,"r")	;

	if(!fp)

	

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

	/*	Get file last-modified						*/

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

	

	#ifdef LASTMOD

	time_t getFileLastmod(char *file)

	{
		html_error("そんな板orスレッドないです。")	;

		return	0	;

		struct	stat	CountStat		;

	#ifdef FreeBSD

	       struct  timespec        ccc;

	       if(!stat(file,&CountStat))      ccc = CountStat.st_mtimespec;

	       return  ccc.tv_sec;

	#else

	       time_t  ccc;

	       if(!stat(file,&CountStat))      ccc = CountStat.st_mtime;

	       return  ccc;

	#endif

	}
	fread(BigBuffer,zz_fileSize,1,fp)	;

	fclose(fp)				;

	BigBuffer[zz_fileSize] = '\0'		;

	for(i=0;i<zz_fileSize;i++)

	

	int get_lastmod_str(time_t lastmod){

		strftime(lastmod_str, 1024, "%a, %d %b %Y %H:%M:%S GMT", gmtime(&lastmod));

		return(1);

	}

	#endif

	

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

	/*	GET Env							*/

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

	int	zz_GetEnv(void)

	{
		if(BigBuffer[i] == '\0')	BigBuffer[i] = '*'	;

		currentTime = (long)time(&t_now);

		time(&t_now)			;

		t_now +=  9*60*60		;

		tm_now = gmtime(&t_now)		;

	

		zz_remote_addr		= getenv("REMOTE_ADDR")		;

		zz_remote_host		= getenv("REMOTE_HOST")		;

		zz_http_referer		= getenv("HTTP_REFERER")	;

		zz_http_cookie		= getenv("HTTP_COOKIE")		;

		zz_query_string		= getenv("QUERY_STRING")	;

		zz_temp			= getenv("REMOTE_USER")		;

		zz_http_user_agent	= getenv("HTTP_USER_AGENT")	;

		zz_http_language	= getenv("HTTP_ACCEPT_LANGUAGE");

	#ifdef GZIP

		zz_http_encoding	= getenv("HTTP_ACCEPT_ENCODING");

	#endif

	#ifdef LASTMOD

		zz_http_if_modified_since	= getenv("HTTP_IF_MODIFIED_SINCE");

	#endif

	

		if(!zz_remote_addr)	zz_remote_addr    = KARA	;

		if(!zz_remote_host)	zz_remote_host    = KARA	;

		if(!zz_http_referer)	zz_http_referer   = KARA	;

		if(!zz_query_string)	zz_query_string   = KARA	;

		if(!zz_temp)		zz_temp		  = KARA	;

		if(!zz_http_user_agent)	zz_http_user_agent= KARA	;

		if(!zz_http_language)	zz_http_language  = KARA	;

	

		zz_GetString(zz_bs ,"bbs")		;

		zz_GetString(zz_ky ,"key")		;

		zz_GetString(zz_ls ,"ls")		;

		zz_GetString(zz_st ,"st")		;

		zz_GetString(zz_to ,"to")		;

		zz_GetString(zz_nf ,"nofirst")		;

		zz_GetString(zz_im ,"imode")		;

	}


	lineMax = getLineMax()			;

/*

html_error("調整中。。。")	;

*/

	return 0;

}

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

/*	Get line number						*/

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

int	getLineMax()

{

	int	line = 0	;

	char	*p = BigBuffer	;

	char	*p1		;

	char	b[SIZE_BUF]	;



	if(!p)	return -8	;



	while(p1 = strchr(p,'\n'))

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

	/*	MAIN							*/

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

	main()

	{
		BigLine[line] = p	;

		*p1 = '\0'	;

		p = p1		;

		if(line > RES_RED)	break	;

		line ++		;

		p++		;

	#ifdef GZIP

		int pid;

	    int pipefds[2];

		int whitespace = 2048;

	#endif

		char	fname[1024]			;

		zz_GetEnv()				;

	

		printf("Content-type: text/html\n")	;

	#ifdef LASTMOD

		sprintf(fname,"../%.256s/dat/%.256s.dat",zz_bs,zz_ky);

	#ifdef DEBUG

		sprintf(fname,"998695422.dat")	;

	#endif

		zz_fileLastmod = getFileLastmod(fname)	;

		get_lastmod_str(zz_fileLastmod);

		if(zz_http_if_modified_since && strstr(zz_http_if_modified_since, lastmod_str)){

			printf("Status: 304\n")	;

			printf("\n")	;

			return(0);

		}

	#endif

	

	#ifdef GZIP

		if(zz_http_encoding && strstr(zz_http_encoding,"gzip")){

			gzip_flag = 1;

		}else{

			gzip_flag = 0;

		}

		if(gzip_flag){

			printf("Content-Encoding: gzip\n");

		}

	#endif

	

	

	#ifdef DEBUG

		sprintf(fname,"998695422.dat")	;

	#endif

		zz_fileSize    = getFileSize(fname)	;

	

	// Get Last-Modified Date

	#ifdef LASTMOD

		printf("Last-Modified: %.256s\n", lastmod_str);

	#endif

	

		printf("\n")				;

	#ifdef DEBUG

		sleep(1);

	#endif

		fflush(stdout);

	

	#ifdef GZIP

	    if(gzip_flag) {

	        pipe(pipefds);

	        if(pid=fork() == 0){

	            //child

	            dup2(pipefds[0], 0);

	            close(pipefds[0]);

	            close(pipefds[1]);

	            execl("/bin/gzip", "gzip", "-cf", NULL);

				printf ("Error can't exec\n");

				exit(1);

	        }

			//parent

			dup2(pipefds[1], 1);

			close(pipefds[0]);

			close(pipefds[1]);

			//put 2048byte

			fflush(stdout);

			while(whitespace--)putchar(' ');

			fflush(stdout);

	    }

	

	#endif

	

		logOut("")				;

	

		dat_read()				;

		dat_out()				;

	

		if(BigBuffer)	free(BigBuffer)		;

		BigBuffer = NULL			;

	

	#ifdef GZIP

		if(gzip_flag) {

			fflush(stdout);

			close(1);

			waitpid(pid, NULL, 0);

		}

	#endif

	

	}
	return line		;

}

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

/*	Get file size						*/

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

int	getFileSize(char *file)

{

	struct	stat	CountStat		;

	int	ccc = 0				;

	if(!stat(file,&CountStat))	ccc = (int)CountStat.st_size;

	return	ccc				;

}



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

/*	Get file last-modified						*/

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



#ifdef LASTMOD

time_t getFileLastmod(char *file)

{

	struct	stat	CountStat		;

#ifdef FreeBSD

       struct  timespec        ccc;

       if(!stat(file,&CountStat))      ccc = CountStat.st_mtimespec;

       return  ccc.tv_sec;

#else

       time_t  ccc;

       if(!stat(file,&CountStat))      ccc = CountStat.st_mtime;

       return  ccc;

#endif

}



int get_lastmod_str(time_t lastmod){

	strftime(lastmod_str, 1024, "%a, %d %b %Y %H:%M:%S GMT", gmtime(&lastmod));

	return(1);

}

#endif



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

/*	GET Env							*/

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

int	zz_GetEnv(void)

{

	currentTime = (long)time(&t_now);

	time(&t_now)			;

	t_now +=  9*60*60		;

	tm_now = gmtime(&t_now)		;



	zz_remote_addr		= getenv("REMOTE_ADDR")		;

	zz_remote_host		= getenv("REMOTE_HOST")		;

	zz_http_referer		= getenv("HTTP_REFERER")	;

	zz_http_cookie		= getenv("HTTP_COOKIE")		;

	zz_query_string		= getenv("QUERY_STRING")	;

	zz_temp			= getenv("REMOTE_USER")		;

	zz_http_user_agent	= getenv("HTTP_USER_AGENT")	;

	zz_http_language	= getenv("HTTP_ACCEPT_LANGUAGE");

#ifdef GZIP

	zz_http_encoding	= getenv("HTTP_ACCEPT_ENCODING");

#endif

#ifdef LASTMOD

	zz_http_if_modified_since	= getenv("HTTP_IF_MODIFIED_SINCE");

#endif



	if(!zz_remote_addr)	zz_remote_addr    = KARA	;

	if(!zz_remote_host)	zz_remote_host    = KARA	;

	if(!zz_http_referer)	zz_http_referer   = KARA	;

	if(!zz_query_string)	zz_query_string   = KARA	;

	if(!zz_temp)		zz_temp		  = KARA	;

	if(!zz_http_user_agent)	zz_http_user_agent= KARA	;

	if(!zz_http_language)	zz_http_language  = KARA	;



	zz_GetString(zz_bs ,"bbs")		;

	zz_GetString(zz_ky ,"key")		;

	zz_GetString(zz_ls ,"ls")		;

	zz_GetString(zz_st ,"st")		;

	zz_GetString(zz_to ,"to")		;

	zz_GetString(zz_nf ,"nofirst")		;

	zz_GetString(zz_im ,"imode")		;

}

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

/*	MAIN							*/

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

main()

{

#ifdef GZIP

	int pid;

    int pipefds[2];

	int whitespace = 2048;

#endif

	char	fname[1024]			;

	zz_GetEnv()				;



	printf("Content-type: text/html\n")	;

#ifdef LASTMOD

	sprintf(fname,"../%.256s/dat/%.256s.dat",zz_bs,zz_ky);

#ifdef DEBUG

	sprintf(fname,"998695422.dat")	;

#endif

	zz_fileLastmod = getFileLastmod(fname)	;

	get_lastmod_str(zz_fileLastmod);

	if(zz_http_if_modified_since && strstr(zz_http_if_modified_since, lastmod_str)){

		printf("Status: 304\n")	;

		printf("\n")	;

		return(0);

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

	/*	ERROR END						*/

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

	int	html_error(char *mes)

	{

		char	zz_soko[256]	;

		char	tmp[256]	;

		char	doko[256]	;

		struct	stat	CountStat		;

		char	comcom[256]	;

	

		*tmp = '\0'	;

		strcpy(tmp,LastChar(zz_ky,"/"))	;

		strncpy(zz_soko,tmp,3)	;

	

		*comcom = '\0'		;

	if(strstr(mes,"不調"))

	{

	sprintf(comcom,"<A HREF=\"http://green.jbbs.net/computer/20/bigserver.html\">お問い合わせ先</A>");

	}
#endif



#ifdef GZIP

	if(zz_http_encoding && strstr(zz_http_encoding,"gzip")){

		gzip_flag = 1;

	}else{

		gzip_flag = 0;

	

	

	printf("<HTML><HEAD>")	;

	printf("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=x-sjis\">")	;

	printf("<TITLE>%s</TITLE>",mes)	;

	printf("<style type=\"text/css\">\n")	;

	printf("<!--\n")	;

	printf("TD.Type1 {\n")	;

	printf("color: #ffffff;\n")	;

	printf("text-align: left;\n")	;

	printf("}\n")	;

	printf("A.BigLine {\n")	;

	printf("color: #000000;\n")	;

	printf("text-decoration: none;\n")	;

	printf("}\n")	;

	printf("-->\n")	;

	printf("</style>\n")	;

	printf("</HEAD>\n")	;

	/*printf("<BASE TARGET=\"_blank\">\n")	;*/

	

	printf("<BODY TEXT=\"#000000\" BGCOLOR=\"#EFEFEF\" link=\"#0000FF\" alink=\"#FF0000\" vlink=\"#660099\">\n")	;

	

	printf("<P><FONT SIZE=+1 COLOR=\"#FF0000\">%s</FONT></B><BR>\n",mes)	;

	printf("<DL>")	;

	printf("<dt>1 名前:<font color=green><b>%s</b></font>投稿日:2001/04/12(木) 15:11<dd>%s<br><br>%s<br>\n",CGIVER,mes,comcom)	;

	

	if(strstr(zz_http_user_agent,"Katjusha"))

	{

	printf("<dt>2 名前:<font color=green><b>%s</b></font>投稿日:2001/04/12(木) 15:11<dd>",CGIVER)	;

	/*printf("%s",zz_http_user_agent)	;*/

	printf("<BR>")				;

	printf("<P><A target=\"_blank\" HREF=\"http://www.maido3.com/server/\">")		;

	printf("http://www.maido3.com/server/")		;

	printf("</A><BR>")					;

	printf("さぶドメインシリーズ登場<BR>")	;

	printf("   *****.<B><FONT SIZE=+1 FACE=\"Arial\" COLOR=DEEPPINK>syo-ten</FONT></B>.com<BR>")		;

	printf("   *****.<B><FONT SIZE=+1 FACE=\"Arial\" COLOR=DEEPPINK>gasuki</FONT></B>.com<BR>")		;

	printf("   *****.<B><FONT SIZE=+1 FACE=\"Arial\" COLOR=DEEPPINK>zansu</FONT></B>.com<BR>")		;

	printf("おすきな名前を無料で使えます。早い者勝ち。<BR>")		;

	printf("<FONT COLOR=DEEPPINK><B>工夫しだいで、楽しさ100倍。</B></FONT>")		;

	

	printf("<P><A target=\"_blank\" HREF=\"http://www.maido3.com/server/\">")		;

	printf("深夜でも快適なレンタルサーバサービス")		;

	printf("</A>")					;

	printf("<BR>あの巨大なサイトも使っています。<BR><BR>")	;

	printf("<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=100%%>")	;

	printf("<TR><TD HEIGHT=1 BGCOLOR=#eeeeee><IMG HEIGHT=1 WIDTH=1 SRC=\"/space1.gif\"></TD></TR>")	;

	printf("<TR BGCOLOR=#cccccc><TD HEIGHT=20 NOWRAP><FONT SIZE=2> ")	;

	printf("| <A target=\"_blank\" HREF=\"http://www.maido3.com/\" CLASS=\"BigLine\"> おすすめ </A>")	;

	printf("| <A target=\"_blank\" HREF=\"http://news.kakiko.com/2chwatch/\" CLASS=\"BigLine\"> 2chサーバ監視所 </A>")	;

	printf("| <A target=\"_blank\" HREF=\"http://www.binboserver.com/\" CLASS=\"BigLine\"> BinboServer </A>")	;

	printf("| <A target=\"_blank\" HREF=\"http://www.maido3.com/server/subdomain.html\" CLASS=\"BigLine\"> Hikky.Zansu.com </A>")	;

	printf("| <A target=\"_blank\" HREF=\"http://news.kakiko.com/\" CLASS=\"BigLine\"> 無料サービス </A>")	;

	printf("|</FONT></TD></TR>")	;

	printf("<TR><TD HEIGHT=1 BGCOLOR=#333333><IMG HEIGHT=1 WIDTH=1 SRC=\"/space1.gif\"></TD></TR>")	;

	printf("<TR><TD HEIGHT=1 BGCOLOR=#eeeeee><IMG HEIGHT=1 WIDTH=1 SRC=\"/space1.gif\"></TD></TR>")	;

	printf("<TR><TD HEIGHT=1 BGCOLOR=#333333><IMG HEIGHT=1 WIDTH=1 SRC=\"/space1.gif\"></TD></TR>")	;

	printf("</TABLE>")	;

	printf("<br><br>\n")	;

	}
	if(gzip_flag){

		printf("Content-Encoding: gzip\n");

	printf("</DL>\n")	;

	

	printf("<CENTER>\n")	;

	printf("<BR>\n")	;

	html_bannerNew()	;

	printf("<BR>\n")	;

	

	printf("</CENTER><HR>\n")		;

	printf("<FONT SIZE=-2>%s</FONT><HR><P>\n",CGIVER)	;

	

	if(strstr(mes,"そんな"))

	{

		sprintf(doko,"../%.50/kako/%.50/%.50.html",zz_bs,zz_soko,tmp)	;

		if(!stat(doko,&CountStat))

		{

			printf("隊長! 過去ログ倉庫で、<A HREF=\"/%s/kako/%s/%s.html\">スレッド %s.html</A> を発見しました。\n",zz_bs,zz_soko,tmp,tmp);

		}

		else

		{

			sprintf(doko,"../%.50s/kako/%.50s/%.50s.dat",zz_bs,zz_soko,tmp)	;

			if(!stat(doko,&CountStat))

			{

			printf("隊長! 過去ログ倉庫で、<A HREF=\"/%s/kako/%s/%s.dat\">スレッド %s.dat</A> を発見しました。<BR><B><FONT SIZE=+1 COLOR=RED>が</FONT></B>、しかしまだ html化されていません。残念、待つしかない。\n",zz_bs,zz_soko,tmp,tmp);

			}

			else

			{

			printf("<A HREF=\"/%s/kako/\">過去ログ倉庫</A>にもありませんでした。<BR>問い合わせても見つかる可能\性はほとんどありません。\n",zz_bs);

			}

		}

	}
#endif





#ifdef DEBUG

	sprintf(fname,"998695422.dat")	;

#endif

	zz_fileSize    = getFileSize(fname)	;



// Get Last-Modified Date

#ifdef LASTMOD

	printf("Last-Modified: %.256s\n", lastmod_str);

#endif



	printf("\n")				;

#ifdef DEBUG

	sleep(1);

#endif

	fflush(stdout);



#ifdef GZIP

    if(gzip_flag) {

        pipe(pipefds);

        if(pid=fork() == 0){

            //child

            dup2(pipefds[0], 0);

            close(pipefds[0]);

            close(pipefds[1]);

            execl("/bin/gzip", "gzip", "-cf", NULL);

			printf ("Error can't exec\n");

			exit(1);

        }

		//parent

		dup2(pipefds[1], 1);

		close(pipefds[0]);

		close(pipefds[1]);

		//put 2048byte

		fflush(stdout);

		while(whitespace--)putchar(' ');

		fflush(stdout);

    }



#endif



	logOut("")				;



	dat_read()				;

	dat_out()				;



	if(BigBuffer)	free(BigBuffer)		;

	

	printf("</BODY>\n")	;

	printf("</HTML>\n")	;

	

	if(BigBuffer)	free(BigBuffer)	;

	BigBuffer = NULL			;


#ifdef GZIP

	if(gzip_flag) {

		fflush(stdout);

		close(1);

		waitpid(pid, NULL, 0);

	

	exit(0)	;

	}
#endif



}

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

/*	ERROR END						*/

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

int	html_error(char *mes)

{

	char	zz_soko[256]	;

	char	tmp[256]	;

	char	doko[256]	;

	struct	stat	CountStat		;

	char	comcom[256]	;



	*tmp = '\0'	;

	strcpy(tmp,LastChar(zz_ky,"/"))	;

	strncpy(zz_soko,tmp,3)	;



	*comcom = '\0'		;

if(strstr(mes,"不調"))

{

sprintf(comcom,"<A HREF=\"http://green.jbbs.net/computer/20/bigserver.html\">お問い合わせ先</A>");

}





printf("<HTML><HEAD>")	;

printf("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=x-sjis\">")	;

printf("<TITLE>%s</TITLE>",mes)	;

printf("<style type=\"text/css\">\n")	;

printf("<!--\n")	;

printf("TD.Type1 {\n")	;

printf("color: #ffffff;\n")	;

printf("text-align: left;\n")	;

printf("}\n")	;

printf("A.BigLine {\n")	;

printf("color: #000000;\n")	;

printf("text-decoration: none;\n")	;

printf("}\n")	;

printf("-->\n")	;

printf("</style>\n")	;

printf("</HEAD>\n")	;

/*printf("<BASE TARGET=\"_blank\">\n")	;*/



printf("<BODY TEXT=\"#000000\" BGCOLOR=\"#EFEFEF\" link=\"#0000FF\" alink=\"#FF0000\" vlink=\"#660099\">\n")	;



printf("<P><FONT SIZE=+1 COLOR=\"#FF0000\">%s</FONT></B><BR>\n",mes)	;

printf("<DL>")	;

printf("<dt>1 名前:<font color=green><b>%s</b></font>投稿日:2001/04/12(木) 15:11<dd>%s<br><br>%s<br>\n",CGIVER,mes,comcom)	;



if(strstr(zz_http_user_agent,"Katjusha"))

{

printf("<dt>2 名前:<font color=green><b>%s</b></font>投稿日:2001/04/12(木) 15:11<dd>",CGIVER)	;

/*printf("%s",zz_http_user_agent)	;*/

printf("<BR>")				;

printf("<P><A target=\"_blank\" HREF=\"http://www.maido3.com/server/\">")		;

printf("http://www.maido3.com/server/")		;

printf("</A><BR>")					;

printf("さぶドメインシリーズ登場<BR>")	;

printf("   *****.<B><FONT SIZE=+1 FACE=\"Arial\" COLOR=DEEPPINK>syo-ten</FONT></B>.com<BR>")		;

printf("   *****.<B><FONT SIZE=+1 FACE=\"Arial\" COLOR=DEEPPINK>gasuki</FONT></B>.com<BR>")		;

printf("   *****.<B><FONT SIZE=+1 FACE=\"Arial\" COLOR=DEEPPINK>zansu</FONT></B>.com<BR>")		;

printf("おすきな名前を無料で使えます。早い者勝ち。<BR>")		;

printf("<FONT COLOR=DEEPPINK><B>工夫しだいで、楽しさ100倍。</B></FONT>")		;



printf("<P><A target=\"_blank\" HREF=\"http://www.maido3.com/server/\">")		;

printf("深夜でも快適なレンタルサーバサービス")		;

printf("</A>")					;

printf("<BR>あの巨大なサイトも使っています。<BR><BR>")	;

printf("<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=100%%>")	;

printf("<TR><TD HEIGHT=1 BGCOLOR=#eeeeee><IMG HEIGHT=1 WIDTH=1 SRC=\"/space1.gif\"></TD></TR>")	;

printf("<TR BGCOLOR=#cccccc><TD HEIGHT=20 NOWRAP><FONT SIZE=2> ")	;

printf("| <A target=\"_blank\" HREF=\"http://www.maido3.com/\" CLASS=\"BigLine\"> おすすめ </A>")	;

printf("| <A target=\"_blank\" HREF=\"http://news.kakiko.com/2chwatch/\" CLASS=\"BigLine\"> 2chサーバ監視所 </A>")	;

printf("| <A target=\"_blank\" HREF=\"http://www.binboserver.com/\" CLASS=\"BigLine\"> BinboServer </A>")	;

printf("| <A target=\"_blank\" HREF=\"http://www.maido3.com/server/subdomain.html\" CLASS=\"BigLine\"> Hikky.Zansu.com </A>")	;

printf("| <A target=\"_blank\" HREF=\"http://news.kakiko.com/\" CLASS=\"BigLine\"> 無料サービス </A>")	;

printf("|</FONT></TD></TR>")	;

printf("<TR><TD HEIGHT=1 BGCOLOR=#333333><IMG HEIGHT=1 WIDTH=1 SRC=\"/space1.gif\"></TD></TR>")	;

printf("<TR><TD HEIGHT=1 BGCOLOR=#eeeeee><IMG HEIGHT=1 WIDTH=1 SRC=\"/space1.gif\"></TD></TR>")	;

printf("<TR><TD HEIGHT=1 BGCOLOR=#333333><IMG HEIGHT=1 WIDTH=1 SRC=\"/space1.gif\"></TD></TR>")	;

printf("</TABLE>")	;

printf("<br><br>\n")	;

}

printf("</DL>\n")	;



printf("<CENTER>\n")	;

printf("<BR>\n")	;

html_bannerNew()	;

printf("<BR>\n")	;



printf("</CENTER><HR>\n")		;

printf("<FONT SIZE=-2>%s</FONT><HR><P>\n",CGIVER)	;



if(strstr(mes,"そんな"))

{

	sprintf(doko,"../%.50/kako/%.50/%.50.html",zz_bs,zz_soko,tmp)	;

	if(!stat(doko,&CountStat))

	int	html_error999(char *mes)

	{
		printf("隊長! 過去ログ倉庫で、<A HREF=\"/%s/kako/%s/%s.html\">スレッド %s.html</A> を発見しました。\n",zz_bs,zz_soko,tmp,tmp);

		char	zz_soko[256]	;

		char	tmp[256]	;

		*tmp = '\0'	;

		strcpy(tmp,LastChar(zz_ky,"/"))	;

		strncpy(zz_soko,tmp,3)	;

	

	printf("<HTML><HEAD>")	;

	printf("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=x-sjis\">")	;

	printf("<TITLE>ERROR</TITLE>")	;

	printf("</HEAD>\n")	;

	

	printf("<BODY TEXT=\"#000000\" BGCOLOR=\"#EFEFEF\" link=\"#0000FF\" alink=\"#FF0000\" vlink=\"#660099\">\n")	;

	

	printf("\n")		;

	printf("<TABLE border=1 cellspacing=11 cellpadding=2 width=95% bgcolor=\"#EFEFEF\" align=center><TR><TD>\n");

	printf("えらー、%s<P>\n",mes)		;

	printf("bbs = [%s] \n",zz_bs)	;

	printf("key = [%s] \n",zz_ky)	;

	printf("ls = [%s] \n",zz_ls)		;

	printf("st = [%s] \n",zz_st)		;

	printf("to = [%s] \n",zz_to)		;

	printf("nofirst = [%s]<BR>\n",zz_nf)	;

	printf("fileSize = [%d bytes] %dlines<BR>\n",zz_fileSize,lineMax)	;

	printf("time=[%02d:%02d:%02d]<BR>\n",tm_now->tm_hour,tm_now->tm_min,tm_now->tm_sec);

	

	printf("<BR>「えらー、そんな板orスレッドないです」の場合はここ倉庫へ Go <BR>")	;

	printf("<A HREF=\"/%s/kako/%s/%s.html\">過去ログ倉庫 %s.html</A>\n",zz_bs,zz_soko,tmp,tmp);

	printf("<BR>まだ、dat -> html 変換が行われていない場合が良くあります。\n");

	printf("<BR><A HREF=\"http://teri.2ch.net/test/read.cgi?bbs=accuse&key=980507715&ls=30\">ここ</A>で訴えると、過去ログ整理をしてくれる場合があるかもです。\n");

	

	

	printf("</TD></TR></TABLE>\n")		;

	

	printf("<BR><BR><BR>\n")		;

	html_banner()	;

	printf("<BR><BR><BR>\n")		;

	

	printf("<FONT SIZE=-2>%s</FONT>\n",CGIVER)	;

	printf("</BODY>\n")	;

	printf("</HTML>\n")	;

	

	if(BigBuffer)	free(BigBuffer)	;

	BigBuffer = NULL			;

	

	exit(0)	;

	}
	else

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

	/*								*/

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

	char	*zz_GetString(char *dst,char *tgt)

	{
		sprintf(doko,"../%.50s/kako/%.50s/%.50s.dat",zz_bs,zz_soko,tmp)	;

		if(!stat(doko,&CountStat))

		int	i			;

		int	ch = (int)'&'		;

		char	*kk0			;

		char	*kk1			;

		char	*kk = zz_query_string	;

		for(i=0;i<200;i++)

		{
		printf("隊長! 過去ログ倉庫で、<A HREF=\"/%s/kako/%s/%s.dat\">スレッド %s.dat</A> を発見しました。<BR><B><FONT SIZE=+1 COLOR=RED>が</FONT></B>、しかしまだ html化されていません。残念、待つしかない。\n",zz_bs,zz_soko,tmp,tmp);

			if(!strncmp(kk,tgt,strlen(tgt)))

			{

				kk0 = kk			;

				kk1 = strchr(kk,ch)		;

				if(kk1)	*kk1 = '\0'			;

				strncpy(dst,kk0 + strlen(tgt) + 1,1024) ;

				dst[1024 -1] = '\0';

				if(kk1)	*kk1 = ch			;

				return	dst				;

			}

			kk = strchr(kk,ch)				;

			if(!kk)		break				;

			kk ++						;

		}
		else

		*dst = '\0'	;

		return	dst	;

	}

	int whatKanji(unsigned char *str)

	{

	    int val = 0;

	    unsigned char b1, b2, b3;

	

	    b1 = *str++;

	    b2 = *str++;

	    b3 = *str;

	    if (b1 == 0x1b) {

	        if (b2 == '$' && b3 == 'B') return 16;

	        if (b2 == '$' && b3 == '@') return 32;

	        if (b2 == '(' && b3 == 'J') return 64;

	        if (b2 == '(' && b3 == 'B') return 128;

	        return 0;

	    }

	    if ( b1 >= 0xa0 && b1 <= 0xdf) val |= 1;

	    if ((b1 >= 0x81 && b1 <= 0x9f ||

	         b1 >= 0xe0 && b1 <= 0xfc) &&

	        (b2 >= 0x40 && b2 <= 0xfc && b2 != 0x7f)) val |= 2;

	    if (b1 == 0x8e && (b2 >= 0xa0 && b2 <= 0xdf)) val |= 4;

	    if ((b1 >= 0xa1 && b1 <= 0xfe) &&

	        (b2 >= 0xa1 && b1 <= 0xfe)) val |= 8;

	

	    return val;

	}

	#ifdef	TYPE_TERI

	char	*findSplitter(char *stt,int sp)

	{

		unsigned char	*p = (unsigned char*)stt	;

		char	ss = (unsigned char)(sp & 0x00ff)		;

	

		while(*p)

		{
		printf("<A HREF=\"/%s/kako/\">過去ログ倉庫</A>にもありませんでした。<BR>問い合わせても見つかる可能\性はほとんどありません。\n",zz_bs);

	/*

			if( *p >= 0xa0 && *p <= 0xdf)	{p++	;continue;}

			if((*p >= 0x81 && *p <= 0x9f || *p >= 0xe0 && *p <= 0xfc))	{p += 2	;continue;}

	*/

			if(*p == ss && *(p+1) == '>')		return	p	;

			p++				;

		}
		return	NULL		;

	}
}



printf("</BODY>\n")	;

printf("</HTML>\n")	;



if(BigBuffer)	free(BigBuffer)	;

BigBuffer = NULL			;



exit(0)	;

}

int	html_error999(char *mes)

{

	char	zz_soko[256]	;

	char	tmp[256]	;

	*tmp = '\0'	;

	strcpy(tmp,LastChar(zz_ky,"/"))	;

	strncpy(zz_soko,tmp,3)	;



printf("<HTML><HEAD>")	;

printf("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=x-sjis\">")	;

printf("<TITLE>ERROR</TITLE>")	;

printf("</HEAD>\n")	;



printf("<BODY TEXT=\"#000000\" BGCOLOR=\"#EFEFEF\" link=\"#0000FF\" alink=\"#FF0000\" vlink=\"#660099\">\n")	;



printf("\n")		;

printf("<TABLE border=1 cellspacing=11 cellpadding=2 width=95% bgcolor=\"#EFEFEF\" align=center><TR><TD>\n");

printf("えらー、%s<P>\n",mes)		;

printf("bbs = [%s] \n",zz_bs)	;

printf("key = [%s] \n",zz_ky)	;

printf("ls = [%s] \n",zz_ls)		;

printf("st = [%s] \n",zz_st)		;

printf("to = [%s] \n",zz_to)		;

printf("nofirst = [%s]<BR>\n",zz_nf)	;

printf("fileSize = [%d bytes] %dlines<BR>\n",zz_fileSize,lineMax)	;

printf("time=[%02d:%02d:%02d]<BR>\n",tm_now->tm_hour,tm_now->tm_min,tm_now->tm_sec);



printf("<BR>「えらー、そんな板orスレッドないです」の場合はここ倉庫へ Go <BR>")	;

printf("<A HREF=\"/%s/kako/%s/%s.html\">過去ログ倉庫 %s.html</A>\n",zz_bs,zz_soko,tmp,tmp);

printf("<BR>まだ、dat -> html 変換が行われていない場合が良くあります。\n");

printf("<BR><A HREF=\"http://teri.2ch.net/test/read.cgi?bbs=accuse&key=980507715&ls=30\">ここ</A>で訴えると、過去ログ整理をしてくれる場合があるかもです。\n");





printf("</TD></TR></TABLE>\n")		;



printf("<BR><BR><BR>\n")		;

html_banner()	;

printf("<BR><BR><BR>\n")		;



printf("<FONT SIZE=-2>%s</FONT>\n",CGIVER)	;

printf("</BODY>\n")	;

printf("</HTML>\n")	;



if(BigBuffer)	free(BigBuffer)	;

BigBuffer = NULL			;



exit(0)	;

}

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

/*								*/

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

char	*zz_GetString(char *dst,char *tgt)

{

	int	i			;

	int	ch = (int)'&'		;

	char	*kk0			;

	char	*kk1			;

	char	*kk = zz_query_string	;

	for(i=0;i<200;i++)

	#else

	char	*findSplitter(char *stt,int sp)

	{
		if(!strncmp(kk,tgt,strlen(tgt)))

		unsigned char	*p = (unsigned char*)stt	;

		char	ss = (unsigned char)(sp & 0x00ff)		;

	

		while(*p)

		{
			kk0 = kk			;

			kk1 = strchr(kk,ch)		;

			if(kk1)	*kk1 = '\0'			;

			strncpy(dst,kk0 + strlen(tgt) + 1,1024) ;

			dst[1024 -1] = '\0';

			if(kk1)	*kk1 = ch			;

			return	dst				;

			if( *p >= 0xa0 && *p <= 0xdf)	{p++	;continue;}

			if((*p >= 0x81 && *p <= 0x9f || *p >= 0xe0 && *p <= 0xfc))	{p += 2	;continue;}

	/*		if((*p >= 0x40 && *p <= 0xfc && *p != 0x7f))	p += 2	;*/

			if(*p == ss)	return	p	;

			p++				;

		}
		kk = strchr(kk,ch)				;

		if(!kk)		break				;

		kk ++						;

		return	NULL		;

	}
	*dst = '\0'	;

	return	dst	;

}

int whatKanji(unsigned char *str)

{

    int val = 0;

    unsigned char b1, b2, b3;



    b1 = *str++;

    b2 = *str++;

    b3 = *str;

    if (b1 == 0x1b) {

        if (b2 == '$' && b3 == 'B') return 16;

        if (b2 == '$' && b3 == '@') return 32;

        if (b2 == '(' && b3 == 'J') return 64;

        if (b2 == '(' && b3 == 'B') return 128;

        return 0;

    }

    if ( b1 >= 0xa0 && b1 <= 0xdf) val |= 1;

    if ((b1 >= 0x81 && b1 <= 0x9f ||

         b1 >= 0xe0 && b1 <= 0xfc) &&

        (b2 >= 0x40 && b2 <= 0xfc && b2 != 0x7f)) val |= 2;

    if (b1 == 0x8e && (b2 >= 0xa0 && b2 <= 0xdf)) val |= 4;

    if ((b1 >= 0xa1 && b1 <= 0xfe) &&

        (b2 >= 0xa1 && b1 <= 0xfe)) val |= 8;



    return val;

}

#ifdef	TYPE_TERI

char	*findSplitter(char *stt,int sp)

{

	unsigned char	*p = (unsigned char*)stt	;

	char	ss = (unsigned char)(sp & 0x00ff)		;



	while(*p)

	#endif

	int	res_split(char **s,char *p)

	{
/*

		if( *p >= 0xa0 && *p <= 0xdf)	{p++	;continue;}

		if((*p >= 0x81 && *p <= 0x9f || *p >= 0xe0 && *p <= 0xfc))	{p += 2	;continue;}

*/

		if(*p == ss && *(p+1) == '>')		return	p	;

		p++				;

		int	i	;

		char	*p0	;

	

		for(i=0;i<5;i++) s[i] = KARA	;

	

		s[0] = p	;

		for(i=1;i<5;i++)

		{

	#ifdef	TYPE_TERI

			p0  = findSplitter(s[i-1],'<')	;

			if(!p0)	{return 0;}

			*p0 = '\0'	;

			p0++		;

			*p0 = '\0'	;

			p0++		;

			s[i] = p0	;

	#else

			p0  = findSplitter(s[i-1],',')	;

			if(!p0)	{return 0;}

			*p0 = '\0'	;

			p0++		;

			s[i] = p0	;

	#endif

		}

		return	1		;

	}
	return	NULL		;

}

#else

char	*findSplitter(char *stt,int sp)

{

	unsigned char	*p = (unsigned char*)stt	;

	char	ss = (unsigned char)(sp & 0x00ff)		;



	while(*p)

	int	dump_out16(char *d)

	{
		if( *p >= 0xa0 && *p <= 0xdf)	{p++	;continue;}

		if((*p >= 0x81 && *p <= 0x9f || *p >= 0xe0 && *p <= 0xfc))	{p += 2	;continue;}

/*		if((*p >= 0x40 && *p <= 0xfc && *p != 0x7f))	p += 2	;*/

		if(*p == ss)	return	p	;

		p++				;

		unsigned char	*p = (unsigned char*)d	;

		printf("\n\n<!-- ")	;

		while(*p)

		{

			printf(",%02x",*p)	;

			p++	;

		}

		printf(" -->\n\n")	;

	}
	return	NULL		;

}

#endif

int	res_split(char **s,char *p)

{

	int	i	;

	char	*p0	;



	for(i=0;i<5;i++) s[i] = KARA	;



	s[0] = p	;

	for(i=1;i<5;i++)

	int	IsBusy2ch()

	{
#ifdef	TYPE_TERI

		p0  = findSplitter(s[i-1],'<')	;

		if(!p0)	{return 0;}

		*p0 = '\0'	;

		p0++		;

		*p0 = '\0'	;

		p0++		;

		s[i] = p0	;

#else

		p0  = findSplitter(s[i-1],',')	;

		if(!p0)	{return 0;}

		*p0 = '\0'	;

		p0++		;

		s[i] = p0	;

#endif

		if(tm_now->tm_hour < LIMIT_AM || LIMIT_PM <= tm_now->tm_hour)	return	1	;

		return	0	;

	}
	return	1		;

}

int	dump_out16(char *d)

{

	unsigned char	*p = (unsigned char*)d	;

	printf("\n\n<!-- ")	;

	while(*p)

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

	/*	えらー							*/

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

	char *LastChar(char *src,char *c)

	{
		printf(",%02x",*p)	;

		p++	;

		char	*p			;

		if(!*src)	return(src)	;

		p = strstr(src,c)		;

		if(!p)	return(src)		;

		return	LastChar(p+1,c)		;

	/*

		return p+1	;

	*/

	}
	printf(" -->\n\n")	;

}

int	IsBusy2ch()

{

	if(tm_now->tm_hour < LIMIT_AM || LIMIT_PM <= tm_now->tm_hour)	return	1	;

	return	0	;

}

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

/*	えらー							*/

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

char *LastChar(char *src,char *c)

{

	char	*p			;

	if(!*src)	return(src)	;

	p = strstr(src,c)		;

	if(!p)	return(src)		;

	return	LastChar(p+1,c)		;

/*

	return p+1	;

*/

}

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

/*	HTML HEADER						*/

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

int	html_head(char *title,int line)

{

printf("<HTML>")	;

printf("<HEAD>")	;

printf("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=x-sjis\">")	;



printf("<TITLE>%s </TITLE>",title)	;



if(strcmp(zz_im,"true"))	/* no imode	*/

{

printf("<SCRIPT LANGUAGE=JavaScript>")	;

printf("<!--\n")	;

printf("N=g(\"NAME\");")	;

printf("M=g(\"MAIL\");")	;

printf("function g(key,tmp1,tmp2,xx1,xx2,xx3){")	;

printf("tmp1=\" \"+document.cookie+\";\";")	;

printf("xx1=xx2=0;")	;

printf("len=tmp1.length;")	;

printf("while(xx1<len){")	;

printf("xx2=tmp1.indexOf(\";\",xx1);")	;

printf("tmp2=tmp1.substring(xx1+1,xx2);")	;

printf("xx3=tmp2.indexOf(\"=\");")	;

printf("if(tmp2.substring(0,xx3)==key){")	;

printf("return(unescape(tmp2.substring(xx3+1,xx2-xx1-1)));")	;

printf("}")	;

printf("xx1=xx2+1;")	;

printf("}return(\"\");")	;

printf("}\n")	;

printf("// -->")	;

printf("</SCRIPT>")	;

}

printf("</HEAD>")	;



printf("<BODY TEXT=black BGCOLOR=#EFEFEF link=blue alink=red vlink=#660099>")	;



if(strcmp(zz_im,"true"))	/* no imode	*/

{

printf("<A HREF=\"/%s/index2.html\">■掲示板に戻る■</A>",zz_bs)			;

printf(" <A HREF=\"%s?bbs=%s&key=%s\">レスを全部読む</A>",CGINAME,zz_bs,zz_ky)	;

printf(" <A HREF=\"%s?bbs=%s&key=%s&ls=100\">最新レス100</A>",CGINAME,zz_bs,zz_ky)	;

}

else

{

printf("<A HREF=\"/%s/i/\">■掲示板に戻る■</A>",zz_bs)			;

printf(" <A HREF=\"%s?bbs=%s&key=%s&st=1&st=%d&imode=true\">レスを最初から読む</A>",CGINAME,zz_bs,zz_ky,RES_IMODE)	;

printf(" <A HREF=\"%s?bbs=%s&key=%s&ls=%d&imode=true\">最新レス%d</A>",CGINAME,zz_bs,zz_ky,RES_IMODE,RES_IMODE)	;

}





if(line > RES_RED)

{

printf("<P><TABLE><TR><TD BGCOLOR=RED>\n")	;

printf("<FONT COLOR=WHITE><BR><BR>レス数が %d を超えています。残念ながら全部は表\示しません。<BR><BR></FONT>\n",RES_RED,RES_RED)	;

printf("</TD></TR></TABLE>\n")	;

}

else if(line > RES_REDZONE)

{

printf("<P><TABLE><TR><TD BGCOLOR=RED>\n")	;

printf("<FONT COLOR=WHITE>レス数が %d を超えています。%dを超えると表\示できなくなるよ。</FONT>\n",RES_REDZONE,RES_RED)	;

printf("</TD></TR></TABLE>\n")	;

}

else if(line > RES_YELLOW)

{

printf("<P><TABLE><TR><TD BGCOLOR=YELLOW>\n")	;

printf("レス数が %d を超えています。%dを超えると表\示できなくなるよ。\n",RES_YELLOW,RES_RED)	;

printf("</TD></TR></TABLE>\n")	;

}



printf("<P><FONT SIZE=+1 COLOR=red>%s </FONT>",title)	;

}

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

/*	HTML FOOTER						*/

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

int	html_foot(int line)

{

	if(!strcmp(zz_im,"true"))	return	html_foot_im()	;

if(line <= RES_RED)

{

printf("<form method=POST action=\"bbs.cgi\">")	;

/**/

printf("<input type=submit value=\"書き込む\" name=submit> 名前: ")	;



printf("<SCRIPT Language=JavaScript>")	;

printf("<!--\n")	;

printf("document.write(\"<INPUT TYPE=text NAME=FROM SIZE=19 VALUE=\",N,\"> E-mail<font size=1> (省略可) </font>: <INPUT TYPE=text NAME=mail SIZE=19 VALUE=\",M,\">\");\n")	;

printf("// -->")	;

printf("</SCRIPT>")	;



printf("<NOSCRIPT>")	;

printf("<INPUT TYPE=text NAME=FROM SIZE=19>")	;

printf(" E-mail<font size=1> (省略可) </font>: ")	;

printf("<INPUT TYPE=text NAME=mail SIZE=19>")	;

printf("</NOSCRIPT>\n")	;



printf("<BR><textarea rows=5 cols=70 wrap=OFF name=MESSAGE></textarea>")	;

printf("<input type=hidden name=bbs value=%s>",zz_bs)	;

printf("<input type=hidden name=key value=%s>",zz_ky)	;

printf("<input type=hidden name=time value=%ld>",currentTime)	;

/**/

printf("</form>")	;

}



/*html_banner()		;*/



printf("</DL><P>%s</BODY></HTML>\n",CGIVER)	;

}

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

/*	HTML FOOTER						*/

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

int	html_foot_im(void)

{

printf("<FORM METHOD=POST ACTION=\"./bbs.cgi\">\n");

printf("<INPUT TYPE=submit VALUE=\"かきこむ\" name=\"submit\"> ");

printf("NAME:<INPUT TYPE=text NAME=FROM SIZE=20 VALUE=\"\">");

printf("MAIL:<INPUT TYPE=text NAME=mail SIZE=20 VALUE=\"\">");

printf("<br>");

printf("<INPUT TYPE=hidden name=time VALUE=%ld>\n",currentTime);

printf("<INPUT TYPE=hidden name=bbs VALUE=%s>\n",zz_bs);

printf("<INPUT TYPE=hidden name=key VALUE=%s>\n",zz_ky);

printf("<TEXTAREA ROWS=5 COLS=60 wrap=off NAME=MESSAGE></TEXTAREA>\n");

printf("</FORM><br>\n")	;



/*html_banner()		;*/



printf("<P>%s</BODY></HTML>\n",CGIVER)	;

}

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

/*	Replace							*/

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

char	*doReplace(char *des,char *str0,char *str1)

{

	char	*p,*ret	= NULL	;

	char	t[SIZE_BUF]	;

	strcpy(t,des)		;

	p = strstr(t,str0)	;

	if(!p)	return	ret	;

	*p = '\0'		;

	strcpy(des,t)		;

	strcat(des,str1)	;

	ret = des + strlen(des)	;

	strcat(des,p+strlen(str0))	;

	return	ret		;

}

int	someReplace(char *src,char *des,char *str0,char *str1)

{

	char	*last 			;

	strcpy(des,src)			;



	last = des			;

	while(last)

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

	/*	HTML HEADER						*/

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

	int	html_head(char *title,int line)

	{
		last = doReplace(last,str0,str1)	;

	printf("<HTML>")	;

	printf("<HEAD>")	;

	printf("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=x-sjis\">")	;

	

	printf("<TITLE>%s </TITLE>",title)	;

	

	if(strcmp(zz_im,"true"))	/* no imode	*/

	{

	printf("<SCRIPT LANGUAGE=JavaScript>")	;

	printf("<!--\n")	;

	printf("N=g(\"NAME\");")	;

	printf("M=g(\"MAIL\");")	;

	printf("function g(key,tmp1,tmp2,xx1,xx2,xx3){")	;

	printf("tmp1=\" \"+document.cookie+\";\";")	;

	printf("xx1=xx2=0;")	;

	printf("len=tmp1.length;")	;

	printf("while(xx1<len){")	;

	printf("xx2=tmp1.indexOf(\";\",xx1);")	;

	printf("tmp2=tmp1.substring(xx1+1,xx2);")	;

	printf("xx3=tmp2.indexOf(\"=\");")	;

	printf("if(tmp2.substring(0,xx3)==key){")	;

	printf("return(unescape(tmp2.substring(xx3+1,xx2-xx1-1)));")	;

	printf("}")	;

	printf("xx1=xx2+1;")	;

	printf("}return(\"\");")	;

	printf("}\n")	;

	printf("// -->")	;

	printf("</SCRIPT>")	;

	}
	return	1			;

}

int	hrefStop(char x)

{

	if('A' <= x && x <= 'Z')	return	0	;

	if('a' <= x && x <= 'z')	return	0	;

	if('0' <= x && x <= '9')	return	0	;

	if(x == '#')	return	0	;

	if(x == '/')	return	0	;

	if(x == '~')	return	0	;

	if(x == '_')	return	0	;

	if(x == '.')	return	0	;

	if(x == ',')	return	0	;

	if(x == '$')	return	0	;

	if(x == '%')	return	0	;

	if(x == '&')	return	0	;

	if(x == '@')	return	0	;

	if(x == '?')	return	0	;

	if(x == '=')	return	0	;

	if(x == '-')	return	0	;

	if(x == '+')	return	0	;

	if(x == '*')	return	0	;

	if(x == ';')	return	0	;

	if(x == ':')	return	0	;

	if(x == '!')	return	0	;

	if(x == '^')	return	0	;

	if(x == '`')	return	0	;

	if(x == '|')	return	0	;

	if(x == '[')	return	0	;

	if(x == ']')	return	0	;

	if(x == '{')	return	0	;

	if(x == '}')	return	0	;

	if(x == '\\')	return	0	;

	return	1	;

}

int	cutWordOff(char *src,char *word)

{

	char	*p = strstr(src,word)	;

	if(!p)	return	0		;

	*p = '\0'			;

	return	1			;

}

int	ExistHlinkX(char *tgt,char *src,char *url,char *hrefStr)

{

	char	*p			;

	char	*u			;

	p = strstr(src,tgt)		;

	if(!p)	return	0		;	/*NASHI*/

	for(u=url;*p;p++)

	printf("</HEAD>")	;

	

	printf("<BODY TEXT=black BGCOLOR=#EFEFEF link=blue alink=red vlink=#660099>")	;

	

	if(strcmp(zz_im,"true"))	/* no imode	*/

	{
		if(hrefStop(*p))	break	;

		*u = *p			;

		u++			;

	printf("<A HREF=\"/%s/index2.html\">■掲示板に戻る■</A>",zz_bs)			;

	printf(" <A HREF=\"%s?bbs=%s&key=%s\">レスを全部読む</A>",CGINAME,zz_bs,zz_ky)	;

	printf(" <A HREF=\"%s?bbs=%s&key=%s&ls=100\">最新レス100</A>",CGINAME,zz_bs,zz_ky)	;

	}
	*u = '\0'			;

	/*-- " 等の削除 --*/

	cutWordOff(url,""")	;

/*	cutWordOff(url,";")		;*/

	/*---------------------*/

	sprintf(hrefStr,"<A HREF=\"%.1024s\" TARGET=\"_blank\">%.1024s</A>",url,url)	;

	//sprintf(hrefStr,"<A HREF=\"%s\" TARGET=\"_blank\">%s</A>",url,url)	;

	return	1			;	/*ARI*/

}

int	ExistHlink(char *src,char *h0,char *h1)

{

	if(ExistHlinkX("http://",src,h0,h1))	return	1;

	if(ExistHlinkX("ftp://",src,h0,h1))	return	1;

	return	0			;

}

int	hlinkReplace(char *src)

{

	char	*last = src		;

	char	hlink0[SIZE_BUF]	;

	char	hlink1[SIZE_BUF]	;



	while(last)

	else

	{
		if(!ExistHlink(last,hlink0,hlink1))	break	;

		last = doReplace(last,hlink0,hlink1)		;

	printf("<A HREF=\"/%s/i/\">■掲示板に戻る■</A>",zz_bs)			;

	printf(" <A HREF=\"%s?bbs=%s&key=%s&st=1&st=%d&imode=true\">レスを最初から読む</A>",CGINAME,zz_bs,zz_ky,RES_IMODE)	;

	printf(" <A HREF=\"%s?bbs=%s&key=%s&ls=%d&imode=true\">最新レス%d</A>",CGINAME,zz_bs,zz_ky,RES_IMODE,RES_IMODE)	;

	}
	return	1			;

}





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

/*	END OF THIS FILE					*/

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

	

	if(line > RES_RED)

	{

	printf("<P><TABLE><TR><TD BGCOLOR=RED>\n")	;

	printf("<FONT COLOR=WHITE><BR><BR>レス数が %d を超えています。残念ながら全部は表\示しません。<BR><BR></FONT>\n",RES_RED,RES_RED)	;

	printf("</TD></TR></TABLE>\n")	;

	}

	else if(line > RES_REDZONE)

	{

	printf("<P><TABLE><TR><TD BGCOLOR=RED>\n")	;

	printf("<FONT COLOR=WHITE>レス数が %d を超えています。%dを超えると表\示できなくなるよ。</FONT>\n",RES_REDZONE,RES_RED)	;

	printf("</TD></TR></TABLE>\n")	;

	}

	else if(line > RES_YELLOW)

	{

	printf("<P><TABLE><TR><TD BGCOLOR=YELLOW>\n")	;

	printf("レス数が %d を超えています。%dを超えると表\示できなくなるよ。\n",RES_YELLOW,RES_RED)	;

	printf("</TD></TR></TABLE>\n")	;

	}

	

	printf("<P><FONT SIZE=+1 COLOR=red>%s </FONT>",title)	;

	}

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

	/*	HTML FOOTER						*/

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

	int	html_foot(int line)

	{

		if(!strcmp(zz_im,"true"))	return	html_foot_im()	;

	if(line <= RES_RED)

	{

	printf("<form method=POST action=\"bbs.cgi\">")	;

	/**/

	printf("<input type=submit value=\"書き込む\" name=submit> 名前: ")	;

	

	printf("<SCRIPT Language=JavaScript>")	;

	printf("<!--\n")	;

	printf("document.write(\"<INPUT TYPE=text NAME=FROM SIZE=19 VALUE=\",N,\"> E-mail<font size=1> (省略可) </font>: <INPUT TYPE=text NAME=mail SIZE=19 VALUE=\",M,\">\");\n")	;

	printf("// -->")	;

	printf("</SCRIPT>")	;

	

	printf("<NOSCRIPT>")	;

	printf("<INPUT TYPE=text NAME=FROM SIZE=19>")	;

	printf(" E-mail<font size=1> (省略可) </font>: ")	;

	printf("<INPUT TYPE=text NAME=mail SIZE=19>")	;

	printf("</NOSCRIPT>\n")	;

	

	printf("<BR><textarea rows=5 cols=70 wrap=OFF name=MESSAGE></textarea>")	;

	printf("<input type=hidden name=bbs value=%s>",zz_bs)	;

	printf("<input type=hidden name=key value=%s>",zz_ky)	;

	printf("<input type=hidden name=time value=%ld>",currentTime)	;

	/**/

	printf("</form>")	;

	}

	

	/*html_banner()		;*/

	

	printf("</DL><P>%s</BODY></HTML>\n",CGIVER)	;

	}

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

	/*	HTML FOOTER						*/

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

	int	html_foot_im(void)

	{

	printf("<FORM METHOD=POST ACTION=\"./bbs.cgi\">\n");

	printf("<INPUT TYPE=submit VALUE=\"かきこむ\" name=\"submit\"> ");

	printf("NAME:<INPUT TYPE=text NAME=FROM SIZE=20 VALUE=\"\">");

	printf("MAIL:<INPUT TYPE=text NAME=mail SIZE=20 VALUE=\"\">");

	printf("<br>");

	printf("<INPUT TYPE=hidden name=time VALUE=%ld>\n",currentTime);

	printf("<INPUT TYPE=hidden name=bbs VALUE=%s>\n",zz_bs);

	printf("<INPUT TYPE=hidden name=key VALUE=%s>\n",zz_ky);

	printf("<TEXTAREA ROWS=5 COLS=60 wrap=off NAME=MESSAGE></TEXTAREA>\n");

	printf("</FORM><br>\n")	;

	

	/*html_banner()		;*/

	

	printf("<P>%s</BODY></HTML>\n",CGIVER)	;

	}

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

	/*	Replace							*/

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

	char	*doReplace(char *des,char *str0,char *str1)

	{

		char	*p,*ret	= NULL	;

		char	t[SIZE_BUF]	;

		strcpy(t,des)		;

		p = strstr(t,str0)	;

		if(!p)	return	ret	;

		*p = '\0'		;

		strcpy(des,t)		;

		strcat(des,str1)	;

		ret = des + strlen(des)	;

		strcat(des,p+strlen(str0))	;

		return	ret		;

	}

	int	someReplace(char *src,char *des,char *str0,char *str1)

	{

		char	*last 			;

		strcpy(des,src)			;

	

		last = des			;

		while(last)

		{

			last = doReplace(last,str0,str1)	;

		}

		return	1			;

	}

	int	hrefStop(char x)

	{

		if('A' <= x && x <= 'Z')	return	0	;

		if('a' <= x && x <= 'z')	return	0	;

		if('0' <= x && x <= '9')	return	0	;

		if(x == '#')	return	0	;

		if(x == '/')	return	0	;

		if(x == '~')	return	0	;

		if(x == '_')	return	0	;

		if(x == '.')	return	0	;

		if(x == ',')	return	0	;

		if(x == '$')	return	0	;

		if(x == '%')	return	0	;

		if(x == '&')	return	0	;

		if(x == '@')	return	0	;

		if(x == '?')	return	0	;

		if(x == '=')	return	0	;

		if(x == '-')	return	0	;

		if(x == '+')	return	0	;

		if(x == '*')	return	0	;

		if(x == ';')	return	0	;

		if(x == ':')	return	0	;

		if(x == '!')	return	0	;

		if(x == '^')	return	0	;

		if(x == '`')	return	0	;

		if(x == '|')	return	0	;

		if(x == '[')	return	0	;

		if(x == ']')	return	0	;

		if(x == '{')	return	0	;

		if(x == '}')	return	0	;

		if(x == '\\')	return	0	;

		return	1	;

	}

	int	cutWordOff(char *src,char *word)

	{

		char	*p = strstr(src,word)	;

		if(!p)	return	0		;

		*p = '\0'			;

		return	1			;

	}

	int	ExistHlinkX(char *tgt,char *src,char *url,char *hrefStr)

	{

		char	*p			;

		char	*u			;

		p = strstr(src,tgt)		;

		if(!p)	return	0		;	/*NASHI*/

		for(u=url;*p;p++)

		{

			if(hrefStop(*p))	break	;

			*u = *p			;

			u++			;

		}

		*u = '\0'			;

		/*-- " 等の削除 --*/

		cutWordOff(url,""")	;

	/*	cutWordOff(url,";")		;*/

		/*---------------------*/

		sprintf(hrefStr,"<A HREF=\"%.1024s\" TARGET=\"_blank\">%.1024s</A>",url,url)	;

		//sprintf(hrefStr,"<A HREF=\"%s\" TARGET=\"_blank\">%s</A>",url,url)	;

		return	1			;	/*ARI*/

	}

	int	ExistHlink(char *src,char *h0,char *h1)

	{

		if(ExistHlinkX("http://",src,h0,h1))	return	1;

		if(ExistHlinkX("ftp://",src,h0,h1))	return	1;

		return	0			;

	}

	int	hlinkReplace(char *src)

	{

		char	*last = src		;

		char	hlink0[SIZE_BUF]	;

		char	hlink1[SIZE_BUF]	;

	

		while(last)

		{

			if(!ExistHlink(last,hlink0,hlink1))	break	;

			last = doReplace(last,hlink0,hlink1)		;

		}

		return	1			;

	}

	

	

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

	/*	END OF THIS FILE					*/

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


YukiWiki 1.6.2 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by aki.