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
RevLine 
[41]1; File name     :   LibraryTests.asm
2; Project name  :   Assembly Library
3; Created date  :   27.6.2010
[67]4; Last update   :   7.12.2010
[41]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
[376]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       
[41]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
[67]49    mov     ax, SCREEN_BACKGROUND_CHARACTER_AND_ATTRIBUTE
50    CALL_DISPLAY_LIBRARY ClearScreenWithCharInALandAttrInAH
[41]51
[46]52    ;call   LibraryTests_Sort
[45]53    ;call   LibraryTests_ForDisplayLibrary
[41]54    ;call   LibraryTests_ForKeyboardLibrary
[46]55    call    LibraryTests_ForMenuLibrary
[41]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
[52]89    mov     WORD [si+MENUINIT.wHighlightedItem], 1
[60]90   
91    mov     ax, 10000 / 55  ; 10 seconds
92    CALL_MENU_LIBRARY StartSelectionTimeoutWithTicksInAX
[41]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:
[48]103    db      "Simple test program for Assembly Library. Can be used to find bugs.",NULL
[41]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:
[52]115    db      "Information line 1,",LF,CR,
[125]116    db      "Information line 2. Auto splitter should split this very long line.",NULL
[41]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:
[58]156    dw      .ExitMenuByItem
[41]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
[58]168.ExitMenuByItem:
[41]169    CALL_MENU_LIBRARY Close
[58]170.ExitMenuByMenuLibrary:
[41]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:
[60]186    ;CALL_MENU_LIBRARY RestartTimeout
[41]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
[50]244    mov     WORD [si+FILE_DIALOG_IO.fszItemBuffer], g_szBuffer
[41]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
[45]273    mov     bl, ATTRIBUTES_NOT_USED
[41]274    mov     ax, BUFFER_OUTPUT_WITH_CHAR_ONLY
[45]275    CALL_DISPLAY_LIBRARY SetCharOutputFunctionFromAXwithAttribFlagInBL
[41]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:
[58]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
[41]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
[44]428   
429    mov     al, COLOR_ATTRIBUTE(COLOR_BRIGHT_WHITE, COLOR_BLACK)
430    CALL_DISPLAY_LIBRARY SetCharacterAttributeFromAL
[41]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:
[44]515    db  "Integers -32768, -1, 0, 1, 65535:          %A|%6-d|%6-d|%6-d|%6-d|%6-u|",LF,CR,NULL
[41]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:
[44]529    db  "Hexadecimals CACAh, FFFFh, 0, 5A5Ah, A5A5h:%A|%6-x|%6-x|%6-x|%6-x|%6-x|",LF,CR,NULL
[41]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
[45]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]
[46]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 ' '
[45]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
[46]604    mov     bx, 16
[45]605.Loop:
606    lodsw
607    CALL_DISPLAY_LIBRARY PrintSignedWordFromAXWithBaseInBX
608    CALL_DISPLAY_LIBRARY PrintNewlineCharacters
609    loop    .Loop
610    ret
611
612
613.rgwItems:
[46]614    dw      '['
615    dw      'n'
616    dw      '5'
617    dw      '.'
618    dw      ']'
619    dw      'a'
620    dw      'A'
[45]621
622
623
[41]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 "
[52]635    db      "does, however, use newline characters. Lets change line right now!",LF,CR,
[41]636    db      "Well did it work? Let's try line feed alone",LF,"Well? "
[52]637    db      "Now two LFs:",LF,LF,"What happened? "
[41]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? "
[52]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. "
[41]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.