From 29c29870a2bb0fa92c0b83be6d8ec3e80fa14009 Mon Sep 17 00:00:00 2001 From: Thomas Walker Lynch Date: Fri, 29 Mar 2019 03:36:45 +0100 Subject: [PATCH] tranche development --- module/da/src/da.lib.c | 34 +++++++++++++++- module/da/src/da.lib.h | 2 + module/da/test/src/test_da.cli.c | 4 +- module/da/test/src/test_da.lib.c | 37 ++++++++++++++++++ module/da/test/src/test_da.lib.h | 1 + module/share/lib/libda.a | Bin 12372 -> 12372 bytes ...{tranche-dep.cli.c.keep => tranche-make.c} | 7 +++- module/tranche/test/test2stdout.dat | 2 - module/tranche/test/tranche | 1 - module/tranche/test/tranche-target | 1 - module/tranche/test/{ => try}/test1.dat | 0 module/tranche/test/{ => try}/test1.sh | 0 .../test/{ => try}/test11.dat.expected | 0 .../test/{ => try}/test12.dat.expected | 0 .../test/{ => try}/test13.dat.expected | 0 .../test/{ => try}/test14.dat.expected | 0 .../test/{ => try}/test15.dat.expected | 0 .../test/{ => try}/test1stdout.dat.expected | 0 .../tranche/test/{ => try}/test2.c.expected | 0 .../tranche/test/{ => try}/test2.h.expected | 0 module/tranche/test/{ => try}/test2.sh | 0 module/tranche/test/{ => try}/test2.trc.c | 0 .../test/{ => try}/test2stdout.dat.expected | 0 .../tranche/test/{ => try}/test3.out.expected | 0 module/tranche/test/{ => try}/test3.sh | 0 .../{test4.out => try/test4.out.expected} | 0 module/tranche/test/{ => try}/test4.sh | 0 module/tranche/test/try/tranche | 1 + module/tranche/test/try/tranche-target | 1 + 29 files changed, 82 insertions(+), 9 deletions(-) rename module/tranche/src/{tranche-dep.cli.c.keep => tranche-make.c} (84%) delete mode 100644 module/tranche/test/test2stdout.dat delete mode 120000 module/tranche/test/tranche delete mode 120000 module/tranche/test/tranche-target rename module/tranche/test/{ => try}/test1.dat (100%) rename module/tranche/test/{ => try}/test1.sh (100%) rename module/tranche/test/{ => try}/test11.dat.expected (100%) rename module/tranche/test/{ => try}/test12.dat.expected (100%) rename module/tranche/test/{ => try}/test13.dat.expected (100%) rename module/tranche/test/{ => try}/test14.dat.expected (100%) rename module/tranche/test/{ => try}/test15.dat.expected (100%) rename module/tranche/test/{ => try}/test1stdout.dat.expected (100%) rename module/tranche/test/{ => try}/test2.c.expected (100%) rename module/tranche/test/{ => try}/test2.h.expected (100%) rename module/tranche/test/{ => try}/test2.sh (100%) rename module/tranche/test/{ => try}/test2.trc.c (100%) rename module/tranche/test/{ => try}/test2stdout.dat.expected (100%) rename module/tranche/test/{ => try}/test3.out.expected (100%) rename module/tranche/test/{ => try}/test3.sh (100%) rename module/tranche/test/{test4.out => try/test4.out.expected} (100%) rename module/tranche/test/{ => try}/test4.sh (100%) create mode 120000 module/tranche/test/try/tranche create mode 120000 module/tranche/test/try/tranche-target diff --git a/module/da/src/da.lib.c b/module/da/src/da.lib.c index 0956d7e..47558e0 100644 --- a/module/da/src/da.lib.c +++ b/module/da/src/da.lib.c @@ -78,6 +78,28 @@ bool da_pop(Da *dap, void *element){ return flag; } +void da_cat(Da *dap0, Da *dap1){ + if(dap1->base == dap1->end) return; + size_t dap0_size = dap0->end - dap0->base; + size_t dap1_size = dap1->end - dap1->base; // size of the active portion + dap0->end += dap1_size; + while( dap0->end >= dap0->base + dap0->size ) da_expand(dap0); + memcpy(dap0->base + dap0_size, dap1->base, dap1_size); +} + +// If dap0 has had a terminatating zero added, that must be popped off before +// the call. Similarly if a terminating zero is desired, it should be pushed +// after the call. +void da_push_string(Da *dap0, char *string){ + if(!*string) return; + size_t dap0_size = dap0->end - dap0->base; + size_t string_size = strlen(string); + dap0->end += string_size; + while( dap0->end >= dap0->base + dap0->size ) da_expand(dap0); + memcpy(dap0->base + dap0_size, string, string_size); +} + + char *da_index(Da *dap, size_t i){ size_t offset = i * dap->element_size; char *pt = dap->base + offset; @@ -108,12 +130,22 @@ void da_free_elements(Da *dap){ // for the case of an array of strings void da_strings_puts(Da *dap){ char *pt = dap->base; - while( pt != dap->end ){ + while( pt < dap->end ){ puts(*(char **)pt); pt += dap->element_size; } } +// would like to pass in the printf format to make a general print +// but can't get *pt on the stack for the printf call .. hmmm +void da_ints_print(Da *dap){ + char *pt = dap->base; + while( pt < dap->end ){ + printf("%u\n", *(int *)pt); + pt += dap->element_size; + } +} + // Puts text from a line into buffer *dap. Does not push EOF or '\n' into the // buffer. Returns the old_base so that external pointers can be rebased. diff --git a/module/da/src/da.lib.h b/module/da/src/da.lib.h index 6d3c43b..d480d8c 100644 --- a/module/da/src/da.lib.h +++ b/module/da/src/da.lib.h @@ -23,10 +23,12 @@ bool da_endq(Da *dap, void *pt); bool da_boundq(Da *dap); void da_push(Da *dap, void *element); bool da_pop(Da *dap, void *element); +void da_cat(Da *dap_base, Da *dap_cat); char *da_index(Da *dap, size_t i); void da_map(Da *dap, void f(void *, void *), void *closure); void da_free_elements(Da *dap); void da_strings_puts(Da *dap); +void da_ints_print(Da *dap); char *da_fgets(Da *dap, FILE *fd); #endif diff --git a/module/da/test/src/test_da.cli.c b/module/da/test/src/test_da.cli.c index bee5a6c..07282dc 100644 --- a/module/da/test/src/test_da.cli.c +++ b/module/da/test/src/test_da.cli.c @@ -11,8 +11,8 @@ int main(){ // enumeration of tests typedef bool (*test_fun)(); - test_fun tests[] = {test_da_0, test_da_1, test_da_2, test_da_3, NULL}; - char *test_names[] = {"test_da_0", "test_da_1", "test_da_2", "test_da_3", NULL}; + test_fun tests[] = {test_da_0, test_da_1, test_da_2, test_da_3, test_da_4, NULL}; + char *test_names[] = {"test_da_0", "test_da_1", "test_da_2", "test_da_3", "test_da_4", NULL}; // call tests test_fun *tfp = tests; diff --git a/module/da/test/src/test_da.lib.c b/module/da/test/src/test_da.lib.c index 0ab06c8..f16be66 100644 --- a/module/da/test/src/test_da.lib.c +++ b/module/da/test/src/test_da.lib.c @@ -128,6 +128,43 @@ bool test_da_3(){ return f0 && f1 && f2 && f3; } +// da_cat +bool test_da_4(){ + + Da da0, da1; + da_alloc(&da0, sizeof(int)); + da_alloc(&da1, sizeof(int)); + + int i = 5; + while(i < 8){ + da_push(&da0, &i); + i++; + } + while(i < 11){ + da_push(&da1, &i); + i++; + } + + da_cat(&da0, &da1); + + bool f[6]; + int j; + int k = 0; + while(k < 6){ + f[k] = da_pop(&da0, &j) && (j == 10 - k); + k++; + } + + bool result = f[0]; + k = 1; + while(result && k < 6){ + result = f[k]; + k++; + } + + return result; +} + diff --git a/module/da/test/src/test_da.lib.h b/module/da/test/src/test_da.lib.h index 686b0d0..432fecd 100644 --- a/module/da/test/src/test_da.lib.h +++ b/module/da/test/src/test_da.lib.h @@ -5,5 +5,6 @@ bool test_da_0(); bool test_da_1(); bool test_da_2(); bool test_da_3(); +bool test_da_4(); #endif diff --git a/module/share/lib/libda.a b/module/share/lib/libda.a index a7b5b79c8dae5863a49aad0606e34f3d68bcc326..ba48a6e6db4981956023b4317de9cd2e97734614 100644 GIT binary patch delta 29 fcmcbTa3x`a44Z|arHP5fMkOvrD08zBqmn)ViPs0Z delta 29 fcmcbTa3x`a44b*7xtX!yMkOvrD08zBqmn)ViSP%w diff --git a/module/tranche/src/tranche-dep.cli.c.keep b/module/tranche/src/tranche-make.c similarity index 84% rename from module/tranche/src/tranche-dep.cli.c.keep rename to module/tranche/src/tranche-make.c index 3365573..2f84d0f 100644 --- a/module/tranche/src/tranche-dep.cli.c.keep +++ b/module/tranche/src/tranche-make.c @@ -1,7 +1,10 @@ /* -Scans a tranche file and outputs a dep line suitable for make. +Scans a tranche file and outputs a make rule for makefile-deps, of the form: -The dep file is opened for append. If the depfile is not present stdout is used. +... : + tranche $@ + + file is opened for append. If the depfile is not present stdout is used. If the given source file name has a directory prefix, the targets in the dep line are given the same prefix. diff --git a/module/tranche/test/test2stdout.dat b/module/tranche/test/test2stdout.dat deleted file mode 100644 index 139597f..0000000 --- a/module/tranche/test/test2stdout.dat +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/module/tranche/test/tranche b/module/tranche/test/tranche deleted file mode 120000 index 701f193..0000000 --- a/module/tranche/test/tranche +++ /dev/null @@ -1 +0,0 @@ -../exec/tranche \ No newline at end of file diff --git a/module/tranche/test/tranche-target b/module/tranche/test/tranche-target deleted file mode 120000 index 51e3cfa..0000000 --- a/module/tranche/test/tranche-target +++ /dev/null @@ -1 +0,0 @@ -../exec/tranche-target \ No newline at end of file diff --git a/module/tranche/test/test1.dat b/module/tranche/test/try/test1.dat similarity index 100% rename from module/tranche/test/test1.dat rename to module/tranche/test/try/test1.dat diff --git a/module/tranche/test/test1.sh b/module/tranche/test/try/test1.sh similarity index 100% rename from module/tranche/test/test1.sh rename to module/tranche/test/try/test1.sh diff --git a/module/tranche/test/test11.dat.expected b/module/tranche/test/try/test11.dat.expected similarity index 100% rename from module/tranche/test/test11.dat.expected rename to module/tranche/test/try/test11.dat.expected diff --git a/module/tranche/test/test12.dat.expected b/module/tranche/test/try/test12.dat.expected similarity index 100% rename from module/tranche/test/test12.dat.expected rename to module/tranche/test/try/test12.dat.expected diff --git a/module/tranche/test/test13.dat.expected b/module/tranche/test/try/test13.dat.expected similarity index 100% rename from module/tranche/test/test13.dat.expected rename to module/tranche/test/try/test13.dat.expected diff --git a/module/tranche/test/test14.dat.expected b/module/tranche/test/try/test14.dat.expected similarity index 100% rename from module/tranche/test/test14.dat.expected rename to module/tranche/test/try/test14.dat.expected diff --git a/module/tranche/test/test15.dat.expected b/module/tranche/test/try/test15.dat.expected similarity index 100% rename from module/tranche/test/test15.dat.expected rename to module/tranche/test/try/test15.dat.expected diff --git a/module/tranche/test/test1stdout.dat.expected b/module/tranche/test/try/test1stdout.dat.expected similarity index 100% rename from module/tranche/test/test1stdout.dat.expected rename to module/tranche/test/try/test1stdout.dat.expected diff --git a/module/tranche/test/test2.c.expected b/module/tranche/test/try/test2.c.expected similarity index 100% rename from module/tranche/test/test2.c.expected rename to module/tranche/test/try/test2.c.expected diff --git a/module/tranche/test/test2.h.expected b/module/tranche/test/try/test2.h.expected similarity index 100% rename from module/tranche/test/test2.h.expected rename to module/tranche/test/try/test2.h.expected diff --git a/module/tranche/test/test2.sh b/module/tranche/test/try/test2.sh similarity index 100% rename from module/tranche/test/test2.sh rename to module/tranche/test/try/test2.sh diff --git a/module/tranche/test/test2.trc.c b/module/tranche/test/try/test2.trc.c similarity index 100% rename from module/tranche/test/test2.trc.c rename to module/tranche/test/try/test2.trc.c diff --git a/module/tranche/test/test2stdout.dat.expected b/module/tranche/test/try/test2stdout.dat.expected similarity index 100% rename from module/tranche/test/test2stdout.dat.expected rename to module/tranche/test/try/test2stdout.dat.expected diff --git a/module/tranche/test/test3.out.expected b/module/tranche/test/try/test3.out.expected similarity index 100% rename from module/tranche/test/test3.out.expected rename to module/tranche/test/try/test3.out.expected diff --git a/module/tranche/test/test3.sh b/module/tranche/test/try/test3.sh similarity index 100% rename from module/tranche/test/test3.sh rename to module/tranche/test/try/test3.sh diff --git a/module/tranche/test/test4.out b/module/tranche/test/try/test4.out.expected similarity index 100% rename from module/tranche/test/test4.out rename to module/tranche/test/try/test4.out.expected diff --git a/module/tranche/test/test4.sh b/module/tranche/test/try/test4.sh similarity index 100% rename from module/tranche/test/test4.sh rename to module/tranche/test/try/test4.sh diff --git a/module/tranche/test/try/tranche b/module/tranche/test/try/tranche new file mode 120000 index 0000000..982210d --- /dev/null +++ b/module/tranche/test/try/tranche @@ -0,0 +1 @@ +../../exec/tranche \ No newline at end of file diff --git a/module/tranche/test/try/tranche-target b/module/tranche/test/try/tranche-target new file mode 120000 index 0000000..07d6f40 --- /dev/null +++ b/module/tranche/test/try/tranche-target @@ -0,0 +1 @@ +../../exec/tranche-target \ No newline at end of file -- 2.20.1