diff options
Diffstat (limited to 'console/lovepaper.c')
-rw-r--r-- | console/lovepaper.c | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/console/lovepaper.c b/console/lovepaper.c new file mode 100644 index 00000000..50c643bb --- /dev/null +++ b/console/lovepaper.c @@ -0,0 +1,114 @@ +/* $Id$ */ +#include "bbs.h" +#define DATA "etc/lovepaper.dat" + +int +x_love(void) +{ + char buf1[200], title[TTLEN + 1]; + char receiver[61], path[STRLEN] = "home/"; + int x, y = 0, tline = 0, poem = 0; + FILE *fp, *fpo; + struct tm *gtime; + fileheader_t mhdr; + + setutmpmode(LOVE); + gtime = localtime4(&now); + snprintf(buf1, sizeof(buf1), "%c/%s/love%d%d", + cuser.userid[0], cuser.userid, gtime->tm_sec, gtime->tm_min); + strcat(path, buf1); + move(1, 0); + clrtobot(); + + outs("\n歡迎使用情書產生器 v0.00 板 \n"); + outs("有何難以啟齒的話,交由系統幫你說吧.\n爸爸說 : 濫情不犯法.\n"); + + if (!getdata(7, 0, "收信人:", receiver, sizeof(receiver), DOECHO)) + return 0; + if (receiver[0] && !(searchuser(receiver, receiver) && + getdata(8, 0, "主 題:", title, + sizeof(title), DOECHO))) { + move(10, 0); + vmsg("收信人或主題不正確,情書無法傳遞"); + return 0; + } + fpo = fopen(path, "w"); + assert(fpo); + fprintf(fpo, "\n"); + if ((fp = fopen(DATA, "r"))) { + while (fgets(buf1, 100, fp)) { + switch (buf1[0]) { + case '#': + break; + case '@': + if (!strncmp(buf1, "@begin", 6) || !strncmp(buf1, "@end", 4)) + tline = 3; + else if (!strncmp(buf1, "@poem", 5)) { + poem = 1; + tline = 1; + fprintf(fpo, "\n\n"); + } else + tline = 2; + break; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + sscanf(buf1, "%d", &x); + y = (random() % (x - 1)) * tline; + break; + default: + if (!poem) { + if (y > 0) + y = y - 1; + else { + if (tline > 0) { + fputs(buf1, fpo); + tline--; + } + } + } else { + if (buf1[0] == '$') + y--; + else if (y == 0) + fputs(buf1, fpo); + } + } + + } + + fclose(fp); + fclose(fpo); + strlcpy(save_title, title, sizeof(save_title)); + curredit |= EDIT_MAIL; + if (vedit(path, YEA, NULL) == -1) { + curredit &= ~EDIT_MAIL; + unlink(path); + clear(); + outs("\n\n 放棄寄情書\n"); + pressanykey(); + return -2; + } + curredit &= ~EDIT_MAIL; + sethomepath(buf1, receiver); + stampfile(buf1, &mhdr); + Rename(path, buf1); + strlcpy(mhdr.title, save_title, sizeof(mhdr.title)); + strlcpy(mhdr.owner, cuser.userid, sizeof(mhdr.owner)); + sethomedir(path, receiver); + if (append_record(path, &mhdr, sizeof(mhdr)) == -1) + return -1; + sendalert(receiver, ALERT_NEW_MAIL); + hold_mail(buf1, receiver); + return 1; + } else { + vmsg("本站目前無情書資料庫,請向站長反應。"); + } + fclose(fpo); + return 0; +} |