From 45bc0209c776288e5d3233f7117899163f2766e1 Mon Sep 17 00:00:00 2001 From: crc Date: Tue, 11 Feb 2020 21:13:58 +0000 Subject: [PATCH] retro.forth: minor reorganizations FossilOrigin-Name: 0aa751dedd90a0b82e1a545d487c6b64495e11dfaa222bb6ba4cd39b14300290 --- image/retro.forth | 27 +- ngaImage | Bin 37848 -> 37844 bytes vm/nga-c/retro-image.c | 1242 ++++++++++++++++++++-------------------- 3 files changed, 633 insertions(+), 636 deletions(-) diff --git a/image/retro.forth b/image/retro.forth index 1cf8c39..541010d 100644 --- a/image/retro.forth +++ b/image/retro.forth @@ -494,22 +494,12 @@ Forth, where non-zero values are true. :FALSE (-n) #0 ; ~~~ -The basic Rx kernel doesn't provide two useful forms which I'll -provide here. - -~~~ -:lteq? (nn-f) dup-pair \eqpultpo \or...... ; -:gteq? (nn-f) swap lteq? ; -~~~ - -~~~ -:if; (qf-) over &if dip 0; pop drop-pair ; -:-if; (qf-) over &-if dip #-1 xor 0; pop drop-pair ; -~~~ - -And then some numeric comparators. +Some numeric comparisons. ~~~ +:not (n-n) #-1 xor ; +:lteq? (nn-f) dup-pair \eqpultpo \or...... ; +:gteq? (nn-f) swap lteq? ; :n:MAX (-n) #-5 fetch ; :n:MIN (-n) #-4 fetch ; :n:zero? (n-f) #0 eq? ; @@ -521,6 +511,14 @@ And then some numeric comparators. :n:odd? (n-f) #2 /mod drop n:-zero? ; ~~~ +The basic Rx kernel doesn't provide two useful forms which I'll +provide here. + +~~~ +:if; (qf-) over &if dip 0; pop drop-pair ; +:-if; (qf-) over &-if dip not 0; pop drop-pair ; +~~~ + ## More Stack Shufflers. `rot` rotates the top three values. @@ -550,7 +548,6 @@ so they can be inlined. Here's the high level forms: ~~~ :/ (nq-d) \diswdr.. ; primitive :mod (nq-r) \didr.... ; primitive -:not (n-n) #-1 xor ; :n:pow (bp-n) #1 swap [ over * ] times nip ; :n:negate (n-n) #-1 * ; :n:square (n-n) dup * ; diff --git a/ngaImage b/ngaImage index 13137987aa8f4496356a2d1463ea92400bb9095a..42aa15fd7bca4265d50aa56042f77d4731f06ad9 100644 GIT binary patch delta 11466 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 delta 11385 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