; PROGRAMMED BY   : MOHAMMAD ALJADA
; DOWNLOADED FROM : WWW.GEOCITIES.COM/MOHJADA
; PROGRAM         : Print Text On Two Lines

page 60,132
title a09ctrnm (exe) accept names,center on screen
;----------------------------------------------------
.model small
.stack 64
;----------------------------------------------------
.data
a               dw      0
a1              dw      0
parlist         label   byte
maxnlen         db      20
actulen         db      ?
kbname          db      21 DUP(' ')
kbname1         db      21 DUP(' ')
kbname2         db      21 DUP(' '),'$'
prompt          db      'name?','$'
;----------------------------------------------------
.code
.386

a10main         proc far
        mov ax,@data
        mov ds,ax
        mov es,ax
        call q10clr
a20loop:
        mov dx,0000
        call q20curs
        call b10prmpt
        call c10inpt
        call q10clr
        cmp actulen,00
        je a30
        call d10code
        call e10cent
        jmp a20loop
a30:
        mov ah,4ch
        int 21h
a10main endp


;display prompt
;--------------
b10prmpt        proc near
        mov ah,09h
        lea dx,prompt
        int 21h
        ret
b10prmpt endp

;accept input of name
;--------------------
c10inpt         proc near
        mov ah,0ah
        lea dx,parlist
        int 21h
        ret
c10inpt endp

;set bell and '$' delimiter
;--------------------------
d10code         proc near
        movzx bx,actulen
        mov kbname[bx],07
        mov kbname[bx+1],'$'
        ret
d10code endp

;center and display name
;-----------------------
e10cent         proc near
        mov dl,actulen
        shr dl,1
        neg dl
        add dl,40
        mov dh,12
        call q20curs

        mov cx,0000
        mov cl,actulen
        shr cx,1
        mov a,cx
        lea di,kbname
        add di,a
        mov a,di
        lea si,kbname
        lea di,kbname1
        l1:
        mov cl,[si]
        mov [di],cl
        inc si
        inc di
        cmp si,a
        jne l1

        
        mov ah,09h
        lea dx,kbname1
        int 21h


        mov dl,actulen
        shr dl,1
        neg dl
        add dl,40
        mov dh,13
        call q20curs

        mov cx,0000
        mov cl,actulen
        mov a1,cx
        lea di,kbname
        add a1,di


        lea di,kbname2

        l2:
        mov cl,[si]
        mov [di],cl
        inc si
        inc di
        cmp si,a1
        jne l2


        mov ah,09h
        lea dx,kbname2
        int 21h
        ret
e10cent endp

;clear screen
;------------
q10clr          proc near
        mov ax,0600h
        mov bh,30
        mov cx,0000
        mov dx,184fh
        int 10h
        ret
q10clr endp

;set cursor row-column
;---------------------
q20curs         proc near
        mov ah,02h
        mov bh,00
        int 10h
        ret
q20curs endp

end a10main

        

