home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 12 / CD_ASCQ_12_0294.iso / maj / 1648 / hilevel.inc < prev    next >
Text File  |  1993-04-02  |  4KB  |  189 lines

  1.  
  2. .NOLIST
  3.  
  4. ;-----------------------------------------------------------------------
  5. ;        HILEVEL.INC - Macros for HiLevel 2.1 files.
  6. ;        Copyright (c) 1993 Eric Grass
  7. ;-----------------------------------------------------------------------
  8.  
  9.  
  10. IFNB    @CurSeg
  11.     ECHO    HILEVEL.INC should not be included inside a segment declaration.
  12. ENDIF
  13.  
  14.         EXTERNDEF    C    _aNchkstk:NEAR
  15.         EXTERNDEF    C    _aFchkstk:FAR
  16.  
  17.  
  18. ;-----------------------------------------------------------------------
  19. ;    The hCall macro pushes the specified arguments onto the stack
  20. ;    and calls the specified procedure.
  21. ;-----------------------------------------------------------------------
  22.  
  23. hCall        MACRO    Args:VARARG
  24.         LOCAL    firstpass, procname, arg
  25.         firstpass = 1
  26.         FOR    arg, <Args>
  27.             IF    firstpass EQ 0
  28.                 PUSH    arg
  29.             ELSE
  30.                 procname TEXTEQU <arg>
  31.                 firstpass = 0
  32.             ENDIF
  33.         ENDM
  34.         CALL    procname
  35.         ENDM
  36.  
  37.  
  38. ;-----------------------------------------------------------------------
  39. ;    HiLevel Prologue Macros
  40.  
  41. ;    The following macros are used to generate prologue and epilogue
  42. ;    code.
  43. ;-----------------------------------------------------------------------
  44.  
  45.  
  46.  
  47. hPrologue    MACRO    procname, flag, parmbytes, localbytes, reglist, userparms
  48.         LOCAL    ?DoPrologue, ?LoadDS, ?CheckStack, ?IncBP
  49.  
  50.         ?DoPrologue = 0
  51.         ?LoadDS = 0
  52.         ?CheckStack = 0
  53.         ?IncBP = 0
  54.         IFNB    <userparms>
  55.             FOR    par, <userparms>
  56.                 IFIDN    <par>, <LOADDS>
  57.                     ?LoadDS = 1
  58.                 ENDIF
  59.                 IFIDN    <par>, <NOLOADDS>
  60.                     ?LoadDS = 0
  61.                 ENDIF
  62.                 IFIDN    <par>, <CHECKSTACK>
  63.                     ?CheckStack = 1
  64.                 ENDIF
  65.                 IFIDN    <par>, <NOCHECKSTACK>
  66.                     ?CheckStack = 0
  67.                 ENDIF
  68.                 IFIDN    <par>, <INCBP>
  69.                     IF    flag AND 20H
  70.                         ?IncBP = 1
  71.                     ENDIF
  72.                 ENDIF
  73.                 IFIDN    <par>, <NOINCBP>
  74.                     ?IncBP = 0
  75.                 ENDIF
  76.                 IFIDN    <par>, <FORCEFRAME>
  77.                     ?DoPrologue = 1
  78.                 ENDIF
  79.             ENDM
  80.         ENDIF
  81.         ?DoPrologue = ?DoPrologue OR ?IncBP OR ?LoadDS OR ?CheckStack OR (localbytes NE 0) OR (parmbytes NE 0)
  82.         IF    ?DoPrologue EQ 0
  83.             EXITM    <0>
  84.         ENDIF
  85.         IF    ?LoadDS EQ 1
  86.             PUSH    DS
  87.             POP    AX
  88.             NOP
  89.         ENDIF
  90.         IF    ?IncBP EQ 1
  91.             INC    BP
  92.         ENDIF
  93.         PUSH    BP
  94.         MOV    BP, SP
  95.         IF     ?LoadDS EQ 1
  96.             PUSH    DS
  97.             MOV    DS, AX
  98.         ENDIF
  99.         IF    ?CheckStack EQ 1
  100.             MOV    AX, localbytes
  101.             % IFIDN    <_TEXT>, <@CurSeg>
  102.                 CALL    _aNchkstk
  103.             ELSE
  104.                 CALL    _aFchkstk
  105.             ENDIF
  106.         ELSE
  107.             IF    localbytes NE 0
  108.                 SUB    SP, localbytes
  109.             ENDIF
  110.         ENDIF
  111.         IFNB    reglist
  112.             FOR    reg, reglist
  113.                 PUSH    reg
  114.             ENDM
  115.         ENDIF
  116.         EXITM    <localbytes>
  117.         ENDM
  118.  
  119.  
  120. hEpilogue    MACRO    procname, flag, parmbytes, localbytes, reglist, userparms
  121.         LOCAL    ?DoEpilogue, ?LoadDS, ?CheckStack, ?IncBP
  122.  
  123.         ?DoEpilogue = 0
  124.         ?LoadDS = 0
  125.         ?CheckStack = 0
  126.         ?IncBP = 0
  127.         IFNB    <userparms>
  128.             FOR    par, <userparms>
  129.                 IFIDN    <par>, <LOADDS>
  130.                     ?LoadDS = 1
  131.                 ENDIF
  132.                 IFIDN    <par>, <NOLOADDS>
  133.                     ?LoadDS = 0
  134.                 ENDIF
  135.                 IFIDN    <par>, <CHECKSTACK>
  136.                     ?CheckStack = 1
  137.                 ENDIF
  138.                 IFIDN    <par>, <NOCHECKSTACK>
  139.                     ?CheckStack = 0
  140.                 ENDIF
  141.                 IFIDN    <par>, <INCBP>
  142.                     IF    flag AND 20H
  143.                         ?IncBP = 1
  144.                     ENDIF
  145.                 ENDIF
  146.                 IFIDN    <par>, <NOINCBP>
  147.                     ?IncBP = 0
  148.                 ENDIF
  149.                 IFIDN    <par>, <FORCEFRAME>
  150.                     ?DoEpilogue = 1
  151.                 ENDIF
  152.             ENDM
  153.         ENDIF
  154.         ?DoEpilogue = ?DoEpilogue OR ?IncBP OR ?LoadDS OR ?CheckStack OR (localbytes NE 0) OR (parmbytes NE 0)
  155.         IF    ?DoEpilogue EQ 0
  156.             RET
  157.             EXITM
  158.         ENDIF
  159.         IFNB    reglist
  160.             FOR    reg, reglist
  161.                 POP    reg
  162.             ENDM
  163.         ENDIF
  164.         IF    ?LoadDS
  165.             DEC    BP
  166.             DEC    BP
  167.             MOV    SP, BP
  168.             POP    DS
  169.             POP    BP
  170.         ELSE
  171.             MOV    SP,BP
  172.             POP    BP
  173.         ENDIF
  174.         IF    ?IncBP
  175.             DEC    BP
  176.         ENDIF
  177.         IF     flag AND 10H
  178.             RET
  179.         ELSE
  180.             IF    parmbytes NE 0
  181.                 RET    parmbytes
  182.             ELSE
  183.                 RET
  184.             ENDIF
  185.         ENDIF
  186.         ENDM
  187.  
  188. .LIST
  189.