(command.CommandList
  children: [
    (command.ShFunction
      name: usage
      body: 
        (command.BraceGroup
          children: [
            (command.Simple
              words: [{(cat)}]
              redirects: [
                (redir.HereDoc
                  op: (Token id:Id.Redir_DLess val:'<<' span_id:18)
                  fd: -1
                  here_begin: {(EOF)}
                  here_end_span_id: 39
                  stdin_parts: [
                    ('  Usage: ')
                    ($ Id.VSub_Number '$0')
                    (' [DOS flags] directory or directories\n')
                    ('  Where:\n')
                    ('   /D           sort by columns\n')
                    ('   /H           show help for this shell script\n')
                    ('   /N           show long listing format with filenames on right\n')
                    ('   /OD          sort by oldest to newest\n')
                    ('   /O-D         sort by newest to oldest\n')
                    ('   /P           pause after each screenful of information\n')
                    ('   /Q           show owner of the file\n')
                    ('   /S           recursive listing\n')
                    ('   /W           use wide listing format\n')
                  ]
                )
                (redir.Redir
                  op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:22)
                  fd: -1
                  arg_word: {(2)}
                )
              ]
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:41)
              arg_word: {(1)}
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:postcmd)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [55]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:flags)
          op: assign_op.Equal
          rhs: {(DQ )}
          spids: [59]
        )
      ]
    )
    (command.WhileUntil
      keyword: (Token id:Id.KW_While val:while span_id:64)
      cond: [(C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-gt)} {(0)} {(Id.Lit_RBracket ']')})]
      body: 
        (command.DoGroup
          children: [
            (command.Case
              to_match: {($ Id.VSub_Number '$1')}
              arms: [
                (case_arm
                  pat_list: [{(/D)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$flags') (' -x'))}
                          spids: [90]
                        )
                      ]
                    )
                  ]
                  spids: [86 88 96 -1]
                )
                (case_arm
                  pat_list: [{(/H)}]
                  action: [(C {(usage)})]
                  spids: [99 101 105 -1]
                )
                (case_arm
                  pat_list: [{(/) (Id.Lit_LBracket '[') (NQW) (Id.Lit_RBracket ']')}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$flags') (' -l'))}
                          spids: [115]
                        )
                      ]
                    )
                  ]
                  spids: [108 113 121 -1]
                )
                (case_arm
                  pat_list: [{(/OD)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$flags') (' -rt'))}
                          spids: [128]
                        )
                      ]
                    )
                  ]
                  spids: [124 126 134 -1]
                )
                (case_arm
                  pat_list: [{(/O-D)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$flags') (' -t'))}
                          spids: [141]
                        )
                      ]
                    )
                  ]
                  spids: [137 139 147 -1]
                )
                (case_arm
                  pat_list: [{(/P)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:postcmd)
                          op: assign_op.Equal
                          rhs: {(DQ (more))}
                          spids: [154]
                        )
                      ]
                    )
                  ]
                  spids: [150 152 159 -1]
                )
                (case_arm
                  pat_list: [{(/S)}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:flags)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName '$flags') (' -s'))}
                          spids: [166]
                        )
                      ]
                    )
                  ]
                  spids: [162 164 172 -1]
                )
                (case_arm pat_list:[{(Id.Lit_Star '*')}] spids:[175 177 -1 187])
              ]
            )
            (C {(shift)})
          ]
        )
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-z)} 
                  {(DQ ($ Id.VSub_DollarName '$postcmd'))} {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:216)
            )
          ]
          action: [
            (command.Pipeline
              children: [
                (C {(ls)} {($ Id.VSub_DollarName '$flags')} {(DQ ($ Id.VSub_At '$@'))})
                (C {($ Id.VSub_DollarName '$postcmd')})
              ]
              negated: F
            )
          ]
          spids: [202 218]
        )
      ]
      else_action: [(C {(ls)} {($ Id.VSub_DollarName '$flags')} {(DQ ($ Id.VSub_At '$@'))})]
    )
    (command.ControlFlow token:(Token id:Id.ControlFlow_Exit val:exit span_id:248) arg_word:{(0)})
  ]
)