[Xotcl] instprocs in C
Aamer Akhter
aakhter at gmail.com
Sat Feb 18 19:41:24 CET 2006
On 2/16/06, Gustaf Neumann <neumann at wu-wien.ac.at> wrote:
> Aamer Akhter schrieb:
>
> >Critcl allows us to easily create tcl callable C procs. Is there
> >something similar avaliable for xotcl?
> >
> >Is there any C api documentation?
> >
> >
> There is as well a simpler way, defining e.g. a cinstproc similar to the
> cproc:
>
> ===============================================================
> lappend auto_path .
> package require critcl
>
> Class instproc cinstproc {name arglist returntype body} {
> critcl::cproc $name $arglist $returntype $body
> catch {$name} ;# there must be a better way forcing the compile!
> rename $name ::xotcl::classes[self]::$name
> }
> ===============================================================
>
> now one can define a Class and a cinstproc and use it.
>
> ===============================================================
> Class C
> C cinstproc triple {int i} int {
> return i * 3; /* this is C code */
> }
>
> C c1
> puts "three times 123 is [c1 triple 123]"
> ===============================================================
>
> this might be already sufficient for you. Two things should be done
> more beautiful:
Thank-you, this certainly gives ideas. I'll have to play around with
it and look at the existing code sent out earlier to understand the
API a bit better.
>
> a) the compilation in criticl seems to be forced through unknown.
> my approach with the catch is rather crude. but i am sure, there must
> be an option.
I have been doing the catch/compile myself- don't know if there is
another way for runtime use. Personnally, it comes in usefull as it
allows for doing falback to tcl-only versions.
>
> b) It would be nice to generate the command in the right namespace.
> i found as well no nice approach to do this.
I've been using the critcl::ccommand inside a namespace eval to place
the command in the right namespace. That appears to work. eg:
package require critcl;
namespace eval ::ip {
critcl::ccode {
#include <stdlib.h>
....
}
critcl::ccommand prefixToNativec {clientData interp objc objv} {
int elemLen, maskLen, ipLen, mask;
int rval,convertListc,i;
Tcl_Obj **convertListv;
Tcl_Obj *listPtr,*returnPtr, *addrList;
char *stringIP, *slashPos, *stringMask;
char v4HEX[11];
uint32_t inaddr;
....
}
}; #namespace eval
>
> Aamer, if you have some experience here, feedback would be welcome,
>
> -gustaf
>
> >
> >
> >--
> >Aamer Akhter / aakhter at gmail.com
> >
> >_______________________________________________
> >Xotcl mailing list
> >Xotcl at alice.wu-wien.ac.at
> >http://alice.wu-wien.ac.at/mailman/listinfo/xotcl
> >
> >
>
>
--
Aamer Akhter / aakhter at gmail.com
More information about the Xotcl
mailing list