summaryrefslogtreecommitdiffstats
path: root/include/common.h
blob: d3fee9b5e5b8b0a1b3545d7889dadf0683b36913 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
/* $Id$ */
#ifndef INCLUDE_COMMON_H
#define INCLUDE_COMMON_H

#define STR_GUEST   "guest"     // guest account
#define STR_REGNEW  "new"       // 用來建新帳號的名稱

#define DEFAULT_BOARD   str_sysop

// BBS Configuration Files
#define FN_CONF_EDITABLE    "etc/editable"      // 站務可編輯的系統檔案列表
#define FN_CONF_RESERVED_ID "etc/reserved.id"   // 保留系統用無法註冊的 ID
#define FN_CONF_BINDPORTS   "etc/bindports.conf"   // 預設要提供連線服務的 port 列表

// BBS Data File Names
#define FN_PASSWD       BBSHOME "/.PASSWDS"      /* User records */
#define FN_CHICKEN  "chicken"
#define FN_USSONG       "ussong"        /* 點歌統計 */
#define FN_POST_NOTE    "post.note"     /* po文章備忘錄 */
#define FN_POST_BID     "post.bid"
#define FN_MONEY        "etc/money"
#define FN_OVERRIDES    "overrides"
#define FN_REJECT       "reject"
#define FN_WATER        "water"
#define FN_CANVOTE      "can_vote"
#define FN_VISABLE      "visable"   // 不知道是誰拼錯的,將錯就錯吧...
#define FN_USIES        "usies"         /* BBS log */
#define FN_DIR      ".DIR"
#define FN_BOARD        ".BRD"       /* board list */
#define FN_USEBOARD     "usboard"       /* 看板統計 */
#define FN_NOTE_ANS     "note.ans"
#define FN_TOPSONG      "etc/topsong"
#define FN_OVERRIDES    "overrides"
#define FN_TICKET       "ticket"
#define FN_TICKET_END   "ticket.end"
#define FN_TICKET_LOCK  "ticket.end.lock"
#define FN_TICKET_ITEMS "ticket.items"
#define FN_TICKET_RECORD "ticket.data"
#define FN_TICKET_USER    "ticket.user"  
#define FN_TICKET_OUTCOME "ticket.outcome"
#define FN_TICKET_BRDLIST "boardlist"
#define FN_BRDLISTHELP  "etc/boardlist.help"
#define FN_BOARDHELP    "etc/board.help"
#define FN_USERMEMO "memo.txt"  // 使用者個人記事本
#define FN_BADLOGIN "logins.bad"    // in BBSHOME & user directory


// 自訂刪除文章時出現的標題與檔案
#ifndef FN_SAFEDEL
#define FN_SAFEDEL  ".deleted"
#endif
#ifndef STR_SAFEDEL_TITLE
#define STR_SAFEDEL_TITLE   "(本文已被刪除)"
#endif 

#define MSG_DEL_CANCEL  "取消刪除"
#define MSG_BIG_BOY     "我是大帥哥! ^o^Y"
#define MSG_BIG_GIRL    "世紀大美女 *^-^*"
#define MSG_LITTLE_BOY  "我是底迪啦... =)"
#define MSG_LITTLE_GIRL "最可愛的美眉! :>"
#define MSG_MAN         "麥當勞叔叔 (^O^)"
#define MSG_WOMAN       "叫我小阿姨!! /:>"
#define MSG_PLANT       "植物也有性別喔.."
#define MSG_MIME        "礦物總沒性別了吧"

#define MSG_CLOAKED     "哈哈!我隱形了!看不到勒... :P"
#define MSG_UNCLOAK     "我要重現江湖了...."

#define MSG_WORKING     "處理中,請稍候..."

#define MSG_CANCEL      "取消。"
#define MSG_USR_LEFT    "使用者已經離開了"
#define MSG_NOBODY      "目前無人上線"

#define MSG_DEL_OK      "刪除完畢"
#define MSG_DEL_CANCEL  "取消刪除"
#define MSG_DEL_ERROR   "刪除錯誤"
#define MSG_DEL_NY      "請確定刪除(Y/N)?[N] "

#define MSG_FWD_OK      "文章轉寄完成!"
#define MSG_FWD_ERR1    "轉寄錯誤: 系統錯誤 system error"
#define MSG_FWD_ERR2    "轉寄錯誤: 位址錯誤 address error"

#define MSG_SURE_NY     "請您確定(Y/N)?[N] "
#define MSG_SURE_YN     "請您確定(Y/N)?[Y] "

#define MSG_BID         "請輸入看板名稱: "
#define MSG_UID         "請輸入使用者代號: "
#define MSG_PASSWD      "請輸入您的密碼: "

#define MSG_BIG_BOY     "我是大帥哥! ^o^Y"
#define MSG_BIG_GIRL    "世紀大美女 *^-^*"
#define MSG_LITTLE_BOY  "我是底迪啦... =)"
#define MSG_LITTLE_GIRL "最可愛的美眉! :>"
#define MSG_MAN         "麥當勞叔叔 (^O^)"
#define MSG_WOMAN       "叫我小阿姨!! /:>"
#define MSG_PLANT       "植物也有性別喔.."
#define MSG_MIME        "礦物總沒性別了吧"

#define ERR_BOARD_OPEN  ".BOARD 開啟錯誤"
#define ERR_BOARD_UPDATE        ".BOARD 更新有誤"
#define ERR_PASSWD_OPEN ".PASSWDS 開啟錯誤"

#define ERR_BID         "你搞錯了啦!沒有這個板喔!"
#define ERR_UID         "這裡沒有這個人啦!"
#define ERR_PASSWD      "密碼不對喔!請檢查帳號及密碼大小寫有無輸入錯誤。"
#define ERR_FILENAME    "檔名不正確!"

#define STR_AUTHOR1     "作者:"
#define STR_AUTHOR2     "發信人:"
#define STR_POST1       "看板:"
#define STR_POST2       "站內:"

/* AIDS */
#define AID_DISPLAYNAME "文章代碼(AID)"
/* end of AIDS */

/* QUERY_ARTICLE_URL */
#define URL_DISPLAYNAME "文章網址"
/* end of QUERY_ARTICLE_URL */

/* LONG MESSAGES */
#define MSG_SELECT_BOARD ANSI_COLOR(7) "【 選擇看板 】" ANSI_RESET "\n" \
            "請輸入看板名稱(按空白鍵自動搜尋): "

#define MSG_SEPERATOR   "\
───────────────────────────────────────"

/* Flags to getdata input function */
#define NOECHO       0
#define DOECHO       1
#define LCECHO       2
#define NUMECHO      4
#define GCARRY       8  // (from M3) do not empty input buffer. 

#define YEA  1             /* Booleans  (Yep, for true and false) */
#define NA   0

#define EQUSTR 0    /* for strcmp */

/* 好友關係 */
#define IRH 1   /* I reject him.        */
#define HRM 2   /* He reject me.        */
#define IBH 4   /* I am board friend of him.    */
#define IFH 8   /* He is one of my friends. */
#define HFM 16  /* I am one of his friends. */
#define ST_FRIEND  (IBH | IFH | HFM)
#define ST_REJECT  (IRH | HRM)       

/* 鍵盤設定 */
#define KEY_TAB         9
#define KEY_ESC         27
#define KEY_CR      ('\r')      // Ctrl('M'), 0x0D
#define KEY_LF      ('\n')      // Ctrl('J'), 0x0A
#define KEY_ENTER   KEY_CR      // for backward compatibility
#define KEY_BS      (Ctrl('H'))
#define KEY_BS2     (0x7f)
#define KEY_UP          0x0101
#define KEY_DOWN        0x0102
#define KEY_RIGHT       0x0103
#define KEY_LEFT        0x0104
#define KEY_STAB        0x0105  /* shift-tab */
#define KEY_HOME        0x0201
#define KEY_INS         0x0202
#define KEY_DEL         0x0203
#define KEY_END         0x0204
#define KEY_PGUP        0x0205
#define KEY_PGDN        0x0206
#define KEY_F1      0x0301
#define KEY_F2      0x0302
#define KEY_F3      0x0303
#define KEY_F4      0x0304
#define KEY_F5      0x0305
#define KEY_F6      0x0306
#define KEY_F7      0x0307
#define KEY_F8      0x0308
#define KEY_F9      0x0309
#define KEY_F10     0x030A
#define KEY_F11     0x030B
#define KEY_F12     0x030C
#define KEY_UNKNOWN 0x0FFF  /* unknown sequence */

