⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 personal_corp.c

📁 KBSBBS系统Blog外挂程序 可以在KBSBBS上支持SMTH Blog系统 技术在不断完善
💻 C
📖 第 1 页 / 共 4 页
字号:
#undef PUTS#undef PUTC#undef GET_TAG/******* * num==-1: 增加 * num >=0: 修改 *          num为序号 */int pc_add_a_dir(unsigned long nid){    struct pc_nodes pn;    char ans[201];    int ret;    bzero(&pn, sizeof(pn));    if (nid) {        if (get_pc_a_node(&pn, nid) <= 0)            return 0;    }    move(t_lines - 1, 0);    clrtoeol();    if (nid) {        strncpy(ans, pn.subject, 200);        ans[200] = 0;    } else        ans[0] = 0;    getdata(t_lines - 1, 0, "标题:", ans, 200, DOECHO, NULL, false);    if (!ans[0])        return 0;    strncpy(pn.subject, ans, 200);    pn.subject[200] = 0;    if (pn.body)        free(pn.body);    pn.body = NULL;    strncpy(pn.hostname, uinfo.from, 20);    pn.hostname[20] = 0;    pn.created = time(0);    pn.changed = pn.created;    pn.uid = pc_u->uid;    pn.pid = pc_fav_dir;    pn.type = 1;    pn.comment = 1;    pn.access = 3;    ret = add_pc_nodes(&pn);    return ret;}/******* * nid==-1: 增加 * nid >=0: 修改 *          num为序号 */int pc_add_a_node(unsigned long nid){    struct pc_nodes pn;    char ans[201];    char fpath[STRLEN];    int ret;    bzero(&pn, sizeof(pn));    if (nid) {        if (get_pc_a_node(&pn, nid) <= 0)            return 0;    }    move(t_lines - 1, 0);    clrtoeol();    if (nid) {        strncpy(ans, pn.subject, 200);        ans[200] = 0;    } else        ans[0] = 0;    getdata(t_lines - 1, 0, "标题:", ans, 200, DOECHO, NULL, false);    if (!ans[0])        return 0;    strncpy(pn.subject, ans, 200);    pn.subject[200] = 0;    gettmpfilename(fpath, "pc.node");    unlink(fpath);    if (nid && pn.body) {        pc_conv_body_to_file(pn.body, fpath);        free(pn.body);        pn.body = NULL;    } else        unlink(fpath);    if (vedit(fpath, 0, NULL, NULL, 0) == -1)        return 0;    pn.body = NULL;    if (!pc_conv_file_to_body(&(pn.body), fpath)) {        unlink(fpath);        return 0;    }    unlink(fpath);    strncpy(pn.hostname, uinfo.from, 20);    pn.hostname[20] = 0;    pn.created = time(0);    pn.changed = pn.created;    pn.uid = pc_u->uid;    pn.pid = pc_fav_dir;    pn.comment = 1;    pn.access = pc_dirmode - 1;    ret = add_pc_nodes(&pn);    if (pn.body)        free(pn.body);    return ret;}static int pc_dir_title(struct _select_def *conf){    int chkmailflag;    chkmailflag = chkmail();    clear();    move(0, 0);    if (chkmailflag == 2) {        prints("\033[0;1;5;44m                         [您的信箱超过容量,不能再收信!]                       \033[m");    } else if (chkmailflag) {        prints("\033[0;1;5;44m                                   [您有信件]                                 \033[m");    } else {        prints("\033[0;1;44m  %s的个人文集 -- %-44s ", pc_u->username, pc_u->corpusname);        switch (pc_dirmode) {        case 2:            prints("[好友区]\033[m");            break;        case 3:            prints("[私人区]\033[m");            break;        case 4:            prints("[收藏区]\033[m");            break;        case 5:            prints("[删除区]\033[m");            break;        default:            prints("[公开区]\033[m");            break;        }    }    move(1, 0);    if (pc_dirmode != 2)        prints("               退出[\033[1;32mq\033[m] 增加[\033[1;32ma\033[m] 删除[\033[1;32md\033[m] 修改[\033[1;32me\033[m] 拷贝[\033[1;32mc\033[m] 粘贴[\033[1;32mp\033[m]");    else        prints            ("退出[\033[1;32mq\033[m] 增加[\033[1;32ma\033[m] 删除[\033[1;32md\033[m] 修改[\033[1;32me\033[m] 拷贝[\033[1;32mc\033[m] 粘贴[\033[1;32mp\033[m] 修改好友[\033[1;32mo\033[m] 导入好友[\033[1;32mi\033[m]");    move(2, 0);    prints("\033[0;1;44m  %-4s %-6s %-38s %-4s %-4s %-12s\033[m", "序号", "类别", "标题", "评论", "访问", "文章发表时间");    update_endline();    return SHOW_CONTINUE;}static int pc_dir_select(struct _select_def *conf){    char fpath[STRLEN];    int ch;    clear();    //pc_add_visitcount(pc_n[conf->pos - conf->page_pos].nid);    pc_n[conf->pos - conf->page_pos].visitcount++;        /**如果是目录***/    if (pc_dirmode == 4 && pc_n[conf->pos - conf->page_pos].type == 1) {        unsigned long old_fav_dir = pc_fav_dir;        pc_fav_dir = pc_n[conf->pos - conf->page_pos].nid;        pc_read_dir(0);        pc_fav_dir = old_fav_dir;        if (pc_select_user[0])            return SHOW_QUIT;        return SHOW_DIRCHANGE;    }        /***先显示文章正文*****/    gettmpfilename(fpath, "pc.node");    unlink(fpath);    if (!pc_conv_node_to_file(pc_n[conf->pos - conf->page_pos].nid, fpath)) {        move(3, 0);        prints("没有内容");        pressanykey();        return SHOW_REFRESH;    }    ch = mmap_more(fpath, 1, "r", "PersonalCorp");    if (ch == 0) {        move(t_lines - 1, 0);        if (pc_n[conf->pos - conf->page_pos].comment)            prints("\033[0;1;44m r 查看所有评论(共%d条)                                                         \033[m", pc_n[conf->pos - conf->page_pos].commentcount);        else            prints("\033[0;1;44m 本文不许评论 \033[m");        ch = igetkey();    }    switch (ch) {    case 'r':        pc_now_node_ent = conf->pos - conf->page_pos;        pc_read_comment();        return SHOW_DIRCHANGE;    default:        break;    }    unlink(fpath);    return SHOW_REFRESH;}static int pc_dir_show(struct _select_def *conf, int i){    char newts[20];    prints(" %-3d %s %-38s %-3d %-3d %-12s", i, pc_n[i - conf->page_pos].type == 0 ? "[文章]" : "\033[1;33m[目录]\033[m", pc_n[i - conf->page_pos].subject, pc_n[i - conf->page_pos].commentcount,           pc_n[i - conf->page_pos].visitcount, tt2timestamp(pc_n[i - conf->page_pos].created, newts));    return SHOW_CONTINUE;}static int pc_dir_key(struct _select_def *conf, int key){    switch (key) {    case 'a':        if (!pc_is_owner(pc_u->username))            return SHOW_CONTINUE;        if (conf->item_count > pc_u->nodelimit) {            clear();            prints("文章数目达到限制");            pressreturn();            return SHOW_REFRESH;        }        if (pc_add_a_node(0))            return SHOW_DIRCHANGE;        return SHOW_REFRESH;        break;    case 'i':        {            char ans[4];            if (!pc_is_owner(pc_u->username) || pc_dirmode != 2)                return SHOW_CONTINUE;            clear();            getdata(3, 0, "确实要导入好友名单? (Y/N) [N]: ", ans, 3, DOECHO, NULL, true);            if (ans[0] != 'y' && ans[0] != 'Y') {                return SHOW_REFRESH;            } else {                char fpath[STRLEN];                char buf[STRLEN];                struct friends fh;                FILE *fp;                int suc = 0;                sethomefile(fpath, getCurrentUser()->userid, "friends");                sethomefile(buf, getCurrentUser()->userid, "pc_friend");                if ((fp = fopen(fpath, "r")) == NULL)                    return SHOW_REFRESH;                while (fread(&fh, sizeof(fh), 1, fp)) {                    if (pc_add_friend(fh.id, buf, 0) > 0)                        suc++;                }                fclose(fp);                move(10, 0);                clrtoeol();                prints("成功导入 %d 个好友", suc);                pressanykey();                return SHOW_REFRESH;            }        }    case 'o':        if (!pc_is_owner(pc_u->username) || pc_dirmode != 2)            return SHOW_CONTINUE;        pc_change_friend();        return SHOW_REFRESH;        break;    case 'g':        if (!pc_is_owner(pc_u->username) || pc_dirmode != 4 || pc_fav_dir == 0)            return SHOW_CONTINUE;        if (conf->item_count > pc_u->dirlimit) {            clear();            prints("目录数目达到限制");            pressreturn();            return SHOW_REFRESH;        }        if (pc_add_a_dir(0))            return SHOW_DIRCHANGE;        return SHOW_REFRESH;        break;    case 'd':        if (!pc_is_admin(pc_u->username))            return SHOW_CONTINUE;        if (pc_dirmode == 5) {            if (del_pc_nodes(pc_n[conf->pos - conf->page_pos].nid, pc_n[conf->pos - conf->page_pos].access, pc_u->uid)) {                return SHOW_DIRCHANGE;            }        } else if (pc_dirmode == 4) {            struct pc_nodes pn;            if (get_pc_nodes(&pn, pc_u->uid, pc_n[conf->pos - conf->page_pos].nid, -1, 3, 0, 1, 0) > 0) {                move(t_lines - 1, 0);                clrtoeol();                prints("不能删除非空目录,按任意键继续");                igetkey();                update_endline();                return SHOW_CONTINUE;            }            if (del_pc_node_junk(pc_n[conf->pos - conf->page_pos].nid, pc_n[conf->pos - conf->page_pos].access, pc_u->uid))                return SHOW_DIRCHANGE;        } else {            if (del_pc_node_junk(pc_n[conf->pos - conf->page_pos].nid, pc_n[conf->pos - conf->page_pos].access, pc_u->uid))                return SHOW_DIRCHANGE;        }        return SHOW_REFRESH;        break;    case 'D':        {            char ans[4];            if (!pc_is_owner(pc_u->username))                return SHOW_CONTINUE;            if (pc_dirmode != 5)                return SHOW_CONTINUE;            clear();            getdata(1, 0, "确实要清空垃圾箱吗? (Y/N) [N]:", ans, 3, DOECHO, NULL, true);            if (ans[0] != 'y' && ans[0] != 'Y')                return SHOW_REFRESH;            pc_del_junk(pc_u->uid);            return SHOW_DIRCHANGE;        }    case 'e':        if (!pc_is_owner(pc_u->username))            return SHOW_CONTINUE;        if (pc_dirmode == 4 && pc_n[conf->pos - conf->page_pos].type == 1) {            if (pc_add_a_dir(pc_n[conf->pos - conf->page_pos].nid))                return SHOW_DIRCHANGE;            return SHOW_REFRESH;        }        if (pc_add_a_node(pc_n[conf->pos - conf->page_pos].nid))            return SHOW_DIRCHANGE;        return SHOW_REFRESH;        break;    case 'c':        if (pc_n[conf->pos - conf->page_pos].type == 1) {            move(t_lines - 1, 0);            clrtoeol();            prints("不能复制目录,按任意键继续");            igetkey();            update_endline();            return SHOW_CONTINUE;        }        pc_pasteboard = pc_n[conf->pos - conf->page_pos].nid;        move(t_lines - 1, 0);        clrtoeol();        prints("已经复制该条目到剪贴板中,按任意键继续");        igetkey();        update_endline();        return SHOW_CONTINUE;        break;    case 'p':        if (!pc_is_owner(pc_u->username))            return SHOW_CONTINUE;        if (conf->item_count > pc_u->nodelimit) {            clear();            prints("文章数目达到限制");            pressreturn();            return SHOW_REFRESH;        }        if (pc_pasteboard <= 0) {            move(t_lines - 1, 0);            clrtoeol();            prints("剪贴板没有内容,按任意键继续");            igetkey();            update_endline();            return SHOW_DIRCHANGE;        }        if (pc_paste_node(pc_pasteboard, pc_u->uid, pc_dirmode - 1, pc_dirmode == 4 ? pc_fav_dir : 0)) {            move(t_lines - 1, 0);            clrtoeol();            prints("粘贴成功,按任意键继续");            igetkey();            update_endline();            return SHOW_DIRCHANGE;        }        move(t_lines - 1, 0);        clrtoeol();        prints("粘贴失败,按任意键继续");        igetkey();        update_endline();        return SHOW_CONTINUE;        break;    case 's':        {            char ans[20];            struct userec *lookupuser;            move(0, 0);            clrtoeol();            prints("选择别的用户的个人文集");            move(1, 0);            clrtoeol();            prints("输入用户id:");            usercomplete(NULL, ans);            if (ans[0] == 0 || ans[0] == '\n' || ans[0] == '\r')                return SHOW_REFRESH;            if (getuser(ans, &lookupuser) == 0)                return SHOW_REFRESH;            strncpy(pc_select_user, ans, IDLEN + 2);            pc_select_user[IDLEN + 1] = 0;            return SHOW_QUIT;            break;        }    case 'v':        i_read_mail();        return SHOW_REFRESH;        break;    }    return SHOW_CONTINUE;}static int pc_dir_getdata(struct _select_def *conf, int pos, int len){    int i;    for (i = 0; i < BBS_PAGESIZE; i++) {        if (pc_n[i].body)            free(pc_n[i].body);    }    bzero(pc_n, sizeof(struct pc_nodes) * BBS_PAGESIZE);    if (conf->item_count - conf->page_pos < BBS_PAGESIZE)        conf->item_count = count_pc_nodes(pc_u->uid, pc_fav_dir, -1, pc_dirmode - 1);    if (pos <= 0) {        clear();        move(3, 0);        prints("pos:%d\n", pos);        pressanykey();    }    i = get_pc_nodes(pc_n, pc_u->uid, pc_fav_dir, -1, pc_dirmode - 1, pos - 1, BBS_PAGESIZE, 0);    if (i < 0)        return SHOW_QUIT;    if (i == 0) {        conf->page_pos = 1;        i = get_pc_nodes(pc_n, pc_u->uid, pc_fav_dir, -1, pc_dirmode - 1, 0, BBS_PAGESIZE, 0);        if (i <= 0)            return SHOW_QUIT;    }    return SHOW_CONTINUE;}static int pc_dir_prekey(struct _select_def *conf, int *key){    switch (*key) {    case 'q':        *key = KEY_LEFT;        break;    case 'k':        *key = KEY_UP;        break;    case 'j':        *key = KEY_DOWN;        break;    }    return SHOW_CONTINUE;}int pc_read_dir(int first){    struct _select_def group_conf;    POINT *pts;    int i;    if (pc_dirmode <= 0 || pc_dirmode > 5)        return 0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -