Changeset 181 in xtideuniversalbios for trunk/Assembly_Library/Src/Menu
- Timestamp:
- Nov 13, 2011, 3:38:40 PM (13 years ago)
- google:author:
- krille_n_@hotmail.com
- Location:
- trunk/Assembly_Library/Src/Menu
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Assembly_Library/Src/Menu/CharOutLineSplitter.asm
r104 r181 104 104 ;-------------------------------------------------------------------- 105 105 .GetOffsetToPartialWordToSIandSizeToCX: 106 xor cx, cx106 mov cx, di 107 107 mov si, di 108 108 ALIGN JUMP_ALIGN … … 111 111 dec si 112 112 cmp BYTE [es:si], ' ' 113 je SHORT .PartialWordFound 114 inc cx 115 jmp SHORT .ScanNextCharacter 116 ALIGN JUMP_ALIGN 117 .PartialWordFound: 113 jne SHORT .ScanNextCharacter 118 114 inc si 119 115 inc si ; SI now points one past space 120 s hl cx, 1 ; Characters to bytes116 sub cx, si 121 117 ; Fall to .ChangeLine 122 118 -
trunk/Assembly_Library/Src/Menu/Dialog/Dialog.asm
r162 r181 127 127 ret 128 128 129 129 130 ;-------------------------------------------------------------------- 130 131 ; .GetWidthBasedOnParentMenuToAL … … 141 142 mov al, [ss:bx+MENUINIT.bWidth] 142 143 sub al, DIALOG_DELTA_WIDTH_FROM_PARENT 143 MIN_U al, DIALOG_MAX_WIDTH 144 ret 144 cmp al, DIALOG_MAX_WIDTH 145 jb .ALlessThanDIALOG_MAX_WIDTH 146 mov al, DIALOG_MAX_WIDTH 147 ALIGN JUMP_ALIGN, ret 148 .ALlessThanDIALOG_MAX_WIDTH: 149 ret 150 145 151 146 152 ;-------------------------------------------------------------------- … … 161 167 add ah, [bp+MENUINIT.bInfoLines] 162 168 add ah, BYTE MENU_VERTICAL_BORDER_LINES 163 MIN_U ah, bh 164 MIN_U ah, DIALOG_MAX_HEIGHT 169 cmp ah, bh 170 jb .AHlessThanBH 171 xchg bx, ax 172 ALIGN JUMP_ALIGN 173 .AHlessThanBH: 174 cmp ah, DIALOG_MAX_HEIGHT 175 jb .AHlessThanDIALOG_MAX_HEIGHT 176 mov ah, DIALOG_MAX_HEIGHT 177 ALIGN JUMP_ALIGN, ret 178 .AHlessThanDIALOG_MAX_HEIGHT: 165 179 ret 166 180 -
trunk/Assembly_Library/Src/Menu/Dialog/DialogFile.asm
r170 r181 265 265 .FilterCurrentDirectory: 266 266 cmp WORD [si+DTA.szFile], CURRENTDIR_CHARACTERS 267 je SHORT . ReturnWithFiltering267 je SHORT .DoFilter 268 268 ret 269 269 … … 274 274 cmp WORD [si+DTA.szFile], UPDIR_CHARACTERS 275 275 jne SHORT .ReturnWithoutFiltering 276 . ReturnWithFiltering:276 .DoFilter: 277 277 add sp, BYTE 2 ; Remove return address from stack 278 278 ALIGN JUMP_ALIGN, ret … … 375 375 SortDirectoryContentsStringFromESDIwithCountInCX: 376 376 call Registers_CopyESDItoDSSI 377 call .AddDirectoryContentsStringLengthToDI 378 mov bx, .FileStringComparator 379 xchg dx, cx 380 mov cx, FILE_STRING_LENGTH 381 jmp Sort_ItemsFromDSSIwithCountInDXsizeInCXandComparatorInBX 382 383 ALIGN JUMP_ALIGN 384 .AddDirectoryContentsStringLengthToDI: 377 378 ; Add directory contents string length to DI 385 379 mov ax, FILE_STRING_LENGTH 380 push ax 386 381 mul cx 387 382 add di, ax 388 ret 383 384 mov dx, cx 385 pop cx 386 mov bx, .FileStringComparator 387 jmp Sort_ItemsFromDSSIwithCountInDXsizeInCXandComparatorInBX 389 388 390 389 ;-------------------------------------------------------------------- … … 395 394 ; ES:DI: Ptr to second item to compare 396 395 ; Returns: 397 ; FLAGS: Signed compari tion between first and second item396 ; FLAGS: Signed comparison between first and second item 398 397 ; Corrupts registers: 399 398 ; Nothing -
trunk/Assembly_Library/Src/Menu/Dialog/DialogProgress.asm
r73 r181 1 ; File name : DialogProgress.asm2 1 ; Project name : Assembly Library 3 ; Created date : 15.8.20104 ; Last update : 10.12.20105 ; Author : Tomi Tilli6 2 ; Description : Displays progress bar dialog and starts progress task. 7 3 … … 41 37 lds si, [bp+DIALOG.fpDialogIO] 42 38 mov bx, [si+PROGRESS_DIALOG_IO.wMaxProgressValue] 43 MIN_U ax, bx 44 cmp ax, bx ; Make sure that last progress character is shown 45 je SHORT .UpdateProgressBar 46 39 cmp ax, bx 40 jb SHORT .AXlessThanBX 41 mov ax, bx 42 jmp SHORT .UpdateProgressBar 43 ALIGN JUMP_ALIGN 44 .AXlessThanBX: 47 45 mov bx, ax 48 46 sub bx, [si+PROGRESS_DIALOG_IO.wCurrentProgressValue] … … 172 170 ALIGN JUMP_ALIGN 173 171 DrawProgressBarFromDialogIoInDSSI: 174 call .GetFullCharsToCXandEmptyCharsToDXwithDialogIoInDSSI 175 176 mov al, PROGRESS_COMPLETE_CHARACTER 177 call .RepeatProgressCharacterCXtimesFromAL 178 179 mov cx, dx 180 mov al, PROGRESS_INCOMPLETE_CHARACTER 181 jmp SHORT .RepeatProgressCharacterCXtimesFromAL 182 183 ;-------------------------------------------------------------------- 184 ; .GetFullCharsToCXandEmptyCharsToDXwithDialogIoInDSSI 185 ; Parameters: 186 ; DS:SI: Ptr to PROGRESS_DIALOG_IO 187 ; SS:BP: Ptr to DIALOG 188 ; Returns: 189 ; CX: Number of full progress bar characters 190 ; DX: Number of empty progress bar characters 191 ; Corrupts: 192 ; AX, BX 193 ;-------------------------------------------------------------------- 194 ALIGN JUMP_ALIGN 195 .GetFullCharsToCXandEmptyCharsToDXwithDialogIoInDSSI: 172 ; Get full chars to CX and empty chars to DX 196 173 call MenuLocation_GetMaxTextLineLengthToAX 197 174 mov cx, ax … … 200 177 div bx 201 178 xchg cx, ax ; AX = Text line length, CX = Number of full chars 202 203 179 sub ax, cx 204 180 xchg dx, ax ; DX = Number of empty chars 205 ret 181 182 mov al, PROGRESS_COMPLETE_CHARACTER 183 call .RepeatProgressCharacterCXtimesFromAL 184 185 mov cx, dx 186 mov al, PROGRESS_INCOMPLETE_CHARACTER 187 ; Fall to .RepeatProgressCharacterCXtimesFromAL 206 188 207 189 ;-------------------------------------------------------------------- … … 239 221 ret 240 222 241 223 242 224 ;-------------------------------------------------------------------- 243 225 ; DrawTimeElapsedFromDX … … 286 268 287 269 sub cx, [si+PROGRESS_DIALOG_IO.wMinProgressValue] 288 j cxz.PreventDivisionByZero270 jz SHORT .PreventDivisionByZero 289 271 div cx ; AX = Estimated ticks left 290 272 xchg dx, ax 291 jmp SHORT FormatTicksFromDX273 SKIP2B f ; cmp ax, <next instruction> 292 274 .PreventDivisionByZero: 293 275 xor dx, dx -
trunk/Assembly_Library/Src/Menu/Dialog/ItemLineSplitter.asm
r133 r181 115 115 ALIGN JUMP_ALIGN 116 116 .CheckLineLength: 117 cmp cx, [bp+ITEM_LINE_SPLITTER.wMaxTextLineLength] 118 ja SHORT .ChangeToNextLine 119 clc 120 ret 117 cmp [bp+ITEM_LINE_SPLITTER.wMaxTextLineLength], cx 118 jb SHORT .ChangeToNextLine 119 ret ; With CF cleared 121 120 122 121 ALIGN JUMP_ALIGN -
trunk/Assembly_Library/Src/Menu/Menu.asm
r177 r181 31 31 32 32 33 %define DisplayWithHandlerInBXandUserDataInDXAXMenuInit_DisplayMenuWithHandlerInBXandUserDataInDXAX34 ;%define CloseMenuInit_CloseMenuWindow ; Special case in CALL_MENU_LIBRARY35 %define RefreshWindowMenuInit_RefreshMenuWindow33 %define DisplayWithHandlerInBXandUserDataInDXAX MenuInit_DisplayMenuWithHandlerInBXandUserDataInDXAX 34 ;%define Close MenuInit_CloseMenuWindow ; Special case in CALL_MENU_LIBRARY 35 %define RefreshWindow MenuInit_RefreshMenuWindow 36 36 37 ;%define SetUserDataFromDSSIMenuInit_SetUserDataFromDSSI ; Special case in CALL_MENU_LIBRARY38 ;%define GetUserDataToDSSIMenuInit_GetUserDataToDSSI ; Special case in CALL_MENU_LIBRARY37 ;%define SetUserDataFromDSSI MenuInit_SetUserDataFromDSSI ; Special case in CALL_MENU_LIBRARY 38 ;%define GetUserDataToDSSI MenuInit_GetUserDataToDSSI ; Special case in CALL_MENU_LIBRARY 39 39 40 ;%define SetTitleHeightFromALMenuInit_SetTitleHeightFromAL ; Special case in CALL_MENU_LIBRARY41 %define ClearTitleAreaMenuText_ClearTitleArea42 %define RefreshTitleMenuText_RefreshTitle40 ;%define SetTitleHeightFromAL MenuInit_SetTitleHeightFromAL ; Special case in CALL_MENU_LIBRARY 41 %define ClearTitleArea MenuText_ClearTitleArea 42 %define RefreshTitle MenuText_RefreshTitle 43 43 44 %define HighlightItemFromAXMenuInit_HighlightItemFromAX45 ;%define SetTotalItemsFromAXMenuInit_SetTotalItemsFromAX ; Special case in CALL_MENU_LIBRARY46 %define RefreshItemFromAXMenuText_RefreshItemFromAX44 %define HighlightItemFromAX MenuInit_HighlightItemFromAX 45 ;%define SetTotalItemsFromAX MenuInit_SetTotalItemsFromAX ; Special case in CALL_MENU_LIBRARY 46 %define RefreshItemFromAX MenuText_RefreshItemFromAX 47 47 48 ;%define SetInformationHeightFromAL MenuInit_SetInformationHeightFromAL ; Special case in CALL_MENU_LIBRARY49 %define ClearInformationArea MenuText_ClearInformationArea50 %define RefreshInformation MenuText_RefreshInformation48 ;%define SetInformationHeightFromAL MenuInit_SetInformationHeightFromAL ; Special case in CALL_MENU_LIBRARY 49 %define ClearInformationArea MenuText_ClearInformationArea 50 %define RefreshInformation MenuText_RefreshInformation 51 51 52 %define StartSelectionTimeoutWithTicksInAX MenuTime_StartSelectionTimeoutWithTicksInAX52 %define StartSelectionTimeoutWithTicksInAX MenuTime_StartSelectionTimeoutWithTicksInAX 53 53 54 54 %ifdef INCLUDE_MENU_DIALOGS 55 %define StartProgressTaskWithIoInDSSIandParamInDXAX DialogProgress_StartProgressTaskWithIoInDSSIandParamInDXAX56 %define SetProgressValueFromAX DialogProgress_SetProgressValueFromAX55 %define StartProgressTaskWithIoInDSSIandParamInDXAX DialogProgress_StartProgressTaskWithIoInDSSIandParamInDXAX 56 %define SetProgressValueFromAX DialogProgress_SetProgressValueFromAX 57 57 58 %define DisplayMessageWithInputInDSSI DialogMessage_DisplayMessageWithInputInDSSI59 %define GetSelectionToAXwithInputInDSSI DialogSelection_GetSelectionToAXwithInputInDSSI60 %define GetWordWithIoInDSSI DialogWord_GetWordWithIoInDSSI61 %define GetStringWithIoInDSSI DialogString_GetStringWithIoInDSSI62 %define GetFileNameWithIoInDSSI DialogFile_GetFileNameWithIoInDSSI63 %define GetDriveWithIoInDSSI DialogDrive_GetDriveWithIoInDSSI58 %define DisplayMessageWithInputInDSSI DialogMessage_DisplayMessageWithInputInDSSI 59 %define GetSelectionToAXwithInputInDSSI DialogSelection_GetSelectionToAXwithInputInDSSI 60 %define GetWordWithIoInDSSI DialogWord_GetWordWithIoInDSSI 61 %define GetStringWithIoInDSSI DialogString_GetStringWithIoInDSSI 62 %define GetFileNameWithIoInDSSI DialogFile_GetFileNameWithIoInDSSI 63 %define GetDriveWithIoInDSSI DialogDrive_GetDriveWithIoInDSSI 64 64 %endif 65 65 -
trunk/Assembly_Library/Src/Menu/MenuLocation.asm
r104 r181 4 4 ; Section containing code 5 5 SECTION .text 6 7 ;--------------------------------------------------------------------8 ; MenuLocation_GetTitleTextTopLeftCoordinatesToAX9 ; MenuLocation_GetInformationTextTopLeftCoordinatesToAX10 ; Parameters11 ; SS:BP: Ptr to MENU12 ; Returns:13 ; AL: Column (X)14 ; AH: Row (Y)15 ; Corrupts registers:16 ; Nothing17 ;--------------------------------------------------------------------18 ALIGN JUMP_ALIGN19 MenuLocation_GetTitleTextTopLeftCoordinatesToAX:20 mov ax, (MENU_TEXT_ROW_OFFSET<<8) | MENU_TEXT_COLUMN_OFFSET21 jmp SHORT MenuLocation_AddTitleBordersTopLeftCoordinatesToAX22 23 ALIGN JUMP_ALIGN24 MenuLocation_GetInformationTextTopLeftCoordinatesToAX:25 mov ax, (MENU_TEXT_ROW_OFFSET<<8) | MENU_TEXT_COLUMN_OFFSET26 jmp SHORT AddInformationBordersTopLeftCoordinatesToAX27 28 6 29 7 ;-------------------------------------------------------------------- … … 43 21 xchg al, ah ; Line to AH, clear AL 44 22 add ax, (MENU_TEXT_ROW_OFFSET<<8) | MENU_TEXT_COLUMN_OFFSET 45 jmp SHORT AddItemBordersTopLeftCoordinatesToAX46 23 SKIP2B f ; cmp ax, <next instruction> 24 ; Fall to MenuLocation_GetItemBordersTopLeftCoordinatesToAX 47 25 48 26 ;-------------------------------------------------------------------- 27 ; MenuLocation_GetItemBordersTopLeftCoordinatesToAX 28 ; MenuLocation_GetTitleTextTopLeftCoordinatesToAX 49 29 ; MenuLocation_GetTitleBordersTopLeftCoordinatesToAX 50 ; MenuLocation_GetI temBordersTopLeftCoordinatesToAX30 ; MenuLocation_GetInformationTextTopLeftCoordinatesToAX 51 31 ; MenuLocation_GetBottomBordersTopLeftCoordinatesToAX 52 32 ; Parameters … … 58 38 ; Nothing 59 39 ;-------------------------------------------------------------------- 40 MenuLocation_GetItemBordersTopLeftCoordinatesToAX: 41 xor ax, ax 42 jmp SHORT AddItemBordersTopLeftCoordinatesToAX 43 60 44 ALIGN JUMP_ALIGN 45 MenuLocation_GetTitleTextTopLeftCoordinatesToAX: 46 mov ax, (MENU_TEXT_ROW_OFFSET<<8) | MENU_TEXT_COLUMN_OFFSET 47 SKIP2B f ; cmp ax, <next instruction> 61 48 MenuLocation_GetTitleBordersTopLeftCoordinatesToAX: 62 49 xor ax, ax … … 64 51 65 52 ALIGN JUMP_ALIGN 66 MenuLocation_GetI temBordersTopLeftCoordinatesToAX:67 xor ax, ax68 jmp SHORT AddI temBordersTopLeftCoordinatesToAX53 MenuLocation_GetInformationTextTopLeftCoordinatesToAX: 54 mov ax, (MENU_TEXT_ROW_OFFSET<<8) | MENU_TEXT_COLUMN_OFFSET 55 jmp SHORT AddInformationBordersTopLeftCoordinatesToAX 69 56 70 57 ALIGN JUMP_ALIGN -
trunk/Assembly_Library/Src/Menu/MenuScrollbars.asm
r133 r181 37 37 MenuScrollbars_GetScrollCharacterToALForLineInDI: 38 38 call MenuScrollbars_GetMaxVisibleItemsOnPageToCX 39 call .GetFirstThumbLineToAX 39 ; Get first thumb line to AX 40 mov ax, [bp+MENU.wFirstVisibleItem] 41 call .CalculateFirstOrLastThumbLineToAX 42 40 43 cmp di, ax ; Before first thumb line? 41 44 jb SHORT .ReturnTrackCharacter 42 45 call .GetLastThumbLineToAX 43 cmp di, ax ; After last thumb line? 44 ja SHORT .ReturnTrackCharacter 45 mov al, SCROLL_THUMB_CHARACTER 46 ret 46 cmp ax, di ; After last thumb line? 47 47 ALIGN JUMP_ALIGN 48 48 .ReturnTrackCharacter: 49 49 mov al, SCROLL_TRACK_CHARACTER 50 jb SHORT .Return 51 mov al, SCROLL_THUMB_CHARACTER 52 ALIGN JUMP_ALIGN, ret 53 .Return: 50 54 ret 51 55 … … 63 67 .GetLastThumbLineToAX: 64 68 call MenuScrollbars_GetLastVisibleItemOnPageToAX 65 jmp SHORT .CalculateFirstOrLastThumbLineToAX 66 67 ;-------------------------------------------------------------------- 68 ; .GetFirstThumbLineToAX 69 ; Parameters 69 ; Fall to .CalculateFirstOrLastThumbLineToAX 70 71 ;-------------------------------------------------------------------- 72 ; .CalculateFirstOrLastThumbLineToAX 73 ; Parameters 74 ; AX: Index of first or last visible item on page 70 75 ; CX: Max visible items on page 71 76 ; SS:BP: Ptr to MENU … … 76 81 ;-------------------------------------------------------------------- 77 82 ALIGN JUMP_ALIGN 78 .GetFirstThumbLineToAX:79 mov ax, [bp+MENU.wFirstVisibleItem]80 83 .CalculateFirstOrLastThumbLineToAX: 81 84 mul cx … … 98 101 mov cx, [bp+MENUINIT.wHighlightedItem] 99 102 add cx, ax 100 call .RotateItemInCX 103 ; Fall to .RotateItemInCX 104 105 ;-------------------------------------------------------------------- 106 ; .RotateItemInCX 107 ; Parameters 108 ; CX: Possibly under of overflown item to be rotated 109 ; SS:BP: Ptr to MENU 110 ; Returns: 111 ; CX: Valid item index 112 ; Corrupts registers: 113 ; DX 114 ;-------------------------------------------------------------------- 115 ;.RotateItemInCX: 116 mov dx, [bp+MENUINIT.wItems] 117 test cx, cx 118 js SHORT .RotateNegativeItemInCX 119 sub cx, dx 120 jae SHORT .ScrollPageForNewItemInCX 121 122 ALIGN JUMP_ALIGN 123 .RotateNegativeItemInCX: 124 add cx, dx 101 125 ; Fall to .ScrollPageForNewItemInCX 102 126 … … 111 135 ; AX, BX, CX, DX, SI, DI 112 136 ;-------------------------------------------------------------------- 137 ALIGN JUMP_ALIGN 113 138 .ScrollPageForNewItemInCX: 114 139 call MenuScrollbars_IsItemInCXonVisiblePage … … 117 142 mov dx, [bp+MENU.wFirstVisibleItem] 118 143 sub dx, [bp+MENUINIT.wHighlightedItem] 144 145 ; Get MaxFirstVisibleItem to AX 146 push cx 147 call MenuScrollbars_GetMaxVisibleItemsOnPageToCX 148 mov ax, [bp+MENUINIT.wItems] 149 sub ax, cx 150 pop cx 151 119 152 add dx, cx 120 MAX_S dx, 0 121 call .GetMaxFirstVisibleItemToAX 122 MIN_U ax, dx 153 jns .DXisPositive 154 cwd ; This won't work if MaxFirstVisibleItem > 32767 155 156 ALIGN JUMP_ALIGN 157 .DXisPositive: 158 cmp ax, dx 159 jb .AXisLessThanDX 160 xchg dx, ax 161 162 ALIGN JUMP_ALIGN 163 .AXisLessThanDX: 123 164 mov [bp+MENU.wFirstVisibleItem], ax 124 165 call MenuText_RefreshAllItems … … 127 168 .HighlightNewItemOnCX: 128 169 jmp MenuEvent_HighlightItemFromCX 129 130 ;--------------------------------------------------------------------131 ; .GetMaxFirstVisibleItemToAX132 ; Parameters133 ; SS:BP: Ptr to MENU134 ; Returns:135 ; AX: Max first visible item136 ; Corrupts registers:137 ; Nothing138 ;--------------------------------------------------------------------139 ALIGN JUMP_ALIGN140 .GetMaxFirstVisibleItemToAX:141 push cx142 143 call MenuScrollbars_GetMaxVisibleItemsOnPageToCX144 mov ax, [bp+MENUINIT.wItems]145 sub ax, cx146 147 pop cx148 ret149 150 ;--------------------------------------------------------------------151 ; .RotateItemInCX152 ; Parameters153 ; CX: Possibly under of overflown item to be rotated154 ; SS:BP: Ptr to MENU155 ; Returns:156 ; CX: Valid item index157 ; Corrupts registers:158 ; DX159 ;--------------------------------------------------------------------160 ALIGN JUMP_ALIGN161 .RotateItemInCX:162 mov dx, [bp+MENUINIT.wItems]163 test cx, cx164 js SHORT .RotateNegativeItemInCX165 cmp cx, dx166 jae SHORT .RotatePositiveItemInCX167 ret168 169 ALIGN JUMP_ALIGN170 .RotatePositiveItemInCX:171 sub cx, dx172 ;jae SHORT .RotatePositiveItemInCX ; Not needed by scrolling173 ret174 175 ALIGN JUMP_ALIGN176 .RotateNegativeItemInCX:177 add cx, dx178 ;js SHORT .RotateNegativeItemInCX ; Not needed by scrolling179 ret180 170 181 171 … … 216 206 ALIGN JUMP_ALIGN 217 207 MenuScrollbars_GetLastVisibleItemOnPageToAX: 218 push cx 219 208 xchg cx, ax 220 209 call MenuScrollbars_GetActualVisibleItemsOnPageToCX 221 210 xchg ax, cx 222 211 dec ax 223 212 add ax, [bp+MENU.wFirstVisibleItem] 224 225 pop cx226 213 ret 227 214 … … 239 226 MenuScrollbars_GetActualVisibleItemsOnPageToCX: 240 227 call MenuScrollbars_GetMaxVisibleItemsOnPageToCX 241 MIN_U cx, [bp+MENUINIT.wItems] 228 cmp cx, [bp+MENUINIT.wItems] 229 jb SHORT .Return 230 mov cx, [bp+MENUINIT.wItems] 231 ALIGN JUMP_ALIGN, ret 232 .Return: 242 233 ret 243 234
Note:
See TracChangeset
for help on using the changeset viewer.