home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / sampler1 / cobload.asm < prev    next >
Assembly Source File  |  1985-01-29  |  3KB  |  111 lines

  1. ;COBLOAD.ASM      07/09/84 - DKeels
  2. ;----------------------------------------------------------------------------
  3. ;This program provides COBOL programs with access to the program loader (LOAD) 
  4. ;by passing parameters via the system parameter area (SYSPARM).
  5. ;
  6. ;Inputs:
  7. ;01  COBLOAD-PARMS
  8. ;  05  FILE-SPEC-1    PIC X(80).   Contains complete drive, path and filename.
  9. ;  05  PARAMETER-1    PIC X(80).   Contains command line parameters.
  10. ;  05  FILE-SPEC-2    PIC X(80).   Same as 1.
  11. ;  05  PARAMETER-2    PIC X(80).   Same as 1.
  12. ;
  13. ;Outputs:
  14. ;  None.
  15. ;----------------------------------------------------------------------------
  16.  
  17.  
  18. CL_CODE_SEG    SEGMENT PUBLIC 'CODE'
  19.         ASSUME    CS:CL_CODE_SEG,DS:CL_CODE_SEG,ES:CL_CODE_SEG
  20.  
  21. STACK_PARM    STRUC
  22. PUSHED_SI    DW    ?
  23. PUSHED_DI    DW    ?
  24. PUSHED_DS    DW    ?
  25. PUSHED_ES    DW    ?
  26. PUSHED_BP    DW    ?
  27. RETURN_IP    DW    ?
  28. RETURN_CS    DW    ?
  29. PARM1_OFFSET    DW    ?
  30. PARM1_DS    DW    ?
  31. STACK_PARM    ENDS
  32.  
  33.         PUBLIC    COBLOAD        ;make known to COBOL at link time
  34. COBLOAD        PROC    FAR
  35.  
  36.     ;prologue
  37.         PUSH    BP
  38.         PUSH    ES
  39.         PUSH    DS
  40.         PUSH    DI
  41.         PUSH    SI
  42.         MOV    BP,SP        ;set base for stack parm structure
  43.  
  44.     ;address caller's parameter block
  45.         MOV    AX,[BP].PARM1_DS
  46.         MOV    DS,AX            ;DS -> cobol data seg
  47.         MOV    SI,[BP].PARM1_OFFSET    ;SI -> offset to parm block
  48.  
  49.     ;address load's parameter block in sysparm
  50.         MOV    DX,'dk'        ;verification switch
  51.         INT    77H        ;get seg addr in AX
  52.         MOV    ES,AX        ;ES -> sysparm
  53.         MOV    DI,0        ;DI -> offset to LOAD parms
  54.  
  55.     ;move cobol's parm block to load's parm block (in sysparm)
  56.         CLD                ;set direction for moves
  57.  
  58.         MOV    CX,80            ;length of move
  59.         REP    MOVSB            ;move file spec 1
  60. ASCIIZ1:    MOV    BYTE PTR ES:[DI],0    ;make asciiz string
  61.         DEC    DI
  62.         MOV    AL,BYTE PTR ES:[DI]
  63.         CMP    AL,' '            ;nullify trailing spaces
  64.         JE    ASCIIZ1
  65.  
  66.         MOV    BX,81            ;point to parm length byte
  67.         MOV    BYTE PTR ES:[BX],82    ;init length of parm, + 2
  68.         MOV    DI,82            ;point to 1st parm position
  69.         MOV    CX,80            ;length of move
  70.         REP    MOVSB            ;move parm
  71. ADD_CR_1:    MOV    BYTE PTR ES:[DI],13    ;add carriage return
  72.         DEC    BYTE PTR ES:[BX]    ;sub 1 from length of parm
  73.         DEC    DI
  74.         MOV    AL,BYTE PTR ES:[DI]
  75.         CMP    AL,' '            ;put cr in trailing spaces
  76.         JE    ADD_CR_1
  77.  
  78.         MOV    DI,163
  79.         MOV    CX,80            ;length of move
  80.         REP    MOVSB            ;move file spec 2
  81. ASCIIZ2:    MOV    BYTE PTR ES:[DI],0    ;make asciiz string
  82.         DEC    DI
  83.         MOV    AL,BYTE PTR ES:[DI]
  84.         CMP    AL,' '            ;nullify trailing spaces
  85.         JE    ASCIIZ2
  86.  
  87.         MOV    BX,244            ;point to parm length byte
  88.         MOV    BYTE PTR ES:[BX],82    ;init length of parm, + 2
  89.         MOV    DI,245            ;point to 1st parm position
  90.         MOV    CX,80            ;length of move
  91.         REP    MOVSB            ;move parm
  92. ADD_CR_2:    MOV    BYTE PTR ES:[DI],13    ;add carriage return
  93.         DEC    BYTE PTR ES:[BX]    ;sub 1 from length of parm
  94.         DEC    DI
  95.         MOV    AL,BYTE PTR ES:[DI]
  96.         CMP    AL,' '            ;put cr in trailing spaces
  97.         JE    ADD_CR_2
  98.  
  99.     ;return to caller
  100.         POP    SI
  101.         POP    DI
  102.         POP    DS
  103.         POP    ES
  104.         POP    BP
  105.         RET    4
  106.  
  107. COBLOAD        ENDP
  108.  
  109. CL_CODE_SEG    ENDS
  110.         END
  111.