SetupBBS 板


LINE

/* */ /* National Kaohsiung University of Applied Sciences */ /* Campus Computer Network Association */ /* 國立高雄應用科技大學 校園網路策進會 */ /* */ /* Firebird to Maple 3.0 文章轉換 */ /* */ /* File : transpost.c */ /* Code : Hao-Chine Hung */ /* E-Mail: [email protected] */ /* Mobile: +886-958734768 */ /* Tel : +886-7-3814526 Ext.3141 */ /* Ver. : (2001/10/30) */ /* */ #define FBHOME "/home/news/bbs/boards" /* Firebird的boards目錄位置 */ #define BRDHOME "/home/news" /* brd要建的位置 */ #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #include <time.h> #include <dirent.h> void archiv32m(time_t chrono, char *fname) { char *str; int n; str=fname+8; *str='\0'; *fname='A'; while(--str>fname) { n=chrono&31; n+='0'; if(n>'9') n+='A'-'9'- 1; *str=n; chrono>>=5; } } typedef struct { time_t chrono; /* timestamp */ int xmode; int xid; /* reserved */ char xname[32]; /* 檔案名稱 */ char owner[80]; /* 作者 (E-mail address) */ char nick[50]; /* 暱稱 */ char date[9]; /* [96/12/01] */ char title[73]; /* 主題 (TTLEN + 1) */ } HDR; int transdate(char *time,char *date) { int i; char year[5],mouth[4],day[3]; for(i=4;i<7;i++) mouth[i-4]=time[i]; mouth[i-4]='\0'; if(!strcmp(mouth,"Jan")) strcpy(mouth,"01"); if(!strcmp(mouth,"Feb")) strcpy(mouth,"02"); if(!strcmp(mouth,"Mar")) strcpy(mouth,"03"); if(!strcmp(mouth,"Apr")) strcpy(mouth,"04"); if(!strcmp(mouth,"May")) strcpy(mouth,"05"); if(!strcmp(mouth,"Jun")) strcpy(mouth,"06"); if(!strcmp(mouth,"Jul")) strcpy(mouth,"07"); if(!strcmp(mouth,"Aug")) strcpy(mouth,"08"); if(!strcmp(mouth,"Sep")) strcpy(mouth,"09"); if(!strcmp(mouth,"Oct")) strcpy(mouth,"10"); if(!strcmp(mouth,"Nov")) strcpy(mouth,"11"); if(!strcmp(mouth,"Dec")) strcpy(mouth,"12"); if(time[8]==' ') day[0]='0'; else day[0]=time[8]; day[1]=time[9]; day[2]='\0'; for(i=22;i<25;i++) year[i-22]=time[i]; year[i-22]='\0'; sprintf(date,"%s/%s/%s",year,mouth,day); if(strlen(date)==8) return 1; else return 0; } int main(void) { int fd0,fd1,fd2,i,chrono,set=1,xok,xcount; char buf,wrbuf[1024]; char username[100],nickname[100],board[100],title[100],time[100]; DIR *dp1,*dp2; struct dirent *dirp1,*dirp2; char oldfile[128],newfile[128]; HDR fname; /*建立brd目錄*/ sprintf(oldfile,"%s/brd",BRDHOME); mkdir(oldfile,0700); if((dp1=opendir(FBHOME))==NULL) { printf("開啟目錄錯誤: %s",FBHOME); exit(-1); } for(;(dirp1=readdir(dp1))!=NULL;chrono=0x100000) { if(*(dirp1->d_name)!='.') { sprintf(oldfile,"%s/%s",FBHOME,dirp1->d_name); if((dp2=opendir(oldfile))==NULL) { printf("開啟目錄錯誤: %s",oldfile); exit(-1); } /*建立討論區目錄 */ sprintf(oldfile,"%s/brd/%s",BRDHOME,dirp1->d_name); mkdir (oldfile, 0700); /*建立討論區目錄結構 */ for(buf='0';;) { sprintf(oldfile,"%s/brd/%s/%c",BRDHOME,dirp1->d_name,buf); mkdir(oldfile,0700); if(buf=='9') buf='@'; else if(++buf=='W') break; } /*建立.DIR索引檔*/ sprintf(oldfile,"%s/brd/%s/.DIR",BRDHOME,dirp1->d_name); if((fd2=open(oldfile,O_WRONLY|O_CREAT,0600))<0) { printf("建立檔案錯誤: %s",oldfile); exit(-1); } printf("進入 %s 討論區\n\n",dirp1->d_name); xok=0; for(xcount=0;(dirp2=readdir(dp2))!=NULL;xcount++) { if(*(dirp2->d_name)!='.') { chrono++; memset(&fname,0,sizeof(fname)); archiv32m(chrono,fname.xname); sprintf(newfile,"%s/brd/%s/%c/%s",BRDHOME,dirp1->d_name,fname.xname[7],fname.xname); sprintf (oldfile,"%s/%s/%s",FBHOME,dirp1->d_name,dirp2->d_name); if((fd0=open(oldfile,O_RDWR))<0) { printf("開啟檔案錯誤: %s\n",oldfile); exit(-1); } if((fd1=open(newfile,O_WRONLY|O_CREAT,0600))<0) { printf("建立檔案錯誤: %s\n",newfile); exit(-1); } printf("%s => %s\n",oldfile,newfile); /*確認是否符合格式*/ for(i=0;read(fd0,&buf,1);i++) if(buf==':'|buf=='\n'|buf=='\0'|buf==' ') break; else wrbuf[i]=buf; wrbuf[i]='\0'; if(!strcmp(wrbuf,"發信人")) { /*取得username*/ read(fd0,&buf,1); for(i=0;read(fd0,&buf,1);i++) if(buf==' ') break; else username[i]=buf; username[i]='\0'; strcpy(fname.owner,username); /*取得nickname */ for(;read(fd0,&buf,1);) if(buf=='(') break; for(i=0;read(fd0,&buf,1);i++) if(buf==')') break; else nickname[i]=buf; nickname[i]='\0'; strcpy(fname.nick,nickname); /*取得board */ for(;read(fd0,&buf,1);) if(buf==',') break; for(i=0;i<7;i++) read(fd0,&buf,1); for(i=0;read(fd0,&buf,1);i++) if(buf=='\n') break; else board[i]=buf; board[i]='\0'; /*取得title */ for(i=0;i<8;i++) read(fd0,&buf,1); for(i=0;read(fd0,&buf,1);i++) if(buf=='\n') break; else title[i] = buf; title[i]='\0'; strcpy(fname.title,title); /*取得time */ for(;read(fd0,&buf,1);) if(buf=='(') break; for(i=0;read(fd0,&buf,1);i++) if(buf==')') break; else time[i]=buf; time[i]='\0'; if(transdate(time,fname.date)) { fname.chrono=chrono; fname.xmode=1024; fname.xid=0; sprintf(wrbuf,"作者: %s (%s) 看板: %s\n標題: %s\n時間: %s\n",username,nickname,board,title,time); write(fd1,wrbuf,strlen(wrbuf)); while(read(fd0,&buf,1)) if(buf =='\n') break; memset(wrbuf,0,sizeof(wrbuf)); while(read(fd0,wrbuf,sizeof(wrbuf))) write(fd1,wrbuf,sizeof(wrbuf)); write(fd2,&fname,sizeof(fname)); xok++; } } else { printf("\033[1;32m該檔案無法存取標頭內容: %s\033[0m\n",oldfile); unlink(newfile); } close(fd0); close(fd1); } } closedir(dp2); close(fd2); printf("處理總數 %d ==> %d 轉換總數\n\n",xcount,xok); } } closedir(dp1); return 0; } -- ※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ From: 61-217-160-202.HINET-IP.hinet.net
1F:推 rafael200212: 06/09 17:46







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燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP