Added more syscalls
This commit is contained in:
parent
4b7c9f387d
commit
c0b30e9c22
31
examples/shell/shell.q
Normal file
31
examples/shell/shell.q
Normal 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)
|
||||
}
|
||||
}
|
@ -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)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user