(command.CommandList children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:text) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [15] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:font) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$2'))} spids: [21] ) ] ) terminator: <Id.Op_Semi _> ) (C {<set>} {<-eu>}) (command.Sentence child: (command.AndOr ops: [Id.Op_DPipe] children: [ (C {<source>} { (DQ (braced_var_sub token: <Id.VSub_Name BASH_SOURCE> suffix_op: (suffix_op.Unary tok: <Id.VOp1_Percent '%'> arg_word: {<Id.Lit_Slash '/'> <Id.Lit_Other '*'>} ) ) <'/../CmdlineGL.lib'> ) } ) (C {<die>} { (DQ <'Can\'t find CmdlineGL.lib ('> (braced_var_sub token: <Id.VSub_Name BASH_SOURCE> suffix_op: (suffix_op.Unary tok: <Id.VOp1_Percent '%'> arg_word: {<Id.Lit_Slash '/'> <Id.Lit_Other '*'>} ) ) <'/../CmdlineGL.lib)'> ) } ) ] ) terminator: <Id.Op_Semi _> ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_z child: {(DQ ($ Id.VSub_DollarName '$text'))} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (C {<echo>} {(DQ <'Usage: SpinText.sh STRING_OF_TEXT [FONT_FILE]'>)}) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) terminator: <Id.Op_Semi _> ) ] spids: [61 74] ) ] ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_z child: {(DQ ($ Id.VSub_DollarName '$font'))} ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:font) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<find>} {<'/usr/share'>} {<-name>} {(SQ <'*.ttf'>)}) (C {<grep>} {<-i>} {<mono>}) (C {<head>} {<-n>} {<1>}) ] negated: F ) ) } spids: [112] ) ] ) terminator: <Id.Op_Semi _> ) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalNot child: (bool_expr.Unary op_id: Id.BoolUnary_f child: {(DQ ($ Id.VSub_DollarName '$font'))} ) ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (C {<echo>} { (DQ < 'Can\'t find any default font; specify font filename as second argument.' > ) } ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<2>}) terminator: <Id.Op_Semi _> ) ] spids: [145 160] ) ] ) ] spids: [92 105] ) ] else_action: [ (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket expr: (bool_expr.LogicalNot child: (bool_expr.Unary op_id: Id.BoolUnary_f child: {(DQ ($ Id.VSub_DollarName '$font'))} ) ) ) terminator: <Id.Op_Semi _> ) ] ) action: [ (command.Sentence child: (C {<echo>} { (DQ <'No such font '> (word_part.EscapedLiteral token: <Id.Lit_EscapedChar '\\"'> ) ($ Id.VSub_DollarName '$font') (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) ) } ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<2>}) terminator: <Id.Op_Semi _> ) ] spids: [182 197] ) ] ) ] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:R) op:assign_op.Equal rhs:{<0>} spids:[222])] ) (command.ShAssignment pairs: [(assign_pair lhs:(sh_lhs_expr.Name name:T) op:assign_op.Equal rhs:{<0>} spids:[225])] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:spin_rate) op: assign_op.Equal rhs: {<12>} spids: [228] ) ] ) (C {<CmdlineGL_Start>} {<ro>}) (C {<glEnable>} {<GL_NORMALIZE>} {<GL_DEPTH_TEST>} {<GL_CULL_FACE>}) (C {<glShadeModel>} {<GL_SMOOTH>}) (C {<ftglCreateExtrudeFont>} {<font1>} {(DQ ($ Id.VSub_DollarName '$font'))}) (C {<ftglSetFontFaceSize>} {<font1>} {<72>} {<72>}) (C {<ftglSetFontDepth>} {<font1>} {<20>}) (C {<ftglRenderFont>} {<font1>} {(DQ ($ Id.VSub_DollarName '$text'))} {<FTGL_ALIGN_CENTER>} {<FTGL_RENDER_ALL>} ) (C {<glNewList>} {<mytext>} {<GL_COMPILE>}) (C {<glTranslate>} {<-> (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Star left: (arith_expr.Binary op_id: Id.Arith_Slash left: {(braced_var_sub token:<Id.VSub_Name text> prefix_op:(Id.VSub_Pound))} right: {<Id.Lit_Digits 2>} ) right: {<Id.Lit_Digits 40>} ) ) } {<-36>} {<10>} ) (C {<ftglRenderFont>} {<font1>} {(DQ ($ Id.VSub_DollarName '$text'))} {<FTGL_RENDER_ALL>}) (C {<glEndList>}) (C {<glEnable>} {<GL_LIGHTING>} {<GL_LIGHT0>}) (C {<glLight>} {<GL_LIGHT0>} {<GL_AMBIENT>} {<.8>} {<.8>} {<.8>} {<0>}) (C {<glLight>} {<GL_LIGHT0>} {<GL_DIFFUSE>} {<1>} {<.8>} {<.8>} {<0>}) (C {<glLight>} {<GL_LIGHT0>} {<GL_SPECULAR>} {<.8>} {<.8>} {<.8>} {<0>}) (C {<glLight>} {<GL_LIGHT0>} {<GL_POSITION>} {<10>} {<10>} {<10>} {<1>}) (command.WhileUntil keyword: <Id.KW_While while> cond: (condition.Shell commands: [(command.Sentence child:(C {<true>}) terminator:<Id.Op_Semi _>)] ) body: (command.DoGroup children: [ (C {<glClear>} {<GL_COLOR_BUFFER_BIT>} {<GL_DEPTH_BUFFER_BIT>}) (C {<glLoadIdentity>}) (C {<glRotate>} { (word_part.ArithSub anode: (arith_expr.BinaryAssign op_id: Id.Arith_PlusEqual left: <Id.Lit_ArithVarLike R> right: <Id.Lit_ArithVarLike spin_rate> ) ) <'/60'> } {<0>} {<1>} {<0>} ) (C {<glScale>} {<'10/'> (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Slash left: (arith_expr.Binary op_id: Id.Arith_Star left: {<Id.Lit_Digits 40>} right: {(braced_var_sub token:<Id.VSub_Name text> prefix_op:(Id.VSub_Pound))} ) right: {<Id.Lit_Digits 2>} ) ) } ) (C {<glCallList>} {<mytext>}) (C {<glFlush>}) (C {<cglSwapBuffers>}) (C {<cglSync>} { (word_part.ArithSub anode: (arith_expr.BinaryAssign op_id: Id.Arith_PlusEqual left: <Id.Lit_ArithVarLike T> right: {<Id.Lit_Digits 16>} ) ) } ) ] ) ) ] )