#include "ckcsym.h"
char *dialv = "Dial Command, 8.0.160, 29 Apr 2002";

/*  C K U D I A	 --  Module for automatic modem dialing. */

/*
  Copyright (C) 1985, 2004,
    Trustees of Columbia University in the City of New York.
    All rights reserved.  See the C-Kermit COPYING.TXT file or the
    copyright text in the ckcmai.c module for disclaimer and permissions.
*/

/*
  Authors:

  Original (version 1, 1985) author: Herm Fischer, Encino, CA.
  Contributed to Columbia University in 1985 for inclusion in C-Kermit 4.0.
  Author and maintainer since 1985: Frank da Cruz, Columbia University,
  fdc@columbia.edu.

  Contributions by many others throughout the years, including: Jeffrey
  Altman, Mark Berryman, Fernando Cabral, John Chmielewski, Joe Doupnik,
  Richard Hill, Larry Jacobs, Eric Jones, Tom Kloos, Bob Larson, Peter Mauzey,
  Joe Orost, Kevin O'Gorman, Kai Uwe Rommel, Dan Schullman, Warren Tucker, and
  many others.
*/

/*
  Entry points:
    ckdial(char * number)   Dial a number or answer a call
    dialhup()               Hang up a dialed connection
    mdmhup()                Use modem commands to hang up

  All other routines are static.
  Don't call dialhup() or mdmhup() without first calling ckdial().
*/

/*
  This module calls externally defined system-dependent functions for
  communications i/o, as described in CKCPLM.DOC, the C-Kermit Program Logic
  Manual, and thus should be portable to all systems that implement those
  functions, and where alarm() and signal() work.

  HOW TO ADD SUPPORT FOR ANOTHER MODEM:

  1. In ckuusr.h, define a modem-type number symbol (n_XXX) for the new modem,
     the next highest one.

  2. In ckuusr.h, adjust MAX_MDM to the new number of modem types.

The remaining steps are in this module:

  3. Create a MDMINF structure for it.  NOTE: The wake_str should include
     all invariant setup info, e.g. enable result codes, BREAK transparency,
     modulation negotiation, etc.  See ckcker.h for MDMINF struct definition.

  4. Add the address of the MDMINF structure to the modemp[] array,
     according to the numerical value of the modem-type number.

  5. Add the user-visible (SET MODEM) name and corresponding modem number
     to the mdmtab[] array, in alphabetical order by modem-name string.

  6. If this falls into a class like is_rockwell, is_supra, etc, add the new
     one to the definition of the class.

  7. Adjust the gethrn() routine to account for any special numeric result
     codes (if it's a Hayes compatible modem).

  8. Read through the code and add any modem-specific sections as necessary.
     For most modern Hayes-compatible modems, no specific code will be
     needed.

  NOTE: The MINIDIAL symbol is used to build this module to include support
  for only a minimum number of standard and/or generally useful modem types,
  namely Hayes 1200 and 2400, ITU-T (CCITT) V.25bis and V.25ter (V.250),
  Generic-High-Speed, "Unknown", and None.  When adding support for a new
  modem type, keep it outside of the MINIDIAL sections unless it deserves to
  be in it.
*/

#include "ckcdeb.h"
#ifndef NOLOCAL
#ifndef NODIAL
#ifndef NOICP

#ifndef CK_ATDT
#define CK_ATDT
#endif /* CK_ATDT */

#ifndef NOOLDMODEMS        /* Unless instructed otherwise, */
#define OLDMODEMS          /* keep support for old modems. */
#endif /* NOOLDMODEMS */

#ifndef M_OLD		   /* Hide old modem keywords in SET MODEM table. */
#define M_OLD 0		   /* Define as CM_INV to make them invisible. */
#endif /* M_OLD */

#ifndef M_ALIAS
#define M_ALIAS 64
#endif /* M_ALIAS */

#ifndef MAC
#include <signal.h>
#endif /* MAC */
#include "ckcasc.h"
#include "ckcker.h"
#include "ckucmd.h"
#include "ckcnet.h"
#include "ckuusr.h"

#ifdef OS2ONLY
#define INCL_VIO			/* Needed for ckocon.h */
#include <os2.h>
#undef COMMENT
#include "ckocon.h"
#endif /* OS2ONLY */

#ifdef NT
#include <windows.h>
#include <tapi.h>
#include "cknwin.h"
#include "ckntap.h"
#endif /* NT */
#ifdef OS2
#include "ckowin.h"
#endif /* OS2 */

#ifndef ZILOG
#ifdef NT
#include <setjmpex.h>
#else /* NT */
#include <setjmp.h>
#endif /* NT */
#else
#include <setret.h>
#endif /* ZILOG */

#include "ckcsig.h"        /* C-Kermit signal processing */

#ifdef MAC
#define signal msignal
#define SIGTYP long
#define alarm malarm
#define SIG_IGN 0
#define SIGALRM 1
#define SIGINT  2
SIGTYP (*msignal(int type, SIGTYP (*func)(int)))(int);
#endif /* MAC */

#ifdef AMIGA
#define signal asignal
#define alarm aalarm
#define SIGALRM (_NUMSIG+1)
#define SIGTYP void
SIGTYP (*asignal(int type, SIGTYP (*func)(int)))(int);
unsigned aalarm(unsigned);
#endif /* AMIGA */

#ifdef STRATUS
/*
  VOS doesn't have alarm(), but it does have some things we can work with.
  However, we have to catch all the signals in one place to do this, so
  we intercept the signal() routine and call it from our own replacement.
*/
#define signal vsignal
#define alarm valarm
SIGTYP (*vsignal(int type, SIGTYP (*func)(int)))(int);
int valarm(int interval);
#ifdef putchar
#undef putchar
#endif /* putchar */
#define putchar(x) conoc(x)
#ifdef getchar
#undef getchar
#endif /* getchar */
#define getchar(x) coninc(0)
#endif /* STRATUS */

#ifdef OS2
#ifdef putchar
#undef putchar
#endif /* putchar */
#define putchar(x) conoc(x)
#endif /* OS2 */

#ifndef NOHINTS
extern int hints;
#endif /* NOHINTS */

#ifdef CK_TAPI
extern int tttapi;
extern int tapipass;
#endif /* CK_TAPI */

#ifdef CKLOGDIAL
extern int dialog;
#endif /* CKLOGDIAL */

char * dialmsg[] = {			/* DIAL status strings */

    /* Keyed to numbers defined in ckcker.h -- keep in sync! */

    "DIAL succeeded",			    /*  0 DIA_OK */
    "Modem type not specified",		    /*  1 DIA_NOMO */
    "Communication device not specified",   /*  2 DIA_NOLI */
    "Communication device can't be opened", /*  3 DIA_OPEN */
    "Speed not specified",		    /*  4 DIA_NOSP */
    "Pre-DIAL hangup failed",		    /*  5 DIA_HANG */
    "Internal error",			    /*  6 DIA_IE   */
    "Device input/output error",	    /*  7 DIA_IO   */
    "DIAL TIMEOUT expired",		    /*  8 DIA_TIMO */
    "Interrupted by user",		    /*  9 DIA_INTR */
    "Modem not ready",			    /* 10 DIA_NRDY */
    "Partial dial OK",			    /* 11 DIA_PART */
    "Dial directory lookup error",	    /* 12 DIA_DIR  */
    "Hangup OK",			    /* 13 DIA_HUP  */
    NULL,				    /* 14 (undef)  */
    NULL,				    /* 15 (undef)  */
    NULL,				    /* 16 (undef)  */
    NULL,				    /* 17 (undef)  */
    NULL,				    /* 18 (undef)  */
    "No response from modem",		    /* 19 DIA_NRSP */
    "Modem command error",		    /* 20 DIA_ERR  */
    "Failure to initialize modem",	    /* 21 DIA_NOIN */
    "Phone busy",			    /* 22 DIA_BUSY */
    "No carrier",			    /* 23 DIA_NOCA */
    "No dialtone",			    /* 24 DIA_NODT */
    "Incoming call",			    /* 25 DIA_RING */
    "No answer",			    /* 26 DIA_NOAN */
    "Disconnected",			    /* 27 DIA_DISC */
    "Answered by voice",		    /* 28 DIA_VOIC */
    "Access denied / forbidden call",	    /* 29 DIA_NOAC */
    "Blacklisted",			    /* 30 DIA_BLCK */
    "Delayed",    			    /* 31 DIA_DELA */
    "Fax connection",			    /* 32 DIA_FAX  */
    "Digital line",			    /* 33 DIA_DIGI */
    "TAPI dialing failure",	            /* 34 DIA_TAPI */
    NULL				    /* 34 */
};

#ifdef COMMENT
#ifdef NOSPL
static
#endif /* NOSPL */
char modemmsg[128] = { NUL, NUL };	/* DIAL response from modem */
#endif /* COMMENT */

#ifdef NTSIG
extern int TlsIndex;
#endif /* NTSIG */

int mdmtyp = n_GENERIC;			/* Default modem type */
int mdmset = 0;				/* User explicitly set a modem type */

int					/* SET DIAL parameters */
  dialhng = 1,				/* DIAL HANGUP, default is ON */
  dialdpy = 0,				/* DIAL DISPLAY, default is OFF */
  mdmspd  = 0,				/* DIAL SPEED-MATCHING (0 = OFF) */
  mdmspk  = 1,				/* MODEM SPEAKER */
  mdmvol  = 2,				/* MODEM VOLUME */
  dialtmo = 0,				/* DIAL TIMEOUT */
  dialatmo = -1,			/* ANSWER TIMEOUT */
  dialksp = 0,				/* DIAL KERMIT-SPOOF, 0 = OFF */
  dialidt = 0,				/* DIAL IGNORE-DIALTONE */
#ifndef CK_RTSCTS
  /* If we can't do RTS/CTS then there's no flow control at first.  */
  /* So we might easily lose the echo to the init string and the OK */
  /* and then give "No response from modem" errors. */
  dialpace = 150,			/* DIAL PACING */
#else
  dialpace = -1,
#endif /* CK_RTSCTS */

  /* 0 = RS232 (drop DTR); 1 = MODEM-COMMAND (e.g. <sec>+++<sec>ATH0) */
  dialmhu = DEFMDMHUP;			/* MODEM HANGUP-METHOD */

int
  dialec = 1,				/* DIAL ERROR-CORRECTION */
  dialdc = 1,				/* DIAL COMPRESSION  */
#ifdef VMS
  /* VMS can only use Xon/Xoff */
  dialfc = FLO_XONX,			/* DIAL FLOW-CONTROL */
#else
  dialfc = FLO_AUTO,
#endif /* VMS */
  dialmth = XYDM_D,			/* DIAL METHOD (Tone, Pulse, Defalt) */
  dialmauto = 1,			/* DIAL METHOD is AUTO */
  dialesc = 0;				/* DIAL ESCAPE */

int telephony = 0;			/* Command-line '-T' option */

long dialmax = 0L,			/* Modem's max interface speed */
  dialcapas  = 0L;			/* Modem's capabilities */

int dialsta = DIA_UNK;			/* Detailed return code (ckuusr.h) */

#ifdef COMMENT
int ans_cid = 0;			/* SET ANSWER parameters */
int ans_rings = 0;			/* (not used yet...) */
#endif /* COMMENT */

int is_rockwell = 0;
int is_motorola = 0;
int is_supra = 0;
int is_hayeshispd = 0;

/* Dialing directory list */

char *dialdir[MAXDDIR];			/* DIAL DIRECTORY filename array */
int   ndialdir = 0;			/* How many dial directories */

/* User overrides for built-in modem commands */

char *dialini = NULL;			/* MODEM INIT-STRING none */
char *dialmstr = NULL;			/* MODEM DIALMODE-STRING */
char *dialmprmt = NULL;			/* MODEM DIALMODE-PROMPT */
char *dialcmd = NULL;			/* MODEM DIAL-COMMAND, default none */
char *dialname  = NULL;			/* Descriptive name for modem */
char *dialdcon  = NULL;			/* DC ON command */
char *dialdcoff = NULL;			/* DC OFF command */
char *dialecon  = NULL;			/* EC ON command */
char *dialecoff = NULL;			/* EC OFF command */
char *dialaaon  = NULL;			/* Autoanswer ON command */
char *dialaaoff = NULL;			/* Autoanswer OFF command */
char *dialhcmd  = NULL;			/* Hangup command */
char *dialhwfc  = NULL;			/* Hardware flow control command */
char *dialswfc  = NULL;			/* (Local) software f.c. command */
char *dialnofc  = NULL;			/* No (Local) flow control command */
char *dialtone  = NULL;			/* Command to force tone dialing */
char *dialpulse = NULL;			/*  ..to force pulse dialing */
char *dialx3    = NULL;			/* Ignore dialtone */
char *mdmname   = NULL;
char *dialspon  = NULL;			/* Speaker On command */
char *dialspoff = NULL;			/* Speaker Off command */
char *dialvol1  = NULL;			/* Volume Low command */
char *dialvol2  = NULL;			/* Volume Medium command */
char *dialvol3  = NULL;			/* Volume High command */
char *dialini2  = NULL;			/* Second init string */

/* Phone number options */

char *dialnpr = NULL;			/* DIAL PREFIX, ditto */
char *diallac = NULL;			/* DIAL LOCAL-AREA-CODE, ditto */
char *diallcc = NULL;			/* DIAL LOCAL-COUNTRY-CODE, ditto */
char *dialixp = NULL;			/* DIAL INTL-PREFIX */
char *dialixs = NULL;			/* DIAL INTL-SUFFIX */
char *dialldp = NULL;			/* DIAL LD-PREFIX */
char *diallds = NULL;			/* DIAL LD-SUFFIX */
char *diallcp = NULL;			/* DIAL LOCAL-PREFIX */
char *diallcs = NULL;			/* DIAL LOCAL-SUFFIX */
char *dialpxi = NULL;			/* DIAL PBX-INTERNAL-PREFIX */
char *dialpxo = NULL;			/* DIAL PBX-OUTSIDE-PREFIX */
char *dialsfx = NULL;			/* DIAL SUFFIX */
char *dialtfp = NULL;			/* DIAL TOLL-FREE-PREFIX */

char *callid_date = NULL;		/* Caller ID strings */
char *callid_time = NULL;
char *callid_name = NULL;
char *callid_nmbr = NULL;
char *callid_mesg = NULL;

extern char * d_name;
extern char * dialtfc[];		/* DIAL TOLL-FREE-AREA-CODE */
extern char * dialpxx[];		/* DIAL PBX-EXCHANGE */
extern int ntollfree;
extern int ndialpxx;

extern char * dialpucc[];		/* DIAL Pulse countries */
extern int ndialpucc;
extern char * dialtocc[];		/* DIAL Tone countries */
extern int ndialtocc;

char *dialmac   = NULL;			/* DIAL macro */

/* Countries where pulse dialing must be used (tone is not available) */
static char * pulsecc[] = { NULL };	/* (Unknown at present) */

/* Countries where tone dialing may safely be the default. */
/* "+" marks countries where pulse is also allowed. */
/* Both Pulse and Tone are allowed in Austria & Switzerland but it is not */
/* yet known if Tone is universally in those countries. */
static char * tonecc[] = {
    "1",				/* + North American Numbering Plan */
    "31",				/*   Netherlands */
    "32",				/*   Belgium */
    "33",				/*   France */
    "352",				/*   Luxembourg */
    "353",				/*   Ireland */
    "354",				/*   Iceland */
    "358",				/*   Finland */
    "39",				/*   Italy */
    "44",				/* + UK */
    "45",				/*   Denmark */
    "46",				/*   Sweden */
    "47",				/*   Norway */
    "49",				/* + Germany */
    NULL
};

#ifndef MINIDIAL
/*
  Telebit model codes:

  ATI  Model Numbers           Examples
  ---  -------------           --------
  123                          Telebit in "total Hayes-1200" emulation mode
  960                          Telebit in Conventional Command (Hayes) mode
  961  RA12C                   IBM PC internal original Trailblazer
  962  RA12E                   External original Trailblazer
  963  RM12C                   Rackmount original Trailblazer
  964  T18PC                   IBM PC internal Trailblazer-Plus (TB+)
  965  T18SA, T2SAA, T2SAS     External TB+, T1600, T2000, T3000, WB, and later
  966  T18RMM                  Rackmount TB+
  967  T2MC                    IBM PS/2 internal TB+
  968  T1000                   External T1000
  969  ?                       Qblazer
  970                          Qblazer Plus
  971  T2500                   External T2500
  972  T2500                   Rackmount T2500
*/

/* Telebit model codes */

#define TB_UNK  0			/* Unknown Telebit model */
#define TB_BLAZ 1			/* Original TrailBlazer */
#define TB_PLUS	2			/* TrailBlazer Plus */
#define TB_1000 3			/* T1000 */
#define TB_1500 4			/* T1500 */
#define TB_1600 5			/* T1600 */
#define TB_2000 6			/* T2000 */
#define TB_2500 7			/* T2500 */
#define TB_3000 8			/* T3000 */
#define TB_QBLA 9			/* Qblazer */
#define TB_WBLA 10			/* WorldBlazer */
#define TB__MAX 10			/* Highest number */

char *tb_name[] = {			/* Array of model names */
    "Unknown",				/* TB_UNK  */
    "TrailBlazer",			/* TB_BLAZ */
    "TrailBlazer-Plus",			/* TB_PLUS */
    "T1000",				/* TB_1000 */
    "T1500",				/* TB_1500 */
    "T1600",				/* TB_1600 */
    "T2000",				/* TB_2000 */
    "T2500",				/* TB_2500 */
    "T3000",				/* TB_3000 */
    "Qblazer",				/* TB_QBLA */
    "WorldBlazer",			/* TB_WBLA */
    ""
};
#endif /* MINIDIAL */

extern int flow, local, mdmtyp, quiet, backgrd, parity, seslog, network;
extern int carrier, duplex, mdmsav, reliable, setreliable;
extern int ttnproto, nettype;
extern long speed;
extern char ttname[], sesfil[];
#ifndef NOXFER
extern CHAR stchr;
extern int interrupted;
#endif /* NOXFER */

/*  Failure codes  */

#define F_TIME		1		/* timeout */
#define F_INT		2		/* interrupt */
#define F_MODEM		3		/* modem-detected failure */
#define F_MINIT		4		/* cannot initialize modem */

#ifndef CK_TAPI
static
#endif /* CK_TAPI */
#ifdef OS2
 volatile
#endif /* OS2 */
 int fail_code =  0;			/* Default failure reason. */

static int xredial = 0;
static int func_code;			/* 0 = dialing, nonzero = answering */
static int partial;
static int mymdmtyp = 0;

#define DW_NOTHING      0		/* What we are doing */
#define DW_INIT         1
#define DW_DIAL         2

static int dial_what = DW_NOTHING;	/* Nothing at first. */
static int nonverbal = 0;		/* Hayes in numeric response mode */
static MDMINF * mp;
static CHAR escbuf[6];
static long mdmcapas;

_PROTOTYP (static VOID dreset, (void) );
_PROTOTYP (static int (*xx_ok), (int,int) );
_PROTOTYP (static int ddinc, (int) );
_PROTOTYP (int dialhup, (void) );
_PROTOTYP (int getok, (int,int) );
_PROTOTYP (char * ck_time, (void) );
_PROTOTYP (static VOID ttslow, (char *, int) );
#ifdef COMMENT
_PROTOTYP (static VOID xcpy, (char *, char *, unsigned int) );
#endif /* COMMENT */
_PROTOTYP (static VOID waitfor, (char *) );
_PROTOTYP (static VOID dialoc, (char) );
_PROTOTYP (static int didweget, (char *, char *) );
_PROTOTYP (static VOID spdchg, (long) );
_PROTOTYP (static int dialfail, (int) );
_PROTOTYP (static VOID gethrw, (void) );
_PROTOTYP (static VOID gethrn, (void) );

int dialudt = n_UDEF;			/* Number of user-defined type */

/* BEGIN MDMINF STRUCT DEFINITIONS */

/*
  Declare structures containing modem-specific information.
  REMEMBER that only the first SEVEN characters of these names are
  guaranteed to be unique.

  First declare the three types that are allowed for MINIDIAL versions.
*/
static
MDMINF CCITT =				/* CCITT / ITU-T V.25bis autodialer */
/*
  According to V.25bis:
  . Even parity is required for giving commands to the modem.
  . Commands might or might not echo.
  . Responses ("Indications") from the modem are terminated by CR and LF.
  . Call setup is accomplished by:
    - DTE raises DTR (V.24 circuit 108)              [ttopen() does this]
    - Modem raises CTS (V.24 circuit 106)            [C-Kermit ignores this]
    - DTE issues a call request command ("CRN")
    - Modem responds with "VAL" ("command accepted")
    - If the call is completed:
        modem responds with "CNX" ("call connected");
        modem turns CTS (106) OFF;
        modem turns DSR (107) ON;
      else:
        modem responds with "CFI <parameter>" ("call failure indication").
  . To clear a call, the DTE turns DTR (108) OFF.
  . There is no mention of the Carrier Detect circuit (109) in the standard.
  . There is no provision for "escaping back" to the modem's command mode.

  It is not known whether there exists in real life a pure V.25bis modem.
  If there is, this code has never been tested on it.  See the Digitel entry.
*/
    {
    "Any CCITT / ITU-T V.25bis conformant modem",
    "",			/* pulse command */
    "",			/* tone command */
    40,			/* dial_time -- programmable -- */
    ",:",		/* pause_chars -- "," waits for programmable time */
                        /* ":" waits for dial tone */
    10,			/* pause_time (seconds, just a guess) */
    "",			/* wake_str (none) */
    200,		/* wake_rate (msec) */
    "VAL",		/* wake_prompt */
    "",			/* dmode_str (none) */
    "",			/* dmode_prompt (none) */
    "CRN%s\015",        /* dial_str */
    200,		/* dial_rate (msec) */
    0,			/* No esc_time */
    0,			/* No esc_char  */
    "",			/* No hup_str  */
    "",			/* hwfc_str */
    "",			/* swfc_str */
    "",			/* nofc_str */
    "",			/* ec_on_str */
    "",			/* ec_off_str */
    "",			/* dc_on_str */
    "",			/* dc_off_str */
    "CIC\015",		/* aa_on_str */
    "DIC\015",		/* aa_off_str */
    "",			/* sb_on_str */
    "",			/* sb_off_str */
    "",			/* sp_off_str */
    "",			/* sp_on_str */
    "",			/* vol1_str */
    "",			/* vol2_str */
    "",			/* vol3_str */
    "",			/* ignoredt */
    "",			/* ini2 */
    0L,			/* max_speed */
    CKD_V25,		/* capas */
    NULL		/* No ok_fn    */
};

static
MDMINF HAYES =				/* Hayes 2400 and compatible modems */
    {
    "Hayes Smartmodem 2400 and compatibles",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATE1Q0V1&S0&C1&D2\015",		/* wake_str */
#else
#ifdef VMS
    "ATQ0&S1\015",			/* wake_str */
#else
    "ATQ0\015",				/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str, user supplies D or T */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    2400L,				/* max_speed */
    CKD_AT,				/* capas */
    getok				/* ok_fn */
};

/*
  The intent of the "unknown" modem is to allow KERMIT to support
  unknown modems by having the user type the entire autodial sequence
  (possibly including control characters, etc.) as the "phone number".
  The protocol and other characteristics of this modem are unknown, with
  some "reasonable" values being chosen for some of them.  The only way to
  detect if a connection is made is to look for carrier.
*/
static
MDMINF UNKNOWN =			/* Information for "Unknown" modem */
    {
    "Unknown",				/* name */
    "",					/* pulse command */
    "",					/* tone command */
    30,					/* dial_time */
    "",					/* pause_chars */
    0,					/* pause_time */
    "",					/* wake_str */
    0,					/* wake_rate */
    "",					/* wake_prompt */
    "",					/* dmode_str */
    NULL,				/* dmode_prompt */
    "%s\015",				/* dial_str */
    0,					/* dial_rate */
    0,					/* esc_time */
    0,					/* esc_char */
    "",					/* hup_str */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "",					/* aa_on_str */
    "",					/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "",					/* sp_off_str */
    "",					/* sp_on_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    0L,					/* max_speed */
    0,					/* capas */
    NULL				/* ok_fn */
};

#ifndef MINIDIAL
static
MDMINF ATTISN =				/* AT&T ISN Network */
    {
    "",					/* pulse command */
    "",					/* tone command */
    "AT&T ISN Network",
    30,					/* Dial time */
    "",					/* Pause characters */
    0,					/* Pause time */
    "\015\015\015\015",			/* Wake string */
    900,				/* Wake rate */
    "DIAL",				/* Wake prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "%s\015",				/* dial_str */
    0,					/* dial_rate */
    0,					/* esc_time */
    0,					/* esc_char */
    "",					/* hup_str */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "",					/* aa_on_str */
    "",					/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "",					/* sp_off_str */
    "",					/* sp_on_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    0L,					/* max_speed */
    0,					/* capas */
    NULL				/* ok_fn */
};

static
MDMINF ATTMODEM =	/* information for AT&T switched-network modems */
			/* "Number" following "dial" can include: p's and
			 * t's to indicate pulse or tone (default) dialing,
			 * + for wait for dial tone, , for pause, r for
			 * last number dialed, and, except for 2224B, some
			 * comma-delimited options like o12=y, before number.

 * "Important" options for the modems:
 *
 *	All:		Except for 2224B, enable option 12 for "transparent
 *			data," o12=y.  If a computer port used for both
 *			incoming and outgoing calls is connected to the
 *			modem, disable "enter interactive mode on carriage
 *			return," EICR.  The Kermit "dial" command can
 *			function with EIA leads standard, EIAS.
 *
 *	2212C:		Internal hardware switches at their default
 *			positions (four rockers down away from numbers)
 *			unless EICR is not wanted (rocker down at the 4).
 *			For EIAS, rocker down at the 1.
 *
 *	2224B:		Front-panel switch position 1 must be up (at the 1,
 *			closed).  Disable EICR with position 2 down.
 *			For EIAS, position 4 down.
 *			All switches on the back panel down.
 *
 *	2224CEO:	All front-panel switches down except either 5 or 6.
 *			Enable interactive flow control with o16=y.
 *			Select normal asynchronous mode with o34=0 (zero).
 *			Disable EICR with position 3 up.  For EIAS, 1 up.
 *			Reset the modem after changing switches.
 *
 *	2296A:		If option 00 (zeros) is present, use o00=0.
 *			Enable interactive flow control with o16=y.
 *			Select normal asynchronous mode with o34=0 (zero).
 *                      (available in Microcom Networking version, but
 *                      not necessarily other models of the 2296A).
 *			Enable modem-port flow control (if available) with
 * 			o42=y.  Enable asynchronous operation with o50=y.
 * 			Disable EICR with o69=n.  For EIAS, o66=n, using
 * 			front panel.
 */
    {
   "AT&T switched-network modems",
    "",					/* pulse command */
    "",					/* tone command */
    20,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
    "+",				/* wake_str */
    0,					/* wake_rate */
    "",					/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "at%s\015",				/* dial_str */
    0,					/* dial_rate */
    0,					/* esc_time */
    0,					/* esc_char */
    "",					/* hup_str */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "",					/* aa_on_str */
    "",					/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "",					/* sp_off_str */
    "",					/* sp_on_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    0L,					/* max_speed */
    CKD_AT,				/* capas */
    NULL				/* ok_fn */
};

static
MDMINF ATTDTDM = /* AT&T Digital Terminal Data Module  */
		 /* For dialing: KYBD switch down, others usually up. */
    {
    "AT&T Digital Terminal Data Module",
    "",					/* pulse command */
    "",					/* tone command */
    20,					/* dial_time */
    "",					/* pause_chars */
    0,					/* pause_time */
    "",					/* wake_str */
    0,					/* wake_rate */
    "",					/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "%s\015",				/* dial_str */
    0,					/* dial_rate */
    0,					/* esc_time */
    0,					/* esc_char */
    "",					/* hup_str */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "",					/* aa_on_str */
    "",					/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "",					/* sp_off_str */
    "",					/* sp_on_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    0L,					/* max_speed */
    0,					/* capas */
    NULL				/* ok_fn */
};

static
MDMINF DIGITEL =        /* Digitel DT-22 CCITT variant used in Brazil */
/*
  Attempts to adhere strictly to the V.25bis specification do not produce good
  results in real life.  The modem for which this code was developed: (a)
  ignores parity; (b) sometimes terminates responses with LF CR instead of CR
  LF; (c) has a Hayes-like escape sequence; (d) supports a hangup ("HUP")
  command.  Information from Fernando Cabral in Brasilia.
*/
    {
    "Digitel DT-22 CCITT dialer",
    "",				/* pulse command */
    "",				/* tone command */
    40,				/* dial_time -- programmable -- */
    ",:",		/* pause_chars -- "," waits for programmable time */
                        /* ":" waits for dial tone */
    10,			/* pause_time (seconds, just a guess) */
    "HUP\015",          /* wake_str (Not Standard CCITT) */
    200,		/* wake_rate (msec) */
    "VAL",		/* wake_prompt */
    "",			/* dmode_str (none) */
    "",			/* dmode_prompt (none) */
    "CRN%s\015",        /* dial_str */
    200,		/* dial_rate (msec) */
    1100,		/* esc_time (Not Standard CCITT) */
    43,			/* esc_char  (Not Standard CCITT) */
    "HUP\015",		/* hup_str  (Not Standard CCITT) */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "CIC\015",				/* aa_on_str */
    "DIC\015",				/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "",					/* sp_off_str */
    "",					/* sp_on_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    0L,					/* max_speed */
    CKD_V25,				/* capas */
    getok				/* ok_fn */
};

