home *** CD-ROM | disk | FTP | other *** search
- include stdlib.a
- ;****************************************************************************
- ;
- ; T E S T S U I T E F O R
- ;
- ;
- ; R A N D Y H Y D E ' S S T A N D A R D
- ;
- ; L I B R A R Y F O R A S S E M B L Y
- ;
- ; L A N G U A G E P R O G R A M M E R S
- ;
- ;****************************************************************************
- ;
- ;
- ; Global variables go here:
- ;
- dseg segment para public 'data'
- i dw -4321
- pi dd i
- u dw 2345
- pu dd u
- l dd -1234567890
- pl dd l
- ul dd 987654321
- pul dd ul
- ;
- ps dd s
- s db "Printf string",0
- TestString0 db "This string gets printed by puts!",cr,lf,0
- TestString1 db "This string gets used by the STRxxx Routines",cr,lf,0
- TestString2 db "gets",0
- TestString3 db "Hello there",0
- TestString4 db "THIS STRING GETS USED BY THE STRXXX ROUTINES",cr,lf,0
- TestString5 db "all lower case",cr,lf,0
- TestString6 db "Clear out this string",0
- StringSet1 db "Tabcdefghijklmnopqrst ",0
- StringSet2 db "uvwxyz!",0
- InsStrSrc db "Insert This",0
- InsStrDest db "--><--",0
- RevStr1 db "012345",0
- RevStr2 db "0123456",0
- RevStr3 db "1",0
- RevStr4 db 0
- buffer db 256 dup (?)
- buffer2 db 256 dup (?)
- sfstr1 db "1 -1 1 65000 100000 -100000 1 4000000000 0abc x",0
- sfstr2 db "1, 2",0
- hex1 db "12ab",0
- int1 db "-12345",0
- int2 db "65000",0
- lint1 db "-2000000000",0
- lint2 db "4000000000",0
- i1 dw ?
- i2 dw ?
- u1 dw ?
- u2 dw ?
- l1 dd ?
- l2 dd ?
- ul1 dd ?
- ul2 dd ?
- h1 dw ?
- c1 db ?
- c2 db '!'
- MemAvail dw ?
- ;
- ; Allocate some character sets down here
- ;
- set charset, cs2, cs3, cs4
- ;
- dseg ends
- ;
- ;
- ;
- ;
- cseg segment para public 'code'
- assume cs:cseg, ds:dseg
- ;
- ;
- lesi macro adrs
- mov di, seg adrs
- mov es, di
- lea di, adrs
- endm
- ;
- ldxi macro adrs
- mov dx, seg adrs
- lea si, adrs
- endm
- ;
- ; Variables that wind up being used by the standard library routines.
- ; The MemInit routine uses "PSP" and "zzzzzzseg" labels. They must be
- ; present if you intend to use getenv, MemInit, malloc, and free.
- ;
- ;
- public PSP
- PSP dw ?
- ;
- cr equ 13
- lf equ 10
- ;
- ;
- ; Main is the main program. Program execution always begins here.
- ;
- Main proc
- mov cs:PSP, es ;Save pgm seg prefix
- mov ax, seg dseg ;Set up the segment registers
- mov ds, ax
- mov es, ax
- mov dx, 0 ;Allocate all available RAM.
- MemInit
- mov MemAvail, cx
- printf
- db "There are %x paragraphs of memory available."
- db cr,lf,lf,0
- dd MemAvail
- ;
- ;
- ;
- ;
- ;***************************************************************************
- ;
- ; Test the StrRev and StrRev2 routines here.
- ;
- print
- db "Testing StrRev:",cr,lf,0
- lesi RevStr1
- strrev
- puts
- putcr
- strrev
- puts
- putcr
- putcr
- ;
- lesi RevStr2
- strrev
- puts
- putcr
- strrev
- puts
- putcr
- putcr
- ;
- lesi RevStr3
- strrev
- puts
- putcr
- strrev
- puts
- putcr
- putcr
- ;
- lesi RevStr4
- strrev
- puts
- putcr
- strrev
- puts
- putcr
- ;
- ;
- print
- db "Testing StrRev2:",cr,lf,0
- lesi RevStr1
- strrev2
- puts
- putcr
- free
- ;
- lesi RevStr2
- strrev2
- puts
- putcr
- free
- ;
- lesi RevStr3
- strrev2
- puts
- putcr
- free
- ;
- lesi RevStr4
- strrev2
- puts
- putcr
- free
- putcr
- ;
- ;
- ;***************************************************************************
- ;
- ; Test the STRINS and STRDEL routines here.
- ;
- print
- db "Testing StrDel:",cr,lf,0
- ldxi buffer
- lesi InsStrDest
- strcpy
- mov ax, 2
- mov cx, ax
- strdel
- puts
- putcr
- ;
- ldxi buffer
- lesi InsStrDest
- strcpy
- mov ax, 20
- mov cx, 2
- strdel
- puts
- putcr
- ;
- print
- db "Testing StrDel2:",cr,lf,0
- lesi InsStrDest
- mov ax, 2
- mov cx, ax
- strdel2
- puts
- putcr
- free
- ;
- lesi InsStrDest
- mov ax, 20
- mov cx, 2
- strdel2
- puts
- putcr
- free
- ;
- print
- db "Testing StrInsl:",cr,lf,0
- ldxi buffer
- lesi InsStrDest
- strcpy
- ;
- mov cx, 3
- strinsl
- db "Hi there",0
- puts
- putcr
- ;
- print
- db "Testing StrIns2l:",cr,lf,0
- lesi InsStrDest
- mov cx, 3
- strins2l
- db "Ho ho ho!",0
- puts
- putcr
- free
- ;
- lesi InsStrDest
- mov cx, 100
- strins2l
- db "and a bottle of rum!",cr,lf,0
- puts
- putcr
- free
- ;
- print
- db "Testing STRINS2:",cr,lf,0
- lesi InsStrDest
- ldxi InsStrSrc
- mov cx, 3
- strins2
- jnc GoodStrins2
- print
- db "Could not allocate memory for StrIns2",cr,lf,0
- jmp short BadStrins2
- ;
- GoodStrins2: puts
- putcr
- free
- ;
- BadStrIns2: lesi InsStrDest
- ldxi InsStrSrc
- mov cx, 100
- strins2
- jnc GoodSI2
- print
- db "Strins2:memory allocation error",cr,lf,0
- jmp short BSI2
- ;
- GoodSI2: puts
- putcr
- free
- ;
- BSI2: print
- db "Testing STRINS:",cr,lf,0
- lesi InsStrDest
- ldxi InsStrSrc
- mov cx, 3
- strins
- puts
- putcr
- lesi InsStrDest
- ldxi InsStrSrc
- mov cx, 100
- strins
- puts
- putcr
- ;
- ;
- ;***************************************************************************
- ;
- ; Test the character set routines down here:
- ;
- print
- db "Testing RangeSet:",cr,lf,0
- mov al, 'A'
- mov ah, 'F'
- lesi CharSet
- rangeset
- print
- db "Chars in set: ",0
- call PrintSet
- ;
- print
- db cr,lf,lf,"Testing addstr, addstrl:",cr,lf,0
- lesi cs2
- ldxi StringSet2
- addstr
- addstrl
- db "aAbBcCdDeEfF",0
- print
- db "Chars in set: ",0
- call PrintSet
- ;
- print
- db cr,lf,lf,"Testing rmvstr, rmvstrl:",cr,lf,0
- lesi cs2
- ldxi StringSet2
- rmvstr
- rmvstrl
- db "ABCDEF",0
- print
- db "Chars in set: ",0
- call PrintSet
- ;
- print
- db cr,lf,lf,"Testing addchar/rmvchar:",cr,lf,0
- lesi cs2
- mov al, 'A'
- addchar
- mov al, 'a'
- rmvchar
- print
- db "Chars in set: ",0
- call PrintSet
- ;
- print
- db cr,lf,lf,"Testing emptyset:",cr,lf,0
- emptyset
- print
- db "Chars in set: ",0
- call PrintSet
- ;
- print
- db cr,lf,lf,"Testing member:",cr,lf,0
- addstrl
- db "ABCDEF",0
- mov al, 'A'
- member
- jne NotInSet1
- print
- db "A was not in the set",0
- jmp short NIS1
- ;
- NotInSet1: print
- db "A is in the set",0
- NIS1: putcr
- mov al, "G"
- member
- jne NotInSet2
- print
- db "G is not in the set",0
- jmp short NIS2
- ;
- NotInSet2: print
- db "G is in the set",0
- NIS2: putcr
- ;
- print
- db cr,lf,lf,"Testing copyset:",cr,lf,0
- mov dx, es
- mov si, di
- lesi cs3
- copyset
- print
- db "Value in cs3: ",0
- call Printset
- ;
- print
- db cr,lf,lf,"Testing unionset:",cr,lf,0
- addstrl
- db "ABCDEFuvwxyz",0
- ldxi cs2
- setunion
- print
- db "Chars in set: ",0
- call Printset
- ;
- print
- db cr,lf,lf,"Testing set difference",cr,lf,0
- ldxi cs2
- setdifference
- print
- db "Chars in set: ",0
- call PrintSet
- ;
- ;
- ;
- ;***************************************************************************
- ;
- ; Test the STRxxx routines here.
- ;
- ;
- ;*Strspan
- ;
- print
- db cr,lf,lf,"Testing strspan:",cr,lf,0
- ;
- lesi TestString1
- ldxi StringSet1
- strspan
- mov i1, cx
- printf
- db "TestString1 contains a character not found in "
- db "StringSet1 at position %d\n\n",0
- dd i1
- ;
- ;
- ;*Strspanl
- ;
- print
- db "Testing strspanl:",cr,lf,0
- ;
- lesi TestString1
- strspanl
- db "Tabcdefghijklmnopqrst ",0
- mov i1, cx
- printf
- db "TestString1 contains a character not found in "
- db "the set at position %d\n\n",0
- dd i1
- ;
- ;
- ;*Strcspan
- ;
- print
- db "Testing strcspan:",cr,lf,0
- ;
- lesi TestString1
- ldxi StringSet2
- strcspan
- mov i1, cx
- printf
- db "TestString1 contains a character found in "
- db "StringSet2 at position %d\n\n",0
- dd i1
- ;
- ;
- ;*Strcspanl
- ;
- print
- db "Testing strcspanl:",cr,lf,0
- ;
- lesi TestString1
- strcspanl
- db "uvwxyz!",0
- mov i1, cx
- printf
- db "TestString1 contains a character not found in "
- db "the set at position %d\n\n",0
- dd i1
- ;
- ;
- ;*Strset, Strset2
- ;
- print
- db "Testing Strset",cr,lf,0
- ;
- lesi TestString6
- mov al, '*'
- strset
- puts
- ;
- ;
- print
- db cr,lf,lf,"Testing StrSet2:",cr,lf,0
- mov cx, 32
- mov al, '#'
- strset2
- puts
- free
- putcr
- putcr
- ;
- ;
- ;*Strupr, Strupr2
- ;
- printf
- db "Testing Strupr:\n"
- db "Before: %s",0
- dd TestString5
- lesi TestString5
- strupr
- printf
- db "After: %s",0
- dd TestString5
- ;
- ;
- ;*Strlwr, Strlwr2
- ;
- printf
- db cr,lf,"Testing Strlwr:\n"
- db "Before: %s",0
- dd TestString5
- lesi TestString5
- strlwr
- printf
- db "After: %s",0
- dd TestString5
- ;
- ;
- ;
- ;*Strcmp, Strcmpl
- ;
- print
- db "Testing Strcmp",cr,lf,0
- ;
- lesi TestString1
- ldxi TestString1
- strcmp
- jne Sne1
- print
- db "TestString1 == TestString1",cr,lf,0
- jmp short s2
- ;
- Sne1: print
- db "TestString1 <> TestString1",cr,lf,0
- ;
- s2: ldxi TestString0
- strcmp
- jb IsBelow
- ja IsAbove
- printf
- db "'%s' is equal to '%s'\n",0
- dd TestString1, TestString0
- jmp short s3
- ;
- IsBelow: printf
- db "%s is less than \n%s\n",0
- dd TestString1, TestString0
- jmp short s3
- ;
- IsAbove: printf
- db "%s is greater than \n%s\n",0
- dd TestString1, TestString0
- ;
- S3:
- ;
- print
- db cr,lf,"Testing Strcmpl",cr,lf,0
- ;
- lesi TestString2
- strcmpl
- db "gets",0
- jne Sne1a
- print
- db "TestString2 == 'gets'",cr,lf,0
- jmp short s2a
- ;
- Sne1a: print
- db "TestString2 <> 'gets'",cr,lf,0
- ;
- s2a: lesi TestString2
- strcmpl
- db "itsa",0
- jb IsBelowa
- ja IsAbovea
- printf
- db "'%s' is equal to 'itsa'\n",0
- dd TestString2
- jmp short s3a
- ;
- IsBelowa: printf
- db "'%s' is less than 'itsa'\n",0
- dd TestString2
- jmp short s3a
- ;
- IsAbovea: printf
- db "'%s' is greater than 'itsa'\n",0
- dd TestString2
- ;
- S3a:
- ;
- ;
- ;*Stricmp, Stricmpl
- ;
- print
- db cr,lf,"Testing Stricmp",cr,lf,0
- ;
- lesi TestString1
- ldxi TestString4
- stricmp
- jne Sne1c
- print
- db "TestString1 == TestString4",cr,lf,0
- jmp short s2c
- ;
- Sne1c: print
- db "TestString1 <> TestString4",cr,lf,0
- ;
- s2c: lesi TestString1
- ldxi TestString4
- stricmp
- jb IsBelowc
- ja IsAbovec
- printf
- db "'%s' is equal to '%s'\n",0
- dd TestString1, TestString4
- jmp short s3c
- ;
- IsBelowc: printf
- db "'%s' is less than '%s'\n",0
- dd TestString1, TestString4
- jmp short s3c
- ;
- IsAbovec: printf
- db "'%s' is greater than '%s'\n",0
- dd TestString1, TestString4
- ;
- S3c:
- ;
- ;
- print
- db "Testing Stricmpl",cr,lf,0
- ;
- lesi TestString2
- stricmpl
- db "GETS",0
- jne Sne1d
- print
- db "TestString2 == 'gets'",cr,lf,0
- jmp short s2d
- ;
- Sne1d: print
- db "TestString2 <> 'gets'",cr,lf,0
- ;
- s2d: lesi TestString2
- strcmpl
- db "itsa",0
- jb IsBelowd
- ja IsAboved
- printf
- db "'%s' is equal to 'itsa'\n",0
- dd TestString2
- jmp short s3d
- ;
- IsBelowd: printf
- db "'%s' is less than 'itsa'\n",0
- dd TestString2
- jmp short s3d
- ;
- IsAboved: printf
- db "'%s' is greater than 'itsa'\n",0
- dd TestString2
- ;
- S3d:
- ;
- ;
- ;*Strcpy
- ;
- lesi TestString1
- ldxi Buffer
- strcpy
- puts
- ;
- ;*Strcpyl
- ;
- print
- db "Testing Strcpyl:",cr,lf,0
- ;
- ldxi Buffer
- strcpyl
- db "This is an strcpyl string",cr,lf,0
- puts
- ldxi Buffer2
- strcpy
- puts
- ;
- ;*Strdup
- ;
- lesi TestString1
- strdup
- puts
- free
- ;
- ;*Strdupl
- ;
- print
- db "Testing Strdupl:",cr,lf,0
- ;
- strdupl
- db "This string is for strdupl",cr,lf,0
- puts
- free
- ;
- ;*Strlen
- ;
- lesi s
- strlen
- mov i1, cx
- printf
- db "Length of string: '%s' is %d\n",0
- dd s, i1
- ;
- ;*Strcat
- ;
- print
- db "Testing strcat:",cr,lf,0
- ;
- lesi Buffer
- strcpyl
- db "Test String 1 --",0
- ldxi TestString1
- strcat
- puts
- ;
- ;*Strcatl
- ;
- print
- db "Testing strcatl:",cr,lf,0
- ;
- lesi Buffer
- strcpyl
- db "Strcatl test --",0
- strcatl
- db "More stuff for Strcatl",cr,lf,0
- puts
- ;
- ;*Strcat2
- ;
- print
- db "Testing strcat2:",cr,lf,0
- ;
- lesi TestString1
- ldxi TestString0
- strcat2
- puts
- free
- ;
- print
- db "Testing strcat2l:",cr,lf,0
- ;
- lesi TestString1
- strcat2l
- db "Appended string",cr,lf,0
- puts
- free
- ;
- ;*Strchar
- ;
- lesi TestString1
- mov al, 'a'
- StrChr
- pushf
- mov i1, cx
- printf
- db "Testing strchr:",cr,lf
- db "Searching for 'a' in '%s'\n"
- db "Found it at position %d\n",0
- dd TestString1, i1
- popf
- jnc FndIt1
- print
- db "Could not find character in string.",cr,lf,0
- ;
- FndIt1: lesi TestString1
- mov al, 'T'
- StrChr
- pushf
- mov i1, cx
- printf
- db "Testing strchr:",cr,lf
- db "Searching for 'T' in '%s'\n"
- db "Found it at position %d\n",0
- dd TestString1, i1
- popf
- jnc FndIt2
- print
- db "Could not find character in string.",cr,lf,0
- FndIt2:
- ;
- ;
- ;*Strstr
- ;
- print
- db "Testing strstr:",cr,lf,0
- ;
- lesi TestString1
- ldxi TestString2
- strstr
- jc NotFnd2
- mov i1, cx
- printf
- db "Found substring at position %i\n",0
- dd i1
- jmp short FndIt3
- ;
- NotFnd2: print
- db "Didn't find substring #1.",cr,lf,0
- ;
- FndIt3: ldxi TestString3
- strstr
- jc NotFnd3
- print
- db "Error, found a string which isn't present!",cr,lf,0
- ;
- NotFnd3:
- ;
- ;
- ;*Strstrl
- ;
- print
- db "Testing strstrl:",cr,lf,0
- ;
- lesi TestString1
- strstrl
- db "gets",0
- jc NotFnd2a
- mov i1, cx
- printf
- db "Found substring at position %i\n",0
- dd i1
- jmp short FndIt3a
- ;
- NotFnd2a: print
- db "Didn't find substring #1.",cr,lf,0
- ;
- FndIt3a: strstrl
- db "Hello There",0
- jc NotFnd3a
- print
- db "Error, found a string which isn't present!",cr,lf,0
- ;
- NotFnd3a:
- ;
- ;
- ;
- ;
- putcr
- putcr
- ;
- ;***************************************************************************
- ;
- ; Test IsAlNum, IsDigit, IsAlpha, IsLower, IsUpper, and IsxDigit here:
- ;
- print
- db "Testing IsAlNum, IsDigit, IsAlpha, IsLower, "
- db "IsUpper, and IsXDigit",cr,lf,0
- ;
- mov cx, 26
- mov al, 'Z'
- mov ah, 'z'
- TstAlphaLp: IsAlNum
- jne yALNumFail
- IsAlpha
- jne ALFail
- IsUpper
- jne UprFail
- cmp al, 'F'
- ja NotHex
- IsXDigit
- jne XFail
- ;
- NotHex: xchg al, ah
- IsAlNum
- yALNumFail: jne AlNumFail
- IsAlpha
- jne ALFail
- IsLower
- jne LwrFail
- cmp al, 'f'
- ja NotHex2
- IsXDigit
- jne XFail
- ;
- NotHex2: xchg al, ah
- dec al
- dec ah
- loop TstAlphaLp
- ;
- mov cx, 10
- mov al, '9'
- TstDigLp: IsDigit
- jne DigitFail
- IsAlNum
- jne AlNumFail
- IsXDigit
- jne XFail
- dec al
- loop TstDigLp
- jmp short TestBad
- ;
- ALNumFail: jmp short xALNumFail
- ALFail: jmp short xALFail
- UprFail: jmp xUprFail
- LwrFail: jmp xLwrFail
- XFail: jmp xXFail
- DigitFail: jmp xDigitFail
- ;
- TestBad: mov al, '1'
- IsAlpha
- je ALFail
- IsLower
- je LwrFail
- IsUpper
- je UprFail
- mov al, '!'
- IsDigit
- je DigitFail
- IsAlNum
- je AlNumFail
- IsXDigit
- je XFail
- jmp TestSPrintf
- ;
- xALNumFail: print
- db "IsALNum has failed",cr,lf,0
- jmp TestSPrintf
- ;
- xALFail: print
- db "IsAlpha has failed",cr,lf,0
- jmp short TestSPrintf
- ;
- xUprFail: print
- db "IsUpper has failed",cr,lf,0
- jmp short TestSPrintf
- ;
- xLwrFail: print
- db "IsLower has failed",cr,lf,0
- jmp short TestSPrintf
- ;
- xXFail: print
- db "IsXDigit has failed",cr,lf,0
- jmp short TestSPrintf
- ;
- xDigitFail: print
- db "IsDigit has failed",cr,lf,0
- ;
- ;***************************************************************************
- ;
- ; Testing sprintf and sbprintf here.
- ;
- TestSPrintf: sprintf
- db "I= %i, I='%10i', I=%^i",cr,lf
- db "U= %u",cr,lf,0
- dd i,i,pi,u
- puts
- free
- ;
- lesi Buffer
- sbprintf
- db "I= %i, I='%10i', I=%^i",cr,lf
- db "U= %u",cr,lf,0
- dd i,i,pi,u
- puts
- ;
- ;***************************************************************************
- ;
- ; Testing various ITOxx routines here.
- ;
- mov ax, -1234
- itoa
- print
- db "ITOA: -1234 is ",0
- puts
- putcr
- free ;Free allocated storage.
- ;
- ;-----
- ;
- mov ax, 43210
- utoa
- print
- db "UTOA: 43210 is ",0
- puts
- putcr
- free ;Free allocated storage.
- ;
- ;-----
- ;
- mov ax, 0ABCDh
- htoa
- print
- db "HTOA: 0cdh is ",0
- puts
- putcr
- free ;Free allocated storage.
- ;
- ;-----
- ;
- mov ax, 0ABCDh
- wtoa
- print
- db "WTOA: 0abcdh is ",0
- puts
- putcr
- free ;Free allocated storage.
- ;
- ;-----
- ;
- mov ax, -1234
- mov dx, 0ffffh
- ltoa
- print
- db "LTOA: -1234 is ",0
- puts
- putcr
- free
- ;
- ;-----
- ;
- mov ax, 1234
- mov dx, 0
- ultoa
- print
- db "ULTOA: 1234 is ",0
- puts
- putcr
- free
- ;
- ;
- ;***************************************************************************
- ;
- ; Testing memory management routines here:
- ;
- mov cx, 256
- malloc
- IsPtr
- jnc ValidPtr
- print
- db "This is not a valid ptr (1)",cr,lf,0
- jmp short x1
- ;
- ValidPtr: print
- db "Malloc returned a valid ptr",cr,lf,0
- ;
- x1: inc di
- IsPtr
- jc InvalidPtr
- print
- db "Incrementing a pointer didn't make it invalid",cr,lf,0
- jmp short x2
- ;
- InvalidPtr: print
- db "Incrementing a pointer makes it invalid",cr,lf,0
- ;
- x2: IsInHeap
- jc BadIsIn
- print
- db "Although incrementing it leaves it in the heap",cr,lf,0
- jmp short x3
- ;
- BadIsIn: print
- db "Incrementing the pointer moved it out of the heap"
- db cr,lf,0
- ;
- x3: dec di
- free
- jnc GoodFree
- print
- db "Free returned an error",cr,lf,0
- jmp short x4
- ;
- GoodFree: print
- db "FREE did its job.",cr,lf,0
- ;
- x4: mov cx, 512
- malloc
- mov cx, 256
- realloc
- jnc GoodRealloc
- print
- db "Realloc screwed up!",cr,lf,0
- jmp x5
- ;
- GoodRealloc: DupPtr
- free
- jnc GF1
- print
- db "Free choked after DupPtr",cr,lf,0
- jmp short x5
- ;
- GF1: free
- jnc GF2
- print
- db "Free choked after second call.",cr,lf,0
- jmp short x5
- ;
- GF2: free
- jc x5
- print
- db "Free DIDN'T return an error when it was "
- db "supposed to.",cr,lf,0
- ;
- x5:
- ;
- ;
- ;****************************************************************************
- ;
- ; Testing the ISIZE and LSIZE routines here:
- ;
- mov ax, -12345
- isize
- print
- db "Size of -12345 (isize) is ",0
- puti
- mov ax, 1234
- usize
- print
- db cr,lf,"Size of 1234 (usize) is ",0
- puti
- ;
- mov dx, 0ffffh
- mov ax, -12345
- lsize
- print
- db cr,lf,"Size of -12345 (lsize) is ",0
- puti
- mov ax, 1234
- xor dx, dx
- ulsize
- print
- db cr,lf,"Size of 1234 (ulsize) is ",0
- puti
- putcr
- ;
- ;****************************************************************************
- ;
- ; Test the "ATOxx" routines here.
- ;
- print
- db "Testing ATOH: ",0
- lesi hex1
- atoh
- putw
- mov al, ' '
- putc
- ;
- atoh2
- putw
- putcr
- ;
- print
- db "Testing ATOI: ",0
- lesi int1
- atoi
- puti
- mov al, ' '
- putc
- atoi2
- puti
- putcr
- ;
- print
- db "Testing ATOU: ",0
- lesi int2
- atou
- putu
- mov al, ' '
- putc
- atou2
- putu
- putcr
- ;
- print
- db "Testing ATOL: ",0
- lesi lint1
- atol
- putl
- mov al, ' '
- putc
- atol2
- putl
- putcr
- ;
- print
- db "Testing ATOUL: ",0
- lesi lint2
- atoul
- putul
- mov al, ' '
- putc
- atoul2
- putul
- putcr
- ;
- ;
- ;****************************************************************************
- ;
- ; Test SCANF here:
- ;
- printf
- db "Enter some text: ",0
- scanf
- db "%s",0
- dd buffer
- print
- db "You entered: ",0
- lesi buffer
- puts
- putcr
- ;
- ; Test SSCANF here:
- ;
- printf
- db "Before, c1=%c, c2=%c\n",0
- dd c1,c2
- ;
- lesi sfstr1
- sscanf
- db "%i %d %u %u %ld %li %lu %lu %x %c",0
- dd i1,i2,u1,u2,l1,l2,ul1,ul2,h1,c1
- ;
- printf
- db "Values input by sscanf:\n"
- db "i1=%d, i2=%d\n"
- db "u1=%u, u2=%u\n"
- db "l1=%ld, l2=%ld\n"
- db "ul1=%lu, ul2=%lu\n"
- db "h1=%x\n"
- db "c1=%c, c2=%c\n"
- db 0
- dd i1,i2,u1,u2,l1,l2,ul1,ul2,h1,c1,c2
- ;
- ;
- print
- db "Testing scanf character skipping:",cr,lf,0
- lesi sfstr2
- sscanf
- db "%i, %i",0
- dd i1,i2
- printf
- db "i1=%i, i2=%i\n",0
- dd i1, i2
- ;
- ;
- ;****************************************************************************
- ;
- ;
- ;
- ; Testing the PUTC routines here.
- ;
- ; The following code should print:
- ;
- ; aaa
- ; aaa
- ; aaa
- ; aaaaaaaa
- ;
- ; aaaa
- ; aaaaaaaa
- ;
- ; aaaa
- ;
- ;
- mov al, 'a'
- putc
- putc
- putc
- ;
- putcr
- ;
- putcstdout
- putcstdout
- putcstdout
- putcr
- ;
- putcbios
- putcbios
- putcbios
- putcr
- ;
- mov di, cs
- mov es, di
- lea di, dblchars
- setoutadrs
- ;
- putc
- putc
- putc
- putc
- putcr
- ;
- getoutadrs
- cmp di, offset dblchars
- jne badtest
- mov di, es
- cmp di, seg dblchars
- jne badtest
- ;
- mov di, seg sl_putcstdout
- mov es, di
- lea di, sl_putcstdout
- pushoutadrs
- putc
- putc
- putc
- putc
- putcr
- ;
- popoutadrs
- putc
- putc
- putc
- putc
- putcr
- popoutadrs
- cmp di, offset dblchars
- jne badtest
- mov di, es
- cmp di, seg dblchars
- jne badtest
- ;
- putc
- putc
- putc
- putc
- putcr
- jmp short goodtest
- ;
- badtest: print
- db "GetOutAdrs or PopOutAdrs did not return "
- db "the proper address",cr,lf,0
- ;
- GoodTest:
- ;
- ;
- ;****************************************************************************
- ;
- ; Test the remaining print routines here
- ;
- print
- db "This is a test of the print routine",cr,lf,0
- ;
- print
- db 0
- ;
- print
- db "So is this!",cr,lf,0
- ;
- lesi TestString0
- puts
- ;
- print
- db "Hex value 0xfa output by PutH: ",0
- mov al, 0fah
- puth
- ;
- print
- db cr,lf,"Hex value 0xfa12 output by PutW: ",0
- mov ax, 0fa12h
- putw
- ;
- print
- db cr,lf,"Decimal value 0xffff output by puti: ",0
- mov ax, 0ffffh
- puti
- print
- db cr,lf,"Decimal value 1 output by puti: ",0
- mov ax, 1
- puti
- ;
- print
- db cr,lf,"Unsigned value 0ffffh output by putu: ",0
- mov ax, 0ffffh
- putu
- print
- db cr,lf,"Unsigned value 1 output by putu: ",0
- mov ax, 1
- putu
- ;
- print
- db cr,lf,"Long value 0ffff1234 output by putL: ",0
- mov ax, 1234h
- mov dx, 0ffffh
- putl
- print
- db cr,lf,"Long value 01234ffff output by putL: ",0
- mov dx, 1234h
- mov ax, 0ffffh
- putl
- ;
- print
- db cr,lf,"Unsigned long value 1234ffff output by "
- db "putUL: ",0
- putul
- print
- db cr,lf,"Unsigned long value 0ffff1234 output by "
- db "putUL: ",0
- mov dx, 0ffffh
- mov ax, 1234h
- putUL
- putcr
- ;
- mov cx, 10
- islp1: print
- db "Outputting -2567 using a field width of ",0
- mov ax, cx
- puti
- print
- db " **",0
- mov ax, -2567
- putisize
- print
- db "** w/PutISize",cr,lf,0
- loop islp1
- ;
- mov cx, 10
- islp2: print
- db "Outputting -2567 using a field width of ",0
- mov ax, cx
- puti
- print
- db " **",0
- mov ax, -2567
- putusize
- print
- db "** w/PutUSize",cr,lf,0
- loop islp2
- ;
- mov cx, 10
- islp3: print
- db "Outputting -2567 using a field width of ",0
- mov ax, cx
- puti
- print
- db " **",0
- mov ax, -2567
- mov dx, 0ffffh
- putlsize
- print
- db "** w/PutLSize",cr,lf,0
- loop islp3
- print
- db "Outputting 0ff001234h using PutLSize: ",0
- mov dx, 0ff00h
- mov ax, 1234h
- mov cx, 10
- PutLSize
- putcr
- ;
- mov cx, 10
- islp4: print
- db "Outputting -2567 using a field width of ",0
- mov ax, cx
- puti
- print
- db " **",0
- mov ax, -2567
- mov dx, 0ffffh
- putulsize
- print
- db "** w/PutULSize",cr,lf,0
- loop islp4
- print
- db "Outputting 0ff001234h using PutULSize: ",0
- mov dx, 0ff00h
- mov ax, 1234h
- mov cx, 10
- PutULSize
- putcr
- ;
- ;****************************************************************************
- ;
- ; Testing the PRINTF routine:
- ;
- printf
- db "This is a test of the printf routine w/o any "
- db "operands.\n"
- db "It tests the esc characters \\n, \\r, \\b, \\t, "
- db "\0x0d, and \\\\.\n"
- db "Test of \\r:\n"
- db "Old line.\rNew line.\n"
- db "Test of \t\ttab.\n"
- db "Test of backspace\b\b\b\b\bs p a c e\n"
- db "Test of return using \\0x0d:\n"
- db "Old line.\0x0dNew line.\n\n",0
- ;
- printf
- db cr,lf
- db "Test of integer output formats (using I):\n"
- db "\%d\t\t-\t*%d*\n"
- db "\%10d\t\t-\t*%10d*\n"
- db "\%-10d\t\t-\t*%-10d*\n"
- db "\%\\*10d\t\t-\t*%\*10d*\n"
- db "\%\-\\*10d\t\t-\t*%-\*10d*\n"
- db "\%^d\t\t-\t*%^d*\n"
- db "\%10^d\t\t-\t*%10^d*\n"
- db "\%-10^d\t\t-\t*%-10^d*\n"
- db "\%\\*10^d\t\t-\t*%\*10^d*\n"
- db "\%\-\\*10^d\t-\t*%-\*10^d*\n"
- db 0
- dd i,i,i,i,i,pi,pi,pi,pi,pi
- ;
- printf
- db cr,lf
- db "Test of unsigned integer output formats (using U):\n"
- db "\%u\t\t-\t*%u*\n"
- db "\%10u\t\t-\t*%10u*\n"
- db "\%-10u\t\t-\t*%-10u*\n"
- db "\%\\*10u\t\t-\t*%\*10u*\n"
- db "\%\-\\*10u\t\t-\t*%-\*10u*\n"
- db "\%^u\t\t-\t*%^u*\n"
- db "\%10^u\t\t-\t*%10^u*\n"
- db "\%-10^u\t\t-\t*%-10^u*\n"
- db "\%\\*10^u\t\t-\t*%\*10^u*\n"
- db "\%\-\\*10^u\t-\t*%-\*10^u*\n"
- db 0
- dd u,u,u,u,u,pu,pu,pu,pu,pu
- ;
- printf
- db cr,lf
- db "Test of unsigned long output formats (using UL):\n"
- db "\%ul\t\t-\t*%lu*\n"
- db "\%15lu\t\t-\t*%15lu*\n"
- db "\%-15lu\t\t-\t*%-15lu*\n"
- db "\%\\*15lu\t\t-\t*%\*15lu*\n"
- db "\%\-\\*15lu\t-\t*%-\*15lu*\n"
- db "\%^lu\t\t-\t*%^lu*\n"
- db "\%15^lu\t\t-\t*%15^lu*\n"
- db "\%-15^lu\t\t-\t*%-15^lu*\n"
- db "\%\\*15^lu\t-\t*%\*15^lu*\n"
- db "\%\-\\*15^lu\t-\t*%-\*15^lu*\n"
- db 0
- dd ul,ul,ul,ul,ul,pul,pul,pul,pul,pul
- ;
- printf
- db cr,lf
- db "Test of long output formats (using L):\n"
- db "\%ld\t\t-\t*%ld*\n"
- db "\%15ld\t\t-\t*%15ld*\n"
- db "\%-15ld\t\t-\t*%-15ld*\n"
- db "\%\\*15ld\t\t-\t*%\*15ld*\n"
- db "\%\-\\*15ld\t-\t*%-\*1ld*\n"
- db "\%^ld\t\t-\t*%^ld*\n"
- db "\%15^ld\t\t-\t*%15^ld*\n"
- db "\%-15^ld\t\t-\t*%-15^ld*\n"
- db "\%\\*15^ld\t-\t*%\*15^ld*\n"
- db "\%\-\\*15^ld\t-\t*%-\*15^ld*\n"
- db 0
- dd l,l,l,l,l,pl,pl,pl,pl,pl
- ;
- printf
- db cr,lf
- db "Test of hexadecimal output (byte) using I:\n"
- db "\%h\t\t-\t*%h*\n"
- db "\%5h\t\t-\t*%5h*\n"
- db "\%-5h\t\t-\t*%-5h*\n"
- db "\%\\*5h\t\t-\t*%\*5h*\n"
- db "\%\-\\*5h\t\t-\t*%-\*5h*\n"
- db "\%^h\t\t-\t*%^h*\n"
- db "\%5^h\t\t-\t*%5^h*\n"
- db "\%-5^h\t\t-\t*%-5^h*\n"
- db "\%\\*5^h\t\t-\t*%\*5^h*\n"
- db "\%\-\\*5^h\t\t-\t*%-\*5^h*\n"
- db 0
- dd i,i,i,i,i,pi,pi,pi,pi,pi
- ;
- printf
- db cr,lf
- db "Test of hexadecimal output (word) using I:\n"
- db "\%x\t\t-\t*%x*\n"
- db "\%5x\t\t-\t*%5x*\n"
- db "\%-5x\t\t-\t*%-5x*\n"
- db "\%\\*5x\t\t-\t*%\*5x*\n"
- db "\%\-\\*5x\t\t-\t*%-\*5x*\n"
- db "\%^x\t\t-\t*%^x*\n"
- db "\%5^x\t\t-\t*%5^x*\n"
- db "\%-5^x\t\t-\t*%-5^x*\n"
- db "\%\\*5^x\t\t-\t*%\*5^x*\n"
- db "\%\-\\*5^x\t\t-\t*%-\*5^x*\n"
- db 0
- dd i,i,i,i,i,pi,pi,pi,pi,pi
- ;
- printf
- db cr,lf
- db "Test of hexadecimal output (long) using UL:\n"
- db "\%lx\t\t-\t*%lx*\n"
- db "\%15lx\t\t-\t*%15lx*\n"
- db "\%-15lx\t\t-\t*%-15lx*\n"
- db "\%\\*15lx\t\t-\t*%\*15lx*\n"
- db "\%\-\\*15lx\t-\t*%-\*15lx*\n"
- db "\%^lx\t\t-\t*%^lx*\n"
- db "\%15^lx\t\t-\t*%15^lx*\n"
- db "\%-15^lx\t\t-\t*%-15^lx*\n"
- db "\%\\*15^lx\t-\t*%\*15^lx*\n"
- db "\%\-\\*15^lx\t-\t*%-\*15^lx*\n"
- db 0
- dd ul,ul,ul,ul,ul,pul,pul,pul,pul,pul
- ;
- printf
- db cr,lf
- db "Test of character output using S:\n"
- db "\%c\t\t-\t*%c*\n"
- db "\%5c\t\t-\t*%5c*\n"
- db "\%-5c\t\t-\t*%-5c*\n"
- db "\%\\*5c\t\t-\t*%\*5c*\n"
- db "\%\-\\*5c\t\t-\t*%-\*5c*\n"
- db "\%^c\t\t-\t*%^c*\n"
- db "\%5^c\t\t-\t*%5^c*\n"
- db "\%-5^c\t\t-\t*%-5^c*\n"
- db "\%\\*5^c\t\t-\t*%\*5^c*\n"
- db "\%\-\\*5^c\t\t-\t*%-\*5^c*\n"
- db 0
- dd s,s,s,s,s,ps,ps,ps,ps,ps
- ;
- printf
- db cr,lf
- db "Test of string output using s:\n"
- db "\%s\t\t-\t*%s*\n"
- db "\%15s\t\t-\t*%15s*\n"
- db "\%-15s\t\t-\t*%-15s*\n"
- db "\%\\*15s\t\t-\t*%\*15s*\n"
- db "\%\-\\*15s\t\t-\t*%-\*15s*\n"
- db "\%^s\t\t-\t*%^s*\n"
- db "\%15^s\t\t-\t*%15^s*\n"
- db "\%-15^s\t\t-\t*%-15^s*\n"
- db "\%\\*15^s\t\t-\t*%\*15^s*\n"
- db "\%\-\\*15^s\t-\t*%-\*15^s*\n"
- db 0
- dd s,s,s,s,s,ps,ps,ps,ps,ps
- ;
- ;****************************************************************************
- ;
- ; Test the input routines here.
- ;
- print
- db "Testing GETC- Press any key: ",0
- getc
- print
- db cr,lf,"You pressed: '",0
- putc
- print
- db "' : ",0
- putw
- print
- db cr,lf,"Testing GetcStdIn- Press any key:",0
- GetcStdIn
- print
- db cr,lf,"You pressed: '",0
- putc
- print
- db "' : ",0
- putw
- print
- db cr,lf,"Testing GetcBIOS- Press any key:",0
- getcBIOS
- print
- db cr,lf,"You pressed: '",0
- putc
- print
- db "' : ",0
- putw
- ;
- print
- db cr,lf,"Redirecting input, reading: ",0
- lesi ReturnA
- SetInAdrs
- getc
- print
- db cr,lf,"Getc returned: '",0
- putc
- print
- db "' : ",0
- putw
- print
- db cr,lf,"Pushing address, changing to 'B': ",0
- lesi ReturnB
- PushInAdrs
- getc
- print
- db cr,lf,"Getc returned: '",0
- putc
- print
- db "' : ",0
- putw
- print
- db cr,lf,"Popping address: ",0
- PopInAdrs
- cmp di, offset ReturnB
- jne BadPopIn
- mov di, es
- cmp di, seg ReturnB
- je GoodPopIn
- BadPopIn: print
- db cr,lf,"Did not return the proper address",cr,lf,0
- GoodPopIn: print
- db cr,lf,"Popping address again, should read from kbd: "
- db 0
- PopInAdrs
- getc
- print
- db cr,lf,"Getc returned: '",0
- putc
- print
- db "' : ",0
- putw
- putcr
- ;
- ;****************************************************************************
- ;
- ; Test GETS here:
- ;
- print
- db "Testing GETS, enter a line of text: ",0
- gets
- jnc goodgets
- print
- db "Bad gets call",cr,lf,0
- ;
- goodgets: print
- db "You entered: ",0
- puts
- putcr
- ;
- ;
- ;***************************************************************************
- ;
- ;
- ;
- Quit: mov ah, 4ch
- int 21h
- ;
- ;
- Main endp
- ;
- ;
- dblchars proc far
- putcstdout
- putcstdout
- ret
- dblchars endp
- ;
- ;
- ReturnA proc far
- mov ax, "A"
- ret
- ReturnA endp
- ;
- ReturnB proc far
- mov ax, "B"
- ret
- ReturnB endp
- ;
- ;
- ; Printset- Prints the characters in the set passed in es:di
- ;
- PrintSet proc
- push es
- push ds
- push di
- push si
- push dx
- push ax
- ;
- mov dx, es ;dx:si := es:di
- mov si, di
- ;
- createsets
- copyset
- PrLoop: rmvitem
- cmp al, 0
- jz PrDone
- putc
- jmp PrLoop
- ;
- PrDone: free
- pop ax
- pop dx
- pop si
- pop di
- pop ds
- pop es
- ret
- PrintSet endp
- ;
- ;
- cseg ends
- ;
- ;
- ; Allocate a reasonable amount of space for the stack (2k).
- ;
- sseg segment para stack 'stack'
- stk db 256 dup ("stack ")
- sseg ends
- ;
- ;
- ;
- ; zzzzzzseg must be the last segment that gets loaded into memory!
- ;
- zzzzzzseg segment para public 'zzzzzz'
- LastBytes db 16 dup (?)
- heap db 1024 dup (?)
- zzzzzzseg ends
- end Main
-