/* 壽星程式 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;
}