ckudia.c
资源名称:cku197.tar.Z [点击查看]
上传用户:dufan58
上传日期:2007-01-05
资源大小:3407k
文件大小:217k
源码类别:
通讯/手机编程
开发平台:
Windows_Unix
- #include "ckcsym.h"
- char *dialv = "Dial Command, 7.0.131, 22 Dec 1999";
- #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 */
- /* C K U D I A -- Module for automatic modem dialing. */
- /*
- Copyright (C) 1985, 2000,
- 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
- others too numerous to list here (but see acknowledgements in ckcmai.c).
- */
- /*
- 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 as they do in UNIX.
- 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 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 */
- #ifdef BIGBUFOK /* Only for versions that are not tight on memory */
- char * dialmsg[] = { /* DIAL status strings */
- /* Keyed to numbers defined in ckcker.h -- keep in sync! */
- "DIAL succeeded", /* 0 */
- "Modem type not specified", /* 1 */
- "Communication device not specified", /* 2 */
- "Communication device can't be opened", /* 3 */
- "Speed not specified", /* 4 */
- "Pre-DIAL hangup failed", /* 5 */
- "Internal error", /* 6 */
- "Device input/output error", /* 7 */
- "DIAL TIMEOUT expired", /* 8 */
- "Interrupted by user", /* 9 */
- "Modem not ready", /* 10 */
- "Partial dial OK", /* 11 */
- "Dial directory lookup error", /* 12 */
- NULL, /* 13 */
- NULL, /* 14 */
- NULL, /* 15 */
- NULL, /* 16 */
- NULL, /* 17 */
- NULL, /* 18 */
- NULL, /* 19 */
- "Modem command error", /* 20 */
- "Failure to initialize modem", /* 21 */
- "Phone busy", /* 22 */
- "No carrier", /* 23 */
- "No dialtone", /* 24 */
- "Incoming call", /* 25 */
- "No answer", /* 26 */
- "Disconnected", /* 27 */
- "Answered by voice", /* 28 */
- "Access denied / forbidden call", /* 29 */
- "Blacklisted", /* 30 */
- "Delayed", /* 31 */
- "Fax connection", /* 32 */
- "TAPI reported failure - reason unknown", /* 33 */
- NULL /* 34 */
- };
- #endif /* BIGBUFOK */
- #ifdef NOSPL
- static
- #endif /* NOSPL */
- char modemmsg[128] = { NUL, NUL }; /* DIAL response from modem */
- #ifdef NTSIG
- extern int TlsIndex;
- #endif /* NTSIG */
- 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 */
- #ifdef NOMDMHUP
- dialmhu = 0; /* DIAL MODEM-HANGUP, 0 = OFF */
- #else
- dialmhu = 1; /* DIAL MODEM-HANGUP */
- #endif /* NOMDMHUP */
- int
- dialec = 0, /* DIAL ERROR-CORRECTION */
- dialdc = 0, /* 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) */
- int is_rockwell = 0;
- int is_motorola = 0;
- int is_supra = 0;
- int is_hayeshispd = 0;
- char *dialdir[MAXDDIR]; /* DIAL DIRECTORY filename array */
- int ndialdir = 0; /* How many dial directories */
- char *dialini = NULL; /* DIAL INIT-STRING, default none */
- char *dialmstr = NULL; /* DIAL MODE-STRING, default none */
- char *dialmprmt = NULL; /* DIAL MODE-PROMPT, default none */
- char *dialcmd = NULL; /* DIAL DIAL-COMMAND, default none */
- 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 */
- extern char * d_name;
- extern char * dialtfc[]; /* DIAL TOLL-FREE-AREA-CODE */
- extern char * dialpxx[]; /* DIAL PBX-EXCHANGE */
- extern int ntollfree;
- extern int ndialpxx;
- 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 */
- char *dialmac = NULL; /* DIAL macro */
- extern char * dialpucc[]; /* DIAL Pulse countries */
- extern int ndialpucc;
- extern char * dialtocc[]; /* DIAL Tone countries */
- extern int ndialtocc;
- /* 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;
- extern int ttnproto;
- extern long speed;
- extern char ttname[], sesfil[];
- #ifndef NOXFER
- extern CHAR stchr;
- #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 15", /* 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 15", /* aa_on_str */
- "DIC 15", /* 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 15", /* pulse command */
- "ATT 15", /* tone command */
- 35, /* dial_time */
- ",", /* pause_chars */
- 2, /* pause_time */
- #ifdef OS2
- "ATE1Q0V1&S0&C1&D2 15", /* wake_str */
- #else
- #ifdef VMS
- "ATQ0&S1 15", /* wake_str */
- #else
- "ATQ0 15", /* wake_str */
- #endif /* VMS */
- #endif /* OS2 */
- 0, /* wake_rate */
- "OK 15", /* wake_prompt */
- "", /* dmode_str */
- "", /* dmode_prompt */
- "ATD%s 15", /* dial_str, user supplies D or T */
- 0, /* dial_rate */
- 1100, /* esc_time */
- 43, /* esc_char */
- "ATQ0H0 15", /* hup_str */
- "", /* hwfc_str */
- "", /* swfc_str */
- "", /* nofc_str */
- "", /* ec_on_str */
- "", /* ec_off_str */
- "", /* dc_on_str */
- "", /* dc_off_str */
- "ATS0=1 15", /* aa_on_str */
- "ATS0=0 15", /* aa_off_str */
- "", /* sb_on_str */
- "", /* sb_off_str */
- "ATM1 15", /* sp_on_str */
- "ATM0 15", /* sp_off_str */
- "ATL1 15", /* vol1_str */
- "ATL2 15", /* vol2_str */
- "ATL3 15", /* vol3_str */
- "ATX3 15", /* 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 15", /* 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 */
- "