402 lines
12 KiB
Bash
Executable File
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"
|