diff --git a/avr/modules/lcd2/gui2/generic/widget.asm b/avr/modules/lcd2/gui2/generic/widget.asm index 80f34f0..5e78942 100644 --- a/avr/modules/lcd2/gui2/generic/widget.asm +++ b/avr/modules/lcd2/gui2/generic/widget.asm @@ -1099,6 +1099,8 @@ Widget_TreeMatchOptsAndSendSignalToActive_done: ; @param xh param2 ; @clobbers any, !R16, !R17, !X, !Z +#if 0 +; non-iterative routine Widget_TreeMatchFlagsAndSendSignalToActive: push zl push zh @@ -1141,6 +1143,53 @@ Widget_TreeMatchFlagsAndSendSignalToActive_done: ret ; @end +#else +; iterative routine + +Widget_TreeMatchFlagsAndSendSignalToActive: + rcall OBJ_IsObject + brcc Widget_TreeMatchFlagsAndSendSignalToActive_ret + rcall widgetTreeMatchFlagsAndSendSignalToActive +Widget_TreeMatchFlagsAndSendSignalToActive_ret: + ret +; @end + + + +widgetTreeMatchFlagsAndSendSignalToActive: + push zl + push zh + ; check flags + rcall Widget_GetSdramPtr ; (none) + ldd r18, Y+WIDGET_SD_OFFS_FLAGS + sbrs r18, WIDGET_FLAGS_ACTIVE_BIT + rjmp widgetTreeMatchFlagsAndSendSignalToActive_done ; skip inactive branches + eor r18, r21 ; XOR with value (1 if different) + and r18, r20 ; AND with mask + brne widgetTreeMatchFlagsAndSendSignalToActive_l1 + push r20 + push r21 + rcall OBJ_HandleSignalSaveInRegs + pop r21 + pop r20 +widgetTreeMatchFlagsAndSendSignalToActive_l1: + bigcall OBJ_GetFirstChild +widgetTreeMatchFlagsAndSendSignalToActive_loop: + brcc widgetTreeMatchFlagsAndSendSignalToActive_done + mov zl, r18 + mov zh, r19 + rcall widgetTreeMatchFlagsAndSendSignalToActive + bigcall OBJ_GetNext + rjmp widgetTreeMatchFlagsAndSendSignalToActive_loop + +widgetTreeMatchFlagsAndSendSignalToActive_done: + pop zh + pop zl + ret +; @end + + +#endif ; ---------------------------------------------------------------------------