about summary refs log tree commit diff stats
path: root/407print-int32-decimal-right-justified.mu
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2020-09-22 00:27:56 -0700
committerKartik Agaram <vc@akkartik.com>2020-09-22 00:27:56 -0700
commit8152b0d109a3ee01b7a357926aa01b1a8de3f366 (patch)
tree00e0717e85cafccd60879d8008bf2ade7cd8e2a7 /407print-int32-decimal-right-justified.mu
parent04d06dfe537703885ae30230940e5756fecdcb19 (diff)
downloadmu-8152b0d109a3ee01b7a357926aa01b1a8de3f366.tar.gz
6832 - tile: right-justify numbers
Fails noisily for negative integers so far.
Diffstat (limited to '407print-int32-decimal-right-justified.mu')
-rw-r--r--407print-int32-decimal-right-justified.mu52
1 files changed, 52 insertions, 0 deletions
diff --git a/407print-int32-decimal-right-justified.mu b/407print-int32-decimal-right-justified.mu
new file mode 100644
index 00000000..d9b7e5b6
--- /dev/null
+++ b/407print-int32-decimal-right-justified.mu
@@ -0,0 +1,52 @@
+# print n with enough leading spaces to be right-justified with max
+# only works for positive ints for now
+fn print-int32-decimal-right-justified screen: (addr screen), n: int, max: int {
+  var threshold/eax: int <- right-justify-threshold max
+  {
+#?     print-int32-decimal screen, threshold
+    compare n, threshold
+    break-if->=
+#?     print-string screen, "!"
+    print-grapheme screen, 0x20  # space
+    threshold <- try-divide threshold, 0xa
+    loop
+  }
+  print-int32-decimal screen, n
+}
+
+fn right-justify-threshold n: int -> result/eax: int {
+  var curr/eax: int <- copy n
+  var out/esi: int <- copy 1
+  var ten/ecx: int <- copy 0xa  # constant
+  {
+    compare curr, 0xa
+    break-if-<
+    curr <- try-divide curr, 0xa
+    out <- multiply ten
+    loop
+  }
+  result <- copy out
+}
+
+fn test-right-justify-threshold {
+  var x/eax: int <- right-justify-threshold 0
+  check-ints-equal x, 1, "F - test-right-justify-threshold: 0"
+  x <- right-justify-threshold 1
+  check-ints-equal x, 1, "F - test-right-justify-threshold: 1"
+  x <- right-justify-threshold 4
+  check-ints-equal x, 1, "F - test-right-justify-threshold: 4"
+  x <- right-justify-threshold 9
+  check-ints-equal x, 1, "F - test-right-justify-threshold: 9"
+  x <- right-justify-threshold 0xa
+  check-ints-equal x, 0xa, "F - test-right-justify-threshold: 10"
+  x <- right-justify-threshold 0xb
+  check-ints-equal x, 0xa, "F - test-right-justify-threshold: 11"
+  x <- right-justify-threshold 0x4f  # 79
+  check-ints-equal x, 0xa, "F - test-right-justify-threshold: 79"
+  x <- right-justify-threshold 0x64  # 100
+  check-ints-equal x, 0x64, "F - test-right-justify-threshold: 100"
+  x <- right-justify-threshold 0x3e7  # 999
+  check-ints-equal x, 0x64, "F - test-right-justify-threshold: 999"
+  x <- right-justify-threshold 0x3e8  # 1000
+  check-ints-equal x, 0x3e8, "F - test-right-justify-threshold: 1000"
+}