home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c480 / 18.ddi / SOURCE / STARTUP / CMACROS.IN_ / CMACROS.IN
Encoding:
Text File  |  1993-02-08  |  11.8 KB  |  891 lines

  1. comment $
  2. cmacros - assembly macros for interfacing to HHLs
  3. (C)Copyright Microsoft Corp. 1984-1992
  4. $
  5. if @Version gt 510
  6. option m510, oldmacros
  7. else
  8. f510 equ <>
  9. endif
  10. .xcref ??_out
  11. ??_out MACRO string
  12. ifndef ?QUIET
  13. %out string
  14. endif
  15. ENDM
  16. if1
  17. outif MACRO id,defval,onmsg,offmsg
  18. ifndef id
  19. ifb <defval>
  20. id=0
  21. else
  22. id=defval
  23. endif
  24. endif
  25. if id
  26. id=1
  27. ifnb <onmsg>
  28. ??_out <! onmsg>
  29. endif
  30. else
  31. ifnb <offmsg>
  32. ??_out <! offmsg>
  33. endif
  34. endif
  35. endm
  36. error MACRO msg
  37. bug
  38. %out E r r o r ----- msg
  39. ENDM
  40. ??_out <cMacros Version 1.06+>
  41. outif memS,0,<Small Model>
  42. outif memM,0,<Medium Model>
  43. outif memL,0,<Large Model>
  44. outif memC,0,<Compact Model>
  45. outif memH,0,<Huge Model>
  46. memMOD= memS + memM + memL + memC + memH
  47. if memMOD ne 1
  48. if memMOD eq 0
  49. memS= 1
  50. outif memS,0,<Small Model>
  51. else
  52. error <Must have only 1 memory model selected>
  53. endif
  54. endif
  55. sizeC= memM + memL + memH
  56. sizeD= memL + memC + (memH*2)
  57. outif ?DF,0,<No segments or groups will be defined>
  58. outif ?WIN,1,<Windows Support>
  59. outif ?PLM,1,<PLM calling convention>
  60. endif
  61. .XCREF
  62. .XCREF ?N,?AX,?AH,?AL,?BX,?BH
  63. .XCREF ?BL,?CX,?CH,?CL,?DX,?DH
  64. .XCREF ?DL,?SI,?DI,?ES,?DS,?BP
  65. .XCREF ?SP,?SS,?CS
  66. .XCREF ?RSL,?CPD,?argl,?argc,?BA
  67. .XCREF ?ACB,???,?PO
  68. .XCREF ?PAS,?PC
  69. .XCREF Uconcat,mPush,mPop
  70. .XCREF ?RI,?pp,?pp1,?al1
  71. .XCREF ?aD,?AP,?Atal,?pd,?dd,?dd1,?ex1
  72. .XCREF ?pg,?pg1,?aloc,?cs1,?cs2
  73. .XCREF ?lb1,?lblpu
  74. .XCREF ?DF,?PLM,?WIN,?IA,?PU,?ADJ
  75. .CREF
  76. ?RSL = 0
  77. ?CPD = 0
  78. ?ArgL = 0
  79. ?ArgC = 0
  80. ?BA = 0
  81. ?ACB = 0
  82. ??? = 0
  83. ?PO = 0
  84. ?PAS = 0
  85. ?PC = 0
  86. ?IA = 0
  87. ?PU = 0
  88. ?ADJ = 0
  89. ?lblpu = 0
  90. ?N = 0000000000000000B
  91. ?AX = 0000000000000011B
  92. ?AH = 0000000000000001B
  93. ?AL = 0000000000000010B
  94. ?BX = 0000000000001100B
  95. ?BH = 0000000000000100B
  96. ?BL = 0000000000001000B
  97. ?CX = 0000000000110000B
  98. ?CH = 0000000000010000B
  99. ?CL = 0000000000100000B
  100. ?DX = 0000000011000000B
  101. ?DH = 0000000001000000B
  102. ?DL = 0000000010000000B
  103. ?SI = 0000000100000000B
  104. ?DI = 0000001000000000B
  105. ?ES = 0000010000000000B
  106. ?DS = 0000100000000000B
  107. ?BP = 0001000000000000B
  108. ?SP = 0010000000000000B
  109. ?SS = 0100000000000000B
  110. ?CS = 1000000000000000B
  111. uconcat macro n1,n2,o1,o2,p1,p2
  112. n1&n2 o1&o2 p1&p2
  113. endm
  114. mpush macro rV
  115. irp x,<ax,bx,cx,dx,si,di,es,ds,bp,sp,ss,cs>
  116. if rV AND ?&&x
  117. push x
  118. endif
  119. endm
  120. endm
  121. mpop macro rV
  122. irp x,<cs,ss,sp,bp,ds,es,di,si,dx,cx,bx,ax>
  123. if rV AND ?&&x
  124. pop x
  125. endif
  126. endm
  127. endm
  128. SAVE macro rL
  129. ?RSL = 0
  130. ?RI ?RSL,<rL>
  131. endm
  132. smashes macro n,rL
  133. .xcref
  134. .xcref ?SM&n
  135. .cref
  136. ?SM&n = 0
  137. ?RI ?SM&n,<rL>
  138. endm
  139. ?RI macro n,rL
  140. irp x,<rL>
  141. ifdef ?&&x
  142. n = n or ?&&x
  143. endif
  144. endm
  145. endm
  146. parmB macro nl
  147. ?pp <&nL>,<byte>,2,1
  148. endm
  149. parmW macro nl
  150. ?pp <&nL>,<word>,2,2
  151. endm
  152. parmD macro nl
  153. ife ?PLM
  154. irp x,<nL>
  155. ?pp <&&x>,<DWORD>,0,4
  156. ?pp <Off_&&x>,<WORD>,2,2
  157. ?pp <Seg_&&x>,<WORD>,2,2
  158. endm
  159. else
  160. irp x,<nL>
  161. ?pp <Seg_&&x>,<WORD>,2,2
  162. ?pp <Off_&&x>,<WORD>,2,2
  163. ?pp <&&x>,<DWORD>,0,4
  164. endm
  165. endif
  166. endm
  167. parmQ macro nl
  168. ?pp <&nL>,<QWORD>,8,8
  169. endm
  170. parmT macro nl
  171. ?pp <&nL>,<TBYTE>,10,10
  172. endm
  173. if sizeC
  174. parmCP macro nl
  175. parmD <nl>
  176. endm
  177. else
  178. parmCP macro nl
  179. parmW <nl>
  180. endm
  181. endif
  182. if sizeD
  183. parmDP macro nl
  184. parmD <nl>
  185. endm
  186. else
  187. parmDP macro nl
  188. parmW <nl>
  189. endm
  190. endif
  191. ?pp macro nL,t,l,s
  192. if ?CPD
  193. .xcref
  194. ife ?PLM
  195. irp x,<nL>
  196. ?pp1 x,<t>,%?PO,%?adj,%(?PO+?adj)
  197. ?PO = ?PO + l
  198. .xcref ?T&&x
  199. ?T&&x = s
  200. endm
  201. else
  202. irp x,<nL>
  203. ?PO = ?PO + l
  204. ?pp1 x,<t>,%?PO,%?adj,%(?PO+?adj)
  205. .xcref ?T&&x
  206. ?T&&x = s
  207. endm
  208. endif
  209. .cref
  210. else
  211. %out Parm(s) "&nl" declared outside proc def.
  212. endif
  213. endm
  214. ?pp1 macro n,t,o,a,b
  215. ife ?PLM
  216. n equ <t ptr [bp+b]>
  217. else
  218. n equ <t ptr [bp+a+?PO-o]>
  219. endif
  220. endm
  221. localB macro nL
  222. ?aLoc <&nL>,<BYTE ptr>,1,1,0
  223. endm
  224. localW macro nL
  225. ?aLoc <&nL>,<WORD PTR>,2,2,1
  226. endm
  227. localD macro nL
  228. irp x,<nL>
  229. ?aLoc <Seg_&&x>,<WORD PTR>,2,2,1
  230. ?aLoc <Off_&&x>,<WORD PTR>,2,2,1
  231. ?aLoc <&&x>,<DWORD PTR>,0,4,1
  232. endm
  233. endm
  234. localQ macro nL
  235. ?aLoc <&nL>,<QWORD PTR>,8,8,1
  236. endm
  237. localT macro nL
  238. ?aLoc <&nL>,<TBYTE PTR>,10,10,1
  239. endm
  240. if sizeC
  241. localCP macro nL
  242. localD <nL>
  243. endm
  244. else
  245. localCP macro nL
  246. localW <nL>
  247. endm
  248. endif
  249. if sizeD
  250. localDP macro nL
  251. localD <nL>
  252. endm
  253. else
  254. localDP macro nL
  255. localW <nL>
  256. endm
  257. endif
  258. localV macro n,a
  259. ?aLoc <&n>,<BYTE PTR>,%(&a),0,1
  260. endm
  261. ?aLoc macro nL,t,l,s,a
  262. if ?CPD
  263. .xcref
  264. ??? = ??? + l
  265. if a
  266. ??? = ((??? + 1) AND 0FFFEH)
  267. endif
  268. irp x,<nL>
  269. ?aL1 x,<t>,%???
  270. .xcref ?T&&x
  271. ?T&&x = s
  272. endm
  273. .cref
  274. else
  275. %out Locals "&nl" declared outside procedure def.
  276. endif
  277. endm
  278. ?aL1 macro n,t,o
  279. if ?IA
  280. n equ <t [bp-?IA-o]>
  281. else
  282. n equ <t [bp-o]>
  283. endif
  284. endm
  285. globalB macro n,i,s
  286. ?aD <n>,1
  287. ?dd n,1,<BYTE>,<DB>,<i>,<s>
  288. endm
  289. globalW macro n,i,s
  290. ?aD <n>,2
  291. ?dd n,1,<WORD>,<DW>,<i>,<s>
  292. endm
  293. globalD macro n,i,s
  294. ?aD <n>,4
  295. ?dd n,1,<DWORD>,<DD>,<i>,<s>
  296. endm
  297. globalQ macro n,i,s
  298. ?aD <n>,8
  299. ?dd n,1,<QWORD>,<DQ>,<i>,<s>
  300. endm
  301. globalT macro n,i,s
  302. ?aD <n>,10
  303. ?dd n,1,<TBYTE>,<DT>,<i>,<s>
  304. endm
  305. if sizeC
  306. globalCP macro n,i,s
  307. globalD n,<i>,<s>
  308. endm
  309. else
  310. globalCP macro n,i,s
  311. globalW n,<i>,<s>
  312. endm
  313. endif
  314. if sizeD
  315. globalDP macro n,i,s
  316. globalD n,<i>,<s>
  317. endm
  318. else
  319. globalDP macro n,i,s
  320. globalW n,<i>,<s>
  321. endm
  322. endif
  323. staticB macro n,i,s
  324. ?aD <n>,1
  325. ?dd n,0,<BYTE>,<DB>,<i>,<s>
  326. endm
  327. staticW macro n,i,s
  328. ?aD <n>,2
  329. ?dd n,0,<WORD>,<DW>,<i>,<s>
  330. endm
  331. staticD macro n,i,s
  332. ?aD <n>,4
  333. ?dd n,0,<DWORD>,<DD>,<i>,<s>
  334. endm
  335. staticQ macro n,i,s
  336. ?aD <n>,8
  337. ?dd n,0,<QWORD>,<DQ>,<i>,<s>
  338. endm
  339. staticT macro n,i,s
  340. ?aD <n>,10
  341. ?dd n,0,<TBYTE>,<DT>,<i>,<s>
  342. endm
  343. if sizeC
  344. staticCP macro n,i,s
  345. staticD n,<i>,<s>
  346. endm
  347. else
  348. staticCP macro n,i,s
  349. staticW n,<i>,<s>
  350. endm
  351. endif
  352. if sizeD
  353. staticDP macro n,i,s
  354. staticD n,<i>,<s>
  355. endm
  356. else
  357. staticDP macro n,i,s
  358. staticW n,<i>,<s>
  359. endm
  360. endif
  361. ?dd macro n,p,t,d,i,s
  362. ife ?PLM
  363. n label t
  364. ?dd1 _&n,p,<d>,<i>,<s>
  365. else
  366. ?dd1 n,p,<d>,<i>,<s>
  367. endif
  368. endm
  369. ?dd1 macro n,p,d,i,s
  370. if p
  371. PUBLIC n
  372. endif
  373. ifb <s>
  374. n d i
  375. else
  376. ifb <i>
  377. n d s DUP (?)
  378. else
  379. n d s DUP (i)
  380. endif
  381. endif
  382. endm
  383. externB macro nL
  384. ?ex1 <&nL>,1,<BYTE>
  385. endm
  386. externW macro nL
  387. ?ex1 <&nL>,2,<WORD>
  388. endm
  389. externD macro nL
  390. ?ex1 <&nL>,4,<DWORD>
  391. endm
  392. externQ macro nL
  393. ?ex1 <&nL>,8,<QWORD>
  394. endm
  395. externT macro nL
  396. ?ex1 <&nL>,10,<TBYTE>
  397. endm
  398. externNP macro nL
  399. ?ex1 <&nL>,2,<NEAR>
  400. endm
  401. externFP macro nL
  402. ?ex1 <&nL>,4,<FAR>
  403. endm
  404. if sizeC
  405. externP macro nL
  406. ?ex1 <&nL>,4,<FAR>
  407. endm
  408. else
  409. externP macro nL
  410. ?ex1 <&nL>,2,<NEAR>
  411. endm
  412. endif
  413. if sizeC
  414. externCP macro nL
  415. ?ex1 <&nL>,4,<DWORD>
  416. endm
  417. else
  418. externCP macro nL
  419. ?ex1 <&nL>,2,<WORD>
  420. endm
  421. endif
  422. if sizeD
  423. externDP macro nL
  424. ?ex1 <&nL>,4,<DWORD>
  425. endm
  426. else
  427. externDP macro nL
  428. ?ex1 <&nL>,2,<WORD>
  429. endm
  430. endif
  431. ?ex1 macro nL,s,d
  432. irp x,<nL>
  433. .xcref
  434. .xcref ?T&&x
  435. .cref
  436. ?T&&x = s
  437. ife ?PLM
  438. extrn _&&x:&d
  439. x equ _&&x
  440. else
  441. extrn x:&d
  442. endif
  443. endm
  444. endm
  445. labelB macro nL
  446. ?lb1 <&nL>,1,<BYTE>
  447. endm
  448. labelW macro nL
  449. ?lb1 <&nL>,2,<WORD>
  450. endm
  451. labelD macro nL
  452. ?lb1 <&nL>,4,<DWORD>
  453. endm
  454. labelQ macro nL
  455. ?lb1 <&nL>,8,<QWORD>
  456. endm
  457. labelT macro nL
  458. ?lb1 <&nL>,10,<TBYTE>
  459. endm
  460. labelNP macro nL
  461. ?lb1 <&nL>,2,<NEAR>
  462. endm
  463. labelFP macro nL
  464. ?lb1 <&nL>,4,<FAR>
  465. endm
  466. if sizeC
  467. labelP macro nL
  468. ?lb1 <&nL>,4,<FAR>
  469. endm
  470. else
  471. labelP macro nL
  472. ?lb1 <&nL>,2,<NEAR>
  473. endm
  474. endif
  475. if sizeC
  476. labelCP macro nL
  477. ?lb1 <&nL>,4,<DWORD>
  478. endm
  479. else
  480. labelCP macro nL
  481. ?lb1 <&nL>,2,<WORD>
  482. endm
  483. endif
  484. if sizeD
  485. labelDP macro nL
  486. ?lb1 <&nL>,4,<DWORD>
  487. endm
  488. else
  489. labelDP macro nL
  490. ?lb1 <&nL>,2,<WORD>
  491. endm
  492. endif
  493. ?lb1 macro nL,s,d
  494. ?lblpu = 0
  495. irp x,<nL>
  496. ifidn <x>,<PUBLIC>
  497. ?lblpu = 1
  498. else
  499. .xcref
  500. .xcref ?T&&x
  501. .cref
  502. ?T&&x = s
  503. ife ?PLM
  504. if ?lblpu
  505. public _&&x
  506. endif
  507. _&&x label &d
  508. x equ _&&x
  509. else
  510. if ?lblpu
  511. public x
  512. endif
  513. x label &d
  514. endif
  515. endif
  516. endm
  517. endm
  518. defB macro nL
  519. ?aD <&nL>,1
  520. endm
  521. defW macro nL
  522. ?aD <&nL>,2
  523. endm
  524. defD macro nL
  525. ?aD <&nL>,4
  526. endm
  527. defQ macro nL
  528. ?aD <&nL>,8
  529. endm
  530. defT macro nL
  531. ?aD <&nL>,10
  532. endm
  533. if sizeC
  534. defCP macro nL
  535. defD <nL>
  536. endm
  537. else
  538. defCP macro nL
  539. defW <nL>
  540. endm
  541. endif
  542. if sizeD
  543. defDP macro nL
  544. defD <nL>
  545. endm
  546. else
  547. defDP macro nL
  548. defW <nL>
  549. endm
  550. endif
  551. ?aD macro nL,s
  552. irp x,<nL>
  553. .xcref
  554. .xcref ?T&&x
  555. .cref
  556. ?T&&x = s
  557. endm
  558. endm
  559. regPtr macro n,S,O
  560. .xcref
  561. .xcref ?T&n,?SR&n,?OR&n
  562. .cref
  563. ?T&n = 0FFFFH
  564. ?SR&n = 0
  565. ?RI ?SR&n,<&S>
  566. ?OR&n = 0
  567. ?RI ?OR&n,<&O>
  568. endm
  569. arg macro aArg
  570. irp x,<aArg>
  571. ?argc = ?argc + 1
  572. ?Atal <x>,%?argc
  573. endm
  574. endm
  575. ?Atal macro n,i
  576. .xcref
  577. .xcref ?ALI&i
  578. .cref
  579. ?ALI&i ¯o
  580. ?AP n
  581. &endm
  582. endm
  583. ?AP macro n
  584. ?argl = ?argl + 2
  585. ifdef ?T&n
  586. ife ?T&n-1
  587. push word ptr (n)
  588. exitm
  589. endif
  590. ife ?T&n-2
  591. push n
  592. exitm
  593. endif
  594. ife ?T&n-4
  595. push word ptr (n)+2
  596. push word ptr (n)
  597. ?argl = ?argl + 2
  598. exitm
  599. endif
  600. ife ?T&n-8
  601. push word ptr (n)+6
  602. push word ptr (n)+4
  603. push word ptr (n)+2
  604. push word ptr (n)
  605. ?argl = ?argl + 6
  606. exitm
  607. endif
  608. ife ?T&n-0FFFFH
  609. mpush %(?SR&n)
  610. mpush %(?OR&n)
  611. ?argl = ?argl + 2
  612. exitm
  613. endif
  614. ife ?T&n
  615. push word ptr (n)
  616. exitm
  617. endif
  618. endif
  619. push n
  620. endm
  621. ife ?PLM
  622. ccall macro n,a,extraArg
  623. ifnb <a>
  624. Arg <a>
  625. endif
  626. ifdef ?SM&n
  627. ?RSL = ?RSL AND ?SM&n
  628. endif
  629. mpush %?RSL
  630. ?argl = 0
  631. ?ACB = ?argc
  632. rept ?argc
  633. uconcat <?ALI>,%?ACB
  634. uconcat <purge>,,<?ALI>,%?ACB
  635. ?ACB = ?ACB - 1
  636. endm
  637. ife ?PLM
  638. ifb <extraArg>
  639. call _&n
  640. else
  641. call n
  642. endif
  643. else
  644. call n
  645. endif
  646. if ?argl
  647. add sp,?argl
  648. endif
  649. mpop %?RSL
  650. ?RSL = 0
  651. ?argc = 0
  652. ?argl = 0
  653. endm
  654. else
  655. ccall macro n,a
  656. ifnb <a>
  657. Arg <a>
  658. endif
  659. ifdef ?SM&n
  660. ?RSL = ?RSL AND ?SM&n
  661. endif
  662. mpush %?RSL
  663. ?argl = 0
  664. ?ACB = 1
  665. rept ?argc
  666. uconcat <?ALI>,%?ACB
  667. uconcat <purge>,,<?ALI>,%?ACB
  668. ?ACB = ?ACB + 1
  669. endm
  670. ife ?PLM
  671. call _&n
  672. else
  673. call n
  674. endif
  675. mpop %?RSL
  676. ?RSL = 0
  677. ?argc = 0
  678. ?argl = 0
  679. endm
  680. endif
  681. cProc macro n,cla,s
  682. ?pd n,<cla>,<s>,4
  683. endm
  684. ?pd macro n,cla,a,i
  685. if ?CPD
  686. ?UTPE
  687. endif
  688. ?CPD = 1
  689. ??? = 0
  690. ?argc = 0
  691. ?BA = 0
  692. ?PO = 0
  693. ?PU = 0
  694. ?IA = 0
  695. ?adj = i
  696. ?PAS = 0
  697. ifnb <a>
  698. ?RI ?PAS,<a>
  699. endif
  700. ?PC = sizeC
  701. irp x,<cla>
  702. ifidn <x>,<FAR>
  703. ?PC = 1
  704. endif
  705. ifidn <x>,<NEAR>
  706. ?PC = 0
  707. endif
  708. ifidn <x>,<PUBLIC>
  709. ?PU = 1
  710. endif
  711. endm
  712. if ?PC
  713. if ?WIN
  714. ?IA = 2
  715. endif
  716. ?adj = ?adj + 2
  717. endif
  718. ife ?PLM
  719. ife ?PC
  720. n label near
  721. else
  722. n label far
  723. endif
  724. ?pg <_&n>,%?PU,%?PC,%?PAS
  725. else
  726. ?pg <n>,%?PU,%?PC,%?PAS
  727. endif
  728. endm
  729. ?pg macro n,p,cla,a
  730. .xcref
  731. cBegin ¯o g
  732. .xcref
  733. ?pg1 <n>,c,a,%?PO
  734. ?CPD = 0
  735. ?argc = 0
  736. ?BA = 1
  737. ??? = (???+1) AND 0FFFEH
  738. if p
  739. PUBLIC n
  740. endif
  741. ife cla
  742. n proc NEAR
  743. else
  744. n proc FAR
  745. endif
  746. ifidn <g>,<nogen>
  747. if ???+?PO+a
  748. ??_out <cBegin - nogen>
  749. endif
  750. else
  751. if ?IA
  752. mov ax,ds
  753. nop
  754. inc bp
  755. push bp
  756. mov bp,sp
  757. push ds
  758. mov ds,ax
  759. else
  760. push bp
  761. mov bp,sp
  762. endif
  763. if ???
  764. sub sp,???
  765. endif
  766. mPush a
  767. endif
  768. .cref
  769. purge cBegin
  770. &endm
  771. ?UTPE ¯o
  772. %out Unterminated Procedure Definition: "&n"
  773. &endm
  774. endm
  775. ?pg1 macro n,cla,a,o
  776. .xcref
  777. cEnd ¯o g
  778. .xcref
  779. ?BA = 0
  780. ifidn <g>,<nogen>
  781. if o+a
  782. %out <cEnd - nogen>
  783. endif
  784. else
  785. mPop a
  786. if ?IA
  787. sub bp,2
  788. mov sp,bp
  789. pop ds
  790. pop bp
  791. dec bp
  792. else
  793. ifdif <g>,<nolocals>
  794. mov sp,bp
  795. endif
  796. pop bp
  797. endif
  798. ife ?PLM
  799. ret
  800. else
  801. ret o
  802. endif
  803. endif
  804. n endp
  805. .cref
  806. purge cEnd
  807. &endm
  808. .cref
  809. endm
  810. assumes macro s,g
  811. local assumed
  812. assumed = 0
  813. ifidn <code>,<g>
  814. assume s&:_TEXT
  815. assumed = 1
  816. endif
  817. ifidn <CODE>,<g>
  818. assume s&:_TEXT
  819. assumed = 1
  820. endif
  821. ifidn <data>,<g>
  822. assume s&:dgroup
  823. assumed = 1
  824. endif
  825. ifidn <DATA>,<g>
  826. assume s&:dgroup
  827. assumed = 1
  828. endif
  829. ife assumed
  830. assume s&:&g
  831. endif
  832. endm
  833. createSeg macro n,ln,a,co,cla,grp
  834. ifnb <cla>
  835. n segment a co '&cla'
  836. else
  837. n segment a co
  838. endif
  839. n ends
  840. ?cs1 <n>,<ln>
  841. ifnb <grp>
  842. grp group n
  843. endif
  844. endm
  845. defGrp macro nam
  846. endm
  847. ?cs1 macro n,ln
  848. begin&ln ¯o
  849. ?cs2 <n>
  850. n segment
  851. &endm
  852. endm
  853. ?cs2 macro n
  854. sEnd ¯o dummy
  855. n ends
  856. &endm
  857. endm
  858. sBegin macro ln
  859. begin&ln
  860. endm
  861. ife ?DF
  862. createSeg _TEXT,code,word,public,CODE
  863. createSeg _DATA,data,word,public,DATA,DGROUP
  864. defGrp DGROUP
  865. codeOFFSET equ <OFFSET _TEXT:>
  866. dataOFFSET equ <OFFSET DGROUP:>
  867. endif
  868. errnz macro x
  869. if x
  870. errnz1 <x>,%(x)
  871. endif
  872. endm
  873. errnz1 macro x1,x2
  874. = *ERRNZ* x1 = x2
  875. endm
  876. errn$ macro l,x
  877. errnz <OFFSET $ - OFFSET l x>
  878. ENDM
  879. callcrt MACRO funcname
  880. ifdef _QC2
  881. call funcname
  882. else
  883. if sizeC
  884. push cs
  885. call near ptr (funcname)
  886. else
  887. call funcname
  888. endif
  889. endif
  890. ENDM
  891.