Переглядач для файлів різних типів з визначенням типу файлу по розширенню і відповідно способу перегляду

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Міністерство освіти та науки України

Кіровоградський Державний Технічний університет

Кафедра програмного забезпечення
Курсова робота
з дисципліни “Програмування на мові ASM-86”
на тему:
“Переглядач для файлів різних типів, з визначенням типу файлу по розширенню і, відповідно, способу перегляду (txt, hex, bin)”

Зміст
Вступ
1.                Постановка задачі
2.                Обґрунтування вибору методів розв’язку задачі
3.                Алгоритм програми
4.                Реалізація програми
5.                Системні вимоги
6.                Інструкція для користувача
Висновки
Використана література
Лістинг програми

Вступ
При роботі з файлами їх буває необхідно переглянути. Для цього необхідно використовувати програми-переглядачі, які забезпечують прокрутку тексту у вікні перегляду.
Іноді виникає потреба переглядати файли не лише в текстовому, а в інших форматах, зокрема в шістнадцятеричному та бінарному. Переглядач, який розроблено в роботі, дозволяє переглядати файли у вказаних трьох режимах.

1. Постановка задачі
Необхідно розробити програму-переглядач файлів у різному вигляді – війковому, шістнадцятеричному або текстовому, тип перегляду повинен визначатися за розширенням файлу.
2. Обґрунтування вибору методів розв’язку задачі
Для роботи з відео зручно використовувати прямий доступ до відеопам’яті, оскільки такий спосіб має високу ефективність. Для роботи з файлами – функції ДОС (21 переривання).
Для обробки клавіатури будемо використовувати функції прокрутки зображення. Ці функції для спрощення будуть різними для різних типів файлів, оскільки необхідно по-різному обчислювати зміщення при прокрутці і по-різному відображати інформацію.
Для програми використовується модель “small” пам’яті, цього достатньо для невеликих файлів.
3. Алгоритм програми
1. Введення імені файла.
2. Визначення типу файла за символами в розширенні.
3. Читання змісту файла в пам’ять.
4. Очікування натиснення клавіші.
5. Якщо натиснута клавіша “сторінка вгору”, то 24 рази викликати ф-цію прокрутки вгору на 24 рядки.
6. Якщо натиснута клавіша “сторінка вниз”, то 24 рази викликати ф-цію прокрутки вниз на 24 рядки.
7. Якщо натиснута клавіша “вниз”, то збільшити вказівник кадру на довжину верхнього рядка.
8. Якщо натиснута клавіша “вгору”, то зменшити вказівник кадру на довжину рядка, який знаходиться над верхнім рядком (поза кадром).
9. Відобразити новий кадр на екран.
10. Якщо натиснута клавіша ESC, то завершити програму.
11. Перейти на п. 4. і продовжити роботу.
4. Реалізація програми
Після початку роботи програма запитує користувача про ім’я файла, який треба переглянути і робить спробу відкрити його. Якщо нема помилки, то з імені визначається його тип і у змінні в програмі заноситься інформація про тип. Введення з клавіатури здійснюється з використанням функцій DOS.
При перегляді використовується запис текстової інформації у відеопам’ять.
Після відкриття і читання файла програма чекає на натиснення клавіші. Використовується переривання 16 – функція 0. Потім аналізується код клавіші. Якщо код = 1 (вихід), то програма завершує роботу. Обробляються також клавіші “вгору”, “вниз”, “сторінка вгору” і “сторінка вниз”. Програма містить 3 групи функцій для кожного типу перегляду, кожна з яких містить по 3 функції: відображення на екрані поточного кадру, прокрутка зображення вгору і вниз.
Програма містить вказівник, який показує відстань від початку тексту до початку поточного кадру. При прокрутці вниз він збільшується (якщо досягне довжини 32000 – стає 0), а при прокрутці вгору – зменшується (якщо 0, то стоїть на місці – прокрутки немає). При натисненні клавіш “сторінка вгору” і “сторінка вниз” прокрутка відбувається на 24 рядки у відповідному напрямку.

5. Системні вимоги
Програма буде працювати на комп’ютері з процесором 80386 і старшим, 640 К і більше пам’яті, монітором CGA і вище. Необхідний дисковий накопичувач.

6. Інструкція для користувача

