From ea449066eef8d753f40b85006f2cdc4699f175a7 Mon Sep 17 00:00:00 2001 From: uchan-nos Date: Sat, 28 Dec 2019 19:23:44 +0900 Subject: [PATCH] rpn prints a result using PutString syscall --- apps/rpn/rpn.cpp | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/apps/rpn/rpn.cpp b/apps/rpn/rpn.cpp index f063452d1..2cd734125 100644 --- a/apps/rpn/rpn.cpp +++ b/apps/rpn/rpn.cpp @@ -18,6 +18,29 @@ void Push(long value) { stack[stack_ptr] = value; } +void FormatLong(char* s, long v) { + if (v == 0) { + s[0] = '0'; + s[1] = '\n'; + s[2] = '\0'; + return; + } + + int i = 0; + while (v) { + s[i] = (v % 10) + '0'; + v /= 10; + ++i; + } + s[i] = '\n'; + s[i + 1] = '\0'; + for (int j = 0; j < i/2; ++j) { + char tmp = s[j]; + s[j] = s[i - j - 1]; + s[i - j - 1] = tmp; + } +} + extern "C" int64_t SyscallLogString(LogLevel, const char*); extern "C" int64_t SyscallPutString(const char*); @@ -29,22 +52,23 @@ extern "C" int main(int argc, char** argv) { long b = Pop(); long a = Pop(); Push(a + b); - SyscallPutString("+"); } else if (strcmp(argv[i], "-") == 0) { long b = Pop(); long a = Pop(); Push(a - b); - SyscallPutString("-"); } else { long a = atol(argv[i]); Push(a); - SyscallPutString("#"); } } - if (stack_ptr < 0) { - return 0; + long result = 0; + if (stack_ptr >= 0) { + result = Pop(); } - SyscallPutString("\nhello, this is rpn\n"); + + char s[64]; + FormatLong(s, result); + SyscallPutString(s); while (1); //return static_cast(Pop()); }