Создание текстового редактора в Turbo Pascal

Министерство энергетики РФ
Уфимский Энергетический Колледж

Специальность 2202

Курсовая работа
по Основам алгоритмизации и программирования
на тему “Создание текстового редактора”

Выполнил студент группы 2 – АС – 3 ____________ Тимофеев Т.П.
Проверил ____________ Ганиев А.Э.

Уфа – 2001г.
Содержание

Задание ……………………………………………………… стр. 3
Описание программы ………………………………………. стр. 4
Листинг ……………………………………………………… стр. 5

Исходный текст программы .…………………………. стр. 5
Текст модуля ……………….………………………….. стр.10

Заключение ………………………………………………….. стр.18
Список использованной литературы ……………………… стр.19

Задание.

Создать программу, обеспечивающую

Cоздание файлов.
Переименование файлов.
Удаление файлов.
Копирование файла в другой файл.
Открытие файла для просмотра.

Программа должна быть написана на Turbo Pascal в текстовом режиме с использованием любых модулей, которые необходимы для её реализации (допускаются также модули пользователя).
Описание программы.

Timofeev Word v.1.0 – это программа для работы с текстом. С её помощью можно создавать, удалять, переименовывать, открывать, копировать файлы друг в друга. Конечно, всё это можно проделать и в MS-DOS, но преимущество этой программы в том, что все эти команды тщательно спрятаны под красивым и дружественным интерфейсом моей программы.
Так как в программе Timofeev Word v.1.0 много процедур, я создал собственный модуль Tim.tpu, куда их (процедуры) и отправил.
Процедуры

Table – рисует оболочку программы.
Enter_Sandman – происходит проигрывание музыки на песню группы Metallica — “Enter Sandman”. Я не стал делать так, чтобы при нажатии какой-либо клавиши она прекращала играть, потому что для меня (не знаю как для других) это свято.
Menu – эта процедура вызывает меню, где содержится информация о программе и помощь (если её так можно назвать).
Keys – процедура, считывающая код нажатой клавиши.

В этой программе, конечно много недоработок, но я надеюсь, что вскоре появятся дополненные версии 1.2, 1.3, 2.0,2.1,……, n.m.
Эта программа может использоваться в о-о-о-о-о-очень маленьких офисах, которые не имеют возможности приобрести качественный лицензионный продукт, к примеру Microsoft Office’9x, ’2000 (если кто-то имеет на примете такой офис, я с удовольствием продам, за символическую цену, свой программный продукт). Также программа может использоваться для обучения детей в детских садах работе на персональных компьютерах. И, наконец, ей могут воспользоваться студенты I курса для сдачи её как Курсовой работы на следующем курсе.
Листинг.
Исходный текст программы.
Program Redaktor;
Uses Crt,Tim; {использовать модули Crt и Tim}
Label b; {метка}
Var {тело}
Programname,Cmdline string;
nn,i,x,y integer;
f1,f1_new text;
Name,New_name string[12];
txt,text string;
ch char;
begin
i =1;
textbackground(red);
clrscr;
textcolor(yellow);
gotoxy(22,10);
writeln(‘Текстовый процессор Timofeev Word’);
gotoxy(22,11);
writeln(‘ Версия 1.0 (2001 год)’);
gotoxy(40,15);
writeln(‘Составил Тимофеев Тимур (2-АС-3)’);
textcolor(green);
gotoxy(40,16);
writeln(‘Все права защищены.’);
gotoxy(40,17);
writeln(‘Незаконное копирование’);
gotoxy(40,18);
writeln(‘или подделка без согласия автора’);
gotoxy(40,19);
writeln(‘преследуется по понятиям !!!’);
delay(5000);
textcolor(yellow);
table;
gotoxy(2,21);
write(‘Введите имя ‘);
readln(name);
assign(f1,name);
rewrite(f1);
gotoxy(2,21);
write(‘Вводите текст !!! ‘);
gotoxy(1,2);
repeat
write(chr(179),’ >’);
readln(txt);
writeln(f1,txt);
until txt=»;
close(f1);
gotoxy(2,21);
writeln(‘Ввод окончен, нажмите чего-нибудь …’);
repeat
readkey;
keys(nn);
case nn of {определяет нажатие функциональных клавиш}
59 menu; {F1}
60 begin {F2}
table;
gotoxy(2,21);
write(‘ ‘);
gotoxy(2,21);
write(‘Введите имя ‘);
readln(name);
assign(f1,name);
rewrite(f1);
gotoxy(2,21);
write(‘Вводите текст !!! ‘);
gotoxy(1,2);
repeat
write(chr(179),’ >’);
readln(txt);
writeln(f1,txt);
until txt=»;
close(f1);
gotoxy(2,21);
writeln(‘Ввод окончен, нажмите чего-нибудь …’);
end;
61 begin {F3}
gotoxy(2,21);
write(‘Введите имя файла, в который копир-я файл ‘,name,’->’);
readln(new_name);
reset(f1);
assign(f1_new,new_name);
append(f1_new);
while not eof(f1) do
begin
readln(f1,txt);
writeln(f1_new,txt);
end;
close(f1);
close(f1_new);
gotoxy(2,21);
writeln(‘Файл ‘,name,’ скопирован в ‘,new_name,’ нажмите
чего-нибудь …’);
end;
62 begin {F4}
gotoxy(2,21);
write(‘ ‘);
gotoxy(2,21);
write(‘Введите новое имя файла ‘);
readln(new_name);
assign(f1,name);
rename(f1,new_name);
gotoxy(2,21);
writeln(‘Файл ‘,name,’ перименован в ‘,new_name,’ нажмите
чего-нибудь … ‘);
end;
63 begin {F5}
erase(f1);
gotoxy(2,21);
writeln(‘Файл ‘,name,’ удалён с диска, нажмите чего-нибудь …’);
end;
64 begin {F6}
{$I-}
repeat
gotoxy(2,21);
write(‘Введите имя файла для считывания текста ->’);
readln(name);
assign(f1,name);
reset(f1);
if ioresult<>0 then
begin
gotoxy(2,21);
writeln(‘Файл не найден … ‘);
close(f1);
end;
until ioresult=0;
{$I+}
table;
gotoxy(1,2);
while not eof(f1) do
begin
readln(f1,txt);
writeln(chr(179),txt);
end;
close(f1);
gotoxy(2,21);
write(‘Файл считан, нажмите чего-нибудь … ‘);
end;
68 goto b; {F10} {Происходит выход на метку}
end;
until i<0; {считывай функциональные клавиши пока i<0,
а т.к. i=1 и не изменяется, то этот процесс бесконечен}
b end.

