From 8d622a8be1e9481dcc15ca9918f6172486cffc3b Mon Sep 17 00:00:00 2001 From: Bohdan Fedorov Date: Mon, 11 Oct 2021 00:43:12 +0300 Subject: [PATCH 1/3] Add putd to std.porth --- std/std.porth | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ tests/putd.porth | 9 +++++++ tests/putd.txt | 10 ++++++++ 3 files changed, 80 insertions(+) create mode 100644 tests/putd.porth create mode 100644 tests/putd.txt diff --git a/std/std.porth b/std/std.porth index 41b24325..0c319eee 100644 --- a/std/std.porth +++ b/std/std.porth @@ -396,3 +396,64 @@ end macro eputs stderr fputs end + +macro _put_digit + "0123456789" swap drop + 1 swap puts +end + +macro _putd_before + dup 10 % + over 10 / +end +macro _putd_after + drop + _put_digit +end + +macro putd + dup 0 = if + "0" puts + else + dup 0 > if _putd_before + dup 0 > if _putd_before + dup 0 > if _putd_before + dup 0 > if _putd_before + dup 0 > if _putd_before + dup 0 > if _putd_before + dup 0 > if _putd_before + dup 0 > if _putd_before + dup 0 > if _putd_before + dup 0 > if _putd_before + dup 0 > if _putd_before + dup 0 > if _putd_before + dup 0 > if _putd_before + dup 0 > if _putd_before + dup 0 > if _putd_before + dup 0 > if _putd_before + dup 0 > if _putd_before + dup 0 > if _putd_before + dup 0 > if _putd_before + dup 0 > if _putd_before + _putd_after end + _putd_after end + _putd_after end + _putd_after end + _putd_after end + _putd_after end + _putd_after end + _putd_after end + _putd_after end + _putd_after end + _putd_after end + _putd_after end + _putd_after end + _putd_after end + _putd_after end + _putd_after end + _putd_after end + _putd_after end + _putd_after end + _putd_after end + end drop +end + diff --git a/tests/putd.porth b/tests/putd.porth new file mode 100644 index 00000000..d44208f8 --- /dev/null +++ b/tests/putd.porth @@ -0,0 +1,9 @@ +include "std.porth" + +//Zero +0 putd +"\n" puts + +//max i64 +9223372036854775807 putd +"\n" puts diff --git a/tests/putd.txt b/tests/putd.txt new file mode 100644 index 00000000..a2300cf9 --- /dev/null +++ b/tests/putd.txt @@ -0,0 +1,10 @@ +:i argc 0 +:b stdin 0 + +:i returncode 0 +:b stdout 22 +0 +9223372036854775807 + +:b stderr 0 + From 087b4ff39a81dc94c5ed53db66b3875091c98c1f Mon Sep 17 00:00:00 2001 From: Bohdan Fedorov Date: Mon, 11 Oct 2021 01:38:01 +0300 Subject: [PATCH 2/3] putd: add negative numbers --- std/std.porth | 5 +++++ tests/putd.porth | 5 +++++ tests/putd.txt | 3 ++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/std/std.porth b/std/std.porth index 0c319eee..20714499 100644 --- a/std/std.porth +++ b/std/std.porth @@ -414,6 +414,11 @@ macro putd dup 0 = if "0" puts else + dup 0 < if + "-" puts + -1 * + end + dup 0 > if _putd_before dup 0 > if _putd_before dup 0 > if _putd_before diff --git a/tests/putd.porth b/tests/putd.porth index d44208f8..076e99b6 100644 --- a/tests/putd.porth +++ b/tests/putd.porth @@ -7,3 +7,8 @@ include "std.porth" //max i64 9223372036854775807 putd "\n" puts + +//negative +0 5 - putd +"\n" puts + diff --git a/tests/putd.txt b/tests/putd.txt index a2300cf9..cd674e97 100644 --- a/tests/putd.txt +++ b/tests/putd.txt @@ -2,9 +2,10 @@ :b stdin 0 :i returncode 0 -:b stdout 22 +:b stdout 25 0 9223372036854775807 +-5 :b stderr 0 From 5cb1c6ce4ccc3a029c3dfbc2226b7c8dc0b2be90 Mon Sep 17 00:00:00 2001 From: Bohdan Fedorov Date: Mon, 11 Oct 2021 17:18:12 +0300 Subject: [PATCH 3/3] Fix putd --- std/std.porth | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/std/std.porth b/std/std.porth index 20714499..da087e9e 100644 --- a/std/std.porth +++ b/std/std.porth @@ -411,34 +411,34 @@ macro _putd_after end macro putd - dup 0 = if + if dup 0 = do "0" puts else - dup 0 < if + if dup 0 < do "-" puts -1 * end - dup 0 > if _putd_before - dup 0 > if _putd_before - dup 0 > if _putd_before - dup 0 > if _putd_before - dup 0 > if _putd_before - dup 0 > if _putd_before - dup 0 > if _putd_before - dup 0 > if _putd_before - dup 0 > if _putd_before - dup 0 > if _putd_before - dup 0 > if _putd_before - dup 0 > if _putd_before - dup 0 > if _putd_before - dup 0 > if _putd_before - dup 0 > if _putd_before - dup 0 > if _putd_before - dup 0 > if _putd_before - dup 0 > if _putd_before - dup 0 > if _putd_before - dup 0 > if _putd_before + if dup 0 > do _putd_before + if dup 0 > do _putd_before + if dup 0 > do _putd_before + if dup 0 > do _putd_before + if dup 0 > do _putd_before + if dup 0 > do _putd_before + if dup 0 > do _putd_before + if dup 0 > do _putd_before + if dup 0 > do _putd_before + if dup 0 > do _putd_before + if dup 0 > do _putd_before + if dup 0 > do _putd_before + if dup 0 > do _putd_before + if dup 0 > do _putd_before + if dup 0 > do _putd_before + if dup 0 > do _putd_before + if dup 0 > do _putd_before + if dup 0 > do _putd_before + if dup 0 > do _putd_before + if dup 0 > do _putd_before _putd_after end _putd_after end _putd_after end