% % execute partner operations string % % stack: op-str % empty !Partner.Btn empty !Partner.Block -1 !Partner.Action -1 !Partner.Uart -1 !Partner.Rout -1 !Partner.Rin -1 !Partner.Tin -1 !Partner.Tout -1 !Partner.AnyRx -1 !Partner.Stop empty !Partner.Return execstr "Op: " _Partner.Btn any? { % % decode the btn op string % "(" atleft( { % % this is a full btn response string % -1 left -1 right "," 0 9 1 parse !Partner.Return !Partner.Stop !Partner.AnyRx !Partner.Tout !Partner.Tin !Partner.Rin !Partner.Rout !Partner.Uart dup !Partner.Action < |1 % % memory location is returned % &"MEMLOC " &_Partner.Return |4 &"BUF stat " &_Partner.Return |8 &"BLK stat " &_Partner.Return |12 % % set the uart, for the different uarts a block return % may be present % _Partner.Return < |3 % % return of system console messages % _Partner.Block "console" log)( length exch &:Partner.Console "ConsLen " ^ & > not { &_Partner.Action &" " &_Partner.Return } if |9 _Partner.Return 1 eq { &"ENABLED" } { &"DISABLED" } ifelse > not { &"OK - " &_Partner.Btn } if } { % % not a full btn response % "NOTRESP " ^ & } ifelse % % execute the final action of Partner response % then clear it % "Mach.Return" &_Partner.Action dup _ empty rot ! execstr *machcomt } { pop } ifelse