54 lines
1.8 KiB
Text
54 lines
1.8 KiB
Text
' Gambas module file
|
|
|
|
Private $hWatch As Watch
|
|
|
|
Public Sub Main()
|
|
' The watched events are determined automatically by the event handlers defined
|
|
$hWatch = New Watch("/tmp/gambas." & Str$(User.Id), True) As "GambasDirectory"
|
|
$hWatch.Tag = New Collection ' Save descendants here
|
|
|
|
Print ("I'm watching... You may now start Gambas projects.")
|
|
Print ("Return toggles Pause/Resume. Enter \"quit\" to quit.")
|
|
End
|
|
|
|
Public Sub Application_Read()
|
|
Dim sBuf As String
|
|
|
|
Line Input sBuf
|
|
If sBuf = ("quit") Then Quit
|
|
$hWatch.IsPaused = Not $hWatch.IsPaused
|
|
Print ("Currently");; IIf($hWatch.IsPaused, ("inactive"), ("active"))
|
|
End
|
|
|
|
Public Sub GambasDirectory_Create()
|
|
If Not Watch.IsDir Then Return ' Skip files
|
|
Print ("New Gambas process:");;
|
|
' Watch.Name is the PID of the new Gambas process. Try to get its name
|
|
' from the /proc filesystem.
|
|
With Split(File.Load("/proc" &/ Watch.Name &/ "cmdline"), "/")
|
|
Last.Tag[Watch.Name] = Left$(.[.Max], -1)
|
|
Print Last.Tag[Watch.Name]
|
|
End With
|
|
|
|
Catch
|
|
Print ("(unknown)")
|
|
' Opening the /proc file may fail because the directory may have been
|
|
' deleted already (if the process was relatively short-lived and this
|
|
' event took longer than that to get from the kernel to us).
|
|
End
|
|
|
|
Public Sub GambasDirectory_Delete()
|
|
Dim sName As String
|
|
|
|
If Not Watch.IsDir Then Return
|
|
sName = Last.Tag[Watch.Name]
|
|
' Sadly, we can only provide a name for dying processes that we watched
|
|
' being created -- the /proc file is already gone at this point.
|
|
'
|
|
' Note that if the interpreter crashes (the process ends abnormally),
|
|
' directories won't be removed so we won't notice that the process is
|
|
' gone.
|
|
If Not sName Then sName = ("(unknown)")
|
|
Print sName;; ("terminated (normally)")
|
|
Last.Tag.Remove(Watch.Name)
|
|
End
|