Annotation of os232sdk/toolkt20/masm/os2inc/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-1990
                      4: $
                      5: .xcref
                      6: .xcref ??_out
                      7: ??_out macro t
                      8: ifndef ?QUIET
                      9: %out t
                     10: endif
                     11: endm
                     12: outif macro name,defval,onmsg,offmsg
                     13: ifndef name
                     14: ifb <defval>
                     15: name=0
                     16: else
                     17: name=defval
                     18: endif
                     19: endif
                     20: if name
                     21: name=1
                     22: ifnb <onmsg>
                     23: ??_out <! onmsg>
                     24: endif
                     25: else
                     26: ifnb <offmsg>
                     27: ??_out <! offmsg>
                     28: endif
                     29: endif
                     30: endm
                     31: .xcref ??error
                     32: ??error macro msg
                     33: %out e r r o r ----- msg
                     34: .err e r r o r ----- msg
                     35: endm
                     36: .xcref ??error2
                     37: ??error2 macro msg
                     38: if2
                     39: %out e r r o r ----- msg
                     40: .err e r r o r ----- msg
                     41: endif
                     42: endm
                     43: .xcref ?sps,?ps,?rps
                     44: ?ps=0
                     45: ?sps macro
                     46: ?ps=@Cpu
                     47: endm
                     48: ?rps macro
                     49: if ?ps and 80h
                     50: if ?ps and 08h
                     51: .386P
                     52: else
                     53: if ?ps and 04h
                     54: .286P
                     55: else
                     56: ??error2 <Internal error -- illegal CpuMode>
                     57: endif
                     58: endif
                     59: else
                     60: if ?ps and 08h
                     61: .386
                     62: else
                     63: if ?ps and 04h
                     64: .286
                     65: else
                     66: if ?ps and 02h
                     67: .186
                     68: else
                     69: if ?ps and 01h
                     70: .8086
                     71: else
                     72: ??error2 <Internal error -- illegal CpuMode>
                     73: endif
                     74: endif
                     75: endif
                     76: endif
                     77: endif
                     78: if ?ps and 800h
                     79: .387
                     80: else
                     81: if ?ps and 400h
                     82: .287
                     83: else
                     84: if ?ps and 100h
                     85: .8087
                     86: else
                     87: ??error2 <Internal error -- illegal CpuMode>
                     88: endif
                     89: endif
                     90: endif
                     91: endm
                     92: .xcref ASMpass
                     93: .xcref memS,memM,memL,memC,memH,memMOD,sizec,sized
                     94: if1
                     95: ASMpass=1
                     96: ifdef ?SMALL
                     97: memS=1
                     98: endif
                     99: ifdef ?MEDIUM
                    100: memM=1
                    101: endif
                    102: ifdef ?COMPACT
                    103: memC=1
                    104: endif
                    105: ifdef ?LARGE
                    106: memL=1
                    107: endif
                    108: ifdef ?HUGE
                    109: memH=1
                    110: endif
                    111: ??_out <cMacros Version 3.08 - 01/15/90>
                    112: ??_out <Copyright (C) Microsoft Corp. 1984-1990. All rights reserved.>
                    113: outif memS,0,<Small Model>
                    114: outif memM,0,<Medium model>
                    115: outif memL,0,<Large Model>
                    116: outif memC,0,<Compact Model>
                    117: outif memH,0,<Huge Model>
                    118: memMOD= memS + memM + memL + memC + memH
                    119: if memMOD ne 1
                    120: if memMOD eq 0
                    121: memS = 1
                    122: outif memS,0,<Small model>
                    123: else
                    124: ??error <must have only 1 memory model selected>
                    125: endif
                    126: endif
                    127: sizec= memM + memL + memH
                    128: sized= memL + memC + (memH*2)
                    129: outif ?DF,0,<No segments or groups will be defined>
                    130: outif ?TF,0,<Epilog sequences assume valid SP>
                    131: outif ?WIN,1,<Windows support>
                    132: outif ?PLM,1,<PL/M calling convention>
                    133: ifndef ?NODATA
                    134: ?nodata1=0
                    135: else
                    136: ?nodata1=1
                    137: ??_out <! NODATA module>
                    138: endif
                    139: ifndef ?CHKSTK
                    140: ?chkstk1=0
                    141: else
                    142: ?chkstk1=1
                    143: ifdef ?CHKSTKPROC
                    144: ??_out <! Private stack checking enabled>
                    145: else
                    146: ??_out <! Stack checking enabled>
                    147: endif
                    148: endif
                    149: ifndef DOS5
                    150: ?DOS5=0
                    151: else
                    152: ?DOS5=1
                    153: ??_out <! DOS5 module>
                    154: endif
                    155: ifdef ?PROFILE
                    156: ??_out <! Native profiling enabled>
                    157: endif
                    158: ifdef ATTRPROF
                    159: ??_out <! Attributed profiling enabled>
                    160: ?aprof1=1
                    161: else
                    162: ?aprof1=0
                    163: endif
                    164: ifndef ?NO_BP
                    165: ?no_bp1=0
                    166: else
                    167: ?no_bp1=1
                    168: ??_out <! NO_BP is default>
                    169: endif
                    170: ifndef ?REG32
                    171: ?bigreg=0
                    172: else
                    173: ?bigreg=1
                    174: ??_out <! 32-bit registers recognized.>
                    175: endif
                    176: ifndef ?ENTER
                    177: ?enter1=0
                    178: else
                    179: ?enter1=1
                    180: ??_out <! ENTER/LEAVE module>
                    181: endif
                    182: ifdef ?USE32
                    183: ?u32=1
                    184: .xcref ?u32
                    185: endif
                    186: ifdef ?USE16
                    187: ?u32=0
                    188: .xcref ?u32
                    189: endif
                    190: else
                    191: ASMpass=2
                    192: endif
                    193: .xcref ?n,?ax,?ah,?al,?bx,?bh
                    194: .xcref ?bl,?cx,?ch,?cl,?dx,?dh
                    195: .xcref ?dl,?si,?di,?es,?ds,?bp
                    196: .xcref ?sp,?ss,?cs
                    197: .xcref ?n,?AX,?AH,?AL,?BX,?BH
                    198: .xcref ?BL,?CX,?CH,?CL,?DX,?DH
                    199: .xcref ?DL,?SI,?DI,?ES,?DS,?BP
                    200: .xcref ?SP,?SS,?CS
                    201: if ?bigreg
                    202: .xcref ?eax,?ebx,?ecx,?edx,?esi,?edi
                    203: .xcref ?ebp,?esp,?fs,?gs
                    204: .xcref ?EAX,?EBX,?ECX,?EDX,?ESI,?EDI
                    205: .xcref ?EBP,?ESP,?FS,?GS
                    206: endif
                    207: .xcref ?rsl,?cpd,?argl,?argc,?ba
                    208: .xcref ?acb,???,?po
                    209: .xcref ?pas,?pc
                    210: .xcref uconcat,mpush,mpop
                    211: .xcref ?ri,?pp,?pp1,?al1
                    212: .xcref ?ad,?ap,?atal,?dd,?dd1,?dd2
                    213: .xcref ?pg,?pg1,?aloc,?cs1,?cs2
                    214: .xcref ?DF,?TF,?ff,?PLM,?WIN,?ia,?pu,?adj
                    215: .xcref ?uf,?rp,?nx,?nd,?nodata1,?chkstk1,?aprof1,?aprof2,?DOS5
                    216: .xcref ?wfp,arg,cCall,cProc,assumes,?cs3,?cs2,?cs1
                    217: .xcref defgrp,addseg,createSeg
                    218: .xcref save,outif,errnz,errn$,errnz1
                    219: .xcref ?PLMPrevParm,?gcc
                    220: .xcref ?cCall1,?pcc,?no_bp1,?no_bp2,?bigreg,?enter1
                    221: .xcref ?cbe,?pcbe
                    222: ?rsl = 0
                    223: ?cpd = 0
                    224: ?argl = 0
                    225: ?argc = 0
                    226: ?ba = 0
                    227: ?acb = 0
                    228: ??? = 0
                    229: ?po = 0
                    230: ?pas = 0
                    231: ?pc = 0
                    232: ?ia = 0
                    233: ?pu = 0
                    234: ?adj = 0
                    235: ?rp = 0
                    236: ?uf = 0
                    237: ?nd = 0
                    238: ?ent = 0
                    239: ?nx = 0
                    240: ?wfp = 0
                    241: ?ff = 0
                    242: ?dd2 = 0
                    243: ?cCall1 = 0
                    244: ?pcc = ?PLM
                    245: ?PLMPrevParm = 0
                    246: ?no_bp2 = ?no_bp1
                    247: ?cbe = 0
                    248: ?aprof2 = 0
                    249: .xcref ?casen
                    250: if1
                    251: ?casen = 0
                    252: endif
                    253: ?n = 0000000000000000b
                    254: ?ax = 0000000000000011b
                    255: ?ah = 0000000000000001b
                    256: ?al = 0000000000000010b
                    257: ?bx = 0000000000001100b
                    258: ?bh = 0000000000000100b
                    259: ?bl = 0000000000001000b
                    260: ?cx = 0000000000110000b
                    261: ?ch = 0000000000010000b
                    262: ?cl = 0000000000100000b
                    263: ?dx = 0000000011000000b
                    264: ?dh = 0000000001000000b
                    265: ?dl = 0000000010000000b
                    266: ?si = 0000000100000000b
                    267: ?di = 0000001000000000b
                    268: ?es = 0000010000000000b
                    269: ?ds = 0000100000000000b
                    270: ?bp = 0001000000000000b
                    271: ?sp = 0010000000000000b
                    272: ?ss = 0100000000000000b
                    273: ?cs = 1000000000000000b
                    274: if ?bigreg
                    275: ?sps
                    276: .386p
                    277: ?eax = 10000000000000000b
                    278: ?ebx = 100000000000000000b
                    279: ?ecx = 1000000000000000000b
                    280: ?edx = 10000000000000000000b
                    281: ?esi = 100000000000000000000b
                    282: ?edi = 1000000000000000000000b
                    283: ?ebp = 10000000000000000000000b
                    284: ?esp = 100000000000000000000000b
                    285: ?fs = 1000000000000000000000000b
                    286: ?gs = 10000000000000000000000000b
                    287: ?rps
                    288: endif
                    289: ?AX = 0000000000000011b
                    290: ?AH = 0000000000000001b
                    291: ?AL = 0000000000000010b
                    292: ?BX = 0000000000001100b
                    293: ?BH = 0000000000000100b
                    294: ?BL = 0000000000001000b
                    295: ?CX = 0000000000110000b
                    296: ?CH = 0000000000010000b
                    297: ?CL = 0000000000100000b
                    298: ?DX = 0000000011000000b
                    299: ?DH = 0000000001000000b
                    300: ?DL = 0000000010000000b
                    301: ?SI = 0000000100000000b
                    302: ?DI = 0000001000000000b
                    303: ?ES = 0000010000000000b
                    304: ?DS = 0000100000000000b
                    305: ?BP = 0001000000000000b
                    306: ?SP = 0010000000000000b
                    307: ?SS = 0100000000000000b
                    308: ?CS = 1000000000000000b
                    309: if ?bigreg
                    310: ?sps
                    311: .386p
                    312: ?EAX = 10000000000000000b
                    313: ?EBX = 100000000000000000b
                    314: ?ECX = 1000000000000000000b
                    315: ?EDX = 10000000000000000000b
                    316: ?ESI = 100000000000000000000b
                    317: ?EDI = 1000000000000000000000b
                    318: ?EBP = 10000000000000000000000b
                    319: ?ESP = 100000000000000000000000b
                    320: ?FS = 1000000000000000000000000b
                    321: ?GS = 10000000000000000000000000b
                    322: ?rps
                    323: endif
                    324: .cref
                    325: uconcat macro a,b,c,d,e,f,g
                    326: a&b c&d e&f&g
                    327: endm
                    328: mpush macro r
                    329: if ?bigreg
                    330: ?sps
                    331: .386p
                    332: irp x,<ax,bx,cx,dx,si,di,bp,sp>
                    333: if (r and ?e&&x)
                    334:        push    e&&x
                    335: else
                    336: if (r and ?&&x)
                    337:        push    x
                    338: endif
                    339: endif
                    340: endm
                    341: irp x,<es,ds,ss,cs,fs,gs>
                    342: if (r and ?&&x)
                    343:        push    x
                    344: endif
                    345: endm
                    346: ?rps
                    347: else
                    348: irp x,<ax,bx,cx,dx,si,di,es,ds,bp,sp,ss,cs>
                    349: if (r and ?&&x)
                    350:        push    x
                    351: endif
                    352: endm
                    353: endif
                    354: endm
                    355: mpop macro r
                    356: if ?bigreg
                    357: ?sps
                    358: .386p
                    359: irp x,<gs,fs,cs,ss,ds,es>
                    360: if (r and ?&&x)
                    361:        pop     x
                    362: endif
                    363: endm
                    364: irp x,<sp,bp,di,si,dx,cx,bx,ax>
                    365: if (r and ?e&&x)
                    366:        pop     e&&x
                    367: else
                    368: if (r and ?&&x)
                    369:        pop     x
                    370: endif
                    371: endif
                    372: endm
                    373: ?rps
                    374: else
                    375: irp x,<cs,ss,sp,bp,ds,es,di,si,dx,cx,bx,ax>
                    376: if (r and ?&&x)
                    377:        pop     x
                    378: endif
                    379: endm
                    380: endif
                    381: endm
                    382: save macro r
                    383: ?rsl=0
                    384: ?ri ?rsl,<r>
                    385: endm
                    386: ?ri macro n,r
                    387: irp x,<r>
                    388: ifdef ?&&x
                    389: n=n or ?&&x
                    390: else
                    391: ??error2 <unknown register x>
                    392: .err
                    393: endif
                    394: endm
                    395: endm
                    396: .xcref
                    397: .xcref parmB,parmW,parmD,parmQ,parmT,parmCP,parmDP,parmH
                    398: .cref
                    399: parmB macro n
                    400: ?pp <n>,<byte>,2,1
                    401: endm
                    402: parmW macro n
                    403: ?pp <n>,<word>,2,2
                    404: endm
                    405: parmD macro n
                    406: ife ?pcc
                    407: irp x,<n>
                    408: ?pp <&&x>,<dword>,0,4
                    409: ?pp <off_&&x>,<word>,2,2
                    410: ?pp <seg_&&x>,<word>,2,2
                    411: endm
                    412: else
                    413: irp x,<n>
                    414: ?pp <seg_&&x>,<word>,2,2
                    415: ?pp <off_&&x>,<word>,2,2
                    416: ?pp <&&x>,<dword>,0,4
                    417: endm
                    418: endif
                    419: endm
                    420: parmH macro n
                    421: ?pp <n>,<word>,4,2
                    422: endm
                    423: parmQ macro n
                    424: ?pp <n>,<qword>,8,8
                    425: endm
                    426: parmT macro n
                    427: ?pp <n>,<tbyte>,10,10
                    428: endm
                    429: if sizec
                    430: parmCP macro n
                    431: parmD <n>
                    432: endm
                    433: else
                    434: parmCP macro n
                    435: parmW <n>
                    436: endm
                    437: endif
                    438: if sized
                    439: parmDP macro n
                    440: parmD <n>
                    441: endm
                    442: else
                    443: parmDP macro n
                    444: parmW <n>
                    445: endm
                    446: endif
                    447: ?pp macro n,t,l,s
                    448: if ?cpd
                    449: .xcref
                    450: irp x,<n>
                    451: .xcref ?t_&&x
                    452: ?t_&&x=s
                    453: ife ?pcc
                    454: ?pp1 x,<t>,,,%(?po+?adj)
                    455: ?po=?po+l
                    456: else
                    457: ?PLMPrevParm=?PLMPrevParm+1
                    458: ?po=?po+l
                    459: ?pp1 x,<t>,%?po,%?adj,,%?PLMPrevParm,%(?PLMPrevParm-1)
                    460: endif
                    461: endm
                    462: .cref
                    463: else
                    464: ??error2 <parm(s) "&n" declared outside proc def>
                    465: endif
                    466: endm
                    467: ?pp1 macro n,t,o,a,b,cpc,ppc
                    468: ife ?pcc
                    469: if ?no_bp2
                    470: n equ (t ptr [+b])
                    471: else
                    472: n equ (t ptr [bp][+b])
                    473: endif
                    474: else
                    475: .xcref
                    476: .xcref ?PLMParm&cpc
                    477: .cref
                    478: if ?no_bp2
                    479: ?PLMParm&cpc &macro po
                    480: uconcat <n>,,<equ>,,<(t ptr [+>,%(a+po-o),<])>
                    481: ?PLMParm&ppc po
                    482: purge ?PLMParm&cpc
                    483: &endm
                    484: else
                    485: ?PLMParm&cpc &macro po
                    486: uconcat <n>,,<equ>,,<(t ptr [bp][+>,%(a+po-o),<])>
                    487: ?PLMParm&ppc po
                    488: purge ?PLMParm&cpc
                    489: &endm
                    490: endif
                    491: endif
                    492: endm
                    493: ifndef ?NOPARMR
                    494: .xcref
                    495: .xcref ?pr,parmR
                    496: .cref
                    497: parmR macro n,r,r2
                    498: ?pr n,r,r2,%?rp,%(?ia+2)
                    499: endm
                    500: ?pr macro n,r,r2,i,o
                    501: .xcref
                    502: ifnb <r2>
                    503: parmR seg_&n,r
                    504: parmR off_&n,r2
                    505: if ?no_bp2
                    506: n equ (dword ptr [-o-2])
                    507: else
                    508: n equ (dword ptr [bp][-o-2])
                    509: endif
                    510: .xcref ?t_&n
                    511: ?t_&n=4
                    512: else
                    513: .xcref ?rp&i
                    514: ?rp&i=0
                    515: ifdef ?&r
                    516: ?rp&i=?&r
                    517: endif
                    518: if ??? or (?cpd eq 0) or (?rp&i eq 0)
                    519: ??error2 <invalid parmR encountered: &n,&r>
                    520: exitm
                    521: endif
                    522: if ?no_bp2
                    523: n equ (word ptr [-o])
                    524: else
                    525: n equ (word ptr [bp][-o])
                    526: endif
                    527: .xcref ?t_&n
                    528: ?t_&n=2
                    529: irp x,<bh,ch,dh,bl,cl,dl,ah,al>
                    530: if ?&&x eq ?&r
                    531: if ?no_bp2
                    532: n equ (byte ptr [-o])
                    533: else
                    534: n equ (byte ptr [bp][-o])
                    535: endif
                    536: ?t_&n=1
                    537: exitm
                    538: endif
                    539: endm
                    540: ?ia=?ia+2
                    541: ?rp=?rp+1
                    542: endif
                    543: .cref
                    544: endm
                    545: endif
                    546: .xcref
                    547: .xcref localB,localW,localD,localQ,localT,localCP,localDP,localV
                    548: .cref
                    549: localB macro n
                    550: ?aloc <n>,<byte ptr>,1,1,0
                    551: endm
                    552: localW macro n
                    553: ?aloc <n>,<word ptr>,2,2,1
                    554: endm
                    555: localD macro n
                    556: irp x,<n>
                    557: ?aloc <seg_&&x>,<word ptr>,2,2,1
                    558: ?aloc <off_&&x>,<word ptr>,2,2,1
                    559: ?aloc <&&x>,<dword ptr>,0,4,1
                    560: endm
                    561: endm
                    562: localQ macro n
                    563: ?aloc <n>,<qword ptr>,8,8,1
                    564: endm
                    565: localT macro n
                    566: ?aloc <n>,<tbyte ptr>,10,10,1
                    567: endm
                    568: if sizec
                    569: localCP macro n
                    570: localD <n>
                    571: endm
                    572: else
                    573: localCP macro n
                    574: localW <n>
                    575: endm
                    576: endif
                    577: if sized
                    578: localDP macro n
                    579: localD <n>
                    580: endm
                    581: else
                    582: localDP macro n
                    583: localW <n>
                    584: endm
                    585: endif
                    586: localV macro n,a
                    587: ?aloc <n>,,%(a),0,1
                    588: endm
                    589: ?aloc macro n,t,l,s,a
                    590: if ?cpd
                    591: .xcref
                    592: irp x,<n>
                    593: ???=???+l
                    594: if a
                    595: ???=((??? + 1) and 0fffeh)
                    596: endif
                    597: ?al1 x,<t>,%(???+?ia)
                    598: .xcref ?t_&&x
                    599: ?t_&&x=s
                    600: endm
                    601: .cref
                    602: else
                    603: ??error2 <locals "&n" declared outside procedure def>
                    604: endif
                    605: endm
                    606: ?al1 macro n,t,o
                    607: if ?no_bp2
                    608: n equ (t [-o])
                    609: else
                    610: n equ (t [bp][-o])
                    611: endif
                    612: endm
                    613: ?gcc macro s,i,cc
                    614: s = i
                    615: ifnb <cc>
                    616: ifidn <cc>,<C>
                    617: s=0
                    618: endif
                    619: ifidn <cc>,<PLM>
                    620: s=1
                    621: endif
                    622: ifidn <cc>,<PASCAL>
                    623: s=1
                    624: endif
                    625: endif
                    626: endm
                    627: ifndef ?NOGLOBAL
                    628: .xcref
                    629: .xcref globalB,globalW,globalD,globalQ,globalT,globalCP,globalDP
                    630: .cref
                    631: globalB macro n,i,s,c
                    632: ?ad <n>,1
                    633: ?dd n,1,<byte>,<db>,<i>,<s>,<c>
                    634: endm
                    635: globalW macro n,i,s,c
                    636: ?ad <n>,2
                    637: ?dd n,1,<word>,<dw>,<i>,<s>,<c>
                    638: endm
                    639: globalD macro n,i,s,c
                    640: ?ad <n>,4
                    641: ?dd n,1,<dword>,<dd>,<i>,<s>,<c>
                    642: off_&n equ word ptr n[0]
                    643: seg_&n equ word ptr n[2]
                    644: endm
                    645: globalQ macro n,i,s,c
                    646: ?ad <n>,8
                    647: ?dd n,1,<qword>,<dq>,<i>,<s>,<c>
                    648: endm
                    649: globalT macro n,i,s,c
                    650: ?ad <n>,10
                    651: ?dd n,1,<tbyte>,<dt>,<i>,<s>,<c>
                    652: endm
                    653: if sizec
                    654: globalCP macro n,i,s,c
                    655: globalD n,<i>,<s>,<c>
                    656: endm
                    657: else
                    658: globalCP macro n,i,s,c
                    659: globalW n,<i>,<s>,<c>
                    660: endm
                    661: endif
                    662: if sized
                    663: globalDP macro n,i,s,c
                    664: globalD n,<i>,<s>,<c>
                    665: endm
                    666: else
                    667: globalDP macro n,i,s,c
                    668: globalW n,<i>,<s>,<c>
                    669: endm
                    670: endif
                    671: endif
                    672: ifndef ?NOSTATIC
                    673: .xcref
                    674: .xcref staticB,staticW,staticD,staticQ,staticT,staticCP,staticDP
                    675: .cref
                    676: staticB macro n,i,s
                    677: ?ad <n>,1
                    678: ?dd n,0,<byte>,<db>,<i>,<s>,<PLM>
                    679: endm
                    680: staticW macro n,i,s
                    681: ?ad <n>,2
                    682: ?dd n,0,<word>,<dw>,<i>,<s>,<PLM>
                    683: endm
                    684: staticD macro n,i,s
                    685: ?ad <n>,4
                    686: ?dd n,0,<dword>,<dd>,<i>,<s>,<PLM>
                    687: endm
                    688: staticQ macro n,i,s
                    689: ?ad <n>,8
                    690: ?dd n,0,<qword>,<dq>,<i>,<s>,<PLM>
                    691: endm
                    692: staticT macro n,i,s
                    693: ?ad <n>,10
                    694: ?dd n,0,<tbyte>,<dt>,<i>,<s>,<PLM>
                    695: endm
                    696: if sizec
                    697: staticCP macro n,i,s
                    698: staticD n,<i>,<s>
                    699: endm
                    700: else
                    701: staticCP macro n,i,s
                    702: staticW n,<i>,<s>
                    703: endm
                    704: endif
                    705: if sized
                    706: staticDP macro n,i,s
                    707: staticD n,<i>,<s>
                    708: endm
                    709: else
                    710: staticDP macro n,i,s
                    711: staticW n,<i>,<s>
                    712: endm
                    713: endif
                    714: endif
                    715: ?dd macro n,p,t,d,i,s,c
                    716: ?gcc ?dd2,%?PLM,<c>
                    717: ife ?dd2
                    718: n label t
                    719: ?dd1 _&n,p,<d>,<i>,<s>
                    720: else
                    721: ?dd1 n,p,<d>,<i>,<s>
                    722: endif
                    723: endm
                    724: ?dd1 macro n,p,d,i,s
                    725: if p
                    726: public n
                    727: endif
                    728: ifb <s>
                    729: n d i
                    730: else
                    731: ifb <i>
                    732: n d s dup (?)
                    733: else
                    734: n d s dup (i)
                    735: endif
                    736: endif
                    737: endm
                    738: ifndef ?NOEXTERN
                    739: .xcref
                    740: .xcref ?ex1,?ex2,externB,externW,externD,externQ,externT
                    741: .xcref externNP,externFP,externP,externCP,externDP,externA
                    742: .cref
                    743: ?ex2 = 0
                    744: externA macro n,c
                    745: ?ex1 <n>,40h,<abs>,<c>,<>
                    746: endm
                    747: externB macro n,c
                    748: ?ex1 <n>,1,<byte>,<c>,<>
                    749: endm
                    750: externW macro n,c
                    751: ?ex1 <n>,2,<word>,<c>,<>
                    752: endm
                    753: externD macro n,c
                    754: ?ex1 <n>,4,<dword>,<c>,<>
                    755: endm
                    756: externQ macro n,c
                    757: ?ex1 <n>,8,<qword>,<c>,<>
                    758: endm
                    759: externT macro n,c
                    760: ?ex1 <n>,10,<tbyte>,<c>,<>
                    761: endm
                    762: externNP macro n,c
                    763: ?ex1 <n>,2,<near>,<c>,<cc>
                    764: endm
                    765: externFP macro n,c
                    766: ?ex1 <n>,4,<far>,<c>,<cc>
                    767: endm
                    768: if sizec
                    769: externP macro n,c
                    770: ?ex1 <n>,4,<far>,<c>,<cc>
                    771: endm
                    772: else
                    773: externP macro n,c
                    774: ?ex1 <n>,2,<near>,<c>,<cc>
                    775: endm
                    776: endif
                    777: if sizec
                    778: externCP macro n,c
                    779: ?ex1 <n>,4,<dword>,<c>,<>
                    780: endm
                    781: else
                    782: externCP macro n,c
                    783: ?ex1 <n>,2,<word>,<c>,<>
                    784: endm
                    785: endif
                    786: if sized
                    787: externDP macro n,c
                    788: ?ex1 <n>,4,<dword>,<c>,<>
                    789: endm
                    790: else
                    791: externDP macro n,c
                    792: ?ex1 <n>,2,<word>,<c>,<>
                    793: endm
                    794: endif
                    795: ?ex1 macro n,s,d,c,scv
                    796: ?gcc ?ex2,%?PLM,<c>
                    797: irp x,<n>
                    798: .xcref
                    799: .xcref ?t_&&x
                    800: .cref
                    801: ?t_&&x=s
                    802: ife ?ex2
                    803: extrn _&&x:&d
                    804: x equ _&&x
                    805: else
                    806: extrn x:&d
                    807: endif
                    808: ifidn <scv>,<cc>
                    809: .xcref
                    810: .xcref ?CC&&x
                    811: .cref
                    812: ?CC&&x=?ex2
                    813: endif
                    814: endm
                    815: endm
                    816: endif
                    817: ifndef ?NOLABEL
                    818: .xcref
                    819: .xcref ?lb1,?lblpu,?lb2
                    820: .xcref labelB,labelW,labelD,labelQ,labelT
                    821: .xcref labelNP,labelFP,labelP,labelCP,labelDP
                    822: .cref
                    823: ?lblpu = 0
                    824: ?lb2 = 0
                    825: labelB macro n,c
                    826: ?lb1 <n>,1,<byte>,<c>
                    827: endm
                    828: labelW macro n,c
                    829: ?lb1 <n>,2,<word>,<c>
                    830: endm
                    831: labelD macro n,c
                    832: ?lb1 <n>,4,<dword>,<c>
                    833: endm
                    834: labelQ macro n,c
                    835: ?lb1 <n>,8,<qword>,<c>
                    836: endm
                    837: labelT macro n,c
                    838: ?lb1 <n>,10,<tbyte>,<c>
                    839: endm
                    840: labelNP macro n,c
                    841: ?lb1 <n>,2,<near>,<c>
                    842: endm
                    843: labelFP macro n,c
                    844: ?lb1 <n>,4,<far>,<c>
                    845: endm
                    846: if sizec
                    847: labelP macro n,c
                    848: ?lb1 <n>,4,<far>,<c>
                    849: endm
                    850: else
                    851: labelP macro n,c
                    852: ?lb1 <n>,2,<near>,<c>
                    853: endm
                    854: endif
                    855: if sizec
                    856: labelCP macro n,c
                    857: ?lb1 <n>,4,<dword>,<c>
                    858: endm
                    859: else
                    860: labelCP macro n,c
                    861: ?lb1 <n>,2,<word>,<c>
                    862: endm
                    863: endif
                    864: if sized
                    865: labelDP macro n,c
                    866: ?lb1 <n>,4,<dword>,<c>
                    867: endm
                    868: else
                    869: labelDP macro n,c
                    870: ?lb1 <n>,2,<word>,<c>
                    871: endm
                    872: endif
                    873: ?lb1 macro n,s,d,c
                    874: ?gcc ?lb2,%?PLM,<c>
                    875: ?lblpu=0
                    876: irp x,<n>
                    877: ifidn <x>,<PUBLIC>
                    878: ?lblpu=1
                    879: else
                    880: .xcref
                    881: .xcref ?t_&&x
                    882: .cref
                    883: ?t_&&x=s
                    884: ife ?lb2
                    885: if ?lblpu
                    886: public _&&x
                    887: endif
                    888: _&&x label &d
                    889: x equ _&&x
                    890: else
                    891: if ?lblpu
                    892: public x
                    893: endif
                    894: x label &d
                    895: endif
                    896: endif
                    897: endm
                    898: endm
                    899: endif
                    900: ifndef ?NODEF
                    901: .xcref
                    902: .xcref defB,defW,defD,defQ,defT,defCP,defDP
                    903: .cref
                    904: defB macro n
                    905: ?ad <n>,1
                    906: endm
                    907: defW macro n
                    908: ?ad <n>,2
                    909: endm
                    910: defD macro n
                    911: ?ad <n>,4
                    912: endm
                    913: defQ macro n
                    914: ?ad <n>,8
                    915: endm
                    916: defT macro n
                    917: ?ad <n>,10
                    918: endm
                    919: if sizec
                    920: defCP macro n
                    921: defD <n>
                    922: endm
                    923: else
                    924: defCP macro n
                    925: defW <n>
                    926: endm
                    927: endif
                    928: if sized
                    929: defDP macro n
                    930: defD <n>
                    931: endm
                    932: else
                    933: defDP macro n
                    934: defW <n>
                    935: endm
                    936: endif
                    937: endif
                    938: ?ad macro n,s
                    939: irp x,<n>
                    940: .xcref
                    941: .xcref ?t_&&x
                    942: .cref
                    943: ?t_&&x=s
                    944: endm
                    945: endm
                    946: ifndef ?NOPTR
                    947: .xcref
                    948: .xcref regPtr,farPtr
                    949: .cref
                    950: regPtr macro n,s,o
                    951: farPtr n,s,o
                    952: endm
                    953: farPtr macro n,s,o
                    954: .xcref
                    955: .xcref ?t_&n
                    956: .cref
                    957: n &macro
                    958:        push    s
                    959:        push    o
                    960: &endm
                    961: ?t_&n=80h
                    962: endm
                    963: endif
                    964: arg macro a
                    965: irp x,<a>
                    966: ?argc=?argc+1
                    967: ?atal <x>,%?argc
                    968: endm
                    969: endm
                    970: ?atal macro n,i
                    971: .xcref
                    972: .xcref ?ali&i
                    973: .cref
                    974: ?ali&i &macro
                    975: ?ap <n>
                    976: &endm
                    977: endm
                    978: ?ap macro n
                    979: ?argl=?argl+2
                    980: ifdef ?t_&n
                    981: ife ?t_&n-1
                    982:        push    word ptr (n)
                    983: exitm
                    984: endif
                    985: ife ?t_&n-2
                    986:        push    n
                    987: exitm
                    988: endif
                    989: ife ?t_&n-4
                    990: if ?bigreg
                    991: ?sps
                    992: .386p
                    993:        push    dword ptr (n)
                    994: ?rps
                    995: else
                    996:        push    word ptr (n)[2]
                    997:        push    word ptr (n)
                    998: endif
                    999: ?argl=?argl+2
                   1000: exitm
                   1001: endif
                   1002: ife ?t_&n-8
                   1003: if ?bigreg
                   1004: ?sps
                   1005: .386p
                   1006:        push    dword ptr (n)[4]
                   1007:        push    dword ptr (n)
                   1008: ?rps
                   1009: else
                   1010:        push    word ptr (n)[6]
                   1011:        push    word ptr (n)[4]
                   1012:        push    word ptr (n)[2]
                   1013:        push    word ptr (n)
                   1014: endif
                   1015: ?argl=?argl+6
                   1016: exitm
                   1017: endif
                   1018: if ?t_&n and 80h
                   1019: n
                   1020: ?argl=?argl+2
                   1021: exitm
                   1022: endif
                   1023: ife ?t_&n
                   1024:        push    word ptr (n)
                   1025: exitm
                   1026: endif
                   1027: endif
                   1028:        push    n
                   1029: endm
                   1030: cCall macro n,a,c
                   1031: ifnb <a>
                   1032: arg <a>
                   1033: endif
                   1034: mpush %?rsl
                   1035: ifdef ?CC&n
                   1036: ?cCall1=?CC&n
                   1037: else
                   1038: ?cCall1=?PLM
                   1039: endif
                   1040: ifnb <c>
                   1041: ?gcc ?cCall1,%?cCall1,<c>
                   1042: endif
                   1043: ?argl=0
                   1044: ife ?cCall1
                   1045: ?acb=?argc
                   1046: else
                   1047: ?acb=1
                   1048: endif
                   1049: rept ?argc
                   1050: uconcat <?ali>,%?acb
                   1051: uconcat <purge>,,<?ali>,%?acb
                   1052: ife ?cCall1
                   1053: ?acb=?acb-1
                   1054: else
                   1055: ?acb=?acb+1
                   1056: endif
                   1057: endm
                   1058:        call    n
                   1059: if ((?cCall1 eq 0) and (?argl ne 0))
                   1060:        add     sp,?argl
                   1061: endif
                   1062: mpop %?rsl
                   1063: ?rsl=0
                   1064: ?argc= 0
                   1065: ?argl= 0
                   1066: endm
                   1067: cProc macro n,cf,a
                   1068: if ?cpd
                   1069: ?utpe
                   1070: endif
                   1071: ?cpd=1
                   1072: ???=0
                   1073: ?argc=0
                   1074: ?ba=0
                   1075: ?po=0
                   1076: ?pu=0
                   1077: ?ia=0
                   1078: ?adj=4
                   1079: ?rp=0
                   1080: ?uf=0
                   1081: ?wfp=?WIN
                   1082: ?ff=0
                   1083: ?pas=0
                   1084: ?pcc=?PLM
                   1085: ?no_bp2=?no_bp1
                   1086: ?aprof2=?aprof1
                   1087: ifnb <a>
                   1088: ?ri ?pas,<a>
                   1089: endif
                   1090: ?pc=sizec
                   1091: ?nd=?nodata1
                   1092: ?ent=?enter1
                   1093: ?nx=0
                   1094: irp x,<cf>
                   1095: ifdef ??_cproc_&&x
                   1096: ??_cproc_&&x
                   1097: else
                   1098: ??error2 <e r r o r - unknown keyword x>
                   1099: .err
                   1100: endif
                   1101: endm
                   1102: if ?pcc
                   1103: ?PLMPrevParm=0
                   1104: .xcref
                   1105: .xcref ?PLMParm0
                   1106: .cref
                   1107: ?PLMParm0 &macro
                   1108: purge ?PLMParm0
                   1109: &endm
                   1110: endif
                   1111: .xcref
                   1112: .xcref ?CC&n
                   1113: .cref
                   1114: ?CC&n=?pcc
                   1115: if (?nx eq 1) and (?nd eq 0)
                   1116: ?nx = 0
                   1117: ??error2 <ATOMIC specified without NODATA - ATOMIC ignored>
                   1118: endif
                   1119: if ?ent
                   1120: if ?wfp
                   1121: ?ent = 0
                   1122: ??error2 <ENTER specified without NONWIN - ENTER ignored>
                   1123: endif
                   1124: if ?uf
                   1125: ?ent = 0
                   1126: ??error2 <ENTER specified with user frame - ENTER ignored>
                   1127: endif
                   1128: if ?chkstk1
                   1129: ?ent = 0
                   1130: ??error2 <ENTER specified with stack checking - ENTER ignored>
                   1131: endif
                   1132: endif
                   1133: if ?pc
                   1134: if ?wfp
                   1135: ife ?nx
                   1136: ?ia=2
                   1137: ?pas = ?pas and (not ?ds)
                   1138: endif
                   1139: endif
                   1140: ?adj=?adj+2
                   1141: else
                   1142: ?wfp=0
                   1143: endif
                   1144: ?pas = ?pas and (not (?sp+?cs+?ss))
                   1145: if ?bigreg
                   1146: ?pas = ?pas and (not (?esp))
                   1147: endif
                   1148: if ?uf
                   1149: ?pas = ?pas and (not (?bp+?si+?di))
                   1150: if ?bigreg
                   1151: ?pas = ?pas and (not (?ebp+?esi+?edi))
                   1152: endif
                   1153: endif
                   1154: ife ?pcc
                   1155: ?pg <_&n>,%?pu,%?pc,%?pas,%?wfp,<n>,%?pcc
                   1156: else
                   1157: ?pg <n>,%?pu,%?pc,%?pas,%?wfp,<n>,%?pcc
                   1158: endif
                   1159: endm
                   1160: ?pg macro n,p,c,a,w,nnu,cc
                   1161: .xcref
                   1162: if ?uf
                   1163: if ?nd
                   1164: ??error2 <NODATA encountered in &n - user frame ignored>
                   1165: ?uf=0
                   1166: endif
                   1167: endif
                   1168: .xcref cBegin
                   1169: cBegin &macro g
                   1170: .xcref
                   1171: if cc
                   1172: uconcat <?PLMParm>,%?PLMPrevParm,%?po
                   1173: endif
                   1174: if ?rp
                   1175: if ?uf
                   1176: ??error2 <parmR encountered in &n - user frame ignored>
                   1177: ?uf=0
                   1178: endif
                   1179: if ?ent
                   1180: ??error2 <parmR encountered in &n - ENTER ignored>
                   1181: ?ent=0
                   1182: endif
                   1183: endif
                   1184: ?pg1 <n>,c,a,%?po,w,%?uf,%?nd,%?rp,cc,<nnu>,%???
                   1185: ?cpd=0
                   1186: ?argc=0
                   1187: ?ba=1
                   1188: ???=(???+1) and 0fffeh
                   1189: if p
                   1190: public n
                   1191: endif
                   1192: ife c
                   1193: n proc near
                   1194: else
                   1195: n proc far
                   1196: endif
                   1197: ife cc
                   1198: nnu equ n
                   1199: endif
                   1200: ?cbe = 0
                   1201: ifnb <g>
                   1202: ?pcbe <g>,<nnu>,<cBegin>
                   1203: endif
                   1204: if ?cbe eq 1
                   1205: if ???+a+?rp
                   1206: if2
                   1207: ??_out <cBegin - possibly invalid use of nogen>
                   1208: endif
                   1209: endif
                   1210: else
                   1211: if ?uf
                   1212: ?mf c,%???,%?po
                   1213: mpush a
                   1214: else
                   1215: ife ?cbe
                   1216: if w
                   1217: ife ?nd
                   1218: ife ?DOS5
                   1219:        mov     ax,ds
                   1220:        nop
                   1221: else
                   1222:        mov     ax,DataBASE
                   1223: endif
                   1224: endif
                   1225: if ?aprof2
                   1226:        call    AProfCall
                   1227: endif
                   1228: ife ?nx
                   1229: ife ?DOS5
                   1230:        inc     bp
                   1231: endif
                   1232:        push    bp
                   1233:        mov     bp,sp
                   1234:        push    ds
                   1235: else
                   1236: if ?ff+???+?po+?rp
                   1237:        push    bp
                   1238:        mov     bp,sp
                   1239: endif
                   1240: endif
                   1241: ife ?nd
                   1242:        mov     ds,ax
                   1243: endif
                   1244: else
                   1245: if ?aprof2
                   1246:        call    AProfCall
                   1247: endif
                   1248: if ?ff+???+?po+?rp
                   1249: ife ?ent
                   1250:        push    bp
                   1251:        mov     bp,sp
                   1252: endif
                   1253: endif
                   1254: endif
                   1255: if ?rp
                   1256: ?uf=0
                   1257: rept ?rp
                   1258: uconcat mpush,,?rp,%?uf
                   1259: ?uf=?uf+1
                   1260: endm
                   1261: endif
                   1262: ife ?ent
                   1263: if ???
                   1264: if ?chkstk1
                   1265: ifdef ?CHKSTKPROC
                   1266: ?CHKSTKPROC %???
                   1267: else
                   1268:        mov     ax,???
                   1269: ife cc
                   1270:        call    _chkstk
                   1271: else
                   1272:        call    chkstk
                   1273: endif
                   1274: endif
                   1275: else
                   1276:        sub     sp,???
                   1277: endif
                   1278: endif
                   1279: else
                   1280: if ???
                   1281: enter ???,0
                   1282: else
                   1283: push bp
                   1284: mov bp,sp
                   1285: endif
                   1286: endif
                   1287: else
                   1288: if ?aprof2
                   1289:        call    AProfRet
                   1290:        call    AProfCall
                   1291: endif
                   1292: if ?rp
                   1293: ??error2 <cBegin - parmRs encountered with partial frame>
                   1294: else
                   1295: if ???
                   1296:        lea     sp,[bp][-???-?ia]
                   1297: endif
                   1298: endif
                   1299: endif
                   1300: mpush a
                   1301: endif
                   1302: ifdef ?PROFILE
                   1303: if c
                   1304:        call    StartNMeas
                   1305: endif
                   1306: endif
                   1307: endif
                   1308: .cref
                   1309: purge cBegin
                   1310: &endm
                   1311: .xcref ?utpe
                   1312: ?utpe &macro
                   1313: ??error2 <unterminated procedure definition: "&n">
                   1314: &endm
                   1315: .cref
                   1316: endm
                   1317: ?pg1 macro n,c,a,o,w,f,d,r,cc,nnu,lc
                   1318: .xcref
                   1319: .xcref cEnd
                   1320: parm_bytes_&nnu = o
                   1321: cEnd &macro g
                   1322: .xcref
                   1323: ?ba=0
                   1324: ?cbe = 0
                   1325: ifnb <g>
                   1326: ?pcbe <g>,<nnu>,<cEnd>
                   1327: endif
                   1328: if ?cbe eq 1
                   1329: if a+r+lc
                   1330: if2
                   1331: ??_out <cEnd - possibly invalid use of nogen>
                   1332: endif
                   1333: endif
                   1334: else
                   1335: ifdef ?PROFILE
                   1336: if c
                   1337: call StopNMeas
                   1338: endif
                   1339: endif
                   1340: mpop a
                   1341: if f
                   1342:        db      0c3h
                   1343: else
                   1344: if w
                   1345: ife ?nx
                   1346: if (?TF eq 0) or (???+r)
                   1347:        lea     sp,-2[bp]
                   1348: endif
                   1349:        pop     ds
                   1350:        pop     bp
                   1351: ife ?DOS5
                   1352:        dec     bp
                   1353: endif
                   1354: else
                   1355: if (?TF eq 0) or (???+r)
                   1356:        if      ???+?po+r
                   1357: if ?ent
                   1358: leave
                   1359: else
                   1360: mov sp,bp
                   1361: pop bp
                   1362: endif
                   1363: else
                   1364: mov sp,bp
                   1365: endif
                   1366: else
                   1367: if ???+?po+r
                   1368: pop bp
                   1369: endif
                   1370: endif
                   1371: endif
                   1372: else
                   1373: if ?ff+???+?po+r
                   1374: if (?TF eq 0) or (???+r)
                   1375:        if      ?ent
                   1376: leave
                   1377: else
                   1378: mov sp,bp
                   1379: pop bp
                   1380: endif
                   1381: else
                   1382: pop bp
                   1383: endif
                   1384: endif
                   1385: endif
                   1386: if ?aprof2
                   1387:        call    AProfRet
                   1388: endif
                   1389: if ?cbe ne 4
                   1390: ife cc
                   1391:        ret
                   1392: else
                   1393:        ret     o
                   1394: endif
                   1395: endif
                   1396: endif
                   1397: endif
                   1398: if ?cbe ne 4
                   1399: n endp
                   1400: .cref
                   1401: purge cEnd
                   1402: else
                   1403: .cref
                   1404: endif
                   1405: &endm
                   1406: .cref
                   1407: endm
                   1408: .xcref
                   1409: .xcref cleanframe
                   1410: cleanframe macro
                   1411: cEnd <??cleanframe??>
                   1412: endm
                   1413: .cref
                   1414: .xcref
                   1415: .xcref ??_cproc_FAR,??_cproc_NEAR,??_cproc_PUBLIC,??_cproc_SMALL
                   1416: .xcref ??_cproc_DATA,??_cproc_NODATA,??_cproc_ATOMIC,??_cproc_C
                   1417: .xcref ??_cproc_PLM,??_cproc_PASCAL,??_cproc_WIN,??_cproc_NONWIN
                   1418: .xcref ??_cproc_NO_BP,??_cproc_BP,??_cproc_ENTER,??_cproc_NOENTER
                   1419: .xcref ??_cproc_NO_ATTRPROF,??_cproc_ATTRPROF
                   1420: .xcref ??_cproc_far,??_cproc_near,??_cproc_public,??_cproc_small
                   1421: .xcref ??_cproc_data,??_cproc_nodata,??_cproc_atomic,??_cproc_c
                   1422: .xcref ??_cproc_plm,??_cproc_pascal,??_cproc_win,??_cproc_nonwin
                   1423: .xcref ??_cproc_no_bp,??_cproc_bp,??_cproc_enter,??_cproc_noenter
                   1424: .xcref ??_cproc_no_attrprof,??_cproc_attrprof
                   1425: .cref
                   1426: ??_cproc_FAR macro
                   1427: ?pc=1
                   1428: endm
                   1429: ??_cproc_NEAR macro
                   1430: ?pc=0
                   1431: endm
                   1432: ??_cproc_PUBLIC macro
                   1433: ?pu=1
                   1434: endm
                   1435: ??_cproc_SMALL macro
                   1436: ?uf=1
                   1437: endm
                   1438: ??_cproc_DATA macro
                   1439: ?nd=0
                   1440: endm
                   1441: ??_cproc_NODATA macro
                   1442: ?nd=1
                   1443: endm
                   1444: ??_cproc_ENTER macro
                   1445: ?ent=1
                   1446: endm
                   1447: ??_cproc_NOENTER macro
                   1448: ?ent=0
                   1449: endm
                   1450: ??_cproc_ATOMIC macro
                   1451: ?nx=1
                   1452: endm
                   1453: ??_cproc_C macro
                   1454: ?pcc=0
                   1455: endm
                   1456: ??_cproc_PLM macro
                   1457: ?pcc=1
                   1458: endm
                   1459: ??_cproc_PASCAL macro
                   1460: ?pcc=1
                   1461: endm
                   1462: ??_cproc_WIN macro
                   1463: ?wfp=1
                   1464: endm
                   1465: ??_cproc_NONWIN macro
                   1466: ?wfp=0
                   1467: endm
                   1468: ??_cproc_NO_BP macro
                   1469: ?no_bp2=1
                   1470: endm
                   1471: ??_cproc_BP macro
                   1472: ?no_bp2=0
                   1473: endm
                   1474: ??_cproc_NO_ATTRPROF macro
                   1475: ?aprof2=0
                   1476: endm
                   1477: ??_cproc_ATTRPROF macro
                   1478: ?aprof2=1
                   1479: endm
                   1480: ??_cproc_far macro
                   1481: ?pc=1
                   1482: endm
                   1483: ??_cproc_near macro
                   1484: ?pc=0
                   1485: endm
                   1486: ??_cproc_public macro
                   1487: ?pu=1
                   1488: endm
                   1489: ??_cproc_small macro
                   1490: ?uf=1
                   1491: endm
                   1492: ??_cproc_data macro
                   1493: ?nd=0
                   1494: endm
                   1495: ??_cproc_nodata macro
                   1496: ?nd=1
                   1497: endm
                   1498: ??_cproc_enter macro
                   1499: ?ent=1
                   1500: endm
                   1501: ??_cproc_noenter macro
                   1502: ?ent=0
                   1503: endm
                   1504: ??_cproc_atomic macro
                   1505: ?nx=1
                   1506: endm
                   1507: ??_cproc_c macro
                   1508: ?pcc=0
                   1509: endm
                   1510: ??_cproc_plm macro
                   1511: ?pcc=1
                   1512: endm
                   1513: ??_cproc_pascal macro
                   1514: ?pcc=1
                   1515: endm
                   1516: ??_cproc_win macro
                   1517: ?wfp=1
                   1518: endm
                   1519: ??_cproc_nonwin macro
                   1520: ?wfp=0
                   1521: endm
                   1522: ??_cproc_no_bp macro
                   1523: ?no_bp2=1
                   1524: endm
                   1525: ??_cproc_bp macro
                   1526: ?no_bp2=0
                   1527: endm
                   1528: ??_cproc_no_attrprof macro
                   1529: ?aprof2=0
                   1530: endm
                   1531: ??_cproc_attrprof macro
                   1532: ?aprof2=1
                   1533: endm
                   1534: ?pcbe macro g,nnu,mt
                   1535: ifidn <g>,<NOGEN>
                   1536: ?cbe = 1
                   1537: else
                   1538: ifidn <g>,<nogen>
                   1539: ?cbe = 1
                   1540: else
                   1541: ifidn <mt>,<cBegin>
                   1542: ifidn <g>,<PARTIAL>
                   1543: ?cbe = 2
                   1544: else
                   1545: ifidn <g>,<partial>
                   1546: ?cbe = 2
                   1547: else
                   1548: ifdif <g>,<nnu>
                   1549: ??error2 <mt - unknown keyword g>
                   1550: endif
                   1551: endif
                   1552: endif
                   1553: else
                   1554: ifidn <g>,<??cleanframe??>
                   1555: ?cbe = 4
                   1556: else
                   1557: ifdif <g>,<nnu>
                   1558: ??error2 <mt - unknown keyword g>
                   1559: endif
                   1560: endif
                   1561: endif
                   1562: endif
                   1563: endif
                   1564: endm
                   1565: assumes macro s,ln
                   1566: ifndef ln&_assumes
                   1567: assume s:ln
                   1568: else
                   1569: ln&_assumes s
                   1570: endif
                   1571: endm
                   1572: createSeg macro n,ln,a,co,cl,grp,u
                   1573: ifnb <u>
                   1574: ifnb <cl>
                   1575: n segment a co u '&cl'
                   1576: else
                   1577: n segment a co u
                   1578: endif
                   1579: else
                   1580: ifdef ?u32
                   1581: if ?u32
                   1582: ?sps
                   1583: .386p
                   1584: ifnb <cl>
                   1585: n segment a co use32 '&cl'
                   1586: else
                   1587: n segment a co use32
                   1588: endif
                   1589: ?rps
                   1590: else
                   1591: ifnb <cl>
                   1592: n segment a co use16 '&cl'
                   1593: else
                   1594: n segment a co use16
                   1595: endif
                   1596: endif
                   1597: else
                   1598: ifnb <cl>
                   1599: n segment a co '&cl'
                   1600: else
                   1601: n segment a co
                   1602: endif
                   1603: endif
                   1604: endif
                   1605: n ends
                   1606: ifnb <grp>
                   1607: addseg grp,n
                   1608: else
                   1609: ln&OFFSET equ offset n:
                   1610: ln&BASE equ n
                   1611: ?cs3 <ln>,<n>
                   1612: endif
                   1613: ?cs1 <ln>,<n>
                   1614: endm
                   1615: addseg macro grp,seg
                   1616: .xcref
                   1617: .xcref grp&_def
                   1618: .cref
                   1619: ifndef grp&_def
                   1620: grp&_def=0
                   1621: endif
                   1622: if grp&_def ne ASMpass
                   1623: .xcref
                   1624: .xcref grp&_add
                   1625: .cref
                   1626: grp&_add &macro s
                   1627: grp&_in <seg>,s
                   1628: &endm
                   1629: .xcref
                   1630: .xcref grp&_in
                   1631: .cref
                   1632: grp&_in &macro sl,s
                   1633: ifb <s>
                   1634: grp group sl
                   1635: else
                   1636: grp&_add &macro ns
                   1637: grp&_in <sl,s>,ns
                   1638: &endm
                   1639: endif
                   1640: &endm
                   1641: grp&_def=ASMpass
                   1642: else
                   1643: grp&_add seg
                   1644: endif
                   1645: endm
                   1646: defgrp macro grp,ln
                   1647: addseg grp
                   1648: ifnb <ln>
                   1649: irp x,<ln>
                   1650: ?cs3 <&x>,<grp>
                   1651: x&&OFFSET equ offset grp:
                   1652: x&&BASE equ grp
                   1653: endm
                   1654: endif
                   1655: endm
                   1656: ?cs1 macro ln,n
                   1657: .xcref
                   1658: .xcref ln&_sbegin
                   1659: .cref
                   1660: ln&_sbegin &macro
                   1661: .xcref
                   1662: .xcref ?mf
                   1663: .cref
                   1664: ?curseg equ <&ln>
                   1665: ?mf &&macro c,l,p
                   1666: if c
                   1667:        extrn   n&_FARFRAME:near
                   1668:        call    n&_FARFRAME
                   1669: else
                   1670:        extrn   n&_NEARFRAME:near
                   1671:        call    n&_NEARFRAME
                   1672: endif
                   1673:        db      l shr 1
                   1674:        db      p shr 1
                   1675: &&endm
                   1676: ?cs2 <ln>,<n>
                   1677: n segment
                   1678: &endm
                   1679: endm
                   1680: ?cs2 macro ln,n
                   1681: .xcref
                   1682: .xcref sEnd
                   1683: .cref
                   1684: sEnd &macro
                   1685: n ends
                   1686: purge ?mf
                   1687: purge sEnd
                   1688: &endm
                   1689: endm
                   1690: ?cs3 macro ln,n
                   1691: .xcref
                   1692: .xcref ln&_assumes
                   1693: .cref
                   1694: ln&_assumes &macro s
                   1695: assume s:&n
                   1696: &endm
                   1697: endm
                   1698: .xcref
                   1699: .xcref sBegin
                   1700: .cref
                   1701: sBegin macro ln
                   1702: ln&_sbegin
                   1703: endm
                   1704: ife ?DF
                   1705: createSeg _TEXT,Code,word,public,CODE
                   1706: ife ?nodata1
                   1707: createSeg _DATA,Data,word,public,DATA,DGROUP
                   1708: defgrp DGROUP,Data
                   1709: endif
                   1710: if ?chkstk1
                   1711: ifndef ?CHKSTKPROC
                   1712: externp <chkstk>
                   1713: endif
                   1714: endif
                   1715: endif
                   1716: errnz macro x
                   1717: if2
                   1718: if x
                   1719: errnz1 <x>,%(x)
                   1720: endif
                   1721: endif
                   1722: endm
                   1723: errnz1 macro x1,x2
                   1724: = *errnz* x1 = x2
                   1725: .err
                   1726: endm
                   1727: errn$ macro l,x
                   1728: errnz <offset $ - offset l x>
                   1729: endm
                   1730: ifdef ?PROFILE
                   1731: externFP <StartNMeas,StopNMeas>
                   1732: endif
                   1733: if ?aprof1
                   1734: externFP <AProfCall,AProfRet>,<PLM>
                   1735: endif

unix.superglobalmegacorp.com

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