Throw out anything polling related - they will go to libmspio eventually
authorMikko Rasa <tdb@tdb.fi>
Fri, 17 Nov 2006 23:15:04 +0000 (23:15 +0000)
committerMikko Rasa <tdb@tdb.fi>
Fri, 17 Nov 2006 23:15:04 +0000 (23:15 +0000)
Remove some old files
Redesign Application::main

29 files changed:
Package [deleted file]
source/core/Module [deleted file]
source/core/application.cpp
source/core/application.h
source/core/error.h
source/core/event.cpp [deleted file]
source/core/event.h [deleted file]
source/core/main.cpp
source/core/mutex.h
source/core/pollable.cpp [deleted file]
source/core/pollable.h [deleted file]
source/core/poller.cpp [deleted file]
source/core/poller.h [deleted file]
source/core/semaphore.cpp
source/core/semaphore.h
source/core/thread.cpp
source/core/thread.h
source/core/types.h
source/core/win32poll.h [deleted file]
source/time/Module [deleted file]
source/time/timedelta.cpp
source/time/timedelta.h
source/time/timer.cpp
source/time/timer.h
source/time/timestamp.h
source/time/units.cpp
source/time/units.h
source/time/utils.cpp
source/time/utils.h

diff --git a/Package b/Package
deleted file mode 100644 (file)
index 42d52e4..0000000
--- a/Package
+++ /dev/null
@@ -1,5 +0,0 @@
-package="mspcore"
-version="0.1"
-description="Mikkosoft Productions core library"
-requires=("mspmisc","pthread","sigc++-2.0")
-tarballfile=("License.txt",)
diff --git a/source/core/Module b/source/core/Module
deleted file mode 100644 (file)
index 536d2d4..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-type="library"
-target="mspcore"
-extradirs=("time",)
-installheaders="core"
-installtarget=1
index 01bb558e279255fbb5f83676c61886966f9624b2..7e92dbdf3d552574fbb279b17abc7bf56edfbec2 100644 (file)
@@ -1,10 +1,11 @@
 /*
-This file is part of libmspframework
+This file is part of libmspcore
 Copyright © 2006 Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
 #include <signal.h>
 #include <iostream>
+#include "../time/units.h"
 #include "application.h"
 #include "error.h"
 
@@ -12,35 +13,6 @@ using namespace std;
 
 namespace Msp {
 
-Poller::Slot &Application::add_pollable(Pollable *obj, short events)
-{
-       if(!poller_)
-               poller_=new Poller;
-       
-       Poller::Slot &slot=poller_->add_pollable(obj, events);
-       // Interrupt a possible poll in progress
-#ifndef WIN32  //XXX
-       pthread_kill(main_tid, SIGALRM);
-#endif
-       return slot;
-}
-
-EventManager::Event &Application::create_event()
-{
-       if(!ev_mgr_)
-               ev_mgr_=new EventManager(*this);
-
-       return ev_mgr_->create_event();
-}
-
-Application::~Application()
-{
-       if(poller_)
-               delete poller_;
-       if(ev_mgr_)
-               delete ev_mgr_;
-}
-
 /**
 Constructs an instance of the registered application class and runs it.  If the
 application throws a UsageError, the static usage() function is called.
@@ -64,17 +36,13 @@ int Application::run(int argc, char **argv)
                return 126;
        }
 
-#ifndef WIN32 //XXX
-       signal(SIGALRM, &sigalrm_);
-#endif
-       
        try
        {
                app_=reg_app_->create_app(argc, argv);
        }
        catch(const UsageError &e)
        {
-               reg_app_->usage(argv[0], e.get_brief());
+               reg_app_->usage(e.what(), argv[0], e.get_brief());
                return 1;
        }
 
@@ -87,63 +55,53 @@ int Application::run(int argc, char **argv)
 Prints a message describing the usage of the application.  The default version
 will blame the programmer for being lazy.
 
-@param   argv0  The value of argv[0], to be used in the message
-@param   brief  Whether to print a brief or long usage message
+@param   reason  Why the function was called
+@param   argv0   The value of argv[0], to be used in the message
+@param   brief   Whether to print a brief or long usage message
 */
-void Application::usage(const char *, bool)
+void Application::usage(const char *reason, const char *, bool)
 {
+       if(reason)
+               cerr<<reason<<'\n';
        cerr<<"The programmer was lazy and didn't write a usage() function for this application.\n";
 }
 
 Application::Application():
        exit_code(0),
-       tick_mode_(IDLE),
-       poller_(0),
-       ev_mgr_(0)
-#ifndef WIN32
-       //XXX Figure out how to get the current thread on win32
-       ,main_tid(pthread_self())
-#endif
+       loop_mode_(TICK_SLEEP)
 { }
 
 /**
-Default main loop.  Calls tick() periodically if do_ticks is true, otherwise
-just sleeps.  A custom main loop should monitor the done member variable and
-return exit_code.
+Default main loop.  Behavior depends on loop_mode_.  A custom main loop should
+monitor the done member variable and return exit_code.
 */
 int Application::main()
 {
+       if(loop_mode_==NONE)
+               return 0;
+
        done=false;
        while(!done)
        {
-               if(tick_mode_==IDLE)
+               if(loop_mode_==SLEEP)
+               {
+                       sleep_sem_.wait();
+                       if(!done)
+                               tick();
+               }
+               else if(loop_mode_==TICK_SLEEP)
                {
-                       if(poller_)
-                               poller_->poll(0);
                        tick();
-#ifdef WIN32
-                       Sleep(0);
-#else
-                       //sched_yield();
-                       timespec ts={0,1000000};
-                       nanosleep(&ts, 0);
-#endif
+                       sleep(Time::msec);
                }
-               else
+               else if(loop_mode_==TICK_YIELD)
                {
-                       if(poller_)
-                               poller_->poll(-1);
-                       else
-                       {
+                       tick();
 #ifdef WIN32
-                               Sleep(1);
+                       Sleep(0);
 #else
-                               timespec ts={1000,0};
-                               nanosleep(&ts, 0);
+                       sched_yield();
 #endif
-                       }
-                       if(tick_mode_!=NONE)
-                               tick();
                }
        }
 
@@ -158,12 +116,25 @@ void Application::catch_signal(int s)
        signal(s, &sighandler_);
 }
 
