SetupBBS 板


bbs中不像http沒有鏈接的功能。 我們一般在版面上說:參考本版3321文 但是如果一個大站,發文很快,版主清得又勤,前面的3321文過几個小時可能 已經變成3105文。去找時已經找不到。 如果是几天前的文章,那這個3321文就不知哪去找了。 于是一些特別善心的人們會這樣來表示,參考 “02/04/02 lkchu 很好的一篇文章” 一些bbs會加入查找某段日期文章的功能,也比較好地應對這個問題。 我們這里在嘗試的是一種通用性的表示文章引用的方法。 起意是在和hightman研究在一篇文章中上載多個二進制附件時聊出來的。 一篇文章上載了相關的附件,附件是肯定另存一個地方會比較好。 因而就引入了在一篇文章中如何描述附件的位置的問題。 先談談本站“笑書亭”中使用的步驟: 1. ctrl-p發表文章 2. 寫著寫著需要一個附圖來說明,就按ctrl-x,這里借用了windtop的popupmenu □□□□□□□□□□□□□□□□□□ □【存檔選項】 ┤[L]ocal 存為站內檔 ├ □ (S)ave 存檔 □ (A)bort 放棄 □ (T)itle 改標題 □ (E)dit 繼續編輯 □ (R)ead 讀取暫存檔 □ (W)rite 寫入暫存檔 □ (P)aste 插入引用鏈接 □ (U)pload 上載附件 □□□□□□□□□□□□□□□□□ 3. 選擇Upload上載附件,底行提示: 請問選擇上載途徑. 1) HTTP 2) Zmodem. 0) 退出 [0] 4. 選2,再按Y,支持Zmodem的telnet client就會彈出對話框選擇文件 5. 上載結束,提示輸入文件描述,直接回車就記下文件名作為描述: 正在保存文件: 樣品.jpg (9894 bytes) 輸入描述: 6. 文章中插入一串字符: "樣品.jpg":xfile:@0VDUEE9 顯示的這一串字符中,實際還包括頭尾的兩個不可見分隔碼,實際是 \004"樣品.jpg":xfile:@0VDUEE9\004 ^^^^這個\004在vim中看是^D,cat的話是小黑塊,用戶從bbs界面無法輸入 7. 文章發表后,more中顯示: "樣品.jpg":xfile:@0VDUEE9 8. 在more時按ctrl-d,用popupmenu列出本文內的所有鏈接: □□□□□□□□□□□□□□□□□□ □【附件列表】 ┤[0] - 取消 ├ □ (1) - 樣品.jpg □□□□□□□□□□□□□□□□□ 9. 選擇文件按回車,支持ZModem的telnet client即開始下載。 ---------------------------------------------------------------- 上面這個 \004"樣品.jpg":xfile:@0VDUEE9\004 就是我們想說的BBS Resource Locator,用于定位在一個bbs站的資源。 這里提到的資源是指:版面文章,文章,附件,以及投票結果,十大統計等。 目的是用于一串人類可以理解,又可以存在于文章中的字串來確切地 定位在一個bbs中的位址。 在閱讀文章時按ctrl-d用popupmenu的方式列出文章中的這種定位串, 供用戶選擇。 ---------------------------------------------------------------- 再談引用文章: 為了在文章中引用其它文章,也可以使用這種定位串。 在本站“笑書亭”中使用方法如下: 1. 上下左右找到你想引用文章 2. 按大寫M 生成文章的BRL引用串,存在內存中,底行顯示: ◆ 收錄剪貼板中: brl="Re: [問題] 匿名板的文章評分":A0VDRKKP 3. 發表文章時,ctrl-x,選取Paste □□□□□□□□□□□□□□□□□□ □【存檔選項】 $"樣品.jpg":xfile:@0 □ [S]ave 存檔 □ (A)bort 放棄 □ (T)itle 改標題 -- □ (E)dit 繼續編輯 *[1;31m#*[33m Origin □ (R)ead 讀取暫存檔 66.net *[m *[1;31m#*[35m Author □ (W)rite 寫入暫存檔 ┤(P)aste 插入引用鏈接 ├ □ (U)pload 上載附件 □□□□□□□□□□□□□□□□□ 4. 文章中會插入一行: "Re: [問題] 匿名板的文章評分":A0VDRKKP$TW-itoc ^同樣地,頭尾兩端包還包含\004這個不可見字符 ^ 5. 閱讀文章時,顯示: "樣品.jpg":xfile:@0VDUEE9 "Re: [問題] 匿名板的文章評分":A0VDRKKP$TW-itoc 6. 按ctrl-d,彈popupmenu列出所有鏈接: □□□□□□□□□□□□□□□□□□ □【附件列表】 ┤[0] - 取消 ├ □ (1) - 樣品.jpg □ (2) - Re: [問題] 匿名板的文 □□□□□□□□□□□□□□□□□ 7. 選擇閱讀或下載 8. 閱讀的文章讀完后會返回原來XO所在位置 -------------------------------------------------------------------- BRL = BRLDESC:(RTYPE)?:BRLPATH BRLDESC = "[~"]*" RTYPE = ("post", "gem", "xfile", "unkown") BRLPATH = FILENAME($BOARD)? FILENAME = ('A'..'Z', '0'..'9')+ BOARD = ('A'..'Z', '0'..'9')+ /*-------------------------------------------------------*/ /* BRL 在本站的資源定位 */ /* 0x4 "Description":A0UF95DL 0x4 最簡寫,默認本版版面文章 */ /* 0x4 "Description":post:A0UF95DL 0x4 本版文章 */ /* 0x4 "Description":A0UF95DL$sysop 0x4 sysop版上文章 */ /* 0x4 "Description":A0UF95DL$sysop 0x4 sysop版上文章 */ /* 0x4 "Description":post:A0UF95DL$sysop 0x4 sysop版上文章 */ /* 0x4 "Description":gem:A0UF95DL 0x4 本版 */ /* 0x4 "Description":gem:A0UF95DL$sysop 0x4 sysop版 */ /* 0x4 "Description":xfile:A0UF95DL 0x4 本版附件 */ /* 0x4 "Description":vote:A0UF95DL 0x4 本版投票結果 */ /* */ -------------------------------------------------------- 限于篇幅,這里僅貼出解析代碼,完整的代碼等整理好 之后打包放出來,或者你知道笑書亭在哪的話,找我來要。 #define BRL_ESCCHAR 4 typedef struct { int rtype; char rtypestr[10]; char brdid[24]; char brldesc[64]; char brlpath[64]; } BRL; enum { RT_POST=0, RT_GEM, RT_XFILE, RT_VOTE, RT_UNKNOWN=99 }; /*------------------------------------------------------- Search brl in a char*; return the first pos occur a complete BRL in str; return null if not found. if found, the desc and path are stored in brl; -------------------------------------------------------*/ char *brl_find(unsigned char *str, BRL *brl, unsigned char **end) { int bstate, i; unsigned char *ptr, *qtr, *t; unsigned char whitespace[]=" "; char brdidchars[] = "@0123456789_.-"; /* 暫時不用,什么都有可能 char brlchars[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; */ #define BRLERROR 8 #define BRLFOUND 9 *brl->brldesc = NULL; *brl->brlpath = NULL; *brl->rtypestr = NULL; *brl->brdid = NULL; ptr = strchr(str, BRL_ESCCHAR); if (ptr == NULL) return NULL; ptr++; qtr=ptr; bstate = 0; while ((*qtr != NULL)&&(*qtr!='\r')&&(*qtr!='\n')&&(*qtr!='\t') &&(bstate != BRLERROR)&&(bstate!=BRLFOUND)) { switch (bstate) { case 0 : if (*qtr == '"') { *brl->brldesc = '\0'; bstate = 1; } else if (strchr(whitespace, *qtr)) { } else bstate = BRLERROR; break; case 1 : /* description */ if (*qtr == '"'){ bstate = 2; } else if (*qtr >= 0x20) { strncat(brl->brldesc, qtr, 1); } else bstate = BRLERROR; break; case 2 : /* brltype */ if (*qtr == ':') { if ((*(qtr+1) != NULL) && (t = strchr(qtr+1, ':'))) { strncpy(brl->rtypestr, qtr+1, t-qtr-1); brl->rtypestr[t-qtr-1] = '\0'; qtr = t; /* 后面會 qtr++ */ } bstate = 3; *brl->brlpath = '\0'; } else if (strchr(whitespace, *qtr)) { } else bstate = BRLERROR; break; case 3 : /* brlpath */ if (*qtr == BRL_ESCCHAR) { bstate = BRLFOUND; } else if (*qtr == '$') { bstate = 4; } else if (isalpha(*qtr) || strchr(brdidchars, *qtr)) { strncat(brl->brlpath, qtr, 1); } else if (strchr(whitespace, *qtr)) { } else bstate = BRLERROR; break; case 4 : /* 版名 */ if (*qtr == BRL_ESCCHAR) { bstate = BRLFOUND; } else if (isalpha(*qtr) || strchr(brdidchars, *qtr)) { strncat(brl->brdid, qtr, 1); } else if (strchr(whitespace, *qtr)) { } else bstate = BRLERROR; break; case BRLERROR: break; case BRLFOUND: break; } /* switch (bstate)*/ qtr++; } if (bstate != BRLFOUND) { return NULL; } *end = qtr; /* 指向 BRL_ESCCHAR 后面那個char */ if (strlen(brl->rtypestr) == 0) { brl->rtype = RT_POST; } else { str_lower(brl->rtypestr, brl->rtypestr); i = 0; while ((DEF_RTYPE[i]) && (!strstr(brl->rtypestr,DEF_RTYPE[i]))) i++; if (!DEF_RTYPE[i]) brl->rtype = RT_UNKNOWN; else brl->rtype = i; } return ptr; } -- # Origin # 笑書亭 bbs.dot66.net # Author # 218.108.188.200







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草
伺服器連線錯誤,造成您的不便還請多多包涵!
「贊助商連結」






like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP