Add exec command

This commit is contained in:
2025-09-07 23:24:21 -05:00
parent 3f37b7cdb5
commit e32d1f0900
16 changed files with 249 additions and 18 deletions

View File

@@ -15,9 +15,12 @@ assetdef_t ASSET_DEFINITIONS[ASSET_TYPE_COUNT] = {
[ASSET_TYPE_PALETTE_IMAGE] = {
"DPI", assetPaletteImageLoad, assetPaletteImageDispose
},
[ASSET_TYPE_ALPHA_IMAGE] = {
[ASSET_TYPE_ALPHA_IMAGE] = {
"DAI", assetAlphaImageLoad, assetAlphaImageDispose
},
[ASSET_TYPE_CONFIG] = {
"DCF", assetConfigLoad, assetConfigDispose
}
};
errorret_t assetInit(asset_t *asset, const char_t *filename) {
@@ -42,8 +45,6 @@ errorret_t assetInit(asset_t *asset, const char_t *filename) {
if(asset->file == NULL) errorThrow("Failed to open asset file: %s", filename);
zip_fclose(asset->file);
asset->file = NULL;
consolePrint("Initialized asset: %s", filename);
errorOk();
}

View File

@@ -12,6 +12,7 @@
#include "asset/type/assetpaletteimage.h"
#include "asset/type/assetalphaimage.h"
#include "asset/type/assetconfig.h"
#define ASSET_HEADER_SIZE 3
#define ASSET_REFERENCE_COUNT_MAX 8
@@ -31,6 +32,7 @@ typedef enum {
ASSET_TYPE_UNKNOWN,
ASSET_TYPE_PALETTE_IMAGE,
ASSET_TYPE_ALPHA_IMAGE,
ASSET_TYPE_CONFIG,
ASSET_TYPE_COUNT
} assettype_t;
@@ -46,6 +48,7 @@ typedef struct asset_s {
union {
assetpaletteimage_t paletteImage;
assetalphaimager_t alphaImage;
assetconfig_t config;
};
} asset_t;

View File

@@ -33,7 +33,6 @@ errorret_t assetManagerInit(void) {
// Try open
ASSET_MANAGER.zip = zip_open(searchPath, ZIP_RDONLY, NULL);
if(ASSET_MANAGER.zip == NULL) continue;
consolePrint("Opened asset file: %s", searchPath);
break;
}
@@ -51,7 +50,6 @@ void assetManagerUpdate(void) {
// Check if the asset is loaded
if(asset->file != NULL) {
asset->state = ASSET_STATE_LOADED;
consolePrint("Asset loaded: %s", asset->filename);
}
}
++asset;

View File

@@ -7,5 +7,6 @@
target_sources(${DUSK_TARGET_NAME}
PRIVATE
assetalphaimage.c
assetconfig.c
assetpaletteimage.c
)

View File

@@ -0,0 +1,61 @@
/**
* Copyright (c) 2025 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#include "asset/asset.h"
#include "console/console.h"
#include "assert/assert.h"
errorret_t assetConfigLoad(asset_t *asset) {
char_t buffer[CONSOLE_LINE_MAX + 1];
// Read byte by byte.
zip_int64_t bytesRead = 0;
zip_int64_t totalBytesRead = 0;
char_t c;
while(1) {
bytesRead = zip_fread(
asset->file,
&c,
1
);
if(bytesRead < 0) errorThrow("Failed to read from config asset file");
// Is byte execute?
if(c != ';' && c != '\n' && c != '\r' && bytesRead == 1) {
// Not execute, add to buffer.
buffer[totalBytesRead] = c;
if(++totalBytesRead >= CONSOLE_LINE_MAX) {
errorThrow("Config line too long!");
}
continue;
}
// Execute buffer.
buffer[totalBytesRead] = '\0';
consoleExec(buffer);
totalBytesRead = 0;
if(bytesRead == 0) break;
}
if(totalBytesRead > 0) {
// Execute remaining buffer.
buffer[totalBytesRead] = '\0';
consoleExec(buffer);
}
errorOk();
}
errorret_t assetConfigExecute(asset_t *asset) {
errorOk();
}
errorret_t assetConfigDispose(asset_t *asset) {
errorOk();
}

View File

@@ -0,0 +1,42 @@
/**
* Copyright (c) 2025 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#pragma once
#include "error/error.h"
typedef struct asset_s asset_t;
typedef struct {
zip_int64_t pos;
zip_int64_t size;
} assetconfig_t;
/**
* Loads a config asset from the given asset structure. The asset must be of
* type ASSET_TYPE_CONFIG and must be loaded.
*
* @param asset The asset to load the config from.
* @return An error code.
*/
errorret_t assetConfigLoad(asset_t *asset);
/**
* Executes the config commands in the given asset. The asset must be of type
* ASSET_TYPE_CONFIG and must be loaded.
*
* @param asset The asset to execute the config from.
* @return An error code.
*/
errorret_t assetConfigExecute(asset_t *asset);
/**
* Disposes of a config asset, freeing any allocated resources.
*
* @param asset The asset to dispose of.
* @return An error code.
*/
errorret_t assetConfigDispose(asset_t *asset);