home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1999 November / PCONLINE_11_99.ISO / filesbbs / OS2 / MMSRC029.ZIP / mmail-0.29 / mmail / mmail.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-07-25  |  10.0 KB  |  444 lines

  1. /*
  2.  * MultiMail offline mail reader
  3.  * mmail class
  4.  
  5.  Copyright (c) 1996 Toth Istvan <stoty@vma.bme.hu>
  6.  Copyright (c) 1999 William McBrine <wmcbrine@clark.net>
  7.  
  8.  Distributed under the GNU General Public License.
  9.  For details, see the file COPYING in the parent directory. */
  10.  
  11. #ifndef MMAIL_H 
  12. #define MMAIL_H
  13.  
  14. #define MM_NAME "MultiMail"
  15.  
  16. #include "misc.h"
  17. #include "resource.h"
  18. #include "../interfac/mysystem.h"
  19.  
  20. #include <cctype>
  21. #include <cstdlib>
  22. #include <cstring>
  23.  
  24. // Number of the Reply area
  25. #define REPLY_AREA 0
  26.  
  27. // Area types -- bit f.
  28. enum {COLLECTION = 1, REPLYAREA = 2, ACTIVE = 4, ALIAS = 8, NETMAIL = 16,
  29.         INTERNET = 32, PUBLIC = 64, PRIVATE = 128, LATINCHAR = 256,
  30.     ECHO = 512, PERSONLY = 1024, PERSALL = 2048, SUBKNOWN = 4096,
  31.     ADDED = 8192, DROPPED = 16384, OFFCONFIG = 32768};
  32.  
  33. // Mail statuses -- bit f.
  34. enum {MS_READ = 1, MS_REPLIED = 2, MS_MARKED = 4};
  35.  
  36. // For letter_list::sort
  37. enum {LS_SUBJ, LS_MSGNUM, LS_FROM, LS_TO};
  38.  
  39. enum pktstatus {PKT_OK, UNCOMP_FAIL, PTYPE_UNK, NEW_DIR, PKT_UNFOUND};
  40.  
  41. class mmail;
  42. class resource;
  43. class file_header;
  44. class file_list;
  45. class area_header;
  46. class area_list;
  47. class letter_header;
  48. class letter_list;
  49. class specific_driver;
  50. class reply_driver;
  51. class driver_list;
  52. class read_class;
  53.  
  54. class net_address
  55. {
  56.     char *inetAddr;
  57.  
  58.     void copy(net_address &);
  59.  public:
  60.     int zone, net, node, point;
  61.     bool isInternet, isSet;
  62.  
  63.     net_address();
  64.     net_address(net_address &);
  65.     ~net_address();
  66.     bool operator==(net_address &);
  67.     net_address &operator=(const char *);
  68.     net_address &operator=(net_address &);
  69.     operator const char *();
  70. };
  71.  
  72. class mmail
  73. {
  74.  public:
  75.     resource *resourceObject;
  76.     file_list *workList;
  77.     driver_list *driverList;
  78.     area_list *areaList;
  79.     letter_list *letterList;
  80.  
  81.     mmail();
  82.     ~mmail();
  83.     pktstatus selectPacket(const char *);
  84.     void Delete();
  85.     bool saveRead();
  86.     file_header *getFileList();
  87.     file_header **getBulletins();
  88.     bool checkForReplies();
  89.     bool makeReply();
  90.     void deleteReplies();
  91.     void openReply();
  92.     bool getOffConfig();
  93. };    
  94.  
  95. class file_header
  96. {
  97.     char *name;
  98.     time_t date;
  99.     off_t size;
  100.  public:
  101.     file_header *next;
  102.  
  103.     file_header(const char *, time_t, off_t);
  104.     ~file_header();
  105.  
  106.     const char *getName() const;
  107.     time_t getDate() const;
  108.     off_t getSize() const;
  109. };
  110.  
  111. class file_list
  112. {
  113.     file_header **files;
  114.     char *DirName;
  115.     size_t dirlen;
  116.     int noOfFiles, activeFile;
  117.     bool sorttype, dirlist;
  118.  
  119.     void initFiles();
  120.     friend int fnamecomp(const void *, const void *);
  121.     friend int ftimecomp(const void *, const void *);
  122.     void sort();
  123.  public:
  124.     file_list(const char *, bool = false, bool = false);
  125.     ~file_list();
  126.  
  127.     void resort();
  128.  
  129.     int getNoOfFiles() const;
  130.     const char *getDirName() const;
  131.     void gotoFile(int);
  132.     const char *changeDir(const char * = 0);
  133.     int changeName(const char *);
  134.  
  135.     const char *getName() const;
  136.     time_t getDate() const;
  137.     off_t getSize() const;
  138.  
  139.     const char *getNext(const char *);
  140.     file_header *getNextF(const char *);
  141.     const char *exists(const char *);
  142.     file_header *existsF(const char *);
  143.  
  144.     void addItem(file_header **, const char *, int &);
  145.  
  146.     const char *expandName(const char *);
  147.     FILE *ftryopen(const char *, const char *);
  148.     void kill();
  149. };
  150.  
  151. class area_header
  152. {
  153.     mmail *mm;
  154.     specific_driver *driver;
  155.     const char *shortName, *name, *description, *areaType;
  156.     int noOfLetters, noOfPersonal, num, maxtolen;
  157.     unsigned type;
  158.  public:
  159.     area_header(mmail *, int, const char *, const char *, const char *,
  160.         const char *, unsigned, int, int, int);
  161.     inline const char *getShortName() const;
  162.     inline const char *getName() const;
  163.     inline const char *getDescription() const;
  164.     inline const char *getAreaType() const;
  165.     inline unsigned getType() const;
  166.      inline int getNoOfLetters() const;
  167.     inline int getNoOfUnread();
  168.     inline int getNoOfMarked();
  169.     inline int getNoOfPersonal() const;
  170.     inline bool getUseAlias() const;
  171.     inline bool isCollection() const;
  172.     inline bool isReplyArea() const;
  173.     inline bool isNetmail() const;
  174.     inline bool isInternet() const;
  175.     inline bool isEmail() const;
  176.     inline bool isUsenet() const;
  177.     inline bool isLatin() const;
  178.     inline bool hasTo() const;
  179.     inline bool hasPublic() const;
  180.     inline bool hasPrivate() const;
  181.     inline int maxToLen() const;
  182.     inline bool hasOffConfig() const;
  183.     inline void Add();
  184.     inline void Drop();
  185.     bool isActive() const;
  186. };
  187.  
  188. class area_list
  189. {
  190.     mmail *mm;
  191.     area_header **areaHeader;
  192.     int no, noActive, current, *activeHeader;
  193.     bool shortlist;
  194.  public:
  195.     area_list(mmail *);
  196.     ~area_list();
  197.     void relist();
  198.  
  199.     const char *getShortName() const;
  200.     const char *getName() const;
  201.     const char *getName(int);
  202.     const char *getDescription() const;
  203.     const char *getDescription(int);
  204.     const char *getAreaType() const;
  205.     unsigned getType() const;
  206.     int getNoOfLetters() const;
  207.     int getNoOfUnread() const;
  208.     int getNoOfMarked() const;
  209.     int getNoOfPersonal() const;
  210.     bool getUseAlias() const;
  211.     bool isCollection() const;
  212.     bool isReplyArea() const;
  213.     bool isEmail() const;
  214.     bool isNetmail() const;
  215.     bool isInternet() const;
  216.     bool isUsenet() const;
  217.     bool isLatin() const;
  218.     bool hasTo() const;
  219.     bool hasPublic() const;
  220.     bool hasPrivate() const;
  221.     int maxToLen() const;
  222.     bool hasOffConfig() const;
  223.     void Add();
  224.     void Drop();
  225.  
  226.     bool isShortlist();
  227.     void getLetterList();
  228.     void enterLetter(int, const char *, const char *, const char *,
  229.             const char *, int, bool, net_address &,
  230.             const char *, int);
  231.     void killLetter(int);
  232.     void refreshArea();
  233.     void gotoArea(int);
  234.     void gotoActive(int);
  235.     int getAreaNo() const;
  236.     int getActive();
  237.     int noOfAreas() const;
  238.     int noOfActive() const;
  239.     int findNetmail() const;
  240.     int findInternet() const;
  241.     bool anyChanged() const;
  242. };
  243.  
  244. class letter_header
  245. {
  246.     driver_list *dl;
  247.     read_class *readO;
  248.     specific_driver *driver;
  249.     char *subject, *to, *from, *date, *msgid;
  250.     int replyTo, LetterID, AreaID, length, msgNum;
  251.     bool privat, personal, charset;
  252.     net_address netAddr;
  253.  public:
  254.     letter_header(mmail *, const char *, const char *, const char *,
  255.         const char *, const char *, int, int, int, int, bool, int,
  256.         specific_driver *, net_address &, bool = false);
  257.     ~letter_header();
  258.  
  259.     void changeSubject(const char *);
  260.     void changeTo(const char *);
  261.     void changeFrom(const char *);
  262.     void changeMsgID(const char *);
  263.  
  264.     const char *getSubject() const;
  265.     const char *getTo() const;
  266.     const char *getFrom() const;
  267.     const char *getMsgID() const;
  268.     net_address &getNetAddr();
  269.     int getReplyTo() const;
  270.     bool getPrivate() const;
  271.     inline specific_driver *getDriver() const;
  272.     inline const char *getDate() const;
  273.     inline const char *getBody();
  274.     int getLetterID() const;
  275.     int getAreaID() const;
  276.     inline int getMsgNum() const;
  277.     inline int getLength() const;
  278.     inline bool isPersonal() const;
  279.     inline bool isLatin() const;
  280.  
  281.     void setLatin(bool);
  282.  
  283.     inline bool getRead();
  284.     inline void setRead();
  285.     inline int getStatus();
  286.     inline void setStatus(int);
  287. };
  288.  
  289. class letter_list
  290.     driver_list *dl;
  291.     specific_driver *driver;
  292.     read_class *readO;
  293.     letter_header **letterHeader;
  294.     int noOfLetters, noActive, areaNumber, currentLetter;
  295.     int *activeHeader;
  296.     bool isColl, shortlist;
  297.  
  298.     void init();
  299.     void cleanup();
  300.     friend int lettercomp(const void *, const void *);
  301.     friend int lmsgncomp(const void *, const void *);
  302.     void sort();
  303.  public:
  304.     letter_list(mmail *, int, bool);
  305.     ~letter_list();
  306.     void relist();
  307.     void resort();
  308.  
  309.     const char *getSubject() const;
  310.     const char *getTo() const;
  311.     const char *getFrom() const;
  312.     const char *getDate() const;
  313.     const char *getMsgID() const;
  314.     const char *getBody();
  315.     net_address &getNetAddr();
  316.     int getReplyTo() const;
  317.     int getMsgNum() const;
  318.     int getAreaID() const;
  319.     bool getPrivate() const;
  320.     int getLength() const;
  321.     bool isPersonal() const;
  322.     bool isLatin() const;
  323.  
  324.     int getStatus();
  325.     void setStatus(int);
  326.     bool getRead();
  327.     void setRead();
  328.     
  329.     void rrefresh();
  330.     bool findReply(int, int);
  331.     int noOfLetter() const;
  332.     int noOfActive() const;
  333.     void gotoLetter(int);
  334.     void gotoActive(int);
  335.     int getCurrent() const;
  336.     int getActive() const;
  337. };
  338.  
  339. class driver_list
  340. {
  341.     struct driver_struct {
  342.         specific_driver *driver;
  343.         read_class *read;
  344.         int offset;
  345.     } driverList[2];
  346.  
  347.     int noOfDrivers, attributes;
  348.  public:
  349.     driver_list(mmail *);
  350.     ~driver_list();
  351.     int getNoOfDrivers() const;
  352.     specific_driver *getDriver(int);
  353.     reply_driver *getReplyDriver();
  354.     read_class *getReadObject(specific_driver *);
  355.     int getOffset(specific_driver *);
  356.     bool hasPersonal() const;
  357.     bool useTearline() const;
  358. };
  359.  
  360. class read_class
  361. {
  362.  public:
  363.     virtual ~read_class();
  364.     virtual void setRead(int, int, bool) = 0;
  365.     virtual bool getRead(int, int) = 0;
  366.     virtual void setStatus(int, int, int) = 0;
  367.     virtual int getStatus(int, int) = 0;
  368.     virtual int getNoOfUnread(int) = 0;
  369.     virtual int getNoOfMarked(int) = 0;
  370.     virtual bool saveAll() = 0;
  371. };
  372.  
  373. class main_read_class : public read_class
  374. {
  375.     resource *ro;
  376.     int noOfAreas, **readStore, *noOfLetters;
  377.  public:
  378.     main_read_class(mmail *, specific_driver *);
  379.     ~main_read_class();
  380.     void setRead(int, int, bool);
  381.     bool getRead(int, int);
  382.     void setStatus(int, int, int);
  383.     int getStatus(int, int);
  384.     int getNoOfUnread(int);
  385.     int getNoOfMarked(int);
  386.     bool saveAll();
  387.     const char *readFilePath(const char *);
  388. };
  389.  
  390. class reply_read_class: public read_class
  391. {
  392.  public:
  393.     reply_read_class(mmail *, specific_driver *);
  394.     ~reply_read_class();
  395.     void setRead(int, int, bool);
  396.     bool getRead(int, int);
  397.     void setStatus(int, int, int);
  398.     int getStatus(int, int);
  399.     int getNoOfUnread(int);
  400.     int getNoOfMarked(int);
  401.     bool saveAll();
  402. };    
  403.  
  404. struct bodytype
  405. {
  406.     long pointer, msgLength;
  407. };
  408.  
  409. class specific_driver
  410. {
  411.  public:
  412.     virtual ~specific_driver();
  413.     virtual int getNoOfAreas() = 0;
  414.     virtual area_header *getNextArea() = 0;
  415.     virtual void selectArea(int) = 0;
  416.     virtual int getNoOfLetters() = 0;
  417.     virtual void resetLetters() = 0;
  418.     virtual letter_header *getNextLetter() = 0;
  419.     virtual const char *getBody(letter_header &) = 0;
  420.     virtual file_header *getFileList() = 0;
  421.     virtual file_header **getBulletins() = 0;
  422. };
  423.  
  424. class reply_driver : public specific_driver
  425. {
  426.  public:    
  427.     virtual ~reply_driver();
  428.     virtual bool checkForReplies() = 0;
  429.     virtual void init() = 0;
  430.     virtual void enterLetter(letter_header &, const char *, int) = 0;
  431.     virtual void killLetter(int) = 0;
  432.     virtual area_header *refreshArea() = 0;
  433.     virtual bool makeReply() = 0;
  434.     virtual void deleteReplies() = 0;
  435.     virtual bool getOffConfig() = 0;
  436.     virtual bool makeOffConfig() = 0;
  437. };
  438.  
  439. // Letter sort type flag
  440. extern int lsorttype;
  441.  
  442. #endif
  443.