(command.CommandList children: [ (C {(.)} {(library.sh)}) (C {(initializeANSI)}) (C {(echon)} {(DQ ('First off, do you have echo in your path? (1=yes, 2=no) '))}) (C {(read)} {(answer)}) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:34) cond: [ (command.Sentence child: (command.Pipeline children: [(C {(validint)} {($ Id.VSub_DollarName '$answer')} {(1)} {(2)})] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:46) ) ] body: (command.DoGroup children: [ (C {(echon)} { (DQ (${ Id.VSub_Name boldon) ('Try again') (${ Id.VSub_Name boldoff) ('. Do you have echo ') ) } ) (C {(echon)} {(DQ ('in your path? (1=yes, 2=no) '))}) (C {(read)} {(answer)}) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.Pipeline children:[(C {(checkForCmdInPath)} {(DQ (echo))})] negated:T) terminator: (Token id:Id.Op_Semi val:';' span_id:92) ) ] action: [(C {(echo)} {(DQ ("Nope, can't find the echo command."))})] spids: [82 94] ) ] else_action: [(C {(echo)} {(DQ ('The echo command is in the PATH.'))})] ) (C {(echo)} {(DQ )}) (C {(echon)} {(DQ ('Enter a year you think might be a leap year: '))}) (C {(read)} {(year)}) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:137) cond: [ (command.Sentence child: (command.Pipeline children: [(C {(validint)} {($ Id.VSub_DollarName '$year')} {(1)} {(9999)})] negated: T ) terminator: (Token id:Id.Op_Semi val:';' span_id:149) ) ] body: (command.DoGroup children: [ (C {(echon)} { (DQ ('Please enter a year in the ') (${ Id.VSub_Name boldon) (correct) (${ Id.VSub_Name boldoff) (' format: ') ) } ) (C {(read)} {(year)}) ] ) ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(isLeapYear)} {($ Id.VSub_DollarName '$year')}) terminator: (Token id:Id.Op_Semi val:';' span_id:185) ) ] action: [ (C {(echo)} { (DQ (${ Id.VSub_Name greenf) ("You're right! ") ($ Id.VSub_DollarName '$year') (' was a leap year.') (${ Id.VSub_Name reset) ) } ) ] spids: [179 187] ) ] else_action: [ (C {(echo)} {(DQ (${ Id.VSub_Name redf) ("Nope, that's not a leap year.") (${ Id.VSub_Name reset))} ) ] ) (command.ControlFlow token:(Token id:Id.ControlFlow_Exit val:exit span_id:222) arg_word:{(0)}) ] )