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

Last change on this file since 376 was 376, checked in by gregli@…, 12 years ago

WIDE checkin... Added copyright and license information to sorce files, as per the GPL instructions for usage.

File size: 4.2 KB
Line 
1; File name     :   DialogDrive.asm
2; Project name  :   Assembly Library
3; Created date  :   22.10.2010
4; Last update   :   18.11.2010
5; Author        :   Tomi Tilli
6; Description   :   Displays drive dialog.
7
8;
9; XTIDE Universal BIOS and Associated Tools 
10; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2012 by XTIDE Universal BIOS Team.
11;
12; This program is free software; you can redistribute it and/or modify
13; it under the terms of the GNU General Public License as published by
14; the Free Software Foundation; either version 2 of the License, or
15; (at your option) any later version.
16; 
17; This program is distributed in the hope that it will be useful,
18; but WITHOUT ANY WARRANTY; without even the implied warranty of
19; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20; GNU General Public License for more details.     
21; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
22;
23
24; Section containing code
25SECTION .text
26
27;--------------------------------------------------------------------
28; DialogDrive_GetDriveWithIoInDSSI
29;   Parameters:
30;       DS:SI:  Ptr to DRIVE_DIALOG_IO
31;       SS:BP:  Ptr to parent MENU
32;   Returns:
33;       Nothing
34;   Corrupts registers:
35;       AX, BX, CX, DX, SI, DI
36;--------------------------------------------------------------------
37ALIGN JUMP_ALIGN
38DialogDrive_GetDriveWithIoInDSSI:
39    mov     bx, DriveEventHandler
40    mov     BYTE [si+DRIVE_DIALOG_IO.bUserCancellation], TRUE
41    jmp     Dialog_DisplayWithDialogInputInDSSIandHandlerInBX
42
43
44;--------------------------------------------------------------------
45; DriveEventHandler
46;   Common parameters for all events:
47;       BX:         Menu event (anything from MENUEVENT struct)
48;       SS:BP:      Ptr to DIALOG
49;   Common return values for all events:
50;       CF:         Set if event processed
51;                   Cleared if event not processed
52;   Corrupts registers:
53;       All
54;--------------------------------------------------------------------
55ALIGN JUMP_ALIGN
56DriveEventHandler:
57    jmp     [cs:bx+.rgfnEventHandlers]
58
59
60ALIGN JUMP_ALIGN
61.InitializeMenuinitFromDSSI:
62    xor     ax, ax
63    call    Dialog_EventInitializeMenuinitFromDSSIforSingleItemWithHighlightedItemInAX
64    call    Drive_GetFlagsForAvailableDrivesToDXAX
65    mov     [bp+MENU.dwUserData], ax
66    mov     [bp+MENU.dwUserData+2], dx
67
68    call    Bit_GetSetCountToCXfromDXAX
69    mov     [bp+MENUINIT.wItems], cx
70
71    dec     cx          ; Items initialized to one. Ignore it.
72    add     cl, [bp+MENUINIT.bHeight]
73    CALL_DISPLAY_LIBRARY GetColumnsToALandRowsToAH
74    MIN_U   cl, ah
75    mov     [bp+MENUINIT.bHeight], cl
76    ret
77
78
79ALIGN JUMP_ALIGN
80.ItemSelectedFromCX:
81    call    ConvertDriveLetterToBLfromItemIndexInCX
82    lds     si, [bp+DIALOG.fpDialogIO]
83    mov     BYTE [si+DRIVE_DIALOG_IO.bUserCancellation], FALSE
84    mov     [si+DRIVE_DIALOG_IO.cReturnDriveLetter], bl
85    sub     bl, 'A'
86    mov     [si+DRIVE_DIALOG_IO.bReturnDriveNumber], bl
87    jmp     MenuInit_CloseMenuWindow
88
89
90ALIGN JUMP_ALIGN
91.RefreshItemFromCX:
92    push    bp
93
94    call    ConvertDriveLetterToBLfromItemIndexInCX
95    mov     bp, sp
96    push    bx
97    mov     si, g_szDriveFormat
98    CALL_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI
99
100    pop     bp
101    stc
102    ret
103
104
105.rgfnEventHandlers:
106istruc MENUEVENT
107    at  MENUEVENT.InitializeMenuinitFromDSSI,   dw  .InitializeMenuinitFromDSSI
108    at  MENUEVENT.ExitMenu,                     dw  Dialog_EventExitMenu
109    at  MENUEVENT.IdleProcessing,               dw  Dialog_EventNotHandled
110    at  MENUEVENT.ItemHighlightedFromCX,        dw  Dialog_EventNotHandled
111    at  MENUEVENT.ItemSelectedFromCX,           dw  .ItemSelectedFromCX
112    at  MENUEVENT.KeyStrokeInAX,                dw  Dialog_EventNotHandled
113    at  MENUEVENT.RefreshTitle,                 dw  Dialog_EventRefreshTitle
114    at  MENUEVENT.RefreshInformation,           dw  Dialog_EventRefreshInformation
115    at  MENUEVENT.RefreshItemFromCX,            dw  .RefreshItemFromCX
116iend
117
118
119;--------------------------------------------------------------------
120; ConvertDriveLetterToBLfromItemIndexInCX
121;   Parameters:
122;       CX:     Item index
123;       SS:BP:  Ptr to DIALOG
124;   Returns:
125;       BL:     Drive letter
126;   Corrupts registers:
127;       AX, CX, DX
128;--------------------------------------------------------------------
129ALIGN JUMP_ALIGN
130ConvertDriveLetterToBLfromItemIndexInCX:
131    inc     cx          ; Index to count
132    mov     bl, 'A'-1
133    mov     ax, [bp+MENU.dwUserData]
134    mov     dx, [bp+MENU.dwUserData+2]
135ALIGN JUMP_ALIGN
136.CheckNextBit:
137    inc     bx          ; Increment drive letter
138    shr     dx, 1
139    rcr     ax, 1
140    jnc     SHORT .CheckNextBit
141    loop    .CheckNextBit
142    ret
Note: See TracBrowser for help on using the repository browser.