Specifications
Chapter 21252
The readContentsOfFile() function accepts a list of arguments from the user, unpacks the
argument that contains the filename, reads the contents of the file, and packages the contents of
the file as the return value. For more information about the JavaScript data structures and
functions that appear in
readContentsOfFile(), see “C-level extensibility and the JavaScript
interpreter” on page 253.
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 as designed rather than causing a
JavaScript error, you must register the function with the JavaScript interpreter by including a
function called
MM_Init() 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
MM_Init() function for myLibrary might look:
void
MM_Init()
{
JS_DefineFunction("readContentsOfFile", readContentsOfFile, 1);
}