diff --git a/base/scripts/init.tb b/base/scripts/init.tb index 9320f52..8554f13 100644 --- a/base/scripts/init.tb +++ b/base/scripts/init.tb @@ -1,3 +1,3 @@ -%print 'this is an init script!' +print 'this is an init script!' base:/bin/pctl ls base:/bin/tb -m interactive -preload base:/scripts/rc.tb diff --git a/base/scripts/rc.tb b/base/scripts/rc.tb index 758b976..ee9dc56 100644 --- a/base/scripts/rc.tb +++ b/base/scripts/rc.tb @@ -1,2 +1,2 @@ -%mkalias pctl base:/bin/pctl -%mkalias tb base:/bin/tb +mkalias pctl base:/bin/pctl +mkalias tb base:/bin/tb diff --git a/user/tb/interp.c b/user/tb/interp.c index d7d7423..1e6d5b7 100644 --- a/user/tb/interp.c +++ b/user/tb/interp.c @@ -99,20 +99,23 @@ void tz_tokenize(Tokenizer *tz) { } void tz_classify(Tokenizer *tz) { + #define IF_RTCMD(name) if (string_strcmp(tk->str, #name) == 0) { \ + tk->type = TOK_CMD; \ + tk->cmd = &rt_ ## name; \ + } + Token *tk, *tktmp; LL_FOREACH_SAFE(tz->tokens, tk, tktmp) { if (tk->str[0] == '\'') { tk->type = TOK_STRING; - } else if (tk->str[0] == '%') { - RtCmd *cmd, *cmdtmp; - LL_FOREACH_SAFE(RTCMDS, cmd, cmdtmp) { - if (string_strcmp(tk->str, cmd->cmdname) == 0) { - tk->type = TOK_CMD; - tk->cmd = cmd; - break; - } - } - } else { + } + else IF_RTCMD(print) + else IF_RTCMD(mkalias) + else IF_RTCMD(PID) + else IF_RTCMD(do) + else IF_RTCMD(stackpush) + else IF_RTCMD(stackpop) + else { tk->type = TOK_MISC; } } @@ -184,7 +187,7 @@ bool interp_runstring(char *string, InterpResult **res, bool logcmds, bool inter Token *cmdtk = tz.tokens; if (cmdtk->type == TOK_CMD) { - ok = cmdtk->cmd->fn(cmdtk->next); + ok = cmdtk->cmd(cmdtk->next); if (!ok) { usprintf(RES.errmsg, "cmd %s failed", cmdtk->str); goto next; diff --git a/user/tb/interp.h b/user/tb/interp.h index af719f9..2d4cbdb 100644 --- a/user/tb/interp.h +++ b/user/tb/interp.h @@ -21,7 +21,7 @@ typedef struct Token { TOK_MISC, } type; - struct RtCmd *cmd; + bool (*cmd)(struct Token *); } Token; typedef struct { diff --git a/user/tb/runtime.h b/user/tb/runtime.h index fb7140f..617ae25 100644 --- a/user/tb/runtime.h +++ b/user/tb/runtime.h @@ -30,6 +30,13 @@ void rt_init(void); extern RtCmd *RTCMDS; extern RtAlias *RTALIASES; +bool rt_print(struct Token *); +bool rt_mkalias(struct Token *); +bool rt_PID(struct Token *); +bool rt_do(struct Token *); +bool rt_stackpush(struct Token *); +bool rt_stackpop(struct Token *); + void rtstringv_stackpushcopy(char *s, size_t len); char *rtstringv_stackpop(void); char *rtstringv_stackpeek(void);