pjs/lib/libmocha/lm_hardw.c

154 строки
4.0 KiB
C

/* -*- 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
*/
#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;
}