■スレッドリストへ戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 最新50
プログラマが2chを救う!?
- 1 :デフォルトの名無しさん :2001/08/25(土) 19:48
-  結局のところ資金面の調達が不可能なのなら、ここ(技術板)が 
 動かないと2ch縮小・停止の情勢・・・。
 
 具体的には・・・
 ・P2Pシステムが代替案としては妥当なのか否か
 ・他の優良アイデアはあるのか
 ・言語は何を選ぶのか
 ・根本的な問題として、2ch(ひろゆき等々)を救う必要があるのか
 
 を話し合っていただきたいと思います。
 では、どうぞ・・・・
 
 
- 924 :デフォルトの名無しさん :01/08/27 23:41 ID:bJ23bC3M
-  typedef struct {//class... 
 char **buffers;//csvの要素
 int rest;//残りのバッファサイズ・・厳密には判定してないので、数バイトは余裕が欲しい
 int isTeri;//
 } ressplitter;
 
 /*
 初期化
 toparrayポインタ配列のアドレス
 buffコピー先のバッファの先頭
 bufsize厳密には判定してないので、数バイトは余裕が欲しい
 */
 void ressplitter_init(ressplitter *This, char **toparray, char *buff, int bufsize/*, bool isteri*/)
 {
 This->buffers = toparray;
 This->rest = bufsize;
 This->isTeri = true;//レス1をstrstr("<>")した結果を設定すべき
 *This->buffers = buff;
 }
 
 /*
 findSplitterの代わり
 レスを全走査するが、コピーと変換(と削除)を同時に行う
 pコピー前のレス(BigBuffer内の1レス)
 istagcut<a href=...>と</a>をcutするか
 Return次のpの先頭
 non-TYPE_TERIなdatには,"<>"は含まれないはずなので、#ifdef TYPE_TERI は略
 */
 const char *ressplitter_split(ressplitter *This, const char *p, int istagcut)
 {
 char *bufp = *This->buffers;
 int bufrest = This->rest;
 while (--bufrest > 0) {
 int ch = *(unsigned char *)p;
 if (isCheck(ch)) {
 switch (ch) {
 case ' ':
 //無意味な空白は1つだけにする
 while (*(p+1) == ' ')
 p++;
 if (*(p+1) != '<')
 break;
 if (*(p+2) == '>') {
 if (bufp == *This->buffers)//名前欄が半角空白の場合
 *bufp++ = ' ';
 p += 3;
 goto Teri_Break;
 }
 
 if (memcmp(p, " <br> ", 6) == 0) {
 if (bufp != *This->buffers && isSJIS1(*(bufp-1))) {
 *bufp++ = ' ';
 }
 memcpy(bufp, "<br>", 4);
 p += 6;
 bufp += 4;
 continue;
 }
 break;
 
 
- 925 :デフォルトの名無しさん :01/08/27 23:42 ID:bJ23bC3M
-  case '<'://醜いが 
 if (*(p+1) == '>') {
 //This->isTeri = true;
 p += 2;
 goto Teri_Break;
 }
 if (istagcut) {
 //if (*(p+1) != 'b' || *(p+2) != 'r') {
 if ((*(p+1) == 'a' && *(p+2) == ' ') || (*(p+1) == '/' && *(p+2) == 'a')) {
 while (*p != '>') {//strchr(p, '>')
 if (*p == '\0')
 goto Break;
 ++p;
 }
 ++p;
 continue;
 }
 }
 break;
 case '&':
 if (memcmp(p, "&", 4) == 0) {
 if (*(p + 4) != ';')
 p += 4 - 1;
 }
 break;
 #ifndefTYPE_TERI
 case 0x81://*"@"
 //if (!This->isTeri) {
 if (memcmp(p, "@`", 4) == 0) {
 ch = ',';
 p += 4 - 1;
 }
 //}
 break;
 case ',':
 //if (!This->isTeri) {
 p++;
 goto Break;
 //}
 //break;
 #endif
 case '\0':
 goto Break;
 //break;
 default:
 break;
 }
 }
 *bufp++ = ch;
 p++;
 }
 
 
- 926 :デフォルトの名無しさん :01/08/27 23:43 ID:bJ23bC3M
-  Teri_Break: 
 //名前欄に','が入っている時にsplitをミスるので、見誤る可能性があるので、
 //This->isTeri = true;
 Break:
 *bufp++ = '\0';
 This->rest -= bufp - *This->buffers;
 *++This->buffers = bufp;
 
 //区切り末の空白を削除
 if (*p == ' ')
 ++p;
 return p;
 }
 
 void splitting_copy(char **s, char *bufp, const char *p, int size)
 {
 ressplitter res;
 ressplitter_init(&res, s, bufp, size);
 
 p = ressplitter_split(&res, p, false);//name
 p = ressplitter_split(&res, p, false);//mail
 p = ressplitter_split(&res, p, false);//date
 p = ressplitter_split(&res, p, LINKTAGCUT && IsBusy2ch());//text
 p = ressplitter_split(&res, p, false);//title
 //IsBusy2ch()を何度も呼ぶのは大きな無駄
 }
 
 
- 927 :デフォルトの名無しさん :01/08/27 23:43 ID:bJ23bC3M
-  その他に直す部分は、 
 先頭のほうに、
 #definefalse(0)
 #definetrue(!false)
 #defineLINKTAGCUTtrue
 
 out_html1()(369-)
 - strncpy(p, BigLine[0], 1024);
 - p[1024 - 1] = '\0';
 - if (!*p)
 - return 1;
 - res_split(s, p);
 + splitting_copy(s, p, BigLine[0], sizeof(p) - 20);
 + if (!*p)
 + return 1;
 
 out_html()(404-)
 - strncpy(p, BigLine[0], 1024);
 - p[1024 - 1] = '\0';
 - if (!*p)
 - return 1;
 - res_split(s, p);
 + splitting_copy(s, p, BigLine[0], sizeof(p) - 20);
 + if (!*p)
 + return 1;
 
 out_html()(421-)
 - strncpy(p, BigLine[line], 1024);
 - p[1024 - 1] = '\0';
 - if (!*p)
 - return 1;
 - res_split(s, p);
 + splitting_copy(s, p, BigLine[line], sizeof(p) - 20);
 + if (!*p)
 + return 1;
 
 hrefStop()
 マクロで定義しなおしているので、
 #if0
 #endif
 ででもはさんでくれ(コンパイルエラーが出る)。
 res_split()とfindSplitter()も必要なくなるが、エラーにはならないので。
 
 
- 928 :デフォルトの名無しさん :01/08/28 00:19 ID:gWXKzR9.
-  わかると思うけど、 
 >>925の
 case '&':
 の下は、当然、
 if (memcmp(p, "&", 4) == 0) {
 ね。
 
 
- 929 :デフォルトの名無しさん :01/08/29 22:04 ID:eQiT7HbI
-  BadAccessってさ、なんでif文を切ってるの? 
 コンパイルした時にダイナミックステップが多くなるじゃん。
 caseにしろよ。その方が高速化するぞ。
 
 
- 930 :デフォルトの名無しさん :01/08/29 22:38 ID:6wtO5bLA
-  >>929 
 文字列比較にcase?
 
 
231KB
新着レスの表示
スレッドリストへ戻る 全部 前100 次100 最新50
0ch BBS 2004-10-30