
; *******************************************************
; *							*
; *	Turbo Pascal Runtime Library Version 5.5	*
; *	Program Execution Routines			*
; *							*
; *	Copyright (C) 1988,89 Borland International	*
; *							*
; *******************************************************

	TITLE	EXEC

	LOCALS	@@

DATA	SEGMENT	WORD PUBLIC

	EXTRN	DosError:WORD,PrefixSeg:WORD

SaveSP		DW	?
SaveSS		DW	?

DATA	ENDS

CODE	SEGMENT	BYTE PUBLIC

	ASSUME	CS:CODE,DS:DATA

	PUBLIC	Exec

Exec		PROC	FAR

PathArg		EQU	DWORD PTR [BP+10]
CmdLineArg	EQU	DWORD PTR [BP+6]
FileSeg2	EQU	WORD PTR [BP-2]
FileOfs2	EQU	WORD PTR [BP-4]
FileSeg1	EQU	WORD PTR [BP-6]
FileOfs1	EQU	WORD PTR [BP-8]
CmdLineSeg	EQU	WORD PTR [BP-10]
CmdLineOfs	EQU	WORD PTR [BP-12]
EnvironSeg	EQU	WORD PTR [BP-14]
FileBlock1	EQU	BYTE PTR [BP-30]
FileBlock2	EQU	BYTE PTR [BP-46]
Path		EQU	BYTE PTR [BP-126]
CmdLine		EQU	BYTE PTR [BP-254]

	PUSH	BP
	MOV	BP,SP
	MOV	SaveSP,SP
	MOV	SaveSS,SS
	SUB	SP,254
	MOV	DS,PrefixSeg
	MOV	AX,WORD PTR DS:2CH
	MOV	EnvironSeg,AX
	PUSH	SS
	POP	ES
	CLD
	LDS	SI,PathArg
	LEA	DI,Path
	LODSB
	CMP	AL,79
	JB	@@1
	MOV	AL,79
@@1:	CBW
	XCHG	AX,CX
	REP	MOVSB
	XOR	AL,AL
	STOSB
	LDS	SI,CmdLineArg
	LEA	DI,CmdLine
	LODSB
	CMP	AL,126
	JB	@@2
	MOV	AL,126
@@2:	STOSB
	CBW
	XCHG	AX,CX
	REP	MOVSB
	MOV	AL,0DH
	STOSB
	PUSH	SS
	POP	DS
	LEA	SI,CmdLine
	MOV	CmdLineOfs,SI
	MOV	CmdLineSeg,DS
	INC	SI
	LEA	DI,FileBlock1
	MOV	FileOfs1,DI
	MOV	FileSeg1,ES
	MOV	AX,2901H
	INT	21H
	LEA	DI,FileBlock2
	MOV	FileOfs2,DI
	MOV	FileSeg2,ES
	MOV	AX,2901H
	INT	21H
	LEA	DX,Path
	LEA	BX,EnvironSeg
	MOV	AX,4B00H
	INT	21H
	JC	@@3
	XOR	AX,AX
@@3:	MOV	DX,SEG DATA
	MOV	DS,DX
	CLI
	MOV	SP,SaveSP
	MOV	SS,SaveSS
	STI
	MOV	DosError,AX
	POP	BP
	RET	8

Exec		ENDP

	PUBLIC	DosExitCode

DosExitCode	PROC	FAR

	MOV	AH,4DH
	INT	21H
	RET

DosExitCode	ENDP

CODE	ENDS

	END
