ZealOS/src/Home/HtmlGen.ZC
2022-03-04 14:48:45 -05:00

150 lines
3.3 KiB
HolyC
Executable file

/* This converts the entire OS into HTML.
See $LK,"::/Demo/ToHtmlToTXTDemo/ToHtml.ZC"$.
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 $LK,"www.templeos.org",A="FF:::/Demo/ToHtmlToTXTDemo/ToHtml.ZC,www.templeos.org"$ as the website
for $LK,"ZealOS Links",A="MN:LK_FILE"$. Why don't you copy
$LK,"::/Demo/ToHtmlToTXTDemo/ToHtml.ZC"$ 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 $LK,"ToHtml",A="FF:::/Demo/ToHtmlToTXTDemo/ToHtml.ZC,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, "ZXE") &&
StrCompare(dest_ext, "BIN") &&
StrCompare(dest_ext, "ISO") &&
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;
}