; High-Level-Language Interface Macros - Version 2.0 ; for Microsoft Macro Assembler 5.10 ; (C) Copyright Microsoft Corporation, 1987. ; Syntax Purpose ; ------ ------- ; ; setModel Sets model from text equate ; ; hProc <name [NEAR|FAR]> [,<USES reglist>] [,arg[:type] [,arg[:type]]]... ; Starts a procedure with optional stack arguments ; ; hLocal var[:type] [,var[:type]]... ; Defines local stack variables ; ; hRet Returns from the current procedure ; ; hEndp Ends the current procedure ; ; ifFP statement Assembles statement if far data ; ; FPoperand Conditionally provides ES override for data ; ; pLes register,address Conditionally loads data through ES ; ; pLds register,address Conditionally loads data through DS ;if1 ; Translate command-line arguments ; Initialize procName procName equ <foo> ; Set model passed from command line setModel macro mod ifdef cLang .model mod, C lang EQU <C> elseifdef BASIC .model mod, Basic elseifdef FORTRAN .model mod, FORTRAN elseifdef Pascal .model mod, Pascal endif ; FP - supply far pointer ES overide as needed - must be inside for setModel if @Datasize FP equ <es:> else FP equ <> endif endm ; FP - supply far pointer ES overide as needed - must be outside for .MODEL ifdef @Datasize if @Datasize FP equ <es:> else FP equ <> endif endif ; Declare high level routine and parameters hProc macro funName, a,b,c,d,e,f,g,h,i,j ; LOCAL argstr ii instr <funName>,< > if ii procName subStr <funName>,1,ii nearFar subStr <funName>,ii else procName equ <funName> nearFar equ <> endif argstr equ <a> irp arg,<b,c,d,e,f,g,h,i,j> ifnb <arg> argstr catstr argstr,<, arg> else exitm endif endm defineProc %nearFar, %argstr endm defineProc Macro size,args procName proc size args endm ; Declare local stack variables hLocal macro a,b,c,d,e,f,g,h,i,j ; LOCAL argstr argstr EQU <a> irp arg,<b,c,d,e,f,g,h,i,j> ifnb <arg> argstr catstr argstr,<, arg> else exitm endif endm defineLocal %argstr endm defineLocal macro args &local args endm ; Generate high level return hRet macro ret endm ; End a high level procedure hEndp macro procName endp endm ; Execute instruction if far data ifFP macro a,b,c,d,e,f,g,h,i,j if @datasize a b c d e f g h i j endif endm ; Load 16/32 bit pointers into [ES:] reg pLes macro reg, address if @datasize les reg,address else mov reg,address endif endm ;Load 16/32 bit pointers into [DS:] reg pLds macro reg, address if @datasize lds reg,address else mov reg,address endif endm ;endif ; Pass 1 only