home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / me100.zip / sample.zip / NOTEBOOK.CPP < prev    next >
Text File  |  1996-05-27  |  21KB  |  688 lines

  1. #define INCL_WINSHELLDATA
  2. #include <ibase.hpp>
  3. #include <iapp.hpp>
  4. #include <ifont.hpp>
  5. #include <icolor.hpp>
  6. #include <icombobx.hpp>
  7. #include <ilistbox.hpp>
  8. #include <ispintxt.hpp>
  9. #include <ipushbut.hpp>
  10. #include <icheckbx.hpp>
  11. #include <iprofile.hpp>
  12. #include <imsgbox.hpp>
  13. #include <ithread.hpp>
  14. #include <isysmenu.hpp>
  15. #include <fstream.h>
  16. #include <ifiledlg.hpp>
  17. #include <stdio.h>
  18. #include "notebook.hpp"
  19. #include "notebook.h"
  20. #include "\work\modemengine\modemengine.hpp"
  21. #include <os2.h>
  22.  
  23. int main()
  24. {
  25.    IFrameWindow::setDefaultStyle((IFrameWindow::defaultStyle() & ~IFrameWindow::sizingBorder & ~IFrameWindow::maximizeButton) | IFrameWindow::border);
  26.    GeneralSettings mainWindow(WND_MAIN);
  27.    mainWindow.show();
  28.    IApplication::current().run();
  29.    return 0;
  30. }
  31.  
  32. //**************************************************************************
  33. GeneralSettings :: GeneralSettings(unsigned long windowId)
  34.         :IFrameWindow(windowId)
  35.         ,reslib()
  36.         ,notebook(WND_NB, this, this, IRectangle()
  37.                         , INotebook::defaultStyle()
  38.                         | INotebook::solidBinding
  39.                   )
  40.         ,wnd_tab1(WND_TAB1, ¬ebook, ¬ebook, dialogResource)
  41.         ,comPort(DID_COMPORT, &wnd_tab1)
  42.         ,testOutput(DID_TESTOUTPUT, &wnd_tab1)
  43.         ,testbtn(DID_TESTBTN, &wnd_tab1)
  44.         ,wnd_tab2(WND_TAB2, ¬ebook, ¬ebook, dialogResource)
  45.         ,rings(DID_RINGS, &wnd_tab2)
  46.         ,quality(DID_QUALITY, &wnd_tab2)
  47.         ,silenceVal(DID_SILENCEVAL, &wnd_tab2)
  48.         ,silenceDel(DID_ENABLESILENCEDEL, &wnd_tab2)
  49.         ,silenceDet(DID_ENABLESILENCEDET, &wnd_tab2)
  50.         ,monitor(DID_MONITOR, &wnd_tab2)
  51.         ,wnd_tab3(WND_TAB3, ¬ebook, ¬ebook, dialogResource)
  52.         ,startOn(DID_STARTON, &wnd_tab3)
  53.         ,startMin(DID_STARTMIN, &wnd_tab3)
  54.         ,singleMbx(DID_SINGLEMBX, &wnd_tab3)
  55.         ,multipleMbx(DID_MULTIPLEMBX, &wnd_tab3)
  56.         ,powerOff(DID_POWEROFF, &wnd_tab3)
  57.         ,powerOn(DID_POWERON, &wnd_tab3)
  58.         ,statOutput(DID_STATOUTPUT, &wnd_tab3)
  59.         ,wnd_tab4(WND_TAB4, ¬ebook, ¬ebook, dialogResource)
  60.         ,greeting(DID_GREETING, &wnd_tab4)
  61.         ,messages(DID_MESSAGES, &wnd_tab4)
  62. {
  63.  
  64.   INotebook::PageSettings majorTab(INotebook::PageSettings::majorTab|
  65.                                    INotebook::PageSettings::statusTextOn |
  66.                                    INotebook::PageSettings::autoPageSize);
  67.  
  68.   notebook.setMajorTabSize(ISize(75,20));
  69.   notebook.setMajorTabBackgroundColor(IColor::paleGray);
  70.  
  71.   comPort.addAsLast("COM1");
  72.   comPort.addAsLast("COM2");
  73.   comPort.addAsLast("COM3");
  74.   comPort.addAsLast("COM4");
  75.  
  76.   majorTab.setTabText(TAB_1);
  77.   majorTab.setStatusText(TAB_1_STAT);
  78.   tab1= notebook.addLastPage(majorTab, &wnd_tab1);
  79.  
  80.   rings.addAsLast("1");
  81.   rings.addAsLast("2");
  82.   rings.addAsLast("3");
  83.   rings.addAsLast("4");
  84.   rings.addAsLast("5");
  85.   rings.addAsLast("6");
  86.  
  87.   quality.addAsLast("2");
  88.   quality.addAsLast("3");
  89.   quality.addAsLast("4");
  90.  
  91.   silenceVal.addAsLast("5");
  92.   silenceVal.addAsLast("10");
  93.  
  94.   majorTab.setTabText(TAB_2);
  95.   majorTab.setStatusText(TAB_2_STAT);
  96.   tab2= notebook.addLastPage(majorTab, &wnd_tab2);
  97.  
  98.   majorTab.setTabText(TAB_3);
  99.   majorTab.setStatusText(TAB_3_STAT);
  100.   tab3= notebook.addLastPage(majorTab, &wnd_tab3);
  101.  
  102.  
  103.   majorTab.setTabText(TAB_4);
  104.   majorTab.setStatusText(TAB_4_STAT);
  105.   tab4= notebook.addLastPage(majorTab, &wnd_tab4);
  106.  
  107.   greeting.setLimit(1024);
  108.  
  109.   setFont(IFont("Helv", 8));
  110.   setIcon(WND_MAIN);
  111.   sizeTo(ISize(450, 375));
  112.   setClient(¬ebook);
  113.  
  114.   ICommandHandler :: handleEventsFor(this);
  115.   ICommandHandler :: handleEventsFor(&wnd_tab1);
  116.   ICommandHandler :: handleEventsFor(&wnd_tab2);
  117.   ICommandHandler :: handleEventsFor(&wnd_tab3);
  118.   ICommandHandler :: handleEventsFor(&wnd_tab4);
  119.  
  120.   ISelectHandler :: handleEventsFor(this);
  121.   ISelectHandler :: handleEventsFor(&wnd_tab1);
  122.   ISelectHandler :: handleEventsFor(&wnd_tab2);
  123.   ISelectHandler :: handleEventsFor(&wnd_tab3);
  124.   ISelectHandler :: handleEventsFor(&wnd_tab4);
  125.  
  126.   power= off;
  127.  
  128.   loadSettings();
  129.  
  130. }
  131.  
  132. //**************************************************************************
  133. GeneralSettings :: ~GeneralSettings() {
  134.  
  135.   ICommandHandler :: stopHandlingEventsFor(this);
  136.   ICommandHandler :: stopHandlingEventsFor(&wnd_tab1);
  137.   ICommandHandler :: stopHandlingEventsFor(&wnd_tab2);
  138.   ICommandHandler :: stopHandlingEventsFor(&wnd_tab3);
  139.   ICommandHandler :: stopHandlingEventsFor(&wnd_tab4);
  140.  
  141.   ISelectHandler :: stopHandlingEventsFor(this);
  142.   ISelectHandler :: stopHandlingEventsFor(&wnd_tab1);
  143.   ISelectHandler :: stopHandlingEventsFor(&wnd_tab2);
  144.   ISelectHandler :: stopHandlingEventsFor(&wnd_tab3);
  145.   ISelectHandler :: stopHandlingEventsFor(&wnd_tab4);
  146.  
  147. }
  148.  
  149.  
  150.  
  151. //**************************************************************************
  152. Boolean GeneralSettings :: command (ICommandEvent &cmdEvent) {
  153.  
  154.   switch (cmdEvent.commandId()) {
  155.   case DID_CLEARBTN:
  156.      testOutput.removeAll();
  157.      break;
  158.  
  159.   case DID_SAVEBTN:
  160.      saveTest(testOutput);
  161.      return true;
  162.      break;
  163.  
  164.   case DID_SAVESTAT:
  165.      saveTest(statOutput);
  166.      return true;
  167.      break;
  168.  
  169.   case DID_CLEARSTAT:
  170.      statOutput.removeAll();
  171.      break;
  172.  
  173.   case DID_TESTBTN:
  174.      modemTest();
  175.      return true;
  176.      break;
  177.  
  178.   case DID_SELECTGREETING:
  179.      selectGreeting();
  180.      return true;
  181.      break;
  182.  
  183.   default:
  184.     break;
  185.   } /* endswitch */
  186.   return false;
  187. }
  188.  
  189.  
  190. //**************************************************************************
  191. Boolean GeneralSettings :: systemCommand (ICommandEvent &cmdEvent) {
  192.  
  193.   if (cmdEvent.commandId()==ISystemMenu::idClose) saveSettings();
  194.   return false;
  195. }
  196.  
  197. //**************************************************************************
  198. Boolean GeneralSettings :: selected(IControlEvent &event) {
  199.  
  200.   switch (event.controlId()) {
  201.  
  202.   case DID_POWERON:
  203.      if (power == off) {
  204.        modemAnswer();
  205.        power=on;
  206.      }
  207.      return true;
  208.      break;
  209.  
  210.   case DID_POWEROFF:
  211.      if (power == on) {
  212.        powerOff.disable();
  213.        powerOn.disable();
  214.        power=off;
  215.      }
  216.      return true;
  217.      break;
  218.  
  219.   default:
  220.     break;
  221.   } /* endswitch */
  222.   return false;
  223. }
  224.  
  225. //**************************************************************************
  226. void GeneralSettings :: loadSettings () {
  227.  
  228.   IProfile general("answer.ini");
  229.   general.setDefaultApplicationName("general");
  230.  
  231.   if (general.containsKeyName("comPort")) comPort.setText(general.elementWithKey("comPort"));
  232.   else comPort.setText("COM1");
  233.  
  234.   if (general.containsKeyName("quality")) quality.setText(general.elementWithKey("quality"));
  235.   else quality.setText("4");
  236.   if (general.containsKeyName("silenceVal")) silenceVal.setText(general.elementWithKey("silenceVal"));
  237.   else silenceVal.setText("5");
  238.   if (general.containsKeyName("rings")) rings.setText(general.elementWithKey("rings"));
  239.   else rings.setText("4");
  240.   if (general.containsKeyName("silenceDel")) {
  241.      if (general.elementWithKey("silenceDel")!="0") silenceDel.select();
  242.   }
  243.   if (general.containsKeyName("silenceDet")) {
  244.      if (general.elementWithKey("silenceDet")!="0") silenceDet.select();
  245.   }
  246.   if (general.containsKeyName("monitor")) {
  247.      if (general.elementWithKey("monitor")!="0") monitor.select();
  248.   }
  249.  
  250.   if (general.containsKeyName("startMin")) {
  251.      if (general.elementWithKey("startMin")!="0") startMin.select();
  252.   }
  253.  
  254.   if (general.containsKeyName("startOn")) {
  255.      if (general.elementWithKey("startOn")!="0") startOn.select();
  256.   }
  257.  
  258.   if (general.containsKeyName("singleMbx")) {
  259.      if (general.elementWithKey("singleMbx")!="0") singleMbx.select();
  260.      else multipleMbx.select();
  261.   } else singleMbx.select();
  262.  
  263.   if (general.containsKeyName("greeting"))
  264.      greeting.setText(general.elementWithKey("greeting"));
  265.  
  266.   powerOff.select();
  267. }
  268.  
  269.  
  270. //**************************************************************************
  271. void GeneralSettings :: saveSettings () {
  272.  
  273.   IProfile general("answer.ini");
  274.   general.setDefaultApplicationName("general");
  275.   general.addOrReplaceElementWithKey("comPort", comPort.text());
  276.  
  277.   general.addOrReplaceElementWithKey("quality", quality.text());
  278.   general.addOrReplaceElementWithKey("silenceVal", silenceVal.text());
  279.   general.addOrReplaceElementWithKey("rings", rings.text());
  280.   general.addOrReplaceElementWithKey("silenceDet", silenceDet.isSelected() ? "1" : "0");
  281.   general.addOrReplaceElementWithKey("silenceDel", silenceDel.isSelected() ? "1" : "0");
  282.   general.addOrReplaceElementWithKey("monitor", monitor.isSelected() ? "1" : "0");
  283.  
  284.   general.addOrReplaceElementWithKey("startMin", startMin.isSelected() ? "1" : "0");
  285.   general.addOrReplaceElementWithKey("startOn", startOn.isSelected() ? "1" : "0");
  286.   general.addOrReplaceElementWithKey("singleMbx", singleMbx.isSelected() ? "1" : "0");
  287.  
  288.   general.addOrReplaceElementWithKey("greeting", greeting.text());
  289.  
  290. }
  291.  
  292.  
  293. //**************************************************************************
  294. void GeneralSettings :: saveTest(IListBox &listbox) {
  295.  
  296.    IFileDialog::Settings settings;
  297.    settings.setSaveAsDialog();
  298.    IFileDialog fileDialog(0, this, settings);
  299.    if (fileDialog.pressedOK()) {
  300.       ofstream fout(fileDialog.fileName());
  301.       if (!fout.good()) {
  302.          IMessageBox msgbox(this);
  303.          msgbox.show(MSG_ERR_FILEOPEN, IMessageBox::okButton | IMessageBox::errorIcon);
  304.          return;
  305.       }
  306.       for (int i=0; i< listbox.count() ; i++ )
  307.          fout << listbox.itemText(i) << endl;
  308.       fout.close();
  309.    }
  310. }
  311.  
  312.  
  313. //**************************************************************************
  314. void GeneralSettings :: selectGreeting() {
  315.  
  316.    IFileDialog::Settings settings;
  317.    settings.setOpenDialog();
  318.    settings.setFileName("*.msg");
  319.    IFileDialog fileDialog(0, this, settings);
  320.    if (fileDialog.pressedOK()) {
  321.       greeting.setText(fileDialog.fileName());
  322.    }
  323. }
  324.  
  325. //**************************************************************************
  326. void GeneralSettings :: modemTest () {
  327.  
  328.   testbtn.disable();
  329.   testThread.start(new IThreadMemberFn<GeneralSettings>(*this, GeneralSettings::modemTestThread));
  330. }
  331.  
  332. //**************************************************************************
  333. void GeneralSettings :: modemTestThread () {
  334.  
  335.   Boolean  testPassed=false;
  336.   IString  reason;
  337.   MODEM_ENGINE::MODEMRESPONSE mr;
  338.   IMessageBox msgbox(this);
  339.  
  340.   testOutput.addAsLast(MSG_MODEMTESTSTART);
  341.  
  342.   do {
  343.     if (IMessageBox::cancel == msgbox.show(MSG_PREMODEMTEST, IMessageBox::okCancelButton | IMessageBox::queryIcon)) {
  344.        reason= reslib.loadString(MSG_ERR_TESTABORT);
  345.        break;
  346.     }
  347.     // Let the test begin
  348.  
  349.     MODEM_ENGINE me((char*)comPort.text(), MODEM_ENGINE::fc_rtscts_xonxoff, 6127181);
  350.     IString   sentToModem(reslib.loadString(MSG_SENTTOMODEM));
  351.  
  352.     if (me.mResultCode () != MODEM_ENGINE::noerror) {
  353.        reason= reslib.loadString(MSG_ERR_COMOPEN);
  354.        break;
  355.     }
  356.     testOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMTESTINIT));
  357.     me.mInitialize();
  358.     mr= modemResponse(me, &testOutput);
  359.     if (MODEM_ENGINE::none == mr.code || MODEM_ENGINE::error == mr.code) break;
  360.  
  361.     testOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMTESTQDEV));
  362.     me.vmQueryDevice();
  363.     mr= modemResponse(me, &testOutput);
  364.     if (MODEM_ENGINE::none == mr.code || MODEM_ENGINE::error == mr.code) break;
  365.  
  366.     testOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMTESTQMOD));
  367.     me.vmQueryModel();
  368.     mr= modemResponse(me, &testOutput);
  369.     if (MODEM_ENGINE::none == mr.code || MODEM_ENGINE::error == mr.code) break;
  370.  
  371.     testOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMTESTQMAN));
  372.     me.vmQueryManufacturer ();
  373.     mr= modemResponse(me, &testOutput);
  374.     if (MODEM_ENGINE::none == mr.code || MODEM_ENGINE::error == mr.code) break;
  375.  
  376.     testOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMTESTQREV));
  377.     me.vmQueryRevision ();
  378.     mr= modemResponse(me, &testOutput);
  379.     if (MODEM_ENGINE::none == mr.code || MODEM_ENGINE::error == mr.code) break;
  380.  
  381.     testOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMTESTSDEV));
  382.     me.vmSetDevice ();
  383.     mr= modemResponse(me, &testOutput);
  384.     if (MODEM_ENGINE::none == mr.code || MODEM_ENGINE::error == mr.code) break;
  385.  
  386.     testOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMTESTQCOMP));
  387.     me.vmQueryCompression ();
  388.     mr= modemResponse(me, &testOutput);
  389.     if (MODEM_ENGINE::none == mr.code || MODEM_ENGINE::error == mr.code) break;
  390.  
  391.     testOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMTESTQDEV2));
  392.     me.vmQueryDevices ();
  393.     mr= modemResponse(me, &testOutput);
  394.     if (MODEM_ENGINE::none == mr.code || MODEM_ENGINE::error == mr.code) break;
  395.  
  396.     testOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMTESTINIT));
  397.     me.mInitialize();
  398.     mr= modemResponse(me, &testOutput);
  399.     if (MODEM_ENGINE::none == mr.code || MODEM_ENGINE::error == mr.code) break;
  400.  
  401.     testPassed= true;
  402.   } while ( false ); /* enddo */
  403.  
  404.   if (testPassed) {
  405.      reason= reslib.loadString(MSG_TESTPASSED);
  406.      msgbox.show(reason, IMessageBox::okButton | IMessageBox::informationIcon);
  407.   } else {
  408.      if (reason== "") {
  409.        switch (mr.code) {
  410.        case MODEM_ENGINE::error:
  411.           reason= reslib.loadString(MSG_ERR_GOTERROR);
  412.           break;
  413.        case MODEM_ENGINE::none:
  414.           reason= reslib.loadString(MSG_ERR_GOTNOTHING);
  415.           break;
  416.        } /* endswitch */
  417.      }
  418.      msgbox.show(reason, IMessageBox::okButton | IMessageBox::errorIcon);
  419.   } /* endif */
  420.  
  421.   testOutput.addAsLast(reason);
  422.   testOutput.addAsLast(MSG_MODEMTESTEND);
  423.   testOutput.setTop(testOutput.count());
  424.  
  425.   testbtn.enable();
  426. }
  427.  
  428. //**************************************************************************
  429. void GeneralSettings :: modemAnswer() {
  430.  
  431.  
  432.   answerThread.start(new IThreadMemberFn<GeneralSettings>(*this, GeneralSettings::modemAnswerThread));
  433. }
  434.  
  435. //**************************************************************************
  436. void GeneralSettings :: modemAnswerThread () {
  437.  
  438. #define __CHECK__ if (power == off) break;
  439. #define __ERROR__ if (MODEM_ENGINE::none == mr.code || MODEM_ENGINE::error == mr.code) break;
  440.  
  441.   statOutput.addAsLast(MSG_MODEMANSWERSTART);
  442.   statOutput.setTop(statOutput.count());
  443.  
  444.  
  445.   do {
  446.     ifstream greetingFile((char*)greeting.text(), ios::bin);
  447.     MODEM_ENGINE::MODEMRESPONSE mr;
  448.     MODEM_ENGINE me((char*)comPort.text(), MODEM_ENGINE::fc_rtscts_xonxoff, 6127181);
  449.     IString   sentToModem(reslib.loadString(MSG_SENTTOMODEM)), reason("");
  450.  
  451.     if (!greetingFile.good()) {
  452.        reason= reslib.loadString(MSG_ERR_NOGREETING);
  453.        break;
  454.     }
  455.  
  456.     if (me.mResultCode() != MODEM_ENGINE::noerror) {
  457.       break;
  458.     }
  459.  
  460.     while (true) {
  461.       statOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMTESTINIT));
  462.  
  463.       me.mInitialize();
  464.       __CHECK__
  465.       mr= modemResponse(me, &statOutput);
  466.       __CHECK__
  467.       __ERROR__
  468.       statOutput.addAsLast(MSG_WAITINGFORCALL);
  469.       statOutput.setTop(statOutput.count());
  470.  
  471.       mr= modemResponse(me, NULL, 10);
  472.       __CHECK__
  473.       while (mr.code != MODEM_ENGINE::ring) {
  474.          __CHECK__
  475.          mr= modemResponse(me, NULL, 10);
  476.       } /* endwhile */
  477.       __CHECK__
  478.  
  479.       // RING! Answer the damn thing!
  480.  
  481.       statOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMSETDEV));
  482.       me.vmSetDevice(MODEM_ENGINE::voice);
  483.       __CHECK__
  484.       mr= modemResponse(me, &statOutput);
  485.       __ERROR__
  486.       __CHECK__
  487.  
  488.       statOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMSETSPEED));
  489.       me.vmSetSpeed();
  490.       __CHECK__
  491.       mr= modemResponse(me, &statOutput);
  492.       __ERROR__
  493.       __CHECK__
  494.  
  495.       statOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMSETSILENCEDET));
  496.       me.vmSetSilenceDetection(silenceDet.isSelected());
  497.       __CHECK__
  498.       mr= modemResponse(me, &statOutput);
  499.       __ERROR__
  500.       __CHECK__
  501.  
  502.       statOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMSETSILENCEDEL));
  503.       me.vmSetSilenceDeletion(silenceDel.isSelected());
  504.       __CHECK__
  505.       mr= modemResponse(me, &statOutput);
  506.       __ERROR__
  507.       __CHECK__
  508.  
  509.       me.vmSetDeadmanTimer();
  510.       __CHECK__
  511.       mr= modemResponse(me, NULL);
  512.       __ERROR__
  513.       __CHECK__
  514.  
  515.       statOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMSETSILENCEVAL));
  516.       me.vmSetSilenceDetectionValue((BYTE) silenceVal.text().asInt());
  517.       __CHECK__
  518.       mr= modemResponse(me, &statOutput);
  519.       __ERROR__
  520.       __CHECK__
  521.  
  522.       statOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMSETQUALITY));
  523.       switch (quality.text().asInt()) {
  524.         case 2:
  525.         me.vmSetBits(MODEM_ENGINE::two);
  526.         break;
  527.         case 3:
  528.         me.vmSetBits(MODEM_ENGINE::three);
  529.         break;
  530.         case 4:
  531.         me.vmSetBits(MODEM_ENGINE::four);
  532.         break;
  533.       } // endswitch
  534.       __CHECK__
  535.       mr= modemResponse(me, &statOutput);
  536.       __ERROR__
  537.       __CHECK__
  538.  
  539.       statOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMSETLINE));
  540.       if (monitor.isSelected()) {
  541.         me.vmSetLine(MODEM_ENGINE::lineMonitor);
  542.       } else {
  543.         me.vmSetLine(MODEM_ENGINE::line);
  544.       }
  545.       __CHECK__
  546.       mr= modemResponse(me, &statOutput);
  547.       __ERROR__
  548.       __CHECK__
  549.  
  550.       statOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMANSWER));
  551.       me.mAnswer();
  552.       __CHECK__
  553.       mr= modemResponse(me, &statOutput, 10);
  554.       __ERROR__
  555.       if (MODEM_ENGINE::connect == mr.code) break;
  556.  
  557.       { HFILE com_port;
  558.         unsigned char buf[1024];
  559.         ULONG cbWritten=0;
  560.  
  561.         statOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMPLAYGREETING));
  562.         me.vmTransmit(com_port);
  563.         __CHECK__
  564.         mr= modemResponse (me, &statOutput);
  565.         __ERROR__
  566.         __CHECK__
  567.  
  568.         while (!greetingFile.eof()) {
  569.  
  570.            greetingFile.read(buf, sizeof(buf));
  571.            DosWrite(com_port, &buf, greetingFile.gcount(), &cbWritten);
  572.            __CHECK__
  573.         }
  574.       __CHECK__
  575.  
  576.       }
  577.       __CHECK__
  578.  
  579.  
  580.       statOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMGREETINGEND));
  581.       me.vmStopTransmit();
  582.       __CHECK__
  583.       mr= modemResponse (me, NULL, 50);
  584.       __CHECK__
  585.  
  586.       while (mr.code==MODEM_ENGINE::none) {
  587.          me.vmStopTransmit();
  588.          __CHECK__
  589.          mr= modemResponse (me, NULL, 50);
  590.          __CHECK__
  591.       }
  592.       __CHECK__
  593.  
  594.       statOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMBEEP));
  595.       me.vmBeep();
  596.       __CHECK__
  597.       mr= modemResponse(me, &statOutput);
  598.       __ERROR__
  599.       __CHECK__
  600.  
  601.       { FILE * message;
  602.         char c;
  603.  
  604.         // GET A GOOD NAME FOR THE MESSAGE
  605.         message= fopen ("test.msg", "wb");
  606.  
  607.         statOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMRECMSG));
  608.         me.vmReceive(fileno(message));
  609.         __CHECK__
  610.         mr= modemResponse(me, &statOutput);
  611.         __ERROR__
  612.         __CHECK__
  613.  
  614.         c=me.mWaitForDLECode();
  615.         __CHECK__
  616.  
  617.         while (c != 'q' && c != 'b' && c !='a' && c !='c' && c !='d' && c !='e' && c !='f' && c !='s') {
  618.  
  619.            c=me.mWaitForDLECode();
  620.            __CHECK__
  621.  
  622.         } /* endwhile */
  623.         __CHECK__
  624.  
  625.         statOutput.addAsLast(sentToModem + reslib.loadString(MSG_MODEMSTOPRECMSG));
  626.         me.vmStopReceive();
  627.         __CHECK__
  628.         mr= modemResponse (me, NULL, 50);
  629.         __CHECK__
  630.  
  631.         while (mr.code==MODEM_ENGINE::none) {
  632.            me.vmStopReceive();
  633.            __CHECK__
  634.            mr= modemResponse (me, NULL, 50);
  635.            __CHECK__
  636.         } /* endwhile */
  637.         __CHECK__
  638.  
  639.         fclose(message);
  640.       }
  641.  
  642.  
  643.     } // End While (TRUE)
  644.  
  645.  
  646.  
  647.   } while (false);
  648.  
  649.   if (power == on) powerOff.click();
  650.  
  651.   statOutput.addAsLast(MSG_MODEMANSWEREND);
  652.   statOutput.setTop(statOutput.count());
  653.  
  654.   powerOn.enable();
  655.   powerOff.enable();
  656.  
  657. #undef __CHECK__
  658. #undef __ERROR__
  659. }
  660.  
  661. //**************************************************************************
  662. MODEM_ENGINE::MODEMRESPONSE GeneralSettings :: modemResponse (MODEM_ENGINE & me, IListBox * lb, int timeout) {
  663.  
  664.  MODEM_ENGINE::MODEMRESPONSE mr;
  665.  
  666.     do {
  667.        mr= me.mWaitForModemResponse (timeout);
  668.        if (mr.verbose[0]== 0) {
  669.           mr.code= MODEM_ENGINE::none;
  670.        } else {
  671.           if (mr.code != MODEM_ENGINE::atCommand && lb != NULL) {
  672.              lb->addAsLast(reslib.loadString(MSG_GOTFROMMODEM) + IString(mr.verbose));
  673.              lb->setTop(lb->count());
  674.           }
  675.        }
  676.     } while ((mr.code != MODEM_ENGINE::ok) &&
  677.              (mr.code != MODEM_ENGINE::error) &&
  678.              (mr.code != MODEM_ENGINE::connect) &&
  679.              (mr.code != MODEM_ENGINE::none) &&
  680.              (mr.code != MODEM_ENGINE::vcon) &&
  681.              (mr.code != MODEM_ENGINE::no_carrier) &&
  682.              (mr.code != MODEM_ENGINE::ring));
  683.  
  684.    return mr;
  685. }
  686.  
  687.  
  688.