传回所有呼叫目前函式的物件阵列.
语法:
object *all_previous_objects();
用法:
传回一个所有呼叫目前函式的物件阵列 (an array of object).注意, 区域函式 (local function) 的呼叫不会更动目前的物件(current object) previous_object() 的内容.
参考:
call_other(),call_out(),origin(),previous_object()
翻译:Spock @ FF 96.Oct.12. (printed 3/16/95)
取得延迟中的 call_out() 资讯.
说明:
取得所有使用 call_out() 呼叫而延迟中的函式呼叫资讯.这会传回一个阵列, 每一项有四个元素 (element):
物件 (object), 函数 (function), 延迟时间 (the delayto go), 选择的参数 (the optional argument)
传回一个时间字串
语法:
string ctime( int clock );
字串 ctime( 整数 clock );
用法:
传回一个日期和时间的字串, 而参数 clock 是自从1970 年算起的秒数.
参考:
time(),time_expression(),localtime(),uptime()
翻译:Spock @ FF 97.Jan.27. (printed 3/16/95)
取得一个物件所继承的父物件.(parent object)
语法:
string *deep_inherit_list( object obj );
字串 *deep_inherit_list( 物件 obj );
用法:
传回一个物件所继承之所有父物件的档案名称, 包括直接继承与间接继承的父物件.
参考:
inherit_list(),inherits()
翻译:Spock @ FF 97.Feb.04. (printed 3/16/95)
产生一个执行时段 (run_time) 错误.
语法:
void error( string err );
无传回值 error( 字串 err );
用法:
呼叫 error() 时, 会产生一个执行时段错误 err. 并中止目前正在执行的执行绪脉络 (thread). 而发生错误的程式会被追踪错误的出处, 并纪录在除错纪录 (debug log) 的档案中.
参考:
catch(),throw(),error_handler()
翻译:Spock @ FF 97.Feb.12. (printed 3/16/95)
判断一个指定的变数是否为错误码 (error code).
说明:
如果参数 arg是一个整数值的错误码, errorp() 传回 1 .您可能会修改超越函式 (emulated functions, efun), 而能传回一个标准的错误码. 所以程式可以写成像下面的样子:
if (errorp(result = efun_call()))printf("error = %d\n", result);在以後的计划中, 我们会加入一个新的函式 perror(result)用来传回整数值的错误代码与一个错误讯息的字串
传回执行耗费时间 (evaluation cost) 还剩多少.
语法:
void eval_cost()无传回值 eval_cost()
用法:
eval_cost() 在驱动程式 (driver) 判断此时是否陷入一个无穷回圈之前, 传回是否可以执行的指示数字.
参考:
catch(),error(),throw(),error_handler(),set_eval_limit(),reset_eval_cost()
翻译:Spock @ FF 97.Feb.12. (printed 3/16/95)
找到行程中下一个会被呼叫的点召
说明:
因为执行函式 func 而找到第一个点召 (call out), 并传回剩下的时间. 如果无法找到则传回 -1
找出含有指定函式的档案.
语法:
string function_exists( string str, object ob, int flag );
字串 function_exists( 字串 str, 物件 ob, 整数 flag );
用法:
传回定义有函式 str 之物件 ob 的档案名称. 如果函式str 是被定义在 ob 所继承的物件中, 传回的档案名称可能会与 file_name( ob ) 传回的不同.
如果物件 ob 中没有定义函式 str 则传回 0.
注意, function_exists() 不会检查 ob 的投影物件(shadows).
如果 flag 是非零值,那么 static 和 private 类型的函数也会返回.
参考:
call_other(),call_out(),functionp(),valid_shadow()
翻译:Spock @ FF 97.Feb.12. (printed 3/16/95)修改:Find. 使适用于 v22 版本 driver. (99.jan.)
对一个物件取得函式的侧写(profiling) 资讯.
语法:
mixed *function_profile( object ob );
混合 *function_profile( 物件 ob );
用法:
传回对 ob 或是 this_object() (如果不予指定 ob ) 的函式侧写资讯. 这个函式只有在驱动程式 (driver) 编译时有定义 PROFILE_FUNCTIONS 才有效.传回值:此函式传回一个映射变数的阵列, 每一个在 ob 中的函式传回的映射格式如下:
([ "name" : 函式的名称,"calls" : 呼叫的次数,
/* cpu 时间以微秒 (microsecond) 为单位 */"self" : cpu_time_spent_in self,"children" : cpu_time_spent_in_children])
此处的用途与 CPU 时脉有关, 虽然单位为微秒(microseconds), 但实际上的精确度要差得多.
参考:
rusage(),time_expression(),opcprof()
翻译:Spock @ FF 97.Jul.26. (printed 3/16/95)
取得一个物件所继承的父物件 (parents)清单.
语法:
string *inherit_list( object obj );
字串 *inherit_list( 物件 obj );
用法:
传回物件 obj 所继承之父物件的档案名称, 以字串阵列(array) 的形式传回. 例如: A 继承 B, 而 B 继承 C ,inherit_list(A) 会传回一个含有 B 的阵列, 而没有 C.
参考:
deep_inherit_list(),inherits()
翻译:Spock @ FF 97.Feb.14. (printed 3/16/95)
判断一个物件是否继承一个指定的档案
语法:
int inherits( string file, object obj );
整数 inherits( 字串 file, 物件 obj );
用法:
如果 obj 不是继承 file, inherits() 传回 0. 如果 obj继承最新复制的 file 则传回 1, 如果继承旧的复制的 file则传回 2.
参考:
deep_inherit_list(),inherit_list()
翻译:Spock @ FF 97.Feb.14. (printed 3/16/95)
转换成本地时间
语法:
#include <localtime.h>mixed *localtime( int time );
混合 *localtime( 整数 time );
用法:
localtime() 转换一个整数的时间值 (像是 time() 传回值) 成为一个阵列. 这个阵列就是目前的本地时间. 在以前 time() 是函式用来取得格林威治时间 (GMT (UTC)),而本地时间的定义是与格林威治时间的差值. 现在这种换算的方法已经没有必要了. localtime() 传回秒数、分钟、小时、日期、月数、年数、星期几、一年中的第几天、本地的时区名称、本地时区与格林威治时区的差值. 这些时间的资讯直接由作业系统取得, 而且使驱动程式不需要用到 MUD 本身的设定档案.
localtime() 传回一个包含上述时间资讯的阵列. 每一个时间值的索引关键字 (index) 由 localtime.h 定义.下表则整理出 localtime() 传回的阵列内容.
int LT_SEC 秒数 (0..59)int LT_MIN 分钟 (0..59)int LT_HOUR 小时 (0..23)int LT_MDAY 日数 (1..31)int LT_MON 月数 (0..11)int LT_YEAR 年份 (必须大於 1900)int LT_WDAY 星期几 (0..6)int LT_YDAY 一年中的第几天 (0..365)int LT_GMTOFF 格林威治时间相差的秒数 (UTC)string LT_ZONE 本地时区的名称
参考:
ctime(),time(),time_expression(),uptime(),/include/localtime.h
翻译:Spock @ FF 97.Feb.18. (printed 3/16/95)
传回最高的执行耗费时间 (evaluation cost)
语法:
void max_eval_cost()无传回值 max_eval_cost()
用法:
max_eval_cost() 在驱动程式 (driver) 判断此时是否陷入一个无穷回圈之前, 传回是否可以执行的指示数字.
参考:
catch(),error(),throw(),error_handler(),set_eval_limit(),reset_eval_cost()
翻译:Spock @ FF 97.Apr.15. (printed 3/16/95)
清除残留在记忆体中的物件.
语法:
int reclaim_objects( void );
整数 reclaim_objects( 无参数 );
用法:
这个函式重复检查每一个载入的物件, 并尽力把残留在记忆体中的物件清除掉. 这样可以清出一些记忆体, 清理的数量多寡要看 mud 本身的程式是如何写的. 如果一个物件被其他物件里面的全域变数 (global variable)指标 (pointer) 指向到, 就会残留在记忆体中, 然後再被摧毁掉. 这个超越函式(efun) 会传回变数遇到的被摧毁的物件数目.
参考:
destruct()
翻译:Spock @ FF 97.May.24. (printed 3/16/95)
把 this_object() (目前这个物件)的程式置换掉.
语法:
void replace_program( string str );
无传回值 replace_program( 字串 str );
用法:
replace_program() 会把 this_object() 替换成这个物件继承的物件. 字串 str 是要进行置换的档案名称. 物件进行置换之後, 目前的物件就相当於继承物件的复制品. 只是保留目前物件的档案名称和全域变数 (global variable)不变. 在目前的物件程式执行完毕以前, 不会进行置换的动作.
参考:
clone_object(),new()
翻译:Spock @ FF 97.May.27. (printed 3/16/95)
重新设定剩下的执行耗费时间数字.
语法:
void reset_eval_cost();
用法:
reset_eval_cost() 把剩下的执行耗费时间数字设定成最高执行耗费时间数.
参考:
catch(),error(),throw(),error_handler(),eval_cost(),set_eval_limit()
翻译:Spock @ FF 97.Jun.2. (printed 3/16/95)
设定执行耗费时间 (evaluation cost)的上限值.
语法:
void set_eval_limit( int );
无传回值 set_eval_limit( 整数 );
用法:
以一个非零值的参数指定给 set_eval_limit() 函式, 则设定任何一个执行绪 (thread) 在发生错误之前所允许的最高执行耗费时间. 如果参数为 0, 则将目前的执行耗费时间计数器(counter) 归零, 并传回目前执行耗费时间的上限值.set_eval_limit(-1) 传回剩下的执行耗费时间.
参考:
catch(),error(),throw(),error_handler(),eval_cost()
翻译:Spock @ FF 97.Jul.21. (printed 3/16/95)
更改一个物件距离下次重新设定 (reset) 的时间.
语法:
varargs void set_reset( object ob, int time );
不定参数 无传回值 set_reset( 物件 ob, 整数 time );
用法:
设定物件 ob 距离下次重新设定的时间为整数 time 指定的秒数.如果不指定 time, 则使用驱动程式普通设定的公式.
公式:reset time = current_time + reset_time / 2 +random(reset_time / 2)
参考:
reset()
翻译:Spock @ FF 97.Jul.21. (printed 3/16/95)
关闭 mud 驱动程式 (driver).
语法:
void shutdown( int how );
无传回值 shutdown( 整数 how );
用法:
这个函式可以关闭驱动程式. 比起因为程式错误、档案损毁、驱动程式被 kill 或其他原因导致驱动程式发生严重问题而关闭, 用 shutdown 算是正常控制驱动程式关闭的方式. 参数 how指定驱动程式要送给 exit() 函式的整数值. 惯例上, 当 how为 -1 时, 则一起关闭重新启动驱动程式的 script . 所以reboot (重新启动 mud) 这个指令应该使用 shutdown(), 而halt 指令 (停止 mud 执行) 应该使用 shutdown(-1) . 如果您想要藉由上述的方式控制 mud 关闭的方式, 您应该在 script中检查传回值.shutdown() 显然是一个需要安全把关的函式. 在 simul_efun中加上 shutdown() 并使用 exec(), 这样可以对执行shutdown() 作适当的检查. 请确定在主宰物件 (master.c)中也要设定 valid_override(4) 以防止 efun::shutdown()这种方式逃过检查.
参考:
crash(),slow_shutdown()
翻译:Spock @ FF 97. Jul.23. (printed 3/16/95)
传回现在时刻距离 1970 年一月一日有多少秒.
语法:
int time( void );
整数 time ( 无参数 );
用法:
传回从 1970 年一月一日午夜 (格林威治时间) 开始到现在,总共过了多少秒.
参考:
ctime(),localtime(),time_expression(),uptime()
翻译:Spock @ FF 97.Jul.25. (printed 3/16/95)
传回上一次驱动程式 (driver) 启动至今的秒数.
语法:
int uptime( void );
整数 uptime( 无参数 );
用法:
uptime() 传回上一次驱动程式重新启动至今有几秒.
参考:
time(),ctime(),localtime(),time_expression()
翻译:Spock @ FF 97.jul.25. (printed 3/16/95)