summaryrefslogtreecommitdiff
path: root/src/sim86
diff options
context:
space:
mode:
Diffstat (limited to 'src/sim86')
-rw-r--r--src/sim86/generated/generated.cpp3
-rw-r--r--src/sim86/sim86.cpp2
-rw-r--r--src/sim86/sim86.mdesk2
-rw-r--r--src/sim86/sim86_meta.c44
4 files changed, 40 insertions, 11 deletions
diff --git a/src/sim86/generated/generated.cpp b/src/sim86/generated/generated.cpp
index 0f457a1..77a657f 100644
--- a/src/sim86/generated/generated.cpp
+++ b/src/sim86/generated/generated.cpp
@@ -11,7 +11,7 @@ enum flags_8086
Flag_Trap = (1 << 8),
};
-int flags_8086_strings_count = 9;
+int flags_8086_stringsCount = 9;
char *flags_8086_strings[] =
{
"C",
@@ -27,5 +27,4 @@ char *flags_8086_strings[] =
enum sim86_enum
{
-Sim86_Count
};
diff --git a/src/sim86/sim86.cpp b/src/sim86/sim86.cpp
index 7c444bd..6eee81d 100644
--- a/src/sim86/sim86.cpp
+++ b/src/sim86/sim86.cpp
@@ -28,7 +28,7 @@ FlagsToString(char *Buffer, u32 Flags)
u32 Length = 0;
for(s32 MappingIndex = 0;
- MappingIndex < flags_8086_strings_count;
+ MappingIndex < flags_8086_stringsCount;
MappingIndex++)
{
u8 Char = flags_8086_strings[MappingIndex][0];
diff --git a/src/sim86/sim86.mdesk b/src/sim86/sim86.mdesk
index 0635110..6370221 100644
--- a/src/sim86/sim86.mdesk
+++ b/src/sim86/sim86.mdesk
@@ -11,7 +11,7 @@
{ Trap, "T", }
}
-@table_gen_enum_flags(sim86_flags_mapping, name) flags_8086
+@table_gen_flags(sim86_flags_mapping, name) flags_8086
@table_gen_data(sim86_flags_mapping, `char *`, str) flags_8086_strings
// TODO:
diff --git a/src/sim86/sim86_meta.c b/src/sim86/sim86_meta.c
index 37fe0c3..1201afc 100644
--- a/src/sim86/sim86_meta.c
+++ b/src/sim86/sim86_meta.c
@@ -59,8 +59,8 @@ int main(int ArgsCount, char *Args[])
for(MD_EachNode(Node, Root))
{
- // 1. If we find a table_gen_enum_flags tag
- if(MD_NodeHasTag(Node, MD_S8Lit("table_gen_enum_flags"), 0))
+ // 1. If we find a table_gen_flags tag
+ if(MD_NodeHasTag(Node, MD_S8Lit("table_gen_flags"), 0))
{
MD_String8 TableName = MD_NodeAtIndex(Node->first_tag->first_child, 0)->string;
MD_String8 MemberName = MD_NodeAtIndex(Node->first_tag->first_child, 1)->string;
@@ -111,7 +111,7 @@ int main(int ArgsCount, char *Args[])
int MemberCount = MD_ChildCountFromNode(Table);
- MD_S8ListPushFmt(Arena, &Stream, "int %S_count = %d;\n", Node->string, MemberCount);
+ MD_S8ListPushFmt(Arena, &Stream, "int %SCount = %d;\n", Node->string, MemberCount);
// Header
MD_S8ListPushFmt(Arena, &Stream, "%S%S[] =\n{\n", Type, Node->string);
@@ -124,13 +124,41 @@ int main(int ArgsCount, char *Args[])
MD_S8ListPush(Arena, &Stream, MD_S8Lit("};\n\n"));
}
-#if 0
- if(MD_NodeHasTag(Node, MD_S8Lit("table"), 0))
+ if(MD_NodeHasTag(Node, MD_S8Lit("table_gen_enum"), 0))
{
- Assert(0);
+ MD_String8 TableName = MD_NodeAtIndex(Node->first_tag->first_child, 0)->string;
+ MD_String8 Prefix = MD_NodeAtIndex(Node->first_tag->first_child, 1)->string;
+ MD_String8 MemberName = MD_NodeAtIndex(Node->first_tag->first_child, 2)->string;
+
+ MD_Node *Table = MD_FirstNodeWithString(Root, TableName, 0);
+
+ MD_Node *TableTag = MD_TagFromString(Table, MD_S8Lit("table"), 0);
+ MD_Node *MemberNode = MD_FirstNodeWithString(TableTag->first_child, MemberName, 0);
+ int MemberIndex = MD_IndexFromNode(MemberNode);
+
+
+ MD_S8ListPushFmt(Arena, &Stream, "enum %S\n{\n", Node->raw_string);
+
+ for(MD_EachNode(Member, Table->first_child))
+ {
+ MD_Node *ValueNode = MD_NodeAtIndex(Member->first_child, MemberIndex);
+ if(Member != Table->first_child)
+ {
+ MD_S8ListPushFmt(Arena, &Stream, " %S%S,\n", Prefix, ValueNode->raw_string);
+ }
+ else
+ {
+ MD_S8ListPushFmt(Arena, &Stream, " %S%S = 0,\n", Prefix, ValueNode->raw_string);
+ }
+
+ }
+ MD_S8ListPushFmt(Arena, &Stream, "};\n");
+
+
}
-#endif
+
+#if 0
if(MD_NodeHasTag(Node, MD_S8Lit("table_gen_enum"), 0))
{
// Header
@@ -168,6 +196,8 @@ int main(int ArgsCount, char *Args[])
MD_S8ListPush(Arena, &Stream, MD_S8Lit("};\n"));
}
+#endif
+
// MD_PrintDebugDumpFromNode(stderr, Node, MD_GenerateFlags_All);
}