From 2abab7c9e85ccda8abf12f0bdf70f2a6a1c1ffa0 Mon Sep 17 00:00:00 2001 From: Shav Kinderlehrer Date: Mon, 17 Apr 2023 21:07:24 -0400 Subject: [PATCH] Add args - --binary --- include/arg.h | 3 ++- src/lib/arg.c | 19 +++++++++++++++---- src/main.c | 13 +++++++++---- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/include/arg.h b/include/arg.h index dc2e242..ca65e8e 100644 --- a/include/arg.h +++ b/include/arg.h @@ -2,13 +2,14 @@ #define ARG_H #include -#define LAT_VERSION "0.7.3" +#define LAT_VERSION "0.8.0" struct config { bool stdin; bool process; bool color; bool lines; + bool force_binary; bool has_read_stdin; }; diff --git a/src/lib/arg.c b/src/lib/arg.c index 104b836..95badbb 100644 --- a/src/lib/arg.c +++ b/src/lib/arg.c @@ -4,15 +4,18 @@ #include #include -#define LAT_USAGE "usage: lat [-cnVh] [files..]" +#define LAT_USAGE "usage: lat [-cnbVh] [files..]" void help(void) { printf("%s\n", LAT_USAGE); printf("options:\n" "\t-c, --color\t toggle whether to print color or not\n" "\t-n, --lines\t toggle whether to print line numbers or not\n" + "\t-b, --binary\t toggle whether to force the data to be treated as " + "binary or not\n" "\t-V, --version\t show program version\n" "\t-h, --help\t display this help text\n"); + printf(""); } void version(void) { @@ -37,6 +40,11 @@ void parselongarg(char *arg) { return; } + if (strcmp(arg, "--binary") == 0) { + conf.force_binary = !conf.force_binary; + return; + } + if (strcmp(arg, "--help") == 0) { help(); exit(EXIT_SUCCESS); @@ -63,14 +71,17 @@ void parseshortarg(char *arg) { case 'n': conf.lines = !conf.lines; break; - case 'h': - help(); - exit(EXIT_SUCCESS); + case 'b': + conf.force_binary = !conf.force_binary; break; case 'V': version(); exit(EXIT_SUCCESS); break; + case 'h': + help(); + exit(EXIT_SUCCESS); + break; default: { char *str = malloc(2); str[0] = c; diff --git a/src/main.c b/src/main.c index 3478b71..13d0bf8 100644 --- a/src/main.c +++ b/src/main.c @@ -23,6 +23,10 @@ void run(FILE *fp, char *filename, bool tty) { struct filedata f; f = readfile(fp, conf.stdin); + if (conf.force_binary) { + f.binary = !f.binary; + } + if (tty) { char *addon = f.binary ? "" : ""; fprintf(stderr, "\r\x1b[2K%s%s%s%s\r\n", invert_t, basename(filename), @@ -35,18 +39,18 @@ void run(FILE *fp, char *filename, bool tty) { } if (conf.process) { - int linecount = 0; - + int linecount = 1; for (int i = 0; i < f.lc; i++) { if (conf.lines) { char *padding = linepad(linecount, f.lc); - printf("%s%s%d:%s %s\n", grey, padding, i + 1, reset, f.lines[i].buf); + printf("%s%s%d:%s ", grey, padding, i + 1, reset); + fwrite(f.lines[i].buf, 1, f.lines[i].len, stdout); + printf("\n"); free(padding); linecount++; } else { printf("%s\n", f.lines[i].buf); } - free(f.lines[i].buf); } } else { @@ -66,6 +70,7 @@ void run(FILE *fp, char *filename, bool tty) { void initconf(void) { conf.stdin = false; + conf.force_binary = false; conf.process = true; conf.color = true; conf.lines = true;