Интерпретатор команд MS DOS

Интерпретатор команд MS DOS

Интерпретатор команд MS DOS

Волжский университет имени В.Н.Татищева
Факультет “Информатика и телекоммуникации”
Кафедра “Информатика и системы управления”
КУРСОВАЯ РАБОТА
по дисциплине “Системное программное обеспечение”
Тема
“Интерпретатор команд MS DOS”
Тольятти

Содержание
ВВЕДЕНИЕ
1. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
1.1 ОПЕРАЦИОННАЯ СИСТЕМА MS DOS
1.1.1 Файлы IO.SYS и MSDOS.SYS
1.1.2 Командный процессор DOS
1.1.3. Базовая система ввода-вывода
1.1.4 Загрузчик DOS
1.1.5 Диалог пользователя с DOS
1.1.6 Команды DOS
1.2 НЕДОСТАТКИ ЯЗЫКА ПРОГРАМИРОВАНИЯ С++
2. ПРОГРАММНАЯ ЧАСТЬ
2.1 ПОСТАНОВКА ЗАДАЧИ
2.2 ПОСТРОЕНИЕ АЛГОРИТМА РЕШЕНИЯ ЗАДАЧИ
2.2 АЛГОРИТМ
2.3. ОПИСАНИЕ РАЗРАБОТАННОЙ ПРОГРАММЫ
3. ЗАКЛЮЧЕНИЕ
4. СПИСОК ЛИТЕРАТУРЫ
5. ПРИЛОЖЕНИЕ

Введение
MsDos была создана в 1981 г. фирмой Microsoft по заказу IBM для разрабатывающихся тогда компьютеров IBM PC. Компьютер IBM PC, для которого была написана MsDos, был мало похож на современные компьютеры – медленный микропроцессор Intel-8088, 256 Кбайт оперативной памяти, без жёсткого диска, алфавитно-цифровой чёрно-белый монитор, работа лишь с односторонними 160- Кбайтными дискетами и т.д. Однако эти возможности были выше, чем у конкурирующих персональные компьютеры.
Первая версия Ms Dos тоже обладала гораздо более скромными возможностями, чем современные ОС. Она обеспечивала работу на компьютере лишь одного пользователя и одной программы (то есть однопользовательской и однозадачной), поддерживала работу лишь с дискетами, клавиатурной и алфавитно-цифровым дисплеем. Зато Ms Dos была компактной, предъявляла довольно скромные требования к аппаратуре и выполняла необходимый минимум функций для пользователей и программ.
За те два десятка лет, которые прошли с момента появления IBM PC, технические характеристики компьютеров совершили фантастический рывок вперёд. Современные компьютеры превосходят по всем показателям (быстродействию, объему оперативной и дисковой памяти, возможностям монитора и т.д) компьютеры начала 80х годов в сотни и даже тысячи раз. Поэтому фирма Microsoft внесла в MsDos много изменений и добавлений, чтобы расширить её возможности и более эффективно использовать новые, более мощные, компьютеры.
Как наличие автомобилей не отменяет необходимости уметь ходить на своих двоих, так и наличие Windows, Windows 95, Windows NT не ликвидирует (хотя и сильно сокращает) потребности в MS DOS и DOS-программах
· до сих пор остаётся множество областей деятельности, где DOS-программы успешно работают, а применение решений, требующих иных ОС, невозможно или экономически не целесообразно;
· при повреждении таких ОС, как WINDOWS 3.1, WINDOWS for Workgroup и Windows 95 (что случается весьма часто) для исследования причин неисправности и их устранения обычно приходится использовать MS DOS и DOS-программы.
Операционная система MSDOS в наше время не используется как основная ОС, но без неё не обойдешься. При установке Windows используют команды MSDOS. В курсовой работе я интерпретирую эти команды.

1. Теоретическая часть
1.1 Операционная система MS DOS
1.1.1 Файлы IO.SYS и MSDOS.SYS
Файлы IO.SYS и MSDOS.SYS, иначе называемые основными системными файлами MS DOS, содержат программы MSDOS, которые постоянно находятся в оперативной памяти компьютера.

1.1.2 Командный процессор DOS
Командный процессор DOS Обрабатывает команды, вводимые пользователем. Стандартный командный процессор MS DOS имеет имя COMMAND.COM, обычно он находится в корневом каталоге диска, с которого загружается DOS. Некоторые команды пользователя, TYPE,DIR,COPY, командный процессор выполняет сам. Такие команды называются внутренними. Для выполнения остальных (внешних) команд пользователя командный процессор ищет на дисках программу с соответствующим именем и если находит её, то загружает в память и передаёт ей управление. По окончании работы программы командный процессор удаляет программу из памяти и выводит сообщение о готовности к выполнению команд.

