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 MyUtilLst(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+=MyUtilLst(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;
  ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),"+r+$");
  ScanFlags(&fuf_flags,Define("ST_FILE_UTIL_FLAGS"),fu_flags);
  return MyUtilLst(FilesFind(files_find_mask,fuf_flags&FUG_FILES_FIND),
        fuf_flags&~FUG_FILES_FIND);
}