Hi,
I'm trying to call a C foreign function which uses command-line arguments...
;
;Isectd echo worker in Scheme
;
(c-declare "#include \"isdio.h\"")
(define isdLogInit (c-lambda (int (pointer (pointer char)#f)) void "isdLogInit"))
(isdLogInit (-(length (command-line))1) (command-line))
The FFI C function isdLogInit function is:
Xport void isdLogInit(int argc, char **argv)
{
int i;
char isdLogFileName[1024];
sprintf(isdLogFileName, "/isect/logs/%s.log", argv[1]);
isdLogFile = fopen(isdLogFileName, "a");
if (isdLogFile == NULL)
isdLogFile = stderr;
isdLog("\nSTARTING\n");
for (i = 0; i < argc; i++)
isdLog("%s ", argv[i]);
}
It compiles OK, but when I run it, I get the message (Argument 2) Can't convert to C pointer. That's because (command-line) is a list of strings. Seems I can't cast to the required char **argv using Scheme. How do I capture the command-line as the correct type. Sorry, if this is straightforward. I'm not an academic or a professional programmer, just an electrician who likes to play with things to see how they work. If I can understand Scheme then I might eventually be able to contribute to GnuCash which I use in my business every day.
Cheers,
Rob.