|
|
Microsoft OS/2 SDK PM 02-24-1989
comment $ cmacros - assembly macros for interfacing to hhls (C)Copyright Microsoft Corp. 1984-1989 $ .xcref .xcref ??_out ??_out macro t ifndef ?QUIET %out t endif endm outif macro name,defval,onmsg,offmsg ifndef name ifb <defval> name=0 else name=defval endif endif if name name=1 ifnb <onmsg> ??_out <! onmsg> endif else ifnb <offmsg> ??_out <! offmsg> endif endif endm .xcref ??error ??error macro msg %out e r r o r ----- msg .err e r r o r ----- msg endm .xcref ??error2 ??error2 macro msg if2 %out e r r o r ----- msg .err e r r o r ----- msg endif endm .xcref ASMpass .xcref memS,memM,memL,memC,memH,memMOD,sizec,sized if1 ASMpass=1 ifdef ?SMALL memS=1 endif ifdef ?MEDIUM memM=1 endif ifdef ?COMPACT memC=1 endif ifdef ?LARGE memL=1 endif ifdef ?HUGE memH=1 endif ??_out <cMacros Version 3.06 - 09/23/87> ??_out <Copyright (C) Microsoft Corp. 1984-1987. All rights reserved.> outif memS,0,<Small Model> outif memM,0,<Medium model> outif memL,0,<Large Model> outif memC,0,<Compact Model> outif memH,0,<Huge Model> memMOD= memS + memM + memL + memC + memH if memMOD ne 1 if memMOD eq 0 memS = 1 outif memS,0,<Small model> else ??error <must have only 1 memory model selected> endif endif sizec= memM + memL + memH sized= memL + memC + (memH*2) outif ?DF,0,<No segments or groups will be defined> outif ?TF,0,<Epilog sequences assume valid SP> outif ?WIN,1,<Windows support> outif ?PLM,1,<PL/M calling convention> ifndef ?NODATA ?nodata1=0 else ?nodata1=1 ??_out <! NODATA module> endif ifndef ?CHKSTK ?chkstk1=0 else ?chkstk1=1 ifdef ?CHKSTKPROC ??_out <! Private stack checking enabled> else ??_out <! Stack checking enabled> endif endif ifndef DOS5 ?DOS5=0 else ?DOS5=1 ??_out <! DOS5 module> endif ifdef ?PROFILE ??_out <! Native profiling enabled> endif ifdef ATTRPROF ??_out <! Attributed profiling enabled> ?aprof1=1 else ?aprof1=0 endif ifndef ?NO_BP ?no_bp1=0 else ?no_bp1=1 ??_out <! NO_BP is default> endif else ASMpass=2 endif .xcref ?n,?ax,?ah,?al,?bx,?bh .xcref ?bl,?cx,?ch,?cl,?dx,?dh .xcref ?dl,?si,?di,?es,?ds,?bp .xcref ?sp,?ss,?cs .xcref ?n,?AX,?AH,?AL,?BX,?BH .xcref ?BL,?CX,?CH,?CL,?DX,?DH .xcref ?DL,?SI,?DI,?ES,?DS,?BP .xcref ?SP,?SS,?CS .xcref ?rsl,?cpd,?argl,?argc,?ba .xcref ?acb,???,?po .xcref ?pas,?pc .xcref uconcat,mpush,mpop .xcref ?ri,?pp,?pp1,?al1 .xcref ?ad,?ap,?atal,?dd,?dd1,?dd2 .xcref ?pg,?pg1,?aloc,?cs1,?cs2 .xcref ?DF,?TF,?ff,?PLM,?WIN,?ia,?pu,?adj .xcref ?uf,?rp,?nx,?nd,?nodata1,?chkstk1,?aprof1,?aprof2,?DOS5 .xcref ?wfp,arg,cCall,cProc,assumes,?cs3,?cs2,?cs1 .xcref defgrp,addseg,createSeg .xcref save,outif,errnz,errn$,errnz1 .xcref ?PLMPrevParm,?gcc .xcref ?cCall1,?pcc,?no_bp1,?no_bp2 .xcref ?cbe,?pcbe ?rsl = 0 ?cpd = 0 ?argl = 0 ?argc = 0 ?ba = 0 ?acb = 0 ??? = 0 ?po = 0 ?pas = 0 ?pc = 0 ?ia = 0 ?pu = 0 ?adj = 0 ?rp = 0 ?uf = 0 ?nd = 0 ?nx = 0 ?wfp = 0 ?ff = 0 ?dd2 = 0 ?cCall1 = 0 ?pcc = ?PLM ?PLMPrevParm = 0 ?no_bp2 = ?no_bp1 ?cbe = 0 ?aprof2 = 0 .xcref ?casen if1 ?casen = 0 endif ?n = 0000000000000000b ?ax = 0000000000000011b ?ah = 0000000000000001b ?al = 0000000000000010b ?bx = 0000000000001100b ?bh = 0000000000000100b ?bl = 0000000000001000b ?cx = 0000000000110000b ?ch = 0000000000010000b ?cl = 0000000000100000b ?dx = 0000000011000000b ?dh = 0000000001000000b ?dl = 0000000010000000b ?si = 0000000100000000b ?di = 0000001000000000b ?es = 0000010000000000b ?ds = 0000100000000000b ?bp = 0001000000000000b ?sp = 0010000000000000b ?ss = 0100000000000000b ?cs = 1000000000000000b ?AX = 0000000000000011b ?AH = 0000000000000001b ?AL = 0000000000000010b ?BX = 0000000000001100b ?BH = 0000000000000100b ?BL = 0000000000001000b ?CX = 0000000000110000b ?CH = 0000000000010000b ?CL = 0000000000100000b ?DX = 0000000011000000b ?DH = 0000000001000000b ?DL = 0000000010000000b ?SI = 0000000100000000b ?DI = 0000001000000000b ?ES = 0000010000000000b ?DS = 0000100000000000b ?BP = 0001000000000000b ?SP = 0010000000000000b ?SS = 0100000000000000b ?CS = 1000000000000000b .cref uconcat macro a,b,c,d,e,f,g a&b c&d e&f&g endm mpush macro r irp x,<ax,bx,cx,dx,si,di,es,ds,bp,sp,ss,cs> if (r and ?&&x) push x endif endm endm mpop macro r irp x,<cs,ss,sp,bp,ds,es,di,si,dx,cx,bx,ax> if (r and ?&&x) pop x endif endm endm save macro r ?rsl=0 ?ri ?rsl,<r> endm ?ri macro n,r irp x,<r> ifdef ?&&x n=n or ?&&x else ??error2 <unknown register x> .err endif endm endm .xcref .xcref parmB,parmW,parmD,parmQ,parmT,parmCP,parmDP,parmH .cref parmB macro n ?pp <n>,<byte>,2,1 endm parmW macro n ?pp <n>,<word>,2,2 endm parmD macro n ife ?pcc irp x,<n> ?pp <&&x>,<dword>,0,4 ?pp <off_&&x>,<word>,2,2 ?pp <seg_&&x>,<word>,2,2 endm else irp x,<n> ?pp <seg_&&x>,<word>,2,2 ?pp <off_&&x>,<word>,2,2 ?pp <&&x>,<dword>,0,4 endm endif endm parmH macro n ?pp <n>,<word>,4,2 endm parmQ macro n ?pp <n>,<qword>,8,8 endm parmT macro n ?pp <n>,<tbyte>,10,10 endm if sizec parmCP macro n parmD <n> endm else parmCP macro n parmW <n> endm endif if sized parmDP macro n parmD <n> endm else parmDP macro n parmW <n> endm endif ?pp macro n,t,l,s if ?cpd .xcref irp x,<n> .xcref ?t_&&x ?t_&&x=s ife ?pcc ?pp1 x,<t>,,,%(?po+?adj) ?po=?po+l else ?PLMPrevParm=?PLMPrevParm+1 ?po=?po+l ?pp1 x,<t>,%?po,%?adj,,%?PLMPrevParm,%(?PLMPrevParm-1) endif endm .cref else ??error2 <parm(s) "&n" declared outside proc def> endif endm ?pp1 macro n,t,o,a,b,cpc,ppc ife ?pcc if ?no_bp2 n equ (t ptr [+b]) else n equ (t ptr [bp][+b]) endif else .xcref .xcref ?PLMParm&cpc .cref if ?no_bp2 ?PLMParm&cpc ¯o po uconcat <n>,,<equ>,,<(t ptr [+>,%(a+po-o),<])> ?PLMParm&ppc po purge ?PLMParm&cpc &endm else ?PLMParm&cpc ¯o po uconcat <n>,,<equ>,,<(t ptr [bp][+>,%(a+po-o),<])> ?PLMParm&ppc po purge ?PLMParm&cpc &endm endif endif endm ifndef ?NOPARMR .xcref .xcref ?pr,parmR .cref parmR macro n,r,r2 ?pr n,r,r2,%?rp,%(?ia+2) endm ?pr macro n,r,r2,i,o .xcref ifnb <r2> parmR seg_&n,r parmR off_&n,r2 if ?no_bp2 n equ (dword ptr [-o-2]) else n equ (dword ptr [bp][-o-2]) endif .xcref ?t_&n ?t_&n=4 else .xcref ?rp&i ?rp&i=0 ifdef ?&r ?rp&i=?&r endif if ??? or (?cpd eq 0) or (?rp&i eq 0) ??error2 <invalid parmR encountered: &n,&r> exitm endif if ?no_bp2 n equ (word ptr [-o]) else n equ (word ptr [bp][-o]) endif .xcref ?t_&n ?t_&n=2 irp x,<bh,ch,dh,bl,cl,dl,ah,al> if ?&&x eq ?&r if ?no_bp2 n equ (byte ptr [-o]) else n equ (byte ptr [bp][-o]) endif ?t_&n=1 exitm endif endm ?ia=?ia+2 ?rp=?rp+1 endif .cref endm endif .xcref .xcref localB,localW,localD,localQ,localT,localCP,localDP,localV .cref localB macro n ?aloc <n>,<byte ptr>,1,1,0 endm localW macro n ?aloc <n>,<word ptr>,2,2,1 endm localD macro n irp x,<n> ?aloc <seg_&&x>,<word ptr>,2,2,1 ?aloc <off_&&x>,<word ptr>,2,2,1 ?aloc <&&x>,<dword ptr>,0,4,1 endm endm localQ macro n ?aloc <n>,<qword ptr>,8,8,1 endm localT macro n ?aloc <n>,<tbyte ptr>,10,10,1 endm if sizec localCP macro n localD <n> endm else localCP macro n localW <n> endm endif if sized localDP macro n localD <n> endm else localDP macro n localW <n> endm endif localV macro n,a ?aloc <n>,,%(a),0,1 endm ?aloc macro n,t,l,s,a if ?cpd .xcref irp x,<n> ???=???+l if a ???=((??? + 1) and 0fffeh) endif ?al1 x,<t>,%(???+?ia) .xcref ?t_&&x ?t_&&x=s endm .cref else ??error2 <locals "&n" declared outside procedure def> endif endm ?al1 macro n,t,o if ?no_bp2 n equ (t [-o]) else n equ (t [bp][-o]) endif endm ?gcc macro s,i,cc s = i ifnb <cc> ifidn <cc>,<C> s=0 endif ifidn <cc>,<PLM> s=1 endif ifidn <cc>,<PASCAL> s=1 endif endif endm ifndef ?NOGLOBAL .xcref .xcref globalB,globalW,globalD,globalQ,globalT,globalCP,globalDP .cref globalB macro n,i,s,c ?ad <n>,1 ?dd n,1,<byte>,<db>,<i>,<s>,<c> endm globalW macro n,i,s,c ?ad <n>,2 ?dd n,1,<word>,<dw>,<i>,<s>,<c> endm globalD macro n,i,s,c ?ad <n>,4 ?dd n,1,<dword>,<dd>,<i>,<s>,<c> off_&n equ word ptr n[0] seg_&n equ word ptr n[2] endm globalQ macro n,i,s,c ?ad <n>,8 ?dd n,1,<qword>,<dq>,<i>,<s>,<c> endm globalT macro n,i,s,c ?ad <n>,10 ?dd n,1,<tbyte>,<dt>,<i>,<s>,<c> endm if sizec globalCP macro n,i,s,c globalD n,<i>,<s>,<c> endm else globalCP macro n,i,s,c globalW n,<i>,<s>,<c> endm endif if sized globalDP macro n,i,s,c globalD n,<i>,<s>,<c> endm else globalDP macro n,i,s,c globalW n,<i>,<s>,<c> endm endif endif ifndef ?NOSTATIC .xcref .xcref staticB,staticW,staticD,staticQ,staticT,staticCP,staticDP .cref staticB macro n,i,s ?ad <n>,1 ?dd n,0,<byte>,<db>,<i>,<s>,<PLM> endm staticW macro n,i,s ?ad <n>,2 ?dd n,0,<word>,<dw>,<i>,<s>,<PLM> endm staticD macro n,i,s ?ad <n>,4 ?dd n,0,<dword>,<dd>,<i>,<s>,<PLM> endm staticQ macro n,i,s ?ad <n>,8 ?dd n,0,<qword>,<dq>,<i>,<s>,<PLM> endm staticT macro n,i,s ?ad <n>,10 ?dd n,0,<tbyte>,<dt>,<i>,<s>,<PLM> endm if sizec staticCP macro n,i,s staticD n,<i>,<s> endm else staticCP macro n,i,s staticW n,<i>,<s> endm endif if sized staticDP macro n,i,s staticD n,<i>,<s> endm else staticDP macro n,i,s staticW n,<i>,<s> endm endif endif ?dd macro n,p,t,d,i,s,c ?gcc ?dd2,%?PLM,<c> ife ?dd2 n label t ?dd1 _&n,p,<d>,<i>,<s> else ?dd1 n,p,<d>,<i>,<s> endif endm ?dd1 macro n,p,d,i,s if p public n endif ifb <s> n d i else ifb <i> n d s dup (?) else n d s dup (i) endif endif endm ifndef ?NOEXTERN .xcref .xcref ?ex1,?ex2,externB,externW,externD,externQ,externT .xcref externNP,externFP,externP,externCP,externDP,externA .cref ?ex2 = 0 externA macro n,c ?ex1 <n>,40h,<abs>,<c>,<> endm externB macro n,c ?ex1 <n>,1,<byte>,<c>,<> endm externW macro n,c ?ex1 <n>,2,<word>,<c>,<> endm externD macro n,c ?ex1 <n>,4,<dword>,<c>,<> endm externQ macro n,c ?ex1 <n>,8,<qword>,<c>,<> endm externT macro n,c ?ex1 <n>,10,<tbyte>,<c>,<> endm externNP macro n,c ?ex1 <n>,2,<near>,<c>,<cc> endm externFP macro n,c ?ex1 <n>,4,<far>,<c>,<cc> endm if sizec externP macro n,c ?ex1 <n>,4,<far>,<c>,<cc> endm else externP macro n,c ?ex1 <n>,2,<near>,<c>,<cc> endm endif if sizec externCP macro n,c ?ex1 <n>,4,<dword>,<c>,<> endm else externCP macro n,c ?ex1 <n>,2,<word>,<c>,<> endm endif if sized externDP macro n,c ?ex1 <n>,4,<dword>,<c>,<> endm else externDP macro n,c ?ex1 <n>,2,<word>,<c>,<> endm endif ?ex1 macro n,s,d,c,scv ?gcc ?ex2,%?PLM,<c> irp x,<n> .xcref .xcref ?t_&&x .cref ?t_&&x=s ife ?ex2 extrn _&&x:&d x equ _&&x else extrn x:&d endif ifidn <scv>,<cc> .xcref .xcref ?CC&&x .cref ?CC&&x=?ex2 endif endm endm endif ifndef ?NOLABEL .xcref .xcref ?lb1,?lblpu,?lb2 .xcref labelB,labelW,labelD,labelQ,labelT .xcref labelNP,labelFP,labelP,labelCP,labelDP .cref ?lblpu = 0 ?lb2 = 0 labelB macro n,c ?lb1 <n>,1,<byte>,<c> endm labelW macro n,c ?lb1 <n>,2,<word>,<c> endm labelD macro n,c ?lb1 <n>,4,<dword>,<c> endm labelQ macro n,c ?lb1 <n>,8,<qword>,<c> endm labelT macro n,c ?lb1 <n>,10,<tbyte>,<c> endm labelNP macro n,c ?lb1 <n>,2,<near>,<c> endm labelFP macro n,c ?lb1 <n>,4,<far>,<c> endm if sizec labelP macro n,c ?lb1 <n>,4,<far>,<c> endm else labelP macro n,c ?lb1 <n>,2,<near>,<c> endm endif if sizec labelCP macro n,c ?lb1 <n>,4,<dword>,<c> endm else labelCP macro n,c ?lb1 <n>,2,<word>,<c> endm endif if sized labelDP macro n,c ?lb1 <n>,4,<dword>,<c> endm else labelDP macro n,c ?lb1 <n>,2,<word>,<c> endm endif ?lb1 macro n,s,d,c ?gcc ?lb2,%?PLM,<c> ?lblpu=0 irp x,<n> ifidn <x>,<PUBLIC> ?lblpu=1 else .xcref .xcref ?t_&&x .cref ?t_&&x=s ife ?lb2 if ?lblpu public _&&x endif _&&x label &d x equ _&&x else if ?lblpu public x endif x label &d endif endif endm endm endif ifndef ?NODEF .xcref .xcref defB,defW,defD,defQ,defT,defCP,defDP .cref defB macro n ?ad <n>,1 endm defW macro n ?ad <n>,2 endm defD macro n ?ad <n>,4 endm defQ macro n ?ad <n>,8 endm defT macro n ?ad <n>,10 endm if sizec defCP macro n defD <n> endm else defCP macro n defW <n> endm endif if sized defDP macro n defD <n> endm else defDP macro n defW <n> endm endif endif ?ad macro n,s irp x,<n> .xcref .xcref ?t_&&x .cref ?t_&&x=s endm endm ifndef ?NOPTR .xcref .xcref regPtr,farPtr .cref regPtr macro n,s,o farPtr n,s,o endm farPtr macro n,s,o .xcref .xcref ?t_&n .cref n ¯o push s push o &endm ?t_&n=80h endm endif arg macro a irp x,<a> ?argc=?argc+1 ?atal <x>,%?argc endm endm ?atal macro n,i .xcref .xcref ?ali&i .cref ?ali&i ¯o ?ap <n> &endm endm ?ap macro n ?argl=?argl+2 ifdef ?t_&n ife ?t_&n-1 push word ptr (n) exitm endif ife ?t_&n-2 push n exitm endif ife ?t_&n-4 push word ptr (n)[2] push word ptr (n) ?argl=?argl+2 exitm endif ife ?t_&n-8 push word ptr (n)[6] push word ptr (n)[4] push word ptr (n)[2] push word ptr (n) ?argl=?argl+6 exitm endif if ?t_&n and 80h n ?argl=?argl+2 exitm endif ife ?t_&n push word ptr (n) exitm endif endif push n endm cCall macro n,a,c ifnb <a> arg <a> endif mpush %?rsl ifdef ?CC&n ?cCall1=?CC&n else ?cCall1=?PLM endif ifnb <c> ?gcc ?cCall1,%?cCall1,<c> endif ?argl=0 ife ?cCall1 ?acb=?argc else ?acb=1 endif rept ?argc uconcat <?ali>,%?acb uconcat <purge>,,<?ali>,%?acb ife ?cCall1 ?acb=?acb-1 else ?acb=?acb+1 endif endm call n if ((?cCall1 eq 0) and (?argl ne 0)) add sp,?argl endif mpop %?rsl ?rsl=0 ?argc= 0 ?argl= 0 endm cProc macro n,cf,a if ?cpd ?utpe endif ?cpd=1 ???=0 ?argc=0 ?ba=0 ?po=0 ?pu=0 ?ia=0 ?adj=4 ?rp=0 ?uf=0 ?wfp=?WIN ?ff=0 ?pas=0 ?pcc=?PLM ?no_bp2=?no_bp1 ?aprof2=?aprof1 ifnb <a> ?ri ?pas,<a> endif ?pc=sizec ?nd=?nodata1 ?nx=0 irp x,<cf> ifdef ??_cproc_&&x ??_cproc_&&x else ??error2 <e r r o r - unknown keyword x> .err endif endm if ?pcc ?PLMPrevParm=0 .xcref .xcref ?PLMParm0 .cref ?PLMParm0 ¯o purge ?PLMParm0 &endm endif .xcref .xcref ?CC&n .cref ?CC&n=?pcc if (?nx eq 1) and (?nd eq 0) ?nx = 0 ??error2 <ATOMIC specified without NODATA - ATOMIC ignored> endif if ?pc if ?wfp ife ?nx ?ia=2 ?pas = ?pas and (not ?ds) endif endif ?adj=?adj+2 else ?wfp=0 endif ?pas = ?pas and (not (?sp+?cs+?ss)) if ?uf ?pas = ?pas and (not (?bp+?si+?di)) endif ife ?pcc ?pg <_&n>,%?pu,%?pc,%?pas,%?wfp,<n>,%?pcc else ?pg <n>,%?pu,%?pc,%?pas,%?wfp,<n>,%?pcc endif endm ?pg macro n,p,c,a,w,nnu,cc .xcref if ?uf if ?nd ??error2 <NODATA encountered in &n - user frame ignored> ?uf=0 endif endif .xcref cBegin cBegin ¯o g .xcref if cc uconcat <?PLMParm>,%?PLMPrevParm,%?po endif if ?uf if ?rp ??error2 <parmR encountered in &n - user frame ignored> ?uf=0 endif endif ?pg1 <n>,c,a,%?po,w,%?uf,%?nd,%?rp,cc,<nnu>,%??? ?cpd=0 ?argc=0 ?ba=1 ???=(???+1) and 0fffeh if p public n endif ife c n proc near else n proc far endif ife cc nnu equ n endif ?cbe = 0 ifnb <g> ?pcbe <g>,<nnu>,<cBegin> endif if ?cbe eq 1 if ???+a+?rp if2 ??_out <cBegin - possibly invalid use of nogen> endif endif else if ?uf ?mf c,%???,%?po mpush a else ife ?cbe if w ife ?nd ife ?DOS5 mov ax,ds nop else mov ax,DataBASE endif endif if ?aprof2 call AProfCall endif ife ?nx ife ?DOS5 inc bp endif push bp mov bp,sp push ds else if ?ff+???+?po+?rp push bp mov bp,sp endif endif ife ?nd mov ds,ax endif else if ?aprof2 call AProfCall endif if ?ff+???+?po+?rp push bp mov bp,sp endif endif if ?rp ?uf=0 rept ?rp uconcat mpush,,?rp,%?uf ?uf=?uf+1 endm endif if ??? if ?chkstk1 ifdef ?CHKSTKPROC ?CHKSTKPROC %??? else mov ax,??? ife cc call _chkstk else call chkstk endif endif else sub sp,??? endif endif else if ?aprof2 call AProfRet call AProfCall endif if ?rp ??error2 <cBegin - parmRs encountered with partial frame> else if ??? lea sp,[bp][-???-?ia] endif endif endif mpush a endif ifdef ?PROFILE if c call StartNMeas endif endif endif .cref purge cBegin &endm .xcref ?utpe ?utpe ¯o ??error2 <unterminated procedure definition: "&n"> &endm .cref endm ?pg1 macro n,c,a,o,w,f,d,r,cc,nnu,lc .xcref .xcref cEnd parm_bytes_&nnu = o cEnd ¯o g .xcref ?ba=0 ?cbe = 0 ifnb <g> ?pcbe <g>,<nnu>,<cEnd> endif if ?cbe eq 1 if a+r+lc if2 ??_out <cEnd - possibly invalid use of nogen> endif endif else ifdef ?PROFILE if c call StopNMeas endif endif mpop a if f db 0c3h else if w ife ?nx if (?TF eq 0) or (???+r) lea sp,-2[bp] endif pop ds pop bp ife ?DOS5 dec bp endif else if (?TF eq 0) or (???+r) mov sp,bp endif if ???+?po+r pop bp endif endif else if ?ff+???+?po+r if (?TF eq 0) or (???+r) mov sp,bp endif pop bp endif endif if ?aprof2 call AProfRet endif if ?cbe ne 4 ife cc ret else ret o endif endif endif endif if ?cbe ne 4 n endp .cref purge cEnd else .cref endif &endm .cref endm .xcref .xcref cleanframe cleanframe macro cEnd <??cleanframe??> endm .cref .xcref .xcref ??_cproc_FAR,??_cproc_NEAR,??_cproc_PUBLIC,??_cproc_SMALL .xcref ??_cproc_DATA,??_cproc_NODATA,??_cproc_ATOMIC,??_cproc_C .xcref ??_cproc_PLM,??_cproc_PASCAL,??_cproc_WIN,??_cproc_NONWIN .xcref ??_cproc_NO_BP,??_cproc_BP .xcref ??_cproc_NO_ATTRPROF,??_cproc_ATTRPROF .xcref ??_cproc_far,??_cproc_near,??_cproc_public,??_cproc_small .xcref ??_cproc_data,??_cproc_nodata,??_cproc_atomic,??_cproc_c .xcref ??_cproc_plm,??_cproc_pascal,??_cproc_win,??_cproc_nonwin .xcref ??_cproc_no_bp,??_cproc_bp .xcref ??_cproc_no_attrprof,??_cproc_attrprof .cref ??_cproc_FAR macro ?pc=1 endm ??_cproc_NEAR macro ?pc=0 endm ??_cproc_PUBLIC macro ?pu=1 endm ??_cproc_SMALL macro ?uf=1 endm ??_cproc_DATA macro ?nd=0 endm ??_cproc_NODATA macro ?nd=1 endm ??_cproc_ATOMIC macro ?nx=1 endm ??_cproc_C macro ?pcc=0 endm ??_cproc_PLM macro ?pcc=1 endm ??_cproc_PASCAL macro ?pcc=1 endm ??_cproc_WIN macro ?wfp=1 endm ??_cproc_NONWIN macro ?wfp=0 endm ??_cproc_NO_BP macro ?no_bp2=1 endm ??_cproc_BP macro ?no_bp2=0 endm ??_cproc_NO_ATTRPROF macro ?aprof2=0 endm ??_cproc_ATTRPROF macro ?aprof2=1 endm ??_cproc_far macro ?pc=1 endm ??_cproc_near macro ?pc=0 endm ??_cproc_public macro ?pu=1 endm ??_cproc_small macro ?uf=1 endm ??_cproc_data macro ?nd=0 endm ??_cproc_nodata macro ?nd=1 endm ??_cproc_atomic macro ?nx=1 endm ??_cproc_c macro ?pcc=0 endm ??_cproc_plm macro ?pcc=1 endm ??_cproc_pascal macro ?pcc=1 endm ??_cproc_win macro ?wfp=1 endm ??_cproc_nonwin macro ?wfp=0 endm ??_cproc_no_bp macro ?no_bp2=1 endm ??_cproc_bp macro ?no_bp2=0 endm ??_cproc_no_attrprof macro ?aprof2=0 endm ??_cproc_attrprof macro ?aprof2=1 endm ?pcbe macro g,nnu,mt ifidn <g>,<NOGEN> ?cbe = 1 else ifidn <g>,<nogen> ?cbe = 1 else ifidn <mt>,<cBegin> ifidn <g>,<PARTIAL> ?cbe = 2 else ifidn <g>,<partial> ?cbe = 2 else ifdif <g>,<nnu> ??error2 <mt - unknown keyword g> endif endif endif else ifidn <g>,<??cleanframe??> ?cbe = 4 else ifdif <g>,<nnu> ??error2 <mt - unknown keyword g> endif endif endif endif endif endm assumes macro s,ln ifndef ln&_assumes assume s:ln else ln&_assumes s endif endm createSeg macro n,ln,a,co,cl,grp ifnb <cl> n segment a co '&cl' else n segment a co endif n ends ifnb <grp> addseg grp,n else ln&OFFSET equ offset n: ln&BASE equ n ?cs3 <ln>,<n> endif ?cs1 <ln>,<n> endm addseg macro grp,seg .xcref .xcref grp&_def .cref ifndef grp&_def grp&_def=0 endif if grp&_def ne ASMpass .xcref .xcref grp&_add .cref grp&_add ¯o s grp&_in <seg>,s &endm .xcref .xcref grp&_in .cref grp&_in ¯o sl,s ifb <s> grp group sl else grp&_add ¯o ns grp&_in <sl,s>,ns &endm endif &endm grp&_def=ASMpass else grp&_add seg endif endm defgrp macro grp,ln addseg grp ifnb <ln> irp x,<ln> ?cs3 <&x>,<grp> x&&OFFSET equ offset grp: x&&BASE equ grp endm endif endm ?cs1 macro ln,n .xcref .xcref ln&_sbegin .cref ln&_sbegin ¯o .xcref .xcref ?mf .cref ?curseg equ <&ln> ?mf &¯o c,l,p if c extrn n&_FARFRAME:near call n&_FARFRAME else extrn n&_NEARFRAME:near call n&_NEARFRAME endif db l shr 1 db p shr 1 &&endm ?cs2 <ln>,<n> n segment &endm endm ?cs2 macro ln,n .xcref .xcref sEnd .cref sEnd ¯o n ends purge ?mf purge sEnd &endm endm ?cs3 macro ln,n .xcref .xcref ln&_assumes .cref ln&_assumes ¯o s assume s:&n &endm endm .xcref .xcref sBegin .cref sBegin macro ln ln&_sbegin endm ife ?DF createSeg _TEXT,Code,word,public,CODE ife ?nodata1 createSeg _DATA,Data,word,public,DATA,DGROUP defgrp DGROUP,Data endif if ?chkstk1 ifndef ?CHKSTKPROC externp <chkstk> endif endif endif errnz macro x if2 if x errnz1 <x>,%(x) endif endif endm errnz1 macro x1,x2 = *errnz* x1 = x2 .err endm errn$ macro l,x errnz <offset $ - offset l x> endm ifdef ?PROFILE externFP <StartNMeas,StopNMeas> endif if ?aprof1 externFP <AProfCall,AProfRet>,<PLM> endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.