source: xtideuniversalbios/trunk/Assembly_Library/Src/Menu/Dialog/DialogString.asm @ 52

Last change on this file since 52 was 52, checked in by aitotat, 13 years ago

Changes to Assembly Library:
Completely rewritten line splitting (slower but no need to modify string).
Some changes to string processing functions.
Saved few bytes from CGA detection.

File size: 3.5 KB
Line 
1; File name     :   DialogString.asm
2; Project name  :   Assembly Library
3; Created date  :   12.8.2010
4; Last update   :   12.10.2010
5; Author        :   Tomi Tilli
6; Description   :   Displays word input dialog.
7
8; Section containing code
9SECTION .text
10
11;--------------------------------------------------------------------
12; DialogString_GetStringWithIoInDSSI
13;   Parameters:
14;       DS:SI:  Ptr to STRING_DIALOG_IO
15;       SS:BP:  Ptr to parent MENU
16;   Returns:
17;       Nothing
18;   Corrupts registers:
19;       AX, BX, CX, DX, SI, DI
20;--------------------------------------------------------------------
21ALIGN JUMP_ALIGN
22DialogString_GetStringWithIoInDSSI:
23    mov     bx, StringEventHandler
24    mov     BYTE [si+STRING_DIALOG_IO.bUserCancellation], TRUE
25    jmp     Dialog_DisplayWithDialogInputInDSSIandHandlerInBX
26
27
28;--------------------------------------------------------------------
29; StringEventHandler
30;   Common parameters for all events:
31;       BX:         Menu event (anything from MENUEVENT struct)
32;       SS:BP:      Ptr to DIALOG
33;   Common return values for all events:
34;       CF:         Set if event processed
35;                   Cleared if event not processed
36;   Corrupts registers:
37;       All
38;--------------------------------------------------------------------
39ALIGN JUMP_ALIGN
40StringEventHandler:
41    jmp     [cs:bx+.rgfnEventHandlers]
42
43
44ALIGN JUMP_ALIGN
45.InitializeMenuinitFromDSSI:
46    xor     ax, ax
47    jmp     Dialog_EventInitializeMenuinitFromDSSIforSingleItemWithHighlightedItemInAX
48
49
50ALIGN JUMP_ALIGN
51.IdleProcessing:
52    xor     cx, cx                      ; Item 0 is used as input line
53    call    MenuText_AdjustDisplayContextForDrawingItemFromCX
54    call    GetStringFromUser
55    call    MenuInit_CloseMenuWindow
56    stc
57    ret
58
59
60ALIGN WORD_ALIGN
61.rgfnEventHandlers:
62istruc MENUEVENT
63    at  MENUEVENT.InitializeMenuinitFromDSSI,   dw  .InitializeMenuinitFromDSSI
64    at  MENUEVENT.ExitMenu,                     dw  Dialog_EventNotHandled
65    at  MENUEVENT.IdleProcessing,               dw  .IdleProcessing
66    at  MENUEVENT.ItemHighlightedFromCX,        dw  Dialog_EventNotHandled
67    at  MENUEVENT.ItemSelectedFromCX,           dw  Dialog_EventNotHandled
68    at  MENUEVENT.KeyStrokeInAX,                dw  Dialog_EventNotHandled
69    at  MENUEVENT.RefreshTitle,                 dw  Dialog_EventRefreshTitle
70    at  MENUEVENT.RefreshInformation,           dw  Dialog_EventRefreshInformation
71    at  MENUEVENT.RefreshItemFromCX,            dw  Dialog_EventNotHandled
72iend
73
74
75;--------------------------------------------------------------------
76; GetStringFromUser
77;   Parameters
78;       SS:BP:  Ptr to DIALOG
79;   Returns:
80;       Nothing (User input stored to STRING_DIALOG_IO)
81;   Corrupts registers:
82;       AX, CX, DX, SI, DI
83;--------------------------------------------------------------------
84ALIGN JUMP_ALIGN
85GetStringFromUser:
86    lds     si, [bp+DIALOG.fpDialogIO]
87    mov     cx, [si+STRING_DIALOG_IO.wBufferSize]
88    les     di, [si+STRING_DIALOG_IO.fpReturnBuffer]
89    call    .GetCharacterFilterFunctionToDX
90
91    call    Keyboard_ReadUserInputtedStringToESDIWhilePrinting
92    jz      SHORT .UserCancellation
93
94    mov     BYTE [si+STRING_DIALOG_IO.bUserCancellation], FALSE
95    mov     [si+STRING_DIALOG_IO.wReturnLength], cx
96.UserCancellation:
97    ret
98
99;--------------------------------------------------------------------
100; .GetCharacterFilterFunctionToDX
101;   Parameters
102;       DS:SI:  Ptr to STRING_DIALOG_IO
103;       SS:BP:  Ptr to DIALOG
104;   Returns:
105;       CS:DX:  Ptr to character filter function
106;   Corrupts registers:
107;       Nothing
108;--------------------------------------------------------------------
109ALIGN JUMP_ALIGN
110.GetCharacterFilterFunctionToDX:
111    mov     dx, [si+STRING_DIALOG_IO.fnCharFilter]
112    test    dx, dx
113    jnz     SHORT .ReturnFilterFunctionInDX
114    mov     dx, Char_CharIsValid
115ALIGN JUMP_ALIGN, ret
116.ReturnFilterFunctionInDX:
117    ret
Note: See TracBrowser for help on using the repository browser.