A number of things have been updated as well as added to the macros file.
1. The .switch macro has been updated to a more efficient form.
2. The .switch$ macro from MASM32 has been ported to MASM64.
3. The .switchi$ macro from MASM32 has been ported to MASM64.
The new help format based on RTF files has had the "switch" page updated to include the two new string versions.
03_SwitchBlock.rtf
macros64.inc is a replacement for the earlier version.
The file 03_SwitchBlock.rtf should replace the earlier one in the "RtfHelp" directory.
The two ported macros for string comparison.
; ======================
; case sensitive version
; ======================
.switch$ arg ; arg is the address of a zero terminated string
.case$ "alpha"
conout "alpha selected",lf
.case$ "beta"
conout "beta selected",lf
.case$ "gamma"
conout "gamma selected",lf
.case$ "delta"
conout "delta selected",lf
.case$ "epsilon"
conout "epsilon selected",lf
.else$
conout "No matching string",lf
.endsw$
; ||||||||||||||||||||||
; ========================
; case insensitive version
; ========================
.switchi$ arg ; arg is the address of a zero terminated string
.casei$ "JeSt"
conout "jest selected",lf
.casei$ "tEsT"
conout "test selected",lf
.casei$ "BeSt"
conout "best selected",lf
.casei$ "wEsT"
conout "west selected",lf
.elsei$
conout "No matching string",lf
.endswi$
; ||||||||||||||||||||||||
A simple demo of the case sensitive ".switch$" macro in use.
A console example of the case insensitive .switchi$ macros. Zip file attached.
; «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
include \masm64\include64\masm64rt.inc
.data
alpha db "alpha",0
beta db "beta",0
gamma db "gamma",0
delta db "delta",0
epsilon db "epsilon",0
zeta db "zeta",0
eta db "eta",0
theta db "theta",0
iota db "iota",0
kappa db "kappa",0
.code
; «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
entry_point proc
LOCAL iwrd :QWORD
conout "-------------------------------------",lf
conout " 64 bit MASM .switchi$ example",lf
conout " Format = Input word - output word",lf
conout "-------------------------------------",lf,lf
rcall switchitst,OFFSET alpha
rcall switchitst,OFFSET beta
rcall switchitst,OFFSET gamma
rcall switchitst,OFFSET delta
rcall switchitst,OFFSET epsilon
rcall switchitst,OFFSET zeta
rcall switchitst,OFFSET eta
rcall switchitst,OFFSET theta
rcall switchitst,OFFSET iota
rcall switchitst,OFFSET kappa
conout lf
waitkey
.exit
entry_point endp
; «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
switchitst proc iwrd:QWORD
.switchi$ iwrd
.casei$ "ALPHA"
conout iwrd," ","ALPHA",lf
.casei$ "BETA"
conout iwrd," ","BETA",lf
.casei$ "GAMMA"
conout iwrd," ","GAMMA",lf
.casei$ "DELTA"
conout iwrd," ","DELTA",lf
.casei$ "EPSILON"
conout iwrd," ","GAMMA",lf
.casei$ "ZETA"
conout iwrd," ","EPSILON",lf
.casei$ "ETA"
conout iwrd," ","ETA",lf
.casei$ "THETA"
conout iwrd," ","THETA",lf
.casei$ "IOTA"
conout iwrd," ","IOTA",lf
.casei$ "KAPPA"
conout iwrd," ","KAPPA",lf
.elsei$
conout "No word here",lf
.endswi$
ret
switchitst endp
; «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
end