Remove WallPaper time offset undo.

Fix lingering 'HC' to 'CC'.
Fix EdLiteUpdate incorrect tab width.
Move PCNet driver into Drivers/ folder.
Add graphics demos.
Add JSON lexer to Net/ folder.
Increase entropy of Splash screen mottos.
This commit is contained in:
TomAwezome 2021-06-29 18:10:26 -04:00
parent cbb5272ccd
commit 0778e2dd16
25 changed files with 615 additions and 17 deletions

Binary file not shown.

102
src/Demo/Graphics/Clock.CC Executable file
View file

@ -0,0 +1,102 @@
#define USE_JIFFIES TRUE // Set FALSE for less smooth but more accurate time.
#define CLOCK_CENTER 70
#define CLOCK_RADIUS (CLOCK_CENTER-2)
#define SECOND_HAND_LEN CLOCK_RADIUS
#define MINUTE_HAND_LEN 8 * CLOCK_RADIUS / 10
#define HOUR_HAND_LEN CLOCK_RADIUS / 2
#define CLOCK_BASE_COLOR BLACK
#define SECOND_HAND_COLOR DKGRAY
#define MINUTE_HAND_COLOR DKGRAY
#define HOUR_HAND_COLOR BLACK
// set this either 24 or 12
#define HOUR_MAX 12
#define ç 2*ã
//EST NY -> India: 9.5
//EST NY -> China: 12
CDate clock_time_offset = 0 * 60 * 60 * CDATE_FREQ;
CDateStruct *ds = CAlloc(sizeof(CDateStruct));
CDate d = Now + clock_time_offset;
Date2Struct(ds, d);
I64 init_jiff = counts.jiffies;
I64 cur_jiff;
F64 sec, min, hr;
U0 ClockDrawIt(CTask *, CDC *dc)
{
if (USE_JIFFIES)
{
cur_jiff = counts.jiffies - init_jiff;
sec = ds->sec + cur_jiff/1000.0;
min = ds->min + cur_jiff/1000.0/60;
hr = (ds->hour % HOUR_MAX) + cur_jiff/1000.0/60/60;
}
else
{
d = Now + clock_time_offset;
Date2Struct(ds, d);
sec = ds->sec;
min = ds->min;
hr = ds->hour % HOUR_MAX;
}
/*
public Bool GrLine3(CDC *dc=gr.dc,I64 x1,I64 y1,I64 z1,
I64 x2,
I64 y2,
I64 z2, I64 step=1,I64 start=0)
*/
//draw second hand
dc->thick = 1;
dc->color = SECOND_HAND_COLOR;
GrLine3(dc, CLOCK_CENTER, CLOCK_CENTER, GR_Z_ALL,
(CLOCK_CENTER + SECOND_HAND_LEN * Cos(3*ç/4 + sec * ç/60)),
(CLOCK_CENTER + SECOND_HAND_LEN * Sin(3*ç/4 + sec * ç/60)),
GR_Z_ALL);
// draw minute hand
dc->thick = 2;
dc->color = MINUTE_HAND_COLOR;
GrLine3(dc, CLOCK_CENTER, CLOCK_CENTER, GR_Z_ALL,
(CLOCK_CENTER + MINUTE_HAND_LEN * Cos(3*ç/4 + min * ç/60)),
(CLOCK_CENTER + MINUTE_HAND_LEN * Sin(3*ç/4 + min * ç/60)),
GR_Z_ALL);
// draw hour hand
dc->thick = 3;
dc->color = HOUR_HAND_COLOR;
GrLine3(dc, CLOCK_CENTER, CLOCK_CENTER, GR_Z_ALL,
(CLOCK_CENTER + HOUR_HAND_LEN * Cos(3*ç/4 + hr * ç/HOUR_MAX)),
(CLOCK_CENTER + HOUR_HAND_LEN * Sin(3*ç/4 + hr * ç/HOUR_MAX)),
GR_Z_ALL);
dc->color = CLOCK_BASE_COLOR;
//GrPrint(dc, 0, 0, "%d", ds->sec);
//draw clock base
GrCircle(dc, CLOCK_CENTER, CLOCK_CENTER, CLOCK_RADIUS);
}
U0 ClockDemo()
{
SettingsPush;
DocClear;
DocCursor;
Fs->draw_it = &ClockDrawIt;
StrCopy(Fs->task_title, "Time");
while (CharGet(,FALSE) != CH_SHIFT_ESC) {};
SettingsPop;
};
ClockDemo;

BIN
src/Demo/Graphics/GrDir.CC Executable file

Binary file not shown.

View file

@ -202,7 +202,7 @@ public CDoc *Doc2Html(CDoc *doc_in, U8 *html_header=NULL, U8 *body_header=NULL,
"<head>\n"
"<meta http-equiv=\"Content-Type\" "
"content=\"text/html;charset=US-ASCII\">\n"
"<meta name=\"generator\" content=\"$TX,"ZenithOS V1.13",D="DD_OS_NAME_VERSION"$\">\n";
"<meta name=\"generator\" content=\"$TX,"ZenithOS V2.01",D="DD_OS_NAME_VERSION"$\">\n";
if (!body_header)
body_header =
"<body>\n"
@ -399,7 +399,7 @@ public U0 ToHtml(U8 *_in_name, U8 *_out_name=NULL, U8 *html_header=NULL,
SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$
WinHorz(0, width - 1); //Sets doc width for word wrap.
in_name=ExtDefault(_in_name, "HC");
in_name=ExtDefault(_in_name, "CC");
if (_out_name)
out_name = ExtDefault(_out_name, "html");
else

View file

@ -26,13 +26,13 @@ BootHDIns;
"\n\nSuccessful? ";
if (YorN)
{
// Once( "CursorRemove(\"/*\");;;"
// "#include \"DoDistro\";;"
// "if (DriveIsWritable)"
// "{"
// "Del(\"~/Registry.CC\");"
// "OutU16(0x4004, 0x3400);"
// "}");
Once( "CursorRemove(\"/*\");;;"
"#include \"DoDistro\";;"
"if (DriveIsWritable)"
"{"
"Del(\"~/Registry.CC\");"
"OutU16(0x4004, 0x3400);"
"}");
// Once(
// "#include \"DoDistro\";;");

307
src/Home/Net/JSON/JSON.CC Executable file
View file

@ -0,0 +1,307 @@
#define JSONT_INVALID 0
#define JSONT_STRING 1
#define JSONT_INTEGER 2
#define JSONT_FLOAT 3
#define JSONT_ARRAY 4
#define JSONT_BOOL 5
#define JSONT_OBJ 6
#define JSONT_NULL 7
#define JSON_HASHTABLE_SIZE 1024
#define HTT_JSON 0x00100 //identical to HTT_DICT_WORD
class CJSONDataEntry:CQueue
{
U8 type;
I64 int_data;
F64 float_data;
U8 *string_data;
Bool bool_data;
CJSONDataEntry *list_data;
CHashTable *hash_table;
};
class CJSONDataHash:CHash
{
CJSONDataEntry *data;
};
U8 **JSONGetKeys(CHashTable *table)
{
I64 i, count = 0;
CHash *temp_hash;
U8 **keys;
I64 key_index = 0;
for (i = 0; i <= table->mask; i++) //mask is table length 0-based
if (temp_hash = table->body[i]) //if temp_hash exists
count++;
keys = CAlloc(sizeof(U8*) * count); // alloc string list
for (i = 0; i <= table->mask; i++)
if (temp_hash = table->body[i])
{
keys[key_index] = StrNew(temp_hash->str);//add key string to list
key_index++;
}
return keys;
}
U0 JSONIndentLine(I64 indent)
{
I64 i;
// for (i = 0; i < indent; i++) {" ";}
for (i = 0; i < indent; i++) {" ";}
}
U0 JSONDataRep(CJSONDataEntry *data, I64 indent=0)
{
U8 **keys;// = JSONGetKeys(data->hash_table);
I64 index;
I64 count;// = MSize(keys) / sizeof(U8*);
CJSONDataEntry *entry;// = data->list_data->next;//one after head.
CJSONDataHash *temp_hash;
JSONIndentLine(indent);
switch (data->type)
{
case JSONT_INVALID:
"Invalid JSON.\n";
break;
case JSONT_STRING:
"%s\n", data->string_data;
break;
case JSONT_INTEGER:
"%d\n", data->int_data;
break;
case JSONT_FLOAT:
"%.9f\n", data->float_data;
break;
case JSONT_BOOL:
"%Z\n", data->bool_data, "ST_FALSE_TRUE";
break;
case JSONT_NULL:
"Null.\n";
break;
case JSONT_ARRAY:
"Array:\n";
JSONIndentLine(indent);
"[\n";
entry = data->list_data->next;//one after head.
while (entry != data->list_data)//head ignored, stop on head.
{
JSONDataRep(entry, indent + 1); // recursive Rep on the list entry
entry = entry->next;
}
JSONIndentLine(indent);
"]\n";
break;
case JSONT_OBJ:
"Object.\n";
JSONIndentLine(indent);
"{\n";
keys = JSONGetKeys(data->hash_table);
count = MSize(keys) / sizeof(U8*);
for (index = 0; index < count; index++)
{
JSONIndentLine(indent);
"Key: %s\n", keys[index];
temp_hash = HashFind(keys[index], data->hash_table, HTT_JSON);
JSONDataRep(temp_hash->data, indent + 1);
}
JSONIndentLine(indent);
"}\n";
break;
}
}
CJSONDataEntry *JSONParse(CCompCtrl *cc)
{
CJSONDataEntry *result = CAlloc(sizeof(CJSONDataEntry));
I64 tk, last_tk;
Bool is_done = FALSE;
CJSONDataEntry *temp_entry;// = JSONParse(cc);
CJSONDataHash *temp_hash = CAlloc(sizeof(CJSONDataHash));
while (tk = Lex(cc))
{
// ClassRep(cc);
switch (tk)
{
case '}':
LexExcept(cc, "Expected Value, got '}'.");
case TK_STR:
result->type = JSONT_STRING;
result->string_data = StrNew(cc->cur_str);
is_done = TRUE;
break;
case TK_I64: //todo, LexExcept on 0x or 0b vals.
result->type = JSONT_INTEGER;
result->int_data = cc->cur_i64;
// LexPush(cc);
// "got hex val, token string is %s\n",cc->cur_str;
// ClassRep(cc);
// Break;
is_done = TRUE;
break;
case TK_F64:
result->type = JSONT_FLOAT;
result->float_data = cc->cur_f64;
is_done = TRUE;
break;
case TK_IDENT:
if (!StrCompare(cc->cur_str, "true") ||
!StrCompare(cc->cur_str, "false"))
{
result->type = JSONT_BOOL;
if (!StrCompare(cc->cur_str, "true"))
result->bool_data = TRUE;
if (!StrCompare(cc->cur_str, "false"))
result->bool_data = FALSE;
is_done = TRUE;
}
if (!StrCompare(cc->cur_str, "null"))
{
result->type = JSONT_NULL;
is_done = TRUE;
}
is_done = TRUE;
break;
case '[':
result->type = JSONT_ARRAY;
result->list_data = CAlloc(sizeof(CJSONDataEntry));
QueueInit(result->list_data);
lex_listitem:
/*
CCompCtrl* temp_cc = NULL;
MemCopy(temp_cc, cc, CompCtrlSize(cc));
tk = Lex(temp_cc);
// CompCtrlDel(temp_cc);
*/
last_tk = tk;
LexPush(cc);
tk = Lex(cc);
if (last_tk == ',' && tk == ']')
LexExcept(cc, "Expected List value, got ']'");
if (tk == ']')
goto lex_listdone;
if (tk == ',')
LexExcept(cc, "Expected List Value, got comma.");
LexPopRestore(cc);
temp_entry = JSONParse(cc);
QueueInsert(temp_entry, result->list_data->last);
tk = Lex(cc);
if (tk == ',')
goto lex_listitem;
lex_listdone:
// LexPopNoRestore(cc);
is_done = TRUE;
break;
case '{':
result->type = JSONT_OBJ;
result->hash_table = HashTableNew(JSON_HASHTABLE_SIZE);
lex_objkey:
//lex next. expect TK_STR. Make a temp_hash.
last_tk = tk;
tk = Lex(cc);
if (last_tk == ',' && tk == '}')
LexExcept(cc, "Expected Key after comma.");
if (tk == '}')
goto lex_objdone;
if (tk != TK_STR)
LexExcept(cc, "Expected Key String.");
temp_hash = CAlloc(sizeof(CJSONDataHash));
//set hash type and StrNew with cc->cur_str into hash str.
temp_hash->type = HTT_JSON;
temp_hash->str = StrNew(cc->cur_str);
//lex next. expect ':'.
tk = Lex(cc);
if (tk != ':')
LexExcept(cc, "Expected ':' after Key String.");
//now expect JSONDataEntry-able value next.
//Recursive JSONParse into hash data member.
temp_hash->data = JSONParse(cc);
//JSONParse leaves off on the last token. e.g. int, tk will
//still be TK_I64.
//add hash to result hash_table.
HashAdd(temp_hash, result->hash_table);
// "Debugging.\nHash added with str:%s.\n",temp_hash->str;
// ClassRep(temp_hash->data);
//lex next. expect ',' or '}'.
tk = Lex(cc);
if (tk != ',' && tk != '}')
LexExcept(cc, "Expected ',' or '}' after Object Value.");
//if ',' ... Terry's parsing code would imply labels and gotos.
//i wonder if there's a better, less BASIC way.
if (tk == ',')
goto lex_objkey;
lex_objdone:
is_done = TRUE;
break;
}
if (is_done)
break;
}
return result;
}
U0 Test(U8 *filename)
{
CCompCtrl *cc = CompCtrlNew(MStrPrint("#include \"%s\"", filename));
CJSONDataEntry *result = JSONParse(cc);
JSONDataRep(result);
}
Cd(__DIR__);
Test("JSON1.TXT");

23
src/Home/Net/JSON/JSON0.TXT Executable file
View file

@ -0,0 +1,23 @@
{
"key1":"value1",
"key2":"value2",
"key3":"value3",
"hex":0x333,
"floats":444.4,
"twos":222222,
"listkey":
[
123,
456,
789,
99.99,
"stringval",
{
"objlist":[1,2,3,4,5,6,7],
"objobj": {"objobjlist":[23.22,534.44,true]}
}
],
"boolkey1":true,
"twentythree":23,
"boolkey2":false
}

28
src/Home/Net/JSON/JSON1.TXT Executable file
View file

@ -0,0 +1,28 @@
{
"key1": "value1",
"key2": "value2",
"key3": "value3",
"hex": 0x333,
"floats": 444.4,
"twos": 222222,
"listkey":
[
123,
456,
789,
99.99,
"stringval",
{
"objlist":
[1, 2, 3, 4, 5, 6, 7],
"objobj":
{
"objobjlist":
[23.22, 534.44, true]
}
}
],
"boolkey1": true,
"twentythree": 23,
"boolkey2": false
}

22
src/Home/Net/JSON/JSON2.TXT Executable file
View file

@ -0,0 +1,22 @@
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}

27
src/Home/Net/JSON/JSON3.TXT Executable file
View file

@ -0,0 +1,27 @@
{"widget": {
"debug": "on",
"window": {
"title": "Sample Konfabulator Widget",
"name": "main_window",
"width": 500,
"height": 500
},
"image": {
"src": "Images/Sun.png",
"name": "sun1",
"hOffset": 250,
"vOffset": 250,
"alignment": "center"
},
"text": {
"data": "Click Here",
"size": 36,
"style": "bold",
"name": "text1",
"hOffset": 250,
"vOffset": 100,
"alignment": "center",
"onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
}
}}

89
src/Home/Net/JSON/JSON4.TXT Executable file
View file

@ -0,0 +1,89 @@
{"web-app": {
"servlet": [
{
"servlet-name": "cofaxCDS",
"servlet-class": "org.cofax.cds.CDSServlet",
"init-param": {
"configGlossary:installationAt": "Philadelphia, PA",
"configGlossary:adminEmail": "ksm@pobox.com",
"configGlossary:poweredBy": "Cofax",
"configGlossary:poweredByIcon": "/images/cofax.gif",
"configGlossary:staticPath": "/content/static",
"templateProcessorClass": "org.cofax.WysiwygTemplate",
"templateLoaderClass": "org.cofax.FilesTemplateLoader",
"templatePath": "templates",
"templateOverridePath": "",
"defaultListTemplate": "listTemplate.htm",
"defaultFileTemplate": "articleTemplate.htm",
"useJSP": false,
"jspListTemplate": "listTemplate.jsp",
"jspFileTemplate": "articleTemplate.jsp",
"cachePackageTagsTrack": 200,
"cachePackageTagsStore": 200,
"cachePackageTagsRefresh": 60,
"cacheTemplatesTrack": 100,
"cacheTemplatesStore": 50,
"cacheTemplatesRefresh": 15,
"cachePagesTrack": 200,
"cachePagesStore": 100,
"cachePagesRefresh": 10,
"cachePagesDirtyRead": 10,
"searchEngineListTemplate": "forSearchEnginesList.htm",
"searchEngineFileTemplate": "forSearchEngines.htm",
"searchEngineRobotsDb": "WEB-INF/robots.db",
"useDataStore": true,
"dataStoreClass": "org.cofax.SqlDataStore",
"redirectionClass": "org.cofax.SqlRedirection",
"dataStoreName": "cofax",
"dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver",
"dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon",
"dataStoreUser": "sa",
"dataStorePassword": "dataStoreTestQuery",
"dataStoreTestQuery": "SET NOCOUNT ON;select test='test';",
"dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log",
"dataStoreInitConns": 10,
"dataStoreMaxConns": 100,
"dataStoreConnUsageLimit": 100,
"dataStoreLogLevel": "debug",
"maxUrlLength": 500}},
{
"servlet-name": "cofaxEmail",
"servlet-class": "org.cofax.cds.EmailServlet",
"init-param": {
"mailHost": "mail1",
"mailHostOverride": "mail2"}},
{
"servlet-name": "cofaxAdmin",
"servlet-class": "org.cofax.cds.AdminServlet"},
{
"servlet-name": "fileServlet",
"servlet-class": "org.cofax.cds.FileServlet"},
{
"servlet-name": "cofaxTools",
"servlet-class": "org.cofax.cms.CofaxToolsServlet",
"init-param": {
"templatePath": "toolstemplates/",
"log": 1,
"logLocation": "/usr/local/tomcat/logs/CofaxTools.log",
"logMaxSize": "",
"dataLog": 1,
"dataLogLocation": "/usr/local/tomcat/logs/dataLog.log",
"dataLogMaxSize": "",
"removePageCache": "/content/admin/remove?cache=pages&id=",
"removeTemplateCache": "/content/admin/remove?cache=templates&id=",
"fileTransferFolder": "/usr/local/tomcat/webapps/content/fileTransferFolder",
"lookInContext": 1,
"adminGroupID": 4,
"betaServer": true}}],
"servlet-mapping": {
"cofaxCDS": "/",
"cofaxEmail": "/cofaxutil/aemail/*",
"cofaxAdmin": "/admin/*",
"fileServlet": "/static/*",
"cofaxTools": "/tools/*"},
"taglib": {
"taglib-uri": "cofax.tld",
"taglib-location": "/WEB-INF/tlds/cofax.tld"}}}

View file

@ -3,7 +3,7 @@
#include "C:/Home/Net/NetLog"
#include "C:/Home/Net/NetQueue"
#include "C:/Home/Net/PCNet"
#include "C:/Home/Net/Drivers/PCNet"
#include "C:/Home/Net/Ethernet"
#include "C:/Home/Net/ARP"
@ -39,7 +39,7 @@ if (Fs != zenith_task)
"\nNow run one of the $MA,"Tests",LM="Cd(\"C:/Home/Net/Tests\");Dir;\n"$ or $MA,"Programs",LM="Cd(\"C:/Home/Net/Programs\");Dir;\n"$.\n";
"\nIf a test crashes to Debug, try typing $BLACK$G2;$FG$\n\n";
"\nIf a test crashes to Debug, try typing $FG,0$G2;$FG$\n\n";
}
else
{

View file

@ -327,7 +327,7 @@ returns default.
("/Kernel/KHashA.CC",NULL,NULL) returns "D:/Kernel"
("/Kernel",NULL,"PRJ") returns "D:/Kernel/Kernel.PRJ"
("/Kernel/BlkDev",NULL,"PRJ") returns "D:/Kernel/Kernel.PRJ"
("/Apps/Psalmody","Load","HC") returns "D:/Apps/Psalmody/Load.CC"
("/Apps/Psalmody","Load","CC") returns "D:/Apps/Psalmody/Load.CC"
*/
U8 *st = DirNameAbs(dirname), *st2, *st3, *res, *default = NULL, *ext;

View file

@ -22,7 +22,7 @@ U0 EdLiteUpdate(CLine *head, CLine *cur_line, I64 cur_col, I64 line_start_col)
k = 0;
for (j = 0; j < cur_col; j++)
if (tmpl->line[j] == '\t')
k = (k + 4) & ~3;
k = (k + 8) & ~7;
else
k++;
cursor_col = k;
@ -36,7 +36,7 @@ U0 EdLiteUpdate(CLine *head, CLine *cur_line, I64 cur_col, I64 line_start_col)
while (ch = *st++)
{
if (ch == '\t')
k2 = (k + 4) & ~3;
k2 = (k + 8) & ~7;
else
k2 = k + 1;
if (line_start_col <= k < line_start_col + text.cols)

0
src/Misc/Bible.TXT Normal file → Executable file
View file

View file

@ -305,7 +305,7 @@ public F64 PopUpRangeF64Log(F64 lo, F64 hi, I64 steps, U8 *format="%9.4f", U8 *h
public I64 ZenithFile(U8 *filename, Bool warn_ext=TRUE)
{//Make zenith_task execute file.
Bool okay = TRUE;
U8 *name = FileNameAbs(filename), *name2 = ExtDefault(name, "HC");
U8 *name = FileNameAbs(filename), *name2 = ExtDefault(name, "CC");
I64 res = 0;
if (warn_ext && !FilesFindMatch(name2, FILEMASK_JIT) && !PopUpCancelOk(ST_WARN_ST "Not .CC File\n\n"))
@ -321,7 +321,7 @@ public I64 ZenithFile(U8 *filename, Bool warn_ext=TRUE)
public I64 PopUpFile(U8 *filename, Bool warn_ext=TRUE, CTask *parent=NULL, CTask **_pu_task=NULL)
{//$LK,"ExeFile2",A="MN:ExeFile2"$() in $LK,"PopUp",A="MN:PopUp"$ task. Cont as User.
Bool okay = TRUE;
U8 *st, *name = FileNameAbs(filename), *name2 = ExtDefault(name, "HC");
U8 *st, *name = FileNameAbs(filename), *name2 = ExtDefault(name, "CC");
I64 res = 0;
if (warn_ext && !FilesFindMatch(name2, FILEMASK_JIT) && !PopUpCancelOk(ST_WARN_ST "Not .CC File\n\n"))
@ -340,7 +340,7 @@ public I64 PopUpFile(U8 *filename, Bool warn_ext=TRUE, CTask *parent=NULL, CTask
public I64 PopUpRunFile(U8 *filename, I64 ccf_flags=0, ...)
{//$LK,"ExeFile",A="MN:ExeFile"$() with args using $LK,"LastFun",A="MN:LastFun"$() in $LK,"PopUp",A="MN:PopUp"$ task.
U8 *st, *name = FileNameAbs(filename), *name2 = ExtDefault(name, "HC");
U8 *st, *name = FileNameAbs(filename), *name2 = ExtDefault(name, "CC");
I64 res = 0;
st = MStrPrint("\"$$$$WW+H,1$$$$\";ExeFile2(\"%s\",0x%X);LastFun(0x%X,0x%X);", name2, ccf_flags, argc, argv);

0
src/Zenith/God/GodBible.CC Normal file → Executable file
View file

0
src/Zenith/God/GodExterns.CC Normal file → Executable file
View file

0
src/Zenith/God/HolySpirit.CC Normal file → Executable file
View file

0
src/Zenith/God/MakeGod.CC Normal file → Executable file
View file

0
src/Zenith/God/Vocab.DD Normal file → Executable file
View file

Binary file not shown.

Binary file not shown.