r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[SDK]

[unknown: 5]
24-Mar-2006
[462]
It was a strange problem I think.  I think I had a pro key and an 
sdk key - that is my only explaination for the problem because Cindy 
sent me a copy of my original SDK download and that key worked on 
the newer one so I think I may have been using the wrong key file.
Louis
28-Mar-2006
[463]
The main problem I have with the SDK is that it makes it harder to 
find bugs. Does anyone have any idea what is causing this error message:

** Script Error: bind expected known-word argument of type: word
** Near: ctx-text: context bind ctx-text system/view
** Press enter to quit...
Graham
28-Mar-2006
[464]
you can optionally output your prerebol source and run that.  then 
no question of encap being involved.
Gabriele
29-Mar-2006
[465]
louis, my guess is that the encap version you are running is older 
than the version that code is expecting. (bind allowing objects is 
a rather new thing)
BrianH
10-Apr-2006
[466x3]
JeffM wrote in Core:

Can REBOL/SDK define functions that will be called from C and passed 
to a C function? For example:


c-logger: make routine! [ "Define the callback function for error 
tracking."

    logger: [string!] "using string! since a function ptr is just a pointer"
    return: [integer!]
] my-lib "C_Logger"

rebol-logger: func [s] [ print s ]

c-logger :rebol-logger
; Try this:

c-logger: make routine! [ "Define the callback function for error 
tracking."
    logger: [callback! [string!]] ; Here is the fix
    return: [integer!]
] my-lib "C_Logger"

rebol-logger: func [s] [ print s ]

c-logger :rebol-logger
Be careful though: The current implementation of callbacks in REBOL 
limits you to defining 16 per REBOL process. I'm not sure whether 
it is the making of the routine or the calling of the routine that 
establishes the callback though, so test to be sure. Most scripts 
I've seen use callbacks for logging, like your example, and so only 
call the routine once. Once the callback is established, there shouldn't 
be any limitation to the number of times the C code can call the 
REBOL function, in theory.
Anton
10-Apr-2006
[469]
The rebol function must complete before the C function tries to call 
it again - or there will be fireworks. Even a short rebol function 
can take 40ms to complete (for example), and if the C function tries 
to call it every 20ms that will stuff up the rebol interpreter.
JeffM
11-Apr-2006
[470x3]
okay. this is good to know. thanks, guys. something else i couldn't 
find in the documentation was a method of getting a values returned 
by a pointer. for example, void get_value(int field, float *value); 
In this case, "value" is an output parameter. Does REBOL have a method 
of correctly passing a buffer and having it get filled in?
I've already tried the following:
foo: 16#{00000000}

C_get_pointer: make routine! [ "Returns pointer to structure."
	dummy [string!] "Pass 'foo' here"
	return: [integer!]
] my-lib "c_get_pointer" 
foo: 16#{00000000}


I know this is a trivial example. In this one, calling c_get_pointer 
with foo does in fact fill foo in with 4 bytes of data (presumably 
the correct address), but all calls to other functions which make 
use of that pointer crash. I can only assume that the pointer is 
wrong (byte swapped perhaps) or that I'm doing something not quite 
right?
(ignore the second foo: 16#{00000000} -- it was a pasting error
BrianH
11-Apr-2006
[473]
; Try this
C_get_pointer: make routine! [ "Returns pointer to structure."
    ip [struct! [[integer!]]] "Pass 'foo' here"
] my-lib "c_get_pointer" 
foo: make struct! [val [integer!]] none
C_get_pointer foo
foo/val
JeffM
11-Apr-2006
[474]
That's working well. Thanks
AndrewL
18-Jun-2006
[475]
I've been reading the docs both for the preprocessor and for the 
newer include.r script but I'm a bit confused, I wonder if someone 
could help clear it up for me. Here's my situation. I have view and/or 
SDK installed on a PC and a script sitting on my desktop. This script 
needs one or more library scripts which are available from web servers. 
How do i write the start of the script so that I can do all of;

1) Double click and have it run in view

2) Run the preprocessor so that I have an all in one script ready 
to run/copy somewhere

