[DGD] (mis)adventures with extensions
chris .
psych_mayo at hotmail.com
Wed Sep 26 11:52:35 CEST 2007
I have never written in c before (lpc all my life), but after a crash course educational binge i managed to concoct what i think may be sound c code. I think the problem is my understanding of the extension interface.
I made a function write_bin(string filepath, string text). It writes a binary file from text to the file in filepath.
When i send input with a path, (from my / root in this case), it writes a binary file, but not where i tell it to, but in /dgd/mud/. It doesnt use the filename i gave it, but uses the second argument input for a filename. The code for the extension is as follows:
# include
# include "dgd_ext.h"
/* write_bin(string path, string text) */
static void write_bin(DGD_FRAME_T f, int nargs, DGD_VALUE_T *retval) {
DGD_VALUE_T val;
DGD_STRING_T path;
DGD_STRING_T text;
char *arg0;
char *arg1;
unsigned int i;
FILE *buffy;
/* fetch the arguments */
val = DGD_FRAME_ARG(f, nargs, 0);
path = DGD_STRING_GETVAL(val);
val = DGD_FRAME_ARG(f, nargs, 1);
text = DGD_STRING_GETVAL(val);
/* make copies */
path = DGD_STRING_NEW(DGD_STRING_TEXT(path), DGD_STRING_LENGTH(path));
arg0 = DGD_STRING_TEXT(path);
text = DGD_STRING_NEW(DGD_STRING_TEXT(text), DGD_STRING_LENGTH(text));
arg1 = DGD_STRING_TEXT(text);
buffy = fopen(arg1,"ab");
fwrite(arg1,sizeof(arg1[0]), sizeof(arg1),buffy);
fclose(buffy);
}
static char write_bin_proto[] = { DGD_TYPE_VOID, DGD_TYPE_STRING, DGD_TYPE_STRING, 0 };
static DGD_EXTKFUN_T kf[1] = {
"write_bin",
write_bin_proto,
&write_bin
};
void extension_init(void)
{
DGD_EXT_KFUN(kf, 1);
}
Thank you for your time,
-chris
_________________________________________________________________
Connect to the next generation of MSN Messenger
http://imagine-msn.com/messenger/launch80/default.aspx?locale=en-us&source=wlmailtagline
More information about the DGD
mailing list