home *** CD-ROM | disk | FTP | other *** search
- stdlib segment para public 'slcode'
- assume cs:stdlib
- extrn sl_malloc:far
- ;
- ;
- ; strdupl- Copies string pointed at by cs:rtnadrs to heap and returns a
- ; pointer to this new string in es:di.
- ;
- ;
- ; inputs:
- ; cs:rtn- Zero-terminated source string.
- ; outputs:
- ; es:di- Points at destination string on heap.
- ;
- ;
- ;
- public sl_strdupl
- ;
- rtnadrs equ 2[bp]
- ;
- sl_strdupl proc far
- push bp
- mov bp, sp
- push ds
- push cx
- push ax
- pushf
- push si
- ;
- cld
- mov al, 0
- mov cx, 0ffffh
- les di, rtnadrs
- repne scasb
- lds si, rtnadrs
- mov rtnadrs, di
- neg cx
- dec cx
- ;
- ; Allocate some storage for the string.
- ;
- push cx ;Save for later
- call sl_malloc
- pop cx
- jc BadStrDupl
- ;
- push es ;Save ptr to string
- push di
- ;
- ; Copy the string to the new space on the heap.
- ;
- shr cx, 1
- jnc CpyWrd
- lodsb
- stosb
- CpyWrd: rep movsw
- pop di ;Restore pointer to string.
- pop es
- ;
- DidByte: pop si
- popf
- pop ax
- pop cx
- pop ds
- pop bp
- clc
- ret
- ;
- BadStrDupl: pop si
- popf
- pop ax
- pop cx
- pop ds
- pop bp
- stc
- ret
- sl_strdupl endp
- ;
- ;
- stdlib ends
- end
-