source: xtideuniversalbios/trunk/Assembly_Library/Src/LibraryTests.asm @ 390

Last change on this file since 390 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: 17.1 KB
Line 
1; File name     :   LibraryTests.asm
2; Project name  :   Assembly Library
3; Created date  :   27.6.2010
4; Last update   :   7.12.2010
5; Author        :   Tomi Tilli
6; Description   :   Tests for Assembly Library.
7;                   This file should not be included when using the library on
8;                   some other project.     
9
10;
11; XTIDE Universal BIOS and Associated Tools 
12; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2012 by XTIDE Universal BIOS Team.
13;
14; This program is free software; you can redistribute it and/or modify
15; it under the terms of the GNU General Public License as published by
16; the Free Software Foundation; either version 2 of the License, or
17; (at your option) any later version.
18; 
19; This program is distributed in the hope that it will be useful,
20; but WITHOUT ANY WARRANTY; without even the implied warranty of
21; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22; GNU General Public License for more details.     
23; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
24;
25       
26; Include .inc files
27%define INCLUDE_MENU_DIALOGS
28%include "AssemblyLibrary.inc"  ; Assembly Library. Must be included first!
29
30
31; Section containing code
32SECTION .text
33
34; Program first instruction.
35ORG 100h                        ; Code starts at offset 100h (DOS .COM)
36Start:
37    jmp     LibraryTests_Start
38
39; Include library sources
40%include "AssemblyLibrary.asm"
41
42
43;--------------------------------------------------------------------
44; Program start
45;--------------------------------------------------------------------
46ALIGN JUMP_ALIGN
47LibraryTests_Start: 
48    CALL_DISPLAY_LIBRARY InitializeDisplayContext
49    mov     ax, SCREEN_BACKGROUND_CHARACTER_AND_ATTRIBUTE
50    CALL_DISPLAY_LIBRARY ClearScreenWithCharInALandAttrInAH
51
52    ;call   LibraryTests_Sort
53    ;call   LibraryTests_ForDisplayLibrary
54    ;call   LibraryTests_ForKeyboardLibrary
55    call    LibraryTests_ForMenuLibrary
56
57    ; Exit to DOS
58    ;mov        ax, CURSOR_XY(1, 1)
59    ;CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX
60    CALL_DISPLAY_LIBRARY SynchronizeDisplayContextToHardware
61    mov     ax, 4C00h           ; Exit to DOS
62    int     21h
63
64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
65ALIGN JUMP_ALIGN
66LibraryTests_ForMenuLibrary:
67    mov     [cs:g_dialogInputOutput+DIALOG_INPUT.fszTitle+2], cs
68    mov     [cs:g_dialogInputOutput+DIALOG_INPUT.fszItems+2], cs
69    mov     [cs:g_dialogInputOutput+DIALOG_INPUT.fszInfo+2], cs
70
71    mov     bx, .MenuEventHandler
72    call    MenuInit_DisplayMenuWithHandlerInBXandUserDataInDXAX
73    ret
74
75ALIGN JUMP_ALIGN
76.MenuEventHandler:
77    jmp     [cs:bx+.rgfnMenuEvents]
78.NotHandled:
79    clc     ; Not handled so clear
80    ret
81
82ALIGN JUMP_ALIGN
83.InitializeMenu:
84    mov     WORD [si+MENUINIT.wItems], 51
85    mov     BYTE [si+MENUINIT.bWidth], 40
86    mov     BYTE [si+MENUINIT.bHeight], 20
87    mov     BYTE [si+MENUINIT.bTitleLines], TEST_MENU_TITLE_LINES
88    mov     BYTE [si+MENUINIT.bInfoLines], TEST_MENU_INFO_LINES
89    mov     WORD [si+MENUINIT.wHighlightedItem], 1
90   
91    mov     ax, 10000 / 55  ; 10 seconds
92    CALL_MENU_LIBRARY StartSelectionTimeoutWithTicksInAX
93    stc
94    ret
95
96ALIGN JUMP_ALIGN
97.RefreshTitle:
98    mov     si, .szMenuTitle
99    CALL_DISPLAY_LIBRARY PrintNullTerminatedStringFromCSSI
100    stc
101    ret
102.szMenuTitle:
103    db      "Simple test program for Assembly Library. Can be used to find bugs.",NULL
104
105ALIGN JUMP_ALIGN
106.RefreshInformation:
107    push    bp
108    mov     bp, sp
109    mov     si, .szInfoTitle
110    CALL_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI
111    pop     bp
112    stc
113    ret
114.szInfoTitle:
115    db      "Information line 1,",LF,CR,
116    db      "Information line 2. Auto splitter should split this very long line.",NULL
117
118ALIGN JUMP_ALIGN
119.RefreshItemFromCX:
120    cmp     cx, TEST_MENU_VALID_ITEMS
121    jb      SHORT .PrintKnownItem
122
123    push    bp
124    mov     si, .szItem
125    mov     bp, sp
126    push    cx              ; Item index
127    CALL_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI
128    pop     bp
129    stc
130    ret
131.szItem:
132    db  "This is item %d.",NULL
133.PrintKnownItem:
134    mov     si, cx
135    shl     si, 1
136    mov     si, [cs:si+.rgszItems]
137    CALL_DISPLAY_LIBRARY PrintNullTerminatedStringFromCSSI
138    stc
139    ret
140
141ALIGN JUMP_ALIGN
142.ItemSelectedFromCX:
143    push    cs
144    pop     ds
145    cmp     cx, TEST_MENU_VALID_ITEMS
146    jae     SHORT .ReturnWithoutHandling
147    mov     bx, cx
148    shl     bx, 1
149    jmp     [bx+.rgfnSelectionHandler]
150.ReturnWithoutHandling:
151    stc
152    ret
153
154ALIGN WORD_ALIGN
155.rgfnSelectionHandler:
156    dw      .ExitMenuByItem
157    dw      .ToggleTitle
158    dw      .ToggleInfo
159    dw      .ShowMessageDialogWithUnformattedText
160    dw      .AskWordFromUser
161    dw      .AskStringFromUser
162    dw      .AskSelectionFromUser
163    dw      .AskFileFromUser
164    dw      .TestProgressBar
165
166
167ALIGN JUMP_ALIGN
168.ExitMenuByItem:
169    CALL_MENU_LIBRARY Close
170.ExitMenuByMenuLibrary:
171    stc
172    ret
173
174ALIGN JUMP_ALIGN
175.ToggleTitle:
176    mov     al, [bp+MENUINIT.bTitleLines]
177    xor     al, TEST_MENU_TITLE_LINES
178    CALL_MENU_LIBRARY SetTitleHeightFromAL
179    jmp     SHORT .RefreshMenuWindow
180ALIGN JUMP_ALIGN
181.ToggleInfo:
182    mov     al, [bp+MENUINIT.bInfoLines]
183    xor     al, TEST_MENU_INFO_LINES
184    CALL_MENU_LIBRARY SetInformationHeightFromAL
185.RefreshMenuWindow:
186    ;CALL_MENU_LIBRARY RestartTimeout
187    CALL_MENU_LIBRARY RefreshWindow
188    stc
189    ret
190
191ALIGN JUMP_ALIGN
192.ShowMessageDialogWithUnformattedText:
193    mov     di, g_szVeryLongString
194    jmp     .ShowDialogWithStringInCSDI
195
196ALIGN JUMP_ALIGN
197.AskWordFromUser:
198    mov     si, g_dialogInputOutput
199    mov     BYTE [si+WORD_DIALOG_IO.bNumericBase], 10
200    mov     WORD [si+WORD_DIALOG_IO.wMin], 10
201    mov     WORD [si+WORD_DIALOG_IO.wMax], 20
202    CALL_MENU_LIBRARY GetWordWithIoInDSSI
203
204    mov     ax, [si+WORD_DIALOG_IO.wReturnWord]
205    mov     di, g_szBuffer
206    call    .FormatWordFromAXtoStringBufferInCSDI
207    call    .ShowDialogWithStringInCSDI
208    stc
209    ret
210
211ALIGN JUMP_ALIGN
212.AskStringFromUser:
213    mov     si, g_dialogInputOutput
214    mov     WORD [si+STRING_DIALOG_IO.fnCharFilter], NULL
215    mov     WORD [si+STRING_DIALOG_IO.wBufferSize], 17
216    mov     WORD [si+STRING_DIALOG_IO.fpReturnBuffer], g_szBuffer
217    mov     [si+STRING_DIALOG_IO.fpReturnBuffer+2], cs
218    CALL_MENU_LIBRARY GetStringWithIoInDSSI
219
220    mov     di, g_szBuffer
221    call    .ShowDialogWithStringInCSDI
222    stc
223    ret
224
225ALIGN JUMP_ALIGN
226.AskSelectionFromUser:
227    mov     si, g_dialogInputOutput
228    mov     WORD [si+DIALOG_INPUT.fszItems], .szSelections
229    CALL_MENU_LIBRARY GetSelectionToAXwithInputInDSSI
230
231    mov     di, g_szBuffer
232    call    .FormatWordFromAXtoStringBufferInCSDI
233    call    .ShowDialogWithStringInCSDI
234    stc
235    ret
236.szSelections:
237    db      "Cancel",LF
238    db      "Yes",LF
239    db      "No",NULL
240
241ALIGN JUMP_ALIGN
242.AskFileFromUser:
243    mov     si, g_dialogInputOutput
244    mov     WORD [si+FILE_DIALOG_IO.fszItemBuffer], g_szBuffer
245    mov     BYTE [si+FILE_DIALOG_IO.bDialogFlags], FLG_FILEDIALOG_DIRECTORY | FLG_FILEDIALOG_NEW | FLG_FILEDIALOG_DRIVES
246    mov     BYTE [si+FILE_DIALOG_IO.bFileAttributes], FLG_FILEATTR_DIRECTORY | FLG_FILEATTR_ARCHIVE
247    mov     WORD [si+FILE_DIALOG_IO.fpFileFilterString], .szAllFiles
248    mov     [si+FILE_DIALOG_IO.fpFileFilterString+2], cs
249    CALL_MENU_LIBRARY GetFileNameWithIoInDSSI
250    cmp     BYTE [g_dialogInputOutput+FILE_DIALOG_IO.bUserCancellation], TRUE
251    je      SHORT .FileSelectionCancelled
252
253    mov     di, g_dialogInputOutput + FILE_DIALOG_IO.szFile
254    call    .ShowDialogWithStringInCSDI
255.FileSelectionCancelled:
256    stc
257    ret
258.szAllFiles:
259    db      "*.*",NULL
260
261
262ALIGN JUMP_ALIGN
263.FormatWordFromAXtoStringBufferInCSDI:
264    push    bp
265    push    di
266    mov     si, di
267    xchg    cx, ax
268    CALL_DISPLAY_LIBRARY PushDisplayContext
269
270    mov     bx, cs
271    mov     ax, si
272    CALL_DISPLAY_LIBRARY SetCharacterPointerFromBXAX
273    mov     bl, ATTRIBUTES_NOT_USED
274    mov     ax, BUFFER_OUTPUT_WITH_CHAR_ONLY
275    CALL_DISPLAY_LIBRARY SetCharOutputFunctionFromAXwithAttribFlagInBL
276    lea     ax, [si+STRING_BUFFER_SIZE]
277    CALL_DISPLAY_LIBRARY SetCharacterOutputParameterFromAX
278
279    mov     si, .szFormatWord
280    mov     bp, sp
281    push    cx
282    CALL_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI
283    mov     al, NULL
284    CALL_DISPLAY_LIBRARY PrintCharacterFromAL   ; Terminate buffer with NULL
285
286    CALL_DISPLAY_LIBRARY PopDisplayContext
287    pop     di
288    pop     bp
289    ret
290.szFormatWord:
291    db      "Integer %d selected!",NULL
292
293
294ALIGN JUMP_ALIGN
295.ShowDialogWithStringInCSDI:
296    push    cs
297    pop     ds
298    mov     si, g_dialogInputOutput
299    mov     WORD [si+DIALOG_INPUT.fszItems], di
300    CALL_MENU_LIBRARY DisplayMessageWithInputInDSSI
301    stc
302    ret
303
304
305ALIGN JUMP_ALIGN
306.TestProgressBar:
307    push    cs
308    pop     ds
309    mov     si, g_dialogInputOutput
310    mov     WORD [si+PROGRESS_DIALOG_IO.wCurrentProgressValue], 0
311    mov     WORD [si+PROGRESS_DIALOG_IO.wMaxProgressValue], 500
312    mov     WORD [si+PROGRESS_DIALOG_IO.wMinProgressValue], 0
313    mov     WORD [si+PROGRESS_DIALOG_IO.fnTaskWithParamInDSSI], .ProgressTaskWithParamInDSSI
314    mov     ax, 500         ; Counter for progress task
315    CALL_MENU_LIBRARY StartProgressTaskWithIoInDSSIandParamInDXAX
316    stc
317    ret
318
319ALIGN JUMP_ALIGN
320.ProgressTaskWithParamInDSSI:
321    mov     ax, 50000                   ; 50 millisec delay
322    call    Delay_MicrosecondsFromAX
323    dec     si
324    CALL_MENU_LIBRARY SetUserDataFromDSSI
325    mov     ax, 500
326    sub     ax, si
327    push    si
328    CALL_MENU_LIBRARY SetProgressValueFromAX
329    pop     si
330    test    si, si
331    jnz     .ProgressTaskWithParamInDSSI
332    ret
333   
334   
335
336ALIGN WORD_ALIGN
337.rgfnMenuEvents:
338    dw      .InitializeMenu         ; .InitializeMenuinitToDSSI
339    dw      .ExitMenuByMenuLibrary  ; .ExitMenu
340    dw      .NotHandled             ; .IdleProcessing
341    dw      .NotHandled             ; .ItemHighlightedFromCX
342    dw      .ItemSelectedFromCX     ; .ItemSelectedFromCX
343    dw      .NotHandled             ; .KeyStrokeInDX
344    dw      .RefreshTitle           ; .RefreshTitle
345    dw      .RefreshInformation     ; .RefreshInformation
346    dw      .RefreshItemFromCX      ; .RefreshItemFromCX
347
348.rgszItems:
349    dw      .szExitMenu
350    dw      .szToggleTitle
351    dw      .szToggleInfo
352    dw      .szShowMessage
353    dw      .szAskWord
354    dw      .szAskString
355    dw      .szAskSelection
356    dw      .szAskFile
357    dw      .szTestProgress
358.szExitMenu:    db  "Exit menu",NULL
359.szToggleTitle: db  "Toggle title",NULL
360.szToggleInfo:  db  "Toggle information",NULL
361.szShowMessage: db  "Display unformatted message",NULL
362.szAskWord:     db  "Input word",NULL
363.szAskString:   db  "Input string",NULL
364.szAskSelection:db  "Display selection dialog",NULL
365.szAskFile:     db  "Display file dialog",NULL
366.szTestProgress:db  "Display progress bar",NULL
367TEST_MENU_VALID_ITEMS           EQU     9
368TEST_MENU_TITLE_LINES           EQU     2
369TEST_MENU_INFO_LINES            EQU     3
370
371
372
373;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
374ALIGN JUMP_ALIGN
375LibraryTests_ForKeyboardLibrary:
376    mov     ax, CURSOR_XY(0, 6)
377    CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX
378    call    ReadUnsignedDecimalInteger
379    call    ReadHexadecimalWord
380    ret
381
382
383ReadUnsignedDecimalInteger:
384    mov     si, .szEnterUnsignedWord
385    CALL_DISPLAY_LIBRARY PrintNullTerminatedStringFromCSSI
386    CALL_DISPLAY_LIBRARY SynchronizeDisplayContextToHardware    ; Move hardware cursor
387
388    mov     bx, 10          ; Numeric base
389    call    Keyboard_ReadUserInputtedWordWhilePrinting
390
391    mov     si, .szWordEntered
392    mov     bp, sp
393    push    ax
394    CALL_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI
395    ret
396.szWordEntered:
397    db  ". Word entered: %u",LF,CR,NULL
398.szEnterUnsignedWord:
399    db  "Enter unsigned word: ",NULL
400
401
402ReadHexadecimalWord:
403    mov     si, .szEnterHexadecimalWord
404    CALL_DISPLAY_LIBRARY PrintNullTerminatedStringFromCSSI
405    CALL_DISPLAY_LIBRARY SynchronizeDisplayContextToHardware    ; Move hardware cursor
406
407    mov     bx, 16          ; Numeric base
408    call    Keyboard_ReadUserInputtedWordWhilePrinting
409
410    mov     si, .szWordEntered
411    mov     bp, sp
412    push    ax
413    CALL_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI
414    ret
415.szWordEntered:
416    db  ". Word entered: %x",LF,CR,NULL
417.szEnterHexadecimalWord:
418    db  "Enter hexadecimal word: ",NULL
419
420
421
422;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
423ALIGN JUMP_ALIGN
424LibraryTests_ForDisplayLibrary:
425    CALL_DISPLAY_LIBRARY PushDisplayContext
426    call    PrintHorizontalRuler
427    call    PrintVerticalRuler
428   
429    mov     al, COLOR_ATTRIBUTE(COLOR_BRIGHT_WHITE, COLOR_BLACK)
430    CALL_DISPLAY_LIBRARY SetCharacterAttributeFromAL
431
432    mov     ax, CURSOR_XY(0, 1)
433    CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX
434    call    PrintFormattedStrings
435
436    CALL_DISPLAY_LIBRARY PopDisplayContext
437    ret
438
439
440PrintHorizontalRuler:
441    mov     ax, CURSOR_XY(0, 0)
442    CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX
443    CALL_DISPLAY_LIBRARY GetColumnsToALandRowsToAH
444    eMOVZX  cx, al
445    mov     bx, 10<<8           ; Divider 10 to BH
446.ColumnNumberLoop:
447    eMOVZX  ax, bl              ; Column index to AX (0...79)
448    div     bh                  ; AH = 0...9, AL = attribute
449    mov     dx, ax
450    inc     ax                  ; Increment attribute for non-black foreground
451    CALL_DISPLAY_LIBRARY SetCharacterAttributeFromAL
452    xchg    ax, dx
453    mov     al, '0'
454    add     al, ah              ; AL = '0'...'9'
455    CALL_DISPLAY_LIBRARY PrintCharacterFromAL
456    inc     bx                  ; Increment column index
457    loop    .ColumnNumberLoop
458    ret
459
460
461PrintVerticalRuler:
462    CALL_DISPLAY_LIBRARY GetColumnsToALandRowsToAH
463    eMOVZX  cx, ah              ; Number of rows to CX
464    dec     ax                  ; Last column
465    xor     ah, ah
466    CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX
467
468    dec     cx                  ; Decrement rows to print last row outside loop
469    mov     bx, 10<<8           ; BH = 10 (divider), BL = 0 (row index)
470    mov     si, .szVerticalRulerCharacter
471.RowNumberLoop:
472    call    .PrintRowNumberFromBL
473    inc     bx                  ; Increment row index
474    loop    .RowNumberLoop
475
476    ; Last row
477    mov     si, .szLastVerticalRulerCharacter
478.PrintRowNumberFromBL:
479    eMOVZX  ax, bl              ; Row index to AX (0...24)
480    div     bh                  ; AH = 0...9, AL = attribute
481    add     al, COLOR_GRAY      ; Start from color GRAY
482    mov     bp, sp              ; Prepare BP for string formatting
483    push    ax                  ; Push attribute
484    eMOVZX  ax, ah
485    push    ax                  ; Push row index
486    CALL_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI
487    ret
488
489.szVerticalRulerCharacter:
490    db  "%A%u",LF,NULL
491.szLastVerticalRulerCharacter:
492    db  "%A%u",NULL
493
494
495PrintFormattedStrings:
496    call    .PrintIntegers
497    call    .PrintHexadecimals
498    call    .PrintCharacters
499    call    .PrintStrings
500    call    .RepeatChar
501    ret
502
503.PrintIntegers:
504    mov     si, .szIntegers
505    mov     bp, sp
506    ePUSH_T ax, COLOR_ATTRIBUTE(COLOR_RED, COLOR_BLACK)
507    ePUSH_T ax, -32768
508    ePUSH_T ax, -1
509    ePUSH_T ax, 0
510    ePUSH_T ax, 1
511    ePUSH_T ax, 65535
512    CALL_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI
513    ret
514.szIntegers:
515    db  "Integers -32768, -1, 0, 1, 65535:          %A|%6-d|%6-d|%6-d|%6-d|%6-u|",LF,CR,NULL
516
517.PrintHexadecimals:
518    mov     si, .szHexadecimals
519    mov     bp, sp
520    ePUSH_T ax, COLOR_ATTRIBUTE(COLOR_RED, COLOR_BLACK)
521    ePUSH_T ax, 0CACAh
522    ePUSH_T ax, 0FFFFh
523    ePUSH_T ax, 0
524    ePUSH_T ax, 5A5Ah
525    ePUSH_T ax, 0A5A5h
526    CALL_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI
527    ret
528.szHexadecimals:
529    db  "Hexadecimals CACAh, FFFFh, 0, 5A5Ah, A5A5h:%A|%6-x|%6-x|%6-x|%6-x|%6-x|",LF,CR,NULL
530
531.PrintCharacters:
532    mov     si, .szCharacters
533    mov     bp, sp
534    ePUSH_T ax, COLOR_ATTRIBUTE(COLOR_RED, COLOR_BLACK)
535    ePUSH_T ax, 'a'
536    ePUSH_T ax, 'B'
537    ePUSH_T ax, 'c'
538    ePUSH_T ax, 'D'
539    CALL_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI
540    ret
541.szCharacters:
542    db  "Characters a, B, c, D, percent:            %A|%6c|%6c|%6c|%6c|%6%|",LF,CR,NULL
543
544.PrintStrings:
545    mov     si, .szStrings
546    mov     bp, sp
547    ePUSH_T ax, COLOR_ATTRIBUTE(COLOR_RED, COLOR_BLACK)
548    ePUSH_T ax, .szCSSI
549    ePUSH_T ax, .szFar
550    push    cs
551    CALL_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI
552    ret
553.szStrings:
554    db  "Strings ",'"',"Hello CSSI",'"'," and ",'"',"Far",'"',":            %A|%20s|%13S|",LF,CR,NULL
555.szCSSI:
556    db  "Hello CSSI",NULL
557.szFar:
558    db  "Far",NULL
559   
560.RepeatChar:
561    mov     si, .szRepeat
562    mov     bp, sp
563    ePUSH_T ax, COLOR_ATTRIBUTE(COLOR_RED, COLOR_BLACK)
564    ePUSH_T ax, '-'
565    ePUSH_T ax, 36
566    CALL_DISPLAY_LIBRARY FormatNullTerminatedStringFromCSSI
567    ret
568.szRepeat:
569    db  "Repeating character '-':                   %A%t",LF,CR,NULL
570
571
572;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
573LibraryTests_Sort:
574    call    .PrintWords
575    push    cs
576    pop     ds
577    mov     si, .rgwItems
578    mov     dx, 7
579    mov     cx, 2
580    mov     bx, .Comparator
581    call    Sort_ItemsFromDSSIwithCountInDXsizeInCXandComparatorInBX
582    call    .PrintWords
583    ret
584
585
586.Comparator:
587    push    ax
588    mov     ax, [si]
589    DISPLAY_DEBUG_CHARACTER 'I'
590    DISPLAY_DEBUG_WORD_AND_WAIT_ANY_KEY ax, 16
591    DISPLAY_DEBUG_CHARACTER ','
592    DISPLAY_DEBUG_WORD_AND_WAIT_ANY_KEY [es:di], 16
593    DISPLAY_DEBUG_CHARACTER ' '
594    cmp     ax, [es:di]
595    pop     ax
596    ret
597
598.PrintWords:
599    CALL_DISPLAY_LIBRARY PrintNewlineCharacters
600    mov     cx, 7
601    push    cs
602    pop     ds
603    mov     si, .rgwItems
604    mov     bx, 16
605.Loop:
606    lodsw
607    CALL_DISPLAY_LIBRARY PrintSignedWordFromAXWithBaseInBX
608    CALL_DISPLAY_LIBRARY PrintNewlineCharacters
609    loop    .Loop
610    ret
611
612
613.rgwItems:
614    dw      '['
615    dw      'n'
616    dw      '5'
617    dw      '.'
618    dw      ']'
619    dw      'a'
620    dw      'A'
621
622
623
624; Section containing initialized data
625;SECTION .data
626
627g_szDialogTitle:
628    db      "This is a generic title for all dialogs.",NULL
629g_szDialogInfo:
630    db      "This is a generic information for all dialogs.",NULL
631g_szVeryLongString:
632    db      "This is a very long string containing multiple lines of text. This is needed "
633    db      "so scroll bars and message dialog can be tested. This string does not use "
634    db      "formatting so it should be simple to display this correctly. This string "
635    db      "does, however, use newline characters. Lets change line right now!",LF,CR,
636    db      "Well did it work? Let's try line feed alone",LF,"Well? "
637    db      "Now two LFs:",LF,LF,"What happened? "
638    db      "We could also see what two spaces does _  _. There was two spaces between "
639    db      "underscores. Lets try three this time _   _. Well, did they work correctly? "
640    db      "Too bad that LF, CR and BS (backspace) are the only supported control "
641    db      "characters. Others don't either work or they break line splitting. "
642    db      "This is the last sentence of this long string!",NULL
643
644g_dialogInputOutput:
645istruc DIALOG_INPUT
646    at  DIALOG_INPUT.fszTitle,  dw  g_szDialogTitle
647    at  DIALOG_INPUT.fszInfo,   dw  g_szDialogInfo
648iend
649    times   20  db  0
650
651
652; Section containing uninitialized data
653SECTION .bss
654
655STRING_BUFFER_SIZE          EQU     100
656g_szBuffer:
Note: See TracBrowser for help on using the repository browser.