Текст модуля.
Unit Tim;

Interface

Uses Crt,Dos;
Procedure keys(var n integer);
Procedure table;
Procedure Enter_sandman;
Procedure menu;

Implementation

Procedure keys(var n integer);{процедура нажатия клавиши}
var c char;
begin
if keypressed then
begin
c =readkey;
if c=#0 then c =readkey;
n =ord(c);
end;
end;

Procedure Enter_sandman; {музыка}
Const
m array [1..6] of integer=(165,330,392,233,220,330);
t array [1..6] of integer=(1100,600,600,600,1100,600);
e array [1..7] of integer=(165,165,165,165,165,165,170);
r array [1..7] of integer=(600,600,600,600,600,600,1100);
w array [1..5] of integer=(167,167,167,294,233);
q array [1..5] of integer=(1100,600,600,600,1100);
o array [1..9] of integer=(165,182,165,182,165,196,165,182,165);
b array [1..9] of integer=(600,1100,600,600,600,600,600,600,3000);
var a,u,z,x integer; i byte;
begin
for a =1 to 4 do
begin
for i =1 to 6 do
begin
sound(m[i]);
delay(t[i]);
nosound;
end;
end;
for u =1 to 3 do
begin
for i =1 to 7 do
begin
sound(e[i]);
delay(r[i]);
nosound;
end;
end;
for z =1 to 3 do
begin
for i =1 to 5 do
begin
sound(w[i]);
delay(q[i]);
nosound;
end;
end;
for i =1 to 9 do
begin
sound(o[i]);
delay(b[i]);
nosound;
end;
end;

