kws_i=-1
while
 [[ -v kws[++kws_i] ]]
do
 kws_kw=${kws[kws_i]} kws_p1=$nspace$SUBSEP kws_id=${dat[${kws_p1}kw$SUBSEP$kws_kw]} \
 kws_p2=$kws_p1$kws_id$SUBSEP kws_code=${dat[${kws_p2}code]}
 [[ ! $kws_code ]] && continue

 if
  (( 0 < ( kws_take = ${dat[${kws_p2}take]} ) ))
 then
  kws_args=( "${kws[@]:1+kws_i:kws_take}" )
  (( kws_i += kws_take ))
 else
  kws_args=( )
 fi

 eval -- "$kws_code"
done
 
