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)
|
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) {
|
exit(status Int) {
|
||||||
syscall(60, status)
|
syscall(60, status)
|
||||||
}
|
}
|
||||||
@ -69,3 +77,7 @@ rmdir(path Pointer) -> Int {
|
|||||||
unlink(file Pointer) -> Int {
|
unlink(file Pointer) -> Int {
|
||||||
return syscall(87, file)
|
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