CNC Programming

CNC | C | C++ | Assembly | Python | R | Rust | Arduino | Solidworks | Embedded Systems

This program provides COBOL programs with access to the program loader (LOAD)

;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
-------------
<< BACK
-------------

logoblog

No comments:

Post a Comment