]> gitweb.hhaalo.de Git - discspan.git/commitdiff
change: split logic from ui
authorBastian Dehn <hhaalo@arcor.de>
Fri, 6 Aug 2021 18:14:16 +0000 (20:14 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Fri, 6 Aug 2021 18:14:16 +0000 (20:14 +0200)
CMakeLists.txt
Makefile
discspan.c
logic.c [new file with mode: 0644]
logic.h [new file with mode: 0644]

index 3c6ebf525017a3bfc2a6e6fcd7f032ee390a19f4..d289d91763f3c5c6eef1d0f2502b36c733e818b5 100644 (file)
@@ -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)
index ebb14588d0b529ea33b4db16bdb54116c60ef50e..dcd9b873f019bef83f4e87de00a2ddc7fff166fd 100644 (file)
--- 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
 
index 2252a39f53dbae190dc1538a0903ee6176ef882a..18d7b35ec488248a95b5089ac1bb15ae12d0f058 100644 (file)
@@ -1,33 +1,13 @@
 #include <stdio.h>
-#include <unistd.h>
 #include <stdlib.h>
-#include <string.h>
+#include <unistd.h>
 
 #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 (file)
index 0000000..36eec84
--- /dev/null
+++ b/logic.c
@@ -0,0 +1,59 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#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 (file)
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