| www.delorie.com/archives/browse.cgi | search |
| From: | "Michael Stewart" <mike AT reggin DOT freeserve DOT co DOT uk> |
| Newsgroups: | comp.os.msdos.djgpp |
| Subject: | Re: Selector code |
| Date: | Thu, 17 Jun 1999 11:21:58 +0100 |
| Organization: | (Posted via) Netcom Internet Ltd. |
| Message-ID: | <7kai08$f4d$1@taliesin.netcom.net.uk> |
| References: | <Pine DOT SUN DOT 3 DOT 91 DOT 990617102006 DOT 22717G-100000 AT is> <7kaeck$em5$1 AT taliesin DOT netcom DOT net DOT uk> |
| NNTP-Posting-Host: | hgty.capgemini.co.uk |
| X-Trace: | taliesin.netcom.net.uk 929614664 15501 194.42.240.2 (17 Jun 1999 10:17:44 GMT) |
| X-Complaints-To: | abuse AT corp DOT netcom DOT net DOT uk |
| NNTP-Posting-Date: | 17 Jun 1999 10:17:44 GMT |
| X-Newsreader: | Microsoft Outlook Express 4.72.3155.0 |
| X-MimeOLE: | Produced By Microsoft MimeOLE V4.72.3155.0 |
| Lines: | 31 |
| To: | djgpp AT delorie DOT com |
| DJ-Gateway: | from newsgroup comp.os.msdos.djgpp |
| Reply-To: | djgpp AT delorie DOT com |
Here's a modified version, hopefully with all the changes Eli suggested
implemented correctly.
I can't test this until tonight so this is untested.
int make_ds (int &ds, int base, int limit) {
unsigned char ds_data[8];
limit--;
/* Check for the limit being over 1MB */
if (limit > 1024 * 1024) limit |= 0xfff;
ds_data[5] = 0xf3;
ds_data[2] = base & 0xff;
ds_data[3] = base >> 8 & 0xff;
ds_data[4] = base >> 16 & 0xff;
ds_data[7] = base >> 24 & 0xff;
ds_data[0] = limit & 0xff;
ds_data[1] = limit >> 8 & 0xff;
ds_data[6] = limit >> 16 & 0x0f + 0x41;
if (limit > 64 * 1024) ds_data[6] += 0x80;
ds = __dpmi_allocate_ldt_descriptors (1);
return __dpmi_set_descriptor (ds, ds_data);
}
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |