Mercurial > public > hwos_code
diff src/menu_processor.inc @ 0:11d4fc797f74
init
author | heinrichsweikamp |
---|---|
date | Wed, 24 Apr 2013 19:22:45 +0200 |
parents | |
children | dcf3e08f31ac |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/menu_processor.inc Wed Apr 24 19:22:45 2013 +0200 @@ -0,0 +1,88 @@ +;============================================================================= +; +; File menu_processor.asm +; +; Routines to handle all OSTC3 graphic/text menus. +; +; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved. +;============================================================================= +; HISTORY +; 2011-05-30 : [jDG] Creation. + + ; Restart menu-system from first icon/line: + extern menu_processor_reset + + ; Recal last (automatically) saved icon/line when returning from submenu. + extern menu_processor_pop + + ; Rexecute the menu block + extern menu_processor + +;============================================================================= +; Menus parameters + +;NOTE: should be idenric in .inc and .asm ! +#define MENU_LINES_MAX .7 ; Number of lines per screen? +#define MENU_HEIGHT .27 ; Spacing on screen. +#define MENU_VCENTER .125 ; Position on screen. + +;============================================================================= + +COMMON_BEGIN_MENU MACRO dynamic, txt, nb_items + local center + If nb_items > MENU_LINES_MAX +center set MENU_VCENTER - (MENU_HEIGHT/2) * MENU_LINES_MAX + Else +center set MENU_VCENTER - (MENU_HEIGHT/2) * nb_items + Endif + If nb_items <= 0 + Error "Zero items in menu ", x + Endif + + extern txt + call menu_processor + ; Push 6 bytes of menu header data. + db nb_items, dynamic + db LOW(txt), HIGH(txt) + db UPPER(txt), center + ENDM + +;============================================================================= +; Macro to generat (and check) menu vertical menu blocks with data. +; +MENU_BEGIN MACRO menu_title, nb_items + COMMON_BEGIN_MENU 0, menu_title, nb_items + ENDM + +MENU_BEGIN_DYNAMIC macro title_proc, nb_items + COMMON_BEGIN_MENU 1, title_proc, nb_items + ENDM + +;============================================================================= + +; Submenu +MENU_CALL MACRO txt, proc + extern txt + db 0, 0, 0, 0 + db LOW(proc), HIGH(proc), UPPER(proc), 0 + db LOW(txt), HIGH(txt) + ENDM + +; Generic option menu +MENU_OPTION MACRO txt, option, callback + extern txt + extern option + db 2, LOW(callback), HIGH(callback), UPPER(callback) + db LOW(option),HIGH(option),UPPER(option), 0 + db LOW(txt), HIGH(txt) + ENDM + +MENU_DYNAMIC MACRO callback, proc + extern callback + db 3, LOW(callback), HIGH(callback), UPPER(callback) + db LOW(proc), HIGH(proc), UPPER(proc), 0 + db 0, 0 + ENDM + +MENU_END MACRO + ENDM \ No newline at end of file