%' *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* %' TRIM(a) - returns the input parameter trimmed of leading and %' trailing blanks. %*DEFINE(TRIM(a)) LOCAL x y (%MATCH( x y)(%a)%x)%' %' *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* %' ARG - gets the next comma-delimited arg from variable named TAIL, %' stripped and trimmed. Any macro that has a valid type of NONE %' uses this macro so that the other parameters are not needed. %*DEFINE(ARG) LOCAL a (%MATCH(a,tail)(%tail)%TRIM(%a))%' %' *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* %*DEFINE(bsasi(parameters))(%DEFINE(tail)(%parameters)%' name bsasi public aport_sasi, bport_sasi, cport_sasi, controlport_sasi public init_command, init_count code_bsasi segment byte public 'CODE' aport_sasi dw %ARG bport_sasi dw %ARG cport_sasi dw %ARG controlport_sasi dw %ARG init_command db %ARG init_count db %ARG %DEFINE (init)(%ARG)%' %WHILE (%LEN (%init) ne 0)(%' db %init %DEFINE (init)(%ARG)%' )%' code_bsasi ends end)