;BASLOAD.ASM	  
;----------------------------------------------------------------------------
;
;Inputs:
;  FILE SPEC 1	- A string (len <= 80) with the complete name, including
;		  path, of the file to be loaded and executed.
;		  Example: 'MAINMENU.EXE' or 'C:\FORMAT.COM'
;  PARAMETER 1  - A string (len <= 80) with the command line parameters
;		  to be passed to the program specified in FILE SPEC 1.
;		  Example: '' or 'A:'
;  FILE SPEC 2  - Same as 1.
;  PARAMETER 2  - Same as 1.
;
;Outputs:
;  This program gives control to LOAD.
;----------------------------------------------------------------------------


CODE		SEGMENT 'CODE'
		ASSUME	CS:CODE


		PUBLIC	BASLOAD		;make known to BASIC at link time
BASLOAD		PROC	FAR

	;prologue
		PUSH	BP		;save BP
		MOV	BP,SP		;set base for parm list
		PUSH	DS		;DS -> basic work area
		PUSH	ES		;ES -> basic work area
		MOV	DX,'dk'		;interrupt verification switch
		INT	77H		;get seg address of sysparm area in AX
		MOV	ES,AX		;ES -> sysparm area
		CLD			;set direction for all moves

	;move file spec 1 to sysparm
		MOV	BX,SS:[BP+12]	;get addr of string descriptor
		MOV	CX,DS:[BX]	;get length of string into CX
		MOV	SI,DS:[BX+2]	;get addr of string into SI
		MOV	DI,0		;offset into sysparm
		REP	MOVSB		;move string
		MOV	BYTE PTR ES:[DI],0	;make it asciiz string

	;move parameter 1 to sysparm
		MOV	BX,SS:[BP+10]	;get addr of string descriptor
		MOV	CX,DS:[BX]	;get length of string into CX
		MOV	SI,DS:[BX+2]	;get addr of string into SI
		MOV	DI,81		;offset into sysparm
		INC	CL		;adjust for cr to be added at end
		MOV	BYTE PTR ES:[DI],CL	;1st byte is length of string
		DEC	CL		;re-adjust for move operation
		INC	DI
		REP	MOVSB		;move string
		MOV	BYTE PTR ES:[DI],13	;add cr to end

	;move file spec 2 to sysparm
		MOV	BX,SS:[BP+8]	;get addr of string descriptor
		MOV	CX,DS:[BX]	;get length of string into CX
		MOV	SI,DS:[BX+2]	;get addr of string into SI
		MOV	DI,163		;offset into sysparm
		REP	MOVSB		;move string
		MOV	BYTE PTR ES:[DI],0	;make it asciiz string

	;move parameter 2 to sysparm
		MOV	BX,SS:[BP+6]	;get addr of string descriptor
		MOV	CX,DS:[BX]	;get length of string into CX
		MOV	SI,DS:[BX+2]	;get addr of string into SI
		MOV	DI,244		;offset into sysparm
		INC	CL		;adjust for cr to be added at end
		MOV	BYTE PTR ES:[DI],CL	;1st byte is length of string
		DEC	CL		;re-adjust for move operation
		INC	DI
		REP	MOVSB		;move string
		MOV	BYTE PTR ES:[DI],13	;add cr to end

	;exit to BASIC
		POP	ES
		POP	DS
		POP	BP
		RET	8

BASLOAD		ENDP

CODE		ENDS
		END	BASLOAD