Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовой 261.docx
Скачиваний:
3
Добавлен:
27.09.2019
Размер:
608.29 Кб
Скачать

Обработка клавиш Home и End:

switch(KEY)

{

case KEY_HOME:

switch(activepanel)

{

case LEFT :

nL=scandir(pathL, &namelistL, 0, alphasort);

if (nL<0) {perror("scandir");endwin();exit(-1);}

upL=1; downL=(LINES-8); positionkursL=1;

paintdirL(pathL,nL,namelistL,upL,downL,positionkursL);

break;

case RIGHT :

nR=scandir(pathR, &namelistR, 0, alphasort);

if (nR<0) {perror("scandir");endwin();exit(-1);}

upR=1;downR=(LINES-8);positionkursR=1;

paintdirR(pathR,nR,namelistR,upR,downR,positionkursR);

}

break;

case KEY_END:

switch(activepanel)

{

case LEFT :

nL=scandir(pathL, &namelistL, 0, alphasort);

if (nL<0) {perror("scandir");endwin();exit(-1);}

for (j=1;j<nL;j++)

{

if(positionkursL<nL-1)positionkursL++;

if(positionkursL>=downL){upL++;downL++;}

}

paintdirL(pathL,nL,namelistL,upL,downL,positionkursL);}

break;

… }

Функция отображения списка имен файлов правой панели

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-18);

printw("Uid:%d", buf.st_uid);

if (S_ISDIR(buf.st_mode)) printw (" dir");

else if (S_ISLNK(buf.st_mode)) printw (" link");

else if (S_ISBLK(buf.st_mode)) printw (" block");

else if (S_ISREG(buf.st_mode)) printw (" reg");

else if (S_ISFIFO(buf.st_mode)) printw (" FIFO");

else printw (" -");

attrset(A_BOLD|A_UNDERLINE|BLACK_YELLOW); }

attrset(0|GREEN_BLUE);

move(LINES-4,COLS/2+1);printw(" name: %s ",namelist[positionkurs]->d_name);

refresh();

}

Void paintdirL(char* path,int n, struct dirent **namelist, int up, int down, int positionkurs) - отрисовка левой панели файлового менеджера. Набор параметров и возвращаемое значение аналогичны voidpaintdirR .

Схема алгоритма отображения панели

Функция удаления:

Int remf(char*path);

Данная функция удаляет выбранный файл или каталог с вложенными в него файлами. При удачном завершении каталог или файл удаляются, иначе выводится окно с ошибкой.

Параметры функции:

char* path – путь к текущему объекту;

Используемые библиотеки: <curses.h><dirent.h><stdlib.h><string.h>

<sys/dir.h><sys/stat.h><unistd.h><errno.h>

Тип возвращаемого значения- целое число.

Возвращаемое значение при ошибке -1.

Исходный код:

#include <…>

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

{

if (rmdir(path)!=0)

{

printerror("DIR is not empty");

}

}

}

Схема алгоритма:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]