60 lines
1.2 KiB
C
60 lines
1.2 KiB
C
#include <stddef.h>
|
|
#include <stdbool.h>
|
|
#include <ulib.h>
|
|
#include "runtime.h"
|
|
#include "interp.h"
|
|
|
|
extern PID_t PID;
|
|
|
|
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;
|
|
}
|
|
|
|
bool rt_PID(Token *tks) {
|
|
uprintf("%lu\n", PID);
|
|
return true;
|
|
}
|
|
|
|
void rt_init(void) {
|
|
RTCMD("%print", &rt_print);
|
|
RTCMD("%mkalias", &rt_mkalias);
|
|
RTCMD("%PID", &rt_PID);
|
|
}
|