(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:wordlib) op: Equal rhs: {(DQ (/usr/lib/games/long-words.txt))} spids: [16] ) ] spids: [16] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:empty) op: Equal rhs: {(DQ (EscapedLiteralPart token:<Lit_EscapedChar '\\.'>))} spids: [21] ) ] spids: [21] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:games) op:Equal rhs:{(0)} spids:[29])] spids: [29] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(KW_Bang '!')} {(-r)} {(DQ ($ VSub_Name '$wordlib'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (SimpleCommand words: [ {(echo)} {(DQ ($ VSub_Number '$0') (': Missing word library ') ($ VSub_Name '$wordlib'))} ] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[64])] ) (SimpleCommand words: [ {(echo)} {(DQ ('(online: http://www.intuitive.com/wicked/examples/long-words.txt'))} ] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[74])] ) (SimpleCommand words: [ {(echo)} {(DQ ('save the file as ') ($ VSub_Name '$wordlib') (" and you're ready to play!)"))} ] redirects: [(Redir op_id:Redir_GreatAnd fd:-1 arg_word:{(2)} spids:[86])] ) (C {(exit)} {(1)}) ] spids: [-1 53] ) ] spids: [-1 94] ) (While cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$guess'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ (quit))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:match) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [(C {(randomquote)} {($ VSub_Name '$wordlib')})] ) left_token: <Left_CommandSub '$('> spids: [125 129] ) ) } spids: [123] ) ] spids: [123] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Name '$games')} {(-gt)} {(0)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [(C {(echo)} {(DQ )}) (C {(echo)} {(DQ ('*** New Game! ***'))})] spids: [-1 151] ) ] spids: [-1 167] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:games) op: Equal rhs: { (DQ (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithWord w:{($ VSub_Name '$games')}) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [173 182] ) ) } spids: [171] ) ] spids: [171] ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:guessed) op:Equal rhs:{(DQ )} spids:[186])] spids: [186] ) terminator: <Op_Semi ';'> ) (Sentence child: (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:guess) op:Equal rhs:{(DQ )} spids:[192])] spids: [192] ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:bad) op: Equal rhs: { (BracedVarSub token: <VSub_Number 1> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(6)}) spids: [199 203] ) } spids: [198] ) ] spids: [198] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:partial) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Name '$match')}) (C {(sed)} { (DQ ('s/[^') ($ VSub_Name '$empty') (${ VSub_Name guessed) (']/-/g') ) } ) ] negated: False ) ] ) left_token: <Left_CommandSub '$('> spids: [208 225] ) ) } spids: [206] ) ] spids: [206] ) (While cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$guess'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ ($ VSub_Name '$match'))} {(-a)} {(DQ ($ VSub_Name '$guess'))} {(KW_Bang '!') (Lit_Other '=')} {(DQ (quit))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (C {(echo)} {(DQ )}) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(KW_Bang '!')} {(-z)} {(DQ ($ VSub_Name '$guessed'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(/bin/echo)} {(-n)} {(DQ ('Guessed: ') ($ VSub_Name '$guessed') (', '))}) ] spids: [-1 293] ) ] spids: [-1 310] ) (C {(echo)} { (DQ ('Steps from gallows: ') ($ VSub_Name '$bad') (', word so far: ') ($ VSub_Name '$partial') ) } ) (C {(/bin/echo)} {(-n)} {(DQ ('Guess a letter: '))}) (C {(read)} {(guess)}) (C {(echo)} {(DQ )}) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$guess'))} {(Lit_Other '=')} {(DQ ($ VSub_Name '$match'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(C {(echo)} {(DQ ('You got it!'))})] spids: [-1 364] ) (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$guess'))} {(Lit_Other '=')} {(DQ (quit))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(C {(sleep)} {(0)})] spids: [377 395] ) (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Name '$guess')}) (C {(wc)} {(-c)}) (C {(sed)} {(SQ <'s/[^[:digit:]]//g'>)}) ] negated: False ) ] ) left_token: <Left_CommandSub '$('> spids: [417 435] ) } {(-ne)} {(2)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(DQ ('Uh oh: You can only guess a single letter at a time'))}) ] spids: [413 445] ) (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(KW_Bang '!')} {(-z)} { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Name '$guess')}) (C {(sed)} {(SQ <'s/[[:lower:]]//g'>)}) ] negated: False ) ] ) left_token: <Left_CommandSub '$('> spids: [465 477] ) ) } {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(DQ ('Uh oh: Please only use lowercase letters for your guesses'))} ) ] spids: [456 484] ) (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Name '$guess')}) (C {(sed)} { (DQ ('s/[') ($ VSub_Name '$empty') ($ VSub_Name '$guessed') (']//g') ) } ) ] negated: False ) ] ) left_token: <Left_CommandSub '$('> spids: [501 516] ) ) } {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} {(DQ ('Uh oh: You have already tried ') ($ VSub_Name '$guess'))}) ] spids: [494 523] ) (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Name '$match')}) (C {(sed)} {(DQ (s/) ($ VSub_Name '$guess') (/-/g))}) ] negated: False ) ] ) left_token: <Left_CommandSub '$('> spids: [543 557] ) ) } {(KW_Bang '!') (Lit_Other '=')} {(DQ ($ VSub_Name '$match'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:guessed) op: Equal rhs: {(DQ ($ VSub_Name '$guessed') ($ VSub_Name '$guess'))} spids: [574] ) ] spids: [574] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:partial) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {($ VSub_Name '$match')}) (C {(sed)} { (DQ ('s/[^') ($ VSub_Name '$empty') (${ VSub_Name guessed) (']/-/g') ) } ) ] negated: False ) ] ) left_token: <Left_CommandSub '$('> spids: [583 600] ) ) } spids: [581] ) ] spids: [581] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$partial'))} {(Lit_Other '=')} {(DQ ($ VSub_Name '$match'))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} { (DQ ("** You've been pardoned!! Well done! The word was ") (EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ($ VSub_Name '$match') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (.) ) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:guess) op: Equal rhs: {(DQ ($ VSub_Name '$match'))} spids: [636] ) ] spids: [636] ) ] spids: [-1 622] ) ] else_action: [ (C {(echo)} { (DQ ('* Great! The letter ') (EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ($ VSub_Name '$guess') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' appears in the word!') ) } ) ] spids: [643 657] ) ] spids: [538 571] ) (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_Name '$bad')} {(-eq)} {(1)} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(echo)} { (DQ ( "** Uh oh: you've run out of steps. You're on the platform... <SNAP!>" ) ) } ) (C {(echo)} { (DQ ('** The word you were trying to guess was ') (EscapedLiteralPart token: <Lit_EscapedChar '\\"'> ) ($ VSub_Name '$match') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:guess) op: Equal rhs: {(DQ ($ VSub_Name '$match'))} spids: [694] ) ] spids: [694] ) ] spids: [660 674] ) ] else_action: [ (C {(echo)} { (DQ ('* Nope, ') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) ($ VSub_Name '$guess') (EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (' does not appear in the word.') ) } ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:guessed) op: Equal rhs: {(DQ ($ VSub_Name '$guessed') ($ VSub_Name '$guess'))} spids: [714] ) ] spids: [714] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:bad) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Minus left: (ArithWord w:{($ VSub_Name '$bad')}) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [722 731] ) } spids: [721] ) ] spids: [721] ) ] spids: [700 734] ) ] spids: [267 737] ) ) ] spids: [120 739] ) ) (C {(exit)} {(0)}) ] )