;by passing parameters via the system parameter area (SYSPARM).
;
;Inputs:
;01  COBLOAD-PARMS
;  05  FILE-SPEC-1    PIC X(80).   Contains complete drive, path and filename.
;  05  PARAMETER-1    PIC X(80).   Contains command line parameters.
;  05  FILE-SPEC-2    PIC X(80).   Same as 1.
;  05  PARAMETER-2    PIC X(80).   Same as 1.
;
;Outputs:
;  None.
;----------------------------------------------------------------------------


CL_CODE_SEG	SEGMENT PUBLIC 'CODE'
		ASSUME	CS:CL_CODE_SEG,DS:CL_CODE_SEG,ES:CL_CODE_SEG

STACK_PARM	STRUC
PUSHED_SI	DW	?
PUSHED_DI	DW	?
PUSHED_DS	DW	?
PUSHED_ES	DW	?
PUSHED_BP	DW	?
RETURN_IP	DW	?
RETURN_CS	DW	?
PARM1_OFFSET	DW	?
PARM1_DS	DW	?
STACK_PARM	ENDS

		PUBLIC	COBLOAD		;make known to COBOL at link time
COBLOAD		PROC	FAR

	;prologue
		PUSH	BP
		PUSH	ES
		PUSH	DS
		PUSH	DI
		PUSH	SI
		MOV	BP,SP		;set base for stack parm structure

	;address caller's parameter block
		MOV	AX,[BP].PARM1_DS
		MOV	DS,AX			;DS -> cobol data seg
		MOV	SI,[BP].PARM1_OFFSET	;SI -> offset to parm block

	;address load's parameter block in sysparm
		MOV	DX,'dk'		;verification switch
		INT	77H		;get seg addr in AX
		MOV	ES,AX		;ES -> sysparm
		MOV	DI,0		;DI -> offset to LOAD parms

	;move cobol's parm block to load's parm block (in sysparm)
		CLD				;set direction for moves

		MOV	CX,80			;length of move
		REP	MOVSB			;move file spec 1
ASCIIZ1:	MOV	BYTE PTR ES:[DI],0	;make asciiz string
		DEC	DI
		MOV	AL,BYTE PTR ES:[DI]
		CMP	AL,' '			;nullify trailing spaces
		JE	ASCIIZ1

		MOV	BX,81			;point to parm length byte
		MOV	BYTE PTR ES:[BX],82	;init length of parm, + 2
		MOV	DI,82			;point to 1st parm position
		MOV	CX,80			;length of move
		REP	MOVSB			;move parm
ADD_CR_1:	MOV	BYTE PTR ES:[DI],13	;add carriage return
		DEC	BYTE PTR ES:[BX]	;sub 1 from length of parm
		DEC	DI
		MOV	AL,BYTE PTR ES:[DI]
		CMP	AL,' '			;put cr in trailing spaces
		JE	ADD_CR_1

		MOV	DI,163
		MOV	CX,80			;length of move
		REP	MOVSB			;move file spec 2
ASCIIZ2:	MOV	BYTE PTR ES:[DI],0	;make asciiz string
		DEC	DI
		MOV	AL,BYTE PTR ES:[DI]
		CMP	AL,' '			;nullify trailing spaces
		JE	ASCIIZ2

		MOV	BX,244			;point to parm length byte
		MOV	BYTE PTR ES:[BX],82	;init length of parm, + 2
		MOV	DI,245			;point to 1st parm position
		MOV	CX,80			;length of move
		REP	MOVSB			;move parm
ADD_CR_2:	MOV	BYTE PTR ES:[DI],13	;add carriage return
		DEC	BYTE PTR ES:[BX]	;sub 1 from length of parm
		DEC	DI
		MOV	AL,BYTE PTR ES:[DI]
		CMP	AL,' '			;put cr in trailing spaces
		JE	ADD_CR_2

	;return to caller
		POP	SI
		POP	DI
		POP	DS
		POP	ES
		POP	BP
		RET	4

COBLOAD		ENDP

CL_CODE_SEG	ENDS
		END