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

  1. /*
  2.  * MultiMail offline mail reader
  3.  * driver_list
  4.  
  5.  Copyright (c) 1996 Toth Istvan <stoty@vma.bme.hu>
  6.  Copyright (c) 1999 William McBrine <wmcbrine@clark.net>,
  7.                     Robert Vukovic <vrobert@uns.ns.ac.yu>
  8.  
  9.  Distributed under the GNU General Public License.
  10.  For details, see the file COPYING in the parent directory. */
  11.  
  12. #include "bw.h"
  13. #include "qwk.h"
  14.  
  15. enum pktype {PKT_QWK, PKT_BW, PKT_UNDEF};
  16.  
  17. enum {PERSONAL = 1, TEARLINE = 2};
  18.  
  19. // ------------------------
  20. // Some virtual destructors
  21. // ------------------------
  22.  
  23. specific_driver::~specific_driver()
  24. {
  25. }
  26.  
  27. reply_driver::~reply_driver()
  28. {
  29. }
  30.  
  31. // ------------------
  32. // DriverList methods
  33. // ------------------
  34.  
  35. driver_list::driver_list(mmail *mm)
  36. {
  37.     pktype mode = PKT_UNDEF;
  38.     file_list *wl = mm->workList;
  39.  
  40.     // This is the new way to set the packet type
  41.     if (wl->exists("control.dat") && wl->exists("messages.dat"))
  42.         mode = PKT_QWK;
  43.     else
  44.         if (wl->exists(".inf"))
  45.             mode = PKT_BW;
  46.  
  47.     switch (mode) {
  48.     case PKT_BW:
  49.         driverList[1].driver = new bluewave(mm);
  50.         attributes = PERSONAL;
  51.         break;
  52.     case PKT_QWK:
  53.         driverList[1].driver = new qwkpack(mm);
  54.         attributes = TEARLINE;
  55.         break;
  56.     default:;
  57.         driverList[1].driver = 0;
  58.     }
  59.  
  60.     if (mode != PKT_UNDEF)
  61.         driverList[1].read = new main_read_class(mm,
  62.             driverList[1].driver);
  63.     else
  64.         driverList[1].read = 0;
  65.  
  66.     switch (mode) {
  67.     case PKT_BW:
  68.         driverList[0].driver = new bwreply(mm, driverList[1].driver);
  69.         break;
  70.     case PKT_QWK:
  71.         driverList[0].driver = new qwkreply(mm, driverList[1].driver);
  72.         break;
  73.     default:;
  74.         driverList[0].driver = 0;
  75.     }
  76.  
  77.     if (mode != PKT_UNDEF)
  78.         driverList[0].read = new reply_read_class(mm,
  79.             driverList[0].driver);
  80.     else
  81.         driverList[0].read = 0;
  82.  
  83.     driverList[0].offset = REPLY_AREA;
  84.     driverList[1].offset = REPLY_AREA + 1;
  85.  
  86.     noOfDrivers = (mode != PKT_UNDEF) ? 2 : 0;
  87. };
  88.  
  89. driver_list::~driver_list()
  90. {
  91.     while (noOfDrivers--) {
  92.         delete driverList[noOfDrivers].read;
  93.         delete driverList[noOfDrivers].driver;
  94.     }
  95. };
  96.  
  97. int driver_list::getNoOfDrivers() const
  98. {
  99.     return noOfDrivers;
  100. };
  101.  
  102. specific_driver *driver_list::getDriver(int areaNo)
  103. {
  104.     int c = (areaNo != REPLY_AREA);
  105.     return driverList[c].driver;
  106. };
  107.  
  108. reply_driver *driver_list::getReplyDriver()
  109. {
  110.     return (reply_driver *) driverList[0].driver;
  111. };
  112.  
  113. read_class *driver_list::getReadObject(specific_driver *driver)
  114. {
  115.     int c = (driver == driverList[1].driver);
  116.     return driverList[c].read;
  117. };
  118.  
  119. int driver_list::getOffset(specific_driver *driver)
  120. {
  121.     int c = (driver == driverList[1].driver);
  122.     return driverList[c].offset;
  123. };
  124.  
  125. bool driver_list::hasPersonal() const
  126. {
  127.     return !(!(attributes & PERSONAL));
  128. }
  129.  
  130. bool driver_list::useTearline() const
  131. {
  132.     return !(!(attributes & TEARLINE));
  133. }
  134.