home *** CD-ROM | disk | FTP | other *** search
- ;
- stdlib segment para public 'slcode'
- assume cs:stdlib
- extrn sl_malloc:far
- ;
- ; Local variables for these routines:
- ;
- astr db 8 dup (?)
- aindex dw 0
- ;
- ; ITOA- Converts the signed integer value in AX to a string of characters.
- ; Returns a pointer to the string in ES:DI.
- ; Carry indicates error (set if insufficient room in heap).
- ;
- public sl_itoa
- sl_itoa proc far
- push ax bx cx dx
- mov cs:aindex, 0
- cmp ax, 0
- jge Doit
- push ax
- mov al, '-'
- call PutIt
- pop ax
- neg ax
- ;
- DoIt: call puti2
- ;
- ; Move the digit string out onto the heap and return a pointer to it in
- ; es:di.
- ;
- mov cx, cs:aindex
- mov bx, cx ;Save for later.
- inc cx
- call sl_malloc ;Allocate storage for string.
- jc BadITOA
- CopyStrLp: mov al, cs:astr[bx]
- mov es:[di][bx], al
- dec bx
- jns CopyStrLp
- clc
- pop dx cx bx ax
- ret
- ;
- BadITOA: stc
- pop dx cx bx ax
- ret
- sl_itoa endp
- ;
- ;
- ; UTOA- Converts the unsigned integer value in AX to a string of digits
- ; and returns a pointer to this string in ES:DI.
- ; Carry=0 if no error, 1 if insufficient room on heap.
- ;
- public sl_utoa
- sl_utoa proc far
- push ax bx cx dx
- mov cs:aindex, 0
- call PutI2
- ;
- ; Move the digit string out onto the heap and return a pointer to it in
- ; es:si.
- ;
- mov cx, cs:aindex
- mov bx, cx ;Save for later.
- inc cx
- call sl_malloc ;Allocate storage for string.
- jc BadUTOA
- CopyStrLp2: mov al, cs:astr[bx]
- mov es:[di][bx], al
- dec bx
- jns CopyStrLp2
- clc
- pop dx cx bx ax
- ret
- ;
- BadUTOA: stc
- pop dx cx bx ax
- ret
- sl_utoa endp
- ;
- ; PutI2- Recursive routine to actually print the value in AX as an integer.
- ;
- Puti2 proc near
- mov bx, 10
- xor dx, dx
- div bx
- or ax, ax ;See if ax=0
- jz Done
- push dx
- call Puti2
- pop dx
- Done: mov al, dl
- or al, '0'
- call PutIt
- ret
- PutI2 endp
- ;
- ;
- ; PutIt- Writes the character in AL to the "astr" buffer. Also zero
- ; terminates the string and increments aindex. Note: no need to preserve
- ; DI here because no one else uses it.
- ;
- PutIt proc near
- mov di, cs:aindex
- mov cs:astr[di], al
- mov byte ptr cs:astr+1[di], 0
- inc cs:aindex
- ret
- PutIt endp
- stdlib ends
- end
-