annotate dwt/internal/c/callback.d @ 11:a329f9c3d66d

Ported dwt.internal.cocoa.SWT* again
author Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
date Fri, 22 Aug 2008 15:39:51 +0200
parents 8b48be5454ce
children f565d3a95c0a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
1 /*******************************************************************************
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
2 * Copyright (c) 2000, 2007 IBM Corporation and others.
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
7 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
8 * Contributors:
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
10 *
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
11 * Port to the D Programming language:
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
12 * Jacob Carlborg <jacob.carlborg@gmail.com>
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
13 *******************************************************************************/
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
14 module dwt.internal.c.callback;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
15
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
16 /**
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
17 * Callback implementation.
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
18 */
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
19
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
20 import tango.stdc.string;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
21
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
22 import dwt.dwthelper.utils;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
23 import dwt.internal.Callback;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
24
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
25 /* Header */
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
26
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
27 const bool REDUCED_CALLBACKS = false;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
28 alias size_t SWT_PTR;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
29
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
30 version (Win32)
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
31 {
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
32 import tango.sys.win32.UserGdi;
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
33 import tango.sys.win32.Types;
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
34
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
35 alias LRESULT RETURN_TYPE;
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
36 }
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
37
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
38 else version (Win32_WCE)
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
39 {
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
40 import tango.sys.win32.UserGdi;
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
41 import tango.sys.win32.Types;
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
42
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
43 alias LRESULT RETURN_TYPE;
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
44 }
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
45
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
46 else
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
47 alias SWT_PTR RETURN_TYPE;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
48
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
49 version (X86)
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
50 const bool USE_ASSEMBLER = true;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
51
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
52 else
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
53 const bool USE_ASSEMBLER = true;
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
54
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
55 static if (REDUCED_CALLBACKS)
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
56 const int MAX_CALLBACKS = 16;
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
57
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
58 else static if (USE_ASSEMBLER)
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
59 const int MAX_CALLBACKS = 256;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
60
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
61 else
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
62 const int MAX_CALLBACKS = 128;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
63
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
64 const int MAX_ARGS = 12;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
65
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
66 struct CALLBACK_DATA
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
67 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
68 Callback callback;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
69 jmethodID methodID;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
70 Object object;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
71 bool isStatic;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
72 bool isArrayBased;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
73 int argCount;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
74 SWT_PTR errorResult;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
75 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
76
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
77 /* Implementation */
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
78
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
79
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
80 /* --------------- callback globals ----------------- */
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
81
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
82 private
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
83 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
84 CALLBACK_DATA callbackData[MAX_CALLBACKS];
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
85 int callbackEnabled = 1;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
86 int callbackEntryCount = 0;
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
87 bool initialized = 0;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
88
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
89 debug
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
90 int counter = 0;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
91 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
92
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
93 static if (USE_ASSEMBLER)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
94 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
95 version (Win32){}
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
96 else version (Win32_WCE){}
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
97 else
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
98 import tango.stdc.posix.sys.mman;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
99
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
100 private ubyte* callbackCode = null;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
101 const int CALLBACK_THUNK_SIZE = 64;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
102 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
103
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
104 SWT_PTR bind (Callback callbackObject, Object object, String method, String signature, int argCount, bool isStatic, bool isArrayBased, SWT_PTR errorResult)
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
105 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
106 int i;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
107 jmethodID mid = null;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
108 jclass javaClass = that;
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
109 string methodString = null;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
110 string sigString = null;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
111
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
112 if (!initialized)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
113 {
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
114 memset(&callbackData, 0, callbackData.sizeof);
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
115 initialized = true;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
116 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
117
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
118 if (method)
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
119 methodString = method;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
120
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
121 if (signature)
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
122 sigString = signature;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
123
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
124 if (object && methodString && sigString)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
125 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
126 if (isStatic)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
127 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
128 mid = (*env).GetStaticMethodID(env, object, methodString, sigString);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
129 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
130 else
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
131 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
132 javaClass = (*env).GetObjectClass(env, object);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
133 mid = (*env).GetMethodID(env, javaClass, methodString, sigString);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
134 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
135 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
136
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
137 if (mid == 0)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
138 goto fail;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
139
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
140 for (i = 0; i < MAX_CALLBACKS; i++)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
141 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
142 if (!callbackData[i].callback)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
143 {
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
144 if ((callbackData[i].callback = callbackObject) == null)
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
145 goto fail;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
146
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
147 if ((callbackData[i].object = object) == null)
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
148 goto fail;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
149
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
150 callbackData[i].isStatic = isStatic;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
151 callbackData[i].isArrayBased = isArrayBased;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
152 callbackData[i].argCount = argCount;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
153 callbackData[i].errorResult = errorResult;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
154 callbackData[i].methodID = mid;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
155
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
156 static if (!USE_ASSEMBLER)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
157 return cast(SWT_PTR) fnx_array[argCount][i];
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
158
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
159 else
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
160 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
161 int j = 0, k, pad = 0;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
162 ubyte* code;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
163
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
164 if (callbackCode == null)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
165 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
166 version (Win32)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
167 {
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
168 callbackCode = VirtualAlloc(null, CALLBACK_THUNK_SIZE * MAX_CALLBACKS, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
169 if (callbackCode == null)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
170 return 0;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
171 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
172
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
173 else version (Win32_WCE)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
174 {
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
175 callbackCode = VirtualAlloc(null, CALLBACK_THUNK_SIZE * MAX_CALLBACKS, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
176 if (callbackCode == null)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
177 return 0;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
178 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
179
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
180 else
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
181 {
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
182 callbackCode = mmap(null, CALLBACK_THUNK_SIZE * MAX_CALLBACKS, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
183 if (callbackCode == MAP_FAILED)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
184 return 0;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
185 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
186 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
187 code = cast(ubyte*) (callbackCode + (i * CALLBACK_THUNK_SIZE));
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
188
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
189 //PUSH EBP - 1 byte
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
190 code[j++] = 0x55;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
191
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
192 //MOV EBP,ESP - 2 bytes
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
193 code[j++] = 0x8b;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
194 code[j++] = 0xec;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
195
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
196 version (darwin)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
197 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
198 /* darwin calling conventions require that the stack be aligned on a 16-byte boundary. */
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
199 k = (argCount + 3) * SWT_PTR.sizeof;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
200 pad = ((k + 15) & ~15) - k;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
201 if (pad > 0)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
202 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
203 //SUB ESP,pad - 3 bytes
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
204 code[j++] = 0x83;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
205 code[j++] = 0xec;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
206 code[j++] = pad;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
207 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
208 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
209
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
210 // 3*argCount bytes
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
211 for (k = (argCount + 1) * SWT_PTR.sizeof; k >= SWT_PTR.sizeof * 2; k -= SWT_PTR.sizeof)
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
212 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
213 //PUSH SS:[EBP+k]
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
214 code[j++] = 0xff;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
215 code[j++] = 0x75;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
216 code[j++] = k;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
217 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
218
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
219 if (i > 127)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
220 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
221 //PUSH i - 5 bytes
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
222 code[j++] = 0x68;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
223 code[j++] = ((i >> 0) & 0xFF);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
224 code[j++] = ((i >> 8) & 0xFF);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
225 code[j++] = ((i >> 16) & 0xFF);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
226 code[j++] = ((i >> 24) & 0xFF);
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
227 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
228 else
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
229 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
230 //PUSH i - 2 bytes
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
231 code[j++] = 0x6a;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
232 code[j++] = i;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
233 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
234
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
235 //MOV EAX callback - 1 + SWT_PTR.sizeof bytes
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
236 code[j++] = 0xb8;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
237 (cast(SWT_PTR*) &code[j])[0] = cast(SWT_PTR) &callback;
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
238 j += SWT_PTR.sizeof;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
239
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
240 //CALL EAX - 2 bytes
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
241 code[j++] = 0xff;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
242 code[j++] = 0xd0;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
243
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
244 //ADD ESP,(argCount + 1) * SWT_PTR.sizeof - 3 bytes
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
245 code[j++] = 0x83;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
246 code[j++] = 0xc4;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
247
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
248 version (darwin)
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
249 code[j++] = cast(ubyte) (pad + ((argCount + 1) * SWT_PTR.sizeof));
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
250 else
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
251 code[j++] = cast(ubyte) ((argCount + 1) * SWT_PTR.sizeof);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
252
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
253 //POP EBP - 1 byte
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
254 code[j++] = 0x5d;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
255
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
256 version (Win32)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
257 {
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
258 // RETN argCount * SWT_PTR.sizeof - 3 bytes
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
259 code[j++] = 0xc2;
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
260 code[j++] = cast(ubyte) (argCount * SWT_PTR.sizeof);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
261 code[j++] = 0x00;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
262 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
263
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
264 else version (Win32_WCE)
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
265 {
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
266 // RETN argCount * SWT_PTR.sizeof - 3 bytes
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
267 code[j++] = 0xc2;
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
268 code[j++] = cast(ubyte) (argCount * SWT_PTR.sizeof);
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
269 code[j++] = 0x00;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
270 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
271
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
272 else
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
273 {
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
274 // RETN - 1 byte
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
275 code[j++] = 0xc3;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
276 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
277
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
278 if (j > CALLBACK_THUNK_SIZE)
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
279 throw new Error("Callback thunk overflow");
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
280
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
281 return cast(SWT_PTR) code;
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
282 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
283 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
284 }
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
285
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
286 fail:
1
8b48be5454ce The internal cocoa classes compile now
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 0
diff changeset
287 return 0;
0
380af2bdd8e5 Upload of whole dwt tree
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents:
diff changeset
288 }
11
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
289
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
290 void unbind (Callback callback)
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
291 {
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
292 int i;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
293 for (i=0; i<MAX_CALLBACKS; i++) {
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
294 if (callbackData[i].callback !is null && callbackData[i].callback == callback) {
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
295 if (callbackData[i].callback !is null) delete callbackData[i].callback;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
296 if (callbackData[i].object !is null) delete allbackData[i].object;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
297 memset(&callbackData[i], 0, CALLBACK_DATA.sizeof);
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
298 }
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
299 }
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
300 }
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
301
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
302 bool getEnabled ()
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
303 {
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
304 return callbackEnabled;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
305 }
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
306
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
307 int getEntryCount ()
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
308 {
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
309 return callbackEntryCount;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
310 }
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
311
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
312 void setEnabled (bool enable)
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
313 {
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
314 callbackEnabled = enable;
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
315 }
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
316
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
317 void reset ()
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
318 {
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
319 memset(cast(void*) &callbackData, 0, callbackData.sizeof);
a329f9c3d66d Ported dwt.internal.cocoa.SWT* again
Jacob Carlborg <doob@me.com> <jacob.carlborg@gmail.com>
parents: 1
diff changeset
320 }