@@ -72,6 +72,8 @@ char *RX_Spec =
72
72
"hndl1: command [{creates a handle}]\n"
73
73
"hndl2: command [{return handle's internal value as integer} hnd [handle!]]\n"
74
74
"vec0: command [{return vector size in bytes} v [vector!]]\n"
75
+ "vec1: command [{return vector size in bytes (from object)} o [object!]]\n"
76
+ "blk1: command [{print type ids of all values in a block} b [block!]]\n"
75
77
76
78
"a: b: c: h: none\n"
77
79
"xtest: does [\n"
@@ -99,6 +101,8 @@ char *RX_Spec =
99
101
"[c: do-commands [a: xarg0 b: xarg1 333 xobj1 system 'version] reduce [a b c]]\n"
100
102
"[cec0 [a: cec1 b: cec1 c: cec1] reduce [a b c]]\n"
101
103
"[vec0 make vector! [integer! 16 [1 2 3]]]\n"
104
+ "[vec1 object [v: make vector! [integer! 16 [1 2 3]]]]\n"
105
+ "[blk1 [read %img /at 1]]\n"
102
106
"][\n"
103
107
"print [{^[[7mtest:^[[0m} mold blk]\n"
104
108
"prin { } \n"
@@ -174,6 +178,8 @@ REBCNT Test_Async_Callback(REBSER *obj, REBCNT word)
174
178
RXIEXT int RX_Call (int cmd , RXIFRM * frm , void * ctx ) {
175
179
REBYTE * str ;
176
180
181
+ printf ("Context ptr: %08X\n" , ctx );
182
+
177
183
switch (cmd ) {
178
184
179
185
case 0 : //command [{return zero}]
@@ -246,7 +252,7 @@ RXIEXT int RX_Call(int cmd, RXIFRM *frm, void *ctx) {
246
252
}
247
253
break ;
248
254
249
- case 12 : //command [{return handle's internal value as integer} hnd [handle!]]"
255
+ case 12 : //command [{return handle's internal value as integer} hnd [handle!]]
250
256
{
251
257
i64 i = (i64 )RXA_HANDLE (frm , 1 );
252
258
RXA_INT64 (frm , 1 ) = i ;
@@ -261,6 +267,35 @@ RXIEXT int RX_Call(int cmd, RXIFRM *frm, void *ctx) {
261
267
RXA_INT64 (frm , 1 ) = vec -> info * vec -> tail ;
262
268
}
263
269
break ;
270
+ case 14 : //command [{return vector size in values (from object)} o [object!]]
271
+ {
272
+ RXIARG vec ;
273
+ REBCNT type = RL_GET_FIELD (RXA_OBJECT (frm , 1 ), RL_MAP_WORD ("v" ), & vec );
274
+ if (type == RXT_VECTOR ) {
275
+ REBSER * vecs = (REBSER * )vec .series ;
276
+ u16 * data = (u16 * )vecs -> data ;
277
+ printf ("data[0-2]: %i, %i, %i\n" , data [0 ], data [1 ], data [2 ]);
278
+ //RXA_TYPE(frm, 1) = RXT_INTEGER;
279
+ //RXA_INT64(frm, 1) = vecs->tail;
280
+ } else {
281
+ return RXR_FALSE ;
282
+ }
283
+ }
284
+ break ;
285
+ case 15 : //command [{print type ids of all values in a block} b [block!]]
286
+ {
287
+ REBSER * blk = RXA_SERIES (frm , 1 );
288
+ REBCNT n , type ;
289
+ RXIARG val ;
290
+ printf ("\nBlock with %i values:\n" , RL_SERIES (blk , RXI_SER_TAIL ));
291
+ for (n = 0 ; type = RL_GET_VALUE (blk , n , & val ); n ++ ) {
292
+ if (type == RXT_END ) break ;
293
+ printf ("\t%i -> %i\n" , n , type );
294
+ }
295
+ RL_MAP_WORDS (RXA_SERIES (frm , 1 ));
296
+ return RXR_UNSET ;
297
+ }
298
+ break ;
264
299
265
300
default :
266
301
return RXR_NO_COMMAND ;
0 commit comments