1+ use colored:: * ;
2+ use fancy_regex:: Regex ;
13use std:: {
24 env,
35 fs:: File ,
46 io:: { prelude:: * , BufReader } ,
57 path:: Path ,
8+ process:: exit,
69} ;
710
8- use fancy_regex:: Regex ;
9-
1011fn main ( ) {
1112 let args: Vec < String > = env:: args ( ) . collect ( ) ;
12- let file_name = & args[ 1 ] ;
1313
14- println ! ( "Program file: {:?}" , file_name) ;
14+ if args. len ( ) < 2 {
15+ print_ascii_art ( ) ;
16+
17+ println ! ( "{}" , "Turing is a turing-complete programing language. It is designed to emulate a turing machine." . green( ) . bold( ) ) ;
18+ println ! ( "{}" , "Usage: turing <file>" . italic( ) ) ;
19+ exit ( 0 ) ;
20+ }
21+
22+ let file_name = & args[ 1 ] ;
23+ println ! ( ) ;
24+ println ! ( "{} {:?}" , "Program file:" . bright_blue( ) . bold( ) , file_name) ;
1525
1626 let lines: Vec < String > = lines_from_file ( file_name) ;
1727
@@ -250,13 +260,26 @@ fn main() {
250260}
251261
252262fn lines_from_file ( filename : impl AsRef < Path > ) -> Vec < String > {
253- let file = File :: open ( filename) . expect ( "no such file" ) ;
263+ let file = match File :: open ( filename) {
264+ Ok ( file) => file,
265+ Err ( error) => {
266+ red_error ( format ! ( "Problem opening the file: {}" , error) . as_str ( ) ) ;
267+ return Vec :: new ( ) ;
268+ }
269+ } ;
254270 let buf = BufReader :: new ( file) ;
255271 buf. lines ( )
256272 . map ( |l| l. expect ( "Could not parse line" ) )
257273 . collect ( )
258274}
259275
276+ fn red_error ( error : & str ) {
277+ println ! ( ) ;
278+ println ! ( "{}" , error. red( ) . bold( ) ) ;
279+ println ! ( ) ;
280+ exit ( 1 ) ;
281+ }
282+
260283fn binary_vector_to_int ( vector : Vec < bool > ) -> usize {
261284 let mut result: usize = 0 ;
262285 for i in 0 ..( vector. len ( ) ) {
@@ -271,3 +294,39 @@ fn bool_to_int(bool: bool) -> usize {
271294 0
272295 }
273296}
297+
298+ fn print_ascii_art ( ) {
299+ println ! (
300+ r".----------------. .----------------. .----------------. .----------------. .-----------------. .----------------. "
301+ ) ;
302+ println ! (
303+ r"| .--------------. || .--------------. || .--------------. || .--------------. || .--------------. || .--------------. |"
304+ ) ;
305+ println ! (
306+ r"| | _________ | || | _____ _____ | || | _______ | || | _____ | || | ____ _____ | || | ______ | |"
307+ ) ;
308+ println ! (
309+ r"| | | _ _ | | || ||_ _||_ _|| || | |_ __ \ | || | |_ _| | || ||_ \|_ _| | || | .' ___ | | |"
310+ ) ;
311+ println ! (
312+ r"| | |_/ | | \_| | || | | | | | | || | | |__) | | || | | | | || | | \ | | | || | / .' \_| | |"
313+ ) ;
314+ println ! (
315+ r"| | | | | || | | ' ' | | || | | __ / | || | | | | || | | |\ \| | | || | | | ____ | |"
316+ ) ;
317+ println ! (
318+ r"| | _| |_ | || | \ `--' / | || | _| | \ \_ | || | _| |_ | || | _| |_\ |_ | || | \ `.___] _| | |"
319+ ) ;
320+ println ! (
321+ r"| | |_____| | || | `.__.' | || | |____| |___| | || | |_____| | || ||_____|\____| | || | `._____.' | |"
322+ ) ;
323+ println ! (
324+ r"| | | || | | || | | || | | || | | || | | |"
325+ ) ;
326+ println ! (
327+ r"| '--------------' || '--------------' || '--------------' || '--------------' || '--------------' || '--------------' |"
328+ ) ;
329+ println ! (
330+ r"'----------------' '----------------' '----------------' '----------------' '----------------' '----------------' "
331+ ) ;
332+ }
0 commit comments