Assembly Language Help (alang.hlp) (Table of Contents; Topic list)
Important Notice
The pages on this site contain documentation for very old MS-DOS software, purely for historical purposes. If you're looking for up-to-date documentation, particularly for programming, you should not rely on the information found here, as it will be woefully out of date.
GetStr
 Map                                       Up Contents Index Back
────────────────────────────────────────────────────────────────────────────
 
;* GetStr - Gets a string of up to 128 characters from the user. Since
;* this function uses the DOS input mechanism, it can use the DOS editing
;* keys or the keys of a DOS command-line editor if one is loaded.
;*
;* Shows:   DOS Function - 0Ah (Buffered Keyboard Input)
;*          Directive    - EQU
;*
;* Params:  Strbuf - Pointer to area where input string will be placed
;*          Maxlen - Maximum length (up to 128 characters) of string
;*
;* Return:  0 if successful, 1 if error (Maxlen is too long)
 
        .DATA
MAXSTR  EQU     128
max     BYTE    MAXSTR
actual  BYTE    ?
string  BYTE    MAXSTR DUP (?)
 
        .CODE
GetStr  PROC USES si di,
        Strbuf:PBYTE,
        Maxlen:WORD
 
        mov     ax, 1                   ; Assume error
        mov     cx, Maxlen              ; Copy length to register
 
        .IF (cx != 0) && (cx <= MAXSTR) ; Error if 0 or too long
        mov     max, cl                 ; Load maximum length
        mov     ah, 0Ah                 ; Request DOS Function 0Ah
        mov     dx, OFFSET max          ; Load offset of string
        int     21h                     ; Buffered Keyboard Input
 
        mov     bl, actual              ; Put number of characters read
        sub     bh, bh                  ;   in BX
        mov     string[bx], 0           ; Null-terminate string
        mov     cx, bx                  ; Put count in CX
        inc     cx                      ; Plus one for the null terminator
 
        LoadPtr es, di, Strbuf          ; ES:DI points to destination buffer
        mov     si, OFFSET string       ; DS:SI points to source string
        rep     movsb                   ; Copy source to destination
        sub     ax, ax                  ; Return 0 for success
        .ENDIF
 
        ret
 
GetStr  ENDP
 
        END
                                    -♦-