delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1999/06/17/07:05:42

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);
}



- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019