#include #include #include #include #include #include #include #include #include "read2ch.h" #define CGINAME "read.cgi" #define CGIVER "read.cgi ver11 (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("
\n") ; /**/ printf("\n") ; printf("\n") ; printf("\n") ; printf("\n") ; printf("\n") ; printf("\n") ; printf("
 \n") ; printf("| おすすめ \n") ; printf("| 2chサーバ監視所 \n") ; printf("| BinboServer \n") ; printf("| Hikky.Zansu.com \n") ; printf("| 無料サービス \n") ; printf("|
\n") ; /**/ printf("
\n") ; printf("
\n") ; printf("さぶドメインシリーズ登場
\n") ; printf("   *****.syo-ten.com
\n") ; printf("   *****.gasuki.com
\n") ; printf("   *****.zansu.com
\n") ; printf("おすきな名前を無料で使えます。早い者勝ち。
\n") ; printf("工夫しだいで、楽しさ100倍。\n") ; printf("

") ; printf("深夜でも快適なレンタルサーバサービス(n)") ; printf("\n") ; printf("
あの巨大なサイトも使っています。\n") ; printf("

\n") ; printf("

\n") ; } #ifdef CM_BBSPINK /****************************************************************/ /* HTML BANNER */ /****************************************************************/ int html_banner() { printf("

\n") ; printf("おいでませアダルトサイト
\n") ; printf("
深夜でも快適なレンタルサーバサービス
\n") ; printf("
\n") ; printf("

\n") ; } #else /****************************************************************/ /* HTML BANNER */ /****************************************************************/ int html_banner() { printf("

\n") ; printf("") ; printf("深夜でも快適なレンタルサーバサービス") ; printf("\n") ; printf("
あの巨大なサイトも使っています。\n") ; printf("

\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) ; p[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("

") ; } 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]

\n",line,BigLine[line]);return 0;*/ if(!out_resN) /* Can I write header ? */ { strncpy(p,BigLine[0],1024) ; p[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("

") ; } } out_resN ++ ; strncpy(p,BigLine[line],1024) ; p[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("
") ; printf("%d",lineNo) ; printf(" 名前:") ; if(*r1) {printf("",r1) ;} else {printf("") ;} printf("%s ",r0) ; if(*r1) {printf("") ;} else {printf("") ;} printf(" 投稿日:%s",s[2]) ; printf("
") ; printf("%s",r3) ; printf("

") ; } else { printf("
") ; printf("%d",lineNo) ; printf(" 名前:"); printf("%s","") ; printf("") ; printf(" 投稿日:[ここ壊れています]") ; printf("
") ; printf("[ここ壊れています]") ; printf("

") ; } if(IsBusy2ch() && out_resN > RES_NORMAL) { printf(" 次の %d レスを見る\n", CGINAME,zz_bs,zz_ky,lineNo,lineNo+RES_NORMAL,RES_NORMAL) ; printf(" 最新レス %d\n", CGINAME,zz_bs,zz_ky,RES_NORMAL,RES_NORMAL) ; printf(" (%02d:00PM - %02d:00AM の間一気に全部は読めません)
\n",LIMIT_PM-12,LIMIT_AM) ; return 1 ; } } else /* imode */ { if(*r3) { printf("

[%d:",lineNo) ; if(*s[1]) {printf("",r1) ;} printf("%s ",r0) ; if(*s[1]) {printf("") ;} printf("(%s)]",s[2]) ; printf("
%s

",r3) ; printf("
\n") ; } else { printf("

[%d:",lineNo) ; printf("ここ壊れています]

") ; printf("
\n") ; } if(out_resN > RES_IMODE) { printf(" 次の %d レスを見る\n", CGINAME,zz_bs,zz_ky,lineNo,lineNo+RES_IMODE,RES_IMODE) ; printf(" 最新レス %d
\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 nn_to) continue ; if(nn_ls && line < lineMax - nn_ls) continue ; } if(out_html(line,lineNo)) break ; } 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 */ { if(!nn_st && !nn_to && !nn_ls) nn_ls = RES_IMODE ; } 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) { html_error("そんな板orスレッドないです。") ; return 0 ; } fread(BigBuffer,zz_fileSize,1,fp) ; fclose(fp) ; BigBuffer[zz_fileSize] = '\0' ; for(i=0;i RES_RED) break ; line ++ ; p++ ; } 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); } #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 } /****************************************************************/ /* 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,"お問い合わせ先"); } printf("") ; printf("") ; printf("%s",mes) ; printf("\n") ; printf("\n") ; /*printf("\n") ;*/ printf("\n") ; printf("

%s
\n",mes) ; printf("

") ; printf("
1 名前:%s投稿日:2001/04/12(木) 15:11
%s

%s
\n",CGIVER,mes,comcom) ; if(strstr(zz_http_user_agent,"Katjusha")) { printf("
2 名前:%s投稿日:2001/04/12(木) 15:11
",CGIVER) ; /*printf("%s",zz_http_user_agent) ;*/ printf("
") ; printf("

