// $Id: mailbox.h,v 1.5 1995-01-16 15:10:24 guy Exp $ /* si', trattasi di -*-c++-*- */ // Mailbox.h // Message passing between applications and command lines #ifndef __MAILBOX_H #define __MAILBOX_H #ifndef __STRINGS_H #include #endif // TMessage flags #define MSG_READ (0x01) class TMessage : public TObject // basic message { TString16 _from; TString16 _to; TString80 _subject; TString _text; byte _flags; int _number; friend class TMailbox; protected: void setread() { _flags |= MSG_READ; } bool isread() { return _flags & MSG_READ; } int number(int n = -1) { return (n == -1 ? _number : (_number = n)); } public: const TString& from() const { return _from; } const TString& to() const { return _to; } const TString& subject() const { return _subject; } const TString& body() const { return _text; } const TString& from(const char* f) { return _from = f; } const TString& to(const char* t) { return _to = t; } const TString& subject(const char* s) { return _subject = s; } const TString& body(const char* b) { return _text = b; } void send(); TMessage(const char* to, const char* sub, const char* text, const char* from = NULL); }; class TMailbox : public TObject { TFilename _path; TArray _msgs; int _lastread, n_new; long _lastpos; int _cnt; protected: void reread(); TMessage* next_read(); TMessage* next_unread(); public: int check() // return { reread(); return n_new; } // n. of messages waiting void restart() { _cnt = 0;} // reinitialize read phase int items() // n. of read+unread messages { return _msgs.items(); } // in mailbox TMessage* next(bool read = FALSE); // get next message; if // TRUE passed, get read mess. too TMessage* next_s(char* s, bool read = FALSE); // next w/ matching subject TMessage* next_f(char* f, bool read = FALSE); // next w/ matching sender void send(TMessage& m); // send a message void sendcmd(int argc, char* argv[], char* to); // transform commandline args // in mail messages // NOT IMPLEMENTED char* readcmd(char* to = NULL); // transform mailbox in // cmdline parms for calling // non_compliant applications // NOT IMPLEMENTED TMessage* get(int n) // nth message { return (TMessage*)_msgs.objptr(n); } TMailbox::TMailbox(const char* appname = NULL); virtual ~TMailbox(); }; // instead of using commandline args directly, user posts // messages to application, then calls it without arguments // If the application is called by the user with command_line // arguments, sendcmd parses them and translates to messages // according to the following rules: // // from is "cmdline" // // subject comes from arguments of type -opt=value // (opt becomes subject and value becomes body) // // args like -opt="val, val, val" create // one message for each val, with the same subject=opt // // -opt arg creates subject=opt and empty body // // one-word arguments create a message with "null" subject // // A mailbox should be member of applicat and sendcmd should be // called automatically upon startup // Non compliant applications (which do not use mailbox) can be // called consistently by sending messages, // appending TMailbox::readcmd(appname) to // their name and doing an exec() #endif