Procedure table; {рисует таблицу}
var
w,h integer;
c1,c2,c3,c4,c7,c5,c6,c8,c9,c10 char;
begin
textbackground(blue);
clrscr;
textcolor(yellow);
w =1;
h =1;
c1 =chr(218);
c2 =chr(196);
c3 =chr(191);
c4 =chr(179);
c5 =chr(192);
c6 =chr(217);
c7 =chr(195);
c8 =chr(180);
c9 =chr(193);
c10 =chr(194);
for h =2 to 25 do
begin
gotoxy(w,h);
write(c4);
end;
gotoxy(w,h);
write(c5);
for w =2 to 79 do
begin
gotoxy(w,h);
write(c2);
end;
gotoxy(w,h);
write(c6);
for h =24 downto 1 do
begin
gotoxy(w,h);
write(c4);
end;
gotoxy(w,h);
write(c3);
for w =78 downto 1 do
begin
gotoxy(w,h);
write(c2);
end;
gotoxy(w,h);
write(c1);
gotoxy(1,20);
write(c7);
for w =2 to 59 do
begin
gotoxy(w,20);
write(c2);
end;
gotoxy(w,1);
write(c10);
for h =2 to 24 do
begin
gotoxy(w,h);
write(chr(179));
end;
gotoxy(w,20);
write(c8);
gotoxy(59,25);
write(c9);
gotoxy(62,4);
writeln(‘F1-Помошь’);
gotoxy(62,5);
writeln(‘F2-Новый’);
gotoxy(62,6);
writeln(‘F3-Копировать’);
gotoxy(62,7);
writeln(‘F4-Переименовать’);
gotoxy(62,8);
writeln(‘F5-Удалить’);
gotoxy(62,9);
writeln(‘F6-Просмотреть’);
gotoxy(62,10);
writeln(‘F10-Выход’);
end;

Procedure menu;
Const
NORM=$17;{ цвет невыделеного пункта }
SEL=$70;{ цвет выделенного пункта }
N=3;
var
menu array[1..N] of string[12];{ названия пунктов меню }
punkt integer;{ номер выделенного пункта }
ch char;{ введенный символ }
x,y,i integer;{ координаты первой строки меню }

Procedure punkt1;
begin
ClrScr;
writeln(‘Выполнил студент гр. 2-АС-3 Тимофеев Т.П. (2001 г.)’);
writeln(‘Курсовая работа-а-а-а-а-а-а-а !!!!!!!!!!!!!!!!!’);
readln;
end;

Procedure punkt2;
begin
ClrScr;
writeln(‘Тута всё понятно даже ребёнку.’);
readln;
end;

Procedure MenuToScr;{ вывод меню на экран }
var i integer;
begin
ClrScr;
for i =1 to N do begin
GoToXY(x,y+i-1);
write(menu[i]);
end;
TextAttr =SEL;
GoToXY(x,y+punkt-1);
write(menu[punkt]);{ выделим строку меню }
TextAttr =NORM;
end;
begin
menu[1] =’ О программе ‘;
menu[2] =’ Помощь ‘;
menu[3] =’ Выход ‘;
punkt =1;
x =5;
y =5; TextAttr =NORM;
MenuToScr;
repeat
ch =ReadKey;
if ch=char(0) then begin
ch =ReadKey;
case ch of
chr(80) { стрелка вниз }
if punkt

GoToXY(x,y+punkt-1);
write(menu[punkt]);
punkt =punkt+1;
TextAttr =SEl;
GoToXY(x,y+punkt-1);
write(menu[punkt]);
TextAttr =NORM;
end;
chr(72) { стрелка вверх }
if punkt>1 then begin
GoToXY(x,y+punkt-1);
write(menu[punkt]);
punkt =punkt-1;
TextAttr =SEl;
GoToXY(x,y+punkt-1);
write(menu[punkt]);
TextAttr =NORM;
end;
end;
end
else
if ch=chr(13) then begin { нажата клавиша

}

case punkt of
1 punkt1;
2 punkt2;
3 i =2;{ выход }
end;
MenuToScr;
end;
until i=2;
end;
end.
Заключение.

В результате проделанной работы я написал прекрасную программу за 4 часа свободного от учёбы времени практически без помощи литературы и других источников.
Программа основана на стандартных процедурах и функциях модуля Crt Rename, Erase, Append, Rewrite, Reset, Assign и др.
Список использованной литературы.

Попов В.Б. “Turbo Pascal для школьников”

Учеб.пособие. – 3-е доп. изд. – М. Финансы и статистика, 2001г.

Вирт Н. “Алгоритмы и структуры данных”

Пер. с англ. – М. Мир, 1989г.

Прайс Д. “Программирование на языке Паскаль Практическое руководство”.

Пер. с англ. – М. Мир, 1987г.