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)
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
$(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
#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[])
{
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;
}
--- /dev/null
+#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);
+}
--- /dev/null
+#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