changeset 11:c3a589f0521d

refine code.
author pyon@macmini
date Tue, 07 Nov 2017 21:14:31 +0900
parents b0784443ed87
children aea69f84ed33
files src/unsleep.go
diffstat 1 files changed, 45 insertions(+), 52 deletions(-) [+]
line wrap: on
line diff
--- a/src/unsleep.go	Sat Nov 04 11:07:50 2017 +0900
+++ b/src/unsleep.go	Tue Nov 07 21:14:31 2017 +0900
@@ -3,76 +3,69 @@
 import(
     "flag"
     "fmt"
+    "math"
     "time"
     "os"
 )
 
-var sec = 0
+var version = 0.1
 
 func main() {
 
     // arguments
-    t := flag.Int( "t", 1, "interval" )
-    s := flag.Bool( "s", false, "normal sleep" )
-    q := flag.Bool( "q", false, "quiet ( not print count and time )" )
-    c := flag.Int( "c", 0, "loop count ( without [s] )" )
-    m := flag.Bool( "m", false, "print every minute ( without [q] )" )
-    b := flag.Bool( "b", false, "beep" )
+    q := flag.Bool( "q", false, "quiet ( don't print count and time ) [ default:false ]" )
+    l := flag.Int( "l", 0, "loop count ( l seconds / l minute ) [ default:0 ( no-limit ) ]" )
+    m := flag.Bool( "m", false, "use minute ( not second ) [ default:false ( use second )]" )
+    b := flag.Bool( "b", false, "sound beep [ default:false ]" )
+    v := flag.Bool( "v", false, "print version")
 
     flag.Parse()
 
-    if *t > 0 {
-
-        if !*q {
-            s := fmt.Sprintf( "[%04d] %s ...", *c, time.Now().Format( "15:04:05" ) )
-            fmt.Println( s )
-        }
+    if *v {
+        fmt.Fprintf( os.Stderr, "unsleep : version %v\n", version )
+        os.Exit( 0 )
+    }
 
-        if *s {
-            for i := 0; i < *t; i++ {
-                sleep1ms( *q, *m, *b, i + 1 )
-            }
-            os.Exit( 0 )
-        }
+    if *l < 0 {
+        fmt.Fprintln( os.Stderr, "bad loop count." )
+        os.Exit( 1 )
+    }
+
+    if !*q {
+        s := fmt.Sprintf( "[%04d] %s ...", *l, time.Now().Format( "15:04:05" ) )
+        fmt.Println( s )
+    }
+    mysleep( *q, *m, *b, *l )
+}
+
+func mysleep( quiet, minute, beep bool, limit int ) {
 
-        if *c < 0 {
-            fmt.Fprintln( os.Stderr, "bad loop count." )
-            os.Exit( 1 )
+    c := time.Tick( 1 * time.Second )
+    if minute {
+        c = time.Tick( 1 * time.Minute )
+    }
+
+    n := 1
+    for range c {
+        if !quiet {
+            str := fmt.Sprintf( "[%04d] %s", int( math.Abs( float64( limit - n ) ) ), time.Now().Format( "15:04:05" ) )
+            fmt.Println( str )
         }
-        if *c > 0 {
-            for i := 0; i < *c; i++ {
-                sleep1ms( *q, *m, *b, *c - i - 1 )
-            }
-        } else {
-            n := 1
-            for {
-                sleep1ms( *q, *m, *b, n )
-                n++
-            }
+        if beep {
+            alarm( 1 )
         }
-
-    } else {
-        fmt.Fprintln( os.Stderr, "bad time." )
-        os.Exit( 1 )
+        n++
+        if limit < n && limit != 0 {
+            break
+        }
+    }
+    if beep {
+        alarm( 3 )
     }
 }
 
-func sleep1ms( quiet, minute, beep bool, n int ) {
-
-    s := time.Duration( 1.00 * 1000 ) * time.Millisecond
-    time.Sleep( s )
-    sec++
-
-    if minute && sec % 60 == 0 {
-        str := fmt.Sprintf( "[%04d] %s", n / 60, time.Now().Format( "15:04:05" ) )
-        fmt.Println( str )
-    }
-    if !quiet && !minute {
-        str := fmt.Sprintf( "[%04d] %s", n, time.Now().Format( "15:04:05" ) )
-        fmt.Println( str )
-    }
-
-    if beep {
+func alarm( n int ) {
+    for i:= 0; i < n; i++ {
         //os.Stdout.Write( []byte( "\u0007" ) )
         fmt.Print( "\a" )
     }