static
MDMINF H_1200 =		/* Hayes 1200 and compatible modems */
    {
    "Hayes Smartmodem 1200 and compatibles",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATE1Q0V1\015",			/* wake_str */
#else
    "ATQ0\015",				/* wake_str */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    1200L,				/* max_speed */
    CKD_AT,				/* capas */
    getok				/* ok_fn */
};

static
MDMINF H_ULTRA =			/* Hayes high-speed */
    {
    "Hayes Ultra/Optima/Accura 96/144/288", /* U,O,A */
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATE1Q0V1X4N1Y0&S0&C1&D2S37=0S82=128\015", /* wake_str */
#else
#ifdef VMS
    "ATQ0X4N1Y0&S1S37=0S82=128\015",	/* wake_str */
#else
    "ATQ0X4N1Y0S37=0S82=128\015",	/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */   /* OK for U,O */
    "AT&K4\015",			/* swfc_str */   /* OK for U,O */
    "AT&K0\015",			/* nofc_str */   /* OK for U,O */
    "AT&Q5S36=7S48=7\015",		/* ec_on_str */  /* OK for U,O */
    "AT&Q0\015",			/* ec_off_str */ /* OK for U,O */
    "ATS46=2\015",			/* dc_on_str */
    "ATS46=0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */  /* (varies) */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF H_ACCURA =			/* Hayes Accura */
    {					/* GUESSING IT'S LIKE ULTRA & OPTIMA */
    "Hayes Accura",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATE1Q0V1X4N1Y0&S0&C1&D2S37=0\015",	/* wake_str */
#else
#ifdef VMS
    "ATQ0X4N1Y0&S1S37=0\015",		/* wake_str */
#else
    "ATQ0X4N1Y0S37=0\015",		/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4\015",			/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT&Q5S36=7S48=7\015",		/* ec_on_str */
    "AT&Q0\015",			/* ec_off_str */
    "ATS46=2\015",			/* dc_on_str */
    "ATS46=0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */  /* (varies) */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF PPI =				/* Practical Peripherals  */
    {
    "Practical Peripherals V.22bis or higher with V.42 and V.42bis",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef COMMENT
/* In newer models S82 (BREAK handling) was eliminated, causing an error. */
#ifdef OS2
    "ATQ0X4N1&S0&C1&D2S37=0S82=128\015", /* wake_str */
#else
    "ATQ0X4N1S37=0S82=128\015",		/* wake_str */
#endif /* OS2 */
#else /* So now we use Y0 instead */
#ifdef OS2
    "ATE1Q0V1X4N1&S0&C1&D2Y0S37=0\015",	/* wake_str */
#else
#ifdef VMS
    "ATQ0X4N1Y0&S1S37=0\015",		/* wake_str */
#else
    "ATQ0X4N1Y0S37=0\015",		/* wake_str */
#endif /* VMS */
#endif /* OS2 */
#endif /* COMMENT */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4\015",			/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT&Q5S36=7S48=7\015",		/* ec_on_str */
    "AT&Q0S36=0S48=128\015",		/* ec_off_str */
    "ATS46=2\015",			/* dc_on_str */
    "ATS46=0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str  */
    "",					/* sb_off_str  */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF DATAPORT =			/* AT&T Dataport  */
    {
    "AT&T / Paradyne DataPort V.32 or higher",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
    /*
       Note: S41=0 (use highest modulation) omitted, since it is not
       supported on the V.32 and lower models.  So let's not touch it.
    */
#ifdef OS2
    "ATQ0E1V1X6&S0&C1&D2&Q0Y0\\K5S78=0\015", /* wake_str */
#else
#ifdef VMS
    "ATQ0E1X6&S1&Q0Y0\\K5S78=0\015",	/* wake_str */
#else
    "ATQ0E1X6&Q0Y0\\K5S78=0\015",		/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT\\Q3\015",			/* hwfc_str */
    "AT\\Q1\\X0\015",			/* swfc_str */
    "AT\\Q0\015",			/* nofc_str */
    "AT\\N7\015",			/* ec_on_str */
    "AT\\N0\015",			/* ec_off_str */
    "AT%C1\015",			/* dc_on_str */
    "AT%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF UCOM_AT =			/* Microcom DeskPorte FAST ES 28.8 */
    {
    "Microcom DeskPorte FAST 28.8",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATE1Q0V1X4\\N0F0&S0&C1&D2\\K5\015", /* wake_str */
#else
#ifdef VMS
    "ATQ0X4F0&S1\\K5\015",		/* wake_str */
#else
    "ATQ0X4F0\\K5\015",			/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT\\Q3\015",			/* hwfc_str */
    "AT\\Q1\015",			/* swfc_str */
    "AT\\H0\\Q0\015",			/* nofc_str */
    "AT\\N3\015",			/* ec_on_str */
    "AT\\N0\015",			/* ec_off_str */
    "AT%C3\015",			/* dc_on_str */
    "AT%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "AT-J0\015",			/* sb_on_str */
    "AT-J1\015",			/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF ZOOM =				/* Zoom Telephonics V.32bis  */
    {
    "Zoom Telephonics V.32bis",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATE1Q0V1N1W1X4&S0&C1&D2S82=128S95=47\015", /* wake_str */
#else
#ifdef VMS
    "ATQ0E1N1W1X4&S1S82=128S95=47\015",	/* wake_str */
#else
    "ATQ0E1N1W1X4S82=128S95=47\015",	/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4\015",			/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT&Q5S36=7S48=7\015",		/* ec_on_str */
    "AT&Q0\015",			/* ec_off_str */
    "ATS46=138\015",			/* dc_on_str */
    "ATS46=136\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF ZYXEL =				/* ZyXEL U-Series */
    {
    "ZyXEL U-Series V.32bis or higher",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATE1Q0V1&S0&C1&D2&N0X5&Y1\015",	/* wake_str */
#else
#ifdef VMS
    "ATQ0E1&S1&N0X5&Y1\015",		/* wake_str */
#else
    "ATQ0E1&N0X5&Y1\015",		/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&H3\015",			/* hwfc_str */
    "AT&H4\015",			/* swfc_str */
    "AT&H0\015",			/* nofc_str */
    "AT&K3\015",			/* ec_on_str */
    "AT&K0\015",			/* ec_off_str */
    "AT&K4\015",			/* dc_on_str */
    "AT&K3\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF ZOLTRIX =			/* Zoltrix */
    {
    "Zoltrix V.32bis and V.34 modems with Rockwell ACI chipset",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
   "ATE1Q0V1F0W1X4Y0&S0&C1&D2\\K5S82=128S95=41\015", /* wake_str */
#else
#ifdef VMS
   "ATQ0E1F0W1X4Y0&S1\\K5S82=128S95=41\015", /* wake_str */
#else
   "ATQ0E1F0W1X4Y0\\K5S82=128S95=41\015", /* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4S32=17S33=19\015",		/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT\\N3\015",			/* ec_on_str */
    "AT\\N1\015",			/* ec_off_str */
    "ATS46=138%C3\015",			/* dc_on_str */
    "ATS46=136%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "AT\\N0\015",			/* sb_on_str */
    "AT&Q0\015",			/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF MOTOROLA = {			/* Motorola FasTalk II or Lifestyle */
/*
  "\E" and "\X" commands removed - Motorola Lifestyle doesn't have them.
     \E0 = Don't echo while online
     \X0 = Process Xon/Xoff but don't pass through
*/
    "Motorola FasTalk II or Lifestyle",	/* Name */
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATE1Q0V1X4&S0&C1&D2\\K5\\V1\015",	/* wake_str */
#else
#ifdef VMS
    "ATQ0E1X4&S1\\K5\\V1\015",		/* wake_str */
#else
    "ATQ0E1X4\\K5\\V1\015",		/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT\\Q3\015",			/* hwfc_str */
    "AT\\Q1\015",			/* swfc_str */
    "AT\\Q0\015",			/* nofc_str */
    "AT\\N6\015",			/* ec_on_str */
    "AT\\N1\015",			/* ec_off_str */
    "AT%C1\015",			/* dc_on_str */
    "AT%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "AT\\J0\015",			/* sb_on_str */
    "AT\\J1\015",			/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF BOCA =				/* Boca */
    {
    "BOCA 14.4 Faxmodem",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATE1Q0V1F1N1W1&S0&C1&D2\\K5S37=11S82=128S95=47X4\015", /* wake_str */
#else
#ifdef VMS
    "ATQ0E1F1N1W1&S1\\K5S37=11S82=128S95=47X4\015", /* wake_str */
#else
    "ATQ0E1F1N1W1\\K5S37=11S82=128S95=47X4\015", /* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4\015",			/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT\\N3S36=7S48=7\015",		/* ec_on_str */
    "AT\\N1\015",			/* ec_off_str */
    "ATS46=138\015",			/* dc_on_str */
    "ATS46=136\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF INTEL =				/* Intel */
    {
    "Intel High-Speed Faxmodem",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATE1Q0V1Y0X4&S0&C1&D2\\K1\\V2S25=50\015", /* wake_str */
#else
#ifdef VMS
    "ATQ0E1Y0X4&S1\\K1\\V2S25=50\015",	/* wake_str */
#else
    "ATQ0E1Y0X4\\K1\\V2S25=50\015",	/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "ATB1+FCLASS=0\015",		/* dmode_str */
    "OK\015",				/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT\\G1\\Q3\015",			/* hwfc_str */
    "AT\\G1\\Q1\\X0\015",		/* swfc_str */
    "AT\\G0\015",			/* nofc_str */
    "AT\\J0\\N3\"H3\015",		/* ec_on_str */
    "AT\\N1\015",			/* ec_off_str */
    "AT%C1\015",			/* dc_on_str */
    "AT%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF MULTITECH =			/* Multitech */
    {
    "Multitech MT1432 or MT2834 Series",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
/* #P0 (= no parity) is not listed in the manual for newer models */
/* so it has been removed from all three copies of the Multitech wake_str */
#ifdef OS2
    "ATE1Q0V1X4&S0&C1&D2&E8&Q0\015",	/* wake_str */
#else
#ifdef VMS
    "ATQ0E1X4&S1&E8&Q0\015",		/* wake_str */
#else
    "ATQ0E1X4&E8&Q0\015",		/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&E4&E7&E8&E11&E13\015",		/* hwfc_str */
    "AT&E5&E6&E8&E11&E13\015",		/* swfc_str */
    "AT&E3&E7&E8&E10&E12\015",		/* nofc_str */
    "AT&E1\015",			/* ec_on_str */
    "AT&E0\015",			/* ec_off_str */
    "AT&E15\015",			/* dc_on_str */
    "AT&E14\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "AT$BA0\015",			/* sb_on_str (= "baud adjust off") */
    "AT$BA1\015",			/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF SUPRA =				/* Supra */
    {
    "SupraFAXModem 144 or 288",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0E1V1N1W0X4Y0&S0&C1&D2\\K5S82=128\015", /* wake_str */
#else
#ifdef VMS
    "ATQ0E1N1W0X4Y0&S1\\K5S82=128\015",	/* wake_str */
#else
    "ATQ0E1N1W0X4Y0\\K5S82=128\015",	/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4\015",			/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT&Q5\\N3S48=7\015",		/* ec_on_str */
    "AT&Q0\\N1\015",			/* ec_off_str */
    "AT%C1S46=138\015",			/* dc_on_str */
    "AT%C0S46=136\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM\015",				/* sp_off_str */
    "ATL\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF SUPRAX =				/* Supra Express */
    {
    "Diamond Supra Express V.90",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0E1V1W0X4&C1&D2&S0\\K5\015",	/* wake_str */
#else
#ifdef VMS
    "ATQ0E1W0X4&S1\\K5\015",		/* wake_str */
#else
    "ATQ0E1W0X4\\K5\015",		/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4\015",			/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT\\N3\015",			/* ec_on_str */
    "AT\\N1\015",			/* ec_off_str */
    "AT%C2\015",			/* dc_on_str */
    "AT%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM\015",				/* sp_off_str */
    "ATL\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    230400L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF MAXTECH =			/* MaxTech */
    {
    "MaxTech XM288EA or GVC FAXModem",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0E1V1X4Y0&S0&C1&D2&L0&M0\\K5\015", /* wake_str */
#else
#ifdef VMS
    "ATQ0E1X4Y0&L0&M0&S1\\K5\015",	/* wake_str */
#else
    "ATQ0E1X4Y0&L0&M0\\K5\015",		/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT\\Q3\015",			/* hwfc_str */
    "AT\\Q1\\X0\015",			/* swfc_str */
    "AT\\Q0\015",			/* nofc_str */
    "AT\\N6\015",			/* ec_on_str */
    "AT\\N0\015",			/* ec_off_str */
    "AT\\N6%C1\015",			/* dc_on_str */
    "AT\\N6%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF ROLM =		/* IBM / Siemens / Rolm 8000, 9000, 9751 CBX DCM */
    {
    "IBM/Siemens/Rolm CBX Data Communications Module",
    "",					/* pulse command */
    "",					/* tone command */
    60,					/* dial_time */
    "",					/* pause_chars */
    0,					/* pause_time */
    "\015\015",				/* wake_str */
    50,					/* wake_rate */
    "MODIFY?",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "CALL %s\015",			/* dial_str */
    0,					/* dial_rate */
    0,					/* esc_time */
    0,					/* esc_char */
    "",					/* hup_str */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "",					/* aa_on_str */
    "",					/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "",					/* sp_off_str */
    "",					/* sp_on_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    19200L,				/* max_speed */
    0,					/* capas */
    NULL				/* ok_fn */
};

static
MDMINF USR =				/* USR Courier and Sportster modems */
    {
    "US Robotics Courier, Sportster, or compatible",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0E1V1X4&A3&S0&C1&D2&N0&Y3S14=0\015", /* wake_str */
#else
#ifdef SUNOS4
    "ATQ0X4&A3&S0&N0&Y3S14=0\015",	/* wake_str -- needs &S0 in SunOS */
#else
#ifdef VMS
    "ATQ0X4&A3&S1&N0&Y3S14=0\015",	/* wake_str -- needs &S1 in VMS */
#else
    "ATQ0X4&A3&N0&Y3S14=0\015",		/* wake_str */
#endif /* VMS */
#endif /* SUNOS4 */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&H1&R2&I0\015",			/* hwfc_str */
    "AT&H2&R1&I2\015",			/* swfc_str */
    "AT&H0&R1&I0\015",			/* nofc_str */
    "AT&M4&B1\015",			/* ec_on_str */
    "AT&M0\015",			/* ec_off_str */
    "AT&K1\015",			/* dc_on_str */
    "AT&K0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};


static
MDMINF USRX2 =				/* USR XJ-CC1560 X2 56K */
    {
    "US Robotics / Megahertz CC/XJ-CC1560 X2",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0E1V1X4&A3&S0&B2&C1&D2&N0\015",	/* wake_str */
#else
#ifdef VMS
    "ATQ0X4&A3&B2&N0&S1\015",		/* wake_str */
#else
    "ATQ0X4&A3&B2&N0\015",		/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&H1&I0\015",			/* hwfc_str */
    "AT&H2&I2\015",			/* swfc_str */
    "AT&H0&I0\015",			/* nofc_str */
    "AT&M4\015",			/* ec_on_str */
    "AT&M0\015",			/* ec_off_str */
    "AT&K1\015",			/* dc_on_str */
    "AT&K0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "AT&B1\015",			/* sb_on_str */
    "AT&B0\015",			/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF OLDTB =				/* Old Telebits */
    {
    "Telebit TrailBlazer, T1000, T1500, T2000, T2500",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    60,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "\021AAAAATQ0E1V1X1&S0&C1&D2S12=50S50=0S54=3\015", /* wake_str. */
#else
#ifdef VMS
    "\021AAAAATQ0X1S12=50S50=0S54=3\015", /* wake_str. */
#else
    "\021AAAAATQ0X1&S1S12=50S50=0S54=3\015", /* wake_str. */
#endif /* VMS */
#endif /* OS2 */
    100,				/* wake_rate = 100 msec */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str, Note: no T or P */
    80,					/* dial_rate */
    1100,				/* esc_time (guard time) */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "ATS58=2S68=2\015",			/* hwfc_str */
    "ATS58=3S68=3S69=0\015",		/* swfc_str */
    "ATS58=0S68=0\015",			/* nofc_str */
    "ATS66=1S95=2\015",			/* ec_on_str */
    "ATS95=0\015",			/* ec_off_str */
    "ATS110=1S96=1\015",		/* dc_on_str */
    "ATS110=0S96=0\015",		/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    19200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW|CKD_TB|CKD_KS, /* capas */
    getok				/* ok_fn */
};

static
MDMINF NEWTB =				/* New Telebits */
    {
    "Telebit T1600, T3000, QBlazer, WorldBlazer, etc.",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    60,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "\021AAAAATQ0E1V1X2&S0&C1&D2S12=50S50=0S61=0S63=0\015", /* wake_str. */
#else
#ifdef VMS
    "\021AAAAATQ0X2&S1S12=50S50=0S61=0S63=0\015", /* wake_str. */
#else
    "\021AAAAATQ0X2S12=50S50=0S61=0S63=0\015", /* wake_str. */
#endif /* VMS */
#endif /* OS2 */
    100,				/* wake_rate = 100 msec */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str, Note: no T or P */
    80,					/* dial_rate */
    1100,				/* esc_time (guard time) */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "ATS58=2S68=2\015",			/* hwfc_str */
    "ATS58=3S68=3\015",			/* swfc_str */
    "ATS58=0S68=0\015",			/* nofc_str */
    "ATS180=3\015",			/* ec_on_str */
    "ATS180=0\015",			/* ec_off_str */
    "ATS190=1\015",			/* dc_on_str */
    "ATS190=0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    38400L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW|CKD_TB|CKD_KS, /* capas */
    getok				/* ok_fn */
};
#endif /* MINIDIAL */

static
MDMINF DUMMY = /* dummy information for modems that are handled elsewhere */
    {
    "(dummy)",
    "",					/* pulse command */
    "",					/* tone command */
    30,					/* dial_time */
    "",					/* pause_chars */
    0,					/* pause_time */
    "",					/* wake_str */
    0,					/* wake_rate */
    "",					/* wake_prompt */
    "",					/* dmode_str */
    NULL,				/* dmode_prompt */
    "%s\015",				/* dial_str */
    0,					/* dial_rate */
    0,					/* esc_time */
    0,					/* esc_char */
    "",					/* hup_str */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "",					/* aa_on_str */
    "",					/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "",					/* sp_off_str */
    "",					/* sp_on_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    0L,					/* max_speed */
    0,					/* capas */
    NULL				/* ok_fn */
};

#ifndef MINIDIAL
static
MDMINF RWV32 =				/* Generic Rockwell V.32 */
    {
    "Generic Rockwell V.32 modem",	/* ATI3, ATI4, and ATI6 for details */
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0E1V1X4Y0&S0&C1&D2%E2\\K5+FCLASS=0N1S37=0\015", /* wake_str */
#else
#ifdef VMS
    "ATQ0X4Y0&S1%E2\\K5+FCLASS=0N1S37=0\015", /* wake_str */
#else
    "ATQ0X4Y0%E2\\K5+FCLASS=0N1S37=0\015", /* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4S32=17S33=19\015",		/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT&Q6\015",			/* ec_on_str */
    "AT&Q0\015",			/* ec_off_str */
    "AT%C1\015",			/* dc_on_str */
    "AT%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF RWV32B =				/* Generic Rockwell V.32bis */
    {
    "Generic Rockwell V.32bis modem",	/* ATI3, ATI4, and ATI6 for details */
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0E1V1X4Y0&S0&C1&D2%E2\\K5+FCLASS=0N1S37=0\015", /* wake_str */
#else
#ifdef VMS
    "ATQ0X4Y0&S1%E2\\K5+FCLASS=0N1S37=0\015", /* wake_str */
#else
    "ATQ0X4Y0%E2\\K5+FCLASS=0N1S37=0\015", /* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4S32=17S33=19\015",		/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT&Q5\015",			/* ec_on_str */
    "AT&Q0\015",			/* ec_off_str */
    "ATS%C1\015",			/* dc_on_str */
    "ATS%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF RWV34 =				/* Generic Rockwell V.34 Data/Fax */
    {
    "Generic Rockwell V.34 modem",	/* ATI3, ATI4, and ATI6 for details */
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0V1X4Y0&C1&D2&S0%E2\\K5+FCLASS=0\015", /* wake_str */
#else
#ifdef VMS
    "ATQ0V1X4Y0&C1&D2&S1%E2\\K5+FCLASS=0\015", /* wake_str */
#else
    "ATQ0V1X4Y0&C1&D2%E2\\K5+FCLASS=0\015", /* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4S32=17S33=19\015",		/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT&Q5\015",			/* ec_on_str */
    "AT&Q0\015",			/* ec_off_str */
    "ATS%C3\015",			/* dc_on_str */
    "ATS%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF RWV90 =				/* Generic Rockwell V.90 Data/Fax */
    {
    "Generic Rockwell V.90 56K modem",	/* ATI3, ATI4, and ATI6 for details */
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0V1N1X4Y0&C1&D2&S0%E2\\K5+FCLASS=0S37=0\015", /* K95 */
#else
#ifdef VMS
    "ATQ0V1N1X4Y0&C1&D2&S1%E2\\K5+FCLASS=0S37=0\015", /* wake_str */
#else
    "ATQ0V1N1X4Y0&C1&D2%E2\\K5+FCLASS=0S37=0\015", /* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4S32=17S33=19\015",		/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT&Q5\015",			/* ec_on_str */
    "AT&Q0\015",			/* ec_off_str */
    "AT%C3\015",			/* dc_on_str */
    "AT%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF MWAVE =				/* IBM Mwave */
    {
    "IBM Mwave Adapter",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0E1V1X4Y0&S0&C1&D2&M0&Q0&N1\\K3\\T0%E2S28=0\015", /* wake_str */
#else
#ifdef VMS
    "ATQ0X4Y0&M0&S1&Q0&N1&S0\\K3\\T0%E2S28=0\015", /* wake_str */
#else
    "ATQ0X4Y0&M0&Q0&N1&S0\\K3\\T0%E2S28=0\015", /* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT\\Q3\015",			/* hwfc_str */
    "",					/* swfc_str (it doesn't!) */
    "AT\\Q0\015",			/* nofc_str */
    "AT\\N7\015",			/* ec_on_str */
    "AT\\N0\015",			/* ec_off_str */
    "AT%C1\"H3\015",			/* dc_on_str */
    "AT%C0\"H0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF TELEPATH =			/* Gateway 2000 Telepath */
    {
    "Gateway 2000 Telepath II 28.8",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0E1V1X4&S0&C1&D2&N0&Y2#CLS=0S13=0S15=0S19=0\015", /* wake_str */
#else
#ifdef VMS
    "ATQ0X4&N0&S1&Y1#CLS=0S13=0S15=0S19=0\015", /* wake_str */
#else
    "ATQ0X4&N0&Y1#CLS=0S13=0S15=0S19=0\015", /* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&H1&R2\015",			/* hwfc_str */
    "AT&H2&I2S22=17S23=19\015",		/* swfc_str */
    "AT&H0&I0&R1\015",			/* nofc_str */
    "AT&M4&B1\015",			/* ec_on_str -- also fixes speed */
    "AT&M0\015",			/* ec_off_str */
    "AT&K1\015",			/* dc_on_str */
    "AT&K0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF CARDINAL =			/* Cardinal - based on Rockwell V.34 */
    {
    "Cardinal MVP288X Series",		/* ATI3, ATI4, and ATI6 for details */
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0E1V1X4W1Y0%E2&S0&C1&D2\\K5+FCLASS=0+MS=11,1\015", /* wake_str */
#else
#ifdef VMS
    "ATQ0X4W1Y0&S1%E2\\K5+FCLASS=0+MS=11,1\015", /* wake_str */
#else
    "ATQ0X4W1Y0%E2\\K5+FCLASS=0+MS=11,1\015", /* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4S32=17S33=19\015",		/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT&Q5S36=7S48=7\\N3\015",		/* ec_on_str */
    "AT&Q0S48=128\\N1\015",		/* ec_off_str */
    "ATS46=138%C1\015",			/* dc_on_str */
    "ATS46=136%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF LUCENT =				/* Lucent Venus or Data/Fax modem */
    {
    "Lucent Venus chipset",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0V1N1X4Y0&C1&D2&S0%E2\\K5+FCLASS=0S37=0\015", /* K95 */
#else
#ifdef VMS
    "ATQ0V1N1X4Y0&C1&D2&S1%E2\\K5+FCLASS=0S37=0\015", /* VMS */
#else
    "ATQ0V1N1X4Y0&C1&D2%E2\\K5+FCLASS=0S37=0\015", /* All others */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4S32=17S33=19\015",		/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT&Q5\015",			/* ec_on_str */
    "AT&Q0\015",			/* ec_off_str */
    "AT%C1\015",			/* dc_on_str */
    "AT%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF CONEXANT =			/* Conexant family */
    {
    "Conexant family of modems",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0V1X4&C1&D2&S0%E1+FCLASS=0\015", /* K95 */
#else
#ifdef VMS
    "ATQ0V1X4&C1&D2&S1%E1+FCLASS=0\015", /* VMS */
#else
    "ATQ0V1X4&C1&D2%E1+FCLASS=0\015", /* UNIX etc */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4S32=17S33=19\015",		/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT&Q5\015",			/* ec_on_str */
    "AT&Q0\015",			/* ec_off_str */
    "AT%C3\015",			/* dc_on_str */
    "AT%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF PCTEL =				/* PCTel chipset */
    {
    "PCTel chipset",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0V1N1X4Y0&C1&D2&S0%E2\\K5S37=0\015", /* K95 */
#else
#ifdef VMS
    "ATQ0V1N1X4Y0&C1&D2&S1%E2\\K5S37=0\015", /* VMS */
#else
    "ATQ0V1N1X4Y0&C1&D2%E2\\K5S37=0\015", /* UNIX etc */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4S32=17S33=19\015",		/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT\\N3\015",			/* ec_on_str */
    "AT\\N0\015",			/* ec_off_str */
    "AT%C1\015",			/* dc_on_str */
    "AT%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF ZOOMV34 =			/* Zoom Telephonics V.34  */
    {
    "Zoom Telephonics V.34",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0V1N1W1X4&S0&C1&D2S82=128\015", /* wake_str */
#else
#ifdef VMS
    "ATQ0V1N1W1X4&S1S82=128\015",	/* wake_str */
#else
    "ATQ0V1N1W1X4S82=128S015",		/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4\015S32=17S33=19",		/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT&Q5\015",			/* ec_on_str */
    "AT&Q0\015",			/* ec_off_str */
    "ATS%C3\015",			/* dc_on_str */
    "ATS%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF ZOOMV90 =			/* ZOOM V.90 */
    {
    "Zoom V.90 56K",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0V1N1X4Y0&C1&D2&S0%E2\\K5+FCLASS=0S37=0\015", /* K95 */
#else
#ifdef VMS
    "ATQ0V1N1X4Y0&C1&D2&S1%E2\\K5+FCLASS=0S37=0\015", /* VMS */
#else
    "ATQ0V1N1X4Y0&C1&D2%E2\\K5+FCLASS=0S37=0\015", /* All others */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4S32=17S33=19\015",		/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT&Q5\015",			/* ec_on_str */
    "AT&Q0\015",			/* ec_off_str */
    "AT%C1\015",			/* dc_on_str */
    "AT%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF ZOOMV92 =			/* ZOOM V.92 */
    {
    "Zoom V.92 with V.44 compression",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0V1N1X4Y0&C1&D2&S0%E2\\K5+FCLASS=0S37=0+MS=V92\015", /* K95 */
#else
#ifdef VMS
    "ATQ0V1N1X4Y0&C1&D2&S1%E2\\K5+FCLASS=0S37=0+MS=V92\015", /* VMS */
#else
    "ATQ0V1N1X4Y0&C1&D2%E2\\K5+FCLASS=0S37=0+MS=V92\015", /* All others */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4S32=17S33=19\015",		/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT&Q5\015",			/* ec_on_str */
    "AT&Q0\015",			/* ec_off_str */
    "AT%C1+DCS=1,1\015",		/* dc_on_str */
    "AT%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};


/*
  Now the "old" modems, all grouped together, and also within
  "if not defined MINIDIAL"...
*/
#ifdef OLDMODEMS

static
MDMINF CERMETEK =	/* Information for "Cermetek Info-Mate 212 A" modem */
    {
    "Cermetek Info-Mate 212 A",
    "",					/* pulse command */
    "",					/* tone command */
    20,					/* dial_time */
    "BbPpTt",				/* pause_chars */
    0,					/* pause_time */
    "  XY\016R\015",			/* wake_str */
    200,				/* wake_rate */
    "",					/* wake_prompt */
    "",					/* dmode_str */
    NULL,				/* dmode_prompt */
    "\016D '%s'\015",			/* dial_str */
    200,				/* dial_rate */
    0,					/* esc_time */
    0,					/* esc_char */
    "",					/* hup_str */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "",					/* aa_on_str */
    "",					/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "",					/* sp_off_str */
    "",					/* sp_on_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    1200L,				/* max_speed */
    0,					/* capas */
    NULL				/* ok_fn */
};

static
MDMINF DF03 =		/* information for "DEC DF03-AC" modem */
    {
    "Digital DF03-AC",
    "",					/* pulse command */
    "",					/* tone command */
    27,					/* dial_time */
    "=",				/* pause_chars */
    15,					/* pause_time */
    "\001\002",				/* wake_str */
    0,					/* wake_rate */
    "",					/* wake_prompt */
    "",					/* dmode_str */
    NULL,				/* dmode_prompt */
    "%s",				/* dial_str */
    0,					/* dial_rate */
    0,					/* esc_time */
    0,					/* esc_char */
    "",					/* hup_str */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "",					/* aa_on_str */
    "",					/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "",					/* sp_off_str */
    "",					/* sp_on_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    0L,					/* max_speed */
    0,					/* capas */
    NULL				/* ok_fn */
};

static
MDMINF DF100 =		/* information for "DEC DF100-series" modem */
			/*
			 * The telephone "number" can include "P"s and/or "T"s
			 * within it to indicate that subsequent digits are
			 * to be dialed using pulse or tone dialing.  The
			 * modem defaults to pulse dialing.  You may modify
			 * the dial string below to explicitly default all
			 * dialing to pulse or tone, but doing so prevents
			 * the use of phone numbers that you may have stored
			 * in the modem's memory.
			 */
    {
    "Digital DF-100",
    "",					/* pulse command */
    "",					/* tone command */
    30,					/* dial_time */
    "=",				/* pause_chars */
    15,					/* pause_time */
    "\001",				/* wake_str */
    0,					/* wake_rate */
    "",					/* wake_prompt */
    "",					/* dmode_str */
    NULL,				/* dmode_prompt */
    "%s#",				/* dial_str */
    0,					/* dial_rate */
    0,					/* esc_time */
    0,					/* esc_char */
    "",					/* hup_str */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "",					/* aa_on_str */
    "",					/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "",					/* sp_off_str */
    "",					/* sp_on_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    0L,					/* max_speed */
    0,					/* capas */
    NULL				/* ok_fn */
};

static
MDMINF DF200 =		/* information for "DEC DF200-series" modem */
			/*
			 * The telephone "number" can include "P"s and/or "T"s
			 * within it to indicate that subsequent digits are
			 * to be dialed using pulse or tone dialing.  The
			 * modem defaults to pulse dialing.  You may modify
			 * the dial string below to explicitly default all
			 * dialing to pulse or tone, but doing so prevents
			 * the use of phone numbers that you may have stored
			 * in the modem's memory.
			 */
    {
    "Digital DF-200",
    "",			/* pulse command */
    "",			/* tone command */
    30,			/* dial_time */
    "=W",		/* pause_chars */	/* =: second tone; W: 5 secs */
    15,			/* pause_time */	/* worst case */
    "\002",		/* wake_str */		/* allow stored number usage */
    0,			/* wake_rate */
    "",			/* wake_prompt */
    "",			/* dmode_str */
    NULL,		/* dmode_prompt */
#ifdef COMMENT
    "%s!",		/* dial_str */
#else
    "   d %s\015",
#endif /* COMMENT */
    0,					/* dial_rate */
    0,					/* esc_time */
    0,					/* esc_char */
    "",					/* hup_str */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "",					/* aa_on_str */
    "",					/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "",					/* sp_off_str */
    "",					/* sp_on_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    0L,					/* max_speed */
    0,					/* capas */
    NULL				/* ok_fn */
};

static
MDMINF GDC =		/* information for "GeneralDataComm 212A/ED" modem */
    {
    "GeneralDataComm 212A/ED",
    "",					/* pulse command */
    "",					/* tone command */
    32,					/* dial_time */
    "%",				/* pause_chars */
    3,					/* pause_time */
    "\015\015",				/* wake_str */
    500,				/* wake_rate */
    "$",				/* wake_prompt */
    "D\015",				/* dmode_str */
    ":",				/* dmode_prompt */
    "T%s\015",				/* dial_str */
    0,					/* dial_rate */
    0,					/* esc_time */
    0,					/* esc_char */
    "",					/* hup_str */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "",					/* aa_on_str */
    "",					/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "",					/* sp_off_str */
    "",					/* sp_on_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    1200L,				/* max_speed */
    0,					/* capas */
    NULL				/* ok_fn */
};

static
MDMINF PENRIL =		/* information for "Penril" modem */
    {
    "Penril modem",
    "",					/* pulse command */
    "",					/* tone command */
    50,					/* dial_time */
    "",					/* pause_chars */
    0,					/* pause_time */
    "\015\015",				/* wake_str */
    300,				/* wake_rate */
    ">",				/* wake_prompt */
    "k\015",				/* dmode_str */
    ":",				/* dmode_prompt */
    "%s\015",				/* dial_str */
    0,					/* dial_rate */
    0,					/* esc_time */
    0,					/* esc_char */
    "",					/* hup_str */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "",					/* aa_on_str */
    "",					/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "",					/* sp_off_str */
    "",					/* sp_on_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    0L,					/* max_speed */
    0,					/* capas */
    NULL				/* ok_fn */
};

static
MDMINF RACAL =				/* Racal Vadic VA4492E */
    {
    "Racal Vadic VA4492E",
    "",					/* pulse command */
    "",					/* tone command */
    35,			/* dial_time (manual says modem is hardwired to 60) */
    "Kk",				/* pause_chars */
    5,					/* pause_time */
    "\005\015",				/* wake_str, ^E^M */
    50,					/* wake_rate */
    "*",				/* wake_prompt */
    "D\015",				/* dmode_str */
    "?",				/* dmode_prompt */
    "%s\015",				/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    5,					/* esc_char, ^E */
    "\003\004",				/* hup_str, ^C^D */
    0,					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "",					/* aa_on_str */
    "",					/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "",					/* sp_off_str */
    "",					/* sp_on_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    0L,					/* max_speed */
    0,					/* capas */
    NULL				/* ok_fn */
};

static
MDMINF VENTEL =				/* Information for Ven-Tel modem */
    {
    "Ven-Tel",
    "",					/* pulse command */
    "",					/* tone command */
    20,					/* dial_time */
    "%",				/* pause_chars */
    5,					/* pause_time */
    "\015\015\015",			/* wake_str */
    300,				/* wake_rate */
    "$",				/* wake_prompt */
    "K\015",				/* dmode_str (was "") */
    "Number to call: ",			/* dmode_prompt (was NULL) */
    "%s\015",				/* dial_str (was "<K%s\r>") */
    0,					/* dial_rate */
    0,					/* esc_time */
    0,					/* esc_char */
    "",					/* hup_str */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "",					/* aa_on_str */
    "",					/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "",					/* sp_off_str */
    "",					/* sp_on_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    0L,					/* max_speed */
    0,					/* capas */
    NULL				/* ok_fn */
};

static
MDMINF CONCORD =	/* Info for Condor CDS 220 2400b modem */
    {
    "Concord Condor CDS 220 2400b",
    "",					/* pulse command */
    "",					/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
    "\015\015",				/* wake_str */
    20,					/* wake_rate */
    "CDS >",				/* wake_prompt */
    "",					/* dmode_str */
    NULL,				/* dmode_prompt */
    "<D M%s\015>",			/* dial_str */
    0,					/* dial_rate */
    0,					/* esc_time */
    0,					/* esc_char */
    "",					/* hup_str */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "",					/* aa_on_str */
    "",					/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "",					/* sp_off_str */
    "",					/* sp_on_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    2400L,				/* max_speed */
    0,					/* capas */
    NULL				/* ok_fn */
};
#endif /* OLDMODEMS */

static
MDMINF MICROCOM =	/* Microcom modems in native SX mode */
			/* (long answer only) */
{
    "Microcom MNP modems in SX command mode",
    "DP\015",				/* pulse command */
    "DT\015",				/* tone command */
    35,					/* dial_time */
    ",!@",		/* pause_chars (! and @ aren't pure pauses) */
    3,					/* pause_time */
/*
  The following sets 8 bits, no parity, BREAK passthru, and SE0 disables the
  escape character, which is a single character with no guard time, totally
  unsafe, so we have no choice but to disable it.  Especially since, by
  default, it is Ctrl-A, which is Kermit's packet-start character.  We would
  change it to something else, which would enable "mdmhup()", but the user
  wouldn't know about it.  Very bad.  Note: SE1 sets it to Ctrl-A, SE2
  sets it to Ctrl-B, etc (1..31 allowed).  Also SE/Q sets it to "Q".
*/
    "SE0;S1P4;SBRK5\015",		/* wake_str */
    100,				/* wake_rate */
    "!",				/* wake_prompt */
    "",					/* dmode_str */
    NULL,				/* dmode_prompt */
    "D%s\015",				/* dial_str - number up to 39 chars */
    0,					/* dial_rate */
    0,					/* esc_time */
    0,					/* esc_char - we can't use this */
    "",					/* hup_str - it's "H" but can't use */
    "SF13\015",				/* hwfc_str */
    "SF11\015",				/* swfc_str */
    "SF10\015",				/* nofc_str */
    "BAOFF;SMAUT\015",			/* ec_on_str */
    "BAON;SMDIR\015",			/* ec_off_str */
    "COMP1\015",			/* dc_on_str */
    "COMP0\015",			/* dc_off_str */
    "AA",				/* aa_on_str */
    "",					/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "SA2",				/* sp_off_str */
    "SA0",				/* sp_on_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    0L,					/* max_speed */
    CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW|CKD_KS, /* capas */
    getok				/* ok_fn */
};

static
MDMINF MICROLINK =			/* MicroLink ... */
    {					/* 14.4TQ,TL,PC;28.8TQ,TQV;2440T/TR */
    "ELSA MicroLink 14.4, 28.8, 33.6 or 56K", /* ELSA GmbH, Aachen */
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0E1V1X4&S0\\D0&C1&D2\\K5\015",	/* wake_str */
#else
#ifdef VMS
    "ATQ0X4&S1\\K5\015",		/* wake_str */
#else
    "ATQ0X4\\K5\015",			/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H\015",			/* hup_str */
    "AT\\Q3\015",			/* hwfc_str */
    "AT\\Q1\\X0\015",			/* swfc_str */
    "AT\\Q0\015",			/* nofc_str */
    "AT\\N3\015",			/* ec_on_str */
    "AT\\N0\015",			/* ec_off_str */
    "AT%C3\015",			/* dc_on_str */
    "AT%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "\\J0",				/* sb_on_str (?) */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF ULINKV250 =			/* MicroLink V.250 */
    {					/* 56Kflex, V.90; V.250 command set */
    "ELSA MicroLink 56K V.250",		/* ELSA GmbH, Aachen */
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    /* \D0 = DSR & CTS always on but hwfc overrides on CTS. */
    "ATQ0E1V1X4&S0\\D0&C1&D2\015",	/* wake_str */
#else
#ifdef VMS
    "ATQ0X4&S1\015",			/* wake_str */
#else
    "ATQ0X4\015",			/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT+IFC=2,2\015",			/* hwfc_str */
    "AT+IFC=1,1\015",			/* swfc_str */
    "AT+IFC=0,0\015",			/* nofc_str */
    "AT+ES=3,0\015",			/* ec_on_str */
    "AT+ES=1,0\015",			/* ec_off_str */
    "AT+DS=3,0,2048,32\015",		/* dc_on_str */
    "AT+DS=0,0\015",			/* dc_off_str */

    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str (?) */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};
#endif /* MINIDIAL */

static
MDMINF ITUTV250 =			/* ITU-T V.250 conforming modem */
{
    "Any ITU-T V.25ter/V.250 conformant modem",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
    "ATQ0E1V1X4&C1&D2\015",		/* wake_str (no &Sn in V.25) */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT+IFC=2,2\015",			/* hwfc_str */
    "AT+IFC=1,1\015",			/* swfc_str */
    "AT+IFC=0,0\015",			/* nofc_str */
    "AT+ES=3,0,2;+EB=1,0,30\015",	/* ec_on_str */
    "AT+ES=0\015",			/* ec_off_str */
    "AT+DS=3,0\015",			/* dc_on_str */
    "AT+DS=0,0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

#ifndef CK_TAPI
static
#endif /* CK_TAPI */
MDMINF GENERIC =			/* Generic high speed ... */
    {
    "Generic high-speed AT command set",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
    "",					/* wake_str */
    0,					/* wake_rate */
    "",					/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "",					/* sp_on_str */
    "",					/* sp_off_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW, /* capas */
    getok				/* ok_fn */
};

#ifndef MINIDIAL
static
MDMINF XJACK =				/* Megahertz X-Jack */
    {
    "Megahertz X-Jack XJ3144 / CC6144",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0E1V1X4N1&C1&D2\\K5\015",	/* wake_str */
#else
    "ATQ0X4N1\\K5\015",			/* wake_str */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4\015",			/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT\\N3&Q5\015",			/* ec_on_str */
    "AT\\N1&Q0\015",			/* ec_off_str */
    "AT%C3\015",			/* dc_on_str */
    "AT%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF SPIRITII =			/* QuickComm Spirit II */
    {
    "QuickComm Spirit II",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
    "AT&F\015",				/* wake_str */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H\015",			/* hup_str */
    "AT*F3\015",			/* hwfc_str */
    "AT*F2\015",			/* swfc_str */
    "AT*F0\015",			/* nofc_str */
    "AT*E6\015",			/* ec_on_str */
    "AT*E0\015",			/* ec_off_str */
    "AT*E9\015",			/* dc_on_str */
    "AT*E0\015",			/* dc_off_str */
    "ATS0=2\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF MONTANA = {			/* Motorola Montana */
    "Motorola Montana",			/* Name */
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0E1V1X4&S0&C1&D2\\K5\\V1\015",	/* wake_str */
#else
#ifdef VMS
    "ATQ0E1X4&S1\\K5\\V1\015",		/* wake_str */
#else
    "ATQ0E1X4\\K5\\V1\015",		/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT\\Q3\015",			/* hwfc_str */
    "AT\\Q1\015",			/* swfc_str */
    "AT\\Q0\015",			/* nofc_str */
    "AT\\N4\015",			/* ec_on_str */
    "AT\\N1\015",			/* ec_off_str */
    "AT%C1\015",			/* dc_on_str */
    "AT%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "AT\\J0\015",			/* sb_on_str */
    "AT\\J1\015",			/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF COMPAQ = {			/* Compaq Data+Fax Modem */
    "Compaq Data+Fax Modem",		/* Name */
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0E1V1X4&S0&C1&D2\015",		/* wake_str */
#else
#ifdef VMS
    "ATQ0E1X4&S1\015",			/* wake_str */
#else
    "ATQ0E1X4\015",			/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT\\Q3\015",			/* hwfc_str (same as &K3) */
    "AT\\Q1\015",			/* swfc_str (same as &K4) */
    "AT\\Q0\015",			/* nofc_str (same as &K0) */
    "AT\\N3\015",			/* ec_on_str */
    "AT\\N0\015",			/* ec_off_str */
    "AT%C1\015",			/* dc_on_str */
    "AT%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "AT\\N3\015",			/* sb_on_str */
    "AT\\N1\015",			/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL0\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};


static
MDMINF FUJITSU = {			/* Fujitsu */
    "Fujitsu Fax/Modem Adapter",	/* Name */
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0E1V1X4&S0&C1&D2\\K5\\N3\015",	/* wake_str */
#else
#ifdef VMS
    "ATQ0E1X4&S1\\K5\\N3\015",		/* wake_str */
#else
    "ATQ0E1X4\\K5\\N3\015",		/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\\Q3\015",			/* hwfc_str */
    "AT&K4\\Q1\015",			/* swfc_str */
    "AT&K0\\Q0\015",			/* nofc_str */
    "AT\\N3\015",			/* ec_on_str */
    "AT\\N0\015",			/* ec_off_str */
    "AT%C1",				/* dc_on_str */
    "AT%C0",				/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "AT\\J0\015",			/* sb_on_str */
    "AT\\J1\015",			/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF MHZATT =				/* Megahertz AT&T V.34 */
    {
    "Megahertz AT&T V.34",
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0E1V1X4N1&C1&D2\\K5\015",	/* wake_str */
#else
    "ATQ0X4N1\\K5\015",			/* wake_str */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4\015",			/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT\\N3\015",			/* ec_on_str */
    "AT\\N0\015",			/* ec_off_str */
    "AT%C1\"H3\015",			/* dc_on_str */
    "AT%C0\"H0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "AT\\J0\015",			/* sb_on_str */
    "AT\\J1\015",			/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF SUPRASON =			/* SupraSonic */
    {
    "Diamond SupraSonic 288V+",		/* Diamond Multimedia Systems Inc */
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0E1V1N1W0X4Y0&S0&C1&D2\015",	/* wake_str */
#else
#ifdef VMS
    "ATQ0E1N1W0X4Y0&S1\015",		/* wake_str */
#else
    "ATQ0E1N1W0X4Y0\015",		/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4\015",			/* swfc_str */
    "AT&K\015",				/* nofc_str */
    "AT&Q5\\N3S48=7\015",		/* ec_on_str */
    "AT&Q0\\N1\015",			/* ec_off_str */
    "AT%C3S46=138\015",			/* dc_on_str */
    "AT%C0S46=136\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM\015",				/* sp_off_str */
    "ATL\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF BESTDATA =			/* Best Data */
    {
    "Best Data Fax Modem",		/* Best Data Fax Modem */
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0E1V1N1W0X4Y0&S0&C1&D2\015",	/* wake_str */
#else
#ifdef VMS
    "ATQ0E1N1W0X4Y0&S1\015",		/* wake_str */
#else
    "ATQ0E1N1W0X4Y0\015",		/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4\015",			/* swfc_str */
    "AT&K\015",				/* nofc_str */
    "AT&Q6\\N3\015",			/* ec_on_str */
    "AT&Q0\\N1\015",			/* ec_off_str */
    "AT%C3\015",			/* dc_on_str */
    "AT%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "AT\\N3\015",			/* sb_on_str */
    "AT\\N0\015",			/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF ATT1900 =			/* AT&T Secure Data STU III 1900 */
    {
    "AT&T Secure Data STU III Model 1900", /* name */
    "",					/* pulse command */
    "",					/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0E1V1X4\015",			/* wake_str */
#else
    "ATQ0E1X4\015",			/* wake_str */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "",					/* sp_on_str */
    "",					/* sp_off_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    9600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_HW,		/* capas */
    getok				/* ok_fn */
};

/*
  Experimentation showed that hardly any of the documented commands did
  anything other that print ERROR.  At first there was no communication at
  all at 9600 bps -- turns out the interface speed was stuck at 2400.
  ATS28=130 (given at 2400 bps) allowed it to work at 9600.
*/
static
MDMINF ATT1910 =			/* AT&T Secure Data STU III 1910 */
    {					/* Adds V.32bis, V.42, V.42bis */
    "AT&T Secure Data STU III Model 1910", /* name */

/* Believe it or not, "ATT" and "ATP" result in ERROR */

    "",					/* pulse command */
    "",					/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0E1V1X4\015",			/* wake_str */
#else
    "ATQ0E1X4\015",			/* wake_str */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
#ifdef COMMENT
/* These are evidently read-only registers */
    "ATS46=138S47=0\015",		/* ec_on_str */
    "ATS46=138S47=128\015",		/* ec_off_str */
    "ATS46=138S47=0\015",		/* dc_on_str */
    "ATS46=138S47=128\015",		/* dc_off_str */
#else
    "",
    "",
    "",
    "",
#endif /* COMMENT */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "",					/* sp_on_str */
    "",					/* sp_off_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    9600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW,	/* capas */
    getok				/* ok_fn */
};

static
MDMINF KEEPINTOUCH =			/* AT&T KeepinTouch Card Modem */
    {
    "AT&T KeepinTouch V.32bis Card Modem", /* Name */
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
/* This used to include &C1&S0&D2+Q0 but that gives ERROR */
    "ATQ0E1V1X4&S0&C1&D2\\K5\015",	/* wake_str */
#else
#ifdef VMS
    "ATQ0E1X4&S1\\K5\015",		/* wake_str */
#else
    "ATQ0E1X4\\K5\015",			/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT\\Q3\015",			/* hwfc_str */
    "AT\\Q1\\X0\015",			/* swfc_str */
    "AT\\Q0\015",			/* nofc_str */
    "AT\\N3-J1\015",			/* ec_on_str */
    "AT\\N1\015",			/* ec_off_str */
    "AT%C3\"H3\015",			/* dc_on_str */
    "AT%C0\"H0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "ATN0\\J0\015",			/* sb_on_str */
    "ATN1\\J1\015",			/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    57600L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF ROLM_AT =		/* Rolm data phone with AT command set */
    {
    "Rolm 244PC or 600 Series with AT Command Set",
    "",					/* pulse command */
    "",					/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATE1Q0V1\015",			/* wake_str */
#else
    "ATQ0\015",				/* wake_str */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATDT%s\015",			/* dial_str -- always Tone */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "",					/* hwfc_str */
    "",					/* swfc_str */
    "",					/* nofc_str */
    "",					/* ec_on_str */
    "",					/* ec_off_str */
    "",					/* dc_on_str */
    "",					/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "",					/* sb_on_str */
    "",					/* sb_off_str */
    "",					/* sp_on_str */
    "",					/* sp_off_str */
    "",					/* vol1_str */
    "",					/* vol2_str */
    "",					/* vol3_str */
    "",					/* ignoredt */
    "",					/* ini2 */
    19200L,				/* max_speed */
    CKD_AT,				/* capas */
    getok				/* ok_fn */
};

static
MDMINF ATLAS =				/* Atlas / Newcom ixfC 33.6 */
    {
    "Atlas / Newcom 33600ixfC Data/Fax Modem", /* Name */
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATZ0&FQ0V1&C1&D2\015",		/* wake_str */
#else
    "ATZ0&FQ0V1\015",			/* wake_str */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4\015",			/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT\"H3\015",			/* ec_on_str */
    "AT\"H0\015",			/* ec_off_str */
    "AT%C1\015",			/* dc_on_str */
    "AT%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "ATN0\\J0\015",			/* sb_on_str */
    "ATN1\\J1\015",			/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF CODEX = {			/* Motorola Codex */
    "Motorola Codex 326X Series",	/* Name - AT&V to see settings */
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    /* &M0=Async (not sync) */
    /* *MM0=Automatic modulation negotiation */
    /* *DE22=Automatic data rate */
    "ATZQ0E1V1X4Y0*DE22*MM0&C1&M0&S0&D2\015", /* wake_str */
#else
#ifdef VMS
    "ATZQ0E1V1X4Y0*DE22*MM0&C1&M0&S1\015", /* wake_str */
#else
    "ATZQ0E1V1X4Y0*DE22*MM0&C1&M0\015",	/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT*MF1*FL3\015",			/* hwfc_str */
    "AT*MF1*FL1\015",			/* swfc_str */
    "AT*MF0*FL0\015",			/* nofc_str */
    "AT*EC0*SM3*SC0\015",		/* ec_on_str */
    "AT*SM0\015",			/* ec_off_str */
    "AT*DC1\015",			/* dc_on_str */
    "AT*DC0\015",			/* dc_off_str */
    "AT*AA5S0=1\015",			/* aa_on_str */
    "AT*AA5S0=0\015",			/* aa_off_str */
    "AT*SC1\015",			/* sb_on_str */
    "AT*SC0\015",			/* sb_off_str */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3*BD2\015",			/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF MT5634ZPX =			/* Multitech */
    {
    "Multitech MT5634ZPX",		/* name */
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATE1Q0V1X4&S0&C1&D2&Q0\015",	/* wake_str */
#else
#ifdef VMS
    "ATQ0E1X4&S1&Q0\015",		/* wake_str */
#else
    "ATQ0E1X4&Q0\015",			/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT&K3\015",			/* hwfc_str */
    "AT&K4\015",			/* swfc_str */
    "AT&K0\015",			/* nofc_str */
    "AT\\N3\015",			/* ec_on_str */
    "AT\\N1\015",			/* ec_off_str */
    "AT%C1\015",			/* dc_on_str */
    "AT%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "AT\\J0\015",			/* sb_on_str */
    "AT\\J1\015",			/* sb_off_str (NOT SUPPORTED) */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};

static
MDMINF MOTSM56 =			/* Motorola SM56 Chipset */
    {
    "Motorola SM56 V.90 chipset",	/* name */
    "ATP\015",				/* pulse command */
    "ATT\015",				/* tone command */
    35,					/* dial_time */
    ",",				/* pause_chars */
    2,					/* pause_time */
#ifdef OS2
    "ATQ0V1X4&S0&C1&D2*MM16\015",	/* wake_str */
#else
#ifdef VMS
    "ATQ0V1X4&S1&C1&D2*MM16\015",	/* wake_str */
#else
    "ATQ0V1X4&C1&D2*MM16\015",		/* wake_str */
#endif /* VMS */
#endif /* OS2 */
    0,					/* wake_rate */
    "OK\015",				/* wake_prompt */
    "",					/* dmode_str */
    "",					/* dmode_prompt */
    "ATD%s\015",			/* dial_str */
    0,					/* dial_rate */
    1100,				/* esc_time */
    43,					/* esc_char */
    "ATQ0H0\015",			/* hup_str */
    "AT\\Q3\015",			/* hwfc_str */
    "AT\\Q1\015",			/* swfc_str */
    "AT\\Q0\015",			/* nofc_str */
    "AT\\N7\015",			/* ec_on_str */
    "AT\\N1\015",			/* ec_off_str */
    "AT%C1\015",			/* dc_on_str */
    "AT%C0\015",			/* dc_off_str */
    "ATS0=1\015",			/* aa_on_str */
    "ATS0=0\015",			/* aa_off_str */
    "AT\\J0\015",			/* sb_on_str */
    "AT\\J1\015",			/* sb_off_str (NOT SUPPORTED) */
    "ATM1\015",				/* sp_on_str */
    "ATM0\015",				/* sp_off_str */
    "ATL1\015",				/* vol1_str */
    "ATL2\015",				/* vol2_str */
    "ATL3\015",				/* vol3_str */
    "ATX3\015",				/* ignoredt */
    "",					/* ini2 */
    115200L,				/* max_speed */
    CKD_AT|CKD_SB|CKD_EC|CKD_DC|CKD_HW|CKD_SW, /* capas */
    getok				/* ok_fn */
};
#endif /* MINIDIAL */

/* END MDMINF STRUCT DEFINITIONS */

/*
  Table to convert modem numbers to MDMINF struct pointers.
  The entries MUST be in ascending order by modem number, without any
  "gaps" in the numbers, and starting from one (1).
*/

MDMINF *modemp[] = {
#ifdef MINIDIAL
    NULL,				/*  0 */
    &CCITT,				/*  1 */
    &HAYES,				/*  2 */
    &UNKNOWN,				/*  3 */
    &DUMMY,				/*  4 */
    &GENERIC,				/*  5 */
    &ITUTV250				/*  6 */
#else  /* Not MINIDIAL */
    NULL,				/*  0 */
    &ATTDTDM,				/*  1 */
    &ATTISN,				/*  2 */
    &ATTMODEM,				/*  3 */
    &CCITT,				/*  4 */
#ifdef OLDMODEMS
    &CERMETEK,				/*  5 */
    &DF03,				/*  6 */
    &DF100,				/*  7 */
    &DF200,				/*  8 */
    &GDC,				/*  9 */
#else
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
#endif /* OLDMODEMS */
    &HAYES,				/* 10 */
#ifdef OLDMODEMS
    &PENRIL,				/* 11 */
    &RACAL,				/* 12 */
#else
    NULL,
    NULL,
#endif /* OLDMODEMS */
    &UNKNOWN,				/* 13 */
#ifdef OLDMODEMS
    &VENTEL,				/* 14 */
    &CONCORD,				/* 15 */
#else
    NULL,
    NULL,
#endif /* OLDMODEMS */
    &DUMMY,				/* 16 */
    &ROLM,				/* 17 */
#ifdef OLDMODEMS
    &MICROCOM,				/* 18 */
#else
    NULL,
#endif /* OLDMODEMS */
    &USR,				/* 19 USR Courier and Sportster */
    &OLDTB,				/* 20 Old Telebits */
    &DIGITEL,				/* 21 Digitel CCITT */
    &H_1200,				/* 22 Hayes 1200 */
    &H_ULTRA,				/* 23 Hayes Ultra */
    &H_ACCURA,				/* 24 Hayes Optima */
    &PPI,				/* 25 PPI */
    &DATAPORT,				/* 26 Dataport */
    &BOCA,				/* 27 Boca */
    &MOTOROLA,				/* 28 Motorola UDS MOTOROLA */
    NULL,				/* 29 Digicomm */
    NULL,				/* 30 Dynalink */
    &INTEL,				/* 31 Intel */
    &UCOM_AT,				/* 32 Microcom in AT mode */
    &MULTITECH,				/* 33 Multitech */
    &SUPRA,				/* 34 Supra */
    &ZOLTRIX,				/* 35 Zoltrix */
    &ZOOM,				/* 36 Zoom */
    &ZYXEL,				/* 37 ZyXEL */
    &DUMMY,				/* 38 TAPI */
    &NEWTB,				/* 39 New-Telebit */
    &MAXTECH,				/* 40 MaxTech */
    &DUMMY,				/* 41 User-defined */
    &RWV32,				/* 42 Rockwell V.32 */
    &RWV32B,				/* 43 Rockwell V.32bis */
    &RWV34,				/* 44 Rockwell V.34 */
    &MWAVE,				/* 45 IBM Mwave */
    &TELEPATH,				/* 46 Gateway 2000 Telepath II 28.8 */
    &MICROLINK,				/* 47 MicroLink modems */
    &CARDINAL,				/* 48 Cardinal */
    &GENERIC,				/* 49 Generic high-speed */
    &XJACK,				/* 50 Megahertz-Xjack */
    &SPIRITII,				/* 51 QuickComm Spirit II */
    &MONTANA,				/* 52 Motorola Montana */
    &COMPAQ,				/* 53 Compaq Data+Fax */
    &FUJITSU,				/* 54 Fujitsu */
    &MHZATT,				/* 55 Megahertz AT&T V.34 */
    &SUPRASON,				/* 56 Suprasonic */
    &BESTDATA,				/* 57 Best Data */
    &ATT1900,				/* 58 AT&T Secure Data STU III 1900 */
    &ATT1910,				/* 59 AT&T Secure Data STU III 1910 */
    &KEEPINTOUCH,			/* 60 AT&T KeepinTouch */
    &USRX2,				/* 61 USR XJ-1560 X2 */
    &ROLM_AT,				/* 62 Rolm with AT command set */
    &ATLAS,				/* 63 Atlas / Newcom */
    &CODEX,				/* 64 Motorola Codex */
    &MT5634ZPX,				/* 65 Multitech MT5634ZPX */
    &ULINKV250,				/* 66 Microlink V.250 56K */
    &ITUTV250,				/* 67 Generic ITU-T V.250 */
    &RWV90,				/* 68 Rockwell V.90 56K */
    &SUPRAX,				/* 69 Diamond Supra Express V.90 */
    &LUCENT,				/* 70 Lucent Venus chipset */
    &PCTEL,				/* 71 PCTel */
    &CONEXANT,				/* 72 Conexant */
    &ZOOMV34,				/* 73 Zoom V.34 */
    &ZOOMV90,				/* 74 Zoom V.90 */
    &ZOOMV92,				/* 75 Zoom V.92 */
    &MOTSM56				/* 76 Motorola SM56 chipset */
#endif /* MINIDIAL */
};
/*
 * Declare modem names and associated numbers for command parsing,
 * and also for doing number-to-name translation.
 *
 * The entries must be in alphabetical order by modem name.
 */
struct keytab mdmtab[] = {
#ifndef MINIDIAL
    "3com-usr-megahertz-56k", n_USRX2,  CM_INV,
    "acer-v90",         n_RWV90,        M_ALIAS,
    "atlas-newcom-33600ifxC", n_ATLAS,  0,
    "att-1900-stu-iii", n_ATT1900,      0,
    "att-1910-stu-iii", n_ATT1910,      0,
    "att-7300",		n_ATTUPC,	0,
    "att-dataport",	n_DATAPORT,	0,
    "att-dtdm",		n_ATTDTDM,	0,
    "att-isn",          n_ATTISN,       0,
    "att-keepintouch",  n_KEEPINTOUCH,  0,
    "att-switched-net", n_ATTMODEM,	0,

    "att7300",		n_ATTUPC,	CM_INV,	/* old name */
    "attdtdm",		n_ATTDTDM,	CM_INV,	/* old name */
    "attisn",           n_ATTISN,       CM_INV,	/* old name */
    "attmodem",		n_ATTMODEM,	CM_INV,	/* old name */

    "bestdata",         n_BESTDATA,     0,
    "boca",		n_BOCA,		0,
    "cardinal",         n_CARDINAL,     0,
#endif /* MINIDIAL */
    "ccitt-v25bis",	n_CCITT,	CM_INV, /* Name changed to ITU-T */
#ifndef MINIDIAL
#ifdef OLDMODEMS
    "cermetek",		n_CERMETEK,	M_OLD,
#endif /* OLDMODEMS */
    "compaq",           n_COMPAQ,       0,
#ifdef OLDMODEMS
    "concord",		n_CONCORD,	M_OLD,
#endif /* OLDMODEMS */
    "conexant",         n_CONEXANT,     0,
    "courier",          n_USR,          CM_INV,
    "dataport",		n_DATAPORT,	CM_INV,	/* == att-dataport */
#ifdef OLDMODEMS
    "df03-ac",		n_DF03,		M_OLD,
    "df100-series",	n_DF100,	M_OLD,
    "df200-series",	n_DF200,	M_OLD,
#endif /* OLDMODEMS */
    "digitel-dt22",	n_DIGITEL,	0,
#endif /* MINIDIAL */
    "direct",		0,		CM_INV,	/* Synonym for NONE */
#ifndef MINIDIAL
    "fujitsu",          n_FUJITSU,      0,
    "gateway-telepath", n_TELEPATH,     0,
#ifdef OLDMODEMS
    "gdc-212a/ed",	n_GDC,		M_OLD,
    "ge",               n_GENERIC,	CM_INV|CM_ABR,
    "gen",              n_GENERIC,	CM_INV|CM_ABR,
    "gendatacomm",	n_GDC,		CM_INV,	/* Synonym for GDC */
#endif /* OLDMODEMS */
#endif /* MINIDIAL */
    "gene",             n_GENERIC,      CM_INV|CM_ABR,
    "generic",          n_GENERIC,      0,
    "generic-high-speed",n_GENERIC,     CM_INV,
    "h", 	   	n_HAYES,	CM_INV|CM_ABR,
    "ha", 	   	n_HAYES,	CM_INV|CM_ABR,
    "hay",    		n_HAYES,	CM_INV|CM_ABR,
    "haye", 	   	n_HAYES,	CM_INV|CM_ABR,
    "hayes",    	n_HAYES,	CM_INV|CM_ABR, /* Hayes 2400 */
#ifndef MINIDIAL
    "hayes-1200",	n_H_1200,	0,
#endif /* MINIDIAL */
    "hayes-2400",	n_HAYES,	0,
#ifndef MINIDIAL
    "hayes-high-speed", n_H_ACCURA,     0,
    "hayes-accura",     n_H_ACCURA,     CM_INV,
    "hayes-optima",     n_H_ACCURA,     CM_INV,
    "hayes-ultra",	n_H_ULTRA,	CM_INV,
    "hst-courier",      n_USR,          CM_INV,	/* Synonym for COURIER */
    "intel",		n_INTEL,        0,
#endif /* MINIDIAL */

    "itu-t-v250",       n_ITUTV250,     0,
    "itu-t-v25bis",	n_CCITT,	0,	/* New name for CCITT */
    "itu-t-v25ter/v250",n_ITUTV250,     CM_INV,

#ifndef MINIDIAL
    "lucent",           n_LUCENT,      0,
    "maxtech",		n_MAXTECH,     0,

    "megahertz-att-v34",    n_MHZATT,  0, /* Megahertzes */
    "megahertz-xjack",      n_XJACK,   CM_INV|CM_ABR,
    "megahertz-xjack-33.6", n_XJACK,   0,
    "megahertz-xjack-56k",  n_USRX2,   0, /* 3COM/USR/Megahertz 33.6 PC Card */

    "mi",		n_MICROCOM,	CM_INV|CM_ABR,
    "mic",		n_MICROCOM,	CM_INV|CM_ABR,
    "micr",		n_MICROCOM,	CM_INV|CM_ABR,
    "micro",		n_MICROCOM,	CM_INV|CM_ABR,
    "microc",		n_MICROCOM,	CM_INV|CM_ABR,
    "microco",		n_MICROCOM,	CM_INV|CM_ABR,
    "microcom",		n_MICROCOM,	CM_INV|CM_ABR,
    "microcom-at-mode",	n_UCOM_AT,	0, /* Microcom DeskPorte, etc */
    "microcom-sx-mode",	n_MICROCOM,	0, /* Microcom AX,QX,SX, native mode */
    "microlink",        n_MICROLINK,    0,
    "microlink-v250",   n_ULINKV250,    0,
    "motorola-codex",   n_CODEX,        0,
    "motorola-fastalk", n_MOTOROLA,	0,
    "motorola-lifestyle",n_MOTOROLA,	0,
    "motorola-montana", n_MONTANA,	0,
    "motorola-sm56-v90",n_MOTSM56,	0,
    "mt5634zpx",        n_MT5634ZPX,    0,
    "multitech",	n_MULTI,	0,
    "mwave",		n_MWAVE,	0,
#endif /* MINIDIAL */
    "none",             0,              0,
#ifndef MINIDIAL
#ifndef OLDTBCODE
    "old-telebit",      n_TELEBIT,      0,
#endif /* OLDTBCODE */
    "pctel",            n_PCTEL,        0,
#ifdef OLDMODEMS
    "penril",		n_PENRIL,	M_OLD,
#endif /* OLDMODEMS */
    "ppi",              n_PPI,		0,
#ifdef OLDMODEMS
    "racalvadic",	n_RACAL,	M_OLD,
#endif /* OLDMODEMS */
    "rockwell-v32",	n_RWV32,	0,
    "rockwell-v32bis",	n_RWV32B,	0,
    "rockwell-v34",	n_RWV34,	0,
    "rockwell-v90",	n_RWV90,	0,
    "rolm",             n_ROLM,		CM_INV|CM_ABR,
    "rolm-244pc",       n_ROLMAT,       0,
    "rolm-600-series",  n_ROLMAT,       0,
    "rolm-dcm",		n_ROLM,		0,
    "smartlink-v90",    n_USR,          M_ALIAS,
    "spirit-ii",        n_SPIRITII,     0,
    "sportster",        n_USR,          M_ALIAS,
    "sup",	        n_SUPRA,	CM_INV|CM_ABR,
    "supr",	        n_SUPRA,	CM_INV|CM_ABR,
    "supra",	        n_SUPRA,	CM_INV|CM_ABR,
    "supra-express-v90",n_SUPRAX,       0,
    "suprafaxmodem",	n_SUPRA,	0,
    "suprasonic",	n_SUPRASON,	0,
#ifdef CK_TAPI
    "tapi",		n_TAPI,		0,
#endif /* CK_TAPI */
    "te",               n_TBNEW,        CM_INV|CM_ABR,
    "tel",              n_TBNEW,        CM_INV|CM_ABR,
    "telebit",          n_TBNEW,        0,
    "telepath",         n_TELEPATH,     CM_INV,
#endif /* MINIDIAL */
    "unknown",		n_UNKNOWN,	0,
    "user-defined",     n_UDEF,		0,
#ifndef MINIDIAL

    "usr",               n_USR,         CM_INV|CM_ABR,
    "usr-212a",		 n_HAYES,	CM_INV|M_ALIAS,
    "usr-courier",       n_USR,         CM_INV,
    "usr-megahertz-56k", n_USRX2,       0,
    "usr-sportster",     n_USR,         CM_INV,
    "usr-xj1560-x2",     n_USRX2,       CM_INV,
    "usrobotics",        n_USR,         0,

    "v25bis",		n_CCITT,	CM_INV, /* Name changed to ITU-T */
#ifdef OLDMODEMS
    "ventel",		n_VENTEL,	M_OLD,
#endif /* OLDMODEMS */
    "zoltrix-v34",	n_ZOLTRIX,	0,
    "zoltrix-hsp-v90",  n_PCTEL,        M_ALIAS,
    "zoltrix-hcf-v90",  n_ITUTV250,     0,
    "zoo",		n_ZOOM,		CM_INV|CM_ABR,
    "zoom",		n_ZOOM,		CM_INV|CM_ABR,
    "zoom-v32bis",	n_ZOOM,		0,
    "zoom-v34",		n_ZOOMV34,	0,
    "zoom-v90",		n_ZOOMV90,	0,
    "zoom-v92",		n_ZOOMV92,	0,
    "zyxel",		n_ZYXEL,	0,
#endif /* MINIDIAL */
    "",                 0,              0
};
int nmdm = (sizeof(mdmtab) / sizeof(struct keytab)) - 1; /* Number of modems */

#define CONNECTED 1			/* For completion status */
#define D_FAILED  2
#define D_PARTIAL 3

static int tries = 0;
static int mdmecho = 0;			/* Assume modem does not echo */

static char *p;				/* For command strings & messages */

#define LBUFL 200
static char lbuf[LBUFL+4];
char modemmsg[LBUFL+4] = { NUL, NUL };	/* DIAL response from modem */

#ifdef DYNAMIC
#define RBUFL 256
static char *rbuf = NULL;
#else
#define RBUFL 63
static char rbuf[RBUFL+1];
#endif /* DYNAMIC */

#ifdef DYNAMIC
#define FULLNUML 256
char *fbuf = NULL;			/* For full (prefixed) phone number */
#else
#define FULLNUML 100
char fbuf[FULLNUML];
#endif /* DYNAMIC */

static ckjmpbuf sjbuf;

#ifdef CK_ANSIC
static SIGTYP (*savalrm)(int);	/* For saving alarm handler */
static SIGTYP (*savint)(int);	/* For saving interrupt handler */
#else
static SIGTYP (*savalrm)();	/* For saving alarm handler */
static SIGTYP (*savint)();	/* For saving interrupt handler */
#endif /* CK_ANSIC */

#ifdef CKLOGDIAL
static VOID
dologdial(s) char *s; {
    char buf2[16];
    char * r = NULL;
    int x, m, n;
    extern char cxlogbuf[], uidbuf[], myhost[];

    if (!s) s = "";
    if ((x = strlen(s)) > 0) {		/* Replace spaces by underscores */
	r = (char *)malloc(x+1);
	if (r) {
	    int i;
	    for (i = 0; i <= x; i++) {
		if (s[i] != 0 && s[i] <= SP)
		  r[i] = '_';
		else
		  r[i] = s[i];
	    }
	    s = r;
	}
    }
    p = ckdate();
    n = ckstrncpy(cxlogbuf,p,CXLOGBUFL);
    if (!uidbuf[0]) {
	debug(F100,"dologdial uidbuf empty","",0);
	ckstrncpy(uidbuf,(char *)whoami(),UIDBUFLEN);
    }
    m = strlen(uidbuf)+strlen(myhost)+strlen(ttname)+strlen(s)+strlen(buf2)+32;
    if (n+m < CXLOGBUFL-1) {
	p = cxlogbuf+n;
	if (diallcc && diallac) {
	    buf2[0] = '+';
	    ckmakmsg(&buf2[1],15,diallcc,"(",diallac,")");
	} else {
	    ckstrncpy(buf2,"Unknown",16);
	}
	sprintf(p," %s %s T=DIAL H=%s D=%s N=%s O=%s ",	/* safe (prechecked) */
		uidbuf,
		ckgetpid(),
		myhost,
		ttname,
		s,
		buf2
		);
	debug(F110,"dologdial cxlogbuf",cxlogbuf,0);
    } else
      sprintf(p,"LOGDIAL BUFFER OVERFLOW");
    if (r) free(r);
}
#endif /* CKLOGDIAL */

#ifndef MINIDIAL

#ifdef COMMENT
static VOID
xcpy(to,from,len)		/* Copy the given number of bytes */
    register char *to, *from;
    register unsigned int len; {
	while (len--) *to++ = *from++;
}
#endif /* COMMENT */
#endif /* MINIDIAL */

static SIGTYP
#ifdef CK_ANSIC
dialtime(int foo)			/* Timer interrupt handler */
#else
dialtime(foo) int foo;			/* Timer interrupt handler */
#endif /* CK_ANSIC */
/* dialtime */ {

    fail_code = F_TIME;			/* Failure reason = timeout */
    debug(F100,"dialtime caught SIGALRM","",0);
#ifdef BEBOX
#ifdef BE_DR_7
    alarm_expired();
#endif /* BE_DR_7 */
#endif /* BEBOX */
#ifdef OS2
    signal(SIGALRM, dialtime);
#endif /* OS2 */
#ifdef __EMX__
    signal(SIGALRM, SIG_ACK);		/* Needed for OS/2 */
#endif /* __EMX__ */

#ifdef OSK				/* OS-9 */
/*
  We are in an intercept routine but do not perform a F$RTE (done implicitly
  by RTS), so we have to decrement the sigmask as F$RTE does.  Warning:
  longjump only restores the CPU registers, NOT the FPU registers.  So, don't
  use FPU at all or at least don't use common FPU (double or float) register
  variables.
*/
    sigmask(-1);
#endif /* OSK */

#ifdef NTSIG
    if (foo == SIGALRM)
      PostAlarmSigSem();
    else
      PostCtrlCSem();
#else /* NTSIG */
#ifdef NT
    cklongjmp(ckjaddr(sjbuf),1);
#else /* NT */
    cklongjmp(sjbuf,1);
#endif /* NT */
#endif /* NTSIG */
    /* NOTREACHED */
    SIGRETURN;
}

static SIGTYP
#ifdef CK_ANSIC
dialint(int foo)			/* Keyboard interrupt handler */
#else
dialint(foo) int foo;
#endif /* CK_ANSIC */
/* dialint */ {
    fail_code = F_INT;
    debug(F100,"dialint caught SIGINT","",0);
#ifdef OS2
    signal(SIGINT, dialint);
    debug(F100,"dialint() SIGINT caught -- dialint restored","",0) ;
#endif /* OS2 */
#ifdef __EMX__
    signal(SIGINT, SIG_ACK);		/* Needed for OS/2 */
#endif /* __EMX__ */
#ifdef OSK				/* OS-9, see comment in dialtime() */
    sigmask(-1);
#endif /* OSK */
#ifdef NTSIG
    PostCtrlCSem() ;
#ifdef CK_TAPI
    PostTAPIConnectSem();
    PostTAPIAnswerSem();
#endif /* CK_TAPI */
#else /* NTSIG */
#ifdef NT
    cklongjmp(ckjaddr(sjbuf),1);
#else /* NT */
    cklongjmp(sjbuf,1);
#endif /* NT */
#endif /* NT */
    SIGRETURN;
}

/*
  Routine to read a character from communication device, handling TELNET
  protocol negotiations in case we're connected to the modem through a
  TCP/IP TELNET modem server.
*/
static int
ddinc(n) int n; {
#ifdef TNCODE
    int c = 0;
    int done = 0;
    debug(F101,"ddinc entry n","",n);
    while (!done) {
	c = ttinc(n);
	/* debug(F000,"ddinc","",c); */
	if (c < 0) return(c);
#ifndef OS2
	if ((c == IAC) && network && IS_TELNET()) {
	    switch (tn_doop((CHAR)(c & 0xff),duplex,ttinc)) {
	      case 2: duplex = 0; continue;
	      case 1: duplex = 1;
	      default: continue;
	    }
	} else done = 1;
#else /* OS2 */
	done = !(c == IAC && network && IS_TELNET());
	scriptwrtbuf(c);	/* TELNET negotiations handled by emulator */
#endif /* OS2 */
    }
    return(c & 0xff);
#else  /* TNCODE */
    return(ttinc(n));
#endif /* TNCODE */
}

static VOID
ttslow(s,millisec) char *s; int millisec; { /* Output s-l-o-w-l-y */
#ifdef TCPSOCKET
    extern int tn_nlm, tn_b_nlm;
#endif /* TCPSOCKET */
    debug(F111,"ttslow",s,millisec);
    if (dialdpy && (duplex || !mdmecho)) { /* Echo the command in case modem */
	printf("%s\n",s);		/* isn't echoing commands. */
#ifdef OS2
	{
	    char *s2 = s;		/* Echo to emulator */
	    while (*s2) {
		scriptwrtbuf((USHORT)*s2++);
	    }
	    scriptwrtbuf((USHORT)CR);
	    scriptwrtbuf((USHORT)LF);
	}
#endif /* OS2 */
    }
    for (; *s; s++) {
	ttoc(*s);
#ifdef TCPSOCKET
	if (*s == CR && network && IS_TELNET()) {
	    if (!TELOPT_ME(TELOPT_BINARY) && tn_nlm != TNL_CR)
	      ttoc((char)((tn_nlm == TNL_CRLF) ? LF : NUL));
	    else if (TELOPT_ME(TELOPT_BINARY) &&
		     (tn_b_nlm == TNL_CRLF || tn_b_nlm == TNL_CRNUL))
	      ttoc((char)((tn_b_nlm == TNL_CRLF) ? LF : NUL));
        }
#endif /* TCPSOCKET */
	if (millisec > 0)
	  msleep(millisec);
    }
}

/*
 * Wait for a string of characters.
 *
 * The characters are waited for individually, and other characters may
 * be received "in between".  This merely guarantees that the characters
 * ARE received, and in the order specified.
 */
static VOID
waitfor(s) char *s; {
    CHAR c, x;
    while ((c = *s++)) {		/* while more characters remain... */
	do {				/* wait for the character */
	    x = (CHAR) (ddinc(0) & 0177);
	    debug(F000,"dial waitfor got","",x);
	    if (dialdpy) {
		if (x != LF) conoc(x);
		if (x == CR) conoc(LF);
	    }
	} while (x != c);
    }
}

static int
didweget(s,r) char *s, *r; {	/* Looks in string s for response r */
    int lr = (int)strlen(r);	/*  0 means not found, 1 means found it */
    int i;
    debug(F110,"didweget",r,0);
    debug(F110," in",s,0);
    for (i = (int)strlen(s)-lr; i >= 0; i--)
	if ( s[i] == r[0] ) if ( !strncmp(s+i,r,lr) ) return( 1 );
    return( 0 );
}


/* R E S E T -- Reset alarms, etc. on exit. */

static VOID
dreset() {
    debug(F100,"dreset resetting alarm and signal handlers","",0);
    alarm(0);
    signal(SIGALRM,savalrm);		/* restore alarm handler */
    signal(SIGINT,savint);		/* restore interrupt handler */
    debug(F100,"dreset alarm and signal handlers reset","",0);
}

/*
  Call this routine when the modem reports that it has connected at a certain
  speed, giving that speed as the argument.  If the connection speed is not
  the same as Kermit's current communication speed, AND the modem interface
  speed is not locked (i.e. DIAL SPEED-MATCHING is not ON), then change the
  device speed to the one given.
*/
static VOID
#ifdef CK_ANSIC
spdchg(long s)
#else
spdchg(s) long s;
#endif /* CK_ANSIC */
/* spdchg */ {
    int s2;
    if (!mdmspd)			/* If modem interface speed locked, */
      return;				/*  don't do this. */
    if (speed != s) {			/* Speeds differ? */
	s2 = s / 10L;			/* Convert to cps expressed as int */
	if (ttsspd(s2) < 0) {		/* Change speed. */
	    printf(" WARNING - speed change to %ld failed.\r\n",s);
	} else {
	    printf(" Speed changed to %ld.\r\n",s);
	    speed = s;			/* Update global speed variable */
	}
    }
}

/*
  Display all characters received from modem dialer through this routine,
  for consistent handling of carriage returns and linefeeds.
*/
static VOID
#ifdef CK_ANSIC
dialoc(char c)
#else
dialoc(c) char c;
#endif /* CK_ANSIC */
{ /* dialoc */				/* Dial Output Character */
    if (dialdpy) {
	if (c != LF) conoc(c);		/* Don't echo LF */
	if (c == CR) conoc(LF);		/* Echo CR as CRLF */
    }
}

#ifndef NOSPL
char *
getdm(x) int x; {			/* Return dial modifier */
    MDMINF * mp;
    int m;
    int ishayes = 0;
    m = mdmtyp;
    if (m < 1)
      if (mdmsav > -1)
	m = mdmsav;
    if (m < 1)
      return("");
#ifndef MINIDIAL
    if (m == n_TAPI)
      m = n_HAYES;
#endif /* MINIDIAL */
    mp = modemp[m];
    ishayes = (dialcapas ? dialcapas : mp->capas) & CKD_AT;
    switch (x) {
      case VN_DM_LP:
	return(ishayes ? "," : "");
      case VN_DM_SP:
#ifdef MINIDIAL
	return("");
#else
	return(m == n_USR ? "/" : "");
#endif /* MINIDIAL */
      case VN_DM_PD:
	return(ishayes ? "P" : "");
      case VN_DM_TD:
	return(ishayes ? "T" : "");
      case VN_DM_WA:
	return(ishayes ? "@" : "");
      case VN_DM_WD:
	return(ishayes ? "W" : "");
      case VN_DM_RC:
	return(ishayes ? ";" : "");
      case VN_DM_HF:
	return(ishayes ? "!" : "");
      case VN_DM_WB:
	return(ishayes ? "$" : "");
    }
    return("");
}
#endif /* NOSPL */

static VOID
getdialmth() {
    if (dialmauto && diallcc) {		/* If DIAL METHOD AUTO... */
	int i;				/* and we know our area code... */
	for (i = 0; i < ndialtocc; i++) { /* First check Tone countries list */
	    if (!strcmp(dialtocc[i],diallcc)) {
		dialmth = XYDM_T;
		break;
	    }
	}
	for (i = 0; i < ndialpucc; i++) { /* Then Pulse countries list */
	    if (!strcmp(dialpucc[i],diallcc)) {
		dialmth = XYDM_P;
		break;
	    }
	}
    }
}

VOID				/* Get dialing defaults from environment */
getdialenv() {
    char *p = NULL;
    int i, x;

    makestr(&p,getenv("K_DIAL_DIRECTORY"));
    if (p) {
	int i;
	xwords(p,(MAXDDIR - 2),dialdir,0);
	for (i = 0; i < (MAXDDIR - 1); i++) {
	    if (!dialdir[i+1])
	      break;
	    else
	      dialdir[i] = dialdir[i+1];
	}
	ndialdir = i;
    }
    xmakestr(&diallcc,getenv("K_COUNTRYCODE")); /* My country code */
    xmakestr(&dialixp,getenv("K_LD_PREFIX"));   /* My long-distance prefix */
    xmakestr(&dialldp,getenv("K_INTL_PREFIX")); /* My international prefix */
    xmakestr(&dialldp,getenv("K_TF_PREFIX"));   /* Ny Toll-free prefix */

#ifndef NOICP
    p = getenv("K_DIAL_METHOD");	/* Local dial method */
    if (p) if (*p) {
	extern struct keytab dial_m[];
	extern int ndial_m;
	i = lookup(dial_m,p,ndial_m,&x);
	if (i > -1) {
	    if (i == XYDM_A) {
		dialmauto = 1;
		dialmth = XYDM_D;
	    } else {
		dialmauto = 0;
		dialmth = i;
	    }
	}
    }
#endif /* NOICP */

    p = NULL;
    xmakestr(&p,getenv("K_TF_AREACODE")); /* Toll-free areacodes */
    if (p) {
	int i;
	xwords(p,7,dialtfc,0);
	for (i = 0; i < 8; i++) {
	    if (!dialtfc[i+1])
	      break;
	    else
	      dialtfc[i] = dialtfc[i+1];
	}
	ntollfree = i;
	free(p);
    }
    for (i = 0; i < MAXTPCC; i++) {	/* Clear Tone/Pulse country lists */
	dialtocc[i] = NULL;
	dialpucc[i] = NULL;
    }
    for (i = 0; i < MAXTPCC; i++) {	/* Init Tone country list */
	if (tonecc[i])
	  makestr(&(dialtocc[i]),tonecc[i]);
	else
	  break;
    }
    ndialtocc = i;
    for (i = 0; i < MAXTPCC; i++) {	/* Init Pulse country list */
	if (pulsecc[i])
	  makestr(&(dialpucc[i]),pulsecc[i]);
	else
	  break;
    }
    ndialpucc = i;

    if (diallcc) {			/* Have country code */
	if (!strcmp(diallcc,"1")) {	/* If it's 1 */
	    if (!dialldp)		/* Set these prefixes... */
	      makestr(&dialldp,"1");
	    if (!dialtfp)
	      makestr(&dialtfp,"1");
	    if (!dialixp)
	      makestr(&dialixp,"011");
	    if (ntollfree == 0) {	/* Toll-free area codes */
		if ((dialtfc[0] = malloc(4))) {
		    ckstrncpy(dialtfc[0],"800",4); /* 1970-something */
		    ntollfree++;
		    if ((dialtfc[1] = malloc(4))) {
			ckstrncpy(dialtfc[1],"888",4); /* 1996 */
			ntollfree++;
			if ((dialtfc[2] = malloc(4))) {
			    ckstrncpy(dialtfc[2],"877",4); /* 5 April 1998 */
			    ntollfree++;
			    if ((dialtfc[3] = malloc(4))) {
				ckstrncpy(dialtfc[3],"866",4); /* 2000? */
				ntollfree++;
			    }
			}
		    }
		}
	    }
	} else if (!strcmp(diallcc,"358") &&
		   ((int) strcmp(zzndate(),"19961011") > 0)
		   ) {			/* Finland */
	    if (!dialldp)		/* Long-distance prefix */
	      makestr(&dialldp,"9");
	    if (!dialixp) 		/* International dialing prefix */
	      makestr(&dialixp,"990");
	} else {			/* Not NANP or Finland */
	    if (!dialldp)
	      makestr(&dialldp,"0");
	    if (!dialixp)
	      makestr(&dialixp,"00");
	}
    }
    xmakestr(&diallac,getenv("K_AREACODE"));
    xmakestr(&dialpxo,getenv("K_PBX_OCP"));
    xmakestr(&dialpxi,getenv("K_PBX_ICP"));
    p = getenv("K_PBX_XCH");
#ifdef COMMENT
    xmakestr(&dialpxx,p);
#else
    if (p) if (*p) {
	char * s = NULL;
	char * pp[MAXPBXEXCH+2];
	makestr(&s,p);			/* Make a copy for poking */
	if (s) {
	    xwords(s,MAXPBXEXCH+1,pp,0); /* Note: pp[] is 1-based. */
	    for (i = 0; i <= MAXPBXEXCH; i++) {
                if (!pp[i+1]) break;
		makestr(&(dialpxx[i]),pp[i+1]);
		ndialpxx++;
	    }
	    makestr(&s,NULL);		/* Free poked copy */
	}
    }
#endif /* COMMENT */
}

static int
dialfail(x) int x; {
    char * s;

    fail_code = x;
    debug(F101,"ckudial dialfail","",x);
    dreset();				/* Reset alarm and signal handlers */

    printf("%s Failure: ", func_code == 0 ? "DIAL" : "ANSWER");
    if (dialdpy) {			/* If showing progress */
       debug(F100,"dial display is on","",0);
	p = ck_time();			/* get current time; */
	if (*p) printf("%s: ",p);
    }
    switch (fail_code) {		/* Type of failure */
      case F_TIME: 			/* Timeout */
	if (dial_what == DW_INIT)
	  printf ("Timed out while trying to initialize modem.\n");
	else if (dial_what == DW_DIAL)
	  printf ("%s interval expired.\n",
		  func_code == 0 ? "DIAL TIMEOUT" : "ANSWER timeout");
	else
	  printf("Timeout.\n");
	fflush(stdout);
	if (mdmcapas & CKD_AT)
	  ttoc('\015');			/* Send CR to interrupt dialing */
	/* Some Hayes modems don't fail with BUSY on busy lines */
	dialsta = DIA_TIMO;
	debug(F110,"dial","timeout",0);
	break;

      case F_INT:			/* Dialing interrupted */
	printf ("Interrupted.\n");
	fflush(stdout);
#ifndef NOXFER
	interrupted = 1;
#endif /* NOXFER */
	debug(F111,"dial","interrupted",mdmcapas & CKD_AT);
	if (mdmcapas & CKD_AT)
	  ttoc('\015');			/* Send CR to interrupt dialing */
	dialsta = DIA_INTR;
	break;

    case F_MODEM:			/* Modem detected a failure */
         debug(F111,"dialfail()","lbuf",lbuf);
         if (lbuf && *lbuf) {
            printf(" \"");
            for (s = lbuf; *s; s++)
               if (isprint(*s))
                  putchar(*s);		/* Display printable reason */
            printf ("\"");
         } else printf(func_code == 0 ?
                        " Call not completed." :
                        " Call did not come in."
                        );
	printf("\n");
	debug(F110,"dial",lbuf,0);
	if (dialsta < 0) dialsta = DIA_UNSP;
	break;

      case F_MINIT:			/* Failure to initialize modem */
	printf ("Error initializing modem.\n");
	debug(F110,"dial","modem init",0);
	dialsta = DIA_NOIN;
	break;

    default:
	printf("unknown\n");
	debug(F110,"dial","unknown",0);
	fflush(stdout);
	if (mdmcapas & CKD_AT)
	  ttoc('\015');			/* Send CR to interrupt dialing */
	dialsta = DIA_INTR;
    }

#ifdef DYNAMIC
    if (rbuf) free(rbuf); rbuf = NULL;
    if (fbuf) free(fbuf); fbuf = NULL;
#endif /* DYNAMIC */

    if (dialsta < 0) dialsta = DIA_UERR; /* Set failure code */
    return(0);				/* Return zero (important) */
}

/*  C K D I A L	 --  Dial up the remote system */

/* Returns 1 if call completed, 0 otherwise */

static int mdmwait, mdmstat = 0;
#ifndef CK_TAPI
static
#endif /* CK_TAPI */
int waitct;
int mdmwaitd = 10 ;			/* dialtmo / mdmwait difference */
static char c;
static char *telnbr;

static int wr = 0;			/* wr = wake rate */
static char * ws;			/* ws = wake string */
static char * xnum = NULL;
static int inited = 0;

static SIGTYP
#ifdef CK_ANSIC
_dodial(void * threadinfo)
#else /* CK_ANSIC */
_dodial(threadinfo) VOID * threadinfo;
#endif /* CK_ANSIC */
/* _dodial */ {
    char c2;
    char *dcmd, *s, *flocmd = NULL;
    int x = 0, n = F_TIME;

#ifdef NTSIG
    signal( SIGINT, dialint );
    if (threadinfo) {			/* Thread local storage... */
	TlsSetValue(TlsIndex,threadinfo);
    }
#endif /* NTSIG */

    dcmd = dialcmd ? dialcmd : mp->dial_str;
    if ((int)strlen(dcmd) + (int)strlen(telnbr) > (LBUFL - 2)) {
	printf("DIAL command + phone number too long!\n");
	dreset();
#ifdef DYNAMIC
	if (rbuf) free(rbuf); rbuf = NULL;
	if (fbuf) free(fbuf); fbuf = NULL;
#endif /* DYNAMIC */
#ifdef NTSIG
	ckThreadEnd(threadinfo);
#endif /* NTSIG */
	SIGRETURN;	 /* No conversation with modem to complete dialing */
    }
    makestr(&xnum,telnbr);

    getdialmth();			/* Get dial method */

#ifdef CK_ATDT
    /* Combine the SET DIAL METHOD command with the DIAL command string */
    if (!dialcmd &&			/* Using default DIAL command */
	(mdmcapas & CKD_AT) &&		/* AT command set only */
	((dialmth == XYDM_T && !dialtone) || /* and using default */
	 (dialmth == XYDM_P && !dialpulse))) { /* modem commands... */
	char c;
	debug(F110,"dial atdt xnum 1",xnum,0);
	s = dcmd;
	debug(F110,"dial atdt s",s,0);
	if (*telnbr != 'T' &&
	    *telnbr != 'P' &&
	    *telnbr != 't' &&
	    *telnbr != 'p' &&
	    !ckstrcmp(s,"atd",3,0) &&
	    s[3] != 'T' &&
	    s[3] != 'P' &&
	    s[3] != 't' &&
	    s[3] != 'p') {
	    char xbuf[200];
	    c = (dialmth == XYDM_T) ? 'T' : 'P';
	    if (islower(s[0]))
	      c = tolower(c);
	    if ((int)strlen(telnbr) < 199) {
		sprintf(xbuf,"%c%s",c,telnbr);
		makestr(&xnum,xbuf);
	    }
	}
    }
#endif /* CK_ATDT */
    debug(F111,"_dodial",xnum,xredial);

    /* Hang up the modem (in case it wasn't "on hook") */
    /* But only if SET DIAL HANGUP ON... */

    if (!xredial) {			/* Modem not initalized yet. */
	inited = 0;
    }
    if (!xredial || !inited) {
	if (dialhup() < 0) {		/* Hangup first */
	    debug(F100,"_dodial dialhup failed","",0);
#ifndef MINIDIAL
	    if (mdmcapas & CKD_TB)	/* Telebits might need a BREAK */
	      ttsndb();			/*  first. */
#endif /* MINIDIAL */
	    if (dialhng && dialsta != DIA_PART) { /* If hangup failed, */
		ttclos(0);		/* close and reopen the device. */
		if (ttopen(ttname,&local,mymdmtyp,0) < 0) {
		    printf("Sorry, Can't hang up communication device.\n");
		    printf("Try 'set line %s' again.\n",ttname);
		    dialsta = DIA_HANG;
#ifdef DYNAMIC
		    if (rbuf) free(rbuf); rbuf = NULL;
		    if (fbuf) free(fbuf); fbuf = NULL;
#endif /* DYNAMIC */
		    dreset();
#ifdef NTSIG
		    ckThreadEnd(threadinfo);
#endif /* NTSIG */
		    SIGRETURN;
		}
	    }
	}
	inited = 0;			/* We hung up so must reinit */
    }
#ifndef MINIDIAL
    /* Don't start talking to Rolm too soon */
    if (mymdmtyp == n_ROLM && dialsta != DIA_PART)
      msleep(500);
#endif /* MINIDIAL */

    if (dialsta != DIA_PART		/* Some initial setups. */
#ifndef MINIDIAL
	&& mymdmtyp != n_ATTUPC
#endif /* MINIDIAL */
	) {
	fail_code = F_MINIT;		/* Default failure code */
	dial_what = DW_INIT;		/* What I'm Doing Now   */
	if (dialdpy) {			/* If showing progress, */
	    p = ck_time();		/* get timestamp.   */
	    if (!inited)
	      if (*p)
		printf(" Initializing: %s...\n",p);
	}
    }
#ifndef MINIDIAL
#ifdef ATT7300
    if (mymdmtyp == n_ATTUPC) {
/*
  For ATT7300/Unix PC's with their special internal modem.  Whole dialing
  process is handled right here, an exception to the normal structure.
  Timeout and user interrupts are enabled during dialing.  attdial() is in
  file ckutio.c.  - jrd
*/
        _PROTOTYP( int attdial, (char *, long, char *) );
	fail_code = F_MODEM;		/* Default failure code */
	dial_what = DW_DIAL;
	if (dialdpy) {			/* If showing progress */
	    p = ck_time();		/* get current time; */
	    if (*p)
	      printf(" Dialing: %s...\n",p);
	}
	alarm(waitct);			/* Set alarm */
	if (attdial(ttname,speed,telnbr)) { /* dial internal modem */
	    dreset();			/* reset alarms, etc. */
	    printf(" Call failed.\r\n");
	    dialhup();	        	/* Hangup the call */
#ifdef DYNAMIC
	    if (rbuf) free(rbuf); rbuf = NULL;
	    if (fbuf) free(fbuf); fbuf = NULL;
#endif /* DYNAMIC */
	    dialsta = DIA_UERR;
#ifdef NTSIG
	    ckThreadEnd(threadinfo);
#endif /* NTSIG */
	    SIGRETURN;			/* return failure */
	}
	dreset();			/* reset alarms, etc. */
	ttpkt(speed,FLO_DIAX,parity);	/* cancel dialing ioctl */
	if (!quiet && !backgrd) {
	    if (dialdpy) {
		printf("\n");
		printf(" Call complete.\r\n");
	    } else if (modemmsg[0])
		printf(" Call complete: \"%s\".\r\n",(char *)modemmsg);
	    else
	      printf(" Call complete.\r\n");
	}
#ifdef CKLOGDIAL
	dologdial(telnbr);
#endif /* CKLOGDIAL */

	dialsta = DIA_OK;
#ifdef DYNAMIC
	if (rbuf) free(rbuf); rbuf = NULL;
	if (fbuf) free(fbuf); fbuf = NULL;
#endif /* DYNAMIC */
#ifdef NTSIG
	ckThreadEnd(threadinfo);
#endif /* NTSIG */
	SIGRETURN;	/* No conversation with modem to complete dialing */
    } else
#endif /* ATT7300 */
#ifdef CK_TAPI
      if (tttapi && !tapipass) {	/* TAPI Dialing */
	  switch (func_code) {
	    case 0:			/* Dial */
	      if (cktapidial(telnbr)) {
		  fail_code = 0;
		  if (partial) {
		      dialsta = DIA_PART;
		  } else {
		      dialsta = DIA_OK;
		      speed = ttgspd();
		  }
	      } else {
		  if (dialsta == DIA_PART)
		    cktapihangup();
		  if (!fail_code)
		    fail_code = F_MODEM;
		  dialsta = DIA_TAPI;
	      }
	      break;
	    case 1: {			/* Answer */
		long strttime = time((long *)NULL);
		long diff = 0;
		do {
		    if (dialatmo > 0) {
			strttime += diff;
			waitct   -= diff;
		    }
		    fail_code = 0;
		    if (cktapianswer()) { /* SUCCESS */
			dialsta = DIA_OK;
			speed = ttgspd();
			break;
		    } else {		/* FAILURE */
			if (fail_code) {
			    dialsta = DIA_TAPI;
			    break;
			} else {
			    fail_code = F_MODEM;
			    dialsta = DIA_TAPI;
			}
		    }
		    if (dialatmo > 0) {
			diff = time((long *)NULL) - strttime;
		    }
		} while ((dialatmo > 0) ? (diff < waitct) : 1);
		break;
	    }
	  }
#ifdef NTSIG
	  ckThreadEnd(threadinfo);
#endif /* NTSIG */
	  SIGRETURN;
      } else
#endif /* CK_TAPI */
#endif /* MINIDIAL */

/* Modems with AT command set... */

      if ((mdmcapas & CKD_AT) && dialsta != DIA_PART) {

	  if (dialpace > -1)		/* Set intercharacter pacing */
	    wr = dialpace;
	  else
	    wr = mp->wake_rate;

	  if (dialini)			/* Get wakeup/init string */
	    ws = dialini;
	  else
	    ws = mp->wake_str;
#ifdef COMMENT
	  if (!ws) ws = "\015";		/* If none, use CR */
#endif /* COMMENT */

	  /* First get the modem's attention and enable result codes */

	  for (tries = 0; tries < 5; tries++) { /* Send short command */
	      if (tries > 0) {
		  ttoc('\015');		/* AT must go first for speed */
		  msleep(wr);		/* detection. */
	      }
	      if (mymdmtyp == n_GENERIC) /* Force word result codes */
		ttslow("ATQ0V1\015",wr); /* for generic modem type */
	      else
		ttslow("ATQ0\015",wr);
	      mdmstat = getok(tries < 2 ? 2 : tries, 1); /* Get response */
	      if (mdmstat > 0) break;	/* OK - done */
	      if (dialdpy && tries > 0) {
		  printf("\r\n No response from modem");
		  if (tries == 4) {
		      printf(".\r\n");
		      dialsta = DIA_NRSP;
#ifdef DYNAMIC
		      if (rbuf) free(rbuf); rbuf = NULL;
		      if (fbuf) free(fbuf); fbuf = NULL;
#endif /* DYNAMIC */
#ifdef NTSIG
		      ckThreadEnd(threadinfo);
#endif /* NTSIG */
		      SIGRETURN;	/* return failure */
		  }
		  printf(", retrying%s...\r\n",
			 (tries > 1) ? " again" : "");
		  fflush(stdout);
	      }
	      ttflui();
	      switch (tries) {
		case 0: msleep(100); break;
		case 1: ttsndb(); break;
		default:
		  if (network) {
		      ttsndb();
		  } else {
		      if (tries == 2) {
			  tthang();
			  ttflui();
		      } else {
			  mdmhup();
		      }
		      inited = 0;
		  }
	      }
	      fflush(stdout);
	  }
	  debug(F101,"_dodial ATQ0 mdmstat","",mdmstat);

	  if (xredial && inited) {	/* Redialing... */
	      ttoc('\015');		/* Cancel previous */
	      msleep(250);		/* Wait a bit */
#ifdef COMMENT
/* This wasn't the problem... */
	      ttflui();			/* Clear out stuff from modem setup */
	      ttslow("ATS7=60\015",wr);	/* Redo carrier wait */
	      getok(4,1);		/* Get response */
#endif /* COMMENT */
	      alarm(0);			/* Just in case... */
	      ttflui();			/* Clear out stuff from modem setup */
	      goto REDIAL;		/* Skip setup - we already did it */
	  }
/*
  Do flow control next because a long init string echoing back could
  cause data overruns, causing us to miss the OK, or (worse) to get out
  of sync entirely.
*/
	  x = 0;			/* User said SET DIAL FLOW RTS/CTS */
	  if (dialfc == FLO_RTSC ||	/* Even if Kermit's FLOW isn't...  */
	      (dialfc == FLO_AUTO && flow == FLO_RTSC)) {
	      if (dialhwfc) {		/* User-defined HWFC string */
		  if (*dialhwfc) {
		      x = 1;
		      flocmd = dialhwfc;
		  }
	      } else if ((mdmcapas & CKD_HW) && *(mp->hwfc_str)) {
		  x = 1;
		  flocmd = mp->hwfc_str;
	      }
	  } else if (dialfc == FLO_XONX || /* User said SET DIAL FLOW SOFT */
		     (dialfc == FLO_AUTO && flow == FLO_XONX)) {
	      if (dialswfc) {
		  if (*dialswfc) {
		      x = 1;
		      flocmd = dialswfc;
		  }
	      } else if ((mdmcapas & CKD_SW) && *(mp->swfc_str)) {
		  x = 1;
		  flocmd = mp->swfc_str;
	      }
	  } else if (dialfc == FLO_NONE) { /* User said SET DIAL FLOW NONE */
	      if (dialnofc) {
		  if (*dialnofc) {
		      x = 1;
		      flocmd = dialnofc;
		  }
	      } else if (mp->nofc_str && *(mp->nofc_str)) {
		  x = 1;
		  flocmd = mp->nofc_str;
	      }
	  }
	  if (x) {			/* Send the flow control command */
	      debug(F110,"_dodial flocmd",flocmd,0);
	      for (tries = 4; tries > 0; tries--) { /* Send the command */
		  ttslow(flocmd,wr);
		  mdmstat = getok(5,1);
		  if (mdmstat > 0) break;
		  if (dialdpy && tries > 1)
		    printf(" No response from modem, retrying%s...\n",
			   (tries < 4) ? " again" : "");
	      }

#ifdef CK_TTSETFLOW
#ifdef CK_RTSCTS
/*
  So far only ckutio.c has ttsetflow().
  We have just told the modem to turn on RTS/CTS flow control and the modem
  has said OK.  But we ourselves have not turned it on yet because of the
  disgusting ttpkt(...FLO_DIAL...) hack.  So now, if the computer does not
  happen to be asserting RTS, the modem will no longer send characters to it.
  So at EXACTLY THIS POINT, we must enable RTS/CTS in the device driver.
*/
	      if (dialfc == FLO_RTSC ||
		  (dialfc == FLO_AUTO && flow == FLO_RTSC)) {
		  ttsetflow(FLO_RTSC);
	      }
#endif /* CK_RTSCTS */
#endif /* CK_TTSETFLOW */
	  }
	  ttflui();			/* Clear out stuff from modem setup */
	  msleep(250);

	  if (!ws) goto xdialec;	/* No init string */
	  if (!*ws) goto xdialec;

	  for (tries = 4; tries > 0; tries--) { /* Send init string */
	      ttslow(ws,wr);
	      mdmstat = getok(4,1);	/* Get response */
	      if (mdmstat > 0) break;
	      if (dialdpy && tries > 1)
		printf(" No response from modem, retrying%s...\n",
		       (tries < 4) ? " again" : "");
	  }
	  debug(F101,"_dodial wake_str mdmstat","",mdmstat);

	  if (mdmstat < 1) {		/* Initialized OK? */
	      dialfail(F_MINIT);	/* No, fail. */
#ifdef NTSIG
	      ckThreadEnd(threadinfo);
#endif /* NTSIG */
	      SIGRETURN;
	  }

#ifndef MINIDIAL
    } else if (mymdmtyp == n_ATTDTDM && dialsta != DIA_PART) { /* AT&T ... */
	ttsndb();			/* Send BREAK */
#endif /* MINIDIAL */

    } else if (dialsta != DIA_PART) { /* All others */

	/* Place modem into command mode */

	ws = dialini ? dialini : mp->wake_str;
	if (ws && (int)strlen(ws) > 0) {
	    debug(F111,"_dodial default, wake string", ws, wr);
	    ttslow(ws, wr);
	} else debug(F100,"_dodial no wake_str","",0);
	if (mp->wake_prompt && (int)strlen(mp->wake_prompt) > 0) {
	    debug(F110,"_dodial default, waiting for wake_prompt",
		  mp->wake_prompt,0);
	    alarm(10);
	    waitfor(mp->wake_prompt);
	    alarm(0);
	} else debug(F100,"_dodial no wake_prompt","",0);
    }

/* Handle error correction, data compression, and flow control... */

  xdialec:

    if (dialsta != DIA_PART) {
	alarm(0);			/* Turn off alarm */
	debug(F100,"_dodial got wake prompt","",0);
	msleep(500);			/* Allow settling time */

	/* Enable/disable error-correction */

	x = 0;
	if (dialec) {			/* DIAL ERROR-CORRECTION is ON */
	    if (dialecon) {		/* SET DIAL STRING ERROR-CORRECTION */
		if (*dialecon) {
		    x = 1;
		    ttslow(dialecon, wr);
		}
	    } else if ((mdmcapas & CKD_EC) && *(mp->ec_on_str)) {
		x = 1;
		ttslow(mp->ec_on_str, wr);
	    }
#ifdef COMMENT
	    else printf(
		  "WARNING - I don't know how to turn on EC for this modem\n"
		     );
#endif /* COMMENT */
	} else {
	    if (dialecoff) {		/* DIAL ERROR-CORRECTION OFF */
		if (*dialecoff) {
		    x = 1;
		    ttslow(dialecoff, wr);
		}
	    } else if ((mdmcapas & CKD_EC) && *(mp->ec_off_str)) {
		x = 1;
		ttslow(mp->ec_off_str, wr);
	    }
#ifdef COMMENT
	    else printf(
		  "WARNING - I don't know how to turn off EC for this modem\n"
		     );
#endif /* COMMENT */
	}
	debug(F101,"ckudia xx_ok","",xx_ok);
	if (x && xx_ok) {			/* Look for OK response */
	    debug(F100,"ckudia calling xx_ok for EC","",0);
	    x = (*xx_ok)(5,1);
	    debug(F101,"ckudia xx_ok","",x);
	    if (x < 0) {
		printf("WARNING - Trouble enabling error-correction.\n");
		printf(
" Likely cause: Your modem is an RPI model, which does not have built-in\n");
		printf(" error correction and data compression.");
	    }
	}

	/* Enable/disable data compression */

	if (x > 0) x = 0;
	if (dialdc) {
	    if (x < 0 || !dialec) {
		printf(
"WARNING - You can't have compression without error correction.\n");
	    } else if (dialdcon) {	/* SET DIAL STRING ... */
		if (*dialdcon) {
		    x = 1;
		    ttslow(dialdcon, wr);
		}
	    } else if ((mdmcapas & CKD_DC) && *(mp->dc_on_str)) {
		x = 1;
		ttslow(mp->dc_on_str, wr);
	    }
#ifdef COMMENT
	    else printf(
		  "WARNING - I don't know how to turn on DC for this modem\n"
			  );
#endif /* COMMENT */
	} else {
	    if (dialdcoff) {
		if (*dialdcoff) {
		    x = 1;
		    ttslow(dialdcoff, wr);
		}
	    } else if ((mdmcapas & CKD_DC) && *(mp->dc_off_str)) {
		x = 1;
		ttslow(mp->dc_off_str, wr);
	    }
#ifdef COMMENT
	    else printf(
"WARNING - I don't know how to turn off compression for this modem\n"
			  );
#endif /* COMMENT */
	}
	if (x && xx_ok) {			/* Look for OK response */
	    x = (*xx_ok)(5,1);
	    if (x < 0) printf("WARNING - Trouble enabling compression\n");
	}
    }

#ifndef NOXFER
#ifndef MINIDIAL
    if (mdmcapas & CKD_KS && dialsta != DIA_PART) { /* Kermit spoof */
	int r;				/* Register */
	char tbcmdbuf[64];		/* Command buffer */
	switch (mymdmtyp) {

	  case n_MICROCOM:		/* Microcoms in SX mode */
  	    if (dialksp)
	      sprintf(tbcmdbuf,"APM1;KMC%d\015",stchr);	/* safe */
	    else
	      sprintf(tbcmdbuf,"APM0\015"); /* safe */
  	    ttslow(tbcmdbuf, MICROCOM.wake_rate);
  	    alarm(3);
	    waitfor(mp->wake_prompt);
	    alarm(0);
	    break;

	  case n_TELEBIT:		/* Old and new Telebits */
	  case n_TBNEW:
	    if (!dialksp) {
		sprintf(tbcmdbuf,"ATS111=0\015"); /* safe */
	    } else {
		switch (parity) {	/* S111 value depends on parity */
		  case 'e': r = 12; break;
		  case 'm': r = 13; break;
		  case 'o': r = 11; break;
		  case 's': r = 14; break;
		  case 0:
		  default:  r = 10; break;
		}
		sprintf(tbcmdbuf,"ATS111=%d S112=%d\015",r,stchr); /* safe */
	    }
	    ttslow(tbcmdbuf, wr);

/* Not all Telebit models have the Kermit spoof, so ignore response. */

	    if (xx_ok) {		/* Get modem's response */
		x = (*xx_ok)(5,1);
	    }
	}
    }
#endif /* MINIDIAL */
#endif /* NOXFER */

    /* Speaker */

    if (mymdmtyp != n_GENERIC &&
	(mdmcapas & CKD_AT) && (dialsta != DIA_PART) &&
	!dialspon && !dialspoff &&
	!dialvol1 && !dialvol2 &&!dialvol3) {
	/* AT command set and commands have not been customized */
	/* so combine speaker and volume commands. */
	if (mdmspk)
	  sprintf(lbuf,"ATM1L%d%c",mdmvol,13); /* safe */
	else
	  sprintf(lbuf,"ATM0%c",13);	/* safe */
	ttslow(lbuf,wr);		/* Send command */
	getok(5,1);			/* Get but ignore response */
    } else if (dialsta != DIA_PART) {	/* Customized or not AT commands */
	x = 0;				/* Do it the hard way */
	if (mdmspk) {
	    if (dialspon) {
		if (*dialspon) {
		    x = 1;
		    ttslow(dialspon,wr);
		}
	    } else {
                if (mp->sp_on_str[0]) {
		    x = 1;
		    ttslow(mp->sp_on_str,wr);
		}
	    }
	} else {
	    /* s = dialspoff ? dialspoff : mp->sp_off_str; */
	    if (dialspoff) {
		if (*dialspoff) {
		    x = 1;
		    ttslow(dialspoff,wr);
		}
	    } else {
                if (mp->sp_off_str[0]) {
		    x = 1;
		    ttslow(mp->sp_off_str,wr);
		}
	    }
	}
	if (x) {
	    if (xx_ok)			/* Get response */
	      x = (*xx_ok)(5,1);
	    if (x && mdmspk) {		/* Good response and speaker on? */
		switch (mdmvol) {	/* Yes, send volume command. */
		  case 0:
		  case 1:
		    s = dialvol1 ? dialvol1 : mp->vol1_str; break;
		  case 2:
		    s = dialvol2 ? dialvol2 : mp->vol2_str; break;
		  case 3:
		    s = dialvol3 ? dialvol3 : mp->vol3_str; break;
		  default:
		    s = NULL;
		}
		if (s) if (*s) {	/* Send volume command. */
		    ttslow(s, wr);
		    if (xx_ok)		/* Get response but ignore it */
		      (*xx_ok)(5,1);
		}
	    }
	}
    }

#ifndef CK_ATDT
    /* Dialing Method */

    if (dialmth && dialsta != DIA_PART) { /* If dialing method specified... */
	char *s = "";			/* Do it here... */

	if (dialmth == XYDM_T && dialtone) /* Tone */
	  s = dialtone;
	else if (dialmth == XYDM_P && dialpulse) /* Pulse */
	  s = dialpulse;
	if (s) if (*s) {
	    ttslow(s, wr);
	    if (xx_ok)			/* Get modem's response */
	      (*xx_ok)(5,1);		/* (but ignore it...) */
	}
    }
#endif /* CK_ATDT */

    if (dialidt) {			/* Ignore dialtone? */
	char *s = "";
	s = dialx3 ? dialx3 : mp->ignoredt;
	if (s) if (*s) {
	    ttslow(s, wr);
	    if (xx_ok)			/* Get modem's response */
	      (*xx_ok)(5,1);		/* (but ignore it...) */
	}
    }
    {
	char *s = "";			/* Last-minute init string? */
	s = dialini2 ? dialini2 : mp->ini2;
	if (s) if (*s) {
	    ttslow(s, wr);
	    if (xx_ok)			/* Get modem's response */
	      (*xx_ok)(5,1);		/* (but ignore it...) */
	}
    }
    if (func_code == 1) {		/* ANSWER (not DIAL) */
	char *s;
	s = dialaaon ? dialaaon : mp->aa_on_str;
	if (!s) s = "";
	if (*s) {
	    /* Here we would handle caller ID */
	    ttslow(s, (dialpace > -1) ? wr : mp->dial_rate);
	    if (xx_ok)			/* Get modem's response */
	      (*xx_ok)(5,1);		/* (but ignore it...) */
	} else {
	    printf(
"WARNING - I don't know how to enable autoanswer for this modem.\n"
		   );
	} /* And skip all the phone-number & dialing stuff... */
	alarm(waitct);			/* This much time allowed. */
	debug(F101,"_dodial ANSWER waitct","",waitct);

    } else {				/* DIAL (not ANSWER) */

	if (dialsta != DIA_PART) {	/* Last dial was not partial */

	    char *s = "";
#ifdef COMMENT
	    s = dialaaoff ? dialaaoff : mp->aa_off_str;
#endif /* COMMENT */
	    if (s) if (*s) {
		ttslow(s, (dialpace > -1) ? wr : mp->dial_rate);
		if (xx_ok)		/* Get modem's response */
		  (*xx_ok)(5,1);	/* (but ignore it...) */
	    }

	    /* Put modem into dialing mode, if the modem requires it. */

	    if (mp->dmode_str && *(mp->dmode_str)) {
		ttslow(mp->dmode_str, (dialpace > -1) ? wr : mp->dial_rate);
		savalrm = signal(SIGALRM,dialtime);
		alarm(10);
		/* Wait for prompt, if any expected */
		if (mp->dmode_prompt && *(mp->dmode_prompt)) {
		    waitfor(mp->dmode_prompt);
		    msleep(300);
		}
		alarm(0);		/* Turn off alarm on dialing prompts */
		signal(SIGALRM,savalrm); /* Restore alarm */
	    }
	}
	/* AT-Command-Set non-Generic modem */
	if (mdmcapas & CKD_AT && mymdmtyp != n_GENERIC &&
	    dialsta != DIA_PART) {
	    if (mdmwait > 255)		/* If larger than maximum, */
	      mdmwait = 255;		/* make it maximum. */
	    if (dialesc > 0 &&		/* Modem escape character is set */
		dialmhu > 0) {		/* Hangup method is modem command */
		int x = dialesc;
		if (dialesc < 0 || dialesc > 127)
		  x = 128;
		sprintf(lbuf,
			"ATS2=%dS7=%d\015",
			dialesc ? x : mp->esc_char, mdmwait); /* safe */
	    } else
	      sprintf(lbuf,"ATS7=%d%c",mdmwait,13); /* safe */
	    ttslow(lbuf,wr);		/* Set it. */
	    mdmstat = getok(5,1);	/* Get response from modem */
	    /* If it gets an error, go ahead anyway */
	    debug(F101,"_dodial S7 mdmstat","",mdmstat);
	}
	ttflui();			/* Clear out stuff from modem setup */
	inited = 1;			/* Remember modem is initialized */

      REDIAL:
	if ((int)strlen(dcmd) + (int)strlen(xnum) > LBUFL)
	  ckstrncpy(lbuf,"NUMBER TOO LONG!",LBUFL);
	else
	  sprintf(lbuf, dcmd, xnum);	/* safe (prechecked) */
	debug(F110,"dialing",lbuf,0);
	/* Send the dialing string */
	ttslow(lbuf,dialpace > -1 ? wr : mp->dial_rate);

	fail_code = F_MODEM;		/* New default failure code changes */
	dial_what = DW_DIAL;		/* and our state, too. */
	if (dialdpy) {			/* If showing progress */
	    p = ck_time();		/* get current time; */
	    if (*p) printf(" Dialing: %s...\n",p);
#ifdef VMS
	    printf(" \n");
	    fflush(stdout);
#endif /* VMS */
	}
	alarm(waitct);			/* This much time allowed. */
	debug(F101,"_dodial waitct","",waitct);

#ifndef MINIDIAL
#ifdef OLDMODEMS
	switch (mymdmtyp) {
	  case n_RACAL:			/* Acknowledge dialing string */
	    sleep(3);
	    ttflui();
	    ttoc('\015');
	    break;
	  case n_VENTEL:
	    waitfor("\012\012");	/* Ignore the first two strings */
	    break;
	  default:
	    break;
	}
#endif /* OLDMODEMS */
#endif /* MINIDIAL */
    }

/* Check for connection */

    mdmstat = 0;			/* No status yet */
    lbuf[0] = NUL;			/* Default reason for failure */
    debug(F101,"dial awaiting response, mymdmtyp","",mymdmtyp);

#ifndef NOSPL
    modemmsg[0] = NUL;
#endif /* NOSPL */
    while (mdmstat == 0) {		/* Till we get a result or time out */

	if ((mdmcapas & CKD_AT) && nonverbal) { /* AT command set */
	    gethrn();			/* In digit result mode */
	    if (partial && dialsta == DIA_ERR) {
		/*
		   If we get an error here, the phone is still
		   off hook so we have to hang it up.
		*/
		dialhup();
		dialsta = DIA_ERR;	/* (because dialhup() changes it) */
	    }
	    continue;

	} else if (mymdmtyp == n_UNKNOWN) { /* Unknown modem type */
	    int x, y = waitct;
	    mdmstat = D_FAILED;		/* Assume failure. */
	    while (y-- > -1) {
		x = ttchk();
		if (x > 0) {
		    if (x > LBUFL) x = LBUFL;
		    x = ttxin(x,(CHAR *)lbuf);
		    if ((x > 0) && dialdpy) conol(lbuf);
		} else if (network 
#ifdef TN_COMPORT
                           && !istncomport()
#endif /* TN_COMPORT */
                           && x < 0) { /* Connection dropped */
		    inited = 0;
#ifdef NTSIG
		    ckThreadEnd(threadinfo);
#endif /* NTSIG */
		    dialsta = DIA_IO;	/* Call it an I/O error */
#ifdef DYNAMIC
		    if (rbuf) free(rbuf); rbuf = NULL;
		    if (fbuf) free(fbuf); fbuf = NULL;
#endif /* DYNAMIC */
		    SIGRETURN;
		}
		x = ttgmdm();		/* Try to read modem signals */
		if (x < 0) break;	/* Can't, fail. */
		if (x & BM_DCD) {	/* Got signals OK.  Carrier present? */
		    mdmstat = CONNECTED; /* Yes, done. */
		    break;
		}			/* No, keep waiting. */
		sleep(1);
	    }
	    continue;
	}

	for (n = -1; n < LBUFL-1; ) {	/* Accumulate modem response */
	    int xx;
	    c2 = (char) (xx = ddinc(0)); /* Read a character, blocking */
	    if (xx < 1)			/* Ignore NULs and errors */
	      continue;			/* (Timeout will handle errors) */
	    else			/* Real character, keep it */
	      lbuf[++n] = (char) (c2 & 0177);
	    dialoc(lbuf[n]);		/* Maybe echo it  */
	    if (mdmcapas & CKD_V25) {	/* V.25bis dialing... */
/*
  This assumes that V.25bis indications are all at least 3 characters long
  and are terminated by either CRLF or LFCR.
*/
		if (mymdmtyp == n_CCITT) {
		    if (n < 3) continue;
		    if ((lbuf[n] == CR) && (lbuf[n-1] == LF)) break;
		    if ((lbuf[n] == LF) && (lbuf[n-1] == CR)) break;
		}
#ifndef MINIDIAL
		else if (mymdmtyp == n_DIGITEL) {
		    if (((lbuf[n] == CR) && (lbuf[n-1] == LF)) ||
			((lbuf[n] == LF) && (lbuf[n-1] == CR)))
		      break;
		    else
		      continue;
		}
#endif /* MINIDIAL */
	    } else {			/* All others, break on CR or LF */
		if ( lbuf[n] == CR || lbuf[n] == LF ) break;
	    }
	}
	lbuf[++n] = '\0';		/* Terminate response from modem */
	debug(F111,"_dodial modem response",lbuf,n);
#ifndef NOSPL
	ckstrncpy(modemmsg,lbuf,LBUFL);	/* Call result message */
	lbuf[79] = NUL;
	{
	    int x;			/* Strip junk from end */
	    x = (int)strlen(modemmsg) - 1;
	    while (x > -1) {
		if (modemmsg[x] < (char) 33)
		  modemmsg[x] = NUL;
		else
		  break;
		x--;
	    }
	}
#endif /* NOSPL */
	if (mdmcapas & CKD_AT) {	/* Hayes AT command set */
	    gethrw();			/* in word result mode */
	    if (partial && dialsta == DIA_ERR) {
		dialhup();
		dialsta = DIA_ERR;	/* (because dialhup() changes it) */
	    }
	    continue;
	} else if (mdmcapas & CKD_V25) { /* CCITT command set */
	    if (didweget(lbuf,"VAL")) { /* Dial command confirmation */
#ifndef MINIDIAL
		if (mymdmtyp == n_CCITT)
#endif /* MINIDIAL */
		  continue;		/* Go back and read more */
#ifndef MINIDIAL
/* Digitel doesn't give an explicit connect confirmation message */
		else {
		    int n;
		    for (n = -1; n < LBUFL-1; ) {
			lbuf[++n] = c2 = (char) (ddinc(0) & 0177);
			dialoc(lbuf[n]);
			if (((lbuf[n] == CR) && (lbuf[n-1] == LF)) ||
			    ((lbuf[n] == LF) && (lbuf[n-1] == CR)))
			  break;
		    }
		    mdmstat = CONNECTED; /* Assume we're connected */
		    if (dialdpy && carrier != CAR_OFF) {
#ifdef TN_COMPORT
                        if (istncomport()) {
                            int i;
                            for (i = 0; i < 5; i++) {
                                debug(F100,"TN Com Port DCD wait...","",0);
                                if ((n = ttgmdm()) >= 0) {
                                    if ((n & BM_DCD))
                                        break;
                                    msleep(500);
                                    tnc_wait(
					(CHAR *)"_dodial waiting for DCD",1);
                                }
                            }
                        } else
#endif /* TN_COMPORT */
			  sleep(1); 	/* Wait a second */
			n = ttgmdm();	/* Try to read modem signals */
			if ((n > -1) && ((n & BM_DCD) == 0))
			  printf("WARNING - no carrier\n");
		    }
		}
#endif /* MINIDIAL */

		/* Standard V.25bis stuff */

	    } else if (didweget(lbuf,"CNX")) { /* Connected */
		mdmstat = CONNECTED;
	    } else if (didweget(lbuf, "INV")) {
		mdmstat = D_FAILED;	/* Command error */
		dialsta = DIA_ERR;
		ckstrncpy(lbuf,"INV",LBUFL);

	    } else if (didweget(lbuf,"CFI")) { /* Call Failure */

		if (didweget(lbuf,"AB")) { /* Interpret reason code */
		    ckstrncpy(lbuf,"AB: Timed out",LBUFL);
		    dialsta = DIA_TIMO;
		} else if (didweget(lbuf,"CB")) {
		    ckstrncpy(lbuf,"CB: Local DCE Busy",LBUFL);
		    dialsta = DIA_NRDY;
		} else if (didweget(lbuf,"ET")) {
		    ckstrncpy(lbuf,"ET: Busy",LBUFL);
		    dialsta = DIA_BUSY;
		} else if (didweget(lbuf, "NS")) {
		    ckstrncpy(lbuf,"NS: Number not stored",LBUFL);
		    dialsta = DIA_ERR;
		} else if (didweget(lbuf,"NT")) {
		    ckstrncpy(lbuf,"NT: No answer",LBUFL);
		    dialsta = DIA_NOAN;
		} else if (didweget(lbuf,"RT")) {
		    ckstrncpy(lbuf,"RT: Ring tone",LBUFL);
		    dialsta = DIA_RING;
		} else if (didweget(lbuf,"PV")) {
		    ckstrncpy(lbuf,"PV: Parameter value error",LBUFL);
		    dialsta = DIA_ERR;
		} else if (didweget(lbuf,"PS")) {
		    ckstrncpy(lbuf,"PS: Parameter syntax error",LBUFL);
		    dialsta = DIA_ERR;
		} else if (didweget(lbuf,"MS")) {
		    ckstrncpy(lbuf,"MS: Message syntax error",LBUFL);
		    dialsta = DIA_ERR;
		} else if (didweget(lbuf,"CU")) {
		    ckstrncpy(lbuf,"CU: Command unknown",LBUFL);
		    dialsta = DIA_ERR;
		} else if (didweget(lbuf,"FC")) {
		    ckstrncpy(lbuf,"FC: Forbidden call",LBUFL);
		    dialsta = DIA_NOAC;
		}
		mdmstat = D_FAILED;
	    } else if (didweget(lbuf,"INC")) { /* Incoming Call */
		ckstrncpy(lbuf,"INC: Incoming call",LBUFL);
		dialsta = DIA_RING;
		mdmstat = D_FAILED;
	    } else if (didweget(lbuf,"DLC")) { /* Delayed Call */
		ckstrncpy(lbuf,"DLC: Delayed call",LBUFL);
		dialsta = DIA_NOAN;
		mdmstat = D_FAILED;
	    } else			/* Response was probably an echo. */
#ifndef MINIDIAL
	      if (mymdmtyp == n_CCITT)
#endif /* MINIDIAL */
		continue;
#ifndef MINIDIAL
	      else			/* Digitel: If no error, connect. */
		mdmstat = CONNECTED;
#endif /* MINIDIAL */
	    break;

	} else if (n) {			/* Non-Hayes-compatibles... */
	    switch (mymdmtyp) {
#ifndef MINIDIAL
	      case n_ATTMODEM:
		/* Careful - "Connected" / "Not Connected" */
		if (didweget(lbuf,"Busy")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_BUSY;
		} else if (didweget(lbuf,"Not connected") ||
			   didweget(lbuf,"Not Connected")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_NOCA;
		} else if (didweget(lbuf,"No dial tone") ||
			   didweget(lbuf,"No Dial Tone")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_NODT;
		} else if (didweget(lbuf,"No answer") ||
			   didweget(lbuf,"No Answer")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_NOAN;
		} else if (didweget(lbuf,"Answered") ||
			   didweget(lbuf,"Connected")) {
		    mdmstat = CONNECTED;
		    dialsta = DIA_OK;
		}
		break;

	      case n_ATTISN:
		if (didweget(lbuf,"ANSWERED")) {
		    mdmstat = CONNECTED;
		    dialsta = DIA_OK;
		} else if (didweget(lbuf,"BUSY")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_BUSY;
		} else if (didweget(lbuf,"DISCONNECT")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_DISC;
		} else if (didweget(lbuf,"NO ANSWER")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_NOAN;
		} else if (didweget(lbuf,"WRONG ADDRESS")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_NOAC;
		}
		break;

	      case n_ATTDTDM:
		if (didweget(lbuf,"ANSWERED")) {
		    mdmstat = CONNECTED;
		} else if (didweget(lbuf,"BUSY")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_BUSY;
		} else if (didweget(lbuf,"CHECK OPTIONS")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_ERR;
		} else if (didweget(lbuf,"DISCONNECTED")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_DISC;
		} else if (didweget(lbuf,"DENIED")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_NOAC;
		}
#ifdef DEBUG
#ifdef ATT6300
		/* Horrible hack lost in history. */
		else if (deblog && didweget(lbuf,"~~"))
		  mdmstat = CONNECTED;
#endif /* ATT6300 */
#endif /* DEBUG */
		break;

#ifdef OLDMODEMS
	      case n_CERMETEK:
		if (didweget(lbuf,"\016A")) {
		    mdmstat = CONNECTED;
		    ttslow("\016U 1\015",200); /* Make transparent*/
		}
		break;

	      case n_DF03:
		/* Because response lacks CR or NL . . . */
		c = (char) (ddinc(0) & 0177);
		dialoc(c);
		debug(F000,"dial df03 got","",c);
		if ( c == 'A' ) mdmstat = CONNECTED;
		if ( c == 'B' ) mdmstat = D_FAILED;
		break;

	      case n_DF100:	     /* DF100 has short response codes */
		if (strcmp(lbuf,"A") == 0) {
		    mdmstat = CONNECTED; /* Attached */
		    dialsta = DIA_OK;
		} else if (strcmp(lbuf,"N") == 0) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_NOAN; /* No answer or no dialtone */
		} else if (strcmp(lbuf,"E") == 0 || /* Error */
			   strcmp(lbuf,"R") == 0) { /* "Ready" (?) */
		    mdmstat = D_FAILED;
		    dialsta = DIA_ERR;	/* Command error */
		}
		/* otherwise fall thru... */

	      case n_DF200:
		if (didweget(lbuf,"Attached")) {
		    mdmstat = CONNECTED;
		    dialsta = DIA_OK;
		    /*
		     * The DF100 will respond with "Attached" even if DTR
		     * and/or carrier are not present.	Another reason to
		     * (also) wait for carrier?
		     */
		} else if (didweget(lbuf,"Busy")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_BUSY;
		} else if (didweget(lbuf,"Disconnected")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_DISC;
		} else if (didweget(lbuf,"Error")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_ERR;
		} else if (didweget(lbuf,"No answer")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_NOAN;
		} else if (didweget(lbuf,"No dial tone")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_NODT;
		} else if (didweget(lbuf,"Speed:)")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_ERR;
		}
		/*
		 * It appears that the "Speed:..." response comes after an
		 * "Attached" response, so this is never seen.  HOWEVER,
		 * it would be very handy to detect this and temporarily
		 * reset the speed, since it's a nuisance otherwise.
		 * If we wait for some more input from the modem, how do
		 * we know if it's from the remote host or the modem?
		 * Carrier reportedly doesn't get set until after the
		 * "Speed:..." response (if any) is sent.  Another reason
		 * to (also) wait for carrier.
		 */
		break;

	      case n_GDC:
		if (didweget(lbuf,"ON LINE"))
		  mdmstat = CONNECTED;
		else if (didweget(lbuf,"NO CONNECT"))
		  mdmstat = D_FAILED;
		break;

	      case n_PENRIL:
		if (didweget(lbuf,"OK")) {
		    mdmstat = CONNECTED;
		} else if (didweget(lbuf,"BUSY")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_BUSY;
		    } else if (didweget(lbuf,"NO RING")) {
			mdmstat = D_FAILED;
			dialsta = DIA_NOCA;
		    }
		break;

	      case n_RACAL:
		if (didweget(lbuf,"ON LINE"))
		  mdmstat = CONNECTED;
		else if (didweget(lbuf,"FAILED CALL"))
		  mdmstat = D_FAILED;
		break;
#endif /* OLDMODEMS */

	      case n_ROLM:
		if (didweget(lbuf,"CALLING"))
		  mdmstat = 0;
		else if (didweget(lbuf,"COMPLETE"))
		  mdmstat = CONNECTED;
		else if (didweget(lbuf,"FAILED") ||
			 didweget(lbuf,"ABANDONDED")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_NOCA;
		} else if (didweget(lbuf,"NOT AVAILABLE") ||
			   didweget(lbuf,"LACKS PERMISSION") ||
			   didweget(lbuf,"NOT A DATALINE") ||
			   didweget(lbuf,"INVALID DATA LINE NUMBER") ||
			   didweget(lbuf,"INVALID GROUP NAME")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_NOAC;
		} else if (didweget(lbuf,"BUSY")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_BUSY;
		} else if (didweget(lbuf,"DOES NOT ANSWER")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_NOAN;
		}
		break;

#ifdef OLDMODEMS
	      case n_VENTEL:
		if (didweget(lbuf,"ONLINE!") ||
		    didweget(lbuf,"Online!")) {
		    mdmstat = CONNECTED;
		} else if (didweget(lbuf,"BUSY") ||
			   didweget(lbuf,"Busy")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_BUSY;
		} else if (didweget(lbuf,"DEAD PHONE")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_DISC;
		}
		break;

	      case n_CONCORD:
		if (didweget(lbuf,"INITIATING"))
		  mdmstat = CONNECTED;
		else if (didweget(lbuf,"BUSY")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_BUSY;
		} else if (didweget(lbuf,"CALL FAILED")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_NOCA;
		}
		break;
#endif /* OLDMODEMS */

	      case n_MICROCOM:
		/* "RINGBACK" means phone line ringing, continue */
		if (didweget(lbuf,"NO CONNECT")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_NOCA;
		} else if (didweget(lbuf,"BUSY")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_BUSY;
		} else if (didweget(lbuf,"NO DIALTONE")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_NODT;
		} else if (didweget(lbuf,"COMMAND ERROR")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_ERR;
		} else if (didweget(lbuf,"IN USE")) {
		    mdmstat = D_FAILED;
		    dialsta = DIA_NOAC;
		} else if (didweget(lbuf,"CONNECT")) {
		    mdmstat = CONNECTED;
		    /* trailing speed ignored */
		}
		break;

#endif /* MINIDIAL */
	      default:
		printf(
		    "PROGRAM ERROR - No response handler for modem type %d\n",
		       mymdmtyp);
		mdmstat = D_FAILED;
		dialsta = DIA_ERR;
	    }
	}
    } /* while (mdmstat == 0) */

    debug(F101,"_dodial alarm off","",x);
    alarm(0);
    if (mdmstat == D_FAILED) {		/* Failure detected by modem  */
        dialfail(F_MODEM);
#ifdef NTSIG
	ckThreadEnd(threadinfo);
#endif /* NTSIG */
        SIGRETURN;
    } else if (mdmstat == D_PARTIAL )	{ /* Partial dial command OK */
	msleep(500);
	debug(F100,"dial partial","",0);
    } else {				/* Call was completed */
	int x;
	msleep(700);			/* In case modem signals blink  */
	debug(F100,"dial succeeded","",0);
	if (
#ifndef MINIDIAL
	    mymdmtyp != n_ROLM		/* Rolm has weird modem signaling */
#else
	    1
#endif /* MINIDIAL */
	    ) {
	    alarm(3);			/* In case ttpkt() gets stuck... */
	    ttpkt(speed,FLO_DIAX,parity); /* Cancel dialing state ioctl */
            alarm(0);
	}
/*
  In case CD went off in the interval between call completion and return
  from ttpkt()...
*/
	if (carrier != CAR_OFF) {
            if ((x = ttgmdm()) >= 0) {
#ifdef TN_COMPORT
                if (istncomport() && !(x & BM_DCD)) {
                    int i;
                    for (i = 0; i < 5; i++) {
                        msleep(500);
                        tnc_wait((CHAR *)"_dodial waiting for DCD",1);
                        if ((x = ttgmdm()) >= 0) {
                            if ((x & BM_DCD))
                                break;
                        }
                    }
                }
#endif /* TN_COMPORT */
                if (!(x & BM_DCD))
		  printf("WARNING: Carrier seems to have dropped...\n");
            }
        }
    }
    dreset();				/* Reset alarms and signals. */
    if (!quiet && !backgrd) {
	if (dialdpy && (p = ck_time())) { /* If DIAL DISPLAY ON, */
	    printf(" %sall complete: %s.\n", /* include timestamp.  */
		   (mdmstat == D_PARTIAL) ?
		   "Partial c" :
		   "C",
		   p );
	} else if (modemmsg[0]) {
	    printf (" %sall complete: \"%s\".\n",
		    (mdmstat == D_PARTIAL) ? "Partial c" : "C",
		    (char *)modemmsg
		    );
	} else {
	    printf (" %sall complete.\n",
		    (mdmstat == D_PARTIAL) ?
		    "Partial c" :
		    "C"
		    );
	}
    }
#ifdef CKLOGDIAL
    dologdial(telnbr);
#endif /* CKLOGDIAL */

#ifdef DYNAMIC
    if (rbuf) free(rbuf); rbuf = NULL;
    if (fbuf) free(fbuf); fbuf = NULL;
#endif /* DYNAMIC */
    dialsta = (mdmstat == D_PARTIAL) ? DIA_PART : DIA_OK;
#ifdef NTSIG
    ckThreadEnd(threadinfo);
#endif /* NTSIG */
    SIGRETURN;
}

static SIGTYP
#ifdef CK_ANSIC
faildial(void * threadinfo)
#else /* Not CK_ANSIC */
faildial(threadinfo) VOID * threadinfo;
#endif /* CK_ANSIC */
/* faildial */ {
    debug(F100,"longjmp returns to dial routine","",0);
    dialfail(fail_code);
    SIGRETURN;
}

/*
  nbr = number to dial (string)
  x1  = Retry counter
  x2  = Number counter
  fc  = Function code:
        0 == DIAL
        1 == ANSWER
        2 == INIT/CONFIG
        3 == PARTIAL DIAL
*/

int
#ifdef OLD_DIAL
ckdial(nbr) char *nbr;
#else
ckdial(nbr, x1, x2, fc, redial) char *nbr; int x1, x2, fc, redial;
#endif /* OLD_DIAL */
/* ckdial */ {
#define ERMSGL 50
    char errmsg[ERMSGL], *erp;		/* For error messages */
    int n = F_TIME;
    char *s;
    long spdmax;
#ifdef OS2
    extern int term_io;
    int term_io_sav = term_io;
#endif /* OS2 */

    char *mmsg = "Sorry, DIAL memory buffer can't be allocated\n";
    /*
      A DIAL command implies a SET MODEM TYPE command and therefore enables
      hanging up by modem commands rather than dropping DTR.
    */
    mdmset = 1;				/* See mdmhup() */

    partial = 0;
    if (fc == 3) {			/* Partial dial requested */
	partial = 1;			/* Set flag */
	fc = 0;				/* Treat like regular dialing */
    }
    func_code = fc;			/* Make global to this module */
    telnbr = nbr;
    xredial = redial;
    debug(F111,"ckdial entry partial",ckitoa(fc),partial);
    debug(F111,"ckdial entry number",nbr,redial);

    if (fc == 1) {			/* ANSWER command? */
	/* Reset caller ID strings */
	if (callid_date) makestr(&callid_date,NULL);
	if (callid_time) makestr(&callid_time,NULL);
	if (callid_name) makestr(&callid_name,NULL);
	if (callid_nmbr) makestr(&callid_nmbr,NULL);
	if (callid_mesg) makestr(&callid_mesg,NULL);
    }

#ifdef CK_TAPI_X
    if (tttapi && tapipass) {
	if (modemp[n_TAPI] = cktapiGetModemInf()) {
	    mymdmtyp = n_TAPI;
	} else {
	    mymdmtyp = mdmtyp;
	    modemp[n_TAPI] = &GENERIC;
	}
    } else
#endif /* CK_TAPI */
    mymdmtyp = mdmtyp;
    if (mymdmtyp < 0) {			/* Whoa, network dialing... */
	if (mdmsav > -1)
	  mymdmtyp = mdmsav;
    }
    if (mymdmtyp < 0) {
	printf("Invalid modem type %d - internal error.\n",mymdmtyp);
	dialsta = DIA_NOMO;
	return(0);
    }
    dial_what = DW_NOTHING;		/* Doing nothing at first. */
    nonverbal = 0;

/* These are ONLY for the purpose of interpreting numeric result codes. */

    is_motorola =
#ifdef MINIDIAL
      0
#else
      mymdmtyp == n_SUPRA || mymdmtyp == n_SUPRASON;
#endif /* MINIDIAL */
	;

    is_motorola =
#ifdef MINIDIAL
      0
#else
      mymdmtyp == n_MOTOROLA || mymdmtyp == n_MONTANA;
#endif /* MINIDIAL */
	;

    is_rockwell =
#ifdef MINIDIAL
      0
#else
      mymdmtyp == n_RWV32 || mymdmtyp == n_RWV32B ||
	mymdmtyp == n_RWV34 || mymdmtyp == n_RWV90 ||
	  mymdmtyp == n_BOCA || mymdmtyp == n_TELEPATH ||
	    mymdmtyp == n_CARDINAL || mymdmtyp == n_BESTDATA ||
	      mymdmtyp == n_CONEXANT || mymdmtyp == n_PCTEL
#endif /* MINIDIAL */
	;

    is_hayeshispd =
#ifdef MINIDIAL
      0
#else
      mymdmtyp == n_H_ULTRA || mymdmtyp == n_H_ACCURA || n_PPI
#endif /* MINIDIAL */
	;

    is_supra =
#ifdef MINIDIAL
      0
#else
      mymdmtyp == n_SUPRA || mymdmtyp == n_SUPRAX || n_SUPRASON
#endif /* MINIDIAL */
	;

    mp = modemp[mymdmtyp];		/* Set pointer to modem info */
    if (!mp) {
	printf("Sorry, handler for this modem type not yet filled in.\n");
	dialsta = DIA_NOMO;
	return 0;
    }
    debug(F110,"dial number",telnbr,0);
#ifdef COMMENT
    debug(F110,"dial prefix",(dialnpr ? dialnpr : ""), 0);
#endif /* COMMENT */

#ifdef DYNAMIC
    *lbuf = NUL;
    debug(F101,"DIAL lbuf malloc ok","",LBUFL+1);

    if (!rbuf) {    /* This one might already have been allocated by getok() */
	if (!(rbuf = malloc(RBUFL+1))) {    /* Allocate input line buffer */
	    printf("%s", mmsg);
	    dialsta = DIA_IE;
	    return 0;
	} else
	  debug(F101,"DIAL rbuf malloc ok","",RBUFL+1);
    }
    if (!(fbuf = malloc(FULLNUML+1))) {    /* Allocate input line buffer */
	printf("%s", mmsg);
	dialsta = DIA_IE;
	if (rbuf) free(rbuf); rbuf = NULL;
	return 0;
    }
    debug(F101,"DIAL fbuf malloc ok","",FULLNUML+1);
#endif /* DYNAMIC */

    /* NOTE: mdmtyp, not mymdmtyp */

    if (ttopen(ttname,&local,mdmtyp,0) < 0) { /* Open, no carrier wait */
	erp = errmsg;
	if ((int)strlen(ttname) < (ERMSGL - 18)) /* safe, checked */
	  sprintf(erp,"Sorry, can't open %s",ttname);
	else
	  sprintf(erp,"Sorry, can't open device");
	perror(errmsg);
	dialsta = DIA_OPEN;
#ifdef DYNAMIC
	if (rbuf) free(rbuf); rbuf = NULL;
	if (fbuf) free(fbuf); fbuf = NULL;
#endif /* DYNAMIC */
	return 0;
    }

#ifdef CK_TAPI
    if (!tttapi) {
#endif /* CK_TAPI */

/* Condition console terminal and communication line */

    /* Place line into "clocal" dialing state, */
    /* important mainly for System V UNIX.     */

    if (ttpkt(speed,FLO_DIAL,parity) < 0) {
	ttclos(0);			/* If ttpkt fails do all this... */
	if (ttopen(ttname,&local,mymdmtyp,0) < 0) {
	    erp = errmsg;
	    if ((int)strlen(ttname) < (ERMSGL - 18)) /* safe, checked */
	      sprintf(erp,"Sorry, can't reopen %s",ttname);
	    else
	      sprintf(erp,"Sorry, can't reopen device");
	    perror(errmsg);
	    dialsta = DIA_OPEN;
#ifdef DYNAMIC
	    if (rbuf) free(rbuf); rbuf = NULL;
	    if (fbuf) free(fbuf); fbuf = NULL;
#endif /* DYNAMIC */
	    return 0;
	}				/* And try again. */
	if ((ttpkt(speed,FLO_DIAL,parity) < 0)
#ifdef UNIX
	&& (strcmp(ttname,"/dev/null"))
#else
#ifdef OSK
	&& (strcmp(ttname,"/nil"))
#endif /* OSK */
#endif /* UNIX */
#ifdef CK_TAPI
	     && !tttapi
#endif /* CK_TAPI */
	    ) {
	    printf("Sorry, Can't condition communication line\n");
	    printf("Try 'set line %s' again\n",ttname);
	    dialsta = DIA_OPEN;
#ifdef DYNAMIC
	    if (rbuf) free(rbuf); rbuf = NULL;
	    if (fbuf) free(fbuf); fbuf = NULL;
#endif /* DYNAMIC */
	    return 0;
	}
    }
#ifdef CK_TAPI
    }
#endif /* CK_TAPI */

    /* Modem's escape sequence... */

    if (dialesc < 0 || dialesc > 127)
      c = NUL;
    else
      c = (char) (dialesc ? dialesc : mp->esc_char);
    mdmcapas = dialcapas ? dialcapas : mp->capas;

    xx_ok = mp->ok_fn;			/* Pointer to response reader */

    if (mdmcapas & CKD_AT) {		/* Hayes compatible */
	escbuf[0] = c;
	escbuf[1] = c;
	escbuf[2] = c;
	escbuf[3] = NUL;
	/* In case this modem type is user-defined */
	if (!xx_ok) xx_ok = getok;
    } else {				/* Other */
	escbuf[0] = c;
	escbuf[1] = NUL;
	/* In case user-defined */
	if (mdmcapas & CKD_V25) if (!xx_ok) xx_ok = getok;
    }

    /* Partial dialing */

    if (mdmcapas & CKD_AT
#ifndef MINIDIAL
	|| mymdmtyp == n_MICROCOM
#endif /* MINIDIAL */
	) {
	int x;
	x = (int) strlen(telnbr);
	if (x > 0) {
	    if (telnbr[x-1] == ';') {
		partial = 1;
		debug(F110,"ckdial sets partial=1:",telnbr,0);
	    } else if (partial) {
		ckmakmsg(fbuf,FULLNUML,telnbr,";",NULL,NULL); /* add one */
		telnbr = fbuf;
	    }
	}
    }
    msleep(500);

    debug(F101,"ckdial dialtmo","",dialtmo); /* Timeout */

    if (fc == 1) {			/* ANSWER */
	waitct = (dialatmo > -1) ? dialatmo : 0;
    } else {				/* DIAL */
	if (dialtmo < 1) {		/* Automatic computation. */
#ifdef CK_TAPI
	    if (tttapi && !tapipass) {
		waitct = 1 * (int)strlen(telnbr) ; /* Worst case dial time */
		waitct += 60;		/* dialtone + completion wait times */
		for (s = telnbr; *s; s++) { /* add in pause characters time */
		    if (*s == ',') {
			waitct += 2; /* unless it was changed in the modem */
		    } else if (*s == 'W' ||
			       *s == 'w' ||
			       *s == '$' ||
			       *s == '@'
			       ) {
			waitct += 8;
		    }
		}
	    } else {
#endif /* CK_TAPI */
		waitct = 1 * (int)strlen(telnbr) ;
		/* dialtone + completion wait times */
		waitct += mp->dial_time;
		for (s = telnbr; *s; s++) {
		    for (p = mp->pause_chars; *p; p++)
		      if (*s == *p) {
			  waitct += mp->pause_time;
			  break;
		      }
		}
#ifdef CK_TAPI
	    }
#endif /* CK_TAPI */
	} else {
	    waitct = dialtmo;		/* User-specified timeout */
	}
	debug(F101,"ckdial waitct A","",waitct);
    }

/*
  waitct is our alarm() timer.
  mdmwait is how long we tell the modem to wait for carrier.
  We set mdmwait to be 5 seconds less than waitct, to increase the
  chance that we get a response from the modem before timing out.
*/
    if (waitct <= 0) {			/* 0 or negative means wait forever  */
#ifdef COMMENT
	waitct = 254;			/* These were backwards in 7.0.196 */
	mdmwait = 0;
#else
	waitct = 0;			/* Fixed in 7.0.198. */
	mdmwait = 254;
#endif /* COMMENT */
    } else {
	if (dialtmo < 1) {		/* Automatic computation. */
#ifdef XWAITCT
	    /* Addtl wait slop can be defined at compile time */
	    waitct += XWAITCT;
#endif /* XWAITCT */
	    if (waitct < 60 + mdmwaitd)
	      waitct = 60 + mdmwaitd;
	}
	if (mdmcapas & CKD_AT) {	/* AT command-set modems */
	    mdmwait = waitct;		/* S7 timeout = what user asked for */
	    waitct += mdmwaitd;		/* Kermit timeout a bit later */
	} else {			/* Non-AT */
	    mdmwait = waitct;		/* no difference */
	}
    }
    debug(F101,"ckdial waitct B","",waitct);
    if (fc == 1) {			/* ANSWER */
#ifdef COMMENT
/*
  This is wrong.  mdmwait is the value given to S7 in Hayeslike modems.
  When in autoanswer mode, this is the amount of time the modem waits for
  carrier once ringing starts.  Whereas waitct is the timeout given to the
  ANSWER command, which is an entirely different thing.  Since the default
  ANSWER timeout is 0 (meaning "wait forever"), the following statement sets
  S7 to 0, which, on some modems (like the USR Sportster) makes it hang up
  and report NO CARRIER the instant the phone rings.
*/
	mdmwait = waitct;
#else
	if (mdmwait <= 0)
	  mdmwait = 60;			/* Always wait 60 seconds. */
#endif /* COMMENT */

    }
    if (!quiet && !backgrd) {		/* Print information messages. */
#ifdef VMS
	printf(" \n");
	fflush(stdout);
#endif /* VMS */
	if (fc == 1)
	  printf(" Waiting for phone call...\n");
	else
	  printf(" %srying: %s...\n", x1 > 0 ? "Ret" : "T", telnbr);
	if (x1 == 0 && x2 == 0 && dialsta != DIA_PART) {
	    if (network) {
		printf(" Via modem server: %s, modem: %s\n",
		       ttname, gmdmtyp() );
	    } else {
#ifdef CK_TAPI
		if (tttapi && !tapipass)
		  printf(" Device: %s, modem: %s", ttname, "TAPI" );
		else
#endif /* CK_TAPI */
		printf(" Device: %s, modem: %s",
		       ttname, gmdmtyp() );
		if (speed > -1L)
		  printf(", speed: %ld\n", speed);
		else
		  printf(", speed: (unknown)\n");
	    }
	    spdmax = dialmax > 0L ? dialmax : mp->max_speed;

#ifndef NOHINTS
	    if (hints && !quiet &&
		!network && spdmax > 0L && speed > spdmax
#ifdef CK_TAPI
		&& (!tttapi || tapipass)
#endif /* CK_TAPI */
		) {
		printf("\n*************************\n");
		printf(
    "Interface speed %ld might be too high for this modem type.\n",
		       speed
		       );
		printf(
    "If dialing fails, SET SPEED to %ld or less and try again.\n",
		       spdmax
		       );
		printf("(Use SET HINTS OFF to suppress future hints.)\n");
		printf("*************************\n");
		printf("\n");
	    }
#endif /* NOHINTS */
	    printf(" %s timeout: ", fc == 0 ? "Dial" : "Answer");
	    if (waitct > 0)
	      printf("%d seconds\n",mdmwait);
	    else
	      printf(" (none)\n");
	    printf(
#ifdef MAC
	       " Type Command-. to cancel.\n"
#else
#ifdef UNIX
	       " To cancel: type your interrupt character (normally Ctrl-C).\n"
#else
	       " To cancel: type Ctrl-C (hold down Ctrl, press C).\n"
#endif /* UNIX */
#endif /* MAC */
	       );
        }
    }
    debug(F111,"ckdial",ttname,(int) (speed / 10L));
    debug(F101,"ckdial timeout","",waitct);
#ifdef OS2
    term_io = 0;
#endif /* OS2 */

/* Set timer and interrupt handlers. */
    savint = signal( SIGINT, dialint ) ; /* And terminal interrupt handler. */
    cc_alrm_execute(ckjaddr(sjbuf), 0, dialtime, _dodial, faildial);

    signal(SIGINT, savint);
#ifdef OS2
    if (dialsta == DIA_OK)		/* Dialing is completed */
      DialerSend(OPT_KERMIT_CONNECT, 0);
    term_io = term_io_sav;
#endif /* OS2 */
    if (dialsta == DIA_PART || dialsta == DIA_OK) {
	/* This is needed, e.g., for Telnet modem servers */
	if (reliable != SET_OFF || !setreliable) {
	    reliable = SET_OFF;		/* Transport is not reliable */
	    debug(F101,"ckdial reliable","",reliable);
	}
	return(1);			/* Dial attempt succeeded */
    } else {
	return(0);			/* Dial attempt failed */
    }
} /* ckdial */

/*
  getok() - wait up to n seconds for OK (0) or ERROR (4) response from modem.
  Use with Hayeslike or CCITT modems for reading the reply to a nondialing
  command.

  Second argument says whether to be strict about numeric result codes, i.e.
  to require they be preceded by CR or else be the first character in the
  response, e.g. to prevent the ATH0<CR> echo from looking like a valid
  response.  Strict == 0 is needed for ATI on Telebit, which can return the
  model number concatenated with the numeric response code, e.g. "9620"
  ("962" is the model number, "0" is the response code).  getok() Returns:

   0 if it timed out,
   1 if it succeeded,
  -1 on modem command, i/o, or other error.
*/
static ckjmpbuf okbuf;

static SIGTYP
#ifdef CK_ANSIC
oktimo(int foo)				/* Alarm handler for getok(). */
#else
oktimo(foo) int foo;			/* Alarm handler for getok(). */
#endif /* CK_ANSIC */
/* oktimo */ {

#ifdef OS2
    alarm(0);
    /* signal(SIGALRM,SIG_IGN); */
    debug(F100,"oktimo() SIGALRM caught -- SIG_IGN set","",0) ;
#endif /* OS2 */

#ifdef OSK				/* OS-9, see comment in dialtime(). */
    sigmask(-1);
#endif /* OSK */
#ifdef NTSIG
    if ( foo == SIGALRM )
      PostAlarmSigSem();
    else
      PostCtrlCSem();
#else /* NTSIG */
#ifdef NT
    cklongjmp(ckjaddr(okbuf),1);
#else /* NT */
    cklongjmp(okbuf,1);
#endif /* NTSIG */
#endif /* NT */
    /* NOTREACHED */
    SIGRETURN;
}

static int okstatus, okn, okstrict;

static SIGTYP
#ifdef CK_ANSIC
dook(void * threadinfo)
#else /* CK_ANSIC */
dook(threadinfo) VOID * threadinfo ;
#endif /* CK_ANSIC */
/* dook */ {
    CHAR c;
#ifdef DEBUG
    char * mdmmsg = "";
#endif /* DEBUG */

    int i, x;
#ifdef IKSD
    extern int inserver;
#endif /* IKSD */
#ifdef NTSIG
    signal(SIGINT,oktimo);
    if (threadinfo) {			/* Thread local storage... */
	TlsSetValue(TlsIndex,threadinfo);
    }
#endif /* NTSIG */
#ifdef CK_LOGIN
#ifdef NT
#ifdef IKSD
    if (inserver)
      setntcreds();
#endif /* IKSD */
#endif /* NT */
#endif /* CK_LOGIN */

    if (mdmcapas & CKD_V25) {		/* CCITT, easy... */
        waitfor("VAL");
        okstatus = 1;
	debug(F111,"Modem_Response(V25)","VAL",okstatus);
#ifdef NTSIG
	ckThreadEnd(threadinfo);
#endif /* NTSIG */
	SIGRETURN;
#ifndef MINIDIAL
    } else if (mymdmtyp == n_MICROCOM) { /* Microcom in SX mode, also easy */
        waitfor(MICROCOM.wake_prompt);	/* (I think...) */
	debug(F111,"Modem_Response(Microcom)",MICROCOM.wake_prompt,okstatus);
        okstatus = 1;
#ifdef NTSIG
	ckThreadEnd(threadinfo);
#endif /* NTSIG */
	SIGRETURN;
#endif /* MINIDIAL */
    } else {				/* Hayes & friends, start here... */
	okstatus = 0;			/* No status yet. */
	for (x = 0; x < RBUFL; x++)	/* Initialize response buffer */
	  rbuf[x] = SP;			/*  to all spaces */
	rbuf[RBUFL] = NUL;		/* and terminate with NUL. */
	while (okstatus == 0) {		/* While no status... */
	    x = ddinc(okn);		/* Read a character */
	    if (x < 0) {		/* I/O error */
		okstatus = -1;
#ifdef NTSIG
		ckThreadEnd(threadinfo);
#endif /* NTSIG */
		SIGRETURN;
	    }
#ifdef COMMENT
	    /* too much */
	    debug(F101,"getok ddinc","",x); /* Got a character. */
#endif /* COMMENT */
	    c = (char) (x & 0x7f);	/* Get low order 7 bits */
	    if (!c)			/* Don't deposit NULs */
	      continue;			/* or else didweget() won't work */
	    if (dialdpy) conoc((char)c); /* Echo it if requested */
	    for (i = 0; i < RBUFL-1; i++) /* Rotate buffer */
	      rbuf[i] = rbuf[i+1];
	    rbuf[RBUFL-1] = c;		/* Deposit character at end */
#ifdef COMMENT
	    /* too much */
	    debug(F000,"getok:",rbuf,(int) c); /* Log it */
#endif /* COMMENT */
	    switch (c) {		/* Interpret it. */
	      case CR:			/* Got a carriage return. */
		switch(rbuf[RBUFL-2]) {	/* Look at character before it. */
		  case '0':		/* 0 = OK numeric response */
		    if (!okstrict ||
			rbuf[RBUFL-3] == CR || rbuf[RBUFL-3] == SP) {
			nonverbal = 1;
			okstatus = 1;	/* Good response */
		    }
		    debug(F111,"Modem_Response(Hayes)","0",okstatus);
		    break;
		  case '4':		/* 4 = ERROR numeric response */
#ifndef MINIDIAL
		    /* Or Telebit model number 964! */
		    if (mymdmtyp == n_TELEBIT &&
			isdigit(rbuf[RBUFL-3]) &&
			isdigit(rbuf[RBUFL-4]))
		      break;
		    else
#endif /* MINIDIAL */
		      if (!okstrict ||
			rbuf[RBUFL-3] == CR || rbuf[RBUFL-3] == SP) {
			nonverbal = 1;
			okstatus = -1;	/* Bad command */
		    }
		    debug(F111,"Modem_Response(Hayes)","4",okstatus);
		    break;
		}
		if (dialdpy && nonverbal) /* If numeric results, */
		  conoc(LF);		  /* echo a linefeed too. */
		break;
	      case LF:			/* Got a linefeed. */
		/*
		  Note use of explicit octal codes in the string for
		  CR and LF.  We want real CR and LF here, not whatever
		  the compiler happens to replace \r and \n with...
		*/
		if (!strcmp(rbuf+RBUFL-4,"OK\015\012")) { /* Good response */
		    okstatus = 1;
		    debug(F111,"Modem_Response(Hayes)","OK",okstatus);
		}
		if (!strcmp(rbuf+RBUFL-3,"OK\012")) { /* Good response */
		    okstatus = 1;
		    debug(F111,"Modem_Response(Hayes)","OK",okstatus);
		} else if (!strcmp(rbuf+RBUFL-7,"ERROR\015\012")) { /* Error */
		    okstatus = -1;
		    debug(F111,"Modem_Response(Hayes)","ERROR",okstatus);
		} else if (!strcmp(rbuf+RBUFL-6,"ERROR\012")) { /* Error */
		    okstatus = -1;
		    debug(F111,"Modem_Response(Hayes)","ERROR",okstatus);
		}
		break;
	      /* Check whether modem echoes its commands... */
	      case 't':			/* Got little t */
		if (!strcmp(rbuf+RBUFL-3,"\015at") || /* See if it's "at" */
		    !strcmp(rbuf+RBUFL-3," at"))
		    mdmecho = 1;
		/* debug(F111,"MDMECHO-t",rbuf+RBUFL-2,mdmecho); */
		break;
	      case 'T':			/* Got Big T */
		if (!strcmp(rbuf+RBUFL-3,"\015AT") ||	/* See if it's "AT" */
		    !strcmp(rbuf+RBUFL-3," AT"))
		    mdmecho = 1;
		/* debug(F111,"MDMECHO-T",rbuf+RBUFL-3,mdmecho); */
		break;
	      default:			/* Other characters, accumulate. */
		okstatus = 0;
		break;
	    }
	}
    }
    debug(F101,"getok","",okstatus);	/* <-- It's a lie (why?) */
#ifdef NTSIG
    ckThreadEnd(threadinfo);
#endif /* NTSIG */
    SIGRETURN;
}

static SIGTYP
#ifdef CK_ANSIC
failok(void * threadinfo)
#else /* CK_ANSIC */
failok(threadinfo) VOID * threadinfo;
#endif /* CK_ANSIC */
/* failok */ {
    debug(F100,"longjmp returned to getok()","",0);
    debug(F100,"getok timeout","",0);
    SIGRETURN;
}

int
getok(n, strict) int n, strict; {
    debug(F101,"getok entry n","",n);
    okstatus = 0;
    okn = n;
    okstrict = strict;

#ifdef DYNAMIC
    if (!rbuf) {
	if (!(rbuf = malloc(RBUFL+1))) { /* Allocate input line buffer */
	    dialsta = DIA_IE;
	    return(-1);
	}
	debug(F101,"GETOK rbuf malloc ok","",RBUFL+1);
    }
#endif /* DYNAMIC */

    mdmecho = 0;			/* Assume no echoing of commands */

    debug(F100,"about to alrm_execute dook()","",0);
    alrm_execute( ckjaddr(okbuf), n, oktimo, dook, failok ) ;
    debug(F100,"returning from alrm_execute dook()","",0);

    ttflui();				/* Flush input buffer */
    return(okstatus);			/* Return status */
}

/*  G E T H R N  --  Get Hayes Result Numeric  */

static VOID
gethrn() {
    char c;
    int x;
/*
  Hayes numeric result codes (Hayes 1200 and higher):
     0 = OK
     1 = CONNECT at 300 bps (or 1200 bps on Hayes 1200 with basic code set)
     2 = RING
     3 = NO CARRIER
     4 = ERROR (in command line)
     5 = CONNECT 1200 (extended code set)
  Hayes 2400 and higher:
     6 = NO DIALTONE
     7 = BUSY
     8 = NO ANSWER
     9 = (there is no 9)
    10 = CONNECT 2400
  Reportedly, the codes for Hayes V.32 modems are:
    1x = CONNECT <suffix>
    5x = CONNECT 1200 <suffix>
    9x = CONNECT 2400 <suffix>
   11x = CONNECT 4800 <suffix>
   12x = CONNECT 9600 <suffix>
  Where:
    x:   suffix:
    R  = RELIABLE
    RC = RELIABLE COMPRESSED
    L  = LAPM
    LC = LAPM COMPRESSED
  And for Telebits, all the above, except no suffix in numeric mode, plus:
    11 = CONNECT 4800
    12 = CONNECT 9600
    13 = CONNECT 14400
    14 = CONNECT 19200
    15 = CONNECT 38400
    16 = CONNECT 57600
    20 = CONNECT 300/REL  (= MNP)
    22 = CONNECT 1200/REL (= MNP)
    23 = CONNECT 2400/REL (= MNP)
    46 = CONNECT 7512  (i.e. 75/1200)
    47 = CONNECT 1275  (i.e. 1200/75)
    48 = CONNECT 7200
    49 = CONNECT 12000
    50 = CONNECT FAST (not on T1600/3000)
    52 = RRING
    53 = DIALING
    54 = NO PROMPTTONE
    61 = CONNECT FAST/KERM (Kermit spoof)
    70 = CONNECT FAST/COMP (PEP + compression)
    71 = CONNECT FAST/KERM/COMP (PEP + compression + Kermit spoof)

  And for others, lots of special cases below...
*/
#define NBUFL 8
    char nbuf[NBUFL+1];			/* Response buffer */
    int i = 0, j = 0;			/* Buffer pointers */

    debug(F101,"RESPONSE mdmecho","",mdmecho);
    if (mdmecho) {			/* Sponge up dialing string echo. */
	while (1) {
	    c = (char) (ddinc(0) & 0x7f);
	    debug(F000,"SPONGE","",c);
	    dialoc(c);
	    if (c == CR) break;
	}
    }
    while (mdmstat == 0) {		/* Read response */
	for (i = 0; i < NBUFL; i++)	/* Clear the buffer */
	  nbuf[i] = '\0';
	i = 0;				/* Reset the buffer pointer. */
	c = (char) (ddinc(0) & 0177);	/* Get first digit of response. */
					/* using an untimed, blocking read. */
	debug(F000,"RESPONSE-A","",c);
	dialoc(c);			/* Echo it if requested. */
	if (!isdigit(c))		/* If not a digit, keep looking. */
	  continue;
	nbuf[i++] = c;			/* Got first digit, save it. */
	while (c != CR && i < 8) {	/* Read chars up to CR */
	    x = ddinc(0) & 0177;	/* Get a character. */
	    c = (char) x;		/* Got it OK. */
	    debug(F000,"RESPONSE-C","",c);
	    if (c != CR)		/* If it's not a carriage return, */
	      nbuf[i++] = c;		/*  save it. */
	    dialoc(c);			/* Echo it. */
	}
	nbuf[i] = '\0';			/* Done, terminate the buffer. */
	debug(F110,"dial hayesnv lbuf",lbuf,0);
	debug(F111,"dial hayesnv got",nbuf,i);
	/*
	   Separate any non-numeric suffix from the numeric
	   result code with a null.
	*/
	for (j = i-1; (j > -1) && !isdigit(nbuf[j]); j--)
	  nbuf[j+1] = nbuf[j];
	j++;
	nbuf[j++] = '\0';
	debug(F110,"dial hayesnv numeric",nbuf,0);
	debug(F111,"dial hayesnv suffix ",nbuf+j,j);
	/* Probably phone number echoing. */
	if ((int)strlen(nbuf) > 3)
	  continue;

	/* Now read and interpret the results... */

	i = atoi(nbuf);	/* Convert to integer */
	switch (i) {
	  case 0:
	    mdmstat = D_PARTIAL;	/* OK response */
	    break;
	  case 1:			/* CONNECT */
	    mdmstat = CONNECTED;	/* Could be any speed */
	    break;
	  case 2:			/* RING */
	    if (dialdpy)
	      printf("\r\n Local phone is ringing!\r\n");
	    mdmstat = D_FAILED;
	    dialsta = DIA_RING;
	    break;
	  case 3:			/* NO CARRIER */
	    if (dialdpy) printf("\r\n No Carrier.\r\n");
	    mdmstat = D_FAILED;
	    dialsta = DIA_NOCA;
	    break;
	  case 4:			/* ERROR */
	    if (dialdpy)
	      printf("\r\n Modem Command Error.\r\n");
	    mdmstat = D_FAILED;
	    dialsta = DIA_ERR;
	    break;
	  case 5:			/* CONNECT 1200 */
	    spdchg(1200L); /* Change speed if necessary. */
	    mdmstat = CONNECTED;
	    break;
	  case 6:			/* NO DIALTONE */
#ifndef MINIDIAL
	    if (mymdmtyp == n_MICROLINK && atoi(diallcc) == 49 && dialdpy)
	      printf("\r\n Dial Locked.\r\n"); /* Germany */
	    else
#endif /* MINIDIAL */
	      if (dialdpy)
		printf("\r\n No Dialtone.\r\n");
	    mdmstat = D_FAILED;
	    dialsta = DIA_NODT;
	    break;
	  case 7:			/* BUSY */
	    if (dialdpy) printf("\r\n Busy.\r\n");
	    mdmstat = D_FAILED;
	    dialsta = DIA_BUSY;
	    break;
	  case 8:			/* NO ANSWER */
#ifndef MINIDIAL
	    if (mymdmtyp == n_MICROLINK && atoi(diallcc) == 41 && dialdpy)
	      printf("\r\n Dial Locked.\r\n"); /* Switzerland */
	    else
#endif /* MINIDIAL */
	      if (dialdpy)
		printf("\r\n No Answer.\r\n");
	    mdmstat = D_FAILED;
	    dialsta = DIA_NOAN;
	    break;

	  case 9:
#ifndef MINIDIAL
	    if (mymdmtyp == n_XJACK || mymdmtyp == n_SUPRAX) {
		spdchg(600);
		break;
	    } /* fall thru */
#endif /* MINIDIAL */
	  case 10:			/* CONNECT 2400 */
	    spdchg(2400L);		/* Change speed if necessary. */
	    mdmstat = CONNECTED;
	    break;

#ifndef MINIDIAL

/* Starting here, we get different meanings from different manufacturers */

	  case 11:
	    if (mymdmtyp == n_USR) {
		if (dialdpy) printf(" Ringing...\r\n");
	    } else {
		spdchg(4800L);		/* CONNECT 4800 */
		mdmstat = CONNECTED;
	    }
	    break;
	  case 12:
	    if (mymdmtyp == n_USR) {
		if (dialdpy)
		  printf("\r\n Answered by voice.\r\n");
		mdmstat = D_FAILED;
		dialsta = DIA_VOIC;
	    } else if (mymdmtyp == n_KEEPINTOUCH) {
		spdchg(7200L);
		mdmstat = CONNECTED;
	    } else {
		spdchg(9600L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 13:
	    if (mymdmtyp == n_ATT1900 || mymdmtyp == n_ATT1910) {
		if (dialdpy) printf(" Wait...\r\n");
		break;
	    } else if (mymdmtyp == n_USR || mymdmtyp == n_USRX2)
	      spdchg(9600L);
	    else if (is_rockwell || is_supra ||
		mymdmtyp == n_ZOLTRIX || mymdmtyp == n_XJACK)
	      spdchg(7200L);
	    else if (mymdmtyp != n_MICROLINK)
	      spdchg(14400L);
	    mdmstat = CONNECTED;
	    break;
	  case 14:
	    if (is_rockwell || is_supra || mymdmtyp == n_XJACK)
	      spdchg(12000L);
	    else if (mymdmtyp == n_DATAPORT || mymdmtyp == n_MICROLINK)
	      spdchg(14400L);
	    else if (mymdmtyp == n_KEEPINTOUCH)
	      spdchg(9600L);
	    else if (mymdmtyp != n_USR && mymdmtyp != n_ZOLTRIX)
	      spdchg(19200L);
	    mdmstat = CONNECTED;
	    break;
	  case 15:
	    if (is_rockwell || is_supra ||
		mymdmtyp == n_ZOLTRIX || mymdmtyp == n_XJACK)
	      spdchg(14400L);
	    else if (mymdmtyp == n_USR)
	      spdchg(1200L);
	    else if (mymdmtyp == n_ZYXEL || mymdmtyp == n_INTEL)
	      spdchg(7200L);
	    else if (mymdmtyp == n_DATAPORT)
	      spdchg(19200L);
	    else
	      spdchg(38400L);
	    mdmstat = CONNECTED;
	    break;
	  case 16:
	    if (is_rockwell || is_supra ||
		mymdmtyp == n_ZOLTRIX || mymdmtyp == n_XJACK)
	      spdchg(19200L);
	    else if (mymdmtyp == n_USR)
	      spdchg(2400L);
	    else if (mymdmtyp == n_DATAPORT)
	      spdchg(7200L);
	    else if (mymdmtyp != n_ZYXEL && mymdmtyp != n_INTEL) /* 12000 */
	      spdchg(57600L);
	    mdmstat = CONNECTED;
	    break;
	  case 17:
	    if (mymdmtyp != n_DATAPORT || mymdmtyp == n_XJACK)	/* 16800 */
	      spdchg(38400L);
	    else if (mymdmtyp == n_ZYXEL || mymdmtyp == n_INTEL)
	      spdchg(14400L);
	    else if (mymdmtyp == n_KEEPINTOUCH)
	      spdchg(14400L);
	    else if (mymdmtyp == n_USR)
	      spdchg(9600L);
	    mdmstat = CONNECTED;
	    break;
	  case 18:
	    if (is_rockwell || is_supra ||
		mymdmtyp == n_ZOLTRIX || mymdmtyp == n_XJACK ||
		mymdmtyp == n_MHZATT || mymdmtyp == n_LUCENT)
	      spdchg(57600L);
	    else if (mymdmtyp == n_INTEL)
	      spdchg(19200L);
	    else if (mymdmtyp == n_USR || mymdmtyp == n_USRX2)
	      spdchg(4800L);
	    mdmstat = CONNECTED;
	    break;
	  case 19:
	    if (mymdmtyp == n_DATAPORT)
	      spdchg(300L);
	    else if (mymdmtyp == n_ZYXEL || mymdmtyp == n_INTEL)
	      spdchg(38400L);
	    else
	      spdchg(115200L);
	    mdmstat = CONNECTED;
	    break;
	  case 20:
	    if (mymdmtyp == n_USR || mymdmtyp == n_USRX2)
	      spdchg(7200L);
	    else if (mymdmtyp == n_DATAPORT)
	      spdchg(2400L);
	    else if (mymdmtyp == n_ZYXEL || mymdmtyp == n_INTEL)
	      spdchg(57600L);
	    else
	      spdchg(300L);
	    mdmstat = CONNECTED;
	    break;
	  case 21:
	    if (mymdmtyp == n_DATAPORT)
	      spdchg(4800L);
	    mdmstat = CONNECTED;
	    break;
	  case 22:
	    if (is_rockwell || is_supra || mymdmtyp == n_XJACK)
	      spdchg(8880L);
	    else if (mymdmtyp == n_DATAPORT)
	      spdchg(9600L);
	    else if (mymdmtyp == n_KEEPINTOUCH)
	      spdchg(300L);
	    else if (!is_hayeshispd)
	      spdchg(1200L);
	    mdmstat = CONNECTED;
	    break;
	  case 23:
	    if (is_hayeshispd || is_supra ||
		mymdmtyp == n_MULTI || mymdmtyp == n_XJACK)
	      spdchg(8880L);
	    else if (mymdmtyp != n_DATAPORT && !is_rockwell) /* 12000 */
	      spdchg(2400L);
	    mdmstat = CONNECTED;
	    break;
	  case 24:
	    if (is_rockwell ||  is_supra || mymdmtyp == n_XJACK) {
		mdmstat = D_FAILED;
		dialsta = DIA_DELA;	/* Delayed */
		break;
	    } else if (is_hayeshispd || mymdmtyp == n_LUCENT)
	      spdchg(7200L);
	    else if (mymdmtyp == n_DATAPORT)
	      spdchg(14400L);
	    else if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH)
	      spdchg(1200L);
	    mdmstat = CONNECTED;
	    break;
	  case 25:
	    if (mymdmtyp == n_USR || mymdmtyp == n_USRX2)
	      spdchg(14400L);
	    else if (mymdmtyp == n_LUCENT)
	      spdchg(12000L);
	    else if (is_motorola)
	      spdchg(9600L);
	    else if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH)
	      spdchg(2400L);
	    mdmstat = CONNECTED;
	    break;
	  case 26:
	    if (mymdmtyp == n_DATAPORT)
	      spdchg(19200L);
	    else if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH)
	      spdchg(4800L);
	    mdmstat = CONNECTED;
	    break;
	  case 27:
	    if (mymdmtyp == n_DATAPORT)
	      spdchg(38400L);
	    else if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH)
	      spdchg(7200L);
	    else if (mymdmtyp == n_MHZATT)
	      spdchg(8880L);
	    mdmstat = CONNECTED;
	    break;
	  case 28:
	    if (mymdmtyp == n_DATAPORT)
	      spdchg(7200L);
	    else if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH)
	      spdchg(9600L);
	    else if (mymdmtyp == n_MHZATT || mymdmtyp == n_LUCENT)
	      spdchg(38400L);
	    mdmstat = CONNECTED;
	    break;
	  case 29:
	    if (is_motorola)
	      spdchg(4800L);
	    else if (mymdmtyp == n_DATAPORT)
	      spdchg(19200L);
	    mdmstat = CONNECTED;
	    break;
	  case 30:
	    if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH) {
		spdchg(14400L);
		mdmstat = CONNECTED;
	    } /* fall thru on purpose... */
	  case 31:
	    if (mymdmtyp == n_UCOM_AT || mymdmtyp == n_MICROLINK) {
		spdchg(4800L);
		mdmstat = CONNECTED;
	    } else if (is_motorola) {
		spdchg(57600L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 32:
	    if (is_rockwell || is_supra || mymdmtyp == n_XJACK) {
		mdmstat = D_FAILED;
		dialsta = DIA_BLCK;	/* Blacklisted */
	    } else if (mymdmtyp == n_UCOM_AT || mymdmtyp == n_MICROLINK) {
		spdchg(9600L);
		mdmstat = CONNECTED;
	    } else if (mymdmtyp == n_KEEPINTOUCH) {
		spdchg(300L);
		mdmstat = CONNECTED;
	    } else if (mymdmtyp == n_INTEL) {
		spdchg(2400L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 33:			/* FAX connection */
	    if (is_rockwell || is_supra ||
		mymdmtyp == n_ZOLTRIX || mymdmtyp == n_XJACK) {
		mdmstat = D_FAILED;
		dialsta = DIA_FAX;
	    } else if (mymdmtyp == n_UCOM_AT ||
		       is_motorola ||
		       mymdmtyp == n_MICROLINK
		       ) {
		spdchg(9600L);
		mdmstat = CONNECTED;
	    } else if (mymdmtyp == n_MHZATT) {
		spdchg(115200L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 34:
	    if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH) {
		spdchg(1200L);
		mdmstat = CONNECTED;
	    } else if (mymdmtyp == n_MICROLINK) {
		spdchg(7200L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 35:
	    if (is_rockwell) {
		spdchg(300L);
		dialsta = CONNECTED;
	    } else if (is_motorola) {
		spdchg(14400L);
		mdmstat = CONNECTED;
	    } else if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH) {
		spdchg(2400L);
		mdmstat = CONNECTED;
	    } else if (mymdmtyp == n_MICROLINK) {
		spdchg(7200L);
		mdmstat = CONNECTED;
	    } else if (mymdmtyp == n_ZOLTRIX || mymdmtyp == n_XJACK) /* DATA */
	      mdmstat = CONNECTED;
	    break;
	  case 36:
	    if (mymdmtyp == n_UCOM_AT) {
		spdchg(19200L);
		mdmstat = CONNECTED;
	    } else if (is_motorola) {
		spdchg(1200L);
		mdmstat = CONNECTED;
	    } else if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH) {
		spdchg(4800L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 37:
	    if (mymdmtyp == n_UCOM_AT) {
		spdchg(19200L);
		mdmstat = CONNECTED;
	    } else if (is_motorola) {
		spdchg(2400L);
		mdmstat = CONNECTED;
	    } else if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH) {
		spdchg(7200L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 38:
	    if (is_motorola) {
		spdchg(4800L);
		mdmstat = CONNECTED;
	    } else if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH) {
		spdchg(9600L);
		mdmstat = CONNECTED;
	    } /* fall thru on purpose... */
	  case 39:
	    if (mymdmtyp == n_UCOM_AT) {
		spdchg(38400L);
		mdmstat = CONNECTED;
	    } else if (is_motorola) {
		spdchg(9600L);
		mdmstat = CONNECTED;
	    } else if (mymdmtyp == n_MICROLINK) {
		spdchg(14400L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 40:
	    if (mymdmtyp == n_UCOM_AT) {
		mdmstat = D_FAILED;
		dialsta = DIA_NOCA;
	    } else if (is_motorola || mymdmtyp == n_INTEL ||
		       mymdmtyp == n_KEEPINTOUCH) {
		spdchg(14400L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 41:
	    if (is_motorola) {
		spdchg(19200L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 42:
	    if (mymdmtyp == n_KEEPINTOUCH) {
		spdchg(300L);
		mdmstat = CONNECTED;
	    } else if (is_motorola) {
		spdchg(38400L);
		mdmstat = CONNECTED;
	    } /* fall thru on purpose... */
	  case 43:
	    if (mymdmtyp == n_UCOM_AT) {
		spdchg(57600L);
		mdmstat = CONNECTED;
	    } else if (mymdmtyp == n_USRX2)
	      mdmstat = CONNECTED;	/* 168000 */
	    break;
	  case 44:
	    if (is_rockwell) {
		spdchg(8800L);
		dialsta = CONNECTED;
	    } else if (is_motorola) {
		spdchg(7200L);
		mdmstat = CONNECTED;
	    } else if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH) {
		spdchg(1200L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 45:
	    if (is_motorola) {
		spdchg(57600L);
		mdmstat = CONNECTED;
	    } else if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH) {
		spdchg(2400L);
		mdmstat = CONNECTED;
	    } else if (n_USR) {
		spdchg(14400L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 46:
	    if (is_rockwell)
	      spdchg(1200L);
	    else if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH)
	      spdchg(4800L);
	    else
	      spdchg(8880L);		/* 75/1200 split speed */
	    mdmstat = CONNECTED;
	    break;
	  case 47:
	    if (is_rockwell)
	      spdchg(2400L);
	    else if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH)
	      spdchg(7200L);
	    else
	      printf("CONNECT 1200/75 - Not supported by C-Kermit\r\n");
	    mdmstat = CONNECTED;
	    break;
	  case 48:
	    if (is_rockwell)
	      spdchg(4800L);
	    else if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH)
	      spdchg(9600L);
	    else
	      spdchg(7200L);
	    mdmstat = CONNECTED;
	    break;
	  case 49:
	    if (is_rockwell)
	      spdchg(7200L);
	    mdmstat = CONNECTED;
	    break;
	  case 50:			/* CONNECT FAST */
	    if (is_rockwell)
	      spdchg(9600L);
	    else if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH)
	      spdchg(14400L);
	    mdmstat = CONNECTED;
	    break;
	  case 51:
	    if (mymdmtyp == n_UCOM_AT) {
		mdmstat = D_FAILED;
		dialsta = DIA_NODT;
	    }
	    break;
	  case 52:			/* RRING */
	    if (mymdmtyp == n_TELEBIT)
	      if (dialdpy) printf(" Ringing...\r\n");
	    break;
	  case 53:			/* DIALING */
	    if (mymdmtyp == n_TELEBIT)
	      if (dialdpy) printf(" Dialing...\r\n");
	    break;
	  case 54:
	    if (is_rockwell) {
		spdchg(19200L);
		mdmstat = CONNECTED;
	    } else if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH) {
		spdchg(1200L);
		mdmstat = CONNECTED;
	    } else if (mymdmtyp == n_TELEBIT) {
		if (dialdpy) printf("\r\n No Prompttone.\r\n");
		mdmstat = D_FAILED;
		dialsta = DIA_NODT;
	    }
	    break;
	  case 55:
	    if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH) {
		spdchg(2400L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 56:
	    if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH) {
		spdchg(4800L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 57:
	    if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH) {
		spdchg(7200L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 58:
	    if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH) {
		spdchg(9600L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 59:
	    if (mymdmtyp == n_INTEL)	/* 12000 */
	      mdmstat = CONNECTED;
	    break;
	  case 60:
	    if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH) {
		spdchg(14400L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 64:
	    if (mymdmtyp == n_INTEL) {
		spdchg(1200L);
		mdmstat = CONNECTED;
	    } else if (is_supra) {
		spdchg(28800L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 65:
	    if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH) {
		spdchg(2400L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 66:
	    if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH) {
		spdchg(4800L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 67:
	    if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH) {
		spdchg(7200L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 68:
	    if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH) {
		spdchg(9600L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 69:
	    if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH) /* 12000 */
	      mdmstat = CONNECTED;
	    break;
	  case 70:
	    if (mymdmtyp == n_INTEL || mymdmtyp == n_KEEPINTOUCH) {
		spdchg(14400L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 73:
	    if (mymdmtyp == n_UCOM_AT) {
		spdchg(115200L);
		mdmstat = CONNECTED;
		break;
	    } /* else fall thru */
	    if (mymdmtyp == n_TELEBIT)	/* Early models only */
	      mdmstat = CONNECTED;
	    break;
	  case 85:
	    if (mymdmtyp == n_USR || mymdmtyp == n_USRX2)
	      spdchg(19200L);
	    mdmstat = CONNECTED;
	    break;
	  case 91:			/* 21600 */
	  case 99:			/* 24000 */
	  case 103:			/* 26400 */
	    if (mymdmtyp == n_USRX2)
	      mdmstat = CONNECTED;
	    break;
	  case 107:
	    if (mymdmtyp == n_USR || mymdmtyp == n_USRX2) {
		spdchg(28800L);
		mdmstat = CONNECTED;
	    }
	    break;
	  case 151:			/* 312000 */
	  case 155:			/* 336000 */
	    if (mymdmtyp == n_USRX2)
	      mdmstat = CONNECTED;
	    break;

#endif /* MINIDIAL */
	  default:
#ifndef MINIDIAL
	    if (mymdmtyp == n_USR || mymdmtyp == n_USRX2 ||
		is_hayeshispd || is_rockwell)
#endif /* MINIDIAL */
	      if (i > 12)		/* There are hundreds of them... */
		mdmstat = CONNECTED;
	    break;
	}
    }
    if (mdmstat == CONNECTED && nbuf[j] != '\0') {
	if (dialdpy) {
	    printf("\r\n");
	    if (nbuf[j] == 'R') printf(" RELIABLE");
	    if (nbuf[j] == 'L') printf(" LAPM");
	    if (nbuf[j+1] == 'C') printf(" COMPRESSED");
	    printf("\r\n");
	}
	ckstrncpy(lbuf,nbuf,LBUFL);		/* (for messages...) */
    }
}

static VOID				/* Get Hayes Result in Word mode */
gethrw() {
    char *cptr, *s;
    long conspd;

    if (mdmspd && !network) {
	s = lbuf;
	while (*s != '\0' && *s != 'C') s++;
	cptr = (*s == 'C') ? s : NULL;
	conspd = 0L;
	if ((cptr != NULL) && !strncmp(cptr,"CONNECT ",8)) {
	    if ((int)strlen(cptr) < 9)   /* Just CONNECT, */
	      conspd = 300L;		 /* use 300 bps */
	    else if (isdigit(*(cptr+8))) /* not CONNECT FAST */
	      conspd = atol(cptr + 8);   /* CONNECT nnnn */
	    if (conspd != speed) {
		if ((conspd / 10L) > 0) {
		    if (ttsspd((int) (conspd / 10L)) < 0) {
			printf(" Can't change speed to %ld\r\n",
			       conspd);
		    } else {
			speed = conspd;
			mdmstat = CONNECTED;
			if ( !quiet && !backgrd )
			  printf(" Speed changed to %ld\r\n",
				 conspd);
		    }
		}
	    } /* Expanded to handle any conceivable speed */
	}
    }
#ifndef MINIDIAL
    if (mymdmtyp == n_TELEBIT) {
	if (didweget(lbuf,"CONNECT FAST/KERM")) {
	    mdmstat = CONNECTED;
	    if (dialdpy) printf("FAST/KERM ");
	    return;
	}
    }
#endif /* MINIDIAL */
    if (didweget(lbuf,"RRING") ||
	didweget(lbuf,"RINGING") ||
	didweget(lbuf,"DIALING")) {
	mdmstat = 0;
    } else if (didweget(lbuf,"CONNECT")) {
	mdmstat = CONNECTED;
    } else if (didweget(lbuf,"OK")) {
	if (partial) {
	    mdmstat = D_PARTIAL;
	} else {
	    mdmstat = D_FAILED;
	    dialsta = DIA_ERR;
	}
    } else if (didweget(lbuf,"NO CARRIER")) {
	mdmstat = D_FAILED;
	dialsta = DIA_NOCA;
    } else if (didweget(lbuf,"NO DIALTONE")) {
	mdmstat = D_FAILED;
	dialsta = DIA_NODT;
    } else if (didweget(lbuf,"NO DIAL TONE")) {
	mdmstat = D_FAILED;
	dialsta = DIA_NODT;
    } else if (didweget(lbuf,"BUSY")) {
	mdmstat = D_FAILED;
	dialsta = DIA_BUSY;
    } else if (didweget(lbuf,"NO ANSWER")) {
	mdmstat = D_FAILED;
	dialsta = DIA_NOAN;
    } else if (didweget(lbuf,"VOICE")) {
	mdmstat = D_FAILED;
	dialsta = DIA_VOIC;
    } else if (didweget(lbuf,"VCON")) {
	mdmstat = D_FAILED;
	dialsta = DIA_VOIC;
    } else if (didweget(lbuf,"NO PROMPT TONE")) {
	mdmstat = D_FAILED;
	dialsta = DIA_NODT;
    } else if (didweget(lbuf,"REMOTE ACCESS FAILED")) {
	mdmstat = D_FAILED;
	dialsta = DIA_NOCA;
    } else if (didweget(lbuf,"FAX")) {
	mdmstat = D_FAILED;
	dialsta = DIA_FAX;
    } else if (didweget(lbuf,"WAIT - CONNECTING") ||
	       didweget(lbuf,"WAIT-CONNECTING")) { /* AT&T STU-III 19xx */
	mdmstat = 0;
    } else if (didweget(lbuf,"DELAYED")) {
	mdmstat = D_FAILED;
	dialsta = DIA_DELA;
    } else if (didweget(lbuf,"BLACKLISTED")) {
	mdmstat = D_FAILED;
	dialsta = DIA_BLCK;
    } else if (didweget(lbuf,"COMPRESSION")) {
	mdmstat = 0;
    } else if (didweget(lbuf,"PROTOCOL")) {
	mdmstat = 0;
    } else if (didweget(lbuf,"DIAL LOCKED")) { /* Germany, Austria, Schweiz */
	mdmstat = D_FAILED;
	dialsta = DIA_BLCK;
    } else if ( didweget(lbuf,"RING") ||
	        didweget(lbuf,"RING1") || /* Distinctive Ring 1 */
		didweget(lbuf,"RING2") || /* Distinctive Ring 2 */
		didweget(lbuf,"RING3") ) {
	mdmstat = (func_code == 0) ? D_FAILED : 0;
	dialsta = DIA_RING;
    } else if (didweget(lbuf,"ERROR")) {
	mdmstat = D_FAILED;
	dialsta = DIA_ERR;
    } else if (didweget(lbuf,"CARRIER")) { /* Boca / Rockwell family */
#ifdef COMMENT
	if (is_rockwell)
#endif /* COMMENT */
	  mdmstat = 0;
#ifdef COMMENT
	/* Does CARRIER ever mean the same as CONNECT? */
	else
	  mdmstat = CONNECTED;
#endif /* COMMENT */
    } else if (didweget(lbuf,"DATA")) {	/* Boca / Rockwell family */
	/* This message is sent when the modem is in FAX mode  */
	/* So setting this to CONNECTED may not be appropriate */
	/* We must send ATO\015 to the modem in response       */
	/* Then we will get a CONNECTED message                */
	mdmstat = CONNECTED;
    } else if (didweget(lbuf,"DIGITAL LINE")) {
	mdmstat = D_FAILED;
	dialsta = DIA_DIGI;
    } else if (didweget(lbuf,"DATE")) { /* Caller ID Date */
	debug(F110,"CALLID DATE",lbuf,0);
	/* Format is "DATE     =   MMDD"   */
	makestr(&callid_date,lbuf);
    } else if (didweget(lbuf,"TIME")) { /* Caller ID Time */
	/* Format is "TIME     =   HHMM"   */
	debug(F110,"CALLID TIME",lbuf,0);
	makestr(&callid_time,lbuf);
    } else if (didweget(lbuf,"NAME")) { /* Caller ID Name */
	/* Format is "NAME     =   <listing name>"   */
	debug(F110,"CALLID NAME",lbuf,0);
	makestr(&callid_name,lbuf);
    } else if (didweget(lbuf,"NMBR")) { /* Caller ID Number */
	/* Format is "NMBR     =   <number>, 'P' or 'O'"   */
	/* 	'P' means Privacy Requested 		   */
	/*      'O' means Out of Service or Not available  */
	debug(F110,"CALLID NMBR",lbuf,0);
	makestr(&callid_nmbr,lbuf);
    } else if (didweget(lbuf,"MESG")) { /* Caller ID Unrecognized Message */
	/* Format is "MESG     =   <tag><length><data><checksum>"   */
	debug(F110,"CALLID MESG",lbuf,0);
	makestr(&callid_mesg,lbuf);
    }
}

/* Maybe hang up the phone, depending on various SET DIAL parameters. */

int
dialhup() {
    int x = 0;
    if (dialhng && dialsta != DIA_PART) { /* DIAL HANGUP ON? */
	x = mdmhup();			/* Try modem-specific method first */
	debug(F101,"dialhup mdmhup","",x);
	if (x > 0) {			/* If it worked, */
	    dialsta = DIA_HUP;
	    if (dialdpy)
	      printf(" Modem hangup OK\r\n"); /* fine. */
	} else if (network		/* If we're telnetted to */
#ifdef TN_COMPORT
                   && !istncomport()    /* (without RFC 2217)    */
#endif /* TN_COMPORT */
                   ) {		
	    dialsta = DIA_HANG;
	    if (dialdpy)		/* a modem server, just print a msg */
	      printf(" WARNING - modem hangup failed\r\n"); /* don't hangup! */
	    return(0);
	} else {			/* Otherwise */
	    x = tthang();		/* Tell the OS to turn off DTR. */
	    if (x > 0) {		/* Yes, tell results from tthang() */
		dialsta = DIA_HUP;
		if (dialdpy) printf(" Hangup OK\r\n");
	    } else if (x == 0) {
		if (dialdpy) printf(" Hangup skipped\r\n");
	    } else {
		dialsta = DIA_HANG;
		if (dialdpy) perror(" Hangup error");
	    }
	    ttflui();
	}
    } else if (dialdpy) printf(" Hangup skipped\r\n"); /* DIAL HANGUP OFF */
    return(x);
}

/*
  M D M H U P  --

  Sends escape sequence to modem, then sends its hangup command.  Returns:
   0: If modem type is 0 (direct serial connection),
      or if modem type is < 0 (network connection),
      or if no action taken because DIAL MODEM-HANGUP is OFF)
        or because no hangup string for current modem type,
      or C-Kermit is in remote mode,
      or if action taken but there was no positive response from modem;
   1: Success: modem is in command state and acknowledged the hangup command;
  -1: On modem command error.
*/
int
mdmhup() {
#ifdef MDMHUP
    int m, x = 0;
    int xparity;
    int savcarr;
    extern int ttcarr;
    char *s, *p, c;
    MDMINF * mp = NULL;

    debug(F101,"mdmhup dialmhu","",dialmhu); /* MODEM-HANGUP METHOD */
    debug(F101,"mdmhup local","",local);

    if (dialmhu == 0 || local == 0)	/* If DIAL MODEM-HANGUP is OFF, */
      return(0);			/*  or not in local mode, fail. */

    debug(F101,"mdmhup dialsta","",dialsta);
    debug(F101,"mdmhup mdmset","",mdmset);

    if (dialsta != DIA_OK && !mdmset)	/* It's not a dialed connection */
      return(0);

#ifdef CK_TAPI
    if (tttapi && !tapipass)		/* Don't hangup if using TAPI */
      return(0);
#endif /* CK_TAPI */

#ifdef COMMENT
    /* No, we still need this for modems that ignore DTR */
    if (mymdmtyp == n_GENERIC && !network)
      return(0);
#endif /* COMMENT */

    debug(F101,"mdmhup dialesc","",dialesc);
    if (dialesc < 0)
      return(0);			/* No modem escape-character, fail. */

    savcarr = ttcarr;
    ttcarr = CAR_OFF;
    x = ttchk();
    ttcarr = savcarr;
    debug(F101,"mdmhup ttchk","",x);
    if (x < 0)				/* There appears to be no connection */
      return(0);
    x = 0;

#ifdef OS2
/*
  In OS/2, if CARRIER is OFF, and there is indeed no carrier signal, any
  attempt to do i/o at this point can hang the program.  This might be true
  for other operating systems too.
*/
    if (!network			/* Not a network connection */
#ifdef TN_COMPORT
        || istncomport()
#endif /* TN_COMPORT */
	) {
	m = ttgmdm();			/* Get modem signals */
	if ((m > -1) && (m & BM_DCD == 0)) /* Check for carrier */
	  return(0);			/* No carrier, skip the rest */
    }
#endif /* OS2 */

    debug(F111,"mdmhup network",ttname,network);
    debug(F101,"mdmhup mymdmtyp","",mymdmtyp);
    debug(F101,"mdmhup mdmtyp","",mdmtyp);
    /* In case of HANGUP before DIAL */
    if (network && mdmtyp < 1)		/* SET HOST but no subsequent */
      return(0);			/* SET MODEM TYPE... */
    if (mymdmtyp == 0 && mdmtyp > 0)
      mymdmtyp = mdmtyp;
    if (mymdmtyp < 1)			/* Not using a modem */
      return(0);
    if (mymdmtyp > 0)			/* An actual modem... */
      mp = modemp[mymdmtyp];
    if (!mp) {				/* Get pointer to its MDMINF struct */
	debug(F100,"mdmhup no MDMINF","",0);
	return(0);
    }
    mdmcapas = dialcapas ? dialcapas : mp->capas;
    xx_ok = mp->ok_fn;			/* Pointer to response reader */

    s = dialhcmd ? dialhcmd : mp->hup_str; /* Get hangup command */
    if (!s) s = "";
    debug(F110,"mdmhup hup_str",s,0);
    if (!*s) return(0);			/* If none, fail. */

    if (ttpkt(speed,FLO_DIAL,parity) < 0) /* Condition line for dialing */
      return(-1);

    xparity = parity;			/* Set PARITY to NONE temporarily */
    parity = 0;

    /* In case they gave a SET MODEM ESCAPE command recently... */

    if (dialesc < 0 || dialesc > 127)
      c = NUL;
    else
      c = (char) (dialesc ? dialesc : mp->esc_char);

    if (mdmcapas & CKD_AT) {		/* Hayes compatible */
	escbuf[0] = c;
	escbuf[1] = c;
	escbuf[2] = c;
	escbuf[3] = NUL;
    } else {				/* Other */
	escbuf[0] = c;
	escbuf[1] = NUL;
    }
    debug(F110,"mdmhup escbuf",escbuf,0);
    if (escbuf[0]) {			/* Have escape sequence? */
	debug(F101,"mdmhup esc_time",0,mp->esc_time);
	if (mp->esc_time)		/* If we have a guard time */
	  msleep(mp->esc_time);		/* Pause for guard time */
	debug(F100,"mdmhup pause 1 OK","",0);

#ifdef NETCONN				/* Send modem's escape sequence */
	if (network) {			/* Must catch errors here. */
	    if (ttol((CHAR *)escbuf,(int)strlen((char *)escbuf)) < 0) {
		parity = xparity;
		return(-1);
	    }
	    debug(F110,"mdmhup ttslow net ok",escbuf,0);
	} else {
#endif /* NETCONN */
	    ttslow((char *)escbuf,wr); /* Send escape sequence */
	    debug(F110,"mdmhup ttslow ok",escbuf,0);
#ifdef NETCONN
	}
#endif /* NETCONN */

	if (mp->esc_time)		/* Pause for guard time again */
	  msleep(mp->esc_time);
	else
	  msleep(500);			/* Wait half a sec for echoes. */
	debug(F100,"mdmhup pause 1 OK","",0);
#ifdef COMMENT
	ttflui();			/* Flush response or echo, if any */
	debug(F100,"mdmhup ttflui OK","",0);
#endif /* COMMENT */
    }
    ttslow(s,wr);			/* Now Send hangup string */
    debug(F110,"mdmhup ttslow ok",s,0);
/*
  This is not exactly right, but it works.
  If we are online:
    the modem says OK when it gets the escape sequence,
    and it says NO CARRIER when it gets the hangup command.
  If we are offline:
    the modem does NOT say OK (or anything else) when it gets the esc sequence,
    but it DOES say OK (and not NO CARRIER) when it gets the hangup command.
  So the following function should read the OK in both cases.
  Of course, this is somewhat Hayes-specific...
*/
    if (xx_ok) {			/* Look for OK response */
	debug(F100,"mdmhup calling response function","",0);
	x = (*xx_ok)(3,1);		/* Give it 3 seconds, be strict. */
	debug(F101,"mdmhup hangup response","",x);
	msleep(500);			/* Wait half a sec */
	ttflui();			/* Get rid of NO CARRIER, if any */
    } else {				/* No OK function, */
	x = 1;				/* so assume it worked */
	debug(F101,"mdmhup no ok_fn","",x);
    }
    parity = xparity;			/* Restore prevailing parity */
    return(x);				/* Return OK function's return code. */

#else  /* MDMHUP not defined. */

    debug(F100,"mdmhup MDMHUP not defined","",0);
    return(0);				/* Always fail. */

#endif /* MDMHUP */
}

#endif /* NOICP */
#else /* NODIAL */

int mdmtyp = 0;				/* Default modem type */

int					/* To allow NODIAL versions to */
mdmhup() {				/* call mdmhup(), so calls to  */
    return(0);				/* mdmhup() need not be within */
}					/* #ifndef NODIAL conditionals */
#endif /* NODIAL */
#else
int mdmtyp = 0;				/* Default modem type */
#endif /* NOLOCAL */
