一个搜索指令
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