Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2001-10

Some questions on (GO32V2) DOS Unit and GO32 Unit

2 messages · 2 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Aitor Santamaria Merino

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

Reply by email

Jonas Maebe
to Aitor Santamaria Merino
Aitor Santamaria Merino wrote
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

Have a look at the documentation for global_dos_alloc(), global_dos_free(), dosmemget() and dosmemput() (all in the go32 unit).

Jonas

Reply by email