荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: hace.bbs@hace.dhs.org (半边海), 信区: InstallBBS
标  题: [转载]实现 `个人文章阅读' v0.2 [3]
发信站: 半边海BBS (Mon Apr  7 18:36:02 2003)
转信站: SZU!news.tiaozhan.com!news.bjsing.net!SCUT-x12

【 以下文字转载自 sysop 讨论区 】
【 原文由 hace 所发表 】

            实现 `个人文章阅读' v0.2 [1]

$$ 2003.04.07   hace  $  BBS 版本: firebird2000 v1106 $$

i.3  继续修改 announce.c

i.3.1 修改函数 a_menu()

void a_menu(maintitle, path, lastlevel, lastbmonly)
    char *maintitle, *path;
    int lastlevel, lastbmonly;
{
    MENU me;
    char fname[PATHLEN], tmp[STRLEN];
    int ch;
    char *bmstr;
    char buf[STRLEN];
++  char h_buf[STRLEN]; //add by hace
++  char h_tmp[STRLEN]; //add by hace
    int bmonly;
    int number = 0;
    int savemode;
++  int h_lastbmonly=lastbmonly; //add by hace
++  int i;
++  lastbmonly=0;
++  memset(h_buf,0,sizeof(h_buf));  // add by hace
++  memset(h_tmp,0,sizeof(h_tmp));  //add by hace
++  if(h_lastbmonly!=-2003){    //add by hace
        char something[PATHLEN + 20];   //add by wujian

        modify_user_mode(DIGEST);
        strcpy(something, path);
        strcat(something, "/welcome");
        show_help(something);
++  }else{
++      modify_user_mode(PERSONALREAD);
++  }

    strcpy(me.mtitle, maintitle);
    me.path = path;
    bmonly = lastbmonly;
    me.level = lastlevel;
    a_loadnames(&me);
    memset(buf, 0, STRLEN);
    strncpy(buf, me.mtitle, STRLEN);
    bmstr = strstr(buf + 38, "(BM:");
    if (bmstr != NULL) {
        if (chk_currBM(bmstr + 4))
            me.level |= PERM_BOARDS;
        else if (bmonly == 1 && !HAS_PERM(PERM_BOARDS))
            return;
    }
    if (strstr(me.mtitle, "(BM: BMS)") || strstr(me.mtitle, "(BM: SECRET)")
        || strstr(me.mtitle, "(BM: SYSOPS)"))
        bmonly = 1;

    strcpy(buf, me.mtitle);
    bmstr = strstr(buf, "(BM:");

    me.page = 9999;
    me.now = 0;
    while (1) {
        if (me.now >= me.num && me.num > 0) {
            me.now = me.num - 1;
        } else if (me.now < 0) {
            me.now = 0;
        }
        if (me.now < me.page || me.now >= me.page + A_PAGESIZE) {
            me.page = me.now - (me.now % A_PAGESIZE);
++          if(h_lastbmonly!=-2003) //add by hace
++              a_showmenu(&me);
++          else {
++              me.level=-2003;
                a_showmenu(&me);
++          }
        }
        move(3 + me.now - me.page, 0);
        prints("->");
        ch = egetch();
        move(3 + me.now - me.page, 0);
        prints("  ");
        if (ch == 'Q' || ch == 'q' || ch == KEY_LEFT || ch == EOF)
            break;
          EXPRESS:      /* Leeward 98.09.13 */
        switch (ch) {
        case KEY_UP:
        case 'K':
        case 'k':
            if (--me.now < 0)
                me.now = me.num - 1;
            break;
        case KEY_DOWN:
        case 'J':
        case 'j':
            if (++me.now >= me.num)
                me.now = 0;
            break;
        case KEY_PGUP:
        case Ctrl('B'):
            if (me.now >= A_PAGESIZE)
                me.now -= A_PAGESIZE;
            else if (me.now > 0)
                me.now = 0;
            else
                me.now = me.num - 1;
            break;
        case KEY_PGDN:
        case Ctrl('F'):
        case ' ':
            if (me.now < me.num - A_PAGESIZE)
                me.now += A_PAGESIZE;
            else if (me.now < me.num - 1)
                me.now = me.num - 1;
            else
                me.now = 0;
            break;
        case Ctrl('C'):
++          if(h_lastbmonly==-2003)break;   //取消在`个人文章'里转载
            if (me.num == 0)
                break;
            set_safe_record();
            if (!HAS_PERM(PERM_POST))
                break;
            sprintf(fname, "%s/%s", path, me.item[me.now]->fname);
            if (!dashf(fname))
                break;
            if (me.now < me.num) {
                char bname[30];

                clear();
                if (get_a_boardname(bname, "请输入要转贴的讨论区名称: ")) {
                    move(1, 0);
                    if (deny_me(bname)) {
                        prints("\n\n您尚无权限在 %s 发表文章.", bname);
                        pressreturn();
                        me.page = 9999;
                        break;
                    }
                    sprintf(tmp, "你确定要转贴到 %s 板吗", bname);
                    if (askyn(tmp, NA, NA) == 1) {
                        Postfile(fname, bname, me.item[me.now]->title, 0);
                        move(3, 0);
                        sprintf(tmp, "^[[1m已经帮你转贴至 %s 板了^[[m", bname);
                        prints(tmp);
                        refresh();
                        sleep(1);
                    }
                }
                me.page = 9999;
            }
            show_message(NULL);
            break;
            case 'h':
++          if(h_lastbmonly==-2003)break; //在`个人文章区'里取消显示精华区帮助
            show_help("help/announcereadhelp");
            me.page = 9999;
            break;


        case 'M':
            savemode = uinfo.mode;
            m_new();
            modify_user_mode(savemode);
            me.page = 9999;
            break;
#if 0
        case 'L':
            savemode = uinfo.mode;
            m_read();
            modify_user_mode(savemode);
            me.page = 9999;
            break;
#endif
        case '\n':
        case '\r':
            if (number > 0) {
                me.now = number - 1;
                number = 0;
                continue;
            }
        case 'R':
        case 'r':
        case KEY_RIGHT:
            if (me.now < me.num) {
                if (me.item[me.now]->host != NULL) {
                    if (me.item[me.now]->fname[0] == '0') {
                        if (get_con(me.item[me.now]->host,
                                me.item[me.now]->port) != -1) {
                            char tmpfile[30];
                            GOPHER tmp;
                            extern GOPHER *tmpitem;

                            tmpitem = &tmp;
                            strcpy(tmp.server, me.item[me.now]->host);
                            strcpy(tmp.file, me.item[me.now]->fname);
                            sprintf(tmp.title, "0%s", me.item[me.now]->title);
                            tmp.port = me.item[me.now]->port;
                            enterdir(me.item[me.now]->fname);
                            setuserfile(tmpfile, "gopher.tmp");
                            savetmpfile(tmpfile);
                            ansimore(tmpfile, YEA);
                            unlink(tmpfile);
                        }
                    } else {
                        gopher(me.item[me.now]->host, me.item[me.now]->fname,
                             me.item[me.now]->port, me.item[me.now]->title);
                    }
                    me.page = 9999;
                    break;
                } else
                    sprintf(fname, "%s/%s", path, me.item[me.now]->fname);
                if (dashf(fname)) {
/* Leeward 98.09:在精华区阅读文章到末尾时,用上/下箭头直接跳转到前/后一项 */
                    if (ansimore(fname, NA) == KEY_UP) {
                        if (--me.now < 0)
                            me.now = me.num - 1;
                        ch = KEY_RIGHT;
                        goto EXPRESS;
                    }
++                  if(h_lastbmonly!=-2003){ //add by hace
                        prints("^[[1m^[[44m^[[31m
                               ^[[1m^[[44m^[[31m[阅读精华区资料]  ^[[33m结束Q,
                                │ 上一项资料 U,↑│ 下一项资料 <Enter>,
                                <Space>,↓ ^[[m");
++                  }else{
++                      prints("^[[1m^[[44m^[[31m[个人文章阅读]    ^[[33m结束
++                              Q,麪│ 上一项资料 U,↑│ 下一项资料
++                               <Enter>,<Space>,↓ ^[[m");
++                  }
                    switch (ch = egetch()) {
                    case KEY_DOWN:
                    case ' ':
                    case '\n':
                        if (++me.now >= me.num)
                            me.now = 0;
                        ch = KEY_RIGHT;
                        goto EXPRESS;
                    case KEY_UP:
                    case 'u':
                    case 'U':
                        if (--me.now < 0)
                            me.now = me.num - 1;
                        ch = KEY_RIGHT;
                        goto EXPRESS;
                    case 'h':
                        goto EXPRESS;
                    default:
                        break;
                    }
                } else if (dashd(fname)) {
                    a_menu(me.item[me.now]->title, fname, me.level, bmonly);
                }
                me.page = 9999;
            }
            break;
++      case '/':       //在精华区或个人文章区里可以按 / 和 ? 查找标题
++      case '?':       // `/' 为向后查找, `?' 为向前查找
++          strcpy(h_buf,h_tmp);
++          if(ch=='/')
++              sprintf(tmp,"向后查找字符 [%s]:",h_buf);
++          else
++              sprintf(tmp,"向前查找字符 [%s]:",h_buf);
++          a_prompt(-2,tmp,h_tmp,20);
++          if(h_tmp[0]==0)strcpy(h_tmp,h_buf);
++          if(h_tmp[0]==0)break;
++          h_tmp[strlen(h_tmp)]=0;
++          if(ch=='/'){
++              for(i=me.now+1;i<me.num;i++)
++                  if(strstr(me.item[i]->title,h_tmp)!=NULL){
++                      me.now=i;
++                      break;
++                  }
++          }else{
++              for(i=me.now-1;i>=0;i--)
++                  if(strstr(me.item[i]->title,h_tmp)!=NULL){
++                      me.now=i;
++                      break;
++                  }
++          }
++          break;
--      case '/':   // 原来的 `/' 已被用于查找标题,见上,故改为 `w'
++      case 'w':   //add by hace
++ // 按 `w' 时可跳转精华区或个人文章区
++          if(h_lastbmonly!=-2003){
                char found[256];

                if (a_menusearch(path, NULL, found)) {
                    a_menu("", found, ((HAS_PERM(PERM_ANNOUNCE) ||
                                        HAS_PERM(PERM_SYSOP)
                            || HAS_PERM(PERM_OBOARDS)) ? PERM_BOARDS : 0), 0);
                    me.page = 9999;
                }
++          }else{
++              char h_path[512],lookid[IDLEN+6];
++              move(t_lines-1,0);
++              a_prompt(-2,"您想看谁的文章: ",lookid,20);
++              if(!getuser(lookid) || lookid[0]==0){
++                  presskeyfor("经查实,无此ID...",t_lines-2);
++              }else{
++                  sprintf(h_path,"%s/%c/%s",PerPostPath,toupper(lookid[0]),
++                                lookid);
++                  a_menu("", h_path,0,-2003);
++                  me.page = 9999;
++              }
++          }
            break;

#ifdef INTERNET_EMAIL
        case 'F':
        case 'U':
            if (me.now < me.num && HAS_PERM(PERM_BASIC)) {
                a_forward(path, me.item[me.now], ch == 'U');
                me.page = 9999;
            }
            break;
#endif
        case '!':
            if (!Q_Goodbye())
                break;  /* youzi leave */
        }
        if (ch >= '0' && ch <= '9') {
            number = number * 10 + (ch - '0');
            ch = '\0';
        } else {
            number = 0;
        }
++      if(h_lastbmonly!=-2003){    //add by hace   , 取消在个人文章区里管理
            if (me.level & PERM_BOARDS)
                a_manager(&me, ch);
++      }
    }
    for (ch = 0; ch < me.num; ch++)
        free(me.item[ch]);
}

--

    /
   /__  __   __  __
  /  / /  ) /   /__)
 /  /  \_/\ \__ \__

※ 来源:·半边海BBS hace.dhs.org·[FROM: 深海] --
※ 转载:·半边海BBS hace.dhs.org·[FROM: hace]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店