C:waitnotify not working on hosted AROS for EMU filesystem

paolone · 731


  • Senior Member
  • ****
    • Posts: 499
    • Karma: +87/-0
Hi. I have a quite nasty issue on Linux Hosted AROS (surely on ABIv0 32bit i386 Icaros Destkop, but it might be true for 64bit ABIv1 version as well).

If I give this command:
waitnotify t:pippo

it correctly works and the shell waits for me doing anything on that file, even simply creating it if it does not exist. However, if I give the very same command on the hosted filesystem, for instance:

waitnotify sys:pippo

I get this error instead:
WaitNotify: StartNotify() failed on "Sys:pippo"

I guess the EMU filesystem handler lacks of come notification feature, and this might have also something to do with the fact that I can't - for instance - connect a USB pendrive on Linux and have hosted AROS look into its contents (the folder /media/paolone/something, or wherever I mount it, remains empty). So I have a first question for you

1. would anyone be so kind to fix this? How much time/effort would be required?

Then, the workaround. Since I *NEED* to stop the execution of a shell script and wait for a file actually being created by a different process (which is running on the Linux host, so AROS wouldn't be aware of this happening in other ways), I wrote a very simple AROS shell script which basically accepts the file to be created (and some sort of time counter, if I express this in the form: S:waitforfile <filename>@@<number of cycles>). The problem is, obviously, that I can't invoke it from other scripts, unless anyone teaches me how to do that:

Code: [Select]
.KEY w01/A
.BRA {
.KET }

FailAt 21

; echo entered argument: ##{w01}##

; this script allows to wait for a while, until a file pops up!

; check for missing arguments
if "{w01}" EQ ""
   echo "Missing file to wait for. Usage:"
   echo "waitforfile path:to/file@@cycles"
   skip FINE

echo "{w01}" >t:wffarg                 ; argument of waitforfile
grep -c "@@" t:wffarg >t:wffck         ; number of occurrences of @@ string

if ${t:wffck} GT 0 VAL
   ; ok, it seems we have a cycles number to wait for
   cut "{w01}" WORD 2 SEPARATOR @@ >t:wffcounter
   cut "{w01}" WORD 1 SEPARATOR @@ >t:wffarg
   set M=${t:wffcounter}
   delete t:wffcounter >NIL:
   ; set a number of cycles to timeout
   set M=7200

delete t:wffck >NIL:

Set L=0     ; reset counter

 Set L=`eval $L+1`
  if EXISTS "${t:wffarg}"
   skip FINE
 if $L EQ $M VAL
  echo "Timeout reached, file not found."
  skip FINE
skip LOOP back

; end of file
; echo $L
unset L >NIL:
unset M >NIL:

I can easily replicate the central part of the script wherever I need it, but I wonder if we have a C utility that does almost the same thing here.

If you copy'n'paste, then save the script as S:waitforfile, and then protect +S it, you would be able to use it this way

execute s:waitforfile t:pippo   --> wait for t:pippo to be created, times out after ~10 minutes (7200 is the number of cycles to wait for it)
execute s:waitforfile t:pippo@@-1  --> wait for t:pippo to be created, forever (counter adding units would never reach -1, since it would be always superior)
execute s:waitforfile t:pippo@@1000  --> wait for t:pippo to be created, for 1000 cycles (more or less 1 minute, depending on your PC speed)