Added more syscalls

This commit is contained in:
Eduard Urbach 2025-01-20 21:37:23 +01:00
parent 4b7c9f387d
commit c0b30e9c22
Signed by: akyoto
GPG Key ID: C874F672B1AF20C0
2 changed files with 43 additions and 0 deletions

31
examples/shell/shell.q Normal file
View File

@ -0,0 +1,31 @@
import mem
import sys
main() {
length := 256
command := mem.alloc(length)
argv := mem.alloc(1)
envp := mem.alloc(1)
info := mem.alloc(24)
loop {
sys.write(1, "$ ", 2)
n := sys.read(0, command, length)
if n <= 0 {
return
}
// TODO: Indexing by register
command[7] = '\0'
pid := sys.fork()
if pid == 0 {
sys.execve(command, argv, envp)
return
}
sys.waitid(0, pid, info, 4)
}
}

View File

@ -26,6 +26,14 @@ clone(flags Int, stack Pointer) -> Int {
return syscall(56, flags, stack)
}
fork() -> Int {
return syscall(57)
}
execve(path Pointer, argv Pointer, envp Pointer) -> Int {
return syscall(59, path, argv, envp)
}
exit(status Int) {
syscall(60, status)
}
@ -69,3 +77,7 @@ rmdir(path Pointer) -> Int {
unlink(file Pointer) -> Int {
return syscall(87, file)
}
waitid(type Int, id Int, info Pointer, options Int) -> Int {
return syscall(247, type, id, info, options)
}