Commit 6aa44c99 authored by Pavel Vainerman's avatar Pavel Vainerman

(uniset-codegen): добавил генератор скелета класса (--make-skel)

parent d8bd2aca
......@@ -3,7 +3,7 @@ SUBDIRS=. tests
bin_SCRIPTS = @PACKAGE@-codegen
xsldir = $(datadir)/uniset/xslt
xsl_DATA = *.xsl
xsl_DATA = *.xsl skel*
all-local:
chmod 'a+x' @PACKAGE@-codegen
......
bin_PROGRAMS = Skel
Skel_SOURCES = Skel_SK.cc Skel.cc
Skel_SK.cc: Skel.src.xml
@UNISET_CODEGEN@ --ask -n Skel --topdir $(top_builddir)/ --no-main Skel.src.xml
clean-local:
rm -rf *_SK.cc *_SK.h
all-local: Skel_SK.cc Skel_SK.h
#include <sstream>
#include <ObjectsActivator.h>
#include "Skel.h"
// -----------------------------------------------------------------------------
using namespace UniSetTypes;
using namespace std;
// -----------------------------------------------------------------------------
int main( int argc, const char **argv )
{
try
{
string confile = uniset_init(argc, argv);
string logfilename = conf->getArgParam("--logfile", "Skel.log");
string logname( conf->getLogDir() + logfilename );
// dlog.logFile( logname.c_str() );
unideb.logFile( logname.c_str() );
// conf->initDebug(dlog,"dlog");
ObjectsActivator act;
xmlNode* cnode = conf->getNode("Skel");
if( cnode == NULL )
{
dlog[Debug::CRIT] << "(Skel): not found <Skel> in conffile" << endl;
return 1;
}
Skel o("Skel",cnode);
act.addObject( static_cast<UniSetObject*>(&o) );
SystemMessage sm(SystemMessage::StartUp);
act.broadcast( sm.transport_msg() );
unideb(Debug::ANY) << "\n\n\n";
unideb[Debug::ANY] << "(Skel::main): -------------- Skel START -------------------------\n\n";
dlog(Debug::ANY) << "\n\n\n";
dlog[Debug::ANY] << "(Skel::main): -------------- Skel START -------------------------\n\n";
act.run(false);
}
catch(SystemError& err)
{
cerr << "(Skel::main): " << err << endl;
}
catch(Exception& ex)
{
cerr << "(Skel::main): " << ex << endl;
}
catch(...)
{
cerr << "(Skel::main): catch(...)" << endl;
}
return 0;
}
// -----------------------------------------------------------------------------
#include "Exceptions.h"
#include "Skel.h"
// -----------------------------------------------------------------------------
using namespace std;
using namespace UniSetTypes;
// -----------------------------------------------------------------------------
Skel::Skel( UniSetTypes::ObjectId id, xmlNode* confnode ):
Skel_SK( id, confnode )
{
}
// -----------------------------------------------------------------------------
Skel::~Skel()
{
}
// -----------------------------------------------------------------------------
Skel::Skel()
{
cerr << "(Skel): init failed!!!!!!!!!!!!!!!"<< endl;
throw Exception();
}
// -----------------------------------------------------------------------------
void Skel::step()
{
}
// -----------------------------------------------------------------------------
void Skel::sensorInfo( SensorMessage *sm )
{
}
// -----------------------------------------------------------------------------
void Skel::timerInfo( TimerMessage *tm )
{
}
// -----------------------------------------------------------------------------
void Skel::askSensors( UniversalIO::UIOCommand cmd )
{
}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
#ifndef Skel_H_
#define Skel_H_
// -----------------------------------------------------------------------------
#include "Skel_SK.h"
// -----------------------------------------------------------------------------
class Skel:
public Skel_SK
{
public:
Skel( UniSetTypes::ObjectId id, xmlNode* confnode = UniSetTypes::conf->getNode("Skel") );
virtual ~Skel();
protected:
Skel();
virtual void step();
virtual void sensorInfo( UniSetTypes::SensorMessage *sm );
virtual void timerInfo( UniSetTypes::TimerMessage *tm );
virtual void askSensors( UniversalIO::UIOCommand cmd );
private:
};
// -----------------------------------------------------------------------------
#endif // Skel_H_
// -----------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<!--
name - название класса
msgcount - сколько сообщений обрабатывается за один раз
sleep_msec - пауза между итерациями в работе процесса
type
====
in - входные регистры (только для чтения)
out - выходные регистры (запись)
-->
<Skel>
<settings>
<set name="class-name" val="Skel"/>
<set name="msg-count" val="20"/>
<set name="sleep-msec" val="150"/>
</settings>
<smap>
<!-- name - название переменной в конф. файле -->
</smap>
<msgmap>
<!-- name - название переменной в конф. файле -->
</msgmap>
</Skel>
......@@ -28,6 +28,10 @@ Valid options are:
-n, --name - filename for *_SK files (base class implementation). Default: xmlfilename_SK
--ask - Use 'ask' templates. See the documentation.
--alone - Use 'alone' templates. See the documentation.
--no-main - Don`t generate main.cc
--make-skel name - generate process skeleton (name.src.xml, Name.cc, Name.hh, Makefile.am, main.cc)
Additional arguments: --no-main, --no-makefile
EOF
......@@ -35,7 +39,7 @@ EOF
}
#parse command line options
TEMP=`getopt -n $PROG -o h,n:,m:,a,l:,z -l help,name:,main:,no-main,topdir:,path:,alone,ask,no-ask,local:,local-include,add-cc-include,add-hh-include -- "$@"` || exit 1
TEMP=`getopt -n $PROG -o h,n:,m:,a,l:,z -l help,name:,main:,no-main,topdir:,path:,alone,ask,no-ask,local:,local-include,add-cc-include,add-hh-include,make-skel:,no-makefile -- "$@"` || exit 1
eval set -- "$TEMP"
name=
......@@ -50,11 +54,20 @@ localinc=0
add_cc_inc=
add_hh_inc=
xsltpath=
no_makefile=
make_skel=
make_name=
xls_h="ctl-cpp-h.xsl"
xls_c="ctl-cpp-cc.xsl"
xls_m="ctl-cpp-main.xsl"
skel_h="skel.h"
skel_c="skel.cc"
skel_m="skel-main.cc"
skel_xml="skel.src.xml"
skel_make="skel-Makefile.am"
while :; do
case "$1" in
-h|--help) print_usage 0
......@@ -116,6 +129,16 @@ while :; do
xsltpath="--path $1"
;;
--make-skel)
make_skel=1
shift
make_name="$1"
;;
--no-makefile)
no_makefile=1
;;
--) shift; break
;;
*) "unrecognized option: $1"
......@@ -125,6 +148,21 @@ while :; do
shift
done
if [ -n "$make_skel" ]; then
[ -z "$make_name" ] && print_usage -1
cp ${xsltdir}/$skel_h ${make_name}.h && subst "s|Skel|${make_name}|g" ${make_name}.h
cp ${xsltdir}/$skel_c ${make_name}.cc && subst "s|Skel|${make_name}|g" ${make_name}.cc
cp ${xsltdir}/$skel_xml ${make_name}.src.xml && subst "s|Skel|${make_name}|g" ${make_name}.src.xml
[ -z "$no_main" ] && cp ${xsltdir}/$skel_m ${make_name}-main.cc && subst "s|Skel|${make_name}|g" ${make_name}-main.cc
[ -z "$no_makefile" ] && cp ${xsltdir}/$skel_make Makefile.am && subst "s|Skel|${make_name}|g" Makefile.am
exit 0
fi
xmlfile="$1"
[ -n "$xmlfile" ] || print_usage
......
......@@ -6,7 +6,7 @@
Name: libuniset
Version: 1.5
Release: alt9
Release: alt10
Summary: UniSet - library for building distributed industrial control systems
License: GPL
Group: Development/C++
......@@ -162,6 +162,7 @@ rm -f %buildroot%_libdir/*.la
%dir %_datadir/%oname/
%dir %_datadir/%oname/xslt/
%_datadir/%oname/xslt/*.xsl
%_datadir/%oname/xslt/skel*
%files
%_libdir/libUniSet.so.*
......@@ -262,6 +263,10 @@ rm -f %buildroot%_libdir/*.la
%exclude %_pkgconfigdir/libUniSet.pc
%changelog
* Mon Jan 14 2013 Pavel Vainerman <pv@altlinux.ru> 1.5-alt10
- add error code for MTR (eterbug #8659)
- (uniset-codegen): add generate class Skeleton (--make-skel)
* Sat Jan 05 2013 Pavel Vainerman <pv@altlinux.ru> 1.5-alt9
- add SQLite support
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment