aboutsummaryrefslogtreecommitdiff
path: root/portmidi/pm_java/pmjni
diff options
context:
space:
mode:
Diffstat (limited to 'portmidi/pm_java/pmjni')
-rw-r--r--portmidi/pm_java/pmjni/jportmidi_JportMidiApi.h293
-rw-r--r--portmidi/pm_java/pmjni/pmjni.c354
-rw-r--r--portmidi/pm_java/pmjni/pmjni.rc63
3 files changed, 710 insertions, 0 deletions
diff --git a/portmidi/pm_java/pmjni/jportmidi_JportMidiApi.h b/portmidi/pm_java/pmjni/jportmidi_JportMidiApi.h
new file mode 100644
index 0000000..2208be6
--- /dev/null
+++ b/portmidi/pm_java/pmjni/jportmidi_JportMidiApi.h
@@ -0,0 +1,293 @@
1/* DO NOT EDIT THIS FILE - it is machine generated */
2#include <jni.h>
3/* Header for class jportmidi_JPortMidiApi */
4
5#ifndef _Included_jportmidi_JPortMidiApi
6#define _Included_jportmidi_JPortMidiApi
7#ifdef __cplusplus
8extern "C" {
9#endif
10#undef jportmidi_JPortMidiApi_PM_FILT_ACTIVE
11#define jportmidi_JPortMidiApi_PM_FILT_ACTIVE 16384L
12#undef jportmidi_JPortMidiApi_PM_FILT_SYSEX
13#define jportmidi_JPortMidiApi_PM_FILT_SYSEX 1L
14#undef jportmidi_JPortMidiApi_PM_FILT_CLOCK
15#define jportmidi_JPortMidiApi_PM_FILT_CLOCK 256L
16#undef jportmidi_JPortMidiApi_PM_FILT_PLAY
17#define jportmidi_JPortMidiApi_PM_FILT_PLAY 7168L
18#undef jportmidi_JPortMidiApi_PM_FILT_TICK
19#define jportmidi_JPortMidiApi_PM_FILT_TICK 512L
20#undef jportmidi_JPortMidiApi_PM_FILT_FD
21#define jportmidi_JPortMidiApi_PM_FILT_FD 8192L
22#undef jportmidi_JPortMidiApi_PM_FILT_UNDEFINED
23#define jportmidi_JPortMidiApi_PM_FILT_UNDEFINED 8192L
24#undef jportmidi_JPortMidiApi_PM_FILT_RESET
25#define jportmidi_JPortMidiApi_PM_FILT_RESET 32768L
26#undef jportmidi_JPortMidiApi_PM_FILT_REALTIME
27#define jportmidi_JPortMidiApi_PM_FILT_REALTIME 16641L
28#undef jportmidi_JPortMidiApi_PM_FILT_NOTE
29#define jportmidi_JPortMidiApi_PM_FILT_NOTE 50331648L
30#undef jportmidi_JPortMidiApi_PM_FILT_CHANNEL_AFTERTOUCH
31#define jportmidi_JPortMidiApi_PM_FILT_CHANNEL_AFTERTOUCH 536870912L
32#undef jportmidi_JPortMidiApi_PM_FILT_POLY_AFTERTOUCH
33#define jportmidi_JPortMidiApi_PM_FILT_POLY_AFTERTOUCH 67108864L
34#undef jportmidi_JPortMidiApi_PM_FILT_AFTERTOUCH
35#define jportmidi_JPortMidiApi_PM_FILT_AFTERTOUCH 603979776L
36#undef jportmidi_JPortMidiApi_PM_FILT_PROGRAM
37#define jportmidi_JPortMidiApi_PM_FILT_PROGRAM 268435456L
38#undef jportmidi_JPortMidiApi_PM_FILT_CONTROL
39#define jportmidi_JPortMidiApi_PM_FILT_CONTROL 134217728L
40#undef jportmidi_JPortMidiApi_PM_FILT_PITCHBEND
41#define jportmidi_JPortMidiApi_PM_FILT_PITCHBEND 1073741824L
42#undef jportmidi_JPortMidiApi_PM_FILT_MTC
43#define jportmidi_JPortMidiApi_PM_FILT_MTC 2L
44#undef jportmidi_JPortMidiApi_PM_FILT_SONG_POSITION
45#define jportmidi_JPortMidiApi_PM_FILT_SONG_POSITION 4L
46#undef jportmidi_JPortMidiApi_PM_FILT_SONG_SELECT
47#define jportmidi_JPortMidiApi_PM_FILT_SONG_SELECT 8L
48#undef jportmidi_JPortMidiApi_PM_FILT_TUNE
49#define jportmidi_JPortMidiApi_PM_FILT_TUNE 64L
50#undef jportmidi_JPortMidiApi_PM_FILT_SYSTEMCOMMON
51#define jportmidi_JPortMidiApi_PM_FILT_SYSTEMCOMMON 78L
52/*
53 * Class: jportmidi_JPortMidiApi
54 * Method: Pm_Initialize
55 * Signature: ()I
56 */
57JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Initialize
58 (JNIEnv *, jclass);
59
60/*
61 * Class: jportmidi_JPortMidiApi
62 * Method: Pm_Terminate
63 * Signature: ()I
64 */
65JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Terminate
66 (JNIEnv *, jclass);
67
68/*
69 * Class: jportmidi_JPortMidiApi
70 * Method: Pm_HasHostError
71 * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;)I
72 */
73JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1HasHostError
74 (JNIEnv *, jclass, jobject);
75
76/*
77 * Class: jportmidi_JPortMidiApi
78 * Method: Pm_GetErrorText
79 * Signature: (I)Ljava/lang/String;
80 */
81JNIEXPORT jstring JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetErrorText
82 (JNIEnv *, jclass, jint);
83
84/*
85 * Class: jportmidi_JPortMidiApi
86 * Method: Pm_GetHostErrorText
87 * Signature: ()Ljava/lang/String;
88 */
89JNIEXPORT jstring JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetHostErrorText
90 (JNIEnv *, jclass);
91
92/*
93 * Class: jportmidi_JPortMidiApi
94 * Method: Pm_CountDevices
95 * Signature: ()I
96 */
97JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1CountDevices
98 (JNIEnv *, jclass);
99
100/*
101 * Class: jportmidi_JPortMidiApi
102 * Method: Pm_GetDefaultInputDeviceID
103 * Signature: ()I
104 */
105JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDefaultInputDeviceID
106 (JNIEnv *, jclass);
107
108/*
109 * Class: jportmidi_JPortMidiApi
110 * Method: Pm_GetDefaultOutputDeviceID
111 * Signature: ()I
112 */
113JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDefaultOutputDeviceID
114 (JNIEnv *, jclass);
115
116/*
117 * Class: jportmidi_JPortMidiApi
118 * Method: Pm_GetDeviceInterf
119 * Signature: (I)Ljava/lang/String;
120 */
121JNIEXPORT jstring JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDeviceInterf
122 (JNIEnv *, jclass, jint);
123
124/*
125 * Class: jportmidi_JPortMidiApi
126 * Method: Pm_GetDeviceName
127 * Signature: (I)Ljava/lang/String;
128 */
129JNIEXPORT jstring JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDeviceName
130 (JNIEnv *, jclass, jint);
131
132/*
133 * Class: jportmidi_JPortMidiApi
134 * Method: Pm_GetDeviceInput
135 * Signature: (I)Z
136 */
137JNIEXPORT jboolean JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDeviceInput
138 (JNIEnv *, jclass, jint);
139
140/*
141 * Class: jportmidi_JPortMidiApi
142 * Method: Pm_GetDeviceOutput
143 * Signature: (I)Z
144 */
145JNIEXPORT jboolean JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDeviceOutput
146 (JNIEnv *, jclass, jint);
147
148/*
149 * Class: jportmidi_JPortMidiApi
150 * Method: Pm_OpenInput
151 * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;ILjava/lang/String;I)I
152 */
153JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1OpenInput
154 (JNIEnv *, jclass, jobject, jint, jstring, jint);
155
156/*
157 * Class: jportmidi_JPortMidiApi
158 * Method: Pm_OpenOutput
159 * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;ILjava/lang/String;II)I
160 */
161JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1OpenOutput
162 (JNIEnv *, jclass, jobject, jint, jstring, jint, jint);
163
164/*
165 * Class: jportmidi_JPortMidiApi
166 * Method: Pm_SetFilter
167 * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;I)I
168 */
169JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1SetFilter
170 (JNIEnv *, jclass, jobject, jint);
171
172/*
173 * Class: jportmidi_JPortMidiApi
174 * Method: Pm_SetChannelMask
175 * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;I)I
176 */
177JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1SetChannelMask
178 (JNIEnv *, jclass, jobject, jint);
179
180/*
181 * Class: jportmidi_JPortMidiApi
182 * Method: Pm_Abort
183 * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;)I
184 */
185JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Abort
186 (JNIEnv *, jclass, jobject);
187
188/*
189 * Class: jportmidi_JPortMidiApi
190 * Method: Pm_Close
191 * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;)I
192 */
193JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Close
194 (JNIEnv *, jclass, jobject);
195
196/*
197 * Class: jportmidi_JPortMidiApi
198 * Method: Pm_Read
199 * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;Ljportmidi/JPortMidiApi/PmEvent;)I
200 */
201JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Read
202 (JNIEnv *, jclass, jobject, jobject);
203
204/*
205 * Class: jportmidi_JPortMidiApi
206 * Method: Pm_Poll
207 * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;)I
208 */
209JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Poll
210 (JNIEnv *, jclass, jobject);
211
212/*
213 * Class: jportmidi_JPortMidiApi
214 * Method: Pm_Write
215 * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;Ljportmidi/JPortMidiApi/PmEvent;)I
216 */
217JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Write
218 (JNIEnv *, jclass, jobject, jobject);
219
220/*
221 * Class: jportmidi_JPortMidiApi
222 * Method: Pm_WriteShort
223 * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;II)I
224 */
225JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1WriteShort
226 (JNIEnv *, jclass, jobject, jint, jint);
227
228/*
229 * Class: jportmidi_JPortMidiApi
230 * Method: Pm_WriteSysEx
231 * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;I[B)I
232 */
233JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1WriteSysEx
234 (JNIEnv *, jclass, jobject, jint, jbyteArray);
235
236/*
237 * Class: jportmidi_JPortMidiApi
238 * Method: Pt_TimeStart
239 * Signature: (I)I
240 */
241JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pt_1TimeStart
242 (JNIEnv *, jclass, jint);
243
244/*
245 * Class: jportmidi_JPortMidiApi
246 * Method: Pt_TimeStop
247 * Signature: ()I
248 */
249JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pt_1TimeStop
250 (JNIEnv *, jclass);
251
252/*
253 * Class: jportmidi_JPortMidiApi
254 * Method: Pt_Time
255 * Signature: ()I
256 */
257JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pt_1Time
258 (JNIEnv *, jclass);
259
260/*
261 * Class: jportmidi_JPortMidiApi
262 * Method: Pt_TimeStarted
263 * Signature: ()Z
264 */
265JNIEXPORT jboolean JNICALL Java_jportmidi_JPortMidiApi_Pt_1TimeStarted
266 (JNIEnv *, jclass);
267
268#ifdef __cplusplus
269}
270#endif
271#endif
272/* Header for class jportmidi_JPortMidiApi_PmEvent */
273
274#ifndef _Included_jportmidi_JPortMidiApi_PmEvent
275#define _Included_jportmidi_JPortMidiApi_PmEvent
276#ifdef __cplusplus
277extern "C" {
278#endif
279#ifdef __cplusplus
280}
281#endif
282#endif
283/* Header for class jportmidi_JPortMidiApi_PortMidiStream */
284
285#ifndef _Included_jportmidi_JPortMidiApi_PortMidiStream
286#define _Included_jportmidi_JPortMidiApi_PortMidiStream
287#ifdef __cplusplus
288extern "C" {
289#endif
290#ifdef __cplusplus
291}
292#endif
293#endif
diff --git a/portmidi/pm_java/pmjni/pmjni.c b/portmidi/pm_java/pmjni/pmjni.c
new file mode 100644
index 0000000..c60cffb
--- /dev/null
+++ b/portmidi/pm_java/pmjni/pmjni.c
@@ -0,0 +1,354 @@
1#include "portmidi.h"
2#include "porttime.h"
3#include "jportmidi_JportMidiApi.h"
4#include <stdio.h>
5
6// these macros assume JNIEnv *env is declared and valid:
7//
8#define CLASS(c, obj) jclass c = (*env)->GetObjectClass(env, obj)
9#define ADDRESS_FID(fid, c) \
10 jfieldID fid = (*env)->GetFieldID(env, c, "address", "J")
11// Uses Java Long (64-bit) to make sure there is room to store a
12// pointer. Cast this to a C long (either 32 or 64 bit) to match
13// the size of a pointer. Finally cast int to pointer. All this
14// is supposed to avoid C compiler warnings and (worse) losing
15// address bits.
16#define PMSTREAM(obj, fid) ((PmStream *) (intptr_t) (*env)->GetLongField(env, obj, fid))
17// Cast stream to long to convert integer to pointer, then expand
18// integer to 64-bit jlong. This avoids compiler warnings.
19#define SET_PMSTREAM(obj, fid, stream) \
20 (*env)->SetLongField(env, obj, fid, (jlong) (intptr_t) stream)
21
22
23/*
24 * Method: Pm_Initialize
25 */
26JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Initialize
27 (JNIEnv *env, jclass cl)
28{
29 return Pm_Initialize();
30}
31
32
33/*
34 * Method: Pm_Terminate
35 */
36JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Terminate
37 (JNIEnv *env, jclass cl)
38{
39 return Pm_Terminate();
40}
41
42
43/*
44 * Method: Pm_HasHostError
45 */
46JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1HasHostError
47 (JNIEnv *env, jclass cl, jobject jstream)
48{
49 CLASS(c, jstream);
50 ADDRESS_FID(fid, c);
51 return Pm_HasHostError(PMSTREAM(jstream, fid));
52}
53
54
55/*
56 * Method: Pm_GetErrorText
57 */
58JNIEXPORT jstring JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetErrorText
59 (JNIEnv *env, jclass cl, jint i)
60{
61 return (*env)->NewStringUTF(env, Pm_GetErrorText(i));
62}
63
64
65/*
66 * Method: Pm_GetHostErrorText
67 */
68JNIEXPORT jstring JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetHostErrorText
69 (JNIEnv *env, jclass cl)
70{
71 char msg[PM_HOST_ERROR_MSG_LEN];
72 Pm_GetHostErrorText(msg, PM_HOST_ERROR_MSG_LEN);
73 return (*env)->NewStringUTF(env, msg);
74}
75
76
77/*
78 * Method: Pm_CountDevices
79 */
80JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1CountDevices
81 (JNIEnv *env, jclass cl)
82{
83 return Pm_CountDevices();
84}
85
86
87/*
88 * Method: Pm_GetDefaultInputDeviceID
89 */
90JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDefaultInputDeviceID
91 (JNIEnv *env, jclass cl)
92{
93 return Pm_GetDefaultInputDeviceID();
94}
95
96
97/*
98 * Method: Pm_GetDefaultOutputDeviceID
99 */
100JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDefaultOutputDeviceID
101 (JNIEnv *env, jclass cl)
102{
103 return Pm_GetDefaultOutputDeviceID();
104}
105
106
107/*
108 * Method: Pm_GetDeviceInterf
109 */
110JNIEXPORT jstring JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDeviceInterf
111 (JNIEnv *env, jclass cl, jint i)
112{
113 const PmDeviceInfo *info = Pm_GetDeviceInfo(i);
114 if (!info) return NULL;
115 return (*env)->NewStringUTF(env, info->interf);
116}
117
118
119/*
120 * Method: Pm_GetDeviceName
121 */
122JNIEXPORT jstring JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDeviceName
123 (JNIEnv *env, jclass cl, jint i)
124{
125 const PmDeviceInfo *info = Pm_GetDeviceInfo(i);
126 if (!info) return NULL;
127 return (*env)->NewStringUTF(env, info->name);
128}
129
130
131/*
132 * Method: Pm_GetDeviceInput
133 */
134JNIEXPORT jboolean JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDeviceInput
135 (JNIEnv *env, jclass cl, jint i)
136{
137 const PmDeviceInfo *info = Pm_GetDeviceInfo(i);
138 if (!info) return (jboolean) 0;
139 return (jboolean) info->input;
140}
141
142
143/*
144 * Method: Pm_GetDeviceOutput
145 */
146JNIEXPORT jboolean JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDeviceOutput
147 (JNIEnv *env, jclass cl, jint i)
148{
149 const PmDeviceInfo *info = Pm_GetDeviceInfo(i);
150 if (!info) return (jboolean) 0;
151 return (jboolean) info->output;
152}
153
154
155/*
156 * Method: Pm_OpenInput
157 */
158JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1OpenInput
159 (JNIEnv *env, jclass cl,
160 jobject jstream, jint index, jstring extras, jint bufsiz)
161{
162 PmError rslt;
163 PortMidiStream *stream;
164 CLASS(c, jstream);
165 ADDRESS_FID(fid, c);
166 rslt = Pm_OpenInput(&stream, index, NULL, bufsiz, NULL, NULL);
167 SET_PMSTREAM(jstream, fid, stream);
168 return rslt;
169}
170
171
172/*
173 * Method: Pm_OpenOutput
174 */
175JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1OpenOutput
176 (JNIEnv *env, jclass cl, jobject jstream, jint index, jstring extras,
177 jint bufsiz, jint latency)
178{
179 PmError rslt;
180 PortMidiStream *stream;
181 CLASS(c, jstream);
182 ADDRESS_FID(fid, c);
183 rslt = Pm_OpenOutput(&stream, index, NULL, bufsiz, NULL, NULL, latency);
184 SET_PMSTREAM(jstream, fid, stream);
185 return rslt;
186}
187
188
189/*
190 * Method: Pm_SetFilter
191 */
192JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1SetFilter
193 (JNIEnv *env, jclass cl, jobject jstream, jint filters)
194{
195 CLASS(c, jstream);
196 ADDRESS_FID(fid, c);
197 return Pm_SetFilter(PMSTREAM(jstream, fid), filters);
198}
199
200
201/*
202 * Method: Pm_SetChannelMask
203 */
204JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1SetChannelMask
205 (JNIEnv *env, jclass cl, jobject jstream, jint mask)
206{
207 CLASS(c, jstream);
208 ADDRESS_FID(fid, c);
209 return Pm_SetChannelMask(PMSTREAM(jstream, fid), mask);
210}
211
212
213/*
214 * Method: Pm_Abort
215 */
216JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Abort
217 (JNIEnv *env, jclass cl, jobject jstream)
218{
219 CLASS(c, jstream);
220 ADDRESS_FID(fid, c);
221 return Pm_Abort(PMSTREAM(jstream, fid));
222}
223
224
225/*
226 * Method: Pm_Close
227 */
228JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Close
229 (JNIEnv *env, jclass cl, jobject jstream)
230{
231 CLASS(c, jstream);
232 ADDRESS_FID(fid, c);
233 return Pm_Close(PMSTREAM(jstream, fid));
234}
235
236
237/*
238 * Method: Pm_Read
239 */
240JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Read
241 (JNIEnv *env, jclass cl, jobject jstream, jobject jpmevent)
242{
243 CLASS(jstream_class, jstream);
244 ADDRESS_FID(address_fid, jstream_class);
245 jclass jpmevent_class = (*env)->GetObjectClass(env, jpmevent);
246 jfieldID message_fid =
247 (*env)->GetFieldID(env, jpmevent_class, "message", "I");
248 jfieldID timestamp_fid =
249 (*env)->GetFieldID(env, jpmevent_class, "timestamp", "I");
250 PmEvent buffer;
251 PmError rslt = Pm_Read(PMSTREAM(jstream, address_fid), &buffer, 1);
252 (*env)->SetIntField(env, jpmevent, message_fid, buffer.message);
253 (*env)->SetIntField(env, jpmevent, timestamp_fid, buffer.timestamp);
254 return rslt;
255}
256
257
258/*
259 * Method: Pm_Poll
260 */
261JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Poll
262 (JNIEnv *env, jclass cl, jobject jstream)
263{
264 CLASS(c, jstream);
265 ADDRESS_FID(fid, c);
266 return Pm_Poll(PMSTREAM(jstream, fid));
267}
268
269
270/*
271 * Method: Pm_Write
272 */
273JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Write
274 (JNIEnv *env, jclass cl, jobject jstream, jobject jpmevent)
275{
276 CLASS(jstream_class, jstream);
277 ADDRESS_FID(address_fid, jstream_class);
278 jclass jpmevent_class = (*env)->GetObjectClass(env, jpmevent);
279 jfieldID message_fid =
280 (*env)->GetFieldID(env, jpmevent_class, "message", "I");
281 jfieldID timestamp_fid =
282 (*env)->GetFieldID(env, jpmevent_class, "timestamp", "I");
283 // note that we call WriteShort because it's simpler than constructing
284 // a buffer and passing it to Pm_Write
285 return Pm_WriteShort(PMSTREAM(jstream, address_fid),
286 (*env)->GetIntField(env, jpmevent, timestamp_fid),
287 (*env)->GetIntField(env, jpmevent, message_fid));
288}
289
290
291/*
292 * Method: Pm_WriteShort
293 */
294JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1WriteShort
295 (JNIEnv *env, jclass cl, jobject jstream, jint when, jint msg)
296{
297 CLASS(c, jstream);
298 ADDRESS_FID(fid, c);
299 return Pm_WriteShort(PMSTREAM(jstream, fid), when, msg);
300}
301
302
303/*
304 * Method: Pm_WriteSysEx
305 */
306JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1WriteSysEx
307 (JNIEnv *env, jclass cl, jobject jstream, jint when, jbyteArray jmsg)
308{
309 CLASS(c, jstream);
310 ADDRESS_FID(fid, c);
311 jbyte *bytes = (*env)->GetByteArrayElements(env, jmsg, 0);
312 PmError rslt = Pm_WriteSysEx(PMSTREAM(jstream, fid), when,
313 (unsigned char *) bytes);
314 (*env)->ReleaseByteArrayElements(env, jmsg, bytes, 0);
315 return rslt;
316}
317
318/*
319 * Method: Pt_TimeStart
320 */
321JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pt_1TimeStart
322 (JNIEnv *env, jclass c, jint resolution)
323{
324 return Pt_Start(resolution, NULL, NULL);
325}
326
327/*
328 * Method: Pt_TimeStop
329 */
330JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pt_1TimeStop
331 (JNIEnv *env, jclass c)
332 {
333 return Pt_Stop();
334 }
335
336/*
337 * Method: Pt_Time
338 */
339JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pt_1Time
340 (JNIEnv *env, jclass c)
341 {
342 return Pt_Time();
343 }
344
345/*
346 * Method: Pt_TimeStarted
347 */
348JNIEXPORT jboolean JNICALL Java_jportmidi_JPortMidiApi_Pt_1TimeStarted
349 (JNIEnv *env, jclass c)
350{
351 return Pt_Started();
352}
353
354
diff --git a/portmidi/pm_java/pmjni/pmjni.rc b/portmidi/pm_java/pmjni/pmjni.rc
new file mode 100644
index 0000000..1b7522b
--- /dev/null
+++ b/portmidi/pm_java/pmjni/pmjni.rc
@@ -0,0 +1,63 @@
1// Microsoft Visual C++ generated resource script.
2//
3#include "resource.h"
4
5#define APSTUDIO_READONLY_SYMBOLS
6/////////////////////////////////////////////////////////////////////////////
7//
8// Generated from the TEXTINCLUDE 2 resource.
9//
10#include "afxres.h"
11
12/////////////////////////////////////////////////////////////////////////////
13#undef APSTUDIO_READONLY_SYMBOLS
14
15/////////////////////////////////////////////////////////////////////////////
16// English (U.S.) resources
17
18#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
19#ifdef _WIN32
20LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
21#pragma code_page(1252)
22#endif //_WIN32
23
24#ifdef APSTUDIO_INVOKED
25/////////////////////////////////////////////////////////////////////////////
26//
27// TEXTINCLUDE
28//
29
301 TEXTINCLUDE
31BEGIN
32 "resource.h\0"
33END
34
352 TEXTINCLUDE
36BEGIN
37 "#include ""afxres.h""\r\n"
38 "\0"
39END
40
413 TEXTINCLUDE
42BEGIN
43 "\r\n"
44 "\0"
45END
46
47#endif // APSTUDIO_INVOKED
48
49#endif // English (U.S.) resources
50/////////////////////////////////////////////////////////////////////////////
51
52
53
54#ifndef APSTUDIO_INVOKED
55/////////////////////////////////////////////////////////////////////////////
56//
57// Generated from the TEXTINCLUDE 3 resource.
58//
59
60
61/////////////////////////////////////////////////////////////////////////////
62#endif // not APSTUDIO_INVOKED
63