|
|
@@ -5487,6 +5487,21 @@ value_t *verb_value(interpreter_t *state, verb_t *self, value_t *x) {
|
|
|
return r ? r : state->udf;
|
|
|
}
|
|
|
|
|
|
+value_t *verb_hex(interpreter_t *state, verb_t *self, value_t *x) {
|
|
|
+ if (x->tag == NUMBER) {
|
|
|
+ char buf[64];
|
|
|
+ snprintf(buf, sizeof(buf), "%lx", (long)x->val.number);
|
|
|
+
|
|
|
+ list_t *r = list_new();
|
|
|
+ for (size_t i = 0; i < strlen(buf); i++)
|
|
|
+ list_push(r, value_new_char(buf[i]));
|
|
|
+
|
|
|
+ return value_new_array(r);
|
|
|
+ }
|
|
|
+
|
|
|
+ return state->udf;
|
|
|
+}
|
|
|
+
|
|
|
value_t *verb_lines(interpreter_t *state, verb_t *self, value_t *x) {
|
|
|
char *s = value_str(x);
|
|
|
|
|
|
@@ -5762,6 +5777,7 @@ verb_t VERBS[] = {DEFVERB(":", 0, 0, 0, const, bind),
|
|
|
DEFVERBD("L", 0, 0, 0, lines, tackleft),
|
|
|
DEFVERBD("R", X, 0, 0, setrecdepth, tackright),
|
|
|
DEFVERBD("v", 0, 0, 0, value, udf2),
|
|
|
+ DEFVERBD("h", X, 0, 0, hex, udf2),
|
|
|
DEFVERBD("x", 0, 0, 0, show, rematch),
|
|
|
DEFVERBD("X", 0, 0, 0, udf1, extract)};
|
|
|
|