home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / CPROG / CPPCOM17.ZIP / MODEM.CPP < prev    next >
C/C++ Source or Header  |  1991-02-27  |  4KB  |  164 lines

  1. /***************************************************************************
  2. These C++ classes are copyright 1990, by William Herrera.
  3. All those who put this code or its derivatives in a commercial product MUST
  4. mention this copyright in their documentation for users of the products in
  5. which this code or its derivative classes are used.  Otherwise, this code
  6. may be freely distributed and freely used for any purpose.
  7. ***************************************************************************/
  8.  
  9. // file modem.cpp class definitions for modem class.
  10.  
  11. #include <string.h>
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14.  
  15. #include "modem.hpp"
  16.  
  17. const char inits[] = "AT &Q0 &Q3 M1 S7=60 S11=55 V1 S0=6";
  18. const char tonedials[] = "ATDT";
  19. const char pulsedials[] = "ATDP";
  20. const char answers[] = "ATA";
  21. const char hangups[] = "ATH0";
  22. const char resets[] = "ATZ";
  23. const char retrns[] = "\r\n";
  24. const char escapes[] = "+++";    
  25. const char defaultcfgs[] = "modem.cfg";
  26.  
  27. modem::modem(int portnum, long speed, parity_t p,
  28.                          int sbits, int dbits, boolean trans)
  29.  : SerialPort(portnum, speed, p, sbits, dbits, trans)
  30. {
  31.     init = strdup(inits);
  32.     tonedial = strdup(tonedials);
  33.     pulsedial = strdup(pulsedials);
  34.     answer = strdup(answers);
  35.     hangup = strdup(hangups);
  36.     reset = strdup(resets);
  37.     retrn = strdup(retrns);
  38.     escape = strdup(escapes);
  39. }
  40.  
  41. modem::~modem()
  42. {
  43.     free(init);
  44.     free(tonedial);
  45.     free(pulsedial);
  46.     free(answer);
  47.     free(hangup);
  48.     free(reset);
  49.     free(retrn);
  50.     free(escape);
  51. }
  52.  
  53. void modem::ConfigureFromFile(const char * pathname)
  54. {
  55.     char ini[129], ton[129], pul[129], ans[129], han[129];
  56.     char res[129], ret[129], esc[129], actualret[129];
  57.     FILE * cfg = fopen(pathname, "r");
  58.     if(cfg == NULL)
  59.         fprintf(stderr, "modem error:  cannot open or use"
  60.                         " config file %s\n",    pathname);
  61.     int n = fscanf(cfg, "%128[^\n]\n%128[^\n]\n%128[^\n]"
  62.                         "%128[^\n]\n%128[^\n]\n%128[^\n]"
  63.                         "%128[^\n]%128[^\n]",
  64.                         ini, ton, pul, ans, han, res, ret, esc);
  65.     if(n != 8)
  66.         fprintf(stderr, "Error in configuration file %s\n", pathname);
  67.     else
  68.     {
  69.         char * p = ret;
  70.         char * q = actualret;
  71.         do 
  72.         {
  73.             if(*p == '\\')
  74.             {
  75.                 ++p;
  76.                 switch(*p)
  77.                 {
  78.                     case 'r': *p = '\r'; break;
  79.                     case 'n': *p = '\n'; break;
  80.                     case 't': *p = '\t'; break;
  81.                     case 'f': *p = '\f'; break;
  82.                     case 'v': *p = '\v'; break;
  83.                     case 'a': *p = '\a'; break;
  84.                     default: break;
  85.                 }
  86.             }
  87.             *q++ = *p;
  88.         } while (*p++);
  89.         free(init);
  90.         free(tonedial);
  91.         free(pulsedial);
  92.         free(answer);
  93.         free(hangup);
  94.         free(reset);
  95.         free(retrn);
  96.         free(escape);
  97.  
  98.         init = strdup(ini);
  99.         tonedial = strdup(ton);
  100.         pulsedial = strdup(pul);
  101.         answer = strdup(ans);
  102.         hangup = strdup(han);
  103.         reset = strdup(res);
  104.         retrn = strdup(actualret);
  105.         escape = strdup(esc);
  106.  
  107.         Initialize();
  108.     }
  109.     return;
  110. }
  111.  
  112. void modem::Dial(char * number, boolean tone)
  113. {
  114.     SendString( (tone) ? tonedial : pulsedial);
  115.     SendString(number);
  116.     SendString(retrn);
  117. }
  118.  
  119. void modem::Initialize()
  120. {
  121.     SendString(init);
  122.     SendString(retrn);
  123. }
  124.  
  125. void modem::Answer()
  126. {
  127.     SendString(answer);
  128.     SendString(retrn);
  129. }
  130.  
  131. void modem::Escape()
  132. {
  133.     SendString(escape);
  134.     Pause(3000);
  135. }
  136.  
  137. void modem::HangUp()
  138. {
  139.     SendString(hangup);
  140.     SendString(retrn);
  141. }
  142.  
  143. void modem::SendCommand(char * command)
  144. {
  145.     SendString(command);
  146.     SendString(retrn);
  147. }
  148.  
  149. void modem::Send(char ch) { SendChar(ch); }
  150.  
  151. void modem::Send(char * s) { SendString(s); }
  152.  
  153. void modem::Send(int i) { Write(&i, sizeof(int)); }
  154.  
  155. void modem::Send(long l) { Write(&l, sizeof(long)); }
  156.  
  157. void modem::Send(float f) { Write(&f, sizeof(float)); }
  158.  
  159. void modem::Send(double d) { Write(&d, sizeof(double)); }
  160.  
  161.  
  162. // end of file modem.cpp
  163.  
  164.