精華區beta SetupBBS 關於我們 聯絡資訊
/* 壽星程式 96 10/11 */ /* the program is designed by Ptt */ /* you can emailto://b3504102@csie.ntu.edu.tw */ /* Ptt BBS telnet://ptt.m8.ntu.edu.tw */ #define _BBS_UTIL_C_ #include "bbs.h" #include "record.c" #define DOTPASSWDS "/home/bbs/.PASSWDS" #define OUTFILE "/home/bbs/etc/birth.today" struct userec cuser; bad_user_id() { register char ch; int j; if (strlen(cuser.userid) < 2 || !isalpha(cuser.userid[0])) return 1; if (cuser.numlogins==0 || cuser.numlogins>15000) return 1; if (cuser.numposts>15000) return 1; for(j=1;ch = cuser.userid[j];j++) { if (!isalnum(ch)) return 1; } return 0; } main(argc, argv) int argc; char **argv; { fileheader mymail; FILE *fp1; char today[50][14],today_name[50][24],month[500][14], month_day[500],week[200][14],week_day[200]; int i,day=0,mon=0,wee=0,a[50],b[50]; time_t now; struct tm *ptime; now = time(NULL) ; /* back to ancent */ ptime = localtime(&now); fp1=fopen(DOTPASSWDS, "r"); while( (fread( &cuser,sizeof(cuser), 1, fp1))>0 ) { if(bad_user_id()) continue; if(cuser.month == ptime->tm_mon +1 ) { if(cuser.day == ptime->tm_mday) { char genbuf[200]; sprintf(genbuf,BBSHOME"/home/%s", cuser.userid); stampfile(genbuf, &mymail); strcpy(mymail.owner, "批踢踢實業坊"); strcpy(mymail.title, "!! 生日快樂 !!"); mymail.savemode = 0; unlink(genbuf); link(BBSHOME "/etc/Welcome_birth", genbuf); sprintf(genbuf,BBSHOME"/home/%s/.DIR", cuser.userid); append_record(genbuf, &mymail, sizeof(mymail)); if((cuser.numlogins + cuser.numposts) < 10) continue; a[day]=cuser.numlogins; b[day]=cuser.numposts; strcpy(today[day ],cuser.userid); strcpy(today_name[day++],cuser.username); } else if(cuser.day <= ptime->tm_mday+2 && cuser.day >= ptime->tm_mday-2) { if((cuser.numlogins + cuser.numposts) < 10) continue; week_day[wee] = cuser.day; strcpy(week[wee++],cuser.userid); } /* else { month_day[mon] = cuser.day; strcpy(month[mon++],cuser.userid); } */ } } fclose(fp1); fp1=fopen(OUTFILE,"w"); fprintf(fp1,"\n " "_[1m★_[35m★_[34m★_[33m★_[32m★_[31m★_[45;33m 壽星大觀 " "_[40m★_[32m★_[33m★_[34m★_[35m★_[1m★_[m \n\n"); if(day>0) { fprintf(fp1,"_[33m【_[1;45m本日壽星_[40;33m】_[m \n"); for (i=0;i<day;i++) { fprintf(fp1," _[33m[%2d/%-2d] %-14s_[0m %-24s login:%-5d post:%-5d\n", ptime->tm_mon+1,ptime->tm_mday,today[i],today_name[i],a[i],b[i]); } } if(week>0) { fprintf(fp1,"_[33m【_[1;45m前後兩天內壽星_[40;33m】_[m \n"); for (i=0;i<wee;i++) { fprintf(fp1," [%2d/%-2d] _[36m%-14s_[m" ,ptime->tm_mon+1,week_day[i],week[i]); if(!((i+1)%3)) fprintf(fp1,"\n"); } } /* 省略 fprintf(fp1,"\n\n_[33m【_[1;45m本月壽星_[40;33m】_[m \n"); for (i=0;i<mon;i++) { fprintf(fp1," [%2d/%-2d] %-14s" ,ptime->tm_mon+1,month_day[i],month[i]); if(!((i+1)%3)) fprintf(fp1,"\n"); } */ fclose(fp1); return 0; }