From 238c8095e2dca00d1489d424d682819e01a081d7 Mon Sep 17 00:00:00 2001 From: Brian Barto Date: Wed, 6 Apr 2016 20:28:18 -0400 Subject: [PATCH] Linked list initial implementation modified: src/nms.c --- src/nms.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 69 insertions(+), 11 deletions(-) diff --git a/src/nms.c b/src/nms.c index c1c85b8..d562d30 100644 --- a/src/nms.c +++ b/src/nms.c @@ -3,6 +3,7 @@ #include #include #include +#include #define SPACE 040 #define NEWLINE 012 @@ -12,24 +13,81 @@ int getTermSizeCols(void); void clearTermWindow(int, int); int main(void) { + struct winpos { + char source; + int row; + int col; + struct winpos *next; + }; + struct winpos start; + struct winpos *list_pointer = &start; + struct winpos *temp; // Used for free()ing the list int termSizeRows = getTermSizeRows(); int termSizeCols = getTermSizeCols(); - char *inputBuffer; + + // Geting input + int c, x = 1, y = 1; + bool first = true; + while ((c = getchar()) != EOF) { + switch (c) { + case '\n': + ++y; + x = 1; + break; + case ' ': + case '\t': + case '\f': + case '\r': + case '\v': + ++x; + break; + default: + if (first) { + start.source = c; + start.row = y; + start.col = x; + start.next = (struct winpos *) 0; + first = false; + ++x; + } else { + // Allocate space for the new struct in our linked list + // and point *next to it. + list_pointer->next = malloc(sizeof(struct winpos)); + + // Now let's point list_pointer to the next structure + // and populate it. + list_pointer = list_pointer->next; + list_pointer->source = c; + list_pointer->row = y; + list_pointer->col = x; + list_pointer->next = (struct winpos *) 0; + + ++x; + } + break; + + } + } clearTermWindow(termSizeRows, termSizeCols); - // Geting input - int c, i = 0; - while ((c = getchar()) != EOF) { - inputBuffer = realloc(inputBuffer, sizeof(char) * (i + 2)); - inputBuffer[i] = c; - ++i; + list_pointer = &start; + while (list_pointer != (struct winpos *) 0) { + printf("row: %i, ", list_pointer->row); + printf("col: %i, ", list_pointer->col); + printf("char: %c\n", list_pointer->source); + list_pointer = list_pointer->next; } - inputBuffer[i] = '\0'; - printf("%s", inputBuffer); - - free(inputBuffer); + // Freeing the list. Starting with the second list item because + // the first one was not created with malloc + list_pointer = start.next; + while (list_pointer != (struct winpos *) 0) { + temp = list_pointer; + list_pointer = list_pointer->next; + free(temp); + } + return 0; }