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
RevLine 
[41]1; Project name  :   Assembly Library
2; Description   :   Tests for Assembly Library.
3;                   This file should not be included when using the library on
[526]4;                   some other project.
[41]5
[376]6;
[526]7; XTIDE Universal BIOS and Associated Tools
8; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
[376]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.
[526]14;
[376]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
[526]18; GNU General Public License for more details.
[376]19; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20;
[526]21
[41]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
[526]43LibraryTests_Start:
[41]44    CALL_DISPLAY_LIBRARY InitializeDisplayContext
[67]45    mov     ax, SCREEN_BACKGROUND_CHARACTER_AND_ATTRIBUTE
46    CALL_DISPLAY_LIBRARY ClearScreenWithCharInALandAttrInAH
[41]47
[46]48    ;call   LibraryTests_Sort
[45]49    ;call   LibraryTests_ForDisplayLibrary
[41]50    ;call   LibraryTests_ForKeyboardLibrary
[46]51    call    LibraryTests_ForMenuLibrary
[41]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
[52]85    mov     WORD [si+MENUINIT.wHighlightedItem], 1
[526]86
[60]87    mov     ax, 10000 / 55  ; 10 seconds
88    CALL_MENU_LIBRARY StartSelectionTimeoutWithTicksInAX
[41]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:
[48]99    db      "Simple test program for Assembly Library. Can be used to find bugs.",NULL
[41]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:
[52]111    db      "Information line 1,",LF,CR,
[125]112    db      "Information line 2. Auto splitter should split this very long line.",NULL
[41]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:
[58]152    dw      .ExitMenuByItem
[41]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
[58]164.ExitMenuByItem:
[41]165    CALL_MENU_LIBRARY Close
[58]166.ExitMenuByMenuLibrary:
[41]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:
[60]182    ;CALL_MENU_LIBRARY RestartTimeout
[41]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
[50]240    mov     WORD [si+FILE_DIALOG_IO.fszItemBuffer], g_szBuffer
[41]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
[45]269    mov     bl, ATTRIBUTES_NOT_USED
[41]270    mov     ax, BUFFER_OUTPUT_WITH_CHAR_ONLY
[45]271    CALL_DISPLAY_LIBRARY SetCharOutputFunctionFromAXwithAttribFlagInBL
[41]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
[526]330
331
[41]332ALIGN WORD_ALIGN
333.rgfnMenuEvents:
[58]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
[41]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
[526]424
[44]425    mov     al, COLOR_ATTRIBUTE(COLOR_BRIGHT_WHITE, COLOR_BLACK)
426    CALL_DISPLAY_LIBRARY SetCharacterAttributeFromAL
[41]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:
[44]511    db  "Integers -32768, -1, 0, 1, 65535:          %A|%6-d|%6-d|%6-d|%6-d|%6-u|",LF,CR,NULL
[41]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:
[44]525    db  "Hexadecimals CACAh, FFFFh, 0, 5A5Ah, A5A5h:%A|%6-x|%6-x|%6-x|%6-x|%6-x|",LF,CR,NULL
[41]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
[526]555
[41]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
[45]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]
[46]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 ' '
[45]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
[46]600    mov     bx, 16
[45]601.Loop:
602    lodsw
603    CALL_DISPLAY_LIBRARY PrintSignedWordFromAXWithBaseInBX
604    CALL_DISPLAY_LIBRARY PrintNewlineCharacters
605    loop    .Loop
606    ret
607
608
609.rgwItems:
[46]610    dw      '['
611    dw      'n'
612    dw      '5'
613    dw      '.'
614    dw      ']'
615    dw      'a'
616    dw      'A'
[45]617
618
619
[41]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 "
[52]631    db      "does, however, use newline characters. Lets change line right now!",LF,CR,
[41]632    db      "Well did it work? Let's try line feed alone",LF,"Well? "
[52]633    db      "Now two LFs:",LF,LF,"What happened? "
[41]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? "
[52]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. "
[41]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.