[gambit-list] FFI **Argv

sales.creditscore at creditscore.co.nz sales.creditscore at creditscore.co.nz
Tue Apr 16 06:53:39 EDT 2013


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.



More information about the Gambit-list mailing list