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

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

Changes to Assembly Library:

  • Cursor coordinates no longer change when clearing menu title or information area.
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   :   7.12.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    mov     ax, SCREEN_BACKGROUND_CHARACTER_AND_ATTRIBUTE
34    CALL_DISPLAY_LIBRARY ClearScreenWithCharInALandAttrInAH
35
36    ;call   LibraryTests_Sort
37    ;call   LibraryTests_ForDisplayLibrary
38    ;call   LibraryTests_ForKeyboardLibrary
39    call    LibraryTests_ForMenuLibrary
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
73    mov     WORD [si+MENUINIT.wHighlightedItem], 1
74   
75    mov     ax, 10000 / 55  ; 10 seconds
76    CALL_MENU_LIBRARY StartSelectionTimeoutWithTicksInAX
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:
87    db      "Simple test program for Assembly Library. Can be used to find bugs.",NULL
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:
99    db      "Information line 1,",LF,CR,
100    db      "Information line 2. Auto splitter should split this very long 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      .ExitMenuByItem
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.ExitMenuByItem:
153    CALL_MENU_LIBRARY Close
154.ExitMenuByMenuLibrary:
155    stc
156    ret
157
158ALIGN JUMP_ALIGN
159.ToggleTitle:
160    mov     al, [bp+MENUINIT.bTitleLines]
161    xor     al, TEST_MENU_TITLE_LINES
162    CALL_MENU_LIBRARY SetTitleHeightFromAL
163    jmp     SHORT .RefreshMenuWindow
164ALIGN JUMP_ALIGN
165.ToggleInfo:
166    mov     al, [bp+MENUINIT.bInfoLines]
167    xor     al, TEST_MENU_INFO_LINES
168    CALL_MENU_LIBRARY SetInformationHeightFromAL
169.RefreshMenuWindow:
170    ;CALL_MENU_LIBRARY RestartTimeout
171    CALL_MENU_LIBRARY RefreshWindow
172    stc
173    ret
174
175ALIGN JUMP_ALIGN
176.ShowMessageDialogWithUnformattedText:
177    mov     di, g_szVeryLongString
178    jmp     .ShowDialogWithStringInCSDI
179
180ALIGN JUMP_ALIGN
181.AskWordFromUser:
182    mov     si, g_dialogInputOutput
183    mov     BYTE [si+WORD_DIALOG_IO.bNumericBase], 10
184    mov     WORD [si+WORD_DIALOG_IO.wMin], 10
185    mov     WORD [si+WORD_DIALOG_IO.wMax], 20
186    CALL_MENU_LIBRARY GetWordWithIoInDSSI
187
188    mov     ax, [si+WORD_DIALOG_IO.wReturnWord]
189    mov     di, g_szBuffer
190    call    .FormatWordFromAXtoStringBufferInCSDI
191    call    .ShowDialogWithStringInCSDI
192    stc
193    ret
194
195ALIGN JUMP_ALIGN
196.AskStringFromUser:
197    mov     si, g_dialogInputOutput
198    mov     WORD [si+STRING_DIALOG_IO.fnCharFilter], NULL
199    mov     WORD [si+STRING_DIALOG_IO.wBufferSize], 17
200    mov     WORD [si+STRING_DIALOG_IO.fpReturnBuffer], g_szBuffer
201    mov     [si+STRING_DIALOG_IO.fpReturnBuffer+2], cs
202    CALL_MENU_LIBRARY GetStringWithIoInDSSI
203
204    mov     di, g_szBuffer
205    call    .ShowDialogWithStringInCSDI
206    stc
207    ret
208
209ALIGN JUMP_ALIGN
210.AskSelectionFromUser:
211    mov     si, g_dialogInputOutput
212    mov     WORD [si+DIALOG_INPUT.fszItems], .szSelections
213    CALL_MENU_LIBRARY GetSelectionToAXwithInputInDSSI
214
215    mov     di, g_szBuffer
216    call    .FormatWordFromAXtoStringBufferInCSDI
217    call    .ShowDialogWithStringInCSDI
218    stc
219    ret
220.szSelections:
221    db      "Cancel",LF
222    db      "Yes",LF
223    db      "No",NULL
224
225ALIGN JUMP_ALIGN
226.AskFileFromUser:
227    mov     si, g_dialogInputOutput
228    mov     WORD [si+FILE_DIALOG_IO.fszItemBuffer], g_szBuffer
229    mov     BYTE [si+FILE_DIALOG_IO.bDialogFlags], FLG_FILEDIALOG_DIRECTORY | FLG_FILEDIALOG_NEW | FLG_FILEDIALOG_DRIVES
230    mov     BYTE [si+FILE_DIALOG_IO.bFileAttributes], FLG_FILEATTR_DIRECTORY | FLG_FILEATTR_ARCHIVE
231    mov     WORD [si+FILE_DIALOG_IO.fpFileFilterString], .szAllFiles
232    mov     [si+FILE_DIALOG_IO.fpFileFilterString+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      .ExitMenuByMenuLibrary  ; .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!",LF,CR,
620    db      "Well did it work? Let's try line feed alone",LF,"Well? "
621    db      "Now two LFs:",LF,LF,"What happened? "
622    db      "We could also see what two spaces does _  _. There was two spaces between "
623    db      "underscores. Lets try three this time _   _. Well, did they work correctly? "
624    db      "Too bad that LF, CR and BS (backspace) are the only supported control "
625    db      "characters. Others don't either work or they break line splitting. "
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.