1.1.3 Базовая система ввода-вывода
Базовая система ввода-вывода (BIOS), находящаяся в постоянной памяти (постоянно запоминающем устройстве, ПЗУ) компьютера, формально не является частью MS DOS, однако тесно с ней связана. BIOS содержит программы для проверки оборудования компьютера, инициирования загрузки операционной системы (ОС) и программы для выполнения базовых (низкоуровневых) операций ввода-вывода с монитором, клавиатурой, дисками и принтером.

1.1.4 Загрузчик DOS
Ещё одна программа, которую можно считать частью DOS,- это загрузчик DOS. Он находится в первом секторе каждой дискеты и в первом секторе логического диска, с которого происходит загрузка DOS (то есть диска С ). Название этой очень короткой программы- загрузка в память системного файла DOS IO.SYS при начальной загрузке компьютера.

1.1.5 Диалог пользователя с DOS
Диалог пользователя с DOS осуществляется в форме команд-строк символов, вводимых с клавиатуры. Каждая команда пользователя означает, что DOS должна выполнить то или иное действие, например, напечатать файл или выдать на экран оглавление каталога.
Команды DOS состоит из имени команды или вызываемой программы и, возможно, параметров, разделённых пробелами. Ввод каждой команды заканчивается нажатием клавиши ENTER.

1.1.6 Команды DOS
Любая команда, вводимая пользователем в MS DOS, вызывает выполнение либо внутренней команды (из COMMAND.COM) либо какой-либо программы или командного файла.
Команды DOS состоят из имени команды и, возможно, параметров разделённых пробелами. Имя команды и параметры могут набираться как прописными, так и строчными латинскими буквами. Ниже полностью описаны три команды DEL,REN,COPY, подробная характеристика, примеры правильного написания для работы с ними. Моя программа интерпретирует их с небольшими изменениями.
· Для удаления файлов в DOS имеется команда DEL.Формат команды
DEL Имя файла
В имени файла можно употреблять символы * и ?.
Примеры
DEL *.bak–удаление всех файлов с расширением bak из текущего каталога.
DEL my.txt- удаление файла my.txt из текущего каталога.
· Для переименования файлов в DOS имеется команда REN. Формат команды
REN имя-файла1 имя-файла2
Параметры. Параметр имя-файла1 задает имя переименуемого файла, параметр имя-файла2 –новое имя файла.
Примеры
REN xxx.doc xxx.txt –переименование файла ххх.doc в текущем каталоге. Новое имя файла xxx.txt.
· Для переименования файлов в DOS имеется команда COPY. Формат команды
COPY имя-файла1 имя-файла2
В имени файла можно употреблять символы * и ?, а также указывать имя диска и каталога.
Выполнение команд. Если в параметре имя-файла1 указанно имя каталога, то файлы копируются из этого каталога в, иначе – из текущего каталога. Каталог, в котором копируются файлы, можно задать параметром имя-файла2 или указанием каталога в параметре имя-файла2. Если этот каталог не задан, то файлы копируются в текущий каталог.
Если во втором параметре команды задано имя файла, то оно указывает новое имя копируемого файла. Символы * и ? в имени файла во втором параметре команды указывают, что соответствующие символы в именах копируемых файлов при копировании не меняются.
Примеры
COPY xxx.doc xxx.txt –копирование файла ххх.doc в текущем каталоге; создаётся файл xxx.txt в текущем каталоге.
COPY a *.* — копирование всех файлов из корневого каталога диска а в текущий каталог.
COPY a *.* d — копирование всех файлов из корневого каталога диска а в текущий каталог диска D .
COPY t*.doc c *.txt — копирование всех файлов с расширением.doc из каталога t текущего диска в текущий каталог диска с . Файлы получают расширение txt.
Если файл с таким же именем, как у копии, создаваемой командой COPY, уже существует, то он замещается без каких либо предупреждений.
1.2 Особенности языка програмирования С++
С++ программно независимый язык. На языке С++ пишутся операционные системы, различные программы и т.д. При написании своей программы я столкнулся с одной проблемой — это работа со строками, чтобы выполнить определённую задачу мне приходилось добавлять в программу ещё несколько или больше функций для устранения ошибок. Например
for (i=0;i<strlen(lptr);i++){ Разделение сткоки на два параметра
if (lptr[i]==’ ‘)break; Копирование в ff до пробела
ff[i]=lptr[i];}
strncat(fs,ff,i);
В ff копируется посимвольно строка размером i, но при просмотре новой строки оказывалось символов не i, а в несколько раз больше, приходилось использовать strncat, она вырезает не нужные символы. И так почти на каждом шагу были проблема. Это мои первые замечания по ошибкам, возможно их прибавится.

