home *** CD-ROM | disk | FTP | other *** search
/ Jason Aller Floppy Collection / 92.img / TCPLUS-6.ZIP / STARTUP.ZIP / RULES.ASI < prev   
Encoding:
Text File  |  1990-05-04  |  9.1 KB  |  472 lines

  1. ;[]-----------------------------------------------------------------[]
  2. ;|      RULES.ASI  --  Rules & Structures for assembler              |
  3. ;|                                                                   |
  4. ;|      Turbo-C Run Time Library        version 3.0                  |
  5. ;|                                                                   |
  6. ;|      Copyright (c) 1987,1988,1990 by Borland International Inc.   |
  7. ;|      All Rights Reserved.                                         |
  8. ;[]-----------------------------------------------------------------[]
  9.  
  10. ;    4/15/88 ah:
  11. ;    Emulator segment directives modified for Turbo Pascal
  12. ;    using _Pascal_ conditional.
  13.  
  14. ;*** First we begin with a few of the major constants of C.
  15.  
  16. false    equ    0    ; Beware !  For incoming parameters, non-false = true.
  17. true    equ    1    ; For results, we generate the proper numbers.
  18.  
  19. lesser    equ    -1    ; Incoming, lesser < 0
  20. equal    equ     0
  21. greater equ     1    ; Incoming, greater > 0
  22.     PAGE
  23. ;[]------------------------------------------------------------[]
  24. ;|                                |
  25. ;|    Conditional Assembly Directives                |
  26. ;|                                |
  27. ;[]------------------------------------------------------------[]
  28.  
  29. ;memory model aliases, for the convenience of building the library
  30.  
  31. IFDEF        __s__
  32. __SMALL__     equ    1
  33. ENDIF
  34.  
  35. IFDEF        __c__
  36. __COMPACT__     equ    1
  37. ENDIF
  38.  
  39. IFDEF        __m__
  40. __MEDIUM__     equ    1
  41. ENDIF
  42.  
  43. IFDEF        __l__
  44. __LARGE__     equ    1
  45. ENDIF
  46.  
  47. IFDEF        __h__
  48. __HUGE__     equ    1
  49. ENDIF
  50.  
  51. IFNDEF __TINY__
  52.     IFNDEF __SMALL__
  53.     IFNDEF __MEDIUM__
  54.         IFNDEF __COMPACT__
  55.         IFNDEF __LARGE__
  56.             IFNDEF __HUGE__
  57.             %OUT  You must supply a model symbol.
  58.             .ERR
  59.             ENDIF
  60.         ENDIF
  61.         ENDIF
  62.     ENDIF
  63.     ENDIF
  64. ENDIF
  65.  
  66. ;bit masks to extract default pointer types from MMODEL (at run-time)
  67. FCODE        equ    8000h
  68. FDATA        equ    4000h
  69.  
  70. IFDEF    __TINY__        ; Small Code - Small Data
  71.     LPROG        equ    false
  72.     LDATA        equ    false
  73.     MMODEL        equ    0    
  74. ENDIF
  75.  
  76. IFDEF    __SMALL__        ; Small Code - Small Data
  77.     LPROG        equ    false
  78.     LDATA        equ    false
  79.     MMODEL        equ    1    
  80. ENDIF
  81.  
  82. IFDEF    __MEDIUM__        ; Large Code - Small Data
  83.     LPROG        equ    true
  84.     LDATA        equ    false
  85.     MMODEL        equ    FCODE+2    
  86. ENDIF
  87.  
  88. IFDEF    __COMPACT__        ; Small Code - Large Data
  89.     LPROG        equ    false
  90.     LDATA        equ    true
  91.     MMODEL        equ    FDATA+3    
  92. ENDIF
  93.  
  94. IFDEF    __LARGE__        ; Large Code - Large Data
  95.     LPROG        equ    true
  96.     LDATA        equ    true
  97.     MMODEL        equ    FCODE+FDATA+4
  98. ENDIF
  99.  
  100. IFDEF    __HUGE__        ; Large Code - Large Data
  101.     LPROG            equ    true
  102.     LDATA            equ    true
  103.     MMODEL        equ    FCODE+FDATA+5
  104. ENDIF
  105.  
  106. IFNDEF    LPROG            ; *** Default = __COMPACT__ ***
  107.     __COMPACT__    equ    true
  108.     LPROG        equ    false
  109.     LDATA        equ    true
  110.     MMODEL        equ    FDATA+3    
  111. ENDIF
  112.  
  113. IF      LPROG
  114.     DIST        equ    FAR
  115. ELSE
  116.     DIST        equ    NEAR
  117. ENDIF
  118.  
  119.     PAGE
  120. ;[]------------------------------------------------------------[]
  121. ;|                                |
  122. ;|    Segment Declarations Macros                |
  123. ;|                                |
  124. ;[]------------------------------------------------------------[]
  125.  
  126. CSeg@        MACRO        ;; Open a Code Segment
  127. _TEXT    SEGMENT BYTE PUBLIC 'CODE'
  128.     ASSUME    CS:_TEXT
  129.         ENDM
  130.  
  131. CSegEnd@    MACRO        ;; Close a Code Segment
  132. _TEXT    ENDS
  133.         ENDM
  134.  
  135. DSeg@        MACRO        ;; Open a Data Segment    (initialized)
  136. _DATA    SEGMENT WORD PUBLIC 'DATA'
  137.         ENDM
  138.  
  139. DSegEnd@    MACRO        ;; Close a Data Segment (initialized)
  140. _DATA    ENDS
  141.         ENDM
  142.  
  143. IFDEF __BSS__
  144.     IFNDEF __HUGE__
  145.     BSeg@        MACRO        ;; Open a Data Segment    (un-initialized)
  146.     _BSS    SEGMENT WORD PUBLIC 'BSS'
  147.         ENDM
  148.  
  149.     BSegEnd@    MACRO        ;; Close a Data Segment (un-initialized)
  150.     _BSS    ENDS
  151.             ENDM
  152.     ENDIF
  153. ENDIF
  154.  
  155. Header@ MACRO
  156. _TEXT    SEGMENT BYTE PUBLIC 'CODE'
  157. _TEXT    ENDS
  158. _DATA    SEGMENT WORD PUBLIC 'DATA'
  159. _DATA    ENDS
  160. IFDEF __BSS__
  161.     IFNDEF  __HUGE__
  162.     _BSS    SEGMENT WORD PUBLIC 'BSS'
  163.     _BSS    ENDS
  164.     ENDIF
  165. ENDIF
  166.  
  167. IFDEF __BSS__
  168.     IFDEF   __TINY__
  169.     DGROUP    GROUP    _TEXT, _DATA, _BSS
  170.     ELSE
  171.     IFDEF __HUGE__
  172.         DGROUP  GROUP   _DATA
  173.     ELSE
  174.         DGROUP  GROUP   _DATA, _BSS
  175.     ENDIF
  176.     ENDIF
  177. ELSE
  178.     IFDEF   __TINY__
  179.     DGROUP    GROUP    _TEXT, _DATA
  180.     ELSE
  181.     DGROUP    GROUP    _DATA
  182.     ENDIF
  183. ENDIF
  184.     ASSUME    CS:_TEXT, DS:DGROUP
  185.     ENDM
  186.     PAGE
  187. ;[]------------------------------------------------------------[]
  188. ;|                                |
  189. ;|    C Naming Convention Macros                |
  190. ;|                                |
  191. ;[]------------------------------------------------------------[]
  192.  
  193. UNDERSCORE    EQU    1
  194.  
  195. ExtSym@ MACRO    Sym, sType, sName
  196.     IFNB    <sName>
  197.     IFIDN    <sName>, <__PASCAL__>
  198. NAMING        =        0
  199.     ELSE
  200. NAMING        =        UNDERSCORE
  201.     ENDIF
  202.     ENDIF
  203.     IF    NAMING
  204.     EXTRN    _&Sym : sType
  205. Sym&@    equ    _&Sym
  206.     ELSE
  207.     EXTRN    Sym : sType
  208. Sym&@    equ    Sym
  209.     ENDIF
  210.     ENDM
  211.  
  212. PubSym@ MACRO    Sym, Definition, sName
  213.     IFNB    <sName>
  214.     IFIDN    <sName>, <__PASCAL__>
  215. NAMING        =        0
  216.     ELSE
  217. NAMING        =        UNDERSCORE
  218.     ENDIF
  219.     ENDIF
  220.     IF    NAMING
  221.     PUBLIC    _&Sym
  222. _&Sym    Definition
  223. Sym&@    equ    _&Sym
  224.     ELSE
  225.     PUBLIC    Sym
  226. Sym    Definition
  227. Sym&@    equ    Sym
  228.     ENDIF
  229.     ENDM
  230.  
  231. Static@ MACRO    Sym, Definition, sName
  232.     IFNB    <sName>
  233.     IFIDN    <sName>, <__PASCAL__>
  234. NAMING        =        0
  235.     ELSE
  236. NAMING        =        UNDERSCORE
  237.     ENDIF
  238.     ENDIF
  239.     IF    NAMING
  240. _&Sym    Definition
  241. Sym&@    equ    _&Sym
  242.     ELSE
  243. Sym    Definition
  244. Sym&@    equ    Sym
  245.     ENDIF
  246.     ENDM
  247.     PAGE
  248. ;[]------------------------------------------------------------[]
  249. ;|                                |
  250. ;|    Macros which are Data Size Dependent            |
  251. ;|                                |
  252. ;[]------------------------------------------------------------[]
  253.  
  254. IF    LDATA
  255. DPTR_        equ    DWORD PTR
  256. dPtrSize    equ    4
  257. LES_        equ    LES
  258. ES_        equ    ES:
  259. SS_        equ    SS:
  260. LDS_        equ    LDS
  261.  
  262. pushDS_        MACRO
  263.         PUSH    DS
  264.         ENDM
  265.  
  266. popDS_        MACRO
  267.         POP    DS
  268.         ENDM
  269.  
  270. PushPtr        MACRO    dPtrOff, dPtrSeg
  271.         PUSH    dPtrSeg
  272.         PUSH    dPtrOff
  273.         ENDM
  274.  
  275.  
  276. dPtr@        MACRO    Sym, VALUE, sName    ;; Static Data pointer
  277. Static@        Sym, <DD    VALUE>, sName
  278.         ENDM
  279.  
  280. dPtrPub@    MACRO    Sym, VALUE, sName    ;; Global Data Pointer
  281. PubSym@        Sym, <DD    VALUE>, sName
  282.         ENDM
  283.  
  284. dPtrExt@    MACRO    Sym, sName    ;; External Data Pointer
  285. ExtSym@        Sym, DWORD, sName
  286.         ENDM
  287. ELSE
  288. DPTR_        equ    WORD PTR
  289. dPtrSize    equ    2
  290. LES_        equ    MOV
  291. ES_        equ    DS:
  292. SS_        equ    DS:
  293. LDS_        equ    MOV
  294.  
  295. pushDS_        MACRO
  296.         ENDM
  297.  
  298. popDS_        MACRO
  299.         ENDM
  300.  
  301. PushPtr        MACRO    dPtrOff, dPtrSeg
  302.         PUSH    dPtrOff
  303.         ENDM
  304.  
  305. dPtr@        MACRO    Sym, VALUE, sName    ;; Static Data pointer
  306. Static@        Sym, <DW    VALUE>, sName
  307.         ENDM
  308.  
  309. dPtrPub@    MACRO    Sym, VALUE, sName    ;; Global Data Pointer
  310. PubSym@        Sym, <DW    VALUE>, sName
  311.         ENDM
  312.  
  313. dPtrExt@    MACRO    Sym, sName    ;; External Data Pointer
  314. ExtSym@        Sym, WORD, sName
  315.         ENDM
  316. ENDIF
  317.     PAGE
  318. ;[]------------------------------------------------------------[]
  319. ;|                                |
  320. ;|    Macros which are Code Size Dependent            |
  321. ;|                                |
  322. ;[]------------------------------------------------------------[]
  323.  
  324. IF    LPROG
  325. CPTR_        equ    DWORD PTR
  326. cPtrSize    equ    4
  327.  
  328. Proc@        MACRO    Sym, sName    ;; Open a Static function
  329. Static@        Sym, <PROC    FAR>, sName
  330.         ENDM
  331.  
  332. PubProc@    MACRO    Sym, sName    ;; Open a Public function
  333. PubSym@        Sym, <PROC    FAR>, sName
  334.         ENDM
  335.  
  336. ExtProc@    MACRO    Sym, sName    ;; External Function
  337. ExtSym@        Sym, FAR, sName
  338.         ENDM
  339.  
  340. cPtr@        MACRO    Sym, VALUE, sName    ;; Static Function pointer
  341. Static@        Sym, <DD    VALUE>, sName
  342.         ENDM
  343.  
  344. cPtrPub@    MACRO    Sym, VALUE, sName;; Global Function Pointer
  345. PubSym@        Sym, <DD    VALUE>, sName
  346.         ENDM
  347.  
  348. cPtrExt@    MACRO    Sym, sName    ;; External Function Pointer
  349. ExtSym@        Sym, DWORD, sName
  350.         ENDM
  351. ELSE
  352. CPTR_        equ    WORD PTR
  353. cPtrSize    equ    2
  354.  
  355. Proc@        MACRO    Sym, sName    ;; Open a Static function
  356. Static@        Sym, <PROC    NEAR>, sName
  357.         ENDM
  358.  
  359. PubProc@    MACRO    Sym, sName    ;; Open a Public function
  360. PubSym@        Sym, <PROC    NEAR>, sName
  361.         ENDM
  362.  
  363. ExtProc@    MACRO    Sym, sName    ;; External Function
  364. ExtSym@        Sym, NEAR, sName
  365.         ENDM
  366.  
  367. cPtr@        MACRO    Sym, VALUE, sName    ;; Static Function pointer
  368. Static@        Sym, <DW    VALUE>, sName
  369.         ENDM
  370.  
  371. cPtrPub@    MACRO    Sym, VALUE, sName    ;; Global Function Pointer
  372. PubSym@        Sym, <DW    VALUE>, sName
  373.         ENDM
  374.  
  375. cPtrExt@    MACRO    Sym, sName    ;; External Function Pointer
  376. ExtSym@        Sym, WORD, sName
  377.         ENDM
  378. ENDIF
  379.  
  380. EndProc@    MACRO    Sym, sName    ;; Close a function
  381. Static@        Sym, ENDP, sName
  382.         ENDM
  383.     PAGE
  384. ;[]------------------------------------------------------------[]
  385. ;|                                |
  386. ;|    Miscellaneous Definitions                |
  387. ;|                                |
  388. ;[]------------------------------------------------------------[]
  389.  
  390. ;*** Set up some macros for procedure parameters and export/import
  391.  
  392. nearCall    STRUC
  393. nearBP        dw    ?
  394. nearIP        dw    ?
  395. nearParam    dw    ?
  396. nearCall    ENDS
  397.  
  398. farCall        STRUC
  399. farBP        dw    ?
  400. farCSIP        dd    ?
  401. aParam        dw    ?
  402. farCall        ENDS
  403.  
  404. ;*** Next, we define some convenient structures to access the parts
  405. ;    of larger objects.
  406.  
  407. _twoBytes    STRUC
  408. BY0    db    ?
  409. BY1    db    ?
  410. _twoBytes    ENDS
  411.  
  412. _fourWords    STRUC
  413. W0    dw    ?
  414. W1    dw    ?
  415. W2    dw    ?
  416. W3    dw    ?
  417. _fourWords    ENDS
  418.  
  419. _twoDwords    STRUC
  420. DD0    dd    ?
  421. DD1    dd    ?
  422. _twoDwords    ENDS
  423.  
  424. _aFloat        STRUC
  425. double        dq    ?
  426. _aFloat        ENDS
  427.  
  428. ; How to invoke MSDOS.
  429.  
  430. MSDOS@    MACRO
  431.     int    21h
  432.     ENDM
  433.     PAGE
  434.  
  435. ; The next section concerns the use of registers.  SI and DI are used
  436. ;    for register variables, and must be conserved.
  437.  
  438. ; Registers AX, BX, CX, DX will not be preserved across function calls.
  439.  
  440. ; Firstly, the registers to be conserved through function calls, including
  441. ;    the setup of local variables.
  442.  
  443. link@    MACRO    _si,_di,_ES,locals
  444.     push    bp
  445.     mov    bp, sp
  446.     IFNB    <locals>
  447.         lea    sp, locals
  448.     ENDIF
  449.     IFNB    <_si>
  450.         push    si
  451.     ENDIF
  452.     IFNB    <_di>
  453.         push    di
  454.     ENDIF
  455. ENDM
  456.  
  457. unLink@ MACRO    _si,_di,_ES,locals
  458.     IFNB    <_di>
  459.         pop    di
  460.     ENDIF
  461.     IFNB    <_si>
  462.         pop    si
  463.     ENDIF
  464.     IFNB    <locals>
  465.         mov    sp, bp
  466.     ENDIF
  467.     pop    bp
  468. ENDM
  469.  
  470. .LIST
  471. 
  472.