[fpc-pascal]Some questions on (GO32V2) DOS Unit and GO32 Unit

Aitor Santamaria Merino aitor.sm at wanadoo.es
Mon Oct 29 00:59:23 CET 2001


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




More information about the fpc-pascal mailing list