2. Программная часть

2.1 Постановка задачи

Перед началом выполнения данной курсовой работы я поставил для себя целью изучить принципы работы с файлами в операционной системе DOS, команды, позволяющие работать с файлами, а также функции и системные вызовы языка С++, позволяющие копирование, удаление, переименование файлов, работа с командной строкой. В данной работе я постаралась наиболее подробно изучить операционную систему DOS в программируемой части и частично других операционных систем, получить практические навыки работы с операционной системой DOS. В курсовой работе я буду создавать и описывать программу, которая позволит работать с файлами, а именно, копировать, переименовывать и удалять. Данная программа в дальнейшем может быть использована студентами для изучения работы с файлами на лабораторных занятиях по изучению теоретического материала и приобретения практических навыков по дисциплине «Системное Программное Обеспечение», а также программа может быть использована в работе с операционной системой MS DOS.

2.2 Построение алгоритма решения задачи
Алгоритм решения поставленной задачи, выполненный с помощью графического метода изображения алгоритмов – блок-схемой представлен ниже.
Алгоритм программы
Для реализации моей задачи используется следующий алгоритм (рисунок 1.).
Описание алгоритма
1. Ввод команды с клавиатуры
2. Индификация вводимой команды
3. Операции над параметрами команды
4. Выполнение команды

Рис. 1. Алгоритм программы.

2.3 Описание разработанной программы
Моя программа интерпретирует команды MS DOS
В программе можно пользоваться четырьмя командами
1) Exit- программа завершается.
2) Copy – копирование файла или файлов.
3) Ren –переименование файла.
4) Del –Удаление файла.
В программе я использую встроенные библиотеки С++. Таб. 1
В основном программа работает со строковыми функциями. Эти функции нужны для обработки строк с клавиатуры, для устранения ошибок С++.
· strtok –для устранения ошибок в строке
· strncat -копирует определённое количество символов в переменную.
· strstr — для поиска слова в строке.
· strcpy –копирует строку в переменную.
· strcat –добавляет строку в переменную.
· Strrev- реверсирует строку.
· Strlen- определяет количество символов в строке
· Strlwr-все символы преобразовывает в строчные.
· Strpbrk- ищет определённые символы.
Почти в любой программе не обойдешься без собственных функций, они упрощают программирование, программа становится более понятна и удобна в изучении. В моей программе я использую шесть своих функций FILCOP, GAD, GIP, DELFILE, RENFILE, COPYES.
· Filcop — функция для копирования файлов.
· Gad – функция для выреза одного пути без имени файла из строки.
· Gip – функция для выреза одного имени файла из строки.
· Delete- функция удаления файлов.
· Renfile- функция переименования файлов.
· Copyes- функция обрабатывающая строку и вызова функции Filcop. Она разделяет строку на два параметра копирования- какой файл и куда копировать с учётов шаблонов (*?).
После загрузки программы появится меню с приглашением «>>>>». Теперь можно вводить команды. После ввода команды программа определяет её.
Если
· EXIT — программа завершается.
· REN –оставляет в введённой строке только два параметра (какой файл, на какой переименовывать) и вызывает функцию Renfile.
· Copy- оставляет в введённой строке только два параметра (какой файл, куда копировать и что), вызывает функцию Copyes.
· Del- оставляет в введённой строке только один параметр (какой файл) и вызывает функцию Delete.
В программе в основном я работаю со строковыми переменными и функциями для вырезания путей с файлами, путей, и т.д. Это всё нужно, чтобы использовать шаблоны в некоторых командах (Copy,delete).

Название библиотеки
Описание функции

Stdlib.h
Преобразование данных, генерирование случайных чисел, получение и установка переменных среды SHELL

Time.h
Организация имитационного процесса системного времени

Iostream.h
Потоки ввода вывода

Conio.h
Прототип функции задержки

Stdio.h
Обозначение потоковых файлов

Sysstat.h
Системные вызовы для работы с файлами