#define QCAST           int (*)(const void *, const void *)
#define Ctrl(c)         (c & 037)
#define chartoupper(c)  ((c >= 'a' && c <= 'z') ? c+'A'-'a' : c)

#define LEN_AUTHOR1     5
#define LEN_AUTHOR2     7

/* the title of article will be truncate to PROPER_TITLE_LEN */
#define PROPER_TITLE_LEN    42


/* ----------------------------------------------------- */
/* 水球模式 邊界定義                                     */
/* ----------------------------------------------------- */
#define WB_OFO_USER_TOP     7
#define WB_OFO_USER_BOTTOM  11
#define WB_OFO_USER_HEIGHT  ((WB_OFO_MSG_BOTTOM) - (WB_OFO_MSG_TOP) + 1)
#define WB_OFO_USER_LEFT    28
#define WB_OFO_MSG_TOP      15
#define WB_OFO_MSG_BOTTOM   22
#define WB_OFO_MSG_LEFT     4


/* ----------------------------------------------------- */
/* 群組名單模式   Ptt                                    */
/* ----------------------------------------------------- */
#define FRIEND_OVERRIDE 0
#define FRIEND_REJECT   1
#define FRIEND_ALOHA    2
#define FRIEND_POST     3         
#define FRIEND_SPECIAL  4
#define FRIEND_CANVOTE  5
#define BOARD_WATER     6
#define BOARD_VISABLE   7 

#define LOCK_THIS   1    // lock這線不能重複玩
#define LOCK_MULTI  2    // lock所有線不能重複玩   

#define I_TIMEOUT   (-2)       /* Used for the getchar routine select call */
#define I_OTHERDATA (-333)     /* interface, (-3) will conflict with chinese */

#define MAX_MODES   (127)
#define MAX_RECOMMENDS  (100)

#ifndef MIN
#define MIN(a,b)    (((a)<(b))?(a):(b))
#endif
#ifndef MAX
#define MAX(a,b)    (((a)>(b))?(a):(b))
#endif

#define toSTR(x)    __toSTR(x)
#define __toSTR(x)  #x

#define char_lower(c)  ((c >= 'A' && c <= 'Z') ? c|32 : c)

#define STR_CURSOR      "●"
#define STR_UNCUR       "  "

#define NOTREPLYING     -1
#define REPLYING        0
#define RECVINREPLYING  1

/* ----------------------------------------------------- */
/* 編輯器選項                                            */
/* ----------------------------------------------------- */
#define EDITFLAG_TEXTONLY   (0x00000001)
#define EDITFLAG_UPLOAD     (0x00000002)
#define EDITFLAG_ALLOWLARGE (0x00000004)
#define EDITFLAG_ALLOWTITLE (0x00000008)
// #define EDITFLAG_ANONYMOUS  (0x00000010)
#define EDIT_ABORTED    -1

/* ----------------------------------------------------- */
/* Grayout Levels                                        */
/* ----------------------------------------------------- */
#define GRAYOUT_COLORBOLD (-2)
#define GRAYOUT_BOLD (-1)
#define GRAYOUT_DARK (0)
#define GRAYOUT_NORM (1)
#define GRAYOUT_COLORNORM (+2)

/* Typeahead */
#define TYPEAHEAD_NONE  (-1)
#define TYPEAHEAD_STDIN (0)

/* ----------------------------------------------------- */
/* Constants                                             */
/* ----------------------------------------------------- */
#define DAY_SECONDS (86400)
#define MONTH_SECONDS   (DAY_SECONDS*30)

/* ----------------------------------------------------- */
/* Macros                                                */
/* ----------------------------------------------------- */

#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 96)
    #define __builtin_expect(exp,c) (exp)

#endif

#define likely(x)       __builtin_expect(!!(x), 1)
#define unlikely(x)     __builtin_expect(!!(x), 0)

#ifndef SHM_HUGETLB
#define SHM_HUGETLB 04000   /* segment is mapped via hugetlb */
#endif

#endif