From 4ef8ad838efde24e6d561fa47b06667b54b05cde Mon Sep 17 00:00:00 2001 From: Chris Nutter Date: Sat, 11 May 2019 19:39:28 -0700 Subject: [PATCH] ok im having fun now --- README.md | 2 +- diff-rcm | Bin 23088 -> 23152 bytes diff.c | 115 ++++-------------------------- diff.h | 15 +--- diff_dep.c => oldfiles/diff_dep.c | 0 pa.c | 79 ++++++++++++++++++++ pa.h | 36 ++++++++++ 7 files changed, 132 insertions(+), 115 deletions(-) rename diff_dep.c => oldfiles/diff_dep.c (100%) create mode 100644 pa.c create mode 100644 pa.h diff --git a/README.md b/README.md index 56e2342..b779bf1 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -# diff +# diff-rcm Totally original program no one has ever thought of before. diff --git a/diff-rcm b/diff-rcm index 05284d244eeadc0d15a935ab95aaefb905040e76..a901bbfea597e18298dc057251d66ac862a328e3 100755 GIT binary patch delta 5409 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 diff --git a/diff.c b/diff.c index 4a69f5a..5699436 100644 --- a/diff.c +++ b/diff.c @@ -3,24 +3,10 @@ #include #include "diff.h" +#include "pa.h" // ========================================================================== // -pa* pa_make(char* base[], int size, int start, int stop); -pa* pa_first(char* base[], int size); -pa* pa_next(pa* p); -size_t pa_filesize(pa* p); -size_t pa_size(pa* p); -char** pa_base(pa* p); -char* pa_info(pa* p); -int pa_equal(pa* p, pa* q); -void pa_print(pa* p, void (*fp)(const char*)); -void printboth(const char* left_right); -void printleft(const char* left); -void printright(const char* right); -FILE* openfile(const char* filename, const char* openflags); -//char* yesorno(int condition); - void init(int argc, const char* argv[]); void setoption(const char* arg, const char* s, const char* t, int* value); void diff_output_conflict_error(void); @@ -30,10 +16,10 @@ void loadfiles(const char* filename1, const char* filename2); void version(); void todo(); -void quiet(const char* argv[]); -void loud(const char* argv[]); -int sideside(const char* argv[]); int normal(const char* filename1, const char* filename2); +int sideside(const char* filename1, const char* filename2); +void quiet(const char* filename1, const char* filename2); +void loud(const char* filename1, const char* filename2); // ================================================================= // @@ -41,16 +27,19 @@ int main(int argc, const char* argv[]) { init(--argc, ++argv); loadfiles(files[0], files[1]); + if (!showcontext && !showunified && !showsidebyside && !showleftcolumn) { normal(files[0], files[1]); } + if (showsidebyside) { sideside(files[0], files[1]); printf("\n"); } + if (showbrief) { quiet(files[0], files[1]); printf("\n"); } + if (report_identical) { loud(files[0], files[1]); printf("\n"); } return 0; + } // =============================================================== // void init(int argc, const char* argv[]) { - int count = 0; - const char* files[2] = { NULL, NULL }; while (argc-- > 0) { const char* arg = *argv; @@ -100,6 +89,7 @@ void diff_output_conflict_error(void) { } void loadfiles(const char* filename1, const char* filename2) { + memset(buf, 0, sizeof(buf)); memset(strings1, 0, sizeof(strings1)); memset(strings2, 0, sizeof(strings2)); @@ -114,6 +104,7 @@ void loadfiles(const char* filename1, const char* filename2) { q = pa_first(strings2, count2); int foundmatch = 0; + } void version() { @@ -149,7 +140,7 @@ int normal(const char* filename1, const char* filename2) { return 0; } -int sideside(const char* argv[]) { +int sideside(const char* filename1, const char* filename2) { if (pa_equal(p, q)) { pa_print(p, printboth); return 0; } pa_print(q, printright); @@ -158,85 +149,7 @@ int sideside(const char* argv[]) { return 0; } -void quiet(const char* argv[]) { if (pa_equal(p, q) == 0) { printf("The files are not equal.\n"); } } -void loud(const char* argv[]) { if (pa_equal(p, q) == 1) { printf("The files are equal.\n"); } } - -int hash(const char* s) { - unsigned long code = 0; - while (*s != '\0') { code = code *31 + *s++; } - return code % HASHLEN; -} +void quiet(const char* filename1, const char* filename2) { if (pa_equal(p, q) == 0) { printf("The files are not equal.\n"); } } +void loud(const char* filename1, const char* filename2) { if (pa_equal(p, q) == 1) { printf("The files are equal.\n"); } } // ====================================================== // - -pa* pa_make(char* base[], int filesize, int start, int stop) { - pa* p = (pa*) malloc(sizeof(pa)); - p->base = base; - p->filesize = filesize; - p->start = start; - p->stop = stop; - - return p; -} -pa* pa_first(char* base[], int size) { - pa* p = pa_make(base, size, 0, -1); - return pa_next(p); -} -pa* pa_next(pa* p) { - if (p->stop == p->filesize) { return NULL; } - - int i; - pa* pnew = pa_make(p->base, p->filesize, p->stop + 1, p->stop + 1); - for (i = pnew->start; i < p->filesize && strcmp(p->base[i], "\n") != 0; ++i) { } - pnew->stop = i; - - return pnew; -} -void pa_print(pa* p, void (*fp)(const char*)) { - if (p == NULL) { return; } - for (int i = p->start; i <= p->stop && i != p->filesize; ++i) { fp(p->base[i]); } -} -void pa_destroy(pa* p) { free(p); } -void printleft(const char* left) { - char buf[BUFLEN]; - - strcpy(buf, left); - int j = 0, len = (int)strlen(buf) - 1; - for (j = 0; j <= 48 - len ; ++j) { buf[len + j] = ' '; } - buf[len + j++] = '<'; - buf[len + j++] = '\0'; - printf("%s\n", buf); -} -void printright(const char* right) { - if (right == NULL) { return; } - printf("%50s %s", ">", right); -} -void printboth(const char* left_right) { - char buf[BUFLEN]; - size_t len = strlen(left_right); - if (len > 0) { strncpy(buf, left_right, len); } - buf[len - 1] = '\0'; - printf("%-50s %s", buf, left_right); -} -size_t pa_filesize(pa* p) { return p == NULL ? 0 : p->filesize; } -size_t pa_size(pa* p) { return p == NULL || p->stop < p->start ? 0 : p->stop - p->start + 1; } -char** pa_base(pa* p) { return p->base; } -//char* yesorno(int condition) { return condition == 0 ? "no" : "YES"; } -char* pa_info(pa* p) { - static char buf[BUFLEN]; // static for a reason - snprintf(buf, sizeof(buf), "base: %p, filesize: %d, start: %d, stop: %d\n", - p->base, p->filesize, p->start, p->stop); - return buf; // buf MUST be static -} -int pa_equal(pa* p, pa* q) { - if (p == NULL || q == NULL) { return 0; } - if (pa_size(p) != pa_size(q)) { return 0; } - int i = p->start, j = q->start, equal = 0; - while ((equal = strcmp(p->base[i], q->base[i])) == 0) { ++i; ++j; } - return equal; -} -FILE* openfile(const char* filename, const char* openflags) { - FILE* f; - if ((f = fopen(filename, openflags)) == NULL) { printf("can't open '%s'\n", filename); exit(1); } - return f; -} diff --git a/diff.h b/diff.h index d274da6..abd3b2c 100644 --- a/diff.h +++ b/diff.h @@ -12,16 +12,9 @@ #define HASHLEN 200 #define BUFLEN 256 -typedef struct pa pa; -struct pa { - char** base; - int filesize; - int start; - int stop; -}; +// ======================================================================= // FILE *fin1, *fin2; - const char* files[2] = { NULL, NULL }; char buf[BUFLEN]; @@ -31,10 +24,6 @@ int showversion = 0, showbrief = 0, ignorecase = 0, report_identical = 0, showsi int showleftcolumn = 0, showunified = 0, showcontext = 0, suppresscommon = 0, diffnormal = 0; int showhelp = 0; -int equal = 0; +int equal = 0, cnt = 0, count = 0; -int cnt = 0; int count1 = 0, count2 = 0; - -pa* p; -pa* q; diff --git a/diff_dep.c b/oldfiles/diff_dep.c similarity index 100% rename from diff_dep.c rename to oldfiles/diff_dep.c diff --git a/pa.c b/pa.c new file mode 100644 index 0000000..6bc08f3 --- /dev/null +++ b/pa.c @@ -0,0 +1,79 @@ +#include +#include +#include + +#include "pa.h" + +// ======================================================================= // + +pa* pa_make(char* base[], int filesize, int start, int stop) { + pa* p = (pa*) malloc(sizeof(pa)); + p->base = base; + p->filesize = filesize; + p->start = start; + p->stop = stop; + + return p; +} +pa* pa_first(char* base[], int size) { + pa* p = pa_make(base, size, 0, -1); + return pa_next(p); +} +pa* pa_next(pa* p) { + if (p->stop == p->filesize) { return NULL; } + + int i; + pa* pnew = pa_make(p->base, p->filesize, p->stop + 1, p->stop + 1); + for (i = pnew->start; i < p->filesize && strcmp(p->base[i], "\n") != 0; ++i) { } + pnew->stop = i; + + return pnew; +} +void pa_print(pa* p, void (*fp)(const char*)) { + if (p == NULL) { return; } + for (int i = p->start; i <= p->stop && i != p->filesize; ++i) { fp(p->base[i]); } +} +void pa_destroy(pa* p) { free(p); } +void printleft(const char* left) { + char buf[BUFLEN]; + + strcpy(buf, left); + int j = 0, len = (int)strlen(buf) - 1; + for (j = 0; j <= 48 - len ; ++j) { buf[len + j] = ' '; } + buf[len + j++] = '<'; + buf[len + j++] = '\0'; + printf("%s\n", buf); +} +void printright(const char* right) { + if (right == NULL) { return; } + printf("%50s %s", ">", right); +} +void printboth(const char* left_right) { + char buf[BUFLEN]; + size_t len = strlen(left_right); + if (len > 0) { strncpy(buf, left_right, len); } + buf[len - 1] = '\0'; + printf("%-50s %s", buf, left_right); +} +size_t pa_filesize(pa* p) { return p == NULL ? 0 : p->filesize; } +size_t pa_size(pa* p) { return p == NULL || p->stop < p->start ? 0 : p->stop - p->start + 1; } +char** pa_base(pa* p) { return p->base; } +//char* yesorno(int condition) { return condition == 0 ? "no" : "YES"; } +char* pa_info(pa* p) { + static char buf[BUFLEN]; // static for a reason + snprintf(buf, sizeof(buf), "base: %p, filesize: %d, start: %d, stop: %d\n", + p->base, p->filesize, p->start, p->stop); + return buf; // buf MUST be static +} +int pa_equal(pa* p, pa* q) { + if (p == NULL || q == NULL) { return 0; } + if (pa_size(p) != pa_size(q)) { return 0; } + int i = p->start, j = q->start, equal = 0; + while ((equal = strcmp(p->base[i], q->base[i])) == 0) { ++i; ++j; } + return equal; +} +FILE* openfile(const char* filename, const char* openflags) { + FILE* f; + if ((f = fopen(filename, openflags)) == NULL) { printf("can't open '%s'\n", filename); exit(1); } + return f; +} diff --git a/pa.h b/pa.h new file mode 100644 index 0000000..fc36707 --- /dev/null +++ b/pa.h @@ -0,0 +1,36 @@ +#ifndef pa_h +#define pa_h + +#include +#include + +#define MAXSTRINGS 1024 +#define BUFLEN 256 + +typedef struct pa pa; +struct pa { + char** base; + int filesize; + int start; + int stop; +}; + +pa* p; +pa* q; + +pa* pa_make(char* base[], int size, int start, int stop); +pa* pa_first(char* base[], int size); +pa* pa_next(pa* p); +size_t pa_filesize(pa* p); +size_t pa_size(pa* p); +char** pa_base(pa* p); +char* pa_info(pa* p); +int pa_equal(pa* p, pa* q); +void pa_print(pa* p, void (*fp)(const char*)); +void printboth(const char* left_right); +void printleft(const char* left); +void printright(const char* right); +FILE* openfile(const char* filename, const char* openflags); +char* yesorno(int condition); + +#endif