/* * testapp.c -- * Xiao Ying Ding * 1/20/96 */ #include #include #include #include #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 ) { }