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

Last change on this file since 47 was 46, checked in by aitotat, 14 years ago

Changes to Assembly Library:
Sorting now works (pivot item is copied for comparison and index comparisons are now signed instead of unsigned).
Menu shadow now looks better on black and white modes.
Sorting is now implemented for File Fialog: directories are displayed before files.
File Dialog now displays directories with upper case letters and files with lower case letters.
Line splitter now removes all empty lines from the end.

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