From eb325429b8ab5863e74c3f9fc4d310880ecba703 Mon Sep 17 00:00:00 2001 From: Iswenzz Date: Wed, 15 Jun 2022 12:53:11 +0200 Subject: [PATCH] CGSC 1.1.1: Scr_CreateArray --- asm/cgsc_export.asm | 1 + docs/extensions.md | 10 ++++++++++ extensions/variables.c | 12 +++++++++--- extensions/variables.h | 8 ++++++++ 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/asm/cgsc_export.asm b/asm/cgsc_export.asm index 6a5e990..45ad3a1 100644 --- a/asm/cgsc_export.asm +++ b/asm/cgsc_export.asm @@ -34,6 +34,7 @@ pexport Scr_AddFunc pexport Scr_AddVariable pexport Scr_CallFunction pexport Scr_CallMethod +pexport Scr_CreateArray pexport Scr_ExecThreadResult pexport Scr_FreeArray pexport Scr_GetThreadReturn diff --git a/docs/extensions.md b/docs/extensions.md index 5a02b14..9cc5c33 100644 --- a/docs/extensions.md +++ b/docs/extensions.md @@ -1,5 +1,15 @@ # Extensions +#### ``Scr_AllocArray(int length)`` +Create a new GSC array with a fixed size. +The array can be freed with Scr_FreeArray. + +```c +VariableValueArray array = Scr_AllocArray(5); +Scr_FreeArray(&array); +``` +
+ #### ``Scr_FreeArray(VariableValueArray *array)`` Free the value obtained by Scr_GetArray. diff --git a/extensions/variables.c b/extensions/variables.c index 3262ddd..d4ace88 100644 --- a/extensions/variables.c +++ b/extensions/variables.c @@ -1,6 +1,14 @@ #include "variables.h" #include +VariableValueArray Scr_CreateArray(int length) +{ + VariableValueArray array; + array.length = length; + array.items = (VariableValue *)malloc(length * sizeof(VariableValue)); + return array; +} + void Scr_FreeArray(VariableValueArray* array) { free(array->items); @@ -20,9 +28,7 @@ VariableValueArray Scr_GetArray(unsigned int paramnum) int index = length - 1; unsigned int nextSibling; - VariableValueArray array = { 0 }; - array.length = length; - array.items = (VariableValue *)malloc(length * sizeof(VariableValue)); + VariableValueArray array = Scr_CreateArray(length); id = IGScrVarGlob[parentId + VARIABLELIST_PARENT_BEGIN].nextSibling; if (id) { diff --git a/extensions/variables.h b/extensions/variables.h index 997dd69..f6bfafc 100644 --- a/extensions/variables.h +++ b/extensions/variables.h @@ -1,6 +1,14 @@ #pragma once #include "cgsc.h" +/** + * @brief Create a new VariableValueArray with a fixed length. + * The array can be freed with Scr_FreeArray. + * + * @param length - The array length. + */ +Plugin(VariableValueArray, Scr_CreateArray(int length)); + /** * @brief Free the variables of VariableValueArray. *