- •Оглавление
- •Введение:
- •Задание:
- •Функциональные клавиши:
- •Используемые системные вызовы и библиотечные функции:
- •Порядок создания библиотеки
- •Directory.H
- •Drawlib.H
- •Описание собственных функций
- •Cхема алгоритма
- •Intmakedir(char*path);
- •Int fcopy (char* path, struct dirent **list, int poskurs, char* othpath);
- •Int positionkurs – положение курсора в списке файлов.
- •Int remdf(char*path);
- •Int cutf(char*path, char*pathD);
- •Void name(char nn[33]);
- •Voidaccesscheck();
- •Voidaccessdev();
- •Void printerror(const char* text);
- •Void printerror(const char* text)
- •Порядок создания собственных библиотек :
- •Результат работы программы
- •Список литературы
Порядок создания библиотеки
Для создания библиотеки были использованы следующие файлы:
- 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 .
Функция создания нового каталога