Category : Assembly Language Source Code
Archive   : RHSTDLIB.ZIP
Filename : GETS.ASM
assume cs:stdlib
;
extrn sl_malloc:far, sl_realloc:far
extrn sl_putc:far, sl_getc:far
;
;
; GETS- Reads a line of text from the user and returns a pointer to the
; string read. Returns the pointer in ES:DI. Carry=0 if no error,
; 1 if heap overflow.
;
; The returned string is zero terminated and does not include the
; carriage return (ENTER) key code.
;
; Note: This routine always allocates 256 bytes when you call
; it.
;
;
;
;
public sl_gets
sl_gets proc far
push ax
push bx
push cx
pushf
;
; Allocate storage for return string:
;
mov cx, 256
call sl_malloc
jc BadGETS
;
; Read data from keyboard until the user hits the enter key.
;
xor bx, bx
RdKbdLp: call sl_getc
cmp al, 08 ;Backspace
jne NotBS
or bx, bx ;Don't do it if at
jz RdKbdLp ; beginning of line.
dec bx
call sl_putc
jmp RdKbdLp
;
NotBS: cmp al, 13 ;See if ENTER.
jnz NotCR
call sl_putc
mov al, 0ah
call sl_putc
mov byte ptr es:[bx][di], 0
inc bx
jmp GetsDone
;
NotCR: cmp al, 1bh ;ESC
jne NotESC
mov al, 8
EraseLn: call sl_putc
dec bx
jne EraseLn
jmp RdKbdLp
;
NotESC: mov es:[bx][di], al
call sl_putc
inc bx
cmp bx, 255
jb RdKbdLp
mov al, 7 ;Bell
call sl_putc
dec bx
jmp RdKbdLp
;
; Deallocate any left over storage:
;
GetsDone: mov cx, bx
call sl_realloc
popf
clc
pop cx
pop bx
pop ax
ret
;
BadGETS: popf
stc
pop cx
pop bx
pop ax
ret
sl_gets endp
stdlib ends
end
Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!
This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.
But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/