rosetta-code.metronome: usage, validation
parent
d067e50ef5
commit
91fce8c90b
|
@ -1,8 +1,9 @@
|
||||||
! Copyright (C) 2013 Jon Harper.
|
! Copyright (C) 2013 Jon Harper.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors calendar circular colors.constants colors.hsv
|
USING: accessors calendar circular colors.constants colors.hsv
|
||||||
command-line kernel math math.parser namespaces openal.example
|
command-line continuations io kernel math math.parser namespaces
|
||||||
sequences timers ui ui.gadgets ui.pens.solid ;
|
openal.example sequences system timers ui ui.gadgets
|
||||||
|
ui.pens.solid ;
|
||||||
IN: rosetta-code.metronome
|
IN: rosetta-code.metronome
|
||||||
|
|
||||||
: bpm>duration ( bpm -- duration ) 60 swap / seconds ;
|
: bpm>duration ( bpm -- duration ) 60 swap / seconds ;
|
||||||
|
@ -44,13 +45,26 @@ M: metronome-gadget pref-dim* drop { 200 200 } ;
|
||||||
|
|
||||||
: metronome-example ( -- ) metronome-defaults metronome-ui ;
|
: metronome-example ( -- ) metronome-defaults metronome-ui ;
|
||||||
|
|
||||||
|
: validate-args ( int-args -- )
|
||||||
|
[ length 2 < ] [ [ 0 <= ] any? ] bi or [ "args error" throw ] when ;
|
||||||
|
|
||||||
: (metronome-cmdline) ( args -- bpm notes )
|
: (metronome-cmdline) ( args -- bpm notes )
|
||||||
[ string>number ] map unclip swap ;
|
[ string>number ] map dup validate-args
|
||||||
|
unclip swap ;
|
||||||
|
|
||||||
: metronome-cmdline ( -- bpm notes )
|
: metronome-cmdline ( -- bpm notes )
|
||||||
command-line get [ metronome-defaults ] [ (metronome-cmdline) ] if-empty ;
|
command-line get [ metronome-defaults ] [ (metronome-cmdline) ] if-empty ;
|
||||||
|
|
||||||
|
: print-defaults ( -- )
|
||||||
|
metronome-defaults swap prefix
|
||||||
|
[ " " write ] [ number>string write ] interleave nl ;
|
||||||
|
|
||||||
|
: metronome-usage ( -- )
|
||||||
|
"Usage: metronome [BPM FREQUENCIES...]" print
|
||||||
|
"Arguments must be non-zero" print
|
||||||
|
"Example: metronome " write print-defaults flush ;
|
||||||
|
|
||||||
: metronome-main ( -- )
|
: metronome-main ( -- )
|
||||||
[ metronome-cmdline metronome-ui ] with-ui ;
|
[ [ metronome-cmdline metronome-ui ] [ drop metronome-usage 1 exit ] recover ] with-ui ;
|
||||||
|
|
||||||
MAIN: metronome-main
|
MAIN: metronome-main
|
||||||
|
|
Loading…
Reference in New Issue