Jqt doesn't use 11!:x because it can call j.dll (libj.so) directly. Each value of x in 11!:x is exposed as a c function in the frontend. If your frontend is implemented in c/c++, then you can do the same without using 11!:x.
However jandroid uses 11!:x interface because libj is C while jandroid is written in java. The interface between java and C needs a jni wrapper, therefore it is more convenient to reduce the number of interface calls by using 11!:x callback. In the prototype of Jwd, the pres the pointer of of result A (pointer to an AD structure), typically the AD structure is allocated by the frontend using Jga api (see jlib.h). You need not bother with the AC field. The AR (rank) contains other information in its high bits so that you must mask it to the lowest 7 bits only (though it seems safe enough to mask the lowest 8 bits, Henry should know better here). You can browse the jandroid repository and also the io.c and andjnative.c in jsource repository. On Sun, 16 Apr 2023 at 6:36 AM Michal Wallace <michal.wall...@gmail.com> wrote: > Hrm. That does help a little bit. There's definitely still something called > JWd defined in JLib. > > Here is what I know so far: > (actually more than when I started typing this, so... I'll probably move > this to the wiki at some point.) > > When you write a J frontend, you have to call a function called JSM > (session manager) > and you pass in the addresses of four callback functions that your frontend > implements: > > JWr -> session calls this to output to whatever "terminal" you set up > JWd -> this window driver thing. > JRd -> session calls this when it needs to read a line of input > ??? -> something reserved for future use? > > JWd does still seem to be hooked up to 11!:x (weird to see that called x > instead of n!) > > The signature looks like this: > > int _stdcall Jwd(JS jt, int x, A parg, A* pres, C* loc); > -- https://github.com/jsoftware/jsource/blob/master/jsrc/jlib.h#L111 > > The arguments seem to be: > > jt -> address of j session object > x -> the 'n' in 11!:n > parg -> the y argument to (11!n) (a pointer to a J array) > pres -> the result array (you modify this to put your return value here) > loc -> a locale name (?) > > There is an example J frontend here: > > https://github.com/jsoftware/jsource/blob/master/jsrc/jfex.c > > It has this comment for its implementation of Jwd (which is missing the loc > parameter): > > // J calls for 11!:x y - demonstrates all features of jwdw and jwdp > // pa is y and result array (if any) is returned in pz > // return pz > // 0 - MTM i.0 0 > // -1 A - A result > // -2 A - A is pairs of null terminated strings for event table > // n - EVDOMAIN etc > > > The 'parg' argument has the following fields, which I am expecting to match > the structure defined here: > > https://www.jsoftware.com/ioj/iojNoun.htm > > k -> "offset of ravel with respect to byte 0 of the array" > f -> a flag of some sort > m -> "maximum number of bytes in ravel" > t -> the type > c -> reference count > n -> the length of the data > r -> rank > s -> pointers to shape and value > > My implementation of Jwd just prints out the arguments... > > JWd(x:2000, a:[k: 64 f: 0 m: 117321808 t: 2 c: $8000000000000001 n: 5 r: > $BAADF00D062E0001]) > > I guess really my main problem is I don't understand how to interpret the > "rank" and "reference count" fields. > I'd expect both of these to be small positive integers, like what I see in > the ioj. > > Without the rank, I don't know how to parse the shape and value. > > Hrm. I guess technically I know from the docs that all (11!:n) are rank 1, > so maybe I can just ignore that field? > > I will investigate further. > > > On Sat, Apr 15, 2023 at 5:01 PM Raul Miller <rauldmil...@gmail.com> wrote: > > > Jwd sounds like version 6 of J. This predates Jqt. > > > > There's some docs at > > > https://www.jsoftware.com/docs/help602/user/win_driver_cmd_ref_overview.htm > > > > I hope this helps, > > > > -- > > Raul > > > > On Sat, Apr 15, 2023 at 4:57 PM Michal Wallace <michal.wall...@gmail.com > > > > wrote: > > > > > > Hey all, > > > > > > I've been working on JPrez again -- a console-based presentation tool > > > that can record and play back interactions with a J REPL. > > > > > > It also lets you specify text to be recorded for voice overs to narrate > > the > > > interaction (for making videos), and over the past week I've embedded > > > JPrez inside a windows binary that looks like a normal text console but > > > can peek inside JPrez and actually let me record and play audio for > > > the individual voice over lines. > > > > > > However, right now I'm doing everything from the host application. It > > polls > > > Jprez to see what's on the screen and what the current line of text is > > > (jprez suggests a filename for a corresponding wav file). > > > > > > That all works fine for recording one line at a time, but if I want to > > > actually > > > play the presentation, I'd much rather have J drive the interaction. > > > > > > I basically already have a J front end, but I don't know what to do > with > > > Jwd, > > > or how to use it from the J side. I've picked up that it's using 11!:n > > > under the > > > hood, but I haven't found much information about how it's meant to be > > used. > > > > > > Do any docs exist? > > > > > > Where should I look in the jsource and jQt code bases to find examples? > > > > > > Thanks! > > > > > > -Michal > > > ---------------------------------------------------------------------- > > > For information about J forums see http://www.jsoftware.com/forums.htm > > ---------------------------------------------------------------------- > > For information about J forums see http://www.jsoftware.com/forums.htm > > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm