summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorComment <tim@gray.(none)>2013-02-13 17:11:43 +0000
committerComment <tim@gray.(none)>2013-02-13 17:11:43 +0000
commit95bb2236ac69b3ae54bb84f91a58a89491b94240 (patch)
treec29070fa03b8f3a430081b3dcc6ba0ce75b7bc02
initial commit
-rw-r--r--audioLoader.xml6
-rw-r--r--nodeList.xml27
-rw-r--r--onandoff.xml57
-rw-r--r--poco-httpd/Makefile221
-rw-r--r--poco-httpd/poco-httpd.cpp169
-rw-r--r--rotord/Makefile221
-rw-r--r--rotord/rotord.cpp88
-rw-r--r--rotord/rotord.h77
-rw-r--r--rotord/rotord.xml4
9 files changed, 870 insertions, 0 deletions
diff --git a/audioLoader.xml b/audioLoader.xml
new file mode 100644
index 0000000..3b39405
--- /dev/null
+++ b/audioLoader.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<node ID="01" type="audioLoader">music track to analyse
+ <output ID="01" type="graph">beat (sawtooth)</output>
+ <output ID="02" type="graph">pitch</output>
+ <output ID="03" type="graph">excitement</output>
+</node> \ No newline at end of file
diff --git a/nodeList.xml b/nodeList.xml
new file mode 100644
index 0000000..57605c3
--- /dev/null
+++ b/nodeList.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<node ID="01" type="audioLoader">music track to analyse
+ <output ID="01" type="graph">beat (sawtooth)</output>
+ <output ID="02" type="graph">pitch</output>
+ <output ID="03" type="graph">excitement</output>
+</node>
+<node ID="02" type="imageloader" thumbnail="">video or image
+ <output ID="01" type="RGB"/>
+ <output ID="02" type="RGBA"/>
+ <output ID="03" type="RGBZ"/>
+ <output ID="04" type="LUM"/>
+</node>
+<node ID="03" type="videoBank" mode="pingpong">
+ <clip ID="01" file="sample.mov"/>
+ <input ID="01" fromID="01.01" type="graph"/>cycle
+ <input ID="02" fromID="01.01" type="graph"/>random
+ <output ID="02" type="RGB"/>
+</node>
+
+
+<node ID="05" UID="d9926bc4-720d-11e2-ad07-0fe64abef8bd" thumbnail="switch.png">Toggle switch
+ <setting ID="01" type="switch" name="mode" value="1" min="0" max="1">Mode</setting>
+ <setting ID="02" type="int" name="control" value="1">Control</setting>
+ <input ID="03" type="RGB">Input 1</input>
+ <input ID="04" type="RGB">Input 2</input>
+ <output ID="05" toID="07.02" type="RGB">Output</output>
+</node>
diff --git a/onandoff.xml b/onandoff.xml
new file mode 100644
index 0000000..d7be0b5
--- /dev/null
+++ b/onandoff.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<canvas description="Off and on template ©Rotor 2013">
+ <node ID="01" type="audioLoader">music track to analyse
+ <output ID="01" type="graph">beat (sawtooth)</output>
+ <output ID="03" type="graph">excitement</output>
+ </node>
+ <node ID="02" type="imageLoader" thumbnail="performance1.jpg">performance take 1
+ <output ID="01" type="RGB"/>
+ </node>
+ <node ID="03" type="imageLoader" thumbnail="performance1.jpg">performance take 2
+ <output ID="01" type="RGB"/>
+ </node>
+ <node ID="04" type="==">1
+ <input ID="01" fromID="01.01" type="graph"/>
+ <output ID="02" type="graph"/>
+ </node>
+ <node ID="05" type="toggle switch" >
+ <input ID="01" fromID="02.01" type="RGB"/>
+ <input ID="02" fromID="03.01" type="RGB"/>
+ <input ID="03" fromID="04.02" type="graph"/>
+ <output ID="04" type="RGB"/>
+ </node>
+ <node ID="06" type="frequency/offset" frequency="0.25" offset="1">
+ <input ID="01" fromID="01.01" type="graph"/>
+ <output ID="02" type="graph"/>
+ </node>
+ <node ID="07" type="*">2
+ <input ID="01" fromID="06.02" type="graph"/>
+ <output ID="02" type="graph"/>
+ </node>
+ <node ID="08" type="==">1
+ <input ID="01" fromID="06.02" type="graph"/>
+ <output ID="02" type="graph"/>
+ </node>
+ <node ID="09" type="videoBank" mode="pingpong">
+ <clip ID="01" file="sample.mov"/>
+ <input ID="01" fromID="08.02" type="graph"/>cycle switch
+ <output ID="02" type="RGB"/>
+ </node>
+ <node ID="10" type="shape" mode="triangle">
+ <input ID="01" fromID="07.02" type="graph"/>scale
+ <output ID="02" type="LUM"/>
+ </node>
+ <node ID="11" type="channel merge" >
+ <input fromID="02.01" type="scale"/>
+ <output ID="09" type="LUM"/>
+ </node>
+</canvas>
+
+
+//node IDs - specific to the patch or universal (can they be renumbered?)
+//connector nodes - all in the patch or just mention the ones that are used
+//connector IDs - to identify connectors? seperate cIDs within a subcanvas? so- input fromID="02.01"
+//how do we identify a connector? -by type (seperate for each connector) - or by ID - or by description?
+//OR have a unique identifier for every node?
+
+// \ No newline at end of file
diff --git a/poco-httpd/Makefile b/poco-httpd/Makefile
new file mode 100644
index 0000000..9098836
--- /dev/null
+++ b/poco-httpd/Makefile
@@ -0,0 +1,221 @@
+# The pre-processor and compiler options.
+MY_CFLAGS =
+
+# The linker options.
+MY_LIBS = -lPocoNet -lPocoXML -lPocoUtil -lPocoFoundation
+
+# The pre-processor options used by the cpp (man cpp for more).
+CPPFLAGS = -Wall
+
+# The options used in linking as well as in any direct use of ld.
+LDFLAGS =
+
+# The directories in which source files reside.
+# If not specified, only the current directory will be serached.
+SRCDIRS =
+
+# The executable file name.
+# If not specified, current directory name or `a.out' will be used.
+PROGRAM =
+
+## Implicit Section: change the following only when necessary.
+##==========================================================================
+
+# The source file types (headers excluded).
+# .c indicates C source files, and others C++ ones.
+SRCEXTS = .c .C .cc .cpp .CPP .c++ .cxx .cp
+
+# The header file types.
+HDREXTS = .h .H .hh .hpp .HPP .h++ .hxx .hp
+
+# The pre-processor and compiler options.
+# Users can override those variables from the command line.
+CFLAGS = -g -O2
+CXXFLAGS= -g -O2
+
+# The C program compiler.
+#CC = gcc
+
+# The C++ program compiler.
+#CXX = g++
+
+# Un-comment the following line to compile C programs as C++ ones.
+#CC = $(CXX)
+
+# The command used to delete file.
+#RM = rm -f
+
+ETAGS = etags
+ETAGSFLAGS =
+
+CTAGS = ctags
+CTAGSFLAGS =
+
+## Stable Section: usually no need to be changed. But you can add more.
+##==========================================================================
+SHELL = /bin/sh
+EMPTY =
+SPACE = $(EMPTY) $(EMPTY)
+ifeq ($(PROGRAM),)
+ CUR_PATH_NAMES = $(subst /,$(SPACE),$(subst $(SPACE),_,$(CURDIR)))
+ PROGRAM = $(word $(words $(CUR_PATH_NAMES)),$(CUR_PATH_NAMES))
+ ifeq ($(PROGRAM),)
+ PROGRAM = a.out
+ endif
+endif
+ifeq ($(SRCDIRS),)
+ SRCDIRS = .
+endif
+SOURCES = $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))
+HEADERS = $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(HDREXTS))))
+SRC_CXX = $(filter-out %.c,$(SOURCES))
+OBJS = $(addsuffix .o, $(basename $(SOURCES)))
+DEPS = $(OBJS:.o=.d)
+
+## Define some useful variables.
+DEP_OPT = $(shell if `$(CC) --version | grep "GCC" >/dev/null`; then \
+ echo "-MM -MP"; else echo "-M"; fi )
+DEPEND = $(CC) $(DEP_OPT) $(MY_CFLAGS) $(CFLAGS) $(CPPFLAGS)
+DEPEND.d = $(subst -g ,,$(DEPEND))
+COMPILE.c = $(CC) $(MY_CFLAGS) $(CFLAGS) $(CPPFLAGS) -c
+COMPILE.cxx = $(CXX) $(MY_CFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c
+LINK.c = $(CC) $(MY_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)
+LINK.cxx = $(CXX) $(MY_CFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS)
+
+.PHONY: all objs tags ctags clean distclean help show
+
+# Delete the default suffixes
+.SUFFIXES:
+
+all: $(PROGRAM)
+
+# Rules for creating dependency files (.d).
+#------------------------------------------
+
+%.d:%.c
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.C
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.cc
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.cpp
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.CPP
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.c++
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.cp
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.cxx
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+# Rules for generating object files (.o).
+#----------------------------------------
+objs:$(OBJS)
+
+%.o:%.c
+ $(COMPILE.c) $< -o $@
+
+%.o:%.C
+ $(COMPILE.cxx) $< -o $@
+
+%.o:%.cc
+ $(COMPILE.cxx) $< -o $@
+
+%.o:%.cpp
+ $(COMPILE.cxx) $< -o $@
+
+%.o:%.CPP
+ $(COMPILE.cxx) $< -o $@
+
+%.o:%.c++
+ $(COMPILE.cxx) $< -o $@
+
+%.o:%.cp
+ $(COMPILE.cxx) $< -o $@
+
+%.o:%.cxx
+ $(COMPILE.cxx) $< -o $@
+
+# Rules for generating the tags.
+#-------------------------------------
+tags: $(HEADERS) $(SOURCES)
+ $(ETAGS) $(ETAGSFLAGS) $(HEADERS) $(SOURCES)
+
+ctags: $(HEADERS) $(SOURCES)
+ $(CTAGS) $(CTAGSFLAGS) $(HEADERS) $(SOURCES)
+
+# Rules for generating the executable.
+#-------------------------------------
+$(PROGRAM):$(OBJS)
+ifeq ($(SRC_CXX),) # C program
+ $(LINK.c) $(OBJS) $(MY_LIBS) -o $@
+ @echo Type ./$@ to execute the program.
+else # C++ program
+ $(LINK.cxx) $(OBJS) $(MY_LIBS) -o $@
+ @echo Type ./$@ to execute the program.
+endif
+
+ifndef NODEP
+ifneq ($(DEPS),)
+ sinclude $(DEPS)
+endif
+endif
+
+clean:
+ $(RM) $(OBJS) $(PROGRAM) $(PROGRAM).exe
+
+distclean: clean
+ $(RM) $(DEPS) TAGS
+
+# Show help.
+help:
+ @echo 'Generic Makefile for C/C++ Programs (gcmakefile) version 0.5'
+ @echo 'Copyright (C) 2007, 2008 whyglinux <whyglinux@hotmail.com>'
+ @echo
+ @echo 'Usage: make [TARGET]'
+ @echo 'TARGETS:'
+ @echo ' all (=make) compile and link.'
+ @echo ' NODEP=yes make without generating dependencies.'
+ @echo ' objs compile only (no linking).'
+ @echo ' tags create tags for Emacs editor.'
+ @echo ' ctags create ctags for VI editor.'
+ @echo ' clean clean objects and the executable file.'
+ @echo ' distclean clean objects, the executable and dependencies.'
+ @echo ' show show variables (for debug use only).'
+ @echo ' help print this message.'
+ @echo
+ @echo 'Report bugs to <whyglinux AT gmail DOT com>.'
+
+# Show variables (for debug use only.)
+show:
+ @echo 'PROGRAM :' $(PROGRAM)
+ @echo 'SRCDIRS :' $(SRCDIRS)
+ @echo 'HEADERS :' $(HEADERS)
+ @echo 'SOURCES :' $(SOURCES)
+ @echo 'SRC_CXX :' $(SRC_CXX)
+ @echo 'OBJS :' $(OBJS)
+ @echo 'DEPS :' $(DEPS)
+ @echo 'DEPEND :' $(DEPEND)
+ @echo 'COMPILE.c :' $(COMPILE.c)
+ @echo 'COMPILE.cxx :' $(COMPILE.cxx)
+ @echo 'link.c :' $(LINK.c)
+ @echo 'link.cxx :' $(LINK.cxx)
+
+## End of the Makefile ## Suggestions are welcome ## All rights reserved ##
+#############################################################################
diff --git a/poco-httpd/poco-httpd.cpp b/poco-httpd/poco-httpd.cpp
new file mode 100644
index 0000000..5ca33b6
--- /dev/null
+++ b/poco-httpd/poco-httpd.cpp
@@ -0,0 +1,169 @@
+#include "Poco/Net/HTTPServer.h"
+#include "Poco/Net/HTTPRequestHandler.h"
+#include "Poco/Net/HTTPRequestHandlerFactory.h"
+#include "Poco/Net/HTTPServerParams.h"
+#include "Poco/Net/HTTPServerRequest.h"
+#include "Poco/Net/HTTPServerResponse.h"
+#include "Poco/Net/HTTPServerParams.h"
+#include "Poco/Net/ServerSocket.h"
+#include "Poco/Timestamp.h"
+#include "Poco/DateTimeFormatter.h"
+#include "Poco/DateTimeFormat.h"
+#include "Poco/Exception.h"
+#include "Poco/ThreadPool.h"
+#include "Poco/Util/ServerApplication.h"
+#include "Poco/Util/Option.h"
+#include "Poco/Util/OptionSet.h"
+#include "Poco/Util/HelpFormatter.h"
+#include <iostream>
+
+using Poco::Net::ServerSocket;
+using Poco::Net::HTTPRequestHandler;
+using Poco::Net::HTTPRequestHandlerFactory;
+using Poco::Net::HTTPServer;
+using Poco::Net::HTTPServerRequest;
+using Poco::Net::HTTPServerResponse;
+using Poco::Net::HTTPServerParams;
+using Poco::Timestamp;
+using Poco::DateTimeFormatter;
+using Poco::DateTimeFormat;
+using Poco::ThreadPool;
+using Poco::Util::ServerApplication;
+using Poco::Util::Application;
+using Poco::Util::Option;
+using Poco::Util::OptionSet;
+using Poco::Util::OptionCallback;
+using Poco::Util::HelpFormatter;
+
+class TimeRequestHandler: public HTTPRequestHandler
+{
+public:
+ TimeRequestHandler(const std::string& format): _format(format)
+ {
+ }
+
+ void handleRequest(HTTPServerRequest& request,
+ HTTPServerResponse& response)
+ {
+ Application& app = Application::instance();
+ app.logger().information("Request from "
+ + request.clientAddress().toString());
+
+ Timestamp now;
+ std::string dt(DateTimeFormatter::format(now, _format));
+
+ response.setChunkedTransferEncoding(true);
+ response.setContentType("text/html");
+
+ std::ostream& ostr = response.send();
+ ostr << "<html><head><title>HTTPTimeServer powered by "
+ "POCO C++ Libraries</title>";
+ ostr << "<meta http-equiv=\"refresh\" content=\"1\"></head>";
+ ostr << "<body><p style=\"text-align: center; "
+ "font-size: 48px;\">";
+ ostr << dt;
+ ostr << "</p></body></html>";
+ }
+
+private:
+ std::string _format;
+};
+
+class TimeRequestHandlerFactory: public HTTPRequestHandlerFactory
+{
+public:
+ TimeRequestHandlerFactory(const std::string& format):
+ _format(format)
+ {
+ }
+
+ HTTPRequestHandler* createRequestHandler(
+ const HTTPServerRequest& request)
+ {
+ if (request.getURI() == "/")
+ return new TimeRequestHandler(_format);
+ else
+ return 0;
+ }
+
+private:
+ std::string _format;
+};
+
+class HTTPTimeServer: public Poco::Util::ServerApplication
+{
+public:
+ HTTPTimeServer(): _helpRequested(false)
+ {
+ }
+
+ ~HTTPTimeServer()
+ {
+ }
+
+protected:
+ void initialize(Application& self)
+ {
+ loadConfiguration();
+ ServerApplication::initialize(self);
+ }
+
+ void uninitialize()
+ {
+ ServerApplication::uninitialize();
+ }
+
+ void defineOptions(OptionSet& options)
+ {
+ ServerApplication::defineOptions(options);
+
+ options.addOption(
+ Option("help", "h", "display argument help information")
+ .required(false)
+ .repeatable(false)
+ .callback(OptionCallback<HTTPTimeServer>(
+ this, &HTTPTimeServer::handleHelp)));
+ }
+
+ void handleHelp(const std::string& name,
+ const std::string& value)
+ {
+ HelpFormatter helpFormatter(options());
+ helpFormatter.setCommand(commandName());
+ helpFormatter.setUsage("OPTIONS");
+ helpFormatter.setHeader(
+ "A web server that serves the current date and time.");
+ helpFormatter.format(std::cout);
+ stopOptionsProcessing();
+ _helpRequested = true;
+ }
+
+ int main(const std::vector<std::string>& args)
+ {
+ if (!_helpRequested)
+ {
+ unsigned short port = (unsigned short)
+ config().getInt("HTTPTimeServer.port", 9980);
+ std::string format(
+ config().getString("HTTPTimeServer.format",
+ DateTimeFormat::SORTABLE_FORMAT));
+
+ ServerSocket svs(port);
+ HTTPServer srv(new TimeRequestHandlerFactory(format),
+ svs, new HTTPServerParams);
+ srv.start();
+ waitForTerminationRequest();
+ srv.stop();
+ }
+ return Application::EXIT_OK;
+ }
+
+private:
+ bool _helpRequested;
+};
+
+int main(int argc, char** argv)
+{
+ HTTPTimeServer app;
+ return app.run(argc, argv);
+} \ No newline at end of file
diff --git a/rotord/Makefile b/rotord/Makefile
new file mode 100644
index 0000000..9098836
--- /dev/null
+++ b/rotord/Makefile
@@ -0,0 +1,221 @@
+# The pre-processor and compiler options.
+MY_CFLAGS =
+
+# The linker options.
+MY_LIBS = -lPocoNet -lPocoXML -lPocoUtil -lPocoFoundation
+
+# The pre-processor options used by the cpp (man cpp for more).
+CPPFLAGS = -Wall
+
+# The options used in linking as well as in any direct use of ld.
+LDFLAGS =
+
+# The directories in which source files reside.
+# If not specified, only the current directory will be serached.
+SRCDIRS =
+
+# The executable file name.
+# If not specified, current directory name or `a.out' will be used.
+PROGRAM =
+
+## Implicit Section: change the following only when necessary.
+##==========================================================================
+
+# The source file types (headers excluded).
+# .c indicates C source files, and others C++ ones.
+SRCEXTS = .c .C .cc .cpp .CPP .c++ .cxx .cp
+
+# The header file types.
+HDREXTS = .h .H .hh .hpp .HPP .h++ .hxx .hp
+
+# The pre-processor and compiler options.
+# Users can override those variables from the command line.
+CFLAGS = -g -O2
+CXXFLAGS= -g -O2
+
+# The C program compiler.
+#CC = gcc
+
+# The C++ program compiler.
+#CXX = g++
+
+# Un-comment the following line to compile C programs as C++ ones.
+#CC = $(CXX)
+
+# The command used to delete file.
+#RM = rm -f
+
+ETAGS = etags
+ETAGSFLAGS =
+
+CTAGS = ctags
+CTAGSFLAGS =
+
+## Stable Section: usually no need to be changed. But you can add more.
+##==========================================================================
+SHELL = /bin/sh
+EMPTY =
+SPACE = $(EMPTY) $(EMPTY)
+ifeq ($(PROGRAM),)
+ CUR_PATH_NAMES = $(subst /,$(SPACE),$(subst $(SPACE),_,$(CURDIR)))
+ PROGRAM = $(word $(words $(CUR_PATH_NAMES)),$(CUR_PATH_NAMES))
+ ifeq ($(PROGRAM),)
+ PROGRAM = a.out
+ endif
+endif
+ifeq ($(SRCDIRS),)
+ SRCDIRS = .
+endif
+SOURCES = $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))
+HEADERS = $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(HDREXTS))))
+SRC_CXX = $(filter-out %.c,$(SOURCES))
+OBJS = $(addsuffix .o, $(basename $(SOURCES)))
+DEPS = $(OBJS:.o=.d)
+
+## Define some useful variables.
+DEP_OPT = $(shell if `$(CC) --version | grep "GCC" >/dev/null`; then \
+ echo "-MM -MP"; else echo "-M"; fi )
+DEPEND = $(CC) $(DEP_OPT) $(MY_CFLAGS) $(CFLAGS) $(CPPFLAGS)
+DEPEND.d = $(subst -g ,,$(DEPEND))
+COMPILE.c = $(CC) $(MY_CFLAGS) $(CFLAGS) $(CPPFLAGS) -c
+COMPILE.cxx = $(CXX) $(MY_CFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c
+LINK.c = $(CC) $(MY_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)
+LINK.cxx = $(CXX) $(MY_CFLAGS) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS)
+
+.PHONY: all objs tags ctags clean distclean help show
+
+# Delete the default suffixes
+.SUFFIXES:
+
+all: $(PROGRAM)
+
+# Rules for creating dependency files (.d).
+#------------------------------------------
+
+%.d:%.c
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.C
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.cc
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.cpp
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.CPP
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.c++
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.cp
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+%.d:%.cxx
+ @echo -n $(dir $<) > $@
+ @$(DEPEND.d) $< >> $@
+
+# Rules for generating object files (.o).
+#----------------------------------------
+objs:$(OBJS)
+
+%.o:%.c
+ $(COMPILE.c) $< -o $@
+
+%.o:%.C
+ $(COMPILE.cxx) $< -o $@
+
+%.o:%.cc
+ $(COMPILE.cxx) $< -o $@
+
+%.o:%.cpp
+ $(COMPILE.cxx) $< -o $@
+
+%.o:%.CPP
+ $(COMPILE.cxx) $< -o $@
+
+%.o:%.c++
+ $(COMPILE.cxx) $< -o $@
+
+%.o:%.cp
+ $(COMPILE.cxx) $< -o $@
+
+%.o:%.cxx
+ $(COMPILE.cxx) $< -o $@
+
+# Rules for generating the tags.
+#-------------------------------------
+tags: $(HEADERS) $(SOURCES)
+ $(ETAGS) $(ETAGSFLAGS) $(HEADERS) $(SOURCES)
+
+ctags: $(HEADERS) $(SOURCES)
+ $(CTAGS) $(CTAGSFLAGS) $(HEADERS) $(SOURCES)
+
+# Rules for generating the executable.
+#-------------------------------------
+$(PROGRAM):$(OBJS)
+ifeq ($(SRC_CXX),) # C program
+ $(LINK.c) $(OBJS) $(MY_LIBS) -o $@
+ @echo Type ./$@ to execute the program.
+else # C++ program
+ $(LINK.cxx) $(OBJS) $(MY_LIBS) -o $@
+ @echo Type ./$@ to execute the program.
+endif
+
+ifndef NODEP
+ifneq ($(DEPS),)
+ sinclude $(DEPS)
+endif
+endif
+
+clean:
+ $(RM) $(OBJS) $(PROGRAM) $(PROGRAM).exe
+
+distclean: clean
+ $(RM) $(DEPS) TAGS
+
+# Show help.
+help:
+ @echo 'Generic Makefile for C/C++ Programs (gcmakefile) version 0.5'
+ @echo 'Copyright (C) 2007, 2008 whyglinux <whyglinux@hotmail.com>'
+ @echo
+ @echo 'Usage: make [TARGET]'
+ @echo 'TARGETS:'
+ @echo ' all (=make) compile and link.'
+ @echo ' NODEP=yes make without generating dependencies.'
+ @echo ' objs compile only (no linking).'
+ @echo ' tags create tags for Emacs editor.'
+ @echo ' ctags create ctags for VI editor.'
+ @echo ' clean clean objects and the executable file.'
+ @echo ' distclean clean objects, the executable and dependencies.'
+ @echo ' show show variables (for debug use only).'
+ @echo ' help print this message.'
+ @echo
+ @echo 'Report bugs to <whyglinux AT gmail DOT com>.'
+
+# Show variables (for debug use only.)
+show:
+ @echo 'PROGRAM :' $(PROGRAM)
+ @echo 'SRCDIRS :' $(SRCDIRS)
+ @echo 'HEADERS :' $(HEADERS)
+ @echo 'SOURCES :' $(SOURCES)
+ @echo 'SRC_CXX :' $(SRC_CXX)
+ @echo 'OBJS :' $(OBJS)
+ @echo 'DEPS :' $(DEPS)
+ @echo 'DEPEND :' $(DEPEND)
+ @echo 'COMPILE.c :' $(COMPILE.c)
+ @echo 'COMPILE.cxx :' $(COMPILE.cxx)
+ @echo 'link.c :' $(LINK.c)
+ @echo 'link.cxx :' $(LINK.cxx)
+
+## End of the Makefile ## Suggestions are welcome ## All rights reserved ##
+#############################################################################
diff --git a/rotord/rotord.cpp b/rotord/rotord.cpp
new file mode 100644
index 0000000..ccb770b
--- /dev/null
+++ b/rotord/rotord.cpp
@@ -0,0 +1,88 @@
+#include "rotord.h"
+
+RotorRequestHandler::RotorRequestHandler(const std::string& format): _format(format){
+}
+
+void RotorRequestHandler::handleRequest(HTTPServerRequest& request,HTTPServerResponse& response) {
+
+ Timestamp now;
+ std::string dt(DateTimeFormatter::format(now, _format));
+
+ response.setChunkedTransferEncoding(true);
+ response.setContentType("text/html");
+
+ std::ostream& ostr = response.send();
+ ostr << "<html><head><title>RotorServer powered by "
+ "POCO C++ Libraries</title>";
+ ostr << "<meta http-equiv=\"refresh\" content=\"1\"></head>";
+ ostr << "<body><p style=\"text-align: center; "
+ "font-size: 48px;\">";
+ ostr << dt;
+ ostr << "</p></body></html>";
+}
+
+
+RotorRequestHandlerFactory::RotorRequestHandlerFactory(const std::string& format):_format(format){
+}
+
+HTTPRequestHandler* RotorRequestHandlerFactory::createRequestHandler(const HTTPServerRequest& request){
+ Application& app = Application::instance();
+ app.logger().information("Request from "+ request.clientAddress().toString()+": "+request.getURI());
+ if (request.getURI() == "/")
+ return new RotorRequestHandler(_format);
+ else
+ return 0;
+}
+
+
+RotorServer::RotorServer(): _helpRequested(false)
+{
+}
+
+RotorServer::~RotorServer()
+{
+}
+
+void RotorServer::initialize(Application& self){
+ loadConfiguration();
+ ServerApplication::initialize(self);
+}
+
+void RotorServer::uninitialize(){
+ ServerApplication::uninitialize();
+}
+
+void RotorServer::defineOptions(OptionSet& options) {
+ ServerApplication::defineOptions(options);
+ options.addOption(
+ Option("help", "h", "display argument help information")
+ .required(false)
+ .repeatable(false)
+ .callback(OptionCallback<RotorServer>(this, &RotorServer::handleHelp)
+ )
+ );
+}
+
+void RotorServer::handleHelp(const std::string& name, const std::string& value){
+ HelpFormatter helpFormatter(options());
+ helpFormatter.setCommand(commandName());
+ helpFormatter.setUsage("OPTIONS");
+ helpFormatter.setHeader(
+ "Rotor");
+ helpFormatter.format(std::cout);
+ stopOptionsProcessing();
+ _helpRequested = true;
+}
+
+int RotorServer::main(const std::vector<std::string>& args){
+ if (!_helpRequested) {
+ unsigned short port = (unsigned short) config().getInt("port", 9980);
+ std::string format(config().getString("format", DateTimeFormat::SORTABLE_FORMAT));
+ ServerSocket svs(port);
+ HTTPServer srv(new RotorRequestHandlerFactory(format), svs, new HTTPServerParams);
+ srv.start();
+ waitForTerminationRequest();
+ srv.stop();
+ }
+ return Application::EXIT_OK;
+}
diff --git a/rotord/rotord.h b/rotord/rotord.h
new file mode 100644
index 0000000..c5f632b
--- /dev/null
+++ b/rotord/rotord.h
@@ -0,0 +1,77 @@
+#include "Poco/Net/HTTPServer.h"
+#include "Poco/Net/HTTPRequestHandler.h"
+#include "Poco/Net/HTTPRequestHandlerFactory.h"
+#include "Poco/Net/HTTPServerParams.h"
+#include "Poco/Net/HTTPServerRequest.h"
+#include "Poco/Net/HTTPServerResponse.h"
+#include "Poco/Net/HTTPServerParams.h"
+#include "Poco/Net/ServerSocket.h"
+#include "Poco/Timestamp.h"
+#include "Poco/DateTimeFormatter.h"
+#include "Poco/DateTimeFormat.h"
+#include "Poco/Exception.h"
+#include "Poco/ThreadPool.h"
+#include "Poco/Util/ServerApplication.h"
+#include "Poco/Util/Option.h"
+#include "Poco/Util/OptionSet.h"
+#include "Poco/Util/HelpFormatter.h"
+#include <iostream>
+
+#include "Poco/URI.h"
+
+using Poco::Net::ServerSocket;
+using Poco::Net::HTTPRequestHandler;
+using Poco::Net::HTTPRequestHandlerFactory;
+using Poco::Net::HTTPServer;
+using Poco::Net::HTTPServerRequest;
+using Poco::Net::HTTPServerResponse;
+using Poco::Net::HTTPServerParams;
+using Poco::Timestamp;
+using Poco::DateTimeFormatter;
+using Poco::DateTimeFormat;
+using Poco::ThreadPool;
+using Poco::Util::ServerApplication;
+using Poco::Util::Application;
+using Poco::Util::Option;
+using Poco::Util::OptionSet;
+using Poco::Util::OptionCallback;
+using Poco::Util::HelpFormatter;
+
+class RotorRequestHandler: public HTTPRequestHandler
+{
+ public:
+ RotorRequestHandler(const std::string& format);
+ void handleRequest(HTTPServerRequest& request,HTTPServerResponse& response);
+ private:
+ std::string _format;
+};
+
+class RotorRequestHandlerFactory: public HTTPRequestHandlerFactory
+{
+ public:
+ RotorRequestHandlerFactory(const std::string& format);
+ HTTPRequestHandler* createRequestHandler(const HTTPServerRequest& request);
+ private:
+ std::string _format;
+};
+
+class RotorServer: public Poco::Util::ServerApplication
+{
+ public:
+ RotorServer();
+ ~RotorServer();
+ protected:
+ void initialize(Application& self);
+ void uninitialize();
+ void defineOptions(OptionSet& options);
+ void handleHelp(const std::string& name, const std::string& value);
+ int main(const std::vector<std::string>& args);
+ private:
+ bool _helpRequested;
+};
+
+int main(int argc, char** argv)
+{
+ RotorServer app;
+ return app.run(argc, argv);
+} \ No newline at end of file
diff --git a/rotord/rotord.xml b/rotord/rotord.xml
new file mode 100644
index 0000000..0a9422f
--- /dev/null
+++ b/rotord/rotord.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<config>
+ <port>9000</port>
+</config> \ No newline at end of file