[心得] 倒数计时器功能

楼主: mezl (Trojan Newbie)   2008-06-13 12:48:26
今天试着把倒数计时器个功能做在BBS里面 利用控制码的方式来倒数
修改的code不长 大家可以玩玩看
使用方法为再编辑文章的时候按下Ctrl+Q然后选3
这时会出现**t的控制码 接着在后面加上倒数的日期 格式为YYYYMMDDHHmm
所以这行会看起来像**t200807311730 代表时间为2008/07/31 17:30的时候
存盘后看到的结果会出现像是 47天 3时29分35秒 这样的时间
~/src/maple/edit.c
约在2185行的部分 可以寻找
#ifdef SHOW_USER_IN_TEXT
case Ctrl('Q'):
cc = vans("显示使用者资料(1)id (2)暱称 (3)Timer?");//多加了Timer选项
if (cc >= '1' && cc <= '3')//改成cc<='3'
{
ve_char(KEY_ESC);
ve_char('*');
ve_char("snt"[cc - '1']);//多加一个字符t
}
ve_mode = mode | VE_FOOTER;
break;
#endif
倒数计时器实作的部分在
~/src/maple/visio.c
约在802行的部分 搜寻SHOW_USER_IN_TEXT
#ifdef SHOW_USER_IN_TEXT
void
outx(str)
uschar *str;
{
int ch;
while (ch = *str)
{
/* itoc.020301: ESC + * + s 等控制码 */
if (ch == KEY_ESC && str[1] == '*')
{
switch (str[2])
{
case 's': /* **s 显示 ID */
outs(cuser.userid);
str += 3;
continue;
case 'n': /* **n 显示暱称 */
outs(cuser.username);
str += 3;
continue;
//以下是倒数计时的code
case 't': /* **t 显示Timer */
//Get Date after that
//The format is YYYYMMDDHHmm
if(strlen(str)>=15){
if(str[3] =='2')//Check is start 2XXX year
{
int year,month,day,hour,min;
sscanf(str,"%*c%*ct%4d%2d%2d%2d%2d",&year,&month,&day,&hour,&min);
if(year>=2008 && year<=2038)
if(month>=1 && month <=12)
if(day>=1 && day <= 31)
if(hour >= 0 &&hour <=23)
if(min >=0 && min <= 59)
{
struct tm goal;
goal.tm_year = year-1900;
goal.tm_mon = month -1;
goal.tm_mday = day;
goal.tm_hour = hour;
goal.tm_min = min;
goal.tm_sec = 0;
goal.tm_isdst = 0;
time_t gt = mktime(&goal);
int counter = difftime(gt,time(NULL));
int days = counter / 86400;
counter %= 86400;
int hours = counter / 3600;
counter %= 3600;
int mins = counter / 60;
counter %= 60;
char diff[30];
sprintf(diff,"%3d天%2d时%2d分%2d秒
",days,hours,mins,counter);
outs(diff);
str += 12;// **t200806121700 have 12+3 digit
}
}
}
str += 3;
continue;
}
}
outc(ch);
str++;
}
}
#endif

Links booklink

Contact Us: admin [ a t ] ucptt.com