summaryrefslogtreecommitdiff
path: root/tex/context/base/mkxl/l-number.lmt
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkxl/l-number.lmt')
-rw-r--r--tex/context/base/mkxl/l-number.lmt105
1 files changed, 105 insertions, 0 deletions
diff --git a/tex/context/base/mkxl/l-number.lmt b/tex/context/base/mkxl/l-number.lmt
new file mode 100644
index 000000000..e13ac8260
--- /dev/null
+++ b/tex/context/base/mkxl/l-number.lmt
@@ -0,0 +1,105 @@
+if not modules then modules = { } end modules ['l-number'] = {
+ version = 1.001,
+ comment = "companion to luat-lib.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- See l-number.lua for the more generic (also 5.2) versions of the
+-- functions below ... that file evolved over time.
+
+local tonumber = tonumber
+local format = string.format
+local concat = table.concat
+local floor = math.floor
+
+number = number or { }
+local number = number
+
+-- print(number.tobitstring(8))
+-- print(number.tobitstring(14))
+-- print(number.tobitstring(66))
+-- print(number.tobitstring(0x00))
+-- print(number.tobitstring(0xFF))
+-- print(number.tobitstring(46260767936,4))
+
+local t = {
+ "0", "0", "0", "0", "0", "0", "0", "0",
+ "0", "0", "0", "0", "0", "0", "0", "0",
+ "0", "0", "0", "0", "0", "0", "0", "0",
+ "0", "0", "0", "0", "0", "0", "0", "0",
+}
+
+function number.tobitstring(b,m,w)
+ if not w then
+ w = 32
+ end
+ local n = w
+ for i=0,w-1 do
+ local v = (b>>i) & 0x1 -- bextract(b,i)
+ local k = w - i
+ if v == 1 then
+ n = k
+ t[k] = "1"
+ else
+ t[k] = "0"
+ end
+ end
+ if w then
+ return concat(t,"",1,w)
+ elseif m then
+ m = 33 - m * 8
+ if m < 1 then
+ m = 1
+ end
+ return concat(t,"",1,m)
+ elseif n < 8 then
+ return concat(t)
+ elseif n < 16 then
+ return concat(t,"",9)
+ elseif n < 24 then
+ return concat(t,"",17)
+ else
+ return concat(t,"",25)
+ end
+end
+
+function number.valid(str,default)
+ return tonumber(str) or default or nil
+end
+
+function number.toevenhex(n)
+ local s = format("%X",n)
+ if #s % 2 == 0 then
+ return s
+ else
+ return "0" .. s
+ end
+end
+
+function number.bytetodecimal(b)
+ local d = floor(b * 100 / 255 + 0.5)
+ if d > 100 then
+ return 100
+ elseif d < -100 then
+ return -100
+ else
+ return d
+ end
+end
+
+function number.decimaltobyte(d)
+ local b = floor(d * 255 / 100 + 0.5)
+ if b > 255 then
+ return 255
+ elseif b < -255 then
+ return -255
+ else
+ return b
+ end
+end
+
+function number.idiv(i,d)
+ return i // d
+end