Files
my-os-project2/user/tb/runtime.c
2025-09-28 20:10:41 +02:00

52 lines
1.1 KiB
C

#include <stddef.h>
#include <stdbool.h>
#include <ulib.h>
#include "runtime.h"
#include "interp.h"
RtCmd *RTCMDS = NULL;
RtAlias *RTALIASES = NULL;
#define RTCMD(name, _fn) \
do { \
RtCmd *_cmd = umalloc(sizeof(*_cmd)); \
_cmd->cmdname = (name); \
_cmd->fn = (_fn); \
LL_APPEND(RTCMDS, _cmd); \
} while(0)
bool rt_print(Token *tks) {
Token *tk, *tktmp;
LL_FOREACH_SAFE(tks, tk, tktmp) {
uprintf("%s", tk->str);
if (tk->next != NULL) {
uprintf(" ");
}
}
uprintf("\n");
return true;
}
bool rt_mkalias(Token *tks) {
RtAlias *alias = umalloc(sizeof(*alias));
string_memset(alias, 0, sizeof(*alias));
size_t i;
Token *tk, *tktmp;
LL_FOREACH_SAFE_IDX(tks, tk, tktmp, i) {
if (i == 0) {
string_memcpy(alias->namebuf, tk->str, MIN(string_len(tk->str), RTALIAS_NAMEBUF_MAX));
} else if (i == 1) {
string_memcpy(alias->valbuf, tk->str, MIN(string_len(tk->str), RTALIAS_VALBUF_MAX));
}
}
LL_APPEND(RTALIASES, alias);
return true;
}
void rt_init(void) {
RTCMD("%print", &rt_print);
RTCMD("%mkalias", &rt_mkalias);
}