Mercurial > mercurial > hgweb_golang.cgi
comparison src/unsleep.go @ 11:c3a589f0521d
refine code.
| author | pyon@macmini |
|---|---|
| date | Tue, 07 Nov 2017 21:14:31 +0900 |
| parents | b0784443ed87 |
| children |
comparison
equal
deleted
inserted
replaced
| 10:b0784443ed87 | 11:c3a589f0521d |
|---|---|
| 1 package main | 1 package main |
| 2 | 2 |
| 3 import( | 3 import( |
| 4 "flag" | 4 "flag" |
| 5 "fmt" | 5 "fmt" |
| 6 "math" | |
| 6 "time" | 7 "time" |
| 7 "os" | 8 "os" |
| 8 ) | 9 ) |
| 9 | 10 |
| 10 var sec = 0 | 11 var version = 0.1 |
| 11 | 12 |
| 12 func main() { | 13 func main() { |
| 13 | 14 |
| 14 // arguments | 15 // arguments |
| 15 t := flag.Int( "t", 1, "interval" ) | 16 q := flag.Bool( "q", false, "quiet ( don't print count and time ) [ default:false ]" ) |
| 16 s := flag.Bool( "s", false, "normal sleep" ) | 17 l := flag.Int( "l", 0, "loop count ( l seconds / l minute ) [ default:0 ( no-limit ) ]" ) |
| 17 q := flag.Bool( "q", false, "quiet ( not print count and time )" ) | 18 m := flag.Bool( "m", false, "use minute ( not second ) [ default:false ( use second )]" ) |
| 18 c := flag.Int( "c", 0, "loop count ( without [s] )" ) | 19 b := flag.Bool( "b", false, "sound beep [ default:false ]" ) |
| 19 m := flag.Bool( "m", false, "print every minute ( without [q] )" ) | 20 v := flag.Bool( "v", false, "print version") |
| 20 b := flag.Bool( "b", false, "beep" ) | |
| 21 | 21 |
| 22 flag.Parse() | 22 flag.Parse() |
| 23 | 23 |
| 24 if *t > 0 { | 24 if *v { |
| 25 fmt.Fprintf( os.Stderr, "unsleep : version %v\n", version ) | |
| 26 os.Exit( 0 ) | |
| 27 } | |
| 25 | 28 |
| 26 if !*q { | 29 if *l < 0 { |
| 27 s := fmt.Sprintf( "[%04d] %s ...", *c, time.Now().Format( "15:04:05" ) ) | 30 fmt.Fprintln( os.Stderr, "bad loop count." ) |
| 28 fmt.Println( s ) | 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 ) { | |
| 42 | |
| 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 ) | |
| 29 } | 53 } |
| 30 | 54 if beep { |
| 31 if *s { | 55 alarm( 1 ) |
| 32 for i := 0; i < *t; i++ { | |
| 33 sleep1ms( *q, *m, *b, i + 1 ) | |
| 34 } | |
| 35 os.Exit( 0 ) | |
| 36 } | 56 } |
| 37 | 57 n++ |
| 38 if *c < 0 { | 58 if limit < n && limit != 0 { |
| 39 fmt.Fprintln( os.Stderr, "bad loop count." ) | 59 break |
| 40 os.Exit( 1 ) | |
| 41 } | 60 } |
| 42 if *c > 0 { | 61 } |
| 43 for i := 0; i < *c; i++ { | 62 if beep { |
| 44 sleep1ms( *q, *m, *b, *c - i - 1 ) | 63 alarm( 3 ) |
| 45 } | |
| 46 } else { | |
| 47 n := 1 | |
| 48 for { | |
| 49 sleep1ms( *q, *m, *b, n ) | |
| 50 n++ | |
| 51 } | |
| 52 } | |
| 53 | |
| 54 } else { | |
| 55 fmt.Fprintln( os.Stderr, "bad time." ) | |
| 56 os.Exit( 1 ) | |
| 57 } | 64 } |
| 58 } | 65 } |
| 59 | 66 |
| 60 func sleep1ms( quiet, minute, beep bool, n int ) { | 67 func alarm( n int ) { |
| 61 | 68 for i:= 0; i < n; i++ { |
| 62 s := time.Duration( 1.00 * 1000 ) * time.Millisecond | |
| 63 time.Sleep( s ) | |
| 64 sec++ | |
| 65 | |
| 66 if minute && sec % 60 == 0 { | |
| 67 str := fmt.Sprintf( "[%04d] %s", n / 60, time.Now().Format( "15:04:05" ) ) | |
| 68 fmt.Println( str ) | |
| 69 } | |
| 70 if !quiet && !minute { | |
| 71 str := fmt.Sprintf( "[%04d] %s", n, time.Now().Format( "15:04:05" ) ) | |
| 72 fmt.Println( str ) | |
| 73 } | |
| 74 | |
| 75 if beep { | |
| 76 //os.Stdout.Write( []byte( "\u0007" ) ) | 69 //os.Stdout.Write( []byte( "\u0007" ) ) |
| 77 fmt.Print( "\a" ) | 70 fmt.Print( "\a" ) |
| 78 } | 71 } |
| 79 } | 72 } |
| 80 | 73 |
