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

请输入看板名称,例如:e-shopping站内搜寻

TOP