#include #include #include #include #include #include #include #include #include #include #include #include #include "stream.h" #include "js_util_functions.h" static JSBool Stream_undefined(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval); static JSBool Stream_isOpen(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval); static JSBool Stream_isEnd(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval); static JSBool Stream_propertyGetter(JSContext *cx, JSObject *obj, jsval id, jsval *vp); static JSObject *StreamPrototype = NULL; static JSClass js_Stream_class = { "Stream", JSCLASS_HAS_PRIVATE, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub, JSCLASS_NO_OPTIONAL_MEMBERS }; static JSFunctionSpec Stream_methods[] = { {"open", Stream_undefined, 0, 0 ,0}, {"close", Stream_undefined, 0, 0, 0}, {"read", Stream_undefined, 0, 0 ,0}, {"readChar", Stream_undefined, 0, 0, 0}, {"write", Stream_undefined, 0, 0 ,0}, {"seek", Stream_undefined, 0, 0 ,0}, {"getBytesAvailable", Stream_undefined, 0, 0 ,0}, {"isOpen", Stream_isOpen, 0, 0 ,0}, {"isEnd", Stream_isEnd, 0, 0 ,0}, {"getLastError", Stream_undefined, 0, 0, 0}, {NULL} }; static JSPropertySpec Stream_static_properties[] = { {"SEEK_SET", SEEK_SET, JSPROP_ENUMERATE|JSPROP_READONLY|JSPROP_PERMANENT, Stream_propertyGetter, NULL}, {"SEEK_CURRENT", SEEK_CUR, JSPROP_ENUMERATE|JSPROP_READONLY|JSPROP_PERMANENT, Stream_propertyGetter, NULL}, {"SEEK_END", SEEK_END, JSPROP_ENUMERATE|JSPROP_READONLY|JSPROP_PERMANENT, Stream_propertyGetter, NULL}, {NULL} }; JSBool register_class_Stream(JSContext *cx){ JSObject *globalObj = JS_GetGlobalObject(cx); /* Define the file object. */ StreamPrototype = JS_InitClass(cx, globalObj, NULL, &js_Stream_class, Stream_undefined, 0, NULL, Stream_methods, Stream_static_properties, NULL); if (!StreamPrototype){ return JS_FALSE; } return JS_TRUE; } JSObject *Stream_getPrototypeObject(){ return StreamPrototype; } static JSBool Stream_undefined(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ JS_SetPendingException(cx, printf_exception(cx, "Unimplemented.")); return JS_FALSE; } static JSBool Stream_isOpen(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ StreamInformation *info = (StreamInformation*)JS_GetPrivate(cx, obj); if (info->handle == -1){ *rval = BOOLEAN_TO_JSVAL(JS_FALSE); } else { *rval = BOOLEAN_TO_JSVAL(JS_TRUE); } return JS_TRUE; } static JSBool Stream_isEnd(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ StreamInformation *info = (StreamInformation*)JS_GetPrivate(cx, obj); *rval = BOOLEAN_TO_JSVAL(info->eofFlag); return JS_TRUE; } static JSBool Stream_propertyGetter(JSContext *cx, JSObject *obj, jsval id, jsval *vp){ int thevalues = SEEK_SET; thevalues = SEEK_CUR; thevalues = SEEK_END; switch (JSVAL_TO_INT(id)){ case SEEK_SET: *vp = INT_TO_JSVAL(SEEK_SET); break; case SEEK_CUR: *vp = INT_TO_JSVAL(SEEK_CUR); break; case SEEK_END: *vp = INT_TO_JSVAL(SEEK_END); break; default: return JS_FALSE; } return JS_TRUE; }