From 1f87a70cf7cb87f956bc097722f2f7a71a209e36 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Fri, 6 Aug 2021 20:14:16 +0200 Subject: [PATCH] change: split logic from ui --- CMakeLists.txt | 2 +- Makefile | 6 +++-- discspan.c | 49 +++++------------------------------------ logic.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ logic.h | 9 ++++++++ 5 files changed, 78 insertions(+), 47 deletions(-) create mode 100644 logic.c create mode 100644 logic.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c6ebf5..d289d91 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ endif() project(discspan) -set(SOURCES discspan.c filehandler.c splitter.c help.c) +set(SOURCES discspan.c logic.c filehandler.c splitter.c help.c) add_executable(discspan ${SOURCES}) target_link_libraries(discspan m) diff --git a/Makefile b/Makefile index ebb1458..dcd9b87 100644 --- a/Makefile +++ b/Makefile @@ -5,8 +5,8 @@ BINPATH=/usr/bin all: discspan -discspan: discspan.o filehandler.o filehandler.h splitter.o splitter.h help.o help.h - $(CC) $(CFLAGS) -o discspan discspan.o filehandler.o splitter.o help.o +discspan: discspan.o filehandler.o filehandler.h splitter.o splitter.h help.o help.h logic.o logic.h + $(CC) $(CFLAGS) -o discspan discspan.o filehandler.o splitter.o help.o logic.o discspan.o: discspan.h discspan.c $(CC) $(CFLAGS) -c discspan.c @@ -14,6 +14,8 @@ filehandler.o: discspan.h filehandler.h filehandler.c $(CC) $(CFLAGS) -c filehandler.c splitter.o: splitter.h splitter.c $(CC) $(CFLAGS) -c splitter.c +logic.o: logic.h logic.c + $(CC) $(CFLAGS) -c logic.c help.o: help.h help.c $(CC) $(CFLAGS) -c help.c diff --git a/discspan.c b/discspan.c index 2252a39..18d7b35 100644 --- a/discspan.c +++ b/discspan.c @@ -1,33 +1,13 @@ #include -#include #include -#include +#include #include "discspan.h" -#include "splitter.h" -#include "filehandler.h" +#include "logic.h" #include "help.h" extern void useage(); -extern void read_input_file(const char *input, medium_t *srcdata); -extern void write_output_file(const char *output, medium_t disc); -extern medium_t splitter(medium_t *srcdata); -extern medium_t ignore(medium_t *srdata); - -int cmpfunc(const void *filea, const void *fileb) -{ - unsigned long long a = ((const file_size_t*)filea)->fsize; - unsigned long long b = ((const file_size_t*)fileb)->fsize; - - if (a < b) - return 1; - else if (a > b) - return -1; - else if (a == b) - return 0; - else - return -2; -} +extern void (*status_print)(const char *output, medium_t disc); const unsigned long long readArgument(int argc, char *argv[]) { @@ -96,27 +76,8 @@ int main(int argc, char *argv[]) const char *output = argv[2]; const unsigned long long split = readArgument(argc, argv); - medium_t srcdata = { 0, split, 0, NULL }; - read_input_file(input, &srcdata); - - qsort(srcdata.filearray, srcdata.length, sizeof(file_size_t), cmpfunc); - - medium_t disc; - disc = ignore(&srcdata); - if (disc.length > 0) - write_output_file("ignore", disc); - free(disc.filearray); - - char outname[strlen(output) + 3]; - while (srcdata.length > 0) { - srcdata.nr++; - sprintf(outname, "%s%03d", output, srcdata.nr); - disc = splitter(&srcdata); - print_human_read_size(outname, disc); - write_output_file(outname, disc); - free(disc.filearray); - } + status_print = print_human_read_size; + run(input, output, split); - free(srcdata.filearray); return 0; } diff --git a/logic.c b/logic.c new file mode 100644 index 0000000..36eec84 --- /dev/null +++ b/logic.c @@ -0,0 +1,59 @@ +#include +#include +#include + +#include "logic.h" +#include "splitter.h" +#include "filehandler.h" + +extern void read_input_file(const char *input, medium_t *srcdata); +extern void write_output_file(const char *output, medium_t disc); +extern medium_t splitter(medium_t *srcdata); +extern medium_t ignore(medium_t *srdata); + +void on_status_print(const char *output, medium_t disc) +{ + if (status_print != NULL) + status_print(output, disc); +} + +int cmpfunc(const void *filea, const void *fileb) +{ + unsigned long long a = ((const file_size_t*)filea)->fsize; + unsigned long long b = ((const file_size_t*)fileb)->fsize; + + if (a < b) + return 1; + else if (a > b) + return -1; + else if (a == b) + return 0; + else + return -2; +} + +void run(const char *input, const char *output, unsigned long long split) +{ + medium_t srcdata = { 0, split, 0, NULL }; + read_input_file(input, &srcdata); + + qsort(srcdata.filearray, srcdata.length, sizeof(file_size_t), cmpfunc); + + medium_t disc; + disc = ignore(&srcdata); + if (disc.length > 0) + write_output_file("ignore", disc); + free(disc.filearray); + + char outname[strlen(output) + 3]; + while (srcdata.length > 0) { + srcdata.nr++; + sprintf(outname, "%s%03d", output, srcdata.nr); + disc = splitter(&srcdata); + on_status_print(outname, disc); + write_output_file(outname, disc); + free(disc.filearray); + } + + free(srcdata.filearray); +} diff --git a/logic.h b/logic.h new file mode 100644 index 0000000..a9925a8 --- /dev/null +++ b/logic.h @@ -0,0 +1,9 @@ +#ifndef _LOGIC_H +#define _LOGIC_H +#include "discspan.h" + +void (*status_print)(const char *output, medium_t disc); + +void run(const char *input, const char *output, unsigned long long split); + +#endif -- 2.39.5