回精華區
作者itoc, 信區: itoc
標題[功能] manage.c 板主自訂發文類別
時間03/08/17
作者: itoc (拯救一個靈魂) 看板: plan
標題: [功能] 發表文章的 prefix 由板主設定
時間: Tue Jun 18 23:36:31 2002                          Updated: 2005/05/26

※ 引述《tandrian.bbs@ntcb.twbbs.org.tw (幻域魔城後祖)》之銘言:
> 請選擇文章類別(按 Enter 跳過):
> 類別:1.[公告] 2.[新聞] 3.[閒聊] 4.[文件] 5.[問題] 6.[測試]
> 請問是否可以讓板主自行修改以上的文章類別??  ^^

  config.h 要 #define POPUP_ANSWER 及 POST_PREFIX 才可以使用本功能

: manage.c:post_prefix_edit() 新增於 post_memo_edit() 後面

#ifdef POST_PREFIX
/* ----------------------------------------------------- */
/* 板主功能 : 修改發文類別                               */
/* ----------------------------------------------------- */


static int
post_prefix_edit(xo)
  XO *xo;
{
#define NUM_PREFIX      6
  int i;
  FILE *fp;
  char fpath[64], buf[20], prefix[NUM_PREFIX][20], *menu[NUM_PREFIX + 3];
  char *prefix_def[NUM_PREFIX] =   /* 預設的類別 */
  {
    "公告", "測試", "閒聊", "灌水", "無聊", "打混"
  };

  if (!(bbstate & STAT_BOARD))
    return XO_NONE;

  i = vans("類別 (D)刪除 (E)修改 (Q)取消?[E] ");

  if (i == 'q')
    return XO_FOOT;

  brd_fpath(fpath, currboard, "prefix");

  if (i == 'd')
  {
    unlink(fpath);
    return XO_FOOT;
  }

  i = 0;

  if (fp = fopen(fpath, "r"))
  {
    for (; i < NUM_PREFIX; i++)
    {
      if (fscanf(fp, "%10s", buf) != 1)
        break;
      sprintf(prefix[i], "%d.%s", i + 1, buf);
    }
    fclose(fp);
  }

  /* 填滿至 NUM_PREFIX 個 */
  for (; i < NUM_PREFIX; i++)
    sprintf(prefix[i], "%d.%s", i + 1, prefix_def[i]);

  menu[0] = "10";
  for (i = 1; i <= NUM_PREFIX; i++)
    menu[i] = prefix[i - 1];
  menu[NUM_PREFIX + 1] = "0.離開";
  menu[NUM_PREFIX + 2] = NULL;

  do
  {
    /* 在 popupmenu 裡面按 左鍵 離開 */
    i = pans(3, 20, "文章類別", menu) - '0';
    if (i >= 1 && i <= NUM_PREFIX)
    {
      strcpy(buf, prefix[i - 1] + 2);
      if (vget(b_lines, 0, "類別:", buf, 10, GCARRY))
        strcpy(prefix[i - 1] + 2, buf);
    }
  } while (i);

  if (fp = fopen(fpath, "w"))
  {
    for (i = 0; i < NUM_PREFIX; i++)
      fprintf(fp, "%s ", prefix[i] + 2);
    fclose(fp);
  }

  return XO_FOOT;
}
#endif      /* POST_PREFIX */

: manage.c:post_manage()

    "WMemo   編輯進板畫面",
+#ifdef POST_PREFIX
+   "RPrefix 編輯文章類別",
+#endif

  ...
  ...

- char *menu = "◎ 板主選單 (B)主題 (W)進板 (M)副板"
+ char *menu = "◎ 板主選單 (B)主題 (W)進板 (R)類別 (M)副板"

  ...
  ...

  case 'w':
    return post_memo_edit(xo);

+#ifdef POST_PREFIX
+ case 'r':
+   return post_prefix_edit(xo);
+#endif

: post.c:do_post()

  else          /* itoc.020113: 新文章選擇標題分類 */
  {
#define NUM_PREFIX 6

-   char *prefix[NUM_PREFIX] = {"[公告] ", "[新聞] ", ... "[測試] "};
-
-   move(21, 0);
-   outs("類別:");
-   for (mode = 0; mode < NUM_PREFIX; mode++)
-     prints("%d.%s", mode + 1, prefix[mode]);
-
-   mode = vget(20, 0, "請選擇文章類別(...):", fpath, 3, DOECHO) - '1';
-   if (mode >= 0 && mode < NUM_PREFIX)         /* 輸入數字選項 */
-     rcpt = prefix[mode];
-   else                                        /* 空白跳過 */
-     rcpt = NULL;
- }

+   FILE *fp;
+   char prefix[NUM_PREFIX][10];
+
+   brd_fpath(fpath, currboard, "prefix");
+   if (fp = fopen(fpath, "r"))
+   {
+     move(21, 0);
+     outs("類別:");
+     for (mode = 0; mode < NUM_PREFIX; mode++)
+     {
+       if (fscanf(fp, "%9s", fpath) != 1)
+         break;
+       strcpy(prefix[mode], fpath);
+       prints("%d.%s ", mode + 1, fpath);
+     }
+
+     fclose(fp);
+     mode = vget(20, 0, "請選擇文章類別(按 Enter 跳過):",
+       fpath, 3, DOECHO) - '1';
+     if (mode >= 0 && mode < NUM_PREFIX)       /* 輸入數字選項 */
+       rcpt = prefix[mode];
+     else                                      /* 空白跳過 */
+       rcpt = NULL;
+   }
+   else
+   {
+     rcpt = NULL;
+   }
+ }

  if (!ve_subject(21, title, rcpt))

--
□ 本文章由 itocnctu5566.Dorm3.NCTU.edu.tw 發表
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