- •Техническое задание Назначение разработки
- •Требования к программе или программному изделию
- •Стадии и этапы разработки
- •Порядок контроля и приемки
- •Используемые системные вызовы и библиотечные функции:
- •Обработка клавиш Home и End:
- •Функция отображения списка имен файлов правой панели
- •Функция удаления:
- •Функция перемещения:
- •Функция переименования:
- •Функция выдачи сообщения об ошибке:
- •Порядок создания собственных библиотек :
- •Список использованной литературы:
- •Методические указания к выполнению курсовой работы по дисциплине “Системное программное обеспечение“ – Новочеркасск, 2012 г.
- •Скриншоты
Обработка клавиш 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");
}
}
}
Схема алгоритма: