From: Patrick Date: Sat, 14 Oct 2023 00:40:47 +0000 (+0200) Subject: extract InputAction setup, remove printing screen size X-Git-Url: https://gitweb.ps.run/iftint/commitdiff_plain/4b2f1911caaea89383e2d7b91f442a79793ee0d8 extract InputAction setup, remove printing screen size --- diff --git a/main3.c b/main3.c index 2b0be3b..1911016 100644 --- a/main3.c +++ b/main3.c @@ -237,7 +237,7 @@ void NodeDraw(Node *n) { switch (n->kind) { case NK_Namespace: { PRINTF("namespace"); printf(" %s {", n->data); indent++; for (int i = 0; i < n->childCount; i++) { INDENT NodeDraw(NodeGetChild(n, i)); } indent--; INDENT printf("}\n"); break; } case NK_Struct: { PRINTF("struct"); printf(" %s {", n->data); indent++; for (int i = 0; i < n->childCount; i++) { INDENT NodeDraw(NodeGetChild(n, i)); } indent--; INDENT printf("}\n"); break; } - case NK_Func: { PRINTF("fn"); printf(" %s ", n->data); NodeDraw(NodeGetChild(n, 0)); INDENT NodeDraw(NodeGetChild(n, 1)); break; } + case NK_Func: { PRINTF("fn"); printf(" %s ", n->data); NodeDraw(NodeGetChild(n, 0)); NodeDraw(NodeGetChild(n, 1)); break; } case NK_VarList: case NK_ExprList: { PRINTF("("); for (int i = 0; i < n->childCount; i++) { if (i != 0) printf(", "); NodeDraw(NodeGetChild(n, i)); } PRINTF(")"); break; } case NK_Var: { PRINTF("[%s]", n->data); break; } @@ -263,15 +263,15 @@ void NodeDraw(Node *n) { typedef enum Input { IN_None, - IN_SPACE, - IN_D, - IN_A, - IN_H, IN_J, IN_K, IN_L, + IN_SPACE, + IN_D, + IN_A, + IN_F, IN_V, IN_T, @@ -290,15 +290,15 @@ typedef enum Input { const char *IN_STRINGS[IN_COUNT] = { "IN_None", - "IN_SPACE", - "IN_D", - "IN_A", - "IN_H", "IN_J", "IN_K", "IN_L", + "IN_SPACE", + "IN_D", + "IN_A", + "IN_F", "IN_V", "IN_T", @@ -318,14 +318,14 @@ Input InputGet() { while (true) { c = getch(); switch (c) { - case ' ': return IN_SPACE; - case 'd': return IN_D; - case 'h': return IN_H; case 'j': return IN_J; case 'k': return IN_K; case 'l': return IN_L; + case ' ': return IN_SPACE; + case 'd': return IN_D; + case 'f': return IN_F; case 'v': return IN_V; case 't': return IN_T; @@ -344,14 +344,14 @@ Input InputGet() { typedef enum InputAction { IA_None, - IA_StartEditing, - IA_Delete, - IA_MoveLeft, IA_MoveUp, IA_MoveDown, IA_MoveRight, + IA_StartEditing, + IA_Delete, + IA_AddNamespace, IA_AddStruct, IA_AddFunc, @@ -371,14 +371,14 @@ typedef enum InputAction { const char *IA_STRINGS[IA_COUNT] = { "IA_None", - "IA_StartEditing", - "IA_Delete", - "IA_MoveLeft", "IA_MoveUp", "IA_MoveDown", "IA_MoveRight", + "IA_StartEditing", + "IA_Delete", + "IA_AddNamespace", "IA_AddStruct", "IA_AddFunc", @@ -407,7 +407,7 @@ void DrawInfo(InputAction actions[NK_COUNT][IN_COUNT], NodeKind nk, InputMode mo vt100CursorPos(line++, h-30); printf("%s:%s", NK_STRINGS[nk], (mode == IM_Normal ? "" : " (editing)")); - for (int i = 0; i < IN_COUNT; i++) { + for (int i = IN_L+1; i < IN_COUNT; i++) { InputAction action = actions[nk][i]; if (action != IA_None) { vt100CursorPos(line++, h-30); @@ -461,14 +461,14 @@ Node *GetNode(InputAction actions[NK_COUNT][IN_COUNT]) { #define S(NAME, PARENT, KIND) Node *NAME = NEW(Node); NAME->kind = KIND; NAME->data = NEWSTR; NodeAppend(PARENT, NAME); switch (action) { - case IA_StartEditing: { mode = IM_Editing; break; } - case IA_Delete: { n = NodeRemove(n->parent, n); break; } - case IA_MoveLeft: { if (n->prev != NULL) n = n->prev; break; } case IA_MoveDown: { if (n->child != NULL) n = n->child; break; } case IA_MoveUp: { if (n->parent != NULL) n = n->parent; break; } case IA_MoveRight: { if (n->next != NULL) n = n->next; break; } + case IA_StartEditing: { mode = IM_Editing; break; } + case IA_Delete: { n = NodeRemove(n->parent, n); break; } + case IA_AddNamespace: { S(n1, n, NK_Namespace) n = n1; mode = IM_Editing; break; } case IA_AddStruct: { S(n1, n, NK_Struct) n = n1; mode = IM_Editing; break; } case IA_AddFunc: { S(n1, n, NK_Func) N(n2, n1, NK_VarList) N(n3, n1, NK_Body) n = n1; mode = IM_Editing; break; } @@ -492,10 +492,7 @@ Node *GetNode(InputAction actions[NK_COUNT][IN_COUNT]) { } -int main() { - // Setup - static InputAction actions[NK_COUNT][IN_COUNT]; - +void SetupInputActions(InputAction actions[NK_COUNT][IN_COUNT]) { for (int i = 0; i < NK_COUNT; i++) { actions[i][IN_H] = IA_MoveLeft; actions[i][IN_J] = IA_MoveUp; @@ -571,6 +568,12 @@ int main() { actions[NK_Op][IN_S] = IA_AddStr; actions[NK_Op][IN_C] = IA_AddCall; actions[NK_Op][IN_O] = IA_AddOp; +} + +int main() { + // Setup + static InputAction actions[NK_COUNT][IN_COUNT]; + SetupInputActions(actions); // Main vt100EnableAlternateBuffer(); @@ -581,10 +584,6 @@ int main() { vt100DisableAlternateBuffer(); vt100ShowCursor(); - int v, h; - vt100GetScreenSize(&v, &h); - printf("Screen Size: %d | %d\n", v, h); - NodeDraw(n); return 0;