369 lines
7.2 KiB
OpenEdge ABL
369 lines
7.2 KiB
OpenEdge ABL
|
;****************************Public Macro************************************
|
|||
|
;
|
|||
|
; ComposeInst Inst,p1,p2,p3,p4,p5,p6,p7,p8,p9
|
|||
|
;
|
|||
|
; This macro simply concatenates all arguments into one string.
|
|||
|
;
|
|||
|
; History:
|
|||
|
; Thu 15-Aug-1991 16:21:14 -by- Viroon Touranachun [viroont]
|
|||
|
; Created
|
|||
|
;
|
|||
|
;****************************************************************************
|
|||
|
|
|||
|
ComposeInst macro Inst,p1,p2,p3,p4,p5,p6,p7,p8,p9
|
|||
|
&Inst &p1&p2&p3&p4&p5&p6&p7&p8&p9
|
|||
|
endm
|
|||
|
|
|||
|
;****************************Public Macro************************************
|
|||
|
;
|
|||
|
; CountArg cCount,ArgList
|
|||
|
;
|
|||
|
; This macro count the number of arguments in the ArgList and returns
|
|||
|
; the value in cCount.
|
|||
|
;
|
|||
|
; History:
|
|||
|
; Thu 15-Aug-1991 16:21:14 -by- Viroon Touranachun [viroont]
|
|||
|
; Created
|
|||
|
;
|
|||
|
;****************************************************************************
|
|||
|
|
|||
|
CountArg macro cCount,ArgList
|
|||
|
|
|||
|
cCount = 0
|
|||
|
|
|||
|
irp arg,<ArgList>
|
|||
|
cCount = cCount+1
|
|||
|
endm
|
|||
|
endm
|
|||
|
|
|||
|
;****************************Public Macro************************************
|
|||
|
;
|
|||
|
; RevPush ArgList,cCount
|
|||
|
;
|
|||
|
; This macro pushes the arguments in ArgList in the reverse order
|
|||
|
; and returns the number of arguments in cCount.
|
|||
|
;
|
|||
|
; History:
|
|||
|
; Thu 15-Aug-1991 16:21:14 -by- Viroon Touranachun [viroont]
|
|||
|
; Created
|
|||
|
;
|
|||
|
;****************************************************************************
|
|||
|
|
|||
|
RevPush macro ArgList,cCount
|
|||
|
Local index,x
|
|||
|
|
|||
|
CountArg cCount,<ArgList>
|
|||
|
|
|||
|
index = cCount
|
|||
|
rept cCount
|
|||
|
x = 0
|
|||
|
irp arg,<ArgList>
|
|||
|
x = x+1
|
|||
|
ife index-x
|
|||
|
push arg
|
|||
|
exitm
|
|||
|
endif
|
|||
|
endm
|
|||
|
index = index-1
|
|||
|
endm
|
|||
|
endm
|
|||
|
|
|||
|
;****************************Public Macro************************************
|
|||
|
;
|
|||
|
; The following sections contain calling-convention related macros for:
|
|||
|
;
|
|||
|
; PUBLICP Func,N
|
|||
|
; to define a public label
|
|||
|
;
|
|||
|
; EXTRNP Func,N
|
|||
|
; to define a external near label
|
|||
|
;
|
|||
|
; LABELP Func,N
|
|||
|
; to label an address as a routine entry point
|
|||
|
;
|
|||
|
; cProc Func,N,ArgList
|
|||
|
; to declare a routine header
|
|||
|
;
|
|||
|
; ProcName Name,Func,N
|
|||
|
; to rename a function Func to Name. Using it in conjunction with
|
|||
|
; normal function declaration (with the new name) will solve an error
|
|||
|
; caused by a long parameter list routine that exhausts page width.
|
|||
|
;
|
|||
|
; cRet Func
|
|||
|
; to return from Func routines (declared with cProc or ProcName.)
|
|||
|
;
|
|||
|
; endProc Func
|
|||
|
; to declare the end of routine (declared with cProc or ProcName.)
|
|||
|
;
|
|||
|
; endMod Func
|
|||
|
; to declare the end of module with an entry point at Func (declared
|
|||
|
; with cProc or ProcName.)
|
|||
|
;
|
|||
|
; cCall Func,ArgList
|
|||
|
; to call to a routine--Func--with the arguments pushed on the stack
|
|||
|
;
|
|||
|
; ptrCall Func,ArgList
|
|||
|
; to call through a pointer with the arguments pushed on the stack
|
|||
|
;
|
|||
|
; MovAddr dest,Func,n
|
|||
|
; to move the address of the routine--Func--into dest.
|
|||
|
;
|
|||
|
; Note that for the standard calling convention all the function names,
|
|||
|
; Func, are automatically converted to Func@N where N is the number of
|
|||
|
; bytes in the argument list.
|
|||
|
;
|
|||
|
; History:
|
|||
|
; Thu 15-Aug-1991 16:21:14 -by- Viroon Touranachun [viroont]
|
|||
|
; Created
|
|||
|
;
|
|||
|
;****************************************************************************
|
|||
|
|
|||
|
IFNDEF DOS_PLATFORM
|
|||
|
IFNDEF STD_CALL
|
|||
|
|
|||
|
;****************************************************************************
|
|||
|
;
|
|||
|
; This section is used exclusively for C calling convention.
|
|||
|
;
|
|||
|
;****************************************************************************
|
|||
|
|
|||
|
PUBLICP macro Func,N
|
|||
|
|
|||
|
public &Func
|
|||
|
endm
|
|||
|
|
|||
|
EXTRNP macro Func,N
|
|||
|
|
|||
|
extrn &Func:NEAR
|
|||
|
endm
|
|||
|
|
|||
|
LABELP macro Func,N
|
|||
|
|
|||
|
&Func LABEL NEAR
|
|||
|
endm
|
|||
|
|
|||
|
ProcName macro Name,Func,N
|
|||
|
|
|||
|
&Name EQU <&Func>
|
|||
|
endm
|
|||
|
|
|||
|
cProc macro Func,N,ArgList
|
|||
|
|
|||
|
ProcName xxx&Func,Func,N
|
|||
|
|
|||
|
xxx&Func proc &ArgList
|
|||
|
endm
|
|||
|
|
|||
|
cRet macro Func
|
|||
|
|
|||
|
ret
|
|||
|
endm
|
|||
|
|
|||
|
endProc macro Func
|
|||
|
|
|||
|
xxx&Func endp
|
|||
|
endm
|
|||
|
|
|||
|
endMod macro Func
|
|||
|
|
|||
|
end xxx&Func
|
|||
|
|
|||
|
endm
|
|||
|
|
|||
|
ptrCall macro Func,ArgList
|
|||
|
Local Bytes
|
|||
|
|
|||
|
RevPush <ArgList>,Bytes
|
|||
|
Bytes = Bytes*4
|
|||
|
|
|||
|
call &Func
|
|||
|
|
|||
|
if Bytes GT 0
|
|||
|
add esp,Bytes
|
|||
|
endif
|
|||
|
endm
|
|||
|
|
|||
|
cCall macro Func,ArgList
|
|||
|
Local Bytes
|
|||
|
|
|||
|
RevPush <ArgList>,Bytes
|
|||
|
Bytes = Bytes*4
|
|||
|
|
|||
|
call &Func
|
|||
|
|
|||
|
if Bytes GT 0
|
|||
|
add esp,Bytes
|
|||
|
endif
|
|||
|
|
|||
|
endm
|
|||
|
|
|||
|
MovAddr macro dest,addr,n
|
|||
|
|
|||
|
mov dest,offset FLAT:&addr
|
|||
|
endm
|
|||
|
|
|||
|
ENDIF ; STD_CALL
|
|||
|
|
|||
|
ELSE
|
|||
|
|
|||
|
IFNDEF STD_CALL
|
|||
|
|
|||
|
;****************************************************************************
|
|||
|
;
|
|||
|
; This section is used exclusively for Pascal calling convention.
|
|||
|
;
|
|||
|
;****************************************************************************
|
|||
|
|
|||
|
PUBLICP macro Func,N
|
|||
|
|
|||
|
public &Func
|
|||
|
endm
|
|||
|
|
|||
|
EXTRNP macro Func,N
|
|||
|
|
|||
|
extrn &Func:NEAR
|
|||
|
endm
|
|||
|
|
|||
|
LABELP macro Func,N
|
|||
|
|
|||
|
&Func LABEL NEAR
|
|||
|
endm
|
|||
|
|
|||
|
ProcName macro Name,Func,N
|
|||
|
|
|||
|
&Name EQU <&Func>
|
|||
|
endm
|
|||
|
|
|||
|
cProc macro Func,N,ArgList
|
|||
|
|
|||
|
ProcName xxx&Func,Func,N
|
|||
|
|
|||
|
xxx&Func proc &ArgList
|
|||
|
endm
|
|||
|
|
|||
|
cRet macro Func
|
|||
|
|
|||
|
ret
|
|||
|
endm
|
|||
|
|
|||
|
endProc macro Func
|
|||
|
|
|||
|
xxx&Func endp
|
|||
|
endm
|
|||
|
|
|||
|
endMod macro Func
|
|||
|
|
|||
|
end xxx&Func
|
|||
|
|
|||
|
endm
|
|||
|
|
|||
|
cCall macro Func,ArgList
|
|||
|
irp arg,<ArgList>
|
|||
|
push arg
|
|||
|
endm
|
|||
|
|
|||
|
call &Func
|
|||
|
endm
|
|||
|
|
|||
|
MovAddr macro dest,addr,n
|
|||
|
|
|||
|
mov dest,offset FLAT:&addr
|
|||
|
endm
|
|||
|
|
|||
|
ENDIF : ~STD_CALL
|
|||
|
ENDIF ; DOS_PLATFORM
|
|||
|
|
|||
|
IFDEF STD_CALL
|
|||
|
;****************************************************************************
|
|||
|
;
|
|||
|
; This section is used exclusively for the standard calling convention.
|
|||
|
;
|
|||
|
;****************************************************************************
|
|||
|
|
|||
|
PUBLICP macro Func,N
|
|||
|
|
|||
|
ifb <N>
|
|||
|
public &Func&@0
|
|||
|
else
|
|||
|
public &Func&@&N
|
|||
|
endif
|
|||
|
endm
|
|||
|
|
|||
|
EXTRNP macro Func,N
|
|||
|
|
|||
|
ifb <N>
|
|||
|
extrn &Func&@0:NEAR
|
|||
|
else
|
|||
|
extrn &Func&@&N:NEAR
|
|||
|
endif
|
|||
|
endm
|
|||
|
|
|||
|
LABELP macro Func,N
|
|||
|
|
|||
|
ifb <N>
|
|||
|
&Func&@0 LABEL NEAR
|
|||
|
else
|
|||
|
&Func&@&N LABEL NEAR
|
|||
|
endif
|
|||
|
endm
|
|||
|
|
|||
|
ProcName macro Name,Func,N
|
|||
|
|
|||
|
ifb <N>
|
|||
|
cByte&Func EQU 0
|
|||
|
&Name EQU <&Func&@0>
|
|||
|
else
|
|||
|
cByte&Func EQU N
|
|||
|
&Name EQU <&Func&@&N>
|
|||
|
endif
|
|||
|
endm
|
|||
|
|
|||
|
cProc macro Func,N,ArgList
|
|||
|
|
|||
|
ProcName xxx&Func,Func,N
|
|||
|
|
|||
|
xxx&Func proc &ArgList
|
|||
|
endm
|
|||
|
|
|||
|
cRet macro Func
|
|||
|
|
|||
|
ret cByte&Func
|
|||
|
|
|||
|
endm
|
|||
|
|
|||
|
|
|||
|
endProc macro Func
|
|||
|
|
|||
|
xxx&Func endp
|
|||
|
|
|||
|
endm
|
|||
|
|
|||
|
endMod macro Func
|
|||
|
|
|||
|
end xxx&Func
|
|||
|
|
|||
|
endm
|
|||
|
|
|||
|
ptrCall macro Func,ArgList
|
|||
|
Local Bytes
|
|||
|
|
|||
|
RevPush <ArgList>,Bytes
|
|||
|
call &Func
|
|||
|
endm
|
|||
|
|
|||
|
cCall macro Func,ArgList
|
|||
|
Local Bytes
|
|||
|
|
|||
|
RevPush <ArgList>,Bytes
|
|||
|
Bytes = Bytes*4
|
|||
|
|
|||
|
ComposeInst <call>,&Func,<@>,%(Bytes)
|
|||
|
endm
|
|||
|
|
|||
|
MovAddr macro dest,addr,n
|
|||
|
|
|||
|
ComposeInst <mov >,dest,<,offset FLAT:>,addr,<@>,n
|
|||
|
endm
|
|||
|
|
|||
|
ENDIF ;STD_CALL
|
|||
|
|