Hi Henrik,
> ATM I'm trying with the following:
>
> void tst(char *strs[2]){
> strs[0] = "foo";
> strs[1] = "bar";
> }
>
> (native "pcre/main.so" "tst" NIL '(X (8 . S)))
>
> X contains "foo" but I can't seem to get at "bar".
Right. (8 . S) is a structure of size 8, consisting of a single string
pointer.
You should use
(native "pcre/main.so" "tst" NIL '(X (16 S S)))
i.e. a size of 16 (two pointers) with two string pointers. Alternatively
(especially when more strings are involved) you can pass an element
count (here 2):
(native "pcre/main.so" "tst" NIL '(X (16 S . 2)))
BTW, if you want to call a regexp library (though I don't think using
regexps in general is a good idea ;), why not use the standard 'regexec'
functions?
>From http://rosettacode.org/wiki/Regular_expressions#PicoLisp
(let (Pat "a[0-9]z" String "a7z")
(use Preg
(native "@" "regcomp" 'I '(Preg (64 B . 64)) Pat 1) # Compile regex
(when (=0 (native "@" "regexec" 'I (cons NIL (64) Preg) String 0 0 0))
(prinl "String \"" String "\" matches regex \"" Pat "\"") ) ) )
Output:
String "a7z" matches pattern "a[0-9]z"
Cheers,
- Alex
--
UNSUBSCRIBE: mailto:[email protected]?subject=Unsubscribe