Systypes.h
Системные вызовы для работы с файлами

Fstream.h
Операции ввода вывода в файлах

String.h
Обработка строк

Fcntl.h
Флаги

Io.h
Организация ввода вывода

Math.h
Использование математических функций

Таблица 1. Библиотеки C++.

3. Заключение
В данной курсовой работе были рассмотрены команды MS DOS, позволяющие копировать, удалять, переименовывать файлы. А также функции и системные вызовы языка С++, позволяющие организовывать копирование, удаление файлов и т.д. Данная работа позволила мне более углубленно изучить работу с строковыми функциями, различные тонкости языка и увидеть недостатки С++. В курсовой работе была создана и описана программа, позволяющая работать с файлами в среде MS DOS. Данная программа может быть использована студентами для изучения работы с файлами в среде MS DOS и частично с UNIX, на лабораторных занятиях по изучению теоретического материала и приобретения практических навыков по дисциплине «Системное Программное Обеспечение».

4. СПИСОК ЛИТЕРАТУРЫ
1) Герхард Франкен, Сергей Молявко MS DOS для пользователя.- Киев, 1993.
2) С. Краковяк Основы организации и функционирования ОС ЭВМ.- М. Мир, 1998.
3) С. Кейслер Проектирование операционных систем для малых ЭВМ. — М. Мир, 1996.
4) Э. Немет, Г. Снайдер Unix. Руководство системного администратора. — Киев. BHV, 1997.
5) Дегтярев Е.К. Введение в Unix.- М. Память, 1992.
6) Свиридов С.В. Системные вызовы ОС UNIX.-М. Память, 1992.
7) Дунаев С. UNIX-сервер. Настройка, конфигурирование, работа в операционной среде, Internet-возможности в 2-х томах.Том 1.-М. Диалог -МИФИ, 1999.
8) Дунаев С. UNIX-сервер. Настройка, конфигурирование, работа в операционной среде, Internet-возможности в 2-х томах.Том 2.-М. Диалог -МИФИ, 1999.
9) Шамер Л., Негус К. UNIX (серия «Без проблем») Пер. с англ. -М. Бином, 1998.
10) Кейлингерт П. Элементы операционных систем. Введение для пользователей. Пер. с англ.-М. Мир,1995.
11) Персон Р. Windows 95 в подлиннике. Пер. с англ.-СПБ BHV-Санкт -Петербург, 1996.

