home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 3 / BBS in a box - Trilogy III.iso / Files / Prog / L-M / mini / InitModem.c < prev    next >
Encoding:
C/C++ Source or Header  |  1987-09-20  |  2.8 KB  |  106 lines  |  [TEXT/MPS ]

  1. /* modem initialization code */
  2. /* New file: May 20,1987 
  3.     Author: Jerry LeVan
  4.                325 Boone Trail
  5.                Richmond Ky 40475
  6. */
  7.  
  8. #include <types.h>
  9. #include <serial.h>
  10. #include <devices.h>
  11. #include <menus.h>
  12. #include <OSUtils.h>
  13. #include <memory.h>
  14.  
  15. #define AIn  -6
  16. #define AOut -7
  17.  
  18. extern short sIn;    /* input refnum */
  19. extern short sOut;    /* output refnum */
  20.  
  21. Ptr serialBuffPtr;
  22.  
  23. void FlowControl(refnum,xonflag)  /* process xoff/xon processing */
  24.  short refnum;
  25.  char xonflag;
  26.  { SerShk flags; /* handshake flags */
  27.    OSErr err;
  28.       flags.fXOn = xonflag;
  29.      flags.fCTS = (char)false;
  30.      flags.xOn  = 0x11;
  31.      flags.xOff = 0x13;  /* xoff char */
  32.      flags.errs = 0 ;
  33.      flags.evts = 0;
  34.      flags.fInX = xonflag;
  35.      flags.fDTR = (char)false;
  36.      if(err = SerHShake(refnum,&flags))
  37.        ErrorMessage("Error Setting XON/XOFF",err);
  38.   }
  39.  
  40. void InitModem(whichPort,config)
  41.   SPortSel whichPort;   /* modem or phone */
  42.   short config;            /* configuration data */
  43.   
  44.   { OSErr err;   /* error code returned by OS */
  45.     SerShk flags; /* modem characteristics */
  46.     
  47.     /* step one .. Open the driver */
  48.     if(err=RAMSDOpen(whichPort)){
  49.        ErrorMessage("Can't Open Ram Serial Driver",err);
  50.        return ;
  51.       }
  52.     /* step two ... Configure the modem */
  53.     if(err=SerReset(sOut,config)){
  54.        ErrorMessage("Can't Configure Output Port",err);
  55.        return;
  56.       }
  57.     /* step three...now the input side */
  58.     if(err=SerReset(sIn,config)){
  59.        ErrorMessage("Can't Configure Input Port",err);
  60.        return;
  61.       }
  62.      /* step four...set other useful characteristics */
  63.      flags.fXOn = (char)true;
  64.      flags.fCTS = (char)false;
  65.      flags.xOn  = 0x11;
  66.      flags.xOff = 0x13;  /* xoff char */
  67.      flags.errs = 0 ;
  68.      flags.evts = 0;
  69.      flags.fInX = (char)true;
  70.      flags.fDTR = (char)false;
  71.      if(err = SerHShake(sOut,&flags)){
  72.        ErrorMessage("Error Setting XON/XOFF",err);
  73.        return;
  74.       }
  75.      /* step 5 ...set a larger input buffer for higher speeds */
  76.      
  77.      serialBuffPtr = NewPtr(1200);
  78.      SerSetBuf(sIn,serialBuffPtr,1200);
  79.  
  80.    }
  81. /* the new phone manager makes this routine obsolete */   
  82. void Dial(refnum,itemNumber,menuH)
  83.    short refnum;           /* output device */
  84.    short itemNumber;    /* menuitem number */
  85.    MenuHandle menuH;    /* the Phone menu */
  86.    { char name[40];    /* storage for phone number */
  87.      long len;            /* length of phone number */
  88.      long two,tmp;        /* temp storage */
  89.      Handle number;        /* handle to the number */
  90.      char *ptr;            /* kludge */
  91.      
  92.      GetItem(menuH,itemNumber,name);
  93.      number = (Handle)GetNamedResource('DIAL',name);
  94.      HLock(number);
  95.      /* compute length of number */
  96.      len = 0;
  97.      while((*number)[len])len++;
  98.      /* use Hayes AT commands */
  99.      two = 2;
  100.      FSWrite(refnum,&two,"AT"); Delay(20,&tmp);
  101.      two =2;
  102.      FSWrite(refnum,&two,"DT"); Delay(20,&tmp);
  103.      /* and now the number (cr is part of number) */
  104.      FSWrite(refnum,&len,*number);
  105.      HUnlock(number);
  106.    }