Adobe Extending Dreamweaver CS4 User Manual
Page 354

348
EXTENDING DREAMWEAVER CS4
C-level extensibility
JSBool
readContentsOfFile(JSContext *cx, JSObject *obj, unsigned int ¬
argc, jsval *argv, jsval *rval)
{
char *fileName, *fileContents;
JSBool success;
unsigned int length;
/* Make sure caller passed in exactly one argument. If not,
* then tell the interpreter to abort script execution.*/
if (argc != 1){
JS_ReportError(cx, "Wrong number of arguments", 0);
return JS_FALSE;
}
/* Convert the argument to a string */
fileName = JS_ValueToString(cx, argv[0], &length);
if (fileName == NULL){
JS_ReportError(cx, "The argument must be a string", 0);
return JS_FALSE;
}
/* Use the string (the file name) to open and read a file */
fileContents = exerciseLeftToTheReader(fileName);
/* Store file contents in rval, which is the return value passed
* back to the caller */
success = JS_StringToValue(cx, fileContents, 0, *rval);
free(fileContents);
/* Return true to continue or false to abort the script */
return success;
}
To ensure that the
readContentsOfFile()
function executes properly and doesn’t cause a JavaScript error, you must
register the function with the JavaScript interpreter by including a
MM_Init()
function in your library. When
Dreamweaver loads the library at startup, it calls the
MM_Init()
function to get the following three pieces of
information:
•
The JavaScript name of the function
•
A pointer to the function
•
The number of arguments that the function expects
The following example shows how the
MM_Init()
function for the library
myLibrary
might look:
void
MM_Init()
{
JS_DefineFunction("readContentsOfFile", readContentsOfFile, 1);
}
Your library must include exactly one instance of the following macro:
/* MM_STATE is a macro that expands to some definitions that are
* needed to interact with Dreamweaver. This macro must
* be defined exactly once in your library. */
MM_STATE