5. Приложение
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <dir.h>
//Процедура для копирования файла
//FILCOP———————————————————————-
int FILCOP(char *sd,char *sf)
{
FILE *in, *out;
in = fopen(sd, r»); открывает фаил и копирует в буфер содержимое
out = fopen(sf, «w»); открывает или создаёт фаил
while (!feof(in))
fputc(getc(in), out); заполняет новый фаил
fclose(in); fclose(out); закрывает фаил
return(0); возрашет функции значение 0
}
Функция для создания полного пути
//ANY———————————————————————-
char *GAD(char *sm, char *namf)
{ char *zzx,kr[254],*newfil; kr[0]=»; устанавливаем переменые
zzx=strpbrk(sm,»»); ишет «»
if (zzx) { если есть
strcpy(kr,sm); копирует в kr путь без имени файла
strrev(kr); реверс строки
newfil = strstr(kr, «»); отрезает до «»
strrev(newfil); реверс строки
strcat(newfil,namf); добовляет имя файла в путь
strlwr(newfil); уменьшает символы
return newfil;
}
else return namf;
}
Функция для вырезки только путя
//ANY55———————————————————————-
char *GIP(char *sm)
{ char *zzx,kr[254],*newfil; kr[0]=»; устанавливаем переменые
zzx=strpbrk(sm,»»); ишет «»
if (zzx) { если есть
strcpy(kr,sm); копирует в kr путь без имени файла
strrev(kr); реверс строки
newfil = strstr(kr, «»); отрезает до «»
strrev(newfil);реверс строки
strlwr(newfil);уменьшает символы
return newfil;
} else return sm;
}
Удаление фаил (а,ов)
//DELFILE———————————————————————-
DELFILE(char *sm)
{ //char *newfil, kr[254]; устанавливаем переменые
struct ffblk ffblk; Структура о файле
int done;
done = findfirst(sm,&ffblk,0); ишет файлы
if (done==-1) cout<<«nError»; если путь неправельный- ошибка
while (!done) ишет пока не кончатся файлы
{
if (remove(GAD(sm,ffblk.ff_name)) == 0) удаление файла
cout<<«n Delete 1 files»; вывод на экран текста
else
cout<<«n File do not delete «; вывод на экран текста
done = findnext(&ffblk); следующий файл
}
return (0);
}
Переименование фаила
//RENAME———————————————————————-
RENFILE(char *sm,char *nm)
{
strcpy(kr,sm); копирует в kr путь без имени файла
strrev(kr); реверс строки
newfil = strstr(kr, «»); отрезает до «»
strrev(newfil);реверс строки
strlwr(newfil);уменьшает символы
if (rename(sm, nm) == 0) Фу Переименование фаила
cout<<«File renamed»; вывод на экран текста
else
cout<<«File do not renamed»; вывод на экран текста
return (0);
}
//COPY———————————————————————-
COPYES(char *sm)
{
char *nnj,zt[254],zt2[254]; int ji=0,jiz=0; установка перемен
//ON>>>>TWO************************************************
char ff[254],fs[254],*ptr7,ffg[254],fss[254]; fs[0]=»; fss[0]=»; установка перемен
strcpy(kr,sm); копирует в kr путь без имени файла
strrev(kr); реверс строки
newfil = strstr(kr, «»); отрезает до «»
strrev(newfil);реверс строки
strlwr(newfil);уменьшает символы
Разделяем строку два параметра на первый
for (int i=0;i<strlen(sm);i++){ if (sm[i]==’ ‘)break; ff[i]=sm[i];}
strncat(fs,ff,i); ptr7 = strstr(sm, » «); Чтобы ошибок небыло
Разделяем строку два параметра на первый
for (i=1;i<strlen(ptr7);i++){ if (ptr7[i]==’ ‘)break; ffg[i-1]=ptr7[i];}
strncat(fss,ffg,i-1); Чтобы ошибок небыло
//******************************************************
char nbb[254]; уст перемен
Если есть *
if (strpbrk(fss,»*»)){
strrev(fss); nbb[0]=»; реверс FSS
for (int q=0;q<strlen(fss);q++){ Разделение на путь и фаил
if (fss[q]!=») nbb[q]=fss[q];else break; } копируем в NBB путь
strrev(fss);strrev(nbb); Реверсы
//cout<<«n REEEEE— «<<nbb;
}
//____________________________________________________________
char dt[254],dt2[254]; dt[0]=»; dt2[0]=»; int fll=0,ii=-2; уст перемен
Разделяем строку фаил на наз и расширение
for (int q=0;q<strlen(nbb);q++){ цикл
if (nbb[q]==’.’) fll=1; Если точка то флаг 1
if (fll==0) {dt[q]=nbb[q]; } Если 0 копируем в DT
if (fll==1) {ii++;dt2[ii]=nbb[q]; } Если 1 копируем в DT2
}
//____________________________________________________________
//cout<<«n REEEEE111— «<<dt;
//cout<<«n REEEEE222— «<<dt2;
//—————————————————————————
struct ffblk ffblk; Структура о файле
int done;
done = findfirst(fs,&ffblk,0); ишет фаилы
if (done==-1) cout<<«nError»; если нет то ошибка
while (!done) начало поиска
{
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
zt[0]=»; zt2[0]=»; fll=0;ii=-2;nnj=ffblk.ff_name; ji=0;jiz=0; Установка перемен
Разделение первого пар файла на имя и расширение
for (q=0;q<strlen(nnj);q++){ цикл
if (nnj[q]==’.’) fll=1; если точка то флаг 1
if (fll==0) {ji++;zt[q]=nnj[q]; } Если 0 копируем в ZT
if (fll==1) {jiz++;ii++;zt2[ii]=nnj[q]; } } Если 1 копируем в ZT2
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
zt[ji]=»; zt2[jiz-1]=»; char *rrr; rrr=NULL; Обнулить перем
char *path2,bpn[254]; установка перем
path2=GIP(fss); Обработка моей функции
bpn[0]=»; strcpy(bpn,path2); копир в BPN
Если во втором параметре есть звёздочки то из первого парам заменяется второй
Замена у второго параметра имени именем первого параметра
if (dt[0]!=’*’){ strcat(bpn,dt); strcat(bpn,».»); } else
{ strcat(bpn,zt); strcat(bpn,».»); }
if (dt2[0]!=’*’) strcat(bpn,dt2); else strcat(bpn,zt2);
Замена у второго параметра расширения расширением первого параметра
strlwr(bpn); уменьшение символов
strcpy(kr,sm); копирует в kr путь без имени файла
strrev(kr); реверс строки
newfil = strstr(kr, «»); отрезает до «»
strrev(newfil);реверс строки
strlwr(newfil);уменьшает символы
FILCOP(GAD(fs,ffblk.ff_name),bpn); Обработка моей функции и копирование
done = findnext(&ffblk); следующий фаил
}
//—————————————————————————
return (0);
}
//MAIN———————————————————————-
void main()
{
char s[254],*ptr,*lptr; установка переменных
gotoxy(16,0); установка текста в опред. части экрана
cout<<«Interpretator commands DOS (COPY,DEL,REN)»; вывод на экран текста
gotoxy(0,23); установка текста в опред. части экрана
Enter метка
cout<<«n>>>»; вывод на экран текста
gets(s); strlwr(s); чтение с клавиатуры и уменшение символов
//++++++++++++++++DEL==================
strcpy(kr,sm); копирует в kr путь без имени файла
strrev(kr); реверс строки
newfil = strstr(kr, «»); отрезает до «»
strrev(newfil);реверс строки
strlwr(newfil);уменьшает символы
ptr = strstr(s, «del «); ишет «del »
if (strlen(ptr)!=0) { если есть
strcpy(s, ptr); копирует строку в S
int i,vb=-1; char sg[254]; установка переменных
for (i=4;i<strlen(s);i++){ Удаляет «del »
vb++;
sg[vb]=s[i]; заносит в sg
}
lptr=NULL; обнуляет lptr
lptr=strtok(sg,»»); Чтобы ошибок не было
DELFILE(lptr); Собственная функция
}
//++++++++++++++++REN==================
ptr = strstr(s, «ren «); ищет «ren »
if (strlen(ptr)!=0) { если есть
strcpy(s, ptr); копирут строку в S
int i,vb=-1; char sg[254]; установка переменных
for (i=4;i<strlen(s);i++){ удаляет «ren »
vb++;
sg[vb]=s[i]; заносит в SG
}
lptr=NULL; обнуляет lptr
lptr=strtok(sg,»»); Чтобы ошибок не было
//***************************************************
char ff[254],fs[254],*ptr7,ffg[254],fss[254]; устовка переменных
fs[0]=»; fss[0]=»; обнуление
for (i=0;i<strlen(lptr);i++){ Разделение сткоки на два параметра
if (lptr[i]==’ ‘)break; Копирование в ff до пробела
ff[i]=lptr[i];}
strncat(fs,ff,i); Чтобы ошибок не было
ptr7 = strstr(lptr, » «); ишет пробел
for (i=1;i<strlen(ptr7);i++){ Удаляет пробел и копирует в FFG
if (ptr7[i]==’ ‘)break;
ffg[i-1]=ptr7[i];}
strncat(fss,ffg,i); Чтобы ошибок не было
//***************************************************
RENFILE(fs,fss); Собственная функция
}
//++++++++++++++++COPY==================
ptr = strstr(s, «copy «); ешет «copy »
if (strlen(ptr)!=0) { Удаляет «copy »
strcpy(s, ptr); копирут строку в S
int i,vb=-1; char sg[254]; Установка перем
for (i=5;i<strlen(s);i++){ Удаляет copy
vb++;
sg[vb]=s[i]; копирует в SG
}
lptr=NULL; обнуляет lptr
lptr=strtok(sg,»»); Чтобы ошибок не было
strcpy(kr,sm); копирует в kr путь без имени файла
strrev(kr); реверс строки
newfil = strstr(kr, «»); отрезает до «»
strrev(newfil);реверс строки
strlwr(newfil);уменьшает символы
ptr =strstr(lptr,»con «); ишет «con »
if (ptr){ cout<<«nNot is function, re-enter»; goto Enter; }
Если есть выводит сообщение
ptr =strstr(lptr,»+»); ишет +
if (ptr){ cout<<«nNot is function, re-enter»; goto Enter; }
Если есть выводит сообщение
COPYES(lptr); Собственная функция
}
//++++++++++++++++EXIT==================
ptr = strstr(s, «exit»); ишет «exit»
strcpy(kr,sm); копирует в kr путь без имени файла
strrev(kr); реверс строки
newfil = strstr(kr, «»); отрезает до «»
strrev(newfil);реверс строки
strlwr(newfil);уменьшает символы
if (strlen(ptr)!=0) exit(EXIT_FAILURE);
если есть то выход программы
goto Enter; на метку
}

«