-void Application::set_tick_mode(TickMode t)
+/**
+Changes the main loop mode.
+*/
+void Application::set_loop_mode(LoopMode l)
 {
-       tick_mode_=t;
-#ifndef WIN32 //XXX
-       pthread_kill(main_tid, SIGALRM);        
-#endif
+       LoopMode old_mode=loop_mode_;
+       loop_mode_=l;
+       if(old_mode==SLEEP)
+               sleep_sem_.signal();
+}
+
+/**
+Causes the tick() function to be executed once if loop mode is SLEEP.  Has no
+effect with other loop modes.
+*/
+void Application::induce_tick()
+{
+       if(loop_mode_==SLEEP)
+               sleep_sem_.signal();
 }
 
 /**
@@ -173,11 +144,13 @@ void Application::exit(int c)
 {
        done=true;
        exit_code=c;
-#ifndef WIN32 //XXX
-       pthread_kill(main_tid, SIGALRM);        
-#endif
+       if(loop_mode_==SLEEP)
+               sleep_sem_.signal();
 }
 
+/**
+Static wrapper function to call a member function of the Application instance.
+*/
 void Application::sighandler_(int s)
 {
        app_->sighandler(s);
index 5f3968ac4018faa2c6f3f8b1e3e3fb8f77f1ef64..fa0c9c41bcf42a7923237b21cdcc410233599226 100644 (file)
@@ -1,14 +1,12 @@
 /*
-This file is part of libmspframework
+This file is part of libmspcore
 Copyright © 2006 Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
 #ifndef MSP_FRAMEWORK_APPLICATION_H_
 #define MSP_FRAMEWORK_APPLICATION_H_
 
-#include "event.h"
-#include "poller.h"
-#include "types.h"
+#include "semaphore.h"
 
 namespace Msp {
 
@@ -19,25 +17,24 @@ member of type RegApp<MainClass>.
 class Application
 {
 public:
-       Poller::Slot &add_pollable(Pollable *, short);
-       EventManager::Event &create_event();
-       virtual ~Application();
+       virtual ~Application() { }
 
        static int run(int, char **);
-       static void usage(const char *, bool);
+       static void usage(const char *, const char *, bool);
 protected:
-       enum TickMode
+       enum LoopMode
        {
-               NONE,       /// No ticks
-               AFTER_POLL, /// One tick after each poll
-               IDLE        /// Constant torrent of ticks
+               NONE,       /// No main loop - main() will just return
+               SLEEP,      /// Only sleep in the main loop - useful for servers
+               TICK_SLEEP, /// Call tick every iteration, with a short sleep in between
+               TICK_YIELD  /// Call tick every iteration, with sched_yield in between
        };
        
        class RegBase
        {
        public:
                virtual Application *create_app(int, char **)=0;
-               virtual void usage(const char *, bool)=0;
+               virtual void usage(const char *, const char *, bool)=0;
                virtual ~RegBase() { }
        protected:
                RegBase();
@@ -48,7 +45,7 @@ protected:
        {
        public:
                Application *create_app(int argc, char **argv) { return new T(argc, argv); }
-               void usage(const char *a, bool b) { T::usage(a,b); }
+               void usage(const char *r, const char *a, bool b) { T::usage(r, a, b); }
        };
 
        bool done;
@@ -57,20 +54,19 @@ protected:
        Application();
        virtual int main();
        void catch_signal(int);
-       void set_tick_mode(TickMode);
+       void set_loop_mode(LoopMode);
+       void induce_tick();
        void exit(int);
        virtual void tick() { }
        virtual void sighandler(int) { }
 private:
-       TickMode     tick_mode_;
-       Poller       *poller_;
-       EventManager *ev_mgr_;
-       ThreadHandle main_tid;
+       LoopMode     loop_mode_;
+       Semaphore    sleep_sem_;
 
        Application(const Application &);
        Application &operator=(const Application &);
 
-       static RegBase *reg_app_;
+       static RegBase     *reg_app_;
        static Application *app_;
 
        static void sighandler_(int);
index c311bcdc4316e71053530f32b8e678cf5cbd43e8..a8ad2939daa72bb5021719fa1da126a0b151efba 100644 (file)
@@ -1,5 +1,5 @@
 /*
-This file is part of libmspframework
+This file is part of libmspcore
 Copyright © 2006 Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
@@ -13,7 +13,7 @@ namespace Msp {
 class UsageError: public Msp::Exception
 {
 public:
-       UsageError(bool b=true): Exception(""), brief(b) { }
+       UsageError(const std::string &r, bool b=true): Exception(r), brief(b) { }
        bool get_brief() const { return brief; }
 private:
        bool brief;
diff --git a/source/core/event.cpp b/source/core/event.cpp
deleted file mode 100644 (file)
index 01b8542..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-This file is part of libmspframework
-Copyright © 2006 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-#ifdef WIN32
-#include <io.h>
-#include <fcntl.h>
-#endif
-
-#include "application.h"
-#include "event.h"
-
-using namespace std;
-
-namespace Msp {
-
-EventManager::EventManager(Application &a):
-       app(a),
-       next_id(1)
-{
-       app.add_pollable(&pipe, POLLIN).signal_event.connect(sigc::mem_fun(this, &EventManager::data_available));
-}
-
-EventManager::Event &EventManager::create_event()
-{
-       events.push_back(Event(*this, next_id++));
-       return events.back();
-}
-
-void EventManager::data_available(short)
-{
-       unsigned buf[1024];
-       int len=pipe.read((char *)buf, sizeof(buf));
-       for(unsigned i=0; i*sizeof(unsigned)<(unsigned)len; ++i)
-       {
-               for(list<Event>::iterator j=events.begin(); j!=events.end(); ++j)
-                       if(j->get_id()==buf[i])
-                               j->signal_triggered.emit();
-       }
-}
-
-void EventManager::Event::trigger()
-{
-       mgr.pipe.write((char *)&id, sizeof(id));
-}
-
-EventManager::Pipe::Pipe()
-{
-#ifdef WIN32
-       _pipe(fd, 1024, _O_BINARY);
-#else
-       ::pipe(fd);
-#endif
-}
-
-int EventManager::Pipe::write(char *buf, unsigned len)
-{
-#ifdef WIN32
-       return _write(fd[1], buf, len);
-#else
-       return ::write(fd[1], buf, len);
-#endif
-}
-
-int EventManager::Pipe::read(char *buf, unsigned len)
-{
-#ifdef WIN32
-       return _read(fd[0], buf, len);
-#else
-       return ::read(fd[0], buf, len);
-#endif
-}
-
-} // namespace Msp
diff --git a/source/core/event.h b/source/core/event.h
deleted file mode 100644 (file)
index 091d637..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
-This file is part of libmspframework
-Copyright © 2006 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-#ifndef MSP_FRAMEWORK_EVENT_H_
-#define MSP_FRAMEWORK_EVENT_H_
-
-#include <sigc++/sigc++.h>
-#include "pollable.h"
-
-namespace Msp {
-
-class Application;
-
-/**
-Events can be used in multi-threaded applictions to trigger actions in the main
-thread.
-*/
-class EventManager
-{
-public:
-       class Event
-       {
-       public:
-               sigc::signal<void> signal_triggered;
-
-               Event(EventManager &m, unsigned i): mgr(m), id(i) { }
-               unsigned get_id() const { return id; }
-               void trigger();
-       private:
-               EventManager &mgr;
-               unsigned id;
-       };
-
-       EventManager(Application &);
-       Event &create_event();
-private:
-       class Pipe: public Pollable
-       {
-       public:
-               Pipe();
-               int write(char *, unsigned);
-               int read(char *, unsigned);
-       private:
-               int fd[2];
-       
-               int get_fd() { return fd[0]; }
-       };
-
-       Application &app;
-       Pipe        pipe;
-       unsigned    next_id;
-       std::list<Event> events;
-
-       void data_available(short);
-};
-
-} // namespace Msp
-
-#endif
index 4b187c3ed244b35491658ee66ee14aeb08419cc0..de62f75821bf11e0735b6a2d7f2264703d888782 100644 (file)
@@ -1,5 +1,5 @@
 /*
-This file is part of libmspframework
+This file is part of libmspcore
 Copyright © 2006 Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
index 99585103704d00d4bbde53edf3927975286f0898..146b982806671fba20912a88f33af04d93c65b90 100644 (file)
@@ -1,5 +1,5 @@
 /*
-This file is part of libmspframework
+This file is part of libmspcore
 Copyright © 2006 Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
diff --git a/source/core/pollable.cpp b/source/core/pollable.cpp
deleted file mode 100644 (file)
index 4db38dd..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-This file is part of libmspframework
-Copyright © 2006 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-#ifdef WIN32
-#include <winsock2.h>
-#include "win32poll.h"
-#else
-#include <poll.h>
-#endif
-#include "pollable.h"
-
-namespace Msp {
-
-short Pollable::poll(short events, int timeout)
-{
-#ifdef WIN32
-       return 0;
-#else
-       pollfd pfd={get_fd(), events, 0};
-       int result=::poll(&pfd, 1, timeout);
-       if(result<=0)
-               return result;
-       return pfd.revents;
-#endif
-}
-
-}
diff --git a/source/core/pollable.h b/source/core/pollable.h
deleted file mode 100644 (file)
index f676d55..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-This file is part of libmspframework
-Copyright © 2006 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-#ifndef MSP_FRAMEWORK_POLLABLE_H_
-#define MSP_FRAMEWORK_POLLABLE_H_
-
-#ifdef WIN32
-#include "win32poll.h"
-#endif
-
-#include <sigc++/sigc++.h>
-
-namespace Msp {
-
-class Pollable
-{
-public:
-       sigc::signal<void> signal_deleted;
-
-       virtual short poll(short, int =0);
-       virtual ~Pollable() { signal_deleted.emit(); }
-protected:
-       virtual int get_fd()=0;
-
-       friend class Poller;
-};
-
-}
-
-#endif
diff --git a/source/core/poller.cpp b/source/core/poller.cpp
deleted file mode 100644 (file)
index 4a623d4..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-This file is part of libmspframework
-Copyright © 2006 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-#include "pollable.h"
-#include "poller.h"
-
-using namespace std;
-
-namespace Msp {
-
-Poller::Slot &Poller::add_pollable(Pollable *obj, short events)
-{
-       MutexLock sl(slots_mutex);
-       
-       slots.push_back(new Slot(obj, events));
-       if(!pfd_mutex.trylock())
-       {
-               rebuild_pfd();
-               pfd_mutex.unlock();
-       }
-       else
-               dirty=true;
-       return *slots.back();
-}
-
-int Poller::poll(int timeout)
-{
-#ifdef WIN32
-       return 0;
-#else
-       slots_mutex.lock();
-       for(list<Slot *>::iterator i=slots.begin(); i!=slots.end();)
-       {
-               if((*i)->get_object())
-                       ++i;
-               else
-               {
-                       delete *i;
-                       i=slots.erase(i);
-                       dirty=true;
-               }
-       }
-
-       pfd_mutex.lock();
-       if(dirty)
-       {
-               rebuild_pfd();
-               dirty=false;
-       }
-       slots_mutex.unlock();
-       
-       int result=::poll(&pfd[0], pfd.size(), timeout);
-
-       if(result>0)
-       {
-               list<Slot *>::iterator j=slots.begin();
-               for(vector<pollfd>::iterator i=pfd.begin(); i!=pfd.end(); ++i)
-               {
-                       if(i->revents&POLLNVAL)
-                               dirty=true;
-                       else if(i->revents)
-                       {
-                               while(j!=slots.end() && (!(*j)->get_object() || (*j)->get_object()->get_fd()!=i->fd))
-                                       ++j;
-                               if(j==slots.end())
-                                       break;
-                               (*j)->signal_event.emit(i->revents);
-                       }
-               }
-       }
-
-       pfd_mutex.unlock();
-       
-       return result;
-#endif
-}
-
-void Poller::rebuild_pfd()
-{
-       pfd.clear();
-       pfd.reserve(slots.size());
-       for(list<Slot *>::iterator i=slots.begin(); i!=slots.end(); ++i)
-       {
-               if(!(*i)->get_object() || (*i)->get_object()->get_fd()<0)
-                       continue;
-
-               pfd.push_back(pollfd());
-               pfd.back().fd=(*i)->get_object()->get_fd();
-               pfd.back().events=(*i)->get_events();
-       }
-}
-
-Poller::Slot::Slot(Pollable *o, short e):
-       obj(o),
-       events(e)
-{
-       obj->signal_deleted.connect(sigc::mem_fun(this, &Slot::obj_deleted));
-}
-
-} // namespace Msp
diff --git a/source/core/poller.h b/source/core/poller.h
deleted file mode 100644 (file)
index dcd3658..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-This file is part of libmspframework
-Copyright © 2006 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-#ifndef MSP_FRAMEWORK_POLLER_H_
-#define MSP_FRAMEWORK_POLLER_H_
-
-#ifdef WIN32
-#include "win32poll.h"
-#else
-#include <sys/poll.h>
-#endif
-#include <vector>
-#include <sigc++/sigc++.h>
-#include "mutex.h"
-
-namespace Msp {
-
-class Pollable;
-
-class Poller
-{
-public:
-       class Slot
-       {
-       public:
-               sigc::signal<void, short> signal_event;
-
-               Slot(Pollable *, short);
-               Pollable *get_object() const { return obj; }
-               short    get_events() const  { return events; }
-       private:
-               Pollable *obj;
-               short    events;
-               
-               void obj_deleted() { obj=0; }
-       };
-
-       Slot &add_pollable(Pollable *, short);
-       int  poll(int =0);
-private:
-       std::list<Slot *>   slots;
-       std::vector<pollfd> pfd;
-       Mutex               slots_mutex;
-       Mutex               pfd_mutex;
-       bool                dirty;
-
-       void remove_stale_slots();
-       void rebuild_pfd();
-       void pollable_deleted(Pollable *);
-};
-
-};
-
-#endif
index 7006eafc51ae5e8c43d938c9f8d04824fbc5e03c..9107a763aa0416e111d47390ffecda7cc0163c77 100644 (file)
@@ -1,5 +1,5 @@
 /*
-This file is part of libmspframework
+This file is part of libmspcore
 Copyright © 2006  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
index b060947b57e0d0aaf661b9a04c1141f4c3f3d3dc..1cf3cd6ad11b44402eacca11d415d9df60941916 100644 (file)
@@ -1,5 +1,5 @@
 /*
-This file is part of libmspframework
+This file is part of libmspcore
 Copyright © 2006  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
index 6858ce9999b8ba2211db353802acfa2750811125..c7981cc4bcff9e24110d241768bf8e790d1c18a8 100644 (file)
@@ -1,5 +1,5 @@
 /*
-This file is part of libmspframework
+This file is part of libmspcore
 Copyright © 2006 Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
index 2b0766c68ba7fbd0d443265d30d58628ddda76f8..937d161938b20aad593653bbe99ed882aeb77156 100644 (file)
@@ -1,5 +1,5 @@
 /*
-This file is part of libmspframework
+This file is part of libmspcore
 Copyright © 2006 Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
index bf0831379704e9d4d51de787c0fbc4d4093b2306..885c5231b81fde3e363a93af16f3b67940fcf8f1 100644 (file)
@@ -1,5 +1,5 @@
 /*
-This file is part of libmspframework
+This file is part of libmspcore
 Copyright © 2006  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
diff --git a/source/core/win32poll.h b/source/core/win32poll.h
deleted file mode 100644 (file)
index f39d53e..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-This file is part of libmspframework
-Copyright © 2006 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-#ifndef MSP_FRAMEWORK_WIN32POLL_H_
-#define MSP_FRAMEWORK_WIN32POLL_H_
-
-#ifdef WIN32
-// From Linux sys/poll.h
-struct pollfd
-{
-       int fd;                 /* File descriptor to poll.  */
-       short int events;       /* Types of events poller cares about.  */
-       short int revents;      /* Types of events that actually occurred.  */
-};
-
-#ifndef POLLIN
-// From Linux pth.h
-#define POLLIN         0x0001  /* any readable data available   */
-#endif
-
-#ifndef POLLNVAL
-// From Linux pth.h
-#define POLLNVAL       0x0020  /* requested events "invalid"    */
-#endif
-
-#endif // Win32
-#endif
diff --git a/source/time/Module b/source/time/Module
deleted file mode 100644 (file)
index 9ccc1f2..0000000
+++ /dev/null
@@ -1 +0,0 @@
-installheaders="time"
index 891d56007a0316ff5b5a447383aaa72a6dd7ee54..acf9eeffaec66925f6175154883ac33628ebab95 100644 (file)
@@ -1,5 +1,5 @@
 /*
-This file is part of libmspframework
+This file is part of libmspcore
 Copyright © 2006  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
index 96dc7604f48e3b8ccca9ace1eeeae8cdc7fcff99..5c5b633abdc9a3d233977df0dcf27e64fe81f5ed 100644 (file)
@@ -1,5 +1,5 @@
 /*
-This file is part of libmspframework     
+This file is part of libmspcore     
 Copyright © 2006  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
index 3d4aec5ff4a8f6307ceaea732484e8c779b89f10..e716d322c68bad10cad62efc1a8a8600e737bd17 100644 (file)
@@ -1,5 +1,5 @@
 /*
-This file is part of libmspframework     
+This file is part of libmspcore     
 Copyright © 2006  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
index ef7ea8be0446f33a83af952ef33977a0f627e0c6..369a78c96e089a1e1413fe2a360b241b43b5f2b7 100644 (file)
@@ -1,5 +1,5 @@
 /*
-This file is part of libmspframework     
+This file is part of libmspcore     
 Copyright © 2006  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
index da4e457f8b1be6be0c4aa619274c81be80b183dc..984333da7a357edb51d9464c9b01baa890e5739b 100644 (file)
@@ -1,5 +1,5 @@
 /*
-This file is part of libmspframework     
+This file is part of libmspcore     
 Copyright © 2006  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
index d435d2e7b9642a63eb0f0af97421f5bcf64747ab..c9d5d1769fabda30a72d6104042e29c77c72fc84 100644 (file)
@@ -1,5 +1,5 @@
 /*
-This file is part of libmspframework     
+This file is part of libmspcore     
 Copyright © 2006  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
index a157c291d80a70f71a4b09bdde35a6a076fc1e41..98d2ae90780eef2893a1b94bed61f2754d7bbcbf 100644 (file)
@@ -1,5 +1,5 @@
 /*
-This file is part of libmspframework     
+This file is part of libmspcore     
 Copyright © 2006  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
index e8c048084f1861732880b17c5f38cf22cbc567e7..d6b63328a32d32a3519da8f6dd0bd20b093e602e 100644 (file)
@@ -1,5 +1,5 @@
 /*
-This file is part of libmspframework     
+This file is part of libmspcore     
 Copyright © 2006  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */
index 9efe39a3715bf0cb40f486bfd9872aa08765e48e..e16cb65649e7e0bac017035b83ef2435a6eb674e 100644 (file)
@@ -1,5 +1,5 @@
 /*
-This file is part of libmspframework     
+This file is part of libmspcore     
 Copyright © 2006  Mikko Rasa, Mikkosoft Productions
 Distributed under the LGPL
 */