![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Описание собственных функцийСтр 1 из 3Следующая ⇒ Порядок создания библиотеки Для создания библиотеки были использованы следующие файлы: - makedir.cpp, cut.cpp, fcopy.cpp, remdf.cpp – исходный файл C++, содержит собственные функции. - drawlib.cpp – исходный файл C++, содержит изменённые функции исходной программы. - directory.h – заголовочный файл для makedir.cpp, cut.cpp, fcopy.cpp, remdf.cpp Directory.h #ifndef DIRECTORY_H_ #define DIRECTORY_H_
int makedir (char *path); int remdf(char*path); int cutf(char*path, char*pathD); int copyfd(char*path, char*pathD); #endif /*DIRECTORY_H_*/
Drawlib.h
#ifndef DRAWLIB_H_ #define DRAWLIB_H_ //Идентификаторы активной панели #define LEFT 0//метка левой панели #define RIGHT 1//метка правой панели
//Идентификаторы клавиш #undef KEY_ENTER//переопределение идентефикатора описанного в curses #define KEY_ENTER 10// #define KEY_ESC 27//определение идентификатора для клавиши Esc #define KEY_TAB 9 #define WLINES (LINES/4+1) /* высота */ #define WCOLS (COLS/4*2) /* ширина */ #define Wy (LINES/3) /* y верхнего левого угла на экране */ #define Wx (COLS/4) /* x верхнего левого угла на экране */
//макросы цветовых пар #define BLUE_BLUE COLOR_PAIR(1) #define GREEN_BLUE COLOR_PAIR(2) #define BLUE_WHITE COLOR_PAIR(3) #define BLACK_WHITE COLOR_PAIR(4) #define WHITE_BLUE COLOR_PAIR(5) #define RED_BLUE COLOR_PAIR(6) #define BLACK_YELLOW COLOR_PAIR(7) #define YELLOW_BLACK COLOR_PAIR(8) #define BLACK_CYAN COLOR_PAIR(9) #define RED_CYAN COLOR_PAIR(10) #define YELLOW_CYAN COLOR_PAIR(11) #define BLACK_RED COLOR_PAIR(12) #define WHITE_RED COLOR_PAIR(13) #define YELLOW_RED COLOR_PAIR(14) #define WHITE_CYAN COLOR_PAIR(15)
//Функция получения полного имени файла char* getfullname(char* dirname,char* filename); //Функция очистки Левой панели void clearL(); //Функция очистки правой панели void clearR(); //Функция отображения панелей псевдографикой void drawframe(); //Функция отображения списка имен файлов левой панели void paintdirL(char* path,int n, struct dirent **namelist, int up, int down, int positionkurs); //Функция отображения списка имен файлов правой панели void paintdirR(char* path,int n, struct dirent **namelist, int up, int down, int positionkurs); void accesscheck(); void accessdev(); //Функция вывода сообщения об ошибке void printerror (const char* text); void name(char nn[33]); #endif /*DRAWLIB_H_*/ Описание собственных функций void paintdirR(char* path,int n, struct dirent **namelist, int up, int down, int positionkurs) - отрисовка правой панели файлового менеджера. Параметры функции: char* path – путь к текущему каталогу; struct dirent **namelist – структура с именами всех файлов каталога; up – верхняя граница видимой части списка файлов; down – нижняя граница видимой части списка файлов; int positionkurs – положение курсора в списке файлов. Возвращаемое значение – void. Cхема алгоритма Функция отображения списка имен файлов правой панели void paintdirR(char* path,int n, struct dirent **namelist, int up, int down, int positionkurs) { struct stat buf;//структура со сведениями о файле clearR(); drawframe(); attrset(0|BLACK_WHITE); move(1,COLS/2+1); printw("~%s",strrchr(path,'/')); int numberline;//номера строк, на которых выводятся имена файлов numberline=4;//первая строка с именем if(down>n) down=n; for (int i=up;i<down;i++,numberline++) { move(numberline,COLS/2+2);attrset(0|GREEN_BLUE); lstat(getfullname(path,namelist[i]->d_name),&buf); if(S_ISDIR(buf.st_mode)) attrset(A_BOLD|GREEN_BLUE); if(i==positionkurs)attrset(A_BOLD|A_UNDERLINE|BLUE_WHITE); printw("%s",namelist[i]->d_name); move(numberline,COLS-12); accessdev(); move(numberline,COLS-22); printw("%zu", buf.st_size); attrset(A_BOLD|A_UNDERLINE|BLACK_YELLOW); } attrset(0|GREEN_BLUE); move(LINES-4,COLS/2+1);printw(" name: %s ",namelist[positionkurs]->d_name); accesscheck(); refresh(); }
void paintdirL(char* path,int n, struct dirent **namelist, int up, int down, int positionkurs) - отрисовка левой панели файлового менеджера. Набор параметров и возвращаемое значение аналогичны void paintdirR . Функция создания нового каталога int makedir(char*path); Данная функция создает новый каталог. При ее вызове появляется окно со строкой ввода имени нового каталога. При удачном завершении создается новый каталог, иначе выводится окно с ошибкой. Параметры функции: char* path – путь к каталогу; Используемые библиотеки:<curses.h><dirent.h><stdlib.h><string.h> <sys/dir.h><sys/stat.h><unistd.h><errno.h> Тип возвращаемого значения- целое число. Возвращаемое значение при ошибке -1. Схема алгоритма Int positionkurs – положение курсора в списке файлов. char* othpath – новый путь. Используемые библиотеки: аналогично используемым в предыдущей функции и подключается еще <fcntl.h> Схема алгоритма
Функция удаления: int remdf(char*path) { DIR*dir; struct dirent*d; struct stat buf; stat(path,&buf); if(access(path,R_OK)<0) { printerror("No right of access!"); return -1; } if(S_ISDIR(buf.st_mode)!=1) { unlink(path); return 0; } else { dir=opendir(path); while((d=readdir(dir))!=NULL) { if(!strcmp(d->d_name,"..")||(!strcmp(d->d_name,"."))) continue; if(remdf(getfullname(path,d->d_name))==-1) return -1; } closedir(dir); rmdir(path); return 0; } }
Функция перемещения: int cutf(char*path, char*pathD); Функция перемещения файла, либо каталога с вложенными в него файлами. При вызове появляется окно с вводом нового имени, а после файл или каталог перемещаются по заданному пути в соседней панели. При неудачном завершении появится окно с ошибкой. char buf[5000] – буфер для чтения/записи; char n_name[33] – буфер для нового имени; int file1, file2 – дескрипторы файлов; int skr, skw – переменные для чтения/записи; DIR*dir – каталог; struct dirent d – структура для чтения каталога; struct stat tip – структура для получения информации о файлах.
Параметры функции: char* path – путь к текущему объекту; char* pathD – новый путь к объекту; Используемые библиотеки: аналогично используемым в fcopy(); Схема алгоритма
Функция перемещения: int cutf(char*path, char*pathD) { char buf[5000]; char n_name[33]; int file1, file2, skr, skw; DIR*dir; struct dirent*d; struct stat tip; stat(path,&tip); if(!S_ISDIR(tip.st_mode)) { file1=open(path,O_RDONLY,S_IRWXU); if(access(path,R_OK)<0) { if(errno==EACCES) { printerror("No right of access!"); return -1; } } name(n_name); file2=open((getfullname(pathD,n_name)),O_EXCL|O_CREAT|O_WRONLY,S_IRUSR|S_IWUSR); skr=read(file1,buf,100); skw=write(file2,buf,skr); skr=close(file1); skw=close(file2); unlink(path); return 0; } else { dir=opendir(path); if(access(path,R_OK)<0) { if(errno==EACCES) { printerror("No right of access!"); return -1; } } name(n_name); mkdir(getfullname(pathD,n_name),S_IRWXU); chdir(path); rewinddir(dir); while((d=readdir(dir))!=NULL) { if((strcmp(".",d->d_name)==0)||(strcmp("..",d->d_name)==0)) continue; file1=open(d->d_name,O_RDONLY,S_IRWXU); file2=open(getfullname(getfullname(pathD,n_name),d->d_name),O_EXCL|O_CREAT|O_WRONLY,S_IRUSR|S_IWUSR); skr=read(file1,buf,100); skw=write(file2,buf,skr); skr=close(file1); skr=close(file2); unlink(d->d_name); } closedir(dir); chdir(".."); rmdir(path); return 0; } }
Функция переименования: void name(char nn[33]); Функция переименования. При вызове появляется окно с вводом информации. Используемые библиотеки: данные функции находятся в файле drawlib.cpp поэтому библиотеки там уже были подключены заранее Схема алгоритма
Функция переименования: void name(char nn[33]) { WINDOW*w; const char*namewin="Move/Rename"; w=newwin(WLINES,WCOLS,Wy+1,Wx+1); wrefresh(w); wattrset(w,COLOR_PAIR(10)); werase(w); box(w,0,0); wmove(w,0,(WCOLS-strlen(namewin))/2); wattrset(w,COLOR_PAIR(12)); wprintw(w," %s ",namewin); wattrset(w,COLOR_PAIR(10)); for(int i=1;i<=(WCOLS-2);i++) for(int j=1;j<=(WCOLS-2);j++) mvwaddstr(w,j,i," "); mvwaddstr(w,WLINES/2-2,(WCOLS-16)/2,"Input new name"); wattrset(w,COLOR_PAIR(10)); mvwaddstr(w,WLINES/2+2,(WCOLS-2)/2,"OK"); wattrset(w,COLOR_PAIR(4)); for(int i=3;i<=(WCOLS-4);i++) mvwaddstr(w,WLINES/2,i," "); wmove(w,WLINES/2,3); echo(); curs_set(1); wgetstr(w,nn); noecho(); curs_set(0); delwin(w); }
Функция полной информации об объекте: void accesscheck(); Функция краткой информации об объектах: void accessdev(); Эти две функции показывают информацию об объектах. Используемые библиотеки: данные функции находятся в файле drawlib.cpp поэтому библиотеки там уже были подключены заранее Результат работы программы Список литературы
1. А. Роббинс. Linux: программирование в примерах. -М.:Кудиц-образ, 2005. - 656 стр. 2. А. Робачевский. Операционная система UNIX. –СПб.:БХВ-Петербург, 2010. - 656 стр.
Порядок создания библиотеки Для создания библиотеки были использованы следующие файлы: - makedir.cpp, cut.cpp, fcopy.cpp, remdf.cpp – исходный файл C++, содержит собственные функции. - drawlib.cpp – исходный файл C++, содержит изменённые функции исходной программы. - directory.h – заголовочный файл для makedir.cpp, cut.cpp, fcopy.cpp, remdf.cpp Directory.h #ifndef DIRECTORY_H_ #define DIRECTORY_H_
int makedir (char *path); int remdf(char*path); int cutf(char*path, char*pathD); int copyfd(char*path, char*pathD); #endif /*DIRECTORY_H_*/
Drawlib.h
#ifndef DRAWLIB_H_ #define DRAWLIB_H_ //Идентификаторы активной панели #define LEFT 0//метка левой панели #define RIGHT 1//метка правой панели
//Идентификаторы клавиш #undef KEY_ENTER//переопределение идентефикатора описанного в curses #define KEY_ENTER 10// #define KEY_ESC 27//определение идентификатора для клавиши Esc #define KEY_TAB 9 #define WLINES (LINES/4+1) /* высота */ #define WCOLS (COLS/4*2) /* ширина */ #define Wy (LINES/3) /* y верхнего левого угла на экране */ #define Wx (COLS/4) /* x верхнего левого угла на экране */
//макросы цветовых пар #define BLUE_BLUE COLOR_PAIR(1) #define GREEN_BLUE COLOR_PAIR(2) #define BLUE_WHITE COLOR_PAIR(3) #define BLACK_WHITE COLOR_PAIR(4) #define WHITE_BLUE COLOR_PAIR(5) #define RED_BLUE COLOR_PAIR(6) #define BLACK_YELLOW COLOR_PAIR(7) #define YELLOW_BLACK COLOR_PAIR(8) #define BLACK_CYAN COLOR_PAIR(9) #define RED_CYAN COLOR_PAIR(10) #define YELLOW_CYAN COLOR_PAIR(11) #define BLACK_RED COLOR_PAIR(12) #define WHITE_RED COLOR_PAIR(13) #define YELLOW_RED COLOR_PAIR(14) #define WHITE_CYAN COLOR_PAIR(15)
//Функция получения полного имени файла char* getfullname(char* dirname,char* filename); //Функция очистки Левой панели void clearL(); //Функция очистки правой панели void clearR(); //Функция отображения панелей псевдографикой void drawframe(); //Функция отображения списка имен файлов левой панели void paintdirL(char* path,int n, struct dirent **namelist, int up, int down, int positionkurs); //Функция отображения списка имен файлов правой панели void paintdirR(char* path,int n, struct dirent **namelist, int up, int down, int positionkurs); void accesscheck(); void accessdev(); //Функция вывода сообщения об ошибке void printerror (const char* text); void name(char nn[33]); #endif /*DRAWLIB_H_*/ Описание собственных функций void paintdirR(char* path,int n, struct dirent **namelist, int up, int down, int positionkurs) - отрисовка правой панели файлового менеджера. Параметры функции: char* path – путь к текущему каталогу; struct dirent **namelist – структура с именами всех файлов каталога; up – верхняя граница видимой части списка файлов; down – нижняя граница видимой части списка файлов; int positionkurs – положение курсора в списке файлов. Возвращаемое значение – void. Cхема алгоритма
|
||
Последнее изменение этой страницы: 2016-04-07; просмотров: 131; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.236.209.138 (0.005 с.) |