master
root 2022-06-23 00:04:16 +03:00
parent 1e8376b770
commit 671984d66d
6 changed files with 136 additions and 111 deletions

View File

@ -1,7 +1,7 @@
CC=gcc
CC=gcc -std=c99
CFLAGS=-g -Wall -Wextra -O0
LDFLAGS=
SOURCES=main.c config.h structs.h structs.c
SOURCES=main.c config.h structs.h structs.c handler.h include/ui.h
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=work1

109
handler.h
View File

@ -1,3 +1,4 @@
#include "include/ui.h"
#include "structs.h"
#include <stdio.h>
@ -7,20 +8,20 @@
#define OBJECT_FOLDER 1
#define OBJECT_FILE 2
int checkCommandValid(char* command)
int checkCommandValid(char *command)
{
for (size_t i = 0; i < COMMAND_COUNT; i++)
{
if (strcmp(allowedCommands[i], command) == 0)
{
return SUCCESS;
}
}
return FAILURE;
for (size_t i = 0; i < COMMAND_COUNT; i++)
{
if (strcmp(allowedCommands[i], command) == 0)
{
return SUCCESS;
}
}
return FAILURE;
}
int checkMinorArgumentValid(char* command, char* argument)
int checkMinorArgumentValid(char *command, char *argument)
{
if (argument[1] == 'l' || argument[1] == 'r')
{
@ -56,16 +57,16 @@ int checkMinorArgumentValid(char* command, char* argument)
return FAILURE;
}
int checkMajorArgumentValid(char* argument, Folder* RootFolder, Folder* CurrentFolder, Folder** ResultFolder, File** ResultFile)
int checkMajorArgumentValid(char *argument, Folder *RootFolder, Folder *CurrentFolder, Folder **ResultFolder, File **ResultFile)
{
Folder* ptr;
char* path = (char*) malloc(MAX_COMMAND_LEN);
Folder *ptr;
char *path = (char *)malloc(MAX_COMMAND_LEN);
strcpy(path, argument);
for (size_t i = 0; i < strlen(path); i++)
{
if(path[i] == '\n')
if (path[i] == '\n')
{
path[i] = '\0';
}
@ -88,7 +89,7 @@ int checkMajorArgumentValid(char* argument, Folder* RootFolder, Folder* CurrentF
int foundFlag;
while (istr != NULL)
{
{
foundFlag = 1;
for (size_t i = 0; i < CurrentFolder->folders_count_cur; i++)
{
@ -99,13 +100,13 @@ int checkMajorArgumentValid(char* argument, Folder* RootFolder, Folder* CurrentF
break;
}
}
if(foundFlag)
if (foundFlag)
{
int isFileFlag = 0;
for (size_t i = 0; i < strlen(istr); i++)
{
if(istr[i] == '.')
if (istr[i] == '.')
{
isFileFlag = 1;
break;
@ -114,8 +115,8 @@ int checkMajorArgumentValid(char* argument, Folder* RootFolder, Folder* CurrentF
if (isFileFlag)
{
char* filename = (char*) malloc(filename_lenth + 1);
char* extension = (char*) malloc(extinsion_lenth + 1);
char *filename = (char *)malloc(filename_lenth + 1);
char *extension = (char *)malloc(extinsion_lenth + 1);
int extFlag = 0;
int writeCount = 0;
@ -129,8 +130,8 @@ int checkMajorArgumentValid(char* argument, Folder* RootFolder, Folder* CurrentF
writeCount = 0;
continue;
}
if(extFlag)
if (extFlag)
{
filename[writeCount] = istr[i];
}
@ -159,7 +160,7 @@ int checkMajorArgumentValid(char* argument, Folder* RootFolder, Folder* CurrentF
free(filename);
free(extension);
}
printf("Cannot resolve %s\n", istr);
return WRONG_ARGUMENT_FAILURE;
}
@ -173,21 +174,21 @@ int checkMajorArgumentValid(char* argument, Folder* RootFolder, Folder* CurrentF
return OBJECT_FOLDER;
}
int checkArgumentValid(char* command, char* argument, Folder* RootFolder, Folder* CurrentFolder, Folder** resultFolder, File** resultFile)
int checkArgumentValid(char *command, char *argument, Folder *RootFolder, Folder *CurrentFolder, Folder **resultFolder, File **resultFile)
{
Folder* _ResultFolder;
File* _ResultFile;
Folder *_ResultFolder;
File *_ResultFile;
int iResult;
if(argument == NULL)
if (argument == NULL)
{
return WRONG_ARGUMENT_FAILURE;
}
if(argument[0] == '-')
if (argument[0] == '-')
{
if(checkMinorArgumentValid(command, argument))
if (checkMinorArgumentValid(command, argument))
{
return WRONG_OPTION;
}
@ -215,7 +216,7 @@ int checkArgumentValid(char* command, char* argument, Folder* RootFolder, Folder
return SUCCESS;
}
int executeCommand(char* command, char* minorArg, Folder* majorArgFolder, File* majorArgFile, int majorArgIsFolder, Folder* RootFolder, Folder** CurrentFolder)
int executeCommand(char *command, char *minorArg, Folder *majorArgFolder, File *majorArgFile, int majorArgIsFolder, Folder *RootFolder, Folder **CurrentFolder)
{
if (!strcmp(command, "cd"))
{
@ -223,14 +224,14 @@ int executeCommand(char* command, char* minorArg, Folder* majorArgFolder, File*
{
return FAILURE;
}
*CurrentFolder = majorArgFolder;
return SUCCESS;
}
else if (!strcmp(command, "ls"))
{
Folder* PrintDirectory;
Folder *PrintDirectory;
if (!majorArgIsFolder)
{
PrintDirectory = *CurrentFolder;
@ -240,7 +241,7 @@ int executeCommand(char* command, char* minorArg, Folder* majorArgFolder, File*
{
PrintDirectory = majorArgFolder;
}
if (minorArg != NULL)
print_list(PrintDirectory, 1);
@ -253,7 +254,6 @@ int executeCommand(char* command, char* minorArg, Folder* majorArgFolder, File*
if (!majorArgIsFolder)
{
// Работаем с файлом, удаление MajorArgFile
}
else
@ -269,28 +269,28 @@ int executeCommand(char* command, char* minorArg, Folder* majorArgFolder, File*
}
}
int commandParserHandler(char* input, Folder* RootFolder, Folder** CurrentFolder)
int commandParserHandler(char *input, Folder *RootFolder, Folder **CurrentFolder)
{
int result = SUCCESS; // Если что-то пойдет не так, то он изменится
char* sep = " ";
char* str = (char*) malloc(MAX_COMMAND_LEN), *istr;
char *sep = " ";
char *str = (char *)malloc(MAX_COMMAND_LEN), *istr;
int i = 0; // Счетчик обработанных лексемм
strcpy(str, input);
istr = strtok(str, sep);
char* command = (char*) malloc(MAX_COMMAND_LEN);
char* arg1 = (char*) malloc(MAX_COMMAND_LEN);
char* arg2 = (char*) malloc(MAX_COMMAND_LEN);
char *command = (char *)malloc(MAX_COMMAND_LEN);
char *arg1 = (char *)malloc(MAX_COMMAND_LEN);
char *arg2 = (char *)malloc(MAX_COMMAND_LEN);
int optionFlag = 0;
File* ResultFile = NULL;
Folder* ResultFolder = NULL;
File *ResultFile = NULL;
Folder *ResultFolder = NULL;
while(istr != NULL)
while (istr != NULL)
{
// Обрабатываем команду/аргумент
switch (i)
@ -304,8 +304,8 @@ int commandParserHandler(char* input, Folder* RootFolder, Folder** CurrentFolder
istr[i] = '\0';
}
}
if (checkCommandValid(istr)) // Если команда неправильная
if (checkCommandValid(istr)) // Если команда неправильная
{
printf("Incorrect Command!");
result = FAILURE;
@ -313,7 +313,7 @@ int commandParserHandler(char* input, Folder* RootFolder, Folder** CurrentFolder
}
strcpy(command, istr);
break;
case 1:
// аргумент 1
if (checkArgumentValid(command, istr, RootFolder, *CurrentFolder, &ResultFolder, &ResultFile))
@ -341,10 +341,10 @@ int commandParserHandler(char* input, Folder* RootFolder, Folder** CurrentFolder
result = WRONG_OPTION;
goto cleanup;
}
strcpy (arg2, istr);
strcpy(arg2, istr);
break;
default:
break;
}
@ -357,10 +357,11 @@ int commandParserHandler(char* input, Folder* RootFolder, Folder** CurrentFolder
result = executeCommand(command, arg1, ResultFolder, ResultFile, ResultFolder != NULL, RootFolder, CurrentFolder);
// printf("- exec: %d", r);
cleanup: free(str);
cleanup:
free(str);
free(command);
free(arg1);
free(arg2);
return result;
}

45
main.c
View File

@ -1,12 +1,12 @@
#include <stdio.h>
// #include "structs.h"
#include "include/ui.h"
#include "handler.h"
int main(int argc, char** argv)
int main(int argc, char **argv)
{
Folder* CurrentFolder;
Folder *CurrentFolder;
Folder RootFolder;
createFolder("root", &RootFolder);
@ -19,6 +19,19 @@ int main(int argc, char** argv)
addFolder("test3", &RootFolder);
addFolder("test11", &RootFolder.folders[0]);
addFolder("test12", &RootFolder.folders[0]);
addFolder("test11", &RootFolder.folders[0].folders[1]);
addFile("test", "exe", &RootFolder.folders[0]);
print_path(&RootFolder.folders[0].folders[0], NULL);
print_path(NULL, &RootFolder.folders[0].files[0]);
find_folder("test11", &RootFolder);
delete_folder(&RootFolder.folders[0].folders[1].folders[0]);
find_folder("test11", &RootFolder);
// Folder* ResultFolder = NULL;
// File* ResultFile = NULL;
@ -37,22 +50,22 @@ int main(int argc, char** argv)
// else
// printf("ResultFolder is NULL\n");
/*
char *buf;
char* buf;
while (1)
{
printf("%s > ", CurrentFolder->filename);
buf = commandCallHandler();
if (buf == NULL)
while (1)
{
printf("Input too long!\n");
}
printf("%s > ", CurrentFolder->filename);
buf = commandCallHandler();
iResult = commandParserHandler(buf, &RootFolder, &CurrentFolder);
printf("result: %d\n", iResult);
}
if (buf == NULL)
{
printf("Input too long!\n");
}
iResult = commandParserHandler(buf, &RootFolder, &CurrentFolder);
printf("result: %d\n", iResult);
}*/
return 0;
}

View File

@ -44,25 +44,25 @@ int check_ext(char *ext)
return SUCCESS;
}
int checkFolderExists(char* folder_name, Folder *fld)
int checkFolderExists(char *folder_name, Folder *fld)
{
int i;
for (i = 0; i < fld->folders_count_cur; i++)
{
if (!strcmp(folder_name, fld->folders[i].filename))
return EXISTING_NAME_FAILURE;
}
{
if (!strcmp(folder_name, fld->folders[i].filename))
return EXISTING_NAME_FAILURE;
}
return SUCCESS;
}
int checkFileExists(char* file_name, char* extension, Folder *fld)
int checkFileExists(char *file_name, char *extension, Folder *fld)
{
int i;
for (i = 0; i < fld->files_count_cur; i++)
{
if (!strcmp(extension, fld->files[i].extension) && !strcmp(file_name, fld->files[i].filename))
return EXISTING_NAME_FAILURE;
}
{
if (!strcmp(extension, fld->files[i].extension) && !strcmp(file_name, fld->files[i].filename))
return EXISTING_NAME_FAILURE;
}
return SUCCESS;
}
@ -131,7 +131,7 @@ int addFolder(char *folder_name, Folder *fld)
Folder newFolder;
Folder *buffer;
if(checkFolderExists(folder_name, fld)) // если папки не существует...
if (checkFolderExists(folder_name, fld)) // если папки не существует...
{
return EXISTING_NAME_FAILURE;
}
@ -165,7 +165,7 @@ int addFolder(char *folder_name, Folder *fld)
free(buffer);
}
fld->folders[fld->folders_count_cur].parent = fld;
fld->folders[fld->folders_count_cur - 1].parent = fld;
return SUCCESS;
}
@ -213,7 +213,7 @@ int addFile(char *file_name, char *extension, Folder *fld)
free(buffer);
}
fld->files[fld->files_count_cur].parent = fld;
fld->files[fld->files_count_cur - 1].parent = fld;
return SUCCESS;
}
@ -253,44 +253,44 @@ int print_list(Folder *fld, int mode)
void delete_file(File *deleting)
{
int i; //iterator
int file_ind=-1;
if (deleting != NULL) {
Folder* parent = deleting->parent;
int i; // iterator
int file_ind = -1;
if (deleting != NULL)
{
Folder *parent = deleting->parent;
for (i = 0; i < parent->files_count_cur; i++)
{
if (parent->files[i] == deleting)
if (&(parent->files[i]) == deleting)
file_ind = i;
}
for (i = file_ind+1; i < parent->files_count_cur; i++)
for (i = file_ind + 1; i < parent->files_count_cur; i++)
{
parent->files[i] = parent->files[i + 1];
}
parent->files[parent->files_count_cur - 1] = NULL;
parent->files_count_cur--;
}
}
void delete_folder(Folder* deleting)
void delete_folder(Folder *deleting)
{
int i; //iterator
int i; // iterator
int fold_ind = -1;
if (deleting != NULL) {
Folder* parent = deleting->parent;
if (deleting != NULL)
{
Folder *parent = deleting->parent;
for (i = 0; i < parent->folders_count_cur; i++)
{
if (parent->folders[i] == deleting)
if (&(parent->folders[i]) == deleting)
fold_ind = i;
}
free(deleting->files);
while (deleting->folders_count_cur)
{
delete_folder(deleting->folders[0]);
delete_folder(&(deleting->folders[0]));
}
free(deleting->folders);
@ -298,14 +298,14 @@ void delete_folder(Folder* deleting)
{
parent->folders[i] = parent->folders[i + 1];
}
parent->folders[parent->folders_count_cur - 1] = NULL;
parent->folders[parent->folders_count_cur - 1];
parent->folders_count_cur--;
}
}
int print_path(Folder* fld, File* fil)
int print_path(Folder *fld, File *fil)
{
Folder* parent;
Folder *parent;
if (fld != NULL)
{
@ -331,24 +331,27 @@ int print_path(Folder* fld, File* fil)
return 1;
}
void find_folder(char* name, Folder* parent)
void find_folder(char *name, Folder *parent)
{
int i = 0;
// print_list(parent, 1);
for (i = 0; i < parent->folders_count_cur; i++)
{
if (checkFolderExists(name, parent->folders[i]) == EXISTING_NAME_FAILURE)
print_path(parent->folders[i]);
find_folder(name, parent->folders[i]);
// printf("Im in %s\n", parent->folders[i].filename);
if (!strcmp(name, parent->folders[i].filename))
print_path(&(parent->folders[i]), NULL);
find_folder(name, &(parent->folders[i]));
}
}
void find_file(char* name, char* ext, Folder* parent)
void find_file(char *name, char *ext, Folder *parent)
{
int i = 0;
for (i = 0; i < parent->files_count_cur; i++)
{
if (checkFileExists(name, ext, parent->files[i]) == EXISTING_NAME_FAILURE)
print_path(parent->files[i]);
find_file(name, ext, parent->folders[i]);
if (!strcmp(name, parent->files[i].filename) && !strcmp(ext, parent->files[i].extension))
print_path(NULL, &(parent->files[i]));
find_file(name, ext, &(parent->folders[i]));
}
}

View File

@ -38,7 +38,7 @@ typedef struct _Folder
struct _Folder *parent;
} Folder;
int checkFolderExists(char* folder_name, Folder *fld);
int checkFolderExists(char *folder_name, Folder *fld);
int createFolder(char *folder_name, Folder *folder);
@ -48,4 +48,12 @@ int addFile(char *file_name, char *extension, Folder *fld);
int print_list(Folder *fld, int mode);
int print_path(Folder *fld, File *fil);
void delete_file(File *deleting);
void delete_folder(Folder *deleting);
void find_folder(char *name, Folder *parent);
#endif

BIN
work1

Binary file not shown.