作者Dinsam.bbs@ccudream.twbbs.org (前世.. o.O) 看板: plan
標題[功能]小型動態看板2(改使用camera)
時間中正築夢園 (Tue, 02 Sep 2003 15:20:50 +0800) Updated: 2005/05/17
在功能列表右邊的空白 可以有小動態看板
目前已知問題:
1.必須開啟進入子選單重撥 movie 才能解決殘影問題
(不知道有沒有人可以改成和原本的movie同步,這樣就更好囉)
2.可使用ASCII或彩色,但使用時請注意長度(特別是使用雙色字)不能超過80
3.如果定行數為七行,就全部都要用七行,不能多也不能少,不然會有怪畫面
: global.h
#define FN_ETC_FEAST "etc/feast" /* 節日 */
+ #define FN_GEM_ADVER "gem/@/@-ad" /*小動態看板 */
: BBS 站內 (A)nnounce 精華公佈欄
Ctrl+P => (D)資料 加入 @-ad 這檔案連結
這樣以後要修改比較容易
: @-ad範例檔 (以七行為範例)
# 井號開頭的的是註解
╔════════════╗
║ 小廣告看板 ║
║ ║
║ ║
║ ║
║ ║
╚════════════╝
╔════════════╗
║ 小廣告看板 ║
║ ║
║ ║
║ ║
║ ║
╚════════════╝
╔════════════╗
║ 小廣告看板 ║
║ ║
║ ║
║ ║
║ ║
╚════════════╝
: config.h
#undef CURSOR_BAR
CURSOR_BAR 得 undef 才不會出錯
: config.h
/* camera.c 動態看板 */
#define MOVIE_MAX 180 /* 動畫張數 */
#define MOVIE_SIZE (108 * 1024) /* 動畫 cache size */
+ #define AD_LINE 7 /* 小型動態看板有七行 */
: struct.h
typedef struct
{
int shot[MOVIE_MAX]; /* Thor.980805: 合理範圍為 0..MOVIE_MAX - 1 */
char film[MOVIE_SIZE];
char today[16];
+ int adnum; /* 有幾篇完整廣告 */
+ char ad[AD_LINE * 20][128]; /* 最多 20 篇完整廣告 */
} FCACHE;
: camera.c:main()
+ do_ad(fshm);
exit(0);
}
: camera.c:do_ad() 加入 main() 前面
/* ----------------------------------------------------- */
/* 載入小型動態看板 */
/* ----------------------------------------------------- */
static void
do_ad(fshm)
FCACHE *fshm;
{
int num;
char msg[STRLEN], *str;
FILE *fp;
if (fp = fopen(FN_GEM_ADVER, "r"))
{
for (num = 0; num < AD_LINE * 20;) /* 最多 20 篇完整廣告 */
{
if (!fgets(msg, STRLEN, fp))
break;
if (*msg == '#' || *msg == '\n')
continue;
if (str = strchr(msg, '\n'))
*str = '\0';
strcpy(fshm->ad[num], msg);
num++;
}
fclose(fp);
num /= AD_LINE;
if (num > 0)
{
fshm->adnum = num;
return;
}
}
fshm->adnum = 1;
strcpy(fshm->ad[0], "錯誤!小型動態看板有問題");
}
: menu.c movie()
if ((bbsmode <= M_XMENU) && (cuser.ufo & UFO_MOVIE))
+ {
+ int i, x;
+
+ i = (time(0) % fshm->adnum) * AD_LINE - 1; /* 亂數選一個廣告 */
+ for (x = MENU_XPOS; x <= MENU_XPOS + AD_LINE; x++)
+ {
+ move(x, 42); /* 放在選單的右邊 */
+ outs(fshm->ad[i++]);
+ }
film_out(FILM_MOVIE, MENU_XNOTE);
+ }
: menu.c menu()
mode = 0;
do
{
move(MENU_XPOS + mode, MENU_YPOS + 2);
if (mode <= max)
{
mptr = table[mode];
str = mptr->desc;
prints("(\033[1;36m%c\033[m)", *str++);
outs(str);
}
- clrtoeol();
+ refresh();
} while (++mode <= mmx);
...............
...............
if (cmd <= M_XMENU) /* 子目錄的 mode 要 <= M_XMENU */
{
menu->level = PERM_MENU + mptr->desc[0];
menu = (MENU *) mptr->func;
- mode = MENU_LOAD | MENU_DRAW;
+ mode = MENU_LOAD | MENU_DRAW | MENU_FILM;
...............
............
case 'e':
if (depth > 0)
{
menu->level = PERM_MENU + table[cc]->desc[0];
menu = (MENU *) menu->func;
- mode = MENU_LOAD | MENU_DRAW;
+ mode = MENU_LOAD | MENU_DRAW | MENU_FILM;
: visio.c igetch()
- if (bbsmode < M_XMENU) /* 在 menu 裡面要換 movie */
- {
- movie();
- refresh();
- }
--
改完編譯完之後記得reboot
--
● ˙ ˙ ◢▇◣ ◢▇◣ ▇ ▇ █▇◣ █▇◣ █▇◣ ◢▇◣ █▇▉ /
˙ ╲ █ █ █ █ █ ▉ █ ▉ █▆ █▆▉ ▉▉▉ ★
◢ ★˙ ◥█◤ ◥█◤ ◥█◤ ██◤ █◥▆ █▆◤ █ ▉ ▉▉▉˙ ◣
CDBBS 中正築夢園BBS站 歡迎蒞臨參觀 cd.twbbs.org (140.123.20.230)
http://cd.twbbs.org◥ * Author: Dinsam ★ From: 218.171.110.242 ◤精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