source: xtideuniversalbios/trunk/Assembly_Library/Src/Menu/MenuLocation.asm@ 372

Last change on this file since 372 was 369, checked in by gregli@…, 13 years ago

Removed align directives for initalization code and added define for align in boot-time calls to the assembly library (defaulting to 1), resulting in a significant savings for the AT and 386 builds. Fixed a bug with switch command line handling in the serial server. Put in CR characters in licesnse.txt, so that it properly displays on Windows. In the configurator, added default values for user supplied CHS and LBA values, defaulting to values within range when those features are enabled. Updated the copyright message in the configurator as the literal word Copyright is important.

File size: 3.8 KB
RevLine 
[41]1; Project name : Assembly Library
2; Description : Functions for calculation menu window dimensions.
3
4; Section containing code
5SECTION .text
6
7;--------------------------------------------------------------------
8; MenuLocation_GetTextCoordinatesToAXforItemInAX
9; Parameters
10; AX: Item index
11; SS:BP: Ptr to MENU
12; Returns:
13; AL: Column (X)
14; AH: Row (Y)
15; Corrupts registers:
16; Nothing
17;--------------------------------------------------------------------
[369]18ALIGN MENU_JUMP_ALIGN
[41]19MenuLocation_GetTextCoordinatesToAXforItemInAX:
20 sub ax, [bp+MENU.wFirstVisibleItem] ; Item to line
21 xchg al, ah ; Line to AH, clear AL
22 add ax, (MENU_TEXT_ROW_OFFSET<<8) | MENU_TEXT_COLUMN_OFFSET
[181]23 SKIP2B f ; cmp ax, <next instruction>
24 ; Fall to MenuLocation_GetItemBordersTopLeftCoordinatesToAX
[41]25
26;--------------------------------------------------------------------
[181]27; MenuLocation_GetItemBordersTopLeftCoordinatesToAX
28; MenuLocation_GetTitleTextTopLeftCoordinatesToAX
[41]29; MenuLocation_GetTitleBordersTopLeftCoordinatesToAX
[181]30; MenuLocation_GetInformationTextTopLeftCoordinatesToAX
[41]31; MenuLocation_GetBottomBordersTopLeftCoordinatesToAX
32; Parameters
33; SS:BP: Ptr to MENU
34; Returns:
35; AL: Column (X)
36; AH: Row (Y)
37; Corrupts registers:
38; Nothing
39;--------------------------------------------------------------------
[181]40MenuLocation_GetItemBordersTopLeftCoordinatesToAX:
41 xor ax, ax
42 jmp SHORT AddItemBordersTopLeftCoordinatesToAX
43
[369]44ALIGN MENU_JUMP_ALIGN
[181]45MenuLocation_GetTitleTextTopLeftCoordinatesToAX:
46 mov ax, (MENU_TEXT_ROW_OFFSET<<8) | MENU_TEXT_COLUMN_OFFSET
47 SKIP2B f ; cmp ax, <next instruction>
[41]48MenuLocation_GetTitleBordersTopLeftCoordinatesToAX:
49 xor ax, ax
50 jmp SHORT MenuLocation_AddTitleBordersTopLeftCoordinatesToAX
51
[369]52ALIGN MENU_JUMP_ALIGN
[181]53MenuLocation_GetInformationTextTopLeftCoordinatesToAX:
54 mov ax, (MENU_TEXT_ROW_OFFSET<<8) | MENU_TEXT_COLUMN_OFFSET
55 jmp SHORT AddInformationBordersTopLeftCoordinatesToAX
[41]56
[369]57ALIGN MENU_JUMP_ALIGN
[41]58MenuLocation_GetBottomBordersTopLeftCoordinatesToAX:
59 xor ax, ax
[104]60 ; Fall to .AddBottomBordersTopLeftCoordinatesToAX
[41]61
62;--------------------------------------------------------------------
[104]63; .AddBottomBordersTopLeftCoordinatesToAX
[41]64; AddInformationBordersTopLeftCoordinatesToAX
65; AddItemBordersTopLeftCoordinatesToAX
66; MenuLocation_AddTitleBordersTopLeftCoordinatesToAX
67; Parameters
68; AX: Zero of offset
69; SS:BP: Ptr to MENU
70; Returns:
71; AL: Column (X)
72; AH: Row (Y)
73; Corrupts registers:
74; Nothing
75;--------------------------------------------------------------------
[104]76.AddBottomBordersTopLeftCoordinatesToAX:
[41]77 stc ; Compensate for Information top border
78 adc ah, [bp+MENUINIT.bInfoLines]
[369]79ALIGN MENU_JUMP_ALIGN
[41]80AddInformationBordersTopLeftCoordinatesToAX:
81 push cx
82 call MenuScrollbars_GetMaxVisibleItemsOnPageToCX
83 inc cx ; Compensate for Items top border
84 add ah, cl
85 pop cx
[369]86ALIGN MENU_JUMP_ALIGN
[41]87AddItemBordersTopLeftCoordinatesToAX:
88 stc ; Compensate for Title top border
89 adc ah, [bp+MENUINIT.bTitleLines]
[369]90ALIGN MENU_JUMP_ALIGN
[41]91MenuLocation_AddTitleBordersTopLeftCoordinatesToAX:
92 push di
93 push ax
94 CALL_DISPLAY_LIBRARY GetColumnsToALandRowsToAH
95 sub al, [bp+MENUINIT.bWidth]
96 sub ah, [bp+MENUINIT.bHeight]
97 shr al, 1
98 shr ah, 1
99 pop di ; Old AX to DI
100 add ax, di ; Add old AX to menu top left coordinates
101 pop di
102 ret
103
104
105;--------------------------------------------------------------------
106; MenuLocation_GetMaxTextLineLengthToAX
107; Parameters
108; SS:BP: Ptr to MENU
109; Returns:
110; AX: Maximum text line length in characters
111; Corrupts registers:
112; Nothing
113;--------------------------------------------------------------------
[369]114ALIGN MENU_JUMP_ALIGN
[41]115MenuLocation_GetMaxTextLineLengthToAX:
[293]116 eMOVZX ax, [bp+MENUINIT.bWidth]
[41]117 sub ax, BYTE MENU_HORIZONTAL_BORDER_LINES + MENU_TEXT_COLUMN_OFFSET
118 ret
Note: See TracBrowser for help on using the repository browser.