source: xtideuniversalbios/trunk/Assembly_Library/Src/Menu/Dialog/DialogDrive.asm @ 54

Last change on this file since 54 was 54, checked in by aitotat, 14 years ago

Changes to Assembly Library:
Drive selection moved to own dialog from File Dialog.
File Dialog now displays loading text for better usability in slow systems.
Moved some functions from Memory.asm to new Registers.asm.

File size: 3.5 KB
Line 
1; File name     :   DialogDrive.asm
2; Project name  :   Assembly Library
3; Created date  :   22.10.2010
4; Last update   :   23.10.2010
5; Author        :   Tomi Tilli
6; Description   :   Displays drive dialog.
7
8
9; Section containing code
10SECTION .text
11
12;--------------------------------------------------------------------
13; DialogDrive_GetDriveWithIoInDSSI
14;   Parameters:
15;       DS:SI:  Ptr to DRIVE_DIALOG_IO
16;       SS:BP:  Ptr to parent MENU
17;   Returns:
18;       Nothing
19;   Corrupts registers:
20;       AX, BX, CX, DX, SI, DI
21;--------------------------------------------------------------------
22ALIGN JUMP_ALIGN
23DialogDrive_GetDriveWithIoInDSSI:
24    mov     bx, DriveEventHandler
25    mov     BYTE [si+DRIVE_DIALOG_IO.bUserCancellation], TRUE
26    jmp     Dialog_DisplayWithDialogInputInDSSIandHandlerInBX
27
28
29;--------------------------------------------------------------------
30; DriveEventHandler
31;   Common parameters for all events:
32;       BX:         Menu event (anything from MENUEVENT struct)
33;       SS:BP:      Ptr to DIALOG
34;   Common return values for all events:
35;       CF:         Set if event processed
36;                   Cleared if event not processed
37;   Corrupts registers:
38;       All
39;--------------------------------------------------------------------
40ALIGN JUMP_ALIGN
41DriveEventHandler:
42    jmp     [cs:bx+.rgfnEventHandlers]
43
44
45ALIGN JUMP_ALIGN
46.InitializeMenuinitFromDSSI:
47    xor     ax, ax
48    call    Dialog_EventInitializeMenuinitFromDSSIforSingleItemWithHighlightedItemInAX
49    call    Drive_GetFlagsForAvailableDrivesToDXAX
50    mov     [bp+MENU.dwUserData], ax
51    mov     [bp+MENU.dwUserData+2], dx
52
53    call    Bit_GetSetCountToCXfromDXAX
54    mov     [bp+MENUINIT.wItems], cx
55
56    dec     cx          ; Items initialized to one. Ignore it.
57    add     cl, [bp+MENUINIT.bHeight]
58    CALL_DISPLAY_LIBRARY GetColumnsToALandRowsToAH
59    MIN_U   cl, ah
60    mov     [bp+MENUINIT.bHeight], cl
61    ret
62
63
64ALIGN JUMP_ALIGN
65.ItemSelectedFromCX:
66    call    ConvertDriveLetterToBLfromItemIndexInCX
67    lds     si, [bp+DIALOG.fpDialogIO]
68    mov     BYTE [si+DRIVE_DIALOG_IO.bUserCancellation], FALSE
69    mov     [si+DRIVE_DIALOG_IO.cReturnDriveLetter], bl
70    sub     bl, 'A'
71    mov     [si+DRIVE_DIALOG_IO.bReturnDriveNumber], bl
72    jmp     MenuInit_CloseMenuWindow
73
74
75ALIGN JUMP_ALIGN
76.RefreshItemFromCX:
77    push    bp
78
79    call    ConvertDriveLetterToBLfromItemIndexInCX
80    mov     bp, sp
81    push    bx
82    mov     si, g_szDriveFormat
83    CALL_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI
84
85    pop     bp
86    stc
87    ret
88
89
90.rgfnEventHandlers:
91istruc MENUEVENT
92    at  MENUEVENT.InitializeMenuinitFromDSSI,   dw  .InitializeMenuinitFromDSSI
93    at  MENUEVENT.ExitMenu,                     dw  Dialog_EventNotHandled
94    at  MENUEVENT.IdleProcessing,               dw  Dialog_EventNotHandled
95    at  MENUEVENT.ItemHighlightedFromCX,        dw  Dialog_EventNotHandled
96    at  MENUEVENT.ItemSelectedFromCX,           dw  .ItemSelectedFromCX
97    at  MENUEVENT.KeyStrokeInAX,                dw  Dialog_EventNotHandled
98    at  MENUEVENT.RefreshTitle,                 dw  Dialog_EventRefreshTitle
99    at  MENUEVENT.RefreshInformation,           dw  Dialog_EventRefreshInformation
100    at  MENUEVENT.RefreshItemFromCX,            dw  .RefreshItemFromCX
101iend
102
103
104;--------------------------------------------------------------------
105; ConvertDriveLetterToBLfromItemIndexInCX
106;   Parameters:
107;       CX:     Item index
108;       SS:BP:  Ptr to DIALOG
109;   Returns:
110;       BL:     Drive letter
111;   Corrupts registers:
112;       AX, CX, DX
113;--------------------------------------------------------------------
114ALIGN JUMP_ALIGN
115ConvertDriveLetterToBLfromItemIndexInCX:
116    inc     cx          ; Index to count
117    mov     bl, 'A'-1
118    mov     ax, [bp+MENU.dwUserData]
119    mov     dx, [bp+MENU.dwUserData+2]
120ALIGN JUMP_ALIGN
121.CheckNextBit:
122    inc     bx          ; Increment drive letter
123    shr     dx, 1
124    rcr     ax, 1
125    jnc     SHORT .CheckNextBit
126    loop    .CheckNextBit
127    ret
Note: See TracBrowser for help on using the repository browser.