From 7e4698c71fbad706447707db1dc9993fc1b11420 Mon Sep 17 00:00:00 2001 From: 0x35c <> Date: Sat, 10 May 2025 16:09:13 +0200 Subject: [PATCH] level07: source code done --- level07/source.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 level07/source.c diff --git a/level07/source.c b/level07/source.c new file mode 100644 index 0000000..16259dc --- /dev/null +++ b/level07/source.c @@ -0,0 +1,102 @@ +#include +#include +#include + +int clear_stdin(void) +{ + char c; + do + c = getchar(); + while (c != 10); + return c; +} + +int get_unum() +{ + uint nb; + + fflush(stdout); + scanf("%u", &nb); + clear_stdin(); + return nb; +} + +int store_number(char *data) +{ + unsigned int number; + unsigned int index; + + printf(" Number: "); + number = get_unum(); + printf(" Index: "); + index = get_unum(); + if (index == 3 * (index / 3) || (number & 0xff00) == 183) { + puts(" *** ERROR! ***"); + puts(" This index is reserved for wil!"); + puts(" *** ERROR! ***"); + return 1; + } else { + data[4 * index] = number; + return 0; + } +} + +int read_number(char *data) +{ + int unum; + + printf(" Index: "); + unum = get_unum(); + printf(" Number at data[%u] is %u\n", unum, data[4 * unum]); + return 0; +} + +int main(int argc, const char **argv, const char **envp) +{ + char data[400]; + int number; + char s[4]; + int a = 0, b = 0, c = 0, d = 0; + + s[0] = 0; + memset(data, 0, sizeof(data)); + while (*argv) { + memset((void *)*argv, 0, strlen(*argv)); + ++argv; + } + while (*envp) { + memset((void *)*envp, 0, strlen(*envp)); + ++envp; + } + puts("----------------------------------------------------\n" + " Welcome to wil's crappy number storage service! \n" + "----------------------------------------------------\n" + " Commands: \n" + " store - store a number into the data storage \n" + " read - read a number from the data storage \n" + " quit - exit the program \n" + "----------------------------------------------------\n" + " wil has reserved some storage :> \n" + "----------------------------------------------------\n"); + while (1) { + printf("Input command: "); + number = 1; + fgets(s, 20, stdin); + s[strlen(s) - 1] = '\0'; + if (!memcmp(s, "quit", 4)) + return 0; + if (!memcmp(s, "store", 5)) + number = store_number(data); + if (!memcmp(s, "read", 4)) + number = read_number(data); + if (number) + printf(" Failed to do %s command\n", s); + else + printf(" Completed %s command successfully\n", s); + s[0] = 0; + a = 0; + b = 0; + c = 0; + d = 0; + } +}