回文章列表
作者chrisliu.bbs@loli.twbbs.org (ChrisLiu*) 看板: itoc
標題Re: [問題]功能-文章編輯時無法加分
時間蘿莉小站 (2007/02/26 Mon 01:15:13)
※ 引述《allen501pc.bbs@bbs.sa.ncyu.edu.tw (靜養中..)》之銘言:

  我覺得有兩個問題

  第一個是如同 weiyu.bbs@muse.twbbs.org 所說的沒有存入

  第二個則是↓

> :maple/post.c
>  :post_edit()
>   FILE *fp;
> +  int xmode;
>   hdr = (HDR *) xo_pool + (xo->pos - xo->top);
>   hdr_fpath(fpath, xo->dir, hdr);
> +  xmode=hdr->xmode;
> ..
> ..
>   else if (cuser.userlevel && !strcmp(hdr->owner, cuser.userid))        /* 原
> 作者修
> 改 */
>   {
> +    hdr->xmode = xmode ^ POST_NOW_EDIT;
>     if (!vedit(fpath, 0))       /* 若非取消則加上修改資訊 */
  在 post.c 中, 編輯只有這段程式碼

  在編輯文章的過程中, 是在 edit.c : vedit()

  也就是這段只是回傳 "編輯是否完成", 而不代表正在編輯的狀態
>     {
>       if (fp = fopen(fpath, "a"))
>       {
>         ve_banner(fp, 1);
>         fclose(fp);
>       }
>     }
> +   hdr->xmode=xmode;

  因此, 即使在這邊寫回 hdr, 也只會變成 "此篇文章已經修改過" 的標記

>   }

  我想到的作法是: 在 edit.c vedit()

  在 if (*fpath) 內剛開始的地方加入

  hdr->xmode |= POST_NOW_EDIT;

  然後馬上寫回到 .dir 內

  最後在

      case Ctrl('X'):   /* Save and exit */

  /* cc = ve_filer(fpath, ve_op & 1); */
  cc = ve_filer(fpath, ve_op);  /* itoc.010301: 新增 ve_op = -1 時不能儲存 */
  if (cc <= 0)
+{
+   hdr->xmode &= ~POST_NOW_EDIT;
+   寫回 .dir 內
    return cc;
+}
  ve_mode = mode | cc;
  continue;


  應該是這樣吧

  不過這樣前面要加入讀hdr了



--
  我猜 應該是這樣吧... 很少再改程式了, 我是用 2006年五月的程式碼當範本
--
 ˙ chrisliu -- 61-56-149-51-adsl-tao.STATIC.so-net.net.tw    ﹒.˙.
 ˙ 克里斯劉個人站 ˙ loli.twbbs.org ˙ ───…‥.‧︰.∵.
文章選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