Mail Archives: djgpp/1996/10/23/09:09:36
Cesar Scarpini Rabak (csrabak AT dce03 DOT ipt DOT br) wrote:
: >char *OemStringPtr PACKED;
This pointer is a pointer to memory in DOS, usually in the VGA BIOS at
c000 something. The reason the program crashes when you try to print this
is because it doesn't like you fiddling with dosmemory directly. (Without
telling it)
I used this workaround, ( I'm sure there are better ways)
First you calculate the linear address of the first character in the
string. Your OemSStringPtr will be 4 bytes, first two are segment , second
two are offset. Linear address = SEg * 16 + offset.
Then use the dosmemget(linearaddres, 1, &Placetoputchar) to get the value
of the first character. Increment the linear address, and get next until
the '\0' character is read.
Another thing is that some cards might piggyback this string, (and also
the supported mode list) into the unused area of the VESAINFO block. In
that case you have to figure out where the __tb (I'm assuming you are
using the transfer buffer for getting the VESAINFO block), and find the
values in that position.
I have some code doing this, and I can mail it to you if you still can't
figure this thing out.
-- Olav Kindt | email:
oak9755 AT silver DOT sdsmt DOT edu
737 E. Anamosa Street #103 | xedb_oak AT debet DOT nhh DOT no
Rapid City SD-57701 | MAIL me man.......
- Raw text -