Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

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

Работа добавлена на сайт samzan.net:


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

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

Кафедра програмного забезпечення

Курсова робота

з дисципліни “Програмування на мові 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




1. Миссия и цели управления организацией, проблемы формирования и согласования.html
2. Бюджет денежных средств
3.  Много ли у Вас друзей с которыми Вы постоянно общаетесь 2
4. Финансовая академия при Правительстве Российской Федерации Финакадемия Кафедра Государственное
5. Реферат- СИНЕРГЕТИКА КАК НАУКА О САМООРГАНИЗАЦИИ
6. Статья- Генетика человека
7. Подготовила и провела
8. и Б рис. В.2. для ограждения сторон фарватеров отличаются друг от друга.html
9. Такая рыночная ситуация получила в экономической теории название взаимной или двусторонней монополии
10. ТЕМА- Галогены. Ковчегин Игорь 10б Галогены Всем извест
11. на тему- Проектування та розробка програмного забезпечення для автоматизації обліку спецодягу працівників
12.  Происхождение нефти
13. Экономические теории Давида Рикардо
14. Лабораторна робота 6 Дослідження послідовного коливального контуру резонанс напруг Стислий зміст р
15. Погодин М
16. Дипломная работа Студента 4го курса вечернего отделения Научный руководитель Проф
17. Боротьба зі шкідниками сільськогосподарських культур
18. Лекция 6 Структура самосознания В результате соотнесения себя с требованиями своего духовнонравственн
19. Как я представляю происхождение мира
20. Добрый день сказал ему маленький принц