// cmdlist.c
// 生成可授权的 cmd 列表。

#include <ansi.h>

inherit F_CLEAN_UP;

void create_file(string dir);
int main(object me, string arg)
{
        string *dirs, dir;
        int i;

        if (! SECURITY_D->valid_grant(me, "(admin)"))
                return 0;

        write(HIC "正在获取 /cmds 下目录列表……" NOR );
        dirs = get_dir("/cmds/");
        
        write(HIC "成功。\n\n"NOR WHT "正在过滤非法目录……" NOR );
        dirs = filter_array(dirs, (: file_size("/cmds/" + $1) == -2 :));

        write(WHT "过滤完毕。\n\n" HIR "正在分析子目录。\n\n" NOR );
        for (i = 0; i < sizeof(dirs); i++ )
        {
                dir = "/cmds/" + dirs[i] + "/";
                write(CYN "正在生成 " + dir + " 目录的授权文件…… " NOR );
                create_file(dir);
        }
        write(HIC "\n全部文件生成成功。\n" NOR );
        return 1;
}

void create_file(string dir)
{
        string *files, file;
        int i;

        if (file_size(dir) != -2)
        {
                write(HIR "生成失败，这不是一个目录。\n" NOR);
                return;
        }
        
        if (dir == "/cmds/skill/"
         || dir == "/cmds/usr/"
         || dir == "/cmds/std/"
         || dir == "/cmds/debug/" )
        {
                write(HIR "此目录不需要授权。\n" NOR);
                return;
        }
        
        if (! arrayp(files = get_dir(dir)) || ! sizeof(files))
        {
                write(HIR "生成失败，找不到足够的文件。\n" NOR);
                return;
        }
        for (i = 0; i < sizeof(files); i++)
        {
                if (sscanf(files[i], "%s.c", file))
                {
                        file = "/grant/" + file;
                        write_file(file, ("此文件为 " + dir + files[i] + " 指令的授权文件。\n"), 1);
                }
        }
}
