Annotation of os2sdk/demos/apps/mandel/cmacros.inc, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.