/* This converts the entire OS into HTML.
See ::/Demo/ToHtmlToTXTDemo/ToHtml.CC.

Notice that an entry like $TX,"GOOGLE",HTML="http://www.google.com"$
will be converted to text in the html with an html link.

Terry cheated by hardcoding www.templeos.org as the website
for ZealOS Links.  Why don't you copy
::/Demo/ToHtmlToTXTDemo/ToHtml.CC to your /Home directory
and modify it?  You are welcome to link to
http://www.templeos.org if you want file that come on the
ZealOS distribution.

You can pass html meta data as args to ToHtml().
*/

Cd(__DIR__);;
#include "::/Demo/ToHtmlToTXTDemo/ToHtml"

//ToHtml("DemoInPage.DD", "~/DemoOutPage");

CTask *index_task = User("#include \"::/Demo/ToHtmlToTXTDemo/HtmlDirList\";;DocMax;DocMax;\n");
DocClear(index_task->border_doc, TRUE);
WinVert(1, TEXT_ROWS - 2, index_task);
WinToTop;

U0 DirIndex(U8 *dest_path, U8 *full_name, U8 *opt_func="")
{
    U8      *index_path,
            *index_path_out,
            *index_exe;
    CDoc    *index_doc;

    index_path      = MStrPrint("%s/index.DD", dest_path);
    index_path_out  = MStrPrint("%s/index.html", dest_path);
    "%s\n", index_path;

    index_exe = MStrPrint("Cls;DirIndexList(\"%s\");%s;View;\n", full_name, opt_func);
    XTalk(index_task, index_exe);

    TaskWait(index_task);

    index_doc = DocNew(index_path);
    DocInsDoc(index_doc, index_task->put_doc);
    DocWrite(index_doc);
    DocDel(index_doc);

    TaskWait(index_task);
    MessagePostWait(index_task, MESSAGE_KEY_DOWN_UP, CH_SHIFT_ESC, 0);

    ToHtml(index_path, index_path_out);
    Del(index_path);

    Free(index_path);
    Free(index_path_out);
    Free(index_exe);

}

I64 Dir2Html(U8 *src_files_find_mask, U8 *dst_files_find_mask)
{
    CDirEntry   *tmpde1 = NULL, *tmpde2;
    I64          res = 0;
    U8          *dest_path,
                *dest_file,
                *dest_abs,
                *src_abs,
                 dest_ext[STR_LEN];

    tmpde1 = FilesFind(src_files_find_mask, FUF_RECURSE);
    dest_abs    = DirNameAbs(dst_files_find_mask);
    src_abs     = DirNameAbs(src_files_find_mask);

    if (tmpde1)
    {
        while (tmpde1)
        {
            tmpde2 = tmpde1->next;
            res++;

            dest_file = StrNew(tmpde1->name);
            FileExtRemove(dest_file, dest_ext);

            "%s\n", tmpde1->full_name;

            if (!(tmpde1->attr & RS_ATTR_DIR))
            {
                if (StrCompare(dest_ext, "BIN.C")   &&
                    StrCompare(dest_ext, "BIN")     &&
                    StrCompare(dest_ext, "ISO.C")   &&
                    StrCompare(dest_ext, "html")    &&
                    StrCompare(dest_ext, "DATA")    &&
                    StrCompare(dest_ext, "MAP"))
                {
                    dest_path = MStrPrint("%s/%s.%s.html", dest_abs, dest_file, dest_ext);

                    "%s\n\n", dest_path;
                    ToHtml(tmpde1->full_name, dest_path);
                    progress1++;

                    Free(dest_path);
                }
            }
            else
            {
                dest_path = MStrPrint("%s/%s", dest_abs, dest_file);

                DirIndex(dest_path, tmpde1->full_name);

                if (StrCompare(tmpde1->full_name, dest_abs))
                    Dir2Html(tmpde1->full_name, dest_path);

                Free(dest_path);


            }

            DirEntryDel(tmpde1);
            tmpde1 = tmpde2;

            Free(dest_file);
        }
    }

    Free(dest_abs);

    return res;

}

I64 HtmlGen()
{
    I64 res;

    DocMax;
    DocMax;
    DelTree("::/HTML/");

    progress1       = 0;
    progress1_max   = FileCount(FilesFind("::/", FUF_RECURSE));

    DirIndex("::/HTML/", "::/", "HashTableDump;");

    res = Dir2Html("::/", "::/HTML/");

    Kill(index_task);

    return res;
}