;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