") ; printf("http://www.maido3.com/server/") ; printf("
") ; printf("さぶドメインシリーズ登場
") ; printf("   *****.syo-ten.com
") ; printf("   *****.gasuki.com
") ; printf("   *****.zansu.com
") ; printf("おすきな名前を無料で使えます。早い者勝ち。
") ; printf("工夫しだいで、楽しさ100倍。") ; printf("

") ; printf("深夜でも快適なレンタルサーバサービス") ; printf("") ; printf("
あの巨大なサイトも使っています。

") ; printf("") ; printf("") ; printf("") ; printf("") ; printf("") ; printf("") ; printf("
 ") ; printf("| おすすめ ") ; printf("| 2chサーバ監視所 ") ; printf("| BinboServer ") ; printf("| Hikky.Zansu.com ") ; printf("| 無料サービス ") ; printf("|
") ; printf("

\n") ; } printf("

\n") ; printf("
\n") ; printf("
\n") ; html_bannerNew() ; printf("
\n") ; printf("

\n") ; printf("%s

\n",CGIVER) ; if(strstr(mes,"そんな")) { sprintf(doko,"../%.50/kako/%.50/%.50.html",zz_bs,zz_soko,tmp) ; if(!stat(doko,&CountStat)) { printf("隊長! 過去ログ倉庫で、スレッド %s.html を発見しました。\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("隊長! 過去ログ倉庫で、スレッド %s.dat を発見しました。
、しかしまだ html化されていません。残念、待つしかない。\n",zz_bs,zz_soko,tmp,tmp); } else { printf("過去ログ倉庫にもありませんでした。
問い合わせても見つかる可能\性はほとんどありません。\n",zz_bs); } } } printf("\n") ; printf("\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("") ; printf("") ; printf("ERROR") ; printf("\n") ; printf("\n") ; printf("\n") ; printf("
\n"); printf("えらー、%s

\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]
\n",zz_nf) ; printf("fileSize = [%d bytes] %dlines
\n",zz_fileSize,lineMax) ; printf("time=[%02d:%02d:%02d]
\n",tm_now->tm_hour,tm_now->tm_min,tm_now->tm_sec); printf("
「えらー、そんな板orスレッドないです」の場合はここ倉庫へ Go
") ; printf("過去ログ倉庫 %s.html\n",zz_bs,zz_soko,tmp,tmp); printf("
まだ、dat -> html 変換が行われていない場合が良くあります。\n"); printf("
ここで訴えると、過去ログ整理をしてくれる場合があるかもです。\n"); printf("

\n") ; printf("


\n") ; html_banner() ; printf("


\n") ; printf("%s\n",CGIVER) ; printf("\n") ; printf("\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++) { 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 ++ ; } *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) { /* 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 ; } #else char *findSplitter(char *stt,int sp) { unsigned char *p = (unsigned char*)stt ; char ss = (unsigned char)(sp & 0x00ff) ; while(*p) { 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++ ; } 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++) { #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 ; } int dump_out16(char *d) { unsigned char *p = (unsigned char*)d ; printf("\n\n\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("") ; printf("") ; printf("") ; printf("%s ",title) ; if(strcmp(zz_im,"true")) /* no imode */ { printf("") ; } printf("") ; printf("") ; if(strcmp(zz_im,"true")) /* no imode */ { printf("■掲示板に戻る■",zz_bs) ; printf(" レスを全部読む",CGINAME,zz_bs,zz_ky) ; printf(" 最新レス100",CGINAME,zz_bs,zz_ky) ; } else { printf("■掲示板に戻る■",zz_bs) ; printf(" レスを最初から読む",CGINAME,zz_bs,zz_ky,RES_IMODE) ; printf(" 最新レス%d",CGINAME,zz_bs,zz_ky,RES_IMODE,RES_IMODE) ; } if(line > RES_RED) { printf("

\n") ; printf("

レス数が %d を超えています。残念ながら全部は表\示しません。

\n",RES_RED,RES_RED) ; printf("
\n") ; } else if(line > RES_REDZONE) { printf("

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

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

%s ",title) ; } /****************************************************************/ /* HTML FOOTER */ /****************************************************************/ int html_foot(int line) { if(!strcmp(zz_im,"true")) return html_foot_im() ; if(line <= RES_RED) { printf("

") ; /**/ printf(" 名前: ") ; printf("") ; printf("\n") ; printf("
") ; printf("",zz_bs) ; printf("",zz_ky) ; printf("",currentTime) ; /**/ printf("
") ; } /*html_banner() ;*/ printf("

%s\n",CGIVER) ; } /****************************************************************/ /* HTML FOOTER */ /****************************************************************/ int html_foot_im(void) { printf("

\n"); printf(" "); printf("NAME:"); printf("MAIL:"); printf("
"); printf("\n",currentTime); printf("\n",zz_bs); printf("\n",zz_ky); printf("\n"); printf("

\n") ; /*html_banner() ;*/ printf("

%s\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,"%.1024s",url,url) ; //sprintf(hrefStr,"%s",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 */ /****************************************************************/