Project on phonebook
.Model small
.Data
msg1 db 10, 13, ' -----------------------------------------------------------', 10, 13
db 10, 13, ' PHONEBOOK' ,10,13
db 10, 13, ' -----------------------------------------------------------', 10, 13
db ' $'
msg2 db 10, 13, 10, 13, ' Enter Name: $'
msg3 db 10, 13, 10, 13, ' Enter Contact Name : $'
msg15 db 10, 13, 10, 13, ' Access denied!$'
msg17 db 10, 13, 10, 13, ' Contact Deleted.$'
msg24 db '*.', 0
msg14 db 10, 13, 10, 13, 'No Contacts!$',10,13,10,13
msg16 db 10, 13, 10, 13, 'Contact created.$'
msg35 db 10, 13, 10, 13, ' Sorry Contact Not Match !!$'
msg36 db 10, 13, 10, 13, ' C.Call E.Edit D.Delete $'
msg37 db 10, 13, 'Calling...'
db 10, 13, 'Press any key to End Call$'
msg26 db 10, 13, '$'
msg27 db 10, 13, 'Press any key to continue$',10,13
msg28 db 10, 13, 10, 13, ' Enter Number (Press Esc to stop):$'
msg31 db '$'
msg6 db 10, 13, 10, 13, ' Number : $'
msg21 db 10, 13, 10, 13, ' Sorry Contact Not Match !!$'
msg30 db 10, 13, 10, 13, ' Search Name : $'
buffer1 db 80, 0, 80 dup(0)
buffer2 db 80, 0, 80 dup(0)
msg32 db 10, 13, 'A.Add S.Search $' ,10 , 13
.Code
start :
mov ax, @Data
mov ds, ax
begin :
mov ax, 3h ; clear screen by
int 10h ; changing video mode
call disp2
option:
lea dx,msg32
call disp1
call readch ; read choice
and al, 0fh
cmp al, 1 ; branch to appropriate
jnz a ; module depending on
jmp cr_file ; the choice
a : cmp al, 3
jz vw_file
mov ax, 4c00h ; exit program
int 21h
cr_file:lea dx, msg2 ; module for creating a file
call disp1
call read1 ; read name of file to be
lea dx, buffer1[2] ; created
mov cx, 0
mov ah, 3ch ; create the file
int 21h
push ax ; push file handle onto stack.
lea dx, msg28 ; ask if data is to
call disp1 ; be input
call readch ; read choice
and al, 0fh
cmp al, 9 ; if choice = 'Y' or 'y'
jnz no
lea dx, msg29
call disp1
pop bx ; retrieve file handle from stack.
mov buffer1[1], 0
write : call readch ; read data character by character.
mov buffer1[0], al
cmp buffer1[0], 27 ; check if character is 'Esc'(stop).
jz no
cmp buffer1[0], 0dh
jne neol
lea dx, msg26
call disp1
mov si, dx
mov byte ptr ds:[si + 2], 0
mov cx, 3
jmp com
neol : mov cx, 1
lea dx, buffer1[0]
com : mov ah, 40h ; write to the file
int 21h
mov byte ptr ds:[si + 2], '$'
jmp write
no : lea dx, msg16 ; creation successful
call disp1
call readch
jmp begin
vw_file:lea dx, msg30 ; module to view the
call disp1 ; contents of a file
call read1 ; read name of file
lea dx, msg6
call disp1
call disp1
lea dx, buffer1[2] ; open the file
mov ax, 3d02h
int 21h
mov buffer2[0], 0
cmp ax, 2 ; error if file not found
jnz v_err
lea dx, msg14
call disp1
jmp endv
v_err : cmp ax, 3 ; error if path not found
jnz cont2
;jnz push
lea dx, msg21
call disp1
jmp endv
cont2 : mov bx, ax
push ax
mov cx, 1
lea dx, buffer1
mov ah, 3fh ; read the file
int 21h
cmp ax, 0 ; stop if end-of-file
jz push
jnz show2
show2 : mov buffer1[1], '$'
lea dx, buffer1
call disp1
pop ax
jmp cont2
cmp buffer1[0], 0dh
; jnz show
inc buffer2[0]
cmp buffer2[0], 23 ; check if end of page
jnz show1
;jnz push
lea dx, msg26
call disp1
call readch
mov buffer2[0], 0
lea dx, msg26
call disp1
push: mov ah,02
mov al,0
mov cx,0
mov dx,10
int 21
;int 21h
;push ax ; push file handle onto stack.
lea dx, msg28 ; ask if data is to
call disp1 ; be input
call readch ; read choice
and al, 0fh
cmp al, 9 ; if choice = 'Y' or 'y'
jnz no1
lea dx, msg29
call disp1
pop bx ; retrieve file handle from stack.
mov buffer1[1], 0
write1 : call readch ; read data character by character.
mov buffer1[0], al
cmp buffer1[0], 27 ; check if character is 'Esc'(stop).
jz no1
cmp buffer1[0], 0dh
jne neol1
lea dx, msg26
call disp1
mov si, dx
mov byte ptr ds:[si + 2], 0
mov cx, 3
jmp com1
neol1 : mov cx, 1
lea dx, buffer1[0]
com1: mov ah, 40h ; write to the file
int 21h
mov byte ptr ds:[si + 2], '$'
jmp write1
no1 : lea dx, msg16 ; creation successful
call disp1
call readch
jmp begin
;jmp cr_file
show1 : mov buffer1[1], '$'
lea dx, buffer1
call disp1
pop ax
jmp cont2
endv : call readch
jmp begin
cm_dir :lea dx, msg9 ; module for removing directory
call disp1
call read1 ; read name of directory to
lea dx, buffer1[2] ; be removed
mov ah, 3ah ; remove directory
int 21h
cmp ax, 3 ; error if path not found
jnz err61
lea dx, msg21
call disp1
jmp endg1
err61 : cmp ax, 5 ; error if access denied
jnz dir1
lea dx, msg15
call disp1
jmp endg
done20 : lea dx, msg20 ; deletion successful
call disp1
endg1 : call readch
jmp begin
dir1: mov ax, 3h ; module for displaying
int 10h ; contents of directory
lea dx, msg24
mov cx, 0
mov ah, 4eh ; Get first file
int 21h ; in directory
cmp ax, 18 ; Check if no files
jnz list1 ; in directory
lea dx, msg14 ; Display message
call disp1 ; 'File not found'
call readch
jmp begin
list1 : mov ah, 2fh ; Get dta address
int 21h
mov byte ptr es:[bx + 42], 0
add bx, 1eh
mov buffer1[0], 0
char1 : mov dl, byte ptr es:[bx] ; Get character of
inc bx ; filename from DTA
inc buffer1[0]
cmp dl, '.' ; Check if extension
jnz cont30 ; is starting
cont40 : lea dx, msg31
call disp1
inc buffer1[0]
cmp buffer1[0], 0bh ; Check for end of filename
jne cont40 ; buffer - 13 characters
jmp char1
cont30 : mov ah, 02h ; Display character
int 21h ; of filename
cmp dl, 0 ; Check for end
jne char1 ; of file name
lea dx, msg26
call disp1
inc cx
cmp cx, 23 ; Check for end of page
jne cont10
lea dx, msg27
call disp1
call readch
mov cx, 0
lea dx, msg26
call disp1
cont10 : mov ah, 4fh ; Get next file
int 21h
jnc list1
lea dx, msg27
call disp1
call readch
;jmp begin
jmp dl_file1
cp_file:lea dx, msg6 ; module for copying a file
call disp1 ; read name of file to
call read1 ; to be copied
mov cx, bx
lea dx, msg7
call disp1
call read2 ; read path of destination
mov buffer2[bx], '\' ; directory
inc bx
mov ax, 2
cp : mov si, ax ; concatenating path and filename
mov dl, buffer1[si]
mov buffer2[bx], dl
inc bx
inc al
cmp cx, ax
jne cp
mov cx, 0
lea dx, buffer2[2] ; create the file in
mov ah, 3ch ; destination directory
int 21h
cmp ax, 3 ; Display error message
jnz cont ; if path not found
lea dx, msg21
call disp1
jmp cp_file ; on error read data again
cont : push ax
lea dx, buffer1[2] ; open source file
mov ax, 3d00h
int 21h
push ax
rd : pop bx
lea dx, buffer1
mov cx, 80h ; read source file
mov ah, 3fh
int 21h
cmp ax, 0 ; check if entire file
jz fin ; has been read
mov cx, bx
pop bx
push bx
push cx
mov cx, ax
lea dx, buffer1 ; write into new file to
mov ah, 40h ; complete copy task
int 21h
jmp rd ; read file further
fin : lea dx, msg25 ; copy successful
call disp1
call readch
jmp begin
disp1 proc ; module for display of
mov ah, 09h ; a string on screen
int 21h
ret
disp1 endp
readch proc ; module for reading a
mov ah, 01h ; character from keyboard
int 21h
ret
readch endp
read1 proc ; module for reading
mov [buffer1], 80 ; first string
lea dx, buffer1
mov ah, 0ah ; read string from keyboard
int 21h
mov bl, buffer1[1]
mov bh, 0
add bx, 2
mov buffer1[bx], 0 ; ASCIIZ string, so
ret ; terminate with 0
read1 endp
read2 proc ; module for reading
lea dx, buffer2 ; second string
mov ah, 0ah
int 21h
mov bl, buffer2[1]
mov bh, 0
add bx, 2
mov buffer2[bx], 0
ret
read2 endp
end start