/** * Prompt and wait user to press any key. * @param[in] msg The prompt message. * @param[in] x Line number. */ void presskeyfor(const char *msg, int x) { extern int showansi; showansi = 1; screen_move_clear(x); outs(msg); egetch(); screen_move_clear(x); }
static void display(editor_t *editor, bool ansi) { int line = 0, lines = screen_lines() - 1; for (vector_size_t i = editor->window_top; i < editor->allow_edit_end && line < lines; ++i, ++line) { text_line_t *tl = editor_line(editor, i); if (editor->redraw || tl->redraw) { screen_move_clear(line); if (ansi) { screen_puts(tl->buf, tl->size); } else { bool marked = i >= editor->mark_begin && i < editor->mark_end; if (marked) screen_puts("\033[7m", 4); const char *last = tl->buf, *end = tl->buf + tl->size; for (const char *ptr = tl->buf; ptr < end; ++ptr) { if (*ptr == '\033') { if (ptr > last) screen_puts(last, ptr - last); screen_puts("\033[33m*", 0); if (marked) screen_puts("\033[37m", 0); else screen_puts("\033[m", 0); last = ptr + 1; } } if (end > last) { size_t size = end - last - contains_newline(tl); if (size) screen_puts(last, size); } if (marked) screen_puts("\033[m", 3); } tl->redraw = false; } } if (editor->redraw) { for (; line < lines; ++line) { screen_move_clear(line); screen_puts("\033[33m~\033[m", 0); } } show_status_line(editor); screen_move(editor->current_line - editor->window_top, editor->screen_pos); editor->redraw = false; return; }
int pressreturn(void) { extern int showansi; char buf[3]; showansi = 1; screen_move_clear(-1); getdata(-1, 0, //% " [1;33m请按 ◆[5;36mEnter[m[1;33m◆ 继续\033[m", " [1;33m\xc7\xeb\xb0\xb4 \xa1\xf4[5;36mEnter[m[1;33m\xa1\xf4 \xbc\xcc\xd0\xf8\033[m", buf, 2, NOECHO, YEA); screen_move_clear(-1); screen_flush(); return 0; }
int t_query(const char *uname) { if (streq(currentuser.userid, "guest")) return DONOTHING; char userid[EXT_IDLEN + 1]; if (uname) { if (*uname == '\0') return DONOTHING; strlcpy(userid, uname, sizeof(userid)); strtok(userid, " "); } else { set_user_status(ST_QUERY); screen_flush(); screen_move(2, 0); screen_clrtobot(); screen_printf("<输入使用者代号, 按空白键可列出符合字串>"); user_complete(1, "查询谁: ", userid, sizeof(userid)); if (*userid == '\0') return FULLUPDATE; } if (tui_query_result(userid) != 0) { screen_move_clear(2); screen_printf("\033[1m不正确的使用者代号\033[m\n"); pressanykey(); return FULLUPDATE; } if (session_status() != ST_LUSERS && session_status() != ST_LAUSERS && session_status() != ST_FRIEND && session_status() != ST_GMENU) pressanykey(); return FULLUPDATE; }
// pager与msg设定 // int x_userdefine() { int id; unsigned int newlevel; set_user_status(ST_USERDEF); if (!(id = getuser(currentuser.userid))) { screen_move_clear(3); //% prints("错误的使用者 ID..."); prints("\xb4\xed\xce\xf3\xb5\xc4\xca\xb9\xd3\xc3\xd5\xdf ID..."); pressreturn(); screen_clear(); return 0; } screen_move(1, 0); screen_clrtobot(); screen_move(2, 0); use_define = 1; //% newlevel = setperms(lookupuser.userdefine, "参数", NUMDEFINES, newlevel = setperms(lookupuser.userdefine, "\xb2\xce\xca\xfd", NUMDEFINES, showperminfo); screen_move(2, 0); if (newlevel == lookupuser.userdefine) //% prints("参数没有修改...\n"); prints("\xb2\xce\xca\xfd\xc3\xbb\xd3\xd0\xd0\xde\xb8\xc4...\n"); else { lookupuser.userdefine = newlevel; currentuser.userdefine = newlevel; substitut_record(PASSFILE, &lookupuser, sizeof(struct userec), id); //% prints("新的参数设定完成...\n\n"); prints("\xd0\xc2\xb5\xc4\xb2\xce\xca\xfd\xc9\xe8\xb6\xa8\xcd\xea\xb3\xc9...\n\n"); } pressreturn(); screen_clear(); use_define = 0; return 0; }
// pager与msg设定 // int x_userdefine() { int id; unsigned int newlevel; set_user_status(ST_USERDEF); if (!(id = getuser(currentuser.userid))) { screen_move_clear(3); screen_printf("错误的使用者 ID..."); pressreturn(); screen_clear(); return 0; } screen_move(1, 0); screen_clrtobot(); screen_move(2, 0); use_define = 1; newlevel = setperms(lookupuser.userdefine, "参数", NUMDEFINES, showperminfo); screen_move(2, 0); if (newlevel == lookupuser.userdefine) screen_printf("参数没有修改...\n"); else { lookupuser.userdefine = newlevel; currentuser.userdefine = newlevel; substitut_record(PASSFILE, &lookupuser, sizeof(struct userec), id); screen_printf("新的参数设定完成...\n\n"); } pressreturn(); screen_clear(); use_define = 0; return 0; }
void showtitle(const char *title, const char *mid) { extern char BoardName[]; //main.c char buf[STRLEN], *note; int spc1; int spc2; note = boardmargin(); spc1 = 39 + num_ans_chr(title) - strlen(title) - strlen(mid) / 2; spc2 = 79 - (strlen(title) - num_ans_chr(title) + spc1 + strlen(note) + strlen(mid)); spc1 += spc2; spc1 = (spc1 > 2) ? spc1 : 2; //防止过小 spc2 = spc1 / 2; spc1 -= spc2; screen_move_clear(0); sprintf(buf, "%*s", spc1, ""); if (!strcmp(mid, BoardName)) prints("[1;44;33m%s%s[37m%s[1;44m", title, buf, mid); else if (mid[0] == '[') prints("[1;44;33m%s%s[5;36m%s[m[1;44m", title, buf, mid); else prints("[1;44;33m%s%s[36m%s", title, buf, mid); sprintf(buf, "%*s", spc2, ""); prints("%s[33m%s[m\n", buf, note); tui_update_status_line(); screen_move(1, 0); }
void tui_update_status_line(void) { extern time_t login_start_time; //main.c char date[STRLEN]; screen_move_clear(-1); if (!DEFINE(DEF_ENDLINE)) return; fb_time_t now = fb_time(); int cur_sec = now % 10; if (cur_sec < 5) { strlcpy(date, format_time(now, TIME_FORMAT_UTF8_ZH), sizeof(date)); } else { if (resolve_boards() >= 0) convert_g2u(brdshm->date, date); else date[0] = '\0'; } if (cur_sec >= 5 && is_birth(¤tuser)) { screen_printf("\033[0;1;33;44m[\033[36m " "啦啦~~生日快乐!记得要请客哟 :P" " \033[33m]\033[m"); } else { int stay = (now - login_start_time) / 60; char stay_str[20]; describe_stay(stay, stay_str, sizeof(stay_str)); char notice[128]; notice_string(notice, sizeof(notice)); int notice_width = screen_display_width(notice, true); screen_printf("\033[1;44;33m[\033[36m%29s\033[33m]" "[\033[36m%5d\033[33m人\033[36m%3d\033[33m友]", date, session_count_online(), session_count_online_followed(!HAS_PERM(PERM_SEECLOAK))); // 剩下35列 if (notice_width) { int space = 33 - notice_width; if (space > 0) tui_repeat_char(' ', space); screen_printf("[\033[%d;36m%s\033[m\033[1;33;44m]\033[m", _suppress_notice ? 1 : 5, notice); } else { int space = 27 - strlen(currentuser.userid); tui_repeat_char(' ', space); prints("[\033[36m%s\033[33m]%s\033[m", currentuser.userid, stay_str); } } }
int x_cloak(void) { bool visible = session_toggle_visibility(); report("toggle cloak", currentuser.userid); screen_move_clear(-1); //% "隐身术已经 %s 了!" "停止" "启动" prints("\xd2\xfe\xc9\xed\xca\xf5\xd2\xd1\xbe\xad %s \xc1\xcb!", visible ? "\xcd\xa3\xd6\xb9" : "\xc6\xf4\xb6\xaf"); pressreturn(); return 0; }
static tui_list_query_t following_list_query(tui_list_t *p) { p->in_query = true; if (t_query(following_list_get_name(p->data, p->cur)) == -1) return FULLUPDATE; screen_move_clear(-1); //% prints("\033[0;1;44;31m\033[33m 寄信 m │ 结束 Q,← │上一位 ↑│" prints("\033[0;1;44;31m\033[33m \xbc\xc4\xd0\xc5 m \xa9\xa6 \xbd\xe1\xca\xf8 Q,\xa1\xfb \xa9\xa6\xc9\xcf\xd2\xbb\xce\xbb \xa1\xfc\xa9\xa6" //% "下一位 <Space>,↓ \033[m"); "\xcf\xc2\xd2\xbb\xce\xbb <Space>,\xa1\xfd \033[m"); screen_flush(); return DONOTHING; }
static void getfield(int line, char *info, char *desc, char *buf, int len) { screen_move(line, 0); //% prints(" 原先设定: %s \033[1;32m(%s)\033[m", prints(" \xd4\xad\xcf\xc8\xc9\xe8\xb6\xa8: %s \033[1;32m(%s)\033[m", //% (buf[0] == '\0') ? "(未设定)" : buf, info); (buf[0] == '\0') ? "(\xce\xb4\xc9\xe8\xb6\xa8)" : buf, info); char prompt[STRLEN]; snprintf(prompt, sizeof(prompt), " %s: ", desc); getdata(line + 1, 0, prompt, buf, len, DOECHO, YEA); string_remove_non_printable_gbk(buf); screen_move_clear(line); prints(" %s: %s\n", desc, buf); clrtoeol(); }
//取得genbuf中保存的用户所在的记录位置到*id中,为零表示不存在 int gettheuserid(int x, char *title, int *id) { screen_move(x, 0); usercomplete(title, genbuf); if (*genbuf == '\0') { screen_clear(); return 0; } if (!(*id = getuser(genbuf))) { screen_move_clear(x + 3); //% prints("错误的使用者代号"); prints("\xb4\xed\xce\xf3\xb5\xc4\xca\xb9\xd3\xc3\xd5\xdf\xb4\xfa\xba\xc5"); pressreturn(); screen_clear(); return 0; } return 1; }
user_id_t user_complete_id(int row, const char *prompt) { char name[IDLEN + 1]; user_complete(row, prompt, name, sizeof(name)); if (*name == '\0') { screen_clear(); return 0; } user_id_t id = getuser(name); if (!id) { screen_move_clear(row + 3); screen_printf("错误的使用者代号"); pressreturn(); return 0; } return id; }
static void show_status_line(const editor_t *editor) { screen_move_clear(-1); if (editor->hide_status_line) return; bool mail = chkmail(); vector_size_t x; text_line_size_t y; real_pos(editor, &x, &y); screen_printf("\033[1;33;44m[%s] [\033[32m%s\033[33m]" " [\033[32m按\033[31mCtrl-Q\033[32m求救\033[33m]" " [\033[32m%d\033[33m,\033[32m%d\033[33m]\033[K\033[m", mail ? "\033[5;32m信\033[m\033[1;33;44m" : " ", format_time(fb_time(), TIME_FORMAT_UTF8_ZH) + 7, x, y); }
void tui_header_line(const char *menu, bool check_mail) { extern int mailXX; //main.c char title[36]; if (check_mail && chkmail()) strlcpy(title, strstr(menu, "讨论区列表") ? "[您有信件,按 M 看新信]" : "[您有信件]", sizeof(title)); else if (check_mail && mailXX == 1) strlcpy(title, "[信件过量,请整理信件!]", sizeof(title)); else strlcpy(title, BBSNAME_UTF8, sizeof(title)); bool show_board = true; int w1 = screen_display_width(menu, true), w2 = screen_display_width(title, true), w3 = screen_display_width(currboard, true) + 2; int spaces = 80 - w1 - w2 - w3; if (spaces < 0) { spaces = 80 - w1 - w2; show_board = false; } screen_move_clear(0); screen_printf("\033[1;33;44m%s", menu); if (spaces > 0) tui_repeat_char(' ', spaces / 2); if (streq(title, BBSNAME_UTF8)) screen_printf("\033[37m%s", title); else if (title[0] == '[') screen_printf("\033[5;36m%s\033[0;1;44m", title); else screen_printf("\033[36m%s", title); if (spaces > 0) tui_repeat_char(' ', spaces - spaces / 2); if (show_board) screen_printf("\033[33m[%s]\033[m", currboard); tui_update_status_line(); screen_move(1, 0); }
static tui_list_title_t online_users_title(tui_list_t *p) { online_users_t *up = p->data; tui_header_line(up->follow ? "[关注列表]" : "[使用者列表]", true); screen_printf(" 寄信[\033[1;32mm\033[m] 送讯息[\033[1;32ms\033[m]" " 加,减关注[\033[1;32mo\033[m,\033[1;32md\033[m]" " 看说明档[\033[1;32m→\033[m,\033[1;32mRtn\033[m]" " 切换模式 [\033[1;32mf\033[m] 求救[\033[1;32mh\033[m]"); //% const char *field = up->show_note ? "备注" : "昵称"; const char *field = up->show_note ? "\xb1\xb8\xd7\xa2" : "\xea\xc7\xb3\xc6"; char title[256]; //% snprintf(title, sizeof(title), "\033[1;44m 编号 使用者代号 %s " snprintf(title, sizeof(title), "\033[1;44m \xb1\xe0\xba\xc5 \xca\xb9\xd3\xc3\xd5\xdf\xb4\xfa\xba\xc5 %s " //% " 上站位置 目前动态 发呆 \033[m\n", " \xc9\xcf\xd5\xbe\xce\xbb\xd6\xc3 \xc4\xbf\xc7\xb0\xb6\xaf\xcc\xac \xb7\xa2\xb4\xf4 \033[m\n", field); screen_move_clear(2); prints("%s", title); }
int tui_check_notice(const char *board_name) { screen_move_clear(-1); prints("\033[m\xb2\xe9\xbf\xb4:"); int replies, mentions; notice_count(&replies, &mentions); print_option("\xc8\xa1\xcf\xfb", NULL, 0, 0); print_option("\xbb\xd8\xb8\xb4", "\xc6\xaa", replies, 1); print_option("\xcc\xe1\xbc\xb0", "\xc6\xaa", mentions, 2); int choice = 0; if (replies) choice = 1; else if (mentions) choice = 2; prints(" [%d]: ", choice); char ans[2]; int x, y; screen_coordinates(&x, &y); getdata(x, y, "", ans, sizeof(ans), true, true); if (*ans == '\0') *ans = '0' + choice; if (*ans == '1') { post_list_reply(); brc_init(currentuser.userid, board_name); return FULLUPDATE; } if (*ans == '2') { post_list_mention(); brc_init(currentuser.userid, board_name); return FULLUPDATE; } return MINIUPDATE; }
static void user_login(void) { char fname[STRLEN]; // SYSOP gets all permission bits when login. if (strcmp(currentuser.userid, "SYSOP") == 0) { currentuser.userlevel = ~0; substitut_record(PASSFILE, ¤tuser, sizeof(currentuser), usernum); } fromhost[sizeof(fromhost) - 1] = 0; //added by iamfat 2004.01.05 to avoid overflow log_usies("ENTER", fromhost, ¤tuser); SpecialID(currentuser.userid, fromhost, sizeof(fromhost)); u_enter(); report("Enter", currentuser.userid); #ifdef USE_NOTEPAD notepad_init(); if (strcmp(currentuser.userid, "guest") != 0) { if (DEFINE(DEF_NOTEPAD)) { int noteln; if (lastnote> currentuser.notedate) currentuser.noteline = 0; noteln = countln("etc/notepad"); if (currentuser.noteline == 0) { shownotepad(); } else if ((noteln - currentuser.noteline)> 0) { screen_move(0, 0); ansimore2("etc/notepad", NA, 0, noteln - currentuser.noteline + 1); terminal_getchar(); screen_clear(); } currentuser.noteline = noteln; write_defnotepad(); } } #endif if (show_statshm("etc/hotspot", 0)) { screen_flush(); pressanykey(); } if ((vote_flag(NULL, '\0', 2 /* 检查读过新的Welcome 没 */) == 0)) { if (dashf("Welcome")) { ansimore("Welcome", YEA); vote_flag(NULL, 'R', 2 /* 写入读过新的Welcome */); } } else { ansimore("Welcome2", YEA); } show_statshm("0Announce/bbslist/day", 1); screen_flush(); screen_move_clear(-2); if (currentuser.numlogins < 1) { currentuser.numlogins = 0; //% prints("\033[1;36m☆ 这是您第 \033[33m1\033[36m 次拜访本站,请记住今天吧。\n"); prints("\033[1;36m\xa1\xee \xd5\xe2\xca\xc7\xc4\xfa\xb5\xda \033[33m1\033[36m \xb4\xce\xb0\xdd\xb7\xc3\xb1\xbe\xd5\xbe\xa3\xac\xc7\xeb\xbc\xc7\xd7\xa1\xbd\xf1\xcc\xec\xb0\xc9\xa1\xa3\n"); //% prints("☆ 您第一次连入本站的时间为 \033[33m%s\033[m ", format_time(time(NULL), TIME_FORMAT_ZH)); prints("\xa1\xee \xc4\xfa\xb5\xda\xd2\xbb\xb4\xce\xc1\xac\xc8\xeb\xb1\xbe\xd5\xbe\xb5\xc4\xca\xb1\xbc\xe4\xce\xaa \033[33m%s\033[m ", format_time(fb_time(), TIME_FORMAT_ZH)); } else { prints( //% "\033[1;36m☆ 这是您第 \033[33m%d\033[36m 次拜访本站,上次您是从 \033[33m%s\033[36m 连往本站。\n", "\033[1;36m\xa1\xee \xd5\xe2\xca\xc7\xc4\xfa\xb5\xda \033[33m%d\033[36m \xb4\xce\xb0\xdd\xb7\xc3\xb1\xbe\xd5\xbe\xa3\xac\xc9\xcf\xb4\xce\xc4\xfa\xca\xc7\xb4\xd3 \033[33m%s\033[36m \xc1\xac\xcd\xf9\xb1\xbe\xd5\xbe\xa1\xa3\n", currentuser.numlogins + 1, currentuser.lasthost); //% prints("☆ 上次连线时间为 \033[33m%s\033[m ", format_time(currentuser.lastlogin, TIME_FORMAT_ZH)); prints("\xa1\xee \xc9\xcf\xb4\xce\xc1\xac\xcf\xdf\xca\xb1\xbc\xe4\xce\xaa \033[33m%s\033[m ", format_time(currentuser.lastlogin, TIME_FORMAT_ZH)); } terminal_getchar(); setuserfile(fname, BADLOGINFILE); if (ansimore(fname, NA) != -1) { //% if (askyn("您要删除以上密码输入错误的记录吗", NA, NA) == YEA) if (askyn("\xc4\xfa\xd2\xaa\xc9\xbe\xb3\xfd\xd2\xd4\xc9\xcf\xc3\xdc\xc2\xeb\xca\xe4\xc8\xeb\xb4\xed\xce\xf3\xb5\xc4\xbc\xc7\xc2\xbc\xc2\xf0", NA, NA) == YEA) unlink(fname); } set_safe_record(); tui_check_uinfo(¤tuser); strlcpy(currentuser.lasthost, fromhost, sizeof(currentuser.lasthost)); if (login_start_time - currentuser.lastlogin >= 20 * 60 || !strcmp(currentuser.userid, "guest") || currentuser.numlogins < 100) { currentuser.numlogins++; } session_basic_info_t *res = get_my_sessions(); update_user_stay(¤tuser, true, session_basic_info_count(res) > 1); session_basic_info_clear(res); #ifdef ALLOWGAME if (currentuser.money> 1000000) { currentuser.nummedals += currentuser.money / 10000; currentuser.money %= 1000000; } if ((signed int) (currentuser.money - currentuser.bet) < -4990 && currentuser.numlogins < 10 && currentuser.numposts < 10 && currentuser.nummedals == 0) currentuser.money += 1000; #endif if (currentuser.firstlogin == 0) { currentuser.firstlogin = time(NULL) - 7 * 86400; } substitut_record(PASSFILE, ¤tuser, sizeof(currentuser), usernum); extern char currmaildir[]; setmdir(currmaildir, currentuser.userid); check_register_info(); }
void tui_update_status_line(void) { extern time_t login_start_time; //main.c char date[STRLEN]; screen_move_clear(-1); if (!DEFINE(DEF_ENDLINE)) return; fb_time_t now = fb_time(); int cur_sec = now % 10; if (cur_sec < 5) { strlcpy(date, format_time(now, TIME_FORMAT_ZH), sizeof(date)); } else { if (resolve_boards() >= 0) strlcpy(date, brdshm->date, 30); else date[0] = '\0'; } if (cur_sec >= 5 && is_birth(¤tuser)) { //% "啦啦~~,生日快乐! 记得要请客哟 :P" prints("\033[0;1;44;33m[\033[36m " "\xc0\xb2\xc0\xb2\xa1\xab\xa1\xab\xa3\xac\xc9\xfa\xc8\xd5" "\xbf\xec\xc0\xd6! \xbc\xc7\xb5\xc3\xd2\xaa\xc7\xeb" "\xbf\xcd\xd3\xb4 :P \033[33m]\033[m"); } else { int stay = (now - login_start_time) / 60; char stay_str[20]; describe_stay(stay, stay_str, sizeof(stay_str)); char notice[128]; notice_string(notice, sizeof(notice)); int notice_len = strlen(notice); prints( "\033[1;44;33m[\033[36m%29s\033[33m]" //% "人 友" "[\033[36m%5d\033[33m\xc8\xcb\033[36m%3d\033[33m\xd3\xd1]", date, session_count_online(), session_count_online_followed(!HAS_PERM(PERM_SEECLOAK))); if (notice_len) { int space = 25 - notice_len; if (space > 0) { tui_repeat_char(' ', space); prints("[\033[%d;36m%s\033[m\033[1;33;44m]%s\033[m", _suppress_notice ? 1 : 5, notice, stay_str); } else { space += 6; if (space > 0) tui_repeat_char(' ', space); prints("[\033[%d;36m%s\033[m\033[1;33;44m]\033[m", _suppress_notice ? 1 : 5, notice); } } else { int space = 25 - strlen(currentuser.userid); tui_repeat_char(' ', space); prints("[\033[36m%s\033[33m]%s\033[m", currentuser.userid, stay_str); } } }
// Show 'title' on line 0, 'prompt' on line1. void docmdtitle(const char *title, const char *prompt) { firsttitle(title); screen_move_clear(1); prints("%s", prompt); }
void tui_check_reg_mail(void) { //% char email[EMAIL_LEN] = "您的邮箱", file[HOMELEN], buf[RNDPASSLEN + 1]; char email[EMAIL_LEN] = "\xc4\xfa\xb5\xc4\xd3\xca\xcf\xe4", file[HOMELEN], buf[RNDPASSLEN + 1]; int i = 0; sethomefile(file, currentuser.userid, REG_CODE_FILE); if (!dashf(file)) { screen_move(1, 0); //% outs(" 请输入您的复旦邮箱([email protected]/alu.fudan.edu.cn)\n" outs(" \xc7\xeb\xca\xe4\xc8\xeb\xc4\xfa\xb5\xc4\xb8\xb4\xb5\xa9\xd3\xca\xcf\xe4([email protected]/alu.fudan.edu.cn)\n" //% " \033[1;32m本站采用复旦邮箱绑定认证,将发送认证码至您的复旦邮箱\033[m"); " \033[1;32m\xb1\xbe\xd5\xbe\xb2\xc9\xd3\xc3\xb8\xb4\xb5\xa9\xd3\xca\xcf\xe4\xb0\xf3\xb6\xa8\xc8\xcf\xd6\xa4\xa3\xac\xbd\xab\xb7\xa2\xcb\xcd\xc8\xcf\xd6\xa4\xc2\xeb\xd6\xc1\xc4\xfa\xb5\xc4\xb8\xb4\xb5\xa9\xd3\xca\xcf\xe4\033[m"); do { getdata(3, 0, " E-Mail:> ", email, sizeof(email), DOECHO, YEA); if (!valid_addr(email) || !register_domain_allowed(email) || !register_email_allowed(email)) { //% prints(" 对不起, 该email地址无效, 请重新输入 \n"); prints(" \xb6\xd4\xb2\xbb\xc6\xf0, \xb8\xc3""email\xb5\xd8\xd6\xb7\xce\xde\xd0\xa7, \xc7\xeb\xd6\xd8\xd0\xc2\xca\xe4\xc8\xeb \n"); continue; } else break; } while (1); register_send_email(¤tuser, email); } screen_move_clear(4); screen_move(5, 0); //% prints(" \033[1;33m 认证码已发送到 %s ,请查收\033[m\n", email); prints(" \033[1;33m \xc8\xcf\xd6\xa4\xc2\xeb\xd2\xd1\xb7\xa2\xcb\xcd\xb5\xbd %s \xa3\xac\xc7\xeb\xb2\xe9\xca\xd5\033[m\n", email); screen_move(7, 0); //% if (askyn(" 现在输入认证码么?", true, false)) { if (askyn(" \xcf\xd6\xd4\xda\xca\xe4\xc8\xeb\xc8\xcf\xd6\xa4\xc2\xeb\xc3\xb4\xa3\xbf", true, false)) { screen_move(9, 0); //% outs("请输入注册确认信里, \"认证码\"来做为身份确认\n"); outs("\xc7\xeb\xca\xe4\xc8\xeb\xd7\xa2\xb2\xe1\xc8\xb7\xc8\xcf\xd0\xc5\xc0\xef, \"\xc8\xcf\xd6\xa4\xc2\xeb\"\xc0\xb4\xd7\xf6\xce\xaa\xc9\xed\xb7\xdd\xc8\xb7\xc8\xcf\n"); //% prints("一共是 %d 个字符, 大小写是有差别的, 请注意.\n", RNDPASSLEN); prints("\xd2\xbb\xb9\xb2\xca\xc7 %d \xb8\xf6\xd7\xd6\xb7\xfb, \xb4\xf3\xd0\xa1\xd0\xb4\xca\xc7\xd3\xd0\xb2\xee\xb1\xf0\xb5\xc4, \xc7\xeb\xd7\xa2\xd2\xe2.\n", RNDPASSLEN); //% outs("请注意, 请输入最新一封认证信中所包含的乱数密码!\n\n" outs("\xc7\xeb\xd7\xa2\xd2\xe2, \xc7\xeb\xca\xe4\xc8\xeb\xd7\xee\xd0\xc2\xd2\xbb\xb7\xe2\xc8\xcf\xd6\xa4\xd0\xc5\xd6\xd0\xcb\xf9\xb0\xfc\xba\xac\xb5\xc4\xc2\xd2\xca\xfd\xc3\xdc\xc2\xeb\xa3\xa1\n\n" //% "\033[1;31m提示:注册码输错 3次后系统将要求您重填需绑定的邮箱。\033[m\n"); "\033[1;31m\xcc\xe1\xca\xbe\xa3\xba\xd7\xa2\xb2\xe1\xc2\xeb\xca\xe4\xb4\xed 3\xb4\xce\xba\xf3\xcf\xb5\xcd\xb3\xbd\xab\xd2\xaa\xc7\xf3\xc4\xfa\xd6\xd8\xcc\xee\xd0\xe8\xb0\xf3\xb6\xa8\xb5\xc4\xd3\xca\xcf\xe4\xa1\xa3\033[m\n"); for (i = 0; i < 3; i++) { screen_move(15, 0); //% prints("您还有 %d 次机会\n", 3 - i); prints("\xc4\xfa\xbb\xb9\xd3\xd0 %d \xb4\xce\xbb\xfa\xbb\xe1\n", 3 - i); //% getdata(16, 0, "请输入认证码: ", buf, sizeof(buf), DOECHO, YEA); getdata(16, 0, "\xc7\xeb\xca\xe4\xc8\xeb\xc8\xcf\xd6\xa4\xc2\xeb: ", buf, sizeof(buf), DOECHO, YEA); if (register_activate_email(currentuser.userid, buf)) break; } } if (i == 3) { unlink(file); //% prints("认证失败! 请重填邮箱。\n"); prints("\xc8\xcf\xd6\xa4\xca\xa7\xb0\xdc! \xc7\xeb\xd6\xd8\xcc\xee\xd3\xca\xcf\xe4\xa1\xa3\n"); sethomefile(file, currentuser.userid, ".regextra"); if (dashf(file)) unlink(file); pressanykey(); } else { //% prints("认证成功!\n"); prints("\xc8\xcf\xd6\xa4\xb3\xc9\xb9\xa6!\n"); sethomefile(file, currentuser.userid, ".regextra"); if (dashf(file)) { //% prints("我们将暂时保留您的正常使用权限,如果核对您输入的个人信息有误将停止您的发文权限,\n"); prints("\xce\xd2\xc3\xc7\xbd\xab\xd4\xdd\xca\xb1\xb1\xa3\xc1\xf4\xc4\xfa\xb5\xc4\xd5\xfd\xb3\xa3\xca\xb9\xd3\xc3\xc8\xa8\xcf\xde,\xc8\xe7\xb9\xfb\xba\xcb\xb6\xd4\xc4\xfa\xca\xe4\xc8\xeb\xb5\xc4\xb8\xf6\xc8\xcb\xd0\xc5\xcf\xa2\xd3\xd0\xce\xf3\xbd\xab\xcd\xa3\xd6\xb9\xc4\xfa\xb5\xc4\xb7\xa2\xce\xc4\xc8\xa8\xcf\xde,\n"); //% prints("因此请确保您输入的是个人真实信息.\n"); prints("\xd2\xf2\xb4\xcb\xc7\xeb\xc8\xb7\xb1\xa3\xc4\xfa\xca\xe4\xc8\xeb\xb5\xc4\xca\xc7\xb8\xf6\xc8\xcb\xd5\xe6\xca\xb5\xd0\xc5\xcf\xa2.\n"); } if (!HAS_PERM(PERM_REGISTER)) { //% prints("请继续填写注册单。\n"); prints("\xc7\xeb\xbc\xcc\xd0\xf8\xcc\xee\xd0\xb4\xd7\xa2\xb2\xe1\xb5\xa5\xa1\xa3\n"); } pressanykey(); } }