Для того, щоб переглянути файл, необхідно запустити на виконання файл thbview.exe. На екран буде виведено запит на введення імені файлу, який існує на диску. Можна ввести також і шлях. Якщо не виникне помилки, то після вводу на екрані з’явиться зміст файла у вигляді рядків тексту (файл TXT), шістнадцятеричного коду (файл HEX) або війкового формату (зображення всіх службових символів – BIN). Для переміщення можна використовувати клавіші “вгору”, “вниз”, “PgUp”, “PgDn”. Для виходу натисніть клавішу ESC.
При досягненні нижньої границі тексту перегляд буде переведено на початок файла. А при досягненні верхньої границі прокрутка здійснюватись не буде.
Розмір файла повинен бути меншим за 32 кілобайти.

Висновки
Отже, завдяки виконанню роботи, створена програма – переглядач для невеликих текстових файлів з розширеннями TXT (текстовий файл), HEX (шістнадцятеричний формат) та BIN (бінарний). Проілюстровані можливості виведення на екран на асемблері, роботу з файлами та пам’яттю. Програма має вигляд EXE-файла і невибаглива до ресурсів машини.

Використана література
1. Том Сван. Освоение Turbo Assembler. М., Діалектика, 1996
2. Зубков Д.Д. Программирование на Assembler для DOS, WINDOWS и UNIX. М., ДМК, 2000

Лістинг програми
.model compact
.386
.stack 1000
.data
file            db      32767 dup(0)
handle          dw      0
errmsg          db      'Помилка читання!$'
msg_enter       db      'Введiть iм`я файла (.txt, .bin, .hex): $'
filename        db      40 dup(0)
filelength      dw      0
filetype        db      2       ;2-txt,0-hex,1-bin
filepointer     dw      0       ;вказiвник на початок кадра
.code
start:
        jmp begin
;================================== T X T
;показ дампа для вигляду txt
showtxtdump     proc
        pusha
        ;очистка
        mov ax,0b800h
        mov es,ax
        cld
        mov cx,2000
        xor di,di
        mov ax,0700h
        rep stosw
        mov bx,word ptr fs:[filepointer]
        add bx,offset file
        mov bp,offset file
        add bp,32767
        xor si,si
        xor di,di
txt_l:  mov al,byte ptr fs:[bx]
        inc bx
        cmp al,10
        je tskip
        cmp al,13
        jne tput
        add si,80*2
        shl di,1
        sub si,di
        xor di,di
        jmp tskip
tput:
        mov byte ptr es:[si],al
        add si,2
        inc di
tskip:
        cmp bx,bp
        jb txt_loop
        mov bx,offset file
        mov word ptr fs:[filepointer],0
txt_loop:
        cmp si,4000
        jb txt_l
        cmp bx,bp
        jb txt_sav
        sub bx,bp
txt_sav:
        popa
        ret
showtxtdump     endp
;=================================================
scroll_downtxt     proc
        pusha
        ;пiдраховуємо довжину 1 рядка
        mov bx,word ptr fs:[filepointer]
        add bx,offset file
        xor dx,dx
no_len:
        inc dx
        cmp byte ptr fs:[bx],10
        je len_ok
        inc bx
        cmp dx,80
        jb no_len
len_ok:
        mov bx,word ptr fs:[filepointer]
        mov ax,bx
        add ax,offset file+32767
        sub ax,dx
        cmp bx,ax
        jae tok_scru
        add bx,dx
tok_scru:
        mov word ptr fs:[filepointer],bx
        call showtxtdump
        popa
        ret
scroll_downtxt     endp
;=================================================
scroll_uptxt     proc
        pusha
        ;пiдраховуємо довжину 1 рядка
        mov bx,word ptr fs:[filepointer]
        add bx,offset file-2
        xor dx,dx
uno_len:
        inc dx
        cmp byte ptr fs:[bx],13
        je ulen_ok
        dec bx
        cmp dx,80
        jb uno_len
ulen_ok:
        mov bx,word ptr fs:[filepointer]
        cmp bx,dx
        ja tok_up
        mov bx,dx
tok_up:
        sub bx,dx
        mov word ptr fs:[filepointer],bx
        call showtxtdump
        popa
        ret
scroll_uptxt     endp
;=================================
scroll_pgdntxt proc
        pusha
        mov cx,24
tsdn:    call scroll_downtxt
        loop tsdn
        popa
        ret
scroll_pgdntxt endp
;=================================
scroll_pguptxt proc
        pusha
        mov cx,24
