thanks for your thoughts and comments
set fldList
set repList
set subfldList
set PIDpos -1 ;# Position of PID segment in msg
set NK1pos -1 ;# Position of NK1 segment in msg
set GT1pos -1 ;# Position of GT1 segment in msg
set IN1pos -1 ;# Position of IN1 segment in msg
set PatName 5 ;# Position of Patient Name
set PatAlias 9 ;# Position of Patinet Alias
set NOKName 2 ;# Position of Next of Kin Name
set GT1Name 3 ;# Guarantor Name
set GT1SpName 4 ;# Guarantor Spouse Name
set IN1Name 16 ;# Name of Insured
set PosList
###############################################################################
###############################################################################
# #
# Load in the arguments we need that were passed from the caller #
###############################################################################
###############################################################################
keylget args MODE mode ;# The mode the engine was called from
###############################################################################
###############################################################################
# #
# Switch based on what mode the engine was in when it called the procedure #
###############################################################################
###############################################################################
switch -exact — $mode {
start { }
run {
set mh [keylget args MSGID] ;# Get message handle from args
set dispList
set msg [msgget $mh] ;# Get a copy of the message
set fldSep [string index $msg 3] ;# Field Seperator
set subSep [string index $msg 4] ;# Sub-Field Seperator
set repSep [string index $msg 5] ;# Field Seperator
set segList [split $msg r] ;# Split message into segList
###############################################################################
###############################################################################
# #
# Find Position of Segments that contain Name Positions #
###############################################################################
###############################################################################
lappend PosList [lsearch -regexp $segList {^PID}]
lappend PosList [lsearch -regexp $segList {^NK1}]
lappend PosList [lsearch -regexp $segList {^GT1}]
lappend PosList [lsearch -regexp $segList {^IN1}]
###############################################################################
###############################################################################
# #
# Process each segment that might contain a Dr ID Numbers #
###############################################################################
###############################################################################
foreach segPos $PosList {
if { $segPos > 0} {
set fldList [split [lindex $segList $segPos] $fldSep]
###############################################################################
###############################################################################
# #
# For each of the possible Name fields do the same thing #
# 1) Any of the fields can have repetitions #
# Split the field into a list of each repition. #
# 2) Call the subroutine that changes the first letter of each #
# name to a captial and lowercase the rest #
# 3) Rebuild the segList with the newly formatted names #
###############################################################################
###############################################################################
switch -exact [lindex $fldList 0] {
PID {
if { [llength $fldList] >= [expr $PatName + 1] } {
set repList [split [lindex $fldList $PatName] $repSep]
set repList [FormatAllsName $repList $subSep]
}
lset fldList $PatName [join $fldList $fldSep]
}
}
}
}
# lappend dispList “CONTINUE $mh”
}
time {
# Timer-based processing
# N.B.: there may or may not be a MSGID key in args
}
shutdown {
# Doing some clean-up work
}
}
return $dispList
}