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

Last change on this file since 67 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
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. ",
101    db      "This comes (12) right after Information line 2.",NULL
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:
141    dw      .ExitMenuByItem
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
153.ExitMenuByItem:
154    CALL_MENU_LIBRARY Close
155.ExitMenuByMenuLibrary:
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:
171    ;CALL_MENU_LIBRARY RestartTimeout
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
229    mov     WORD [si+FILE_DIALOG_IO.fszItemBuffer], g_szBuffer
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
258    mov     bl, ATTRIBUTES_NOT_USED
259    mov     ax, BUFFER_OUTPUT_WITH_CHAR_ONLY
260    CALL_DISPLAY_LIBRARY SetCharOutputFunctionFromAXwithAttribFlagInBL
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:
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
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
413   
414    mov     al, COLOR_ATTRIBUTE(COLOR_BRIGHT_WHITE, COLOR_BLACK)
415    CALL_DISPLAY_LIBRARY SetCharacterAttributeFromAL
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:
500    db  "Integers -32768, -1, 0, 1, 65535:          %A|%6-d|%6-d|%6-d|%6-d|%6-u|",LF,CR,NULL
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:
514    db  "Hexadecimals CACAh, FFFFh, 0, 5A5Ah, A5A5h:%A|%6-x|%6-x|%6-x|%6-x|%6-x|",LF,CR,NULL
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
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]
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 ' '
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
589    mov     bx, 16
590.Loop:
591    lodsw
592    CALL_DISPLAY_LIBRARY PrintSignedWordFromAXWithBaseInBX
593    CALL_DISPLAY_LIBRARY PrintNewlineCharacters
594    loop    .Loop
595    ret
596
597
598.rgwItems:
599    dw      '['
600    dw      'n'
601    dw      '5'
602    dw      '.'
603    dw      ']'
604    dw      'a'
605    dw      'A'
606
607
608
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 "
620    db      "does, however, use newline characters. Lets change line right now!",LF,CR,
621    db      "Well did it work? Let's try line feed alone",LF,"Well? "
622    db      "Now two LFs:",LF,LF,"What happened? "
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? "
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. "
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.