tsdu:    call scroll_uptxt
        loop tsdu
        popa
        ret
scroll_pguptxt endp
;================================== H E X
;показ дампа для вигляду hex
showhexdump     proc
        pusha
        mov cx,20*25
        mov bx,word ptr fs:[filepointer]
        add bx,offset file
        mov bp,offset file
        add bp,32767
        mov ax,0b800h
        mov es,ax
        xor si,si
        xor di,di
hex_l:  mov al,byte ptr fs:[bx]
        inc bx
        mov dl,al
        and dl,15
        add dl,30h
        cmp dl,39h
        jbe h_1
        add dl,7
h_1:
        mov byte ptr es:[si+2],dl
        ;==============
        mov dl,al
        shr dl,4
        add dl,30h
        cmp dl,39h
        jbe h_2
        add dl,7
h_2:
        mov byte ptr es:[si],dl
        mov byte ptr es:[si+4],0
        add si,6
        inc di
        cmp di,20
        jne ok_hex
        xor di,di
        add si,(80-3*20)*2
ok_hex:
        cmp bx,bp
        jb hex_loop
        mov bx,offset file
        mov word ptr fs:[filepointer],0
hex_loop:
        loop hex_l
        cmp bx,bp
        jb hex_sav
        sub bx,bp
hex_sav:
        popa
        ret
showhexdump     endp
;=================================================
scroll_downhex     proc
        pusha
        mov bx,word ptr fs:[filepointer]
        mov ax,bx
        add ax,offset file+32767-20
        cmp bx,ax
        jae hok_scru
        add bx,20
hok_scru:
        mov word ptr fs:[filepointer],bx
        call showhexdump
        popa
        ret
scroll_downhex     endp
;=================================================
scroll_uphex     proc
        pusha
        mov bx,word ptr fs:[filepointer]
        cmp bx,20
        ja hok_up
        mov bx,20
hok_up:
        sub bx,20
        mov word ptr fs:[filepointer],bx
        call showhexdump
        popa
        ret
scroll_uphex     endp
;=================================
scroll_pgdnhex proc
        pusha
        mov cx,24
hsdn:    call scroll_downhex
        loop hsdn
        popa
        ret
scroll_pgdnhex endp
;=================================
scroll_pguphex proc
        pusha
        mov cx,24
hsdu:    call scroll_uphex
        loop hsdu
        popa
        ret
scroll_pguphex endp
;================================== B I N
;показ дампа для вигляду bin
showbindump     proc
        pusha
        mov cx,2000
        mov bx,word ptr fs:[filepointer]
        add bx,offset file
        mov bp,offset file
        add bp,32767
        mov ax,0b800h
        mov es,ax
        xor si,si
bin_l:  mov al,byte ptr fs:[bx]
        mov byte ptr es:[si],al
        inc bx
        cmp bx,bp
        jb bin_loop
        mov bx,offset file
        mov word ptr fs:[filepointer],0
bin_loop:
        inc si
        inc si
        loop bin_l
        cmp bx,bp
        jb bin_sav
        sub bx,bp
bin_sav:
        popa
        ret
showbindump     endp
;=================================================
scroll_downbin     proc
        pusha
        mov bx,word ptr fs:[filepointer]
        mov ax,bx
        add ax,offset file+32767-80
        cmp bx,ax
        jae ok_scru
        add bx,80
ok_scru:
        mov word ptr fs:[filepointer],bx
        call showbindump
        popa
        ret
scroll_downbin     endp
;=================================================
scroll_upbin     proc
        pusha
        mov bx,word ptr fs:[filepointer]
        cmp bx,80
        ja ok_up
        mov bx,80
ok_up:
        sub bx,80
        mov word ptr fs:[filepointer],bx
        call showbindump
        popa
        ret
scroll_upbin     endp
;=================================
scroll_pgdnbin proc
        pusha
        mov cx,24
sdn:    call scroll_downbin
        loop sdn
        popa
        ret
scroll_pgdnbin endp
;=================================
scroll_pgupbin proc
        pusha
        mov cx,24
sdu:    call scroll_upbin
        loop sdu
        popa
        ret
scroll_pgupbin endp
;==================================
getfilename proc
        pusha
        ;введення iменi файла
        push fs
        pop ds
        mov dx,offset msg_enter
        mov ah,9
        int 21h
        mov bx,offset filename
