aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlns <matzeton@googlemail.com>2019-10-14 00:53:39 +0200
committerlns <matzeton@googlemail.com>2019-10-14 00:53:39 +0200
commit320e2466a8bbcbdc75c5fc1f8221e7f86094c93a (patch)
tree8acea27ed121b4036d06c84fb72e0ea18ee4c32c
parent876377ea633f5edfff2b217b6d65dbaea1f059db (diff)
added textify Makefile targets and untextify feature
-rw-r--r--Makefile6
-rw-r--r--textify.c58
2 files changed, 50 insertions, 14 deletions
diff --git a/Makefile b/Makefile
index 2133589..039d1cb 100644
--- a/Makefile
+++ b/Makefile
@@ -73,9 +73,9 @@ strip:
strip -s $(TARGETS)
clean:
- -$(RM) aes.o asciihexer.o dummyshell.o gol.o suidcmd.o scrambler.o xidle.o xdiff.o
- -$(RM) aes.d asciihexer.d dummyshell.d gol.d suidcmd.d scrambler.d xidle.d xdiff.d
- -$(RM) aes asciihexer dummyshell gol suidcmd scrambler xidle xdiff
+ -$(RM) aes.o asciihexer.o dummyshell.o gol.o suidcmd.o scrambler.o textify.o xidle.o xdiff.o
+ -$(RM) aes.d asciihexer.d dummyshell.d gol.d suidcmd.d scrambler.d textify.d xidle.d xdiff.d
+ -$(RM) aes asciihexer dummyshell gol suidcmd scrambler textify xidle xdiff
-@echo ' '
install: $(TARGETS)
diff --git a/textify.c b/textify.c
index 05ba849..a88de2c 100644
--- a/textify.c
+++ b/textify.c
@@ -20,7 +20,11 @@ void print_binary_hex(uint8_t *bin, size_t siz)
size_t i;
for (i = 0; i < siz; ++i) {
- printf("%s%02X ", " ", bin[i]);
+ printf("%8.02X ", bin[i]);
+ }
+ printf("\n");
+ for (i = 0; i < siz; ++i) {
+ printf("%8.d ", bin[i]);
}
printf("\n");
for (i = 0; i < siz; ++i) {
@@ -39,15 +43,13 @@ ssize_t textify(uint8_t *bin, size_t siz, char *out, size_t outsiz)
for (i = 0, j = 0; i < siz && j < outsiz / 3; ++i, j += 3) {
uint8_t tmp0 = 32, tmp1 = 64, tmp2 = 64;
- if (bin[i] >= 127 || bin[i] < 32) {
- if (bin[i] < 32)
- tmp1 = bin[i] + 32;
- else if (bin[i] >= 127) {
- if (bin[i] < 190)
- tmp1 = bin[i] - 63;
- else
- tmp2 = bin[i] - 63*2;
- }
+ if (bin[i] < 32)
+ tmp1 = bin[i] + 32;
+ else if (bin[i] >= 127) {
+ if (bin[i] < 190)
+ tmp1 = bin[i] - 63;
+ else
+ tmp2 = bin[i] - 63*2;
} else {
tmp0 = bin[i];
}
@@ -60,10 +62,31 @@ ssize_t textify(uint8_t *bin, size_t siz, char *out, size_t outsiz)
return j;
}
+ssize_t untextify(uint8_t *text, size_t siz, char *out, size_t outsiz)
+{
+ size_t i, j;
+
+ if (!text || !out)
+ return -1;
+
+ for (i = 0, j = 0; i < siz / 3 && j < outsiz; i += 3, ++j) {
+ if (text[i+1] >= 32 && text[i+1] < 64) {
+ out[j] = text[i+1] - 32;
+ } else if (text[i+1] >= 64 && text[i+1] < 96) {
+ out[j] = text[i+1] + 63;
+ } else if (text[i+2] >= 96 && text[i+1] < 127) {
+ out[j] = text[i+2] + 63*2;
+ }
+ }
+
+ return j;
+}
+
int main(int argc, char **argv)
{
ssize_t ret;
char outbuf[BUFSIZ] = {0};
+ char orgbuf[BUFSIZ] = {0};
if (argc != 2) {
printf("usage: %s [DATA]\n", argv[0]);
@@ -71,6 +94,7 @@ int main(int argc, char **argv)
}
print_binary_hex((uint8_t *)argv[1], strnlen(argv[1], BUFSIZ));
+ printf("\n");
ret = textify((uint8_t *)argv[1], strnlen(argv[1], sizeof outbuf / 3),
outbuf, sizeof outbuf);
@@ -81,7 +105,19 @@ int main(int argc, char **argv)
}
print_binary_hex((uint8_t *)outbuf, ret);
- printf("%s result: '%s'\n", argv[0], outbuf);
+ outbuf[BUFSIZ-1] = 0;
+ printf("%s result: '%s'\n\n", argv[0], outbuf);
+
+ ret = untextify((uint8_t *)outbuf, ret, orgbuf, sizeof orgbuf);
+ if (ret < 0)
+ {
+ printf("%s: untextify failed\n", outbuf);
+ return 1;
+ }
+
+ print_binary_hex((uint8_t *) orgbuf, ret);
+ orgbuf[BUFSIZ-1] = 0;
+ printf("%s result: '%s'\n", argv[0], orgbuf);
return 0;
}