Программа для перегляду текстових файлів різного розміру
Міністерство освіти та науки України Кіровоградський Державний Технічний університетКафедра програмного забезпеченняКурсова роботаз дисципліни «Програмування на мові ASM-86» на тему:"Программа для перегляду текстових файлів різного розміру"ЗмістВступ1. Призначення та область застосування програми2. Огляд існуючих програм3. Опис і обґрунтування проектних рішень системи4. Інструкція користувача5. Основні висновкиСписок літературиТекст програмиВступІнформація - цінна річ, тому для її збереження в сучасному суспільстві використовують все частіше персональний комп`ютер. При перегляді текстових файлів виникає потреба в зручних в користуванні та розумінні програм переглядачів текстових файлів. Переді мною була поставлена задача розробити таку програму з мінімальним набором елементарних функцій для роботи з текстом. 1. Призначення та область застосування програми Дана програма призначена для перегляду текстових файлів різного розміру. Програма може бути використана будь яким користувачем ЕОМ для перегляду потрібної інформації. 2. Огляд існуючих програмЗараз існує безліч програм для перегляду текстових файлів. Аналогом даної є такі програми як wiev, wpwiev та інші.3. Опис і обґрунтування проектних рішень системиДана програма написана на мові асемблера з використанням переривань для роботи з файлами та текстом. Вона працює на будь якій машині де є DOS або WINDOWS. При написанні програми для реалізації прокрутки екрану вверх та вниз використовується читання тексту порціями. В програмі реалізовані такі можливості як прокрутка вверх та вниз по рядкові та сторінку цілком, коротка допомога, пошук слова та інші потрібні речі. Так як програма використовує пряме читання файлів на диску то при використанні WINDOWS NT треба бути уважним при перегляді файлів і мати дозвіл но перегляд.4. Інструкція користувачаДля запуску програми потрібно набрати в командному рядку ім`я запускного файлу та замість параметра ім`я файлу для перегляду. Але якщо програма запущена без параметра то вона запросить ввести ім`я. Після чого появиться екран з відкритим файлом. В низу екрану постійно видно підказку. Для виклику допомоги досить нотиснути клавішу? або F1 або Alt-H. Щоб вийти з програми потрібно натиснути Alt - Q.ВисновкиПри постійній роботі з комп`ютером досить часто потрібно переглянути файл. Тому дана програма є незамінимою в роботі. Вона є простою в користуванні та розумінні. Працює майже на всіх машинах без особливої потреби в ресурсах. Список літератури 1. Финогенов К.Г. Самоучитель по системным функциям MS-DOS. - М.: Радио и связь, Энтроп, 1995. - 382 с. 2. Джордейн Р. Справочник программиста персональных компьютеров типа IBM PC, XT, и AT: Пер. с англ. - Финансы и статистика, 1992. - 544 с. 3. Касаткин А.И. Профессиональное программирование на языке Си. Управление ресурсами: Справочное пособие. - Минск: Выш.шк., 1992. - 432 с. 4. Касаткин А.И. Профессиональное программирование на языке Си. Системное программирование. - Минск: Выш.шк., 1993. - 301 с. 5. Электронный справочник! Драйвер Help фирмы Flambeaux Software версия 1.2. Адаптировал С.М. Абель. 6. The Norton Guides, Copyright © 1987 by Peter Norton Computing - Assembly language, Прерывания. Текст програми Bios Segment At 40h Db 16 Dup (?) Flag Dw? Db 56 Dup (?) Cols Dw? Db 23 Dup (?) A6845 Dw? Bios Ends Cseg Segment Para Public 'CODE' Assume CS: Cseg, DS: Cseg, ES: Nothing Org 100h List Proc Near Jmp Start ; Необходимые данные и рабачие области Special Db 1eh; Байты Normal Db 02h; Foregrd Db 07h; Blink Equ 0Fh; атрибутов CR Equ 0Dh LF Equ 0Ah EOF Equ 1Ah Eor Equ 1 Nodata Equ 2 Crt_Col Dw 0 Crt_Buf Dw 0 Crt_Prt Dw 0 Index Dw 0 Reclen Dw 0 Row Db 2 Col Db 1 Attr Db 02h Blknum Db 0 Scroll Dw 0 First Dw 0 Current Dw 0 Last Dw 0 Recaddr Dw 0 Handle Dw 0 Psize Dw 16 Blksize Dw 0 Switch1 Db 0 Switch2 Db 0 Numlf Db 1 Numcr Db 0 char_msk db 0ffh min_disp db 0 TextMax Db 32 TextLen Db 0 TextBuf Db 32 Dup (0) Prompt Db 'Command:' Spaces Db 32 Dup (32) Db 'Keys: PgUp PgDn Arrows ESC=exit?=Help ' Pr_Len Equ This Byte - Prompt TextMsg Db '*** Текст не найден ***' EofMsg Db ' *** Конец файла ***' EofLen Equ This Byte - EofMsg Work Db 'LIST ' Keyin Db 64 Keyout Db 0 Filenm Db 76 Dup (0) Askfile Db 13,10,'Введите имя файла: $' Openmsg Db ' Open failed, return code=' Opencod Dw '00' Db '$' Code2 Db 'File not found $' Code3 Db 'Path not found $' Code4 Db 'Too many files $' Code5 Db 'Access denied $' Org offset Work+256 Workx Equ $-Work What1 Db 13,32,27,81; Cr, Sp, Esc, Q Db 68,85,63,72 ; D, U,?, H Db 47,82,76,84 ;/, R, L, T Db 80,65,78,88 ; P, A, N, X Db 66 ; B Num1 Equ $-What1 What2 Db 77,75,73,81 ;->,<-, PgUp, PgDn Db 71,72,61,80 ; HOME,^, F3, v Db 59,68,79,119 ; F1, F10, END,^HOME Db 115,132,118 ;^<-,^PgUp,^PgDn db 46,31 Num2 Db $-What2 Where1 Dw Offset NxtPage, Offset NxtPage, Offset Close, Offset Close Dw Offset NxtPage, Offset Back, Offset Got_H, Offset Got_H Dw Offset Got_S, Offset Right, Offset Left, Offset Top Dw Offset Up1, Offset Got_Rs, Offset Down1, Offset Close Dw Offset Bottom Where2 Dw Offset Right, Offset Left, Offset Back, Offset NxtPage Dw Offset Top, Offset Up1, Offset Got_Rs, Offset Down1 Dw Offset Got_H, Offset Close, Offset Bottom, Offset Home Dw Offset Scroll0, Offset Top, Offset Bottom dw offset ctrl, offset strip HelpMsg Db CR, 9,'Просмотрщик файлов V 1.0 ' Db CR, LF Db CR, LF, 9,'Commands and keys:' Db CR, LF Db CR, LF, 9,' - or Space ', 9,9,'continue to next page' Db CR, LF, 9,'ESC, Q, X or F10', 9,' terminate' Db CR, LF, 9,'HOME, T or Ctl PgUp', 9,' restart from Top of file' Db CR, LF, 9,'END, B or Ctl PgDn', 9,' skip to Bottom of file' Db CR, LF, 9,'Ctl Home ', 9,9,' restart from top of block' Db CR, LF, 9,'PgDn or D ', 9,9,' scroll Down one page' Db CR, LF, 9,'PgUp or U ', 9,9,' scroll Up one page' Db CR, LF, 9,'H,? or F1 ', 9,9,' list Help for keys' Db CR, LF, 9,' - or L ', 9,9,'scroll Left 20 columns' Db CR, LF, 9,'- or R ', 9,9,'scroll Right 20 columns' Db CR, LF, 9,'Ctl - ', 9,9,'reset scroll to column 1' Db CR, LF, 9,' or P ', 9,9,'Previous, up one line' Db CR, LF, 9,' or N ', 9,9,'Next, down one line' Db CR, LF, 9,'/text ', 9,9,' find text' Db CR, LF, 9,'A or F3 ', 9,9,' find text Again' db CR, LF, 9, «ALT S», 9,9,» do/don't Strip parity bit» db «(toggle)» db CR, LF, 9, «ALT C», 9,9,» do/don't display Control» db «chars» db «(toggle)» Db '$' Start: Mov BX, PgmSize Mov AH, 4Ah; Модифицируем память Int 21h; Call GetParm Openit: Call Open Jz Init Ret Close: Mov BX, Handle Mov AH, 3Eh; Закрываем файл Int 21h Mov AX, 0600h; Очищаем экран Sub BL, BL Mov BH, Foregrd Sub CX, CX Mov DX, 184Fh Int 10h Ret; Возвращаемся в DOS ; Выделяем память для буфера файла Init: Mov BX, 1000h GetMem: Mov AH, 48h Int 21h Jc GetMem Mov RecAddr, AX Mov AX, BX Sub AX, 32 Mul Psize Mov Blksize, AX Call InitCrt Call Set1 Call Set25 Read1: Call ReadBlk; Загружаем следующий блок Mov BL, Normal Mov Attr, BL Jnz Read2 Jmp AtEnd Read2: Dec Row Cmp Numlf, 0 Je GetNext Inc Row Mov Col, 1 GetNext: Mov AX, Index; Есть запись в буфере? Cmp AX, Last Jb GotNext Jmp AtEnd GotNext: Call ListOne; Выводим следующую запись Mov CX, Reclen Add Col, CL Mov DH, Row Cmp DH, 25 Jne TestEor Cmp NumLF, 0 Jne KeyRead TEstEor: Jmp Read2; Конец записей? KeyRead: Mov AH, 0; Ждем нажатия клавиши Int 16h Mov SI, Offset Spaces; Очищаем строку 25 Call Msg25 ; Обработка нажатой клавиши Cmp AL, 27; ESC выход Jne Chk00 Jmp Close Chk00: Cmp AL, 0; Управляющий символ? Jne Chk_97; нет, буква Xchg AL, AH; да, считываем расширенный код Mov DI, Offset What2 Mov BP, Offset Where2 Mov CL, Num2 Jmp Short Control Chk_97: Cmp AL, 97; Нижний регистр? Jl Upper Sub AL, 32; да, преобразуем в верхний Upper: Mov DI, Offset What1 Mov BP, Offset Where1 Mov CL, Num1 Control: Mov SI, DI; Ищем букву/код Mov CH, 0; в таблице Push DS Pop ES Repnz Scasb Jne KeyRead Dec DI Sub DI, SI Shl DI, 1 Mov BX, Word Ptr DS: [DI] [BP] Jmp BX; Переходим на обработку нажатой ; клавиши Right: Cmp Scroll, 220; key right Jb Got77 Jmp KeyRead Got77: Add Scroll, 20 Jmp BackUp Scroll0: Mov Scroll, 0; key ctrl-left Jmp BackUp Left: Cmp Scroll, 0; key left Jne Got75 Jmp KeyRead Got75: Sub Scroll, 20 Jmp BackUp Got_Rs: Call ReScan; F3 Jmp NxtPage Got_H: Call Help; key F1 Call Back1 Jmp KeyRead strip: xor char_msk, 080h; выводить / игнор русские символы call Back1 jmp NxtPage ctrl: xor min_disp, 020h; выводить / игнор символы 0-31 call Back1 jmp NxtPage Got_S: Call Scan; Поиск текста Jmp NxtPage NxtPage:; key (nextpage) Mov AX, Index Cmp AX, Last; end of file? Jae BWait Mov Current, AX Mov DH, 2
Страницы: 1, 2
|