[net.micro.pc] DOS 2.0 Function Call 4BH

SHOSTAK%SRI-CSL@sri-unix.UUCP (08/18/83)

I have heard that, in fact, this function does not work properly, and
requires a patch to command.com to make it work.  I have also heard
that Microsoft is aware of the problem and has developed a fix.
Perhaps the Microsoft people who log in on this net could give details
about this (and fixes they have developed for other DOS 2.0 bugs).

b-davis@utah-cs@sri-unix.UUCP (08/24/83)

From:  b-davis@utah-cs (Brad Davis)

This little tidbit works.  If a longer explaination is needed I will
be glad to write one up.  Appendix F and Chapter 10 are helpful
(somewhat).  Remember to use the /C option of COMMAND.COM.

					Brad Davis
					b-davis@utah-cs

PSP     STRUC
INTVECT DW      ?
TOM     DW      ?
RES1    DB      ?
DOSLONG DB      5 DUP (?)
TERMINA DD      ?
CTRLBRK DD      ?
CRITERR DD      ?
DOS1    DB      22 DUP (?)
ENVIRO  DW      ?
DOS2    DB      46 DUP (?)
FPA1    DB      16 DUP (?)
FPA2    DB      20 DUP (?)
UPA     DB      128 DUP (?)
PSP     ENDS

EXECDEF STRUC
NENVIRO DW
COMMND  DW      2 DUP (0)
FCB5CH  DW      2 DUP (0)
FCB6CH  DW      2 DUP (0)
EXECDEF ENDS

MEXECOMM        MACRO
        LOCAL   EXECBLK,ERR1,SPSAVE,SSSAVE
	; point DS:DX at command.com parameter list
EXECOMM:
        PUSH    AX
        PUSH    BX
        PUSH    CX
        PUSH    DX
        PUSH    SI
        PUSH    DI
        PUSH    BP
        PUSH    DS
        PUSH    ES
        MOV     SPSAVE,SP
        MOV     SSSAVE,SS
	; set up the parameter block
        MOV     EXECBLK.NENVIRO,0
        MOV     EXECBLK.COMMND[0],DX
        MOV     EXECBLK.COMMND[2],DS
        MOV     AX,CS
        MOV     ES,AX
        MOV     BX,OFFSET EXECBLK
        XOR     BP,BP
	; point DS:DX at the COMSPEC parameter (assume it is first)
        MOV     AX,[BP].ENVIRO
        MOV     DS,AX
        MOV     DX,8
        MOV     AH,4BH
        MOV     AL,0
        INT     21H
        MOV     SS,CS:SSSAVE
        MOV     SP,CS:SPSAVE
        POP     ES
        POP     DS
        POP     BP
        POP     DI
        POP     SI
        POP     DX
        POP     CX
        POP     BX
        POP     AX
        JC      ERR1
        RET
ERR1:   JMP     ERROR
        EVEN
EXECBLK EXECDEF <>
SPSAVE  DW
SSSAVE  DW
        ENDM