Changeset 60 in xtideuniversalbios for trunk/Assembly_Library/Src/Menu
- Timestamp:
- Nov 25, 2010, 2:17:45 PM (14 years ago)
- google:author:
- aitotat
- Location:
- trunk/Assembly_Library/Src/Menu
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Assembly_Library/Src/Menu/Dialog/Dialog.asm
r58 r60 2 2 ; Project name : Assembly Library 3 3 ; Created date : 6.8.2010 4 ; Last update : 18.11.20104 ; Last update : 22.11.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Common functions for many dialogs. … … 232 232 Dialog_RemoveFromScreenByRedrawingParentMenu: 233 233 mov si, [bp+DIALOG.pParentMenu] ; SS:SI points to parent MENU 234 call .ResetSelectionTimeoutFromParentMenuInSSSI235 234 call .GetParentTitleBorderCoordinatesToDX 236 235 call MenuLocation_GetTitleBordersTopLeftCoordinatesToAX … … 238 237 jb SHORT .RedrawDialogAreaAndWholeParentWindow 239 238 jmp SHORT .RedrawWholeParentWindow 240 241 ;--------------------------------------------------------------------242 ; .ResetSelectionTimeoutFromParentMenuInSSSI243 ; Parameters:244 ; SS:SI: Ptr to parent MENU245 ; Returns:246 ; Nothing247 ; Corrupts:248 ; AX, BX249 ;--------------------------------------------------------------------250 ALIGN JUMP_ALIGN251 .ResetSelectionTimeoutFromParentMenuInSSSI:252 xchg bp, si253 call MenuTime_RestartSelectionTimeout ; Restart timeout for parent MENU254 xchg si, bp255 ret256 239 257 240 ;-------------------------------------------------------------------- -
trunk/Assembly_Library/Src/Menu/Menu.asm
r54 r60 2 2 ; Project name : Assembly Library 3 3 ; Created date : 3.8.2010 4 ; Last update : 2 3.10.20104 ; Last update : 22.11.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Menu Library functions for CALL_MENU_LIBRARY macro … … 57 57 at MENU_LIB.RefreshInformation, dw MenuText_RefreshInformation 58 58 59 at MENU_LIB.RestartTimeout, dw MenuTime_RestartSelectionTimeout 60 ;at MENU_LIB.SetTimeoutValueFromAX, dw MenuTime_SetSelectionTimeoutValueFromAX ; Special case in CALL_MENU_LIBRARY 59 at MENU_LIB.StartSelectionTimeoutWithTicksInAX, dw MenuTime_StartSelectionTimeoutWithTicksInAX 61 60 62 61 %ifdef INCLUDE_MENU_DIALOGS -
trunk/Assembly_Library/Src/Menu/MenuBorders.asm
r52 r60 2 2 ; Project name : Assembly Library 3 3 ; Created date : 14.7.2010 4 ; Last update : 11.10.20104 ; Last update : 25.11.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Functions for drawing menu borders. … … 34 34 call RefreshInformationBorders 35 35 call DrawBottomBorderLine 36 call DrawBottomShadowLine 37 jmp MenuTime_DrawWithoutUpdating 36 call DrawTimeoutCounterOverBottomBorderLine 37 jmp DrawBottomShadowLine 38 39 40 ;-------------------------------------------------------------------- 41 ; MenuBorders_RedrawBottomBorderLine 42 ; Parameters 43 ; SS:BP: Ptr to MENU 44 ; Returns: 45 ; Nothing 46 ; Corrupts registers: 47 ; AX, BX, DX, SI, DI 48 ;-------------------------------------------------------------------- 49 ALIGN JUMP_ALIGN 50 MenuBorders_RedrawBottomBorderLine: 51 call MenuBorders_AdjustDisplayContextForDrawingBorders 52 call MenuLocation_GetBottomBordersTopLeftCoordinatesToAX 53 CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX 54 call GetNumberOfMiddleCharactersToDX 55 jmp DrawBottomBorderLine 56 57 58 ;-------------------------------------------------------------------- 59 ; MenuBorders_RedrawTimeoutValue 60 ; Parameters 61 ; SS:BP: Ptr to MENU 62 ; Returns: 63 ; Nothing 64 ; Corrupts registers: 65 ; AX, BX, SI, DI 66 ;-------------------------------------------------------------------- 67 ALIGN JUMP_ALIGN 68 MenuBorders_RedrawTimeoutValue: 69 call MenuBorders_AdjustDisplayContextForDrawingBorders 70 call MenuLocation_GetBottomBordersTopLeftCoordinatesToAX 71 inc ah ; Increment for shadow border 72 CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX 73 jmp DrawTimeoutCounterOverBottomBorderLine 38 74 39 75 … … 174 210 ; DrawSeparationBorderLine 175 211 ; DrawBottomBorderLine 212 ; DrawTimeoutCounterOverBottomBorderLine 176 213 ; DrawBottomShadowLine 177 214 ; DrawTextBorderLine … … 201 238 202 239 ALIGN JUMP_ALIGN 240 DrawTimeoutCounterOverBottomBorderLine: 241 test BYTE [bp+MENU.bFlags], FLG_MENU_TIMEOUT_COUNTDOWN 242 jz SHORT .NoNeedToDrawSinceTimeoutDisabled 243 mov ax, (-1)<<8 ; Decrement row 244 call MenuLocation_MoveCursorByALcolumnsAndAHrows 245 call MenuTime_GetTimeoutSecondsLeftToAX 246 call PrintTimeoutStringWithSecondsInAX 247 jmp SHORT PrintNewlineToEndBorderLine 248 .NoNeedToDrawSinceTimeoutDisabled: 249 ret 250 251 ALIGN JUMP_ALIGN 203 252 DrawBottomShadowLine: 204 CALL_DISPLAY_LIBRARY GetSoftwareCoordinatesToAX 205 inc ax ; Increment column 206 CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX 253 mov ax, 1 ; Increment column 254 call MenuLocation_MoveCursorByALcolumnsAndAHrows 207 255 inc dx ; Increment repeat count... 208 256 inc dx ; ...for both corner characters … … 333 381 334 382 383 ;-------------------------------------------------------------------- 384 ; PrintTimeoutStringWithSecondsInAX 385 ; Parameters 386 ; AX: Seconds to print 387 ; SS:BP: Ptr to MENU 388 ; Returns: 389 ; Nothing 390 ; Corrupts registers: 391 ; AX, SI, DI 392 ;-------------------------------------------------------------------- 393 ALIGN JUMP_ALIGN 394 PrintTimeoutStringWithSecondsInAX: 395 push bp 396 397 xchg di, ax 398 mov bp, sp 399 call .GetTimeoutAttributeToAXfromSecondsInDI 400 mov si, .szSelectionTimeout 401 push ax ; Push attribute 402 push di ; Push seconds 403 CALL_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI 404 pop bp 405 406 ; Draw right border with normal border color 407 mov al, DOUBLE_RIGHT_HORIZONTAL_TO_SINGLE_VERTICAL 408 jmp MenuBorders_PrintSingleBorderCharacterFromAL 409 .szSelectionTimeout: 410 db DOUBLE_BOTTOM_LEFT_CORNER 411 db DOUBLE_LEFT_HORIZONTAL_TO_SINGLE_VERTICAL 412 db "%AAutoselection in %2u s",NULL 413 414 ;-------------------------------------------------------------------- 415 ; .GetTimeoutAttributeToAXfromSecondsInDI 416 ; Parameters 417 ; DI: Seconds to print 418 ; Returns: 419 ; AX: Attribute byte for seconds 420 ; Corrupts registers: 421 ; SI 422 ;-------------------------------------------------------------------- 423 ALIGN JUMP_ALIGN 424 .GetTimeoutAttributeToAXfromSecondsInDI: 425 mov si, ATTRIBUTE_CHARS.cNormalTimeout 426 cmp di, BYTE 3 427 eCMOVB si, ATTRIBUTE_CHARS.cHurryTimeout 428 jmp MenuAttribute_GetToAXfromTypeInSI 429 335 430 336 431 ; Lookup tables for border characters -
trunk/Assembly_Library/Src/Menu/MenuInit.asm
r52 r60 2 2 ; Project name : Assembly Library 3 3 ; Created date : 13.7.2010 4 ; Last update : 12.10.20104 ; Last update : 22.11.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Functions for initializing menu system. … … 60 60 CALL_DISPLAY_LIBRARY SetCursorShapeFromAX 61 61 call MenuEvent_InitializeMenuinit ; User initialization 62 call MenuTime_RestartSelectionTimeout63 62 call MenuInit_RefreshMenuWindow 64 63 jmp MenuLoop_Enter -
trunk/Assembly_Library/Src/Menu/MenuLocation.asm
r41 r60 2 2 ; Project name : Assembly Library 3 3 ; Created date : 14.7.2010 4 ; Last update : 11.8.20104 ; Last update : 25.11.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Functions for calculation menu window dimensions. … … 160 160 sub ax, BYTE MENU_HORIZONTAL_BORDER_LINES + MENU_TEXT_COLUMN_OFFSET 161 161 ret 162 163 164 ;-------------------------------------------------------------------- 165 ; MenuLocation_MoveCursorByALcolumnsAndAHrows 166 ; Parameters 167 ; AL: Number of columns to move 168 ; AH: Numver of rows to move 169 ; SS:BP: Ptr to MENU 170 ; Returns: 171 ; Nothing 172 ; Corrupts registers: 173 ; AX, DI 174 ;-------------------------------------------------------------------- 175 ALIGN JUMP_ALIGN 176 MenuLocation_MoveCursorByALcolumnsAndAHrows: 177 push ax 178 CALL_DISPLAY_LIBRARY GetSoftwareCoordinatesToAX 179 pop di 180 add ax, di 181 CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX 182 ret -
trunk/Assembly_Library/Src/Menu/MenuLoop.asm
r58 r60 2 2 ; Project name : Assembly Library 3 3 ; Created date : 22.7.2010 4 ; Last update : 18.10.20104 ; Last update : 25.11.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Menu loop for waiting keystrokes. … … 70 70 ALIGN JUMP_ALIGN 71 71 ProcessKeystrokeFromAX: 72 call .ProcessMenuSystemKeystroke 72 xchg cx, ax 73 call MenuTime_StopSelectionTimeout 74 xchg ax, cx 75 call .ProcessMenuSystemKeystrokeFromAX 73 76 jc SHORT .Return 74 77 jmp MenuEvent_KeyStrokeInAX … … 78 81 79 82 ;-------------------------------------------------------------------- 80 ; .ProcessMenuSystemKeystroke 83 ; .ProcessMenuSystemKeystrokeFromAX 81 84 ; Parameters 82 85 ; AL: ASCII character … … 92 95 ;-------------------------------------------------------------------- 93 96 ALIGN JUMP_ALIGN 94 .ProcessMenuSystemKeystroke :97 .ProcessMenuSystemKeystrokeFromAX: 95 98 cmp ah, MENU_KEY_ESC 96 99 je SHORT .LeaveMenuWithoutSelectingItem … … 194 197 .MoveHighlightedItemByAX: 195 198 call MenuScrollbars_MoveHighlightedItemByAX 196 call MenuTime_RestartSelectionTimeout197 199 stc 198 200 ret -
trunk/Assembly_Library/Src/Menu/MenuTime.asm
r47 r60 2 2 ; Project name : Assembly Library 3 3 ; Created date : 25.7.2010 4 ; Last update : 4.10.20104 ; Last update : 25.11.2010 5 5 ; Author : Tomi Tilli 6 6 ; Description : Menu timeouts other time related functions. … … 10 10 11 11 ;-------------------------------------------------------------------- 12 ; MenuTime_S etSelectionTimeoutValueFromAX12 ; MenuTime_StartSelectionTimeoutWithTicksInAX 13 13 ; Parameters 14 ; AX: Selection timeout in system timer ticks 15 ; SS:BP: Ptr to MENU 16 ; Returns: 17 ; Nothing 18 ; Corrupts registers: 19 ; Nothing 20 ;-------------------------------------------------------------------- 21 ALIGN JUMP_ALIGN 22 MenuTime_SetSelectionTimeoutValueFromAX: 23 mov [bp+MENUINIT.wTimeoutTicks], ax 24 ret 25 26 27 ;-------------------------------------------------------------------- 28 ; MenuTime_RestartSelectionTimeout 29 ; Parameters 14 ; AX: Timeout ticks 30 15 ; SS:BP: Ptr to MENU 31 16 ; Returns: … … 35 20 ;-------------------------------------------------------------------- 36 21 ALIGN JUMP_ALIGN 37 MenuTime_ RestartSelectionTimeout:22 MenuTime_StartSelectionTimeoutWithTicksInAX: 38 23 push ds 39 24 call PointDSBXtoTimeoutCounter 40 mov ax, [bp+MENUINIT.wTimeoutTicks]41 call TimerTicks_InitializeTimeoutFromAX ; End time to [DS:BX]25 call TimerTicks_InitializeTimeoutFromAX 26 or BYTE [bp+MENU.bFlags], FLG_MENU_TIMEOUT_COUNTDOWN 42 27 pop ds 28 ret 29 30 31 ;-------------------------------------------------------------------- 32 ; MenuTime_StopSelectionTimeout 33 ; Parameters 34 ; SS:BP: Ptr to MENU 35 ; Returns: 36 ; Nothing 37 ; Corrupts registers: 38 ; AX, BX, DX, SI, DI 39 ;-------------------------------------------------------------------- 40 ALIGN JUMP_ALIGN 41 MenuTime_StopSelectionTimeout: 42 test BYTE [bp+MENU.bFlags], FLG_MENU_TIMEOUT_COUNTDOWN 43 jz SHORT .TimeoutAlreadyStopped 44 and BYTE [bp+MENU.bFlags], ~FLG_MENU_TIMEOUT_COUNTDOWN 45 jmp MenuBorders_RedrawBottomBorderLine 46 ALIGN JUMP_ALIGN 47 .TimeoutAlreadyStopped: 43 48 ret 44 49 … … 52 57 ; Cleared if time left 53 58 ; Corrupts registers: 54 ; AX, BX, CX, DX,SI, DI59 ; AX, BX, SI, DI 55 60 ;-------------------------------------------------------------------- 56 61 ALIGN JUMP_ALIGN 57 62 MenuTime_UpdateSelectionTimeout: 63 test BYTE [bp+MENU.bFlags], FLG_MENU_TIMEOUT_COUNTDOWN 64 jz SHORT .ReturnSinceTimeoutDisabled 65 58 66 push ds 59 60 call MenuTime_DrawWithoutUpdating61 jnc SHORT .TimeoutDisabled62 67 call PointDSBXtoTimeoutCounter 63 call TimerTicks_SetCarryIfTimeoutFromDSBX 68 call TimerTicks_GetTimeoutTicksLeftToAXfromDSBX 69 pop ds 70 jnc SHORT .RedrawSinceNoTimeout 71 and BYTE [bp+MENU.bFlags], ~FLG_MENU_TIMEOUT_COUNTDOWN 72 stc 73 ret 64 74 65 75 ALIGN JUMP_ALIGN 66 .TimeoutDisabled: 67 pop ds 68 ret 69 70 ;-------------------------------------------------------------------- 71 ; MenuTime_DrawWithoutUpdating 72 ; Parameters 73 ; SS:BP: Ptr to MENU 74 ; Returns: 75 ; CF: Set if timeout enabled 76 ; Cleared if timeout disabled 77 ; Corrupts registers: 78 ; AX, BX, CX, DX, SI, DI 79 ;-------------------------------------------------------------------- 76 .RedrawSinceNoTimeout: 77 call MenuBorders_RedrawTimeoutValue 78 clc 80 79 ALIGN JUMP_ALIGN 81 MenuTime_DrawWithoutUpdating:82 cmp WORD [bp+MENUINIT.wTimeoutTicks], BYTE 083 je SHORT .ReturnSinceTimeoutDisabled ; Clear CF84 85 push ds86 call GetSecondsLeftUntilTimeoutToAXandCounterToDSBX87 call DrawTimeoutInAXoverMenuBorders88 pop ds89 stc90 ALIGN JUMP_ALIGN, ret91 80 .ReturnSinceTimeoutDisabled: 92 81 ret … … 94 83 95 84 ;-------------------------------------------------------------------- 96 ; GetSecondsLeftUntilTimeoutToAXandCounterToDSBX85 ; MenuTime_GetTimeoutSecondsLeftToAX 97 86 ; Parameters 98 87 ; SS:BP: Ptr to MENU 99 88 ; Returns: 100 89 ; AX: Seconds until timeout 101 ; DS:BX: Ptr to timeout counter102 90 ; Corrupts registers: 103 ; AX , CX, DX91 ; AX 104 92 ;-------------------------------------------------------------------- 105 93 ALIGN JUMP_ALIGN 106 GetSecondsLeftUntilTimeoutToAXandCounterToDSBX: 94 MenuTime_GetTimeoutSecondsLeftToAX: 95 push ds 96 push dx 97 push cx 98 push bx 99 107 100 call PointDSBXtoTimeoutCounter 108 call TimerTicks_Get ElapsedToAXfromDSBX109 neg ax ; Negate since DS:BX points to end time110 MAX_S ax, 0 ; Set to zero if overflow 101 call TimerTicks_GetTimeoutTicksLeftToAXfromDSBX 102 jc SHORT .TimeoutHasOccurred 103 111 104 xchg dx, ax 112 jmp TimerTicks_GetSecondsToAXfromTicksInDX 105 call TimerTicks_GetSecondsToAXfromTicksInDX 106 clc 107 jmp SHORT .PopRegistersAndReturn 108 .TimeoutHasOccurred: 109 xor ax, ax 110 stc 111 .PopRegistersAndReturn: 112 pop bx 113 pop cx 114 pop dx 115 pop ds 116 ret 113 117 114 118 … … 128 132 lea bx, [bp+MENU.wTimeoutCounter] 129 133 ret 130 131 132 ;--------------------------------------------------------------------133 ; DrawTimeoutInAXoverMenuBorders134 ; Parameters135 ; AX: Seconds to draw136 ; SS:BP: Ptr to MENU137 ; Returns:138 ; Nothing139 ; Corrupts registers:140 ; AX, CX, DX, SI, DI141 ;--------------------------------------------------------------------142 ALIGN JUMP_ALIGN143 DrawTimeoutInAXoverMenuBorders:144 xchg cx, ax145 call MenuBorders_AdjustDisplayContextForDrawingBorders146 call MenuLocation_GetBottomBordersTopLeftCoordinatesToAX147 CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX148 ; Fall to .PrintTimeoutStringWithSecondsInDX149 150 ;--------------------------------------------------------------------151 ; .PrintTimeoutStringWithSecondsInDX152 ; Parameters153 ; CX: Seconds to print154 ; SS:BP: Ptr to MENU155 ; Returns:156 ; Nothing157 ; Corrupts registers:158 ; AX, DX, SI, DI159 ;--------------------------------------------------------------------160 ;ALIGN JUMP_ALIGN161 .PrintTimeoutStringWithSecondsInDX:162 push bp163 164 mov bp, sp165 call .GetTimeoutAttributeToAXfromSecondsInCX166 mov si, .szSelectionTimeout167 push ax ; Push attribute168 push cx ; Push seconds169 CALL_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI170 pop bp171 172 ; Draw right border with normal border color173 mov al, DOUBLE_RIGHT_HORIZONTAL_TO_SINGLE_VERTICAL174 jmp MenuBorders_PrintSingleBorderCharacterFromAL175 .szSelectionTimeout:176 db DOUBLE_BOTTOM_LEFT_CORNER177 db DOUBLE_LEFT_HORIZONTAL_TO_SINGLE_VERTICAL178 db "%AAutoselection in %2u s",NULL179 180 ;--------------------------------------------------------------------181 ; .GetTimeoutAttributeToAXfromSecondsInCX182 ; Parameters183 ; CX: Seconds to print184 ; Returns:185 ; AX: Attribute byte for seconds186 ; CX: Seconds to print187 ; Corrupts registers:188 ; SI, DI189 ;--------------------------------------------------------------------190 ALIGN JUMP_ALIGN191 .GetTimeoutAttributeToAXfromSecondsInCX:192 mov si, ATTRIBUTE_CHARS.cNormalTimeout193 cmp cx, BYTE 3194 ja SHORT .GetAttributeToAX195 add si, BYTE ATTRIBUTE_CHARS.cHurryTimeout - ATTRIBUTE_CHARS.cNormalTimeout196 ALIGN JUMP_ALIGN197 .GetAttributeToAX:198 jmp MenuAttribute_GetToAXfromTypeInSI
Note:
See TracChangeset
for help on using the changeset viewer.