Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 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; просмотров: 193; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.12.146.108 (0.01 с.) |