; Demon II modem driver                            Version 0.02, 17-Jan-1991
; (c) 1990/1991 Hugo Fiennes - Ammended by W. Delves

modem_initialise ()
  {
  port_rts(0)
  port_dtr(0)
  return(1)
  }
           
modem_shutdown ()
  {
  return(1)
  }

modem_connect ()
  {
  port_dtr(1)
  port_rts(1)
  return(_waitconnect())
  }

modem_disconnect ()
  {
  port_rts(0)
  port_dtr(0)
  }

modem_dial (string number[40],integer how)
  {
  integer a,b
        
  port_txclear()
  port_rxclear()
  port_dtr(1)
  port_rts(1)
  pause(80)     

  for a=1 to len(number)
    {
    if (isdigit($mid(number,a,1)))
      {
      extra_dtrdial(val($mid(number,a,1)))
      pause(80)
      }
    }     

  pause(10)
  _demon()
  return(_waitconnect())
  }

modem_answer ()
{
}

modem_errorcontrol (string option[10])
  {
  return(1)
  }
   
_demon ()
  {   
  integer t=port_txspeed(),r=port_rxspeed(),a=0

  if (t==75 && r==1200)
    {
    a=0
    }
  if (t==1200 && r==75)
    {
    a=7
    }
  if (t==300 && r==300)
    {
    a=3
    }

  if a=0
    {
    return
    }
  extra_dtrpulse(400)
  pause(5)
  while (1==1)
    {
    extra_dtrpulse(100)
    a=a-1
    if (a==0)
      {
      return
      }
    pause(5)
    }
  return
  }


_waitconnect ()
  {
  integer start=time()

  while((time()-start)<modem_carrierwait)
    {
    if (port_dcd()!=0)
      {
      integer gc=time()

      ; Wait for 14 seconds to get constant carrier
      while((time()-gc)<1400 && (port_dcd()!=0))
        {
          pause(5)
        }
      if (port_dcd())
        {
        return(0)
        }
      }
    else
      {
      pause(5)
      }
    }
  return(1)
  }
