Wednesday, 10 June 2015

phonebook

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

No comments:

Post a Comment