Annotation of pmsdk/samples/newcard/cmacros.inc, revision 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.