Annotation of os2sdk/startup/cmacros.inc, revision 1.1

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

unix.superglobalmegacorp.com

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