delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp-workers/2009/06/19/17:35:47

X-Authentication-Warning: delorie.com: mail set sender to djgpp-workers-bounces using -f
X-Recipient: djgpp-workers AT delorie DOT com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=gmail.com; s=gamma;
h=domainkey-signature:mime-version:received:in-reply-to:references
:date:message-id:subject:from:to:content-type
:content-transfer-encoding;
bh=HtVZ6HwHa2EWG14yfXa7KhuLhiwfJG+kFUhGY3sXrOs=;
b=jjppSGaOQwXh9q2dZDoO9emT8jv80957brcwwAAw04P/EgplYY8TS/JnRg7L75Cy3l
v6UrMf/LLnfKDtOUXOO0mbX+bUZEfzF0cOBJkX23mjwplwHtDDTP/dv6iB8SfbPFRVvB
BK7FKGTBLfUeEEcbi9AsqiNSrS9vJlESm/4vQ=
DomainKey-Signature: a=rsa-sha1; c=nofws;
d=gmail.com; s=gamma;
h=mime-version:in-reply-to:references:date:message-id:subject:from:to
:content-type:content-transfer-encoding;
b=TOBFGfwH3QJAsQZOG9DxNJgoGHpsd77TSd0GidFmCsTeboilmfLDKgnvHeOTfQUjDQ
utppO9T7zh2JeMxavOAzRQkyHbtc/CXQ8c+FCGtcqrAY2neFVJru+g7nJzoS5CrIRtP8
N84c5CU6bOiiF7DUGNyWYc25gNX2yZEMOwopI=
MIME-Version: 1.0
In-Reply-To: <93c172b50906121929u6a0a9c7aw497732cb5c42718d@mail.gmail.com>
References: <93c172b50906121929u6a0a9c7aw497732cb5c42718d AT mail DOT gmail DOT com>
Date: Fri, 19 Jun 2009 15:44:50 -0500
Message-ID: <93c172b50906191344i1c6aeacdk8f3c1f2eff6251@mail.gmail.com>
Subject: Fwd: patch: dosexec.c (from DJLSR203.ZIP) -- adds DR-DOS int 2Fh,
2707h
From: Rugxulo <rugxulo AT gmail DOT com>
To: djgpp-workers AT delorie DOT com
Reply-To: djgpp-workers AT delorie DOT com
Errors-To: nobody AT delorie DOT com
X-Mailing-List: djgpp-workers AT delorie DOT com
X-Unsubscribes-To: listserv AT delorie DOT com

Here's a patch I whipped up recently.


---------- Forwarded message ----------
From: Rugxulo <rugxulo AT gmail DOT com>
Date: Fri, Jun 12, 2009 at 9:29 PM
Subject: patch: dosexec.c (from DJLSR203.ZIP) -- adds DR-DOS int 2Fh, 2707h


Hey guys,
=A0 I don't use DR-DOS multitasking often (mainly because it's
unfamiliar, non-portable, and somewhat unstable in certain
circumstances). Also, almost nothing supports its API, so it's hard to
find what the heck to do with it.

Anyways, I've had an idea for trying this for a few weeks, and it
*seems* to work correctly in my tests, but I would appreciate more
testing if any of you already have the (admittedly non-free in any
sense) DR-DOS 6.0 or newer.

This patch basically changes DOSEXEC.C (from DJLSR203.ZIP) to
optionally use the TaskMax API (int 2Fh, 27xxh) to start a new task or
process if available (else falls back to normal int 21h, 4B00h).

http://www.delorie.com/djgpp/doc/rbinter/ix/2F/27.html

http://www.delorie.com/djgpp/doc/rbinter/id/06/47.html =A0 =A0 =A0 =A0(2700=
h
-- installation check)
http://www.delorie.com/djgpp/doc/rbinter/id/13/47.html =A0 =A0 =A0 =A0(2707=
h
-- create new task)

http://gd.tuwien.ac.at/pc/dos/djgpp/current/v2/djlsr203.zip =A0 =A0(2.03p2
-- libc sources, including DOSEXEC.C)
http://rugxulo.googlepages.com/djlsr203.tbz

The example program I'm using is the TDE 5.1v text editor (LShift +
LAlt + E -> type what you want to run).

http://adoxa.110mb.com/tde/index.html
ftp://ftp.sac.sk/pub/sac/utiltext/tde51vs.zip

http://rugxulo.googlepages.com/tde51v.txt =A0 =A0 =A0(simple .BAT to compil=
e
it, but first type "tde51v /gcc -O2 dosexec.c" else it uses default
libc version)

Heck, if you don't have DJGPP set up already (uh???), you can use this
one-floppy version (full sources at base site):

http://rugxulo.googlepages.com/djgpp203.7z =A0 =A0 =A0 =A0 =A0 =A0(GCC 2.95=
.3 +
DJGPP 2.03p2 + BNU 2.16.1)
http://rugxulo.googlepages.com/7zdec.zip =A0 =A0 =A0 =A0 =A0 =A0 =A0 (small=
 unpacker
from LZMA SDK w/ srcs)

And here's the patch:

EDIT: =A0 Bah, it might be easier to just upload a test .EXE build for
you, but that won't help you debug it (not that I expect you to, just
saying, if you *wanted* to, heh).

http://rugxulo.googlepages.com/tdep-dr.zip =A0 (TDEP.EXE [UPX'd],
DOSEXEC.C, DOSEXEC.DIF, DOSEXEC.O, TDE51V.BAT, README.TXT)

---------------------------------------------------------------------------=
-----------------------------------
--- dosexec.c~ =A02001-12-11 01:42:08 +0000
+++ dosexec.c =A0 2009-06-12 20:09:56 +0000
@@ -327,12 +327,33 @@
=A0 parm.fcb2_off =3D fcb2_la & 15;
=A0 dosmemput(&parm, sizeof(parm), parm_la);

- =A0r.x.ax =3D 0x4b00;
+/* ******************************************************************** */
+
+ =A0r.x.ax =3D 0x2700; =A0 =A0 =A0 =A0 =A0/* DR-DOS 6.x+ -- check for Task=
Max / TaskMgr */
+ =A0__dpmi_int(0x2F, &r);
+
=A0 r.x.ds =3D program_la / 16;
=A0 r.x.dx =3D program_la & 15;
=A0 r.x.es =3D parm_la / 16;
=A0 r.x.bx =3D parm_la & 15;
+
+ =A0if (r.x.ax & 0xFF =3D=3D 0xFF) { =A0 =A0 /* if TaskMax / TaskMgr insta=
lled ... */
+
+ =A0 =A0r.x.ax =3D 0x2707; =A0 =A0 =A0 =A0/* DR-DOS 6.x+ -- start new back=
ground task =A0*/
+ =A0 =A0r.x.cx =3D 91; =A0 =A0 =A0 =A0 =A0 =A0/* ticks until switch back (=
=3D=3D 5 secs.) =A0 =A0 =A0*/
+ =A0 =A0__dpmi_int(0x2F, &r);
+
+ =A0}
+
+ =A0else { =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0/* normal DOS shell */
+
+ =A0 =A0r.x.ax =3D 0x4b00; =A0 =A0 =A0 =A0/* DOS execute program */
=A0 __dpmi_int(0x21, &r);
+
+ =A0}
+
+/* ******************************************************************** */
+
=A0#if 0
=A0 if (tbuf_selector)
=A0 =A0 __dpmi_free_dos_memory (tbuf_selector);

---------------------------------------------------------------------------=
-----------------

- Raw text -


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