Hi all,
I have come across a couple of questions on the implementation of DOS Unit for GO32V2.
1) First of all, I was investigating how could I call directly all those DOS calls that involve passing pchars as paramenters. I don't know how to copy some information to DOS world, then obtain a reg:ofs pointer to that data. I started by examinating the code for GO32V2's DOS unit, and in GetLongName, I came accross:
...
var
c : array[0..255] of char;
begin
move(p[1],c[0],length(p));
c[length(p)]:=#0;
copytodos(@c,length(p)+1);
dosregs.ax:=$7160;
dosregs.cx:=2;
dosregs.ds:=tb_segment;
dosregs.si:=tb_offset;
dosregs.es:=tb_segment;
dosregs.di:=tb_offset;
msdos(dosregs);
...The documentation about CopyToDOS says that this function copies some data to a previously allocated buffer in the DOS world. But this doesn't seem to say WHERE this buffer is. From the preceeding piece, can I assume that the variables tb_segment and tb_offset (that aren't defined elsewhere in DOS, but they are in GO32) are these addresses I am looking for? (in GO32.PP looks like this is true, but I wanted to check).
2) Second question: I incidentally came across the bottom most code, where GetIntVec, SetIntVec and Keep are NOT supported. Why is this? For GetIntVec and SetIntVec, it's user responsibility to ensure that the corresponding addresses are correct, so I wonder why this hasn't been implemented. And for Keep(), a function existing in DOS API, which are the difficulties (naive question) for doing so (with a DPMI application)? (perhaps segment descriptors could be messed up, or what?)
Thanks in advance,
Aitor
