Date: Tue, 11 Mar 1997 23:17:24 +0200 (IST) From: Eli Zaretskii To: Shawn Hargreaves cc: djgpp AT delorie DOT com Subject: Re: 'Smart' far pointers in C++ In-Reply-To: <1vA+sDATpBJzEwIJ@talula.demon.co.uk> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII On Mon, 10 Mar 1997, Shawn Hargreaves wrote: > It just occured to me that in C++ it would be possible to write a wrapper > class for the routines in , that makes them behave very much > like normal C pointers. So I tried it, and it does indeed work! Anthony Appleyard has posted something along these same lines a few months ago. (Great minds think alike ;-) > Example of drawing random pixels to the VGA screen: > > farptrb ptr(0xA0000); > > _farsetsel(_dos_ds); > > for (int y=0; y<200; y++) > for (int x=0; x<320; x++) > ptr[x+y*320] = rand(); Why not make the size of the memory region you want to access be a parameter of the class as well? That way, you could have the constructor allocate a selector for the appropriate memory region using either the `__dpmi_get_descriptor' or `__dpmi_segment_to_descriptor' library functions (see section 18.4 of the FAQ for details) and avoid the need to require the user to call `_farsetsel'. I think this requirement is not-so-C++ way of doing things, and that users will forget it and crash. Also, I would like to point out that using `_dos_ds' is a bit dangerous in the current DJGPP setup and should be kept at bare minimum, because that selector has a 4GB limit, which effectively disables memory protection when you use it. Anyone who cares about scrogging his system should IMHO patch the startup code in his/her library to change the limit to 1MB.