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

📄 personal_corp.c

📁 KBSBBS系统Blog外挂程序 可以在KBSBBS上支持SMTH Blog系统 技术在不断完善
💻 C
📖 第 1 页 / 共 4 页
字号:
    free(pc_s);    return 0;}/**************************************************** * * * * * 个人文集分区选择的select * * * * *****************************************************//******* * 检查权限的函数 * 返回 1: 普通用户 *      2: 好友 *      5: 所有权限 */char pc_select_user[IDLEN + 2];static int pc_is_owner(char *userid){    if (!strcasecmp(userid, getCurrentUser()->userid) && pc_u->createtime >= getCurrentUser()->firstlogin)        return 1;    return 0;}static int pc_is_admin(char *userid){    if (HAS_PERM(getCurrentUser(), PERM_ADMIN) || pc_is_owner(userid))        return 1;    return 0;}static int pc_is_friend(char *userid){    char fpath[STRLEN];    sethomefile(fpath, userid, "pc_friend");    if (seek_in_file(fpath, getCurrentUser()->userid))        return 1;    return 0;}static int pc_perm(char *userid){    if (pc_is_owner(userid))        return 5;    if (pc_is_admin(userid))        return 2;    if (pc_is_friend(userid))        return 2;    return 1;}static int pc_seldir_show(struct _select_def *conf, int i){    switch (i) {    case 1:        prints(" 公开区");        break;    case 2:        prints(" 好友区");        break;    case 3:        prints(" 私人区");        break;    case 4:        prints(" 收藏区");        break;    case 5:        prints(" 删除区");        break;    default:        prints(" NULL ");        break;    }    return SHOW_CONTINUE;}static int pc_seldir_title(struct _select_def *conf){    clear();    move(2, 0);    prints("           \033[1;31m%s的个人文集 -- %s\033[m", pc_u->username, pc_u->description);    return SHOW_CONTINUE;}static int pc_seldir_select(struct _select_def *conf){    pc_dirmode = conf->pos;    pc_read_dir(1);    if (pc_select_user[0])        return SHOW_QUIT;    return SHOW_REFRESH;}int pc_read(char *userid){    struct userec *lookupuser;    struct _select_def group_conf;    POINT *pts = NULL;    int i;    pc_u = (struct pc_users *) malloc(sizeof(struct pc_users));    if (pc_u == NULL)        return 0;    strncpy(pc_select_user, userid, IDLEN + 2);    pc_select_user[IDLEN] = 0;  startuser:    clear();    if (getuser(pc_select_user, &lookupuser) == 0) {        clear();        move(7, 0);        prints("此用户不存在");        pressanykey();        free(pc_u);        free(pts);        return 0;    }    pc_select_user[0] = 0;    bzero(pc_u, sizeof(struct pc_users));    if (!get_pc_users(pc_u, lookupuser->userid)) {        clear();        move(7, 0);        prints("没有此用户个人文集存在");        free(pc_u);        free(pts);        pc_u = NULL;        pressanykey();        return 0;    }    pc_fav_dir = 0;    pc_dirmode = 1;    bzero(&group_conf, sizeof(struct _select_def));    if (pts == NULL) {        pts = (POINT *) malloc(sizeof(POINT) * BBS_PAGESIZE);        for (i = 0; i < BBS_PAGESIZE; i++) {            pts[i].x = 30;            pts[i].y = i + 10;        }    }    group_conf.item_per_page = BBS_PAGESIZE;    group_conf.flag = LF_VSCROLL | LF_BELL | LF_LOOP;    group_conf.prompt = "◆";    group_conf.item_pos = pts;    group_conf.title_pos.x = 0;    group_conf.title_pos.y = 0;    group_conf.pos = 1;    group_conf.page_pos = 1;    group_conf.item_count = pc_perm(lookupuser->userid);    group_conf.show_data = pc_seldir_show;    group_conf.show_title = pc_seldir_title;    group_conf.pre_key_command = pc_seldir_prekey;    group_conf.on_select = pc_seldir_select;    list_select_loop(&group_conf);    if (pc_select_user[0])        goto startuser;    free(pts);    free(pc_u);    pc_u = NULL;    return 0;}/************************************************** * * * 以下是文章列表select * * * ***************************************************/struct pc_nodes *pc_n = NULL;//int pc_dir_start = 0;/* 用于评论select,表示当前是哪个node,对应 pc_n[i] */int pc_now_node_ent = 0;/* 复制粘贴的东西,保存临时node nid */unsigned long pc_pasteboard = 0;int pc_get_fav_root(unsigned long *nid){    struct pc_nodes pn;    int ret;    ret = get_pc_nodes(&pn, pc_u->uid, 0, 1, 3, 0, 1, 0);    if (ret <= 0)        return ret;    *nid = pn.nid;    return 1;}int pc_add_fav_root(){    struct pc_nodes pn;    bzero(&pn, sizeof(pn));    pn.pid = 0;    pn.type = 1;    strncpy(pn.hostname, uinfo.from, 20);    pn.hostname[20] = 0;    pn.created = time(0);    pn.changed = pn.created;    pn.uid = pc_u->uid;    pn.access = 3;    return add_pc_nodes(&pn);}int pc_conv_body_to_file(char *body, char *fname){    int fd;    unsigned long size;    unsigned long hadwrite = 0;    int nd;    int ret;    if (!body)        return 0;    size = strlen(body);    if ((fd = open(fname, O_WRONLY | O_CREAT, 0600)) < 0)        return 0;    do {        if (size > 10240)            nd = 10240;        else            nd = size;        ret = write(fd, body + hadwrite, nd);        if (ret <= 0) {            close(fd);            return 0;        }        size -= ret;        hadwrite += ret;    } while (size > 0);    close(fd);    return 1;}int pc_conv_com_to_file(unsigned long nid, char *fname){    int fd;    struct pc_comments pn;    unsigned long size;    unsigned long hadwrite = 0;    int nd;    int ret;    char buf[256];    struct userec *lookupuser;    ret = get_pc_a_com(&pn, nid);    if (ret <= 0) {        return 0;    }    if (getuser(pn.username, &lookupuser) == 0) {        if (pn.body)            free(pn.body);        return 0;    }    if ((fd = open(fname, O_WRONLY | O_CREAT, 0600)) < 0) {        if (pn.body)            free(pn.body);        return 0;    }    snprintf(buf, 255, "发信人: %s (%s), 个人文集\n", lookupuser->userid, lookupuser->username);    write(fd, buf, strlen(buf));    snprintf(buf, 255, "标  题: %s\n", pn.subject);    write(fd, buf, strlen(buf));    snprintf(buf, 255, "发信站: %s (%24.24s), 评论\n\n", BBS_FULL_NAME, ctime(&pn.created));    write(fd, buf, strlen(buf));    if (pn.body) {        size = strlen(pn.body);        do {            if (size > 10240)                nd = 10240;            else                nd = size;            ret = write(fd, pn.body + hadwrite, nd);            if (ret <= 0) {                close(fd);                free(pn.body);                return 0;            }            size -= ret;            hadwrite += ret;        } while (size > 0);        free(pn.body);    }    close(fd);    return 1;}static const char TAG_NEWLN[11][8] = {    "br",    "/p",    "/tr",    "/div",    "/h1",    "/h2",    "/h3",    "/h4",    "/h5",    "/h6",    "/li"};static const char TAG_SPACE[3][8] = {    "/td",    "/th",    "/span"};static const char TAG_SPECL[5][2][8] = {    {"nbsp", " "},    {"amp", "&"},    {"quot", "\""},    {"gt", ">"},    {"lt", "<"}};static const char TAG_LINK[6][2][8] = {    {"a", "href="},    {"img", "src="},    {"applet", "src="},    {"embed", "src="},    {"bgsound", "src="},    {"iframe", "src="}};#define PUTC(chr)  buf[hadwrite]=chr; hadwrite++; if (hadwrite==256) { ret = write(fd, buf, 256); hadwrite=0; }#define PUTS(str)  temp=str; while(*temp) { PUTC(*temp); temp++; }#define GET_TAG(condi) tagp=0; tag[0]=0; while ((condi)&&(*ptr)&&(tagp<255)) { tag[tagp] = *ptr; tagp++; ptr++; } tag[tagp]=0;int pc_conv_node_to_file(unsigned long nid, char *fname){    char *ptr, *temp;    char tag[256];    int tagp;    int fd;    struct pc_nodes pn;    unsigned long size;    unsigned long hadwrite = 0;    int nd;    int ret;    char buf[256];    struct userec *lookupuser;    if (getuser(pc_u->username, &lookupuser) == 0)        return 0;    if ((fd = open(fname, O_WRONLY | O_CREAT, 0600)) < 0)        return 0;    ret = get_pc_a_node(&pn, nid);    if (ret <= 0) {        close(fd);        return 0;    }    snprintf(buf, 255, "发信人: %s (%s), 个人文集\n", lookupuser->userid, lookupuser->username);    write(fd, buf, strlen(buf));    snprintf(buf, 255, "标  题: %s\n", pn.subject);    write(fd, buf, strlen(buf));    snprintf(buf, 255, "发信站: %s (%24.24s), 文集\n\n", BBS_FULL_NAME, ctime(&pn.created));    write(fd, buf, strlen(buf));    if (pn.body) {        if (pn.htmltag) {//need to parse html            ptr = pn.body;            PUTS("(本文包含HTML标记,终端模式下可能无法正确浏览)\n");            do {                switch (*ptr) {                case '<':                    ptr++;                    GET_TAG((*ptr != '>') && (*ptr != ' '));                    for (nd = 0; nd < 11; nd++)                        if (!strcasecmp(tag, TAG_NEWLN[nd])) {                            PUTS("\n");                            break;                        }                    for (nd = 0; nd < 3; nd++)                        if (!strcasecmp(tag, TAG_SPACE[nd])) {                            PUTC(' ');                            break;                        }                    for (nd = 0; nd < 6; nd++) {                        if (!strcasecmp(tag, TAG_LINK[nd][0]) && (*ptr == ' ')) {                            do {                                while (*ptr == ' ')                                    ptr++;                                GET_TAG((*ptr != '\"') && (*ptr != '/') && (*ptr != '>'));                                if (*ptr != '\"') {                                    if (*ptr)                                        ptr++;                                    continue;                                }                                ptr++;                                if (!strcasecmp(tag, TAG_LINK[nd][1])) {                                    GET_TAG(*ptr != '\"');                                    PUTS(" [ ");                                    PUTS(tag);                                    PUTS(" ] ");                                    if (*ptr)                                        ptr++;                                } else {                                    GET_TAG(*ptr != '\"');                                    if (*ptr)                                        ptr++;                                }                            } while (*ptr == ' ');                            break;                        }                    }                    while ((*ptr) && (*ptr != '>'))                        ptr++;                    if (*ptr == '>')                        ptr++;                    break;                case '&':                    ptr++;                    GET_TAG((*ptr >= 'a') && (*ptr <= 'z'));                    for (tagp = 0; tagp < 5; tagp++)                        if (!strcasecmp(tag, TAG_SPECL[tagp][0])) {                            PUTC(TAG_SPECL[tagp][1][0]);                            break;                        }                    ptr++;                    break;                default:                    PUTC(*ptr);                    ptr++;                }                if (ret <= 0) {                    close(fd);                    free(pn.body);                    return 0;                }            } while (*ptr);            if (hadwrite)                ret = write(fd, buf, hadwrite);        } else {//normal article            size = strlen(pn.body);            do {                if (size > 10240)                    nd = 10240;                else                    nd = size;                ret = write(fd, pn.body + hadwrite, nd);                if (ret <= 0) {                    close(fd);                    free(pn.body);                    return 0;                }                size -= ret;                hadwrite += ret;            } while (size > 0);        }        free(pn.body);    }    close(fd);    return 1;}

⌨️ 快捷键说明

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