diff options
Diffstat (limited to 'mbbsd/bbs.c')
-rw-r--r-- | mbbsd/bbs.c | 2055 |
1 files changed, 1064 insertions, 991 deletions
diff --git a/mbbsd/bbs.c b/mbbsd/bbs.c index 46222bed..a706ff0c 100644 --- a/mbbsd/bbs.c +++ b/mbbsd/bbs.c @@ -1,7 +1,7 @@ -/* $Id: bbs.c,v 1.64 2002/07/21 08:18:41 in2 Exp $ */ +/* $Id: bbs.c,v 1.65 2002/07/21 09:26:02 in2 Exp $ */ #include "bbs.h" -static void +static void mail_by_link(char *owner, char *title, char *path) { char genbuf[200]; @@ -19,7 +19,7 @@ mail_by_link(char *owner, char *title, char *path) } -void +void anticrosspost() { char buf[200]; @@ -39,7 +39,7 @@ anticrosspost() } /* Heat CharlieL */ -int +int save_violatelaw() { char buf[128], ok[3]; @@ -98,7 +98,7 @@ save_violatelaw() static time_t board_note_time; static char *brd_title; -void +void set_board() { boardheader_t *bp; @@ -119,7 +119,7 @@ set_board() currmode |= MODE_POST; } -static void +static void readtitle() { showtitle(currBM, brd_title); @@ -128,7 +128,7 @@ readtitle() " \033[m"); } -static void +static void readdoent(int num, fileheader_t * ent) { int type, uid; @@ -184,25 +184,25 @@ readdoent(int num, fileheader_t * ent) title); } -int +int cmpfilename(fileheader_t * fhdr) { return (!strcmp(fhdr->filename, currfile)); } -int +int cmpfmode(fileheader_t * fhdr) { return (fhdr->filemode & currfmode); } -int +int cmpfowner(fileheader_t * fhdr) { return !strcasecmp(fhdr->owner, currowner); } -int +int whereami(int ent, fileheader_t * fhdr, char *direct) { boardheader_t *bh, *p[32], *root; @@ -229,7 +229,7 @@ whereami(int ent, fileheader_t * fhdr, char *direct) return FULLUPDATE; } -static int +static int substitute_check(fileheader_t * fhdr) { fileheader_t hdr; @@ -250,7 +250,7 @@ substitute_check(fileheader_t * fhdr) } return num; } -static int +static int do_select(int ent, fileheader_t * fhdr, char *direct) { char bname[20]; @@ -295,7 +295,7 @@ do_select(int ent, fileheader_t * fhdr, char *direct) /* ----------------------------------------------------- */ /* ��} innbbsd ��X�H��B�s�u��H���B�z�{�� */ /* ----------------------------------------------------- */ -void +void outgo_post(fileheader_t * fh, char *board) { FILE *foo; @@ -307,7 +307,7 @@ outgo_post(fileheader_t * fh, char *board) } } -static void +static void cancelpost(fileheader_t * fh, int by_BM) { FILE *fin, *fout; @@ -352,7 +352,7 @@ cancelpost(fileheader_t * fh, int by_BM) /* ----------------------------------------------------- */ /* �o���B�^���B�s��B����峹 */ /* ----------------------------------------------------- */ -void +void do_reply_title(int row, char *title) { char genbuf[200]; @@ -369,7 +369,7 @@ do_reply_title(int row, char *title) getdata(++row, 0, "���D�G", save_title, TTLEN, DOECHO); } -static void +static void do_unanonymous_post(char *fpath) { fileheader_t mhdr; @@ -394,7 +394,7 @@ static time_t last_post_time = 0; static time_t water_counts = 0; #endif -static int +static int do_general() { fileheader_t postfile; @@ -586,7 +586,7 @@ do_general() return FULLUPDATE; } -int +int do_post() { boardheader_t *bp; @@ -599,7 +599,7 @@ do_post() return 0; } -static void +static void do_generalboardreply(fileheader_t * fhdr) { char genbuf[200]; @@ -622,7 +622,7 @@ do_generalboardreply(fileheader_t * fhdr) *quote_file = 0; } -int +int getindex(char *fpath, char *fname, int size) { int fd, now = 0; @@ -641,7 +641,7 @@ getindex(char *fpath, char *fname, int size) return 0; } -int +int invalid_brdname(char *brd) { register char ch; @@ -656,7 +656,7 @@ invalid_brdname(char *brd) return 0; } -static int +static int b_call_in(int ent, fileheader_t * fhdr, char *direct) { userinfo_t *u = search_ulist(searchuser(fhdr->owner)); @@ -669,7 +669,7 @@ b_call_in(int ent, fileheader_t * fhdr, char *direct) return DONOTHING; } -static void +static void do_reply(fileheader_t * fhdr) { boardheader_t *bp; @@ -680,7 +680,7 @@ do_reply(fileheader_t * fhdr) do_generalboardreply(fhdr); } -static int +static int reply_post(int ent, fileheader_t * fhdr, char *direct) { if (!(currmode & MODE_POST)) @@ -692,7 +692,7 @@ reply_post(int ent, fileheader_t * fhdr, char *direct) return FULLUPDATE; } -static int +static int edit_post(int ent, fileheader_t * fhdr, char *direct) { char fpath[80], fpath0[80]; @@ -751,7 +751,7 @@ edit_post(int ent, fileheader_t * fhdr, char *direct) #define UPDATE_USEREC (currmode |= MODE_DIRTY) -static int +static int cross_post(int ent, fileheader_t * fhdr, char *direct) { char xboard[20], fname[80], xfpath[80], xtitle[80], inputbuf[10]; @@ -825,1140 +825,1213 @@ cross_post(int ent, fileheader_t * fhdr, char *direct) xfile.filemode = FILE_LOCAL; } setbfile(fname, currboard, fhdr->filename); - //if (ent) { - xptr = fopen(xfpath, "w"); + xptr = fopen(xfpath, "w"); + + strlcpy(save_title, xfile.title, sizeof(save_title)); + strlcpy(xfpath, currboard, sizeof(xfpath)); + strlcpy(currboard, xboard, sizeof(currboard)); + write_header(xptr); + strlcpy(currboard, xfpath, sizeof(currboard)); + + fprintf(xptr, "�� [��������� %s �ݪO]\n\n", currboard); + + b_suckinfile(xptr, fname); + addsignature(xptr, 0); + fclose(xptr); + /* + * Cross fs�����D } else { unlink(xfpath); link(fname, xfpath); } + */ + setbdir(fname, xboard); + append_record(fname, &xfile, sizeof(xfile)); + bp = getbcache(getbnum(xboard)); + if (!xfile.filemode && !(bp->brdattr && BRD_NOTRAN)) + outgo_post(&xfile, xboard); + setbtotal(getbnum(xboard)); + cuser.numposts++; + UPDATE_USEREC; + outs("�峹�������"); + pressanykey(); + currmode = currmode0; + } + return FULLUPDATE; +} +static int +read_post(int ent, fileheader_t * fhdr, char *direct) +{ + char genbuf[200]; + int more_result; - strlcpy(save_title, xfile.title, sizeof(save_title)); - strlcpy(xfpath, currboard, sizeof(xfpath)); - strlcpy(currboard, xboard, sizeof(currboard)); - write_header(xptr); - strlcpy(currboard, xfpath, sizeof(currboard)); + if (fhdr->owner[0] == '-') + return DONOTHING; - fprintf(xptr, "�� [��������� %s �ݪO]\n\n", currboard); + setdirpath(genbuf, direct, fhdr->filename); - b_suckinfile(xptr, fname); - addsignature(xptr, 0); - fclose(xptr); - /* - * Cross fs�����D } else { unlink(xfpath); link(fname, xfpath); } - */ - setbdir(fname, xboard); - append_record(fname, &xfile, sizeof(xfile)); - bp = getbcache(getbnum(xboard)); - if (!xfile.filemode && !(bp->brdattr && BRD_NOTRAN)) - outgo_post(&xfile, xboard); - setbtotal(getbnum(xboard)); - cuser.numposts++; - UPDATE_USEREC; - outs("�峹�������"); - pressanykey(); - currmode = currmode0; + if ((more_result = more(genbuf, YEA)) == -1) + return DONOTHING; + + brc_addlist(fhdr->filename); + strncpy(currtitle, subject(fhdr->title), TTLEN); + strncpy(currowner, subject(fhdr->owner), IDLEN + 2); + + switch (more_result) { + case 1: + return READ_PREV; + case 2: + return RELATE_PREV; + case 3: + return READ_NEXT; + case 4: + return RELATE_NEXT; + case 5: + return RELATE_FIRST; + case 6: + return FULLUPDATE; + case 7: + case 8: + if ((currmode & MODE_POST)) { + strlcpy(quote_file, genbuf, sizeof(quote_file)); + do_reply(fhdr); + *quote_file = 0; } return FULLUPDATE; + case 9: + return 'A'; + case 10: + return 'a'; + case 11: + return '/'; + case 12: + return '?'; } - static int read_post(int ent, fileheader_t * fhdr, char *direct){ - char genbuf[200]; - int more_result; - - if (fhdr->owner[0] == '-') - return DONOTHING; - - setdirpath(genbuf, direct, fhdr->filename); - - if ((more_result = more(genbuf, YEA)) == -1) - return DONOTHING; - - brc_addlist(fhdr->filename); - strncpy(currtitle, subject(fhdr->title), TTLEN); - strncpy(currowner, subject(fhdr->owner), IDLEN + 2); - - switch (more_result) { - case 1: - return READ_PREV; - case 2: - return RELATE_PREV; - case 3: - return READ_NEXT; - case 4: - return RELATE_NEXT; - case 5: - return RELATE_FIRST; - case 6: - return FULLUPDATE; - case 7: - case 8: - if ((currmode & MODE_POST)) { - strlcpy(quote_file, genbuf, sizeof(quote_file)); - do_reply(fhdr); - *quote_file = 0; - } - return FULLUPDATE; - case 9: - return 'A'; - case 10: - return 'a'; - case 11: - return '/'; - case 12: - return '?'; - } - outmsg("\033[34;46m �\\Ū�峹 \033[31;47m (R/Y)\033[30m�^�H \033[31m" + outmsg("\033[34;46m �\\Ū�峹 \033[31;47m (R/Y)\033[30m�^�H \033[31m" "(=[]<>)\033[30m�����D�D \033[31m(����)\033[30m�W�U�� \033[31m(��)" - "\033[30m���} \033[m"); + "\033[30m���} \033[m"); - switch (egetch()) { - case 'q': - case 'Q': - case KEY_LEFT: - break; + switch (egetch()) { + case 'q': + case 'Q': + case KEY_LEFT: + break; - case ' ': - case KEY_RIGHT: - case KEY_DOWN: - case KEY_PGDN: - case 'n': - case Ctrl('N'): - return READ_NEXT; + case ' ': + case KEY_RIGHT: + case KEY_DOWN: + case KEY_PGDN: + case 'n': + case Ctrl('N'): + return READ_NEXT; - case KEY_UP: - case 'p': - case Ctrl('P'): - case KEY_PGUP: - return READ_PREV; + case KEY_UP: + case 'p': + case Ctrl('P'): + case KEY_PGUP: + return READ_PREV; - case '=': - return RELATE_FIRST; + case '=': + return RELATE_FIRST; - case ']': - case 't': - return RELATE_NEXT; + case ']': + case 't': + return RELATE_NEXT; - case '[': - return RELATE_PREV; + case '[': + return RELATE_PREV; - case '.': - case '>': - return THREAD_NEXT; + case '.': + case '>': + return THREAD_NEXT; - case ',': - case '<': - return THREAD_PREV; + case ',': + case '<': + return THREAD_PREV; - case Ctrl('C'): - cal(); - return FULLUPDATE; - break; + case Ctrl('C'): + cal(); + return FULLUPDATE; + break; - case Ctrl('I'): - t_idle(); - return FULLUPDATE; - case 'y': - case 'r': - case 'R': - case 'Y': - if ((currmode & MODE_POST)) { - strlcpy(quote_file, genbuf, sizeof(quote_file)); - do_reply(fhdr); - *quote_file = 0; - } - } + case Ctrl('I'): + t_idle(); return FULLUPDATE; + case 'y': + case 'r': + case 'R': + case 'Y': + if ((currmode & MODE_POST)) { + strlcpy(quote_file, genbuf, sizeof(quote_file)); + do_reply(fhdr); + *quote_file = 0; + } } + return FULLUPDATE; +} - /* ----------------------------------------------------- */ - /* �Ķ���ذ� */ - /* ----------------------------------------------------- */ - static int b_man() { - char buf[64]; - - setapath(buf, currboard); - if ((currmode & MODE_BOARD) || HAS_PERM(PERM_SYSOP)) { - char genbuf[128]; - int fd; - sprintf(genbuf, "%s/.rebuild", buf); - if ((fd = open(genbuf, O_CREAT, 0640)) > 0) - close(fd); - } - return a_menu(currboard, buf, HAS_PERM(PERM_ALLBOARD) ? 2 : - (currmode & MODE_BOARD ? 1 : 0)); +/* ----------------------------------------------------- */ +/* �Ķ���ذ� */ +/* ----------------------------------------------------- */ +static int +b_man() +{ + char buf[64]; + + setapath(buf, currboard); + if ((currmode & MODE_BOARD) || HAS_PERM(PERM_SYSOP)) { + char genbuf[128]; + int fd; + sprintf(genbuf, "%s/.rebuild", buf); + if ((fd = open(genbuf, O_CREAT, 0640)) > 0) + close(fd); } + return a_menu(currboard, buf, HAS_PERM(PERM_ALLBOARD) ? 2 : + (currmode & MODE_BOARD ? 1 : 0)); +} #ifndef NO_GAMBLE - void stop_gamble() { - boardheader_t *bp = getbcache(currbid); - char fn_ticket[128], fn_ticket_end[128]; - if (!bp->endgamble || bp->endgamble > now) - return; - - setbfile(fn_ticket, currboard, FN_TICKET); - setbfile(fn_ticket_end, currboard, FN_TICKET_END); +void +stop_gamble() +{ + boardheader_t *bp = getbcache(currbid); + char fn_ticket[128], fn_ticket_end[128]; + if (!bp->endgamble || bp->endgamble > now) + return; + + setbfile(fn_ticket, currboard, FN_TICKET); + setbfile(fn_ticket_end, currboard, FN_TICKET_END); + + rename(fn_ticket, fn_ticket_end); + if (bp->endgamble) { + bp->endgamble = 0; + substitute_record(fn_board, bp, sizeof(boardheader_t), currbid); + } +} +static int +join_gamble(int ent, fileheader_t * fhdr, char *direct) +{ + if (!HAS_PERM(PERM_LOGINOK)) + return DONOTHING; + stop_gamble(); + ticket(currbid); + return FULLUPDATE; +} +static int +hold_gamble(int ent, fileheader_t * fhdr, char *direct) +{ + char fn_ticket[128], fn_ticket_end[128], genbuf[128], msg[256] = "", + yn[10] = ""; + boardheader_t *bp = getbcache(currbid); + int i; + FILE *fp = NULL; - rename(fn_ticket, fn_ticket_end); - if (bp->endgamble) { + if (!(currmode & MODE_BOARD)) + return 0; + setbfile(fn_ticket, currboard, FN_TICKET); + setbfile(fn_ticket_end, currboard, FN_TICKET_END); + setbfile(genbuf, currboard, FN_TICKET_LOCK); + if (dashf(fn_ticket)) { + getdata(b_lines - 1, 0, "�w�g���|���L, " + "�O�_�n [����U�`]?(N/y)�G", yn, 3, LCECHO); + if (yn[0] != 'y') + return FULLUPDATE; + rename(fn_ticket, fn_ticket_end); + if (bp->endgamble) { bp->endgamble = 0; substitute_record(fn_board, bp, sizeof(boardheader_t), currbid); + } - } - static int join_gamble(int ent, fileheader_t * fhdr, char *direct){ - if (!HAS_PERM(PERM_LOGINOK)) - return DONOTHING; - stop_gamble(); - ticket(currbid); return FULLUPDATE; } - static int hold_gamble(int ent, fileheader_t * fhdr, char *direct){ - char fn_ticket[128], fn_ticket_end[128], genbuf[128], msg[256] = "", - yn[10] = ""; - boardheader_t *bp = getbcache(currbid); - int i; - FILE *fp = NULL; - - if (!(currmode & MODE_BOARD)) - return 0; - setbfile(fn_ticket, currboard, FN_TICKET); - setbfile(fn_ticket_end, currboard, FN_TICKET_END); - setbfile(genbuf, currboard, FN_TICKET_LOCK); - if (dashf(fn_ticket)) { - getdata(b_lines - 1, 0, "�w�g���|���L, " - "�O�_�n [����U�`]?(N/y)�G", yn, 3, LCECHO); - if (yn[0] != 'y') - return FULLUPDATE; - rename(fn_ticket, fn_ticket_end); - if (bp->endgamble) { - bp->endgamble = 0; - substitute_record(fn_board, bp, sizeof(boardheader_t), currbid); - - } - return FULLUPDATE; - } - if (dashf(fn_ticket_end)) { - getdata(b_lines - 1, 0, "�w�g���|���L, " - "�O�_�n [�}��/����]?(N/y)�G", yn, 3, LCECHO); - if (yn[0] != 'y') - return FULLUPDATE; - openticket(currbid); - return FULLUPDATE; - } else if (dashf(genbuf)) { - move(b_lines - 1, 0); - prints(" �ثe�t�Υ��b�B�z�}���Ʃy, �е��G�X�l��A�|��......."); - pressanykey(); - return FULLUPDATE; - } - getdata(b_lines - 2, 0, "�n�|���L (N/y):", yn, 3, LCECHO); + if (dashf(fn_ticket_end)) { + getdata(b_lines - 1, 0, "�w�g���|���L, " + "�O�_�n [�}��/����]?(N/y)�G", yn, 3, LCECHO); if (yn[0] != 'y') return FULLUPDATE; - getdata(b_lines - 1, 0, "�䤰��? �п�J�D�D (��J��s�褺�e):", - msg, 20, DOECHO); - if (msg[0] == 0 || - vedit(fn_ticket_end, NA, NULL) < 0) - return FULLUPDATE; + openticket(currbid); + return FULLUPDATE; + } else if (dashf(genbuf)) { + move(b_lines - 1, 0); + prints(" �ثe�t�Υ��b�B�z�}���Ʃy, �е��G�X�l��A�|��......."); + pressanykey(); + return FULLUPDATE; + } + getdata(b_lines - 2, 0, "�n�|���L (N/y):", yn, 3, LCECHO); + if (yn[0] != 'y') + return FULLUPDATE; + getdata(b_lines - 1, 0, "�䤰��? �п�J�D�D (��J��s�褺�e):", + msg, 20, DOECHO); + if (msg[0] == 0 || + vedit(fn_ticket_end, NA, NULL) < 0) + return FULLUPDATE; - clear(); - showtitle("�|���L", BBSNAME); - setbfile(genbuf, currboard, FN_TICKET_ITEMS); + clear(); + showtitle("�|���L", BBSNAME); + setbfile(genbuf, currboard, FN_TICKET_ITEMS); - //sprintf(genbuf, "%s/" FN_TICKET_ITEMS, direct); + //sprintf(genbuf, "%s/" FN_TICKET_ITEMS, direct); - if (!(fp = fopen(genbuf, "w"))) - return FULLUPDATE; - do { - getdata(2, 0, "��J�m������ (����:10-10000):", yn, 6, LCECHO); - i = atoi(yn); - } while (i < 10 || i > 10000); - fprintf(fp, "%d\n", i); - if (!getdata(3, 0, "�]�w�۰ʫʽL�ɶ�?(Y/n)", yn, 3, LCECHO) || yn[0] != 'n') { - bp->endgamble = gettime(4, now); - substitute_record(fn_board, bp, sizeof(boardheader_t), currbid); - } - move(6, 0); - sprintf(genbuf, "�Ш� %s �O ��'f'�ѻP���!\n\n�@�i %d Ptt��, �o�O%s�����\n%s%s", - currboard, - i, i < 100 ? "�p�䦡" : i < 500 ? "������" : - i < 1000 ? "�Q�گ�" : i < 5000 ? "�I����" : "�ɮa����", - bp->endgamble ? "��L�����ɶ�: " : "", - bp->endgamble ? Cdate(&bp->endgamble) : "" - ); - strcat(msg, genbuf); - prints("�Ш̦���J�m���W��, �ݴ���2~8��. (�����K��, ��J������enter)\n"); - for (i = 0; i < 8; i++) { - sprintf(yn, " %d)", i + 1); - getdata(7 + i, 0, yn, genbuf, 9, DOECHO); - if (!genbuf[0] && i > 1) - break; - fprintf(fp, "%s\n", genbuf); - } - fclose(fp); - move(8 + i, 0); - prints("��L�]�w����"); - sprintf(genbuf, "[���i] %s �O �}�l���!", currboard); - post_msg(currboard, genbuf, msg, cuser.userid); - post_msg("Record", genbuf + 7, msg, "[�������l]"); - /* Tim ����CS, �H�K���b����user���Ƥw�g�g�i�� */ - rename(fn_ticket_end, fn_ticket); - //�] � w � ��~���ɦW � �L � � - - return FULLUPDATE; + if (!(fp = fopen(genbuf, "w"))) + return FULLUPDATE; + do { + getdata(2, 0, "��J�m������ (����:10-10000):", yn, 6, LCECHO); + i = atoi(yn); + } while (i < 10 || i > 10000); + fprintf(fp, "%d\n", i); + if (!getdata(3, 0, "�]�w�۰ʫʽL�ɶ�?(Y/n)", yn, 3, LCECHO) || yn[0] != 'n') { + bp->endgamble = gettime(4, now); + substitute_record(fn_board, bp, sizeof(boardheader_t), currbid); } + move(6, 0); + sprintf(genbuf, "�Ш� %s �O ��'f'�ѻP���!\n\n�@�i %d Ptt��, �o�O%s�����\n%s%s", + currboard, + i, i < 100 ? "�p�䦡" : i < 500 ? "������" : + i < 1000 ? "�Q�گ�" : i < 5000 ? "�I����" : "�ɮa����", + bp->endgamble ? "��L�����ɶ�: " : "", + bp->endgamble ? Cdate(&bp->endgamble) : "" + ); + strcat(msg, genbuf); + prints("�Ш̦���J�m���W��, �ݴ���2~8��. (�����K��, ��J������enter)\n"); + for (i = 0; i < 8; i++) { + sprintf(yn, " %d)", i + 1); + getdata(7 + i, 0, yn, genbuf, 9, DOECHO); + if (!genbuf[0] && i > 1) + break; + fprintf(fp, "%s\n", genbuf); + } + fclose(fp); + move(8 + i, 0); + prints("��L�]�w����"); + sprintf(genbuf, "[���i] %s �O �}�l���!", currboard); + post_msg(currboard, genbuf, msg, cuser.userid); + post_msg("Record", genbuf + 7, msg, "[�������l]"); + /* Tim ����CS, �H�K���b����user���Ƥw�g�g�i�� */ + rename(fn_ticket_end, fn_ticket); + /* �]�w���~���ɦW��L�� */ + + return FULLUPDATE; +} #endif - static int cite_post(int ent, fileheader_t * fhdr, char *direct){ - char fpath[256]; - char title[TTLEN + 1]; - - setbfile(fpath, currboard, fhdr->filename); - strlcpy(title, "�� ", sizeof(title)); - strlcpy(title + 3, fhdr->title, TTLEN - 3); - title[TTLEN] = '\0'; - a_copyitem(fpath, title, 0, 1); - b_man(); - return FULLUPDATE; - } +static int +cite_post(int ent, fileheader_t * fhdr, char *direct) +{ + char fpath[256]; + char title[TTLEN + 1]; + + setbfile(fpath, currboard, fhdr->filename); + strlcpy(title, "�� ", sizeof(title)); + strlcpy(title + 3, fhdr->title, TTLEN - 3); + title[TTLEN] = '\0'; + a_copyitem(fpath, title, 0, 1); + b_man(); + return FULLUPDATE; +} - int edit_title(int ent, fileheader_t * fhdr, char *direct){ - char genbuf[200]; - fileheader_t tmpfhdr = *fhdr; - int dirty = 0; +int +edit_title(int ent, fileheader_t * fhdr, char *direct) +{ + char genbuf[200]; + fileheader_t tmpfhdr = *fhdr; + int dirty = 0; - if (currmode & MODE_BOARD || !strcmp(cuser.userid, fhdr->owner)) { - if (getdata(b_lines - 1, 0, "���D�G", genbuf, TTLEN, DOECHO)) { - strlcpy(tmpfhdr.title, genbuf, sizeof(tmpfhdr.title)); - dirty++; - } + if (currmode & MODE_BOARD || !strcmp(cuser.userid, fhdr->owner)) { + if (getdata(b_lines - 1, 0, "���D�G", genbuf, TTLEN, DOECHO)) { + strlcpy(tmpfhdr.title, genbuf, sizeof(tmpfhdr.title)); + dirty++; } - if (HAS_PERM(PERM_SYSOP)) { - if (getdata(b_lines - 1, 0, "�@�̡G", genbuf, IDLEN + 2, DOECHO)) { - strlcpy(tmpfhdr.owner, genbuf, sizeof(tmpfhdr.owner)); - dirty++; - } - if (getdata(b_lines - 1, 0, "����G", genbuf, 6, DOECHO)) { - sprintf(tmpfhdr.date, "%.5s", genbuf); - dirty++; - } + } + if (HAS_PERM(PERM_SYSOP)) { + if (getdata(b_lines - 1, 0, "�@�̡G", genbuf, IDLEN + 2, DOECHO)) { + strlcpy(tmpfhdr.owner, genbuf, sizeof(tmpfhdr.owner)); + dirty++; } - if (currmode & MODE_BOARD || !strcmp(cuser.userid, fhdr->owner)) { - getdata(b_lines - 1, 0, "�T�w(Y/N)?[n] ", genbuf, 3, DOECHO); - if ((genbuf[0] == 'y' || genbuf[0] == 'Y') && dirty) { - *fhdr = tmpfhdr; - substitute_record(direct, fhdr, sizeof(*fhdr), ent); - /* rocker.011018: �o�����ӧ令��reference���覡���o��Ӫ��ɮ� */ - substitute_check(fhdr); - touchdircache(currbid); - } - return FULLUPDATE; + if (getdata(b_lines - 1, 0, "����G", genbuf, 6, DOECHO)) { + sprintf(tmpfhdr.date, "%.5s", genbuf); + dirty++; } - return DONOTHING; } - - static int solve_post(int ent, fileheader_t * fhdr, char *direct){ - if (HAS_PERM(PERM_SYSOP)) { - fhdr->filemode ^= FILE_SOLVED; + if (currmode & MODE_BOARD || !strcmp(cuser.userid, fhdr->owner)) { + getdata(b_lines - 1, 0, "�T�w(Y/N)?[n] ", genbuf, 3, DOECHO); + if ((genbuf[0] == 'y' || genbuf[0] == 'Y') && dirty) { + *fhdr = tmpfhdr; substitute_record(direct, fhdr, sizeof(*fhdr), ent); + /* rocker.011018: �o�����ӧ令��reference���覡���o��Ӫ��ɮ� */ + substitute_check(fhdr); touchdircache(currbid); - return PART_REDRAW; } - return DONOTHING; + return FULLUPDATE; } + return DONOTHING; +} - static int recommend_cancel(int ent, fileheader_t * fhdr, char *direct){ - char yn[5]; - if (!(currmode & MODE_BOARD)) - return DONOTHING; - getdata(b_lines - 1, 0, "�T�w�n�����k�s(Y/N)?[n] ", yn, 5, LCECHO); - if (yn[0] != 'y') - return FULLUPDATE; - fhdr->recommend = 0; - - substitute_record(direct, fhdr, sizeof(*fhdr), ent); - substitute_check(fhdr); - touchdircache(currbid); - return FULLUPDATE; +static int +solve_post(int ent, fileheader_t * fhdr, char *direct) +{ + if (HAS_PERM(PERM_SYSOP)) { + fhdr->filemode ^= FILE_SOLVED; + substitute_record(direct, fhdr, sizeof(*fhdr), ent); + touchdircache(currbid); + return PART_REDRAW; } - static int recommend(int ent, fileheader_t * fhdr, char *direct){ - struct tm *ptime = localtime(&now); - char buf[200], path[200], yn[5]; - boardheader_t *bp; - bp = getbcache(currbid); - - if (!(currmode & MODE_POST) || !strcmp(fhdr->owner, cuser.userid) || - bp->brdattr & BRD_VOTEBOARD) { - move(b_lines - 1, 0); - prints("�z�]�v�������L�k���� �� ������˦ۤv���峹!"); - pressanykey(); - return FULLUPDATE; - } - if (fhdr->recommend > 9 || fhdr->recommend < 0) - //�Ȯɩʪ�code � ���¦��Ȩ��� - fhdr->recommend = 0; - - if (!(currmode & MODE_BOARD) && getuser(cuser.userid) && - now - xuser.recommend < 60) { - move(b_lines - 1, 0); - prints("���W�����ˮɶ��Ӫ��o, �Цh���I�ɶ��J�Ӿ\\Ū�峹!"); - pressanykey(); - return FULLUPDATE; - } - if (!getdata(b_lines - 2, 0, "���˻y:", path, 40, DOECHO) || - !getdata(b_lines - 1, 0, "�T�w�n����, �ХJ�ӦҼ{(Y/N)?[n] ", yn, 5, LCECHO) - || yn[0] != 'y') - return FULLUPDATE; + return DONOTHING; +} - sprintf(buf, - "\033[1;31m�� \033[33m%s\033[m\033[33m:%s\033[m%*s���˦�:%s %02d/%02d\n", - cuser.userid, path, - 45 - strlen(cuser.userid) - strlen(path), " ", fromhost, - ptime->tm_mon + 1, ptime->tm_mday); - setdirpath(path, direct, fhdr->filename); - log_file(path, buf); - if (fhdr->recommend < 9) { - fhdr->recommend++; - cuser.recommend = now; - passwd_update(usernum, &cuser); - substitute_record(direct, fhdr, sizeof(*fhdr), ent); - substitute_check(fhdr); - touchdircache(currbid); - } +static int +recommend_cancel(int ent, fileheader_t * fhdr, char *direct) +{ + char yn[5]; + if (!(currmode & MODE_BOARD)) + return DONOTHING; + getdata(b_lines - 1, 0, "�T�w�n�����k�s(Y/N)?[n] ", yn, 5, LCECHO); + if (yn[0] != 'y') + return FULLUPDATE; + fhdr->recommend = 0; + + substitute_record(direct, fhdr, sizeof(*fhdr), ent); + substitute_check(fhdr); + touchdircache(currbid); + return FULLUPDATE; +} +static int +recommend(int ent, fileheader_t * fhdr, char *direct) +{ + struct tm *ptime = localtime(&now); + char buf[200], path[200], yn[5]; + boardheader_t *bp; + bp = getbcache(currbid); + + if (!(currmode & MODE_POST) || !strcmp(fhdr->owner, cuser.userid) || + bp->brdattr & BRD_VOTEBOARD) { + move(b_lines - 1, 0); + prints("�z�]�v�������L�k���� �� ������˦ۤv���峹!"); + pressanykey(); return FULLUPDATE; } - static int mark_post(int ent, fileheader_t * fhdr, char *direct){ + if (fhdr->recommend > 9 || fhdr->recommend < 0) + /* �Ȯɩʪ� code ����¦��Ȩ��� */ + fhdr->recommend = 0; - if (!(currmode & MODE_BOARD)) - return DONOTHING; + if (!(currmode & MODE_BOARD) && getuser(cuser.userid) && + now - xuser.recommend < 60) { + move(b_lines - 1, 0); + prints("���W�����ˮɶ��Ӫ��o, �Цh���I�ɶ��J�Ӿ\\Ū�峹!"); + pressanykey(); + return FULLUPDATE; + } + if (!getdata(b_lines - 2, 0, "���˻y:", path, 40, DOECHO) || + !getdata(b_lines - 1, 0, "�T�w�n����, �ХJ�ӦҼ{(Y/N)?[n] ", yn, 5, LCECHO) + || yn[0] != 'y') + return FULLUPDATE; - fhdr->filemode ^= FILE_MARKED; + sprintf(buf, + "\033[1;31m�� \033[33m%s\033[m\033[33m:%s\033[m%*s���˦�:%s %02d/%02d\n", + cuser.userid, path, + 45 - strlen(cuser.userid) - strlen(path), " ", fromhost, + ptime->tm_mon + 1, ptime->tm_mday); + setdirpath(path, direct, fhdr->filename); + log_file(path, buf); + if (fhdr->recommend < 9) { + fhdr->recommend++; + cuser.recommend = now; + passwd_update(usernum, &cuser); substitute_record(direct, fhdr, sizeof(*fhdr), ent); substitute_check(fhdr); touchdircache(currbid); - return PART_REDRAW; } + return FULLUPDATE; +} +static int +mark_post(int ent, fileheader_t * fhdr, char *direct) +{ + + if (!(currmode & MODE_BOARD)) + return DONOTHING; + + fhdr->filemode ^= FILE_MARKED; + substitute_record(direct, fhdr, sizeof(*fhdr), ent); + substitute_check(fhdr); + touchdircache(currbid); + return PART_REDRAW; +} - int del_range(int ent, fileheader_t * fhdr, char *direct){ - char num1[8], num2[8]; - int inum1, inum2; - boardheader_t *bp; - bp = getbcache(currbid); +int +del_range(int ent, fileheader_t * fhdr, char *direct) +{ + char num1[8], num2[8]; + int inum1, inum2; + boardheader_t *bp; + bp = getbcache(currbid); - /* rocker.011018: �걵�Ҧ��U�٬O�����\�R������n */ - if (currmode & MODE_SELECT) { - outmsg("�Х��^�쥿�`�Ҧ���A�i��R��..."); + /* rocker.011018: �걵�Ҧ��U�٬O�����\�R������n */ + if (currmode & MODE_SELECT) { + outmsg("�Х��^�쥿�`�Ҧ���A�i��R��..."); + refresh(); + /* safe_sleep(1); */ + return FULLUPDATE; + } + if (strcmp(bp->brdname, "Security") == 0) + return DONOTHING; + if ((currstat != READING) || (currmode & MODE_BOARD)) { + getdata(1, 0, "[�]�w�R���d��] �_�I�G", num1, 5, DOECHO); + inum1 = atoi(num1); + if (inum1 <= 0) { + outmsg("�_�I���~"); refresh(); /* safe_sleep(1); */ return FULLUPDATE; } - if (strcmp(bp->brdname, "Security") == 0) - return DONOTHING; - if ((currstat != READING) || (currmode & MODE_BOARD)) { - getdata(1, 0, "[�]�w�R���d��] �_�I�G", num1, 5, DOECHO); - inum1 = atoi(num1); - if (inum1 <= 0) { - outmsg("�_�I���~"); - refresh(); - /* safe_sleep(1); */ - return FULLUPDATE; - } - getdata(1, 28, "���I�G", num2, 5, DOECHO); - inum2 = atoi(num2); - if (inum2 < inum1) { - outmsg("���I���~"); - refresh(); - /* safe_sleep(1); */ - return FULLUPDATE; - } - getdata(1, 48, msg_sure_ny, num1, 3, LCECHO); - if (*num1 == 'y') { - outmsg("�B�z��,�еy��..."); - refresh(); - if (currmode & MODE_SELECT) { - int fd, size = sizeof(fileheader_t); - char genbuf[100]; - fileheader_t rsfh; - int i = inum1, now; - if (currstat == RMAIL) - sethomedir(genbuf, cuser.userid); - else - setbdir(genbuf, currboard); - if ((fd = (open(direct, O_RDONLY, 0))) != -1) { - if (lseek(fd, (off_t) (size * (inum1 - 1)), SEEK_SET) != - -1) { - while (read(fd, &rsfh, size) == size) { - if (i > inum2) - break; - now = getindex(genbuf, rsfh.filename, size); - strlcpy(currfile, rsfh.filename, sizeof(currfile)); - delete_file(genbuf, sizeof(fileheader_t), now, - cmpfilename); - i++; - } + getdata(1, 28, "���I�G", num2, 5, DOECHO); + inum2 = atoi(num2); + if (inum2 < inum1) { + outmsg("���I���~"); + refresh(); + /* safe_sleep(1); */ + return FULLUPDATE; + } + getdata(1, 48, msg_sure_ny, num1, 3, LCECHO); + if (*num1 == 'y') { + outmsg("�B�z��,�еy��..."); + refresh(); + if (currmode & MODE_SELECT) { + int fd, size = sizeof(fileheader_t); + char genbuf[100]; + fileheader_t rsfh; + int i = inum1, now; + if (currstat == RMAIL) + sethomedir(genbuf, cuser.userid); + else + setbdir(genbuf, currboard); + if ((fd = (open(direct, O_RDONLY, 0))) != -1) { + if (lseek(fd, (off_t) (size * (inum1 - 1)), SEEK_SET) != + -1) { + while (read(fd, &rsfh, size) == size) { + if (i > inum2) + break; + now = getindex(genbuf, rsfh.filename, size); + strlcpy(currfile, rsfh.filename, sizeof(currfile)); + delete_file(genbuf, sizeof(fileheader_t), now, + cmpfilename); + i++; } - close(fd); } + close(fd); } - delete_range(direct, inum1, inum2); - fixkeep(direct, inum1); + } + delete_range(direct, inum1, inum2); + fixkeep(direct, inum1); - if (currmode & MODE_BOARD) - setbtotal(currbid); + if (currmode & MODE_BOARD) + setbtotal(currbid); - return DIRCHANGED; - } - return FULLUPDATE; + return DIRCHANGED; } - return DONOTHING; + return FULLUPDATE; } + return DONOTHING; +} - static int del_post(int ent, fileheader_t * fhdr, char *direct){ - char genbuf[100]; - int not_owned; - boardheader_t *bp; - - bp = getbcache(currbid); - if (strcmp(bp->brdname, "Security") == 0) - return DONOTHING; - if ((fhdr->filemode & FILE_MARKED) || (fhdr->filemode & FILE_DIGEST) || - (fhdr->owner[0] == '-')) - return DONOTHING; - - not_owned = strcmp(fhdr->owner, cuser.userid); - if ((!(currmode & MODE_BOARD) && not_owned) || - ((bp->brdattr & BRD_VOTEBOARD) && !HAS_PERM(PERM_SYSOP)) || - !strcmp(cuser.userid, STR_GUEST)) - return DONOTHING; - - getdata(1, 0, msg_del_ny, genbuf, 3, LCECHO); - if (genbuf[0] == 'y' || genbuf[0] == 'Y') { - strlcpy(currfile, fhdr->filename, sizeof(currfile)); - - setbfile(genbuf, currboard, fhdr->filename); - if (!delete_file(direct, sizeof(fileheader_t), ent, cmpfilename)) { - - if (currmode & MODE_SELECT) { - /* rocker.011018: �Q��reference��Cloading */ - fileheader_t hdr; - int num; - - num = fhdr->money & ~FHR_REFERENCE; - setbdir(genbuf, currboard); - get_record(genbuf, &hdr, sizeof(hdr), num); - - /* �A�o�̭ncheck�@�U��Ӫ�dir�̭��O���O���Q�H�ʹL... */ - if (strcmp(hdr.filename, fhdr->filename)) { - num = getindex(genbuf, fhdr->filename, sizeof(fileheader_t)); - get_record(genbuf, &hdr, sizeof(hdr), num); - } - /* rocker.011018: �o�̭n�٭�Q�}�a��money */ - fhdr->money = hdr.money; - delete_file(genbuf, sizeof(fileheader_t), num, cmpfilename); - } - cancelpost(fhdr, not_owned); +static int +del_post(int ent, fileheader_t * fhdr, char *direct) +{ + char genbuf[100]; + int not_owned; + boardheader_t *bp; - setbtotal(currbid); - if (fhdr->money < 0) - fhdr->money = 0; - if (not_owned && strcmp(currboard, "Test")) { - deumoney(searchuser(fhdr->owner), -fhdr->money); - } - if (!not_owned && strcmp(currboard, "Test")) { - if (cuser.numposts) - cuser.numposts--; - move(b_lines - 1, 0); - clrtoeol(); - demoney(-fhdr->money); - passwd_update(usernum, &cuser); /* post �� */ - prints("%s�A�z���峹� %d �g�A��I�M��O %d ��", msg_del_ok, - cuser.numposts, fhdr->money); - refresh(); - pressanykey(); + bp = getbcache(currbid); + if (strcmp(bp->brdname, "Security") == 0) + return DONOTHING; + if ((fhdr->filemode & FILE_MARKED) || (fhdr->filemode & FILE_DIGEST) || + (fhdr->owner[0] == '-')) + return DONOTHING; + + not_owned = strcmp(fhdr->owner, cuser.userid); + if ((!(currmode & MODE_BOARD) && not_owned) || + ((bp->brdattr & BRD_VOTEBOARD) && !HAS_PERM(PERM_SYSOP)) || + !strcmp(cuser.userid, STR_GUEST)) + return DONOTHING; + + getdata(1, 0, msg_del_ny, genbuf, 3, LCECHO); + if (genbuf[0] == 'y' || genbuf[0] == 'Y') { + strlcpy(currfile, fhdr->filename, sizeof(currfile)); + + setbfile(genbuf, currboard, fhdr->filename); + if (!delete_file(direct, sizeof(fileheader_t), ent, cmpfilename)) { + + if (currmode & MODE_SELECT) { + /* rocker.011018: �Q��reference��Cloading */ + fileheader_t hdr; + int num; + + num = fhdr->money & ~FHR_REFERENCE; + setbdir(genbuf, currboard); + get_record(genbuf, &hdr, sizeof(hdr), num); + + /* �A�o�̭ncheck�@�U��Ӫ�dir�̭��O���O���Q�H�ʹL... */ + if (strcmp(hdr.filename, fhdr->filename)) { + num = getindex(genbuf, fhdr->filename, sizeof(fileheader_t)); + get_record(genbuf, &hdr, sizeof(hdr), num); } - return DIRCHANGED; + /* rocker.011018: �o�̭n�٭�Q�}�a��money */ + fhdr->money = hdr.money; + delete_file(genbuf, sizeof(fileheader_t), num, cmpfilename); + } + cancelpost(fhdr, not_owned); + + setbtotal(currbid); + if (fhdr->money < 0) + fhdr->money = 0; + if (not_owned && strcmp(currboard, "Test")) { + deumoney(searchuser(fhdr->owner), -fhdr->money); + } + if (!not_owned && strcmp(currboard, "Test")) { + if (cuser.numposts) + cuser.numposts--; + move(b_lines - 1, 0); + clrtoeol(); + demoney(-fhdr->money); + passwd_update(usernum, &cuser); /* post �� */ + prints("%s�A�z���峹� %d �g�A��I�M��O %d ��", msg_del_ok, + cuser.numposts, fhdr->money); + refresh(); + pressanykey(); } + return DIRCHANGED; } - return FULLUPDATE; } + return FULLUPDATE; +} - static int view_postmoney(int ent, fileheader_t * fhdr, char *direct){ - move(b_lines - 1, 0); - clrtoeol(); - prints("�o�@�g�峹�� %d ��", fhdr->money); - refresh(); +static int +view_postmoney(int ent, fileheader_t * fhdr, char *direct) +{ + move(b_lines - 1, 0); + clrtoeol(); + prints("�o�@�g�峹�� %d ��", fhdr->money); + refresh(); + pressanykey(); + return FULLUPDATE; +} + +#ifdef OUTJOBSPOOL +/* �ݪO�ƥ� */ +static int +tar_addqueue(int ent, fileheader_t * fhdr, char *direct) +{ + char email[60], qfn[80], ans[2]; + FILE *fp; + char bakboard, bakman; + clear(); + showtitle("�ݪO�ƥ�", BBSNAME); + move(2, 0); + if (!((currmode & MODE_BOARD) || HAS_PERM(PERM_SYSOP))) { + move(5, 10); + outs("�p�n�O�O�D�άO�����~������� -.-\"\""); pressanykey(); return FULLUPDATE; } + sprintf(qfn, BBSHOME "/jobspool/tarqueue.%s", currboard); + if (access(qfn, 0) == 0) { + outs("�w�g�Ʃw��{, �y��|�i��ƥ�"); + pressanykey(); + return FULLUPDATE; + } + if (!getdata(4, 0, "�п�J�ت��H�c�G", email, sizeof(email), DOECHO)) + return FULLUPDATE; -#ifdef OUTJOBSPOOL - /* �ݪO�ƥ� */ - static int tar_addqueue(int ent, fileheader_t * fhdr, char *direct){ - char email[60], qfn[80], ans[2]; - FILE *fp; - char bakboard, bakman; - clear(); - showtitle("�ݪO�ƥ�", BBSNAME); - move(2, 0); - if (!((currmode & MODE_BOARD) || HAS_PERM(PERM_SYSOP))) { - move(5, 10); - outs("�p�n�O�O�D�άO�����~������� -.-\"\""); - pressanykey(); - return FULLUPDATE; - } - sprintf(qfn, BBSHOME "/jobspool/tarqueue.%s", currboard); - if (access(qfn, 0) == 0) { - outs("�w�g�Ʃw��{, �y��|�i��ƥ�"); - pressanykey(); - return FULLUPDATE; - } - if (!getdata(4, 0, "�п�J�ت��H�c�G", email, sizeof(email), DOECHO)) - return FULLUPDATE; - - /* check email -.-"" */ - if (strstr(email, "@") == NULL || strstr(email, ".bbs@") != NULL) { - move(6, 0); - outs("�z���w���H�c�����T! "); - pressanykey(); - return FULLUPDATE; - } - getdata(6, 0, "�n�ƥ��ݪO���e��(Y/N)?[Y]", ans, sizeof(ans), LCECHO); - bakboard = (ans[0] == 'n' || ans[0] == 'N') ? 0 : 1; - getdata(7, 0, "�n�ƥ���ذϤ��e��(Y/N)?[N]", ans, sizeof(ans), LCECHO); - bakman = (ans[0] == 'y' || ans[0] == 'Y') ? 1 : 0; - if (!bakboard && !bakman) { - move(8, 0); - outs("�i�O�ڭ̥u��ƥ��ݪO�κ�ذϪ��C ^^\"\"\""); - pressanykey(); - return FULLUPDATE; - } - fp = fopen(qfn, "w"); - fprintf(fp, "%s\n", cuser.userid); - fprintf(fp, "%s\n", email); - fprintf(fp, "%d,%d\n", bakboard, bakman); - fclose(fp); - - move(10, 0); - outs("�t�Τw�g�N�z���ƥ��ƤJ��{, \n"); - outs("�y��N�|�b�t�έt�����C���ɭԱN��ƱH���z~ :) "); + /* check email -.-"" */ + if (strstr(email, "@") == NULL || strstr(email, ".bbs@") != NULL) { + move(6, 0); + outs("�z���w���H�c�����T! "); + pressanykey(); + return FULLUPDATE; + } + getdata(6, 0, "�n�ƥ��ݪO���e��(Y/N)?[Y]", ans, sizeof(ans), LCECHO); + bakboard = (ans[0] == 'n' || ans[0] == 'N') ? 0 : 1; + getdata(7, 0, "�n�ƥ���ذϤ��e��(Y/N)?[N]", ans, sizeof(ans), LCECHO); + bakman = (ans[0] == 'y' || ans[0] == 'Y') ? 1 : 0; + if (!bakboard && !bakman) { + move(8, 0); + outs("�i�O�ڭ̥u��ƥ��ݪO�κ�ذϪ��C ^^\"\"\""); pressanykey(); return FULLUPDATE; } + fp = fopen(qfn, "w"); + fprintf(fp, "%s\n", cuser.userid); + fprintf(fp, "%s\n", email); + fprintf(fp, "%d,%d\n", bakboard, bakman); + fclose(fp); + + move(10, 0); + outs("�t�Τw�g�N�z���ƥ��ƤJ��{, \n"); + outs("�y��N�|�b�t�έt�����C���ɭԱN��ƱH���z~ :) "); + pressanykey(); + return FULLUPDATE; +} #endif - static int sequent_ent; - static int continue_flag; +static int sequent_ent; +static int continue_flag; - /* ----------------------------------------------------- */ - /* �̧�Ū�s�峹 */ - /* ----------------------------------------------------- */ - static int sequent_messages(fileheader_t * fptr) { - static int idc; - char genbuf[200]; +/* ----------------------------------------------------- */ +/* �̧�Ū�s�峹 */ +/* ----------------------------------------------------- */ +static int +sequent_messages(fileheader_t * fptr) +{ + static int idc; + char genbuf[200]; - if (fptr == NULL) - return (idc = 0); + if (fptr == NULL) + return (idc = 0); - if (++idc < sequent_ent) - return 0; + if (++idc < sequent_ent) + return 0; - if (!brc_unread(fptr->filename, brc_num, brc_list)) - return 0; + if (!brc_unread(fptr->filename, brc_num, brc_list)) + return 0; - if (continue_flag) - genbuf[0] = 'y'; - else { - prints("Ū���峹��G[%s] �@�̡G[%s]\n���D�G[%s]", - currboard, fptr->owner, fptr->title); - getdata(3, 0, "(Y/N/Quit) [Y]: ", genbuf, 3, LCECHO); - } + if (continue_flag) + genbuf[0] = 'y'; + else { + prints("Ū���峹��G[%s] �@�̡G[%s]\n���D�G[%s]", + currboard, fptr->owner, fptr->title); + getdata(3, 0, "(Y/N/Quit) [Y]: ", genbuf, 3, LCECHO); + } - if (genbuf[0] != 'y' && genbuf[0]) { - clear(); - return (genbuf[0] == 'q' ? QUIT : 0); - } - setbfile(genbuf, currboard, fptr->filename); - brc_addlist(fptr->filename); - - if (more(genbuf, YEA) == 0) - outmsg("\033[31;47m \033[31m(R)\033[30m�^�H \033[31m(��,n)" - "\033[30m�U�@�� \033[31m(��,q)\033[30m���} \033[m"); - continue_flag = 0; - - switch (egetch()) { - case KEY_LEFT: - case 'e': - case 'q': - case 'Q': - break; + if (genbuf[0] != 'y' && genbuf[0]) { + clear(); + return (genbuf[0] == 'q' ? QUIT : 0); + } + setbfile(genbuf, currboard, fptr->filename); + brc_addlist(fptr->filename); - case 'y': - case 'r': - case 'Y': - case 'R': - if (currmode & MODE_POST) { - strlcpy(quote_file, genbuf, sizeof(quote_file)); - do_reply(fptr); - *quote_file = 0; - } - break; + if (more(genbuf, YEA) == 0) + outmsg("\033[31;47m \033[31m(R)\033[30m�^�H \033[31m(��,n)" + "\033[30m�U�@�� \033[31m(��,q)\033[30m���} \033[m"); + continue_flag = 0; - case ' ': - case KEY_DOWN: - case '\n': - case 'n': - continue_flag = 1; + switch (egetch()) { + case KEY_LEFT: + case 'e': + case 'q': + case 'Q': + break; + + case 'y': + case 'r': + case 'Y': + case 'R': + if (currmode & MODE_POST) { + strlcpy(quote_file, genbuf, sizeof(quote_file)); + do_reply(fptr); + *quote_file = 0; } + break; - clear(); - return 0; + case ' ': + case KEY_DOWN: + case '\n': + case 'n': + continue_flag = 1; } - static int sequential_read(int ent, fileheader_t * fhdr, char *direct){ - char buf[40]; + clear(); + return 0; +} - clear(); - sequent_messages((fileheader_t *) NULL); - sequent_ent = ent; - continue_flag = 0; - setbdir(buf, currboard); - apply_record(buf, sequent_messages, sizeof(fileheader_t)); - return FULLUPDATE; - } +static int +sequential_read(int ent, fileheader_t * fhdr, char *direct) +{ + char buf[40]; - /* ----------------------------------------------------- */ - /* �ݪO�Ƨѿ��B��K�B��ذ� */ - /* ----------------------------------------------------- */ - int b_note_edit_bname(int bid){ - char buf[64]; - int aborted; - boardheader_t *fh = getbcache(bid); - setbfile(buf, fh->brdname, fn_notes); - aborted = vedit(buf, NA, NULL); - if (aborted == -1) { - clear(); - outs(msg_cancel); - pressanykey(); - } else { - if (!getdata(2, 0, "�]�w���Ĵ����ѡH(n/Y)", buf, 3, LCECHO) - || buf[0] != 'n') - fh->bupdate = gettime(3, fh->bupdate ? fh->bupdate : now); - else - fh->bupdate = 0; - substitute_record(fn_board, fh, sizeof(boardheader_t), bid); - } - return 0; - } + clear(); + sequent_messages((fileheader_t *) NULL); + sequent_ent = ent; + continue_flag = 0; + setbdir(buf, currboard); + apply_record(buf, sequent_messages, sizeof(fileheader_t)); + return FULLUPDATE; +} - static int b_notes_edit() { - if (currmode & MODE_BOARD) { - b_note_edit_bname(currbid); - return FULLUPDATE; - } - return 0; +/* ----------------------------------------------------- */ +/* �ݪO�Ƨѿ��B��K�B��ذ� */ +/* ----------------------------------------------------- */ +int +b_note_edit_bname(int bid) +{ + char buf[64]; + int aborted; + boardheader_t *fh = getbcache(bid); + setbfile(buf, fh->brdname, fn_notes); + aborted = vedit(buf, NA, NULL); + if (aborted == -1) { + clear(); + outs(msg_cancel); + pressanykey(); + } else { + if (!getdata(2, 0, "�]�w���Ĵ����ѡH(n/Y)", buf, 3, LCECHO) + || buf[0] != 'n') + fh->bupdate = gettime(3, fh->bupdate ? fh->bupdate : now); + else + fh->bupdate = 0; + substitute_record(fn_board, fh, sizeof(boardheader_t), bid); } + return 0; +} - static int b_water_edit() { - if (currmode & MODE_BOARD) { - friend_edit(BOARD_WATER); - return FULLUPDATE; - } - return 0; +static int +b_notes_edit() +{ + if (currmode & MODE_BOARD) { + b_note_edit_bname(currbid); + return FULLUPDATE; } + return 0; +} - static int visable_list_edit() { - if (currmode & MODE_BOARD) { - friend_edit(BOARD_VISABLE); - hbflreload(currbid); - return FULLUPDATE; - } - return 0; +static int +b_water_edit() +{ + if (currmode & MODE_BOARD) { + friend_edit(BOARD_WATER); + return FULLUPDATE; } + return 0; +} - static int b_post_note() { - char buf[200], yn[3]; - - if (currmode & MODE_BOARD) { - setbfile(buf, currboard, FN_POST_NOTE); - if (more(buf, NA) == -1) - more("etc/" FN_POST_NOTE, NA); - getdata(b_lines - 2, 0, "�O�_�n�Φۭqpost�`�N�ƶ�?", yn, sizeof(yn), LCECHO); - if (yn[0] == 'y') - vedit(buf, NA, NULL); - else - unlink(buf); - return FULLUPDATE; - } - return 0; +static int +visable_list_edit() +{ + if (currmode & MODE_BOARD) { + friend_edit(BOARD_VISABLE); + hbflreload(currbid); + return FULLUPDATE; } + return 0; +} - static int b_application() { - char buf[200]; - - if (currmode & MODE_BOARD) { - setbfile(buf, currboard, FN_APPLICATION); +static int +b_post_note() +{ + char buf[200], yn[3]; + + if (currmode & MODE_BOARD) { + setbfile(buf, currboard, FN_POST_NOTE); + if (more(buf, NA) == -1) + more("etc/" FN_POST_NOTE, NA); + getdata(b_lines - 2, 0, "�O�_�n�Φۭqpost�`�N�ƶ�?", yn, sizeof(yn), LCECHO); + if (yn[0] == 'y') vedit(buf, NA, NULL); - return FULLUPDATE; - } - return 0; + else + unlink(buf); + return FULLUPDATE; } + return 0; +} - static int can_vote_edit() { - if (currmode & MODE_BOARD) { - friend_edit(FRIEND_CANVOTE); - return FULLUPDATE; - } - return 0; +static int +b_application() +{ + char buf[200]; + + if (currmode & MODE_BOARD) { + setbfile(buf, currboard, FN_APPLICATION); + vedit(buf, NA, NULL); + return FULLUPDATE; } + return 0; +} - static int bh_title_edit() { - boardheader_t *bp; - - if (currmode & MODE_BOARD) { - char genbuf[BTLEN]; - - bp = getbcache(currbid); - move(1, 0); - clrtoeol(); - getdata_str(1, 0, "�п�J�ݪO�s����ԭz:", genbuf, - BTLEN - 16, DOECHO, bp->title + 7); - - if (!genbuf[0]) - return 0; - strip_ansi(genbuf, genbuf, 0); - strlcpy(bp->title + 7, genbuf, sizeof(bp->title) - 7); - substitute_record(fn_board, bp, sizeof(boardheader_t), currbid); - log_usies("SetBoard", currboard); - return FULLUPDATE; - } - return 0; +static int +can_vote_edit() +{ + if (currmode & MODE_BOARD) { + friend_edit(FRIEND_CANVOTE); + return FULLUPDATE; } + return 0; +} - static int b_notes() { - char buf[64]; +static int +bh_title_edit() +{ + boardheader_t *bp; - setbfile(buf, currboard, fn_notes); - if (more(buf, NA) == -1) { - clear(); - move(4, 20); - outs("���ݪO�|�L�u�Ƨѿ��v�C"); - } - pressanykey(); + if (currmode & MODE_BOARD) { + char genbuf[BTLEN]; + + bp = getbcache(currbid); + move(1, 0); + clrtoeol(); + getdata_str(1, 0, "�п�J�ݪO�s����ԭz:", genbuf, + BTLEN - 16, DOECHO, bp->title + 7); + + if (!genbuf[0]) + return 0; + strip_ansi(genbuf, genbuf, 0); + strlcpy(bp->title + 7, genbuf, sizeof(bp->title) - 7); + substitute_record(fn_board, bp, sizeof(boardheader_t), currbid); + log_usies("SetBoard", currboard); return FULLUPDATE; } + return 0; +} - int board_select() { - char fpath[80]; - char genbuf[100]; +static int +b_notes() +{ + char buf[64]; - currmode &= ~MODE_SELECT; - sprintf(fpath, "SR.%s", cuser.userid); - setbfile(genbuf, currboard, fpath); - unlink(genbuf); - if (currstat == RMAIL) - sethomedir(currdirect, cuser.userid); - else - setbdir(currdirect, currboard); - return NEWDIRECT; + setbfile(buf, currboard, fn_notes); + if (more(buf, NA) == -1) { + clear(); + move(4, 20); + outs("���ݪO�|�L�u�Ƨѿ��v�C"); } + pressanykey(); + return FULLUPDATE; +} - int board_digest() { - if (currmode & MODE_SELECT) - board_select(); - currmode ^= MODE_DIGEST; - if (currmode & MODE_DIGEST) - currmode &= ~MODE_POST; - else if (haspostperm(currboard)) - currmode |= MODE_POST; +int +board_select() +{ + char fpath[80]; + char genbuf[100]; + currmode &= ~MODE_SELECT; + sprintf(fpath, "SR.%s", cuser.userid); + setbfile(genbuf, currboard, fpath); + unlink(genbuf); + if (currstat == RMAIL) + sethomedir(currdirect, cuser.userid); + else setbdir(currdirect, currboard); - return NEWDIRECT; - } + return NEWDIRECT; +} - int board_etc() { - if (!HAS_PERM(PERM_SYSOP)) - return DONOTHING; - currmode ^= MODE_ETC; - if (currmode & MODE_ETC) - currmode &= ~MODE_POST; - else if (haspostperm(currboard)) - currmode |= MODE_POST; +int +board_digest() +{ + if (currmode & MODE_SELECT) + board_select(); + currmode ^= MODE_DIGEST; + if (currmode & MODE_DIGEST) + currmode &= ~MODE_POST; + else if (haspostperm(currboard)) + currmode |= MODE_POST; - setbdir(currdirect, currboard); - return NEWDIRECT; - } + setbdir(currdirect, currboard); + return NEWDIRECT; +} - static int good_post(int ent, fileheader_t * fhdr, char *direct){ - char genbuf[200]; - char genbuf2[200]; - int delta = 0; - - if ((currmode & MODE_DIGEST) || !(currmode & MODE_BOARD)) - return DONOTHING; - - if (fhdr->filemode & FILE_DIGEST) { - fhdr->filemode = (fhdr->filemode & ~FILE_DIGEST); - if (!strcmp(currboard, "Note") || !strcmp(currboard, "PttBug") || - !strcmp(currboard, "Artdsn") || !strcmp(currboard, "PttLaw")) { - deumoney(searchuser(fhdr->owner), -1000); - if (!(currmode & MODE_SELECT)) - fhdr->money -= 1000; - else - delta = -1000; - } - } else { - fileheader_t digest; - char *ptr, buf[64]; - - memcpy(&digest, fhdr, sizeof(digest)); - digest.filename[0] = 'G'; - strlcpy(buf, direct, sizeof(buf)); - ptr = strrchr(buf, '/') + 1; - ptr[0] = '\0'; - sprintf(genbuf, "%s%s", buf, digest.filename); - - if (dashf(genbuf)) - unlink(genbuf); +int +board_etc() +{ + if (!HAS_PERM(PERM_SYSOP)) + return DONOTHING; + currmode ^= MODE_ETC; + if (currmode & MODE_ETC) + currmode &= ~MODE_POST; + else if (haspostperm(currboard)) + currmode |= MODE_POST; - digest.filemode = 0; - sprintf(genbuf2, "%s%s", buf, fhdr->filename); - Link(genbuf2, genbuf); - strcpy(ptr, fn_mandex); - append_record(buf, &digest, sizeof(digest)); - - fhdr->filemode = (fhdr->filemode & ~FILE_MARKED) | FILE_DIGEST; - if (!strcmp(currboard, "Note") || !strcmp(currboard, "PttBug") || - !strcmp(currboard, "Artdsn") || !strcmp(currboard, "PttLaw")) { - deumoney(searchuser(fhdr->owner), 1000); - if (!(currmode & MODE_SELECT)) - fhdr->money += 1000; - else - delta = 1000; - } + setbdir(currdirect, currboard); + return NEWDIRECT; +} + +static int +good_post(int ent, fileheader_t * fhdr, char *direct) +{ + char genbuf[200]; + char genbuf2[200]; + int delta = 0; + + if ((currmode & MODE_DIGEST) || !(currmode & MODE_BOARD)) + return DONOTHING; + + if (fhdr->filemode & FILE_DIGEST) { + fhdr->filemode = (fhdr->filemode & ~FILE_DIGEST); + if (!strcmp(currboard, "Note") || !strcmp(currboard, "PttBug") || + !strcmp(currboard, "Artdsn") || !strcmp(currboard, "PttLaw")) { + deumoney(searchuser(fhdr->owner), -1000); + if (!(currmode & MODE_SELECT)) + fhdr->money -= 1000; + else + delta = -1000; } - substitute_record(direct, fhdr, sizeof(*fhdr), ent); - touchdircache(currbid); - /* rocker.011018: �걵�Ҧ���reference�W�i�IJv */ - if ((currmode & MODE_SELECT) && (fhdr->money & FHR_REFERENCE)) { - fileheader_t hdr; - char genbuf[100]; - int num; + } else { + fileheader_t digest; + char *ptr, buf[64]; - num = fhdr->money & ~FHR_REFERENCE; - setbdir(genbuf, currboard); - get_record(genbuf, &hdr, sizeof(hdr), num); + memcpy(&digest, fhdr, sizeof(digest)); + digest.filename[0] = 'G'; + strlcpy(buf, direct, sizeof(buf)); + ptr = strrchr(buf, '/') + 1; + ptr[0] = '\0'; + sprintf(genbuf, "%s%s", buf, digest.filename); - /* �A�o�̭ncheck�@�U��Ӫ�dir�̭��O���O���Q�H�ʹL... */ - if (strcmp(hdr.filename, fhdr->filename)) { - num = getindex(genbuf, fhdr->filename, sizeof(fileheader_t)); - get_record(genbuf, &hdr, sizeof(hdr), num); - } - fhdr->money = hdr.money + delta; + if (dashf(genbuf)) + unlink(genbuf); - substitute_record(genbuf, fhdr, sizeof(*fhdr), num); + digest.filemode = 0; + sprintf(genbuf2, "%s%s", buf, fhdr->filename); + Link(genbuf2, genbuf); + strcpy(ptr, fn_mandex); + append_record(buf, &digest, sizeof(digest)); + + fhdr->filemode = (fhdr->filemode & ~FILE_MARKED) | FILE_DIGEST; + if (!strcmp(currboard, "Note") || !strcmp(currboard, "PttBug") || + !strcmp(currboard, "Artdsn") || !strcmp(currboard, "PttLaw")) { + deumoney(searchuser(fhdr->owner), 1000); + if (!(currmode & MODE_SELECT)) + fhdr->money += 1000; + else + delta = 1000; } - return PART_REDRAW; } + substitute_record(direct, fhdr, sizeof(*fhdr), ent); + touchdircache(currbid); + /* rocker.011018: �걵�Ҧ���reference�W�i�IJv */ + if ((currmode & MODE_SELECT) && (fhdr->money & FHR_REFERENCE)) { + fileheader_t hdr; + char genbuf[100]; + int num; - /* help for board reading */ - static char *board_help[] = { - "\0���\\��ݪO�ާ@����", - "\01�R�O", - "(p)(��) �W���@�g�峹 (^P) �o���峹", - "(n)(��) �U���@�g�峹 (d) �R���峹", - "(P)(PgUp) �W���@�� (S) ��s�����峹", - "(N)(PgDn) �U���@�� (##) ���� ## ���峹", - "(r)(��) �\\Ū���g�峹 ($) ����̫�@�g�峹", - "\01�i���R�O", - "(tab)/z ��K�Ҧ�/��ذ� (a/A)(^Q)��M�@��/�@�̸��", - "(b/f) �iŪ�Ƨѿ�/�ѻP��L (?)(/) ��M���D", - "(V/R) �벼/�d�ߧ벼���G (^W)(X) �ڦb����/���ˤ峹", - "(x)(w) ����峹/����y (=)/([]<>-+) ��M���g�峹/�D�D���\\Ū", + num = fhdr->money & ~FHR_REFERENCE; + setbdir(genbuf, currboard); + get_record(genbuf, &hdr, sizeof(hdr), num); + + /* �A�o�̭ncheck�@�U��Ӫ�dir�̭��O���O���Q�H�ʹL... */ + if (strcmp(hdr.filename, fhdr->filename)) { + num = getindex(genbuf, fhdr->filename, sizeof(fileheader_t)); + get_record(genbuf, &hdr, sizeof(hdr), num); + } + fhdr->money = hdr.money + delta; + + substitute_record(genbuf, fhdr, sizeof(*fhdr), num); + } + return PART_REDRAW; +} + +/* help for board reading */ +static char *board_help[] = { + "\0���\\��ݪO�ާ@����", + "\01�R�O", + "(p)(��) �W���@�g�峹 (^P) �o���峹", + "(n)(��) �U���@�g�峹 (d) �R���峹", + "(P)(PgUp) �W���@�� (S) ��s�����峹", + "(N)(PgDn) �U���@�� (##) ���� ## ���峹", + "(r)(��) �\\Ū���g�峹 ($) ����̫�@�g�峹", + "\01�i���R�O", + "(tab)/z ��K�Ҧ�/��ذ� (a/A)(^Q)��M�@��/�@�̸��", + "(b/f) �iŪ�Ƨѿ�/�ѻP��L (?)(/) ��M���D", + "(V/R) �벼/�d�ߧ벼���G (^W)(X) �ڦb����/���ˤ峹", + "(x)(w) ����峹/����y (=)/([]<>-+) ��M���g�峹/�D�D���\\Ū", #ifdef INTERNET_EMAIL - "(F) �峹�H�^Internet�l�c (U) �N�峹 uuencode ��H�^�l�c", + "(F) �峹�H�^Internet�l�c (U) �N�峹 uuencode ��H�^�l�c", #endif - "(E) ���s�峹 (^H) �C�X�Ҧ��� New Post(s)", - "\01�O�D�R�O", - "(G) �|���L/����U�`/�}��(W/K/v) �s��Ƨѿ�/�����W��/�i�ݨ��W��", - "(M/o) �|��벼/�s�p�벼�W�� (m/c/g) �O�d�峹/������/��K", - "(D) �R���@�q�d�峹 (T/B) ���s�峹���D/���s�ݪO���D", - "(i) �s��ӽФJ�|���� (t/^D) �аO�峹/�尣�аO���峹", - "(O) �s��Post�`�N�ƶ� (H)/(Y) �ݪO����/�{�� �������ˤ峹", - NULL - }; - - static int b_help() { - show_help(board_help); - return FULLUPDATE; - } + "(E) ���s�峹 (^H) �C�X�Ҧ��� New Post(s)", + "\01�O�D�R�O", + "(G) �|���L/����U�`/�}��(W/K/v) �s��Ƨѿ�/�����W��/�i�ݨ��W��", + "(M/o) �|��벼/�s�p�벼�W�� (m/c/g) �O�d�峹/������/��K", + "(D) �R���@�q�d�峹 (T/B) ���s�峹���D/���s�ݪO���D", + "(i) �s��ӽФJ�|���� (t/^D) �аO�峹/�尣�аO���峹", + "(O) �s��Post�`�N�ƶ� (H)/(Y) �ݪO����/�{�� �������ˤ峹", + NULL +}; + +static int +b_help() +{ + show_help(board_help); + return FULLUPDATE; +} - /* ----------------------------------------------------- */ - /* �O�D�]�w����/ ������ */ - /* ----------------------------------------------------- */ - char board_hidden_status; +/* ----------------------------------------------------- */ +/* �O�D�]�w����/ ������ */ +/* ----------------------------------------------------- */ +char board_hidden_status; #ifdef BMCHS - static int change_hidden(int ent, fileheader_t * fhdr, char *direct){ - boardheader_t bh; - int bid; - char ans[4]; - - if (!((currmode & MODE_BOARD) || HAS_PERM(PERM_SYSOP)) || - currboard[0] == 0 || - (bid = getbnum(currboard)) < 0 || - get_record(fn_board, &bh, sizeof(bh), bid) == -1) - return DONOTHING; - - if (((bh.brdattr & BRD_HIDE) && (bh.brdattr & BRD_POSTMASK))) { - getdata(1, 0, "�ثe�O�b���Ϊ��A, �n�����ι�(Y/N)?[N]", - ans, sizeof(ans), LCECHO); - if (ans[0] != 'y' && ans[0] != 'Y') - return FULLUPDATE; - getdata(2, 0, "�A�T�{�@��, �u���n��O�O���}�� @____@(Y/N)?[N]", - ans, sizeof(ans), LCECHO); - if (ans[0] != 'y' && ans[0] != 'Y') - return FULLUPDATE; - if (bh.brdattr & BRD_HIDE) - bh.brdattr -= BRD_HIDE; - if (bh.brdattr & BRD_POSTMASK) - bh.brdattr -= BRD_POSTMASK; - log_usies("OpenBoard", bh.brdname); - outs("�g�ߤ��Dz��H�A�L�B���D���q�C\n"); - board_hidden_status = 0; - hbflreload(bid); - } else { - getdata(1, 0, "�ثe�O�b�{�Ϊ��A, �n���ι�(Y/N)?[N]", - ans, sizeof(ans), LCECHO); - if (ans[0] != 'y' && ans[0] != 'Y') - return FULLUPDATE; - bh.brdattr |= BRD_HIDE; - bh.brdattr |= BRD_POSTMASK; - log_usies("CloseBoard", bh.brdname); - outs("�g�ߤ��w�����A���ߵ��۬í��C\n"); - board_hidden_status = 1; - } - setup_man(&bh); - substitute_record(fn_board, &bh, sizeof(bh), bid); - reset_board(bid); - log_usies("SetBoard", bh.brdname); - pressanykey(); - return FULLUPDATE; +static int +change_hidden(int ent, fileheader_t * fhdr, char *direct) +{ + boardheader_t bh; + int bid; + char ans[4]; + + if (!((currmode & MODE_BOARD) || HAS_PERM(PERM_SYSOP)) || + currboard[0] == 0 || + (bid = getbnum(currboard)) < 0 || + get_record(fn_board, &bh, sizeof(bh), bid) == -1) + return DONOTHING; + + if (((bh.brdattr & BRD_HIDE) && (bh.brdattr & BRD_POSTMASK))) { + getdata(1, 0, "�ثe�O�b���Ϊ��A, �n�����ι�(Y/N)?[N]", + ans, sizeof(ans), LCECHO); + if (ans[0] != 'y' && ans[0] != 'Y') + return FULLUPDATE; + getdata(2, 0, "�A�T�{�@��, �u���n��O�O���}�� @____@(Y/N)?[N]", + ans, sizeof(ans), LCECHO); + if (ans[0] != 'y' && ans[0] != 'Y') + return FULLUPDATE; + if (bh.brdattr & BRD_HIDE) + bh.brdattr -= BRD_HIDE; + if (bh.brdattr & BRD_POSTMASK) + bh.brdattr -= BRD_POSTMASK; + log_usies("OpenBoard", bh.brdname); + outs("�g�ߤ��Dz��H�A�L�B���D���q�C\n"); + board_hidden_status = 0; + hbflreload(bid); + } else { + getdata(1, 0, "�ثe�O�b�{�Ϊ��A, �n���ι�(Y/N)?[N]", + ans, sizeof(ans), LCECHO); + if (ans[0] != 'y' && ans[0] != 'Y') + return FULLUPDATE; + bh.brdattr |= BRD_HIDE; + bh.brdattr |= BRD_POSTMASK; + log_usies("CloseBoard", bh.brdname); + outs("�g�ߤ��w�����A���ߵ��۬í��C\n"); + board_hidden_status = 1; } + setup_man(&bh); + substitute_record(fn_board, &bh, sizeof(bh), bid); + reset_board(bid); + log_usies("SetBoard", bh.brdname); + pressanykey(); + return FULLUPDATE; +} #endif - /* ----------------------------------------------------- */ - /* �ݪO�\��� */ - /* ----------------------------------------------------- */ - struct onekey_t read_comms[] = { - {KEY_TAB, board_digest}, - {'C', board_etc}, - {'b', b_notes}, - {'c', cite_post}, - {'r', read_post}, - {'z', b_man}, - {'D', del_range}, - {'S', sequential_read}, - {'E', edit_post}, - {'T', edit_title}, - {'s', do_select}, - {'R', b_results}, - {'V', b_vote}, - {'M', b_vote_maintain}, - {'B', bh_title_edit}, - {'W', b_notes_edit}, - {'O', b_post_note}, - {'K', b_water_edit}, - {'w', b_call_in}, - {'v', visable_list_edit}, - {'i', b_application}, - {'o', can_vote_edit}, - {'x', cross_post}, - {'X', recommend}, - {'Y', recommend_cancel}, - {'h', b_help}, +/* ----------------------------------------------------- */ +/* �ݪO�\��� */ +/* ----------------------------------------------------- */ +struct onekey_t read_comms[] = { + {KEY_TAB, board_digest}, + {'C', board_etc}, + {'b', b_notes}, + {'c', cite_post}, + {'r', read_post}, + {'z', b_man}, + {'D', del_range}, + {'S', sequential_read}, + {'E', edit_post}, + {'T', edit_title}, + {'s', do_select}, + {'R', b_results}, + {'V', b_vote}, + {'M', b_vote_maintain}, + {'B', bh_title_edit}, + {'W', b_notes_edit}, + {'O', b_post_note}, + {'K', b_water_edit}, + {'w', b_call_in}, + {'v', visable_list_edit}, + {'i', b_application}, + {'o', can_vote_edit}, + {'x', cross_post}, + {'X', recommend}, + {'Y', recommend_cancel}, + {'h', b_help}, #ifndef NO_GAMBLE - {'f', join_gamble}, - {'G', hold_gamble}, + {'f', join_gamble}, + {'G', hold_gamble}, #endif - {'g', good_post}, - {'y', reply_post}, - {'d', del_post}, - {'m', mark_post}, - {'L', solve_post}, - {Ctrl('P'), do_post}, - {Ctrl('W'), whereami}, - {'Q', view_postmoney}, + {'g', good_post}, + {'y', reply_post}, + {'d', del_post}, + {'m', mark_post}, + {'L', solve_post}, + {Ctrl('P'), do_post}, + {Ctrl('W'), whereami}, + {'Q', view_postmoney}, #ifdef OUTJOBSPOOL - {'u', tar_addqueue}, + {'u', tar_addqueue}, #endif #ifdef BMCHS - {'H', change_hidden}, + {'H', change_hidden}, #endif - {'\0', NULL} - }; + {'\0', NULL} +}; - int Read() { - int mode0 = currutmp->mode; - int stat0 = currstat, tmpbid = currutmp->brc_id; - char buf[40]; +int +Read() +{ + int mode0 = currutmp->mode; + int stat0 = currstat, tmpbid = currutmp->brc_id; + char buf[40]; #ifdef LOG_BOARD - time_t usetime = now; + time_t usetime = now; #endif - setutmpmode(READING); - set_board(); + setutmpmode(READING); + set_board(); - if (board_visit_time < board_note_time) { - setbfile(buf, currboard, fn_notes); - more(buf, NA); - pressanykey(); - } - setutmpbid(currbid); - setbdir(buf, currboard); - curredit &= ~EDIT_MAIL; - i_read(READING, buf, readtitle, readdoent, read_comms, - currbid); + if (board_visit_time < board_note_time) { + setbfile(buf, currboard, fn_notes); + more(buf, NA); + pressanykey(); + } + setutmpbid(currbid); + setbdir(buf, currboard); + curredit &= ~EDIT_MAIL; + i_read(READING, buf, readtitle, readdoent, read_comms, + currbid); #ifdef LOG_BOARD - log_board(currboard, now - usetime); + log_board(currboard, now - usetime); #endif - brc_update(); - setutmpbid(tmpbid); - currutmp->mode = mode0; - currstat = stat0; - return 0; - } + brc_update(); + setutmpbid(tmpbid); + currutmp->mode = mode0; + currstat = stat0; + return 0; +} - void ReadSelect() { - int mode0 = currutmp->mode; - int stat0 = currstat; - char genbuf[200]; - - currstat = XMODE; - if (do_select(0, 0, genbuf) == NEWDIRECT) - Read(); - setutmpbid(0); - currutmp->mode = mode0; - currstat = stat0; - } +void +ReadSelect() +{ + int mode0 = currutmp->mode; + int stat0 = currstat; + char genbuf[200]; + + currstat = XMODE; + if (do_select(0, 0, genbuf) == NEWDIRECT) + Read(); + setutmpbid(0); + currutmp->mode = mode0; + currstat = stat0; +} #ifdef LOG_BOARD - static void log_board(char *mode, time_t usetime){ - char buf[256]; +static void +log_board(char *mode, time_t usetime) +{ + char buf[256]; - if (usetime > 30) { - sprintf(buf, "USE %-20.20s Stay: %5ld (%s) %s", - mode, usetime, cuser.userid, ctime(&now)); - log_file(FN_USEBOARD, buf); - } + if (usetime > 30) { + sprintf(buf, "USE %-20.20s Stay: %5ld (%s) %s", + mode, usetime, cuser.userid, ctime(&now)); + log_file(FN_USEBOARD, buf); } +} #endif - int Select() { - char genbuf[200]; +int +Select() +{ + char genbuf[200]; - setutmpmode(SELECT); - do_select(0, NULL, genbuf); - return 0; - } + setutmpmode(SELECT); + do_select(0, NULL, genbuf); + return 0; +} #ifdef HAVEMOBILE - void mobile_message(char *mobile, char *message){ +void +mobile_message(char *mobile, char *message) +{ - bsmtp(char *fpath, char *title, char *rcpt, int method); - } + bsmtp(char *fpath, char *title, char *rcpt, int method); +} #endif |