Files
H100PowerManger/scripts/GenMOOSApp
T

402 lines
12 KiB
Bash
Executable File

#!/bin/bash
if [ -d "$2$1" ]; then
echo "$2$1 already exists... quitting."
exit 1
fi
if [ -z "$1" ] ; then
echo "GenMOOSApp: usage: $0 [app-name] [prefix]"
exit 0
fi
if [ -z "$2" ] ; then
echo "GenMOOSApp: usage: $0 [app-name] [prefix]"
exit 0
fi
#if [ -z "$3" ] ; then
# $3="YOUR-NAME-HERE"
#fi
mkdir $2$1
cd $2$1
cat > CMakeLists.txt <<EOF
#--------------------------------------------------------
# The CMakeLists.txt for: $2$1
# Author(s): $3
#--------------------------------------------------------
SET(SRC
${1}.cpp
${1}_Info.cpp
main.cpp
)
ADD_EXECUTABLE($2$1 \${SRC})
TARGET_LINK_LIBRARIES($2$1
\${MOOS_LIBRARIES}
mbutil
m
pthread)
EOF
cat > ${1}.h <<EOF
/************************************************************/
/* NAME: $3 */
/* ORGN: MIT */
/* FILE: ${1}.h */
/* DATE: */
/************************************************************/
#ifndef ${1}_HEADER
#define ${1}_HEADER
#include "MOOS/libMOOS/MOOSLib.h"
class ${1} : public CMOOSApp
{
public:
${1}();
~${1}();
protected: // Standard MOOSApp functions to overload
bool OnNewMail(MOOSMSG_LIST &NewMail);
bool Iterate();
bool OnConnectToServer();
bool OnStartUp();
protected:
void RegisterVariables();
private: // Configuration variables
private: // State variables
};
#endif
EOF
cat > main.cpp <<EOF
/************************************************************/
/* NAME: $3 */
/* ORGN: MIT */
/* FILE: main.cpp */
/* DATE: */
/************************************************************/
#include <string>
#include "MBUtils.h"
#include "ColorParse.h"
#include "${1}.h"
#include "${1}_Info.h"
using namespace std;
int main(int argc, char *argv[])
{
string mission_file;
string run_command = argv[0];
for(int i=1; i<argc; i++) {
string argi = argv[i];
if((argi=="-v") || (argi=="--version") || (argi=="-version"))
showReleaseInfoAndExit();
else if((argi=="-e") || (argi=="--example") || (argi=="-example"))
showExampleConfigAndExit();
else if((argi == "-h") || (argi == "--help") || (argi=="-help"))
showHelpAndExit();
else if((argi == "-i") || (argi == "--interface"))
showInterfaceAndExit();
else if(strEnds(argi, ".moos") || strEnds(argi, ".moos++"))
mission_file = argv[i];
else if(strBegins(argi, "--alias="))
run_command = argi.substr(8);
else if(i==2)
run_command = argi;
}
if(mission_file == "")
showHelpAndExit();
cout << termColor("green");
cout << "${2}${1} launching as " << run_command << endl;
cout << termColor() << endl;
${1} ${1};
${1}.Run(run_command.c_str(), mission_file.c_str());
return(0);
}
EOF
cat > $2${1}.moos <<EOF
//------------------------------------------------
// ${2}${1} config block
ProcessConfig = ${2}${1}
{
AppTick = 4
CommsTick = 4
}
EOF
cat > ${1}.cpp <<EOF
/************************************************************/
/* NAME: $3 */
/* ORGN: MIT */
/* FILE: ${1}.cpp */
/* DATE: */
/************************************************************/
#include <iterator>
#include "MBUtils.h"
#include "${1}.h"
using namespace std;
//---------------------------------------------------------
// Constructor
${1}::${1}()
{
}
//---------------------------------------------------------
// Destructor
${1}::~${1}()
{
}
//---------------------------------------------------------
// Procedure: OnNewMail
bool ${1}::OnNewMail(MOOSMSG_LIST &NewMail)
{
MOOSMSG_LIST::iterator p;
for(p=NewMail.begin(); p!=NewMail.end(); p++) {
CMOOSMsg &msg = *p;
#if 0 // Keep these around just for template
string key = msg.GetKey();
string comm = msg.GetCommunity();
double dval = msg.GetDouble();
string sval = msg.GetString();
string msrc = msg.GetSource();
double mtime = msg.GetTime();
bool mdbl = msg.IsDouble();
bool mstr = msg.IsString();
#endif
}
return(true);
}
//---------------------------------------------------------
// Procedure: OnConnectToServer
bool ${1}::OnConnectToServer()
{
RegisterVariables();
return(true);
}
//---------------------------------------------------------
// Procedure: Iterate()
// happens AppTick times per second
bool ${1}::Iterate()
{
return(true);
}
//---------------------------------------------------------
// Procedure: OnStartUp()
// happens before connection is open
bool ${1}::OnStartUp()
{
list<string> sParams;
m_MissionReader.EnableVerbatimQuoting(false);
if(m_MissionReader.GetConfiguration(GetAppName(), sParams)) {
list<string>::iterator p;
for(p=sParams.begin(); p!=sParams.end(); p++) {
string line = *p;
string param = tolower(biteStringX(line, '='));
string value = line;
if(param == "foo") {
//handled
}
else if(param == "bar") {
//handled
}
}
}
RegisterVariables();
return(true);
}
//---------------------------------------------------------
// Procedure: RegisterVariables
void ${1}::RegisterVariables()
{
// Register("FOOBAR", 0);
}
EOF
cat > ${1}_Info.h <<EOF
/****************************************************************/
/* NAME: ${3} */
/* ORGN: MIT Cambridge MA */
/* FILE: ${1}_Info.h */
/* DATE: Dec 29th 1963 */
/****************************************************************/
#ifndef ${1}_INFO_HEADER
#define ${1}_INFO_HEADER
void showSynopsis();
void showHelpAndExit();
void showExampleConfigAndExit();
void showInterfaceAndExit();
void showReleaseInfoAndExit();
#endif
EOF
cat > ${1}_Info.cpp <<EOF
/****************************************************************/
/* NAME: ${3} */
/* ORGN: MIT Cambridge MA */
/* FILE: ${1}_Info.cpp */
/* DATE: Dec 29th 1963 */
/****************************************************************/
#include <cstdlib>
#include <iostream>
#include "${1}_Info.h"
#include "ColorParse.h"
#include "ReleaseInfo.h"
using namespace std;
//----------------------------------------------------------------
// Procedure: showSynopsis
void showSynopsis()
{
blk("SYNOPSIS: ");
blk("------------------------------------ ");
blk(" The ${2}${1} application is used for ");
blk(" ");
blk(" ");
blk(" ");
blk(" ");
}
//----------------------------------------------------------------
// Procedure: showHelpAndExit
void showHelpAndExit()
{
blk(" ");
blu("=============================================================== ");
blu("Usage: ${2}${1} file.moos [OPTIONS] ");
blu("=============================================================== ");
blk(" ");
showSynopsis();
blk(" ");
blk("Options: ");
mag(" --alias","=<ProcessName> ");
blk(" Launch ${2}${1} with the given process name ");
blk(" rather than ${2}${1}. ");
mag(" --example, -e ");
blk(" Display example MOOS configuration block. ");
mag(" --help, -h ");
blk(" Display this help message. ");
mag(" --interface, -i ");
blk(" Display MOOS publications and subscriptions. ");
mag(" --version,-v ");
blk(" Display the release version of ${2}${1}. ");
blk(" ");
blk("Note: If argv[2] does not otherwise match a known option, ");
blk(" then it will be interpreted as a run alias. This is ");
blk(" to support pAntler launching conventions. ");
blk(" ");
exit(0);
}
//----------------------------------------------------------------
// Procedure: showExampleConfigAndExit
void showExampleConfigAndExit()
{
blk(" ");
blu("=============================================================== ");
blu("${2}${1} Example MOOS Configuration ");
blu("=============================================================== ");
blk(" ");
blk("ProcessConfig = ${2}${1} ");
blk("{ ");
blk(" AppTick = 4 ");
blk(" CommsTick = 4 ");
blk(" ");
blk("} ");
blk(" ");
exit(0);
}
//----------------------------------------------------------------
// Procedure: showInterfaceAndExit
void showInterfaceAndExit()
{
blk(" ");
blu("=============================================================== ");
blu("${2}${1} INTERFACE ");
blu("=============================================================== ");
blk(" ");
showSynopsis();
blk(" ");
blk("SUBSCRIPTIONS: ");
blk("------------------------------------ ");
blk(" NODE_MESSAGE = src_node=alpha,dest_node=bravo,var_name=FOO, ");
blk(" string_val=BAR ");
blk(" ");
blk("PUBLICATIONS: ");
blk("------------------------------------ ");
blk(" Publications are determined by the node message content. ");
blk(" ");
exit(0);
}
//----------------------------------------------------------------
// Procedure: showReleaseInfoAndExit
void showReleaseInfoAndExit()
{
showReleaseInfo("${2}${1}", "gpl");
exit(0);
}
EOF
echo "$2${1} generated"