diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/unimodem/new | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'private/unimodem/new')
46 files changed, 15103 insertions, 0 deletions
diff --git a/private/unimodem/new/detect/d.c b/private/unimodem/new/detect/d.c new file mode 100644 index 000000000..1a1af6625 --- /dev/null +++ b/private/unimodem/new/detect/d.c @@ -0,0 +1,828 @@ +/* + * Detection routines for modems. + * + * Microsoft Confidential + * Copyright (c) Microsoft Corporation 1993-1994 + * All rights reserved + * + */ + +#include <windows.h> +#include <stdarg.h> +#include <stdio.h> + +#define CR '\r' +#define LF '\n' + +#define ASSERT(xxx) ((void) 0) + +#define DEBUG + +//#define NO_ERROR 0 +#define ERROR_PORT_INACCESSIBLE 1 +#define ERROR_NO_MODEM 2 +//#define ERROR_ACCESS_DENIED 3 +//#define ERROR_CANCELLED 4 + +#define RESPONSE_RCV_DELAY 5000 // A long time (5 secs) because + // once we have acquired the modem + // we can afford the wait. + +#define MAX_QUERY_RESPONSE_LEN 100 +#define MAX_SHORT_RESPONSE_LEN 30 // echo of ATE0Q0V1<cr> and + // <cr><lf>ERROR<cr><lf> by a + // little margin + +#define ATI0_LEN 30 // amount of the ATI0 query that + // we will save + +#define ATI0 0 // we will use this result completely +#define ATI4 4 // we will use this result completely, + // if it matches the Hayes format + // (check for 'a' at beginning) + +// Return values for the FindModem function +// +#define RESPONSE_USER_CANCEL (-4) // user requested cancel +#define RESPONSE_UNRECOG (-3) // got some chars, but didn't + // understand them +#define RESPONSE_NONE (-2) // didn't get any chars +#define RESPONSE_FAILURE (-1) // internal error or port error +#define RESPONSE_OK 0 // matched with index of <cr><lf>OK<cr><lf> +#define RESPONSE_ERROR 1 // matched with index of <cr><lf>ERROR<cr><lf> + +#ifdef WIN32 +typedef HANDLE HPORT; // variable type used in FindModem +#else +typedef int HPORT; // variable type used in FindModem +#endif + +#define IN_QUEUE_SIZE 8192 +#define OUT_QUEUE_SIZE 256 + +#define RCV_DELAY 2000 +#define CHAR_DELAY 100 + +#define CBR_HACK_115200 0xff00 // This is how we set 115,200 on + // Win 3.1 because of a stupid bug. + +char const FAR c_szNoEcho[] = "ATE0Q0V1\r"; + +// WARNING! If you change these, you will have to change ALL of your +// CompatIDs!!! +char const FAR *c_aszQueries[] = { "ATI0\r", "ATI1\r", "ATI2\r", "ATI3\r", + "ATI4\r", "ATI5\r", "ATI6\r", "ATI7\r", + "ATI8\r", "ATI9\r", "ATI10\r", "AT%V\r" }; + +// these are mostly for #'s. If a numeric is adjoining one of these, it +// will not be treated as special. +// Warning: Change any of these and you have to redo all of the CRCs!!!! +// Case insensitive compares +char const FAR *c_aszIncludes[] = { "300", + "1200", + "2400", "2,400", + "9600", "96", "9.6", "9,600", + "12000", "120", "12.0", "12,000", + "14400", "144", "14.4", "14,400", + "16800", "168", "16.8", "16,800", + "19200", "192", "19.2", "19,200", + "21600", "216", "21.6", "21,600", + "24000", "240", "24.0", "24,000", + "26400", "264", "26.4", "26,400", + "28800", "288", "28.8", "28,800", + "31200", "312", "31.2", "31,200", + "33600", "336", "33.6", "33,600", + "36000", "360", "36.0", "36,000", + "38400", "384", "38.4", "38,400", + "9624", "32bis", "42bis", "V32", + "V.32", "V.FC", "FAST", "FAX", + "DATA", "VOICE", "" }; + +// Matches will be case-insensitive +char const FAR *c_aszExcludes[] = { "JAN", "FEB", "MAR", "APR", "MAY", "JUN", + "JUL", "AUG", "SEP", "OCT", "NOV", "DEC", + "" }; + +// case sensitive matching +char const FAR *c_aszBails[] = { "CONNECT", "RING", "NO CARRIER", + "NO DIALTONE", "BUSY", "NO ANSWER", "=" }; + +// start after CBR_9600 +UINT const FAR c_auiUpperBaudRates[] = { CBR_19200, CBR_38400, CBR_56000, + CBR_HACK_115200 }; + +char const FAR *c_aszResponses[] = { "\r\nOK\r\n", "\r\nERROR\r\n" }; + +// Some MultiTech's send 0<cr> in response to AT%V (they go +// into numeric mode) +char const FAR *c_aszNumericResponses[] = { "0\r", "4\r" }; + +char const FAR c_szHex[] = "0123456789abcdef"; + +struct DCE { + char pszStr[4]; + DWORD dwDce; + DWORD dwAlternateDce; +} DCE_Table[] = { + "384", 38400, 300, // Some PDI's will report 38400, and this won't work for them. Screw 'em. + "360", 36000, 300, + "336", 33600, 300, + "312", 31200, 300, + "288", 28800, 2400, + "264", 26400, 2400, + "240", 24000, 2400, + "216", 21600, 2400, + "192", 19200, 1200, + "168", 16800, 1200, + "14", 14400, 1200, + "120", 12000, 1200, + "9", 9600, 300, + "2", 2400, 300, + "1", 1200, 300, + "3", 300, 0 +}; + +#pragma data_seg() + + + +// BUGBUG - WARNING: Not for DBCS usage - is not a real bugbug since modems aren't DBCS. +//#define isupper(ch) (((ch) >= 'A' && (ch) <= 'Z') ? TRUE : FALSE) +//#define islower(ch) (((ch) >= 'a' && (ch) <= 'z') ? TRUE : FALSE) +//#define isalpha(ch) ((toupper(ch) >= 'A' && toupper(ch) <= 'Z') ? TRUE : FALSE) +#define toupper(ch) (islower(ch) ? (ch) - 'a' + 'A' : (ch)) +#define ishex(ch) ((toupper(ch) >= 'A' && toupper(ch) <= 'F') ? TRUE : FALSE) +#define isnum(num) ((num >= '0' && num <= '9') ? TRUE : FALSE) + +#define MAX_TEST_TRIES 4 + + +#define MAX_LOG_PRINTF_LEN 256 +void _cdecl LogPrintf(HANDLE hLog, UINT uResourceFmt, ...); + +DWORD NEAR PASCAL FindModem(HPORT hPort); + +#ifdef DEBUG +void HexDump( TCHAR *, LPBYTE lpBuf, DWORD cbLen); +#define HEXDUMP(_a, _b, _c) HexDump(_a, _b, _c) +#else // !DEBUG +#define HEXDUMP(_a, _b, _c) ((void) 0) +#endif + + +BOOL +TestBaudRate( + IN HPORT hPort, + IN UINT uiBaudRate, + IN DWORD dwRcvDelay, + OUT BOOL FAR *lpfCancel); + +DWORD +NEAR PASCAL +SetPortBaudRate( + HPORT hPort, + UINT BaudRate); +int +NEAR PASCAL +ReadResponse( + HPORT hPort, + LPBYTE lpvBuf, + UINT uRead, + BOOL fMulti, + DWORD dwRcvDelay +); + +UINT +NEAR PASCAL +ReadPort( + HPORT hPort, + LPBYTE lpvBuf, + UINT uRead, + DWORD dwRcvDelay, + int FAR *lpiError, + BOOL FAR *lpfCancel); + + +int FAR PASCAL mylstrncmp(LPCSTR pchSrc, LPCSTR pchDest, int count) +{ + for ( ; count && *pchSrc == *pchDest; pchSrc++, pchDest++, count--) { + if (*pchSrc == '\0') + return 0; + } + return count; +} + +int FAR PASCAL mylstrncmpi(LPCSTR pchSrc, LPCSTR pchDest, int count) +{ + for ( ; count && toupper(*pchSrc) == toupper(*pchDest); pchSrc++, pchDest++, count--) { + if (*pchSrc == '\0') + return 0; + } + return count; +} + + +DWORD +MyWriteComm( + HANDLE hPort, + LPBYTE lpBuf, + DWORD cbLen) +{ + COMMTIMEOUTS cto; + DWORD cbLenRet; + + HEXDUMP (TEXT("Write"), lpBuf, cbLen); + // Set comm timeout + if (!GetCommTimeouts(hPort, &cto)) + { + ZeroMemory(&cto, sizeof(cto)); + }; + + // Allow a constant write timeout + cto.WriteTotalTimeoutMultiplier = 0; + cto.WriteTotalTimeoutConstant = 1000; // 1 second + SetCommTimeouts(hPort, &cto); + + // Synchronous write + WriteFile(hPort, lpBuf, cbLen, &cbLenRet, NULL); + return cbLenRet; +} + +#define MyFlushComm PurgeComm +#define MyCloseComm CloseHandle + + +/*---------------------------------------------------------- +Purpose: This function queries the given port to find a legacy + modem. + + If a modem is detected and we recognize it (meaning + we have the hardware ID in our INF files), or if we + successfully create a generic hardware ID and + inf file, then this function also creates the phantom + device instance of this modem. + + NOTE (scotth): in Win95, this function only detected + the modem and returned the hardware ID and device + description. For NT, this function also creates the + device instance. I made this change because it is + faster. + +Returns: NO_ERROR + ERROR_PORT_INACCESSIBLE + ERROR_NO_MODEM + ERROR_ACCESS_DENIED + ERROR_CANCELLED + +Cond: -- +*/ +DWORD +//PUBLIC +DetectModemOnPort(LPCTSTR pszPort) +{ + DWORD dwRet; + HPORT hPort; + DWORD cbLen; + + hPort = CreateFile(pszPort, + GENERIC_WRITE | GENERIC_READ, + 0, NULL, + OPEN_EXISTING, 0, NULL); + + if (hPort == INVALID_HANDLE_VALUE) + { + dwRet = GetLastError(); + if (dwRet == ERROR_ACCESS_DENIED) { + printf("Port %s is in use by another app.\r\n", pszPort); + } + else + { + printf("Couldn't open port %s.\r\n", pszPort); + } + } + else + { + SetupComm (hPort, IN_QUEUE_SIZE, OUT_QUEUE_SIZE); + + printf("Opened Port %s", pszPort); + + // Check for a modem on the port + + dwRet = FindModem(hPort); + + if (dwRet == NO_ERROR) + { + printf("Found modem\r\n"); + } + else + { + printf("Did not find modem\r\n"); + } + + MyFlushComm(hPort, PURGE_RXCLEAR | PURGE_TXCLEAR); + EscapeCommFunction(hPort, CLRDTR); + MyCloseComm(hPort); + + } // hPort < 0 + + return dwRet; +} + +#define HAYES_COMMAND_LEN 40 + + + +// Switch to requested baud rate and try sending ATE0Q0V1 and return whether it works or not +// Try MAX_TEST_TRIES +// Returns: TRUE on SUCCESS +// FALSE on failure (including user cancels) +BOOL +TestBaudRate( + IN HPORT hPort, + IN UINT uiBaudRate, + IN DWORD dwRcvDelay, + OUT BOOL FAR *lpfCancel) +{ + DWORD cbLen; + int iTries = MAX_TEST_TRIES; + + *lpfCancel = FALSE; + + while (iTries--) + { + // try new baud rate + if (SetPortBaudRate(hPort, uiBaudRate) == NO_ERROR) + { + cbLen = lstrlenA(c_szNoEcho); // Send an ATE0Q0V1<cr> + + // clear the read queue, there shouldn't be anything there + PurgeComm(hPort, PURGE_RXCLEAR); + if (MyWriteComm(hPort, (LPBYTE)c_szNoEcho, cbLen) == cbLen) + { + switch(ReadResponse(hPort, NULL, MAX_SHORT_RESPONSE_LEN, FALSE, dwRcvDelay)) + { + case RESPONSE_OK: + return TRUE; + + case RESPONSE_USER_CANCEL: + *lpfCancel = TRUE; + return FALSE; + } + } + } + } + return FALSE; +} + + +// Tries to figure out if there is a modem on the port. If there is, it +// will try to find a good speed to talk to it at (300,1200,2400,9600). +// Modem will be set to echo off, result codes on, and verbose result codes. (E0Q0V1) +DWORD +FindModem(HPORT hPort) +{ + UINT uGoodBaudRate; + BOOL fCancel = FALSE; + + Sleep(500); // Wait, give time for modem to spew junk if any. + + if (TestBaudRate(hPort, CBR_9600, 500, &fCancel)) + { + uGoodBaudRate = CBR_9600; + } + else + { + if (!fCancel && TestBaudRate(hPort, CBR_2400, 500, &fCancel)) + { + uGoodBaudRate = CBR_2400; + } + else + { + if (!fCancel && TestBaudRate(hPort, CBR_1200, 500, &fCancel)) + { + uGoodBaudRate = CBR_1200; + } + else + { + // Hayes Accura 288 needs this much at 300bps + if (!fCancel && TestBaudRate(hPort, CBR_300, 1000, &fCancel)) + { + uGoodBaudRate = CBR_300; + } + else + { + uGoodBaudRate = 0; + } + } + } + } + + if (fCancel) + { + return ERROR_CANCELLED; + } + + if (uGoodBaudRate) + { + return NO_ERROR; + } + else + { + return ERROR_NO_MODEM; + } +} + +DWORD NEAR PASCAL SetPortBaudRate(HPORT hPort, UINT BaudRate) +{ + DCB DCB; + + // Get a Device Control Block with current port values + + if (GetCommState(hPort, &DCB) < 0) { + printf("GetCommState failed"); + return ERROR_PORT_INACCESSIBLE; + } + + DCB.BaudRate = BaudRate; + DCB.ByteSize = 8; + DCB.Parity = 0; + DCB.StopBits = 0; + DCB.fBinary = 1; + DCB.fParity = 0; + + if (SetCommState(hPort, &DCB) < 0) { + printf("SetCommState failed"); + return ERROR_PORT_INACCESSIBLE; + } + printf("SetBaud rate to %lu\r\n", BaudRate); + + return NO_ERROR; +} + +#define MAX_RESPONSE_BURST_SIZE 8192 +#define MAX_NUM_RESPONSE_READ_TRIES 30 // digicom scout needs this much + some safety +#define MAX_NUM_MULTI_TRIES 3 // Maximum number of 'q's to be sent when we aren't getting any response + +// Read in response. Handle multi-pagers. Return a null-terminated string. +// Also returns response code. +// If lpvBuf == NULL +// cbRead indicates the max amount to read. Bail if more than this. +// Else +// cbRead indicates the size of lpvBuf +// This can not be a state driven (ie. char by char) read because we +// must look for responses from the end of a sequence of chars backwards. +// This is because "ATI2" on some modems will return +// "<cr><lf>OK<cr><lf><cr><lf>OK<cr><lf>" and we only want to pay attention +// to the final OK. Yee haw! +// Returns: RESPONSE_xxx +int +ReadResponse( + HPORT hPort, + LPBYTE lpvBuf, + UINT cbRead, + BOOL fMulti, + DWORD dwRcvDelay) +{ + int iRet = RESPONSE_UNRECOG; + LPBYTE pszBuffer; + BOOL fDoCopy = TRUE; + UINT uBufferLen, uResponseLen; + UINT uReadTries = MAX_NUM_RESPONSE_READ_TRIES; + UINT i; + UINT uOutgoingBufferCount = 0; + UINT uAllocSize = lpvBuf ? MAX_RESPONSE_BURST_SIZE : cbRead; + UINT uTotalReads = 0; + UINT uNumMultiTriesLeft = MAX_NUM_MULTI_TRIES; + int iError; + BOOL fCancel; + BOOL fHadACommError = FALSE; + + ASSERT(cbRead); + + // do we need to adjust cbRead? + if (lpvBuf) + { + cbRead--; // preserve room for terminator + } + + // Allocate buffer + if (!(pszBuffer = (LPBYTE)LocalAlloc(LMEM_FIXED, uAllocSize))) + { + return RESPONSE_FAILURE; + } + + while (uReadTries--) + { + // Read response into buffer + uBufferLen = ReadPort(hPort, pszBuffer, uAllocSize, dwRcvDelay, &iError, &fCancel); + + // Did the user request a cancel? + if (fCancel) + { + iRet = RESPONSE_USER_CANCEL; + goto Exit; + } + + // any errors? + if (iError) + { + // BUGBUG - Were screwed if we get an error during a multi-pager. + fHadACommError = TRUE; +#ifdef DEBUG + printf(TEXT("comm errorn")); +#endif // DEBUG + } + + // Did we not get any chars? + if (uBufferLen) + { + uNumMultiTriesLeft = MAX_NUM_MULTI_TRIES; // reset num multi tries left, since we got some data + uTotalReads += uBufferLen; + HEXDUMP(TEXT("Read"), pszBuffer, uBufferLen); + if (lpvBuf) + { + // fill outgoing buffer if there is room + for (i = 0; i < uBufferLen; i++) + { + if (uOutgoingBufferCount < cbRead) + { + lpvBuf[uOutgoingBufferCount++] = pszBuffer[i]; + } + else + { + break; + } + } + // null terminate what we have so far + lpvBuf[uOutgoingBufferCount] = 0; + } + else + { + if (uTotalReads >= cbRead) + { + printf("Bailing ReadResponse because we exceeded our maximum read allotment."); + goto Exit; + } + } + + // try to find a matching response (crude but quick) + for (i = 0; i < sizeof(c_aszResponses)/sizeof(*c_aszResponses); i++) + { + // Verbose responses + uResponseLen = lstrlenA(c_aszResponses[i]); + + // enough read to match this response? + if (uBufferLen >= uResponseLen) + { + if (!mylstrncmp(c_aszResponses[i], pszBuffer + uBufferLen - uResponseLen, uResponseLen)) + { + iRet = i; + goto Exit; + } + } + + // Numeric responses, for cases like when a MultiTech interprets AT%V to mean "go into numeric response mode" + uResponseLen = lstrlenA(c_aszNumericResponses[i]); + + // enough read to match this response? + if (uBufferLen >= uResponseLen) + { + if (!mylstrncmp(c_aszNumericResponses[i], pszBuffer + uBufferLen - uResponseLen, uResponseLen)) + { + DCB DCB; + + + // Get current baud rate + if (GetCommState(hPort, &DCB) == 0) + { + // Put modem back into Verbose response mode + if (!TestBaudRate(hPort, DCB.BaudRate, 0, &fCancel)) + { + if (fCancel) + { + iRet = RESPONSE_USER_CANCEL; + goto Exit; + } + else + { + printf(TEXT("couldn't recover contact with the modem.\n")); + // don't return error on failure, we have good info + } + } + } + else + { + printf("GetCommState failed"); + // don't return error on failure, we have good info + } + + iRet = i; + goto Exit; + } + } + } + } + else + { + // have we received any chars at all (ie. from this or any previous reads)? + if (uTotalReads) + { + if (fMulti && uNumMultiTriesLeft) + { // no match found, so assume it is a multi-pager, send a 'q' + // 'q' will catch those pagers that will think 'q' means quit. + // else, we will work with the pages that just need any ole' char. + uNumMultiTriesLeft--; + printf("sending a 'q' because of a multi-pager."); + if (MyWriteComm(hPort, "q", 1) != 1) + { + printf(TEXT("WriteComm failed")); + iRet = RESPONSE_FAILURE; + goto Exit; + } + continue; + } + else + { // we got a response, but we didn't recognize it + //ASSERT(iRet == RESPONSE_UNRECOG); // check initial setting + goto Exit; + } + } + else + { // we didn't get any kind of response + iRet = RESPONSE_NONE; + goto Exit; + } + } + } // while + +Exit: + // Free local buffer + LocalFree((HLOCAL)pszBuffer); + if (fHadACommError && RESPONSE_USER_CANCEL != iRet) + { + iRet = RESPONSE_FAILURE; + } + return iRet; +} + +// returns buffer full o' data and an int. +// if dwRcvDelay is NULL, default RCV_DELAY will be used, else +// dwRcvDelay (miliseconds) will be used +// *lpfCancel will be true if we are exiting because of a user requested cancel. +UINT +ReadPort( + HPORT hPort, + LPBYTE lpvBuf, + UINT uRead, + DWORD dwRcvDelay, + int FAR *lpiError, + BOOL FAR *lpfCancel) +{ + DWORD cb, cbLenRet; + UINT uTotal = 0; + DWORD tStart; + DWORD dwDelay; + COMSTAT comstat; + COMMTIMEOUTS cto; + DWORD dwError; + DWORD cbLeft; +#ifdef DEBUG + DWORD dwZeroCount = 0; +#endif // DEBUG + + ASSERT(lpvBuf); + ASSERT(uRead); + ASSERT(lpiError); + + *lpiError = 0; + *lpfCancel = FALSE; + + tStart = GetTickCount(); + dwDelay = dwRcvDelay ? dwRcvDelay : RCV_DELAY; + + // save space for terminator + uRead--; + cbLeft=uRead; + + + // Set comm timeout + if (!GetCommTimeouts(hPort, &cto)) + { + ZeroMemory(&cto, sizeof(cto)); + }; + // Allow a constant write timeout + cto.ReadIntervalTimeout = 0; + cto.ReadTotalTimeoutMultiplier = 0; + cto.ReadTotalTimeoutConstant = 25; + SetCommTimeouts(hPort, &cto); + + do + { + cb = 0; + while( cbLeft + && ReadFile(hPort, lpvBuf + uTotal + cb, 1, &cbLenRet, NULL) + && (cbLenRet)) + { + ASSERT(cbLenRet==1); + cb ++; + cbLeft--; + }; + +#ifdef DEBUG + if (cb) + { + dwZeroCount = 0; + } + else + { + dwZeroCount++; + } +#endif // DEBUG + + { + MSG msg; + + while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) + { + DispatchMessage(&msg); + }; + } + + if (cb == 0) // possible error? + { + //*lpiError |= GetCommError(hPort, &comstat); + dwError = 0; + ClearCommError(hPort, &dwError, &comstat); + *lpiError |= dwError; +#ifdef DEBUG + if (dwError) + { +// //TRACE_MSG(TF_DETECT, "ReadComm returned %d, comstat: status = %hx, in = %u, out = %u", + //cb, dwError, comstat.cbInQue, comstat.cbOutQue); + }; +#endif // DEBUG + } + + if (cb) + { + // successful read - add to total and reset delay + uTotal += cb; + + if (uTotal >= uRead) + { + ASSERT(uTotal == uRead); + break; + } + tStart = GetTickCount(); + dwDelay = CHAR_DELAY; + } + else + { + printf(TEXT(".")); + } + + // While read is successful && time since last read < delay allowed) + } while (cbLeft && (GetTickCount() - tStart) < dwDelay); + + *(lpvBuf+uTotal) = 0; + + //TRACE_MSG(TF_DETECT, "ReadPort returning %d", uTotal); + return uTotal; +} + + +#ifdef DEBUG +void HexDump(TCHAR *ptchHdr, LPBYTE lpBuf, DWORD cbLen) +{ + TCHAR rgch[10000]; + TCHAR *pc = rgch; + TCHAR *pcMore = TEXT(""); + + if (1) //DisplayDebug(TF_DETECT)) + { + pc += wsprintf(pc, TEXT("HEX DUMP(%s,%lu): ["), ptchHdr, cbLen); + if (cbLen>1000) {pcMore = TEXT(", ..."); cbLen=1000;} + + for(;cbLen--; lpBuf++) + { + pc += wsprintf(pc, TEXT(" %02lx"), (unsigned long) *lpBuf); + if (!((cbLen+1)%20)) + { + pc += wsprintf(pc, TEXT("\r\n")); + } + } + pc += wsprintf(pc, TEXT("]\r\n")); + + //OutputDebugString(rgch); + printf(rgch); + } +} +#endif // DEBUG + +int __cdecl main(int argc, char *argv[]) +{ + if (argc!=2) {printf("Usage: detect <port>\n"); goto end;} + DetectModemOnPort(argv[1]); +end: + return 0; +} diff --git a/private/unimodem/new/detect/makefile b/private/unimodem/new/detect/makefile new file mode 100644 index 000000000..6ee4f43fa --- /dev/null +++ b/private/unimodem/new/detect/makefile @@ -0,0 +1,6 @@ +# +# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source +# file to this component. This file merely indirects to the real make file +# that is shared by all the components of NT OS/2 +# +!INCLUDE $(NTMAKEENV)\makefile.def diff --git a/private/unimodem/new/detect/sources b/private/unimodem/new/detect/sources new file mode 100644 index 000000000..0d7eaa1bc --- /dev/null +++ b/private/unimodem/new/detect/sources @@ -0,0 +1,24 @@ +MAJORCOMP=net +MINORCOMP=unimodem + +TARGETNAME=detect +TARGETPATH=obj +TARGETTYPE=PROGRAM +TARGETLIBS=\ + $(BASEDIR)\public\sdk\lib\*\kernel32.lib \ + $(BASEDIR)\public\sdk\lib\*\user32.lib + + +INCLUDES=$(BASEDIR)\public\sdk\inc;. + +C_DEFINES=-DWINVER=0x0400 + +USE_CRTDLL=1 + +SOURCES= d.C + +UMTYPE=console + +!IFNDEF 386_WARNING_LEVEL +386_WARNING_LEVEL=/W3 +!ENDIF diff --git a/private/unimodem/new/match/match.c b/private/unimodem/new/match/match.c new file mode 100644 index 000000000..b2df5ae6a --- /dev/null +++ b/private/unimodem/new/match/match.c @@ -0,0 +1,80 @@ +#include "unimdm.h" +#include <stdio.h> +#include "mt.h" + +extern CHAR **rgpszResp; + +#define SIMPLE 0 +#define COMPLEX 1 +#define ACTUAL 2 +//#define TEST_TYPE (SIMPLE) +#define TEST_TYPE (COMPLEX) +//#define TEST_TYPE (ACTUAL) + +extern CHAR *rgpszSimpleResp[]; +extern CHAR *rgpszComplexResp[]; +extern CHAR *rgpszActualResp[]; + + +#if (TEST_TYPE==SIMPLE) +# define TEST_RESP_ARRAY rgpszSimpleResp +#elif (TEST_TYPE==COMPLEX) +# define TEST_RESP_ARRAY rgpszComplexResp +#elif (TEST_TYPE==ACTUAL) +# define TEST_RESP_ARRAY rgpszActualResp +#endif + +CHAR **rgpszResp = TEST_RESP_ARRAY; + +main() +{ + HMATCHTREE hmt = 0; + DWORD dwRet = 0; + CHAR **ppsz; + CHAR *pszResp; + PMATCHREC rgmr=NULL,pmr = NULL; + DWORD dwcmr=0; + + // count number of records + for (ppsz=rgpszResp;*ppsz;ppsz++) + { + dwcmr++; + } + printf("Number of records: %lu\n", (unsigned long) dwcmr); + + // Allocate space and initialize the mr records. + rgmr = LocalAlloc(LPTR, dwcmr*sizeof(MATCHREC)); + for (pmr=rgmr, ppsz=rgpszResp;pmr<(rgmr+dwcmr);pmr++,ppsz++) + { + pmr->dwLen = lstrlen(*ppsz); + pmr->pb = *ppsz; + pmr->pv = *ppsz; + } + + hmt = mtCreateTree(rgmr, dwcmr); + + // Free the mr array... + LocalFree(rgmr); pmr=rgmr=NULL; + + mtDumpTree(hmt); + + for (ppsz=rgpszResp; *ppsz; ppsz++) + { + MATCHREC mr; + mr.dwLen = lstrlen(*ppsz); + mr.pb = *ppsz; + mr.pv=(PVOID) ""; + dwRet = mtFindMatch(hmt, &mr); + pszResp = (CHAR *) mr.pv; + printf("mtFindMatch([%s]) returns [%s] (0x%lx)\n", *ppsz, pszResp, (unsigned long) dwRet); + if (_stricmp(*ppsz, pszResp)) printf("+++ERROR: String not found!\n"); + if (!(dwRet&fMATCH_COMPLETE)) printf("+++ERROR: Match not complete\n"); + if (dwRet&fMATCH_PARTIAL) printf("+++WARNING: Match partial\n"); + } + + mtFreeTree(hmt); + + return 0; +} + + diff --git a/private/unimodem/new/match/mt.c b/private/unimodem/new/match/mt.c new file mode 100644 index 000000000..c5950272a --- /dev/null +++ b/private/unimodem/new/match/mt.c @@ -0,0 +1,424 @@ +#include "unimdm.h" +#include "mcxp.h" + +#if 0 +#include <windows.h> +#endif + +#include <stdio.h> +#include <string.h> +#include "mt.h" + +// #define SILENT + +#ifdef SILENT +# define PRINTF0(_a) (0) +# define PRINTF1(_a,_b) (0) +# define PRINTF2(_a,_b,_c) (0) +# define PRINTF3(_a,_b,_c,_d) (0) +#else +#ifdef CONSOLE +# define PRINTF0(_a) printf(_a) +# define PRINTF1(_a,_b) printf((_a),(_b)) +# define PRINTF2(_a,_b,_c) printf((_a),(_b),(_c)) +# define PRINTF3(_a,_b,_c,_d) printf((_a),(_b),(_c),(_d)) +#else +# define PRINTF0(_a) DPRINTF(_a) +# define PRINTF1(_a,_b) DPRINTF1((_a),(_b)) +# define PRINTF2(_a,_b,_c) DPRINTF2((_a),(_b),(_c)) +# define PRINTF3(_a,_b,_c,_d) DPRINTF3((_a),(_b),(_c),(_d)) +#endif //!CONSOLE +#endif // !SILENT + +// ======================== PRIVATES =================================== + +#define ASSERT(_c) \ + ((_c) ? 0: printf("Assertion failed in %s:%d\n", __FILE__, __LINE__)) + +typedef struct _MNODE +{ + MATCHREC mr; + struct _MNODE *pmnNext; + struct _MNODE *pmnCh; + +} MNODE, *PMNODE; + +PMNODE mn_create_raw_tree(PMATCHREC pmr, DWORD dwcmr); +BOOL mn_cook_tree (PMNODE pmn, DWORD dwMin); +void mn_free_tree (PMNODE pmn); +PMNODE mn_alloc (PMATCHREC pmr, PMNODE pmnNext); +void mn_free (PMNODE pmn); +void mn_dump_tree (PMNODE pmn, UINT uDepth, UINT uWidth); +DWORD mn_find_smallest(PMNODE pmn); +DWORD mn_find_match(PMNODE pmn, PMATCHREC pmr); +// ======================== PRIVATES (end) =================================== + +HMATCHTREE mtCreateTree(PMATCHREC pmr, DWORD dwcmr) +{ + PMNODE pmn = mn_create_raw_tree(pmr, dwcmr); + + if (!mn_cook_tree(pmn, MAXDWORD)) + { + mn_free_tree(pmn); + pmn=NULL; + } + + return (DWORD) pmn; +} + +void mtFreeTree(HMATCHTREE hmt) +{ + PMNODE pmn = (PMNODE) hmt; + + mn_free_tree(pmn); // NULL is a valid tree +} + + +// Returns one or more fMATCH_ flags. +// Searches through all its siblings as well... +// Recursive function, so keep locals to a minimum. +DWORD mtFindMatch(HMATCHTREE hmt, PMATCHREC pmr) +{ + MATCHREC mr; + DWORD dwRet = 0; + + if (!pmr) goto end; + + mr = *pmr; // Structure copy. + dwRet = mn_find_match((PMNODE)hmt, &mr); + // mn_find_match trashes dwLen and cb fields of pmr, only pv field is valid + pmr->pv = mr.pv; + +end: + return dwRet; +} + + +#ifdef DEBUG +void mtDumpTree(HMATCHTREE hmt) +{ + PMNODE pmn = (PMNODE) hmt; + + mn_dump_tree(pmn, 0, 0); +} +#endif // DEBUG + + +PMNODE mn_create_raw_tree(PMATCHREC pmr, DWORD dwcmr) +{ + PMNODE pmnFirst=NULL; + + for (;dwcmr--;pmr++) + { + PMNODE pmnTmp = mn_alloc(pmr, pmnFirst); + if (!pmnTmp) goto failure; + pmnFirst=pmnTmp; + } + goto end; + +failure: + mn_free_tree(pmnFirst); // NULL is a valid tree to free + pmnFirst=NULL; + // FALL THROUGH + +end: + return pmnFirst; +} + + +PMNODE mn_alloc(PMATCHREC pmr, PMNODE pmnNext) +{ + PMNODE pmn = (pmr && pmr->pb && pmr->dwLen) + ? LocalAlloc(LPTR, sizeof(MNODE)) : NULL; + + if (pmn) + { + pmn->mr = *pmr; // structure copy. + pmn->pmnNext=pmnNext; + pmn->pmnCh=NULL; + } + + return pmn; +} + +void mn_free(PMNODE pmn) +{ + if (pmn) + { + ASSERT(!pmn->pmnCh && !pmn->pmnNext); + LocalFree(pmn); + } +} + + +void mn_free_tree(PMNODE pmn) +{ + if (pmn) + { + mn_free_tree(pmn->pmnCh); // recurse down + mn_free_tree(pmn->pmnNext); // recurse left + pmn->pmnNext=pmn->pmnCh=NULL; + mn_free(pmn); + } +} + +BOOL mn_cook_tree(PMNODE pmn, DWORD dwMin) +{ + // Find smallest string of me and siblings + if (dwMin==MAXDWORD) dwMin = mn_find_smallest(pmn); + + if (!pmn) goto success; + + // These are all serious problems -- so we assert on failure: + if (!dwMin || pmn->pmnCh || !pmn->mr.pb || (pmn->mr.dwLen<dwMin)) + goto failure; + + // Start my children's list by creating one if pmn->pb is longer + // than the minimum, in which case we also NULL pv, because pv should + // be NULL for internal (non-leaf) nodes. + if (pmn->mr.dwLen>dwMin) + { + MATCHREC mr; + mr.pb=pmn->mr.pb+dwMin; + mr.dwLen=pmn->mr.dwLen-dwMin; + mr.pv=pmn->mr.pv; + pmn->pmnCh = mn_alloc(&mr, NULL); + if (!pmn->pmnCh) goto failure; + pmn->mr.pv=NULL; + pmn->mr.dwLen=dwMin; + } + + // Add to my children's list by converting those siblings which + // share my dwMin-sized prefix into my children. (Obviously) remove + // these siblings from the sibling list. + { + PMNODE pmnTmp = pmn; + while(pmnTmp->pmnNext) + { + PMNODE pmnTmp1 = pmnTmp->pmnNext; + + if (pmnTmp1->mr.dwLen<dwMin || !pmnTmp1->mr.pb) goto failure; + + if (!_strnicmp(pmn->mr.pb, pmnTmp1->mr.pb, dwMin)) + { + // Found a prefix match -- remove from sibling list + // and add to child list if non-null + pmnTmp->pmnNext = pmnTmp1->pmnNext; + pmnTmp1->mr.dwLen-=dwMin; + pmnTmp1->mr.pb+=dwMin; + pmnTmp1->pmnNext=NULL; + // If nothing left to add -- we're at the end of pb -- + // (leaf node) so we make pmn->pv non-NULL, and free pmnTmp1 + // Otherwise we add it to pmn's child's list. + if (!pmnTmp1->mr.dwLen) + { + if (pmn->mr.pv) {PRINTF0("Warning: overriding pv!\n");} + pmn->mr.pv = pmnTmp1->mr.pv; + ASSERT(!pmnTmp1->pmnCh && !pmnTmp1->pmnNext); + mn_free(pmnTmp1); + } + else + { + pmnTmp1->pmnNext = pmn->pmnCh; + pmn->pmnCh=pmnTmp1; + } + } + else + { + pmnTmp = pmnTmp->pmnNext; + } + if (!pmnTmp) break; + } + } + + // recurse down + if (!mn_cook_tree(pmn->pmnCh, MAXDWORD)) goto failure; + + // recurse left + if (!mn_cook_tree(pmn->pmnNext, dwMin)) goto failure; + + // FALL THROUGH + +success: + return TRUE; + +failure: + ASSERT(FALSE); + return FALSE; +} + +DWORD mn_find_smallest(PMNODE pmn) +{ + DWORD dw = MAXDWORD; + + if (pmn) + { + dw = mn_find_smallest(pmn->pmnNext); + if (dw>pmn->mr.dwLen) dw=pmn->mr.dwLen; + } + return dw; +} + +void mn_dump_tree(PMNODE pmn, UINT uDepth, UINT uWidth) +{ + static char rgchFill[]="----------------------------------------"; + LONG lOff = sizeof(rgchFill) - (uDepth+1); + if (lOff<0) lOff=0; + // if(!pmn) return; + PRINTF2("%02lu%s", (unsigned long) uDepth, rgchFill+lOff); + if (!pmn) + { + PRINTF1("NULL(w=%lu)\n", (unsigned long) uWidth); + } + else + { + CHAR *pb = (pmn->mr.pb)?pmn->mr.pb:"\"\""; + CHAR c = pb[pmn->mr.dwLen]; + CHAR *pc2 = (CHAR *) pmn->mr.pv; + if (!pc2) pc2=""; + pb[pmn->mr.dwLen]=0; + PRINTF3("[%s]:%02lu %s\n", pc2, + (unsigned long) pmn->mr.dwLen, pb); + pb[pmn->mr.dwLen]=c; + mn_dump_tree(pmn->pmnCh, uDepth+1,0); // recurse down + mn_dump_tree(pmn->pmnNext, uDepth, uWidth+1); // recurse left + } +} + + +// Returns one or more fMATCH_ flags. +// Searches through all its siblings as well... +// Recursive function, so keep locals to a minimum. +// WARNING: Trashes dwLen and cb fields of pmr. +DWORD mn_find_match(PMNODE pmn, PMATCHREC pmr) +{ + DWORD dwRet=0; + DWORD dwcbMin; + CHAR *pc; + +#ifdef DEBUG + DWORD dwcb; + CHAR rgchTmp[256]; + DWORD dwcbTmp; +#endif // DEBUG + + if (!pmn || !pmr) goto end; + +#ifdef DEBUG +# define DWCB dwcb +# define DBGPSZ rgchTmp + DWCB = pmr->dwLen; + dwcbTmp = sizeof(DBGPSZ)-1; + if (dwcbTmp>DWCB) dwcbTmp=DWCB; + // We do this because pb is not null terminated. + CopyMemory(DBGPSZ, pmr->pb, dwcbTmp); + DBGPSZ[dwcbTmp]=0; +#else // !DEBUG +# define DBGPSZ "" +# define DWCB 0 +#endif // !DEBUG + + PRINTF1("Entering mn_find_match(-, [%s], -)\n", DBGPSZ); + + + + // Iterate through siblings, looking for matches and partial matches. + // We stop when we find the first match or partial match, because all + // the substrings at the same level are unique and have the same length: + // so if we found a match we can't find a partial match among the siblings, + // and vice versa. Furthermore, if we find a partial match, we don't really + // care which (could be more than one) sibling it is a partial match for. + // If in the future we we *do* return the node for efficiency purposes + // (so that the next call can start where we left off), + // we would return the node for the *first* partial match we found. + pc = pmr->pb; + dwcbMin = pmn->mr.dwLen; + if (pmr->dwLen<dwcbMin) + { + dwcbMin=pmr->dwLen; + dwRet = fMATCH_PARTIAL; + } + else if (pmr->dwLen==dwcbMin) + { + dwRet = fMATCH_COMPLETE; + } + else + { + // pmr->dwLen>pmn->mr.dwU, dwRet==0, so do nothing + } + + // WARNING: we trash pmr here, except for pmr->pv + pmr->dwLen-=dwcbMin; + pmr->pb+=dwcbMin; + + while(pmn) + { + // Fundamental assumption is that all dwLens of siblings are equal. + ASSERT((pmn->pmnNext)? pmn->mr.dwLen==pmn->pmnNext->mr.dwLen:TRUE); + + if (!_strnicmp(pc, pmn->mr.pb, dwcbMin)) + { + PRINTF3("Match: dwcb=%lu; pmn->mr.dwLen=%lu; pc=[%s]\n", + (unsigned long) DWCB, + (unsigned long) pmn->mr.dwLen, + DBGPSZ); + + // Note: dwRet is computed just once, out of the while loop. + // we were really overloading dwRet then. Now we compute the + // true return value. + switch(dwRet) + { + case 0: // i.e., (DWCB > pmn->mr.dwLen) + ASSERT(DWCB>pmn->mr.dwLen); + // Recurse down. WARNING: pmr is trashed, except for pmr->pv + dwRet = mn_find_match(pmn->pmnCh, pmr); + break; + + case fMATCH_PARTIAL: // i.e., (DWCB < pmn->mr.dwLen) + ASSERT(DWCB<pmn->mr.dwLen); + break; + + case fMATCH_COMPLETE: // i.e., (DWCB == pmn->mr.dwLen) + ASSERT(DWCB==pmn->mr.dwLen); + // Now let's see if we're truly a perfect macth: non-null + // pv indicates an actual response terminates in this node. + dwRet=0; + if (pmn->mr.pv) + { + pmr->pv = pmn->mr.pv; + dwRet = fMATCH_COMPLETE; + } + // Non-null pmnCh implies there are postfixes, i.e., longer + // responses + if (pmn->pmnCh) + { + dwRet |= fMATCH_PARTIAL; + } + break; + + default: + ASSERT(FALSE); + dwRet=0; + goto end; + } + if (dwRet) break; // break out of while loop if we got something + } + pmn=pmn->pmnNext; + + } + + if (!pmn) + { + dwRet=0; + } + else + { + ASSERT(dwRet && !_strnicmp(pc, pmn->mr.pb, dwcbMin)); + } + + PRINTF2("Exiting mn_find_match(-, [%s], -) returing 0x%lx\n", DBGPSZ, + (unsigned long) dwRet); + +end: + return dwRet; +} diff --git a/private/unimodem/new/match/mt.h b/private/unimodem/new/match/mt.h new file mode 100644 index 000000000..56028c84a --- /dev/null +++ b/private/unimodem/new/match/mt.h @@ -0,0 +1,28 @@ +#ifndef _MT_ +#define _MT_ + +#define fMATCH_PARTIAL (0x1<<0) +#define fMATCH_COMPLETE (0x1<<1) + + +typedef struct +{ + DWORD dwLen; + CHAR *pb; + LPVOID pv; + +} MATCHREC, *PMATCHREC; + +typedef DWORD HMATCHTREE; + +HMATCHTREE mtCreateTree(PMATCHREC rgmr, DWORD dwcmr); +void mtFreeTree (HMATCHTREE hmt); +DWORD mtFindMatch (HMATCHTREE hmt, PMATCHREC pmr); + +#ifdef DEBUG +void mtDumpTree (HMATCHTREE hmt); +#else // !DEBUG +#define mtDumpTree(_mht) ((void) 0) +#endif // !DEBUG + +#endif // _MT_ diff --git a/private/unimodem/new/match/resp.c b/private/unimodem/new/match/resp.c new file mode 100644 index 000000000..de60e4c99 --- /dev/null +++ b/private/unimodem/new/match/resp.c @@ -0,0 +1,3535 @@ +#include <windows.h> + +CHAR *rgpszSimpleResp[] = +{ + "How", + "Now", + "Brown", + "Cow!", + NULL +}; + +CHAR *rgpszComplexResp[] = +{ +"-SFA", +"-SMD", +"-SRA", +"-SRC:", +"-SRQ", +"-SSV", +"-STO", +"-SVM", +"+F4", +"+F4/+FCERROR", +"+F4@", +"+FC-FCERROR", +"+FC@", +"+FCERROR", +"+FCON", +"@", +"@#-SFA@#", +"@#-SMD@#", +"@#-SRA@#", +"@#-SRC:@#", +"@#-SRQ@#", +"@#-SSV@#", +"@#-STO@#", +"@#-SVM@#", +"@# CONNECT 1200 LAPM COMPRESSED@#", +"@#+FCERROR@@#", +"@#+FCERROR@#", +"@#@#NO CARRIER@#", +"@#ABORD@#", +"@#ABORTED@#", +"@#AUTOLOGON FAILED@#", +"@#BLACKLISTED@#", +"@#BUSY@#", +"@#C@#", +"@#CALL LOCKED:BLACKLISTED@#", +"@#CARRIER 1200@#", +"@#CARRIER 2400@#", +"@#CARRIER 300@#", +"@#CARRIER 600@#", +"@#CARRIER 1200 V.34@#", +"@#CARRIER 1200/75", +"@#CARRIER 1200/75 V.23@#", +"@#CARRIER 1200/75/VFC@#", +"@#CARRIER 1200/75@#", +"@#CARRIER 1200/VFC@#", +"@#CARRIER 1200@#", +"@#CARRIER 12000/VFC@#", +"@#CARRIER 12000@#", +"@#CARRIER 1200TX/75RX V.23@#", +"@#CARRIER 14400 V.34@#", +"@#CARRIER 14400/VFC@ @#", +"@#CARRIER 14400/VFC@#", +"@#CARRIER 14400@#", +"@#CARRIER 16800 V.34@#", +"@#CARRIER 16800/VFC@@#", +"@#CARRIER 16800/VFC@#", +"@#CARRIER 16800@#", +"@#CARRIER 19200 V.34@#", +"@#CARRIER 19200/VFC@@#", +"@#CARRIER 19200/VFC@#", +"@#CARRIER 19200@#", +"@#CARRIER 21600 V.34@#", +"@#CARRIER 21600/VFC@@#", +"@#CARRIER 21600/VFC@#", +"@#CARRIER 21600@#", +"@#CARRIER 2400 V.34@#", +"@#CARRIER 2400/VFC@#", +"@#CARRIER 2400@#", +"@#CARRIER 24000 V.34@#", +"@#CARRIER 24000/VFC@@#", +"@#CARRIER 24000/VFC@#", +"@#CARRIER 24000@#", +"@#CARRIER 26400 V.34@#", +"@#CARRIER 26400/VFC@@#", +"@#CARRIER 26400/VFC@#", +"@#CARRIER 26400@#", +"@#CARRIER 28800 V.34@#", +"@#CARRIER 28800/VFC@@#", +"@#CARRIER 28800/VFC@#", +"@#CARRIER 28800@#", +"@#CARRIER 300 V.34@#", +"@#CARRIER 300/VFC@#", +"@#CARRIER 300@#", +"@#CARRIER 4800 V.34@#", +"@#CARRIER 4800/VFC@#", +"@#CARRIER 4800@#", +"@#CARRIER 600@#", +"@#CARRIER 64000@#", +"@#CARRIER 7200 V.34@#", +"@#CARRIER 7200/VFC@#", +"@#CARRIER 7200@#", +"@#CARRIER 75/1200", +"@#CARRIER 75/1200 V.23@#", +"@#CARRIER 75/1200/VFC@#", +"@#CARRIER 75/1200@#", +"@#CARRIER 75TX/1200RX V.23@#", +"@#CARRIER 9600 V.34@#", +"@#CARRIER 9600/VFC@#", +"@#CARRIER 9600@#", +"@#CED@# ", +"@#COMPRESSION :CLASS5@#", +"@#COMPRESSION NONE@#", +"@#COMPRESSION V.42BIS@#", +"@#COMPRESSION: ADC", +"@#COMPRESSION: ADC@#", +"@#COMPRESSION: CLASS 5@#", +"@#COMPRESSION: CLASS5@#", +"@#COMPRESSION: MNP5@#", +"@#COMPRESSION: NONE@#", +"@#COMPRESSION: V.42 bis@#", +"@#COMPRESSION: V.42 BIS@#", +"@#COMPRESSION: V.42 bis@#", +"@#COMPRESSION: V.42 BIS@#", +"@#COMPRESSION: V.42 bis@#", +"@#COMPRESSION: V.42 BIS@#", +"@#COMPRESSION: V.42 bis@#", +"@#COMPRESSION: V.42 BIS@#", +"@#COMPRESSION: V.42 bis@#", +"@#COMPRESSION: V.42 BIS@#", +"@#COMPRESSION: V.42BIS@#", +"@#COMPRESSION: V.42bis@#", +"@#COMPRESSION: V.42BIS@#", +"@#COMPRESSION: V.42bis@#", +"@#COMPRESSION: V.42BIS@#", +"@#COMPRESSION: V.42bis@#", +"@#COMPRESSION: V.42BIS@#", +"@#COMPRESSION: V.42bis@#", +"@#COMPRESSION: V.42BIS@#", +"@#COMPRESSION: V.42bis@#", +"@#COMPRESSION: V.42BIS@#", +"@#COMPRESSION: V.42bis@#", +"@#COMPRESSION: V.42BIS@#", +"@#COMPRESSION: V42BIS@#", +"@#COMPRESSION:CLASS 5@#", +"@#COMPRESSION:NONE@#", +"@#COMPRESSION:V.42bis@#", +"@#COMPRESSION:V.42BIS@#", +"@#CONNECT 0600/ARQ@#", +"@#CONNECT 0600/LAP-M/COMPRESSION@#", +"@#CONNECT 0600/LAP-M@#", +"@#CONNECT 0600/LAPM/COMP@#", +"@#CONNECT 0600/LAPM@#", +"@#CONNECT 0600/MNP@#", +"@#CONNECT 0600/NONE@#", +"@#CONNECT 0600/REL-LAPM V.42 BIS@#", +"@#CONNECT 0600/REL/COMP@#", +"@#CONNECT 0600/REL@#", +"@#CONNECT 0600/V42BIS@#", +"@#CONNECT 0600@#", +"@#CONNECT 112000/ARQ/MLP /V120/V42b@#", +"@#CONNECT 112000/ARQ/MLP /V120@#", +"@#CONNECT 112000@#", +"@#CONNECT 115,200/ARQ@#", +"@#CONNECT 115,200/LAP-M/COMPRESSION@#", +"@#CONNECT 115,200/LAP-M@#", +"@#CONNECT 115,200/LAPM/COMP@#", +"@#CONNECT 115,200/LAPM@#", +"@#CONNECT 115,200/MNP@#", +"@#CONNECT 115,200/NONE@#", +"@#CONNECT 115,200/REL/COMP@#", +"@#CONNECT 115,200/REL@#", +"@#CONNECT 115,200/V42@#", +"@#CONNECT 115,200/V42BIS@#", +"@#CONNECT 115,200@#", +"@#CONNECT 115200 ALT / MNP5@#", +"@#CONNECT 115200 ALT /MNP 5@#", +"@#CONNECT 115200 ALT@#", +"@#CONNECT 115200 LAPM / V.42bis@#", +"@#CONNECT 115200 LAPM /V.42bis@#", +"@#CONNECT 115200 LAPM@#", +"@#CONNECT 115200 REL/MNP5@#", +"@#CONNECT 115200 REL@#", +"@#CONNECT 115200/ARQ@#", +"@#CONNECT 115200/LAP-M/COMPRESSION@#", +"@#CONNECT 115200/LAP-M@#", +"@#CONNECT 115200/LAPM/COMP@#", +"@#CONNECT 115200/LAPM@#", +"@#CONNECT 115200/MNP COMPRESSED@#", +"@#CONNECT 115200/MNP@#", +"@#CONNECT 115200/NONE@#", +"@#CONNECT 115200/REL-LAPM V.42 BIS@#", +"@#CONNECT 115200/REL-LAPM@#", +"@#CONNECT 115200/REL-V.42@#", +"@#CONNECT 115200/REL/COMP@#", +"@#CONNECT 115200/REL@#", +"@#CONNECT 115200/V42@#", +"@#CONNECT 115200/V42BIS@#", +"@#CONNECT 115200/VBIS@#", +"@#CONNECT 115200@#", +"@#CONNECT 115200T/V42BIS@#", +"@#CONNECT 1200 ALT / MNP5@#", +"@#CONNECT 1200 ALT /MNP 5@#", +"@#CONNECT 1200 ALT@#", +"@#CONNECT 1200 EC/V42BIS@#", +"@#CONNECT 1200 EC@#", +"@#CONNECT 1200 LAPM / V.42bis@#", +"@#CONNECT 1200 LAPM /V.42bis@#", +"@#CONNECT 1200 LAPM COMPRESSED@#", +"@#CONNECT 1200 LAPM@#", +"@#CONNECT 1200 NORMAL@#", +"@#CONNECT 1200 REL/MNP5@#", +"@#CONNECT 1200 REL/V42@#", +"@#CONNECT 1200 REL/V42BIS@#", +"@#CONNECT 1200 REL@#", +"@#CONNECT 1200 RELIABLE COMPRESSED@#", +"@#CONNECT 1200 RELIABLE@#", +"@#CONNECT 1200 V.42@#", +"@#CONNECT 1200/75", +"@#CONNECT 1200/75/ARQ@#", +"@#CONNECT 1200/75/LAP-M/COMPRESSION@#", +"@#CONNECT 1200/75/LAP-M@#", +"@#CONNECT 1200/75/LAPM/COMP@#", +"@#CONNECT 1200/75/LAPM@#", +"@#CONNECT 1200/75/MNP@#", +"@#CONNECT 1200/75/NONE@#", +"@#CONNECT 1200/75/REL-LAPM V.42 BIS@#", +"@#CONNECT 1200/75/REL/COMP@#", +"@#CONNECT 1200/75/REL@#", +"@#CONNECT 1200/75/V42@#", +"@#CONNECT 1200/75/V42BIS@#", +"@#CONNECT 1200/75@#", +"@#CONNECT 1200/ARQ/MNP4@#", +"@#CONNECT 1200/ARQ/MNP5@#", +"@#CONNECT 1200/ARQ/V.42@#", +"@#CONNECT 1200/ARQ/V.42bis@#", +"@#CONNECT 1200/ARQ/V22 /MNP4@#", +"@#CONNECT 1200/ARQ/V22 /MNP5@#", +"@#CONNECT 1200/ARQ/V22 /V42 /SREJ@#", +"@#CONNECT 1200/ARQ/V22 /V42 @#", +"@#CONNECT 1200/ARQ/V22 /V42b/SREJ@#", +"@#CONNECT 1200/ARQ/V22 /V42b@#", +"@#CONNECT 1200/ARQ/V22/MNP4@#", +"@#CONNECT 1200/ARQ/V22/MNP5@#", +"@#CONNECT 1200/ARQ/V22/V42 /SREJ@#", +"@#CONNECT 1200/ARQ/V22/V42 @#", +"@#CONNECT 1200/ARQ/V22/V42b/SREJ@#", +"@#CONNECT 1200/ARQ/V22/V42b@#", +"@#CONNECT 1200/ARQ/V22b /MNP4@#", +"@#CONNECT 1200/ARQ/V22b /MNP5@#", +"@#CONNECT 1200/ARQ/V22b /V42 /SREJ@#", +"@#CONNECT 1200/ARQ/V22b /V42 @#", +"@#CONNECT 1200/ARQ/V22b /V42b/SREJ@#", +"@#CONNECT 1200/ARQ/V22b /V42b@#", +"@#CONNECT 1200/ARQ/V22b/MNP4@#", +"@#CONNECT 1200/ARQ/V22b/MNP5@#", +"@#CONNECT 1200/ARQ/V22b/V42 /SREJ@#", +"@#CONNECT 1200/ARQ/V22b/V42 @#", +"@#CONNECT 1200/ARQ/V22b/V42b/SREJ@#", +"@#CONNECT 1200/ARQ/V22b/V42b@#", +"@#CONNECT 1200/ARQ/V32 /MNP4@#", +"@#CONNECT 1200/ARQ/V32 /MNP5@#", +"@#CONNECT 1200/ARQ/V32 /V42 /SREJ@#", +"@#CONNECT 1200/ARQ/V32 /V42 @#", +"@#CONNECT 1200/ARQ/V32 /V42b/SREJ@#", +"@#CONNECT 1200/ARQ/V32 /V42b@#", +"@#CONNECT 1200/ARQ/V32 /MNP4@#", +"@#CONNECT 1200/ARQ/V32 /MNP5@#", +"@#CONNECT 1200/ARQ/V32 /V42 /SREJ@#", +"@#CONNECT 1200/ARQ/V32 /V42 @#", +"@#CONNECT 1200/ARQ/V32 /V42b/SREJ@#", +"@#CONNECT 1200/ARQ/V32 /V42b@#", +"@#CONNECT 1200/ARQ/V32b /MNP4@#", +"@#CONNECT 1200/ARQ/V32b /MNP5@#", +"@#CONNECT 1200/ARQ/V32b /V42 /SREJ@#", +"@#CONNECT 1200/ARQ/V32b /V42 @#", +"@#CONNECT 1200/ARQ/V32b /V42b/SREJ@#", +"@#CONNECT 1200/ARQ/V32b /V42b@#", +"@#CONNECT 1200/ARQ/V32b/MNP4@#", +"@#CONNECT 1200/ARQ/V32b/MNP5@#", +"@#CONNECT 1200/ARQ/V32b/V42 /SREJ@#", +"@#CONNECT 1200/ARQ/V32b/V42 @#", +"@#CONNECT 1200/ARQ/V32b/V42b/SREJ@#", +"@#CONNECT 1200/ARQ/V32b/V42b@#", +"@#CONNECT 1200/ARQ/V42 /SREJ@#", +"@#CONNECT 1200/ARQ/V42 @#", +"@#CONNECT 1200/ARQ/V42b/SREJ@#", +"@#CONNECT 1200/ARQ/V42b@#", +"@#CONNECT 1200/ARQ/ZyX /MNP4@#", +"@#CONNECT 1200/ARQ/ZyX /MNP5@#", +"@#CONNECT 1200/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 1200/ARQ/ZyX /V42 @#", +"@#CONNECT 1200/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 1200/ARQ/ZyX /V42b@#", +"@#CONNECT 1200/ARQ/ZyX /MNP4@#", +"@#CONNECT 1200/ARQ/ZyX /MNP5@#", +"@#CONNECT 1200/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 1200/ARQ/ZyX /V42 @#", +"@#CONNECT 1200/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 1200/ARQ/ZyX /V42b@#", +"@#CONNECT 1200/ARQ@#", +"@#CONNECT 1200/COMP@#", +"@#CONNECT 1200/LAP-M/COMPRESSION@#", +"@#CONNECT 1200/LAP-M@#", +"@#CONNECT 1200/LAPM/COMP@#", +"@#CONNECT 1200/LAPM/V42BIS@#", +"@#CONNECT 1200/LAPM@#", +"@#CONNECT 1200/MNP COMPRESSED@#", +"@#CONNECT 1200/MNP@#", +"@#CONNECT 1200/NONE@#", +"@#CONNECT 1200/NOR@#", +"@#CONNECT 1200/REL-LAPM-COMP@#", +"@#CONNECT 1200/REL-LAPM V.42 BIS@#", +"@#CONNECT 1200/REL-LAPM@#", +"@#CONNECT 1200/REL-MNP-COMP@#", +"@#CONNECT 1200/REL-MNP@#", +"@#CONNECT 1200/REL-V.42@#", +"@#CONNECT 1200/REL 1@# ", +"@#CONNECT 1200/REL 2@# ", +"@#CONNECT 1200/REL 3@# ", +"@#CONNECT 1200/REL 4@# ", +"@#CONNECT 1200/REL 5@# ", +"@#CONNECT 1200/REL COMP@#", +"@#CONNECT 1200/REL COMPRESSED@#", +"@#CONNECT 1200/REL/COMP@#", +"@#CONNECT 1200/REL@#", +"@#CONNECT 1200/RELC@#", +"@#CONNECT 1200/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 1200/RELIABLE/LAPM@#", +"@#CONNECT 1200/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 1200/RELIABLE/MNP@#", +"@#CONNECT 1200/V42@#", +"@#CONNECT 1200/V42B@#", +"@#CONNECT 1200/V42BIS@#", +"@#CONNECT 1200@#", +"@#CONNECT 12000 ALT / MNP5@#", +"@#CONNECT 12000 ALT /MNP 5@#", +"@#CONNECT 12000 ALT@#", +"@#CONNECT 12000 EC/V42@#", +"@#CONNECT 12000 EC/V42BIS@#", +"@#CONNECT 12000 EC@#", +"@#CONNECT 12000 LAPM / V.42bis@#", +"@#CONNECT 12000 LAPM /V.42bis@#", +"@#CONNECT 12000 LAPM COMPRESSED@#", +"@#CONNECT 12000 LAPM@#", +"@#CONNECT 12000 REL/MNP5@#", +"@#CONNECT 12000 REL/V42@#", +"@#CONNECT 12000 REL/V42BIS@#", +"@#CONNECT 12000 REL@#", +"@#CONNECT 12000 RELIABLE COMPRESSED@#", +"@#CONNECT 12000 RELIABLE@#", +"@#CONNECT 12000/ARQ/CELL /MNP4@#", +"@#CONNECT 12000/ARQ/CELL /MNP5@#", +"@#CONNECT 12000/ARQ/CELL /V42 /SREJ@#", +"@#CONNECT 12000/ARQ/CELL /V42 @#", +"@#CONNECT 12000/ARQ/CELL /V42b/SREJ@#", +"@#CONNECT 12000/ARQ/CELL /V42b@#", +"@#CONNECT 12000/ARQ/CELL/MNP4@#", +"@#CONNECT 12000/ARQ/CELL/MNP5@#", +"@#CONNECT 12000/ARQ/CELL/V42 /SREJ@#", +"@#CONNECT 12000/ARQ/CELL/V42 @#", +"@#CONNECT 12000/ARQ/CELL/V42b/SREJ@#", +"@#CONNECT 12000/ARQ/CELL/V42b@#", +"@#CONNECT 12000/ARQ/MNP4@#", +"@#CONNECT 12000/ARQ/MNP5@#", +"@#CONNECT 12000/ARQ/V.34/MNP4@#", +"@#CONNECT 12000/ARQ/V.34/MNP5@#", +"@#CONNECT 12000/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 12000/ARQ/V.34/V42 @#", +"@#CONNECT 12000/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 12000/ARQ/V.34/V42b@#", +"@#CONNECT 12000/ARQ/V.42@#", +"@#CONNECT 12000/ARQ/V.42bis@#", +"@#CONNECT 12000/ARQ/V32b /MNP4@#", +"@#CONNECT 12000/ARQ/V32b /MNP5@#", +"@#CONNECT 12000/ARQ/V32b /V42 /SREJ@#", +"@#CONNECT 12000/ARQ/V32b /V42 @#", +"@#CONNECT 12000/ARQ/V32b /V42b/SREJ@#", +"@#CONNECT 12000/ARQ/V32b /V42b@#", +"@#CONNECT 12000/ARQ/V32b/MNP4@#", +"@#CONNECT 12000/ARQ/V32b/MNP5@#", +"@#CONNECT 12000/ARQ/V32b/V42 /SREJ@#", +"@#CONNECT 12000/ARQ/V32b/V42 @#", +"@#CONNECT 12000/ARQ/V32b/V42b/SREJ@#", +"@#CONNECT 12000/ARQ/V32b/V42b@#", +"@#CONNECT 12000/ARQ/V42 /SREJ@#", +"@#CONNECT 12000/ARQ/V42 @#", +"@#CONNECT 12000/ARQ/V42b/SREJ@#", +"@#CONNECT 12000/ARQ/V42b@#", +"@#CONNECT 12000/ARQ/ZyX /MNP4@#", +"@#CONNECT 12000/ARQ/ZyX /MNP5@#", +"@#CONNECT 12000/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 12000/ARQ/ZyX /V42 @#", +"@#CONNECT 12000/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 12000/ARQ/ZyX /V42b@#", +"@#CONNECT 12000/ARQ/ZyX /MNP4@#", +"@#CONNECT 12000/ARQ/ZyX /MNP5@#", +"@#CONNECT 12000/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 12000/ARQ/ZyX /V42 @#", +"@#CONNECT 12000/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 12000/ARQ/ZyX /V42b@#", +"@#CONNECT 12000/ARQ@#", +"@#CONNECT 12000/COMP@#", +"@#CONNECT 12000/LAP-M/COMPRESSION@#", +"@#CONNECT 12000/LAP-M@#", +"@#CONNECT 12000/LAPM/COMP@#", +"@#CONNECT 12000/LAPM/V42BIS@#", +"@#CONNECT 12000/LAPM@#", +"@#CONNECT 12000/MNP COMPRESSED@#", +"@#CONNECT 12000/MNP@#", +"@#CONNECT 12000/NONE@#", +"@#CONNECT 12000/NOR@#", +"@#CONNECT 12000/REL-LAPM-COMP@#", +"@#CONNECT 12000/REL-LAPM V.42 BIS@#", +"@#CONNECT 12000/REL-LAPM@#", +"@#CONNECT 12000/REL-MNP-COMP@#", +"@#CONNECT 12000/REL-MNP@#", +"@#CONNECT 12000/REL-V.42@#", +"@#CONNECT 12000/REL COMP@#", +"@#CONNECT 12000/REL COMPRESSED@#", +"@#CONNECT 12000/REL/COMP@#", +"@#CONNECT 12000/REL@#", +"@#CONNECT 12000/RELC@#", +"@#CONNECT 12000/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 12000/RELIABLE/LAPM@#", +"@#CONNECT 12000/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 12000/RELIABLE/MNP@#", +"@#CONNECT 12000/V42@#", +"@#CONNECT 12000/V42B@#", +"@#CONNECT 12000/V42BIS@#", +"@#CONNECT 12000@#", +"@#CONNECT 12000T/V42BIS@#", +"@#CONNECT 1200T/V42BIS@#", +"@#CONNECT 1200TX/75RX REL/MNP5@#", +"@#CONNECT 1200TX/75RX REL@#", +"@#CONNECT 1200TX/75RX/ARQ@#", +"@#CONNECT 1200TX/75RX/LAP-M/COMPRESSION@#", +"@#CONNECT 1200TX/75RX/LAP-M@#", +"@#CONNECT 1200TX/75RX/LAPM/COMP@#", +"@#CONNECT 1200TX/75RX/LAPM@#", +"@#CONNECT 1200TX/75RX/MNP@#", +"@#CONNECT 1200TX/75RX/NONE@#", +"@#CONNECT 1200TX/75RX/REL-LAPM V.42 BIS@#", +"@#CONNECT 1200TX/75RX/REL/COMP@#", +"@#CONNECT 1200TX/75RX/REL@#", +"@#CONNECT 1200TX/75RX/V42@#", +"@#CONNECT 1200TX/75RX/V42BIS@#", +"@#CONNECT 1200TX/75RX@#", +"@#CONNECT 12200/ARQ/V.34/MNP4@#", +"@#CONNECT 12200/ARQ/V.34/MNP5@#", +"@#CONNECT 12200/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 12200/ARQ/V.34/V42 @#", +"@#CONNECT 12200/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 12200/ARQ/V.34/V42b@#", +"@#CONNECT 12200@#", +"@#CONNECT 1275@#", +"@#CONNECT 128000/ARQ/MLP /X.75/V42b@#", +"@#CONNECT 128000/ARQ/MLP /X.75@#", +"@#CONNECT 128000@#", +"@#CONNECT 14400 ALT / MNP5@#", +"@#CONNECT 14400 ALT /MNP 5@#", +"@#CONNECT 14400 ALT@#", +"@#CONNECT 14400 EC/V42@#", +"@#CONNECT 14400 EC/V42BIS@#", +"@#CONNECT 14400 EC@#", +"@#CONNECT 14400 LAPM / V.42bis@#", +"@#CONNECT 14400 LAPM /V.42bis@#", +"@#CONNECT 14400 LAPM COMPRESSED@#", +"@#CONNECT 14400 LAPM@#", +"@#CONNECT 14400 NORMAL@#", +"@#CONNECT 14400 REL/MNP5@#", +"@#CONNECT 14400 REL/V42@#", +"@#CONNECT 14400 REL/V42BIS@#", +"@#CONNECT 14400 REL@#", +"@#CONNECT 14400 RELIABLE COMPRESSED@#", +"@#CONNECT 14400 RELIABLE@#", +"@#CONNECT 14400 V.42@#", +"@#CONNECT 14400/ARQ/CELL /MNP4@#", +"@#CONNECT 14400/ARQ/CELL /MNP5@#", +"@#CONNECT 14400/ARQ/CELL /V42 /SREJ@#", +"@#CONNECT 14400/ARQ/CELL /V42 @#", +"@#CONNECT 14400/ARQ/CELL /V42b/SREJ@#", +"@#CONNECT 14400/ARQ/CELL /V42b@#", +"@#CONNECT 14400/ARQ/CELL/MNP4@#", +"@#CONNECT 14400/ARQ/CELL/MNP5@#", +"@#CONNECT 14400/ARQ/CELL/V42 /SREJ@#", +"@#CONNECT 14400/ARQ/CELL/V42 @#", +"@#CONNECT 14400/ARQ/CELL/V42b/SREJ@#", +"@#CONNECT 14400/ARQ/CELL/V42b@#", +"@#CONNECT 14400/ARQ/MNP4@#", +"@#CONNECT 14400/ARQ/MNP5@#", +"@#CONNECT 14400/ARQ/V.34/MNP4@#", +"@#CONNECT 14400/ARQ/V.34/MNP5@#", +"@#CONNECT 14400/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 14400/ARQ/V.34/V42 @#", +"@#CONNECT 14400/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 14400/ARQ/V.34/V42b@#", +"@#CONNECT 14400/ARQ/V.42@#", +"@#CONNECT 14400/ARQ/V.42bis@#", +"@#CONNECT 14400/ARQ/V32b /MNP4@#", +"@#CONNECT 14400/ARQ/V32b /MNP5@#", +"@#CONNECT 14400/ARQ/V32b /V42 /SREJ@#", +"@#CONNECT 14400/ARQ/V32b /V42 @#", +"@#CONNECT 14400/ARQ/V32b /V42b/SREJ@#", +"@#CONNECT 14400/ARQ/V32b /V42b@#", +"@#CONNECT 14400/ARQ/V32b/MNP4@#", +"@#CONNECT 14400/ARQ/V32b/MNP5@#", +"@#CONNECT 14400/ARQ/V32b/V42 /SREJ@#", +"@#CONNECT 14400/ARQ/V32b/V42 @#", +"@#CONNECT 14400/ARQ/V32b/V42b/SREJ@#", +"@#CONNECT 14400/ARQ/V32b/V42b@#", +"@#CONNECT 14400/ARQ/V42 /SREJ@#", +"@#CONNECT 14400/ARQ/V42 @#", +"@#CONNECT 14400/ARQ/V42b/SREJ@#", +"@#CONNECT 14400/ARQ/V42b@#", +"@#CONNECT 14400/ARQ/ZyX /MNP4@#", +"@#CONNECT 14400/ARQ/ZyX /MNP5@#", +"@#CONNECT 14400/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 14400/ARQ/ZyX /V42 @#", +"@#CONNECT 14400/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 14400/ARQ/ZyX /V42b@#", +"@#CONNECT 14400/ARQ/ZyX /MNP4@#", +"@#CONNECT 14400/ARQ/ZyX /MNP5@#", +"@#CONNECT 14400/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 14400/ARQ/ZyX /V42 @#", +"@#CONNECT 14400/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 14400/ARQ/ZyX /V42b@#", +"@#CONNECT 14400/ARQ@#", +"@#CONNECT 14400/COMP@#", +"@#CONNECT 14400/LAP-M/COMPRESSION@#", +"@#CONNECT 14400/LAP-M@#", +"@#CONNECT 14400/LAPM/COMP@#", +"@#CONNECT 14400/LAPM/V42BIS@#", +"@#CONNECT 14400/LAPM@#", +"@#CONNECT 14400/MNP COMPRESSED@#", +"@#CONNECT 14400/MNP@#", +"@#CONNECT 14400/NONE@#", +"@#CONNECT 14400/NOR@#", +"@#CONNECT 14400/REL-LAPM-COMP@#", +"@#CONNECT 14400/REL-LAPM V.42 BIS@#", +"@#CONNECT 14400/REL-LAPM@#", +"@#CONNECT 14400/REL-MNP-COMP@#", +"@#CONNECT 14400/REL-MNP@#", +"@#CONNECT 14400/REL-V.42@#", +"@#CONNECT 14400/REL COMP@#", +"@#CONNECT 14400/REL COMPRESSED@#", +"@#CONNECT 14400/REL/COMP@#", +"@#CONNECT 14400/REL@#", +"@#CONNECT 14400/RELC@#", +"@#CONNECT 14400/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 14400/RELIABLE/LAPM@#", +"@#CONNECT 14400/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 14400/RELIABLE/MNP@#", +"@#CONNECT 14400/V42@#", +"@#CONNECT 14400/V42B@#", +"@#CONNECT 14400/V42BIS@#", +"@#CONNECT 14400@#", +"@#CONNECT 14400T RELIABLE@#", +"@#CONNECT 14400T V.42@#", +"@#CONNECT 14400T/V42BIS@#", +"@#CONNECT 14600/ARQ/V.34/MNP4@#", +"@#CONNECT 14600/ARQ/V.34/MNP5@#", +"@#CONNECT 14600/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 14600/ARQ/V.34/V42 @#", +"@#CONNECT 14600/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 14600/ARQ/V.34/V42b@#", +"@#CONNECT 14600@#", +"@#CONNECT 16000 EC/V42BIS@#", +"@#CONNECT 16800 EC/V42@#", +"@#CONNECT 16800 EC/V42BIS@#", +"@#CONNECT 16800 EC@#", +"@#CONNECT 16800 LAPM COMPRESSED@#", +"@#CONNECT 16800 LAPM@#", +"@#CONNECT 16800 REL/MNP5@#", +"@#CONNECT 16800 REL/V42@#", +"@#CONNECT 16800 REL/V42BIS@#", +"@#CONNECT 16800 REL@#", +"@#CONNECT 16800 RELIABLE COMPRESSED@#", +"@#CONNECT 16800 RELIABLE@#", +"@#CONNECT 16800/ARQ/MNP4@#", +"@#CONNECT 16800/ARQ/MNP5@#", +"@#CONNECT 16800/ARQ/V.34/MNP4@#", +"@#CONNECT 16800/ARQ/V.34/MNP5@#", +"@#CONNECT 16800/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 16800/ARQ/V.34/V42 @#", +"@#CONNECT 16800/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 16800/ARQ/V.34/V42b@#", +"@#CONNECT 16800/ARQ/V.42@#", +"@#CONNECT 16800/ARQ/V.42bis@#", +"@#CONNECT 16800/ARQ/V42 /SREJ@#", +"@#CONNECT 16800/ARQ/V42 @#", +"@#CONNECT 16800/ARQ/V42b/SREJ@#", +"@#CONNECT 16800/ARQ/V42b@#", +"@#CONNECT 16800/ARQ/ZyX /MNP4@#", +"@#CONNECT 16800/ARQ/ZyX /MNP5@#", +"@#CONNECT 16800/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 16800/ARQ/ZyX /V42 @#", +"@#CONNECT 16800/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 16800/ARQ/ZyX /V42b@#", +"@#CONNECT 16800/ARQ/ZyX /MNP4@#", +"@#CONNECT 16800/ARQ/ZyX /MNP5@#", +"@#CONNECT 16800/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 16800/ARQ/ZyX /V42 @#", +"@#CONNECT 16800/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 16800/ARQ/ZyX /V42b@#", +"@#CONNECT 16800/ARQ@#", +"@#CONNECT 16800/COMP@#", +"@#CONNECT 16800/LAP-M/COMPRESSION@#", +"@#CONNECT 16800/LAP-M@#", +"@#CONNECT 16800/LAPM/COMP@#", +"@#CONNECT 16800/LAPM/V42BIS@#", +"@#CONNECT 16800/LAPM@#", +"@#CONNECT 16800/MNP COMPRESSED@#", +"@#CONNECT 16800/MNP@#", +"@#CONNECT 16800/NONE@#", +"@#CONNECT 16800/NOR@#", +"@#CONNECT 16800/REL-LAPM V.42 BIS@#", +"@#CONNECT 16800/REL-LAPM@#", +"@#CONNECT 16800/REL-V.42@#", +"@#CONNECT 16800/REL COMP@#", +"@#CONNECT 16800/REL/COMP@#", +"@#CONNECT 16800/REL@#", +"@#CONNECT 16800/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 16800/RELIABLE/LAPM@#", +"@#CONNECT 16800/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 16800/RELIABLE/MNP@#", +"@#CONNECT 16800/V42@#", +"@#CONNECT 16800/V42BIS@#", +"@#CONNECT 16800@#", +"@#CONNECT 16800T/V42BIS@#", +"@#CONNECT 17000/ARQ/V.34/MNP4@#", +"@#CONNECT 17000/ARQ/V.34/MNP5@#", +"@#CONNECT 17000/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 17000/ARQ/V.34/V42 @#", +"@#CONNECT 17000/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 17000/ARQ/V.34/V42b@#", +"@#CONNECT 17000@#", +"@#CONNECT 19200 ALT / MNP5@#", +"@#CONNECT 19200 ALT /MNP 5@#", +"@#CONNECT 19200 ALT@#", +"@#CONNECT 19200 EC/BIS@#", +"@#CONNECT 19200 EC/V42@#", +"@#CONNECT 19200 EC/V42BIZ@#", +"@#CONNECT 19200 EC@#", +"@#CONNECT 19200 LAPM / V.42bis@#", +"@#CONNECT 19200 LAPM /V.42bis@#", +"@#CONNECT 19200 LAPM COMPRESSED@#", +"@#CONNECT 19200 LAPM@#", +"@#CONNECT 19200 REL/MNP5@#", +"@#CONNECT 19200 REL/V42@#", +"@#CONNECT 19200 REL/V42BIS@#", +"@#CONNECT 19200 REL@#", +"@#CONNECT 19200 RELIABLE COMPRESSED@#", +"@#CONNECT 19200 RELIABLE@#", +"@#CONNECT 19200/ARQ/MNP4@#", +"@#CONNECT 19200/ARQ/MNP5@#", +"@#CONNECT 19200/ARQ/V.34/MNP4@#", +"@#CONNECT 19200/ARQ/V.34/MNP5@#", +"@#CONNECT 19200/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 19200/ARQ/V.34/V42 @#", +"@#CONNECT 19200/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 19200/ARQ/V.34/V42b@#", +"@#CONNECT 19200/ARQ/V.42@#", +"@#CONNECT 19200/ARQ/V.42bis@#", +"@#CONNECT 19200/ARQ/V42 /SREJ@#", +"@#CONNECT 19200/ARQ/V42 @#", +"@#CONNECT 19200/ARQ/V42b/SREJ@#", +"@#CONNECT 19200/ARQ/V42b@#", +"@#CONNECT 19200/ARQ/ZyX /MNP4@#", +"@#CONNECT 19200/ARQ/ZyX /MNP5@#", +"@#CONNECT 19200/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 19200/ARQ/ZyX /V42 @#", +"@#CONNECT 19200/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 19200/ARQ/ZyX /V42b@#", +"@#CONNECT 19200/ARQ/ZyX /MNP4@#", +"@#CONNECT 19200/ARQ/ZyX /MNP5@#", +"@#CONNECT 19200/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 19200/ARQ/ZyX /V42 @#", +"@#CONNECT 19200/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 19200/ARQ/ZyX /V42b@#", +"@#CONNECT 19200/ARQ@#", +"@#CONNECT 19200/COMP@#", +"@#CONNECT 19200/LAP-M/COMPRESSION@#", +"@#CONNECT 19200/LAP-M@#", +"@#CONNECT 19200/LAPM/COMP@#", +"@#CONNECT 19200/LAPM/V42BIS@#", +"@#CONNECT 19200/LAPM@#", +"@#CONNECT 19200/MNP COMPRESSED@#", +"@#CONNECT 19200/MNP@#", +"@#CONNECT 19200/NONE@#", +"@#CONNECT 19200/NOR@#", +"@#CONNECT 19200/REL-LAPM V.42 BIS@#", +"@#CONNECT 19200/REL-LAPM@#", +"@#CONNECT 19200/REL-V.42@#", +"@#CONNECT 19200/REL COMP@#", +"@#CONNECT 19200/REL/COMP@#", +"@#CONNECT 19200/REL@#", +"@#CONNECT 19200/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 19200/RELIABLE/LAPM@#", +"@#CONNECT 19200/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 19200/RELIABLE/MNP@#", +"@#CONNECT 19200/V.110@#", +"@#CONNECT 19200/V42@#", +"@#CONNECT 19200/V42BIS@#", +"@#CONNECT 19200@#", +"@#CONNECT 19200T/V42BIS@#", +"@#CONNECT 19400/ARQ/V.34/MNP4@#", +"@#CONNECT 19400/ARQ/V.34/MNP5@#", +"@#CONNECT 19400/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 19400/ARQ/V.34/V42 @#", +"@#CONNECT 19400/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 19400/ARQ/V.34/V42b@#", +"@#CONNECT 19400@#", +"@#CONNECT 21600 LAPM COMPRESSED@#", +"@#CONNECT 21600 LAPM@#", +"@#CONNECT 21600 REL/MNP5@#", +"@#CONNECT 21600 REL@#", +"@#CONNECT 21600 RELIABLE COMPRESSED@#", +"@#CONNECT 21600 RELIABLE@#", +"@#CONNECT 21600/ARQ/V.34/MNP4@#", +"@#CONNECT 21600/ARQ/V.34/MNP5@#", +"@#CONNECT 21600/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 21600/ARQ/V.34/V42 @#", +"@#CONNECT 21600/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 21600/ARQ/V.34/V42b@#", +"@#CONNECT 21600/ARQ@#", +"@#CONNECT 21600/COMP@#", +"@#CONNECT 21600/LAP-M/COMPRESSION@#", +"@#CONNECT 21600/LAP-M@#", +"@#CONNECT 21600/LAPM/COMP@#", +"@#CONNECT 21600/LAPM/V42BIS@#", +"@#CONNECT 21600/LAPM@#", +"@#CONNECT 21600/MNP COMPRESSED@#", +"@#CONNECT 21600/MNP@#", +"@#CONNECT 21600/NONE@#", +"@#CONNECT 21600/NOR@#", +"@#CONNECT 21600/REL-LAPM V.42 BIS@#", +"@#CONNECT 21600/REL-LAPM@#", +"@#CONNECT 21600/REL-V.42@#", +"@#CONNECT 21600/REL COMP@#", +"@#CONNECT 21600/REL/COMP@#", +"@#CONNECT 21600/REL@#", +"@#CONNECT 21600/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 21600/RELIABLE/LAPM@#", +"@#CONNECT 21600/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 21600/RELIABLE/MNP@#", +"@#CONNECT 21600/V42@#", +"@#CONNECT 21600/V42BIS@#", +"@#CONNECT 21600@#", +"@#CONNECT 21600T/V42BIS@#", +"@#CONNECT 21800/ARQ/V.34/MNP4@#", +"@#CONNECT 21800/ARQ/V.34/MNP5@#", +"@#CONNECT 21800/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 21800/ARQ/V.34/V42 @#", +"@#CONNECT 21800/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 21800/ARQ/V.34/V42b@#", +"@#CONNECT 21800@#", +"@#CONNECT 230400/ARQ@#", +"@#CONNECT 230400/LAP-M@#", +"@#CONNECT 230400/LAPM/COMP@#", +"@#CONNECT 230400/LAPM@#", +"@#CONNECT 230400/MNP@#", +"@#CONNECT 230400/NONE@#", +"@#CONNECT 230400/REL/COMP@#", +"@#CONNECT 230400/REL@#", +"@#CONNECT 230400/V42BIS@#", +"@#CONNECT 230400@#", +"@#CONNECT 240/MNP@#", +"@#CONNECT 2400 @#", +"@#CONNECT 2400 ALT / MNP5@#", +"@#CONNECT 2400 ALT /MNP 5@#", +"@#CONNECT 2400 ALT@#", +"@#CONNECT 2400 EC/V42@#", +"@#CONNECT 2400 EC/V42BIS@#", +"@#CONNECT 2400 EC@#", +"@#CONNECT 2400 LAPM / V.42bis@#", +"@#CONNECT 2400 LAPM /V.42bis@#", +"@#CONNECT 2400 LAPM COMPRESSED@#", +"@#CONNECT 2400 LAPM@#", +"@#CONNECT 2400 NORMAL@#", +"@#CONNECT 2400 REL/MNP5@#", +"@#CONNECT 2400 REL/V42@#", +"@#CONNECT 2400 REL/V42BIS@#", +"@#CONNECT 2400 REL@#", +"@#CONNECT 2400 RELIABLE COMPRESSED@#", +"@#CONNECT 2400 RELIABLE@#", +"@#CONNECT 2400 V.42@#", +"@#CONNECT 2400/ARQ/CELL /MNP4@#", +"@#CONNECT 2400/ARQ/CELL /MNP5@#", +"@#CONNECT 2400/ARQ/CELL /V42 /SREJ@#", +"@#CONNECT 2400/ARQ/CELL /V42 @#", +"@#CONNECT 2400/ARQ/CELL /V42b/SREJ@#", +"@#CONNECT 2400/ARQ/CELL /V42b@#", +"@#CONNECT 2400/ARQ/CELL/MNP4@#", +"@#CONNECT 2400/ARQ/CELL/MNP5@#", +"@#CONNECT 2400/ARQ/CELL/V42 /SREJ@#", +"@#CONNECT 2400/ARQ/CELL/V42 @#", +"@#CONNECT 2400/ARQ/CELL/V42b/SREJ@#", +"@#CONNECT 2400/ARQ/CELL/V42b@#", +"@#CONNECT 2400/ARQ/MNP4@#", +"@#CONNECT 2400/ARQ/MNP5@#", +"@#CONNECT 2400/ARQ/V.34/MNP4@#", +"@#CONNECT 2400/ARQ/V.34/MNP5@#", +"@#CONNECT 2400/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 2400/ARQ/V.34/V42 @#", +"@#CONNECT 2400/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 2400/ARQ/V.34/V42b@#", +"@#CONNECT 2400/ARQ/V.42@#", +"@#CONNECT 2400/ARQ/V.42bis@#", +"@#CONNECT 2400/ARQ/V22b /MNP4@#", +"@#CONNECT 2400/ARQ/V22b /MNP5@#", +"@#CONNECT 2400/ARQ/V22b /V42 /SREJ@#", +"@#CONNECT 2400/ARQ/V22b /V42 @#", +"@#CONNECT 2400/ARQ/V22b /V42b/SREJ@#", +"@#CONNECT 2400/ARQ/V22b /V42b@#", +"@#CONNECT 2400/ARQ/V22b/MNP4@#", +"@#CONNECT 2400/ARQ/V22b/MNP5@#", +"@#CONNECT 2400/ARQ/V22b/V42 /SREJ@#", +"@#CONNECT 2400/ARQ/V22b/V42 @#", +"@#CONNECT 2400/ARQ/V22b/V42b/SREJ@#", +"@#CONNECT 2400/ARQ/V22b/V42b@#", +"@#CONNECT 2400/ARQ/V32 /MNP4@#", +"@#CONNECT 2400/ARQ/V32 /MNP5@#", +"@#CONNECT 2400/ARQ/V32 /V42 /SREJ@#", +"@#CONNECT 2400/ARQ/V32 /V42 @#", +"@#CONNECT 2400/ARQ/V32 /V42b/SREJ@#", +"@#CONNECT 2400/ARQ/V32 /V42b@#", +"@#CONNECT 2400/ARQ/V32 /MNP4@#", +"@#CONNECT 2400/ARQ/V32 /MNP5@#", +"@#CONNECT 2400/ARQ/V32 /V42 /SREJ@#", +"@#CONNECT 2400/ARQ/V32 /V42 @#", +"@#CONNECT 2400/ARQ/V32 /V42b/SREJ@#", +"@#CONNECT 2400/ARQ/V32 /V42b@#", +"@#CONNECT 2400/ARQ/V32b /MNP4@#", +"@#CONNECT 2400/ARQ/V32b /MNP5@#", +"@#CONNECT 2400/ARQ/V32b /V42 /SREJ@#", +"@#CONNECT 2400/ARQ/V32b /V42 @#", +"@#CONNECT 2400/ARQ/V32b /V42b/SREJ@#", +"@#CONNECT 2400/ARQ/V32b /V42b@#", +"@#CONNECT 2400/ARQ/V32b/MNP4@#", +"@#CONNECT 2400/ARQ/V32b/MNP5@#", +"@#CONNECT 2400/ARQ/V32b/V42 /SREJ@#", +"@#CONNECT 2400/ARQ/V32b/V42 @#", +"@#CONNECT 2400/ARQ/V32b/V42b/SREJ@#", +"@#CONNECT 2400/ARQ/V32b/V42b@#", +"@#CONNECT 2400/ARQ/V42 /SREJ@#", +"@#CONNECT 2400/ARQ/V42 @#", +"@#CONNECT 2400/ARQ/V42b/SREJ@#", +"@#CONNECT 2400/ARQ/V42b@#", +"@#CONNECT 2400/ARQ/ZyX /MNP4@#", +"@#CONNECT 2400/ARQ/ZyX /MNP5@#", +"@#CONNECT 2400/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 2400/ARQ/ZyX /V42 @#", +"@#CONNECT 2400/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 2400/ARQ/ZyX /V42b@#", +"@#CONNECT 2400/ARQ/ZyX /MNP4@#", +"@#CONNECT 2400/ARQ/ZyX /MNP5@#", +"@#CONNECT 2400/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 2400/ARQ/ZyX /V42 @#", +"@#CONNECT 2400/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 2400/ARQ/ZyX /V42b@#", +"@#CONNECT 2400/ARQ@#", +"@#CONNECT 2400/COMP@#", +"@#CONNECT 2400/LAP-M/COMPRESSION@#", +"@#CONNECT 2400/LAP-M@#", +"@#CONNECT 2400/LAPM/COMP@#", +"@#CONNECT 2400/LAPM/V42BIS@#", +"@#CONNECT 2400/LAPM@#", +"@#CONNECT 2400/MNP COMPRESSED@#", +"@#CONNECT 2400/MNP@#", +"@#CONNECT 2400/NONE@#", +"@#CONNECT 2400/NOR@#", +"@#CONNECT 2400/REL-LAPM-COMP@#", +"@#CONNECT 2400/REL-LAPM V.42 BIS@#", +"@#CONNECT 2400/REL-LAPM@#", +"@#CONNECT 2400/REL-MNP-COMP@#", +"@#CONNECT 2400/REL-MNP@#", +"@#CONNECT 2400/REL-V.42@#", +"@#CONNECT 2400/REL 1@# ", +"@#CONNECT 2400/REL 2@# ", +"@#CONNECT 2400/REL 3@# ", +"@#CONNECT 2400/REL 4@# ", +"@#CONNECT 2400/REL 5@# ", +"@#CONNECT 2400/REL COMP@#", +"@#CONNECT 2400/REL COMPRESSED@#", +"@#CONNECT 2400/REL/COMP@#", +"@#CONNECT 2400/REL@#", +"@#CONNECT 2400/RELC@#", +"@#CONNECT 2400/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 2400/RELIABLE/LAPM@#", +"@#CONNECT 2400/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 2400/RELIABLE/MNP@#", +"@#CONNECT 2400/V42@#", +"@#CONNECT 2400/V42B@#", +"@#CONNECT 2400/V42BIS@#", +"@#CONNECT 2400@#", +"@#CONNECT 24000 LAPM COMPRESSED@#", +"@#CONNECT 24000 LAPM@#", +"@#CONNECT 24000 REL/MNP5@#", +"@#CONNECT 24000 REL@#", +"@#CONNECT 24000 RELIABLE COMPRESSED@#", +"@#CONNECT 24000 RELIABLE@#", +"@#CONNECT 24000/ARQ/V.34/MNP4@#", +"@#CONNECT 24000/ARQ/V.34/MNP5@#", +"@#CONNECT 24000/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 24000/ARQ/V.34/V42 @#", +"@#CONNECT 24000/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 24000/ARQ/V.34/V42b@#", +"@#CONNECT 24000/ARQ@#", +"@#CONNECT 24000/COMP@#", +"@#CONNECT 24000/LAP-M/COMPRESSION@#", +"@#CONNECT 24000/LAP-M@#", +"@#CONNECT 24000/LAPM/COMP@#", +"@#CONNECT 24000/LAPM/V42BIS@#", +"@#CONNECT 24000/LAPM@#", +"@#CONNECT 24000/MNP COMPRESSED@#", +"@#CONNECT 24000/MNP@#", +"@#CONNECT 24000/NONE@#", +"@#CONNECT 24000/NOR@#", +"@#CONNECT 24000/REL-LAPM V.42 BIS@#", +"@#CONNECT 24000/REL-LAPM@#", +"@#CONNECT 24000/REL-V.42@#", +"@#CONNECT 24000/REL COMP@#", +"@#CONNECT 24000/REL/COMP@#", +"@#CONNECT 24000/REL@#", +"@#CONNECT 24000/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 24000/RELIABLE/LAPM@#", +"@#CONNECT 24000/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 24000/RELIABLE/MNP@#", +"@#CONNECT 24000/V42@#", +"@#CONNECT 24000/V42BIS@#", +"@#CONNECT 24000@#", +"@#CONNECT 24000T/V42BIS@#", +"@#CONNECT 2400T/V42BIS@#", +"@#CONNECT 24200/ARQ/V.34/MNP4@#", +"@#CONNECT 24200/ARQ/V.34/MNP5@#", +"@#CONNECT 24200/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 24200/ARQ/V.34/V42 @#", +"@#CONNECT 24200/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 24200/ARQ/V.34/V42b@#", +"@#CONNECT 24200@#", +"@#CONNECT 2600/ARQ/V.34/MNP4@#", +"@#CONNECT 2600/ARQ/V.34/MNP5@#", +"@#CONNECT 2600/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 2600/ARQ/V.34/V42 @#", +"@#CONNECT 2600/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 2600/ARQ/V.34/V42b@#", +"@#CONNECT 2600@#", +"@#CONNECT 26400 LAPM COMPRESSED<cR>#", +"@#CONNECT 26400 LAPM@#", +"@#CONNECT 26400 REL/MNP5@#", +"@#CONNECT 26400 REL@#", +"@#CONNECT 26400 RELIABLE COMPRESSED<cR>#", +"@#CONNECT 26400 RELIABLE@#", +"@#CONNECT 26400/ARQ/V.34/MNP4@#", +"@#CONNECT 26400/ARQ/V.34/MNP5@#", +"@#CONNECT 26400/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 26400/ARQ/V.34/V42 @#", +"@#CONNECT 26400/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 26400/ARQ/V.34/V42b@#", +"@#CONNECT 26400/ARQ@#", +"@#CONNECT 26400/COMP@#", +"@#CONNECT 26400/LAP-M/COMPRESSION@#", +"@#CONNECT 26400/LAP-M@#", +"@#CONNECT 26400/LAPM/COMP@#", +"@#CONNECT 26400/LAPM/V42BIS@#", +"@#CONNECT 26400/LAPM@#", +"@#CONNECT 26400/MNP COMPRESSED@#", +"@#CONNECT 26400/MNP@#", +"@#CONNECT 26400/NONE@#", +"@#CONNECT 26400/NOR@#", +"@#CONNECT 26400/REL-LAPM V.42 BIS@#", +"@#CONNECT 26400/REL-LAPM@#", +"@#CONNECT 26400/REL-V.42@#", +"@#CONNECT 26400/REL COMP@#", +"@#CONNECT 26400/REL/COMP@#", +"@#CONNECT 26400/REL@#", +"@#CONNECT 26400/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 26400/RELIABLE/LAPM@#", +"@#CONNECT 26400/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 26400/RELIABLE/MNP@#", +"@#CONNECT 26400/V42@#", +"@#CONNECT 26400/V42BIS@#", +"@#CONNECT 26400@#", +"@#CONNECT 26400T/V42BIS@#", +"@#CONNECT 26600/ARQ/V.34/MNP4@#", +"@#CONNECT 26600/ARQ/V.34/MNP5@#", +"@#CONNECT 26600/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 26600/ARQ/V.34/V42 @#", +"@#CONNECT 26600/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 26600/ARQ/V.34/V42b@#", +"@#CONNECT 26600@#", +"@#CONNECT 26800/MNP COMPRESSED@#", +"@#CONNECT 28800 LAPM COMPRESSED@#", +"@#CONNECT 28800 LAPM@#", +"@#CONNECT 28800 REL/MNP5@#", +"@#CONNECT 28800 REL@#", +"@#CONNECT 28800 RELIABLE COMPRESSED@#", +"@#CONNECT 28800 RELIABLE@#", +"@#CONNECT 28800/ARQ/V.34/MNP4@#", +"@#CONNECT 28800/ARQ/V.34/MNP5@#", +"@#CONNECT 28800/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 28800/ARQ/V.34/V42 @#", +"@#CONNECT 28800/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 28800/ARQ/V.34/V42b@#", +"@#CONNECT 28800/ARQ@#", +"@#CONNECT 28800/COMP@#", +"@#CONNECT 28800/LAP-M/COMPRESSION@#", +"@#CONNECT 28800/LAP-M@#", +"@#CONNECT 28800/LAPM/COMP@#", +"@#CONNECT 28800/LAPM/V42BIS@#", +"@#CONNECT 28800/LAPM@#", +"@#CONNECT 28800/MNP COMPRESSED@#", +"@#CONNECT 28800/MNP@#", +"@#CONNECT 28800/NONE@#", +"@#CONNECT 28800/NOR@#", +"@#CONNECT 28800/REL-LAPM V.42 BIS@#", +"@#CONNECT 28800/REL-LAPM@#", +"@#CONNECT 28800/REL-V.42@#", +"@#CONNECT 28800/REL COMP@#", +"@#CONNECT 28800/REL/COMP@#", +"@#CONNECT 28800/REL@#", +"@#CONNECT 28800/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 28800/RELIABLE/LAPM@#", +"@#CONNECT 28800/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 28800/RELIABLE/MNP@#", +"@#CONNECT 28800/V42@#", +"@#CONNECT 28800/V42BIS@#", +"@#CONNECT 28800@#", +"@#CONNECT 28800T/V42BIS@#", +"@#CONNECT 29000/ARQ/V.34/MNP4@#", +"@#CONNECT 29000/ARQ/V.34/MNP5@#", +"@#CONNECT 29000/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 29000/ARQ/V.34/V42 @#", +"@#CONNECT 29000/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 29000/ARQ/V.34/V42b@#", +"@#CONNECT 29000@#", +"@#CONNECT 300 ALT / MNP5@#", +"@#CONNECT 300 ALT /MNP 5@#", +"@#CONNECT 300 ALT@#", +"@#CONNECT 300 EC/V42BIS@#", +"@#CONNECT 300 EC@#", +"@#CONNECT 300 LAPM / V.42bis@#", +"@#CONNECT 300 LAPM /V.42bis@#", +"@#CONNECT 300 LAPM@#", +"@#CONNECT 300 REL/MNP5@#", +"@#CONNECT 300 REL@#", +"@#CONNECT 300/ARQ/MNP4@#", +"@#CONNECT 300/ARQ/MNP5@#", +"@#CONNECT 300/ARQ/V.42@#", +"@#CONNECT 300/ARQ/V.42bis@#", +"@#CONNECT 300/ARQ/V42 /SREJ@#", +"@#CONNECT 300/ARQ/V42 @#", +"@#CONNECT 300/ARQ/V42b@#", +"@#CONNECT 300/ARQ@#", +"@#CONNECT 300/COMP@#", +"@#CONNECT 300/LAP-M/COMPRESSION@#", +"@#CONNECT 300/LAP-M@#", +"@#CONNECT 300/LAPM/COMP@#", +"@#CONNECT 300/LAPM/V42BIS@#", +"@#CONNECT 300/LAPM@#", +"@#CONNECT 300/MNP COMPRESSED@#", +"@#CONNECT 300/MNP@#", +"@#CONNECT 300/NONE@#", +"@#CONNECT 300/NOR@#", +"@#CONNECT 300/REL-LAPM V.42 BIS@#", +"@#CONNECT 300/REL-LAPM@#", +"@#CONNECT 300/REL-MNP@#", +"@#CONNECT 300/REL-V.42@#", +"@#CONNECT 300/REL 1@# ", +"@#CONNECT 300/REL 2@# ", +"@#CONNECT 300/REL 3@# ", +"@#CONNECT 300/REL 4@# ", +"@#CONNECT 300/REL 5@# ", +"@#CONNECT 300/REL COMP@#", +"@#CONNECT 300/REL COMPRESSED@#", +"@#CONNECT 300/REL/COMP@#", +"@#CONNECT 300/REL@#", +"@#CONNECT 300/V42@#", +"@#CONNECT 300/V42BIS@#", +"@#CONNECT 300@#", +"@#CONNECT 300T/V42BIS@#", +"@#CONNECT 31200/ARQ/V.34/MNP4@#", +"@#CONNECT 31200/ARQ/V.34/MNP5@#", +"@#CONNECT 31200/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 31200/ARQ/V.34/V42 @#", +"@#CONNECT 31200/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 31200/ARQ/V.34/V42b@#", +"@#CONNECT 31200@#", +"@#CONNECT 31400/ARQ/V.34/MNP4@#", +"@#CONNECT 31400/ARQ/V.34/MNP5@#", +"@#CONNECT 31400/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 31400/ARQ/V.34/V42 @#", +"@#CONNECT 31400/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 31400/ARQ/V.34/V42b@#", +"@#CONNECT 31400@#", +"@#CONNECT 33600/ARQ/V.34/MNP4@#", +"@#CONNECT 33600/ARQ/V.34/MNP5@#", +"@#CONNECT 33600/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 33600/ARQ/V.34/V42 @#", +"@#CONNECT 33600/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 33600/ARQ/V.34/V42b@#", +"@#CONNECT 33600@#", +"@#CONNECT 33800/ARQ/V.34/MNP4@#", +"@#CONNECT 33800/ARQ/V.34/MNP5@#", +"@#CONNECT 33800/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 33800/ARQ/V.34/V42 @#", +"@#CONNECT 33800/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 33800/ARQ/V.34/V42b@#", +"@#CONNECT 33800@#", +"@#CONNECT 38400 ALT / MNP5@#", +"@#CONNECT 38400 ALT /MNP 5@#", +"@#CONNECT 38400 ALT@#", +"@#CONNECT 38400 EC/V42BIS@#", +"@#CONNECT 38400 EC@#", +"@#CONNECT 38400 LAPM / V.42bis@#", +"@#CONNECT 38400 LAPM /V.42bis@#", +"@#CONNECT 38400 LAPM@#", +"@#CONNECT 38400 REL/MNP5@#", +"@#CONNECT 38400 REL/V42@#", +"@#CONNECT 38400 REL@#", +"@#CONNECT 38400/ARQ/V42 /SREJ@#", +"@#CONNECT 38400/ARQ/V42 @#", +"@#CONNECT 38400/ARQ/V42b@#", +"@#CONNECT 38400/ARQ@#", +"@#CONNECT 38400/COMP@#", +"@#CONNECT 38400/LAP-M/COMPRESSION@#", +"@#CONNECT 38400/LAP-M@#", +"@#CONNECT 38400/LAPM/COMP@#", +"@#CONNECT 38400/LAPM@#", +"@#CONNECT 38400/MNP COMPRESSED@#", +"@#CONNECT 38400/MNP@#", +"@#CONNECT 38400/NONE@#", +"@#CONNECT 38400/NOR@#", +"@#CONNECT 38400/REL-LAPM V.42 BIS@#", +"@#CONNECT 38400/REL-LAPM@#", +"@#CONNECT 38400/REL-V.42@#", +"@#CONNECT 38400/REL COMP@#", +"@#CONNECT 38400/REL/COMP@#", +"@#CONNECT 38400/REL@#", +"@#CONNECT 38400/V.110@#", +"@#CONNECT 38400/V42@#", +"@#CONNECT 38400/V42BIS@#", +"@#CONNECT 38400@#", +"@#CONNECT 38400T/V42BIS@#", +"@#CONNECT 4800 ALT / MNP5@#", +"@#CONNECT 4800 ALT /MNP 5@#", +"@#CONNECT 4800 ALT@#", +"@#CONNECT 4800 EC/V42@#", +"@#CONNECT 4800 EC/V42BIS@#", +"@#CONNECT 4800 EC@#", +"@#CONNECT 4800 LAPM / V.42bis@#", +"@#CONNECT 4800 LAPM /V.42bis@#", +"@#CONNECT 4800 LAPM COMPRESSED@#", +"@#CONNECT 4800 LAPM@#", +"@#CONNECT 4800 NORMAL@#", +"@#CONNECT 4800 REL/MNP5@#", +"@#CONNECT 4800 REL/V42@#", +"@#CONNECT 4800 REL/V42BIS@#", +"@#CONNECT 4800 REL@#", +"@#CONNECT 4800 RELIABLE COMPRESSED@#", +"@#CONNECT 4800 RELIABLE@#", +"@#CONNECT 4800 V.42@#", +"@#CONNECT 4800/ARQ/CELL /MNP4@#", +"@#CONNECT 4800/ARQ/CELL /MNP5@#", +"@#CONNECT 4800/ARQ/CELL /V42 /SREJ@#", +"@#CONNECT 4800/ARQ/CELL /V42 @#", +"@#CONNECT 4800/ARQ/CELL /V42b/SREJ@#", +"@#CONNECT 4800/ARQ/CELL /V42b@#", +"@#CONNECT 4800/ARQ/CELL/MNP4@#", +"@#CONNECT 4800/ARQ/CELL/MNP5@#", +"@#CONNECT 4800/ARQ/CELL/V42 /SREJ@#", +"@#CONNECT 4800/ARQ/CELL/V42 @#", +"@#CONNECT 4800/ARQ/CELL/V42b/SREJ@#", +"@#CONNECT 4800/ARQ/CELL/V42b@#", +"@#CONNECT 4800/ARQ/MNP4@#", +"@#CONNECT 4800/ARQ/MNP5@#", +"@#CONNECT 4800/ARQ/V.34/MNP4@#", +"@#CONNECT 4800/ARQ/V.34/MNP5@#", +"@#CONNECT 4800/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 4800/ARQ/V.34/V42 @#", +"@#CONNECT 4800/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 4800/ARQ/V.34/V42b@#", +"@#CONNECT 4800/ARQ/V.42@#", +"@#CONNECT 4800/ARQ/V.42bis@#", +"@#CONNECT 4800/ARQ/V32 /MNP4@#", +"@#CONNECT 4800/ARQ/V32 /MNP5@#", +"@#CONNECT 4800/ARQ/V32 /V42 /SREJ@#", +"@#CONNECT 4800/ARQ/V32 /V42 @#", +"@#CONNECT 4800/ARQ/V32 /V42b/SREJ@#", +"@#CONNECT 4800/ARQ/V32 /V42b@#", +"@#CONNECT 4800/ARQ/V32 /MNP4@#", +"@#CONNECT 4800/ARQ/V32 /MNP5@#", +"@#CONNECT 4800/ARQ/V32 /V42 /SREJ@#", +"@#CONNECT 4800/ARQ/V32 /V42 @#", +"@#CONNECT 4800/ARQ/V32 /V42b/SREJ@#", +"@#CONNECT 4800/ARQ/V32 /V42b@#", +"@#CONNECT 4800/ARQ/V32b /MNP4@#", +"@#CONNECT 4800/ARQ/V32b /MNP5@#", +"@#CONNECT 4800/ARQ/V32b /V42 /SREJ@#", +"@#CONNECT 4800/ARQ/V32b /V42 @#", +"@#CONNECT 4800/ARQ/V32b /V42b/SREJ@#", +"@#CONNECT 4800/ARQ/V32b /V42b@#", +"@#CONNECT 4800/ARQ/V32b/MNP4@#", +"@#CONNECT 4800/ARQ/V32b/MNP5@#", +"@#CONNECT 4800/ARQ/V32b/V42 /SREJ@#", +"@#CONNECT 4800/ARQ/V32b/V42 @#", +"@#CONNECT 4800/ARQ/V32b/V42b/SREJ@#", +"@#CONNECT 4800/ARQ/V32b/V42b@#", +"@#CONNECT 4800/ARQ/V42 /SREJ@#", +"@#CONNECT 4800/ARQ/V42 @#", +"@#CONNECT 4800/ARQ/V42b/SREJ@#", +"@#CONNECT 4800/ARQ/V42b@#", +"@#CONNECT 4800/ARQ/ZyX /MNP4@#", +"@#CONNECT 4800/ARQ/ZyX /MNP5@#", +"@#CONNECT 4800/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 4800/ARQ/ZyX /V42 @#", +"@#CONNECT 4800/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 4800/ARQ/ZyX /V42b@#", +"@#CONNECT 4800/ARQ/ZyX /MNP4@#", +"@#CONNECT 4800/ARQ/ZyX /MNP5@#", +"@#CONNECT 4800/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 4800/ARQ/ZyX /V42 @#", +"@#CONNECT 4800/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 4800/ARQ/ZyX /V42b@#", +"@#CONNECT 4800/ARQ@#", +"@#CONNECT 4800/COMP@#", +"@#CONNECT 4800/LAP-M/COMPRESSION@#", +"@#CONNECT 4800/LAP-M@#", +"@#CONNECT 4800/LAPM/COMP@#", +"@#CONNECT 4800/LAPM/V42BIS@#", +"@#CONNECT 4800/LAPM@#", +"@#CONNECT 4800/MNP COMPRESSED@#", +"@#CONNECT 4800/MNP@#", +"@#CONNECT 4800/NONE@#", +"@#CONNECT 4800/NOR@#", +"@#CONNECT 4800/REL-LAPM-COMP@#", +"@#CONNECT 4800/REL-LAPM V.42 BIS@#", +"@#CONNECT 4800/REL-LAPM@#", +"@#CONNECT 4800/REL-MNP-COMP@#", +"@#CONNECT 4800/REL-MNP@#", +"@#CONNECT 4800/REL-V.42@#", +"@#CONNECT 4800/REL 1@# ", +"@#CONNECT 4800/REL 2@# ", +"@#CONNECT 4800/REL 3@# ", +"@#CONNECT 4800/REL 4@# ", +"@#CONNECT 4800/REL 5@# ", +"@#CONNECT 4800/REL COMP@#", +"@#CONNECT 4800/REL COMPRESSED@#", +"@#CONNECT 4800/REL/COMP@#", +"@#CONNECT 4800/REL@#", +"@#CONNECT 4800/RELC@#", +"@#CONNECT 4800/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 4800/RELIABLE/LAPM@#", +"@#CONNECT 4800/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 4800/RELIABLE/MNP@#", +"@#CONNECT 4800/V42@#", +"@#CONNECT 4800/V42B@#", +"@#CONNECT 4800/V42BIS@#", +"@#CONNECT 4800@#", +"@#CONNECT 48000@#", +"@#CONNECT 4800T/V42BIS@#", +"@#CONNECT 5000/ARQ/V.34/MNP4@#", +"@#CONNECT 5000/ARQ/V.34/MNP5@#", +"@#CONNECT 5000/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 5000/ARQ/V.34/V42 @#", +"@#CONNECT 5000/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 5000/ARQ/V.34/V42b@#", +"@#CONNECT 5000@#", +"@#CONNECT 56000/ARQ/SLP /V120/V42b@#", +"@#CONNECT 56000/ARQ/SLP /V120@#", +"@#CONNECT 56000/REL@#", +"@#CONNECT 56000@#", +"@#CONNECT 57600 ALT / MNP5@#", +"@#CONNECT 57600 ALT /MNP 5@#", +"@#CONNECT 57600 ALT@#", +"@#CONNECT 57600 EC/V42BIS@#", +"@#CONNECT 57600 EC@#", +"@#CONNECT 57600 LAPM / V.42bis@#", +"@#CONNECT 57600 LAPM /V.42bis@#", +"@#CONNECT 57600 LAPM@#", +"@#CONNECT 57600 REL/MNP5@#", +"@#CONNECT 57600 REL@#", +"@#CONNECT 57600/ARQ/V42 /SREJ@#", +"@#CONNECT 57600/ARQ/V42 @#", +"@#CONNECT 57600/ARQ/V42b@#", +"@#CONNECT 57600/ARQ@#", +"@#CONNECT 57600/COMP@#", +"@#CONNECT 57600/LAP-M/COMPRESSION@#", +"@#CONNECT 57600/LAP-M@#", +"@#CONNECT 57600/LAPM/COMP@#", +"@#CONNECT 57600/LAPM@#", +"@#CONNECT 57600/MNP COMPRESSED@#", +"@#CONNECT 57600/MNP@#", +"@#CONNECT 57600/NONE@#", +"@#CONNECT 57600/NOR@#", +"@#CONNECT 57600/REL-LAPM V.42 BIS@#", +"@#CONNECT 57600/REL-LAPM@#", +"@#CONNECT 57600/REL-V.42@#", +"@#CONNECT 57600/REL COMP@#", +"@#CONNECT 57600/REL/COMP@#", +"@#CONNECT 57600/REL@#", +"@#CONNECT 57600/V42@#", +"@#CONNECT 57600/V42BIS@#", +"@#CONNECT 57600@#", +"@#CONNECT 57600@#@#@#*@#COM@#", +"@#CONNECT 57600T/V42BIS@#", +"@#CONNECT 600 ALT / MNP5@#", +"@#CONNECT 600 ALT /MNP 5@#", +"@#CONNECT 600 ALT@#", +"@#CONNECT 600 EC/V42BIS@#", +"@#CONNECT 600 EC@#", +"@#CONNECT 600 LAPM / V.42bis@#", +"@#CONNECT 600 LAPM /V.42bis@#", +"@#CONNECT 600 LAPM@#", +"@#CONNECT 600 REL/MNP5@#", +"@#CONNECT 600 REL@#", +"@#CONNECT 600/ARQ/MNP4@#", +"@#CONNECT 600/ARQ/MNP5@#", +"@#CONNECT 600/ARQ/V.42@#", +"@#CONNECT 600/ARQ/V.42bis@#", +"@#CONNECT 600/ARQ@#", +"@#CONNECT 600/COMP@#", +"@#CONNECT 600/LAP-M/COMPRESSION@#", +"@#CONNECT 600/LAP-M@#", +"@#CONNECT 600/LAPM/COMP@#", +"@#CONNECT 600/LAPM@#", +"@#CONNECT 600/MNP COMPRESSED@#", +"@#CONNECT 600/MNP@#", +"@#CONNECT 600/NONE@#", +"@#CONNECT 600/REL-LAPM V.42 BIS@#", +"@#CONNECT 600/REL 1@# ", +"@#CONNECT 600/REL 2@# ", +"@#CONNECT 600/REL 3@# ", +"@#CONNECT 600/REL 4@# ", +"@#CONNECT 600/REL 5@# ", +"@#CONNECT 600/REL COMPRESSED@#", +"@#CONNECT 600/REL/COMP@#", +"@#CONNECT 600/REL@#", +"@#CONNECT 600/V42@#", +"@#CONNECT 600/V42BIS@#", +"@#CONNECT 600@#", +"@#CONNECT 64000/ARQ/SLP /X.75/V42b@#", +"@#CONNECT 64000/ARQ/SLP /X.75@#", +"@#CONNECT 64000/MNP@#", +"@#CONNECT 64000/REL@#", +"@#CONNECT 64000/X.70 BTX@#", +"@#CONNECT 64000/X.70NL@#", +"@#CONNECT 64000/X.75@#", +"@#CONNECT 64000@#", +"@#CONNECT 7200 ALT / MNP5@#", +"@#CONNECT 7200 ALT /MNP 5@#", +"@#CONNECT 7200 ALT@#", +"@#CONNECT 7200 EC/V42@#", +"@#CONNECT 7200 EC/V42BIS@#", +"@#CONNECT 7200 EC@#", +"@#CONNECT 7200 LAPM / V.42bis@#", +"@#CONNECT 7200 LAPM /V.42bis@#", +"@#CONNECT 7200 LAPM COMPRESSED@#", +"@#CONNECT 7200 LAPM@#", +"@#CONNECT 7200 REL/MNP5@#", +"@#CONNECT 7200 REL/V42@#", +"@#CONNECT 7200 REL/V42BIS@#", +"@#CONNECT 7200 REL@#", +"@#CONNECT 7200 RELIABLE@#", +"@#CONNECT 7200/ARQ/CELL /MNP4@#", +"@#CONNECT 7200/ARQ/CELL /MNP5@#", +"@#CONNECT 7200/ARQ/CELL /V42 /SREJ@#", +"@#CONNECT 7200/ARQ/CELL /V42 @#", +"@#CONNECT 7200/ARQ/CELL /V42b/SREJ@#", +"@#CONNECT 7200/ARQ/CELL /V42b@#", +"@#CONNECT 7200/ARQ/CELL/MNP4@#", +"@#CONNECT 7200/ARQ/CELL/MNP5@#", +"@#CONNECT 7200/ARQ/CELL/V42 /SREJ@#", +"@#CONNECT 7200/ARQ/CELL/V42 @#", +"@#CONNECT 7200/ARQ/CELL/V42b/SREJ@#", +"@#CONNECT 7200/ARQ/CELL/V42b@#", +"@#CONNECT 7200/ARQ/MNP4@#", +"@#CONNECT 7200/ARQ/MNP5@#", +"@#CONNECT 7200/ARQ/V.34/MNP4@#", +"@#CONNECT 7200/ARQ/V.34/MNP5@#", +"@#CONNECT 7200/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 7200/ARQ/V.34/V42 @#", +"@#CONNECT 7200/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 7200/ARQ/V.34/V42b@#", +"@#CONNECT 7200/ARQ/V.42@#", +"@#CONNECT 7200/ARQ/V.42bis@#", +"@#CONNECT 7200/ARQ/V32 /MNP4@#", +"@#CONNECT 7200/ARQ/V32 /MNP5@#", +"@#CONNECT 7200/ARQ/V32 /V42 /SREJ@#", +"@#CONNECT 7200/ARQ/V32 /V42 @#", +"@#CONNECT 7200/ARQ/V32 /V42b/SREJ@#", +"@#CONNECT 7200/ARQ/V32 /V42b@#", +"@#CONNECT 7200/ARQ/V32 /MNP4@#", +"@#CONNECT 7200/ARQ/V32 /MNP5@#", +"@#CONNECT 7200/ARQ/V32 /V42 /SREJ@#", +"@#CONNECT 7200/ARQ/V32 /V42 @#", +"@#CONNECT 7200/ARQ/V32 /V42b/SREJ@#", +"@#CONNECT 7200/ARQ/V32 /V42b@#", +"@#CONNECT 7200/ARQ/V32b /MNP4@#", +"@#CONNECT 7200/ARQ/V32b /MNP5@#", +"@#CONNECT 7200/ARQ/V32b /V42 /SREJ@#", +"@#CONNECT 7200/ARQ/V32b /V42 @#", +"@#CONNECT 7200/ARQ/V32b /V42b/SREJ@#", +"@#CONNECT 7200/ARQ/V32b /V42b@#", +"@#CONNECT 7200/ARQ/V32b/MNP4@#", +"@#CONNECT 7200/ARQ/V32b/MNP5@#", +"@#CONNECT 7200/ARQ/V32b/V42 /SREJ@#", +"@#CONNECT 7200/ARQ/V32b/V42 @#", +"@#CONNECT 7200/ARQ/V32b/V42b/SREJ@#", +"@#CONNECT 7200/ARQ/V32b/V42b@#", +"@#CONNECT 7200/ARQ/V42 /SREJ@#", +"@#CONNECT 7200/ARQ/V42 @#", +"@#CONNECT 7200/ARQ/V42b/SREJ@#", +"@#CONNECT 7200/ARQ/V42b@#", +"@#CONNECT 7200/ARQ/ZyX /MNP4@#", +"@#CONNECT 7200/ARQ/ZyX /MNP5@#", +"@#CONNECT 7200/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 7200/ARQ/ZyX /V42 @#", +"@#CONNECT 7200/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 7200/ARQ/ZyX /V42b@#", +"@#CONNECT 7200/ARQ/ZyX /MNP4@#", +"@#CONNECT 7200/ARQ/ZyX /MNP5@#", +"@#CONNECT 7200/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 7200/ARQ/ZyX /V42 @#", +"@#CONNECT 7200/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 7200/ARQ/ZyX /V42b@#", +"@#CONNECT 7200/ARQ@#", +"@#CONNECT 7200/COMP@#", +"@#CONNECT 7200/LAP-M/COMPRESSION@#", +"@#CONNECT 7200/LAP-M@#", +"@#CONNECT 7200/LAPM/COMP@#", +"@#CONNECT 7200/LAPM/V42BIS@#", +"@#CONNECT 7200/LAPM@#", +"@#CONNECT 7200/MNP COMPRESSED@#", +"@#CONNECT 7200/MNP@#", +"@#CONNECT 7200/NONE@#", +"@#CONNECT 7200/NOR@#", +"@#CONNECT 7200/REL-LAPM-COMP@#", +"@#CONNECT 7200/REL-LAPM V.42 BIS@#", +"@#CONNECT 7200/REL-LAPM@#", +"@#CONNECT 7200/REL-MNP-COMP@#", +"@#CONNECT 7200/REL-MNP@#", +"@#CONNECT 7200/REL-V.42@#", +"@#CONNECT 7200/REL 1@# ", +"@#CONNECT 7200/REL 2@# ", +"@#CONNECT 7200/REL 3@# ", +"@#CONNECT 7200/REL 4@# ", +"@#CONNECT 7200/REL 5@# ", +"@#CONNECT 7200/REL COMP@#", +"@#CONNECT 7200/REL/COMP@#", +"@#CONNECT 7200/REL@#", +"@#CONNECT 7200/RELC@#", +"@#CONNECT 7200/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 7200/RELIABLE/LAPM@#", +"@#CONNECT 7200/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 7200/RELIABLE/MNP@#", +"@#CONNECT 7200/V42@#", +"@#CONNECT 7200/V42B@#", +"@#CONNECT 7200/V42BIS@#", +"@#CONNECT 7200@#", +"@#CONNECT 7200T/V42BIS@#", +"@#CONNECT 7400/ARQ/V.34/MNP4@#", +"@#CONNECT 7400/ARQ/V.34/MNP5@#", +"@#CONNECT 7400/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 7400/ARQ/V.34/V42 @#", +"@#CONNECT 7400/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 7400/ARQ/V.34/V42b@#", +"@#CONNECT 7400@#", +"@#CONNECT 75/1200", +"@#CONNECT 75/1200/ARQ@#", +"@#CONNECT 75/1200/LAP-M/COMPRESSION@#", +"@#CONNECT 75/1200/LAP-M@#", +"@#CONNECT 75/1200/LAPM/COMP@#", +"@#CONNECT 75/1200/LAPM@#", +"@#CONNECT 75/1200/MNP@#", +"@#CONNECT 75/1200/NONE@#", +"@#CONNECT 75/1200/REL-LAPM V.42 BIS@#", +"@#CONNECT 75/1200/REL/COMP@#", +"@#CONNECT 75/1200/REL@#", +"@#CONNECT 75/1200/REL#", +"@#CONNECT 75/1200/V42@#", +"@#CONNECT 75/1200/V42BIS@#", +"@#CONNECT 75/1200@#", +"@#CONNECT 75TX/1200RX REL/MNP5@#", +"@#CONNECT 75TX/1200RX REL@#", +"@#CONNECT 75TX/1200RX/ARQ@#", +"@#CONNECT 75TX/1200RX/LAP-M/COMPRESSION@#", +"@#CONNECT 75TX/1200RX/LAP-M@#", +"@#CONNECT 75TX/1200RX/LAPM/COMP@#", +"@#CONNECT 75TX/1200RX/LAPM@#", +"@#CONNECT 75TX/1200RX/MNP@#", +"@#CONNECT 75TX/1200RX/NONE@#", +"@#CONNECT 75TX/1200RX/REL-LAPM V.42 BIS@#", +"@#CONNECT 75TX/1200RX/REL/COMP@#", +"@#CONNECT 75TX/1200RX/REL@#", +"@#CONNECT 75TX/1200RX/V42@#", +"@#CONNECT 75TX/1200RX/V42BIS@#", +"@#CONNECT 75TX/1200RX@#", +"@#CONNECT 76800/ARQ/V42 /SREJ@#", +"@#CONNECT 76800/ARQ/V42 @#", +"@#CONNECT 76800/ARQ/V42b@#", +"@#CONNECT 76800@#", +"@#CONNECT 9600 ALT / MNP5@#", +"@#CONNECT 9600 ALT /MNP 5@#", +"@#CONNECT 9600 ALT@#", +"@#CONNECT 9600 EC/V42@#", +"@#CONNECT 9600 EC/V42BIS@#", +"@#CONNECT 9600 EC@#", +"@#CONNECT 9600 LAPM / V.42bis@#", +"@#CONNECT 9600 LAPM /V.42bis@#", +"@#CONNECT 9600 LAPM COMPRESSED@#", +"@#CONNECT 9600 LAPM@#", +"@#CONNECT 9600 NORMAL@#", +"@#CONNECT 9600 REL/MNP5@#", +"@#CONNECT 9600 REL/V42@#", +"@#CONNECT 9600 REL/V42BIS@#", +"@#CONNECT 9600 REL@#", +"@#CONNECT 9600 RELIABLE COMPRESSED@#", +"@#CONNECT 9600 RELIABLE@#", +"@#CONNECT 9600 V.42@#", +"@#CONNECT 9600/ARQ/CELL /MNP4@#", +"@#CONNECT 9600/ARQ/CELL /MNP5@#", +"@#CONNECT 9600/ARQ/CELL /V42 /SREJ@#", +"@#CONNECT 9600/ARQ/CELL /V42 @#", +"@#CONNECT 9600/ARQ/CELL /V42b/SREJ@#", +"@#CONNECT 9600/ARQ/CELL /V42b@#", +"@#CONNECT 9600/ARQ/CELL/MNP4@#", +"@#CONNECT 9600/ARQ/CELL/MNP5@#", +"@#CONNECT 9600/ARQ/CELL/V42 /SREJ@#", +"@#CONNECT 9600/ARQ/CELL/V42 @#", +"@#CONNECT 9600/ARQ/CELL/V42b/SREJ@#", +"@#CONNECT 9600/ARQ/CELL/V42b@#", +"@#CONNECT 9600/ARQ/MNP4@#", +"@#CONNECT 9600/ARQ/MNP5@#", +"@#CONNECT 9600/ARQ/V.34/MNP4@#", +"@#CONNECT 9600/ARQ/V.34/MNP5@#", +"@#CONNECT 9600/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 9600/ARQ/V.34/V42 @#", +"@#CONNECT 9600/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 9600/ARQ/V.34/V42b@#", +"@#CONNECT 9600/ARQ/V.42@#", +"@#CONNECT 9600/ARQ/V.42bis@#", +"@#CONNECT 9600/ARQ/V32 /MNP4@#", +"@#CONNECT 9600/ARQ/V32 /MNP5@#", +"@#CONNECT 9600/ARQ/V32 /V42 /SREJ@#", +"@#CONNECT 9600/ARQ/V32 /V42 @#", +"@#CONNECT 9600/ARQ/V32 /V42b/SREJ@#", +"@#CONNECT 9600/ARQ/V32 /V42b@#", +"@#CONNECT 9600/ARQ/V32 /MNP4@#", +"@#CONNECT 9600/ARQ/V32 /MNP5@#", +"@#CONNECT 9600/ARQ/V32 /V42 /SREJ@#", +"@#CONNECT 9600/ARQ/V32 /V42 @#", +"@#CONNECT 9600/ARQ/V32 /V42b/SREJ@#", +"@#CONNECT 9600/ARQ/V32 /V42b@#", +"@#CONNECT 9600/ARQ/V32b /MNP4@#", +"@#CONNECT 9600/ARQ/V32b /MNP5@#", +"@#CONNECT 9600/ARQ/V32b /V42 /SREJ@#", +"@#CONNECT 9600/ARQ/V32b /V42 @#", +"@#CONNECT 9600/ARQ/V32b /V42b/SREJ@#", +"@#CONNECT 9600/ARQ/V32b /V42b@#", +"@#CONNECT 9600/ARQ/V32b/MNP4@#", +"@#CONNECT 9600/ARQ/V32b/MNP5@#", +"@#CONNECT 9600/ARQ/V32b/V42 /SREJ@#", +"@#CONNECT 9600/ARQ/V32b/V42 @#", +"@#CONNECT 9600/ARQ/V32b/V42b/SREJ@#", +"@#CONNECT 9600/ARQ/V32b/V42b@#", +"@#CONNECT 9600/ARQ/V42 /SREJ@#", +"@#CONNECT 9600/ARQ/V42 @#", +"@#CONNECT 9600/ARQ/V42b/SREJ@#", +"@#CONNECT 9600/ARQ/V42b@#", +"@#CONNECT 9600/ARQ/ZyX /MNP4@#", +"@#CONNECT 9600/ARQ/ZyX /MNP5@#", +"@#CONNECT 9600/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 9600/ARQ/ZyX /V42 @#", +"@#CONNECT 9600/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 9600/ARQ/ZyX /V42b@#", +"@#CONNECT 9600/ARQ/ZyX /MNP4@#", +"@#CONNECT 9600/ARQ/ZyX /MNP5@#", +"@#CONNECT 9600/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 9600/ARQ/ZyX /V42 @#", +"@#CONNECT 9600/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 9600/ARQ/ZyX /V42b@#", +"@#CONNECT 9600/ARQ@#", +"@#CONNECT 9600/COMP@#", +"@#CONNECT 9600/LAP-M/COMPRESSION@#", +"@#CONNECT 9600/LAP-M@#", +"@#CONNECT 9600/LAPM/COMP@#", +"@#CONNECT 9600/LAPM/V42BIS@#", +"@#CONNECT 9600/LAPM@#", +"@#CONNECT 9600/MNP COMPRESSED@#", +"@#CONNECT 9600/MNP@#", +"@#CONNECT 9600/NONE@#", +"@#CONNECT 9600/NOR@#", +"@#CONNECT 9600/REL-LAPM-COMP@#", +"@#CONNECT 9600/REL-LAPM V.42 BIS@#", +"@#CONNECT 9600/REL-LAPM@#", +"@#CONNECT 9600/REL-MNP-COMP@#", +"@#CONNECT 9600/REL-MNP@#", +"@#CONNECT 9600/REL-V.42@#", +"@#CONNECT 9600/REL 1@# ", +"@#CONNECT 9600/REL 2@# ", +"@#CONNECT 9600/REL 3@# ", +"@#CONNECT 9600/REL 4@# ", +"@#CONNECT 9600/REL 5@# ", +"@#CONNECT 9600/REL COMP@#", +"@#CONNECT 9600/REL COMPRESSED@#", +"@#CONNECT 9600/REL/COMP@#", +"@#CONNECT 9600/REL@#", +"@#CONNECT 9600/RELC@#", +"@#CONNECT 9600/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 9600/RELIABLE/LAPM@#", +"@#CONNECT 9600/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 9600/RELIABLE/MNP@#", +"@#CONNECT 9600/V.110@#", +"@#CONNECT 9600/V42@#", +"@#CONNECT 9600/V42B@#", +"@#CONNECT 9600/V42BIS@#", +"@#CONNECT 9600@#", +"@#CONNECT 9600T RELIABLE@#", +"@#CONNECT 9600T V.42@#", +"@#CONNECT 9600T/V42BIS@#", +"@#CONNECT 9800/ARQ/V.34/MNP4@#", +"@#CONNECT 9800/ARQ/V.34/MNP5@#", +"@#CONNECT 9800/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 9800/ARQ/V.34/V42 @#", +"@#CONNECT 9800/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 9800/ARQ/V.34/V42b@#", +"@#CONNECT 9800@#", +"@#CONNECT EC@#", +"@#CONNECT FAST@#", +"@#CONNECT LAPM COMPRESSED@#", +"@#CONNECT LAPM@#", +"@#CONNECT REL/MNP5@#", +"@#CONNECT REL@#", +"@#CONNECT RELIABLE COMPRESSED@#", +"@#CONNECT RELIABLE@#", +"@#CONNECT V.21/REL@#", +"@#CONNECT/ARQ@#", +"@#CONNECT/LAP-M/COMPRESSION@#", +"@#CONNECT/LAP-M@#", +"@#CONNECT/LAPM/COMP@#", +"@#CONNECT/LAPM@#", +"@#CONNECT/MNP@#", +"@#CONNECT/NONE@#", +"@#CONNECT/REL/COMP@#", +"@#CONNECT/REL@#", +"@#CONNECT/V42@#", +"@#CONNECT/V42BIS@#", +"@#CONNECT@#", +"@#DALAYED@#", +"@#DATA@#", +"@#DATE = ", +"@#DELAYED", +"@#Delayed@#", +"@#DELAYED@#", +"@#Delayed@#", +"@#DELAYED@#", +"@#DIALING@#", +"@#DISCONNECT@#", +"@#Don't use this command at this situation @#", +"@#ERROR SERIAL SPEED SETUP@#", +"@#ERROR@#", +"@#FAX@#", +"@#LIB DER 00@#", +"@#LOCKED@#", +"@#NO ANSWER@#", +"@#NO CARRIER@#", +"@#NO DIAL TONE@#", +"@#NO DIALTONE@#", +"@#NO USER RESPONDING@#", +"@#NOTUSED@#", +"@#NUMBER DELAYED:TIMER@#", +"@#NUMBER LOCKED OUT@#", +"@#OFF HOOK@#", +"@#OK@#", +"@#PROTOCOL: ALT-+FCERROR@#", +"@#PROTOCOL: ALT-CELLULAR@#", +"@#PROTOCOL: ALT-DATA@#", +"@#PROTOCOL: ALT-FAX@#", +"@#PROTOCOL: ALT - CELLULAR@#", +"@#PROTOCOL: ALT CELLULAR@#", +"@#PROTOCOL: ALT@#", +"@#PROTOCOL: ERROR-CONTROL/LAP-B@#", +"@#PROTOCOL: ERROR-CONTROL/LAPB/AFT@#", +"@#PROTOCOL: ERROR-CONTROL/LAPB/HDX@#", +"@#PROTOCOL: ERROR-CONTROL/LAPB@#", +"@#PROTOCOL: LAP-M/AFT@#", +"@#PROTOCOL: LAP-M/HDX@#", +"@#PROTOCOL: LAP-M@#", +"@#PROTOCOL: LAP_M@#", +"@#PROTOCOL: LAPM/AFT@#", +"@#PROTOCOL: LAPM/HDX@#", +"@#PROTOCOL: LAPM@#", +"@#PROTOCOL: MNP 3,4@#", +"@#PROTOCOL: MNP ALT@#", +"@#PROTOCOL: MNP REL 1@#", +"@#PROTOCOL: MNP REL 2@#", +"@#PROTOCOL: MNP REL 3@#", +"@#PROTOCOL: MNP REL 4@#", +"@#PROTOCOL: MNP REL 5@#", +"@#PROTOCOL: MNP REL@#", +"@#PROTOCOL: MNP@#", +"@#PROTOCOL: MNP1@#", +"@#PROTOCOL: MNP2@#", +"@#PROTOCOL: MNP3@#", +"@#PROTOCOL: MNP4@#", +"@#PROTOCOL: NONE@#", +"@#PROTOCOL: PAD@#", +"@#PROTOCOL: V.42BIS@#", +"@#PROTOCOL: V42@#", +"@#PROTOCOL: V42BIS@#", +"@#PROTOCOL: X.25/LAPB/AFT@#", +"@#PROTOCOL: X.25/LAPB/HDX@#", +"@#PROTOCOL: X.25/LAPB@#", +"@#PROTOCOL:ALT-+FCERROR@#", +"@#PROTOCOL:ALT-CELLULAR@#", +"@#PROTOCOL:ALT-DATA@#", +"@#PROTOCOL:ALT-FAX@#", +"@#PROTOCOL:ALT@#", +"@#PROTOCOL:LAP-M@#", +"@#PROTOCOL:LAPM@#", +"@#PROTOCOL:MNP@#", +"@#PROTOCOL:MNP2@#", +"@#PROTOCOL:MNP3@#", +"@#PROTOCOL:MNP4@#", +"@#PROTOCOL:NONE@#", +"@#PROTOCOL:V.42BIS@#", +"@#PROTOCOL:V42BIS@#", +"@#RING@#", +"@#RING1@#", +"@#RING2@#", +"@#RING3@#", +"@#RINGING@#", +"@#RRING@#", +"@#TEST FAILED@#", +"@#TEST PASSED@#", +"@#VCON@#", +"@#VOICE@#", +"@#Wait 5 seconds,then dial@#", +"@OK#", +"<ff>@", +"<ff>@@#OK@#", +"<h00>CLIENT", +"#", +"0@", +"0<CR>", +"0@", +"00@", +"01@", +"02@", +"03@", +"04@", +"05@", +"06@", +"07@", +"08@", +"1<CR>", +"1@", +"10@", +"10<CR>", +"10@", +"10@#", +"10@66@", +"10@67@", +"10@69@", +"100@", +"101@", +"102@", +"103@", +"104@", +"105@", +"10L@#", +"10LC@#", +"10R@#", +"10RC@#", +"11<CR>", +"11@", +"11<CR>", +"11@", +"11<CR>", +"11@", +"11<CR>", +"11@", +"11<CR>", +"11@", +"11@#", +"11@66@", +"11@67@", +"11@69@", +"111@", +"112@", +"113@", +"114@", +"115@", +"116@", +"117@", +"118@", +"119@", +"11L@#", +"11LC@#", +"11R@#", +"11RC@#", +"12@", +"12<CR>", +"12@", +"12<CR>", +"12@", +"12<CR>", +"12@", +"12<CR>", +"12@", +"12<CR>", +"12@", +"12@#", +"12@66@", +"12@67@", +"12@69@", +"120@", +"121@", +"122@", +"123@", +"124@", +"125@", +"126@", +"127@", +"128@", +"129@", +"12L@#", +"12LC@#", +"12R@#", +"12RC@#", +"13@", +"13<CR>", +"13@", +"13<CR>", +"13@", +"13<CR>", +"13@", +"13<CR>", +"13@", +"13<CR>", +"13@#", +"13@66@", +"13@67@", +"13@69@", +"13L@#", +"13LC@#", +"13R@#", +"13RC@#", +"14@", +"14<CR>", +"14@", +"14<CR>", +"14@", +"14<CR>", +"14@", +"14<CR>", +"14@66@", +"14@67@", +"14@69@", +"15@", +"15<CR>", +"15@", +"15<CR>", +"15@", +"15<CR>", +"15@", +"15<CR>", +"15@", +"15@66@", +"15@67@", +"15@69@", +"16@", +"16<CR>", +"16@", +"16@66@", +"16@67@", +"16@69@", +"17@", +"18@", +"18<CR>", +"18@", +"19@", +"19@#", +"19L@#", +"19LC@#", +"19R@#", +"19RC@#", +"1L@#", +"1LC@#", +"1R@#", +"1RC@#", +"2@", +"2<CR>", +"2@", +"20@", +"21@", +"21@#", +"21L@#", +"21LC@#", +"21R@#", +"21RC@#", +"22@", +"22<CR>", +"22@", +"22<CR>", +"22@", +"22<CR>", +"22@", +"22<CR>", +"22@", +"23<CR>", +"23@", +"23<CR>", +"23@", +"23<CR>", +"23@", +"23<CR>", +"23@", +"24@", +"24<CR>", +"24@", +"24<CR>", +"24@", +"24<CR>", +"24@", +"24<CR>", +"24@", +"24<CR>", +"24@", +"24@#", +"24L@#", +"24LC@#", +"24R@#", +"24RC@#", +"25@", +"25<CR>", +"25@", +"25<CR>", +"25@", +"25<CR>", +"26<CR>", +"26@", +"26<CR>", +"26@", +"26<CR>", +"26@", +"26@#", +"26L@#", +"26LC@#", +"26R@#", +"26RC<cR>#", +"27@", +"28@", +"28<CR>", +"28@", +"28<CR>", +"28@", +"28<CR>", +"28@", +"28@#", +"28L@#", +"28LC@#", +"28R@#", +"28RC@#", +"29@", +"29<CR>", +"29@", +"3@", +"3<CR>", +"3@", +"30@", +"31@", +"31<CR>", +"31@", +"32@", +"33@", +"34<CR>", +"34@", +"35@", +"36@", +"36<CR>", +"36@", +"37@", +"37<CR>", +"37@", +"38<CR>", +"38@", +"39@", +"4@", +"4<CR>", +"4@", +"40@", +"40<CR>", +"40@", +"40@70@01@", +"40@70@66@01@", +"40@70@67@01@", +"40@70@69@01@", +"40@77@01@", +"40@77@66@01@", +"40@77@67@01@", +"40@77@69@01@", +"40@80@01@", +"40@80@66@01@", +"40@80@67@01@", +"40@80@69@01@", +"40@81@01@", +"40@81@66@01@", +"40@81@67@01@", +"40@81@69@01@", +"41@", +"42@", +"43@", +"44@", +"44<CR>", +"44@", +"44@70@05@", +"44@70@66@05@", +"44@70@67@05@", +"44@70@69@05@", +"44@77@05@", +"44@77@66@05@", +"44@77@67@05@", +"44@77@69@05@", +"44@80@05@", +"44@80@66@05@", +"44@80@67@05@", +"44@80@69@05@", +"44@81@05@", +"44@81@66@05@", +"44@81@67@05@", +"44@81@69@05@", +"45@", +"45<CR>", +"45@", +"45@70@05@", +"45@70@66@05@", +"45@70@67@05@", +"45@70@69@05@", +"45@77@05@", +"45@77@66@05@", +"45@77@67@05@", +"45@77@69@05@", +"45@80@05@", +"45@80@66@05@", +"45@80@67@05@", +"45@80@69@05@", +"45@81@05@", +"45@81@66@05@", +"45@81@67@05@", +"45@81@69@05@", +"46@", +"46<CR>", +"46@", +"46@70@05@", +"46@70@66@05@", +"46@70@67@05@", +"46@70@69@05@", +"46@77@05@", +"46@77@66@05@", +"46@77@67@05@", +"46@77@69@05@", +"46@80@05@", +"46@80@66@05@", +"46@80@67@05@", +"46@80@69@05@", +"46@81@05@", +"46@81@66@05@", +"46@81@67@05@", +"46@81@69@05@", +"47@", +"47<CR>", +"47@", +"47@70@10@", +"47@70@66@10@", +"47@70@67@10@", +"47@70@69@10@", +"47@77@10@", +"47@77@66@10@", +"47@77@67@10@", +"47@77@69@10@", +"47@80@10@", +"47@80@66@10@", +"47@80@67@10@", +"47@80@69@10@", +"47@81@10@", +"47@81@66@10@", +"47@81@67@10@", +"47@81@69@10@", +"48@", +"48<CR>", +"48@", +"48@70@11@", +"48@70@66@11@", +"48@70@67@11@", +"48@70@69@11@", +"48@77@11@", +"48@77@66@11@", +"48@77@67@11@", +"48@77@69@11@", +"48@80@11@", +"48@80@66@11@", +"48@80@67@11@", +"48@80@69@11@", +"48@81@11@", +"48@81@66@11@", +"48@81@67@11@", +"48@81@69@11@", +"49@", +"49<CR>", +"49@", +"49@70@13@", +"49@70@66@13@", +"49@70@67@13@", +"49@70@69@13@", +"49@77@13@", +"49@77@66@13@", +"49@77@67@13@", +"49@77@69@13@", +"49@80@13@", +"49@80@66@13@", +"49@80@67@13@", +"49@80@69@13@", +"49@81@13@", +"49@81@66@13@", +"49@81@67@13@", +"49@81@69@13@", +"5@", +"5<CR>", +"5@", +"5@66@", +"5@67@", +"5@69@", +"50@", +"50<CR>", +"50@", +"50@70@12@", +"50@70@66@12@", +"50@70@67@12@", +"50@70@69@12@", +"50@77@12@", +"50@77@66@12@", +"50@77@67@12@", +"50@77@69@12@", +"50@80@12@", +"50@80@66@12@", +"50@80@67@12@", +"50@80@69@12@", +"50@81@12@", +"50@81@66@12@", +"50@81@67@12@", +"50@81@69@12@", +"51@", +"51<CR>", +"51@", +"51@70@14@", +"51@70@66@14@", +"51@70@67@14@", +"51@70@69@14@", +"51@77@14@", +"51@77@66@14@", +"51@77@67@14@", +"51@77@69@14@", +"51@80@14@", +"51@80@66@14@", +"51@80@67@14@", +"51@80@69@14@", +"51@81@14@", +"51@81@66@14@", +"51@81@67@14@", +"51@81@69@14@", +"52@", +"52<CR>", +"52@", +"52@70@15@", +"52@70@66@15@", +"52@70@67@15@", +"52@70@69@15@", +"52@77@15@", +"52@77@66@15@", +"52@77@67@15@", +"52@77@69@15@", +"52@80@15@", +"52@80@66@15@", +"52@80@67@15@", +"52@80@69@15@", +"52@81@15@", +"52@81@66@15@", +"52@81@67@15@", +"52@81@69@15@", +"53@", +"53<CR>", +"53@", +"53@70@59@", +"53@70@66@59@", +"53@70@67@59@", +"53@70@69@59@", +"53@77@59@", +"53@77@66@59@", +"53@77@67@59@", +"53@77@69@59@", +"53@80@59@", +"53@80@66@59@", +"53@80@67@59@", +"53@80@69@59@", +"53@81@59@", +"53@81@66@59@", +"53@81@67@59@", +"53@81@69@59@", +"54@", +"54<CR>", +"54@70@16@", +"54@70@66@16@", +"54@70@67@16@", +"54@70@69@16@", +"54@77@16@", +"54@77@66@16@", +"54@77@67@16@", +"54@77@69@16@", +"54@80@16@", +"54@80@66@16@", +"54@80@67@16@", +"54@80@69@16@", +"54@81@16@", +"54@81@66@16@", +"54@81@67@16@", +"54@81@69@16@", +"55@", +"55<CR>", +"55@", +"55@70@61@", +"55@70@66@61@", +"55@70@67@61@", +"55@70@69@61@", +"55@77@61@", +"55@77@66@61@", +"55@77@67@61@", +"55@77@69@61@", +"55@80@61@", +"55@80@66@61@", +"55@80@67@61@", +"55@80@69@61@", +"55@81@61@", +"55@81@66@61@", +"55@81@67@61@", +"55@81@69@61@", +"56@", +"56@70@62@", +"56@70@66@62@", +"56@70@67@62@", +"56@70@69@62@", +"56@77@62@", +"56@77@66@62@", +"56@77@67@62@", +"56@77@69@62@", +"56@80@62@", +"56@80@66@62@", +"56@80@67@62@", +"56@80@69@62@", +"56@81@62@", +"56@81@66@62@", +"56@81@67@62@", +"56@81@69@62@", +"57@", +"57@70@63@", +"57@70@66@63@", +"57@70@67@63@", +"57@70@69@63@", +"57@77@63@", +"57@77@66@63@", +"57@77@67@63@", +"57@77@69@63@", +"57@80@63@", +"57@80@66@63@", +"57@80@67@63@", +"57@80@69@63@", +"57@81@63@", +"57@81@66@63@", +"57@81@67@63@", +"57@81@69@63@", +"58@", +"58@70@64@", +"58@70@66@64@", +"58@70@67@64@", +"58@70@69@64@", +"58@77@64@", +"58@77@66@64@", +"58@77@67@64@", +"58@77@69@64@", +"58@80@64@", +"58@80@66@64@", +"58@80@67@64@", +"58@80@69@64@", +"58@81@64@", +"58@81@66@64@", +"58@81@67@64@", +"58@81@69@64@", +"59@", +"5L@#", +"5LC@#", +"5R@#", +"5RC@#", +"6@", +"6<CR>", +"6@", +"60@", +"60<CR>", +"60@", +"61@", +"62@", +"63@", +"63@66@", +"63@67@", +"63@69@", +"64@", +"64@66@", +"64@67@", +"64@69@", +"65@", +"66@", +"66<CR>", +"66@", +"67@", +"67<CR>", +"67@", +"68@", +"69@", +"69<CR>", +"69@", +"69<CR>", +"69@", +"69<CR>", +"69@", +"69<CR>", +"69@", +"7@", +"7<CR>", +"7@", +"70@", +"70<CR>", +"70@", +"71@", +"72@", +"73@", +"74@", +"75@", +"76@", +"77@", +"77<CR>", +"77@", +"78@", +"79@", +"8@", +"8<CR>", +"8@", +"80@", +"80<CR>", +"80@", +"81@", +"82@", +"83@", +"84@", +"85@", +"86@", +"87@", +"88@", +"89@", +"9@", +"9<CR>", +"9@", +"9@#", +"90@", +"91@", +"92@", +"93@", +"94@", +"95@", +"96@", +"97@", +"98@", +"99@", +"9L@#", +"9LC@#", +"9R@#", +"9RC@#", +"ATE0V0", +"AUTOSTREAM: LEVEL 1", +"AUTOSTREAM: LEVEL 2", +"AUTOSTREAM: LEVEL 3", +"BLACKLISTED", +"BUSY", +"CARRIER", +"CARRIER 0300", +"CARRIER 1200", +"CARRIER 1200/75", +"CARRIER 1200/75/VFC", +"CARRIER 1200/VFC", +"CARRIER 12000", +"CARRIER 12000/VFC", +"CARRIER 14400", +"CARRIER 14400/VFC", +"CARRIER 16800", +"CARRIER 16800 V.34", +"CARRIER 16800/VFC", +"CARRIER 19200", +"CARRIER 19200 V.34", +"CARRIER 19200/VFC", +"CARRIER 21600", +"CARRIER 21600 V.34", +"CARRIER 21600/VFC", +"CARRIER 2400", +"CARRIER 2400/VFC", +"CARRIER 24000", +"CARRIER 24000 V.34", +"CARRIER 24000/VFC", +"CARRIER 26400", +"CARRIER 26400 V.34", +"CARRIER 26400/VFC", +"CARRIER 28800", +"CARRIER 28800 V.34", +"CARRIER 28800/VFC", +"CARRIER 300", +"CARRIER 300/VFC", +"CARRIER 4800", +"CARRIER 4800/VFC", +"CARRIER 7200", +"CARRIER 7200/VFC", +"CARRIER 75/1200", +"CARRIER 75/1200/VFC", +"CARRIER 9600", +"CARRIER 9600/VFC", +"CLIENT", +"CLIENTSERVER", +"COMPRESSION: ADC", +"COMPRESSION: CLASS 5", +"COMPRESSION: CLASS5", +"COMPRESSION: MNP5", +"COMPRESSION: NONE", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V42BIS", +"COMPRESSION:CLASS5", +"COMPRESSION:MNP5", +"COMPRESSION:NONE", +"COMPRESSION:V.42bis", +"CONNECT", +"CONNECT 0300", +"CONNECT 0300/ARQ", +"CONNECT 0300/LAP-M", +"CONNECT 0300/MNP", +"CONNECT 0300/REL", +"CONNECT 0300/REL-5", +"CONNECT 0300/REL-LAPM", +"CONNECT 0300/REL-LAPM-COMP", +"CONNECT 0300/REL-MNP", +"CONNECT 0300/REL-MNP-COMP", +"CONNECT 0300/REL-V.42", +"CONNECT 0300/V42b", +"CONNECT 0300/V42BIS", +"CONNECT 0600", +"CONNECT 0600/ARQ", +"CONNECT 0600/LAP-M", +"CONNECT 0600/LAPM", +"CONNECT 0600/MNP", +"CONNECT 0600/NONE", +"CONNECT 0600/REL", +"CONNECT 0600/REL-5", +"CONNECT 0600/REL-LAPM", +"CONNECT 0600/REL-LAPM-COMP", +"CONNECT 0600/REL-MNP", +"CONNECT 0600/REL-MNP-COMP", +"CONNECT 0600/REL-V.42", +"CONNECT 0600/V42", +"CONNECT 0600/V42b", +"CONNECT 0600/V42BIS", +"CONNECT 115,200", +"CONNECT 115,200/ARQ", +"CONNECT 115,200/LAP-M", +"CONNECT 115,200/MNP", +"CONNECT 115,200/NONE", +"CONNECT 115,200/REL", +"CONNECT 115,200/REL-5", +"CONNECT 115,200/REL-V.42", +"CONNECT 115,200/V42", +"CONNECT 115,200/V42b", +"CONNECT 115,200/V42BIS", +"CONNECT 115200", +"CONNECT 115200/ARQ", +"CONNECT 115200/LAP-M", +"CONNECT 115200/LAPM", +"CONNECT 115200/MNP", +"CONNECT 115200/NONE", +"CONNECT 115200/REL", +"CONNECT 115200/REL-5", +"CONNECT 115200/REL-LAPM", +"CONNECT 115200/REL-LAPM-COMP", +"CONNECT 115200/REL-MNP", +"CONNECT 115200/REL-MNP-COMP", +"CONNECT 115200/REL-V.42", +"CONNECT 115200/REL/VFC", +"CONNECT 115200/V42", +"CONNECT 115200/V42b", +"CONNECT 115200/V42BIS", +"CONNECT 115200/VFC", +"CONNECT 1200", +"CONNECT 1200/75", +"CONNECT 1200/75/ARQ", +"CONNECT 1200/75/LAP-M", +"CONNECT 1200/75/LAPM", +"CONNECT 1200/75/MNP", +"CONNECT 1200/75/NONE", +"CONNECT 1200/75/REL", +"CONNECT 1200/75/REL-5", +"CONNECT 1200/75/REL-LAPM", +"CONNECT 1200/75/REL-LAPM-COMP", +"CONNECT 1200/75/REL-MNP", +"CONNECT 1200/75/REL-MNP-COMP", +"CONNECT 1200/75/REL-V.42", +"CONNECT 1200/75/V42", +"CONNECT 1200/75/V42b", +"CONNECT 1200/75/V42BIS", +"CONNECT 1200/ARQ", +"CONNECT 1200/ECL", +"CONNECT 1200/ECLC", +"CONNECT 1200/LAP-M", +"CONNECT 1200/LAPM", +"CONNECT 1200/MNP", +"CONNECT 1200/NONE", +"CONNECT 1200/REL", +"CONNECT 1200/REL-5", +"CONNECT 1200/REL-LAPM", +"CONNECT 1200/REL-LAPM-COMP", +"CONNECT 1200/REL-LAPM V.42 BIS", +"CONNECT 1200/REL-MNP", +"CONNECT 1200/REL-MNP-COMP", +"CONNECT 1200/REL-MNP 5", +"CONNECT 1200/REL-V.42", +"CONNECT 1200/V42", +"CONNECT 1200/V42b", +"CONNECT 1200/V42BIS", +"CONNECT 12000", +"CONNECT 12000/ARQ", +"CONNECT 12000/ECL", +"CONNECT 12000/ECLC", +"CONNECT 12000/LAP-M", +"CONNECT 12000/LAPM", +"CONNECT 12000/MNP", +"CONNECT 12000/NONE", +"CONNECT 12000/REL", +"CONNECT 12000/REL-5", +"CONNECT 12000/REL-LAPM", +"CONNECT 12000/REL-LAPM-COMP", +"CONNECT 12000/REL-LAPM V.42 BIS", +"CONNECT 12000/REL-MNP", +"CONNECT 12000/REL-MNP-COMP", +"CONNECT 12000/REL-MNP 5", +"CONNECT 12000/REL-V.42", +"CONNECT 12000/V42", +"CONNECT 12000/V42b", +"CONNECT 12000/V42BIS", +"CONNECT 1200TX/75RX", +"CONNECT 1200TX/75RX/ARQ", +"CONNECT 1200TX/75RX/LAP-M", +"CONNECT 1200TX/75RX/LAPM", +"CONNECT 1200TX/75RX/MNP", +"CONNECT 1200TX/75RX/NONE", +"CONNECT 1200TX/75RX/REL", +"CONNECT 1200TX/75RX/REL-5", +"CONNECT 1200TX/75RX/REL-LAPM", +"CONNECT 1200TX/75RX/REL-LAPM-COMP", +"CONNECT 1200TX/75RX/REL-MNP", +"CONNECT 1200TX/75RX/REL-MNP-COMP", +"CONNECT 1200TX/75RX/REL-V.42", +"CONNECT 1200TX/75RX/V42", +"CONNECT 1200TX/75RX/V42b", +"CONNECT 1200TX/75RX/V42BIS", +"CONNECT 14400", +"CONNECT 14400/ARQ", +"CONNECT 14400/ECL", +"CONNECT 14400/ECLC", +"CONNECT 14400/LAP-M", +"CONNECT 14400/LAPM", +"CONNECT 14400/MNP", +"CONNECT 14400/NONE", +"CONNECT 14400/REL", +"CONNECT 14400/REL-5", +"CONNECT 14400/REL-LAPM", +"CONNECT 14400/REL-LAPM-COMP", +"CONNECT 14400/REL-LAPM V.42 BIS", +"CONNECT 14400/REL-MNP", +"CONNECT 14400/REL-MNP-COMP", +"CONNECT 14400/REL-MNP 5", +"CONNECT 14400/REL-V.42", +"CONNECT 14400/V42", +"CONNECT 14400/V42b", +"CONNECT 14400/V42BIS", +"CONNECT 14400/VFC", +"CONNECT 16800", +"CONNECT 16800/ARQ", +"CONNECT 16800/ECL", +"CONNECT 16800/ECLC", +"CONNECT 16800/LAP-M", +"CONNECT 16800/LAPM", +"CONNECT 16800/MNP", +"CONNECT 16800/NONE", +"CONNECT 16800/REL", +"CONNECT 16800/REL-5", +"CONNECT 16800/REL-LAPM", +"CONNECT 16800/REL-LAPM-COMP", +"CONNECT 16800/REL-MNP", +"CONNECT 16800/REL-MNP-COMP", +"CONNECT 16800/REL-V.42", +"CONNECT 16800/V42", +"CONNECT 16800/V42b", +"CONNECT 16800/V42BIS", +"CONNECT 16800/VFC", +"CONNECT 19200", +"CONNECT 19200/ARQ", +"CONNECT 19200/ECL", +"CONNECT 19200/ECLC", +"CONNECT 19200/LAP-M", +"CONNECT 19200/LAPM", +"CONNECT 19200/MNP", +"CONNECT 19200/NONE", +"CONNECT 19200/REL", +"CONNECT 19200/REL-5", +"CONNECT 19200/REL-LAPM", +"CONNECT 19200/REL-LAPM-COMP", +"CONNECT 19200/REL-MNP", +"CONNECT 19200/REL-MNP-COMP", +"CONNECT 19200/REL-V.42", +"CONNECT 19200/V42", +"CONNECT 19200/V42b", +"CONNECT 19200/V42BIS", +"CONNECT 19200/VFC", +"CONNECT 21600", +"CONNECT 21600/ARQ", +"CONNECT 21600/ECL", +"CONNECT 21600/ECLC", +"CONNECT 21600/LAP-M", +"CONNECT 21600/LAPM", +"CONNECT 21600/MNP", +"CONNECT 21600/NONE", +"CONNECT 21600/REL", +"CONNECT 21600/REL-5", +"CONNECT 21600/REL-LAPM-COMP", +"CONNECT 21600/REL-MNP", +"CONNECT 21600/REL-MNP-COMP", +"CONNECT 21600/REL-REL-LAPM", +"CONNECT 21600/REL-V.42", +"CONNECT 21600/V42", +"CONNECT 21600/V42b", +"CONNECT 21600/V42BIS", +"CONNECT 21600/VFC", +"CONNECT 230400", +"CONNECT 230400/ARQ", +"CONNECT 230400/LAP-M", +"CONNECT 230400/MNP", +"CONNECT 230400/NONE", +"CONNECT 230400/REL", +"CONNECT 230400/V42", +"CONNECT 230400/V42b", +"CONNECT 230400/V42BIS", +"CONNECT 2400", +"CONNECT 2400/ARQ", +"CONNECT 2400/ECL", +"CONNECT 2400/ECLC", +"CONNECT 2400/LAP-M", +"CONNECT 2400/LAPM", +"CONNECT 2400/MNP", +"CONNECT 2400/NONE", +"CONNECT 2400/REL", +"CONNECT 2400/REL-5", +"CONNECT 2400/REL-LAPM", +"CONNECT 2400/REL-LAPM-COMP", +"CONNECT 2400/REL-LAPM V.42 BIS", +"CONNECT 2400/REL-MNP", +"CONNECT 2400/REL-MNP-COMP", +"CONNECT 2400/REL-MNP 5", +"CONNECT 2400/REL-V.42", +"CONNECT 2400/V42", +"CONNECT 2400/V42b", +"CONNECT 2400/V42BIS", +"CONNECT 24000", +"CONNECT 24000/ARQ", +"CONNECT 24000/ECL", +"CONNECT 24000/ECLC", +"CONNECT 24000/LAP-M", +"CONNECT 24000/LAPM", +"CONNECT 24000/MNP", +"CONNECT 24000/NONE", +"CONNECT 24000/REL", +"CONNECT 24000/REL-5", +"CONNECT 24000/REL-LAPM", +"CONNECT 24000/REL-LAPM-COMP", +"CONNECT 24000/REL-MNP", +"CONNECT 24000/REL-MNP-COMP", +"CONNECT 24000/REL-V.42", +"CONNECT 24000/V42", +"CONNECT 24000/V42b", +"CONNECT 24000/V42BIS", +"CONNECT 24000/VFC", +"CONNECT 26400", +"CONNECT 26400/ARQ", +"CONNECT 26400/ECL", +"CONNECT 26400/ECLC", +"CONNECT 26400/LAP-M", +"CONNECT 26400/LAPM", +"CONNECT 26400/MNP", +"CONNECT 26400/NONE", +"CONNECT 26400/REL", +"CONNECT 26400/REL-5", +"CONNECT 26400/REL-LAPM", +"CONNECT 26400/REL-LAPM-COMP", +"CONNECT 26400/REL-MNP", +"CONNECT 26400/REL-MNP-COMP", +"CONNECT 26400/REL-V.42", +"CONNECT 26400/V42", +"CONNECT 26400/V42b", +"CONNECT 26400/V42BIS", +"CONNECT 26400/VFC", +"CONNECT 28800", +"CONNECT 28800/ARQ", +"CONNECT 28800/ARQ/VFC", +"CONNECT 28800/ECL", +"CONNECT 28800/ECLC", +"CONNECT 28800/LAP-M", +"CONNECT 28800/LAPM", +"CONNECT 28800/MNP", +"CONNECT 28800/NONE", +"CONNECT 28800/REL", +"CONNECT 28800/REL-5", +"CONNECT 28800/REL-LAPM", +"CONNECT 28800/REL-LAPM-COMP", +"CONNECT 28800/REL-MNP", +"CONNECT 28800/REL-MNP-COMP", +"CONNECT 28800/REL-V.42", +"CONNECT 28800/REL/VFC", +"CONNECT 28800/V42", +"CONNECT 28800/V42b", +"CONNECT 28800/V42BIS", +"CONNECT 28800/VFC", +"CONNECT 300", +"CONNECT 300/ARQ", +"CONNECT 300/ECL", +"CONNECT 300/ECLC", +"CONNECT 300/LAP-M", +"CONNECT 300/LAPM", +"CONNECT 300/MNP", +"CONNECT 300/NONE", +"CONNECT 300/REL", +"CONNECT 300/REL-5", +"CONNECT 300/REL-LAPM", +"CONNECT 300/REL-LAPM-COMP", +"CONNECT 300/REL-LAPM V.42 BIS", +"CONNECT 300/REL-MNP", +"CONNECT 300/REL-MNP-COMP", +"CONNECT 300/REL-MNP 5", +"CONNECT 300/REL-V.42", +"CONNECT 300/V42", +"CONNECT 300/V42b", +"CONNECT 300/V42BIS", +"CONNECT 38400", +"CONNECT 38400/ARQ", +"CONNECT 38400/LAP-M", +"CONNECT 38400/LAPM", +"CONNECT 38400/MNP", +"CONNECT 38400/NONE", +"CONNECT 38400/REL", +"CONNECT 38400/REL-5", +"CONNECT 38400/REL-LAPM", +"CONNECT 38400/REL-LAPM-COMP", +"CONNECT 38400/REL-MNP", +"CONNECT 38400/REL-MNP-COMP", +"CONNECT 38400/REL-V.42", +"CONNECT 38400/REL/VFC", +"CONNECT 38400/V42", +"CONNECT 38400/V42b", +"CONNECT 38400/V42BIS", +"CONNECT 38400/VFC", +"CONNECT 4800", +"CONNECT 4800/ARQ", +"CONNECT 4800/ECL", +"CONNECT 4800/ECLC", +"CONNECT 4800/LAP-M", +"CONNECT 4800/LAPM", +"CONNECT 4800/MNP", +"CONNECT 4800/NONE", +"CONNECT 4800/REL", +"CONNECT 4800/REL-5", +"CONNECT 4800/REL-LAPM", +"CONNECT 4800/REL-LAPM-COMP", +"CONNECT 4800/REL-LAPM V.42 BIS", +"CONNECT 4800/REL-MNP", +"CONNECT 4800/REL-MNP-COMP", +"CONNECT 4800/REL-MNP 5", +"CONNECT 4800/REL-V.42", +"CONNECT 4800/V42", +"CONNECT 4800/V42b", +"CONNECT 4800/V42BIS", +"CONNECT 57600", +"CONNECT 57600/ARQ", +"CONNECT 57600/LAP-M", +"CONNECT 57600/LAPM", +"CONNECT 57600/MNP", +"CONNECT 57600/NONE", +"CONNECT 57600/REL", +"CONNECT 57600/REL-5", +"CONNECT 57600/REL-LAPM", +"CONNECT 57600/REL-LAPM-COMP", +"CONNECT 57600/REL-MNP", +"CONNECT 57600/REL-MNP-COMP", +"CONNECT 57600/REL-V.42", +"CONNECT 57600/REL/VFC", +"CONNECT 57600/V42", +"CONNECT 57600/V42b", +"CONNECT 57600/V42BIS", +"CONNECT 57600/VFC", +"CONNECT 600", +"CONNECT 600/ARQ", +"CONNECT 600/ECL", +"CONNECT 600/ECLC", +"CONNECT 600/LAP-M", +"CONNECT 600/LAPM", +"CONNECT 600/MNP", +"CONNECT 600/NONE", +"CONNECT 600/REL", +"CONNECT 600/REL-5", +"CONNECT 600/REL-LAPM", +"CONNECT 600/REL-LAPM-COMP", +"CONNECT 600/REL-LAPM V.42 BIS", +"CONNECT 600/REL-MNP", +"CONNECT 600/REL-MNP-COMP", +"CONNECT 600/REL-MNP 5", +"CONNECT 600/REL-V.42", +"CONNECT 600/V42", +"CONNECT 600/V42b", +"CONNECT 600/V42BIS", +"CONNECT 7200", +"CONNECT 7200/ARQ", +"CONNECT 7200/ECL", +"CONNECT 7200/ECLC", +"CONNECT 7200/LAP-M", +"CONNECT 7200/LAPM", +"CONNECT 7200/MNP", +"CONNECT 7200/NONE", +"CONNECT 7200/REL", +"CONNECT 7200/REL-5", +"CONNECT 7200/REL-LAPM", +"CONNECT 7200/REL-LAPM-COMP", +"CONNECT 7200/REL-LAPM V.42 BIS", +"CONNECT 7200/REL-MNP", +"CONNECT 7200/REL-MNP-COMP", +"CONNECT 7200/REL-MNP 5", +"CONNECT 7200/REL-V.42", +"CONNECT 7200/V42", +"CONNECT 7200/V42b", +"CONNECT 7200/V42BIS", +"CONNECT 75/1200", +"CONNECT 75/1200/ARQ", +"CONNECT 75/1200/LAP-M", +"CONNECT 75/1200/MNP", +"CONNECT 75/1200/NONE", +"CONNECT 75/1200/REL", +"CONNECT 75/1200/REL-5", +"CONNECT 75/1200/REL-LAPM", +"CONNECT 75/1200/REL-LAPM-COMP", +"CONNECT 75/1200/REL-MNP", +"CONNECT 75/1200/REL-MNP-COMP", +"CONNECT 75/1200/REL-V.42", +"CONNECT 75/1200/V42", +"CONNECT 75/1200/V42b", +"CONNECT 75/1200/V42BIS", +"CONNECT 75TX/1200RX", +"CONNECT 75TX/1200RX/ARQ", +"CONNECT 75TX/1200RX/LAP-M", +"CONNECT 75TX/1200RX/LAPM", +"CONNECT 75TX/1200RX/MNP", +"CONNECT 75TX/1200RX/NONE", +"CONNECT 75TX/1200RX/REL", +"CONNECT 75TX/1200RX/REL-5", +"CONNECT 75TX/1200RX/REL-LAPM", +"CONNECT 75TX/1200RX/REL-LAPM-COMP", +"CONNECT 75TX/1200RX/REL-MNP", +"CONNECT 75TX/1200RX/REL-MNP-COMP", +"CONNECT 75TX/1200RX/REL-V.42", +"CONNECT 75TX/1200RX/V42", +"CONNECT 75TX/1200RX/V42b", +"CONNECT 75TX/1200RX/V42BIS", +"CONNECT 9600", +"CONNECT 9600/ARQ", +"CONNECT 9600/ECL", +"CONNECT 9600/ECLC", +"CONNECT 9600/LAP-M", +"CONNECT 9600/LAPM", +"CONNECT 9600/MNP", +"CONNECT 9600/NONE", +"CONNECT 9600/REL", +"CONNECT 9600/REL-5", +"CONNECT 9600/REL-LAPM", +"CONNECT 9600/REL-LAPM-COMP", +"CONNECT 9600/REL-LAPM V.42 BIS", +"CONNECT 9600/REL-MNP", +"CONNECT 9600/REL-MNP-COMP", +"CONNECT 9600/REL-MNP 5", +"CONNECT 9600/REL-V.42", +"CONNECT 9600/V42", +"CONNECT 9600/V42b", +"CONNECT 9600/V42BIS", +"CONNECT ECL", +"CONNECT ECLC", +"CONNECT/ARQ", +"CONNECT/LAP-M", +"CONNECT/LAPM", +"CONNECT/MNP", +"CONNECT/NONE", +"CONNECT/REL", +"CONNECT/V42", +"CONNECT/V42b", +"CONNECT/V42BIS", +"DATA", +"DELAYED", +"DIALING", +"ERROR", +"FAX", +"HOST DRIVER TIMEOUT", +"mdmblatz.inf:HKR, Responses,", +"mdmbsb.inf:HKR, Responses,", +"mdmbsch.inf:HKR, Responses,", +"mdmhaeus.inf:HKR, Responses,", +"mdmico.inf:HKR, Responses,", +"mdminsys.inf:HKR, Responses,", +"mdmke.inf:HKR, Responses,", +"mdmmart.inf:HKR, Responses,", +"mdmneuhs.inf:HKR, Responses,", +"mdmrfi.inf:HKR, Responses,", +"mdmtelnk.inf:HKR, Responses,", +"mdmtger.inf:HKR, Responses,", +"mdmtkr.inf:HKR, Responses,", +"mdmusrcr.inf:HKR,Responses,", +"mdmusrg.inf:HKR,Responses,", +"mdmusrsp.inf:HKR,Responses,", +"mdmusrwp.inf:HKR,Responses,", +"mdmwoer.inf:HKR, Responses,", +"MESG = ", +"NAME = ", +"NMBR = ", +"NO ANSWER", +"NO CARRIER", +"NO DIAL TONE", +"NO DIALTONE", +"NoResponse", +"OK", +"PROTOCOL: ALT", +"PROTOCOL: ALT-CELLULAR", +"PROTOCOL: ALT - CELLULAR", +"PROTOCOL: ERROR-CONTROL/LAPB", +"PROTOCOL: ERROR-CONTROL/LAPB/AFT", +"PROTOCOL: ERROR-CONTROL/LAPB/HDX", +"PROTOCOL: LAP-M", +"PROTOCOL: LAP-M/AFT", +"PROTOCOL: LAP-M/ETC", +"PROTOCOL: LAP-M/HDX", +"PROTOCOL: LAPM", +"PROTOCOL: LAPM/AFT", +"PROTOCOL: LAPM/HDX", +"PROTOCOL: MNP", +"PROTOCOL: MNP 2", +"PROTOCOL: MNP 2, 4", +"PROTOCOL: MNP 3", +"PROTOCOL: MNP 3, 4", +"PROTOCOL: MNP 4", +"PROTOCOL: MNP10", +"PROTOCOL: MNP2", +"PROTOCOL: MNP3", +"PROTOCOL: MNP4", +"PROTOCOL: NONE", +"PROTOCOL: X.25/LAPB", +"PROTOCOL: X.25/LAPB/AFT", +"PROTOCOL: X.25/LAPB/HDX", +"PROTOCOL:MNP 2, 4", +"PROTOCOL:MNP 3, 4", +"PROTOCOL:NONE", +"RING", +"RINGING", +"RRING", +"TIME = ", +"VOICE", +NULL +}; + + +CHAR *rgpszActualResp[] = +{ + "0@", + "2@", + "3@", + "4@", + "6@", + "7@", + "8@", + "@", + "@#BUSY@#", + "@#CONNECT 1200/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 1200/ARQ/LAPM/MNP5@#", + "@#CONNECT 1200/ARQ/LAPM/V42BIS@#", + "@#CONNECT 1200/ARQ/LAPM@#", + "@#CONNECT 1200/ARQ/MNP/MNP5@#", + "@#CONNECT 1200/ARQ/MNP/V42BIS@#", + "@#CONNECT 1200/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 1200/ARQ/V32/LAPM@#", + "@#CONNECT 1200/ARQ/V32/MNP@#", + "@#CONNECT 1200/ARQ/V34/LAPM@#", + "@#CONNECT 1200/ARQ/V34/MNP@#", + "@#CONNECT 1200/ARQ@#", + "@#CONNECT 1200/NONE@#", + "@#CONNECT 12000/ARQ/HST/HST/CELLULAR/MNP5@#", + "@#CONNECT 12000/ARQ/HST/HST/CELLULAR/V42BIS@#", + "@#CONNECT 12000/ARQ/HST/HST/CELLULAR@#", + "@#CONNECT 12000/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 12000/ARQ/HST/LAPM/MNP5@#", + "@#CONNECT 12000/ARQ/HST/LAPM/NONE@#", + "@#CONNECT 12000/ARQ/HST/LAPM/V42BIS@#", + "@#CONNECT 12000/ARQ/HST/MNP/MNP5@#", + "@#CONNECT 12000/ARQ/HST/MNP/NONE@#", + "@#CONNECT 12000/ARQ/HST/MNP/V42BIS@#", + "@#CONNECT 12000/ARQ/LAPM/V42BIS@#", + "@#CONNECT 12000/ARQ/MNP/MNP5@#", + "@#CONNECT 12000/ARQ/V32/LAPM/MNP5@#", + "@#CONNECT 12000/ARQ/V32/LAPM/NONE@#", + "@#CONNECT 12000/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 12000/ARQ/V32/LAPM@#", + "@#CONNECT 12000/ARQ/V32/MNP/MNP5@#", + "@#CONNECT 12000/ARQ/V32/MNP/NONE@#", + "@#CONNECT 12000/ARQ/V32/MNP/V42BIS@#", + "@#CONNECT 12000/ARQ/V32/MNP@#", + "@#CONNECT 12000/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 12000/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 12000/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 12000/ARQ/V34/LAPM@#", + "@#CONNECT 12000/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 12000/ARQ/V34/MNP/NONE@#", + "@#CONNECT 12000/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 12000/ARQ/V34/MNP@#", + "@#CONNECT 12000/ARQ/VFC/LAPM/MNP5@#", + "@#CONNECT 12000/ARQ/VFC/LAPM/NONE@#", + "@#CONNECT 12000/ARQ/VFC/LAPM/V42BIS@#", + "@#CONNECT 12000/ARQ/VFC/LAPM@#", + "@#CONNECT 12000/ARQ/VFC/MNP/MNP5@#", + "@#CONNECT 12000/ARQ/VFC/MNP/NONE@#", + "@#CONNECT 12000/ARQ/VFC/MNP/V42BIS@#", + "@#CONNECT 12000/ARQ@#", + "@#CONNECT 12000/HST/NONE@#", + "@#CONNECT 12000/V32/NONE@#", + "@#CONNECT 12000/V34/NONE@#", + "@#CONNECT 12000/VFC/NONE@#", + "@#CONNECT 14000/ARQ/HST/HST/CELLULAR/MNP5@#", + "@#CONNECT 14000/ARQ/HST/HST/CELLULAR/V42BIS@#", + "@#CONNECT 14000/ARQ/HST/HST/CELLULAR@#", + "@#CONNECT 14400/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 14400/ARQ/HST/LAPM/MNP5@#", + "@#CONNECT 14400/ARQ/HST/LAPM/NONE@#", + "@#CONNECT 14400/ARQ/HST/LAPM/V42BIS@#", + "@#CONNECT 14400/ARQ/HST/MNP/MNP5@#", + "@#CONNECT 14400/ARQ/HST/MNP/NONE@#", + "@#CONNECT 14400/ARQ/HST/MNP/V42BIS@#", + "@#CONNECT 14400/ARQ/LAPM/V42BIS@#", + "@#CONNECT 14400/ARQ/MNP/MNP5@#", + "@#CONNECT 14400/ARQ/V32/LAPM/MNP5@#", + "@#CONNECT 14400/ARQ/V32/LAPM/NONE@#", + "@#CONNECT 14400/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 14400/ARQ/V32/LAPM@#", + "@#CONNECT 14400/ARQ/V32/MNP/MNP5@#", + "@#CONNECT 14400/ARQ/V32/MNP/NONE@#", + "@#CONNECT 14400/ARQ/V32/MNP/V42BIS@#", + "@#CONNECT 14400/ARQ/V32/MNP@#", + "@#CONNECT 14400/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 14400/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 14400/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 14400/ARQ/V34/LAPM@#", + "@#CONNECT 14400/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 14400/ARQ/V34/MNP/NONE@#", + "@#CONNECT 14400/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 14400/ARQ/V34/MNP@#", + "@#CONNECT 14400/ARQ/VFC/LAPM/MNP5@#", + "@#CONNECT 14400/ARQ/VFC/LAPM/NONE@#", + "@#CONNECT 14400/ARQ/VFC/LAPM/V42BIS@#", + "@#CONNECT 14400/ARQ/VFC/LAPM@#", + "@#CONNECT 14400/ARQ/VFC/MNP/MNP5@#", + "@#CONNECT 14400/ARQ/VFC/MNP/NONE@#", + "@#CONNECT 14400/ARQ/VFC/MNP/V42BIS@#", + "@#CONNECT 14400/ARQ@#", + "@#CONNECT 14400/HST/NONE@#", + "@#CONNECT 14400/V32/NONE@#", + "@#CONNECT 14400/V34/NONE@#", + "@#CONNECT 14400/VFC/NONE@#", + "@#CONNECT 16800/ARQ/HST/HST/CELLULAR/MNP5@#", + "@#CONNECT 16800/ARQ/HST/HST/CELLULAR/V42BIS@#", + "@#CONNECT 16800/ARQ/HST/HST/CELLULAR@#", + "@#CONNECT 16800/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 16800/ARQ/HST/LAPM/MNP5@#", + "@#CONNECT 16800/ARQ/HST/LAPM/NONE@#", + "@#CONNECT 16800/ARQ/HST/LAPM/V42BIS@#", + "@#CONNECT 16800/ARQ/HST/MNP/MNP5@#", + "@#CONNECT 16800/ARQ/HST/MNP/NONE@#", + "@#CONNECT 16800/ARQ/HST/MNP/V42BIS@#", + "@#CONNECT 16800/ARQ/LAPM/V42BIS@#", + "@#CONNECT 16800/ARQ/MNP/MNP5@#", + "@#CONNECT 16800/ARQ/V32/LAPM/MNP5@#", + "@#CONNECT 16800/ARQ/V32/LAPM/NONE@#", + "@#CONNECT 16800/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 16800/ARQ/V32/LAPM@#", + "@#CONNECT 16800/ARQ/V32/MNP/MNP5@#", + "@#CONNECT 16800/ARQ/V32/MNP/NONE@#", + "@#CONNECT 16800/ARQ/V32/MNP/V42BIS@#", + "@#CONNECT 16800/ARQ/V32/MNP@#", + "@#CONNECT 16800/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 16800/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 16800/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 16800/ARQ/V34/LAPM@#", + "@#CONNECT 16800/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 16800/ARQ/V34/MNP/NONE@#", + "@#CONNECT 16800/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 16800/ARQ/V34/MNP@#", + "@#CONNECT 16800/ARQ/VFC/LAPM/MNP5@#", + "@#CONNECT 16800/ARQ/VFC/LAPM/NONE@#", + "@#CONNECT 16800/ARQ/VFC/LAPM/V42BIS@#", + "@#CONNECT 16800/ARQ/VFC/MNP/MNP5@#", + "@#CONNECT 16800/ARQ/VFC/MNP/NONE@#", + "@#CONNECT 16800/ARQ/VFC/MNP/V42BIS@#", + "@#CONNECT 16800/ARQ@#", + "@#CONNECT 16800/HST/NONE@#", + "@#CONNECT 16800/V32/NONE@#", + "@#CONNECT 16800/V34/NONE@#", + "@#CONNECT 16800/VFC/NONE@#", + "@#CONNECT 19200/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 19200/ARQ/LAPM/V42BIS@#", + "@#CONNECT 19200/ARQ/MNP/MNP5@#", + "@#CONNECT 19200/ARQ/V32/LAPM/MNP5@#", + "@#CONNECT 19200/ARQ/V32/LAPM/NONE@#", + "@#CONNECT 19200/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 19200/ARQ/V32/LAPM@#", + "@#CONNECT 19200/ARQ/V32/MNP/MNP5@#", + "@#CONNECT 19200/ARQ/V32/MNP/NONE@#", + "@#CONNECT 19200/ARQ/V32/MNP/V42BIS@#", + "@#CONNECT 19200/ARQ/V32/MNP@#", + "@#CONNECT 19200/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 19200/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 19200/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 19200/ARQ/V34/LAPM@#", + "@#CONNECT 19200/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 19200/ARQ/V34/MNP/NONE@#", + "@#CONNECT 19200/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 19200/ARQ/V34/MNP@#", + "@#CONNECT 19200/ARQ/VFC/LAPM/MNP5@#", + "@#CONNECT 19200/ARQ/VFC/LAPM/NONE@#", + "@#CONNECT 19200/ARQ/VFC/LAPM/V42BIS@#", + "@#CONNECT 19200/ARQ/VFC/MNP/MNP5@#", + "@#CONNECT 19200/ARQ/VFC/MNP/NONE@#", + "@#CONNECT 19200/ARQ/VFC/MNP/V42BIS@#", + "@#CONNECT 19200/ARQ@#", + "@#CONNECT 19200/V32/NONE@#", + "@#CONNECT 19200/V34/NONE@#", + "@#CONNECT 19200/VFC/NONE@#", + "@#CONNECT 21600/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 21600/ARQ/LAPM/V42BIS@#", + "@#CONNECT 21600/ARQ/MNP/MNP5@#", + "@#CONNECT 21600/ARQ/V32/LAPM/MNP5@#", + "@#CONNECT 21600/ARQ/V32/LAPM/NONE@#", + "@#CONNECT 21600/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 21600/ARQ/V32/LAPM@#", + "@#CONNECT 21600/ARQ/V32/MNP/MNP5@#", + "@#CONNECT 21600/ARQ/V32/MNP/NONE@#", + "@#CONNECT 21600/ARQ/V32/MNP/V42BIS@#", + "@#CONNECT 21600/ARQ/V32/MNP@#", + "@#CONNECT 21600/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 21600/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 21600/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 21600/ARQ/V34/LAPM@#", + "@#CONNECT 21600/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 21600/ARQ/V34/MNP/NONE@#", + "@#CONNECT 21600/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 21600/ARQ/V34/MNP@#", + "@#CONNECT 21600/ARQ/VFC/LAPM/MNP5@#", + "@#CONNECT 21600/ARQ/VFC/LAPM/NONE@#", + "@#CONNECT 21600/ARQ/VFC/LAPM/V42BIS@#", + "@#CONNECT 21600/ARQ/VFC/MNP/MNP5@#", + "@#CONNECT 21600/ARQ/VFC/MNP/NONE@#", + "@#CONNECT 21600/ARQ/VFC/MNP/V42BIS@#", + "@#CONNECT 21600/ARQ@#", + "@#CONNECT 21600/V32/NONE@#", + "@#CONNECT 21600/V34/NONE@#", + "@#CONNECT 21600/VFC/NONE@#", + "@#CONNECT 2400/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 2400/ARQ/LAPM/V42BIS@#", + "@#CONNECT 2400/ARQ/LAPM@#", + "@#CONNECT 2400/ARQ/MNP/MNP5@#", + "@#CONNECT 2400/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 2400/ARQ/V32/LAPM@#", + "@#CONNECT 2400/ARQ/V32/MNP@#", + "@#CONNECT 2400/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 2400/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 2400/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 2400/ARQ/V34/LAPM@#", + "@#CONNECT 2400/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 2400/ARQ/V34/MNP/NONE@#", + "@#CONNECT 2400/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 2400/ARQ/V34/MNP@#", + "@#CONNECT 2400/ARQ@#", + "@#CONNECT 2400/NONE@#", + "@#CONNECT 2400/V34/NONE@#", + "@#CONNECT 24000/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 24000/ARQ/LAPM/V42BIS@#", + "@#CONNECT 24000/ARQ/MNP/MNP5@#", + "@#CONNECT 24000/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 24000/ARQ/V32/LAPM@#", + "@#CONNECT 24000/ARQ/V32/MNP@#", + "@#CONNECT 24000/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 24000/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 24000/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 24000/ARQ/V34/LAPM@#", + "@#CONNECT 24000/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 24000/ARQ/V34/MNP/NONE@#", + "@#CONNECT 24000/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 24000/ARQ/V34/MNP@#", + "@#CONNECT 24000/ARQ/VFC/LAPM/MNP5@#", + "@#CONNECT 24000/ARQ/VFC/LAPM/NONE@#", + "@#CONNECT 24000/ARQ/VFC/LAPM/V42BIS@#", + "@#CONNECT 24000/ARQ/VFC/LAPM@#", + "@#CONNECT 24000/ARQ/VFC/MNP/MNP5@#", + "@#CONNECT 24000/ARQ/VFC/MNP/NONE@#", + "@#CONNECT 24000/ARQ/VFC/MNP/V42BIS@#", + "@#CONNECT 24000/ARQ@#", + "@#CONNECT 24000/V34/NONE@#", + "@#CONNECT 24000/VFC/NONE@#", + "@#CONNECT 26400/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 26400/ARQ/LAPM/V42BIS@#", + "@#CONNECT 26400/ARQ/MNP/MNP5@#", + "@#CONNECT 26400/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 26400/ARQ/V32/LAPM@#", + "@#CONNECT 26400/ARQ/V32/MNP@#", + "@#CONNECT 26400/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 26400/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 26400/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 26400/ARQ/V34/LAPM@#", + "@#CONNECT 26400/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 26400/ARQ/V34/MNP/NONE@#", + "@#CONNECT 26400/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 26400/ARQ/V34/MNP@#", + "@#CONNECT 26400/ARQ/VFC/LAPM/MNP5@#", + "@#CONNECT 26400/ARQ/VFC/LAPM/NONE@#", + "@#CONNECT 26400/ARQ/VFC/LAPM/V42BIS@#", + "@#CONNECT 26400/ARQ/VFC/LAPM@#", + "@#CONNECT 26400/ARQ/VFC/MNP/MNP5@#", + "@#CONNECT 26400/ARQ/VFC/MNP/NONE@#", + "@#CONNECT 26400/ARQ/VFC/MNP/V42BIS@#", + "@#CONNECT 26400/ARQ@#", + "@#CONNECT 26400/V34/NONE@#", + "@#CONNECT 26400/VFC/NONE@#", + "@#CONNECT 28800/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 28800/ARQ/LAPM/V42BIS@#", + "@#CONNECT 28800/ARQ/MNP/MNP5@#", + "@#CONNECT 28800/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 28800/ARQ/V32/LAPM@#", + "@#CONNECT 28800/ARQ/V32/MNP@#", + "@#CONNECT 28800/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 28800/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 28800/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 28800/ARQ/V34/LAPM@#", + "@#CONNECT 28800/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 28800/ARQ/V34/MNP/NONE@#", + "@#CONNECT 28800/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 28800/ARQ/V34/MNP@#", + "@#CONNECT 28800/ARQ/VFC/LAPM/MNP5@#", + "@#CONNECT 28800/ARQ/VFC/LAPM/NONE@#", + "@#CONNECT 28800/ARQ/VFC/LAPM/V42BIS@#", + "@#CONNECT 28800/ARQ/VFC/LAPM@#", + "@#CONNECT 28800/ARQ/VFC/MNP/MNP5@#", + "@#CONNECT 28800/ARQ/VFC/MNP/NONE@#", + "@#CONNECT 28800/ARQ/VFC/MNP/V42BIS@#", + "@#CONNECT 28800/ARQ@#", + "@#CONNECT 28800/V34/NONE@#", + "@#CONNECT 28800/VFC/NONE@#", + "@#CONNECT 4800/ARQ/HST/HST/CELLULAR/MNP5@#", + "@#CONNECT 4800/ARQ/HST/HST/CELLULAR/V42BIS@#", + "@#CONNECT 4800/ARQ/HST/HST/CELLULAR@#", + "@#CONNECT 4800/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 4800/ARQ/HST/LAPM/MNP5@#", + "@#CONNECT 4800/ARQ/HST/LAPM/NONE@#", + "@#CONNECT 4800/ARQ/HST/LAPM/V42BIS@#", + "@#CONNECT 4800/ARQ/HST/MNP/MNP5@#", + "@#CONNECT 4800/ARQ/HST/MNP/NONE@#", + "@#CONNECT 4800/ARQ/HST/MNP/V42BIS@#", + "@#CONNECT 4800/ARQ/LAPM/V42BIS@#", + "@#CONNECT 4800/ARQ/LAPM@#", + "@#CONNECT 4800/ARQ/MNP/MNP5@#", + "@#CONNECT 4800/ARQ/V32/LAPM/MNP5@#", + "@#CONNECT 4800/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 4800/ARQ/V32/LAPM@#", + "@#CONNECT 4800/ARQ/V32/MNP/MNP5@#", + "@#CONNECT 4800/ARQ/V32/MNP/NONE@#", + "@#CONNECT 4800/ARQ/V32/MNP/V42BIS@#", + "@#CONNECT 4800/ARQ/V32/MNP@#", + "@#CONNECT 4800/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 4800/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 4800/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 4800/ARQ/V34/LAPM@#", + "@#CONNECT 4800/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 4800/ARQ/V34/MNP/NONE@#", + "@#CONNECT 4800/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 4800/ARQ/V34/MNP@#", + "@#CONNECT 4800/ARQ@#", + "@#CONNECT 4800/HST/NONE@#", + "@#CONNECT 4800/V32/NONE@#", + "@#CONNECT 4800/V34/NONE@#", + "@#CONNECT 7200/ARQ/HST/HST/CELLULAR/MNP5@#", + "@#CONNECT 7200/ARQ/HST/HST/CELLULAR/V42BIS@#", + "@#CONNECT 7200/ARQ/HST/HST/CELLULAR@#", + "@#CONNECT 7200/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 7200/ARQ/HST/LAPM/MNP5@#", + "@#CONNECT 7200/ARQ/HST/LAPM/NONE@#", + "@#CONNECT 7200/ARQ/HST/LAPM/V42BIS@#", + "@#CONNECT 7200/ARQ/HST/MNP/MNP5@#", + "@#CONNECT 7200/ARQ/HST/MNP/NONE@#", + "@#CONNECT 7200/ARQ/HST/MNP/V42BIS@#", + "@#CONNECT 7200/ARQ/LAPM/V42BIS@#", + "@#CONNECT 7200/ARQ/LAPM@#", + "@#CONNECT 7200/ARQ/MNP/MNP5@#", + "@#CONNECT 7200/ARQ/V32/LAPM/MNP5@#", + "@#CONNECT 7200/ARQ/V32/LAPM/NONE@#", + "@#CONNECT 7200/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 7200/ARQ/V32/LAPM@#", + "@#CONNECT 7200/ARQ/V32/MNP/MNP5@#", + "@#CONNECT 7200/ARQ/V32/MNP/NONE@#", + "@#CONNECT 7200/ARQ/V32/MNP/V42BIS@#", + "@#CONNECT 7200/ARQ/V32/MNP@#", + "@#CONNECT 7200/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 7200/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 7200/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 7200/ARQ/V34/LAPM@#", + "@#CONNECT 7200/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 7200/ARQ/V34/MNP/NONE@#", + "@#CONNECT 7200/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 7200/ARQ/V34/MNP@#", + "@#CONNECT 7200/ARQ@#", + "@#CONNECT 7200/HST/NONE@#", + "@#CONNECT 7200/V32/NONE@#", + "@#CONNECT 7200/V34/NONE@#", + "@#CONNECT 9600/ARQ/HST/HST/CELLULAR/MNP5@#", + "@#CONNECT 9600/ARQ/HST/HST/CELLULAR/V42BIS@#", + "@#CONNECT 9600/ARQ/HST/HST/CELLULAR@#", + "@#CONNECT 9600/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 9600/ARQ/HST/LAPM/MNP5@#", + "@#CONNECT 9600/ARQ/HST/LAPM/NONE@#", + "@#CONNECT 9600/ARQ/HST/LAPM/V42BIS@#", + "@#CONNECT 9600/ARQ/HST/MNP/MNP5@#", + "@#CONNECT 9600/ARQ/HST/MNP/NONE@#", + "@#CONNECT 9600/ARQ/HST/MNP/V42BIS@#", + "@#CONNECT 9600/ARQ/LAPM/V42BIS@#", + "@#CONNECT 9600/ARQ/MNP/MNP5@#", + "@#CONNECT 9600/ARQ/V32/LAPM/MNP5@#", + "@#CONNECT 9600/ARQ/V32/LAPM/NONE@#", + "@#CONNECT 9600/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 9600/ARQ/V32/LAPM@#", + "@#CONNECT 9600/ARQ/V32/MNP/MNP5@#", + "@#CONNECT 9600/ARQ/V32/MNP/NONE@#", + "@#CONNECT 9600/ARQ/V32/MNP/V42BIS@#", + "@#CONNECT 9600/ARQ/V32/MNP@#", + "@#CONNECT 9600/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 9600/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 9600/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 9600/ARQ/V34/LAPM@#", + "@#CONNECT 9600/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 9600/ARQ/V34/MNP/NONE@#", + "@#CONNECT 9600/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 9600/ARQ/V34/MNP@#", + "@#CONNECT 9600/ARQ@#", + "@#CONNECT 9600/HST/NONE@#", + "@#CONNECT 9600/V32/NONE@#", + "@#CONNECT 9600/V34/NONE@#", + "@#CONNECT@#", + "@#ERROR@#", + "@#NO ANSWER@#", + "@#NO CARRIER@#", + "@#NO DIAL TONE@#", + "@#NO DIALTONE@#", + "@#OK@#", + "@#RING@#", + "@#RINGING@#", + "@#VOICE@#", + "#", + NULL +}; diff --git a/private/unimodem/new/mic/alloc.h b/private/unimodem/new/mic/alloc.h new file mode 100644 index 000000000..ae5637608 --- /dev/null +++ b/private/unimodem/new/mic/alloc.h @@ -0,0 +1,86 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// ALLOC.H -- Header for Classes: +// CAllococator +// +// +// History: +// 05/22/96 JosephJ Created +// +// +#if (TODO) + + +class CAllocator +{ + Allocator(UINT uSize) : m_uSize(uSize) + { + ASSERT(!(uSize %sizeof(void *))); + m_uBlockSize = (uSize+sizeof(void *)) + if (uSize<1000) + m_uBlockSize = m_uBlockSize*10 + sizeof(void *) + + m_uBlockSize += sizeof (void*); + } + + ~Allocator() + { + void *pList = m_pBlockList; + while(pList) + { + void *pOld = pList; + pList = (void *) *pList; + GlobalFree(pOld); + } + } + + void * Alloc(void) + { + m_sync.EnterCrit(); + + void *pvRet = m_pFreeList; + + if (!m_pFreeList) + { + void *pv = GlobalAlloc(LPTR, m_uBlockSize); + void *pvEnd = pv+m_uBlockSize; + if (pv) + { + *pv = m_pvBlockList; + m_pvBlockList = pv; + m_pFreeList = ++pv; + for(;;pv = *pv) + { + *pv = pv + m_uSize + sizeof (void *); + if (*pv >= pvEnd) {*pv=NULL;break;} + pv = *pv; + } + pvRet = m_pFreeList; + } + } + + m_sync.LeaveCrit(); + + return pvRet; + } + + void Free(void *pv) + { + m_sync.EnterCrit(); + pv--; + *pv = m_pFreeList; + m_pFreeList=*pv; + m_sync.LeaveCrit(); + } + +private: + + void * m_pFreeList; + void * m_pBlockList; + const UINT m_uSize; + UINT m_uBlockSize; + CSync m_sync; +} +#endif (TODO) diff --git a/private/unimodem/new/mic/chksum.cpp b/private/unimodem/new/mic/chksum.cpp new file mode 100644 index 000000000..55e936eaa --- /dev/null +++ b/private/unimodem/new/mic/chksum.cpp @@ -0,0 +1,57 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// CHKSUM.CPP -- Implementation Checksum() +// +// History: +// 05/24/96 JosephJ Created +// +// +#include "common.h" + +//---------------- ::Checksum ----------------------------------- +// Compute a 32-bit checksum of the specified bytes +// 0 is retured if pb==NULL or cb==0 +DWORD Checksum(const BYTE *pb, UINT cb) +{ + const UINT MAXSIZE = 1024; + DWORD dwRet = 0; + //DWORD rgdwBuf[MAXSIZE/sizeof(DWORD)]; + + + if (!pb) goto end; + + + // TODO: replace by crc32 + while(cb--) {dwRet ^= dwRet<<1 ^ *pb++;} + +#if (TODO) + // If buffer not dword aligned, we copy it over to a buffer which is, + // and pad it + if (cb & 0x3) + { + if (cb>=MAXSIZE) + { + ASSERT(FALSE); + goto end; + } + CopyMemory(rgdwBuf, pb, cb); + } +#endif (TODO) + +end: + return dwRet; +} + + +//---------------- ::AddToChecksumDW ---------------------------- +// Set *pdwChkSum to a new checksum, computed using it's previous value and dw. +void AddToChecksumDW(DWORD *pdwChkSum, DWORD dw) +{ + DWORD rgdw[2]; + rgdw[0] = *pdwChkSum; + rgdw[1] = dw; + + *pdwChkSum = Checksum((const BYTE *) rgdw, sizeof(rgdw)); +} diff --git a/private/unimodem/new/mic/chksum.h b/private/unimodem/new/mic/chksum.h new file mode 100644 index 000000000..e5af9e49f --- /dev/null +++ b/private/unimodem/new/mic/chksum.h @@ -0,0 +1,23 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// CHKSUM.H -- Header for Checksum computation +// +// History: +// 05/24/96 JosephJ Created +// +// +#ifndef _CHKSUM_H_ +#define _CHKSUM_H_ + +//---------------- ::Checksum ----------------------------------- +// Compute a 32-bit checksum of the specified bytes +// 0 is retured if pb==NULL or cb==0 +DWORD Checksum(const BYTE *pb, UINT cb); + +//---------------- ::AddToChecksumDW ---------------------------- +// Set *pdwChkSum to a new checksum, computed using it's previous value and dw. +void AddToChecksumDW(DWORD *pdwChkSum, DWORD dw); + +#endif // _CHKSUM_H_ diff --git a/private/unimodem/new/mic/common.h b/private/unimodem/new/mic/common.h new file mode 100644 index 000000000..6dfe74c45 --- /dev/null +++ b/private/unimodem/new/mic/common.h @@ -0,0 +1,32 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +// COMMON.H -- Common header +// +// History: +// 05/22/96 JosephJ Created +// +// + +#ifndef _COMMON_H_ +#define _COMMON_H_ + +#include <windows.h> +#include <stdio.h> + +#define ASSERT(_c) \ + ((_c) ? 0: printf( \ + "\n***Assertion failed in %s:%d\n***\n",\ + __FILE__,\ + __LINE__\ + )) + +#include "consts.h" +#include "chksum.h" +#include "ilist.h" +#include "sync.h" +#include "sym.h" +#include "globals.h" + + +#endif // _COMMON_H_ diff --git a/private/unimodem/new/mic/consts.h b/private/unimodem/new/mic/consts.h new file mode 100644 index 000000000..68d39d3b7 --- /dev/null +++ b/private/unimodem/new/mic/consts.h @@ -0,0 +1,30 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +// CONSTS.H -- Common constants +// +// History: +// 06/13/96 JosephJ Created +// +// +#ifndef _CONSTS_H_ +#define _CONSTS_H_ + +// Platforms +enum ePLATFORM +{ + ePLAT_ALL, + ePLAT_NT_ALL, + ePLAT_NT_ALPHA, + ePLAT_NT_PPC, + ePLAT_NT_MIPS +}; + +// Object signatures. +enum eOBJSIG +{ + eOBJSIG_INVALID = 0, + eOBJSIG_CInfManufacturerSection = 1234 +}; + +#endif // _CONSTS_H_ diff --git a/private/unimodem/new/mic/dev.cpp b/private/unimodem/new/mic/dev.cpp new file mode 100644 index 000000000..051632a5c --- /dev/null +++ b/private/unimodem/new/mic/dev.cpp @@ -0,0 +1,1103 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// DEV.C -- Implementation for Classes: +// CInfDevice +// +// +// History: +// 05/22/96 JosephJ Created +// +// +#include "common.h" +#include "ini.h" +#include "inf.h" +#include "dev.h" + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfDevice +/////////////////////////////////////////////////////////////////////////// + + +//-------------- Dump ------------------ +// Dump state +void CInfDevice::Dump(void) const +{ + // Dump Version + m_pVersion->Dump(); + + // Dump manufacturer name + m_pSymManufacturerName->Dump(); + + // Dump model name + m_pSymDeviceName->Dump(); + + // Dump AddRegList + { + const CInfList *pList = m_pAddRegList; + + for (;pList; pList=pList->Next()) + { + const CInfAddRegEntry * pAddRegEntry = + (const CInfAddRegEntry *) pList->GetData(); + pAddRegEntry->Dump(); + } + + } + + // Dump CopyFilesList + { + const CInfList *pList = m_pCopyFilesList; + + for (;pList; pList=pList->Next()) + { + const CInfCopyFilesEntry * pCopyFilesEntry = + (const CInfCopyFilesEntry *) pList->GetData(); + pCopyFilesEntry->Dump(); + } + + } + + // NoResDup section + { + // [Modem6.NoResDup] + // UNIMODEMCC646872,UNIMODEMA4970248,UNIMODEMB6071C15 + + // TODO: unimplemented + + } + + // PosDup section + { + // [Modem12.PosDup] + // *PNP0500 + + // TODO: unimplemented + } + // TODO: UpdateInis, Uninstall, NoResDup, PosDup + +} + + +//-------------- Load ------------------ +// Load (init), using information from the specified inf file and model entry. +BOOL CInfDevice::Load +( + const CInfFile *pInf, + const CInfManufacturerEntry *pManuE, + const CInfModelEntry *pModelE +) +{ + BOOL fRet = FALSE; + + mfn_EnterCrit(); + + // TODO: call m_sync.BeginLoad + + ASSERT + ( + !m_pvInfSession + && !m_pInfFile + && !m_pManufacturerEntry + && !m_pModelEntry + && !m_pVersion + && !m_pSymManufacturerName + && !m_pSymDeviceName + && !m_pCopyFilesList + && !m_pAddRegList + ); + + if (!pInf || !pManuE || !pModelE) goto end; + + // Keep a reference to the Inf file and manufacturer and model entry + m_pInfFile = pInf; + m_pModelEntry = pModelE; + m_pManufacturerEntry = pManuE; + + // Open a session with the inf file. + m_pvInfSession = pInf->OpenSession (); + + if (!m_pvInfSession) + { + printf("Error calling pInf->OpenSession()\n"); + goto end; + } + + // version + m_pVersion = pInf->GetVersion(); + + // manufacturer name + m_pSymManufacturerName = pManuE->GetName(); + + // model name + m_pSymDeviceName = pModelE->GetName(); + + // TODO: UpdateInis, Uninstall + + if ( + m_pvInfSession + && m_pInfFile + && m_pModelEntry + && m_pManufacturerEntry + && m_pVersion + && m_pSymManufacturerName + && m_pSymDeviceName + ) + { + fRet = mfn_CreateAddRegList(pModelE); + fRet = fRet && mfn_CreateCopyFilesList(pModelE); + } + + // Create signatures + + // Version + m_dwSigVersion = m_pVersion->Checksum(); + + // Make and Model + m_dwSigManuAndModel = m_pSymManufacturerName->Checksum(); + AddToChecksumDW(&m_dwSigManuAndModel, m_pSymDeviceName->Checksum()); + + // Control Flags + m_dwSigFlags = m_pModelEntry->GetControlFlags(ePLAT_ALL); + AddToChecksumDW(&m_dwSigFlags,m_pModelEntry->GetControlFlags(ePLAT_NT_ALL)); + AddToChecksumDW(&m_dwSigFlags,m_pModelEntry->GetControlFlags(ePLAT_NT_ALPHA)); + AddToChecksumDW(&m_dwSigFlags,m_pModelEntry->GetControlFlags(ePLAT_NT_PPC)); + AddToChecksumDW(&m_dwSigFlags,m_pModelEntry->GetControlFlags(ePLAT_NT_MIPS)); + + // AddReg -- got created by mfn_CreateAddRegList + + // Copy files -- got created by mfn_CreateCopyFilesList + + // NoResDup and PosDup + { + const CInfInstallSection *pInstall = m_pModelEntry->GetInstallSection(); + DWORD dwSigNoResDup=0; + DWORD dwSigPosDup=0; + const CInfList *pSymList = pInstall->GetNoResDupIDList(); + while(pSymList) + { + const CInfSymbol *pSym = (const CInfSymbol *) pSymList->GetData(); + // We use XOR to combine the checksum, because we don't care about + // order. + dwSigNoResDup ^= pSym->Checksum(); + pSymList = pSymList->Next(); + } + + pSymList = pInstall->GetPosDupIDList(); + while(pSymList) + { + const CInfSymbol *pSym = (const CInfSymbol *) pSymList->GetData(); + // We use XOR to combine the checksum, because we don't care about + // order. + dwSigPosDup ^= pSym->Checksum(); + pSymList = pSymList->Next(); + } + + // Combine, and this time we *are* sensitive to the order. + m_dwSigDup = dwSigNoResDup; + AddToChecksumDW(&m_dwSigDup, dwSigPosDup); + } + + // Rank0 + m_dwSigRank0 = (m_pModelEntry->GetRank0ID())->Checksum(); + + // All ranks + m_dwSigRanks = m_dwSigRank0; + AddToChecksumDW(&m_dwSigRanks, (m_pModelEntry->GetRank1ID())->Checksum()); + AddToChecksumDW(&m_dwSigRanks, (m_pModelEntry->GetRank2ID())->Checksum()); + + // Signature of everything. + m_dwSigAll = m_dwSigVersion; + AddToChecksumDW(&m_dwSigAll, m_dwSigManuAndModel); + AddToChecksumDW(&m_dwSigAll, m_dwSigFlags); + AddToChecksumDW(&m_dwSigAll, m_dwSigAddReg); + AddToChecksumDW(&m_dwSigAll, m_dwSigCopyFiles); + AddToChecksumDW(&m_dwSigAll, m_dwSigDup); + AddToChecksumDW(&m_dwSigAll, m_dwSigRanks); + +end: + if (!fRet) + { + mfn_Cleanup(); + } + + mfn_LeaveCrit(); + + return fRet; +} + +//-------------- Unload ------------------ +// Unloads a previously loaded file. +HANDLE CInfDevice::Unload (void) +{ + HANDLE hUnload = NULL; + + mfn_EnterCrit(); + + // TODO: call m_sync.BeginUnload to try to put us in unloadable state. + + mfn_Cleanup(); + + mfn_LeaveCrit(); + + return hUnload; +} + +//-------------- WriteInf ------------------ +// Creates an inf file with all the information of this device. +BOOL CInfDevice::WriteInf(LPCTSTR lpctszIniFile) const +{ + // String-related constants + LPCTSTR lpctszStrings = TEXT("Strings"); + + BOOL fRet = FALSE; + const CInfSymbol * pSym=NULL; + + printf(TEXT("Writing inf [%s]\n"), lpctszIniFile); + + // Create/truncate file, and write header comment + if (!mfn_write_header(lpctszIniFile)) goto end; + +end: + return fRet; +} + + +// Cleanup by freeing any allocated resources. +void CInfDevice::mfn_Cleanup (void) +{ + mfn_EnterCrit(); + + // TODO: ASSERT(state == loading or state == unloading) + + if (m_pAddRegList) + { + // Explicitly cast to non-const because we're deleting it. + CInfList::FreeList((CInfList *) m_pAddRegList); + } + + if (m_pCopyFilesList) + { + // Explicitly cast to non-const because we're deleting it. + CInfList::FreeList((CInfList *) m_pCopyFilesList); + } + + if (m_pvInfSession) + { + ASSERT(m_pInfFile); + m_pInfFile->CloseSession(m_pvInfSession); + } + + m_pAddRegList = NULL; + m_pCopyFilesList = NULL; + m_pvInfSession = NULL; + m_pInfFile = NULL; + m_pModelEntry = NULL; + m_pManufacturerEntry = NULL; + m_pVersion = NULL; + m_pSymManufacturerName = NULL; + m_pSymDeviceName = NULL; + + m_dwSigVersion = 0; + m_dwSigManuAndModel = 0; + m_dwSigFlags = 0; + m_dwSigAddReg = 0; + m_dwSigCopyFiles = 0; + m_dwSigRank0 = 0; + m_dwSigRanks = 0; + + + mfn_LeaveCrit(); +} + + +// Initializes m_pAddRegList to list of addreg entries. +BOOL CInfDevice::mfn_CreateAddRegList(const CInfModelEntry *pModelE) +{ + const CInfInstallSection * pInstall = pModelE->GetInstallSection(); + const CInfList * pAddRegList = pInstall->GetAddRegSectionList(); + + ASSERT(!m_pAddRegList); + + // Initialize this here -- it is modified by mfn_AddToAddRegList. + m_dwSigAddReg = 0; + + // Walk AddReg list, adding each entry for each addreg section. + for (;pAddRegList; pAddRegList=pAddRegList->Next()) + { + const CInfAddRegSection * pAddRegSection = + (const CInfAddRegSection *) pAddRegList->GetData(); + + ASSERT(pAddRegSection); + + // Add all the entries in the section, overwriting previous entries + // with the same subkey/value-name. + const CInfAddRegEntry * pAddRegEntry = + pAddRegSection->GetFirstAddRegEntry (); + for(;pAddRegEntry; pAddRegEntry = pAddRegEntry->Next()) + { + mfn_AddToAddRegList(pAddRegEntry); + } + } + + return TRUE; +} + +void CInfDevice::mfn_AddToAddRegList (const CInfAddRegEntry *pAddRegEntry) +{ + // TODO: need to overwrite or not, depending on the addreg flags. + // for now, simply add to front of list. + m_pAddRegList = new CInfList ((void *) pAddRegEntry, m_pAddRegList); + AddToChecksumDW(&m_dwSigAddReg, pAddRegEntry->Checksum()); +} + +BOOL CInfDevice::mfn_CreateCopyFilesList(const CInfModelEntry *pModelE) +{ + + const CInfInstallSection * pInstall = pModelE->GetInstallSection(); + const CInfList * pCopyFilesList = pInstall->GetCopyFilesSectionList(); + + ASSERT(!m_pCopyFilesList); + + // Initialize this here -- it is modified by mfn_AddToCopyFilesList. + m_dwSigCopyFiles = 0; + + // Walk CopyFiles list, adding each entry for each copyfile section. + for (;pCopyFilesList; pCopyFilesList=pCopyFilesList->Next()) + { + const CInfCopyFilesSection * pCopyFilesSection = + (const CInfCopyFilesSection *) pCopyFilesList->GetData(); + + ASSERT(pCopyFilesSection); + + // Add all the entries in the section, overwriting previous entries + // with the name and destination. + const CInfCopyFilesEntry * pCopyFilesEntry = + pCopyFilesSection->GetFirstCopyFilesEntry(); + for(;pCopyFilesEntry; pCopyFilesEntry = pCopyFilesEntry->Next()) + { + mfn_AddToCopyFilesList(pCopyFilesEntry); + } + } + + return TRUE; +} + +void CInfDevice::mfn_AddToCopyFilesList ( + const CInfCopyFilesEntry *pCopyFilesEntry + ) +{ + // TODO: need to overwrite or not, depending on the addreg flags. + // for now, simply add to front of list. + m_pCopyFilesList = new CInfList ( + (void *) pCopyFilesEntry, + m_pCopyFilesList + ); + AddToChecksumDW(&m_dwSigCopyFiles, pCopyFilesEntry->Checksum()); +} + + + +// Create/Truncate inf file for just this device, and write header. +BOOL CInfDevice::mfn_write_header ( + LPCTSTR lpctszIniFile + ) +const +{ + LPCTSTR lpctszOrigFile = TEXT(""); + LPCTSTR lpctszManuS = TEXT(""); + LPCTSTR lpctszManuName = TEXT(""); + LPCTSTR lpctszModelLHS = TEXT(""); + LPCTSTR lpctszModelName = TEXT(""); + LPCTSTR lpctszRank0 = TEXT(""); + LPCTSTR lpctszRank1 = TEXT(""); + LPCTSTR lpctszRank2 = TEXT(""); + LPCTSTR lpctszProviderName = TEXT(""); + + BOOL fRet = FALSE; + const CInfSymbol * pSym=NULL; + + TCHAR rgchBuf[4098]; + HANDLE hFile=NULL; + + SYSTEMTIME st; + UINT u = 0; + GetLocalTime(&st); + + // Open file + { + TCHAR rgchPathName[MAX_PATH]; + const TCHAR tchBack = (TCHAR) '\\'; + const TCHAR tchColon = (TCHAR) ':'; + const uLen = lstrlen(lpctszIniFile); + + if (!uLen || (uLen+2) > sizeof(rgchPathName)/sizeof(TCHAR)) goto end; + + rgchPathName[0] = 0; + + u=0; + // Append %windir% if file name is not of the form + // "\.*" or "?:.*" + #if 0 // Don't do this anymore. + if ( (lpctszIniFile[0] != tchBack) + && (uLen<2 || lpctszIniFile[1]!=tchColon)) + { + const UINT uMax = sizeof(rgchPathName)/sizeof(TCHAR) - uLen - 2; + u = GetWindowsDirectory + ( + rgchPathName, + uMax + ); + + if (!u || u >= uMax) goto end; + lstrcpy(rgchPathName+u, TEXT("\\")); + u++; + } + #endif // 0 + + ASSERT((u+uLen+1)<(sizeof(rgchPathName)/sizeof(TCHAR))); + lstrcpy(rgchPathName+u, lpctszIniFile); + printf("Ini Path Name = [%s]\n", rgchPathName); + + + // Open file, nuke it if it exists. + hFile = CreateFile + ( + rgchPathName, + GENERIC_WRITE, + 0, // deny sharing + NULL, + CREATE_ALWAYS, + FILE_ATTRIBUTE_NORMAL, + NULL + ); + + if (hFile==INVALID_HANDLE_VALUE) + { + printf("Create file fails with error %08lu\n", GetLastError()); + hFile = NULL; + goto end; + } + else + { + printf("File opened\n"); + } + } + + // write header. + { + //; + //; OUT.INF + //; + //; Inf generated for a single modem. + //; + //; Created: Fri 05-24-1996 12:13:42 + //; Checksum: 12507659 + //; Original Inf: mdmgen.inf/[Rockwell]/%Rockwell1% + //; Manufacturer: "Rockwell" + //; Model: "14400 bps PCMCIA Data-Fax Modem" + //; Rank0ID: GEN_Apex1 + //; Rank1ID: PCMCIA\RIPICAA-RC144ACL-845A + //; Rank2ID: PCMCIA\RIPICAA-YYY-ZZZ + //; + //; Rank0 Version M&M Flags AddReg CopyFile Ranks + //; SIG= 12342412 12222233 12334444 12234444 12244444 53265123 52366664 + //; + + const CInfSymbol *pSym = NULL; + + // File name + pSym = m_pInfFile->GetFileName(); + lpctszOrigFile = pSym->GetText(); + + // Manufacturer section name + { + const CInfManufacturerSection * pManuS = + m_pManufacturerEntry->GetManufacturerSection(); + if (pManuS) + { + pSym = pManuS->GetSectionName(); + lpctszManuS = pSym->GetText(); + } + } + + // Model entry name (LHS) + pSym = m_pModelEntry->GetLHS(); + lpctszModelLHS = pSym->GetText(); + + // Manufacturer name + pSym = m_pSymManufacturerName; + lpctszManuName = pSym->GetText(); + + // Model name + pSym = m_pSymDeviceName; + lpctszModelName = pSym->GetText(); + + // Rank 0 + pSym = m_pModelEntry->GetRank0ID(); + lpctszRank0 = pSym->GetText(); + + + // Rank 1 + pSym = m_pModelEntry->GetRank1ID(); + lpctszRank1 = pSym->GetText(); + + // Rank 1 + pSym = m_pModelEntry->GetRank1ID(); + lpctszRank1 = pSym->GetText(); + + u = wsprintf + ( + rgchBuf, + TEXT + ( + ";\r\n" + "; OUT.INF\r\n" + ";\r\n" + "; Inf generated for a single modem.\r\n" + ";\r\n" + "; Created: %02u-%02u-%04u %02u:%02u:%02u\r\n" + "; Checksum: %08lx\r\n" + ), + st.wMonth, + st.wDay, + st.wYear, + st.wHour, + st.wMinute, + st.wSecond, + m_dwSigAll + ); + ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR)); + + u+= wsprintf + ( + rgchBuf+u, + TEXT + ( + "; Original Inf: %s/[%s]/%s\r\n" + "; Manufacturer: \"%s\"\r\n" + "; Model: \"%s\"\r\n" + "; Rank0ID: %s\r\n" + "; Rank1ID: %s\r\n" + "; Rank2ID: %s\r\n" + ), + lpctszOrigFile, // original inf file + lpctszManuS, // manufacturer section + lpctszModelLHS, // model entry name + lpctszManuName, // manufacturer name + lpctszModelName,// model name + lpctszRank0, // Rank0 ID + lpctszRank1, // Rank1 ID + lpctszRank2 // Rank2 ID + ); + ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR)); + + u+= wsprintf + ( + rgchBuf+u, + TEXT + ( + ";\r\n" +"; Rank0 Version M&M Flags AddReg CopyFile Dup Ranks\r\n" + "; SIG= %08lx %08lx %08lx %08lx %08lx %08lx %08lx %08lx\r\n" + ";\r\n" + ), + m_dwSigRank0, + m_dwSigVersion, + m_dwSigManuAndModel, + m_dwSigFlags, + m_dwSigAddReg, + m_dwSigCopyFiles, + m_dwSigDup, // NoResDup and PosDup + m_dwSigRanks + ); + ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR)); + } // end write header + + // Write Version + { + // Sample: + //; ---------------------- VERSION ------------------------------ + //[Version] + //LayoutFile=layout.inf + //Signature="$CHICAGO$" + //Class=Modem + //ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318} + //Provider=%provider% + + u+= wsprintf + ( + rgchBuf+u, + TEXT + ( + "\r\n" + "\r\n" + "; ---------------------- VERSION ------------------------------\r\n" + "[Version]\r\n" + ) + ); + + // LayoutFile + pSym = m_pVersion->GetLayoutFile(); + if (pSym) + { + u+= wsprintf + ( + rgchBuf+u, + TEXT("LayoutFile=%s\r\n"), + pSym->GetText() + ); + } + + // Signature + pSym = m_pVersion->GetSignature(); + if (pSym) + { + u+= wsprintf + ( + rgchBuf+u, + TEXT("Signature=%s\r\n"), + pSym->GetText() + ); + } + + // Class + pSym = m_pVersion->GetClass(); + if (pSym) + { + u+= wsprintf + ( + rgchBuf+u, + TEXT("Class=%s\r\n"), + pSym->GetText() + ); + } + + // ClassGUID + pSym = m_pVersion->GetClassGUID(); + if (pSym) + { + u+= wsprintf + ( + rgchBuf+u, + TEXT("ClassGUID=%s\r\n"), + pSym->GetText() + ); + } + + // Provider + pSym = m_pVersion->GetProvider(); + if (pSym) + { + lpctszProviderName = pSym->GetText(); + u+= wsprintf + ( + rgchBuf+u, + TEXT("Provider=%%provider%%\r\n") + ); + } + + ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR)); + + } // End writing version info + + + // Write Control flags section + // Sample: + // -------------------- CONTROLFLAGS --------------------------- + // [ControlFlags] + // ExcludeFromSelect=SERENUM\MNP0281 + // ExcludeFromSelect.NT=LPTENUM\MICROCOMTRAVELPORTE_1FF4 + { + DWORD dwFlagsAll; + DWORD dwFlagsNTAll; + DWORD dwFlagsNTAlpha; + DWORD dwFlagsNTPPC; + DWORD dwFlagsNTMips; + + u+= wsprintf + ( + rgchBuf+u, + TEXT( + "\r\n" + "\r\n" + "; -------------------- CONTROLFLAGS ---------------------------\r\n" + "[ControlFlags]\r\n" + ) + ); + + dwFlagsAll = m_pModelEntry->GetControlFlags(ePLAT_ALL); + dwFlagsNTAll = m_pModelEntry->GetControlFlags(ePLAT_NT_ALL); + dwFlagsNTAlpha = m_pModelEntry->GetControlFlags(ePLAT_NT_ALPHA); + dwFlagsNTPPC = m_pModelEntry->GetControlFlags(ePLAT_NT_PPC); + dwFlagsNTMips = m_pModelEntry->GetControlFlags(ePLAT_NT_MIPS); + + if(dwFlagsAll & dwCF_EXCLUDE_FROM_SELECT) + { + u+= wsprintf + ( + rgchBuf+u, + TEXT("ExcludeFromSelect=%s\r\n"), + lpctszRank0 + ); + } + + if(dwFlagsNTAll & dwCF_EXCLUDE_FROM_SELECT) + { + u+= wsprintf + ( + rgchBuf+u, + TEXT("ExcludeFromSelect.NT=%s\r\n"), + lpctszRank0 + ); + } + + if(dwFlagsNTAlpha & dwCF_EXCLUDE_FROM_SELECT) + { + u+= wsprintf + ( + rgchBuf+u, + TEXT("ExcludeFromSelect.NT.Alpha=%s\r\n"), + lpctszRank0 + ); + } + + if(dwFlagsNTPPC & dwCF_EXCLUDE_FROM_SELECT) + { + u+= wsprintf + ( + rgchBuf+u, + TEXT("ExcludeFromSelect.NT.PPC=%s\r\n"), + lpctszRank0 + ); + } + + if(dwFlagsNTMips & dwCF_EXCLUDE_FROM_SELECT) + { + u+= wsprintf + ( + rgchBuf+u, + TEXT("ExcludeFromSelect.NT.Mips=%s\r\n"), + lpctszRank0 + ); + } + + // TODO: unimplemented: Other control flags. + + ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR)); + + } // End writing control flags section + + + // Write Manufacturer section + { + u+= wsprintf + ( + rgchBuf+u, + TEXT + ( + "\r\n" + "\r\n" + "; -------------------- MANUFACTURER ---------------------------\r\n" + "[Manufacturer]\r\n" + "%%make%%= Make\r\n" + ) + ); + ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR)); + + } // End writing Manufacturer section + + + // Write make section + { + u+= wsprintf + ( + rgchBuf+u, + TEXT + ( + "\r\n" + "\r\n" + "; ----------------------- MAKE --------------------------------\r\n" + "[Make]\r\n" + "%%model%%= Model, %s" + ), + lpctszRank0 + ); + if (*lpctszRank1 || *lpctszRank2) + { + u+= wsprintf (rgchBuf+u, ", %s", lpctszRank1); + } + if (*lpctszRank2) + { + u+= wsprintf (rgchBuf+u, ", %s", lpctszRank2); + } + + ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR)); + + } // End writing make section + + // Write Model section + { + u+= wsprintf + ( + rgchBuf+u, + TEXT + ( + "\r\n" + "\r\n" + "\r\n" + "; ----------------------- MODEL -------------------------------\r\n" + "[Model]\r\n" + "AddReg=AddReg\r\n" + "CopyFiles=CopyFiles\r\n" + ) + ); + + ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR)); + + } // End writing Model section + + + // NoResDup section + { + // [Make.NoResDup] + // UNIMODEMCC646872,UNIMODEMA4970248,UNIMODEMB6071C15 + const CInfInstallSection *pInstall = m_pModelEntry->GetInstallSection(); + const CInfList *pSymList = pInstall->GetNoResDupIDList(); + const CInfSymbol *pSym = NULL; + + u+= wsprintf + ( + rgchBuf+u, + TEXT + ( + "\r\n" + "\r\n" + "; ---------------------- NORESDUP -----------------------------\r\n" + "[Model.NoResDup]\r\n" + ) + ); + + while(pSymList) + { + if (pSym) { u+= wsprintf (rgchBuf+u, TEXT(",")); } + pSym = (const CInfSymbol *) pSymList->GetData(); + u+= wsprintf (rgchBuf+u, TEXT("%s"), pSym->GetText()); + + pSymList = pSymList->Next(); + } + + ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR)); + + } + + + // PosDup section + { + // [Make.PosDup] + // *PNP0500 + const CInfInstallSection *pInstall = m_pModelEntry->GetInstallSection(); + const CInfList *pSymList = pInstall->GetPosDupIDList(); + const CInfSymbol *pSym = NULL; + + u+= wsprintf + ( + rgchBuf+u, + TEXT + ( + "\r\n" + "\r\n" + "; ---------------------- POSDUP -------------------------------\r\n" + "[Model.PosDup]\r\n" + ) + ); + + while(pSymList) + { + if (pSym) { u+= wsprintf (rgchBuf+u, TEXT(",")); } + pSym = (const CInfSymbol *) pSymList->GetData(); + u+= wsprintf (rgchBuf+u, TEXT("%s"), pSym->GetText()); + + pSymList = pSymList->Next(); + } + ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR)); + } + + + // Write CopyFiles section + // BUGBUG: we need the concept of muliple copy-file sections, because + // each section can have a different destination dir. + // Also: the CopyFiles.NT, etc sections. + { + u+= wsprintf + ( + rgchBuf+u, + TEXT + ( + "\r\n" + "\r\n" + "; --------------------- COPYFILES -----------------------------\r\n" + "[CopyFiles]\r\n" + ) + ); + + // Now write each copyfile entry + { + const CInfList *pList = m_pCopyFilesList; + + for (;pList; pList=pList->Next()) + { + // TODO: unimplemented + } + + } + ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR)); + + + } // End writing CopyFiles section + + + // Write DestinationDirs section + { + u+= wsprintf + ( + rgchBuf+u, + TEXT + ( + "\r\n" + "\r\n" + "; ------------------- DESTINATIONDIRS -------------------------\r\n" + "[DestinationDirs]\r\n" + ) + ); + + // Now write each copyfile entry + // TODO: Need to construct destination-dirs entries + + ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR)); + + + } // End writing DestinationDirs section + + + // TODO: UpdateInis, Uninstall + + + // Write Addreg section + { + u+= wsprintf + ( + rgchBuf+u, + TEXT + ( + "\r\n" + "\r\n" + "; ---------------------- ADDREG -------------------------------\r\n" + "[AddReg]\r\n" + ) + ); + + ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR)); + + + // Now write each addreg entry + { + const CInfList *pList = m_pAddRegList; + + for (;pList; pList=pList->Next()) + { + LPCTSTR lpctszRegRoot = TEXT(""); + LPCTSTR lpctszSubKey = TEXT(""); + LPCTSTR lpctszValueName = TEXT(""); + TCHAR rgchFlag[20] = TEXT(""); + LPCTSTR lpctszValue = TEXT(""); + DWORD dwFlag = MAXDWORD; + const CInfSymbol *pSym = NULL; + const CInfAddRegEntry * pARE = + (const CInfAddRegEntry *) pList->GetData(); + ASSERT(pARE); + + pSym = pARE->GetRegRoot(); + lpctszRegRoot = pSym->GetText(); + + pSym = pARE->GetSubKey(); + lpctszSubKey = pSym->GetText(); + + pSym = pARE->GetValueName(); + lpctszValueName = pSym->GetText(); + + dwFlag = pARE->GetFlag(); + if (dwFlag!=MAXDWORD) + { + wsprintf(rgchFlag, TEXT("%lu"), dwFlag); + } + + pSym = pARE->GetValue(); + lpctszValue = pSym->GetText(); + +//HKR, Settings, Prefix,, "AT" +//HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00 + u+= wsprintf + ( + rgchBuf+u, + TEXT + ( + "%s, %s, %s, %s, %s\r\n" + ), + lpctszRegRoot, + lpctszSubKey, + lpctszValueName, + rgchFlag, + lpctszValue + ); + } + + } + } // End writing addreg section + + + // Write Strings section + { + + u+= wsprintf + ( + rgchBuf+u, + TEXT + ( + "\r\n" + "\r\n" + "; ---------------------- STRINGS ------------------------------\r\n" + "[Strings]\r\n" + "provider=\"%s\"\r\n" + "make=\"%s\"\r\n" + "model=\"%s\"\r\n" + ), + lpctszProviderName, + lpctszManuName, + lpctszModelName + ); + + ASSERT(u < sizeof (rgchBuf)/sizeof(TCHAR)); + + } // End Strings flags section + + DWORD dwWr; + if (!WriteFile(hFile, (LPBYTE) rgchBuf, u*sizeof(TCHAR), &dwWr, NULL)) + { + printf("Write file fails with error %08lu\n", GetLastError()); + goto end; + } + else + { + printf("Write file succeeded\n"); + } + + fRet = TRUE; + +end: + if (hFile) CloseHandle(hFile); + + return fRet; +} diff --git a/private/unimodem/new/mic/dev.h b/private/unimodem/new/mic/dev.h new file mode 100644 index 000000000..695571f35 --- /dev/null +++ b/private/unimodem/new/mic/dev.h @@ -0,0 +1,136 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// DEV.H -- Header for Classes: +// CInfDevice +// +// +// History: +// 05/22/96 JosephJ Created +// +// + + +class CInfDevice; + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfDevice +/////////////////////////////////////////////////////////////////////////// +// +// Represents a single device, as specified by an inf (device information) +// file. +// + +class CInfDevice +{ + +public: + + CInfDevice(const CInfDevice *pNext) + : m_pNext(pNext), + m_sync(), + + m_pvInfSession(NULL), + m_pInfFile(NULL), + m_pManufacturerEntry(NULL), + m_pModelEntry(NULL), + m_pVersion(NULL), + m_pSymManufacturerName(NULL), + m_pSymDeviceName(NULL), + m_pAddRegList(NULL), + m_pCopyFilesList(NULL), + + m_dwSigVersion(101), + m_dwSigManuAndModel(102), + m_dwSigFlags(103), + m_dwSigAddReg(104), + m_dwSigCopyFiles(105), + m_dwSigDup(106), + m_dwSigRank0(107), + m_dwSigRanks(108), + m_dwSigAll(109) + {} + + ~CInfDevice() {} + + // --------------- Dump --------------- + // Dump state + void Dump(void) const; + + // --------------- Load --------------- + // Load (init) the device specifed by the inf file and model entry. + BOOL Load ( + const CInfFile *pInf, + const CInfManufacturerEntry *pManuE, + const CInfModelEntry *pModelE + ); + + //-------------- Unload ------------------ + // Unloads a previously loaded file. If there are open sessions to this + // object, Unload returns a handle which will be signalled when all + // sessions are closed. New sessions will not be allowed after this + // function returns. The call should free the handle. + HANDLE Unload (void); + + //-------------- WriteInf ------------------ + // Creates an inf file with all the information of this device. + BOOL WriteInf(LPCTSTR lpctszIniFile) const; + + //-------------- GetRank0Checksum ---------- + // Returns signature of the rank0 ID + DWORD Rank0Checksum(void) const {return m_dwSigRank0;} + + //-------------- Checksum -------------- + // Returns combined checksum for this device. + DWORD Checksum(void) const {return m_dwSigAll;} + + #if (TODO) + UpdateInisSection + UninstallSection + NoResDupIDList + PosDupIDList + #endif // (TODO) + + +private: + + const CInfDevice * m_pNext; + CSync m_sync; + + const void * m_pvInfSession; + + const CInfFile * m_pInfFile; + const CInfManufacturerEntry *m_pManufacturerEntry; + const CInfModelEntry * m_pModelEntry; + + const CInfVersionSection * m_pVersion; + const CInfSymbol * m_pSymManufacturerName; + const CInfSymbol * m_pSymDeviceName; + + const CInfList * m_pAddRegList; + const CInfList * m_pCopyFilesList; + + BOOL mfn_CreateAddRegList (const CInfModelEntry *); + BOOL mfn_CreateCopyFilesList (const CInfModelEntry *); + void mfn_AddToAddRegList (const CInfAddRegEntry *); + void mfn_AddToCopyFilesList (const CInfCopyFilesEntry *); + void mfn_Cleanup (void); + BOOL mfn_write_header (LPCTSTR lpctszIniFile) const; + + void mfn_EnterCrit(void) const {m_sync.EnterCrit();} + void mfn_LeaveCrit(void) const {m_sync.LeaveCrit();} + + DWORD m_dwSigVersion; // Checksum of version section + DWORD m_dwSigManuAndModel;// Checksum of manufacturer name & model name + DWORD m_dwSigFlags; // Group-checksum of control flags. + DWORD m_dwSigAddReg; // Group-checksum of add reg section + DWORD m_dwSigCopyFiles; // Group-checksum of copyfile section + DWORD m_dwSigDup; // Group-checksum of NoResDup and PosDup. + DWORD m_dwSigRank0; // Group-checksum of all ranks. + DWORD m_dwSigRanks; // Group-checksum of all ranks. + DWORD m_dwSigAll; // Checksum of all the info of this device + // including version, manufacturer-name & + // model-name +}; diff --git a/private/unimodem/new/mic/globals.cpp b/private/unimodem/new/mic/globals.cpp new file mode 100644 index 000000000..b25209b6d --- /dev/null +++ b/private/unimodem/new/mic/globals.cpp @@ -0,0 +1,53 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// GLOBALS.CPP -- Defines global data: +// CInfSymbolTable gSymtab; +// +// History: +// 05/27/96 JosephJ Created +// +// +#include "common.h" + +//----------------------- gSymtab ------------------------------- +// Global symbol table. +CInfSymbolTable gSymtab; + + + +// --------------------- Global Property Symbols ---------------- +const CInfSymbol *g_pSymPropCopyFilesSection; +const CInfSymbol *g_pSymPropManufacturerSection; +const CInfSymbol *g_pSymPropAddRegSection; + +LPCTSTR lpctszPropCopyFilesSection = TEXT("InfCFS"); +LPCTSTR lpctszPropManufacturerSection = TEXT("InfMS"); +LPCTSTR lpctszPropAddRegSection = TEXT("InfARS"); + +BOOL InitializePropertySymbols(void); + + +BOOL InitGlobals(void) +{ + return InitializePropertySymbols(); +} + + +BOOL InitializePropertySymbols(void) +{ + g_pSymPropCopyFilesSection = gSymtab.Lookup( + lpctszPropCopyFilesSection, + TRUE + ); + g_pSymPropManufacturerSection = gSymtab.Lookup( + lpctszPropManufacturerSection, + TRUE + ); + g_pSymPropAddRegSection = gSymtab.Lookup(lpctszPropAddRegSection, TRUE); + + return g_pSymPropCopyFilesSection + && g_pSymPropManufacturerSection + && g_pSymPropAddRegSection; +} diff --git a/private/unimodem/new/mic/globals.h b/private/unimodem/new/mic/globals.h new file mode 100644 index 000000000..b1bf94e22 --- /dev/null +++ b/private/unimodem/new/mic/globals.h @@ -0,0 +1,28 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// GLOBALS.H -- Declares global data: +// CInfSymbolTable gSymtab; +// +// History: +// 05/27/96 JosephJ Created +// +// + +//----------------------- gSymtab ------------------------------- +// Global symbol table. +// This symbol table maintains a global pool of strings -- only one copy of +// each unique string is maintained. +extern CInfSymbolTable gSymtab; + +// --------------------- Global Property Symbols ---------------- +extern const CInfSymbol *g_pSymPropCopyFilesSection; +extern const CInfSymbol *g_pSymPropManufacturerSection; +extern const CInfSymbol *g_pSymPropAddRegSection; +#define PROP_INFSECTION_MANUFACTURER g_pSymPropManufacturerSection +#define PROP_INFSECTION_COPYFILES g_pSymPropCopyFilesSection +#define PROP_INFSECTION_ADDREG g_pSymPropAddRegSection + + +BOOL InitGlobals(void); diff --git a/private/unimodem/new/mic/ilist.cpp b/private/unimodem/new/mic/ilist.cpp new file mode 100644 index 000000000..64350a621 --- /dev/null +++ b/private/unimodem/new/mic/ilist.cpp @@ -0,0 +1,58 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// ILIST.CPP -- Implementation for Classes: +// CInfList +// +// +// History: +// 05/27/96 JosephJ Created +// +// +#include "common.h" + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfList +/////////////////////////////////////////////////////////////////////////// + +// Simple singly-linked list which can not be modified once it's been +// created. Assumes creation and eventual deletion are protected by some +// external critical section. +// +// Sample: +// for (; pList; pList = pList->Next()) +// { +// const CInfAddregSection *pAS = (CInfAddregSection *) pList->GetData(); +// } + +//-------------- FreeList ------------------ +// Distroys the list. +void +CInfList::FreeList (CInfList *pList) +{ + while(pList) + { + // Cast to get rid of the const declaration of pList->Next(). + CInfList *pNext = (CInfList *) pList->Next(); + delete pList; + pList = pNext; + } +} + +//-------------- ReverseList ------------------ +// Reverses the specified list. +void +CInfList::ReverseList (const CInfList **ppList) +{ + CInfList *pList = (CInfList *) *ppList; // override const + const CInfList *pPrev = NULL; + while(pList) + { + const CInfList *pTmp = pList->Next(); + pList->mfn_SetNext(pPrev); + pPrev = pList; + pList = (CInfList *) pTmp; // override const + } + *ppList = pPrev; +} diff --git a/private/unimodem/new/mic/ilist.h b/private/unimodem/new/mic/ilist.h new file mode 100644 index 000000000..ee91756f5 --- /dev/null +++ b/private/unimodem/new/mic/ilist.h @@ -0,0 +1,66 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// ILIST.H -- Header for Classes: +// CInfList +// +// +// History: +// 05/22/96 JosephJ Created +// +// + + +class CInfList; + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfList +/////////////////////////////////////////////////////////////////////////// + +// Simple singly-linked list which can not be modified once it's been +// created. Assumes creation and eventual deletion are protected by some +// external critical section. +// +// Sample: +// for (; pList; pList = pList->Next()) +// { +// const CInfAddregSection *pAS = (CInfAddregSection *) pList->GetData(); +// } + +class CInfList +{ + +public: + + CInfList(void *pvData, const CInfList *pNext) + : m_pvData(pvData), m_pNext(pNext) {} + ~CInfList() {} + + //-------------- GetData ------------------ + const void * GetData (void) const {return m_pvData;} + + //-------------- Next ------------------ + const CInfList * Next (void) const {return m_pNext;} + + //-------------- FreeList ------------------ + // Distroys the specified list. + static void FreeList(CInfList *); + + //-------------- ReverseList ------------------ + // Reverses the specified list. + static void ReverseList(const CInfList **); + +private: + + void mfn_SetNext(const CInfList * pNewNext) + { + m_pNext = pNewNext; + } + + void * m_pvData; + const CInfList * m_pNext; + +}; + diff --git a/private/unimodem/new/mic/inf.cpp b/private/unimodem/new/mic/inf.cpp new file mode 100644 index 000000000..471530a1d --- /dev/null +++ b/private/unimodem/new/mic/inf.cpp @@ -0,0 +1,903 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// INF.CPP -- Implemtation for Classes: +// CInfFile +// +// History: +// 05/21/96 JosephJ Created +// +// +#include "common.h" +#include "ini.h" +#include "inf.h" + +// Version-related constants +LPCTSTR lpctszVersion = TEXT("Version"); +LPCTSTR lpctszLayoutFile = TEXT("LayoutFile"); +LPCTSTR lpctszSignature = TEXT("Signature"); +LPCTSTR lpctszClass = TEXT("Class"); +LPCTSTR lpctszClassGUID = TEXT("ClassGUID"); +LPCTSTR lpctszProvider = TEXT("Provider"); + + +LPCTSTR lpctszManufacturer = TEXT("Manufacturer"); +LPCTSTR lpctszControlFlags = TEXT("ControlFlags"); +LPCTSTR lpctszStrings = TEXT("Strings"); + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfFile +/////////////////////////////////////////////////////////////////////////// + + +CInfFile::CInfFile(void) +{ + m_pVersion=NULL; + m_pFirstManuE=NULL; + m_pSymFileName=NULL; + m_pIniFile=NULL; +} + + +CInfFile::~CInfFile() +{ + mfn_EnterCrit(); + + // Free resources -- there should be none to free... + ASSERT(!m_pVersion); + ASSERT(!m_pFirstManuE); + ASSERT(!m_pIniFile); + +} + + +//-------------- Load ------------------ +// Loads the specified file. (Obviously) only one file can be loaded at +// a time. +BOOL CInfFile::Load (const TCHAR rgchPathname[]) +{ + BOOL fRet = FALSE; + + mfn_EnterCrit(); + + // TODO: call m_sync.BeginLoad + + ASSERT(!m_pVersion); + ASSERT(!m_pFirstManuE); + ASSERT(!m_pIniFile); + + // Save file name + m_pSymFileName = gSymtab.Lookup(rgchPathname, TRUE); + if (!m_pSymFileName) goto end; + + // Create and Load Ini File + m_pIniFile = new CIniFile; + if (m_pIniFile) + { + if (!m_pIniFile->Load(rgchPathname)) + { + delete m_pIniFile; + m_pIniFile=NULL; + } + } + if (!m_pIniFile) goto end; + + // Create and Load version + { + CInfVersionSection *pVS = new CInfVersionSection; + if (pVS) + { + // Override const * declaration of m_pVersion + if (!pVS->Load(m_pIniFile)) + { + delete pVS; + pVS=NULL; + } + } + m_pVersion = pVS; + } + if (!m_pVersion) goto end; + + // Create and load Manufacturer list... + m_pFirstManuE = sfn_CreateManufacturerList(m_pIniFile); + if (!m_pFirstManuE) goto end; + + fRet = TRUE; + +end: + + if (!fRet) + { + mfn_Cleanup(); + } + + mfn_LeaveCrit(); + + return fRet; +} + + +//-------------- Unload ------------------ +// Unloads a previously loaded file. If there are open sessions to this +// object, Unload returns a handle which will be signalled when all +// sessions are closed. New sessions will not be allowed after this +// function returns. The call should free the handle. +HANDLE CInfFile::Unload (void) +{ + HANDLE hUnload = NULL; + + mfn_EnterCrit(); + + // TODO: call m_sync.BeginUnload to try to put us in unloadable state. + + mfn_Cleanup(); + + mfn_LeaveCrit(); + + + return hUnload; +} + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfVersionSection +/////////////////////////////////////////////////////////////////////////// + +// Sample Version section: +// [Version] +// LayoutFile=layout.inf +// Signature="$CHICAGO$" +// Class=Modem +// ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318} +// Provider=%MS% + + +//-------------- Load ------------------ +// TODO: unimplemented +BOOL CInfVersionSection::Load (const CIniFile *pIniFile) +{ + BOOL fRet = FALSE; + const CIniFileSection *pISVer = pIniFile->LookupSection(lpctszVersion); + const CIniFileSection *pISStr = pIniFile->LookupSection(lpctszStrings); + const CIniFileEntry *pIE = NULL; + +#if 0 + m_pSymLayoutFile = gSymtab.Lookup(TEXT("layout.inf"), TRUE); + m_pSymSignature = gSymtab.Lookup(TEXT("\"$CHICAGO$\""), TRUE); + m_pSymClass = gSymtab.Lookup(TEXT("Modem"), TRUE); + m_pSymClassGUID = gSymtab.Lookup + ( + TEXT("{4D36E96D-E325-11CE-BFC1-08002BE10318}"), + TRUE + ); + m_pSymProvider = gSymtab.Lookup(TEXT("Microsoft"), TRUE); + + m_dwChecksum = 0x12345678L; +#endif + + ASSERT + ( + !m_pSymLayoutFile + && !m_pSymSignature + && !m_pSymClass + && !m_pSymClassGUID + && !m_pSymProvider + && !m_dwChecksum + ); + + if (!pISVer || !pISStr) goto end; + + // LayoutFile=layout.inf + pIE = pISVer->LookupEntry(lpctszLayoutFile); + if (pIE) + { + m_pSymLayoutFile = pIE->GetRHS(); + pIE->Release();pIE=NULL; + // TODO: further checks here + } + + // Signature="$CHICAGO$" + pIE = pISVer->LookupEntry(lpctszSignature); + if (pIE) + { + m_pSymSignature = pIE->GetRHS(); + pIE->Release();pIE=NULL; + // TODO: further checks here + } + + // Class=Modem + pIE = pISVer->LookupEntry(lpctszClass); + if (pIE) + { + m_pSymClass = pIE->GetRHS(); + pIE->Release();pIE=NULL; + // TODO: further checks here + } + + // ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318} + pIE = pISVer->LookupEntry(lpctszClassGUID); + if (pIE) + { + m_pSymClassGUID = pIE->GetRHS(); + pIE->Release();pIE=NULL; + // TODO: further checks here + } + + // Provider=%MS% + pIE = pISVer->LookupEntry(lpctszProvider); + if (pIE) + { + const CInfSymbol *pSymLHS = pIE->GetLHS(); + pIE->Release();pIE=NULL; + + if (pSymLHS) + { + pIE = pISStr->LookupEntry(pSymLHS->GetText()); + if (pIE) + { + m_pSymProvider = pIE->GetRHS(); + pIE->Release();pIE=NULL; + } + } + // TODO: further checks here + } + + // Compute checksum of entire version structure + m_dwChecksum = m_pSymLayoutFile->Checksum(); + AddToChecksumDW(&m_dwChecksum, m_pSymSignature->Checksum()); + AddToChecksumDW(&m_dwChecksum, m_pSymClass->Checksum()); + AddToChecksumDW(&m_dwChecksum, m_pSymClassGUID->Checksum()); + AddToChecksumDW(&m_dwChecksum, m_pSymProvider->Checksum()); + + fRet =TRUE; + +end: + + if (pIE) { pIE->Release(); pIE=NULL; } + if (pISVer) { pISVer->Release(); pISVer=NULL; } + if (pISStr) { pISStr->Release(); pISStr=NULL; } + + if (!fRet) + { + mfn_Cleanup(); + } + + return fRet; +} + + +//-------------- Unload ------------------ +void CInfVersionSection::Unload (void) +{ + // TODO: call m_sync.BeginUnload to try to put us in unloadable state. + + mfn_Cleanup(); + + return; +} + + + +//-------------- Dump ------------------ +// Dump state +void +CInfVersionSection::Dump(void) +const +{ +} + +// Cleanup by freeing any allocated resources. +void CInfVersionSection::mfn_Cleanup (void) +{ + m_pSymLayoutFile = NULL; + m_pSymSignature = NULL; + m_pSymClass = NULL;; + m_pSymClassGUID = NULL; + m_pSymProvider = NULL; + m_dwChecksum = 0; +} + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfManufacturerEntry +/////////////////////////////////////////////////////////////////////////// + +// Sample Manufacturer list section: +// [Manufacturer] +// %Generic% = Generic +// %MagicRam% = MagicRam +// .. + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfManufacturerSection +/////////////////////////////////////////////////////////////////////////// + +// Sample Manufacturer section: +// [Generic] +// %Gen% = Gen, MDMGEN +// %Gen3% = Gen3, MDMGEN3 +// %Gen12% = Gen12, MDMGEN12 +// %Gen24% = Gen24, MDMGEN24 +// ... + + +// --------------- GetFirstModelEntry -------------- +// Get first model entry +const CInfModelEntry * +CInfManufacturerSection::GetFirstModelEntry (void) +const +{ + return m_pFirstModelE; +} + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfInstallSection +/////////////////////////////////////////////////////////////////////////// + +// Sample Install section: +// [Modem29] +// AddReg=All, MfgAddReg, ROCK_VOICE_ALL, ROCK_VOICE_SERWAVE, INTERNAL +// CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help +// UpdateInis = VView.Inis +// Uninstall = VoiceView_remove +// +// Also contains info from the related PosDup and NoResDup sections. + + +// --------------- GetAddRegSectionList ---------- +// Get generic list whose data items are pointers to +// CInfAddRegSection objects +const CInfList * +CInfInstallSection::GetAddRegSectionList (void) +const +{ + // TODO: unimplemented + + static const CInfAddRegSection AddRegSection; + static const CInfList AddRegSectionList((void *) &AddRegSection, NULL); + + return &AddRegSectionList; +} + + +// --------------- GetCopyFilesSectionList ---------- +// Get generic list whose data items are pointers to +// CInfCopyFilesSection objects +const CInfList * +CInfInstallSection::GetCopyFilesSectionList (void) +const +{ + // TODO: unimplemented + + static const CInfCopyFilesSection CopyFilesSection; + static const CInfList CopyFilesSectionList((void *) &CopyFilesSection, NULL); + + return &CopyFilesSectionList; +} + + +// --------------- GetNoResDupIDList ---------- +// Get generic list whose data items are pointers to +// InfSymbol objects representing the Rank0 IDs in the corresponding +// NoResDup section. +const CInfList * +CInfInstallSection::GetNoResDupIDList (void) +const +{ + // TODO: unimplemented + + static const CInfList NoResDupIDList + ( + (void *) gSymtab.Lookup(TEXT("NORESDUP-ID"), TRUE), + NULL + ); + + return &NoResDupIDList; +} + + +// --------------- GetPosDupIDList ---------- +// Get generic list whose data items are pointers to +// InfSymbol objects representing the Rank0 IDs in the corresponding +// PosDup section. +// const CInfList * GetPosDupIDList (void) const; +const CInfList * +CInfInstallSection::GetPosDupIDList (void) +const +{ + // TODO: unimplemented + static const CInfList PosDupIDList1 + ( + (void *) gSymtab.Lookup(TEXT("POSDUP-ID1"), TRUE), + NULL + ); + static const CInfList PosDupIDList + ( + (void *) gSymtab.Lookup(TEXT("POSDUP-ID0"), TRUE), + &PosDupIDList1 + ); + + return &PosDupIDList; +} + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfAddRegSection +/////////////////////////////////////////////////////////////////////////// + +// Sample AddReg section: +// [All] +// HKR,,FriendlyDriver,,Unimodem.vxd +// HKR,,DevLoader,,*vcomm +// HKR,,ConfigDialog,,modemui.dll +// HKR,,EnumPropPages,,"modemui.dll,EnumPropPages" +// HKR,,PortSubClass,1,02 +// HKR, Init, 1,, "AT<cr>" +// HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, ...etc. +// HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00, ...etc. + + +// Get first addreg entry +const CInfAddRegEntry * +CInfAddRegSection::GetFirstAddRegEntry (void) +const +{ + // TODO -- fake static entries + static const CInfAddRegEntry FirstAddRegEntry; + return &FirstAddRegEntry; +} + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfCopyFilesSection +/////////////////////////////////////////////////////////////////////////// + +// Sample DestinationDirs section: +// [DestinationDirs] +// Register.Copy = 17 ;LDID_INF +// VV_Sys = 11 +// VV_Sock_Sys = 11 ;LDID_SYS \Windows\system dir +// VV_Sock_Win = 10 ;LDID_WIN \Windows dir +// VV_App = 10 +// VV_Help = 18 ;LDID_HELP + +// Sample Copyfiles section: +// [VV_Sys] +// fte.dll +// vvexe32.exe +// wsvv.vxd + + +// --------------- GetFirstCopyFilesEntry ---------- +// Get first copyfiles entry +const CInfCopyFilesEntry * +CInfCopyFilesSection::GetFirstCopyFilesEntry (void) const +{ + // TODO -- fake static entries + static const CInfCopyFilesEntry FirstCopyFilesEntry; + return &FirstCopyFilesEntry; +} + + +// Cleanup by freeing any allocated resources. +// TODO: unimplemented +void CInfFile::mfn_Cleanup (void) +{ + mfn_EnterCrit(); + + // TODO: ASSERT(state == loading or state == unloading) + + // Unload and free version + if (m_pVersion) + { + // override const * + CInfVersionSection *pVS = (CInfVersionSection *) m_pVersion; + pVS->Unload(); + delete pVS; + m_pVersion=NULL; + } + + + // Unload and free Manufacturerlist. + if (m_pFirstManuE) + { + sfn_DeleteManufacturerList(m_pFirstManuE); + m_pFirstManuE=NULL; + } + + if (m_pIniFile) + { + m_pIniFile->Unload(); + delete (CIniFile *) m_pIniFile; // override const * + m_pIniFile=NULL; + } + + m_pSymFileName=NULL; + + mfn_LeaveCrit(); +} + +// static helper function... +const CInfManufacturerEntry * +CInfFile::sfn_CreateManufacturerList (CIniFile *pIniFile) +{ + CInfManufacturerEntry * pManuE = NULL; + const CIniFileSection *pISStr = pIniFile->LookupSection(lpctszStrings); + const CIniFileSection *pISManL = + pIniFile->LookupSection(lpctszManufacturer); + CIniFileEntry *pIE = NULL; + + if (!pISManL || !pISStr) goto end; + + pIE = pISManL->GetFirstEntry(); + if (!pIE) goto end; + + // Iterate through manufacturers, building manufacturer entries... + do + { + pManuE = new CInfManufacturerEntry(pManuE); + if (!pManuE || !pManuE->Load(pIniFile, pISStr, pIE)) + { + // TODO: warning; for now break out. + if (pManuE) + { + // TODO delete previously-created elements of the list as well! + // (Or leave them there and deal with a partial list). + delete pManuE; + pManuE = NULL; + } + goto end; + } + + } while(pIE->BecomeNext()); + + // Reverse list + CInfManufacturerEntry::ReverseList(&pManuE); + +end: + if (pIE) {pIE->Release(); pIE=NULL;} + if (pISManL) { pISManL->Release(); pISManL=NULL; } + if (pISStr) { pISStr->Release(); pISStr=NULL; } + + return pManuE; +} + +// Static helper function +void +CInfFile::sfn_DeleteManufacturerList +( + const CInfManufacturerEntry * pManuEFirst +) +{ + // TODO +} + +// --------------- Load ------------------ +BOOL +CInfManufacturerEntry::Load +( + const CIniFile *pIniFile, + const CIniFileSection *pISStr, + const CIniFileEntry *pIE +) +{ + BOOL fRet = FALSE; + const CInfSymbol *pSymLHS = pIE->GetLHS(); + const CInfSymbol *pSymManuName = NULL; + // TODO need to make manu-section case insensitive! + // Basically pSymManuSection should be created based on an upper-case'd + // version of pIE->GetRHS(). + const CInfSymbol *pSymManuSection = pIE->GetRHS(); + CInfManufacturerSection *pManuS = NULL; + BOOL fNew=FALSE; + + ASSERT(!m_pManuS); + ASSERT(!m_pSymManuName); + + // Get manufacturer name ... + if (pSymLHS) + { + const CIniFileEntry *pIEStr = pISStr->LookupEntry(pSymLHS->GetText()); + if (pIEStr) + { + pSymManuName = pIE->GetRHS(); + pIEStr->Release();pIEStr=NULL; + } + } + + pManuS=NULL; + + // Look up/create manufacturer section + { + void **ppv=NULL; + BOOL fExists=FALSE; + BOOL fRet = pSymManuSection->GetOrCreatePropLoc( + PROP_INFSECTION_MANUFACTURER, + &ppv, + &fExists); + if (fRet) + { + if (fExists) + { + // This section already exists... + pManuS = (CInfManufacturerSection *) *ppv; + ASSERT(pManuS->Validate()); + } + else + { + // This section doesn't exist -- create it. + pManuS = new CInfManufacturerSection(); + if (pManuS) + { + if (pManuS->Load(pIniFile, pISStr, pSymManuSection)) + { + // set the property data + *ppv = (void *) pManuS; + } + else + { + delete pManuS; + pManuS=NULL; + pSymManuSection->DelProp(PROP_INFSECTION_MANUFACTURER); + } + } + } + } + } + + if (pManuS) + { + m_pManuS = pManuS; + m_pSymManuName = pSymManuName; + fRet = TRUE; + } + + if (!fRet) + { + mfn_Cleanup(); + } + + return fRet; + +} + +// --------------- Unload ------------------ +void CInfManufacturerEntry::Unload(void) +// TODO +{ + m_pManuS = NULL; + m_pSymManuName = NULL; + // TODO: decrement ref count for the section and delete it and delprop + // it when done. + mfn_Cleanup(); + +} + + +// --------------- Cleanup ------------------ +// Cleanup by freeing any allocated resources. +void CInfManufacturerEntry::mfn_Cleanup (void) +{ + m_pManuS = NULL; + m_pSymManuName = NULL; +} + + +// --------------- Load ------------------ +BOOL +CInfManufacturerSection::Load +( + const CIniFile *pIniFile, + const CIniFileSection *pISStr, + const CInfSymbol *pSymManuSection +) +{ + BOOL fRet = FALSE; + const CIniFileSection *pIS = + pIniFile->LookupSection(pSymManuSection->GetText()); + + ASSERT(!m_pSymSectionName); + ASSERT(!m_pFirstModelE); + ASSERT(m_eObjSig==eOBJSIG_CInfManufacturerSection); + + if (!pIS) + { + goto end; + } + + m_pSymSectionName = pSymManuSection; + + // Create and load model list + m_pFirstModelE = sfn_CreateModelList(pIniFile, pISStr, pIS); + + if (!m_pFirstModelE) + { + goto end; + } + + fRet = TRUE; + +end: + + if (!fRet) + { + mfn_Cleanup(); + } + + return fRet; +} + +// --------------- Unload ------------------ +void CInfManufacturerSection::Unload(void) +{ + mfn_Cleanup(); +} + + +// --------------- Cleanup ------------------ +// Cleanup by freeing any allocated resources. +void CInfManufacturerSection::mfn_Cleanup (void) +// TODO +{ + m_pSymSectionName = NULL; + m_pFirstModelE = NULL; +} + + +// Static helper function to create the list of models for this manufacturer +const CInfModelEntry * +CInfManufacturerSection::sfn_CreateModelList +( + const CIniFile *pIniFile, + const CIniFileSection *pISStr, + const CIniFileSection *pISManuS +) +{ + CInfModelEntry * pModelE = NULL; + CIniFileEntry *pIE = NULL; + + if (!pISManuS || !pISStr) goto end; + + pIE = pISManuS->GetFirstEntry(); + if (!pIE) goto end; + + // Iterate through models, building model entries... + do + { + pModelE = new CInfModelEntry(pModelE); + if (!pModelE || !pModelE->Load(pIniFile, pISStr, pIE)) + { + // TODO: warning; for now break out. + if (pModelE) + { + // TODO delete previously-created elements of the list as well! + // (Or leave them there and deal with a partial list). + delete pModelE; + pModelE = NULL; + } + goto end; + } + + } while(pIE->BecomeNext()); + + // Reverse list + CInfModelEntry::ReverseList(&pModelE); + +end: + if (pIE) {pIE->Release(); pIE=NULL;} + //if (pISManL) { pISManL->Release(); pISManL=NULL; } + //if (pISStr) { pISStr->Release(); pISStr=NULL; } + + return pModelE; +} + + +// --------------- Cleanup ------------------ +// Cleanup by freeing any allocated resources. +void CInfModelEntry::mfn_Cleanup (void) +// TODO +{ +} + + +// --------------- Load ------------------ +BOOL +CInfModelEntry::Load +( + const CIniFile *pIniFile, + const CIniFileSection *pISStr, + const CIniFileEntry *pIE +) +// TODO +{ + return TRUE; +#if 0 + BOOL fRet = FALSE; + const CInfSymbol *pSymLHS = pIE->GetLHS(); + const CInfSymbol *pSymManuName = NULL; + // TODO need to make manu-section case insensitive! + // Basically pSymManuSection should be created based on an upper-case'd + // version of pIE->GetRHS(). + const CInfSymbol *pSymManuSection = pIE->GetRHS(); + CInfManufacturerSection *pManuS = NULL; + BOOL fNew=FALSE; + + ASSERT(!m_pManuS); + ASSERT(!m_pSymManuName); + + // Get manufacturer name ... + if (pSymLHS) + { + const CIniFileEntry *pIEStr = pISStr->LookupEntry(pSymLHS->GetText()); + if (pIEStr) + { + pSymManuName = pIE->GetRHS(); + pIEStr->Release();pIEStr=NULL; + } + } + + pManuS=NULL; + + // Look up/create manufacturer section + { + void **ppv=NULL; + BOOL fExists=FALSE; + BOOL fRet = pSymManuSection->GetOrCreatePropLoc( + PROP_INFSECTION_MANUFACTURER, + &ppv, + &fExists); + if (fRet) + { + if (fExists) + { + // This section already exists... + pManuS = (CInfManufacturerSection *) *ppv; + ASSERT(pManuS->Validate()); + } + else + { + // This section doesn't exist -- create it. + pManuS = new CInfManufacturerSection(); + if (pManuS) + { + if (pManuS->Load(pIniFile, pISStr, pSymManuSection)) + { + // set the property data + *ppv = (void *) pManuS; + } + else + { + delete pManuS; + pManuS=NULL; + pSymManuSection->DelProp(PROP_INFSECTION_MANUFACTURER); + } + } + } + } + } + + if (pManuS) + { + m_pManuS = pManuS; + m_pSymManuName = pSymManuName; + fRet = TRUE; + } + + if (!fRet) + { + mfn_Cleanup(); + } + + return fRet; +#endif + +} + +// --------------- Unload ------------------ +void CInfModelEntry::Unload(void) +// TODO +{ + mfn_Cleanup(); +} diff --git a/private/unimodem/new/mic/inf.h b/private/unimodem/new/mic/inf.h new file mode 100644 index 000000000..32e1ae85a --- /dev/null +++ b/private/unimodem/new/mic/inf.h @@ -0,0 +1,998 @@ +// // Copyright (c) 1996 Microsoft Corporation +// +// +// INF.H -- Header for Classes: +// +// CInfFile +// +// CInfVersionSection +// CInfManufacturerSection +// CInfInstallSection +// CInfAddRegSection +// CInfCopyFilesSection +// +// CInfManufacturerEntry +// CInfModelEntry +// CInfCopyFilesEntry +// CInfAddRegEntry +// +// CInfModelEntryAux +// +// +// History: +// 05/21/96 JosephJ Created +// +// + + +class CInfVersionSection; +class CInfManufacturerEntry; +class CInfManufacturerSection; +class CInfModelEntry; +class CInfInstallSection; +class CInfAddRegSection; +class CInfAddRegEntry; +class CInfCopyFilesEntry; +class CInfCopyFilesSection; +class CInfModelEntryAux; + + +// Control flags +const DWORD dwCF_EXCLUDE_FROM_SELECT = 0x1<<0; + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfFile +/////////////////////////////////////////////////////////////////////////// + +// Represents an inf (device information) file -- which is a special kind +// of INI file. + + +class CInfFile +{ + +public: + + CInfFile(void); + ~CInfFile(); + + //-------------- Load ------------------ + // Loads the specified file. (Obviously) only one file can be loaded at + // a time. + BOOL Load (const TCHAR rgchPathname[]); + + //-------------- Unload ------------------ + // Unloads a previously loaded file. If there are open sessions to this + // object, Unload returns a handle which will be signalled when all + // sessions are closed. New sessions will not be allowed after this + // function returns. The call should free the handle. + // See CloseSession for more info. + HANDLE Unload (void); + + //-------------- OpenSession ------------------ + // Open a session to this object. The object will not be unloaded until + // this session is closed. 0 indicates failure. + // TODO: unimplemented + const void * OpenSession (void) const {return (const void *) 1;} + + //-------------- CloseSession ------------------ + // Close the specified session to this object. + // If the reference count goes to zero and we're marked for unloading, + // the object is unloaded as well. + // TODO: unimplemented + void CloseSession (const void *) const {} + + // --------------- Dump ------------------ + // Dump state + void Dump(void) const; + + // --------------- GetFileName ------------------ + // Get Version info + const CInfSymbol * GetFileName(void) const + { + return m_pSymFileName; + } + + // --------------- GetVersion ------------------ + // Get Version info + const CInfVersionSection * GetVersion(void) const + { + return m_pVersion; + } + + // --------------- GetFirstManufacturerEntry ------ + // Get first manufacturer entry under the manufacturer section + const CInfManufacturerEntry * GetFirstManufacturerEntry(void) const + { + return m_pFirstManuE; + } + + #if (TODO) + // --------------- GetFirstStringEntry -------------- + // Get first string entry under the strings section + const CInfStringEntry * GetFirstStringEntry(void) const; + DestinationDirs + + // --------------- LookupManufacturerSection ---------- + // Lookup and return the manufacturer section with the specified name. + const CInfManufacturerSection * + LookupInstallSection(const CInfSymbol *pSymManSection) + const; + + // --------------- LookupInstallSection ---------- + // Lookup and return the install section with the specified name. + const CInfInstallSection * LookupInstallSection(const TCHAR pchName[])const; + + // --------------- LookupAddRegSection -------------- + // Lookup and return the addreg section with the specifed name. + const CInfAddRegSection * LookupAddRegSection(const TCHAR pchName[]) const; + + // --------------- LookupString -------------- + // Lookup and return the specified string + const CInfSymbol * LookupString(const TCHAR pchName[]) const; +#endif // TODO + + +private: + + // ============= PRIVATE MEMBER FUNCTIONS =============== + void mfn_EnterCrit(void) const {m_sync.EnterCrit();} + void mfn_LeaveCrit(void) const {m_sync.LeaveCrit();} + void mfn_Cleanup(void); + + // ============= PRIVATE STATIC HELPER FUNCTIONS ======== + + static + const CInfManufacturerEntry * + sfn_CreateManufacturerList(CIniFile *); + + static + void + sfn_DeleteManufacturerList(const CInfManufacturerEntry *); + + // ======================= DATA ======================== + const CInfVersionSection * m_pVersion; + const CInfManufacturerEntry * m_pFirstManuE; + const CInfSymbol * m_pSymFileName; + CSync m_sync; + + CIniFile *m_pIniFile; + +}; + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfVersionSection +/////////////////////////////////////////////////////////////////////////// + +// Sample Version section: +// [Version] +// LayoutFile=layout.inf +// Signature="$CHICAGO$" +// Class=Modem +// ClassGUID={4D36E96D-E325-11CE-BFC1-08002BE10318} +// Provider=%MS% + +class CInfVersionSection +{ + +public: + + CInfVersionSection(void) + { + m_pSymLayoutFile = NULL; + m_pSymSignature = NULL; + m_pSymClass = NULL;; + m_pSymClassGUID = NULL; + m_pSymProvider = NULL; + m_dwChecksum = 0; + } + + ~CInfVersionSection() + { + } + + // --------------- Dump ------------------ + // Dump state + void Dump(void) const; + + // --------------- Checksum ------------------ + // Return checksum of contents + DWORD Checksum(void) const + { + return m_dwChecksum; + } + + // --------------- GetLayoutFile ------------------ + const CInfSymbol * GetLayoutFile (void) const + { + return m_pSymLayoutFile; + } + + // --------------- GetSignature ------------------ + const CInfSymbol * GetSignature (void) const + { + return m_pSymSignature; + } + + // --------------- GetClass ------------------ + const CInfSymbol * GetClass (void) const + { + return m_pSymClass; + } + + // --------------- GetClassGUID ------------------ + const CInfSymbol * GetClassGUID (void) const + { + return m_pSymClassGUID; + } + + // --------------- GetProvider ------------------ + const CInfSymbol * GetProvider (void) const + { + return m_pSymProvider; + } + + +private: + + friend class CInfFile; + + BOOL Load(const CIniFile *); + void Unload(void); + + void mfn_Cleanup(void); + + const CInfSymbol * m_pSymLayoutFile; + const CInfSymbol * m_pSymSignature; + const CInfSymbol * m_pSymClass; + const CInfSymbol * m_pSymClassGUID; + const CInfSymbol * m_pSymProvider; + DWORD m_dwChecksum; + + +}; + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfManufacturerEntry +/////////////////////////////////////////////////////////////////////////// + +// Sample Manufacturer list section: +// [Manufacturer] +// %Generic% = Generic +// %MagicRam% = MagicRam +// .. + +class CInfManufacturerEntry: private CInfList +{ + +public: + + CInfManufacturerEntry(const CInfManufacturerEntry *pNext) + : CInfList(NULL, pNext), + m_pManuS(NULL), + m_pSymManuName(NULL) + {} + + ~CInfManufacturerEntry() {} + + // --------------- Dump ------------------ + // Dump state + void Dump(void) const; + + // --------------- GetManufacturerSection ---------- + // Get manufacturer section + const CInfManufacturerSection * GetManufacturerSection (void) const + { + return m_pManuS; + } + + // --------------- GetName ------------------ + // Get manufacturer name (actual manufacturer name, not %xxxx%.) + const CInfSymbol * GetName (void) const + { + return m_pSymManuName; + } + + // --------------- Next ------------------ + // Get next Entry. NULL if no more... + const CInfManufacturerEntry * Next(void) const + { + return (const CInfManufacturerEntry *) CInfList::Next(); + } + + // --------------- Load ------------------ + BOOL + Load( + const CIniFile *pIniFile, + const CIniFileSection *pISStr, + const CIniFileEntry *pIE + ); + + // --------------- Unload ------------------ + void Unload(void); + + //-------------- ReverseList ------------------ + // Reverses the implicit list of manufacturer entries + static void ReverseList(CInfManufacturerEntry **ppManuE) + { + CInfList::ReverseList((const CInfList **) ppManuE); + } + +private: + + void mfn_Cleanup(void); + + const CInfManufacturerSection *m_pManuS; + const CInfSymbol *m_pSymManuName; + +}; + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfManufacturerSection +/////////////////////////////////////////////////////////////////////////// + +// Sample Manufacturer section: +// [Generic] +// %Gen% = Gen, MDMGEN +// %Gen3% = Gen3, MDMGEN3 +// %Gen12% = Gen12, MDMGEN12 +// %Gen24% = Gen24, MDMGEN24 +// ... + +class CInfManufacturerSection +{ + +public: + + CInfManufacturerSection(void) + { + m_eObjSig=eOBJSIG_CInfManufacturerSection; + m_pSymSectionName = NULL; + m_pFirstModelE = NULL; + } + + ~CInfManufacturerSection() + //TODO + { + m_eObjSig = eOBJSIG_INVALID; + } + + // --------------- Dump ------------------ + // Dump state + void Dump(void) const; + + // --------------- GetFirstModelEntry -------------- + // Get first model entry + const CInfModelEntry * GetFirstModelEntry (void) const; + + // --------------- GetSectionName ------------------ + // Get section name + const CInfSymbol * GetSectionName (void) const + { + return m_pSymSectionName; + } + + // --------------- Load ------------------ + BOOL + Load + ( + const CIniFile *pIniFile, + const CIniFileSection *pISStr, + const CInfSymbol *pSymManuSection + ); + + // --------------- Unload ------------------ + void Unload(void); + + // --------------- Validate ------------------ + BOOL Validate(void) const + { + // TODO: can place in try-except clause... + return this && m_eObjSig==eOBJSIG_CInfManufacturerSection; + } + + #if (TODO) + // --------------- GetName ------------------ + // Get manufacturer name (actual manufacturer name), + const CInfSymbol * GetName (void) const; + #endif + +private: + + void mfn_Cleanup(void); + + // Static helper function + const CInfModelEntry * + sfn_CreateModelList( + const CIniFile *pIniFile, + const CIniFileSection *pISStr, + const CIniFileSection *pISManuS + ); + + const CInfSymbol *m_pSymSectionName; + const CInfModelEntry * m_pFirstModelE; + eOBJSIG m_eObjSig; +}; + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfModelEntry +/////////////////////////////////////////////////////////////////////////// + +// Sample Model entry: +// %Gen% = Gen, MDMGEN + +class CInfModelEntry : private CInfList +{ + +public: + + CInfModelEntry(const CInfModelEntry *pNext) + : CInfList(NULL, pNext) + { + /*TODO*/ + m_dwControlFlags_All = dwCF_EXCLUDE_FROM_SELECT; + m_dwControlFlags_NT_All = dwCF_EXCLUDE_FROM_SELECT; + m_dwControlFlags_NT_Alpha = dwCF_EXCLUDE_FROM_SELECT; + m_dwControlFlags_NT_PPC = dwCF_EXCLUDE_FROM_SELECT; + m_dwControlFlags_NT_Mips = dwCF_EXCLUDE_FROM_SELECT; + } + + ~CInfModelEntry() {/*TODO*/} + + // --------------- Dump ------------------ + // Dump state + void Dump(void) const; + + + // --------------- Load ------------------ + BOOL + Load( + const CIniFile *pIniFile, + const CIniFileSection *pISStr, + const CIniFileEntry *pIE + ); + + // --------------- Unload ------------------ + void Unload(void); + + // --------------- GetNext ------------------ + // Get next Entry. NULL if no more... + const CInfModelEntry * Next(void) const + { + return (const CInfModelEntry *) CInfList::Next(); + } + + //-------------- ReverseList ------------------ + // Reverses the implicit list of model entries + static void ReverseList(CInfModelEntry **ppModelE) + { + CInfList::ReverseList((const CInfList **) ppModelE); + } + + // --------------- GetLHS ------------------ + // Get next Entry. NULL if no more... + const CInfSymbol * GetLHS(void) const + { + // TODO + return gSymtab.Lookup(TEXT("%bongo101%"), TRUE); + } + + // --------------- GetInstallSection -------------- + // Get install section + const CInfInstallSection * GetInstallSection (void) const + { + return m_pInstallSection; + } + + // --------------- GetName ------------------ + // Get model name (actual model name, not %xxx%) + const CInfSymbol * GetName (void) const + { + // TODO + //return m_pSymName; + return gSymtab.Lookup(TEXT("Christy Brinkly"), TRUE); + } + + // --------------- GetRank0ID ------------------ + // Rank-0 ID + const CInfSymbol * GetRank0ID (void) const + { + // TODO + //return m_pSymRank0ID; + // TODO + return gSymtab.Lookup(TEXT("RANK-0-ID"), TRUE); + + } + + // --------------- GetRank1ID ------------------ + // Rank-1 ID + const CInfSymbol * GetRank1ID (void) const + { + // TODO + // return m_pSymRank1ID; + return gSymtab.Lookup(TEXT("RANK-1-ID"), TRUE); + } + + // --------------- GetRank2ID ------------------ + // Rank-2 ID + const CInfSymbol * GetRank2ID (void) const + { + // TODO + // return m_pSymRank2ID; + return gSymtab.Lookup(TEXT("RANK-2-ID"), TRUE); + } + + // --------------- GetControlFlags ----------------- + // Return install flags (one or more dwCF_* flags) for the specified + // platform. + DWORD GetControlFlags(ePLATFORM ePlat) const + { + DWORD dwRet = 0; + + switch(ePlat) + { + case ePLAT_ALL: + break; + case ePLAT_NT_ALL: + dwRet = m_dwControlFlags_NT_All; + break; + + case ePLAT_NT_ALPHA: + dwRet = m_dwControlFlags_NT_Alpha; + break; + + case ePLAT_NT_PPC: + dwRet = m_dwControlFlags_NT_PPC; + break; + + case ePLAT_NT_MIPS: + dwRet = m_dwControlFlags_NT_Mips; + break; + + default: + break; + } + + return dwRet; + } + +private: + + void mfn_Cleanup(void); + + const CInfInstallSection * m_pInstallSection; + // Pointer to install section + + const CInfSymbol * m_pSymName; + // Device name + + const CInfSymbol * m_pSymRank0ID; + // Rank-0 ID (primary device ID) + + const CInfSymbol * m_pSymRank1ID; + // Rank-1 ID (compatible device ID) + + const CInfSymbol * m_pSymRank2ID; + // Rank-2 ID (Rank 2 ID) + + DWORD m_dwControlFlags_All; + // Install flags (eg exclude from select, needs reboot, etc) that + // apply to all platforms. + + DWORD m_dwControlFlags_NT_All; + // Install flags (eg exclude from select, needs reboot, etc) that + // apply to all NT platforms. + + DWORD m_dwControlFlags_NT_Alpha; + // Install flags (eg exclude from select, needs reboot, etc) that + // apply to NT Alpha platform. + + DWORD m_dwControlFlags_NT_PPC; + // Install flags (eg exclude from select, needs reboot, etc) that + // apply to NT PPC platform. + + DWORD m_dwControlFlags_NT_Mips; + // Install flags (eg exclude from select, needs reboot, etc) that + // apply to NT MIPS platform. +}; + + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfInstallSection +/////////////////////////////////////////////////////////////////////////// + +// Sample Install section: +// [Modem29] +// AddReg=All, MfgAddReg, ROCK_VOICE_ALL, ROCK_VOICE_SERWAVE, INTERNAL +// CopyFiles = VV_Sys, VV_Sock_Sys, VV_App, VV_Help +// UpdateInis = VView.Inis +// Uninstall = VoiceView_remove +// +// Also contains info from the related PosDup and NoResDup sections: +// +// [Modem12.PosDup] +// *PNP0500 +// +// [Modem6.NoResDup] +// UNIMODEMCC646872,UNIMODEMA4970248,UNIMODEMB6071C15 +// + +class CInfInstallSection +{ + +public: + + CInfInstallSection(void); + ~CInfInstallSection(); + + // --------------- Dump ------------------ + // Dump state + void Dump(void) const; + + // --------------- GetAddRegSectionList ---------- + // Get generic list whose data items are pointers to + // CInfAddRegSection objects + const CInfList * GetAddRegSectionList (void) const; + + // --------------- GetCopyFilesSectionList ---------- + // Get generic list whose data items are pointers to + // CInfCopyFilesSection objects + const CInfList * GetCopyFilesSectionList (void) const; + + // --------------- GetNoResDupIDList ---------- + // Get generic list whose data items are pointers to + // InfSymbol objects representing the Rank0 IDs in the corresponding + // NoResDup section. + const CInfList * GetNoResDupIDList (void) const; + + // --------------- GetPosDupIDList ---------- + // Get generic list whose data items are pointers to + // InfSymbol objects representing the Rank0 IDs in the corresponding + // PosDup section. + const CInfList * GetPosDupIDList (void) const; + + #if (TODO) + + // --------------- GetUpdateInisSectionList ------ + // Get generic list whose data items are pointers to + // CInfUpdateInisSection objects + const CInfList * GetUpdateInisSectionList (void) const; + + // --------------- GetUninstallSectionList ------ + // Get generic list whose data items are pointers to + // CInfUninstallSection objects + const CInfList * GetUninstallSectionList (void) const; + + // TODO: Also, treat as errors any sections which we don't understand or + // don't expect in a modem inf file or we don't support in the compiler: + // eg rename sections, and other fancy INF file constructs. + + #endif // (TODO) + +private: + + void mfn_Cleanup(void); +}; + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfAddRegSection +/////////////////////////////////////////////////////////////////////////// + +// Sample AddReg section: +// [All] +// HKR,,FriendlyDriver,,Unimodem.vxd +// HKR,,DevLoader,,*vcomm +// HKR,,ConfigDialog,,modemui.dll +// HKR,,EnumPropPages,,"modemui.dll,EnumPropPages" +// HKR,,PortSubClass,1,02 +// HKR, Init, 1,, "AT<cr>" +// HKR, Responses, "<cr><lf>OK<cr><lf>", 1, 00, 00, 00,00,00,00, ...etc. +// HKR, Responses, "<cr><lf>ERROR<cr><lf>", 1, 03, 00, 00,00,00, ...etc. + +class CInfAddRegSection +{ + +public: + + CInfAddRegSection(void) {/*TODO*/} + ~CInfAddRegSection() {/*TODO*/} + + // --------------- Dump ------------------ + // Dump state + void + Dump(void) + const; + + // --------------- GetFirstAddRegEntry -------------- + // Get first addreg entry + const + CInfAddRegEntry * + GetFirstAddRegEntry (void) + const; + +private: + + void mfn_Cleanup(void); +}; + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfAddRegEntry +/////////////////////////////////////////////////////////////////////////// + +// Sample AddReg entry: +// HKR, Init, 1,, "AT<cr>" + +class CInfAddRegEntry +{ + +public: + + CInfAddRegEntry(void) + { + // TODO -- faked out + + m_pSymRegRoot = gSymtab.Lookup(TEXT("HKR"), TRUE); + m_pSymSubKey = gSymtab.Lookup(TEXT("Init"), TRUE); + m_pSymValueName = gSymtab.Lookup(TEXT("1"), TRUE); + m_dwFlag = MAXDWORD; + m_pSymValue = gSymtab.Lookup(TEXT("\"AT<cr>\""), TRUE); + m_dwChecksum = 1000; + } + + ~CInfAddRegEntry() {/*TODO*/} + + // --------------- Dump ------------------ + // Dump state + void + Dump(void) + const + { + // TODO: unimplemented + printf(" HKR, Init, 1,, \"AT<cr>\"\n"); + } + + // --------------- Checksum ------------------ + // Compute and return checksum of contents + DWORD + Checksum(void) + const + { + return m_dwChecksum; + } + + // --------------- Next ------------------ + // Get next Entry. NULL if no more... + const CInfAddRegEntry * + Next(void) + const + { + // TODO: unimplemented + return NULL; + } + + // --------------- GetRegRoot ------------------ + // Get reg-root-string key (HKR, etc) + const CInfSymbol * + GetRegRoot (void) + const + { + return m_pSymRegRoot; + } + + // --------------- GetSubKey ------------------ + // Get sub key, NULL if none. + const CInfSymbol * + GetSubKey (void) + const + { + return m_pSymSubKey; + } + + // --------------- GetValueName ------------------ + // Get value-name, NULL if none. + const CInfSymbol * + GetValueName (void) + const + { + return m_pSymValueName; + } + + // --------------- GetFlag ------------------ + // Get flag-name, MAXDWORD if none. + DWORD + GetFlag (void) + const + { + return m_dwFlag; + } + + // --------------- GetValue ------------------ + // Get value-name, NULL if none. + // For binary data, this represents a normalized version of the + // string specified in the inf file: it has the format: "xxyxxyxx.." + // where xx is 2-digit hex representation of a byte and y is the space + // character (' '). For ASCII data, the value is the ascii string without + // the enclosing quotes. Extending '\' characters are processed. + const CInfSymbol * + GetValue (void) + const + { + return m_pSymValue; + } + + #if (TODO) + ... more stuff + #endif + +private: + + void mfn_Cleanup(void); + + const CInfSymbol * m_pSymRegRoot; + const CInfSymbol * m_pSymSubKey; + const CInfSymbol * m_pSymValueName; + const CInfSymbol * m_pSymValue; + DWORD m_dwFlag; + DWORD m_dwChecksum; +}; + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfCopyFilesSection +/////////////////////////////////////////////////////////////////////////// + +// Sample DestinationDirs section: +// [DestinationDirs] +// Register.Copy = 17 ;LDID_INF +// VV_Sys = 11 +// VV_Sock_Sys = 11 ;LDID_SYS \Windows\system dir +// VV_Sock_Win = 10 ;LDID_WIN \Windows dir +// VV_App = 10 +// VV_Help = 18 ;LDID_HELP + +// Sample Copyfiles section: +// [VV_Sys] +// fte.dll +// vvexe32.exe +// wsvv.vxd + +// Note: each CInfCopyFilesEntry object keeps a pointer to its destination +// directory (all the entries for a particular section will have the same +// destination dir, because in the inf, a destination directory is associated +// with an entire section. + +class CInfCopyFilesSection +{ + +public: + + // --------------- Dump ------------------ + // Dump state + void Dump(void) const; + + // --------------- GetFirstCopyFilesEntry ---------- + // Get first copyfiles entry + const CInfCopyFilesEntry * GetFirstCopyFilesEntry (void) const; + + #if (TODO) + // Following reflect the Copyfiles.NT* extensions. We need to keep + // this information along with the section. + enum {PROC_X86, PROC_MIPS, PROC_ALPHA, PROC_PPC} eProcessorType; + enum {PLAT_NT, , PLAT_WIN9X} ePlatformType; + #endif // (TODO) + + // TODO: remove following friend declaration once + // CInfInstallSection::GetCopyFilesList + // is properly implemented (it currently needs to access this + // class's constructor. + // Also, move ~CInfCopyFIlesEntry to protected when done. + friend class CInfInstallSection; + ~CInfCopyFilesSection() {/*TODO*/} + +protected: + + CInfCopyFilesSection(void) {/*TODO*/} + + +private: + + void mfn_Cleanup(void); + +}; + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfCopyFilesEntry +/////////////////////////////////////////////////////////////////////////// + +// Sample CopyFiles entry: +// fte.dll +// Note: each CInfCopyFilesEntry object keeps a pointer to its destination +// directory. +// TODO: keep information about platform & processor as well (see TODO +// notes under CInfCopyFilesSection). + +class CInfCopyFilesEntry +{ + +public: + + // --------------- Dump ------------------ + // Dump state + void Dump(void) const + { + // TODO: unimplemented + printf(" fte.dll ; goes to 11\n"); + } + + // --------------- Checksum ------------------ + // Compute and return checksum of contents + // Compute and return checksum of contents + DWORD + Checksum(void) + const + { + return m_dwChecksum; + } + + // --------------- GetNext ------------------ + // Get next Entry. NULL if no more... + const CInfCopyFilesEntry * Next(void) const + { + // TODO: unimplemented + return NULL; + } + + // --------------- GetFileName ------------------ + // Get file name to be copied. + const CInfSymbol * GetFileName (void) const; + + // --------------- GetDestDir ------------------ + // Get file name to be copied. + const CInfSymbol * GetDestDir (void) const; + + // TODO: remove following friend declaration once + // CInfCopyFilesSection::GetFirstCopyFilesEntry + // is properly implemented (it currently needs to access this + // class's constructor. + // Also, move ~CInfCopyFIlesEntry to protected when done. + friend class CInfCopyFilesSection; + ~CInfCopyFilesEntry() {/*TODO*/} + +protected: + + CInfCopyFilesEntry(void) + { + // TODO -- faked out + m_dwChecksum = 1001; + } + +private: + + void mfn_Cleanup(void); + + DWORD m_dwChecksum; + +}; + +#if 0 +pInf->Load("mdmgen.inf"); +pManuf = pInf->GetFirstManufacturerEntry(); +for(;pManuf; pManuf = pManuf->Next()) +{ + pNewDevice = new ModemDevice(pDevice); + pDevice->Load(pInf, pManuf); + pDevice->Dump(); + pDevice = pNewDevice; +} +pInf->Unload(" +NewSession() +FreeSession() +#endif diff --git a/private/unimodem/new/mic/ini.cpp b/private/unimodem/new/mic/ini.cpp new file mode 100644 index 000000000..617471ec9 --- /dev/null +++ b/private/unimodem/new/mic/ini.cpp @@ -0,0 +1,153 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// INI.CPP -- Implemtation for Classes: +// CIniFile +// +// History: +// 05/22/96 JosephJ Created +// +// +#include "common.h" +#include "ini.h" + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CIniFile +/////////////////////////////////////////////////////////////////////////// + + +CIniFile::CIniFile(void) +{ +} + + +CIniFile::~CIniFile() +{ + mfn_EnterCrit(); + + // Free resources +} + + +//-------------- Load ------------------ +// Loads the specified file. (Obviously) only one file can be loaded at +// a time. +// TODO: unimplemented +BOOL CIniFile::Load (const TCHAR rgchPathname[]) +{ + BOOL fRet = FALSE; + + //mfn_EnterCrit(); + + fRet = TRUE; + +// end: + + if (!fRet) + { + //mfn_Cleanup(); + } + + //mfn_LeaveCrit(); + + return fRet; +} + + +//-------------- Unload ------------------ +// Unloads a previously loaded file. If there are open sessions to this +// object, Unload returns a handle which will be signalled when all +// sessions are closed. New sessions will not be allowed after this +// function returns. The call should free the handle. +// TODO: unimplemented +HANDLE CIniFile::Unload (void) +{ + HANDLE hUnload = NULL; + + // mfn_EnterCrit(); + + // TODO: call m_sync.BeginUnload to try to put us in unloadable state. + + // mfn_Cleanup(); + + // mfn_LeaveCrit(); + + + return hUnload; +} + + +//-------------- LookupSection ------------------ +// Unloads a previously loaded file. If there are open sessions to this +const CIniFileSection * +CIniFile::LookupSection(const TCHAR *lptcszSection) +const +// TODO +{ + static const CIniFileSection * pIS; + if (!pIS) pIS = new CIniFileSection; + return pIS; +} + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CIniFileSection +/////////////////////////////////////////////////////////////////////////// + + +//-------------- LookupEntry ------------------ +const CIniFileEntry * +CIniFileSection::LookupEntry(const TCHAR *lptcszEntry) +const +// TODO +{ + static const CIniFileEntry * pIE; + if (!pIE) pIE = new CIniFileEntry; + return pIE; +} + +//-------------- GetFirstEntry ------------------ +CIniFileEntry * +CIniFileSection::GetFirstEntry (void) +// TODO +const +{ + static CIniFileEntry * pIE; + if (!pIE) pIE = new CIniFileEntry; + return pIE; +} + +//-------------- Release ------------------ +void +CIniFileSection::Release(void) +const +// TODO +{ +} + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CIniFileEntry +/////////////////////////////////////////////////////////////////////////// + + +//-------------- GetRHS ------------------ +const CInfSymbol * +CIniFileEntry::GetRHS(void) +const +// TODO +{ + return gSymtab.Lookup("[RHS]", TRUE); +} + + +//-------------- Release ------------------ +void +CIniFileEntry::Release(void) +const +// TODO +{ +} + diff --git a/private/unimodem/new/mic/ini.h b/private/unimodem/new/mic/ini.h new file mode 100644 index 000000000..1c2933b1b --- /dev/null +++ b/private/unimodem/new/mic/ini.h @@ -0,0 +1,210 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// INI.H -- Header for Classes: +// CIniFile +// CIniFileLine +// CIniFileSection +// CIniFileEntry +// +// History: +// 05/21/96 JosephJ Created +// +// + +class CIniFile; +class CIniFileLine; +class CIniFileSection; +class CIniFileEntry; + +/////////////////////////////////////////////////////////////////////////// +// CLASS CIniFile +/////////////////////////////////////////////////////////////////////////// + +// Represents a windows INI file. + +class CIniFile +{ + +public: + + CIniFile(void); + ~CIniFile(); + + //-------------- Load ------------------ + // Loads the specified file. (Obviously) only one file can be loaded at + // a time. + BOOL Load (const TCHAR rgchPathname[]); + + //-------------- Unload ------------------ + // Unloads a previously loaded file. If there are open sessions to this + // object, Unload returns a handle which will be signalled when all + // sessions are closed. New sessions will not be allowed after this + // function returns. The call should free the handle. + HANDLE Unload (void); + + //-------------- OpenSession ------------------ + // Open a session to this object. The object will not be unloaded until + // this session is closed. 0 indicates failure. + // TODO: unimplemented + const void * OpenSession (void) const {return (const void *) 1;} + + //-------------- CloseSession ------------------ + // Close the specified session to this object. + // TODO: unimplemented + void CloseSession (const void *) const {} + + //-------------- GetFirstLine ------------------ + // Get the first line in the file. Subsequent lines can be got by + // calling Next() on the line object. + const CIniFileLine * GetFirstLine (void) const; + + //-------------- GetFirstSection ------------------ + // Get the first section in the file. + const CIniFileSection * GetFirstSection (void) const; + + //-------------- LookupSection ------------------ + // Lookup a section in the file, given a name. Comparison is case- + // insensitive. + const CIniFileSection * LookupSection (const TCHAR * pchName) const; + + //-------------- Dump ------------------ + // Dump state + void Dump(void) const; + + //-------------- GetName ------------------ + // Returns the file name + const CInfSymbol * GetName (void) const + { + return m_pSymFileName; + } + +protected: + + //-------------- mfn_GetProp --------------- + // Gets the property value associated with this object. + void * mfn_GetProp(void) {return m_pvProp;} + + //-------------- mfn_SetProp --------------- + // Sets the property value associated with this object. + // Returns previously-set value, if any. + void * mfn_SetProp(void *pvNew) + { + void *pv; + mfn_EnterCrit(); + pv = m_pvProp; + m_pvProp = pvNew; + mfn_LeaveCrit(); + return pv; + } + + //-------------- mfn_EnterCrit ------------------ + void mfn_EnterCrit(void) const {m_sync.EnterCrit();} + + + //-------------- mfn_LeaveCrit ------------------ + void mfn_LeaveCrit(void) const {m_sync.LeaveCrit();} + + +private: + + CSync m_sync; + void * m_pvProp; + const CInfSymbol * m_pSymFileName; +}; + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CIniFileLine +/////////////////////////////////////////////////////////////////////////// + +// Represents a single line in an INI file. +// TODO: unimplemented +// Note: Only CIniFile member functions can construct/destruct these +// objects. + +class CIniFileLine +{ + +protected: + + CIniFileLine(void) {} + ~CIniFileLine() {} + +private: + + friend class CIniFile; +}; + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CIniFileSection +/////////////////////////////////////////////////////////////////////////// + +// Represents a single section in an INI file. +// Note: Only CIniFile member functions can construct/destruct these +// objects. + +class CIniFileSection +{ + +public: + + const CInfSymbol * GetName (void) const + { + // TODO + return gSymtab.Lookup(TEXT("Steroids"), TRUE); + } + + CIniFileEntry * GetFirstEntry (void) const; + const CIniFileEntry * LookupEntry (const TCHAR rgchName[]) const; + const CIniFileSection * Next(void) const; + void Release(void) const; +protected: + + CIniFileSection(void) {/*TODO*/} + ~CIniFileSection() {/*TODO*/} + +private: + + friend class CIniFile; +}; + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CIniFileEntry +/////////////////////////////////////////////////////////////////////////// + +// Represents a single entry in a section in an INI file. +// Note: Only CIniFileSection member functions can construct/destruct these +// objects. + +class CIniFileEntry +{ + +public: + + const CInfSymbol * GetLHS (void) const + { + // TODO + return gSymtab.Lookup(TEXT("%bongo101%"), TRUE); + } + const CInfSymbol * GetRHS (void) const; + const CIniFileLine * GetFirstLine (void) const; + BOOL * BecomeNext (void) + { + return FALSE; + } + + void Release(void) const; + +protected: + + CIniFileEntry(void) {/*TODO*/} + ~CIniFileEntry() {/*TODO*/} + +private: + + friend class CIniFileSection; +}; diff --git a/private/unimodem/new/mic/main.cpp b/private/unimodem/new/mic/main.cpp new file mode 100644 index 000000000..a83cab10f --- /dev/null +++ b/private/unimodem/new/mic/main.cpp @@ -0,0 +1,18 @@ +#include "common.h" +#include "test.h" +#include "mic.h" + +//#define MAIN_T main_tdev +#define MAIN_T main_mic + +int __cdecl main(int argc, char * argv[]) +{ + int iRet = 0; + + if (!InitGlobals()) goto end; + + iRet = MAIN_T (argc, argv); + +end: + return iRet; +} diff --git a/private/unimodem/new/mic/makefile b/private/unimodem/new/mic/makefile new file mode 100644 index 000000000..6ee4f43fa --- /dev/null +++ b/private/unimodem/new/mic/makefile @@ -0,0 +1,6 @@ +# +# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source +# file to this component. This file merely indirects to the real make file +# that is shared by all the components of NT OS/2 +# +!INCLUDE $(NTMAKEENV)\makefile.def diff --git a/private/unimodem/new/mic/mic.cpp b/private/unimodem/new/mic/mic.cpp new file mode 100644 index 000000000..9fa79d695 --- /dev/null +++ b/private/unimodem/new/mic/mic.cpp @@ -0,0 +1,167 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// MIC.CPP -- Modem INF Compiler -- basic version +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// History: +// 06/04/96 JosephJ Created +// +#include "common.h" +#include "ini.h" +#include "inf.h" +#include "dev.h" +#include "test.h" + +#define SIMPLE 0 +#define COMPLEX 1 +#define ACTUAL 2 + +//#define TEST_TYPE (SIMPLE) +#define TEST_TYPE (COMPLEX) +//#define TEST_TYPE (ACTUAL) + + +#if (TEST_TYPE==SIMPLE) +#elif (TEST_TYPE==COMPLEX) +#elif (TEST_TYPE==ACTUAL) +#endif + +class CMicOptions +{ +public: + CMicOptions(void) {} + ~CMicOptions() {} + BOOL Load (int argc, const char *argv[]); + void Unload(void) {} + static void Usage(void); + const TCHAR *OrigInfPath(void) {return m_rgchOrigInfPath;} + const TCHAR *NewInfDir(void) {return m_rgchNewInfDir;} + +private: + + TCHAR m_rgchOrigInfPath[MAX_PATH]; + TCHAR m_rgchNewInfDir[MAX_PATH]; + +}; + +CMicOptions gMicOptions; + +BOOL CMicOptions::Load (int argc, const char *argv[]) +{ + BOOL fRet = FALSE; + UINT u; + + if (argc!=3) goto end; + + if (lstrlen(argv[1]) >= (sizeof(m_rgchOrigInfPath)/sizeof(TCHAR))) + { + goto end; + } + + u = lstrlen(argv[2]); + // Extra space for possible addition of '\\'. + if ((u+1) >= (sizeof(m_rgchNewInfDir)/sizeof(TCHAR))) + { + goto end; + } + + lstrcpy(m_rgchOrigInfPath, argv[1]); + lstrcpy(m_rgchNewInfDir, argv[2]); + + ASSERT(u); + + // Add final \, if required. + { + TCHAR tch = m_rgchNewInfDir[u-1]; + if ( (tch!=(TCHAR) '\\') && (u>2 || tch!=(TCHAR)':')) + { + m_rgchNewInfDir[u]=TCHAR('\\'); + m_rgchNewInfDir[u+1]=0; + } + } + + printf + ( + "OrigIP=[%s]; NewID=[%s]\n", + m_rgchOrigInfPath, + m_rgchNewInfDir + ); + fRet = TRUE; + +end: + return fRet; +} + +void CMicOptions::Usage (void) +{ + printf(TEXT("\nUsage: mic <original-inf-path> <destination-dir>\n\n")); +} + +int main_mic(int argc, char * argv[]) +{ + const CInfManufacturerEntry *pManuE = NULL; + CInfFile *pInf= NULL; + CInfDevice *pDev = NULL; + + + // Parse Options + // Format: mic <original inf path> <destination-dir> + if (!gMicOptions.Load(argc, (const char **) argv)) + { + CMicOptions::Usage(); + return 1; + } + + pInf= new CInfFile(); + pDev = new CInfDevice(NULL); + + if (!pInf || !pDev) goto end; + + if (pInf->Load(gMicOptions.OrigInfPath())) + { + pManuE = pInf->GetFirstManufacturerEntry(); + } + + for (;pManuE; pManuE = pManuE->Next()) + { + const CInfManufacturerSection *pManuS=pManuE->GetManufacturerSection(); + const CInfModelEntry *pModelE = NULL; + if (pManuS) + { + pModelE = pManuS->GetFirstModelEntry(); + } + for (;pModelE; pModelE = pModelE->Next()) + { + if (pDev->Load(pInf, pManuE, pModelE)) + { + TCHAR rgchNewInf[MAX_PATH]; + DWORD dwRank0Checksum = pDev->Rank0Checksum(); + DWORD dwDeviceChecksum = pDev->Checksum(); + wsprintf + ( + rgchNewInf, + TEXT("%s%08lx_%08lx.inf"), + gMicOptions.NewInfDir(), + dwRank0Checksum, + dwDeviceChecksum + ); + pDev->Dump(); + + pDev->WriteInf(rgchNewInf); + pDev->Unload(); + } + } + } + +end: + if (pDev) {delete pDev; pDev=NULL;} + if (pInf) {pInf->Unload(); delete pInf; pInf=NULL;} + + gMicOptions.Unload(); + + return 0; +} diff --git a/private/unimodem/new/mic/mic.h b/private/unimodem/new/mic/mic.h new file mode 100644 index 000000000..2d1fd1697 --- /dev/null +++ b/private/unimodem/new/mic/mic.h @@ -0,0 +1 @@ +int main_mic(int argc, char * argv[]); diff --git a/private/unimodem/new/mic/notes.txt b/private/unimodem/new/mic/notes.txt new file mode 100644 index 000000000..08a196351 --- /dev/null +++ b/private/unimodem/new/mic/notes.txt @@ -0,0 +1,231 @@ +Modem Inf Compiler -- MIC +------------------------- + +History: + 5/18/96 JosephJ Created + +Files: + + +Classes: + +------------------------------- + CIniFile + Bind(FilePath pFilePath) + Out(FilePath pFilePath) + Section(szName) + UnBind() + Name + + CIniFileSection + CIniFileSection + EntryIterator + Out(HFILE); + Name + Line + + CIniFileEntry + Name + RHS + Out(HFILE); + Line + + CIniFileEntryIterator + NextEntry + + CIniFileLine + //Can be one of: blank, annotations, section-header, + // entry, entry-continuation, or unknown + //State can be one of: ok, warning, error(%d) + Type + State + Text + + + CIniFileAnnotation + +------------------------------- + + CInfFile + + CIniFile + + + CInfDevice + + CSymbolTable + Lookup + + CSymbol + GetText + GetTextLength + + CInfAddRegList + CInfCopyFileList + + CInfRank + + CDisplay + +-------------------------------- + +CModemDevice::CreateModem(CInfFile *pInf, CDeviceLocation *pDevLoc) +{ + // GetVersion + pInf->Version + + // Get manufacturer + ptbszManufacturer = pDevLoc->ptbszManufacturer; + + // Get Device name. + ptbszName = pDevLoc->Name + + // Get InstallSection + pInstallSec = pInf->InstallSection(pDevice->ptbszInstallSection); + + // Walk Addreg list + { + DWORD rgdwChecksum[MAX]; + CAddregIterator pAddregIter = pDevLoc->AddregIterator(); + + for (int i=0, CAddreg pAddReg=0;(pAddreg=pAddregIter->Iterate());i++) + { + // For mow, add checksum to array + rgdwChecksum[i++] = pAddreg->Checksum(); + } + + // Compute Addreg checksum + ::CRC16((LPBYTE)rgdwChecksum, (i)? (i-1) : 0); + } + + // Walk other list... + // Copyfiles + { + } + +} +------------------------------- + +Files + +Class headers: + inf.h CIniFile + ini.h CInfFile + device.h CInfDevice + sym.h CInfSymbol +--------------------------------- + +class CGenericIterator +{ + +public: + CGenericIterator(void * pData, const CGenericIterator *pNext) + {m_pData=pData; m_pNext = pNext;} + ~CGenericIterator(); + + const CGenericIterator * Next (void) const {return pNext;} + void * Data (void) const {return pData;} + +private: + + const CGenericIterator * m_pNext; + void * m_pNext; +}; + +for (; pIter, pIter = pIter->Next()) +{ + const CAddregSection * pAddreg = (const CAddregSection *) pIter; + // blah blah... +} + + CInfString +------------------------------------------ + +CSyncObject + + Load + Unload + + DWORD OpenSession(void) + void CloseSession(DWORD) + + EnterCrit + LeaveCrit + +private: + CRITICAL_SECTION + Slist EventList + UINT uRefCount; + enum {UNLOADED, MARKED_FOR_UNLOAD, LOADED} eState; + +-------------------------------------------------- +[Support APIs from sdk\inc\setupi.h] +SetupGetInfInformation +SetupQueryInfFileInformation useful? +SetupQueryInfVersionInformation useful? +SetupGetInfFileList useful? +SetupOpenInfFile +SetupOpenMasterInf +SetupOpenAppendInfFileW +SetupCloseInfFile +SetupFindFirstLineA useful? +SetupFindNextLine useful? +SetupFindNextMatchLine useful? +SetupGetLineByIndex useful? +SetupGetLineCount useful? +SetupGetLineText useful? +SetupGetFieldCount useful? +SetupGetStringField useful? +SetupGetIntField useful? +SetupGetMultiSzField useful? +SetupGetBinaryField useful? +SetupGetFileCompressionInfo +SetupGetSourceFileLocation useful? +SetupGetSourceFileSize +SetupGetTargetPath useful? +Error codes: + Inf parse outcomes: + ERROR_EXPECTED_SECTION_NAME + ERROR_BAD_SECTION_NAME_LINE + ERROR_SECTION_NAME_TOO_LONG + ERROR_GENERAL_SYNTAX + + Inf runtime errors: + ERROR_WRONG_INF_STYLE + ERROR_SECTION_NOT_FOUND + ERROR_LINE_NOT_FOUND +-------------------- +6/9/96 + +Inf:Load: + +-- Read Version Information +-- Read Manufacturer List Section + Read Manufacturer Entry + Read Manufacturer Section + Read Model Entry + Read Install Section + Read AddregSection + ... + Read ControlFlags section + +--------- +6/12/96 +-- concept of a Validate member function for each class: +BOOL Validate(void) +{ + if (!this) return FALSE; + + _try + { + test other things, like an object-type signature (each object can + have an object-type signature, which is assigned by the constructur + and cleared by the destructor. + } + _except(....) + { + } + +end: + +} diff --git a/private/unimodem/new/mic/resp.cpp b/private/unimodem/new/mic/resp.cpp new file mode 100644 index 000000000..fcb92de7d --- /dev/null +++ b/private/unimodem/new/mic/resp.cpp @@ -0,0 +1,3538 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +#include <windows.h> + +const TCHAR *rgpszSimpleResp[] = +{ + "How", + "Now", + "Brown", + "Cow!", + NULL +}; + +const TCHAR *rgpszComplexResp[] = +{ +"-SFA", +"-SMD", +"-SRA", +"-SRC:", +"-SRQ", +"-SSV", +"-STO", +"-SVM", +"+F4", +"+F4/+FCERROR", +"+F4@", +"+FC-FCERROR", +"+FC@", +"+FCERROR", +"+FCON", +"@", +"@#-SFA@#", +"@#-SMD@#", +"@#-SRA@#", +"@#-SRC:@#", +"@#-SRQ@#", +"@#-SSV@#", +"@#-STO@#", +"@#-SVM@#", +"@# CONNECT 1200 LAPM COMPRESSED@#", +"@#+FCERROR@@#", +"@#+FCERROR@#", +"@#@#NO CARRIER@#", +"@#ABORD@#", +"@#ABORTED@#", +"@#AUTOLOGON FAILED@#", +"@#BLACKLISTED@#", +"@#BUSY@#", +"@#C@#", +"@#CALL LOCKED:BLACKLISTED@#", +"@#CARRIER 1200@#", +"@#CARRIER 2400@#", +"@#CARRIER 300@#", +"@#CARRIER 600@#", +"@#CARRIER 1200 V.34@#", +"@#CARRIER 1200/75", +"@#CARRIER 1200/75 V.23@#", +"@#CARRIER 1200/75/VFC@#", +"@#CARRIER 1200/75@#", +"@#CARRIER 1200/VFC@#", +"@#CARRIER 1200@#", +"@#CARRIER 12000/VFC@#", +"@#CARRIER 12000@#", +"@#CARRIER 1200TX/75RX V.23@#", +"@#CARRIER 14400 V.34@#", +"@#CARRIER 14400/VFC@ @#", +"@#CARRIER 14400/VFC@#", +"@#CARRIER 14400@#", +"@#CARRIER 16800 V.34@#", +"@#CARRIER 16800/VFC@@#", +"@#CARRIER 16800/VFC@#", +"@#CARRIER 16800@#", +"@#CARRIER 19200 V.34@#", +"@#CARRIER 19200/VFC@@#", +"@#CARRIER 19200/VFC@#", +"@#CARRIER 19200@#", +"@#CARRIER 21600 V.34@#", +"@#CARRIER 21600/VFC@@#", +"@#CARRIER 21600/VFC@#", +"@#CARRIER 21600@#", +"@#CARRIER 2400 V.34@#", +"@#CARRIER 2400/VFC@#", +"@#CARRIER 2400@#", +"@#CARRIER 24000 V.34@#", +"@#CARRIER 24000/VFC@@#", +"@#CARRIER 24000/VFC@#", +"@#CARRIER 24000@#", +"@#CARRIER 26400 V.34@#", +"@#CARRIER 26400/VFC@@#", +"@#CARRIER 26400/VFC@#", +"@#CARRIER 26400@#", +"@#CARRIER 28800 V.34@#", +"@#CARRIER 28800/VFC@@#", +"@#CARRIER 28800/VFC@#", +"@#CARRIER 28800@#", +"@#CARRIER 300 V.34@#", +"@#CARRIER 300/VFC@#", +"@#CARRIER 300@#", +"@#CARRIER 4800 V.34@#", +"@#CARRIER 4800/VFC@#", +"@#CARRIER 4800@#", +"@#CARRIER 600@#", +"@#CARRIER 64000@#", +"@#CARRIER 7200 V.34@#", +"@#CARRIER 7200/VFC@#", +"@#CARRIER 7200@#", +"@#CARRIER 75/1200", +"@#CARRIER 75/1200 V.23@#", +"@#CARRIER 75/1200/VFC@#", +"@#CARRIER 75/1200@#", +"@#CARRIER 75TX/1200RX V.23@#", +"@#CARRIER 9600 V.34@#", +"@#CARRIER 9600/VFC@#", +"@#CARRIER 9600@#", +"@#CED@# ", +"@#COMPRESSION :CLASS5@#", +"@#COMPRESSION NONE@#", +"@#COMPRESSION V.42BIS@#", +"@#COMPRESSION: ADC", +"@#COMPRESSION: ADC@#", +"@#COMPRESSION: CLASS 5@#", +"@#COMPRESSION: CLASS5@#", +"@#COMPRESSION: MNP5@#", +"@#COMPRESSION: NONE@#", +"@#COMPRESSION: V.42 bis@#", +"@#COMPRESSION: V.42 BIS@#", +"@#COMPRESSION: V.42 bis@#", +"@#COMPRESSION: V.42 BIS@#", +"@#COMPRESSION: V.42 bis@#", +"@#COMPRESSION: V.42 BIS@#", +"@#COMPRESSION: V.42 bis@#", +"@#COMPRESSION: V.42 BIS@#", +"@#COMPRESSION: V.42 bis@#", +"@#COMPRESSION: V.42 BIS@#", +"@#COMPRESSION: V.42BIS@#", +"@#COMPRESSION: V.42bis@#", +"@#COMPRESSION: V.42BIS@#", +"@#COMPRESSION: V.42bis@#", +"@#COMPRESSION: V.42BIS@#", +"@#COMPRESSION: V.42bis@#", +"@#COMPRESSION: V.42BIS@#", +"@#COMPRESSION: V.42bis@#", +"@#COMPRESSION: V.42BIS@#", +"@#COMPRESSION: V.42bis@#", +"@#COMPRESSION: V.42BIS@#", +"@#COMPRESSION: V.42bis@#", +"@#COMPRESSION: V.42BIS@#", +"@#COMPRESSION: V42BIS@#", +"@#COMPRESSION:CLASS 5@#", +"@#COMPRESSION:NONE@#", +"@#COMPRESSION:V.42bis@#", +"@#COMPRESSION:V.42BIS@#", +"@#CONNECT 0600/ARQ@#", +"@#CONNECT 0600/LAP-M/COMPRESSION@#", +"@#CONNECT 0600/LAP-M@#", +"@#CONNECT 0600/LAPM/COMP@#", +"@#CONNECT 0600/LAPM@#", +"@#CONNECT 0600/MNP@#", +"@#CONNECT 0600/NONE@#", +"@#CONNECT 0600/REL-LAPM V.42 BIS@#", +"@#CONNECT 0600/REL/COMP@#", +"@#CONNECT 0600/REL@#", +"@#CONNECT 0600/V42BIS@#", +"@#CONNECT 0600@#", +"@#CONNECT 112000/ARQ/MLP /V120/V42b@#", +"@#CONNECT 112000/ARQ/MLP /V120@#", +"@#CONNECT 112000@#", +"@#CONNECT 115,200/ARQ@#", +"@#CONNECT 115,200/LAP-M/COMPRESSION@#", +"@#CONNECT 115,200/LAP-M@#", +"@#CONNECT 115,200/LAPM/COMP@#", +"@#CONNECT 115,200/LAPM@#", +"@#CONNECT 115,200/MNP@#", +"@#CONNECT 115,200/NONE@#", +"@#CONNECT 115,200/REL/COMP@#", +"@#CONNECT 115,200/REL@#", +"@#CONNECT 115,200/V42@#", +"@#CONNECT 115,200/V42BIS@#", +"@#CONNECT 115,200@#", +"@#CONNECT 115200 ALT / MNP5@#", +"@#CONNECT 115200 ALT /MNP 5@#", +"@#CONNECT 115200 ALT@#", +"@#CONNECT 115200 LAPM / V.42bis@#", +"@#CONNECT 115200 LAPM /V.42bis@#", +"@#CONNECT 115200 LAPM@#", +"@#CONNECT 115200 REL/MNP5@#", +"@#CONNECT 115200 REL@#", +"@#CONNECT 115200/ARQ@#", +"@#CONNECT 115200/LAP-M/COMPRESSION@#", +"@#CONNECT 115200/LAP-M@#", +"@#CONNECT 115200/LAPM/COMP@#", +"@#CONNECT 115200/LAPM@#", +"@#CONNECT 115200/MNP COMPRESSED@#", +"@#CONNECT 115200/MNP@#", +"@#CONNECT 115200/NONE@#", +"@#CONNECT 115200/REL-LAPM V.42 BIS@#", +"@#CONNECT 115200/REL-LAPM@#", +"@#CONNECT 115200/REL-V.42@#", +"@#CONNECT 115200/REL/COMP@#", +"@#CONNECT 115200/REL@#", +"@#CONNECT 115200/V42@#", +"@#CONNECT 115200/V42BIS@#", +"@#CONNECT 115200/VBIS@#", +"@#CONNECT 115200@#", +"@#CONNECT 115200T/V42BIS@#", +"@#CONNECT 1200 ALT / MNP5@#", +"@#CONNECT 1200 ALT /MNP 5@#", +"@#CONNECT 1200 ALT@#", +"@#CONNECT 1200 EC/V42BIS@#", +"@#CONNECT 1200 EC@#", +"@#CONNECT 1200 LAPM / V.42bis@#", +"@#CONNECT 1200 LAPM /V.42bis@#", +"@#CONNECT 1200 LAPM COMPRESSED@#", +"@#CONNECT 1200 LAPM@#", +"@#CONNECT 1200 NORMAL@#", +"@#CONNECT 1200 REL/MNP5@#", +"@#CONNECT 1200 REL/V42@#", +"@#CONNECT 1200 REL/V42BIS@#", +"@#CONNECT 1200 REL@#", +"@#CONNECT 1200 RELIABLE COMPRESSED@#", +"@#CONNECT 1200 RELIABLE@#", +"@#CONNECT 1200 V.42@#", +"@#CONNECT 1200/75", +"@#CONNECT 1200/75/ARQ@#", +"@#CONNECT 1200/75/LAP-M/COMPRESSION@#", +"@#CONNECT 1200/75/LAP-M@#", +"@#CONNECT 1200/75/LAPM/COMP@#", +"@#CONNECT 1200/75/LAPM@#", +"@#CONNECT 1200/75/MNP@#", +"@#CONNECT 1200/75/NONE@#", +"@#CONNECT 1200/75/REL-LAPM V.42 BIS@#", +"@#CONNECT 1200/75/REL/COMP@#", +"@#CONNECT 1200/75/REL@#", +"@#CONNECT 1200/75/V42@#", +"@#CONNECT 1200/75/V42BIS@#", +"@#CONNECT 1200/75@#", +"@#CONNECT 1200/ARQ/MNP4@#", +"@#CONNECT 1200/ARQ/MNP5@#", +"@#CONNECT 1200/ARQ/V.42@#", +"@#CONNECT 1200/ARQ/V.42bis@#", +"@#CONNECT 1200/ARQ/V22 /MNP4@#", +"@#CONNECT 1200/ARQ/V22 /MNP5@#", +"@#CONNECT 1200/ARQ/V22 /V42 /SREJ@#", +"@#CONNECT 1200/ARQ/V22 /V42 @#", +"@#CONNECT 1200/ARQ/V22 /V42b/SREJ@#", +"@#CONNECT 1200/ARQ/V22 /V42b@#", +"@#CONNECT 1200/ARQ/V22/MNP4@#", +"@#CONNECT 1200/ARQ/V22/MNP5@#", +"@#CONNECT 1200/ARQ/V22/V42 /SREJ@#", +"@#CONNECT 1200/ARQ/V22/V42 @#", +"@#CONNECT 1200/ARQ/V22/V42b/SREJ@#", +"@#CONNECT 1200/ARQ/V22/V42b@#", +"@#CONNECT 1200/ARQ/V22b /MNP4@#", +"@#CONNECT 1200/ARQ/V22b /MNP5@#", +"@#CONNECT 1200/ARQ/V22b /V42 /SREJ@#", +"@#CONNECT 1200/ARQ/V22b /V42 @#", +"@#CONNECT 1200/ARQ/V22b /V42b/SREJ@#", +"@#CONNECT 1200/ARQ/V22b /V42b@#", +"@#CONNECT 1200/ARQ/V22b/MNP4@#", +"@#CONNECT 1200/ARQ/V22b/MNP5@#", +"@#CONNECT 1200/ARQ/V22b/V42 /SREJ@#", +"@#CONNECT 1200/ARQ/V22b/V42 @#", +"@#CONNECT 1200/ARQ/V22b/V42b/SREJ@#", +"@#CONNECT 1200/ARQ/V22b/V42b@#", +"@#CONNECT 1200/ARQ/V32 /MNP4@#", +"@#CONNECT 1200/ARQ/V32 /MNP5@#", +"@#CONNECT 1200/ARQ/V32 /V42 /SREJ@#", +"@#CONNECT 1200/ARQ/V32 /V42 @#", +"@#CONNECT 1200/ARQ/V32 /V42b/SREJ@#", +"@#CONNECT 1200/ARQ/V32 /V42b@#", +"@#CONNECT 1200/ARQ/V32 /MNP4@#", +"@#CONNECT 1200/ARQ/V32 /MNP5@#", +"@#CONNECT 1200/ARQ/V32 /V42 /SREJ@#", +"@#CONNECT 1200/ARQ/V32 /V42 @#", +"@#CONNECT 1200/ARQ/V32 /V42b/SREJ@#", +"@#CONNECT 1200/ARQ/V32 /V42b@#", +"@#CONNECT 1200/ARQ/V32b /MNP4@#", +"@#CONNECT 1200/ARQ/V32b /MNP5@#", +"@#CONNECT 1200/ARQ/V32b /V42 /SREJ@#", +"@#CONNECT 1200/ARQ/V32b /V42 @#", +"@#CONNECT 1200/ARQ/V32b /V42b/SREJ@#", +"@#CONNECT 1200/ARQ/V32b /V42b@#", +"@#CONNECT 1200/ARQ/V32b/MNP4@#", +"@#CONNECT 1200/ARQ/V32b/MNP5@#", +"@#CONNECT 1200/ARQ/V32b/V42 /SREJ@#", +"@#CONNECT 1200/ARQ/V32b/V42 @#", +"@#CONNECT 1200/ARQ/V32b/V42b/SREJ@#", +"@#CONNECT 1200/ARQ/V32b/V42b@#", +"@#CONNECT 1200/ARQ/V42 /SREJ@#", +"@#CONNECT 1200/ARQ/V42 @#", +"@#CONNECT 1200/ARQ/V42b/SREJ@#", +"@#CONNECT 1200/ARQ/V42b@#", +"@#CONNECT 1200/ARQ/ZyX /MNP4@#", +"@#CONNECT 1200/ARQ/ZyX /MNP5@#", +"@#CONNECT 1200/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 1200/ARQ/ZyX /V42 @#", +"@#CONNECT 1200/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 1200/ARQ/ZyX /V42b@#", +"@#CONNECT 1200/ARQ/ZyX /MNP4@#", +"@#CONNECT 1200/ARQ/ZyX /MNP5@#", +"@#CONNECT 1200/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 1200/ARQ/ZyX /V42 @#", +"@#CONNECT 1200/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 1200/ARQ/ZyX /V42b@#", +"@#CONNECT 1200/ARQ@#", +"@#CONNECT 1200/COMP@#", +"@#CONNECT 1200/LAP-M/COMPRESSION@#", +"@#CONNECT 1200/LAP-M@#", +"@#CONNECT 1200/LAPM/COMP@#", +"@#CONNECT 1200/LAPM/V42BIS@#", +"@#CONNECT 1200/LAPM@#", +"@#CONNECT 1200/MNP COMPRESSED@#", +"@#CONNECT 1200/MNP@#", +"@#CONNECT 1200/NONE@#", +"@#CONNECT 1200/NOR@#", +"@#CONNECT 1200/REL-LAPM-COMP@#", +"@#CONNECT 1200/REL-LAPM V.42 BIS@#", +"@#CONNECT 1200/REL-LAPM@#", +"@#CONNECT 1200/REL-MNP-COMP@#", +"@#CONNECT 1200/REL-MNP@#", +"@#CONNECT 1200/REL-V.42@#", +"@#CONNECT 1200/REL 1@# ", +"@#CONNECT 1200/REL 2@# ", +"@#CONNECT 1200/REL 3@# ", +"@#CONNECT 1200/REL 4@# ", +"@#CONNECT 1200/REL 5@# ", +"@#CONNECT 1200/REL COMP@#", +"@#CONNECT 1200/REL COMPRESSED@#", +"@#CONNECT 1200/REL/COMP@#", +"@#CONNECT 1200/REL@#", +"@#CONNECT 1200/RELC@#", +"@#CONNECT 1200/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 1200/RELIABLE/LAPM@#", +"@#CONNECT 1200/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 1200/RELIABLE/MNP@#", +"@#CONNECT 1200/V42@#", +"@#CONNECT 1200/V42B@#", +"@#CONNECT 1200/V42BIS@#", +"@#CONNECT 1200@#", +"@#CONNECT 12000 ALT / MNP5@#", +"@#CONNECT 12000 ALT /MNP 5@#", +"@#CONNECT 12000 ALT@#", +"@#CONNECT 12000 EC/V42@#", +"@#CONNECT 12000 EC/V42BIS@#", +"@#CONNECT 12000 EC@#", +"@#CONNECT 12000 LAPM / V.42bis@#", +"@#CONNECT 12000 LAPM /V.42bis@#", +"@#CONNECT 12000 LAPM COMPRESSED@#", +"@#CONNECT 12000 LAPM@#", +"@#CONNECT 12000 REL/MNP5@#", +"@#CONNECT 12000 REL/V42@#", +"@#CONNECT 12000 REL/V42BIS@#", +"@#CONNECT 12000 REL@#", +"@#CONNECT 12000 RELIABLE COMPRESSED@#", +"@#CONNECT 12000 RELIABLE@#", +"@#CONNECT 12000/ARQ/CELL /MNP4@#", +"@#CONNECT 12000/ARQ/CELL /MNP5@#", +"@#CONNECT 12000/ARQ/CELL /V42 /SREJ@#", +"@#CONNECT 12000/ARQ/CELL /V42 @#", +"@#CONNECT 12000/ARQ/CELL /V42b/SREJ@#", +"@#CONNECT 12000/ARQ/CELL /V42b@#", +"@#CONNECT 12000/ARQ/CELL/MNP4@#", +"@#CONNECT 12000/ARQ/CELL/MNP5@#", +"@#CONNECT 12000/ARQ/CELL/V42 /SREJ@#", +"@#CONNECT 12000/ARQ/CELL/V42 @#", +"@#CONNECT 12000/ARQ/CELL/V42b/SREJ@#", +"@#CONNECT 12000/ARQ/CELL/V42b@#", +"@#CONNECT 12000/ARQ/MNP4@#", +"@#CONNECT 12000/ARQ/MNP5@#", +"@#CONNECT 12000/ARQ/V.34/MNP4@#", +"@#CONNECT 12000/ARQ/V.34/MNP5@#", +"@#CONNECT 12000/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 12000/ARQ/V.34/V42 @#", +"@#CONNECT 12000/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 12000/ARQ/V.34/V42b@#", +"@#CONNECT 12000/ARQ/V.42@#", +"@#CONNECT 12000/ARQ/V.42bis@#", +"@#CONNECT 12000/ARQ/V32b /MNP4@#", +"@#CONNECT 12000/ARQ/V32b /MNP5@#", +"@#CONNECT 12000/ARQ/V32b /V42 /SREJ@#", +"@#CONNECT 12000/ARQ/V32b /V42 @#", +"@#CONNECT 12000/ARQ/V32b /V42b/SREJ@#", +"@#CONNECT 12000/ARQ/V32b /V42b@#", +"@#CONNECT 12000/ARQ/V32b/MNP4@#", +"@#CONNECT 12000/ARQ/V32b/MNP5@#", +"@#CONNECT 12000/ARQ/V32b/V42 /SREJ@#", +"@#CONNECT 12000/ARQ/V32b/V42 @#", +"@#CONNECT 12000/ARQ/V32b/V42b/SREJ@#", +"@#CONNECT 12000/ARQ/V32b/V42b@#", +"@#CONNECT 12000/ARQ/V42 /SREJ@#", +"@#CONNECT 12000/ARQ/V42 @#", +"@#CONNECT 12000/ARQ/V42b/SREJ@#", +"@#CONNECT 12000/ARQ/V42b@#", +"@#CONNECT 12000/ARQ/ZyX /MNP4@#", +"@#CONNECT 12000/ARQ/ZyX /MNP5@#", +"@#CONNECT 12000/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 12000/ARQ/ZyX /V42 @#", +"@#CONNECT 12000/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 12000/ARQ/ZyX /V42b@#", +"@#CONNECT 12000/ARQ/ZyX /MNP4@#", +"@#CONNECT 12000/ARQ/ZyX /MNP5@#", +"@#CONNECT 12000/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 12000/ARQ/ZyX /V42 @#", +"@#CONNECT 12000/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 12000/ARQ/ZyX /V42b@#", +"@#CONNECT 12000/ARQ@#", +"@#CONNECT 12000/COMP@#", +"@#CONNECT 12000/LAP-M/COMPRESSION@#", +"@#CONNECT 12000/LAP-M@#", +"@#CONNECT 12000/LAPM/COMP@#", +"@#CONNECT 12000/LAPM/V42BIS@#", +"@#CONNECT 12000/LAPM@#", +"@#CONNECT 12000/MNP COMPRESSED@#", +"@#CONNECT 12000/MNP@#", +"@#CONNECT 12000/NONE@#", +"@#CONNECT 12000/NOR@#", +"@#CONNECT 12000/REL-LAPM-COMP@#", +"@#CONNECT 12000/REL-LAPM V.42 BIS@#", +"@#CONNECT 12000/REL-LAPM@#", +"@#CONNECT 12000/REL-MNP-COMP@#", +"@#CONNECT 12000/REL-MNP@#", +"@#CONNECT 12000/REL-V.42@#", +"@#CONNECT 12000/REL COMP@#", +"@#CONNECT 12000/REL COMPRESSED@#", +"@#CONNECT 12000/REL/COMP@#", +"@#CONNECT 12000/REL@#", +"@#CONNECT 12000/RELC@#", +"@#CONNECT 12000/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 12000/RELIABLE/LAPM@#", +"@#CONNECT 12000/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 12000/RELIABLE/MNP@#", +"@#CONNECT 12000/V42@#", +"@#CONNECT 12000/V42B@#", +"@#CONNECT 12000/V42BIS@#", +"@#CONNECT 12000@#", +"@#CONNECT 12000T/V42BIS@#", +"@#CONNECT 1200T/V42BIS@#", +"@#CONNECT 1200TX/75RX REL/MNP5@#", +"@#CONNECT 1200TX/75RX REL@#", +"@#CONNECT 1200TX/75RX/ARQ@#", +"@#CONNECT 1200TX/75RX/LAP-M/COMPRESSION@#", +"@#CONNECT 1200TX/75RX/LAP-M@#", +"@#CONNECT 1200TX/75RX/LAPM/COMP@#", +"@#CONNECT 1200TX/75RX/LAPM@#", +"@#CONNECT 1200TX/75RX/MNP@#", +"@#CONNECT 1200TX/75RX/NONE@#", +"@#CONNECT 1200TX/75RX/REL-LAPM V.42 BIS@#", +"@#CONNECT 1200TX/75RX/REL/COMP@#", +"@#CONNECT 1200TX/75RX/REL@#", +"@#CONNECT 1200TX/75RX/V42@#", +"@#CONNECT 1200TX/75RX/V42BIS@#", +"@#CONNECT 1200TX/75RX@#", +"@#CONNECT 12200/ARQ/V.34/MNP4@#", +"@#CONNECT 12200/ARQ/V.34/MNP5@#", +"@#CONNECT 12200/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 12200/ARQ/V.34/V42 @#", +"@#CONNECT 12200/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 12200/ARQ/V.34/V42b@#", +"@#CONNECT 12200@#", +"@#CONNECT 1275@#", +"@#CONNECT 128000/ARQ/MLP /X.75/V42b@#", +"@#CONNECT 128000/ARQ/MLP /X.75@#", +"@#CONNECT 128000@#", +"@#CONNECT 14400 ALT / MNP5@#", +"@#CONNECT 14400 ALT /MNP 5@#", +"@#CONNECT 14400 ALT@#", +"@#CONNECT 14400 EC/V42@#", +"@#CONNECT 14400 EC/V42BIS@#", +"@#CONNECT 14400 EC@#", +"@#CONNECT 14400 LAPM / V.42bis@#", +"@#CONNECT 14400 LAPM /V.42bis@#", +"@#CONNECT 14400 LAPM COMPRESSED@#", +"@#CONNECT 14400 LAPM@#", +"@#CONNECT 14400 NORMAL@#", +"@#CONNECT 14400 REL/MNP5@#", +"@#CONNECT 14400 REL/V42@#", +"@#CONNECT 14400 REL/V42BIS@#", +"@#CONNECT 14400 REL@#", +"@#CONNECT 14400 RELIABLE COMPRESSED@#", +"@#CONNECT 14400 RELIABLE@#", +"@#CONNECT 14400 V.42@#", +"@#CONNECT 14400/ARQ/CELL /MNP4@#", +"@#CONNECT 14400/ARQ/CELL /MNP5@#", +"@#CONNECT 14400/ARQ/CELL /V42 /SREJ@#", +"@#CONNECT 14400/ARQ/CELL /V42 @#", +"@#CONNECT 14400/ARQ/CELL /V42b/SREJ@#", +"@#CONNECT 14400/ARQ/CELL /V42b@#", +"@#CONNECT 14400/ARQ/CELL/MNP4@#", +"@#CONNECT 14400/ARQ/CELL/MNP5@#", +"@#CONNECT 14400/ARQ/CELL/V42 /SREJ@#", +"@#CONNECT 14400/ARQ/CELL/V42 @#", +"@#CONNECT 14400/ARQ/CELL/V42b/SREJ@#", +"@#CONNECT 14400/ARQ/CELL/V42b@#", +"@#CONNECT 14400/ARQ/MNP4@#", +"@#CONNECT 14400/ARQ/MNP5@#", +"@#CONNECT 14400/ARQ/V.34/MNP4@#", +"@#CONNECT 14400/ARQ/V.34/MNP5@#", +"@#CONNECT 14400/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 14400/ARQ/V.34/V42 @#", +"@#CONNECT 14400/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 14400/ARQ/V.34/V42b@#", +"@#CONNECT 14400/ARQ/V.42@#", +"@#CONNECT 14400/ARQ/V.42bis@#", +"@#CONNECT 14400/ARQ/V32b /MNP4@#", +"@#CONNECT 14400/ARQ/V32b /MNP5@#", +"@#CONNECT 14400/ARQ/V32b /V42 /SREJ@#", +"@#CONNECT 14400/ARQ/V32b /V42 @#", +"@#CONNECT 14400/ARQ/V32b /V42b/SREJ@#", +"@#CONNECT 14400/ARQ/V32b /V42b@#", +"@#CONNECT 14400/ARQ/V32b/MNP4@#", +"@#CONNECT 14400/ARQ/V32b/MNP5@#", +"@#CONNECT 14400/ARQ/V32b/V42 /SREJ@#", +"@#CONNECT 14400/ARQ/V32b/V42 @#", +"@#CONNECT 14400/ARQ/V32b/V42b/SREJ@#", +"@#CONNECT 14400/ARQ/V32b/V42b@#", +"@#CONNECT 14400/ARQ/V42 /SREJ@#", +"@#CONNECT 14400/ARQ/V42 @#", +"@#CONNECT 14400/ARQ/V42b/SREJ@#", +"@#CONNECT 14400/ARQ/V42b@#", +"@#CONNECT 14400/ARQ/ZyX /MNP4@#", +"@#CONNECT 14400/ARQ/ZyX /MNP5@#", +"@#CONNECT 14400/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 14400/ARQ/ZyX /V42 @#", +"@#CONNECT 14400/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 14400/ARQ/ZyX /V42b@#", +"@#CONNECT 14400/ARQ/ZyX /MNP4@#", +"@#CONNECT 14400/ARQ/ZyX /MNP5@#", +"@#CONNECT 14400/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 14400/ARQ/ZyX /V42 @#", +"@#CONNECT 14400/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 14400/ARQ/ZyX /V42b@#", +"@#CONNECT 14400/ARQ@#", +"@#CONNECT 14400/COMP@#", +"@#CONNECT 14400/LAP-M/COMPRESSION@#", +"@#CONNECT 14400/LAP-M@#", +"@#CONNECT 14400/LAPM/COMP@#", +"@#CONNECT 14400/LAPM/V42BIS@#", +"@#CONNECT 14400/LAPM@#", +"@#CONNECT 14400/MNP COMPRESSED@#", +"@#CONNECT 14400/MNP@#", +"@#CONNECT 14400/NONE@#", +"@#CONNECT 14400/NOR@#", +"@#CONNECT 14400/REL-LAPM-COMP@#", +"@#CONNECT 14400/REL-LAPM V.42 BIS@#", +"@#CONNECT 14400/REL-LAPM@#", +"@#CONNECT 14400/REL-MNP-COMP@#", +"@#CONNECT 14400/REL-MNP@#", +"@#CONNECT 14400/REL-V.42@#", +"@#CONNECT 14400/REL COMP@#", +"@#CONNECT 14400/REL COMPRESSED@#", +"@#CONNECT 14400/REL/COMP@#", +"@#CONNECT 14400/REL@#", +"@#CONNECT 14400/RELC@#", +"@#CONNECT 14400/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 14400/RELIABLE/LAPM@#", +"@#CONNECT 14400/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 14400/RELIABLE/MNP@#", +"@#CONNECT 14400/V42@#", +"@#CONNECT 14400/V42B@#", +"@#CONNECT 14400/V42BIS@#", +"@#CONNECT 14400@#", +"@#CONNECT 14400T RELIABLE@#", +"@#CONNECT 14400T V.42@#", +"@#CONNECT 14400T/V42BIS@#", +"@#CONNECT 14600/ARQ/V.34/MNP4@#", +"@#CONNECT 14600/ARQ/V.34/MNP5@#", +"@#CONNECT 14600/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 14600/ARQ/V.34/V42 @#", +"@#CONNECT 14600/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 14600/ARQ/V.34/V42b@#", +"@#CONNECT 14600@#", +"@#CONNECT 16000 EC/V42BIS@#", +"@#CONNECT 16800 EC/V42@#", +"@#CONNECT 16800 EC/V42BIS@#", +"@#CONNECT 16800 EC@#", +"@#CONNECT 16800 LAPM COMPRESSED@#", +"@#CONNECT 16800 LAPM@#", +"@#CONNECT 16800 REL/MNP5@#", +"@#CONNECT 16800 REL/V42@#", +"@#CONNECT 16800 REL/V42BIS@#", +"@#CONNECT 16800 REL@#", +"@#CONNECT 16800 RELIABLE COMPRESSED@#", +"@#CONNECT 16800 RELIABLE@#", +"@#CONNECT 16800/ARQ/MNP4@#", +"@#CONNECT 16800/ARQ/MNP5@#", +"@#CONNECT 16800/ARQ/V.34/MNP4@#", +"@#CONNECT 16800/ARQ/V.34/MNP5@#", +"@#CONNECT 16800/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 16800/ARQ/V.34/V42 @#", +"@#CONNECT 16800/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 16800/ARQ/V.34/V42b@#", +"@#CONNECT 16800/ARQ/V.42@#", +"@#CONNECT 16800/ARQ/V.42bis@#", +"@#CONNECT 16800/ARQ/V42 /SREJ@#", +"@#CONNECT 16800/ARQ/V42 @#", +"@#CONNECT 16800/ARQ/V42b/SREJ@#", +"@#CONNECT 16800/ARQ/V42b@#", +"@#CONNECT 16800/ARQ/ZyX /MNP4@#", +"@#CONNECT 16800/ARQ/ZyX /MNP5@#", +"@#CONNECT 16800/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 16800/ARQ/ZyX /V42 @#", +"@#CONNECT 16800/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 16800/ARQ/ZyX /V42b@#", +"@#CONNECT 16800/ARQ/ZyX /MNP4@#", +"@#CONNECT 16800/ARQ/ZyX /MNP5@#", +"@#CONNECT 16800/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 16800/ARQ/ZyX /V42 @#", +"@#CONNECT 16800/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 16800/ARQ/ZyX /V42b@#", +"@#CONNECT 16800/ARQ@#", +"@#CONNECT 16800/COMP@#", +"@#CONNECT 16800/LAP-M/COMPRESSION@#", +"@#CONNECT 16800/LAP-M@#", +"@#CONNECT 16800/LAPM/COMP@#", +"@#CONNECT 16800/LAPM/V42BIS@#", +"@#CONNECT 16800/LAPM@#", +"@#CONNECT 16800/MNP COMPRESSED@#", +"@#CONNECT 16800/MNP@#", +"@#CONNECT 16800/NONE@#", +"@#CONNECT 16800/NOR@#", +"@#CONNECT 16800/REL-LAPM V.42 BIS@#", +"@#CONNECT 16800/REL-LAPM@#", +"@#CONNECT 16800/REL-V.42@#", +"@#CONNECT 16800/REL COMP@#", +"@#CONNECT 16800/REL/COMP@#", +"@#CONNECT 16800/REL@#", +"@#CONNECT 16800/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 16800/RELIABLE/LAPM@#", +"@#CONNECT 16800/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 16800/RELIABLE/MNP@#", +"@#CONNECT 16800/V42@#", +"@#CONNECT 16800/V42BIS@#", +"@#CONNECT 16800@#", +"@#CONNECT 16800T/V42BIS@#", +"@#CONNECT 17000/ARQ/V.34/MNP4@#", +"@#CONNECT 17000/ARQ/V.34/MNP5@#", +"@#CONNECT 17000/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 17000/ARQ/V.34/V42 @#", +"@#CONNECT 17000/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 17000/ARQ/V.34/V42b@#", +"@#CONNECT 17000@#", +"@#CONNECT 19200 ALT / MNP5@#", +"@#CONNECT 19200 ALT /MNP 5@#", +"@#CONNECT 19200 ALT@#", +"@#CONNECT 19200 EC/BIS@#", +"@#CONNECT 19200 EC/V42@#", +"@#CONNECT 19200 EC/V42BIZ@#", +"@#CONNECT 19200 EC@#", +"@#CONNECT 19200 LAPM / V.42bis@#", +"@#CONNECT 19200 LAPM /V.42bis@#", +"@#CONNECT 19200 LAPM COMPRESSED@#", +"@#CONNECT 19200 LAPM@#", +"@#CONNECT 19200 REL/MNP5@#", +"@#CONNECT 19200 REL/V42@#", +"@#CONNECT 19200 REL/V42BIS@#", +"@#CONNECT 19200 REL@#", +"@#CONNECT 19200 RELIABLE COMPRESSED@#", +"@#CONNECT 19200 RELIABLE@#", +"@#CONNECT 19200/ARQ/MNP4@#", +"@#CONNECT 19200/ARQ/MNP5@#", +"@#CONNECT 19200/ARQ/V.34/MNP4@#", +"@#CONNECT 19200/ARQ/V.34/MNP5@#", +"@#CONNECT 19200/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 19200/ARQ/V.34/V42 @#", +"@#CONNECT 19200/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 19200/ARQ/V.34/V42b@#", +"@#CONNECT 19200/ARQ/V.42@#", +"@#CONNECT 19200/ARQ/V.42bis@#", +"@#CONNECT 19200/ARQ/V42 /SREJ@#", +"@#CONNECT 19200/ARQ/V42 @#", +"@#CONNECT 19200/ARQ/V42b/SREJ@#", +"@#CONNECT 19200/ARQ/V42b@#", +"@#CONNECT 19200/ARQ/ZyX /MNP4@#", +"@#CONNECT 19200/ARQ/ZyX /MNP5@#", +"@#CONNECT 19200/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 19200/ARQ/ZyX /V42 @#", +"@#CONNECT 19200/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 19200/ARQ/ZyX /V42b@#", +"@#CONNECT 19200/ARQ/ZyX /MNP4@#", +"@#CONNECT 19200/ARQ/ZyX /MNP5@#", +"@#CONNECT 19200/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 19200/ARQ/ZyX /V42 @#", +"@#CONNECT 19200/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 19200/ARQ/ZyX /V42b@#", +"@#CONNECT 19200/ARQ@#", +"@#CONNECT 19200/COMP@#", +"@#CONNECT 19200/LAP-M/COMPRESSION@#", +"@#CONNECT 19200/LAP-M@#", +"@#CONNECT 19200/LAPM/COMP@#", +"@#CONNECT 19200/LAPM/V42BIS@#", +"@#CONNECT 19200/LAPM@#", +"@#CONNECT 19200/MNP COMPRESSED@#", +"@#CONNECT 19200/MNP@#", +"@#CONNECT 19200/NONE@#", +"@#CONNECT 19200/NOR@#", +"@#CONNECT 19200/REL-LAPM V.42 BIS@#", +"@#CONNECT 19200/REL-LAPM@#", +"@#CONNECT 19200/REL-V.42@#", +"@#CONNECT 19200/REL COMP@#", +"@#CONNECT 19200/REL/COMP@#", +"@#CONNECT 19200/REL@#", +"@#CONNECT 19200/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 19200/RELIABLE/LAPM@#", +"@#CONNECT 19200/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 19200/RELIABLE/MNP@#", +"@#CONNECT 19200/V.110@#", +"@#CONNECT 19200/V42@#", +"@#CONNECT 19200/V42BIS@#", +"@#CONNECT 19200@#", +"@#CONNECT 19200T/V42BIS@#", +"@#CONNECT 19400/ARQ/V.34/MNP4@#", +"@#CONNECT 19400/ARQ/V.34/MNP5@#", +"@#CONNECT 19400/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 19400/ARQ/V.34/V42 @#", +"@#CONNECT 19400/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 19400/ARQ/V.34/V42b@#", +"@#CONNECT 19400@#", +"@#CONNECT 21600 LAPM COMPRESSED@#", +"@#CONNECT 21600 LAPM@#", +"@#CONNECT 21600 REL/MNP5@#", +"@#CONNECT 21600 REL@#", +"@#CONNECT 21600 RELIABLE COMPRESSED@#", +"@#CONNECT 21600 RELIABLE@#", +"@#CONNECT 21600/ARQ/V.34/MNP4@#", +"@#CONNECT 21600/ARQ/V.34/MNP5@#", +"@#CONNECT 21600/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 21600/ARQ/V.34/V42 @#", +"@#CONNECT 21600/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 21600/ARQ/V.34/V42b@#", +"@#CONNECT 21600/ARQ@#", +"@#CONNECT 21600/COMP@#", +"@#CONNECT 21600/LAP-M/COMPRESSION@#", +"@#CONNECT 21600/LAP-M@#", +"@#CONNECT 21600/LAPM/COMP@#", +"@#CONNECT 21600/LAPM/V42BIS@#", +"@#CONNECT 21600/LAPM@#", +"@#CONNECT 21600/MNP COMPRESSED@#", +"@#CONNECT 21600/MNP@#", +"@#CONNECT 21600/NONE@#", +"@#CONNECT 21600/NOR@#", +"@#CONNECT 21600/REL-LAPM V.42 BIS@#", +"@#CONNECT 21600/REL-LAPM@#", +"@#CONNECT 21600/REL-V.42@#", +"@#CONNECT 21600/REL COMP@#", +"@#CONNECT 21600/REL/COMP@#", +"@#CONNECT 21600/REL@#", +"@#CONNECT 21600/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 21600/RELIABLE/LAPM@#", +"@#CONNECT 21600/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 21600/RELIABLE/MNP@#", +"@#CONNECT 21600/V42@#", +"@#CONNECT 21600/V42BIS@#", +"@#CONNECT 21600@#", +"@#CONNECT 21600T/V42BIS@#", +"@#CONNECT 21800/ARQ/V.34/MNP4@#", +"@#CONNECT 21800/ARQ/V.34/MNP5@#", +"@#CONNECT 21800/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 21800/ARQ/V.34/V42 @#", +"@#CONNECT 21800/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 21800/ARQ/V.34/V42b@#", +"@#CONNECT 21800@#", +"@#CONNECT 230400/ARQ@#", +"@#CONNECT 230400/LAP-M@#", +"@#CONNECT 230400/LAPM/COMP@#", +"@#CONNECT 230400/LAPM@#", +"@#CONNECT 230400/MNP@#", +"@#CONNECT 230400/NONE@#", +"@#CONNECT 230400/REL/COMP@#", +"@#CONNECT 230400/REL@#", +"@#CONNECT 230400/V42BIS@#", +"@#CONNECT 230400@#", +"@#CONNECT 240/MNP@#", +"@#CONNECT 2400 @#", +"@#CONNECT 2400 ALT / MNP5@#", +"@#CONNECT 2400 ALT /MNP 5@#", +"@#CONNECT 2400 ALT@#", +"@#CONNECT 2400 EC/V42@#", +"@#CONNECT 2400 EC/V42BIS@#", +"@#CONNECT 2400 EC@#", +"@#CONNECT 2400 LAPM / V.42bis@#", +"@#CONNECT 2400 LAPM /V.42bis@#", +"@#CONNECT 2400 LAPM COMPRESSED@#", +"@#CONNECT 2400 LAPM@#", +"@#CONNECT 2400 NORMAL@#", +"@#CONNECT 2400 REL/MNP5@#", +"@#CONNECT 2400 REL/V42@#", +"@#CONNECT 2400 REL/V42BIS@#", +"@#CONNECT 2400 REL@#", +"@#CONNECT 2400 RELIABLE COMPRESSED@#", +"@#CONNECT 2400 RELIABLE@#", +"@#CONNECT 2400 V.42@#", +"@#CONNECT 2400/ARQ/CELL /MNP4@#", +"@#CONNECT 2400/ARQ/CELL /MNP5@#", +"@#CONNECT 2400/ARQ/CELL /V42 /SREJ@#", +"@#CONNECT 2400/ARQ/CELL /V42 @#", +"@#CONNECT 2400/ARQ/CELL /V42b/SREJ@#", +"@#CONNECT 2400/ARQ/CELL /V42b@#", +"@#CONNECT 2400/ARQ/CELL/MNP4@#", +"@#CONNECT 2400/ARQ/CELL/MNP5@#", +"@#CONNECT 2400/ARQ/CELL/V42 /SREJ@#", +"@#CONNECT 2400/ARQ/CELL/V42 @#", +"@#CONNECT 2400/ARQ/CELL/V42b/SREJ@#", +"@#CONNECT 2400/ARQ/CELL/V42b@#", +"@#CONNECT 2400/ARQ/MNP4@#", +"@#CONNECT 2400/ARQ/MNP5@#", +"@#CONNECT 2400/ARQ/V.34/MNP4@#", +"@#CONNECT 2400/ARQ/V.34/MNP5@#", +"@#CONNECT 2400/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 2400/ARQ/V.34/V42 @#", +"@#CONNECT 2400/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 2400/ARQ/V.34/V42b@#", +"@#CONNECT 2400/ARQ/V.42@#", +"@#CONNECT 2400/ARQ/V.42bis@#", +"@#CONNECT 2400/ARQ/V22b /MNP4@#", +"@#CONNECT 2400/ARQ/V22b /MNP5@#", +"@#CONNECT 2400/ARQ/V22b /V42 /SREJ@#", +"@#CONNECT 2400/ARQ/V22b /V42 @#", +"@#CONNECT 2400/ARQ/V22b /V42b/SREJ@#", +"@#CONNECT 2400/ARQ/V22b /V42b@#", +"@#CONNECT 2400/ARQ/V22b/MNP4@#", +"@#CONNECT 2400/ARQ/V22b/MNP5@#", +"@#CONNECT 2400/ARQ/V22b/V42 /SREJ@#", +"@#CONNECT 2400/ARQ/V22b/V42 @#", +"@#CONNECT 2400/ARQ/V22b/V42b/SREJ@#", +"@#CONNECT 2400/ARQ/V22b/V42b@#", +"@#CONNECT 2400/ARQ/V32 /MNP4@#", +"@#CONNECT 2400/ARQ/V32 /MNP5@#", +"@#CONNECT 2400/ARQ/V32 /V42 /SREJ@#", +"@#CONNECT 2400/ARQ/V32 /V42 @#", +"@#CONNECT 2400/ARQ/V32 /V42b/SREJ@#", +"@#CONNECT 2400/ARQ/V32 /V42b@#", +"@#CONNECT 2400/ARQ/V32 /MNP4@#", +"@#CONNECT 2400/ARQ/V32 /MNP5@#", +"@#CONNECT 2400/ARQ/V32 /V42 /SREJ@#", +"@#CONNECT 2400/ARQ/V32 /V42 @#", +"@#CONNECT 2400/ARQ/V32 /V42b/SREJ@#", +"@#CONNECT 2400/ARQ/V32 /V42b@#", +"@#CONNECT 2400/ARQ/V32b /MNP4@#", +"@#CONNECT 2400/ARQ/V32b /MNP5@#", +"@#CONNECT 2400/ARQ/V32b /V42 /SREJ@#", +"@#CONNECT 2400/ARQ/V32b /V42 @#", +"@#CONNECT 2400/ARQ/V32b /V42b/SREJ@#", +"@#CONNECT 2400/ARQ/V32b /V42b@#", +"@#CONNECT 2400/ARQ/V32b/MNP4@#", +"@#CONNECT 2400/ARQ/V32b/MNP5@#", +"@#CONNECT 2400/ARQ/V32b/V42 /SREJ@#", +"@#CONNECT 2400/ARQ/V32b/V42 @#", +"@#CONNECT 2400/ARQ/V32b/V42b/SREJ@#", +"@#CONNECT 2400/ARQ/V32b/V42b@#", +"@#CONNECT 2400/ARQ/V42 /SREJ@#", +"@#CONNECT 2400/ARQ/V42 @#", +"@#CONNECT 2400/ARQ/V42b/SREJ@#", +"@#CONNECT 2400/ARQ/V42b@#", +"@#CONNECT 2400/ARQ/ZyX /MNP4@#", +"@#CONNECT 2400/ARQ/ZyX /MNP5@#", +"@#CONNECT 2400/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 2400/ARQ/ZyX /V42 @#", +"@#CONNECT 2400/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 2400/ARQ/ZyX /V42b@#", +"@#CONNECT 2400/ARQ/ZyX /MNP4@#", +"@#CONNECT 2400/ARQ/ZyX /MNP5@#", +"@#CONNECT 2400/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 2400/ARQ/ZyX /V42 @#", +"@#CONNECT 2400/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 2400/ARQ/ZyX /V42b@#", +"@#CONNECT 2400/ARQ@#", +"@#CONNECT 2400/COMP@#", +"@#CONNECT 2400/LAP-M/COMPRESSION@#", +"@#CONNECT 2400/LAP-M@#", +"@#CONNECT 2400/LAPM/COMP@#", +"@#CONNECT 2400/LAPM/V42BIS@#", +"@#CONNECT 2400/LAPM@#", +"@#CONNECT 2400/MNP COMPRESSED@#", +"@#CONNECT 2400/MNP@#", +"@#CONNECT 2400/NONE@#", +"@#CONNECT 2400/NOR@#", +"@#CONNECT 2400/REL-LAPM-COMP@#", +"@#CONNECT 2400/REL-LAPM V.42 BIS@#", +"@#CONNECT 2400/REL-LAPM@#", +"@#CONNECT 2400/REL-MNP-COMP@#", +"@#CONNECT 2400/REL-MNP@#", +"@#CONNECT 2400/REL-V.42@#", +"@#CONNECT 2400/REL 1@# ", +"@#CONNECT 2400/REL 2@# ", +"@#CONNECT 2400/REL 3@# ", +"@#CONNECT 2400/REL 4@# ", +"@#CONNECT 2400/REL 5@# ", +"@#CONNECT 2400/REL COMP@#", +"@#CONNECT 2400/REL COMPRESSED@#", +"@#CONNECT 2400/REL/COMP@#", +"@#CONNECT 2400/REL@#", +"@#CONNECT 2400/RELC@#", +"@#CONNECT 2400/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 2400/RELIABLE/LAPM@#", +"@#CONNECT 2400/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 2400/RELIABLE/MNP@#", +"@#CONNECT 2400/V42@#", +"@#CONNECT 2400/V42B@#", +"@#CONNECT 2400/V42BIS@#", +"@#CONNECT 2400@#", +"@#CONNECT 24000 LAPM COMPRESSED@#", +"@#CONNECT 24000 LAPM@#", +"@#CONNECT 24000 REL/MNP5@#", +"@#CONNECT 24000 REL@#", +"@#CONNECT 24000 RELIABLE COMPRESSED@#", +"@#CONNECT 24000 RELIABLE@#", +"@#CONNECT 24000/ARQ/V.34/MNP4@#", +"@#CONNECT 24000/ARQ/V.34/MNP5@#", +"@#CONNECT 24000/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 24000/ARQ/V.34/V42 @#", +"@#CONNECT 24000/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 24000/ARQ/V.34/V42b@#", +"@#CONNECT 24000/ARQ@#", +"@#CONNECT 24000/COMP@#", +"@#CONNECT 24000/LAP-M/COMPRESSION@#", +"@#CONNECT 24000/LAP-M@#", +"@#CONNECT 24000/LAPM/COMP@#", +"@#CONNECT 24000/LAPM/V42BIS@#", +"@#CONNECT 24000/LAPM@#", +"@#CONNECT 24000/MNP COMPRESSED@#", +"@#CONNECT 24000/MNP@#", +"@#CONNECT 24000/NONE@#", +"@#CONNECT 24000/NOR@#", +"@#CONNECT 24000/REL-LAPM V.42 BIS@#", +"@#CONNECT 24000/REL-LAPM@#", +"@#CONNECT 24000/REL-V.42@#", +"@#CONNECT 24000/REL COMP@#", +"@#CONNECT 24000/REL/COMP@#", +"@#CONNECT 24000/REL@#", +"@#CONNECT 24000/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 24000/RELIABLE/LAPM@#", +"@#CONNECT 24000/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 24000/RELIABLE/MNP@#", +"@#CONNECT 24000/V42@#", +"@#CONNECT 24000/V42BIS@#", +"@#CONNECT 24000@#", +"@#CONNECT 24000T/V42BIS@#", +"@#CONNECT 2400T/V42BIS@#", +"@#CONNECT 24200/ARQ/V.34/MNP4@#", +"@#CONNECT 24200/ARQ/V.34/MNP5@#", +"@#CONNECT 24200/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 24200/ARQ/V.34/V42 @#", +"@#CONNECT 24200/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 24200/ARQ/V.34/V42b@#", +"@#CONNECT 24200@#", +"@#CONNECT 2600/ARQ/V.34/MNP4@#", +"@#CONNECT 2600/ARQ/V.34/MNP5@#", +"@#CONNECT 2600/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 2600/ARQ/V.34/V42 @#", +"@#CONNECT 2600/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 2600/ARQ/V.34/V42b@#", +"@#CONNECT 2600@#", +"@#CONNECT 26400 LAPM COMPRESSED<cR>#", +"@#CONNECT 26400 LAPM@#", +"@#CONNECT 26400 REL/MNP5@#", +"@#CONNECT 26400 REL@#", +"@#CONNECT 26400 RELIABLE COMPRESSED<cR>#", +"@#CONNECT 26400 RELIABLE@#", +"@#CONNECT 26400/ARQ/V.34/MNP4@#", +"@#CONNECT 26400/ARQ/V.34/MNP5@#", +"@#CONNECT 26400/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 26400/ARQ/V.34/V42 @#", +"@#CONNECT 26400/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 26400/ARQ/V.34/V42b@#", +"@#CONNECT 26400/ARQ@#", +"@#CONNECT 26400/COMP@#", +"@#CONNECT 26400/LAP-M/COMPRESSION@#", +"@#CONNECT 26400/LAP-M@#", +"@#CONNECT 26400/LAPM/COMP@#", +"@#CONNECT 26400/LAPM/V42BIS@#", +"@#CONNECT 26400/LAPM@#", +"@#CONNECT 26400/MNP COMPRESSED@#", +"@#CONNECT 26400/MNP@#", +"@#CONNECT 26400/NONE@#", +"@#CONNECT 26400/NOR@#", +"@#CONNECT 26400/REL-LAPM V.42 BIS@#", +"@#CONNECT 26400/REL-LAPM@#", +"@#CONNECT 26400/REL-V.42@#", +"@#CONNECT 26400/REL COMP@#", +"@#CONNECT 26400/REL/COMP@#", +"@#CONNECT 26400/REL@#", +"@#CONNECT 26400/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 26400/RELIABLE/LAPM@#", +"@#CONNECT 26400/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 26400/RELIABLE/MNP@#", +"@#CONNECT 26400/V42@#", +"@#CONNECT 26400/V42BIS@#", +"@#CONNECT 26400@#", +"@#CONNECT 26400T/V42BIS@#", +"@#CONNECT 26600/ARQ/V.34/MNP4@#", +"@#CONNECT 26600/ARQ/V.34/MNP5@#", +"@#CONNECT 26600/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 26600/ARQ/V.34/V42 @#", +"@#CONNECT 26600/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 26600/ARQ/V.34/V42b@#", +"@#CONNECT 26600@#", +"@#CONNECT 26800/MNP COMPRESSED@#", +"@#CONNECT 28800 LAPM COMPRESSED@#", +"@#CONNECT 28800 LAPM@#", +"@#CONNECT 28800 REL/MNP5@#", +"@#CONNECT 28800 REL@#", +"@#CONNECT 28800 RELIABLE COMPRESSED@#", +"@#CONNECT 28800 RELIABLE@#", +"@#CONNECT 28800/ARQ/V.34/MNP4@#", +"@#CONNECT 28800/ARQ/V.34/MNP5@#", +"@#CONNECT 28800/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 28800/ARQ/V.34/V42 @#", +"@#CONNECT 28800/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 28800/ARQ/V.34/V42b@#", +"@#CONNECT 28800/ARQ@#", +"@#CONNECT 28800/COMP@#", +"@#CONNECT 28800/LAP-M/COMPRESSION@#", +"@#CONNECT 28800/LAP-M@#", +"@#CONNECT 28800/LAPM/COMP@#", +"@#CONNECT 28800/LAPM/V42BIS@#", +"@#CONNECT 28800/LAPM@#", +"@#CONNECT 28800/MNP COMPRESSED@#", +"@#CONNECT 28800/MNP@#", +"@#CONNECT 28800/NONE@#", +"@#CONNECT 28800/NOR@#", +"@#CONNECT 28800/REL-LAPM V.42 BIS@#", +"@#CONNECT 28800/REL-LAPM@#", +"@#CONNECT 28800/REL-V.42@#", +"@#CONNECT 28800/REL COMP@#", +"@#CONNECT 28800/REL/COMP@#", +"@#CONNECT 28800/REL@#", +"@#CONNECT 28800/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 28800/RELIABLE/LAPM@#", +"@#CONNECT 28800/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 28800/RELIABLE/MNP@#", +"@#CONNECT 28800/V42@#", +"@#CONNECT 28800/V42BIS@#", +"@#CONNECT 28800@#", +"@#CONNECT 28800T/V42BIS@#", +"@#CONNECT 29000/ARQ/V.34/MNP4@#", +"@#CONNECT 29000/ARQ/V.34/MNP5@#", +"@#CONNECT 29000/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 29000/ARQ/V.34/V42 @#", +"@#CONNECT 29000/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 29000/ARQ/V.34/V42b@#", +"@#CONNECT 29000@#", +"@#CONNECT 300 ALT / MNP5@#", +"@#CONNECT 300 ALT /MNP 5@#", +"@#CONNECT 300 ALT@#", +"@#CONNECT 300 EC/V42BIS@#", +"@#CONNECT 300 EC@#", +"@#CONNECT 300 LAPM / V.42bis@#", +"@#CONNECT 300 LAPM /V.42bis@#", +"@#CONNECT 300 LAPM@#", +"@#CONNECT 300 REL/MNP5@#", +"@#CONNECT 300 REL@#", +"@#CONNECT 300/ARQ/MNP4@#", +"@#CONNECT 300/ARQ/MNP5@#", +"@#CONNECT 300/ARQ/V.42@#", +"@#CONNECT 300/ARQ/V.42bis@#", +"@#CONNECT 300/ARQ/V42 /SREJ@#", +"@#CONNECT 300/ARQ/V42 @#", +"@#CONNECT 300/ARQ/V42b@#", +"@#CONNECT 300/ARQ@#", +"@#CONNECT 300/COMP@#", +"@#CONNECT 300/LAP-M/COMPRESSION@#", +"@#CONNECT 300/LAP-M@#", +"@#CONNECT 300/LAPM/COMP@#", +"@#CONNECT 300/LAPM/V42BIS@#", +"@#CONNECT 300/LAPM@#", +"@#CONNECT 300/MNP COMPRESSED@#", +"@#CONNECT 300/MNP@#", +"@#CONNECT 300/NONE@#", +"@#CONNECT 300/NOR@#", +"@#CONNECT 300/REL-LAPM V.42 BIS@#", +"@#CONNECT 300/REL-LAPM@#", +"@#CONNECT 300/REL-MNP@#", +"@#CONNECT 300/REL-V.42@#", +"@#CONNECT 300/REL 1@# ", +"@#CONNECT 300/REL 2@# ", +"@#CONNECT 300/REL 3@# ", +"@#CONNECT 300/REL 4@# ", +"@#CONNECT 300/REL 5@# ", +"@#CONNECT 300/REL COMP@#", +"@#CONNECT 300/REL COMPRESSED@#", +"@#CONNECT 300/REL/COMP@#", +"@#CONNECT 300/REL@#", +"@#CONNECT 300/V42@#", +"@#CONNECT 300/V42BIS@#", +"@#CONNECT 300@#", +"@#CONNECT 300T/V42BIS@#", +"@#CONNECT 31200/ARQ/V.34/MNP4@#", +"@#CONNECT 31200/ARQ/V.34/MNP5@#", +"@#CONNECT 31200/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 31200/ARQ/V.34/V42 @#", +"@#CONNECT 31200/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 31200/ARQ/V.34/V42b@#", +"@#CONNECT 31200@#", +"@#CONNECT 31400/ARQ/V.34/MNP4@#", +"@#CONNECT 31400/ARQ/V.34/MNP5@#", +"@#CONNECT 31400/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 31400/ARQ/V.34/V42 @#", +"@#CONNECT 31400/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 31400/ARQ/V.34/V42b@#", +"@#CONNECT 31400@#", +"@#CONNECT 33600/ARQ/V.34/MNP4@#", +"@#CONNECT 33600/ARQ/V.34/MNP5@#", +"@#CONNECT 33600/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 33600/ARQ/V.34/V42 @#", +"@#CONNECT 33600/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 33600/ARQ/V.34/V42b@#", +"@#CONNECT 33600@#", +"@#CONNECT 33800/ARQ/V.34/MNP4@#", +"@#CONNECT 33800/ARQ/V.34/MNP5@#", +"@#CONNECT 33800/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 33800/ARQ/V.34/V42 @#", +"@#CONNECT 33800/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 33800/ARQ/V.34/V42b@#", +"@#CONNECT 33800@#", +"@#CONNECT 38400 ALT / MNP5@#", +"@#CONNECT 38400 ALT /MNP 5@#", +"@#CONNECT 38400 ALT@#", +"@#CONNECT 38400 EC/V42BIS@#", +"@#CONNECT 38400 EC@#", +"@#CONNECT 38400 LAPM / V.42bis@#", +"@#CONNECT 38400 LAPM /V.42bis@#", +"@#CONNECT 38400 LAPM@#", +"@#CONNECT 38400 REL/MNP5@#", +"@#CONNECT 38400 REL/V42@#", +"@#CONNECT 38400 REL@#", +"@#CONNECT 38400/ARQ/V42 /SREJ@#", +"@#CONNECT 38400/ARQ/V42 @#", +"@#CONNECT 38400/ARQ/V42b@#", +"@#CONNECT 38400/ARQ@#", +"@#CONNECT 38400/COMP@#", +"@#CONNECT 38400/LAP-M/COMPRESSION@#", +"@#CONNECT 38400/LAP-M@#", +"@#CONNECT 38400/LAPM/COMP@#", +"@#CONNECT 38400/LAPM@#", +"@#CONNECT 38400/MNP COMPRESSED@#", +"@#CONNECT 38400/MNP@#", +"@#CONNECT 38400/NONE@#", +"@#CONNECT 38400/NOR@#", +"@#CONNECT 38400/REL-LAPM V.42 BIS@#", +"@#CONNECT 38400/REL-LAPM@#", +"@#CONNECT 38400/REL-V.42@#", +"@#CONNECT 38400/REL COMP@#", +"@#CONNECT 38400/REL/COMP@#", +"@#CONNECT 38400/REL@#", +"@#CONNECT 38400/V.110@#", +"@#CONNECT 38400/V42@#", +"@#CONNECT 38400/V42BIS@#", +"@#CONNECT 38400@#", +"@#CONNECT 38400T/V42BIS@#", +"@#CONNECT 4800 ALT / MNP5@#", +"@#CONNECT 4800 ALT /MNP 5@#", +"@#CONNECT 4800 ALT@#", +"@#CONNECT 4800 EC/V42@#", +"@#CONNECT 4800 EC/V42BIS@#", +"@#CONNECT 4800 EC@#", +"@#CONNECT 4800 LAPM / V.42bis@#", +"@#CONNECT 4800 LAPM /V.42bis@#", +"@#CONNECT 4800 LAPM COMPRESSED@#", +"@#CONNECT 4800 LAPM@#", +"@#CONNECT 4800 NORMAL@#", +"@#CONNECT 4800 REL/MNP5@#", +"@#CONNECT 4800 REL/V42@#", +"@#CONNECT 4800 REL/V42BIS@#", +"@#CONNECT 4800 REL@#", +"@#CONNECT 4800 RELIABLE COMPRESSED@#", +"@#CONNECT 4800 RELIABLE@#", +"@#CONNECT 4800 V.42@#", +"@#CONNECT 4800/ARQ/CELL /MNP4@#", +"@#CONNECT 4800/ARQ/CELL /MNP5@#", +"@#CONNECT 4800/ARQ/CELL /V42 /SREJ@#", +"@#CONNECT 4800/ARQ/CELL /V42 @#", +"@#CONNECT 4800/ARQ/CELL /V42b/SREJ@#", +"@#CONNECT 4800/ARQ/CELL /V42b@#", +"@#CONNECT 4800/ARQ/CELL/MNP4@#", +"@#CONNECT 4800/ARQ/CELL/MNP5@#", +"@#CONNECT 4800/ARQ/CELL/V42 /SREJ@#", +"@#CONNECT 4800/ARQ/CELL/V42 @#", +"@#CONNECT 4800/ARQ/CELL/V42b/SREJ@#", +"@#CONNECT 4800/ARQ/CELL/V42b@#", +"@#CONNECT 4800/ARQ/MNP4@#", +"@#CONNECT 4800/ARQ/MNP5@#", +"@#CONNECT 4800/ARQ/V.34/MNP4@#", +"@#CONNECT 4800/ARQ/V.34/MNP5@#", +"@#CONNECT 4800/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 4800/ARQ/V.34/V42 @#", +"@#CONNECT 4800/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 4800/ARQ/V.34/V42b@#", +"@#CONNECT 4800/ARQ/V.42@#", +"@#CONNECT 4800/ARQ/V.42bis@#", +"@#CONNECT 4800/ARQ/V32 /MNP4@#", +"@#CONNECT 4800/ARQ/V32 /MNP5@#", +"@#CONNECT 4800/ARQ/V32 /V42 /SREJ@#", +"@#CONNECT 4800/ARQ/V32 /V42 @#", +"@#CONNECT 4800/ARQ/V32 /V42b/SREJ@#", +"@#CONNECT 4800/ARQ/V32 /V42b@#", +"@#CONNECT 4800/ARQ/V32 /MNP4@#", +"@#CONNECT 4800/ARQ/V32 /MNP5@#", +"@#CONNECT 4800/ARQ/V32 /V42 /SREJ@#", +"@#CONNECT 4800/ARQ/V32 /V42 @#", +"@#CONNECT 4800/ARQ/V32 /V42b/SREJ@#", +"@#CONNECT 4800/ARQ/V32 /V42b@#", +"@#CONNECT 4800/ARQ/V32b /MNP4@#", +"@#CONNECT 4800/ARQ/V32b /MNP5@#", +"@#CONNECT 4800/ARQ/V32b /V42 /SREJ@#", +"@#CONNECT 4800/ARQ/V32b /V42 @#", +"@#CONNECT 4800/ARQ/V32b /V42b/SREJ@#", +"@#CONNECT 4800/ARQ/V32b /V42b@#", +"@#CONNECT 4800/ARQ/V32b/MNP4@#", +"@#CONNECT 4800/ARQ/V32b/MNP5@#", +"@#CONNECT 4800/ARQ/V32b/V42 /SREJ@#", +"@#CONNECT 4800/ARQ/V32b/V42 @#", +"@#CONNECT 4800/ARQ/V32b/V42b/SREJ@#", +"@#CONNECT 4800/ARQ/V32b/V42b@#", +"@#CONNECT 4800/ARQ/V42 /SREJ@#", +"@#CONNECT 4800/ARQ/V42 @#", +"@#CONNECT 4800/ARQ/V42b/SREJ@#", +"@#CONNECT 4800/ARQ/V42b@#", +"@#CONNECT 4800/ARQ/ZyX /MNP4@#", +"@#CONNECT 4800/ARQ/ZyX /MNP5@#", +"@#CONNECT 4800/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 4800/ARQ/ZyX /V42 @#", +"@#CONNECT 4800/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 4800/ARQ/ZyX /V42b@#", +"@#CONNECT 4800/ARQ/ZyX /MNP4@#", +"@#CONNECT 4800/ARQ/ZyX /MNP5@#", +"@#CONNECT 4800/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 4800/ARQ/ZyX /V42 @#", +"@#CONNECT 4800/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 4800/ARQ/ZyX /V42b@#", +"@#CONNECT 4800/ARQ@#", +"@#CONNECT 4800/COMP@#", +"@#CONNECT 4800/LAP-M/COMPRESSION@#", +"@#CONNECT 4800/LAP-M@#", +"@#CONNECT 4800/LAPM/COMP@#", +"@#CONNECT 4800/LAPM/V42BIS@#", +"@#CONNECT 4800/LAPM@#", +"@#CONNECT 4800/MNP COMPRESSED@#", +"@#CONNECT 4800/MNP@#", +"@#CONNECT 4800/NONE@#", +"@#CONNECT 4800/NOR@#", +"@#CONNECT 4800/REL-LAPM-COMP@#", +"@#CONNECT 4800/REL-LAPM V.42 BIS@#", +"@#CONNECT 4800/REL-LAPM@#", +"@#CONNECT 4800/REL-MNP-COMP@#", +"@#CONNECT 4800/REL-MNP@#", +"@#CONNECT 4800/REL-V.42@#", +"@#CONNECT 4800/REL 1@# ", +"@#CONNECT 4800/REL 2@# ", +"@#CONNECT 4800/REL 3@# ", +"@#CONNECT 4800/REL 4@# ", +"@#CONNECT 4800/REL 5@# ", +"@#CONNECT 4800/REL COMP@#", +"@#CONNECT 4800/REL COMPRESSED@#", +"@#CONNECT 4800/REL/COMP@#", +"@#CONNECT 4800/REL@#", +"@#CONNECT 4800/RELC@#", +"@#CONNECT 4800/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 4800/RELIABLE/LAPM@#", +"@#CONNECT 4800/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 4800/RELIABLE/MNP@#", +"@#CONNECT 4800/V42@#", +"@#CONNECT 4800/V42B@#", +"@#CONNECT 4800/V42BIS@#", +"@#CONNECT 4800@#", +"@#CONNECT 48000@#", +"@#CONNECT 4800T/V42BIS@#", +"@#CONNECT 5000/ARQ/V.34/MNP4@#", +"@#CONNECT 5000/ARQ/V.34/MNP5@#", +"@#CONNECT 5000/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 5000/ARQ/V.34/V42 @#", +"@#CONNECT 5000/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 5000/ARQ/V.34/V42b@#", +"@#CONNECT 5000@#", +"@#CONNECT 56000/ARQ/SLP /V120/V42b@#", +"@#CONNECT 56000/ARQ/SLP /V120@#", +"@#CONNECT 56000/REL@#", +"@#CONNECT 56000@#", +"@#CONNECT 57600 ALT / MNP5@#", +"@#CONNECT 57600 ALT /MNP 5@#", +"@#CONNECT 57600 ALT@#", +"@#CONNECT 57600 EC/V42BIS@#", +"@#CONNECT 57600 EC@#", +"@#CONNECT 57600 LAPM / V.42bis@#", +"@#CONNECT 57600 LAPM /V.42bis@#", +"@#CONNECT 57600 LAPM@#", +"@#CONNECT 57600 REL/MNP5@#", +"@#CONNECT 57600 REL@#", +"@#CONNECT 57600/ARQ/V42 /SREJ@#", +"@#CONNECT 57600/ARQ/V42 @#", +"@#CONNECT 57600/ARQ/V42b@#", +"@#CONNECT 57600/ARQ@#", +"@#CONNECT 57600/COMP@#", +"@#CONNECT 57600/LAP-M/COMPRESSION@#", +"@#CONNECT 57600/LAP-M@#", +"@#CONNECT 57600/LAPM/COMP@#", +"@#CONNECT 57600/LAPM@#", +"@#CONNECT 57600/MNP COMPRESSED@#", +"@#CONNECT 57600/MNP@#", +"@#CONNECT 57600/NONE@#", +"@#CONNECT 57600/NOR@#", +"@#CONNECT 57600/REL-LAPM V.42 BIS@#", +"@#CONNECT 57600/REL-LAPM@#", +"@#CONNECT 57600/REL-V.42@#", +"@#CONNECT 57600/REL COMP@#", +"@#CONNECT 57600/REL/COMP@#", +"@#CONNECT 57600/REL@#", +"@#CONNECT 57600/V42@#", +"@#CONNECT 57600/V42BIS@#", +"@#CONNECT 57600@#", +"@#CONNECT 57600@#@#@#*@#COM@#", +"@#CONNECT 57600T/V42BIS@#", +"@#CONNECT 600 ALT / MNP5@#", +"@#CONNECT 600 ALT /MNP 5@#", +"@#CONNECT 600 ALT@#", +"@#CONNECT 600 EC/V42BIS@#", +"@#CONNECT 600 EC@#", +"@#CONNECT 600 LAPM / V.42bis@#", +"@#CONNECT 600 LAPM /V.42bis@#", +"@#CONNECT 600 LAPM@#", +"@#CONNECT 600 REL/MNP5@#", +"@#CONNECT 600 REL@#", +"@#CONNECT 600/ARQ/MNP4@#", +"@#CONNECT 600/ARQ/MNP5@#", +"@#CONNECT 600/ARQ/V.42@#", +"@#CONNECT 600/ARQ/V.42bis@#", +"@#CONNECT 600/ARQ@#", +"@#CONNECT 600/COMP@#", +"@#CONNECT 600/LAP-M/COMPRESSION@#", +"@#CONNECT 600/LAP-M@#", +"@#CONNECT 600/LAPM/COMP@#", +"@#CONNECT 600/LAPM@#", +"@#CONNECT 600/MNP COMPRESSED@#", +"@#CONNECT 600/MNP@#", +"@#CONNECT 600/NONE@#", +"@#CONNECT 600/REL-LAPM V.42 BIS@#", +"@#CONNECT 600/REL 1@# ", +"@#CONNECT 600/REL 2@# ", +"@#CONNECT 600/REL 3@# ", +"@#CONNECT 600/REL 4@# ", +"@#CONNECT 600/REL 5@# ", +"@#CONNECT 600/REL COMPRESSED@#", +"@#CONNECT 600/REL/COMP@#", +"@#CONNECT 600/REL@#", +"@#CONNECT 600/V42@#", +"@#CONNECT 600/V42BIS@#", +"@#CONNECT 600@#", +"@#CONNECT 64000/ARQ/SLP /X.75/V42b@#", +"@#CONNECT 64000/ARQ/SLP /X.75@#", +"@#CONNECT 64000/MNP@#", +"@#CONNECT 64000/REL@#", +"@#CONNECT 64000/X.70 BTX@#", +"@#CONNECT 64000/X.70NL@#", +"@#CONNECT 64000/X.75@#", +"@#CONNECT 64000@#", +"@#CONNECT 7200 ALT / MNP5@#", +"@#CONNECT 7200 ALT /MNP 5@#", +"@#CONNECT 7200 ALT@#", +"@#CONNECT 7200 EC/V42@#", +"@#CONNECT 7200 EC/V42BIS@#", +"@#CONNECT 7200 EC@#", +"@#CONNECT 7200 LAPM / V.42bis@#", +"@#CONNECT 7200 LAPM /V.42bis@#", +"@#CONNECT 7200 LAPM COMPRESSED@#", +"@#CONNECT 7200 LAPM@#", +"@#CONNECT 7200 REL/MNP5@#", +"@#CONNECT 7200 REL/V42@#", +"@#CONNECT 7200 REL/V42BIS@#", +"@#CONNECT 7200 REL@#", +"@#CONNECT 7200 RELIABLE@#", +"@#CONNECT 7200/ARQ/CELL /MNP4@#", +"@#CONNECT 7200/ARQ/CELL /MNP5@#", +"@#CONNECT 7200/ARQ/CELL /V42 /SREJ@#", +"@#CONNECT 7200/ARQ/CELL /V42 @#", +"@#CONNECT 7200/ARQ/CELL /V42b/SREJ@#", +"@#CONNECT 7200/ARQ/CELL /V42b@#", +"@#CONNECT 7200/ARQ/CELL/MNP4@#", +"@#CONNECT 7200/ARQ/CELL/MNP5@#", +"@#CONNECT 7200/ARQ/CELL/V42 /SREJ@#", +"@#CONNECT 7200/ARQ/CELL/V42 @#", +"@#CONNECT 7200/ARQ/CELL/V42b/SREJ@#", +"@#CONNECT 7200/ARQ/CELL/V42b@#", +"@#CONNECT 7200/ARQ/MNP4@#", +"@#CONNECT 7200/ARQ/MNP5@#", +"@#CONNECT 7200/ARQ/V.34/MNP4@#", +"@#CONNECT 7200/ARQ/V.34/MNP5@#", +"@#CONNECT 7200/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 7200/ARQ/V.34/V42 @#", +"@#CONNECT 7200/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 7200/ARQ/V.34/V42b@#", +"@#CONNECT 7200/ARQ/V.42@#", +"@#CONNECT 7200/ARQ/V.42bis@#", +"@#CONNECT 7200/ARQ/V32 /MNP4@#", +"@#CONNECT 7200/ARQ/V32 /MNP5@#", +"@#CONNECT 7200/ARQ/V32 /V42 /SREJ@#", +"@#CONNECT 7200/ARQ/V32 /V42 @#", +"@#CONNECT 7200/ARQ/V32 /V42b/SREJ@#", +"@#CONNECT 7200/ARQ/V32 /V42b@#", +"@#CONNECT 7200/ARQ/V32 /MNP4@#", +"@#CONNECT 7200/ARQ/V32 /MNP5@#", +"@#CONNECT 7200/ARQ/V32 /V42 /SREJ@#", +"@#CONNECT 7200/ARQ/V32 /V42 @#", +"@#CONNECT 7200/ARQ/V32 /V42b/SREJ@#", +"@#CONNECT 7200/ARQ/V32 /V42b@#", +"@#CONNECT 7200/ARQ/V32b /MNP4@#", +"@#CONNECT 7200/ARQ/V32b /MNP5@#", +"@#CONNECT 7200/ARQ/V32b /V42 /SREJ@#", +"@#CONNECT 7200/ARQ/V32b /V42 @#", +"@#CONNECT 7200/ARQ/V32b /V42b/SREJ@#", +"@#CONNECT 7200/ARQ/V32b /V42b@#", +"@#CONNECT 7200/ARQ/V32b/MNP4@#", +"@#CONNECT 7200/ARQ/V32b/MNP5@#", +"@#CONNECT 7200/ARQ/V32b/V42 /SREJ@#", +"@#CONNECT 7200/ARQ/V32b/V42 @#", +"@#CONNECT 7200/ARQ/V32b/V42b/SREJ@#", +"@#CONNECT 7200/ARQ/V32b/V42b@#", +"@#CONNECT 7200/ARQ/V42 /SREJ@#", +"@#CONNECT 7200/ARQ/V42 @#", +"@#CONNECT 7200/ARQ/V42b/SREJ@#", +"@#CONNECT 7200/ARQ/V42b@#", +"@#CONNECT 7200/ARQ/ZyX /MNP4@#", +"@#CONNECT 7200/ARQ/ZyX /MNP5@#", +"@#CONNECT 7200/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 7200/ARQ/ZyX /V42 @#", +"@#CONNECT 7200/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 7200/ARQ/ZyX /V42b@#", +"@#CONNECT 7200/ARQ/ZyX /MNP4@#", +"@#CONNECT 7200/ARQ/ZyX /MNP5@#", +"@#CONNECT 7200/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 7200/ARQ/ZyX /V42 @#", +"@#CONNECT 7200/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 7200/ARQ/ZyX /V42b@#", +"@#CONNECT 7200/ARQ@#", +"@#CONNECT 7200/COMP@#", +"@#CONNECT 7200/LAP-M/COMPRESSION@#", +"@#CONNECT 7200/LAP-M@#", +"@#CONNECT 7200/LAPM/COMP@#", +"@#CONNECT 7200/LAPM/V42BIS@#", +"@#CONNECT 7200/LAPM@#", +"@#CONNECT 7200/MNP COMPRESSED@#", +"@#CONNECT 7200/MNP@#", +"@#CONNECT 7200/NONE@#", +"@#CONNECT 7200/NOR@#", +"@#CONNECT 7200/REL-LAPM-COMP@#", +"@#CONNECT 7200/REL-LAPM V.42 BIS@#", +"@#CONNECT 7200/REL-LAPM@#", +"@#CONNECT 7200/REL-MNP-COMP@#", +"@#CONNECT 7200/REL-MNP@#", +"@#CONNECT 7200/REL-V.42@#", +"@#CONNECT 7200/REL 1@# ", +"@#CONNECT 7200/REL 2@# ", +"@#CONNECT 7200/REL 3@# ", +"@#CONNECT 7200/REL 4@# ", +"@#CONNECT 7200/REL 5@# ", +"@#CONNECT 7200/REL COMP@#", +"@#CONNECT 7200/REL/COMP@#", +"@#CONNECT 7200/REL@#", +"@#CONNECT 7200/RELC@#", +"@#CONNECT 7200/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 7200/RELIABLE/LAPM@#", +"@#CONNECT 7200/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 7200/RELIABLE/MNP@#", +"@#CONNECT 7200/V42@#", +"@#CONNECT 7200/V42B@#", +"@#CONNECT 7200/V42BIS@#", +"@#CONNECT 7200@#", +"@#CONNECT 7200T/V42BIS@#", +"@#CONNECT 7400/ARQ/V.34/MNP4@#", +"@#CONNECT 7400/ARQ/V.34/MNP5@#", +"@#CONNECT 7400/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 7400/ARQ/V.34/V42 @#", +"@#CONNECT 7400/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 7400/ARQ/V.34/V42b@#", +"@#CONNECT 7400@#", +"@#CONNECT 75/1200", +"@#CONNECT 75/1200/ARQ@#", +"@#CONNECT 75/1200/LAP-M/COMPRESSION@#", +"@#CONNECT 75/1200/LAP-M@#", +"@#CONNECT 75/1200/LAPM/COMP@#", +"@#CONNECT 75/1200/LAPM@#", +"@#CONNECT 75/1200/MNP@#", +"@#CONNECT 75/1200/NONE@#", +"@#CONNECT 75/1200/REL-LAPM V.42 BIS@#", +"@#CONNECT 75/1200/REL/COMP@#", +"@#CONNECT 75/1200/REL@#", +"@#CONNECT 75/1200/REL#", +"@#CONNECT 75/1200/V42@#", +"@#CONNECT 75/1200/V42BIS@#", +"@#CONNECT 75/1200@#", +"@#CONNECT 75TX/1200RX REL/MNP5@#", +"@#CONNECT 75TX/1200RX REL@#", +"@#CONNECT 75TX/1200RX/ARQ@#", +"@#CONNECT 75TX/1200RX/LAP-M/COMPRESSION@#", +"@#CONNECT 75TX/1200RX/LAP-M@#", +"@#CONNECT 75TX/1200RX/LAPM/COMP@#", +"@#CONNECT 75TX/1200RX/LAPM@#", +"@#CONNECT 75TX/1200RX/MNP@#", +"@#CONNECT 75TX/1200RX/NONE@#", +"@#CONNECT 75TX/1200RX/REL-LAPM V.42 BIS@#", +"@#CONNECT 75TX/1200RX/REL/COMP@#", +"@#CONNECT 75TX/1200RX/REL@#", +"@#CONNECT 75TX/1200RX/V42@#", +"@#CONNECT 75TX/1200RX/V42BIS@#", +"@#CONNECT 75TX/1200RX@#", +"@#CONNECT 76800/ARQ/V42 /SREJ@#", +"@#CONNECT 76800/ARQ/V42 @#", +"@#CONNECT 76800/ARQ/V42b@#", +"@#CONNECT 76800@#", +"@#CONNECT 9600 ALT / MNP5@#", +"@#CONNECT 9600 ALT /MNP 5@#", +"@#CONNECT 9600 ALT@#", +"@#CONNECT 9600 EC/V42@#", +"@#CONNECT 9600 EC/V42BIS@#", +"@#CONNECT 9600 EC@#", +"@#CONNECT 9600 LAPM / V.42bis@#", +"@#CONNECT 9600 LAPM /V.42bis@#", +"@#CONNECT 9600 LAPM COMPRESSED@#", +"@#CONNECT 9600 LAPM@#", +"@#CONNECT 9600 NORMAL@#", +"@#CONNECT 9600 REL/MNP5@#", +"@#CONNECT 9600 REL/V42@#", +"@#CONNECT 9600 REL/V42BIS@#", +"@#CONNECT 9600 REL@#", +"@#CONNECT 9600 RELIABLE COMPRESSED@#", +"@#CONNECT 9600 RELIABLE@#", +"@#CONNECT 9600 V.42@#", +"@#CONNECT 9600/ARQ/CELL /MNP4@#", +"@#CONNECT 9600/ARQ/CELL /MNP5@#", +"@#CONNECT 9600/ARQ/CELL /V42 /SREJ@#", +"@#CONNECT 9600/ARQ/CELL /V42 @#", +"@#CONNECT 9600/ARQ/CELL /V42b/SREJ@#", +"@#CONNECT 9600/ARQ/CELL /V42b@#", +"@#CONNECT 9600/ARQ/CELL/MNP4@#", +"@#CONNECT 9600/ARQ/CELL/MNP5@#", +"@#CONNECT 9600/ARQ/CELL/V42 /SREJ@#", +"@#CONNECT 9600/ARQ/CELL/V42 @#", +"@#CONNECT 9600/ARQ/CELL/V42b/SREJ@#", +"@#CONNECT 9600/ARQ/CELL/V42b@#", +"@#CONNECT 9600/ARQ/MNP4@#", +"@#CONNECT 9600/ARQ/MNP5@#", +"@#CONNECT 9600/ARQ/V.34/MNP4@#", +"@#CONNECT 9600/ARQ/V.34/MNP5@#", +"@#CONNECT 9600/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 9600/ARQ/V.34/V42 @#", +"@#CONNECT 9600/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 9600/ARQ/V.34/V42b@#", +"@#CONNECT 9600/ARQ/V.42@#", +"@#CONNECT 9600/ARQ/V.42bis@#", +"@#CONNECT 9600/ARQ/V32 /MNP4@#", +"@#CONNECT 9600/ARQ/V32 /MNP5@#", +"@#CONNECT 9600/ARQ/V32 /V42 /SREJ@#", +"@#CONNECT 9600/ARQ/V32 /V42 @#", +"@#CONNECT 9600/ARQ/V32 /V42b/SREJ@#", +"@#CONNECT 9600/ARQ/V32 /V42b@#", +"@#CONNECT 9600/ARQ/V32 /MNP4@#", +"@#CONNECT 9600/ARQ/V32 /MNP5@#", +"@#CONNECT 9600/ARQ/V32 /V42 /SREJ@#", +"@#CONNECT 9600/ARQ/V32 /V42 @#", +"@#CONNECT 9600/ARQ/V32 /V42b/SREJ@#", +"@#CONNECT 9600/ARQ/V32 /V42b@#", +"@#CONNECT 9600/ARQ/V32b /MNP4@#", +"@#CONNECT 9600/ARQ/V32b /MNP5@#", +"@#CONNECT 9600/ARQ/V32b /V42 /SREJ@#", +"@#CONNECT 9600/ARQ/V32b /V42 @#", +"@#CONNECT 9600/ARQ/V32b /V42b/SREJ@#", +"@#CONNECT 9600/ARQ/V32b /V42b@#", +"@#CONNECT 9600/ARQ/V32b/MNP4@#", +"@#CONNECT 9600/ARQ/V32b/MNP5@#", +"@#CONNECT 9600/ARQ/V32b/V42 /SREJ@#", +"@#CONNECT 9600/ARQ/V32b/V42 @#", +"@#CONNECT 9600/ARQ/V32b/V42b/SREJ@#", +"@#CONNECT 9600/ARQ/V32b/V42b@#", +"@#CONNECT 9600/ARQ/V42 /SREJ@#", +"@#CONNECT 9600/ARQ/V42 @#", +"@#CONNECT 9600/ARQ/V42b/SREJ@#", +"@#CONNECT 9600/ARQ/V42b@#", +"@#CONNECT 9600/ARQ/ZyX /MNP4@#", +"@#CONNECT 9600/ARQ/ZyX /MNP5@#", +"@#CONNECT 9600/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 9600/ARQ/ZyX /V42 @#", +"@#CONNECT 9600/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 9600/ARQ/ZyX /V42b@#", +"@#CONNECT 9600/ARQ/ZyX /MNP4@#", +"@#CONNECT 9600/ARQ/ZyX /MNP5@#", +"@#CONNECT 9600/ARQ/ZyX /V42 /SREJ@#", +"@#CONNECT 9600/ARQ/ZyX /V42 @#", +"@#CONNECT 9600/ARQ/ZyX /V42b/SREJ@#", +"@#CONNECT 9600/ARQ/ZyX /V42b@#", +"@#CONNECT 9600/ARQ@#", +"@#CONNECT 9600/COMP@#", +"@#CONNECT 9600/LAP-M/COMPRESSION@#", +"@#CONNECT 9600/LAP-M@#", +"@#CONNECT 9600/LAPM/COMP@#", +"@#CONNECT 9600/LAPM/V42BIS@#", +"@#CONNECT 9600/LAPM@#", +"@#CONNECT 9600/MNP COMPRESSED@#", +"@#CONNECT 9600/MNP@#", +"@#CONNECT 9600/NONE@#", +"@#CONNECT 9600/NOR@#", +"@#CONNECT 9600/REL-LAPM-COMP@#", +"@#CONNECT 9600/REL-LAPM V.42 BIS@#", +"@#CONNECT 9600/REL-LAPM@#", +"@#CONNECT 9600/REL-MNP-COMP@#", +"@#CONNECT 9600/REL-MNP@#", +"@#CONNECT 9600/REL-V.42@#", +"@#CONNECT 9600/REL 1@# ", +"@#CONNECT 9600/REL 2@# ", +"@#CONNECT 9600/REL 3@# ", +"@#CONNECT 9600/REL 4@# ", +"@#CONNECT 9600/REL 5@# ", +"@#CONNECT 9600/REL COMP@#", +"@#CONNECT 9600/REL COMPRESSED@#", +"@#CONNECT 9600/REL/COMP@#", +"@#CONNECT 9600/REL@#", +"@#CONNECT 9600/RELC@#", +"@#CONNECT 9600/RELIABLE/LAPM/COMPRESSED@#", +"@#CONNECT 9600/RELIABLE/LAPM@#", +"@#CONNECT 9600/RELIABLE/MNP/COMPRESSED@#", +"@#CONNECT 9600/RELIABLE/MNP@#", +"@#CONNECT 9600/V.110@#", +"@#CONNECT 9600/V42@#", +"@#CONNECT 9600/V42B@#", +"@#CONNECT 9600/V42BIS@#", +"@#CONNECT 9600@#", +"@#CONNECT 9600T RELIABLE@#", +"@#CONNECT 9600T V.42@#", +"@#CONNECT 9600T/V42BIS@#", +"@#CONNECT 9800/ARQ/V.34/MNP4@#", +"@#CONNECT 9800/ARQ/V.34/MNP5@#", +"@#CONNECT 9800/ARQ/V.34/V42 /SREJ@#", +"@#CONNECT 9800/ARQ/V.34/V42 @#", +"@#CONNECT 9800/ARQ/V.34/V42b/SREJ@#", +"@#CONNECT 9800/ARQ/V.34/V42b@#", +"@#CONNECT 9800@#", +"@#CONNECT EC@#", +"@#CONNECT FAST@#", +"@#CONNECT LAPM COMPRESSED@#", +"@#CONNECT LAPM@#", +"@#CONNECT REL/MNP5@#", +"@#CONNECT REL@#", +"@#CONNECT RELIABLE COMPRESSED@#", +"@#CONNECT RELIABLE@#", +"@#CONNECT V.21/REL@#", +"@#CONNECT/ARQ@#", +"@#CONNECT/LAP-M/COMPRESSION@#", +"@#CONNECT/LAP-M@#", +"@#CONNECT/LAPM/COMP@#", +"@#CONNECT/LAPM@#", +"@#CONNECT/MNP@#", +"@#CONNECT/NONE@#", +"@#CONNECT/REL/COMP@#", +"@#CONNECT/REL@#", +"@#CONNECT/V42@#", +"@#CONNECT/V42BIS@#", +"@#CONNECT@#", +"@#DALAYED@#", +"@#DATA@#", +"@#DATE = ", +"@#DELAYED", +"@#Delayed@#", +"@#DELAYED@#", +"@#Delayed@#", +"@#DELAYED@#", +"@#DIALING@#", +"@#DISCONNECT@#", +"@#Don't use this command at this situation @#", +"@#ERROR SERIAL SPEED SETUP@#", +"@#ERROR@#", +"@#FAX@#", +"@#LIB DER 00@#", +"@#LOCKED@#", +"@#NO ANSWER@#", +"@#NO CARRIER@#", +"@#NO DIAL TONE@#", +"@#NO DIALTONE@#", +"@#NO USER RESPONDING@#", +"@#NOTUSED@#", +"@#NUMBER DELAYED:TIMER@#", +"@#NUMBER LOCKED OUT@#", +"@#OFF HOOK@#", +"@#OK@#", +"@#PROTOCOL: ALT-+FCERROR@#", +"@#PROTOCOL: ALT-CELLULAR@#", +"@#PROTOCOL: ALT-DATA@#", +"@#PROTOCOL: ALT-FAX@#", +"@#PROTOCOL: ALT - CELLULAR@#", +"@#PROTOCOL: ALT CELLULAR@#", +"@#PROTOCOL: ALT@#", +"@#PROTOCOL: ERROR-CONTROL/LAP-B@#", +"@#PROTOCOL: ERROR-CONTROL/LAPB/AFT@#", +"@#PROTOCOL: ERROR-CONTROL/LAPB/HDX@#", +"@#PROTOCOL: ERROR-CONTROL/LAPB@#", +"@#PROTOCOL: LAP-M/AFT@#", +"@#PROTOCOL: LAP-M/HDX@#", +"@#PROTOCOL: LAP-M@#", +"@#PROTOCOL: LAP_M@#", +"@#PROTOCOL: LAPM/AFT@#", +"@#PROTOCOL: LAPM/HDX@#", +"@#PROTOCOL: LAPM@#", +"@#PROTOCOL: MNP 3,4@#", +"@#PROTOCOL: MNP ALT@#", +"@#PROTOCOL: MNP REL 1@#", +"@#PROTOCOL: MNP REL 2@#", +"@#PROTOCOL: MNP REL 3@#", +"@#PROTOCOL: MNP REL 4@#", +"@#PROTOCOL: MNP REL 5@#", +"@#PROTOCOL: MNP REL@#", +"@#PROTOCOL: MNP@#", +"@#PROTOCOL: MNP1@#", +"@#PROTOCOL: MNP2@#", +"@#PROTOCOL: MNP3@#", +"@#PROTOCOL: MNP4@#", +"@#PROTOCOL: NONE@#", +"@#PROTOCOL: PAD@#", +"@#PROTOCOL: V.42BIS@#", +"@#PROTOCOL: V42@#", +"@#PROTOCOL: V42BIS@#", +"@#PROTOCOL: X.25/LAPB/AFT@#", +"@#PROTOCOL: X.25/LAPB/HDX@#", +"@#PROTOCOL: X.25/LAPB@#", +"@#PROTOCOL:ALT-+FCERROR@#", +"@#PROTOCOL:ALT-CELLULAR@#", +"@#PROTOCOL:ALT-DATA@#", +"@#PROTOCOL:ALT-FAX@#", +"@#PROTOCOL:ALT@#", +"@#PROTOCOL:LAP-M@#", +"@#PROTOCOL:LAPM@#", +"@#PROTOCOL:MNP@#", +"@#PROTOCOL:MNP2@#", +"@#PROTOCOL:MNP3@#", +"@#PROTOCOL:MNP4@#", +"@#PROTOCOL:NONE@#", +"@#PROTOCOL:V.42BIS@#", +"@#PROTOCOL:V42BIS@#", +"@#RING@#", +"@#RING1@#", +"@#RING2@#", +"@#RING3@#", +"@#RINGING@#", +"@#RRING@#", +"@#TEST FAILED@#", +"@#TEST PASSED@#", +"@#VCON@#", +"@#VOICE@#", +"@#Wait 5 seconds,then dial@#", +"@OK#", +"<ff>@", +"<ff>@@#OK@#", +"<h00>CLIENT", +"#", +"0@", +"0<CR>", +"0@", +"00@", +"01@", +"02@", +"03@", +"04@", +"05@", +"06@", +"07@", +"08@", +"1<CR>", +"1@", +"10@", +"10<CR>", +"10@", +"10@#", +"10@66@", +"10@67@", +"10@69@", +"100@", +"101@", +"102@", +"103@", +"104@", +"105@", +"10L@#", +"10LC@#", +"10R@#", +"10RC@#", +"11<CR>", +"11@", +"11<CR>", +"11@", +"11<CR>", +"11@", +"11<CR>", +"11@", +"11<CR>", +"11@", +"11@#", +"11@66@", +"11@67@", +"11@69@", +"111@", +"112@", +"113@", +"114@", +"115@", +"116@", +"117@", +"118@", +"119@", +"11L@#", +"11LC@#", +"11R@#", +"11RC@#", +"12@", +"12<CR>", +"12@", +"12<CR>", +"12@", +"12<CR>", +"12@", +"12<CR>", +"12@", +"12<CR>", +"12@", +"12@#", +"12@66@", +"12@67@", +"12@69@", +"120@", +"121@", +"122@", +"123@", +"124@", +"125@", +"126@", +"127@", +"128@", +"129@", +"12L@#", +"12LC@#", +"12R@#", +"12RC@#", +"13@", +"13<CR>", +"13@", +"13<CR>", +"13@", +"13<CR>", +"13@", +"13<CR>", +"13@", +"13<CR>", +"13@#", +"13@66@", +"13@67@", +"13@69@", +"13L@#", +"13LC@#", +"13R@#", +"13RC@#", +"14@", +"14<CR>", +"14@", +"14<CR>", +"14@", +"14<CR>", +"14@", +"14<CR>", +"14@66@", +"14@67@", +"14@69@", +"15@", +"15<CR>", +"15@", +"15<CR>", +"15@", +"15<CR>", +"15@", +"15<CR>", +"15@", +"15@66@", +"15@67@", +"15@69@", +"16@", +"16<CR>", +"16@", +"16@66@", +"16@67@", +"16@69@", +"17@", +"18@", +"18<CR>", +"18@", +"19@", +"19@#", +"19L@#", +"19LC@#", +"19R@#", +"19RC@#", +"1L@#", +"1LC@#", +"1R@#", +"1RC@#", +"2@", +"2<CR>", +"2@", +"20@", +"21@", +"21@#", +"21L@#", +"21LC@#", +"21R@#", +"21RC@#", +"22@", +"22<CR>", +"22@", +"22<CR>", +"22@", +"22<CR>", +"22@", +"22<CR>", +"22@", +"23<CR>", +"23@", +"23<CR>", +"23@", +"23<CR>", +"23@", +"23<CR>", +"23@", +"24@", +"24<CR>", +"24@", +"24<CR>", +"24@", +"24<CR>", +"24@", +"24<CR>", +"24@", +"24<CR>", +"24@", +"24@#", +"24L@#", +"24LC@#", +"24R@#", +"24RC@#", +"25@", +"25<CR>", +"25@", +"25<CR>", +"25@", +"25<CR>", +"26<CR>", +"26@", +"26<CR>", +"26@", +"26<CR>", +"26@", +"26@#", +"26L@#", +"26LC@#", +"26R@#", +"26RC<cR>#", +"27@", +"28@", +"28<CR>", +"28@", +"28<CR>", +"28@", +"28<CR>", +"28@", +"28@#", +"28L@#", +"28LC@#", +"28R@#", +"28RC@#", +"29@", +"29<CR>", +"29@", +"3@", +"3<CR>", +"3@", +"30@", +"31@", +"31<CR>", +"31@", +"32@", +"33@", +"34<CR>", +"34@", +"35@", +"36@", +"36<CR>", +"36@", +"37@", +"37<CR>", +"37@", +"38<CR>", +"38@", +"39@", +"4@", +"4<CR>", +"4@", +"40@", +"40<CR>", +"40@", +"40@70@01@", +"40@70@66@01@", +"40@70@67@01@", +"40@70@69@01@", +"40@77@01@", +"40@77@66@01@", +"40@77@67@01@", +"40@77@69@01@", +"40@80@01@", +"40@80@66@01@", +"40@80@67@01@", +"40@80@69@01@", +"40@81@01@", +"40@81@66@01@", +"40@81@67@01@", +"40@81@69@01@", +"41@", +"42@", +"43@", +"44@", +"44<CR>", +"44@", +"44@70@05@", +"44@70@66@05@", +"44@70@67@05@", +"44@70@69@05@", +"44@77@05@", +"44@77@66@05@", +"44@77@67@05@", +"44@77@69@05@", +"44@80@05@", +"44@80@66@05@", +"44@80@67@05@", +"44@80@69@05@", +"44@81@05@", +"44@81@66@05@", +"44@81@67@05@", +"44@81@69@05@", +"45@", +"45<CR>", +"45@", +"45@70@05@", +"45@70@66@05@", +"45@70@67@05@", +"45@70@69@05@", +"45@77@05@", +"45@77@66@05@", +"45@77@67@05@", +"45@77@69@05@", +"45@80@05@", +"45@80@66@05@", +"45@80@67@05@", +"45@80@69@05@", +"45@81@05@", +"45@81@66@05@", +"45@81@67@05@", +"45@81@69@05@", +"46@", +"46<CR>", +"46@", +"46@70@05@", +"46@70@66@05@", +"46@70@67@05@", +"46@70@69@05@", +"46@77@05@", +"46@77@66@05@", +"46@77@67@05@", +"46@77@69@05@", +"46@80@05@", +"46@80@66@05@", +"46@80@67@05@", +"46@80@69@05@", +"46@81@05@", +"46@81@66@05@", +"46@81@67@05@", +"46@81@69@05@", +"47@", +"47<CR>", +"47@", +"47@70@10@", +"47@70@66@10@", +"47@70@67@10@", +"47@70@69@10@", +"47@77@10@", +"47@77@66@10@", +"47@77@67@10@", +"47@77@69@10@", +"47@80@10@", +"47@80@66@10@", +"47@80@67@10@", +"47@80@69@10@", +"47@81@10@", +"47@81@66@10@", +"47@81@67@10@", +"47@81@69@10@", +"48@", +"48<CR>", +"48@", +"48@70@11@", +"48@70@66@11@", +"48@70@67@11@", +"48@70@69@11@", +"48@77@11@", +"48@77@66@11@", +"48@77@67@11@", +"48@77@69@11@", +"48@80@11@", +"48@80@66@11@", +"48@80@67@11@", +"48@80@69@11@", +"48@81@11@", +"48@81@66@11@", +"48@81@67@11@", +"48@81@69@11@", +"49@", +"49<CR>", +"49@", +"49@70@13@", +"49@70@66@13@", +"49@70@67@13@", +"49@70@69@13@", +"49@77@13@", +"49@77@66@13@", +"49@77@67@13@", +"49@77@69@13@", +"49@80@13@", +"49@80@66@13@", +"49@80@67@13@", +"49@80@69@13@", +"49@81@13@", +"49@81@66@13@", +"49@81@67@13@", +"49@81@69@13@", +"5@", +"5<CR>", +"5@", +"5@66@", +"5@67@", +"5@69@", +"50@", +"50<CR>", +"50@", +"50@70@12@", +"50@70@66@12@", +"50@70@67@12@", +"50@70@69@12@", +"50@77@12@", +"50@77@66@12@", +"50@77@67@12@", +"50@77@69@12@", +"50@80@12@", +"50@80@66@12@", +"50@80@67@12@", +"50@80@69@12@", +"50@81@12@", +"50@81@66@12@", +"50@81@67@12@", +"50@81@69@12@", +"51@", +"51<CR>", +"51@", +"51@70@14@", +"51@70@66@14@", +"51@70@67@14@", +"51@70@69@14@", +"51@77@14@", +"51@77@66@14@", +"51@77@67@14@", +"51@77@69@14@", +"51@80@14@", +"51@80@66@14@", +"51@80@67@14@", +"51@80@69@14@", +"51@81@14@", +"51@81@66@14@", +"51@81@67@14@", +"51@81@69@14@", +"52@", +"52<CR>", +"52@", +"52@70@15@", +"52@70@66@15@", +"52@70@67@15@", +"52@70@69@15@", +"52@77@15@", +"52@77@66@15@", +"52@77@67@15@", +"52@77@69@15@", +"52@80@15@", +"52@80@66@15@", +"52@80@67@15@", +"52@80@69@15@", +"52@81@15@", +"52@81@66@15@", +"52@81@67@15@", +"52@81@69@15@", +"53@", +"53<CR>", +"53@", +"53@70@59@", +"53@70@66@59@", +"53@70@67@59@", +"53@70@69@59@", +"53@77@59@", +"53@77@66@59@", +"53@77@67@59@", +"53@77@69@59@", +"53@80@59@", +"53@80@66@59@", +"53@80@67@59@", +"53@80@69@59@", +"53@81@59@", +"53@81@66@59@", +"53@81@67@59@", +"53@81@69@59@", +"54@", +"54<CR>", +"54@70@16@", +"54@70@66@16@", +"54@70@67@16@", +"54@70@69@16@", +"54@77@16@", +"54@77@66@16@", +"54@77@67@16@", +"54@77@69@16@", +"54@80@16@", +"54@80@66@16@", +"54@80@67@16@", +"54@80@69@16@", +"54@81@16@", +"54@81@66@16@", +"54@81@67@16@", +"54@81@69@16@", +"55@", +"55<CR>", +"55@", +"55@70@61@", +"55@70@66@61@", +"55@70@67@61@", +"55@70@69@61@", +"55@77@61@", +"55@77@66@61@", +"55@77@67@61@", +"55@77@69@61@", +"55@80@61@", +"55@80@66@61@", +"55@80@67@61@", +"55@80@69@61@", +"55@81@61@", +"55@81@66@61@", +"55@81@67@61@", +"55@81@69@61@", +"56@", +"56@70@62@", +"56@70@66@62@", +"56@70@67@62@", +"56@70@69@62@", +"56@77@62@", +"56@77@66@62@", +"56@77@67@62@", +"56@77@69@62@", +"56@80@62@", +"56@80@66@62@", +"56@80@67@62@", +"56@80@69@62@", +"56@81@62@", +"56@81@66@62@", +"56@81@67@62@", +"56@81@69@62@", +"57@", +"57@70@63@", +"57@70@66@63@", +"57@70@67@63@", +"57@70@69@63@", +"57@77@63@", +"57@77@66@63@", +"57@77@67@63@", +"57@77@69@63@", +"57@80@63@", +"57@80@66@63@", +"57@80@67@63@", +"57@80@69@63@", +"57@81@63@", +"57@81@66@63@", +"57@81@67@63@", +"57@81@69@63@", +"58@", +"58@70@64@", +"58@70@66@64@", +"58@70@67@64@", +"58@70@69@64@", +"58@77@64@", +"58@77@66@64@", +"58@77@67@64@", +"58@77@69@64@", +"58@80@64@", +"58@80@66@64@", +"58@80@67@64@", +"58@80@69@64@", +"58@81@64@", +"58@81@66@64@", +"58@81@67@64@", +"58@81@69@64@", +"59@", +"5L@#", +"5LC@#", +"5R@#", +"5RC@#", +"6@", +"6<CR>", +"6@", +"60@", +"60<CR>", +"60@", +"61@", +"62@", +"63@", +"63@66@", +"63@67@", +"63@69@", +"64@", +"64@66@", +"64@67@", +"64@69@", +"65@", +"66@", +"66<CR>", +"66@", +"67@", +"67<CR>", +"67@", +"68@", +"69@", +"69<CR>", +"69@", +"69<CR>", +"69@", +"69<CR>", +"69@", +"69<CR>", +"69@", +"7@", +"7<CR>", +"7@", +"70@", +"70<CR>", +"70@", +"71@", +"72@", +"73@", +"74@", +"75@", +"76@", +"77@", +"77<CR>", +"77@", +"78@", +"79@", +"8@", +"8<CR>", +"8@", +"80@", +"80<CR>", +"80@", +"81@", +"82@", +"83@", +"84@", +"85@", +"86@", +"87@", +"88@", +"89@", +"9@", +"9<CR>", +"9@", +"9@#", +"90@", +"91@", +"92@", +"93@", +"94@", +"95@", +"96@", +"97@", +"98@", +"99@", +"9L@#", +"9LC@#", +"9R@#", +"9RC@#", +"ATE0V0", +"AUTOSTREAM: LEVEL 1", +"AUTOSTREAM: LEVEL 2", +"AUTOSTREAM: LEVEL 3", +"BLACKLISTED", +"BUSY", +"CARRIER", +"CARRIER 0300", +"CARRIER 1200", +"CARRIER 1200/75", +"CARRIER 1200/75/VFC", +"CARRIER 1200/VFC", +"CARRIER 12000", +"CARRIER 12000/VFC", +"CARRIER 14400", +"CARRIER 14400/VFC", +"CARRIER 16800", +"CARRIER 16800 V.34", +"CARRIER 16800/VFC", +"CARRIER 19200", +"CARRIER 19200 V.34", +"CARRIER 19200/VFC", +"CARRIER 21600", +"CARRIER 21600 V.34", +"CARRIER 21600/VFC", +"CARRIER 2400", +"CARRIER 2400/VFC", +"CARRIER 24000", +"CARRIER 24000 V.34", +"CARRIER 24000/VFC", +"CARRIER 26400", +"CARRIER 26400 V.34", +"CARRIER 26400/VFC", +"CARRIER 28800", +"CARRIER 28800 V.34", +"CARRIER 28800/VFC", +"CARRIER 300", +"CARRIER 300/VFC", +"CARRIER 4800", +"CARRIER 4800/VFC", +"CARRIER 7200", +"CARRIER 7200/VFC", +"CARRIER 75/1200", +"CARRIER 75/1200/VFC", +"CARRIER 9600", +"CARRIER 9600/VFC", +"CLIENT", +"CLIENTSERVER", +"COMPRESSION: ADC", +"COMPRESSION: CLASS 5", +"COMPRESSION: CLASS5", +"COMPRESSION: MNP5", +"COMPRESSION: NONE", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42 bis", +"COMPRESSION: V.42 BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V.42bis", +"COMPRESSION: V.42BIS", +"COMPRESSION: V42BIS", +"COMPRESSION:CLASS5", +"COMPRESSION:MNP5", +"COMPRESSION:NONE", +"COMPRESSION:V.42bis", +"CONNECT", +"CONNECT 0300", +"CONNECT 0300/ARQ", +"CONNECT 0300/LAP-M", +"CONNECT 0300/MNP", +"CONNECT 0300/REL", +"CONNECT 0300/REL-5", +"CONNECT 0300/REL-LAPM", +"CONNECT 0300/REL-LAPM-COMP", +"CONNECT 0300/REL-MNP", +"CONNECT 0300/REL-MNP-COMP", +"CONNECT 0300/REL-V.42", +"CONNECT 0300/V42b", +"CONNECT 0300/V42BIS", +"CONNECT 0600", +"CONNECT 0600/ARQ", +"CONNECT 0600/LAP-M", +"CONNECT 0600/LAPM", +"CONNECT 0600/MNP", +"CONNECT 0600/NONE", +"CONNECT 0600/REL", +"CONNECT 0600/REL-5", +"CONNECT 0600/REL-LAPM", +"CONNECT 0600/REL-LAPM-COMP", +"CONNECT 0600/REL-MNP", +"CONNECT 0600/REL-MNP-COMP", +"CONNECT 0600/REL-V.42", +"CONNECT 0600/V42", +"CONNECT 0600/V42b", +"CONNECT 0600/V42BIS", +"CONNECT 115,200", +"CONNECT 115,200/ARQ", +"CONNECT 115,200/LAP-M", +"CONNECT 115,200/MNP", +"CONNECT 115,200/NONE", +"CONNECT 115,200/REL", +"CONNECT 115,200/REL-5", +"CONNECT 115,200/REL-V.42", +"CONNECT 115,200/V42", +"CONNECT 115,200/V42b", +"CONNECT 115,200/V42BIS", +"CONNECT 115200", +"CONNECT 115200/ARQ", +"CONNECT 115200/LAP-M", +"CONNECT 115200/LAPM", +"CONNECT 115200/MNP", +"CONNECT 115200/NONE", +"CONNECT 115200/REL", +"CONNECT 115200/REL-5", +"CONNECT 115200/REL-LAPM", +"CONNECT 115200/REL-LAPM-COMP", +"CONNECT 115200/REL-MNP", +"CONNECT 115200/REL-MNP-COMP", +"CONNECT 115200/REL-V.42", +"CONNECT 115200/REL/VFC", +"CONNECT 115200/V42", +"CONNECT 115200/V42b", +"CONNECT 115200/V42BIS", +"CONNECT 115200/VFC", +"CONNECT 1200", +"CONNECT 1200/75", +"CONNECT 1200/75/ARQ", +"CONNECT 1200/75/LAP-M", +"CONNECT 1200/75/LAPM", +"CONNECT 1200/75/MNP", +"CONNECT 1200/75/NONE", +"CONNECT 1200/75/REL", +"CONNECT 1200/75/REL-5", +"CONNECT 1200/75/REL-LAPM", +"CONNECT 1200/75/REL-LAPM-COMP", +"CONNECT 1200/75/REL-MNP", +"CONNECT 1200/75/REL-MNP-COMP", +"CONNECT 1200/75/REL-V.42", +"CONNECT 1200/75/V42", +"CONNECT 1200/75/V42b", +"CONNECT 1200/75/V42BIS", +"CONNECT 1200/ARQ", +"CONNECT 1200/ECL", +"CONNECT 1200/ECLC", +"CONNECT 1200/LAP-M", +"CONNECT 1200/LAPM", +"CONNECT 1200/MNP", +"CONNECT 1200/NONE", +"CONNECT 1200/REL", +"CONNECT 1200/REL-5", +"CONNECT 1200/REL-LAPM", +"CONNECT 1200/REL-LAPM-COMP", +"CONNECT 1200/REL-LAPM V.42 BIS", +"CONNECT 1200/REL-MNP", +"CONNECT 1200/REL-MNP-COMP", +"CONNECT 1200/REL-MNP 5", +"CONNECT 1200/REL-V.42", +"CONNECT 1200/V42", +"CONNECT 1200/V42b", +"CONNECT 1200/V42BIS", +"CONNECT 12000", +"CONNECT 12000/ARQ", +"CONNECT 12000/ECL", +"CONNECT 12000/ECLC", +"CONNECT 12000/LAP-M", +"CONNECT 12000/LAPM", +"CONNECT 12000/MNP", +"CONNECT 12000/NONE", +"CONNECT 12000/REL", +"CONNECT 12000/REL-5", +"CONNECT 12000/REL-LAPM", +"CONNECT 12000/REL-LAPM-COMP", +"CONNECT 12000/REL-LAPM V.42 BIS", +"CONNECT 12000/REL-MNP", +"CONNECT 12000/REL-MNP-COMP", +"CONNECT 12000/REL-MNP 5", +"CONNECT 12000/REL-V.42", +"CONNECT 12000/V42", +"CONNECT 12000/V42b", +"CONNECT 12000/V42BIS", +"CONNECT 1200TX/75RX", +"CONNECT 1200TX/75RX/ARQ", +"CONNECT 1200TX/75RX/LAP-M", +"CONNECT 1200TX/75RX/LAPM", +"CONNECT 1200TX/75RX/MNP", +"CONNECT 1200TX/75RX/NONE", +"CONNECT 1200TX/75RX/REL", +"CONNECT 1200TX/75RX/REL-5", +"CONNECT 1200TX/75RX/REL-LAPM", +"CONNECT 1200TX/75RX/REL-LAPM-COMP", +"CONNECT 1200TX/75RX/REL-MNP", +"CONNECT 1200TX/75RX/REL-MNP-COMP", +"CONNECT 1200TX/75RX/REL-V.42", +"CONNECT 1200TX/75RX/V42", +"CONNECT 1200TX/75RX/V42b", +"CONNECT 1200TX/75RX/V42BIS", +"CONNECT 14400", +"CONNECT 14400/ARQ", +"CONNECT 14400/ECL", +"CONNECT 14400/ECLC", +"CONNECT 14400/LAP-M", +"CONNECT 14400/LAPM", +"CONNECT 14400/MNP", +"CONNECT 14400/NONE", +"CONNECT 14400/REL", +"CONNECT 14400/REL-5", +"CONNECT 14400/REL-LAPM", +"CONNECT 14400/REL-LAPM-COMP", +"CONNECT 14400/REL-LAPM V.42 BIS", +"CONNECT 14400/REL-MNP", +"CONNECT 14400/REL-MNP-COMP", +"CONNECT 14400/REL-MNP 5", +"CONNECT 14400/REL-V.42", +"CONNECT 14400/V42", +"CONNECT 14400/V42b", +"CONNECT 14400/V42BIS", +"CONNECT 14400/VFC", +"CONNECT 16800", +"CONNECT 16800/ARQ", +"CONNECT 16800/ECL", +"CONNECT 16800/ECLC", +"CONNECT 16800/LAP-M", +"CONNECT 16800/LAPM", +"CONNECT 16800/MNP", +"CONNECT 16800/NONE", +"CONNECT 16800/REL", +"CONNECT 16800/REL-5", +"CONNECT 16800/REL-LAPM", +"CONNECT 16800/REL-LAPM-COMP", +"CONNECT 16800/REL-MNP", +"CONNECT 16800/REL-MNP-COMP", +"CONNECT 16800/REL-V.42", +"CONNECT 16800/V42", +"CONNECT 16800/V42b", +"CONNECT 16800/V42BIS", +"CONNECT 16800/VFC", +"CONNECT 19200", +"CONNECT 19200/ARQ", +"CONNECT 19200/ECL", +"CONNECT 19200/ECLC", +"CONNECT 19200/LAP-M", +"CONNECT 19200/LAPM", +"CONNECT 19200/MNP", +"CONNECT 19200/NONE", +"CONNECT 19200/REL", +"CONNECT 19200/REL-5", +"CONNECT 19200/REL-LAPM", +"CONNECT 19200/REL-LAPM-COMP", +"CONNECT 19200/REL-MNP", +"CONNECT 19200/REL-MNP-COMP", +"CONNECT 19200/REL-V.42", +"CONNECT 19200/V42", +"CONNECT 19200/V42b", +"CONNECT 19200/V42BIS", +"CONNECT 19200/VFC", +"CONNECT 21600", +"CONNECT 21600/ARQ", +"CONNECT 21600/ECL", +"CONNECT 21600/ECLC", +"CONNECT 21600/LAP-M", +"CONNECT 21600/LAPM", +"CONNECT 21600/MNP", +"CONNECT 21600/NONE", +"CONNECT 21600/REL", +"CONNECT 21600/REL-5", +"CONNECT 21600/REL-LAPM-COMP", +"CONNECT 21600/REL-MNP", +"CONNECT 21600/REL-MNP-COMP", +"CONNECT 21600/REL-REL-LAPM", +"CONNECT 21600/REL-V.42", +"CONNECT 21600/V42", +"CONNECT 21600/V42b", +"CONNECT 21600/V42BIS", +"CONNECT 21600/VFC", +"CONNECT 230400", +"CONNECT 230400/ARQ", +"CONNECT 230400/LAP-M", +"CONNECT 230400/MNP", +"CONNECT 230400/NONE", +"CONNECT 230400/REL", +"CONNECT 230400/V42", +"CONNECT 230400/V42b", +"CONNECT 230400/V42BIS", +"CONNECT 2400", +"CONNECT 2400/ARQ", +"CONNECT 2400/ECL", +"CONNECT 2400/ECLC", +"CONNECT 2400/LAP-M", +"CONNECT 2400/LAPM", +"CONNECT 2400/MNP", +"CONNECT 2400/NONE", +"CONNECT 2400/REL", +"CONNECT 2400/REL-5", +"CONNECT 2400/REL-LAPM", +"CONNECT 2400/REL-LAPM-COMP", +"CONNECT 2400/REL-LAPM V.42 BIS", +"CONNECT 2400/REL-MNP", +"CONNECT 2400/REL-MNP-COMP", +"CONNECT 2400/REL-MNP 5", +"CONNECT 2400/REL-V.42", +"CONNECT 2400/V42", +"CONNECT 2400/V42b", +"CONNECT 2400/V42BIS", +"CONNECT 24000", +"CONNECT 24000/ARQ", +"CONNECT 24000/ECL", +"CONNECT 24000/ECLC", +"CONNECT 24000/LAP-M", +"CONNECT 24000/LAPM", +"CONNECT 24000/MNP", +"CONNECT 24000/NONE", +"CONNECT 24000/REL", +"CONNECT 24000/REL-5", +"CONNECT 24000/REL-LAPM", +"CONNECT 24000/REL-LAPM-COMP", +"CONNECT 24000/REL-MNP", +"CONNECT 24000/REL-MNP-COMP", +"CONNECT 24000/REL-V.42", +"CONNECT 24000/V42", +"CONNECT 24000/V42b", +"CONNECT 24000/V42BIS", +"CONNECT 24000/VFC", +"CONNECT 26400", +"CONNECT 26400/ARQ", +"CONNECT 26400/ECL", +"CONNECT 26400/ECLC", +"CONNECT 26400/LAP-M", +"CONNECT 26400/LAPM", +"CONNECT 26400/MNP", +"CONNECT 26400/NONE", +"CONNECT 26400/REL", +"CONNECT 26400/REL-5", +"CONNECT 26400/REL-LAPM", +"CONNECT 26400/REL-LAPM-COMP", +"CONNECT 26400/REL-MNP", +"CONNECT 26400/REL-MNP-COMP", +"CONNECT 26400/REL-V.42", +"CONNECT 26400/V42", +"CONNECT 26400/V42b", +"CONNECT 26400/V42BIS", +"CONNECT 26400/VFC", +"CONNECT 28800", +"CONNECT 28800/ARQ", +"CONNECT 28800/ARQ/VFC", +"CONNECT 28800/ECL", +"CONNECT 28800/ECLC", +"CONNECT 28800/LAP-M", +"CONNECT 28800/LAPM", +"CONNECT 28800/MNP", +"CONNECT 28800/NONE", +"CONNECT 28800/REL", +"CONNECT 28800/REL-5", +"CONNECT 28800/REL-LAPM", +"CONNECT 28800/REL-LAPM-COMP", +"CONNECT 28800/REL-MNP", +"CONNECT 28800/REL-MNP-COMP", +"CONNECT 28800/REL-V.42", +"CONNECT 28800/REL/VFC", +"CONNECT 28800/V42", +"CONNECT 28800/V42b", +"CONNECT 28800/V42BIS", +"CONNECT 28800/VFC", +"CONNECT 300", +"CONNECT 300/ARQ", +"CONNECT 300/ECL", +"CONNECT 300/ECLC", +"CONNECT 300/LAP-M", +"CONNECT 300/LAPM", +"CONNECT 300/MNP", +"CONNECT 300/NONE", +"CONNECT 300/REL", +"CONNECT 300/REL-5", +"CONNECT 300/REL-LAPM", +"CONNECT 300/REL-LAPM-COMP", +"CONNECT 300/REL-LAPM V.42 BIS", +"CONNECT 300/REL-MNP", +"CONNECT 300/REL-MNP-COMP", +"CONNECT 300/REL-MNP 5", +"CONNECT 300/REL-V.42", +"CONNECT 300/V42", +"CONNECT 300/V42b", +"CONNECT 300/V42BIS", +"CONNECT 38400", +"CONNECT 38400/ARQ", +"CONNECT 38400/LAP-M", +"CONNECT 38400/LAPM", +"CONNECT 38400/MNP", +"CONNECT 38400/NONE", +"CONNECT 38400/REL", +"CONNECT 38400/REL-5", +"CONNECT 38400/REL-LAPM", +"CONNECT 38400/REL-LAPM-COMP", +"CONNECT 38400/REL-MNP", +"CONNECT 38400/REL-MNP-COMP", +"CONNECT 38400/REL-V.42", +"CONNECT 38400/REL/VFC", +"CONNECT 38400/V42", +"CONNECT 38400/V42b", +"CONNECT 38400/V42BIS", +"CONNECT 38400/VFC", +"CONNECT 4800", +"CONNECT 4800/ARQ", +"CONNECT 4800/ECL", +"CONNECT 4800/ECLC", +"CONNECT 4800/LAP-M", +"CONNECT 4800/LAPM", +"CONNECT 4800/MNP", +"CONNECT 4800/NONE", +"CONNECT 4800/REL", +"CONNECT 4800/REL-5", +"CONNECT 4800/REL-LAPM", +"CONNECT 4800/REL-LAPM-COMP", +"CONNECT 4800/REL-LAPM V.42 BIS", +"CONNECT 4800/REL-MNP", +"CONNECT 4800/REL-MNP-COMP", +"CONNECT 4800/REL-MNP 5", +"CONNECT 4800/REL-V.42", +"CONNECT 4800/V42", +"CONNECT 4800/V42b", +"CONNECT 4800/V42BIS", +"CONNECT 57600", +"CONNECT 57600/ARQ", +"CONNECT 57600/LAP-M", +"CONNECT 57600/LAPM", +"CONNECT 57600/MNP", +"CONNECT 57600/NONE", +"CONNECT 57600/REL", +"CONNECT 57600/REL-5", +"CONNECT 57600/REL-LAPM", +"CONNECT 57600/REL-LAPM-COMP", +"CONNECT 57600/REL-MNP", +"CONNECT 57600/REL-MNP-COMP", +"CONNECT 57600/REL-V.42", +"CONNECT 57600/REL/VFC", +"CONNECT 57600/V42", +"CONNECT 57600/V42b", +"CONNECT 57600/V42BIS", +"CONNECT 57600/VFC", +"CONNECT 600", +"CONNECT 600/ARQ", +"CONNECT 600/ECL", +"CONNECT 600/ECLC", +"CONNECT 600/LAP-M", +"CONNECT 600/LAPM", +"CONNECT 600/MNP", +"CONNECT 600/NONE", +"CONNECT 600/REL", +"CONNECT 600/REL-5", +"CONNECT 600/REL-LAPM", +"CONNECT 600/REL-LAPM-COMP", +"CONNECT 600/REL-LAPM V.42 BIS", +"CONNECT 600/REL-MNP", +"CONNECT 600/REL-MNP-COMP", +"CONNECT 600/REL-MNP 5", +"CONNECT 600/REL-V.42", +"CONNECT 600/V42", +"CONNECT 600/V42b", +"CONNECT 600/V42BIS", +"CONNECT 7200", +"CONNECT 7200/ARQ", +"CONNECT 7200/ECL", +"CONNECT 7200/ECLC", +"CONNECT 7200/LAP-M", +"CONNECT 7200/LAPM", +"CONNECT 7200/MNP", +"CONNECT 7200/NONE", +"CONNECT 7200/REL", +"CONNECT 7200/REL-5", +"CONNECT 7200/REL-LAPM", +"CONNECT 7200/REL-LAPM-COMP", +"CONNECT 7200/REL-LAPM V.42 BIS", +"CONNECT 7200/REL-MNP", +"CONNECT 7200/REL-MNP-COMP", +"CONNECT 7200/REL-MNP 5", +"CONNECT 7200/REL-V.42", +"CONNECT 7200/V42", +"CONNECT 7200/V42b", +"CONNECT 7200/V42BIS", +"CONNECT 75/1200", +"CONNECT 75/1200/ARQ", +"CONNECT 75/1200/LAP-M", +"CONNECT 75/1200/MNP", +"CONNECT 75/1200/NONE", +"CONNECT 75/1200/REL", +"CONNECT 75/1200/REL-5", +"CONNECT 75/1200/REL-LAPM", +"CONNECT 75/1200/REL-LAPM-COMP", +"CONNECT 75/1200/REL-MNP", +"CONNECT 75/1200/REL-MNP-COMP", +"CONNECT 75/1200/REL-V.42", +"CONNECT 75/1200/V42", +"CONNECT 75/1200/V42b", +"CONNECT 75/1200/V42BIS", +"CONNECT 75TX/1200RX", +"CONNECT 75TX/1200RX/ARQ", +"CONNECT 75TX/1200RX/LAP-M", +"CONNECT 75TX/1200RX/LAPM", +"CONNECT 75TX/1200RX/MNP", +"CONNECT 75TX/1200RX/NONE", +"CONNECT 75TX/1200RX/REL", +"CONNECT 75TX/1200RX/REL-5", +"CONNECT 75TX/1200RX/REL-LAPM", +"CONNECT 75TX/1200RX/REL-LAPM-COMP", +"CONNECT 75TX/1200RX/REL-MNP", +"CONNECT 75TX/1200RX/REL-MNP-COMP", +"CONNECT 75TX/1200RX/REL-V.42", +"CONNECT 75TX/1200RX/V42", +"CONNECT 75TX/1200RX/V42b", +"CONNECT 75TX/1200RX/V42BIS", +"CONNECT 9600", +"CONNECT 9600/ARQ", +"CONNECT 9600/ECL", +"CONNECT 9600/ECLC", +"CONNECT 9600/LAP-M", +"CONNECT 9600/LAPM", +"CONNECT 9600/MNP", +"CONNECT 9600/NONE", +"CONNECT 9600/REL", +"CONNECT 9600/REL-5", +"CONNECT 9600/REL-LAPM", +"CONNECT 9600/REL-LAPM-COMP", +"CONNECT 9600/REL-LAPM V.42 BIS", +"CONNECT 9600/REL-MNP", +"CONNECT 9600/REL-MNP-COMP", +"CONNECT 9600/REL-MNP 5", +"CONNECT 9600/REL-V.42", +"CONNECT 9600/V42", +"CONNECT 9600/V42b", +"CONNECT 9600/V42BIS", +"CONNECT ECL", +"CONNECT ECLC", +"CONNECT/ARQ", +"CONNECT/LAP-M", +"CONNECT/LAPM", +"CONNECT/MNP", +"CONNECT/NONE", +"CONNECT/REL", +"CONNECT/V42", +"CONNECT/V42b", +"CONNECT/V42BIS", +"DATA", +"DELAYED", +"DIALING", +"ERROR", +"FAX", +"HOST DRIVER TIMEOUT", +"mdmblatz.inf:HKR, Responses,", +"mdmbsb.inf:HKR, Responses,", +"mdmbsch.inf:HKR, Responses,", +"mdmhaeus.inf:HKR, Responses,", +"mdmico.inf:HKR, Responses,", +"mdminsys.inf:HKR, Responses,", +"mdmke.inf:HKR, Responses,", +"mdmmart.inf:HKR, Responses,", +"mdmneuhs.inf:HKR, Responses,", +"mdmrfi.inf:HKR, Responses,", +"mdmtelnk.inf:HKR, Responses,", +"mdmtger.inf:HKR, Responses,", +"mdmtkr.inf:HKR, Responses,", +"mdmusrcr.inf:HKR,Responses,", +"mdmusrg.inf:HKR,Responses,", +"mdmusrsp.inf:HKR,Responses,", +"mdmusrwp.inf:HKR,Responses,", +"mdmwoer.inf:HKR, Responses,", +"MESG = ", +"NAME = ", +"NMBR = ", +"NO ANSWER", +"NO CARRIER", +"NO DIAL TONE", +"NO DIALTONE", +"NoResponse", +"OK", +"PROTOCOL: ALT", +"PROTOCOL: ALT-CELLULAR", +"PROTOCOL: ALT - CELLULAR", +"PROTOCOL: ERROR-CONTROL/LAPB", +"PROTOCOL: ERROR-CONTROL/LAPB/AFT", +"PROTOCOL: ERROR-CONTROL/LAPB/HDX", +"PROTOCOL: LAP-M", +"PROTOCOL: LAP-M/AFT", +"PROTOCOL: LAP-M/ETC", +"PROTOCOL: LAP-M/HDX", +"PROTOCOL: LAPM", +"PROTOCOL: LAPM/AFT", +"PROTOCOL: LAPM/HDX", +"PROTOCOL: MNP", +"PROTOCOL: MNP 2", +"PROTOCOL: MNP 2, 4", +"PROTOCOL: MNP 3", +"PROTOCOL: MNP 3, 4", +"PROTOCOL: MNP 4", +"PROTOCOL: MNP10", +"PROTOCOL: MNP2", +"PROTOCOL: MNP3", +"PROTOCOL: MNP4", +"PROTOCOL: NONE", +"PROTOCOL: X.25/LAPB", +"PROTOCOL: X.25/LAPB/AFT", +"PROTOCOL: X.25/LAPB/HDX", +"PROTOCOL:MNP 2, 4", +"PROTOCOL:MNP 3, 4", +"PROTOCOL:NONE", +"RING", +"RINGING", +"RRING", +"TIME = ", +"VOICE", +NULL +}; + + +const TCHAR *rgpszActualResp[] = +{ + "0@", + "2@", + "3@", + "4@", + "6@", + "7@", + "8@", + "@", + "@#BUSY@#", + "@#CONNECT 1200/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 1200/ARQ/LAPM/MNP5@#", + "@#CONNECT 1200/ARQ/LAPM/V42BIS@#", + "@#CONNECT 1200/ARQ/LAPM@#", + "@#CONNECT 1200/ARQ/MNP/MNP5@#", + "@#CONNECT 1200/ARQ/MNP/V42BIS@#", + "@#CONNECT 1200/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 1200/ARQ/V32/LAPM@#", + "@#CONNECT 1200/ARQ/V32/MNP@#", + "@#CONNECT 1200/ARQ/V34/LAPM@#", + "@#CONNECT 1200/ARQ/V34/MNP@#", + "@#CONNECT 1200/ARQ@#", + "@#CONNECT 1200/NONE@#", + "@#CONNECT 12000/ARQ/HST/HST/CELLULAR/MNP5@#", + "@#CONNECT 12000/ARQ/HST/HST/CELLULAR/V42BIS@#", + "@#CONNECT 12000/ARQ/HST/HST/CELLULAR@#", + "@#CONNECT 12000/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 12000/ARQ/HST/LAPM/MNP5@#", + "@#CONNECT 12000/ARQ/HST/LAPM/NONE@#", + "@#CONNECT 12000/ARQ/HST/LAPM/V42BIS@#", + "@#CONNECT 12000/ARQ/HST/MNP/MNP5@#", + "@#CONNECT 12000/ARQ/HST/MNP/NONE@#", + "@#CONNECT 12000/ARQ/HST/MNP/V42BIS@#", + "@#CONNECT 12000/ARQ/LAPM/V42BIS@#", + "@#CONNECT 12000/ARQ/MNP/MNP5@#", + "@#CONNECT 12000/ARQ/V32/LAPM/MNP5@#", + "@#CONNECT 12000/ARQ/V32/LAPM/NONE@#", + "@#CONNECT 12000/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 12000/ARQ/V32/LAPM@#", + "@#CONNECT 12000/ARQ/V32/MNP/MNP5@#", + "@#CONNECT 12000/ARQ/V32/MNP/NONE@#", + "@#CONNECT 12000/ARQ/V32/MNP/V42BIS@#", + "@#CONNECT 12000/ARQ/V32/MNP@#", + "@#CONNECT 12000/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 12000/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 12000/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 12000/ARQ/V34/LAPM@#", + "@#CONNECT 12000/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 12000/ARQ/V34/MNP/NONE@#", + "@#CONNECT 12000/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 12000/ARQ/V34/MNP@#", + "@#CONNECT 12000/ARQ/VFC/LAPM/MNP5@#", + "@#CONNECT 12000/ARQ/VFC/LAPM/NONE@#", + "@#CONNECT 12000/ARQ/VFC/LAPM/V42BIS@#", + "@#CONNECT 12000/ARQ/VFC/LAPM@#", + "@#CONNECT 12000/ARQ/VFC/MNP/MNP5@#", + "@#CONNECT 12000/ARQ/VFC/MNP/NONE@#", + "@#CONNECT 12000/ARQ/VFC/MNP/V42BIS@#", + "@#CONNECT 12000/ARQ@#", + "@#CONNECT 12000/HST/NONE@#", + "@#CONNECT 12000/V32/NONE@#", + "@#CONNECT 12000/V34/NONE@#", + "@#CONNECT 12000/VFC/NONE@#", + "@#CONNECT 14000/ARQ/HST/HST/CELLULAR/MNP5@#", + "@#CONNECT 14000/ARQ/HST/HST/CELLULAR/V42BIS@#", + "@#CONNECT 14000/ARQ/HST/HST/CELLULAR@#", + "@#CONNECT 14400/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 14400/ARQ/HST/LAPM/MNP5@#", + "@#CONNECT 14400/ARQ/HST/LAPM/NONE@#", + "@#CONNECT 14400/ARQ/HST/LAPM/V42BIS@#", + "@#CONNECT 14400/ARQ/HST/MNP/MNP5@#", + "@#CONNECT 14400/ARQ/HST/MNP/NONE@#", + "@#CONNECT 14400/ARQ/HST/MNP/V42BIS@#", + "@#CONNECT 14400/ARQ/LAPM/V42BIS@#", + "@#CONNECT 14400/ARQ/MNP/MNP5@#", + "@#CONNECT 14400/ARQ/V32/LAPM/MNP5@#", + "@#CONNECT 14400/ARQ/V32/LAPM/NONE@#", + "@#CONNECT 14400/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 14400/ARQ/V32/LAPM@#", + "@#CONNECT 14400/ARQ/V32/MNP/MNP5@#", + "@#CONNECT 14400/ARQ/V32/MNP/NONE@#", + "@#CONNECT 14400/ARQ/V32/MNP/V42BIS@#", + "@#CONNECT 14400/ARQ/V32/MNP@#", + "@#CONNECT 14400/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 14400/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 14400/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 14400/ARQ/V34/LAPM@#", + "@#CONNECT 14400/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 14400/ARQ/V34/MNP/NONE@#", + "@#CONNECT 14400/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 14400/ARQ/V34/MNP@#", + "@#CONNECT 14400/ARQ/VFC/LAPM/MNP5@#", + "@#CONNECT 14400/ARQ/VFC/LAPM/NONE@#", + "@#CONNECT 14400/ARQ/VFC/LAPM/V42BIS@#", + "@#CONNECT 14400/ARQ/VFC/LAPM@#", + "@#CONNECT 14400/ARQ/VFC/MNP/MNP5@#", + "@#CONNECT 14400/ARQ/VFC/MNP/NONE@#", + "@#CONNECT 14400/ARQ/VFC/MNP/V42BIS@#", + "@#CONNECT 14400/ARQ@#", + "@#CONNECT 14400/HST/NONE@#", + "@#CONNECT 14400/V32/NONE@#", + "@#CONNECT 14400/V34/NONE@#", + "@#CONNECT 14400/VFC/NONE@#", + "@#CONNECT 16800/ARQ/HST/HST/CELLULAR/MNP5@#", + "@#CONNECT 16800/ARQ/HST/HST/CELLULAR/V42BIS@#", + "@#CONNECT 16800/ARQ/HST/HST/CELLULAR@#", + "@#CONNECT 16800/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 16800/ARQ/HST/LAPM/MNP5@#", + "@#CONNECT 16800/ARQ/HST/LAPM/NONE@#", + "@#CONNECT 16800/ARQ/HST/LAPM/V42BIS@#", + "@#CONNECT 16800/ARQ/HST/MNP/MNP5@#", + "@#CONNECT 16800/ARQ/HST/MNP/NONE@#", + "@#CONNECT 16800/ARQ/HST/MNP/V42BIS@#", + "@#CONNECT 16800/ARQ/LAPM/V42BIS@#", + "@#CONNECT 16800/ARQ/MNP/MNP5@#", + "@#CONNECT 16800/ARQ/V32/LAPM/MNP5@#", + "@#CONNECT 16800/ARQ/V32/LAPM/NONE@#", + "@#CONNECT 16800/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 16800/ARQ/V32/LAPM@#", + "@#CONNECT 16800/ARQ/V32/MNP/MNP5@#", + "@#CONNECT 16800/ARQ/V32/MNP/NONE@#", + "@#CONNECT 16800/ARQ/V32/MNP/V42BIS@#", + "@#CONNECT 16800/ARQ/V32/MNP@#", + "@#CONNECT 16800/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 16800/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 16800/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 16800/ARQ/V34/LAPM@#", + "@#CONNECT 16800/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 16800/ARQ/V34/MNP/NONE@#", + "@#CONNECT 16800/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 16800/ARQ/V34/MNP@#", + "@#CONNECT 16800/ARQ/VFC/LAPM/MNP5@#", + "@#CONNECT 16800/ARQ/VFC/LAPM/NONE@#", + "@#CONNECT 16800/ARQ/VFC/LAPM/V42BIS@#", + "@#CONNECT 16800/ARQ/VFC/MNP/MNP5@#", + "@#CONNECT 16800/ARQ/VFC/MNP/NONE@#", + "@#CONNECT 16800/ARQ/VFC/MNP/V42BIS@#", + "@#CONNECT 16800/ARQ@#", + "@#CONNECT 16800/HST/NONE@#", + "@#CONNECT 16800/V32/NONE@#", + "@#CONNECT 16800/V34/NONE@#", + "@#CONNECT 16800/VFC/NONE@#", + "@#CONNECT 19200/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 19200/ARQ/LAPM/V42BIS@#", + "@#CONNECT 19200/ARQ/MNP/MNP5@#", + "@#CONNECT 19200/ARQ/V32/LAPM/MNP5@#", + "@#CONNECT 19200/ARQ/V32/LAPM/NONE@#", + "@#CONNECT 19200/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 19200/ARQ/V32/LAPM@#", + "@#CONNECT 19200/ARQ/V32/MNP/MNP5@#", + "@#CONNECT 19200/ARQ/V32/MNP/NONE@#", + "@#CONNECT 19200/ARQ/V32/MNP/V42BIS@#", + "@#CONNECT 19200/ARQ/V32/MNP@#", + "@#CONNECT 19200/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 19200/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 19200/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 19200/ARQ/V34/LAPM@#", + "@#CONNECT 19200/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 19200/ARQ/V34/MNP/NONE@#", + "@#CONNECT 19200/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 19200/ARQ/V34/MNP@#", + "@#CONNECT 19200/ARQ/VFC/LAPM/MNP5@#", + "@#CONNECT 19200/ARQ/VFC/LAPM/NONE@#", + "@#CONNECT 19200/ARQ/VFC/LAPM/V42BIS@#", + "@#CONNECT 19200/ARQ/VFC/MNP/MNP5@#", + "@#CONNECT 19200/ARQ/VFC/MNP/NONE@#", + "@#CONNECT 19200/ARQ/VFC/MNP/V42BIS@#", + "@#CONNECT 19200/ARQ@#", + "@#CONNECT 19200/V32/NONE@#", + "@#CONNECT 19200/V34/NONE@#", + "@#CONNECT 19200/VFC/NONE@#", + "@#CONNECT 21600/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 21600/ARQ/LAPM/V42BIS@#", + "@#CONNECT 21600/ARQ/MNP/MNP5@#", + "@#CONNECT 21600/ARQ/V32/LAPM/MNP5@#", + "@#CONNECT 21600/ARQ/V32/LAPM/NONE@#", + "@#CONNECT 21600/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 21600/ARQ/V32/LAPM@#", + "@#CONNECT 21600/ARQ/V32/MNP/MNP5@#", + "@#CONNECT 21600/ARQ/V32/MNP/NONE@#", + "@#CONNECT 21600/ARQ/V32/MNP/V42BIS@#", + "@#CONNECT 21600/ARQ/V32/MNP@#", + "@#CONNECT 21600/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 21600/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 21600/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 21600/ARQ/V34/LAPM@#", + "@#CONNECT 21600/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 21600/ARQ/V34/MNP/NONE@#", + "@#CONNECT 21600/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 21600/ARQ/V34/MNP@#", + "@#CONNECT 21600/ARQ/VFC/LAPM/MNP5@#", + "@#CONNECT 21600/ARQ/VFC/LAPM/NONE@#", + "@#CONNECT 21600/ARQ/VFC/LAPM/V42BIS@#", + "@#CONNECT 21600/ARQ/VFC/MNP/MNP5@#", + "@#CONNECT 21600/ARQ/VFC/MNP/NONE@#", + "@#CONNECT 21600/ARQ/VFC/MNP/V42BIS@#", + "@#CONNECT 21600/ARQ@#", + "@#CONNECT 21600/V32/NONE@#", + "@#CONNECT 21600/V34/NONE@#", + "@#CONNECT 21600/VFC/NONE@#", + "@#CONNECT 2400/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 2400/ARQ/LAPM/V42BIS@#", + "@#CONNECT 2400/ARQ/LAPM@#", + "@#CONNECT 2400/ARQ/MNP/MNP5@#", + "@#CONNECT 2400/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 2400/ARQ/V32/LAPM@#", + "@#CONNECT 2400/ARQ/V32/MNP@#", + "@#CONNECT 2400/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 2400/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 2400/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 2400/ARQ/V34/LAPM@#", + "@#CONNECT 2400/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 2400/ARQ/V34/MNP/NONE@#", + "@#CONNECT 2400/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 2400/ARQ/V34/MNP@#", + "@#CONNECT 2400/ARQ@#", + "@#CONNECT 2400/NONE@#", + "@#CONNECT 2400/V34/NONE@#", + "@#CONNECT 24000/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 24000/ARQ/LAPM/V42BIS@#", + "@#CONNECT 24000/ARQ/MNP/MNP5@#", + "@#CONNECT 24000/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 24000/ARQ/V32/LAPM@#", + "@#CONNECT 24000/ARQ/V32/MNP@#", + "@#CONNECT 24000/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 24000/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 24000/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 24000/ARQ/V34/LAPM@#", + "@#CONNECT 24000/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 24000/ARQ/V34/MNP/NONE@#", + "@#CONNECT 24000/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 24000/ARQ/V34/MNP@#", + "@#CONNECT 24000/ARQ/VFC/LAPM/MNP5@#", + "@#CONNECT 24000/ARQ/VFC/LAPM/NONE@#", + "@#CONNECT 24000/ARQ/VFC/LAPM/V42BIS@#", + "@#CONNECT 24000/ARQ/VFC/LAPM@#", + "@#CONNECT 24000/ARQ/VFC/MNP/MNP5@#", + "@#CONNECT 24000/ARQ/VFC/MNP/NONE@#", + "@#CONNECT 24000/ARQ/VFC/MNP/V42BIS@#", + "@#CONNECT 24000/ARQ@#", + "@#CONNECT 24000/V34/NONE@#", + "@#CONNECT 24000/VFC/NONE@#", + "@#CONNECT 26400/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 26400/ARQ/LAPM/V42BIS@#", + "@#CONNECT 26400/ARQ/MNP/MNP5@#", + "@#CONNECT 26400/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 26400/ARQ/V32/LAPM@#", + "@#CONNECT 26400/ARQ/V32/MNP@#", + "@#CONNECT 26400/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 26400/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 26400/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 26400/ARQ/V34/LAPM@#", + "@#CONNECT 26400/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 26400/ARQ/V34/MNP/NONE@#", + "@#CONNECT 26400/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 26400/ARQ/V34/MNP@#", + "@#CONNECT 26400/ARQ/VFC/LAPM/MNP5@#", + "@#CONNECT 26400/ARQ/VFC/LAPM/NONE@#", + "@#CONNECT 26400/ARQ/VFC/LAPM/V42BIS@#", + "@#CONNECT 26400/ARQ/VFC/LAPM@#", + "@#CONNECT 26400/ARQ/VFC/MNP/MNP5@#", + "@#CONNECT 26400/ARQ/VFC/MNP/NONE@#", + "@#CONNECT 26400/ARQ/VFC/MNP/V42BIS@#", + "@#CONNECT 26400/ARQ@#", + "@#CONNECT 26400/V34/NONE@#", + "@#CONNECT 26400/VFC/NONE@#", + "@#CONNECT 28800/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 28800/ARQ/LAPM/V42BIS@#", + "@#CONNECT 28800/ARQ/MNP/MNP5@#", + "@#CONNECT 28800/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 28800/ARQ/V32/LAPM@#", + "@#CONNECT 28800/ARQ/V32/MNP@#", + "@#CONNECT 28800/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 28800/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 28800/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 28800/ARQ/V34/LAPM@#", + "@#CONNECT 28800/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 28800/ARQ/V34/MNP/NONE@#", + "@#CONNECT 28800/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 28800/ARQ/V34/MNP@#", + "@#CONNECT 28800/ARQ/VFC/LAPM/MNP5@#", + "@#CONNECT 28800/ARQ/VFC/LAPM/NONE@#", + "@#CONNECT 28800/ARQ/VFC/LAPM/V42BIS@#", + "@#CONNECT 28800/ARQ/VFC/LAPM@#", + "@#CONNECT 28800/ARQ/VFC/MNP/MNP5@#", + "@#CONNECT 28800/ARQ/VFC/MNP/NONE@#", + "@#CONNECT 28800/ARQ/VFC/MNP/V42BIS@#", + "@#CONNECT 28800/ARQ@#", + "@#CONNECT 28800/V34/NONE@#", + "@#CONNECT 28800/VFC/NONE@#", + "@#CONNECT 4800/ARQ/HST/HST/CELLULAR/MNP5@#", + "@#CONNECT 4800/ARQ/HST/HST/CELLULAR/V42BIS@#", + "@#CONNECT 4800/ARQ/HST/HST/CELLULAR@#", + "@#CONNECT 4800/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 4800/ARQ/HST/LAPM/MNP5@#", + "@#CONNECT 4800/ARQ/HST/LAPM/NONE@#", + "@#CONNECT 4800/ARQ/HST/LAPM/V42BIS@#", + "@#CONNECT 4800/ARQ/HST/MNP/MNP5@#", + "@#CONNECT 4800/ARQ/HST/MNP/NONE@#", + "@#CONNECT 4800/ARQ/HST/MNP/V42BIS@#", + "@#CONNECT 4800/ARQ/LAPM/V42BIS@#", + "@#CONNECT 4800/ARQ/LAPM@#", + "@#CONNECT 4800/ARQ/MNP/MNP5@#", + "@#CONNECT 4800/ARQ/V32/LAPM/MNP5@#", + "@#CONNECT 4800/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 4800/ARQ/V32/LAPM@#", + "@#CONNECT 4800/ARQ/V32/MNP/MNP5@#", + "@#CONNECT 4800/ARQ/V32/MNP/NONE@#", + "@#CONNECT 4800/ARQ/V32/MNP/V42BIS@#", + "@#CONNECT 4800/ARQ/V32/MNP@#", + "@#CONNECT 4800/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 4800/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 4800/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 4800/ARQ/V34/LAPM@#", + "@#CONNECT 4800/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 4800/ARQ/V34/MNP/NONE@#", + "@#CONNECT 4800/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 4800/ARQ/V34/MNP@#", + "@#CONNECT 4800/ARQ@#", + "@#CONNECT 4800/HST/NONE@#", + "@#CONNECT 4800/V32/NONE@#", + "@#CONNECT 4800/V34/NONE@#", + "@#CONNECT 7200/ARQ/HST/HST/CELLULAR/MNP5@#", + "@#CONNECT 7200/ARQ/HST/HST/CELLULAR/V42BIS@#", + "@#CONNECT 7200/ARQ/HST/HST/CELLULAR@#", + "@#CONNECT 7200/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 7200/ARQ/HST/LAPM/MNP5@#", + "@#CONNECT 7200/ARQ/HST/LAPM/NONE@#", + "@#CONNECT 7200/ARQ/HST/LAPM/V42BIS@#", + "@#CONNECT 7200/ARQ/HST/MNP/MNP5@#", + "@#CONNECT 7200/ARQ/HST/MNP/NONE@#", + "@#CONNECT 7200/ARQ/HST/MNP/V42BIS@#", + "@#CONNECT 7200/ARQ/LAPM/V42BIS@#", + "@#CONNECT 7200/ARQ/LAPM@#", + "@#CONNECT 7200/ARQ/MNP/MNP5@#", + "@#CONNECT 7200/ARQ/V32/LAPM/MNP5@#", + "@#CONNECT 7200/ARQ/V32/LAPM/NONE@#", + "@#CONNECT 7200/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 7200/ARQ/V32/LAPM@#", + "@#CONNECT 7200/ARQ/V32/MNP/MNP5@#", + "@#CONNECT 7200/ARQ/V32/MNP/NONE@#", + "@#CONNECT 7200/ARQ/V32/MNP/V42BIS@#", + "@#CONNECT 7200/ARQ/V32/MNP@#", + "@#CONNECT 7200/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 7200/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 7200/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 7200/ARQ/V34/LAPM@#", + "@#CONNECT 7200/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 7200/ARQ/V34/MNP/NONE@#", + "@#CONNECT 7200/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 7200/ARQ/V34/MNP@#", + "@#CONNECT 7200/ARQ@#", + "@#CONNECT 7200/HST/NONE@#", + "@#CONNECT 7200/V32/NONE@#", + "@#CONNECT 7200/V34/NONE@#", + "@#CONNECT 9600/ARQ/HST/HST/CELLULAR/MNP5@#", + "@#CONNECT 9600/ARQ/HST/HST/CELLULAR/V42BIS@#", + "@#CONNECT 9600/ARQ/HST/HST/CELLULAR@#", + "@#CONNECT 9600/ARQ/HST/HST/V42BIS@#", + "@#CONNECT 9600/ARQ/HST/LAPM/MNP5@#", + "@#CONNECT 9600/ARQ/HST/LAPM/NONE@#", + "@#CONNECT 9600/ARQ/HST/LAPM/V42BIS@#", + "@#CONNECT 9600/ARQ/HST/MNP/MNP5@#", + "@#CONNECT 9600/ARQ/HST/MNP/NONE@#", + "@#CONNECT 9600/ARQ/HST/MNP/V42BIS@#", + "@#CONNECT 9600/ARQ/LAPM/V42BIS@#", + "@#CONNECT 9600/ARQ/MNP/MNP5@#", + "@#CONNECT 9600/ARQ/V32/LAPM/MNP5@#", + "@#CONNECT 9600/ARQ/V32/LAPM/NONE@#", + "@#CONNECT 9600/ARQ/V32/LAPM/V42BIS@#", + "@#CONNECT 9600/ARQ/V32/LAPM@#", + "@#CONNECT 9600/ARQ/V32/MNP/MNP5@#", + "@#CONNECT 9600/ARQ/V32/MNP/NONE@#", + "@#CONNECT 9600/ARQ/V32/MNP/V42BIS@#", + "@#CONNECT 9600/ARQ/V32/MNP@#", + "@#CONNECT 9600/ARQ/V34/LAPM/MNP5@#", + "@#CONNECT 9600/ARQ/V34/LAPM/NONE@#", + "@#CONNECT 9600/ARQ/V34/LAPM/V42BIS@#", + "@#CONNECT 9600/ARQ/V34/LAPM@#", + "@#CONNECT 9600/ARQ/V34/MNP/MNP5@#", + "@#CONNECT 9600/ARQ/V34/MNP/NONE@#", + "@#CONNECT 9600/ARQ/V34/MNP/V42BIS@#", + "@#CONNECT 9600/ARQ/V34/MNP@#", + "@#CONNECT 9600/ARQ@#", + "@#CONNECT 9600/HST/NONE@#", + "@#CONNECT 9600/V32/NONE@#", + "@#CONNECT 9600/V34/NONE@#", + "@#CONNECT@#", + "@#ERROR@#", + "@#NO ANSWER@#", + "@#NO CARRIER@#", + "@#NO DIAL TONE@#", + "@#NO DIALTONE@#", + "@#OK@#", + "@#RING@#", + "@#RINGING@#", + "@#VOICE@#", + "#", + NULL +}; diff --git a/private/unimodem/new/mic/sample.inf b/private/unimodem/new/mic/sample.inf new file mode 100644 index 000000000..b07c29174 --- /dev/null +++ b/private/unimodem/new/mic/sample.inf @@ -0,0 +1,64 @@ +; OUT.INF +; +; Inf generated for a single modem. +; +; Created: Fri 05-24-1996 12:13:42 +; Original Inf: mdmgen.inf/[Rockwell]/%Rockwell1% +; Manufacturer: "Rockwell" +; Model: "14400 bps PCMCIA Data-Fax Modem" +; Rank0ID: GEN_Apex1 +; Rank1ID: PCMCIA\RIPICAA-RC144ACL-845A +; +; Signature: +; Rank0 Version M&M Flags AddReg CopyFile Ranks +; 12342412 12222233 12334444 12234444 12244444 53265123 52366664 23466666 + +[Version] +LayoutFile = layout.inf +Signature = "$CHICAGO$" +Class = Modem +ClassGUID = {4D36E96D-E325-11CE-BFC1-08002BE10318} +Provider = %provider% + + +[ControlFlags] +ExcludeFromSelect = GEN_Apex1 + + +[Manufacturer] +%manufacturer0% = Manufacturer0 + + +[Manufacturer0] +%model0% = Model0.Install, GEN_Apex1, PCMCIA\RIPICAA-RC144ACL-845A + + +[Model0.Install] +AddReg = Model0.AddReg + + +[Model0.AddReg] +HKR,,FriendlyDriver,,Unimodem.vxd +HKR,,DevLoader,,*VCOMM +HKR,,ConfigDialog,,modemui.dll +HKR,,PortSubClass,1,02 +HKR,,EnumPropPages,,"modemui.dll,EnumPropPages" +HKR,,PortDriver,,Serial.vxd +HKR,,Contention,,*vcd +HKR,, DeviceType, 1, 03 +HKR, Settings, SpeakerMode_Setup,, "M3" +HKR, Init, 1,, "AT<cr>" +HKR, Init, 2,, "ATE0V1<cr>" +HKR, Monitor, 1,, "ATS0=0<cr>" +HKR, Monitor, 2,, "None" +HKR, Answer, 1,, "ATA<cr>" +HKR, Hangup, 1,, "ATH<cr>" +HKR,, Reset,, "ATZ<cr>" +HKR, Settings, Prefix,, "AT" +HKR, Responses, "AUTOSTREAM: LEVEL 3", 1, 01, 00, 00,00,00,00, 00,00,00,00 + + +[Strings] +provider = "Microsoft" +manufacturer0 = "Rockwell" +model0 = "14400 bps PCMCIA Data-Fax Modem" diff --git a/private/unimodem/new/mic/sources b/private/unimodem/new/mic/sources new file mode 100644 index 000000000..fb24df25b --- /dev/null +++ b/private/unimodem/new/mic/sources @@ -0,0 +1,36 @@ +MAJORCOMP=net +MINORCOMP=unimodem + +TARGETNAME=tsym +TARGETPATH=obj +TARGETTYPE=PROGRAM +TARGETLIBS=\ + $(BASEDIR)\public\sdk\lib\*\kernel32.lib \ + $(BASEDIR)\public\sdk\lib\*\user32.lib + + +INCLUDES=$(BASEDIR)\public\sdk\inc;. + +C_DEFINES=-DWINVER=0x0400 + +USE_CRTDLL=1 + +SOURCES= CHKSUM.CPP \ + SYNC.CPP \ + ILIST.CPP \ + sym.cpp \ + INI.CPP \ + INF.CPP \ + globals.CPP \ + DEV.CPP \ + tsym.CPP \ + resp.cpp \ + tdev.CPP \ + mic.cpp \ + main.cpp + +UMTYPE=console + +!IFNDEF 386_WARNING_LEVEL +386_WARNING_LEVEL=/W3 +!ENDIF diff --git a/private/unimodem/new/mic/sym.cpp b/private/unimodem/new/mic/sym.cpp new file mode 100644 index 000000000..81d76e0c9 --- /dev/null +++ b/private/unimodem/new/mic/sym.cpp @@ -0,0 +1,316 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// SYM.C -- Implemtation for Classes: +// CInfSymbolTable +// CInfSymbol +// +// History: +// 05/21/96 JosephJ Created +// +// +#include "common.h" + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfSymbol +/////////////////////////////////////////////////////////////////////////// + + +CInfSymbol::CInfSymbol +( + const TCHAR rgchName[], + UINT cchName, + DWORD dwChecksum, + const CInfSymbol * pNext +) +: m_rgchText(rgchName), + m_cchText(cchName), + m_dwChecksum(dwChecksum), + m_pNext(pNext), + m_pPropList(NULL) +{ +} + + +CInfSymbol::~CInfSymbol() +{ + // BUGBUG -- delete all the InfSymbols allocated! +} + + +// Return the text associated with this symbol as a null-terminated +// string +const TCHAR * CInfSymbol::GetText(void) const +{ + return (this) ? m_rgchText : TEXT(""); +} + + +// Return the length of the text associated with this symbol +UINT CInfSymbol::GetTextLength() const +{ + return (this) ? m_cchText : 0; +} + + +// Release (decrement ref-count) of this symbol +void CInfSymbol::Release(void) const +{ +} + + +// Dump state +void CInfSymbol::Dump(void) const +{ + printf("Symbol(0x%08lx) = [%s]\n", this, (this) ? m_rgchText : TEXT("")); +} + + +// --------------- SetProp ------------------ +// Not really const -- it modifies the property list +BOOL +CInfSymbol::SetProp(const CInfSymbol *pSymPropName, void *pvProp) +const +// TODO +{ +#if 0 + CInfSymProp * pPropRec = (CInfSymProp *) m_pPropList; + DWORD dwSig = pSymPropName->Checksum(); + BOOL fRet=FALSE; + + // Search for property + while(pPropRec) + { + const CInfSymbol *pSym = pPropRec->pSymPropName; + if (dwChecksum == pSym->Checksum()) + { + if (!lstrcmp(pSymPropName->GetText(), pSym->GetText())) + { + // currently we don't allow you to set an already set prop. + ASSERT(FALSE); + goto end; + } + } + pPropRec = pPropRec->m_pNext; + } + + // Insert property + pPropRec = new CInfSymProp + ( + pSymPropName, + pvProp, + (CInfSymProp *) m_pPropList + ); + m_pPropList = (void *) pPropRec; + +end: + return fRet; +#endif // 0 + + return FALSE; +} + +// --------------- GetProp ------------------ +// TODO +BOOL +CInfSymbol::GetProp(const CInfSymbol *pSymPropName, void **ppvProp) +const +{ + return FALSE; +} + +// --------------- DelProp ------------------ +// Not really const -- it modifies the property list +// TODO +BOOL +CInfSymbol::DelProp(const CInfSymbol *pSymPropName) +const +{ + return FALSE; +} + + +// --------------- GetOrCreatePropLoc -------------- +// Not really const -- it could modify the property list +// TODO +BOOL +CInfSymbol::GetOrCreatePropLoc( + const CInfSymbol *pSymPropName, + void ***ppvProp, + BOOL *pfExists + ) +const +{ + static void *pv; + *pfExists=FALSE; + *ppvProp = &pv; + + return TRUE; +} + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfSymbolTable +/////////////////////////////////////////////////////////////////////////// + + +CInfSymbolTable::CInfSymbolTable(void) +{ + FillMemory((void*)m_rgpSym, sizeof(m_rgpSym), 0); + m_cSymbols=0; + m_pchFree = m_rgchTextStore; + m_pchLastFree = m_pchFree + + sizeof(m_rgchTextStore)/sizeof(*m_rgchTextStore)-1; +} + + +CInfSymbolTable::~CInfSymbolTable() +{ + mfn_EnterCrit(); + + // Free resources +} + + +// Look up and return the symbol with the specified text. +// If symbol is not prestent, return NULL if (!fInsert), else +// insert new symbol and return it. +// This symbol MUST be released by calling its Release function +// when it is no longer needed. +// NULL is returned for the empty string ("") +const CInfSymbol * CInfSymbolTable::Lookup(const TCHAR rgchName[], BOOL fInsert) +{ + const TCHAR *pch = rgchName; + const CInfSymbol *pSym = NULL; + const UINT cchName = lstrlen(rgchName); + const DWORD dwChecksum = ::Checksum + ( + (BYTE *) rgchName, + cchName*sizeof(TCHAR) + ); + const UINT u = dwChecksum % SYMTABSIZE; // we use checksum to compute hash. + + if (!cchName) { goto end; } + + mfn_EnterCrit(); + + // Look for it + for (pSym = m_rgpSym[u]; pSym; pSym = pSym->Next()) + { + // may as well use the checksum as a quick check... + if (dwChecksum==pSym->Checksum()) + { + if (!lstrcmp(rgchName, pSym->GetText())) goto end; + + printf + ( + "WARNING: CS(%s) == CS(%s) = 0x%08lx\n", + rgchName, + pSym->GetText(), + dwChecksum + ); + } + } + + // Didn't find it -- insert if necessary + ASSERT(pSym==NULL); + if (fInsert) + { + if ( (m_pchFree+cchName) < m_pchLastFree) + { + CopyMemory ( + (void *) m_pchFree, + (const void *) rgchName, + (cchName+1)*sizeof(*rgchName) // incl. null term. + ); + pSym = new CInfSymbol(m_pchFree, cchName, dwChecksum, m_rgpSym[u]); + if (pSym) + { + printf("Inserting. %s @ 0x%08lx..\n", m_pchFree, (DWORD) pSym); + m_pchFree += (cchName+1); + ASSERT(m_pchFree<=m_pchLastFree); + m_rgpSym[u] = pSym; + } + } + } + + mfn_LeaveCrit(); + +end: + return pSym; +} + + +// Dump state +void CInfSymbolTable::Dump(void) const +{ + mfn_EnterCrit(); + + printf("[BEGIN SYMBOL TABLE DUMP]\n"); + for (UINT u=0; u<SYMTABSIZE; u++) + { + const CInfSymbol *pSym = m_rgpSym[u]; + + if (pSym) + { + printf("---- Location 0x%08lx -----\n", u); + for (; pSym ; pSym = pSym->Next()) + { + pSym->Dump(); + } + } + } + printf("[End symbol table dump]\n"); + + mfn_LeaveCrit(); + +} + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfSymbolList +/////////////////////////////////////////////////////////////////////////// + + +// --------------------------- Find ----------------------------- +// Looks for the specified symbol, returns the list element with that symbol. +// If ppListPrev is non-NULL, sets it to the previous list element +// (if no previous element, sets it to NULL). If the symbol is not found, +// *ppListPrev is not touched. +// +const CInfSymbolList * +CInfSymbolList::Find +( + const CInfSymbolList *pList, + const CInfSymbol *pSym, + const CInfSymbolList **ppListPrev +) +{ + DWORD dwChecksum = pSym->Checksum(); + const CInfSymbolList *pListPrev=NULL; + + while(pList) + { + const CInfSymbol *pSym1 = pList->m_pSym; + if (dwChecksum == pSym1->Checksum()) + { + if (!lstrcmp(pSym->GetText(), pSym1->GetText())) + { + // Found it ... + if (ppListPrev) + { + // Note, if we find the 1st element, *ppListPrev is set + // to NULL. + *ppListPrev = pListPrev; + } + goto end; + } + } + pListPrev = pList; + pList = pList->Next(); + } + +end: + + return pList; +} diff --git a/private/unimodem/new/mic/sym.h b/private/unimodem/new/mic/sym.h new file mode 100644 index 000000000..054fcb569 --- /dev/null +++ b/private/unimodem/new/mic/sym.h @@ -0,0 +1,215 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// SYM.H -- Header for Classes: +// CInfSymbolTable +// CInfSymbol +// +// History: +// 05/21/96 JosephJ Created +// +// +#ifndef _SYM_H_ +#define _SYM_H_ + +class CInfSymbolList; + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfSymbol +/////////////////////////////////////////////////////////////////////////// + +// Represents a symbol in the symbol table. +// Note: Only CInfSymbolTable member functions can construct/destruct these +// objects. +// +// Empty string maps to NULL symbol. So a NULL pointer is perfectly valid for +// all member functions. +// GetText(NULL) returns the empty string, and Checksum returns 0x0. +// Strcmpi treats NULL pointer as the empty string. + +class CInfSymbol +{ + +public: + + //-------------- GetText ------------------ + // Return the text associated with this symbol as a null-terminated + // string + const TCHAR * GetText(void) const; + + //-------------- GetTextLength ------------------ + // Return the length of the text associated with this symbol, + // not counting terminating zero. + UINT GetTextLength() const; + + //-------------- Strcmpi ------------------ + // Case-insensitive equal + // -ve implies this is less-than pSym + int Strcmpi(const CInfSymbol *pSym) const + { + if (this && pSym) + { + return lstrcmpi(m_rgchText, pSym->m_rgchText); + } + else if (this && !pSym) + { + return 1; + } + else if (!this && pSym) + { + return -1; + } + else + { + return 0; + } + } + + //-------------- Release ------------------ + // Release (decrement ref-count) of this symbol + void Release(void) const; + + //-------------- Dump ------------------ + // Dump state + void Dump(void) const; + + // --------------- Checksum ------------------ + // Return checksum of contents + DWORD Checksum(void) const {return (this) ? m_dwChecksum : 0;} + + // --------------- SetProp ------------------ + BOOL SetProp(const CInfSymbol *pSymPropName, void *pvProp) const; + + // --------------- GetProp ------------------ + BOOL GetProp(const CInfSymbol *pSymPropName, void **ppvProp) const; + + // --------------- GetOrCreatePropLoc -------------- + BOOL + GetOrCreatePropLoc( + const CInfSymbol *pSymPropName, + void ***ppvProp, + BOOL *pfExists + ) + const; + + // --------------- DelProp ------------------ + BOOL DelProp(const CInfSymbol *pSymPropName) const; + +private: + + friend class CInfSymbolTable; + + CInfSymbol + ( + const TCHAR rgchName[], + UINT cchName, + DWORD dwChecksum, + const CInfSymbol *pNext + ); + + ~CInfSymbol(); + + const CInfSymbol *Next(void) const {return m_pNext;} + + const TCHAR * m_rgchText; + const UINT m_cchText; + const DWORD m_dwChecksum; + const CInfSymbol * m_pNext; + CInfSymbolList * m_pPropList; + +}; + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CInfSymbolTable +/////////////////////////////////////////////////////////////////////////// + +// A symbol table. + +static const UINT SYMTABSIZE = 1000; +static const UINT TEXTSTORESIZE = 1000*1000; + + +class CInfSymbolTable +{ + +public: + + CInfSymbolTable(void); + ~CInfSymbolTable(); + + // TODO -- add "context" parameter to symbols -- symbols with different + // context will be stored separately even if their name is the same. + // Context is not interpreted by the symbol table, except to test for + // equality. When implementing this, add a context parameter to + // InfSymbols's constructor, and a member fn "GetContext()" to InfSymbol. + + //-------------- Lookup ------------------ + // Look up and return the symbol with the specified text + // This symbol must be released by calling its Release function + // when it is no longer needed. + const CInfSymbol * Lookup(const TCHAR rgchName[], BOOL fInsert); + + //-------------- Dump ------------------ + // Dump state + void Dump(void) const; + +private: + + const CInfSymbol * m_rgpSym[SYMTABSIZE]; + TCHAR m_rgchTextStore[TEXTSTORESIZE]; + TCHAR * m_pchFree; + TCHAR * m_pchLastFree; + + CSync m_sync; + UINT m_cSymbols; + + void mfn_EnterCrit(void) const {m_sync.EnterCrit();} + void mfn_LeaveCrit(void) const {m_sync.LeaveCrit();} + +}; + + +class CInfSymbolList : private CInfList +{ + CInfSymbolList + ( + const CInfSymbol *pSym, + void *pvData, + const CInfSymbolList *pNext + ) + : CInfList(pvData, pNext), m_pSym(pSym) + { + } + + const CInfSymbolList * + Next (void) + const + { + return (const CInfSymbolList *) CInfList::Next(); + } + + const CInfSymbol * GetSym(void) {return m_pSym;} + + ~CInfSymbolList () {} + + // --------------------------- Find ----------------------------- + // Looks for the specified symbol, returns the list element with that + // symbol. If ppListPrev is non-NULL, sets it to the previous list element + // (if no previous element, sets it to NULL). If the symbol is not found, + // *ppListPrev is not touched. + static + const CInfSymbolList * + Find + ( + const CInfSymbolList *pList, + const CInfSymbol *pSym, + const CInfSymbolList **ppListPrev + ); + +private: + const CInfSymbol *m_pSym; +}; + +#endif // _SYM_H_ diff --git a/private/unimodem/new/mic/sync.cpp b/private/unimodem/new/mic/sync.cpp new file mode 100644 index 000000000..10f58f263 --- /dev/null +++ b/private/unimodem/new/mic/sync.cpp @@ -0,0 +1,35 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +#include "common.h" +// +// SYNC.CPP -- Implemtation for Classes: +// CSync +// +// History: +// 05/22/96 JosephJ Created +// +// + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CSync +/////////////////////////////////////////////////////////////////////////// + +#if (TODO) + +// +// Signals all the events specified in the event list and at the same +// time distroys the list. +// +void CSync::mfn_SignalAndFree(SLIST *pEventList) +{ + while(m_pEventList) + { + SLIST pOld = m_pEventList; + SetEvent((HANDLE) m_pEventList->pv); + m_pEventList = m_pEventList->Next(); + delete m_pOld; + } +} +#endif // TODO diff --git a/private/unimodem/new/mic/sync.h b/private/unimodem/new/mic/sync.h new file mode 100644 index 000000000..95f9bbe48 --- /dev/null +++ b/private/unimodem/new/mic/sync.h @@ -0,0 +1,148 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// SYNC.H -- Header for Classes: +// CSync +// +// History: +// 05/21/96 JosephJ Created +// +// +#ifndef _SYNC_H_ +#define _SYNC_H_ + + +/////////////////////////////////////////////////////////////////////////// +// CLASS CSync +/////////////////////////////////////////////////////////////////////////// + +// Controls access to its parent object. Includes a critical section, and +// (TODO) mechanism for waiting until all threads have finished using +// the parent object. + +// Sample session (pObj is a ptr to a hypothetical parent, which implements +// methods Load, Unload, OpenSession, CloseSession using the member CSymc +// object): +// pObj->Load("mdmusr.inf"); +// hSession = pObj->OpenSession(); +// ... do stuff ... +// pObj->CloseSession(hSession); +// hSync = pObj->Unload(); +// if (hSync) WaitForSingleObject(hSync, INFINITE); +// CloseHandle(hSync); + +class CSync +{ + +public: + + CSync(void) {InitializeCriticalSection(&m_crit);} + + ~CSync() + { + EnterCriticalSection(&m_crit); + DeleteCriticalSection(&m_crit); + } + + //-------------- EnterCrit ------------------ + // Claim our critical section + void EnterCrit(void) const + { + EnterCriticalSection((CRITICAL_SECTION *)&m_crit); + } + + //-------------- LeaveCrit ------------------ + // Release our critical section + void LeaveCrit(void) const + { + LeaveCriticalSection((CRITICAL_SECTION *)&m_crit); + } + +#if (TODO) + + BOOL BeginLoad(void) + { + } + + void EndLoad(void) + { + EnterCrit(); + ASSERT (m_eState == CSYNC_LOADING); + m_eState = CSYNC_LOADED; + LeaveCrit(); + } + + HANDLE BeginUnload(void) + { + HANDLE h=NULL; + EnterCrit(); + if (m_eState == CSYNC_LOADED) + { + m_eState = CSYNC_UNLOADING; + } + else + { + fRet = FALSE; + } + LeaveCrit(); + + return fRet; + } + + void EndUnload(void); + + HSESSION BeginSession(void) + { + HSESSION hRet = 1; + EnterCrit(); + if (m_eState==SYNC_LOADED) + { + m_uRefCount++; + } + else + { + hRet = 0; + } + LeaveCrit(); + + return hRet; + } + + void EndSession(HSESSION hSession) + { + SLINST *pEventList=NULL; + EnterCrit(); + ASSERT(hSession==1 && m_uRefCount); + m_uRefCount--; + if (m_eState==SYNC_UNLOADING && m_pEventList) + { + pEventList = m_pEventList; + m_pEventList=NULL; + } + LeaveCrit(); + + mfn_SignalAndFree(m_pEventList); + } + + BOOL AddContext(HSESSION hS) + { + return FALSE; + } +#endif // TODO + +private: + + CRITICAL_SECTION m_crit; + +#if (TODO) + UINT m_uRefCount; + enum {CSYNC_UNLOADED, CSYNC_LOADING, CSYNC_UNLOADING, CSYNC_UNLOADED} + m_eState; + SLIST* pUnloadEventList; +#endif // TODO + +}; + + +#endif // _SYNC_H_ diff --git a/private/unimodem/new/mic/tdev.cpp b/private/unimodem/new/mic/tdev.cpp new file mode 100644 index 000000000..2e32384f1 --- /dev/null +++ b/private/unimodem/new/mic/tdev.cpp @@ -0,0 +1,84 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// TDEV.CPP -- Component tests for classes: +// CIndDevice +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// History: +// 05/22/96 JosephJ Created +// +#include "common.h" +#include "ini.h" +#include "inf.h" +#include "dev.h" +#include "test.h" + +#define SIMPLE 0 +#define COMPLEX 1 +#define ACTUAL 2 + +//#define TEST_TYPE (SIMPLE) +#define TEST_TYPE (COMPLEX) +//#define TEST_TYPE (ACTUAL) + + +#if (TEST_TYPE==SIMPLE) +#elif (TEST_TYPE==COMPLEX) +#elif (TEST_TYPE==ACTUAL) +#endif + +int main_tdev(int argc, char * argv[]) +{ + CInfFile *pInf= new CInfFile(); + CInfDevice *pDev = new CInfDevice(NULL); + + const CInfManufacturerEntry *pManuE = NULL; + const CInfManufacturerSection *pManuS = NULL; + const CInfModelEntry *pModelE = NULL; + + //__try + { + //__try + { + if (pInf->Load("test.inf")) + { + pManuE = pInf->GetFirstManufacturerEntry(); + } + if (pManuE) + { + pManuS = pManuE->GetManufacturerSection(); + } + if (pManuS) + { + pModelE = pManuS->GetFirstModelEntry(); + } + if (pModelE) + { + if (pDev->Load(pInf, pManuE, pModelE)) + { + pDev->Dump(); + pDev->WriteInf(TEXT("out.inf")); + } + } + + } + //__finally + { + // printf("in finally\n"); + if (pDev) {pDev->Unload(); delete pDev; pDev=NULL;} + if (pInf) {pInf->Unload(); delete pInf; pInf=NULL;} + } + } + //__except(printf("in filter\n"), EXCEPTION_EXECUTE_HANDLER) + if (0) { + printf("in except\n"); + ASSERT(FALSE); + } + + + return 0; +} diff --git a/private/unimodem/new/mic/test.h b/private/unimodem/new/mic/test.h new file mode 100644 index 000000000..d5064c9d0 --- /dev/null +++ b/private/unimodem/new/mic/test.h @@ -0,0 +1,2 @@ +int main_tsym(int argc, char * argv[]); +int main_tdev(int argc, char * argv[]); diff --git a/private/unimodem/new/mic/tsym.cpp b/private/unimodem/new/mic/tsym.cpp new file mode 100644 index 000000000..ab6712aa5 --- /dev/null +++ b/private/unimodem/new/mic/tsym.cpp @@ -0,0 +1,65 @@ +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// TSYM.CPP -- Component tests for classes: +// CInfSymbolTable +// CInfSymbol +// +// Copyright (c) 1996 Microsoft Corporation +// +// +// History: +// 05/21/96 JosephJ Created +// +#include "common.h" +#include "test.h" + + +#define SIMPLE 0 +#define COMPLEX 1 +#define ACTUAL 2 + +//#define TEST_TYPE (SIMPLE) +#define TEST_TYPE (COMPLEX) +//#define TEST_TYPE (ACTUAL) + +extern const TCHAR *rgpszSimpleResp[]; +extern const TCHAR *rgpszComplexResp[]; +extern const TCHAR *rgpszActualResp[]; + + +#if (TEST_TYPE==SIMPLE) +# define TEST_RESP_ARRAY rgpszSimpleResp +#elif (TEST_TYPE==COMPLEX) +# define TEST_RESP_ARRAY rgpszComplexResp +#elif (TEST_TYPE==ACTUAL) +# define TEST_RESP_ARRAY rgpszActualResp +#endif + +static const TCHAR **rgpchStrings = TEST_RESP_ARRAY; + +int main_tsym(int argc, char * argv[]) +{ + const TCHAR **pch = NULL; + + for (pch = rgpchStrings; *pch; pch++) + { + const CInfSymbol *pSym = gSymtab.Lookup(*pch, TRUE); + if (pSym) {pSym->Dump(); pSym->Release(); pSym=0;} + } + + printf("+++\n"); + + for (pch = rgpchStrings; *pch; pch++) + { + const CInfSymbol *pSym = gSymtab.Lookup(*pch, TRUE); + if (pSym) {pSym->Dump(); pSym->Release(); pSym=0;} + } + + printf("+++\n"); + + gSymtab.Dump(); + + return 0; +} diff --git a/private/unimodem/new/readme.txt b/private/unimodem/new/readme.txt new file mode 100644 index 000000000..6ac5b68ed --- /dev/null +++ b/private/unimodem/new/readme.txt @@ -0,0 +1,11 @@ +[match] Fast response matching code + 3/24/96 JOSEPHJ Code which builds a tree given a list of possible modem + responses and uses this tree to determine how many characters + to read and to match the characters read against one of the + possible responses. + +[slot] + 3/24/96 JOSEPHJ Code that implements basic IPC for some external process + to notify unimodem of external events. It is implemented using + one mailslot and one semaphore, and allows arbitary framed data + to be sent to the unimode process. diff --git a/private/unimodem/new/slot/client.c b/private/unimodem/new/slot/client.c new file mode 100644 index 000000000..c77d385ee --- /dev/null +++ b/private/unimodem/new/slot/client.c @@ -0,0 +1,47 @@ +//**************************************************************************** +// +// Module: UNIMDM +// File: SLOT.C +// +// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved +// +// Revision History +// +// +// 3/25/96 JosephJ Created +// +// +// Description: Implements the unimodem TSP notification mechanism: +// The higher level API: UnimodemNotifyTSP() +// +//**************************************************************************** +#define UNICODE +#include <windows.h> +#include "slot.h" +#include "..\..\inc\tspnotif.h" + + +BOOL WINAPI UnimodemNotifyTSP(PNOTIFICATION_FRAME pnf) +{ + BOOL fRet=FALSE; + HNOTIFICATION hN=0; + + if (pnf->dwSig!=dwNFRAME_SIG || pnf->dwSize<sizeof(*pnf) || + pnf->dwSize>MAX_NOTIFICATION_FRAME_SIZE) + { + SetLastError(ERROR_INVALID_PARAMETER); + goto end; + } + + hN = notifCreate(FALSE, SLOTNAME_UNIMODEM_NOTIFY_TSP, 0, 0); + + if (hN) + { + fRet = notifWriteMsg(hN, (LPBYTE) pnf, pnf->dwSize); + notifFree(hN); hN=0; + } + +end: + + return fRet; +} diff --git a/private/unimodem/new/slot/main.c b/private/unimodem/new/slot/main.c new file mode 100644 index 000000000..b60d85f5a --- /dev/null +++ b/private/unimodem/new/slot/main.c @@ -0,0 +1,514 @@ +//**************************************************************************** +// +// Module: UNIMDM +// File: MAIN.C +// +// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved +// +// Revision History +// +// +// 3/25/96 JosephJ Created +// +// +// Description: Test the notification support. +// Tests both the higher-level api (UnimodemNotifyTSP) +// and the lower level notifXXX apis. The latter +// are tested later on in the file, and the header file +// "slot.h" is included there, not at the start of this +// file, because the higher-level tests do not need to +// include "slot.h" +// +//**************************************************************************** +#define UNICODE +#include <windows.h> +#include <stdio.h> +#include <stdlib.h> +#include "..\..\inc\tspnotif.h" + +#define SLOTNAME SLOTNAME_UNIMODEM_NOTIFY_TSP + +#define TSPI_NOTIF_A 101 +#define TSPI_NOTIF_B 102 +#define TSPI_NOTIF_QUIT 999 + +#define ASSERT(_c) \ + ((_c) ? 0: DPRINTF2("Assertion failed in %s:%d\n", __FILE__, __LINE__)) +#define DPRINTF(_fmt) printf(_fmt) +#define DPRINTF1(_fmt,_arg) printf(_fmt,_arg) +#define DPRINTF2(_fmt,_arg,_arg2) printf(_fmt,_arg,_arg2) +#define DPRINTF3(_fmt,_arg,_arg2,_arg3) printf(_fmt,_arg,_arg2,_arg3) + +BOOL InitGlobals(int argc, char *argv[]); +void Server(void); +void Client_LL(void); // LowLevel -- calls notif* apis +void Client_HL(void); // HighLevel -- calls UnimodemNotifyTSP +void ProcessFrame(PNOTIFICATION_FRAME pnf); +BOOL ValidateFrame(PNOTIFICATION_FRAME pnf, DWORD dwTrueSize); +BOOL ReadFrame_UI(PNOTIFICATION_FRAME pnf, DWORD dwcbMax); +BOOL ReadFrame_Auto(PNOTIFICATION_FRAME pnf, DWORD dwcbMax); + +#define READFRAME(_pnf, _max) ReadFrame_Auto(_pnf, _max) +//#define READFRAME(_pnf, _max) ReadFrame_UI(_pnf, _max) + +//#define CLIENT() Client_LL() +#define CLIENT() Client_HL() + + +BOOL InitFrame_CplReEnum(PNOTIFICATION_FRAME pnf, DWORD dwcbMax, DWORD dwCount); +BOOL InitFrame_CplChangeDCC(PNOTIFICATION_FRAME, DWORD, DWORD); +BOOL InitFrame_Simple(PNOTIFICATION_FRAME pnf, DWORD dwcbMax, DWORD dwCount); + +#define NOTIF_CPL_REENUM 1 +#define NOTIF_CPL_CHANGE_DCC 2 +#define INIT_TYPE NOTIF_CPL_CHANGE_DCC + +#if (INIT_TYPE==NOTIF_CPL_REENUM) + #define INIT_FRAME InitFrame_CplReEnum +#elif (INIT_TYPE==NOTIF_CPL_CHANGE_DCC) + #define INIT_FRAME InitFrame_CplChangeDCC +#else + #define INIT_FRAME InitFrame_Simple +#endif + +struct +{ + BOOL fQuit; + BOOL fServer; + +} gMain; + +int __cdecl main(int argc, char *argv[]) +{ + // init globals + if (!InitGlobals(argc, argv)) goto end; + + if (gMain.fServer) Server(); + else CLIENT(); + +end: + return 0; +} + +BOOL InitGlobals(int argc, char *argv[]) +{ + BOOL fRet=FALSE; + char *pc; + + if (argc!=2) goto end; + + pc=argv[1]; + if (*pc!='-' && *pc!='/') goto end; + *pc++; + switch(*pc++) + { + case 's': + gMain.fServer=TRUE; + break; + case 'c': + break; + default: + goto end; + } + + DPRINTF1("Ha!%d\n", gMain.fServer); + fRet=TRUE; + +end: + return fRet; +} + + +void ProcessFrame(PNOTIFICATION_FRAME pnf) +{ + if (pnf->dwSig!=dwNFRAME_SIG) + { + ASSERT(FALSE); + return; + } + + switch(pnf->dwType) + { + case TSPI_NOTIF_A: + DPRINTF("Got NOTIF_A\n"); + break; + case TSPI_NOTIF_B: + DPRINTF("Got NOTIF_B\n"); + break; + case TSPI_NOTIF_QUIT: + DPRINTF("Got NOTIF_QUIT, Quitting...\n"); + gMain.fQuit=TRUE; + break; + default: + DPRINTF1("Got unknown notif type 0x%lu. Quitting\n", pnf->dwType); + gMain.fQuit=TRUE; + break; + } +} + + +void Client_HL(void) +{ + struct { + DWORD dw0; + DWORD dw1; + BYTE rgb[256]; + } EmptyFr; + PNOTIFICATION_FRAME pnf = (PNOTIFICATION_FRAME) &EmptyFr; + DWORD dwcbMax=sizeof(EmptyFr); + DWORD dwcbServerMax=0; + + // Get input from user, submit request + pnf->dwSig=pnf->dwSize=0; + while(READFRAME(pnf, dwcbMax)) + { + ASSERT(pnf->dwSig==dwNFRAME_SIG); + if (!UnimodemNotifyTSP(pnf)) + { + DPRINTF1("UnimodemNotifyTSP(-) failed. GetLastError=0x%lx. Exiting.\n", + (unsigned long) GetLastError()); + // break; + } + pnf->dwSig=pnf->dwSize=0; + } + + return; +} + +BOOL ReadFrame_UI(PNOTIFICATION_FRAME pnf, DWORD dwcbMax) +{ + BOOL fRet=FALSE; + char rgchTmp[128]; + DWORD dwType=0; + BOOL fInputError=FALSE; + + if (dwcbMax<sizeof(*pnf)) + { + DPRINTF1("ReadFrame: input frame too small (%lu)\n", + dwcbMax); + goto end; + } + + fInputError=TRUE; + + if (scanf("%s", rgchTmp)==1) + { + if (lstrlenA(rgchTmp)==1) + { + fInputError=FALSE; + switch(*rgchTmp) + { + case 'a': + DPRINTF("sending NOTIF_A\n"); + dwType = TSPI_NOTIF_A; + break; + case 'b': + DPRINTF("sending NOTIF_B\n"); + dwType = TSPI_NOTIF_B; + break; + case 'q': + DPRINTF("sending NOTIF_QUIT\n"); + dwType = TSPI_NOTIF_QUIT; + break; + case 'x': + DPRINTF("Exiting\n"); + break; + default: + fInputError=TRUE; + break; + } + } + } + + if (dwType) + { + pnf->dwSig=dwNFRAME_SIG; + pnf->dwSize=sizeof(*pnf); + pnf->dwType=dwType; + fRet=TRUE; + } + + if (fInputError) + { + DPRINTF("Bad/no input. Quitting...\n"); + } + +end: + return fRet; +} + +BOOL ReadFrame_Auto(PNOTIFICATION_FRAME pnf, DWORD dwcbMax) +{ + static dwCount=0; + DWORD dwSleepAmount; + BOOL fRet=FALSE; + + if (!dwCount++) + { + srand((ULONG) GetTickCount()); + } + +# define MAXSLEEP 10000 + dwSleepAmount = ((DWORD) rand()) % MAXSLEEP; + + Sleep(dwSleepAmount); + + // Quit after 100 -- currently disabled. + //if (dwCount>100) goto end; + + fRet = INIT_FRAME(pnf, dwcbMax, dwCount); + +// end: + return fRet; +} + +BOOL ValidateFrame(PNOTIFICATION_FRAME pnf, DWORD dwTrueSize) +{ + return (pnf && pnf->dwSig==dwNFRAME_SIG && pnf->dwSize>=sizeof(*pnf) && + pnf->dwSize==dwTrueSize && + pnf->dwSize<=MAX_NOTIFICATION_FRAME_SIZE); +} + +// ----------------------------- TEST INTERNAL STUFF -------------------- +#include "slot.h" +void ProcessNotification(HNOTIFICATION hN); + +// Server Thread +void Server(void) +{ + HNOTIFICATION hN=0; + DWORD dwLastErr=0; + HANDLE hObj=NULL; + + // Create slot + hN = notifCreate(TRUE, SLOTNAME, MAX_NOTIFICATION_FRAME_SIZE, 100); + if (!hN) + { + DPRINTF3("notifServerCreate(\"%s\", %lu) failed. GetLastError=0x%lx.\n", + (LPCSTR) SLOTNAME, + (unsigned long) MAX_NOTIFICATION_FRAME_SIZE, + (unsigned long) GetLastError()); + goto end; + } + if (!(hObj=notifGetObj(hN))) + { + DPRINTF("notifGetObj failed\n"); + goto end; + } + + // Wait and process messages + while(!gMain.fQuit) + { + UINT u=WaitForSingleObject(hObj, 5000); + if (u==WAIT_OBJECT_0) + { + ProcessNotification(hN); + //Sleep(1000); + } + } + +end: + if (hN) + { + notifFree(hN); hN=0; + } + ; +} + + + +void ProcessNotification(HNOTIFICATION hN) +{ + BOOL fRet; + struct { + DWORD dw0; + DWORD dw1; + BYTE rgb[256]; + } EmptyFr; + DWORD dwcbMax=sizeof(EmptyFr); + DWORD dwcbRead=0; + + PNOTIFICATION_FRAME pnf = (PNOTIFICATION_FRAME) &EmptyFr; + + pnf->dwSig=pnf->dwSize=0; + + fRet=notifReadMsg(hN, (LPBYTE) pnf, dwcbMax, &dwcbRead); + if (!fRet) + { + DPRINTF1("notifReadFrame(...) failed. GetLastError=0x%lx.\n", + (unsigned long) GetLastError()); + goto end; + } + + // Verify validity of msg... + if (!ValidateFrame(pnf, dwcbRead)) + { + DPRINTF("Invalid frame\n"); + goto end; + } + ASSERT(pnf->dwSig==dwNFRAME_SIG); + ASSERT(pnf->dwSize<=dwcbMax); + ASSERT(pnf->dwSize<=MAX_NOTIFICATION_FRAME_SIZE); + + ProcessFrame(pnf); + +end: + return; +} + +void Client_LL(void) +{ + HNOTIFICATION hN=0; + DWORD dwLastErr=0; + struct { + DWORD dw0; + DWORD dw1; + BYTE rgb[256]; + } EmptyFr; + PNOTIFICATION_FRAME pnf = (PNOTIFICATION_FRAME) &EmptyFr; + DWORD dwcbMax=sizeof(EmptyFr); + DWORD dwcbServerMax=0; + + // Open slot + hN = notifCreate(FALSE, SLOTNAME, 0, 0); + if (!hN) + { + DPRINTF2("notifClientOpen(\"%s\", -) failed. GetLastError=0x%lx.\n", + (LPCSTR) SLOTNAME, + (unsigned long) GetLastError()); + goto end; + } + dwcbServerMax=notifGetMaxSize(hN); + + if (dwcbServerMax<dwcbMax) + { + DPRINTF2("Warning -- server max size = %lu; Our max=%lu\n", + dwcbServerMax, + dwcbMax); + } + + // Get input from user, submit request + pnf->dwSig=pnf->dwSize=0; + while(READFRAME(pnf, dwcbMax)) + { + ASSERT(pnf->dwSig==dwNFRAME_SIG); + if (!notifWriteMsg(hN, (LPBYTE)pnf, pnf->dwSize)) + { + DPRINTF1("notifWriteFrame(-) failed. GetLastError=0x%lx. Exiting.\n", + (unsigned long) GetLastError()); + break; + } + pnf->dwSig=pnf->dwSize=0; + } + +end: + if (hN) + { + notifFree(hN); hN=0; + } +} + +BOOL InitFrame_Simple(PNOTIFICATION_FRAME pnf, DWORD dwcbMax, DWORD dwCount) +{ + BOOL fRet=FALSE; + DWORD dwType=0; + DWORD dwFlags=0; + + if (dwcbMax<sizeof(*pnf)) + { + DPRINTF1("ReadFrame: input frame too small (%lu)\n", + dwcbMax); + goto end; + } + + if (dwCount&0x1) + { + DPRINTF("sending NOTIF_A\n"); + dwType = TSPI_NOTIF_A; + } + else + { + DPRINTF("sending NOTIF_B\n"); + dwType = TSPI_NOTIF_B; + } + + pnf->dwSig=dwNFRAME_SIG; + pnf->dwSize=sizeof(*pnf); + pnf->dwType=dwType; + pnf->dwFlags=dwFlags; + fRet=TRUE; + +end: + return fRet; +} + +BOOL InitFrame_CplReEnum(PNOTIFICATION_FRAME pnf, DWORD dwcbMax, DWORD dwCount) +{ + BOOL fRet=FALSE; + DWORD dwType=0; + DWORD dwFlags=0; + + if (dwcbMax<sizeof(*pnf)) + { + DPRINTF1("ReadFrame: input frame too small (%lu)\n", + dwcbMax); + goto end; + } + + dwType = TSPNOTIF_TYPE_CPL; + dwFlags = fTSPNOTIF_FLAG_CPL_REENUM; + + pnf->dwSig=dwNFRAME_SIG; + pnf->dwSize=sizeof(*pnf); + pnf->dwType=dwType; + pnf->dwFlags=dwFlags; + fRet=TRUE; + +end: + return fRet; +} + +BOOL InitFrame_CplChangeDCC +( + PNOTIFICATION_FRAME pnf, + DWORD dwcbMax, + DWORD dwCount +) +{ + BOOL fRet=FALSE; + DWORD dwType=0; + DWORD dwFlags=0; + LPCTSTR rglpctszNames[3] = + { + TEXT("Zoom Fax Modem V.34X Model 470"), + TEXT("Zoom Fax Modem V.34X Model 470 #2"), + TEXT("blah") + }; + LPCTSTR lpctszFriendlyName = rglpctszNames[dwCount%3]; + UINT u = lstrlen(lpctszFriendlyName); + + if (dwcbMax< (sizeof(*pnf)+(u+1)*sizeof(TCHAR))) + { + DPRINTF1("ReadFrame: input frame too small (%lu)\n", + dwcbMax); + goto end; + } + + pnf->dwSig = dwNFRAME_SIG; + pnf->dwSize = dwcbMax; + pnf->dwType = TSPNOTIF_TYPE_CPL; + pnf->dwFlags = fTSPNOTIF_FLAG_CPL_DEFAULT_COMMCONFIG_CHANGE; + + #ifdef UNICODE + pnf->dwFlags |= fTSPNOTIF_FLAG_UNICODE; + #endif // UNICODE + + lstrcpy((TCHAR *)pnf->rgb, lpctszFriendlyName); + + printf("Sending ChangeDCC[%s]\n", lpctszFriendlyName); + + fRet=TRUE; + +end: + return fRet; +} diff --git a/private/unimodem/new/slot/makefile b/private/unimodem/new/slot/makefile new file mode 100644 index 000000000..6ee4f43fa --- /dev/null +++ b/private/unimodem/new/slot/makefile @@ -0,0 +1,6 @@ +# +# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source +# file to this component. This file merely indirects to the real make file +# that is shared by all the components of NT OS/2 +# +!INCLUDE $(NTMAKEENV)\makefile.def diff --git a/private/unimodem/new/slot/sec.c b/private/unimodem/new/slot/sec.c new file mode 100644 index 000000000..786e2b5ed --- /dev/null +++ b/private/unimodem/new/slot/sec.c @@ -0,0 +1,169 @@ +//**************************************************************************** +// +// Module: UNIMDM +// File: SEC.C +// +// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved +// +// Revision History +// +// +// 3/27/96 JosephJ Created +// +// +// Description: Security-related helper functions +// +//**************************************************************************** +#define UNICODE +#include <windows.h> +#include <stdio.h> +#include "sec.h" + +#define DPRINTF2(_format, _a1, _a2) printf(_format, _a1, _a2) + +#define ASSERT(_c) \ + ((_c) ? 0: DPRINTF2("Assertion failed in %s:%d\n", __FILE__, __LINE__)) + +//**************************************************************************** +// Description: This procedure will allocate and initialize a security +// descriptor with the specificed attributes. +// +// Returns: pointer to an allocated and initialized security descriptor. +// If NULL, GetLastError() will return the appropriate error code. +// +// History: +// 3/27/96 JosephJ Created +//****************************************************************************/ +// +PSECURITY_DESCRIPTOR AllocateSecurityDescriptor ( + PSID_IDENTIFIER_AUTHORITY pSIA, + DWORD dwRID, + DWORD dwRights, + PSID pSidOwner, + PSID pSidGroup + ) +{ + PSID pObjSid = NULL; + PACL pDacl = NULL; + PSECURITY_DESCRIPTOR pSD = NULL; + + pSD = LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH+256); + + if (!pSD) goto end_fail; + + // Set up the SID for the admins that will be allowed to have + // access. This SID will have 1 sub-authority + if (!AllocateAndInitializeSid( + pSIA, + 1, + dwRID, 0, 0, 0, 0, 0, 0, 0, + &pObjSid + )) + { + goto end_fail; + } + + // Set up the DACL that will allow all processes with the above SID + // access specified in dwRights. It should be large enough to hold all ACEs. + // + { + DWORD cbDaclSize = sizeof(ACCESS_ALLOWED_ACE) + + GetLengthSid(pObjSid) + + sizeof(ACL); + + pDacl = (PACL)LocalAlloc( LPTR, cbDaclSize ); + if (!pDacl) + { + goto end_fail; + } + + if ( !InitializeAcl( pDacl, cbDaclSize, ACL_REVISION2 ) ) + { + goto end_fail; + } + } + + // Add the ACE to the DACL + // + if ( !AddAccessAllowedAce( pDacl, ACL_REVISION2, dwRights, pObjSid)) + { + goto end_fail; + } + + // Create the security descriptor and put the DACL in it. + // + if ( !InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION )) + { + goto end_fail; + } + + if ( !SetSecurityDescriptorDacl(pSD, TRUE, pDacl, FALSE ) ) + { + goto end_fail; + } + + // Set owner for the descriptor + // + if ( !SetSecurityDescriptorOwner( pSD, pSidOwner, FALSE) ) + { + goto end_fail; + } + + // Set group for the descriptor + // + if ( !SetSecurityDescriptorGroup( pSD, pSidGroup, FALSE) ) + { + goto end_fail; + } + + FreeSid(pObjSid); + return pSD; + + +end_fail: + { + DWORD dwRetCode = GetLastError(); + + if (pDacl) { LocalFree(pDacl); pDacl=0;} + + if (pObjSid) { FreeSid(pObjSid); pObjSid=0;} + + if (pSD) { LocalFree(pSD); pSD=0;} + + SetLastError(dwRetCode); + } + return NULL; +} + + +//**************************************************************************** +// Description: Frees a security descriptor previously allocated by +// AllocateSecurityDescriptor. +// +// History: +// 3/27/96 JosephJ Created +//****************************************************************************/ +void FreeSecurityDescriptor(PSECURITY_DESCRIPTOR pSD) +{ + PSID pObjSid = NULL; + PACL pDacl = NULL; + BOOL fGotAcl=FALSE, fByDefault=FALSE; + + + // Free Dacl, if user had allocated it. + if (GetSecurityDescriptorDacl(pSD, &fGotAcl, &pDacl, &fByDefault )) + { + if (fGotAcl && !fByDefault && pDacl) + { + LocalFree(pDacl); + } + } + else + { + ASSERT(FALSE); // We should not be calling this function with such + // an pSD. + } + + LocalFree(pSD); + +} diff --git a/private/unimodem/new/slot/sec.h b/private/unimodem/new/slot/sec.h new file mode 100644 index 000000000..9ec615f7e --- /dev/null +++ b/private/unimodem/new/slot/sec.h @@ -0,0 +1,24 @@ +//**************************************************************************** +// +// Module: UNIMDM +// File: SEC.H +// +// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved +// +// Revision History +// +// +// 3/27/96 JosephJ Created +// +// +// Description: Security-related helper functions +// +//**************************************************************************** +PSECURITY_DESCRIPTOR AllocateSecurityDescriptor ( + PSID_IDENTIFIER_AUTHORITY pSIA, + DWORD dwRID, + DWORD dwRights, + PSID pSidOwner, + PSID pSidGroup + ); +void FreeSecurityDescriptor(PSECURITY_DESCRIPTOR pSD); diff --git a/private/unimodem/new/slot/slot.c b/private/unimodem/new/slot/slot.c new file mode 100644 index 000000000..35236c439 --- /dev/null +++ b/private/unimodem/new/slot/slot.c @@ -0,0 +1,486 @@ +//**************************************************************************** +// +// Module: UNIMDM +// File: SLOT.C +// +// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved +// +// Revision History +// +// +// 3/25/96 JosephJ Created +// +// +// Description: Implements the unimodem TSP notification mechanism: +// The lower level (notifXXXX) APIs +// +//**************************************************************************** + +#define UNICODE +#include <windows.h> +#include <stdio.h> +#include "slot.h" +#include "sec.h" + +#define T(_str) TEXT(_str) + +#define ASSERT(_c) \ + ((_c) ? 0: DPRINTF2("Assertion failed in %s:%d\n", __FILE__, __LINE__)) +#define DPRINTF(_fmt) printf(_fmt) +#define DPRINTF1(_fmt,_arg) printf(_fmt,_arg) +#define DPRINTF2(_fmt,_arg,_arg2) printf(_fmt,_arg,_arg2) +#define DPRINTF3(_fmt,_arg,_arg2,_arg3) printf(_fmt,_arg,_arg2,_arg3) + +#define fNOTIF_STATE_DEINIT 0 +#define fNOTIF_STATE_INIT_SERVER 1 +#define fNOTIF_STATE_INIT_CLIENT 2 + +#define IS_SERVER(_pns) ((_pns)->dwState==fNOTIF_STATE_INIT_SERVER) +#define IS_CLIENT(_pns) ((_pns)->dwState==fNOTIF_STATE_INIT_CLIENT) + + +// The following help define the fully-qualified mailslot and semaphore names. +#define dwNOTIFSTATE_SIG (0x53CB31A0L) +#define FULLNAME_TEMPLATE T("--.-mailslot-%08lx-%s") + +// Keeps the state of a notification (either client or server). +// It is cast to a DWORD to form the handle returned by notifCreate() +typedef struct +{ + DWORD dwSig; // should be dwNOTIFSTATE_SIG when inited + HANDLE hSem; + HANDLE hSlot; + DWORD dwState; + DWORD dwcbMax; + +} NOTIFICATION_STATE, *PNOTIFICATION_STATE; + +DWORD inotif_server_create(PNOTIFICATION_STATE pns, LPTSTR lptsz, + DWORD dwMaxSize, + DWORD dwMaxPending); +DWORD inotif_client_open(PNOTIFICATION_STATE pns, LPTSTR lptsz); +PNOTIFICATION_STATE inotif_getstate(HNOTIFICATION hn); + + +//**************************************************************************** +// Function: Creates a notification object -- either as server or client. +// +// History: +// 3/25/96 JosephJ Created +//****************************************************************************/ +HNOTIFICATION notifCreate( + BOOL fServer, // TRUE ==> Server + LPCTSTR lptszName, // Name to associate with this object + DWORD dwMaxSize, // Max size of frames written/read + // (Ignored if (!fServer)) + DWORD dwMaxPending // Max number of notification frames allowed + // to be pending. (Ignored if (!fServer)) +) +{ + PNOTIFICATION_STATE pns=NULL; + HNOTIFICATION hn=0; + TCHAR rgtchTmp[MAX_NOTIFICATION_NAME_SIZE+23]; + UINT u = lstrlen(lptszName); + DWORD dwErr=0; + + // Format of semaphore name is --.-mailslot-sig-name + // Example: "--.-mailslot-8cb45651-unimodem" + // To create the equivalent mailslot, we run through and change + // all '-' to '\'s (if the name containts '-', they will get converted -- + // big deal.) + if ((u+23)>(sizeof(rgtchTmp)/sizeof(TCHAR))) // 13(prefix)+ 9(sig-) +1(null) + { + dwErr = ERROR_INVALID_PARAMETER; + goto end; + } + + pns=LocalAlloc(LPTR, sizeof(*pns)); + if (!pns) goto end; + + wsprintf(rgtchTmp,FULLNAME_TEMPLATE, + (unsigned long) dwNOTIFSTATE_SIG, + lptszName); + + DPRINTF1("Semaphore name = [%s]\n", rgtchTmp); + + if (fServer) dwErr = inotif_server_create(pns, rgtchTmp, + dwMaxSize, dwMaxPending); + else dwErr = inotif_client_open(pns, rgtchTmp); + + if (dwErr) goto end; + pns->dwSig=dwNOTIFSTATE_SIG; + hn = (HNOTIFICATION)pns; + +end: + if (!hn) + { + if (!dwErr) dwErr=GetLastError(); + if (pns) LocalFree(pns); + SetLastError(dwErr); + } + return hn; +} + +//**************************************************************************** +// Function: Free a notification object +// +// History: +// 3/25/96 JosephJ Created +//****************************************************************************/ +void notifFree(HNOTIFICATION hn) +{ + PNOTIFICATION_STATE pns = inotif_getstate(hn); + if (hn) + { + pns->dwSig=0; + CloseHandle(pns->hSem); pns->hSem=0; + CloseHandle(pns->hSlot); pns->hSlot=0; + LocalFree(pns); + } +} + +//**************************************************************************** +// Function: Retrieve the synchronization object handle accociated with +// the notiication object. NOTE: This handle is valid until +// the notification object is alive. It must NOT be deleted +// externally. Must be a server object. +// +// History: +// 3/25/96 JosephJ Created +//****************************************************************************/ +HANDLE notifGetObj(HNOTIFICATION hn) +{ + PNOTIFICATION_STATE pns = inotif_getstate(hn); + if (pns && IS_SERVER(pns)) + { + return pns->hSem; + } + else if (pns) + { + SetLastError(ERROR_NOT_SUPPORTED); + return NULL; + } + else + { + SetLastError(ERROR_INVALID_HANDLE); + return NULL; + } +} + +//**************************************************************************** +// Function: Retrieves the max allowable size of the frame (server only) +// +// History: +// 3/25/96 JosephJ Created +//****************************************************************************/ +DWORD notifGetMaxSize(HNOTIFICATION hn) +{ + PNOTIFICATION_STATE pns = inotif_getstate(hn); + if (pns && IS_SERVER(pns)) + { + return pns->dwcbMax; + } + else + { + if (pns) + { + SetLastError(ERROR_NOT_SUPPORTED); + } + else + { + SetLastError(ERROR_INVALID_HANDLE); + } + return 0; + } +} + + +//**************************************************************************** +// Function: (Server only) Reads a notification msg, if any. Does not block. +// A return value of FALSE and a GetLastError value of ERROR_NO_DATA +// indicates that no frame was available.. +// History: +// 3/25/96 JosephJ Created +//****************************************************************************/ +BOOL notifReadMsg(HNOTIFICATION hn, + LPBYTE lpb, + DWORD dwcbMax, + LPDWORD lpdwRead) +{ + PNOTIFICATION_STATE pns = inotif_getstate(hn); + BOOL fRet=FALSE; + *lpdwRead=0; + + if (pns) + { + DWORD dwRead=0; + + if(!IS_SERVER(pns)) + { + SetLastError(ERROR_NOT_SUPPORTED); + goto end; + } + + fRet = ReadFile(pns->hSlot, lpb, dwcbMax, lpdwRead, NULL); + + if (!fRet) + { + DPRINTF("ReadFile failed!\n"); + goto end; + } + + DPRINTF("Success!\n"); + fRet=TRUE; + } + else + { + SetLastError(ERROR_INVALID_HANDLE); + } + +end: + return fRet; +} + + +//**************************************************************************** +// Function: Returns the size of the next frame in the queue. Returns TRUE +// even if there is no data in the queue -- in this case, *lpdwcb +// is set to 0. Returns FALSE if there is some other error. +// +// History: +// 3/25/96 JosephJ Created +//****************************************************************************/ +BOOL notifGetNextMsgSize(HNOTIFICATION hn, LPDWORD lpdwcb) +{ + SetLastError(ERROR_NOT_SUPPORTED); + return FALSE; +} + + +//**************************************************************************** +// Function: (Client side). Write a notification msg. +// +// History: +// 3/25/96 JosephJ Created +//****************************************************************************/ +BOOL notifWriteMsg(HNOTIFICATION hn, LPBYTE lpb, DWORD dwcb) +{ + PNOTIFICATION_STATE pns = inotif_getstate(hn); + BOOL fRet=FALSE; + + if (pns) + { + DWORD dwWritten=0; + + if(!IS_CLIENT(pns)) + { + SetLastError(ERROR_NOT_SUPPORTED); + goto end; + } + + fRet = WriteFile(pns->hSlot, lpb, dwcb, &dwWritten, NULL); + if (fRet) + { + fRet=ReleaseSemaphore(pns->hSem,1,NULL); + if (!fRet) + { + DPRINTF("ReleaseSemaphore failed!\n"); + goto end; + } + } + if (!fRet || dwWritten!=dwcb) + { + DWORD dwErr = GetLastError(); + DPRINTF3("WriteFile failed. fRet=%lu; dwWritten=%lu; Err=%lu\n", + fRet, dwcb, dwErr); + SetLastError(dwErr); + goto end; + } + DPRINTF("notifWriteFrame: success!\n"); + fRet=TRUE; + } + else + { + SetLastError(ERROR_INVALID_HANDLE); + } + +end: + return fRet; +} + + +//**************************************************************************** +// Function: (internal) create the notif object -- server side. +// +// History: +// 3/25/96 JosephJ Created +//****************************************************************************/ +DWORD inotif_server_create(PNOTIFICATION_STATE pns, LPTSTR lptsz, DWORD dwMaxSize, + DWORD dwMaxPending) +{ + DWORD dwErr=ERROR_INVALID_PARAMETER; + TCHAR c, *pc = lptsz; + SID_IDENTIFIER_AUTHORITY siaWorld = SECURITY_WORLD_SID_AUTHORITY; + SECURITY_ATTRIBUTES sa, *psa=NULL; + + PSECURITY_DESCRIPTOR pSD = AllocateSecurityDescriptor ( + &siaWorld, + SECURITY_WORLD_RID, + STANDARD_RIGHTS_ALL | SPECIFIC_RIGHTS_ALL + | SEMAPHORE_ALL_ACCESS + | SEMAPHORE_MODIFY_STATE + | GENERIC_READ + | GENERIC_WRITE + , + NULL, + NULL + ); + + if (!pSD) + { + DPRINTF1("WARNING:AllocateSecurityDescriptor(-) returns error 0x%lx\n", + GetLastError()); + } + else + { + DPRINTF("AllocateSecurityDescriptor(-) returns SUCCESS\n"); + sa.nLength = sizeof(sa); + sa.bInheritHandle=FALSE; + sa.lpSecurityDescriptor = pSD; + psa = &sa; + + } + + + // Create mailslot name -- make sure there are no '\'s + while(c=*pc++) {if (c=='\\') pc[-1]='-';} + DPRINTF1("Semaphore name = [%s]\n", lptsz); + + // Create Semaphore + { + pns->hSem=CreateSemaphore(psa, 0, dwMaxPending, lptsz); + if (pns->hSem && (dwErr=(GetLastError()==ERROR_ALREADY_EXISTS))) + { + DPRINTF1("Semaphore %s already exists!\n", lptsz); + CloseHandle(pns->hSem); + pns->hSem=NULL; + } + if (!pns->hSem) goto end_fail; + } + + // Create mailslot name + pc = lptsz; + while(c=*pc++) {if (c=='-') pc[-1]='\\';} + + DPRINTF1("Mailslot name = [%s]\n", lptsz); + + // CreateMailSlot -- specify size, zero-delay + pns->hSlot=CreateMailslot(lptsz, dwMaxSize, 0, psa); + if (!pns->hSlot) + { + dwErr = GetLastError(); + CloseHandle(pns->hSem); pns->hSem=0; + goto end_fail; + } + + DPRINTF("Mailslot created!\n"); + + // set state and maxsize + pns->dwState=fNOTIF_STATE_INIT_SERVER; + pns->dwcbMax=dwMaxSize; + dwErr=0; + goto end; + +end_fail: + if (!dwErr) dwErr=GetLastError(); + if (!dwErr) dwErr=ERROR_INVALID_PARAMETER; + +end: + if (pSD) {FreeSecurityDescriptor(pSD);} + return dwErr; +} + + +//**************************************************************************** +// Function: (internal) create the notif object -- client side. +// The server must be already up and running, or we will +// fail. +// +// History: +// 3/25/96 JosephJ Created +//****************************************************************************/ +DWORD inotif_client_open(PNOTIFICATION_STATE pns, LPTSTR lptsz) +{ + DWORD dwErr=ERROR_INVALID_PARAMETER; + TCHAR c, *pc = lptsz; + + // Create mailslot name -- convert '-' to '\'; + while(c=*pc++) {if (c=='-') pc[-1]='\\';} + DPRINTF1("Mailslot name = [%s]\n", lptsz); + + // Open mailslot ... + pns->hSlot=CreateFile( + lptsz, + GENERIC_WRITE, + FILE_SHARE_READ|FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + FILE_ATTRIBUTE_NORMAL, + NULL + ); + + if (!pns->hSlot) + { + DPRINTF("Couldn't open mailslot for writing\n"); + goto end_fail; + } + + // Create Semaphore name -- convert '\' to '-'; + pc=lptsz; + while(c=*pc++) {if (c=='\\') pc[-1]='-';} + DPRINTF1("Sempahore name = [%s]\n", lptsz); + + pns->hSem=OpenSemaphore(SEMAPHORE_MODIFY_STATE, FALSE, lptsz); + //pns->hSem=OpenSemaphore(SEMAPHORE_ALL_ACCESS, FALSE, lptsz); + if (!pns->hSem) { + DPRINTF("Could not open semaphore\n"); + dwErr=GetLastError(); + CloseHandle(pns->hSlot); pns->hSlot=0; + goto end_fail; + } + + // set state and maxsize + pns->dwState=fNOTIF_STATE_INIT_CLIENT; + pns->dwcbMax=0; // Apparently you can't get the max size of the mailslot. + dwErr=0; + goto end; + +end_fail: + if (!dwErr) dwErr=GetLastError(); + if (!dwErr) dwErr=ERROR_INVALID_PARAMETER; + +end: + return dwErr; +} + +//**************************************************************************** +// Function: (internal) validates and converts a handle to a ptr to state. +// +// History: +// 3/25/96 JosephJ Created +//****************************************************************************/ +PNOTIFICATION_STATE inotif_getstate(HNOTIFICATION hn) +{ + if (hn) + { + PNOTIFICATION_STATE pns= (PNOTIFICATION_STATE) hn; + if (pns->dwSig!=dwNOTIFSTATE_SIG) + { + DPRINTF1("Bad hotification handle 0x%lu\n", hn); + ASSERT(FALSE); + return NULL; + } + return pns; + } + return NULL; +} diff --git a/private/unimodem/new/slot/slot.h b/private/unimodem/new/slot/slot.h new file mode 100644 index 000000000..a8ea4fbe9 --- /dev/null +++ b/private/unimodem/new/slot/slot.h @@ -0,0 +1,32 @@ +//**************************************************************************** +// +// Module: UNIMDM +// File: SLOT.H +// +// Copyright (c) 1992-1996, Microsoft Corporation, all rights reserved +// +// Revision History +// +// +// 3/25/96 JosephJ Created +// +// +// Description: Interface to the unimodem TSP notification mechanism: +// The lower level (notifXXXX) APIs +// +//**************************************************************************** + +#define MAX_NOTIFICATION_NAME_SIZE 256 + + +typedef DWORD HNOTIFICATION; + +HNOTIFICATION notifCreate(BOOL fServer, LPCTSTR lptszName, DWORD dwMaxSize, + DWORD dwMaxPending); +void notifFree(HNOTIFICATION hn); + +HANDLE notifGetObj(HNOTIFICATION hn); +DWORD notifGetMaxSize(HNOTIFICATION hn); +BOOL notifReadMsg(HNOTIFICATION hn, LPBYTE lpb, DWORD dwcb, LPDWORD lpdwRead); +BOOL notifGetNextMsgSize(HNOTIFICATION hn, LPDWORD lpdwcb); +BOOL notifWriteMsg(HNOTIFICATION hn, LPBYTE lpb, DWORD dwcb); diff --git a/private/unimodem/new/slot/sources b/private/unimodem/new/slot/sources new file mode 100644 index 000000000..fb7d59080 --- /dev/null +++ b/private/unimodem/new/slot/sources @@ -0,0 +1,27 @@ +MAJORCOMP=net +MINORCOMP=unimodem + +TARGETNAME=tslot +TARGETPATH=obj +TARGETTYPE=PROGRAM +TARGETLIBS=\ + $(BASEDIR)\public\sdk\lib\*\kernel32.lib \ + $(BASEDIR)\public\sdk\lib\*\user32.lib + + +INCLUDES=$(BASEDIR)\public\sdk\inc;. + +C_DEFINES=-DWINVER=0x0400 + +USE_CRTDLL=1 + +SOURCES=slot.c \ + client.c \ + sec.c \ + main.c + +UMTYPE=console + +!IFNDEF 386_WARNING_LEVEL +386_WARNING_LEVEL=/W3 +!ENDIF |