#include #include #include #include #include #include #include #include "config.h" #include "pttstruct.h" #include "util.h" #include "perm.h" #include "common.h" #include "proto.h" #define OUTFILE BBSHOME "/pttbbs/util/smtest.result1" #define FIREFILE BBSHOME "/pttbbs/util/smtest.result2" extern boardheader_t *bcache; extern int numboards; boardheader_t allbrd[MAX_BOARD]; struct userec_t xuser; int getuser(char *userid) { int uid; if((uid = searchuser(userid))) passwd_query(uid, &xuser); return uid; } int LINK(char* src, char* dst){ char cmd[200]; if( link(src, dst) == 0){ return 0; } sprintf(cmd, "/bin/cp -R %s %s", src, dst); return system(cmd); } int outofdate(char *hdrdate, char latestdate[]) { int k,rr; char *dd; dd = strtok(hdrdate,"/"); if(dd){ k = 0; do { if (*dd == '[' ){dd[strlen(dd)-1]='\0'; dd++;} rr = atoi(dd); printf("%d/", rr); } while((dd = strtok(NULL,"/")) != NULL); } printf("\n"); if(1) return 1; else return 0; } int main() { int bmid, i, j, k, rd,rr; char *p, *bmsname[3], fname[256], *dd; fileheader_t hdr; FILE *inf; /* set date */ char thedate[5]; time_t t = time(NULL); struct tm *tm = localtime(&t); sprintf(thedate, "%2d/%02d", tm->tm_mon + 1, tm->tm_mday); resolve_boards(); if(passwd_mmap()) exit(1); memcpy(allbrd,bcache,numboards*sizeof(boardheader_t)); /* write out the target file */ inf = fopen(OUTFILE, "w+"); if(inf == NULL){ printf("open file error : %s\n", OUTFILE); exit(1); } /*the ouput table title*/ fprintf(inf,"英文版名 類別 中文版名 版主名單" " 日期 備註 \n"); j = 0 ; for (i = 0; i < 30; i++) { rd = 0; if(allbrd[i].brdname[0] == '\0') continue; if((allbrd[i].brdattr & BRD_NOZAP) == 1) continue; sprintf(fname, BBSHOME "/boards/%s/.DIR",allbrd[i].brdname); /* get date to choose junk board */ rd = get_num_records(fname, sizeof(fileheader_t)); get_record(fname, &hdr, sizeof (hdr), rd - 30); if(outofdate(hdr.date,thedate)) printf("yest\n"); /* dd = strtok(hdr.date,"/"); if(dd){ k = 0; do { if (*dd == '[' ){dd[strlen(dd)-1]='\0'; dd++;} rr = atoi(dd); printf("%d/", rr); } while((dd = strtok(NULL,"/")) != NULL); } printf("\n"); */ /* print to file */ printf("%-*.*s%-*.*s%-*.*s%-*.*s", IDLEN, IDLEN, allbrd[i].brdname, BTLEN-24, BTLEN-26, allbrd[i].title, IDLEN - 5, IDLEN-5,hdr.date, IDLEN * 3, IDLEN * 3, allbrd[i].BM); /* post to board */ /* user extract to mail */ p=strtok(allbrd[i].BM,"/ "); if(p){ k = 0; do { if (*p == '[' ){p[strlen(p)-1]='\0'; p++;} bmid=getuser(p); bmsname[k] = p; if(isalpha(allbrd[i].BM[0])&& !(xuser.userlevel &PERM_SYSOP)) { // printf("%s", bmsname[k]); } k++; } while((p=strtok(NULL,"/ "))!=NULL); } printf("\n"); } /* if(flag == 1){ bmbuf[0] = '\0'; for(k = 0 , n = 0; k < index; k++){ if(!bms[k].flag){ if( n++ != 0) strcat(bmbuf, "/"); strcat(bmbuf, bms[k].bmname); } } strcpy(bcache[i].BM, bmbuf); } } qsort(lostbms, j, sizeof(lostbm), bmlostdays_cmp); //write to the etc/toplazyBM for ( i=0; i 60){ fprintf(firef, "%-*.*s%-*.*s%-*.*s%3d天沒上站\n", IDLEN, IDLEN, lostbms[i].title, BTLEN-10, BTLEN-10, lostbms[i].ctitle, IDLEN,IDLEN, lostbms[i].bmname,lostbms[i].lostdays); }else{ fprintf(inf, "%-*.*s%-*.*s%-*.*s%3d天沒上站\n", IDLEN, IDLEN, lostbms[i].title, BTLEN-10, BTLEN-10, lostbms[i].ctitle, IDLEN,IDLEN, lostbms[i].bmname,lostbms[i].lostdays); } } fclose(inf); fclose(firef); //printf("Total %d boards.\n", count); //mail to the users for( i=0; i