hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/user/program.c
diff options
context:
space:
mode:
Diffstat (limited to 'user/program.c')
-rw-r--r--user/program.c55
1 files changed, 48 insertions, 7 deletions
diff --git a/user/program.c b/user/program.c
index 8e26128..65621f5 100644
--- a/user/program.c
+++ b/user/program.c
@@ -1,22 +1,63 @@
-static long sys_write(const char* buffer, unsigned long buffer_size)
+static long sys_write(const char* buffer, unsigned long buffer_length)
{
long ret;
- __asm__ volatile("int $0x80" : "=a"(ret) : "a"(1L), "D"(buffer), "S"(buffer_size) : "memory");
+ __asm__ volatile("int $0x80" : "=a"(ret) : "a"(1L), "D"(buffer), "S"(buffer_length) : "memory");
return ret;
}
+
+static long sys_read(void)
+{
+ long ret;
+ __asm__ volatile("int $0x80" : "=a"(ret) : "a"(2L) : "memory");
+ return ret;
+}
+
static void sys_exit(long code)
{
__asm__ volatile("int $0x80" : : "a"(0L), "D"(code) : "memory");
for (;;);
}
+static void put(const char* string)
+{
+ unsigned long n = 0;
+ while (string[n])
+ n++;
+ sys_write(string, n);
+}
+
void _start(void)
{
- const char* message = "wassup shawty\n";
- unsigned long message_length = 0;
- while (message[message_length])
- message_length++;
+ put("what's your name? ");
+ char name[64];
+ int name_length = 0;
+
+ for (;;)
+ {
+ char character = (char)sys_read();
+ if (character == '\n')
+ break;
+
+ if (character == '\b')
+ {
+ if (name_length > 0)
+ {
+ name_length--;
+ sys_write("\b \b", 3);
+ }
+
+ continue;
+ }
+
+ if (name_length < 63)
+ {
+ name[name_length++] = character;
+ sys_write(&character, 1);
+ }
+ }
- sys_write(message, message_length);
+ put("\noue va te faire foutre ");
+ sys_write(name, name_length);
+ put("\n");
sys_exit(0);
}