/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * The contents of this file are subject to the Netscape Public License * Version 1.0 (the "NPL"); you may not use this file except in * compliance with the NPL. You may obtain a copy of the NPL at * http://www.mozilla.org/NPL/ * * Software distributed under the NPL is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL * for the specific language governing rights and limitations under the * NPL. * * The Initial Developer of this code under the NPL is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All Rights * Reserved. */ /* * JS reflection of the Hardware info top-level object. * * Tom Pixley, 1/2/98 */ #ifdef NAV_HARDWARE #include "lm.h" typedef struct JSHardware { MochaDecoder *decoder; } JSHardware; enum hardware_tinyid { HARDWARE_ARCHITECTURE = -1, HARDWARE_CLOCK_SPEED = -2, HARDWARE_RAM = -3 }; static JSPropertySpec hardware_props[] = { {"architecture", HARDWARE_ARCHITECTURE, JSPROP_ENUMERATE | JSPROP_READONLY}, {"clockSpeed", HARDWARE_CLOCK_SPEED, JSPROP_ENUMERATE | JSPROP_READONLY}, {"ram", HARDWARE_RAM , JSPROP_ENUMERATE | JSPROP_READONLY}, {0} }; extern JSClass lm_hardware_class; PR_STATIC_CALLBACK(JSBool) hardware_getProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) { MWContext *context; JSHardware *hardware; jsint slot; char * arch; if (!JSVAL_IS_INT(id)) return JS_TRUE; slot = JSVAL_TO_INT(id); hardware = JS_GetInstancePrivate(cx, obj, &lm_hardware_class, NULL); if (!hardware) return JS_TRUE; context = hardware->decoder->window_context; if (!context) return JS_TRUE; switch (slot) { case HARDWARE_ARCHITECTURE: #ifdef XP_WIN arch = ET_moz_CallFunctionString((ETStringPtrFunc)FE_SystemCPUInfo, NULL); *vp = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, arch)); XP_FREE(arch); #endif break; case HARDWARE_CLOCK_SPEED: #ifdef XP_WIN *vp = INT_TO_JSVAL( ET_moz_CallFunctionInt((ETIntPtrFunc)FE_SystemClockSpeed, NULL)); #endif break; case HARDWARE_RAM: #ifdef XP_WIN *vp = INT_TO_JSVAL( ET_moz_CallFunctionInt((ETIntPtrFunc)FE_SystemRAM, NULL)); #endif break; default: return JS_TRUE; } return JS_TRUE; } PR_STATIC_CALLBACK(void) hardware_finalize(JSContext *cx, JSObject *obj) { JSHardware *hardware; hardware = JS_GetPrivate(cx, obj); if (!hardware) return; DROP_BACK_COUNT(hardware->decoder); JS_free(cx, hardware); } JSClass lm_hardware_class = { "Hardware", JSCLASS_HAS_PRIVATE, JS_PropertyStub, JS_PropertyStub, hardware_getProperty, hardware_getProperty, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, hardware_finalize }; PR_STATIC_CALLBACK(JSBool) Hardware(JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval) { return JS_TRUE; } JSObject * lm_DefineHardware(MochaDecoder *decoder, JSObject *parent) { JSObject *obj; JSContext *cx; JSHardware *hardware; if (parent == decoder->window_object) { obj = decoder->hardware; if (obj) return obj; } cx = decoder->js_context; if (!(hardware = JS_malloc(cx, sizeof(JSHardware)))) return 0; hardware->decoder = NULL; /* in case of error below */ obj = JS_InitClass(cx, decoder->window_object, NULL, &lm_hardware_class, Hardware, 0, hardware_props, NULL, NULL, NULL); if (!obj || !JS_SetPrivate(cx, obj, hardware)) { JS_free(cx, hardware); return 0; } if (!JS_DefineProperty(cx, parent, "hardware", OBJECT_TO_JSVAL(obj), NULL, NULL, JSPROP_ENUMERATE | JSPROP_READONLY)) { return 0; } hardware->decoder = HOLD_BACK_COUNT(decoder); if (parent == decoder->window_object) decoder->hardware = obj; return obj; } #else #ifdef OSF1 static int dumbcc = 0; /* The 3.2 compiler aborts when there's "nothing to compile", and 4.0 warns. This fixes both problems. */ #endif #endif