From 961d63c4cb648c7092c0e5a6780348948ec48de5 Mon Sep 17 00:00:00 2001 From: jekwupeter Date: Sat, 18 Jun 2022 02:01:51 +0100 Subject: [PATCH] Task upload --- .vscode/settings.json | 5 +++ 00.m | 4 ++ dlinked_list_functions.c | 77 ++++++++++++++++++++++++++++----------- func1.c | 54 +++++++++++++++++++++++++++ func2.c | 38 +++++++++++++++++++ main.c | 46 +++++++++++++++++++++++ monty.exe | Bin 0 -> 126376 bytes monty.h | 15 +++++++- other_functions.c | 62 +++++++++++++++++++++++++++++++ 9 files changed, 279 insertions(+), 22 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 00.m create mode 100644 func1.c create mode 100644 func2.c create mode 100644 main.c create mode 100644 monty.exe create mode 100644 other_functions.c diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..5655c79 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "monty.h": "c" + } +} \ No newline at end of file diff --git a/00.m b/00.m new file mode 100644 index 0000000..5fa87a9 --- /dev/null +++ b/00.m @@ -0,0 +1,4 @@ +push 1$ +push 2$ +push 3$ +pall$ diff --git a/dlinked_list_functions.c b/dlinked_list_functions.c index 08ebf71..d81f431 100644 --- a/dlinked_list_functions.c +++ b/dlinked_list_functions.c @@ -1,29 +1,64 @@ #include "monty.h" -/** - * add_dnodeint - adds a new node to beggining of dlinked list - * @stack_ptr: pointer to top of dlinked list - * @n: input data for new node - * - * Return: adress to new dnode added - * - * */ + stack_t *add_dnodeint(stack_t **stack_ptr, const int n) { - stack_t *new_node; + stack_t *new_node; - /* allocate memory to node */ - new_node = (stack_t *)malloc(sizeof(stack_t)); - if (new_node == NULL) - return (NULL); + /* allocate memory to node */ + new_node = (stack_t *)malloc(sizeof(stack_t)); + if (new_node == NULL) + return (NULL); - new_node->n = n;/* put in data*/ - /* make next of new node as head & prev as NULL */ - new_node->next = n; - new_node->prev = NULL; + new_node->n = n;/* put in data*/ + new_node->prev = NULL; + /* Check if the list is empty */ + if (*stack_ptr == NULL) + { + new_node->next = NULL; + (*stack_ptr) = new_node; + return (new_node); + } + /* change the prev of stack_ptr node to new node */ + (*stack_ptr)->prev = new_node; + /* make next of new node as stack_ptr & prev as NULL */ + new_node->next = (*stack_ptr); + new_node->prev = NULL; + (*stack_ptr) = new_node; - /* change the prev of head node to new node */ - if ((*stack_ptr) != NULL) - (*stack_ptr)->prev = new_node + return (new_node); +} - return (newnode); +int delete_dnodeint(stack_t **stack_ptr) +{ + stack_t *tmp; + tmp = (*stack_ptr); + if (*stack_ptr == NULL) + return (-1); + /* Move the head pointer to the next node */ + (*stack_ptr) = tmp->next; + free(tmp); + return (1); } + +size_t print_dlistint(const stack_t *stack_ptr) +{ + int i = 0; + while(stack_ptr){ + printf("%d\n", stack_ptr->n); + stack_ptr = stack_ptr->next; + i++; + } + return (i); +} + +void free_stack(stack_t *stack_ptr) +{ + stack_t *tmp; + + while (stack_ptr != NULL) + { + tmp = stack_ptr; + stack_ptr = stack_ptr->next; + free(tmp); + } +} \ No newline at end of file diff --git a/func1.c b/func1.c new file mode 100644 index 0000000..938b4ae --- /dev/null +++ b/func1.c @@ -0,0 +1,54 @@ +#include "monty.h" + +/** + * opcode - finds the functions matching the opcode + * @stack_ptr: pointer to dlinkedlist + * @str: string to compare + * @count: line counts + * @arg_data: data following the function + */ +void opcode(stack_t **stack_ptr, char *line, unsigned int count) +{ + /* + instruction_t op[] = { + {"pall", pall}, + {"swap", _add}, + {"pop", pop}, + {"pint", pint}, + {"mod", _mod}, + {"mul", _mul}, + {"div", _div}, + {"sub", _sub}, + {"nop", nop}, + {"add", _add}, + {NULL, NULL} + };*/ + instruction_t op[] = { + {"pall", pall}, + {NULL, NULL} + }; + int i; + char *str = NULL; + char *arg_data; + char delimit[] = " \t\r\n\f$"; + + str = strtok(line, delimit); + arg_data = strtok(NULL, delimit); + if (str == NULL) + return; + if (strcmp(str, "push") == 0) + { + push(stack_ptr, arg_data, count); + return; + } + for (i = 0; op[i].opcode; i++) + { + if (strcmp(op[i].opcode, str) == 0) + { + op[i].f(stack_ptr, count); + return; + } + } + fprintf(stderr, "L%d: unknown instruction %s\n", count, str); + exit(EXIT_FAILURE); +} diff --git a/func2.c b/func2.c new file mode 100644 index 0000000..2feecc9 --- /dev/null +++ b/func2.c @@ -0,0 +1,38 @@ +#include "monty.h" + +/** + * push - add an element to the stack/queue + * @stack_ptr: pointer to dlinked list + * @arg_data: data of node to be pushed + * @count: line number + */ +void push(stack_t **stack_ptr, char *arg_data, unsigned int count) +{ + stack_t *node; + + if (arg_data == NULL) + { + fprintf(stderr, "L%d: usage: push integer\n", count); + free(*stack_ptr); + *stack_ptr = NULL; + exit(EXIT_FAILURE); + }; + + node = add_dnodeint(stack_ptr, atoi(arg_data)); + if (node == NULL) + { + puts("Error: malloc failed"); + free_stack(*stack_ptr); + exit(EXIT_FAILURE); + } +} + +/** + * pall - prints all the values on the stack, starting from the top of the stack. + * @stack_ptr: pointer to dlinkedlist + * @count: line number + */ +void pall(stack_t **stack_ptr, unsigned int count __attribute__((unused))) +{ + print_dlistint(*stack_ptr); +} \ No newline at end of file diff --git a/main.c b/main.c new file mode 100644 index 0000000..4d4c08f --- /dev/null +++ b/main.c @@ -0,0 +1,46 @@ +#include "monty.h" +/** + * main - entry point + * @argv: argument vector + * @argc: argument counter + * + * Return: Nothing + */ +int main(int argc, char *argv[]) +{ + FILE *fp; + char *line = NULL; + size_t len = 0; + stack_t *stack_ptr = NULL; + unsigned int count = 1; + ssize_t read; + + if (argc != 2) + { + fprintf(stderr, "USAGE: monty file\n"); + exit(EXIT_FAILURE); + } + + fp = fopen(argv[1], "r"); + + if (fp == NULL) + { + fprintf(stderr, "Error: Can't open file %s\n", argv[0]); + exit(EXIT_FAILURE); + } + + while ((read = getline(&line, &len, fp)) != -1) + { + if (*line == '\n') + { + count++; + continue; + } + opcode(&stack_ptr, line, count); + count++; + } + free(line); + fclose(fp); + free_stack(stack_ptr); + exit(EXIT_SUCCESS); +} diff --git a/monty.exe b/monty.exe new file mode 100644 index 0000000000000000000000000000000000000000..cc4a97ba04c2a2820f469812d94d52d2a13bdba5 GIT binary patch literal 126376 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 literal 0 HcmV?d00001 diff --git a/monty.h b/monty.h index 6649fc1..17159d7 100644 --- a/monty.h +++ b/monty.h @@ -1,5 +1,9 @@ #ifndef MONTY_H #define MONTY_H +#include +#include +#include + /** * struct stack_s - doubly linked list representation of a stack (or queue) * @n: integer @@ -15,6 +19,7 @@ typedef struct stack_s struct stack_s *prev; struct stack_s *next; } stack_t; + /** * struct instruction_s - opcode and its function * @opcode: the opcode @@ -28,5 +33,13 @@ typedef struct instruction_s char *opcode; void (*f)(stack_t **stack, unsigned int line_number); } instruction_t; -extern stack_t *stack_ptr = NULL; + +size_t getline(char **lineptr, size_t *n, FILE *stream); +void pall(stack_t **stack_ptr, unsigned int count __attribute__((unused))); +size_t print_dlistint(const stack_t *stack_ptr); +int delete_dnodeint(stack_t **stack_ptr); +stack_t *add_dnodeint(stack_t **stack_ptr, const int n); +void push(stack_t **stack_ptr, char *arg_data, unsigned int count); +void opcode(stack_t **stack_ptr, char *line, unsigned int count); +void free_stack(stack_t *stack_ptr); #endif diff --git a/other_functions.c b/other_functions.c new file mode 100644 index 0000000..6c60899 --- /dev/null +++ b/other_functions.c @@ -0,0 +1,62 @@ +#include "monty.h" +/** + * This code is public domain -- Will Hartung 4/9/09 + * getline - reads a full line from a stream + * @lineptr: pointer to character array + * @n: pointer to variable that keeps array size + * stream: stdin is the stream from which the file is read + * + * Return: returns the number of char entered + * + * */ +size_t getline(char **lineptr, size_t *n, FILE *stream) { + char *bufptr = NULL; + char *p = bufptr; + size_t size; + int c; + + if (lineptr == NULL) { + return -1; + } + if (stream == NULL) { + return -1; + } + if (n == NULL) { + return -1; + } + bufptr = *lineptr; + size = *n; + + c = fgetc(stream); + if (c == EOF) { + return -1; + } + if (bufptr == NULL) { + bufptr = malloc(128); + if (bufptr == NULL) { + return -1; + } + size = 128; + } + p = bufptr; + while(c != EOF) { + if ((size_t)(p - bufptr) > (size - 1)) { + size = size + 128; + bufptr = realloc(bufptr, size); + if (bufptr == NULL) { + return -1; + } + } + *p++ = c; + if (c == '\n') { + break; + } + c = fgetc(stream); + } + + *p++ = '\0'; + *lineptr = bufptr; + *n = size; + + return p - bufptr - 1; +}