home *** CD-ROM | disk | FTP | other *** search
/ Super Net 1 / SUPERNET_1.iso / PC / OTROS / MSDOS / WATTCP / MSWATTCP.ZIP / INCLUDE / MACROS.HSM < prev    next >
Encoding:
Text File  |  1993-03-25  |  3.3 KB  |  193 lines

  1. ; File: macros.hsm
  2.  
  3. ;
  4.  
  5. ; 16-Jun-92 lr
  6.  
  7. ;
  8.  
  9. ; Macros for assembler files
  10.  
  11. ;
  12.  
  13. ; define FUNC_L for far functions, PTR_L for far pointers
  14.  
  15. ; @AB is the offset of the first parameter on the stack
  16.  
  17. ;
  18.  
  19.  
  20.  
  21. IF      FUNC_L
  22.  
  23. @AB     EQU     6
  24.  
  25. ; @ab     EQU     6    ; not used
  26.  
  27. ELSE
  28.  
  29. @AB     EQU     4
  30.  
  31. ; @ab     EQU     4    ; not used
  32.  
  33. ENDIF
  34.  
  35.  
  36.  
  37. if      FUNC_L
  38.  
  39. %OUT    <Far Functions>
  40.  
  41. else
  42.  
  43. %OUT    <Near Functions>
  44.  
  45. endif
  46.  
  47. if      PTR_L
  48.  
  49. %OUT    <Far Pointers>
  50.  
  51. else
  52.  
  53. %OUT    <Near Pointers>
  54.  
  55. endif
  56.  
  57.  
  58.  
  59. ; cextrn is used to inform the assembler of C routines
  60.  
  61. ;
  62.  
  63.  
  64.  
  65. cextrn  macro   WARG1
  66.  
  67. if      FUNC_L
  68.  
  69. EXTRN   _&WARG1&:FAR
  70.  
  71. else
  72.  
  73. EXTRN   _&WARG1&:NEAR
  74.  
  75. endif
  76.  
  77.         endm
  78.  
  79.  
  80.  
  81. ; ccall is used to call extern C routines
  82.  
  83. ;
  84.  
  85.  
  86.  
  87. ccall   macro   WARG1
  88.  
  89. if      FUNC_L
  90.  
  91.         CALL    FAR PTR _&WARG1&
  92.  
  93. else
  94.  
  95.         CALL    _&WARG1&
  96.  
  97. endif
  98.  
  99.         endm
  100.  
  101.  
  102.  
  103. ; cpublic is used to make ASM routines callable from C
  104.  
  105. ; it also produces the prolog
  106.  
  107. ;
  108.  
  109.  
  110.  
  111. cpublic macro   WARG1
  112.  
  113. public  _&WARG1&
  114.  
  115. if      FUNC_L
  116.  
  117. _&WARG1&    PROC    FAR
  118.  
  119. else
  120.  
  121. _&WARG1&    PROC    NEAR
  122.  
  123. endif
  124.  
  125.         PUSH    BP
  126.  
  127.         MOV     BP,SP
  128.  
  129.     PUSH    DI
  130.  
  131.     PUSH    SI
  132.  
  133.         endm
  134.  
  135.  
  136.  
  137. ; cproc is similar to cpublic, but only produces the declaration
  138.  
  139. ;
  140.  
  141.  
  142.  
  143. cproc   macro   WARG1
  144.  
  145. public  _&WARG1&
  146.  
  147. if      FUNC_L
  148.  
  149. _&WARG1&    PROC    FAR
  150.  
  151. else
  152.  
  153. _&WARG1&    PROC    NEAR
  154.  
  155. endif
  156.  
  157.         endm
  158.  
  159.  
  160.  
  161. ; cendp 
  162.  
  163. cendp    macro    WARG1
  164.  
  165. public    _&WARG1&
  166.  
  167. if      FUNC_L
  168.  
  169. _&WARG1&    ENDP
  170.  
  171. else
  172.  
  173. _&WARG1&    ENDP
  174.  
  175. endif
  176.  
  177.     endm
  178.  
  179.  
  180.  
  181. ; clabel is used to generate a symbol for the assembler,
  182.  
  183. ; e.g. an alias for a function name (this is the case of intel,
  184.  
  185. ; and format conversion routines)
  186.  
  187.  
  188.  
  189. clabel    macro    WARG1
  190.  
  191. public  _&WARG1&
  192.  
  193. if      FUNC_L
  194.  
  195. _&WARG1&    LABEL    FAR
  196.  
  197. else
  198.  
  199. _&WARG1&    LABEL    NEAR
  200.  
  201. endif
  202.  
  203.         endm
  204.  
  205.  
  206.  
  207. creturn macro   WARG1
  208.  
  209.     POP    SI
  210.  
  211.     POP    DI
  212.  
  213.         MOV     SP,BP
  214.  
  215.         POP     BP
  216.  
  217. if      FUNC_L
  218.  
  219.         RET    ; actually ret far
  220.  
  221. else
  222.  
  223.         RET    ; actually ret near
  224.  
  225. endif
  226.  
  227. _&WARG1&    ENDP
  228.  
  229.         endm
  230.  
  231.  
  232.  
  233. cstart  macro   WARG1,WARG2
  234.  
  235. if      FUNC_L
  236.  
  237. &WARG1&_TEXT    SEGMENT WARG2
  238.  
  239. else
  240.  
  241. _TEXT       SEGMENT WARG2
  242.  
  243. endif
  244.  
  245.         endm
  246.  
  247.  
  248.  
  249. cend     macro   WARG1
  250.  
  251. if      FUNC_L
  252.  
  253. &WARG1&_TEXT        ENDS
  254.  
  255. else
  256.  
  257. _TEXT   ENDS
  258.  
  259. endif
  260.  
  261.         endm
  262.  
  263.  
  264.  
  265. codedef macro   WARG1,WARG2
  266.  
  267. if      FUNC_L
  268.  
  269. &WARG1&_TEXT    SEGMENT BYTE WARG2 PUBLIC 'CODE'
  270.  
  271. &WARG1&_TEXT    ENDS
  272.  
  273.         ASSUME  CS: &WARG1&_TEXT
  274.  
  275. else
  276.  
  277. _TEXT   SEGMENT BYTE WARG2 PUBLIC 'CODE'
  278.  
  279. _TEXT   ENDS
  280.  
  281.         ASSUME  CS: _TEXT
  282.  
  283. endif
  284.  
  285.         endm
  286.  
  287.  
  288.  
  289. datadef macro WARG1
  290.  
  291. _DATA   SEGMENT  WORD WARG1 PUBLIC 'DATA'
  292.  
  293. _DATA   ENDS
  294.  
  295. _BSS    SEGMENT  WORD WARG1 PUBLIC 'BSS'
  296.  
  297. _BSS    ENDS
  298.  
  299.  
  300.  
  301. DGROUP  GROUP   _BSS,   _DATA
  302.  
  303.         ASSUME  DS: DGROUP, SS: DGROUP, ES: DGROUP
  304.  
  305.         endm
  306.  
  307.  
  308.  
  309. bssstart    macro WARG1
  310.  
  311. _BSS    SEGMENT WARG1
  312.  
  313.         endm
  314.  
  315.  
  316.  
  317. bssend  macro
  318.  
  319. _BSS    ENDS
  320.  
  321.         endm
  322.  
  323. farbssstart    macro
  324.  
  325. FAR_BSS SEGMENT
  326.  
  327.         endm
  328.  
  329.  
  330.  
  331. farbssend  macro
  332.  
  333. FAR_BSS ENDS
  334.  
  335.         endm
  336.  
  337.  
  338.  
  339. fardatastart    macro
  340.  
  341. FAR_DATA SEGMENT
  342.  
  343.         endm
  344.  
  345.  
  346.  
  347. fardataend  macro
  348.  
  349. FAR_DATA ENDS
  350.  
  351.         endm
  352.  
  353.  
  354.  
  355. datastart    macro WARG1
  356.  
  357. _DATA SEGMENT WARG1
  358.  
  359.         endm
  360.  
  361.  
  362.  
  363. dataend  macro
  364.  
  365. _DATA ENDS
  366.  
  367.         endm
  368.  
  369.  
  370.  
  371. conststart    macro WARG1
  372.  
  373.         endm
  374.  
  375.  
  376.  
  377. constend  macro
  378.  
  379.         endm
  380.  
  381.  
  382.  
  383. ; end of file macros.hsm
  384.  
  385.