Created
March 30, 2019 05:09
-
-
Save toomasv/e6f2dbd52d5b65ff652d484caf8b44cf to your computer and use it in GitHub Desktop.
Study of signed basis
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Red [ | |
Author: "Toomas Vooglaid" | |
Date: 22-Mar-2019 | |
Title: "Compare signed bases" | |
Purpose: {Introduction to study of signed number basis} | |
] | |
context [ | |
set-bits: does [forall bits [pan/pane/(index? bits)/data: make logic! to-integer to-string bits/1]] | |
set-num: function [hx][ | |
int: to-integer hx | |
num/data: either all [sig/data int > 127] [ | |
int - 256 ; -1 - to-integer (complement hx) | |
][int] | |
] | |
hexa: charset [#"0" - #"9" #"A" - #"F"] | |
bit: pan: num: bin: bits: hex: bi: sig: none | |
hx: #{00000000} | |
view [ | |
title "Compare bases" | |
style bit: check 22x25 [ | |
hx: debase/base bin/text: rejoin collect [ | |
foreach-face pan [ | |
keep make integer! face/data | |
] | |
] 2 | |
hex/text: enbase/base hx 16 | |
set-num hx | |
] | |
sig: check "Sig" 40 [set-num hx] | |
pan: panel [ | |
origin 0x0 | |
bit "7" bit "6" bit "5" bit "4" bit "3" bit "2" bit "1" bit "0" | |
] return | |
text "DEC:" 24 | |
num: field 35 "0" on-enter [ | |
either all [face/data >= -128 face/data <= 255] [ | |
data: case [ | |
face/data < 0 [sig/data: true face/data + 256] | |
face/data > 127 [sig/data: false face/data] | |
true [face/data] | |
] | |
bin/text: bits: take/last/part enbase/base hx: to-binary data 2 8 | |
hex/text: take/last/part enbase/base hx 16 2 | |
set-bits | |
][cause-error 'user 'message reduce [rejoin ["Enter integer " -128 ".." 255]]] | |
] | |
text "BIN:" 22 | |
bin: field 70 "00000000" on-enter [ | |
either parse face/text [8 [#"1" | #"0"]] [ | |
bits: face/text | |
hex/text: enbase/base hx: debase/base bits 2 16 | |
data: to-integer hx | |
set-num hx | |
set-bits | |
][cause-error 'user 'message ["Enter 8 bits (1 or 0)"]] | |
] | |
text "HEX:" 24 | |
hex: field 25 "00" on-enter [ | |
either parse face/text [2 hexa] [ | |
hx: debase/base face/text 16 | |
bin/text: bits: enbase/base hx 2 | |
set-num hx | |
set-bits | |
][cause-error 'user 'message ["Enter hexadecimal 00..FF"]] | |
] | |
] | |
] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment