一个搜索指令
2007/5/11 21:34:41
// find.c
// By jjgod for FYTX.
#include
#define itoa(x) sprintf("%d",x)
inherit F_CLEAN_UP;
void create() { seteuid(getuid()); }
public void search_dir(object me, string file, string dir, int raw);
public void search_in_file(object me, string info, string file);
public string *search_file(string file, string *flist, object me, int raw);
public string *deep_file_list(string dir);
int main(object me, string arg)
{
string file, dir, flag;
int raw;
// 权限检查,需要安全系统支持
if (! SECURITY_D->valid_grant(me, "(arch)"))
return 0;
if (! arg)
return notify_fail("指令格式:find <文件名|内容> in <目录名|文
件名> [-c]\n");
if (sscanf(arg, "%s in %s %s", file, dir, flag) != 3)
{
if (sscanf(arg, "%s in %s", file, dir) != 2)
notify_fail("指令格式:find <文件名|内容> in <目录名|文
件名> [-c]\n");
}
// 如果是查找包含内容模式
if (flag == "-c") raw = 1;
dir = resolve_path(me->query("cwd"), dir);
seteuid(getuid(me));
// 如果是在文件中查找模式
if (file_size(dir) >= 0)
{
search_in_file(me, file, dir);
return 1;
}
if (file_size(dir) == -2 && dir[strlen(dir) - 1] != '/') dir += "/";
if (file_size(dir) != -2)
return notify_fail(dir + " 并不是一个目录。\n");
// 给一点提示,因为玩家可能会过于迟滞
message_system("系统进行数据处理中,请耐心等候...");
search_dir(me, file, dir, raw);
return 1;
}
void search_dir(object me, string file, string dir, int raw)
{
int i;
string *flist, *result;
string info, file_info, size;
// 获得所有的深层目录文件列表
flist = deep_file_list(dir);
if (! arrayp(flist) || ! sizeof(flist))
{
message_system("系统数据处理完毕,请继续游戏。\n" ESC + "[K");
info = HIR "文件搜索完毕:\n\n" NOR ESC + "[K"
HIR "目录" + dir + " 下并没有可供查找的文件。" NOR;
message("system", info, me);
return;
}
result = search_file(file, flist, me, raw);
message_system("系统数据处理完毕,请继续游戏。\n" ESC + "[K");
if (! sizeof(result))
info = HIR "文件搜索完毕:\n" + ESC + "[K" + "\n" NOR ESC + "[
K"
HIR "目录 " + dir + " 下没有找到任何符合要求的文件。\n"
NOR
ESC + "[K";
else
{
file_info = "";
for (i = 0; i < sizeof(result); i++)
{
if (eval_cost() < 100) set_eval_limit(0);
size = itoa(file_size(result[i]) / 1000);
下一页
返回列表
返回首页
©2025 MUD游戏网_文字mud 电脑版
Powered by iwms