Annotation of pmsdk/samples/newcard/cmacros.inc, revision 1.1.1.1

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

unix.superglobalmegacorp.com

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