1 /* options.h配置詳細選項
2 —————————————————————————-
3 将 MudOS 下載下傳解壓以後可以在相應目錄的根目錄中找到 options.h 這個檔案。如果修
4 改了這個檔案,那麼每次都需要重新編譯 MudOS 才能生效。重新編譯之前,請執行 ma
5 ke clean 一下。
6 下面的 options.h 來自 MudOSv22.2b10,MudOS作者推薦在修改options.h 之前,先将
7 它備份成 local_options。新的特性将會自動對比local_options并且在編譯的時候告知
8 。文中的選項定義并非最原始的定義。此文隻是為了說明各個選項的大緻含義。
9 options.h: defines for the compile-time configuration of the MudOS driver
10 */
11
12 #ifndef _OPTIONS_H_
13 #define _OPTIONS_H_
14
15 /****************************************************************************
16 如果你對自己的系統不熟悉,請使用預設的定義 SYSMALLOC,同時将其它的undef掉。
17 你必須選擇下面的其中一種定義,并且将其它的定義undef掉。
18 SYSMALLOC: 預設選項,沒有額外的系統開支,沒有統計能力。
19 SMALLOC:速度比較快,但是開銷相對大一些。
20 BSDMALLOC:速度更快,開銷比較大。
21 ****************************************************************************/
22
23 #define SYSMALLOC
24 #undef SMALLOC
25 #undef BSDMALLOC
26
27 /****************************************************************************
28 WRAPPEDMALLOC:這個附加定義可以換來有限的統計能力,并且不會增加太多的系統開銷。
29 DEBUGMALLOC:系統花費比較折中
30 ****************************************************************************/
31 #undef WRAPPEDMALLOC
32 #undef DEBUGMALLOC
33
34 /****************************************************************************
35 如果沒有定義SMALLOC,請不要使用下面這個定義。
36 ****************************************************************************/
37 #undef SBRK_OK
38
39 /****************************************************************************
40 如果沒有定義 BSDMALLOC or SMALLOC ,請不要使用下面這個定義
41 ****************************************************************************/
42 #undef DO_MSTATS
43
44 /****************************************************************************
45 DEBUGMALLOC定義的附加定義,用來強化DEBUGMALLOC,但是需要更多的開銷。
46 set_malloc_mask(int) and debugmalloc(string,int)等efuns将可以被使用。
47 ****************************************************************************/
48 #undef DEBUGMALLOC_EXTENSIONS
49
50 /****************************************************************************
51 同上,是用來調試的良好定義,check_memory() efun将可以被使用。
52 ****************************************************************************/
53 #undef CHECK_MEMORY
54
55 /****************************************************************************
56 相容性定義選項:
57 由于MudOS發展了很多年,是以曆代MudOS為了保證原有的Lib可以不修改就被移植到新的
58 OS上面,增加了這些相容性選項。如果你是根據OS撰寫Lib的人,可以定義一些優化的選
59 項來設計自己的Lib,而不必考慮重寫的問題。
60 以前的MudOS使用status這樣子的定義詞,這是很老的定義了,對于新的Lib設計而言,
61 這個定義毫無用處。
62 ****************************************************************************/
63 #undef HAS_STATUS_TYPE
64
65 /****************************************************************************
66 explode()選項,這個根據個人的習慣來定義吧
67 如果不定義下面兩個選項, explode(“..x.y..z..”, “.”) 的結果是 ({ “x”, “y”, “”
68 , “z”, “” })
69 如果定義SANE_EXPLODE_STRING 選項,其結果将是({ “”, “x”, “y”, “”, “z”, “” })
70 如果定義 REVERSIBLE_EXPLODE_STRING 選項,其結果将是 ({ “”, “”, “x”, “y”, “”,
71 “z”, “”, “” })
72 ****************************************************************************/
73 #define SANE_EXPLODE_STRING
74 #undef REVERSIBLE_EXPLODE_STRING
75
76 /****************************************************************************
77 這個選項用來确定call_other的行為,但是這個選項對于系統毫無好處可言。
78 ****************************************************************************/
79 #undef CAST_CALL_OTHERS
80
81 /****************************************************************************
82 如果定義了下面這個選項,那麼任何傳往非互動式物件(比如npc)的資訊前面都會被加
83 上’]'符号,這個也不是非常需要,而且很容易被模拟出來。
84 ****************************************************************************/
85 #undef NONINTERACTIVE_STDERR_WRITE
86
87 /****************************************************************************
88 如果定義下面這個選項,你将不能使用set_light()這樣的efuns函數,不過沒有關系,
89 這個函數是在太落伍了,這個功能非常容易被模拟出來。
90 ****************************************************************************/
91 #define NO_LIGHT
92
93 /****************************************************************************
94 嗯,下面這個選項,是非常重要的選項,如果你定義了,那麼意味着你将不能使用add_
95 action, commands, livings等等這些相關的efuns,而不得不使用 process_input() 這
96 樣的函數來定義物件所有的動作。這将是非常難堪的工作。是以保持add_action還是非
97 常有用的。
98 ****************************************************************************/
99 #undef NO_ADD_ACTION
100
101 /****************************************************************************
102 定義下面這個選項,将不能使用和snoop相關的函數,如果你認為沒有snoop也沒有關系
103 ,可以定義這個選項來保護一些隐私。
104 ****************************************************************************/
105 #undef NO_SNOOP
106
107 /****************************************************************************
108 這個選項和add_action一樣要命,除非你立志隻做一個聊天室,那麼可以定義這個選項
109 ,否則,你的工作将會非常的麻煩。
110 ****************************************************************************/
111 #undef NO_ENVIRONMENT
112
113 /****************************************************************************
114 由于曆史原因,定義wizard來管理Mud的運作,但是現在好像不是非常重要了。
115 如果定義了, wizardp() 和 related efuns 将不存在
116 如果沒有定義,在使用ed()時也受限制,設定的限制參數無效
117 而且這個定義非常容易模拟出來。
118 ****************************************************************************/
119 #undef NO_WIZARDS
120
121 /****************************************************************************
122 下面的選項隻是為了保持相容性問題,對于大多數的LPmud而言,這個選項毫無用處。尤
123 其是一個新的Lib撰寫。
124 ****************************************************************************/
125 #undef OLD_TYPE_BEHAVIOR
126
127 /****************************************************************************
128 定義下面這個選項,将意味着對于一個string或者buffers而言可以使用負數的index。
129 對于一個新Lib撰寫,這個屬性不是非常重要。
130 ****************************************************************************/
131 #undef OLD_RANGE_BEHAVIOR
132
133 /****************************************************************************
134 這個定義選項主要是為了保持向後相容,對于新的Lib而言,沒什麼用處。重新習慣一個
135 方式,并不是非常困難的,而且,ed()對于大多數習慣使用工具撰寫的人們而言,意義
136 不大。
137 ****************************************************************************/
138 #define OLD_ED
139
140 /****************************************************************************
141 下面這個選項比較重要,對于新的Lib撰寫或者以前沒有接觸過LPC的人來說,這個定義
142 可以按照喜好來定。
143 (1) ‘static’ 将不再使用,而是用 ‘nosave’ 或者 ‘protected’ 代替了它。.
144 (2) ‘public’ 含義發生了變化,外部函數必須在任何一級的繼承中被聲明。現在publi
145 c意味着是明顯可見的。
146 ****************************************************************************/
147 #define SENSIBLE_MODIFIERS
148
149 /****************************************************************************
150 下面的選項定義會改變MudOS的一些行為。這些對于Lib撰寫,是比較重要的。
151 定義下面這個選項,将使用MD5加密法代替系統預設的crypt()加密法。
152 ****************************************************************************/
153 #undef CUSTOM_CRYPT
154
155 /****************************************************************************
156 下面這個選項隻是為了一些相容性問題。定義以後,某些efuns含義會有所變化,但是沒
157 有實質的差別。
158 ****************************************************************************/
159 #undef COMPAT_32
160
161 /****************************************************************************
162 允許統計的時候包含字元串配置設定,不定義可以是字元串處理更快,但字元串統計将被忽略。
163 ****************************************************************************/
164 #define STRING_STATS
165
166 /****************************************************************************
167 同上,數組統計。
168 ****************************************************************************/
169 #define ARRAY_STATS
170
171 /****************************************************************************
172 這是比較有用的選項,用來生成log檔案。
173 ****************************************************************************/
174 #define LOG_CATCHES
175
176 /****************************************************************************
177 這個類似上面得選項,可以生成有用的調試文檔。
178 ****************************************************************************/
179 #define ARGUMENTS_IN_TRACEBACK
180
181 /****************************************************************************
182 同上,對于新Lib撰寫非常有用。
183 ****************************************************************************/
184 #define LOCALS_IN_TRACEBACK
185
186 /****************************************************************************
187 通過error_handler()來處理錯誤,非常有用的選項。
188 ****************************************************************************/
189 #define MUDLIB_ERROR_HANDLER
190
191 /****************************************************************************
192 下面得選項,可以詳細定義,當然也可以通過配置config.cfg這樣的檔案來設定。
193 ****************************************************************************/
194 #ifndef LATTICE
195 #define CONFIG_FILE_DIR “/u/tim/COMP/bin”
196 #else
197 #define CONFIG_FILE_DIR “etc:”
198 #endif
199
200 /****************************************************************************
201 下面的選項将會對整個Lib撰寫起到作用。對于新的Lib撰寫,建議選擇比較嚴格的方式
202 。而如果想保持相容,建議選擇正常的設定。
203 這些設定 其實等同于使用 #pragma 來定義。
204 如果你不太明白,使用 #define DEFAULT_PRAGMAS 0 是一個比較好的選擇。
205 PRAGMA_STRICT_TYPES: 強制執行嚴格的書寫規則,這個估計是以前議論最多的問題,
206 事實上,對于新Lib,這幾乎不是問題。
207 PRAGMA_WARNINGS: 對不合法代碼進行警告。非常有用。
208 PRAGMA_SAVE_TYPES: 呼叫以後儲存函數情況
209 PRAGMA_SAVE_BINARY: 二進制代碼儲存,可以降低系統負擔。
210 PRAGMA_OPTIMIZE: 代碼優化
211 PRAGMA_ERROR_CONTEXT:錯誤報告
212 ****************************************************************************/
213 #define DEFAULT_PRAGMAS PRAGMA_SAVE_BINARY + PRAGMA_WARNINGS + PRAGMA_ERROR_CONTEXT
214
215 /****************************************************************************
216 對于沒有使用的變量聲明或者缺少的參數進行報告
217 ****************************************************************************/
218 #define SUPPRESS_ARGUMENT_WARNINGS
219
220 /****************************************************************************
221 這是重要的設定,為了保證系統擁有reset(),請不要定義這個選項。
222 除非不想系統擁有reset()。
223 ****************************************************************************/
224 #undef NO_RESETS
225
226 /****************************************************************************
227 看名字就知道,如果定義了,reset()将變得比較懶惰,你不碰它,它不呼叫。對于大多
228 數需要重新整理時間的LPmud而言,還是不要定義的好。
229 ****************************************************************************/
230 #undef LAZY_RESETS
231
232 /****************************************************************************
233 存盤檔案的預設字尾名。
234 ****************************************************************************/
235 #define SAVE_EXTENSION “.o”
236
237 /****************************************************************************
238 下面兩個選項使用來控制ansi的使用者輸入的,這個比較容易模拟出來,因為自由的ansi
239 輸入可能會導緻一些顯示錯誤。
240 ****************************************************************************/
241 #define NO_ANSI
242 #define STRIP_BEFORE_PROCESS_INPUT
243
244 /****************************************************************************
245 筆者水準有限,不知道OPC是什麼東西。隻知道定義以後,可以用一個opcprof()函數來
246 統計外部函數調用的情況。下面得選項稍有不同,一次隻能定義其中的一個。
247 ****************************************************************************/
248 #undef OPCPROF
249 #undef OPCPROF_2D
250
251 /****************************************************************************
252 當這個選項定義以後,當發生crash的時候,master.c中定義的crash()将被呼叫。
253 ****************************************************************************/
254 #define TRAP_CRASHES
255
256 /****************************************************************************
257 可以在call_outs中使用this_player()
258 ****************************************************************************/
259 #define THIS_PLAYER_IN_CALL_OUT
260
261 /****************************************************************************
262 這個定義是比較有用的,定義以後,call_out将産生一個int序列,這個序列可以友善的
263 被find_call_out()和remove_call_out()調用。這是一個效率極高的處理方式。原來使
264 用name來處理的方式相對比較低效。唯一的代價是些許系統開銷。
265 ****************************************************************************/
266 #define CALLOUT_HANDLES
267
268 /****************************************************************************
269 調試非常有用,一般情況下不需要。
270 ****************************************************************************/
271 #undef FLUSH_OUTPUT_IMMEDIATELY
272
273 /****************************************************************************
274 這個定義允許在Lib中給與一些object以特權,除非你非常了解這個定義對于你所要撰寫
275 的Lib的用處,不然的話,不要定義這個。
276 ****************************************************************************/
277 #undef PRIVS
278
279 /****************************************************************************
280 下面這個定義可以使互動物件也适用catch_tell(),當然你就必須在user.c中寫入catc
281 h_tell()來處理receive(msg)。
282 ****************************************************************************/
283 #undef INTERACTIVE_CATCH_TELL
284
285 /****************************************************************************
286 受限制的ed模式
287 ****************************************************************************/
288 #define RESTRICTED_ED
289
290 /****************************************************************************
291 使用下面這個定義,你就不能在想要撰寫的Lib中使用shadow,而shadow往往非常有用,
292 是以除非你明确知道不需要,不然不要定義這個選項。
293 ****************************************************************************/
294 #undef NO_SHADOWS
295
296 /****************************************************************************
297 定義下面這個,可以snoop shadowed object,因為shadowed object可能不知道送過來
298 的msg。
299 ****************************************************************************/
300 #undef SNOOP_SHADOWED
301
302 /****************************************************************************
303 這是一個有趣的定義,可以讓你監聽snooper的msg,也許利用起來比較有趣。當然也可
304 以不定義它。
305 ****************************************************************************/
306 #define RECEIVE_SNOOP
307
308 /****************************************************************************
309 這不是一個非常準确的定義,如果你想知道物件調用函數的時候,使用了多少時間,可
310 以用這個試試。不過不要對它的準确性基于太多的希望。
311 ****************************************************************************/
312 #define PROFILE_FUNCTIONS
313
314 /****************************************************************************
315 ‘buffer’這個類型定義的選擇,按所要撰寫的Lib而定,如果你可能要用到這種變量定義
316 ,就不要定義這個選項。
317 ****************************************************************************/
318 #undef NO_BUFFER_TYPE
319
320 /****************************************************************************
321 設定 pragma ’save_binary’ 的有效性。
322 使用這個選項,可以是Lib運作速度有所提高,并且降低系統的開銷。代價就是将占用更
323 多的硬碟空間。
324 ****************************************************************************/
325 #define BINARIES
326
327 /****************************************************************************
328 允許定義數組變量,關鍵字array。比如 int array x = ({…});
329 不過估計這樣定義也不會有人反對 int *x = ({});
330 定義這個選項與否,主要是看是不是習慣使用array這個聲明,如果你來自C或者java,
331 也許會喜歡的。
332 ****************************************************************************/
333 #define ARRAY_RESERVED_WORD
334
335 /****************************************************************************
336 這個同上,關鍵字ref。按照Lib撰寫人的習慣來定義比較好。
337 ****************************************************************************/
338 #define REF_RESERVED_WORD
339
340 /****************************************************************************
341 擴充包是可選配件
342 如果你定義了PACKAGE_XYZZY,那麼你可以參看 packages/xyzzy.c 中的函數來确定可
343 以使用哪些efuns。
344 确定使用哪些擴充包,主要取決于提供的efuns是否是需要的。
345
346 ****************************************************************************/
347
348 /****************************************************************************
349 這個擴充包的函數還是非常有用的,比如query_ip_port() repeat_string()等等。
350
351 ****************************************************************************/
352
353 #define PACKAGE_CONTRIB
354
355 /****************************************************************************
356 下面這個包主要用來了解driver内部的資訊。
357 ****************************************************************************/
358 #define PACKAGE_DEVELOP
359
360 /****************************************************************************
361
362 ****************************************************************************/
363 #define PACKAGE_MATH
364
365 /****************************************************************************
366 這個是圖像處理包,不過,筆者也沒用過。
367 ****************************************************************************/
368 #undef PACKAGE_MATRIX
369
370 /****************************************************************************
371 這個包的函數用來了解Mudlib的資料,比較實用。
372 ****************************************************************************/
373 #undef PACKAGE_MUDLIB_STATS
374
375 /****************************************************************************
376 呵呵,這個當然非常有用了。
377 ****************************************************************************/
378 #define PACKAGE_SOCKETS
379
380 /****************************************************************************
381 這個用處不大,尤其是中文使用者,呵呵
382 ****************************************************************************/
383 #undef PACKAGE_PARSER
384
385 /****************************************************************************
386 這個也沒什麼大的用處。允許driver在config檔案裡exe()指令清單
387 ****************************************************************************/
388 #undef PACKAGE_EXTERNAL
389
390 /****************************************************************************
391 外部擴充指令支援的數目
392 ****************************************************************************/
393 #ifdef PACKAGE_EXTERNAL
394 #define NUM_EXTERNAL_CMDS
395 #endif
396
397 /****************************************************************************
398 資料庫支援包,想用資料庫mysql的Lib撰寫者比較有用,
399 ****************************************************************************/
400 //#define PACKAGE_DB
401 #undef PACKAGE_DB
402 /****************************************************************************
403 如果PACKAGE_DB被定義,必須選擇下面中的一個來支援資料庫
404 ****************************************************************************/
405 #ifdef PACKAGE_DB
406 #define USE_MSQL 1 /* MiniSQL, it’s small; it’s free */
407 #undef USE_MYSQL 2 /* MySQL, bigger; it’s free */
408 #define DEFAULT_DB USE_MSQL /* default database */
409 #endif
410
411 /****************************************************************************
412 UID,就是使用者有效識别碼,國内的LPMud大多基于 wizard 以及 uid 系統,如果不
413 是新Lib的撰寫者,這個是比較有用的。如果你擁有了自己的理念,可以不使用這些定義
414 。從MudOS開發者來看,他們也沒有明确說不需要這些。雖然本人倒是比較喜歡放棄這些
415 設定,但是這些設定的存在,确實可以友善很多的處理。
416 如果你打算使用UID,那就定義下面這個選項。
417 ****************************************************************************/
418 #define PACKAGE_UIDS
419
420 /****************************************************************************
421 自動設定UID,那就不需要每次都seteuid(getuid(this_object()))。如果需要seteuid
422 (0),那麼不要定義這個,比如現在大多數的Lib。
423 ****************************************************************************/
424 #define AUTO_SETEUID
425
426 /****************************************************************************
427 backbone這個設定是被自動認可的。
428 ****************************************************************************/
429 #define AUTO_TRUST_BACKBONE
430
431 /****************************************************************************
432 下面這些設定,一般情況下,不需要做出大的調整。
433 資源問題,使用32位位址。
434 ****************************************************************************/
435 #undef USE_32BIT_ADDRESSES
436
437 /****************************************************************************
438 心跳時間,這裡是一秒。
439 ****************************************************************************/
440 #define HEARTBEAT_INTERVAL 2000000
441
442 /****************************************************************************
443 call_out的設定
444 ****************************************************************************/
445 #define CALLOUT_CYCLE_SIZE 64
446
447 /****************************************************************************
448 資訊暫存設定
449 ****************************************************************************/
450 #define LARGEST_PRINTABLE_STRING 8192
451
452 /****************************************************************************
453 輸出資訊buffer設定
454 ****************************************************************************/
455 #define MESSAGE_BUFFER_SIZE 65536
456
457 /****************************************************************************
458 定義call_other cache的bits number
459 6 64 1k
460 8 256 4k
461 10 1024 16k
462 12 4096 64k
463 14 16384 256k
464 16 65536 1M
465 ****************************************************************************/
466 #define APPLY_CACHE_BITS 12
467
468 /****************************************************************************
469 call_other的cache統計
470 ****************************************************************************/
471 #define CACHE_STATS
472
473 /****************************************************************************
474 不定義可以快一點。
475 ****************************************************************************/
476 #undef TRACE
477
478 /****************************************************************************
479 LPC->C的編譯
480 ****************************************************************************/
481 #undef LPC_TO_C
482
483 /****************************************************************************
484 看系統而定,一般不需要定義。
485 ****************************************************************************/
486 #undef RUNTIME_LOADING
487
488 /****************************************************************************
489 這個定義以後,允許被跟蹤執行。
490 ****************************************************************************/
491 #undef TRACE_CODE
492
493 /****************************************************************************
494 預設設定是32,主要關系到 heart_beat 的系統開銷。
495 ****************************************************************************/
496 #define HEART_BEAT_CHUNK 64
497
498 /****************************************************************************
499 一般情況下,get_char不是bufferd。是以不太必要定義這個選項。
500 ****************************************************************************/
501 #undef GET_CHAR_IS_BUFFERED
502
503 /****************************************************************************
504 字元串定義。
505 ****************************************************************************/
506 #define SMALL_STRING_SIZE 100
507 #define LARGE_STRING_SIZE 1000
508
509 /****************************************************************************
510 指令buffer定義。
511 ****************************************************************************/
512 #define COMMAND_BUF_SIZE 2000
513
514 /****************************************************************************
515 呵呵,如果dbase深度超過了25就會溢出,這個設定就是這裡定義的。當年最常見的一個
516 當機bug就是set指令的dbase溢出導緻的。
517 ****************************************************************************/
518 #define MAX_SAVE_SVALUE_DEPTH 50
519
520 /****************************************************************************
521 25個局部變量調用,對于一個函數來說,應該是夠了。數數COMBAT_D中的attack()函數
522 用到了幾個局部變量。本人曾經定義超過25個變量,結果導緻出錯,但是那個時候不知
523 道為什麼,雖然預感到這一點,可以在mud配置檔案中定義。
524 ****************************************************************************/
525 #define CFG_MAX_LOCAL_VARIABLES 100
526 #define CFG_EVALUATOR_STACK_SIZE 2000
527 #define CFG_MAX_CALL_DEPTH 100
528
529 /****************************************************************************
530 下面定義的必須選擇 4, 16, 64, 256, 1024, 4096 中的一個數字
531 ****************************************************************************/
532 #define CFG_LIVING_HASH_SIZE 1024
533
534 /****************************************************************************
535 NEXT_MALLOC_DEBUG: define this if using a NeXT and you want to enable
536 the malloc_check() and/or malloc_debug() efuns. Run the ‘man malloc_debug’
537 command on the NeXT to find out what the arguments to malloc_debug(int)
538 mean. The malloc_check() efun calls the NeXT NXMallocCheck() system
539 call which does a consistency check on malloc’s data structures (this
540 consistency check is done at each malloc() and free() for certain
541 malloc_debug() levels). A non-zero return value indicates there was
542 a consistency problem. For those NeXT users wanting a bit more
543 performance out of malloc, try defining NEXT_MALLOC_DEBUG and calling the
544 malloc_debug(-1) efun (with an arg of -1). This will turn all
545 malloc debugging off and call malloc_singlethreaded() which the NeXT
546 malloc man page claims can make NeXT system malloc 10% to 15% faster.
547
548 [NOTE: This #define has no affect on the driver if not using the
549 NeXTSTEP OS.]
550
551 Warning: if you use a NeXT and define NEXT_MALLOC_DEBUG, be sure to
552 protect the use of the malloc_check() and malloc_debug() efuns
553 since setting certain debug levels can cause malloc() and free()
554 to become _very_ slow (protect efuns by using simul_efuns and
555 valid_override).
556
557 [NOTE: malloc_debug(6) is a good compromise between efficiency and
558 completeness of malloc debugging (malloc/free will be about half as fast).]
559 ****************************************************************************/
560 #define NEXT_MALLOC_DEBUG
561
562 #endif
563
564 編譯V14的時候編譯DB
565 option.h修改下列配置
566 #define PACKAGE_DB
567 #ifdef PACKAGE_DB
568 #undef USE_MSQL /* MiniSQL, it’s small; it’s free */
569 #define USE_MYSQL 2 /* MySQL, bigger; it’s free */
570 #define DEFAULT_DB USE_MYSQL /* default database */
571 #endif
修改 db.h 頭檔案:
将 24 行至 37 行注釋掉,緊接着寫上你自己的 MySQL 頭檔案的位置,
find / -name mysql.h 就找到了!
例如在 /usr/local/mysql/include/mysql.h
就寫上:
#include “/usr/local/mysql/include/mysql.h”
在源代碼目錄裡的 system_libs 檔案裡加上 mysql 連接配接庫的位置,
例如在 /usr/local/mysql/lib
就加上:
-L/usr/local/mysql/lib -lmysqlclient