ent_l:  mov ah,1
        int 21h
        cmp al,13
        mov byte ptr ds:[bx],al
        inc bx
        cmp al,13
        jne ent_l
        dec bx
        mov byte ptr ds:[bx],0
        ;визначення типу файла
        mov bx,offset filename
        dec bx
name_s: inc bx
        mov al,byte ptr fs:[bx]
        cmp al,0
        jne name_s
        sub bx,2
        mov ah,byte ptr fs:[bx]
        mov al,byte ptr fs:[bx+1]
        cmp ax,6578h                    ;HEX
        jne other1
        mov byte ptr fs:[filetype],1
        jmp typ_exit
other1:
        cmp ax,696eh                    ;BIN
        jne other2
        mov byte ptr fs:[filetype],0
        jmp typ_exit
other2:
        mov byte ptr fs:[filetype],2    ;TXT
typ_exit:
        popa
        ret
getfilename endp
;==================================
readfile proc
        pusha
        ;open
        mov ah,3dh
        xor al,al
        push fs
        pop ds
        mov dx,offset filename
        int 21h
        jc read_error
        mov bx,ax
        ;read
        mov ah,3fh
        mov cx,32767
        push fs
        pop ds
        mov dx,offset file
        int 21h
        jc read_error
        mov word ptr fs:[filelength],ax
        ;close
        mov ah,3eh
        mov bx,word ptr fs:[handle]
        int 21h
        popa
        ret
read_error:
        push fs
        pop ds
        mov dx,offset errmsg
        mov ah,9
        int 21h
        popa
        mov ah,4ch
        int 21h
readfile endp
;==================================
begin:
        xor ah,ah
        mov al,3
        int 10h
        mov ax,seg handle
        mov fs,ax
        call getfilename
        call readfile
        mov ah,5
        mov ch,48h
        int 16h
work:
        mov ah,0
        int 16h
        mov bl,byte ptr fs:[filetype]
        cmp ah,50h
        jne work_1
        cmp bl,0
        jne d1
        call scroll_downbin
        jmp work
d1:     cmp bl,1
        jne d2
        call scroll_downhex
        jmp work
d2:
        call scroll_downtxt
        jmp work
work_1:
        cmp ah,48h
        jne work_2
        cmp bl,0
        jne u1
        call scroll_upbin
        jmp work
u1:     cmp bl,1
        jne u2
        call scroll_uphex
        jmp work
u2:
        call scroll_uptxt
        jmp work
work_2:
        cmp ah,51h
        jne work_3
        cmp bl,0
        jne pd1
        call scroll_pgdnbin
        jmp work
pd1:    cmp bl,1
        jne pd2
        call scroll_pgdnhex
        jmp work
pd2:
        call scroll_pgdntxt
        jmp work
work_3:
        cmp ah,49h
        jne work_4
        cmp bl,0
        jne pu1
        call scroll_pgupbin
        jmp work
pu1:    cmp bl,1
        jne pu2
        call scroll_pguphex
        jmp work
pu2:
        call scroll_pguptxt
        jmp work
work_4:
        cmp ah,1
        jne work
        mov ah,4ch
        int 21h
end start

Блок-схема алгоритму
Початок
Введення імені файла
Визначення типу файла
Читання змісту файла в пам’ять
Очікування натиснення клавіші
Кінець
Так
Ні

Esc

M1
Так
Ні

Up

Так
Ні
Down
M2
Прокрутка вгору на 1 рядок
Прокрутка вниз на 1 рядок
M1
M1
Так
Ні

PgUp

Так
Ні

PgDown

Прокрутка вниз на 24 рядки
Прокрутка вгору на 24 рядки
M2
M1
M1
M1
 
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
43.3кб. | скачати


Схожі роботи:
Переглядач для файлів різних типів з визначенням типу файлу по розширенню і відповідно способу перегляду 2
Программа для перегляду текстових файлів різного розміру
Розробка програми призначеної для перегляду текстових файлів різного розміру
Програма для перегляду великих текстових файлів розмір яких більший за 64 кілобайти 2
Програма для перегляду великих текстових файлів розмір яких більший за 64 кілобайти
Маркетинг різних типів послуг
Програмування різних типів завдань
Пристосування до життя молодих людей з поселень різних типів
Аналіз ефективності застосування різних типів організаційних структур
© Усі права захищені
написати до нас