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