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

Last change on this file since 526 was 526, checked in by krille_n_@…, 11 years ago

Changes:

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