root/c/TrueFLfile/trunk/win/mm_jsapi.h

リビジョン 269, 8.5 kB (コミッタ: rch850, コミット時期: 4 年 前)

TrueFLfile JSFL extention for Windows that can handle a file name longer than 255 characters.

  • svn:keywords 属性の設定値: Id Date Author Rev URL
Line 
1 #ifndef _MM_JSAPI_H_
2 #define _MM_JSAPI_H_
3
4 /*****************************************************************************
5  * Public data types
6  ****************************************************************************/
7
8 typedef struct JSContext JSContext;
9 typedef struct JSObject JSObject;
10 typedef long jsval;
11 #ifndef JSBool
12 typedef long JSBool;
13 #endif
14
15 typedef JSBool (*JSNative)(JSContext *cx, JSObject *obj, unsigned int argc,
16     jsval *argv, jsval *rval);
17
18 /* Possible values for JSBool */
19 #define JS_TRUE 1
20 #define JS_FALSE 0
21
22
23
24 /*****************************************************************************
25  * Public functions
26  ****************************************************************************/
27
28 /* JSBool JS_DefineFunction(unsigned short *name, JSNative call, unsigned int nargs) */
29 #define JS_DefineFunction(n, c, a) \
30     (mmEnv.defineFunction ? (*(mmEnv.defineFunction))(mmEnv.libObj, n, c, a) \
31                           : JS_FALSE)
32
33 /* unsigned short *JS_ValueToString(JSContext *cx, jsval v, unsigned int *pLength) */
34 #define JS_ValueToString(c, v, l) \
35     (mmEnv.valueToString  ? (*(mmEnv.valueToString))(c, v, l) : (char *)0)
36
37 /* unsigned char *JS_ValueToBytes(JSContext *cx, jsval v, unsigned int *pLength) */
38 #define JS_ValueToBytes(c, v, l) \
39     (mmEnv.valueToBytes  ? (*(mmEnv.valueToBytes))(c, v, l) : (unsigned char *)0)
40
41 /* JSBool JS_ValueToInteger(JSContext *cx, jsval v, long *lp); */
42 #define JS_ValueToInteger(c, v, l) \
43     (mmEnv.valueToInteger ? (*(mmEnv.valueToInteger))(c, v, l) : JS_FALSE)
44
45 /* JSBool JS_ValueToDouble(JSContext *cx, jsval v, double *dp); */
46 #define JS_ValueToDouble(c, v, d) \
47     (mmEnv.valueToDouble  ? (*(mmEnv.valueToDouble))(c, v, d) : JS_FALSE)
48
49 /* JSBool JS_ValueToBoolean(JSContext *cx, jsval v, JSBool *bp); */
50 #define JS_ValueToBoolean(c, v, b) \
51     (mmEnv.valueToBoolean ? (*(mmEnv.valueToBoolean))(c, v, b) : JS_FALSE)
52
53 /* JSBool JS_ValueToObject(JSContext *cx, jsval v, JSObject **op); */
54 #define JS_ValueToObject(c, v, o) \
55     (mmEnv.valueToObject  ? (*(mmEnv.valueToObject))(c, v, o) : JS_FALSE)
56
57 /* JSBool JS_StringToValue(JSContext *cx, unsigned short *bytes, uint sz, jsval *vp); */
58 #define JS_StringToValue(c, b, s, v) \
59     (mmEnv.stringToValue  ? (*(mmEnv.stringToValue))(c, b, s, v) : JS_FALSE)
60
61 /* JSBool JS_BytesToValue(JSContext *cx, unsigned char *bytes, uint sz, jsval *vp); */
62 #define JS_BytesToValue(c, b, s, v) \
63     (mmEnv.bytesToValue  ? (*(mmEnv.bytesToValue))(c, b, s, v) : JS_FALSE)
64
65 /* JSBool JS_DoubleToValue(JSContext *cx, double dv, jsval *vp); */
66 #define JS_DoubleToValue(c, d, v) \
67     (mmEnv.doubleToValue  ? (*(mmEnv.doubleToValue))(c, d, v) : JS_FALSE)
68
69 /* jsval JS_IntegerToValue(long lv); */
70 #define JS_IntegerToValue(lv)       (((jsval)(lv) << 1) | 0x1)
71
72 /* jsval JS_BooleanToValue(JSBool bv); */
73 #define JS_BooleanToValue(bv)       (((jsval)(bv) << 3) | 0x6)
74
75 /* jsval JS_ObjectToValue(JSObject *obj); */
76 #define JS_ObjectToValue(ov)        ((jsval)(ov))
77
78 /* unsigned short *JS_ObjectType(JSObject *obj); */
79 #define JS_ObjectType(o) \
80     (mmEnv.objectType     ? (*(mmEnv.objectType))(o) : (char *)0)
81
82 /* JSObject *JS_NewArrayObject(JSContext *cx, unsigned int length, jsval *v) */
83 #define JS_NewArrayObject(c, l, v) \
84     (mmEnv.newArrayObject ? (*(mmEnv.newArrayObject))(c, l, v) : (JSObject *)0)
85
86 /* long JS_GetArrayLength(JSContext *cx, JSObject *obj) */
87 #define JS_GetArrayLength(c, o) \
88     (mmEnv.getArrayLength ? (*(mmEnv.getArrayLength))(c, o) : -1)
89
90 /* JSBool JS_GetElement(JSContext *cx, JSObject *obj, jsint idx, jsval *vp) */
91 #define JS_GetElement(c, o, i, v) \
92     (mmEnv.getElement     ? (*(mmEnv.getElement))(c, o, i, v) : JS_FALSE)
93
94 /* JSBool JS_SetElement(JSContext *cx, JSObject *obj, jsint idx, jsval *vp) */
95 #define JS_SetElement(c, o, i, v) \
96     (mmEnv.setElement     ? (*(mmEnv.setElement))(c, o, i, v) : JS_FALSE)
97
98 /* JSBool JS_ExecuteScript(JSContext *cx, JSObject *obj, unsigned short *script,
99  *     unsigned int sz, jsval *rval) */
100 #define JS_ExecuteScript(c, o, s, z, r) \
101     (mmEnv.executeScript  ? (*(mmEnv.executeScript))(c, o, s, z, (LPCTSTR)__FILE__, \
102         __LINE__, r) : JS_FALSE)
103
104 /* JSBool JS_ReportError(JSContext *cx, unsigned short *error, unsigned int sz) */
105 #define JS_ReportError(c, e, s) \
106     (mmEnv.reportError    ? (*(mmEnv.reportError))(c, e, s) : JS_FALSE)
107
108
109
110 /*****************************************************************************
111  * Private data types, macros, and globals
112  ****************************************************************************/
113
114 typedef struct {
115     JSObject *libObj;
116     JSBool (*defineFunction)(JSObject *libObj, unsigned short *name, JSNative call,
117         unsigned int nargs);
118     unsigned short *(*valueToString)(JSContext *cx, jsval v, unsigned int *pLength);
119     unsigned char *(*valueToBytes)(JSContext *cx, jsval v, unsigned int *pLength);
120     JSBool (*valueToInteger)(JSContext *cx, jsval v, long *lp);
121     JSBool (*valueToDouble)(JSContext *cx, jsval v, double *dp);
122     JSBool (*valueToBoolean)(JSContext *cx, jsval v, JSBool *bp);
123     JSBool (*valueToObject)(JSContext *cx, jsval v, JSObject **op);
124     JSBool (*stringToValue)(JSContext *cx, unsigned short *b, unsigned int sz, jsval *vp);
125     JSBool (*bytesToValue)(JSContext *cx, unsigned char *b, unsigned int sz, jsval *vp);
126     JSBool (*doubleToValue)(JSContext *cx, double dv, jsval *vp);
127     unsigned short *(*objectType)(JSObject *obj);
128     JSObject *(*newArrayObject)(JSContext *cx, unsigned int length, jsval *vp);
129     long (*getArrayLength)(JSContext *cx, JSObject *obj);
130     JSBool (*getElement)(JSContext *cx, JSObject *obj, unsigned int idx,
131         jsval *vp);
132     JSBool (*setElement)(JSContext *cx, JSObject *obj, unsigned int idx,
133         jsval *vp);
134     JSBool (*executeScript)(JSContext *cx, JSObject *obj, unsigned short *script,
135         unsigned int sz, unsigned short *file, unsigned int lineNum, jsval *rval);
136     JSBool (*reportError)(JSContext *cx, unsigned short *error, unsigned int sz);
137 } MM_Environment;
138
139 extern MM_Environment mmEnv;
140
141 // Declare the external entry point and linkage
142 #ifdef _WIN32
143 #   ifndef _MAC 
144     // Windows
145     __declspec( dllexport ) void MM_InitWrapper( MM_Environment *env, unsigned int envSize );
146 #   endif
147 #else
148     extern void MM_InitWrapper( MM_Environment *env, unsigned int envSize );
149 #endif
150
151
152 #define MM_STATE                                                                \
153     /* Definitions of global variables */                                       \
154     MM_Environment mmEnv;                                                       \
155                                                                                 \
156     void                                                                        \
157     MM_InitWrapper(MM_Environment *env, unsigned int envSize)                   \
158     {                                                                           \
159         extern void MM_Init();                                                  \
160                                                                                 \
161         char **envPtr = (char **)env;                                           \
162         char **mmPtr =  (char **)(&mmEnv);                                      \
163         char **envEnd = (char **)((char *)envPtr + envSize);                    \
164         char **mmEnd =  (char **)((char *)mmPtr  + sizeof(MM_Environment));     \
165                                                                                 \
166         /* Copy fields from env to mmEnv, one pointer at a time */              \
167         while (mmPtr < mmEnd && envPtr < envEnd)                                \
168             *mmPtr++ = *envPtr++;                                               \
169                                                                                 \
170       /* If env doesn't define all of mmEnv's fields, set extras to NULL */     \
171         while (mmPtr < mmEnd)                                                   \
172             *mmPtr++ = (char *)0;                                               \
173                                                                                 \
174       /* Call user's MM_Init function */                                        \
175       MM_Init();                                                                \
176     }                                                                           \
177                                                                              
178 #endif /* _MM_JSAPI_H_ */
179
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。