3) Encap it by dragging and driopping it on encmdview.exe or similar


I want to be able to do this without changing a single character 
of the script. I want to access the library files from a web server 
because here at work I often write scripts on various different servers 
and prefer to keep one copy of the libs centrally and not downloaded 
onto each machine.
Gabriele
19-Jun-2006
[476x2]
one trick is to use something like:
x: #do [1]
either tuple? x [
    ; script has been run directly
    do %include1.r
    do %include2.r
] [
    ; script is being preprocessed/encapped
    #include %include1.r
    #include %include1.r
]
Anton
19-Jun-2006
[478]
don't you mean:
	either issue? x [...
Gabriele
19-Jun-2006
[479x4]
about include files being on a web server, the official prebol does 
not support that; i think that Ladislav's INCLUDE does, and I have 
a patched prebol.r that does support including from urls too.
Anton, of course i meant ISSUE?. sorry.
let me repeat it to avoid confusion:
x: #do [1]
either issue? x [
    ; script has been run directly
    do %include1.r
    do %include2.r
] [
    ; script is being preprocessed/encapped
    #include %include1.r
    #include %include1.r
]
AndrewL
19-Jun-2006
[483]
Great, that works perfectly, as you said for local files.. I haven't 
managed to get include to work yet for remote files, is the patched 
prebol.r available somewhere? (your rebsite is down)
Volker
19-Jun-2006
[484x2]
; would this work?
files: [#include  %include1.r #include  %include2.r]
foreach files[if file? files/1[change files load files/1]
do files
at least tihis version is buggy..
Ladislav
19-Jun-2006
[486x3]
I haven't managed to get include to work yet for remote files
 - interesting, what did you try?
would this work?
 - how would you like it to work?
(#include is a preprocessor instruction, so it is being preprocessed 
usually)
Volker
19-Jun-2006
[489]
it read all filenames in the block and inlines them. after preprocessing 
there are no filenames, so it replaces nothing. without preprocessing 
there is all the files content. in both cases i can do it.
Ladislav
19-Jun-2006
[490]
hmm, files/1 may be a file! even in case the source was preprocessed
Volker
19-Jun-2006
[491]
eeks, another bug..
Ladislav
19-Jun-2006
[492]
...and if won't be a file! in case the source wasn't preprocessed
Volker
19-Jun-2006
[493x2]
and the 'change inserts multiple items. should change position.
the äinclude would not, but the %include1.r would.
Ladislav
19-Jun-2006
[495x2]
did you read http://www.fm.tul.cz/~ladislav/rebol/include.html
btw: foreach files [if file?...] is clearly not what you wanted it 
to be...
Volker
19-Jun-2006
[497x2]
i guess i trash that version completely :)
the question was more aboutthe concepts than the implementation *whistle*
Ladislav
19-Jun-2006
[499]
so, did you read the above mentioned description?
Volker
19-Jun-2006
[500x3]
Can your include also expand blocks? then this would work
if not value? 'include[do 5ladislavs-include.r]
include[ all the main code ]
Not yet, thought its like prebol. sorry.
did now.
Ladislav
19-Jun-2006
[503]
Can your include expand blocks?
 - INCLUDE takes only FILE! or URL! argumenta
Volker
19-Jun-2006
[504]
than my exapmle needs an extra file
Ladislav
19-Jun-2006
[505]
it is easy to allow blocks, though, because I implemented this functionality 
anyway
Volker
19-Jun-2006
[506x3]
when 'include is inbuild it is no problem. but if the main script 
must include to include something and want own content too, would 
help.
; 'do of course..
rebol[]
if not value? 'include[do %ladislavs-include.r]
do include[ all the main code ]
no, then the include/link would be confused.
Ladislav
19-Jun-2006
[509x2]
I am using the mouse-click method when I want to INCLUDE something. 
Don't you want to describe how it can be done e.g. in Linux?
(I mean whether you want to write a section describing how to do 
the same in Linux)?
Volker
19-Jun-2006
[511]
i would try a bash-script and do the same as with the windows-shortcut.