an example
[rrq/rrqforth.git] / examples / sleep.f
1 #!/home/ralph/src/devuan/rrqforth/rrqforth
2
3 SYSTEM DEFINITIONS
4
5 : sleep ( seconds -- )
6   0 SWAP 0 0           # set up 2 cell pairs for 2 "struct timespec"
7   2 D[n] 0 D[n]        # Pointers to them ( *req *rem )
8   SYS_NANOSLEEP DROP   # ignore return value
9   2DROP 2DROP          # cleanup
10 ;
11
12 : DOTS ( n -- ; sleep n seconds with a dot every second )
13   BEGIN S" ." TELL 1 sleep 1 - DUP 0 > IFAGAIN SP EMIT END DROP ;
14
15 : DIEIF ( n -- ; die if n is 0 )
16   0= IF S" ** not a number **" TELL NL EMIT 1 EXIT THEN ;
17
18 # Read a number
19 " Sleep seconds: " TELL STDIN READ-WORD NUMBER DIEIF
20 " sleeping " TELL DOTS " done" TELL NL EMIT
21
22 0 EXIT