-
Notifications
You must be signed in to change notification settings - Fork 6
Visio zh_tw
Wei-Cheng Yeh (IID) edited this page Oct 17, 2023
·
10 revisions
Visio 是 MapleBBS 3 的系統輸出入函式庫,功能上包含:
- MapleBBS 3 前:
io.c
+screen.c
+term.c
+ 部份stuff.c
- PttBBS:
io.c
(+nios.c
+vtkbd.c
) +screen.c
(或pfterm.c
) +term.c
+vtuikit.c
+ 部份stuff.c
MapleBBS 3 的 Visio 有以下相關但來源不同的同名函式庫,非本文主題:
- PttBBS 中現名為
vtuikit
的使用者介面函式庫,曾也稱為visio
。 - WD BBS 一些分支中的
visio.c
為io.c
+term.c
+screen.c
(不含stuff.c
) 的直接合併。- 較早出現於 AT-BBS 1.5.1,但可追溯至 StarRiver BBS 20000619。
亦有同源的同名函式庫,但本文不著重論述:
- SOB-fromzero 的
visio.c
,為 1996 年由 MapleBBS 3.00 原作者 opus 所發佈的早期版本的visio.c
加上小幅度修正而成。
- Visio 是「Virtual Screen Input Output Routines」的縮寫。
- "Virtual terminal" 的 screen 與 I/O。
※ 註:同是 "virtual terminal" 的一部份,mbbsd.c
功能上包含 in.zbbsd
+ main.c
,是 "virtual terminal" 的 daemon 與子處理程序的 main routines。
資料來源:楓橋驛站 SysSuggest 板精華區,opus 所撰寫的〈[code] virtual terminal 的寫法 (1/3)〉與〈[code] virtual terminal 的寫法 (2/3)〉。
- Vīsiō 是英文 vision 的拉丁文詞源,有「視覺」、「所見」的意思。暗指 Visio 的輸出功能。
- Visio 是在公元 1992 年初次釋出的圖表繪製軟體,由 Shapeware 公司釋出。Shapeware 公司在公元 1995 年改名為 Visio 公司,在公元 2000 年被 Microsoft 收購。該軟體現名為 Microsoft Visio。同樣暗指 Visio 的輸出功能。
-
Virtual
screen.c
+io.c
。 -
怡申科技股份有限公司 (EssenVision Inc.)。在 1998-02-23 成立,2001-07-05 解散,惟至 2022-07-07 仍未清算。
- 資料來源:商工登記公示資料查詢服務 https://findbiz.nat.gov.tw/fts/query/QueryBar/queryInit.do?banNo=16307857
- 但
visio.c
在 1996-11-13 已公開發佈(見以上資料來源)。
範圍或對應的 bit mask | 相關 macro | 意義 | 註解 |
---|---|---|---|
0x0000 - 0x001f
|
CTRL() /Ctrl()
|
Ctrl + 一般按鍵 | - CTRL() 出自 Eagles BBS - Ctrl() 出自 Phoenix BBS |
0x0020 - 0x00ff
|
(無) | 一般按鍵 | |
0x0100 - 0x1fff
|
(無) | 傳統特殊按鍵 | 出自 Phoenix BBS MapleBBS 3 不使用 DreamBBS v1.0 恢復使用 |
0x001f |
KEY_ESC |
- Esc/Alt + 一般按鍵 - 單獨的 Esc (DreamBBS v3) |
- 按下的一般按鍵需用 KEY_ESC_arg 取得 - 出自 Phoenix BBS - MapleBBS 3 不使用 - DreamBBS v3.0 新增按鍵延時判斷機制,恢復使用 |
0x2000 - 0x20ff
|
Meta() /Esc()
|
Esc/Alt + 一般按鍵 | - Meta() 出自 MapleBBS 3(未使用) - Esc() 出自 Maple-itoc(未使用) |
0x2100 - 0x3fff
|
Meta() |
Esc/Alt + 特殊按鍵 | DreamBBS v2.0 起支援 |
0x0060 (mask) |
Shift() /Ctrl()
|
特殊按鍵的 Shift/Ctrl | DreamBBS v2.0 起支援 |
0x??0? , 0x??1? , 0x??8? , & 0x??9?
|
Ctrl(key) |
Ctrl-特殊按鍵 | Mask 後變 0x00
|
0x??2? , 0x??3? , 0x??a? , & 0x??b?
|
Shift(Ctrl(key)) |
Shift-Ctrl-特殊按鍵 | Mask 後變 0x20
|
0x??4? , 0x??5? , 0x??c? , & 0x??d?
|
key |
正常的特殊按鍵 | Mask 後變 0x40
|
0x??6? , 0x??7? , 0x??e? , & 0x??f?
|
Shift(key) |
Shift-特殊按鍵 |
Shift() 為 DreamBBS v2.0 新增 Mask 後變 0x60
|
0x4000 - 0x7fffffff
|
KEY_NONE = 0x4000
|
(不使用) | 保留給 Xover 列表系統使用 - DreamBBS v1.0 新增 - DreamBBS v2.0 改為現值 - DreamBBS v3.0 改為現用法 |
0x80000000 - 0xffffffff
|
(無) | MapleBBS 3 特殊按鍵 (負數) | DreamBBS v1.0 起不使用,保留給 Xover 系統 |
輸入按鍵的值可以用作 Xover 系統的回呼函式特殊值。請見 MapleBBS 3 與 DreamBBS v3 的 Xover opcode 的分配。
與 Pirate BBS 衍生之 BBS 比較。
Macro | 值 (傳統) | 值 (MapleBBS 3) | 值 (DreamBBS v3) | 意義 | 出處 | 註解 |
---|---|---|---|---|---|---|
I_TIMEOUT |
- -2 - 0x180 (NSYSU BBS 2.2.1 & Formosa BBS CE) - 0x05fd (PttBBS vtkbd) |
-31 |
0x04fd |
按鍵逾時 | Pirate BBS |
I_ 前綴也見於 i_getch() /igetch() ,表示 input |
I_OTHERDATA |
- -3 (Pirate BBS, Eagles BBS, & PalmBBS) - 0x181 (NSYSU BBS 2.2.1 & Formosa BBS CE) - -333 - 0x05fe (PttBBS vtkbd) |
-32 |
0x04fe |
接收到外來輸入 | Pirate BBS | |
I_SIGNAL |
-4 |
(無) | (無) | 收到 UNIX signal | Eagles BBS 3.0 | 未使用 只見於該分支與衍生分支 |
I_RESIZETERM |
Meta(Ctrl('L')) (0x200c ) |
畫面大小變更 | DreamBBS v3.0 | 可使畫面強制重繪 可用 Esc + Ctrl-L 手動輸入 |
||
KEY_INCOMPLETE |
0x0420 |
(無) | (無) | 輸入按鍵碼不完整 | PttBBS vtkbd | |
KEY_UNKNOWN |
- 0x0fff (PttBBS git r3492 & FormosaBBS CE) - 0x0f20 (PttBBS vtkbd) |
(無) | (無) | 不支援的輸入按鍵碼 | PttBBS | |
KEY_INVALID |
0x03fe |
不支援的輸入按鍵碼 | DreamBBS v3.0 | |||
KEY_NONE |
- 12345 (DreamBBS v1.0) - 0x4000 (DreamBBS v2.0+) |
表示未輸入按鍵 - 定義:按鍵值 < KEY_NONE (DreamBBS v3.0) |
DreamBBS v1.0 | |||
KEY_BS |
0x08 ('\b' ) |
(無) | (無) | Backspace | PttBBS | |
KEY_BS2 |
- '\x7f' (PttBBS git r3492 & Formosa BBS CE) - (移除) (PttBBS vtkbd) |
(無) | (無) | Backspace | PttBBS | 實作 PttBBS vtkbd 後併入 KEY_BS
|
KEY_BKSP |
8 ('\b' ) |
(無) | Backspace | MapleBBS-itoc | ||
KEY_BACKSPACE |
'\b' (0x08 ) |
Backspace | DreamBBS v3.1 | 依 ncurses 函式庫介面取名 | ||
KEY_TAB |
9 ('\t' ) |
'\t' |
Tab | Phoenix BBS 3.0 | ||
KEY_CR |
'\r' (0x0d ) |
(無) | (無) | Enter | PttBBS | |
KEY_LF |
'\n' (0x0a ) |
(無) | (無) | Enter | PttBBS | 在 PttBBS 中被忽略 |
KEY_ENTER |
- 10 ('\n' ) (MapleBBS 3.10) - KEY_CR ('\r' ) (PttBBS) |
'\n' |
Enter | MapleBBS 3.10 & PttBBS | ||
KEY_ESC |
27 (0x1b ) |
'\x1b' |
- Esc + 一般按鍵 (Phoenix BBS) - 單獨的 Esc (DreamBBS v3) |
Phoenix BBS 3.0 | 見 Visio-zh_tw#輸入按鍵的值 | |
KEY_UP |
- 0x0101 - 0x100 + 'A' (0x141 ) (Pivot BBS) - 512 (0x0100 ) (PalmBBS) |
-1 |
0x0141 |
↑ | Phoenix BBS 3.0 | |
KEY_DOWN |
- 0x0102 - 0x142 (Pivot BBS) - 0x0101 (PalmBBS) |
-2 |
0x0142 |
↓ | Phoenix BBS 3.0 | |
KEY_RIGHT |
- 0x0103 - 0x143 (Pivot BBS) - 0x0102 (PalmBBS) |
-3 |
0x0143 |
→ | Phoenix BBS 3.0 | |
KEY_LEFT |
- 0x0104 - 0x144 (Pivot BBS) - 0x0103 (PalmBBS) |
-4 |
0x0144 |
← | Phoenix BBS 3.0 | |
KEY_STAB |
- 0x0105 (PttBBS git r3492 & Formosa BBS CE) - 0x0109 (PttBBS vtkbd) |
(無) | KEY_BTAB |
Shift-Tab | PttBBS | |
KEY_BTAB |
0x015a (0x0100 + 'Z' ) |
Shift-Tab | DreamBBS v3.0 | 依 ncurses 函式庫介面取名 | ||
KEY_HOME |
- 0x0201 - 0x100 + '1' (0x131 ) (Pivot BBS) - 0x0401 (PalmBBS) |
- 0x0181 (MapleBBS 3.00a 註解;未採用) - -21
|
0x0241 |
Home | Phoenix BBS 3.0 | |
KEY_INS |
- 0x0202 - 0x0402 (PalmBBS) |
-22 |
0x0242 |
Insert | Phoenix BBS 3.0 | |
KEY_INSERT |
0x132 |
(無) | (無) | Insert | Pivot BBS 5.04 | 此名稱未見於其它分支 |
KEY_DEL |
- 0x0203 - 0x133 (Pivot BBS) - 0x0403 (PalmBBS) |
-23 |
0x0243 |
Delete | Phoenix BBS 3.0 | |
KEY_END |
- 0x0204 - 0x134 (Pivot BBS) - 0x0404 (PalmBBS) |
-24 |
0x0244 |
End | Phoenix BBS 3.0 | |
KEY_PGUP |
- 0x0205 - 0x0405 (PalmBBS) |
-25 |
0x0245 |
PgUp | Phoenix BBS 3.0 | |
KEY_PGDN |
- 0x0206 - 0x0406 (PalmBBS) |
-26 |
0x0246 |
PgDn | Phoenix BBS 3.0 | |
KEY_F1 –KEY_F12
|
0x0301 –0x030C
|
(無) |
0x0251 –0x025C
|
F1–F12 | PttBBS | |
BACK |
- 0x7f - (移除) (Formosa BBS 1.0.0) |
(無) | (無) | Backspace | NSYSU BBS 2.2.1 | |
NL |
0x0a ('\n' ) |
(無) | (無) | Enter | NSYSU BBS 2.2.1 | |
CR |
0x0d ('\r' ) |
(無) | (無) | Enter | NSYSU BBS 2.2.1 | |
ENTER |
CR |
(無) | (無) | Enter | NSYSU BBS 2.2.1 | |
SP |
0x20 |
(無) | (無) | Space | NSYSU BBS 2.2.1 | |
ESC |
0x1b |
(無) | (無) | Esc | NSYSU BBS 2.2.1 | |
TAB |
0x09 |
(無) | (無) | Tab | NSYSU BBS 2.2.1 | |
CTRLA –CTRLZ
|
- 0x01 –0x1a - (移除) (Formosa BBS 1.0.0) |
(無) | (無) | Ctrl + A–Z | NSYSU BBS 2.2.1 | 被 CTRL() 取代而移除 |
「值 (MapleBBS 3)」為 MapleBBS 3.00a 起採用的新值;MapleBBS 3.00b 與之前採用「值 (傳統)」。
值與「值 (傳統)」相同者省略不列。
DreamBBS v3.1 引進。在 10 秒內依序且連續輸入一組按鍵,最後的按鍵的值將先被正常送出,再自動送出表示該按鍵組合的值。
Macro | 值 | 按鍵組合 | 用途 | 出處 | 註解 |
---|---|---|---|---|---|
KEY_KONAMI |
0x0573 |
- ↑ ↑ ↓ ↓ ← → ← → B A - ↑ ↑ ↓ ↓ ← → ← → b a |
- 開關「雙游標操作模式」 (DreamBBS 4D-AO.20) |
DreamBBS 4D-AO.20 | KONAMI 祕技 |
vget()
輸入框函式是 MapleBBS 3 的輸入框函式。
在 MapleBBS 3 以前,此函式原名為 getdata()
。
PttBBS 的 vtuikit
函式庫有提供介面與 MapleBBS 3 相容的 vget()
。
getdata(line,col,prompt,buf,len,echo,complete)
int line,col ;
char *prompt, *buf ;
int len, echo ;
int (*complete)() ;
- 支援自動完成,函式
complete()
需另外傳入
getdata(line, col, prompt, buf, len, echo)
int line, col;
char *prompt, *buf;
int len, echo;
- 不支援自動完成
int
vget(line, col, prompt, data, max, echo)
int line, col;
uschar *prompt, *data;
int max, echo;
- 支援自動完成,用
echo
指定使用預定義的自動完成函式
int vget(int y_ref, int x_ref, const char *prompt, char *data, int max, int echo)
- 支援自動完成,用
echo
指定使用預定義的自動完成函式 - 使用了畫面大小座標,支援畫面大小改變時的自動重繪
值 | 出處 | 說明 | |
---|---|---|---|
NOECHO |
0 - 0x0000 (MapleBBS 3.00) - HIDEECHO (DreamBBS v3.0) |
PirateBBS | - 完全不顯示輸入框 (PirateBBS, MapleBBS 2.36 (有 dumb_term ), & PttBBS) (DreamBBS v2.0 (有 VGET_STEALTH_NOECHO )) - 將輸入字元顯示為 * (MapleBBS 2.36 (無 dumb_term ) & MapleBBS 3) (DreamBBS v2.0 (無 VGET_STEALTH_NOECHO )) |
DOECHO |
1 - 0x0100 (MapleBBS 3.00) - 0 (DreamBBS v3.0) |
PirateBBS | 正常顯示輸入框 |
HIDEECHO |
0x0100 (DreamBBS v3.0) |
DreamBBS v3.0 | - 完全不顯示輸入框 (有 VGET_STEALTH_NOECHO ) - 將輸入字元顯示為 * (無 VGET_STEALTH_NOECHO ) |
LCECHO |
- 2 (MapleBBS 2.36 & PttBBS) - 0x0200 (MapleBBS 3.00) |
MapleBBS 2.36 | - 將輸入的第一個字元轉為小寫 - 將輸入全部轉為小寫 (DreamBBS v2.0) |
NUMECHO |
- 4 (PttBBS) - 0x0400 (DreamBBS v2.0) |
PttBBS | 只能輸入數字 0 –9 - DreamBBS v2.0 時引入 |
GCARRY |
- 0x0800 (MapleBBS 3.00) - 8 (PttBBS) |
MapleBBS 3.00 | 將輸出 buf 的初始內容用作預設已輸入內容 |
PASSECHO |
- 0x10 (PttBBS) - NOECHO (DreamBBS v2.0) - HIDEECHO (DreamBBS v3.0) |
PttBBS | 將輸入字元顯示為 * - NOECHO 的預設行為 (DreamBBS v2.0) - DreamBBS v2.0 時引入 |
GET_LIST |
0x1000 |
MapleBBS 3.00 | 依照 link list ll_head 的內容進行自動完成 需先用 ll_new() /ll_add() /ll_del() 設定 ll_head
|
GET_USER |
0x2000 |
MapleBBS 3.00 | 自動完成 user ID |
GET_BRD |
0x4000 |
MapleBBS 3.02 | 自動完成 board ID |
VGET_STRICT_DOECHO |
- 0x10000 (DreamBBS v2.0) - false (DreamBBS v3.0) |
DreamBBS v2.0 | 忽略 flags 所預設附帶的 DOECHO 效果 |
VGET_STEALTH_NOECHO |
0x20000 |
DreamBBS v2.0 | 完全不顯示輸入框 (沒有 DOECHO 時) |
VGET_BREAKABLE |
0x40000 |
DreamBBS v2.0 | 允許用 Ctrl-C 關閉輸入框 PttBBS vget() 的預設行為 |
- 在 MapleBBS 2.36 與 PttBBS 中,echo flags 不可疊加使用
- 在 MapleBBS 3.00 後,
0x01
到0x80
的位元範圍保留給 BRD bits (下述),於GET_BRD
時疊加使用 - 在 DreamBBS v2.0 後,echo flags 可用 bitwise OR (
|
) 自由疊加使用 - DreamBBS v3.0 將
DOECHO
改為0
,以表示無 flags 時為一般狀態
值 | 出處 | 說明 | |
---|---|---|---|
VGET_IMPLY_DOECHO |
LCECHO | NUMECHO | GCARRY |
DreamBBS v2.0 | 預設附帶有 DOECHO 效果的 flags |
VGET_FORCE_DOECHO |
GET_LIST | GET_USER | GET_BRD |
DreamBBS v2.0 | 會強制開啟 DOECHO 效果的 flags |
VGET_EXIT_BREAK |
-1 |
DreamBBS v2.0 | 輸入框被 Ctrl-C 關閉時回傳的值 |
值 | 出處 | 說明 | |
---|---|---|---|
BRD_R_BIT |
0x01 |
MapleBBS 3.00 | 使用者可進入閱覽此看板 |
BRD_W_BIT |
0x02 |
MapleBBS 3.00 | 使用者可於此看板發佈與編輯文章 |
BRD_X_BIT |
0x04 |
MapleBBS 3.00 | 使用者可管理此看板 |
BRD_V_BIT |
0x08 |
MapleBBS 3.00 | 使用者本次上站期間已進入過此看板 |
BRD_H_BIT |
0x10 |
MapleBBS 3.00 | 使用者的 .BRH 中有此看板的閱讀紀錄 |
BRD_Z_BIT |
0x20 |
MapleBBS 3.00 | 被使用者 zap 的看板 |
BRD_F_BIT |
0x40 |
DreamBBS-2010 | 使用者的看板清單中可出現此看板 (但僅看板好友可進入) |
- MapleBBS 3.10-itoc 有不同的定義 (下述)
值 | 說明 | |
---|---|---|
BRD_L_BIT |
0x0001 |
使用者的看板清單中可出現此看板 |
BRD_R_BIT |
0x0002 |
使用者可進入閱覽此看板 |
BRD_W_BIT |
0x0004 |
使用者可於此看板發佈與編輯文章 |
BRD_X_BIT |
0x0008 |
使用者可管理此看板 |
BRD_M_BIT |
0x0010 |
使用者可存取需版主權限的功能 |
BRD_V_BIT |
0x0020 |
使用者本次上站期間已進入過此看板 |
BRD_H_BIT |
0x0040 |
使用者的 .BRH 中有此看板的閱讀紀錄 |
BRD_Z_BIT |
0x0080 |
被使用者 zap 的看板 |
值 | 出處 | 說明 | |
---|---|---|---|
MATCH_END |
- 1 - 0x8000 (MapleBBS 3.02) |
MapleBBS 3.00 | 進行自動完成並結束自動完成 限內部處理 - 可疊加在 echo flags 上 (MapleBBS 3.02) |
MATCH_LIST |
- 2 - (移除) (MapleBBS 3.02) |
MapleBBS 3.00 | 進行自動完成並顯示自動完成清單 限內部處理 - 等效於沒有 MATCH_END 而移除 (MapleBBS 3.02) |
MATCH_CHECK |
- 4 - (移除) (MapleBBS 3.02) |
MapleBBS 3.00 | 檢查輸入是否存在於自動完成清單,不進行自動完成 限內部處理 - 僅用於 GET_LIST (MapleBBS 3.00) - 一律進行自動完成而移除 (MapleBBS 3.02) |
- Home
- Install — 安裝說明
- Version
- Project Documentations — 專案說明文件
- Coding Style & Conventions — 程式碼撰寫風格與慣例
- Indentation
- Xover List System — Xover 列表系統
- Menu Systems — 選單系統
- Screen Coordinate System — 畫面座標系統
- BoardReadingHistory — BRH 看板閱讀紀錄系統
- Visio I/O Library — Visio 輸出入函式庫
- Permission System — 權限系統
- TANet BBS Family Genealogy Chart — TANet BBS 家族譜系圖
- 與 MapleBBS 3 的按鍵差異
- [WIP] 與 MapleBBS 3 的差異
- References — 參考資料
- Changelog & TODO
- Issue & TODO list — 問題與代辦事項清單
- MapleBBS-itoc Porting Project — MapleBBS-itoc 移植計畫
- BBS-Lua Changelog
- BBS-Ruby Changelog (external link — 外部鏈結)
- 新式密碼加密 (DLBBS v2.0+)
- [WIP] DreamBBS v3 發佈說明 Release Note
- Release Notes of Version 2.0.0 Artoria
- Version 2.0.0 Artoria 發行說明
- Release Notes of Version 1.0.0 Rimuru
- Version 1.0.0 Rimuru 發行說明
- NoCeM-innbbsd 原始說明文件
- WindTop 3.02 原始說明文件