home *** CD-ROM | disk | FTP | other *** search
/ RBBS in a Box Volume 1 #2 / RBBS_vol1_no2.iso / add2 / dkey120.zip / STRUCT.MAC < prev   
Text File  |  1987-11-02  |  2KB  |  175 lines

  1.  
  2. ;
  3. ;    MACRO:    ENTER
  4. ;
  5. ;    Macro placed at entry point of routine, sets up important stuff.
  6. ;
  7. ;    PARAMETERS:
  8. ;
  9. ;        NONE
  10. ;
  11.  
  12. ENTER    macro
  13.     IF LPROG
  14. pass_o    =    6
  15.     ELSE
  16. pass_o    =    4
  17.     ENDIF
  18. local_o    =    0
  19. res_amt    =    0
  20.  
  21.     PUSH    BP
  22.     MOV    BP,SP
  23.  
  24.     endm    ; ENTER
  25.  
  26. ;
  27. ;    MACRO:    REGPARM
  28. ;
  29. ;    Macro to save in LOCAL stack a register.
  30. ;
  31. ;    PARAMETERS:
  32. ;
  33. ;        label    - Variable name used in other references
  34. ;        reg    - Register to save on stack
  35. ;
  36.  
  37. REGPARM    macro    label,reg
  38. local_o    = local_o + 2
  39.     PUSH    REG
  40.     MAKE_BP    label,-%local_o,WORD
  41.  
  42.     endm    ; REGPARM
  43.  
  44.  
  45. REDEF    macro    label,type
  46.     MAKE_BP    label,-%local_o,type
  47.  
  48.     endm    ; REDEF
  49.  
  50. ;
  51. ;    MACRO:    RESWORD
  52. ;
  53. ;    Macro to allocate a word of storage on local stack and give the
  54. ;    location a name.
  55. ;
  56. ;    PARAMETERS:
  57. ;
  58. ;        label    - Name that location will go by.
  59. ;
  60.  
  61. RESWORD    macro    label
  62. local_o    = local_o + 2
  63. res_amt    = res_amt + 2
  64.     MAKE_BP    label,-%local_o,WORD
  65.  
  66.     endm    ; RESWORD
  67.  
  68. RESDWORD macro    label
  69. local_o = local_o + 4
  70. res_amt = res_amt + 4
  71.     MAKE_BP label,-%local_o,DWORD
  72.  
  73.     endm    ; RESDWORD
  74.     
  75. ;
  76. ;    MACRO:    PASSW
  77. ;
  78. ;    Macro that creates a label out of a passed parameter pushed on the
  79. ;    stack by the CALLER!
  80. ;
  81. ;    PARAMETERS:
  82. ;
  83. ;        label    - Variable name to use in reference.
  84. ;
  85.  
  86.     IF LDATA
  87. PASSA    macro    label
  88.     PASSD    label
  89.     endm
  90.     ELSE
  91. PASSA    macro    label
  92.     PASSW    label
  93.     endm
  94.     ENDIF
  95.  
  96.  
  97.  
  98. PASSW    macro    label
  99.     MAKE_BP    label,%pass_o,WORD
  100. pass_o    = pass_o + 2
  101.  
  102.     endm    ; PASSW
  103.  
  104.  
  105. PASSD    macro    label                ;; SAME THING FOR POINTERS
  106.     MAKE_BP    label,%pass_o,DWORD        ;; DWORD REFERENCE
  107.     PASSW    label&_OFF            ;; AND TWO WORD REFERENCES
  108.     PASSW    label&_SEG
  109.  
  110.     endm    ; PASSD
  111.  
  112. ;
  113. ;    MACRO:    RESERVE
  114. ;
  115. ;    Macro used prior to FIRST executable statement in subroutine.
  116. ;    Allocates stack space for local variables.
  117. ;
  118. ;    PARAMETERS:    (NONE)
  119. ;
  120.  
  121. RESERVE    macro
  122.     SUB    SP,res_amt
  123.  
  124.     endm    ; RESERVE
  125.  
  126. ;
  127. ;    MACRO:    RETURN
  128. ;
  129. ;    Macro used to return from a subroutine, will release local variables,
  130. ;    restore BP and return to caller
  131. ;
  132. ;    PARAMETERS:    (NONE)
  133. ;
  134.  
  135. RETURN    macro
  136.     MOV    SP,BP
  137.     POP    BP
  138.     RET
  139.  
  140.     endm    ; RETURN
  141.  
  142.  
  143. MAKE_BP    macro    label,value,type
  144. label    EQU    type PTR value[BP]
  145.  
  146.     endm    ; MAKE_BP
  147.  
  148.  
  149.  
  150. ;    The following macros make procedure definitions easier
  151.  
  152.     IF    LPROG
  153.     
  154. PROCEDURE    MACRO    NAME
  155. PUBLIC    NAME
  156. NAME    PROC    FAR
  157.     ENDM
  158.     
  159. EXTERNAL    MACRO    NAME
  160. EXTRN    NAME:FAR
  161.     ENDM
  162.     
  163.     ELSE
  164.     
  165. PROCEDURE    MACRO    NAME
  166. PUBLIC    NAME
  167. NAME    PROC    NEAR
  168.     ENDM
  169.  
  170. EXTERNAL    MACRO    NAME
  171. EXTRN    NAME:NEAR
  172.     ENDM
  173.     
  174.     ENDIF
  175.