started using libffi in mod/ffi.c if it's available. work in progress
This commit is contained in:
@ -91,9 +91,9 @@ class MyObject(Object)
|
||||
}
|
||||
else
|
||||
{
|
||||
(ffi call: #getpid signature: ")i" arguments: nil) dump.
|
||||
(ffi call: #printf signature: "s|iis)i" arguments: #("A=>%d B=>%d Hello, world %s\n" 1 2 "fly away")) dump.
|
||||
(ffi call: #printf signature: "s|iis)i" arguments: #("A=>%d B=>%d Hello, world %s\n" 1 2 "jump down")) dump.
|
||||
(ffi call: #getpid signature: ">i" arguments: nil) dump.
|
||||
(ffi call: #printf signature: "s|iis>i" arguments: #("A=>%d B=>%d Hello, world %s\n" 1 2 "fly away")) dump.
|
||||
(ffi call: #printf signature: "s|iis>i" arguments: #("A=>%d B=>%d Hello, world %s\n" 1 2 "jump down")) dump.
|
||||
ffi close.
|
||||
}.
|
||||
|
||||
|
@ -255,8 +255,8 @@ class MyObject(TestObject)
|
||||
ffi := FFI new: "libc.so.6".
|
||||
|
||||
// ffi call: #printf with: #((str "%d") (int 10) (long 20)).
|
||||
ffi call: #printf signature: "|s|ici)i" arguments: #("hello world %d %c %d\n" 11123 $X 9876543).
|
||||
//ffi call: #puts signature: "s)i" arguments: #("hello world").
|
||||
ffi call: #printf signature: "s|ici>i" arguments: #("hello world %d %c %d\n" 11123 $X 9876543).
|
||||
//ffi call: #puts signature: "s>i" arguments: #("hello world").
|
||||
ffi close.
|
||||
}
|
||||
|
||||
|
@ -41,9 +41,9 @@ class MyObject(Object)
|
||||
|
||||
|
||||
ffi := FFI new: 'libc.so.6'.
|
||||
now := ffi call: #time signature: 'l)i' arguments: #(0).
|
||||
////ffi call: #srand signature: 'i)' arguments: ##(now).
|
||||
ffi call: #srandom signature: 'i)' arguments: ##(now).
|
||||
now := ffi call: #time signature: 'l>i' arguments: #(0).
|
||||
////ffi call: #srand signature: 'i>' arguments: ##(now).
|
||||
ffi call: #srandom signature: 'i>' arguments: ##(now).
|
||||
|
||||
[
|
||||
divr_ubound := 16rFFFFFFFFFFFFFFFFFFFFFFFF.
|
||||
@ -51,32 +51,42 @@ class MyObject(Object)
|
||||
|
||||
while (true)
|
||||
{
|
||||
//x := (ffi call: #rand signature: ')i' arguments: nil) rem: 20.
|
||||
//divd := (ffi call: #rand signature: ')i' arguments: nil).
|
||||
x := (ffi call: #random signature: ')l' arguments: nil) rem: 20.
|
||||
divd := (ffi call: #random signature: ')l' arguments: nil).
|
||||
//x := (ffi call: #rand signature: '>i' arguments: nil) rem: 20.
|
||||
//divd := (ffi call: #rand signature: '>i' arguments: nil).
|
||||
x := (ffi call: #random signature: '>l' arguments: nil) rem: 20.
|
||||
divd := (ffi call: #random signature: '>l' arguments: nil).
|
||||
while (x > 0)
|
||||
{
|
||||
//divd := (divd bitShift: 7) bitOr: (ffi call: #rand signature: ')i' arguments: nil).
|
||||
divd := (divd bitShift: 7) bitOr: (ffi call: #random signature: ')l' arguments: nil).
|
||||
//divd := (divd bitShift: 7) bitOr: (ffi call: #rand signature: '>i' arguments: nil).
|
||||
divd := (divd bitShift: 7) bitOr: (ffi call: #random signature: '>l' arguments: nil).
|
||||
x := x - 1.
|
||||
}.
|
||||
|
||||
//x := (ffi call: #rand signature: ')i' arguments: nil) rem: 20.
|
||||
//divr := (ffi call: #rand signature: ')i' arguments: nil).
|
||||
x := (ffi call: #random signature: ')l' arguments: nil) rem: 20.
|
||||
divr := (ffi call: #random signature: ')l' arguments: nil).
|
||||
//x := (ffi call: #rand signature: '>i' arguments: nil) rem: 20.
|
||||
//divr := (ffi call: #rand signature: '>i' arguments: nil).
|
||||
x := (ffi call: #random signature: '>l' arguments: nil) rem: 20.
|
||||
divr := (ffi call: #random signature: '>l' arguments: nil).
|
||||
while (x > 0)
|
||||
{
|
||||
//divr := (divr bitShift: 7) bitOr: (ffi call: #rand signature: ')i' arguments: nil).
|
||||
divr := (divr bitShift: 7) bitOr: (ffi call: #random signature: ')l' arguments: nil).
|
||||
//divr := (divr bitShift: 7) bitOr: (ffi call: #rand signature: '>i' arguments: nil).
|
||||
divr := (divr bitShift: 7) bitOr: (ffi call: #random signature: '>l' arguments: nil).
|
||||
x := x - 1.
|
||||
}.
|
||||
if (divr = 0) { divr := 1 }.
|
||||
|
||||
q := divd div: divr.
|
||||
r := divd rem: divr.
|
||||
if (divd ~= (q * divr + r)) { i dump. divd dump. divr dump. q dump. r dump. (q * divr + r) dump. ^false. }.
|
||||
if (divd ~= (q * divr + r))
|
||||
{
|
||||
// dump numbers if result is wrong
|
||||
i dump.
|
||||
divd dump.
|
||||
divr dump.
|
||||
q dump.
|
||||
r dump.
|
||||
(q * divr + r) dump.
|
||||
^false.
|
||||
}.
|
||||
////((q asString) & ' ' & (r asString)) dump
|
||||
}.
|
||||
] ensure: [ ffi close. ].
|
||||
|
Reference in New Issue
Block a user