Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Описание собственных функций

Поиск

Порядок создания библиотеки

Для создания библиотеки были использованы следующие файлы:

- 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 с.)