A collection of programs written in ponylang.io
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

66 lines
1.3 KiB

use "itertools"
use "files"
class ProcessHandler
let env : Env
new ref create(env' : Env) =>
env = env'
fun isNumeric(st : String) : Bool =>
try
if st.at_offset(0)? == 48 then
return false
end
end
Iter[U8](st.values()).all({ (c) => (c >= 48) and (c <= 57) })
fun apply(path : FilePath, entries : Array[String] ref) =>
let new_entries : Array[String] ref = entries.clone()
let i : USize = 0
for f in new_entries.values() do
if not isNumeric(f) then
try
entries.delete(i)?
else
None
end
end
i.add(1)
end
if path.path == "/proc" then
return None
end
try
let status = path.join("stat")?
this.env.out.write(path.path + "\n")
match OpenFile(status)
| let file: File =>
while file.errno() is FileOK do
this.env.out.write(file.read(1024))
end
else
None
end
end
class ProcessStatus
fun getProcesses(cap : AmbientAuth, env : Env) =>
try
let proc_dir = FilePath(cap, "/proc")?
proc_dir.walk(ProcessHandler.create(env))
else
None
end
None
actor Main
new create(env : Env) =>
let test = ProcessStatus.create()
try
test.getProcesses(env.root as AmbientAuth, env)
else
None
end