text: // BSD 3 - Clause License
  //
  // Copyright(c) 2020, Aaron Hornby
  // All rights reserved.
  //
  // Redistribution and use in source and binary forms, with or without
  // modification, are permitted provided that the following conditions are met :
  //
  // 1. Redistributions of source code must retain the above copyright notice, this
  // list of conditions and the following disclaimer.
  //
  // 2. Redistributions in binary form must reproduce the above copyright notice,
  // this list of conditions and the following disclaimer in the documentation
  // and/or other materials provided with the distribution.
  //
  // 3. Neither the name of the copyright holder nor the names of its
  // contributors may be used to endorse or promote products derived from
  // this software without specific prior written permission.
  //
  // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  // DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  // DAMAGES(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  //     SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  //     CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  //     OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  //     OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  //
  
  // author: Aaron Hornby
  // ucid:   10176084
  
  #include <cstdlib>
  #include <iostream>
  #include <string>
  #include <vector>
  
  #include "program.h"
  
  //NOTE: apparently this is the proper way to forward declare namespaced-functions (you can't do "int wave_tool::program(int argc, char *argv[]);")
  namespace wave_tool {
      int program(int argc, char *argv[]);
  }
  
  // reminder: argv[0] usually contains the executable name, argv[argc] is always a null pointer
  int main(int argc, char *argv[]) {
      // run user-defined program...
      int const programResult = wave_tool::program(argc, argv);
      return programResult;
  }
  
  namespace wave_tool {
      // user-defined program...
      int program(int argc, char *argv[]) {
          // handle cmd-line args/options...
  
          // execute the rest of your program...
          Program program;
          bool const programResult = program.start();
  
          return programResult ? EXIT_SUCCESS : EXIT_FAILURE;
      }
  }
  