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

Last change on this file since 425 was 376, checked in by gregli@…, 13 years ago

WIDE checkin... Added copyright and license information to sorce files, as per the GPL instructions for usage.

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