I64 MyUtilDoc(CDoc *doc, I64 fuf_flags)
{
        Bool             unlock = DocLock(doc);
        I64                      res = 0;
        CDocEntry       *doc_e;

        DocRecalc(doc);
        doc_e = doc->head.next;
        while (doc_e != doc)
        {
                res++;
                doc_e = doc_e->next;
        }
        DocRecalc(doc);
        if (unlock)
                DocUnlock(doc);

        return res;
}

I64 MyUtilFile(U8 *filename, I64 fuf_flags)
{
        I64   res;
        CDoc *doc = DocRead(filename);

        if (res = MyUtilDoc(doc, fuf_flags))
        {
                "%8d:%s\n", res, doc->filename.name;
                DocWrite(doc);
        }
        DocDel(doc);

        return res;
}
I64 MyUtilList(CDirEntry *tmpde, I64 fuf_flags)
{
        I64                      res = 0;
        CDirEntry       *tmpde1;

        while (tmpde)
        {
                tmpde1 = tmpde->next;
                if (tmpde->attr & RS_ATTR_DIR)
                {
                        if (tmpde->sub)
                        {
                                "Processing Directory: %s\n", tmpde->full_name;
                                res += MyUtilList(tmpde->sub, fuf_flags);
                        }
                }
                else
                        res += MyUtilFile(tmpde->full_name, fuf_flags);
                DirEntryDel(tmpde);
                tmpde = tmpde1;
        }

        return res;
}
I64 MyUtil(U8 *files_find_mask="*", U8 *fu_flags=NULL)
{
        I64 fuf_flags = 0;

        FlagsScan(&fuf_flags, Define("ST_FILE_UTIL_FLAGS"), "+r+$");
        FlagsScan(&fuf_flags, Define("ST_FILE_UTIL_FLAGS"), fu_flags);

        return MyUtilList(FilesFind(files_find_mask, fuf_flags & FUG_FILES_FIND), fuf_flags & ~FUG_FILES_FIND);
}