From bef70422256c9363ef53ef85bfcc273efcfab2ea Mon Sep 17 00:00:00 2001 From: jekwupeter Date: Sun, 19 Jun 2022 18:05:00 +0100 Subject: [PATCH] Task upload --- bytecodes/00.m | 15 ++++++ bytecodes/06.m | 6 +++ bytecodes/07.m | 10 ++++ bytecodes/09.m | 6 +++ bytecodes/12.m | 6 +++ bytecodes/19.m | 14 +++++ bytecodes/28.m | 4 ++ bytecodes/31.m | 14 +++++ bytecodes/35.m | 14 +++++ bytecodes/test.m | 10 ++++ dlinked_list_functions.c | 36 +++++++++++-- func1.c | 13 +++++ func2.c | 47 +++++++++++++++-- math_functions.c | 107 +++++++++++++++++++++++++++++++++++++++ monty.exe | Bin 126376 -> 132403 bytes monty.h | 16 +++++- movement_functions.c | 24 +++++++++ print_functions.c | 69 +++++++++++++++++++++++++ 18 files changed, 401 insertions(+), 10 deletions(-) create mode 100644 bytecodes/06.m create mode 100644 bytecodes/07.m create mode 100644 bytecodes/09.m create mode 100644 bytecodes/12.m create mode 100644 bytecodes/19.m create mode 100644 bytecodes/28.m create mode 100644 bytecodes/31.m create mode 100644 bytecodes/35.m create mode 100644 bytecodes/test.m create mode 100644 math_functions.c create mode 100644 movement_functions.c create mode 100644 print_functions.c diff --git a/bytecodes/00.m b/bytecodes/00.m index 5fa87a9..72c05ef 100644 --- a/bytecodes/00.m +++ b/bytecodes/00.m @@ -2,3 +2,18 @@ push 2$ push 3$ pall$ +push 0 Push 0 onto the stack$ +push 1 Push 1 onto the stack$ +$ +push 2$ + push 3$ + pall $ +$ +$ + $ +push 4$ +$ + push 5 $ + push 6 $ +$ +pall This is the end of our program. Monty is awesome!$ \ No newline at end of file diff --git a/bytecodes/06.m b/bytecodes/06.m new file mode 100644 index 0000000..262ceb1 --- /dev/null +++ b/bytecodes/06.m @@ -0,0 +1,6 @@ +push 1 +pint +push 2 +pint +push 3 +pint diff --git a/bytecodes/07.m b/bytecodes/07.m new file mode 100644 index 0000000..30497b1 --- /dev/null +++ b/bytecodes/07.m @@ -0,0 +1,10 @@ +push 1 +push 2 +push 3 +pall +pop +pall +pop +pall +pop +pall \ No newline at end of file diff --git a/bytecodes/09.m b/bytecodes/09.m new file mode 100644 index 0000000..c860590 --- /dev/null +++ b/bytecodes/09.m @@ -0,0 +1,6 @@ +push 1 +push 2 +push 3 +pall +swap +pall \ No newline at end of file diff --git a/bytecodes/12.m b/bytecodes/12.m new file mode 100644 index 0000000..f85b5f8 --- /dev/null +++ b/bytecodes/12.m @@ -0,0 +1,6 @@ +push 1 +push 2 +push 3 +pall +add +pall \ No newline at end of file diff --git a/bytecodes/19.m b/bytecodes/19.m new file mode 100644 index 0000000..790b827 --- /dev/null +++ b/bytecodes/19.m @@ -0,0 +1,14 @@ +push 1 +push 2 +push 3 +push 4 +push 0 +push 110 +push 0 +push 108 +push 111 +push 111 +push 104 +push 99 +push 83 +pstr \ No newline at end of file diff --git a/bytecodes/28.m b/bytecodes/28.m new file mode 100644 index 0000000..b5dc742 --- /dev/null +++ b/bytecodes/28.m @@ -0,0 +1,4 @@ +push 72 +pchar +push 100 +pchar \ No newline at end of file diff --git a/bytecodes/31.m b/bytecodes/31.m new file mode 100644 index 0000000..790b827 --- /dev/null +++ b/bytecodes/31.m @@ -0,0 +1,14 @@ +push 1 +push 2 +push 3 +push 4 +push 0 +push 110 +push 0 +push 108 +push 111 +push 111 +push 104 +push 99 +push 83 +pstr \ No newline at end of file diff --git a/bytecodes/35.m b/bytecodes/35.m new file mode 100644 index 0000000..9c03770 --- /dev/null +++ b/bytecodes/35.m @@ -0,0 +1,14 @@ +push 1 +push 2 +push 3 +push 4 +push 5 +push 6 +push 7 +push 8 +push 9 +push 0 +pall +rotl +# pint +# pall \ No newline at end of file diff --git a/bytecodes/test.m b/bytecodes/test.m new file mode 100644 index 0000000..3809d94 --- /dev/null +++ b/bytecodes/test.m @@ -0,0 +1,10 @@ + +push 11 +push 3 +add +pall +pop +# pop +# push 1 +# mod +# pall diff --git a/dlinked_list_functions.c b/dlinked_list_functions.c index d81f431..4a542a0 100644 --- a/dlinked_list_functions.c +++ b/dlinked_list_functions.c @@ -28,12 +28,14 @@ stack_t *add_dnodeint(stack_t **stack_ptr, const int n) return (new_node); } -int delete_dnodeint(stack_t **stack_ptr) +int delete_dnodeint(stack_t **stack_ptr, unsigned int count) { stack_t *tmp; tmp = (*stack_ptr); if (*stack_ptr == NULL) - return (-1); + { + printf("L%d: can't pop an empty stack", count); + } /* Move the head pointer to the next node */ (*stack_ptr) = tmp->next; free(tmp); @@ -43,14 +45,38 @@ int delete_dnodeint(stack_t **stack_ptr) 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; + const stack_t *tmp; + tmp = stack_ptr; + while(tmp){ + printf("%d\n", tmp->n); + tmp = tmp->next; i++; } return (i); } +size_t print_dlisthead(const stack_t *stack_ptr, unsigned int count) +{ + if (stack_ptr == NULL) + { + printf("L%d: can't pint, stack empty\n", count); + exit(EXIT_FAILURE); + } + printf("%d\n", stack_ptr->n); + return (1); +} + +size_t print_dlistheadch(const stack_t *stack_ptr, unsigned int count) +{ + if (stack_ptr == NULL) + { + printf("L%d: can't pint, stack empty\n", count); + exit(EXIT_FAILURE); + } + printf("%c\n", stack_ptr->n); + return (1); +} + void free_stack(stack_t *stack_ptr) { stack_t *tmp; diff --git a/func1.c b/func1.c index 938b4ae..ba71d45 100644 --- a/func1.c +++ b/func1.c @@ -25,6 +25,19 @@ void opcode(stack_t **stack_ptr, char *line, unsigned int count) };*/ instruction_t op[] = { {"pall", pall}, + {"pint", pint}, + {"pop", pop}, + {"swap", swap}, + {"add", _add}, + {"nop", nop}, + {"sub", _sub}, + {"div", _div}, + {"mod", _mod}, + {"mul", _mul}, + {"#", nop}, + {"pchar", pchar}, + {"pstr", pstr}, + {"rotl", rotl}, {NULL, NULL} }; int i; diff --git a/func2.c b/func2.c index 2feecc9..712408c 100644 --- a/func2.c +++ b/func2.c @@ -28,11 +28,50 @@ void push(stack_t **stack_ptr, char *arg_data, unsigned int count) } /** - * pall - prints all the values on the stack, starting from the top of the stack. + * pall - prints top of stack. * @stack_ptr: pointer to dlinkedlist * @count: line number */ -void pall(stack_t **stack_ptr, unsigned int count __attribute__((unused))) +void pop(stack_t **stack_ptr, unsigned int count) { - print_dlistint(*stack_ptr); -} \ No newline at end of file + if (stack_ptr != NULL) + delete_dnodeint(stack_ptr, count); + else + { + printf("L%d: can't pop an empty stack", count); + exit (EXIT_FAILURE); + } +} + +/** + * pall - prints top of stack. + * @stack_ptr: pointer to dlinkedlist + * @count: line number + */ +void swap(stack_t **stack_ptr, unsigned int count) +{ + int buff; + + if ((*stack_ptr) == NULL || (*stack_ptr)->next == NULL) + { + printf("L%d: can't swap, stack too short", count); + exit(EXIT_FAILURE); + } + buff = (*stack_ptr)->n; + (*stack_ptr)->n = (*stack_ptr)->next->n; + (*stack_ptr)->next->n = buff; +} + +/** + * pall - prints top of stack. + * @stack_ptr: pointer to dlinkedlist + * @count: line number + */ +void nop(stack_t **stack_ptr, unsigned int count) +{ + (void)stack_ptr; + (void)count; +} + + + diff --git a/math_functions.c b/math_functions.c new file mode 100644 index 0000000..2c4bce3 --- /dev/null +++ b/math_functions.c @@ -0,0 +1,107 @@ +#include "monty.h" + +/** + * _mul - multiplies first and second element in stack. + * @stack_ptr: pointer to dlinkedlist + * @count: line number + */ +void _mul(stack_t **stack_ptr, unsigned int count) +{ + int num1, num2, result; + + if ((*stack_ptr) == NULL || (*stack_ptr)->next == NULL) + { + printf("L%d: can't swap, stack too short", count); + exit(EXIT_FAILURE); + } + num1 = (*stack_ptr)->n; + num2 = (*stack_ptr)->next->n; + result = num2 * num1; + (*stack_ptr)->next->n = result; + pop(stack_ptr, count); +} + +/** + * _mod - finds modulus of first and second element + * @stack_ptr: pointer to dlinkedlist + * @count: line number + */ +void _mod(stack_t **stack_ptr, unsigned int count) +{ + int num1, num2, result; + stack_t *tmp; + tmp = *stack_ptr; + + if (tmp->next == NULL) + { + printf("L%d: can't mod, stack too short", count); + exit(EXIT_FAILURE); + } + num1 = tmp->n; + num2 = tmp->next->n; + result = num2 % num1; + (*stack_ptr)->next->n = result; + pop(stack_ptr, count); +} + +/** + * _add - adds first and second element in stack + * @stack_ptr: pointer to dlinkedlist + * @count: line number + */ +void _add(stack_t **stack_ptr, unsigned int count) +{ + int num1, num2, result; + + if ((*stack_ptr) == NULL || (*stack_ptr)->next == NULL) + { + printf("L%d: can't swap, stack too short", count); + exit(EXIT_FAILURE); + } + num1 = (*stack_ptr)->n; + num2 = (*stack_ptr)->next->n; + result = num1 + num2; + (*stack_ptr)->next->n = result; + pop(stack_ptr, count); +} +/** + * _div - divides second and first element in stack + * @stack_ptr: pointer to dlinkedlist + * @count: line number + */ +void _div(stack_t **stack_ptr, unsigned int count) +{ + int num1, num2, result; + + if ((*stack_ptr) == NULL || (*stack_ptr)->next == NULL) + { + printf("L%d: can't swap, stack too short", count); + exit(EXIT_FAILURE); + } + num1 = (*stack_ptr)->n; + num2 = (*stack_ptr)->next->n; + result = num2 / num1; + (*stack_ptr)->next->n = result; + pop(stack_ptr, count); +} +/** + * _sub -finds the difference first and second element in stack + * @stack_ptr: pointer to dlinkedlist + * @count: line number + */ + +void _sub(stack_t **stack_ptr, unsigned int count) +{ + int num1, num2, result; + + if ((*stack_ptr) == NULL || (*stack_ptr)->next == NULL) + { + printf("L%d: can't swap, stack too short", count); + exit(EXIT_FAILURE); + } + num1 = (*stack_ptr)->n; + num2 = (*stack_ptr)->next->n; + result = num2 - num1; + (*stack_ptr)->next->n = result; + pop(stack_ptr, count); +} \ No newline at end of file diff --git a/monty.exe b/monty.exe index cc4a97ba04c2a2820f469812d94d52d2a13bdba5..e626a7fab1c74e80d2aecf269cf14024d1368df8 100644 GIT binary patch delta 22807 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 delta 18116 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 != NULL) + { + while(tmp) + tmp = tmp->next; + printf("%d\n", tmp->n); + pop(stack_ptr, count); + printf("TEST\n"); + printf("%d\n", tmp->n); + node->next = NULL; + tmp->next = node; + node->prev = tmp; + printf("%d\n", tmp->n); + printf("TEST-2\n"); + } + return; +} \ No newline at end of file diff --git a/print_functions.c b/print_functions.c new file mode 100644 index 0000000..3ba64a0 --- /dev/null +++ b/print_functions.c @@ -0,0 +1,69 @@ +#include "monty.h" + +/** + * pstr - prints string starting from top of stack. + * @stack_ptr: pointer to dlinkedlist + * @count: line number + */ +void pstr(stack_t **stack_ptr, unsigned int count) +{ + stack_t *tmp; + tmp = *stack_ptr; + (void)(count); + + if (stack_ptr != NULL) + { + while (tmp != NULL && tmp->n > 0 && tmp->n < 127) + { + printf("%c", tmp->n); + tmp = tmp->next; + } + } + putchar('\n'); +} + +/** + * pchar - prints char at top of stack. + * @stack_ptr: pointer to dlinkedlist + * @count: line number + */ +void pchar(stack_t **stack_ptr, unsigned int count) +{ + int num; + num = (*stack_ptr)->n; + + if (stack_ptr == NULL) + { + printf("L%d: can't pchar, stack empty", count); + exit(EXIT_FAILURE); + } + else if (num >= 0 && num <= 127) + { + print_dlistheadch(*stack_ptr, count); + return; + } + printf("L%d: can't pchar, value out of range", count); + 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))) +{ + if (stack_ptr != NULL) + print_dlistint(*stack_ptr); + return; +} + +/** + * pall - prints top of stack. + * @stack_ptr: pointer to dlinkedlist + * @count: line number + */ +void pint(stack_t **stack_ptr, unsigned int count) +{ + print_dlisthead(*stack_ptr, count); +} \ No newline at end of file