(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>}
                    )
                )
              }
            )
          ]
        )
    )
  ]
)