mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
365 lines
7.3 KiB
365 lines
7.3 KiB
|
|
/*
|
|
* testapp.c --
|
|
* Xiao Ying Ding
|
|
* 1/20/96
|
|
*/
|
|
|
|
#include <windows.h>
|
|
#include <commdlg.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include "tapi.h"
|
|
#include "testapp.h"
|
|
|
|
#define LOW_VERSION 0X10003
|
|
#define HIGH_VERSION 0X20000
|
|
|
|
LONG APIENTRY MainWndProc(HWND, UINT, UINT, LONG);
|
|
int APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
|
|
|
|
BOOL APIENTRY MainWndMenuProc(HWND, UINT, UINT, LONG);
|
|
void TAPPSendMessage(void);
|
|
VOID TappConverRetVal(LONG, char *);
|
|
BOOL DoLineInit(void);
|
|
BOOL DoLineNegotiateAPIVersion(void);
|
|
BOOL DoLineOpen(void);
|
|
BOOL DoLineClose(void);
|
|
BOOL DoLineShutdown(void);
|
|
VOID WINAPI TapiCallback(DWORD, DWORD, DWORD, DWORD, DWORD, DWORD);
|
|
|
|
|
|
char *szMainWnd = "Tapi App";
|
|
char *szTAPPAppClass = "TAPPAppsClass";
|
|
char *szTappMenu = "TappMenu";
|
|
|
|
HINSTANCE hInst;
|
|
HWND hwndMain, hwndEdit;
|
|
HMENU hmenu;
|
|
|
|
LONG lRet = 0L;
|
|
char szDebugString[128];
|
|
char szRetBuf[128];
|
|
|
|
LPHLINEAPP lphLineApp;
|
|
HLINEAPP hLineApp;
|
|
HINSTANCE hInstance;
|
|
LINECALLBACK lpfnCallBack;
|
|
LPSTR szAppName;
|
|
LPTSTR lpszAppName;
|
|
DWORD dwNumDevs;
|
|
LPDWORD lpdwNumDevs;
|
|
DWORD dwDeviceID;
|
|
DWORD dwAPILowVersion;
|
|
DWORD dwAPIHighVersion;
|
|
LPDWORD lpdwAPIVersion;
|
|
DWORD dwAPIVersion;
|
|
LPLINEEXTENSIONID lpExtensionID;
|
|
LINEEXTENSIONID ExtensionID;
|
|
LPHLINE lphLine;
|
|
HLINE hLine;
|
|
DWORD dwExtVersion;
|
|
DWORD dwCallbackInstance;
|
|
DWORD dwPriviledge;
|
|
DWORD dwMediaModes;
|
|
LPLINECALLPARAMS lpCallParams;
|
|
|
|
|
|
|
|
int APIENTRY // ret errorlevel 0 if successful, else 1
|
|
WinMain( // Windows entry point
|
|
HINSTANCE hInstance, // instance handle
|
|
HINSTANCE hPrevInstance, // previous instance if any
|
|
LPSTR lpszCmdLine, // pointer to command line string
|
|
int cmdShow) // ShowWindow parameter
|
|
{
|
|
MSG msg;
|
|
WNDCLASS wc;
|
|
RECT rect;
|
|
|
|
if (!hPrevInstance)
|
|
{
|
|
wc.style = CS_VREDRAW | CS_HREDRAW ;
|
|
wc.lpfnWndProc = (WNDPROC)MainWndProc;
|
|
wc.cbClsExtra = 0;
|
|
wc.cbWndExtra = 0;
|
|
wc.hInstance = hInstance ;
|
|
wc.hIcon = LoadIcon((HANDLE)hInstance, NULL);
|
|
wc.hCursor = LoadCursor((HANDLE)NULL, IDC_ARROW);
|
|
wc.hbrBackground = GetStockObject(WHITE_BRUSH);
|
|
wc.lpszMenuName = (LPSTR)szTappMenu;
|
|
wc.lpszClassName = (LPSTR)szTAPPAppClass ;
|
|
|
|
if(!RegisterClass(&wc))
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
hInst = hInstance;
|
|
|
|
hwndMain = CreateWindow(
|
|
(LPCTSTR)szTAPPAppClass,
|
|
(LPCTSTR)szMainWnd,
|
|
WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW,
|
|
// CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
|
100, 100, 200, 120,
|
|
(HWND)HWND_DESKTOP,
|
|
(HMENU)NULL,
|
|
(HANDLE)hInstance,
|
|
(LPVOID)NULL);
|
|
|
|
if(!hwndMain)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
GetClientRect(hwndMain, &rect);
|
|
|
|
hwndEdit = CreateWindow(
|
|
"edit",
|
|
"",
|
|
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_READONLY,
|
|
rect.left+10, rect.top+10, rect.right-20, rect.bottom-20,
|
|
(HWND)hwndMain,
|
|
(HMENU)NULL,
|
|
(HANDLE)hInstance,
|
|
(LPVOID)NULL);
|
|
|
|
if(!hwndEdit)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
ShowWindow(hwndMain, cmdShow);
|
|
UpdateWindow(hwndMain);
|
|
|
|
wsprintf((LPTSTR)szDebugString, "Tapi App Start.");
|
|
// SendMessage(hwndEdit, EM_SETSEL, (WPARAM)0, (LPARAM)-1);
|
|
// SendMessage(hwndEdit, EM_REPLACESEL, 0, (LPARAM) (LPCSTR)szDebugString);
|
|
SendMessage(hwndEdit, WM_SETTEXT, 0, (LPARAM) (LPCSTR)szDebugString);
|
|
DoLineInit();
|
|
DoLineNegotiateAPIVersion();
|
|
DoLineOpen();
|
|
|
|
while (GetMessage((LPMSG)&msg, (HWND)NULL, 0, 0) )
|
|
{
|
|
TranslateMessage((LPMSG)&msg);
|
|
DispatchMessage((LPMSG)&msg);
|
|
}
|
|
|
|
return msg.wParam;
|
|
}
|
|
|
|
|
|
|
|
LONG APIENTRY MainWndProc(
|
|
HWND hwnd, /* Window handle */
|
|
UINT message, /* Message */
|
|
UINT wParam, /* Varies */
|
|
LONG lParam) /* Varies */
|
|
{
|
|
lRet = 0L;
|
|
|
|
switch (message)
|
|
{
|
|
|
|
case WM_CREATE:
|
|
wsprintf((LPTSTR)szDebugString, "&Tapi App start. \r\n");
|
|
TAPPSendMessage();
|
|
// DoLineInit();
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
wsprintf((LPTSTR)szDebugString, "# Tapi App start. \r\n");
|
|
TAPPSendMessage();
|
|
|
|
// DoLineInit();
|
|
MainWndMenuProc(hwnd, message, wParam, lParam);
|
|
break;
|
|
|
|
case WM_SIZE:
|
|
{
|
|
int x, y, dx, dy;
|
|
|
|
x = XEditWnd(0);
|
|
y = YEditWnd(0);
|
|
dx = DxEditWnd(LOWORD(lParam));
|
|
dy = DyEditWnd(HIWORD(lParam));
|
|
MoveWindow(hwndEdit, x, y, dx, dy, TRUE);
|
|
break;
|
|
}
|
|
|
|
case WM_KEYDOWN:
|
|
SendMessage(hwnd, WM_DESTROY, 0, 0);
|
|
break;
|
|
|
|
case WM_DESTROY:
|
|
DoLineClose();
|
|
DoLineShutdown();
|
|
PostQuitMessage(0);
|
|
return 0;
|
|
|
|
default:
|
|
lRet = DefWindowProc(hwnd, message, wParam, lParam);
|
|
break;
|
|
}
|
|
|
|
return lRet;
|
|
}
|
|
|
|
BOOL APIENTRY CALLBACK MainWndMenuProc(HWND hwnd, UINT message, UINT wParam, LONG lParam)
|
|
{
|
|
|
|
wsprintf((LPTSTR)szDebugString, "Tapi App start. \r\n");
|
|
TAPPSendMessage();
|
|
|
|
hmenu = GetMenu(hwndMain);
|
|
|
|
switch(wParam)
|
|
{
|
|
case TAPP_Init:
|
|
// DoLineInit();
|
|
break;
|
|
|
|
case TAPP_Exit:
|
|
DoLineClose();
|
|
DoLineShutdown();
|
|
DestroyWindow(hwndMain);
|
|
break;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
BOOL DoLineInit(void)
|
|
{
|
|
|
|
lphLineApp = &hLineApp;
|
|
// hInstance = (HINSTANCE) NULL;
|
|
lpfnCallBack = (LINECALLBACK)TapiCallback;
|
|
szAppName = "tapi app";
|
|
lpdwNumDevs = &dwNumDevs;
|
|
lpszAppName = &szAppName[0];
|
|
|
|
hInstance = (HINSTANCE) GetModuleHandle("testapp.exe");
|
|
|
|
lRet = lineInitialize(lphLineApp, hInstance, lpfnCallBack, (LPCSTR)szAppName, lpdwNumDevs);
|
|
|
|
TappConverRetVal(lRet, szRetBuf);
|
|
|
|
wsprintf((LPTSTR)szDebugString, "lineItialize: lRet = %lx\r\n", lRet);
|
|
TAPPSendMessage();
|
|
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL DoLineNegotiateAPIVersion(void)
|
|
{
|
|
dwDeviceID = 0;
|
|
dwAPILowVersion = LOW_VERSION;
|
|
dwAPIHighVersion = HIGH_VERSION;
|
|
lpdwAPIVersion = &dwAPIVersion;
|
|
lpExtensionID = &ExtensionID;
|
|
|
|
lRet = lineNegotiateAPIVersion( hLineApp,
|
|
dwDeviceID,
|
|
dwAPILowVersion,
|
|
dwAPIHighVersion,
|
|
lpdwAPIVersion,
|
|
lpExtensionID
|
|
);
|
|
wsprintf((LPTSTR)szDebugString, "lineNegotiateAPIVersion: lRet = %lx\r\n", lRet);
|
|
TAPPSendMessage();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL DoLineOpen(void)
|
|
{
|
|
lphLine = &hLine;
|
|
dwCallbackInstance = 0;
|
|
dwPriviledge = LINECALLPRIVILEGE_OWNER;
|
|
dwMediaModes = LINEMEDIAMODE_DATAMODEM;
|
|
lpCallParams = (LPLINECALLPARAMS) NULL;
|
|
|
|
lRet = lineOpen(hLineApp,
|
|
dwDeviceID,
|
|
lphLine,
|
|
dwAPIVersion,
|
|
dwExtVersion,
|
|
dwCallbackInstance,
|
|
dwPriviledge,
|
|
dwMediaModes,
|
|
lpCallParams
|
|
);
|
|
|
|
wsprintf((LPTSTR)szDebugString, "lineOpen: lRet = %lx\r\n", lRet);
|
|
TAPPSendMessage();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
BOOL DoLineClose(void)
|
|
{
|
|
lRet = lineClose(*lphLine);
|
|
|
|
wsprintf((LPTSTR)szDebugString, "lineClose: lRet = %lx\r\n", lRet);
|
|
TAPPSendMessage();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL DoLineShutdown(void)
|
|
{
|
|
lRet = lineShutdown(*lphLineApp);
|
|
|
|
wsprintf((LPTSTR)szDebugString, "lineShutdown: lRet = %lx\r\n", lRet);
|
|
TAPPSendMessage();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
void TAPPSendMessage(void)
|
|
{
|
|
// SendMessage(hwndEdit, EM_SETSEL, (WPARAM)-1, (LPARAM)0);
|
|
//SendMessage(hwndEdit, EM_REPLACESEL, 0, (LPARAM) (LPCTSTR) szDebugString);
|
|
|
|
SendMessage(hwndEdit, WM_SETTEXT, 0, (LPARAM) (LPCSTR)szDebugString);
|
|
}
|
|
|
|
|
|
VOID TappConverRetVal(LONG lret, char *szRetBuf)
|
|
{
|
|
|
|
switch(lret)
|
|
{
|
|
case LINEERR_INVALAPPNAME:
|
|
strcpy((LPTSTR)szRetBuf, "LINEERR_INVALAPPNAME");
|
|
break;
|
|
|
|
case LINEERR_INIFILECORRUPT:
|
|
strcpy((LPTSTR)szRetBuf, "LINEERR_INIFILECORRUPT");
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
VOID
|
|
WINAPI
|
|
TapiCallback(
|
|
DWORD hDevice,
|
|
DWORD dwMsg,
|
|
DWORD dwCallbackInstance,
|
|
DWORD dwParam1,
|
|
DWORD dwParam2,
|
|
DWORD dwParam3
|
|
)
|
|
{
|
|
}
|