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

Last change on this file since 119 was 67, checked in by aitotat, 13 years ago

Changes to Assembly Library:

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