From e5badeec8702e173c5e0fbea721f508ae3c2719a Mon Sep 17 00:00:00 2001 From: Chris Nutter Date: Wed, 15 May 2019 17:24:09 -0700 Subject: [PATCH] fixed identical --- deprecated/newfiles/__MACOSX/._diff_02.c | Bin 333 -> 0 bytes deprecated/newfiles/__MACOSX/._left.txt | Bin 266 -> 0 bytes deprecated/newfiles/__MACOSX/._para.c | Bin 333 -> 0 bytes deprecated/newfiles/__MACOSX/._para.h | Bin 176 -> 0 bytes deprecated/newfiles/__MACOSX/._right.txt | Bin 423 -> 0 bytes deprecated/newfiles/__MACOSX/._util.c | Bin 176 -> 0 bytes deprecated/newfiles/__MACOSX/._util.h | Bin 176 -> 0 bytes deprecated/newfiles/test_diff | Bin 0 -> 23048 bytes diff-rcm | Bin 35416 -> 36000 bytes diff.c | 40 ++++++++-- diff.h | 4 +- left.txt | 25 ++++++ pa.c | 96 ++++++++++++++--------- pa.h | 5 +- right.txt | 31 ++++++++ 15 files changed, 153 insertions(+), 48 deletions(-) delete mode 100644 deprecated/newfiles/__MACOSX/._diff_02.c delete mode 100644 deprecated/newfiles/__MACOSX/._left.txt delete mode 100644 deprecated/newfiles/__MACOSX/._para.c delete mode 100644 deprecated/newfiles/__MACOSX/._para.h delete mode 100644 deprecated/newfiles/__MACOSX/._right.txt delete mode 100644 deprecated/newfiles/__MACOSX/._util.c delete mode 100644 deprecated/newfiles/__MACOSX/._util.h create mode 100755 deprecated/newfiles/test_diff create mode 100644 left.txt create mode 100644 right.txt diff --git a/deprecated/newfiles/__MACOSX/._diff_02.c b/deprecated/newfiles/__MACOSX/._diff_02.c deleted file mode 100644 index cca5a7d4c924fedeea07182361df9a2f7f3821ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 333 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFfd93X&|4`7f2HU9795aAj-fxo&edI zXxc!ggTw_G7^IT(bM+Dn3UX5QauSP6N{drdQW8s2l>>sIdcFYZNCpOTgu2|+l0=}I zM5}CH7oWtW)SUP-6Z1mzwCt4BoZ^C{^5i1ZLZkegB%^$jRG{X`PS;{UX8k!(s|=z) z@p+{l&8SF7n&zkVQih3tS%F^TsxuK*8*3CExlCGj+0ZarDYrL0blvA!H$|Epg%>hb tyyl3!^ZVVt_T#Oxca!HeE}EfUd_Tam>G8t9r90-#^R>UBR-AHO0RR>|R+In$ diff --git a/deprecated/newfiles/__MACOSX/._left.txt b/deprecated/newfiles/__MACOSX/._left.txt deleted file mode 100644 index 21263e98ee1eba9c7f7692f9d5589bc9f5f499df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@eLpb@)@~+G!eitBqRu;46NeWU{FD*%S|mw1gc52 ziqH0S@hnNr4J}SB3Q0^aW?-bjJ HTn0`6!~!OA diff --git a/deprecated/newfiles/__MACOSX/._para.c b/deprecated/newfiles/__MACOSX/._para.c deleted file mode 100644 index cbfd2c150525bf75886875dc7cdec5575db3ab28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 333 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFfd93X&|4`7f2HU9795aAj-fxo&edI zXxc!ggTw_G7^IT(bM+Dn3UX5QauSP6N{drdQW8s2l>>sIdcFYZNCpOTgu2|+l0=}I zM5}CH7oWtW)SUP-6Z1mzwCt4BoZ^C{^5i1ZLZkegB%^$jRG{XcT-RbiX6@YFX$7J` zbs3(U>5(I#dgAnE(QLP@jc!Tlzzm5O+6&qk8TXmU0|3vKQ8NGl diff --git a/deprecated/newfiles/__MACOSX/._para.h b/deprecated/newfiles/__MACOSX/._para.h deleted file mode 100644 index a4594449b1031b7d4e710164368ff0636f5d8119..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0cL=AX$Vqox1Ojhs@R)|o50+1L3ClDJkFff(^X&|3*Iglm-IEI7-L6m`XFp2=# zlhL#>L&XIc7^IT(bM+Dn3UX5QauSP6N{drdQW8s2l>>sIW~cyZEd~Y^gu2|+l0=}I zM6390Ul-4k)ZEbG)S{5Y^kR?>Mn51C$-rQaMLkftPhwJPPJEe(d7*h)c1mhaaY0gf za*=7FQGQO6QNBqkP;=PzD={FGjL(YegXpA!oXp}91A_$|ARf>LMhMLSqoG^|&QG^z zPH{YTZ&~y0Kc}`Bm{vUNPKer``#Ls^yTr9KtGFxZi#F52Me-6RPfi`musNTk>@}rO r@XL9l9})Ay78l=i`4s)STV>tVKmM-{Fo{-fRY`5zW4wFEwkmZ1*l=le diff --git a/deprecated/newfiles/__MACOSX/._util.c b/deprecated/newfiles/__MACOSX/._util.c deleted file mode 100644 index 84cc9881e21eb1cf6890e8bac294f2ca4a46851a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0c$Vqox1Ojhs@R)|o50+1L3ClDI}aUBqY_#1$j2;dkJ5(HHS(y;)D1)zKw z#Rz090AirHRC0c&+`MAUalXt~!VY09nTs AIRF3v diff --git a/deprecated/newfiles/test_diff b/deprecated/newfiles/test_diff new file mode 100755 index 0000000000000000000000000000000000000000..b0513e9c1dca9c14ff92f52ea331c4bfb6b0f04c GIT binary patch literal 23048 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 MAu*@~B`wtdU*;{NXaE2J literal 0 HcmV?d00001 diff --git a/diff-rcm b/diff-rcm index 1dd2e212fe1c888a04d89f579ce49f76d5036547..6c03fc587474fe8f0b41794f382a21dfff0d88a2 100755 GIT binary patch delta 10588 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 delta 9567 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 diff --git a/diff.c b/diff.c index bc10a31..bb8532d 100644 --- a/diff.c +++ b/diff.c @@ -79,7 +79,6 @@ void diff_output_conflict_error(void) { void loadfiles(const char* filename1, const char* filename2) { if (filename2 == NULL) { printf("Usage: ./diff [options] file1 file2\n"); exit(1); } - if (*filename1 == *filename2) { exit(0); } memset(buf, 0, sizeof(buf)); memset(strings1, 0, sizeof(strings1)); @@ -135,28 +134,53 @@ void help() { int normal(const char* filename1, const char* filename2) { + identical(filename1, filename2); + printf("\nTHIS IS NOT NORMAL FOR NOW. THIS IS PLACEHOLDER. MMKAY.\n"); printf("THIS IS NOT NORMAL FOR NOW. THIS IS PLACEHOLDER. MMKAY.\n"); printf("THIS IS NOT NORMAL FOR NOW. THIS IS PLACEHOLDER. MMKAY.\n"); - printf("THIS IS NOT NORMAL FOR NOW. THIS IS PLACEHOLDER. MMKAY.\n\n\n"); + printf("THIS IS NOT NORMAL FOR NOW. THIS IS PLACEHOLDER. MMKAY.\n\n"); - pa_print(p, printnormal); + //pa_print(p, printnormal); return 0; } int sideside(const char* filename1, const char* filename2) { - if (pa_equal(p, q)) { pa_print(p, printboth); return 0; } - pa_print(q, printright); - while ((q = pa_next(q)) != NULL && !equal) { equal = pa_equal(p, q); pa_print(q, equal ? printboth : printright); } - pa_print((p = pa_next(p)), printleft); + pa* qlast = q; + while (p != NULL) { + qlast = q; + foundmatch = 0; + while (q != NULL && (foundmatch = pa_equal(p, q)) == 0) { q = pa_next(q); } + q = qlast; + + if (foundmatch) { + while ((foundmatch = pa_equal(p, q)) == 0) { + pa_print(q, printright); + q = pa_next(q); + qlast = q; + } + pa_print(q, printboth); + p = pa_next(p); + q = pa_next(q); + } else { + pa_print(p, printleft); + p = pa_next(p); + } + } + while (q != NULL) { + pa_print(q, printright); + q = pa_next(q); + } return 0; } void quiet(const char* filename1, const char* filename2) { if (pa_equal(p, q) == 0) { printf("The files are not the same.\n"); } else { return; } } void loud(const char* filename1, const char* filename2) { - if (pa_equal(p, q) != 0) { printf("The files are identical.\n"); } + if (*filename1 == *filename2 || (pa_equal(p, q) != 0)) { printf("The files are identical.\n"); } else { normal(files[0], files[1]); } } + +void identical(const char* filename1, const char* filename2) { if (*filename1 == *filename2) { exit(0); } else return; } diff --git a/diff.h b/diff.h index 41213a4..a7d79be 100644 --- a/diff.h +++ b/diff.h @@ -32,7 +32,7 @@ char *strings1[MAXSTRINGS], *strings2[MAXSTRINGS]; int showversion = 0, showbrief = 0, ignorecase = 0, report_identical = 0, showsidebyside = 0; int showleftcolumn = 0, showunified = 0, showcontext = 0, suppresscommon = 0, diffnormal = 0; -int showhelp = 0; +int showhelp = 0, foundmatch = 0; int equal = 0, cnt = 0, count = 0; @@ -53,3 +53,5 @@ 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); + +void identical(const char* filename1, const char* filename2); diff --git a/left.txt b/left.txt new file mode 100644 index 0000000..bbae935 --- /dev/null +++ b/left.txt @@ -0,0 +1,25 @@ +This part of the +document has stayed the +sme from version to +version. It shouldn't +be shown if it doesn't +change. Otherwise, that +would not be helping to +compress the size of the +changes. + +This paragraph contains +text that is outdated. +It will be deleted in the +near future. + +It is important to spell +check this dokument. On +the other hand, a +misspelled word isn't +the end of the world. +Nothing in the rest of +this paragraph needs to +be changed. Things can +be added after it. + diff --git a/pa.c b/pa.c index 8503f77..18f947f 100644 --- a/pa.c +++ b/pa.c @@ -12,29 +12,83 @@ pa* pa_make(char* base[], int filesize, int start, int stop) { p->filesize = filesize; p->start = start; p->stop = stop; + p->firstline = (p == NULL || start < 0) ? NULL : p->base[start]; + p->secondline = (p == NULL || start < 0 || filesize < 2) ? NULL : p->base[start + 1]; return p; } + pa* pa_first(char* base[], int size) { pa* p = pa_make(base, size, 0, -1); return pa_next(p); } + +void pa_destroy(pa* p) { free(p); } + pa* pa_next(pa* p) { - if (p->stop == p->filesize) { return NULL; } + if (p == NULL || 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; + if (pnew->start >= p->filesize) { + free(pnew); + pnew = NULL; + } return pnew; } +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* 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; } + if (p->start >= p->filesize || q->start >= q->filesize) { return 0; } + int i = p->start, j = q->start, equal = 0; + while ((equal = strcmp(p->base[i], q->base[i])) == 0) { ++i; ++j; } + return 1; +} 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 pa_printfile(char* base[], int count, void (*fp)(const char*)) { + pa* p = pa_first(base, count); + while (p != NULL) { + pa_print(p, fp); + p = pa_next(p); + } + printline(); +} + +char* yesorno(int condition) { return condition == 0 ? "no" : "YES"; } + +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; +} + +void printline(void) { + for (int i = 0; i < 10; ++i) { printf("=========="); } + printf("\n"); +} + + void printleft(const char* left) { char buf[BUFLEN]; @@ -45,10 +99,12 @@ void printleft(const char* left) { 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); @@ -56,39 +112,3 @@ void printboth(const char* left_right) { buf[len - 1] = '\0'; printf("%-50s %s", buf, left_right); } - -void printnormal(const char* first) { - char buf[BUFLEN]; - size_t len1 = strlen(first); - if (len1 > 0) { strncpy(buf, first, len1); } - buf[len1 - 1] = '\0'; -} - -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; } - if (p->start >= p->filesize || q->start >= q->filesize) { return 0; } - int i = p->start, j = q->start, equal = 0, psize = p->filesize, qsize = q->filesize; - while (i < psize && j < qsize && (equal = strcmp(p->base[i], q->base[i])) == 0) { ++i; ++j; } - return 1; - -} - -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 index c7ba8ba..647d092 100644 --- a/pa.h +++ b/pa.h @@ -13,6 +13,8 @@ struct pa { int filesize; int start; int stop; + char* firstline; // DEBUG only + char* secondline; }; pa* p; @@ -30,8 +32,9 @@ 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); -void printnormal(const char* first); +void pa_printfile(char* base[], int count, void (*fp)(const char*)); FILE* openfile(const char* filename, const char* openflags); char* yesorno(int condition); +void printline(void); #endif diff --git a/right.txt b/right.txt new file mode 100644 index 0000000..2d7f33d --- /dev/null +++ b/right.txt @@ -0,0 +1,31 @@ +This is an important +notice! It should +therefore be located at +the beginning of this +document! + +This part of the +document has stayed the +sme from version to +version. It shouldn't +be shown if it doesn't +change. Otherwise, that +would not be helping to +compress the size of the +changes. + +It is important to spell +check this document. On +the other hand, a +misspelled word isn't +the end of the world. +Nothing in the rest of +this paragraph needs to +be changed. Things can +be added after it. + +This pragraph contains +important new additions +to this document. + +