From 87b1a9d38d6f9efe62909db645a1da83bed6e8d5 Mon Sep 17 00:00:00 2001 From: Noah Swerhun Date: Thu, 1 Jul 2021 00:20:09 -0500 Subject: [PATCH] began user interface and made functional --- Makefile | 2 +- cards | Bin 16864 -> 17264 bytes example.csv | 5 ---- example.tsv | 6 +++++ obj/card.o | Bin 2616 -> 2608 bytes obj/main.o | Bin 2896 -> 5088 bytes src/card.c | 4 +-- src/include/card.h | 2 +- src/main.c | 61 +++++++++++++++++++++++++++++++++++++++------ 9 files changed, 64 insertions(+), 16 deletions(-) delete mode 100644 example.csv create mode 100644 example.tsv diff --git a/Makefile b/Makefile index 0f5cdfd..eb2a263 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ CC = gcc -CFLAGS = -Wall -Wextra -pedantic-errors -std=c99 -Wno-format +CFLAGS = -Wall -Wextra -pedantic-errors -std=c99 -Wno-format -lncurses OUTFILE = cards SRCDIR = src diff --git a/cards b/cards index db42fb840f3bdf5af0336c98bbc3d505544abf0a..f9bc3c4f473d34f1aab67e21de5d493a99beb1cb 100755 GIT binary patch literal 17264 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 N(poL<8Mqp$_#YJ6?O*@^ diff --git a/example.csv b/example.csv deleted file mode 100644 index 5f036af..0000000 --- a/example.csv +++ /dev/null @@ -1,5 +0,0 @@ -the,quick -brown,fox -jumped,over -the,lazy -dog,foobar diff --git a/example.tsv b/example.tsv new file mode 100644 index 0000000..0093450 --- /dev/null +++ b/example.tsv @@ -0,0 +1,6 @@ +What is T-Mobile Home Internet? T-Mobile Home Internet is a new offering from T-Mobile, available to customers at certain addresses. +How much does the T-Mobile Home Internet plan cost? T-Mobile Home Internet is just $60 all in with AutoPay for customers who already have (or switch to) a tax included plan, or $60 with AutoPay plus taxes and fees for customers already on a tax exclusive wireless plan. +Is there a data cap on the T-Mobile Home Internet service? Nope! There are no data caps on our 5G Home Internet service. +What type of T-Mobile home internet speeds can I expect? We anticipate some T-Mobile Home Internet customers will see average download speeds in excess of 100 Mbps, and all eligible households will see average download speeds of 25 Mbps or more. +Can I purchase higher-speed service? No confusing charts with multiple speed options that do who-knows-what. Customers will get the max speed the network is able to offer at their home location. +Are there ways I cannot use T-Mobile Home Internet? You can use your Home Internet for all the homework, streaming, and video conferencing you need! But to ensure that our network is available for all customers, there are some restrictions on activities that can damage or disproportionately congest the network. diff --git a/obj/card.o b/obj/card.o index 46bb4a4b41157bc983934b01e7c660ad23ff17cb..fea58c4f7254e06f0a1f8948663812c2e6da0353 100644 GIT binary patch delta 288 zcmdlXvO#2m2IGc_n*AKd89?CW(}@S;g}WJg0~kHJT{mU;|nO L1SOLvvdaSiBi&<6 diff --git a/obj/main.o b/obj/main.o index 6d786e78d24c08bf7e2e0924c9e511706d4578f7..708dd708fb11f84c2ed0613630898be8b034e026 100644 GIT binary patch literal 5088 zcmchaZ)_Ar6u{@&LQA2&f}jX!E@}<`JX>Rk5dQR!3oEH&fJRZw^?J9*9bE6q-X7OV zo04oGJug)fz7XRVqaTQg2_{654{(5?g%HzPf|p2QW6+#AVrxHL;-C87?7T9!c8yWv zyX?-)Z{BUls9qAf7ysJlU&e)-_w_1GZy-NgT3+rgZ;JHJ!``)l5bGYMc}pHD-sE z9L{W5xr4tg^ z@BXZ*;xvR^n0I~#B&|%)!jvk_FHyQ1a!+2LcCUT$?zFp(2Q}^9cNySU0NWAr6$LmZ z)o)C@_g|iNuOA`niMgy1{+0D8S(l6rZl|cD#4U7WDPd_?e~|)#+!vK`vv}Ch;Wp4` z77rQg;5GnFkFmup9!!Q!CFja0w>B!dzRJ>tDYThgIhWa=W4#MN!_2$VN=__Vp~39G z!;C7pyNrc}#{lC)Tc{HKCkyUBtqlZ6f#QQI*UfuX2O0jFKgY#v<_|lsUcmN6yv-Vz zUwCkE_wjQ;GwrwF0UuIfPbgE(>9OYYh&r^)(jU7}4HYuxK6y~MBTlQACo0tR75;d; zM%7FeWmiu7h`fN1>DjfBm%y%sTXX6Kj6-aDY0v+7_P>l-{eObS`OId&^!XZ8#*g)n z&$y4D`fX;0XBZE>pt^1;-|xmep785eaX}ah`3-+`lczpW%|el=7V~#$9$h<}jObdB zc|5ItJ?MG7KKOKf(DQmokH?HRJf0d>pQy2ScKQQ{c%S9hx=(Dg%KSFAqqTLDXZ4Pk z+Shm*8@-L*2CJt63J+YkqoI?PF;^BDKDsC_(OzIR*-}xu-rUVxJ$0^?iz=&5g7R|U zt3=;(ST@(zohWOqnJ+kJP(La6m1V%%vU?RdNHf0)+dkgS`dAwyUMN&9`g&_C3m8 z-`?hyHpRz6-FhTugqYS7F<9t;W<;5;`J>TzfVTo*tp}6cJ}lvU0l&NtT7m9fJ_-xK zA>-@z>j}*lNE~62Sj0#KbQX(ifpDA!l6u0I&nzn7*CATgbtJ_DOR*Hh6bLh)FJZtD9Opv3MeGBd z7sijVqU;nL_3X6CviNhiJO9BJoqg@{2d2=#(|%6;9pA| z=erj!lzTS5-@>eD&JWi9amqH%MIe@0U345%QlF9K*sY`a=0Y(q9Q}(!XKT zr~KTuamweUjg$T_Hct9<{!={9@Msu&6cYo2g&fZo!AT$Adnm6s=nvTRDV~gtQ#>Eq zIO(6YaniqL;}rk6;8@7DPy@u9fFmDh(SDCjnkziguZZ!h& zt}ZPGeX+QqdEp!KDSpt4_JLT^+pWjDHQne18}y`weIXsbb7>0ys`P+09wqplDNB=R ztPuI6K5^_&ldmBzMbj*?DjoQ;09h^U@g0G-xOY)-Z=*a37jm%;5OI0UHZF1d`0Jqq zeg0E>{BA^_@-qQV)*;3ZV?z>(pU_6ApnU@YQH}_Ee7DF#@l)9Xom7|gzWJN;$L~*k zH`?Q$5cc-C?C~EIpv(yOge-;u0Q?h47EsR)QWg!Yz25c-v1l_%y5By-5*>4`-3~RSrbp@4JzO&9Yyd5)gPt;hm zW~k|jst6%!=xJsQ{&+$W9YB6q&rnFDQfCv zdTo2Cal^t_iY;o6vaWCTy29SEIc?Oq{Z+Z(Dix``UdF7N_;hj9!SV7V9WJnh`_rXC*y8;NF|d5HbZf;PvDZd hHv!&5algXvVX!d_hkHfjiXFgCxKEsP4_)O`zW_&tk>&sZ diff --git a/src/card.c b/src/card.c index a533f6d..7388bdd 100644 --- a/src/card.c +++ b/src/card.c @@ -12,10 +12,10 @@ CARD new_card(char *o, char *r) { return c; } -CARD* card_parse_csv(char *f, size_t *ct) { +CARD* card_parse_csv(char *f, int *ct) { FILE *fp; char *l, *o, *r; - const char *delims = ",\0"; + const char *delims = " \0"; CARD *ca; if ((fp = fopen(f, "r")) == NULL) diff --git a/src/include/card.h b/src/include/card.h index cd228ee..9ad63a5 100644 --- a/src/include/card.h +++ b/src/include/card.h @@ -8,6 +8,6 @@ typedef struct card_T { CARD new_card(char *, char *); -CARD* card_parse_csv(char *, size_t *); +CARD* card_parse_csv(char *, int *); #endif diff --git a/src/main.c b/src/main.c index 1941309..bf2a8b8 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,7 @@ #include #include #include +#include #include "include/main.h" #include "include/card.h" @@ -9,9 +10,7 @@ void die(char *s) { fprintf(stderr, "fatal: %s\n", s); exit(1); } - -char *fgetl(FILE *stream) { - size_t s_sz = 1; // +1 for null byte +char *fgetl(FILE *stream) { size_t s_sz = 1; // +1 for null byte char *s = NULL; char c; @@ -38,15 +37,63 @@ char *strdup_(char *s) { int main(int argc, char **argv) { CARD *cards; - size_t cards_ct; + WINDOW *main_card; + int cards_ct, cc = 0, cf = 0, term_y, term_x; + char k = '\0'; - if (argc < 1) + if (argc < 2) die("filename required"); cards = card_parse_csv(argv[1], &cards_ct); - for (size_t i = 0; i < cards_ct; i++) - printf("o: `%s`, r: `%s`\n", cards[i].obverse, cards[i].reverse); + initscr(); + noecho(); + curs_set(0); + getmaxyx(stdscr, term_y, term_x); + main_card = newwin(term_y * .75, + term_x * .75, + (term_y * .5) - ((term_y * .75) * .5), + (term_x * .5) - ((term_x * .75) * .5)); + refresh(); + do { + switch (k) { + case 'j': + if (++cc > cards_ct - 1) + cc = 0; + cf = 0; + break; + case 'k': + if (--cc < 0) + cc = cards_ct - 1; + cf = 0; + break; + case ' ': + switch (cf) { + case 0: cf = 1; break; + case 1: cf = 0; break; + } + break; + case 'q': + endwin(); + exit(0); + break; + } + + wclear(main_card); + wrefresh(main_card); + box(main_card, 0, 0); + if (cf == 0) { + mvwprintw(main_card, 0, 10, " Card #%d/%d [front] \r", cc + 1, cards_ct); + mvwprintw(main_card, (term_y * .75) * .5, (term_x * .75) * .5, "%s\r", cards[cc].obverse); + } else { + mvwprintw(main_card, 0, 10, " Card #%d/%d [back] \r", cc + 1, cards_ct); + mvwprintw(main_card, (term_y * .75) * .5, (term_x * .75) * .5, "%s\r", cards[cc].reverse); + } + wrefresh(main_card); + } while ((k = getch()) != EOF); + + /* for (size_t i = 0; i < cards_ct; i++) */ + /* printf("o: `%s`, r: `%s`\n", cards[i].obverse, cards[i].reverse); */ return 0; }