fb2dotbrd.c

看板SetupBBS作者時間22年前 (2004/01/14 02:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
修改自hightman大之前寫的trandotbrd.c 適用於從Firebird的3.1-20020908的.BOARDS 轉換為MapleBBS-3.10-20031227 (itoc) 的.BRD 編譯的時候要蓋掉MapleBBS裡的src/util/tran/fb2dotbrd.c 原先想參照hightman大的寫法,但在做權限轉移的時候失敗了, 因此只好用土法煉鋼的方法‥ /*----------------------------------------------------------*/ /* util/fb/fb2dotbrd.c */ /*----------------------------------------------------------*/ /* target : firebird 3.0 轉 Maple 3.x .BRD */ /* .BOARDS => .BRD */ /* create : 00/11/22 */ /* update : / / */ /* */ /* author : hightman@263.net */ /* modify : klt.bbs@bbs.mis.nkfust.edu.tw */ /*----------------------------------------------------------*/ /* syntax : fb2dotbrd */ /*----------------------------------------------------------*/ #include "fb.h" BRD allbrd[MAXBOARD]; typedef struct boardheader { /* This structure is used to hold data i n */ char filename[STRLEN+20]; /* the BOARDS files */ char BM[BM_LEN - 1]; char flag; char title[STRLEN]; unsigned level; unsigned char accessed[12]; } boardheader; typedef struct _PERM { int old; int new; } PERM; static PERM flag[] = { {0x8, BRD_ANONYMOUS}, {0x4, BRD_NOTRAN} }; int board_cmp(a, b) BRD *a, *b; { return (strcasecmp(a->brdname, b->brdname)); } main() { int inf, outf, i, count; int j; char buf[256], *str; char *bm; boardheader mybh; PERM *p; sprintf(buf, "%s/.BOARDS", FB); inf = open(buf, O_RDONLY); sprintf(buf, ".BRD"); outf = open(buf, O_WRONLY | O_CREAT | O_TRUNC, 0644); if (inf == -1 || outf == -1) { printf("error open file\n"); exit(1); } /* read in all boards */ i = 0; memset(allbrd, 0, MAXBOARD * sizeof(BRD)); while (read(inf, &mybh, sizeof(mybh)) == sizeof(mybh)) { str = mybh.title; if (mybh.filename[0]) { strcpy(allbrd[i].brdname, mybh.filename); strncpy(allbrd[i].class,mybh.title+2,4); /* klt.040113:讀出類別 */ str+=11; sprintf(allbrd[i].title, "%s", str); if (mybh.BM[0] > ' ') { bm = mybh.BM; for (j = 0; bm[j] != '\0'; j++) if (bm[j] == ',') bm[j] = '/'; strcpy(allbrd[i].BM, bm); } for (p = flag; p->old; p++) { if (mybh.flag & p->old) { mybh.flag &= 0xe; /* klt.040113: 把VOTE_FLAG拿掉 */ allbrd[i].battr |= p->new; } } if (mybh.level & 0x080000) allbrd[i].battr |= BRD_NOZAP; /* klt.040113: 把NOZAP_FLAG加回去 */ if (!strcmp(mybh.filename, "Test") || !strcmp(mybh.filename, "test")) allbrd[i].battr |= BRD_NOCOUNT; if (!strcmp(mybh.filename, "Test") || !strcmp(mybh.filename, "test")) allbrd[i].battr |= BRD_NOSTAT; /* klt.040113: 用很爛的方法做權限轉移,本來想用hightman大的方法但失敗 */ mybh.level &= 0x004dff; if(mybh.level & 0x1) allbrd[i].readlevel |= PERM_BASIC; if(mybh.level & 0x2) allbrd[i].readlevel |= PERM_CHAT; if(mybh.level & 0x4) allbrd[i].readlevel |= PERM_PAGE; if(mybh.level & 0x8) allbrd[i].readlevel |= PERM_POST; if(mybh.level & 0x10) allbrd[i].readlevel |= PERM_VALID; if(mybh.level & 0x20) allbrd[i].readlevel |= PERM_DENYPOST; if(mybh.level & 0x40) allbrd[i].readlevel |= PERM_CLOAK; if(mybh.level & 0x80) allbrd[i].readlevel |= PERM_SEECLOAK; if(mybh.level & 0x100) allbrd[i].readlevel |= PERM_XEMPT; if(mybh.level & 0x400) allbrd[i].readlevel |= PERM_BM; if(mybh.level & 0x800) allbrd[i].readlevel |= PERM_ACCOUNTS; if(mybh.level & 0x4000) allbrd[i].readlevel |= PERM_SYSOP; allbrd[i].postlevel = allbrd[i].readlevel; i++; } } close(inf); /* sort them by name */ count = i; qsort(allbrd, count, sizeof(BRD), board_cmp); /* write out the target file */ printf("----------------------------------------------------------------------\n"); for(i = 0; i < count; i++) { write(outf, &allbrd[i], sizeof(BRD)); printf("%-13s%-5s%-25.25s%s\n", allbrd[i].brdname, allbrd[i].class,allbrd[i].BM, allbrd[i].title); /* 這一行很長要注意 */ } close(outf); exit(0); } -- -- 高科大資管明日資星 ▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂ infostar.twbbs.org ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ ★ m145-185.dialup.seed.net.tw
文章代碼(AID): #10139z00 (SetupBBS)