10
|
1 package main
|
|
2
|
|
3 import(
|
|
4 "flag"
|
|
5 "fmt"
|
11
|
6 "math"
|
10
|
7 "time"
|
|
8 "os"
|
|
9 )
|
|
10
|
11
|
11 var version = 0.1
|
10
|
12
|
|
13 func main() {
|
|
14
|
|
15 // arguments
|
11
|
16 q := flag.Bool( "q", false, "quiet ( don't print count and time ) [ default:false ]" )
|
|
17 l := flag.Int( "l", 0, "loop count ( l seconds / l minute ) [ default:0 ( no-limit ) ]" )
|
|
18 m := flag.Bool( "m", false, "use minute ( not second ) [ default:false ( use second )]" )
|
|
19 b := flag.Bool( "b", false, "sound beep [ default:false ]" )
|
|
20 v := flag.Bool( "v", false, "print version")
|
10
|
21
|
|
22 flag.Parse()
|
|
23
|
11
|
24 if *v {
|
|
25 fmt.Fprintf( os.Stderr, "unsleep : version %v\n", version )
|
|
26 os.Exit( 0 )
|
|
27 }
|
10
|
28
|
11
|
29 if *l < 0 {
|
|
30 fmt.Fprintln( os.Stderr, "bad loop count." )
|
|
31 os.Exit( 1 )
|
|
32 }
|
|
33
|
|
34 if !*q {
|
|
35 s := fmt.Sprintf( "[%04d] %s ...", *l, time.Now().Format( "15:04:05" ) )
|
|
36 fmt.Println( s )
|
|
37 }
|
|
38 mysleep( *q, *m, *b, *l )
|
|
39 }
|
|
40
|
|
41 func mysleep( quiet, minute, beep bool, limit int ) {
|
10
|
42
|
11
|
43 c := time.Tick( 1 * time.Second )
|
|
44 if minute {
|
|
45 c = time.Tick( 1 * time.Minute )
|
|
46 }
|
|
47
|
|
48 n := 1
|
|
49 for range c {
|
|
50 if !quiet {
|
|
51 str := fmt.Sprintf( "[%04d] %s", int( math.Abs( float64( limit - n ) ) ), time.Now().Format( "15:04:05" ) )
|
|
52 fmt.Println( str )
|
10
|
53 }
|
11
|
54 if beep {
|
|
55 alarm( 1 )
|
10
|
56 }
|
11
|
57 n++
|
|
58 if limit < n && limit != 0 {
|
|
59 break
|
|
60 }
|
|
61 }
|
|
62 if beep {
|
|
63 alarm( 3 )
|
10
|
64 }
|
|
65 }
|
|
66
|
11
|
67 func alarm( n int ) {
|
|
68 for i:= 0; i < n; i++ {
|
10
|
69 //os.Stdout.Write( []byte( "\u0007" ) )
|
|
70 fmt.Print( "\a" )
|
|
71 }
|
|
72 }
|
|
73
|