commit 13357276ee223086c62609c65b33112ff986c4d2
parent e448ae491292f244b8cdab8aa646218408b92b13
Author: phoebos <ben@bvnf.space>
Date: Mon, 31 Jan 2022 01:13:58 +0000
support some obases
Diffstat:
M | baddc.c | | | 27 | +++++++++++++++++++++------ |
1 file changed, 21 insertions(+), 6 deletions(-)
diff --git a/baddc.c b/baddc.c
@@ -12,6 +12,25 @@ int *stackp = stack - 1;
int ibase = 10;
int obase = 10;
+void oprint(int a) {
+ char fmt[4] = {'%', 0, '\n', '\0'};
+ switch (obase) {
+ case 16:
+ fmt[1] = 'X';
+ break;
+ case 10:
+ fmt[1] = 'd';
+ break;
+ case 8:
+ fmt[1] = 'o';
+ break;
+ default:
+ fprintf(stderr, "output base %d not supported!\n", obase);
+ return;
+ }
+ printf(fmt, a);
+}
+
void push(int a) {
stackp++;
if (stackp - stack >= STACK_LEN) {
@@ -40,7 +59,7 @@ int peek(void) {
void view_stack(void) {
for (int *p = stackp; p - stack >= 0; p--)
- printf("%d\n", *p);
+ oprint(*p);
}
void dup(void) {
@@ -146,18 +165,14 @@ int main(int argc, char **argv) {
}
curnum = 0;
if (isspace(buf[i])) {
- //fprintf(stderr, "space ");
continue;
} if (isdigit(buf[i])) {
- //fprintf(stderr, "push('%d') ", buf[i]);
push(buf[i] - '0');
} else if (buf[i] == 'p') {
- //fprintf(stderr, "peek ");
- printf("%d\n", peek());
+ oprint(peek());
} else {
for (size_t j = 0; j < NUM_OPS; j++) {
if (buf[i] == ops[j].op) {
- //fprintf(stderr, "execute '%c' ", buf[i]);
ops[j].f();
}
}