#help_index "Cmd Line (Typically)"

I64 LineRep1(CDirEntry *tmpde)
{
        CDoc *doc;
        I64   res = 0, i;

        while (tmpde)
        {
                i = 0;
                if (tmpde->attr & RS_ATTR_DIR)
                        i = LineRep1(tmpde->sub);
                else
                {
                        doc = DocRead(tmpde->full_name);
                        if (doc->head.next != doc)
                                i = doc->head.last->y + 2;
                        DocDel(doc);
                }
                tmpde->user_data = i;
                res += i;
                tmpde = tmpde->next;
        }

        return res;
}
U0 LineRep2(CDoc *doc, CDirEntry *tmpde)
{
        while (tmpde)
        {
                if (tmpde->attr & RS_ATTR_DIR)
                {
                        DocPrint(doc, "%8,d $TR+C,\"%s\"$\n$ID,2$", tmpde->user_data, tmpde->name);
                        LineRep2(doc, tmpde->sub);
                        DocPrint(doc, "$ID,-2$");
                }
                else
                        DocPrint(doc, "%8,d $LK,\"%s\",A=\"FI:%s\"$\n", tmpde->user_data, tmpde->name, tmpde->full_name);
                tmpde = tmpde->next;
        }
}
public I64 LineRep(U8 *files_find_mask="/*", U8 *fu_flags=NULL)
{//Source line-of-code count report.
        I64                      fuf_flags = 0, res = 0;
        CDoc            *doc = DocNew;
        CDirEntry       *tmpde1 = NULL;

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

        if (tmpde1 = FilesFind(files_find_mask, fuf_flags))
        {
                res = LineRep1(tmpde1);
                DocPrint(doc, "%8,d $TR+C,\"%s\"$\n$ID,2$", res, files_find_mask);
                LineRep2(doc, tmpde1);
                DocPrint(doc, "$ID,-2$");
                DirTreeDel(tmpde1);
        }
        DocInsDoc(DocPut, doc);
        DocDel(doc);

        return res;
}

I64 SizeRep1(CDirEntry *tmpde)
{
        I64 res = 0, i;

        while (tmpde)
        {
                if (tmpde->attr & RS_ATTR_DIR)
                        i = SizeRep1(tmpde->sub);
                else
                        i = tmpde->size;
                tmpde->user_data = i; //Store size of the entry in user_data
                res += i;
                tmpde = tmpde->next;
        }

        return res;
}
U0 SizeRep2(CDoc *doc,CDirEntry *tmpde)
{
        while (tmpde)
        {
                if (tmpde->attr & RS_ATTR_DIR)
                {
                        DocPrint(doc, "%10,d $TR+C,\"%s\"$\n$ID,2$", tmpde->user_data, tmpde->name);
                        SizeRep2(doc, tmpde->sub);
                        DocPrint(doc, "$ID,-2$");
                }
                else
                {
                        DocPrint(doc, "%10,d ", tmpde->user_data);
                        DocPrint(doc, "$LK,\"%s\",A=\"FI:%s\"$\n", tmpde->name, tmpde->full_name);
                }
                tmpde = tmpde->next;
        }
}
public I64 SizeRep(U8 *files_find_mask="/*", U8 *fu_flags=NONE)
{//Report file sizes.
        I64                      fuf_flags = 0, res = 0;
        CDoc            *doc = DocNew;
        CDirEntry       *tmpde1 = NULL;

        FlagsScan(&fuf_flags, Define("ST_FILE_UTIL_FLAGS"), "+r");
        FlagsScan(&fuf_flags, Define("ST_FILE_UTIL_FLAGS"), fu_flags);
        if (tmpde1 = FilesFind(files_find_mask, fuf_flags & FUG_FILES_FIND))
        {
                res = SizeRep1(tmpde1);
                DocPrint(doc, "%10,d $TR+C,\"%s\"$\n$ID,2$", res, files_find_mask);
                SizeRep2(doc, tmpde1);
                DocPrint(doc, "$ID,-2$");
                DirTreeDel(tmpde1);
        }
        DocInsDoc(DocPut,doc);
        DocDel(doc);

        return res;
}