www.pudn.com > VoiceModem.zip > COMDIAL.C
//--------------------------------------------------------------------------- // // Module: comdial.c // // Purpose: // The sample application demonstrates communications // in Windows95. // // Description of functions: // Descriptions are contained in the function headers. // //--------------------------------------------------------------------------- // // Written by Charles Mirho. // Copyright (c) 1996 Charles Mirho. All Rights Reserved. // //--------------------------------------------------------------------------- #include "tty.h" #include "resource.h" #include "comdial.h" HINSTANCE ghInst; //global instance handle, for now. PTTYINFO pTTYInfo; extern MYTAPI mytapi; HWND hTTYWnd; #if !defined(_WIN32) #include#endif // Windows NT defines APIENTRY, but 3.x doesn't #if !defined (APIENTRY) #define APIENTRY far pascal #endif // Windows 3.x uses a FARPROC for dialogs #if !defined(_WIN32) #define DLGPROC FARPROC #endif // // FUNCTION: WinMain(HINSTANCE, HINSTANCE, LPSTR, int) // // PURPOSE: calls initialization function, processes message loop // int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { MSG msg; BOOL bOldState = FALSE; LONG lrc; // Other instances of app running? if (!hPrevInstance) { // Initialize shared things if (!InitApplication(hInstance)) { return (FALSE); // Exits if unable to initialize } } if (NULL == (hTTYWnd = InitInstance( hInstance, nCmdShow ))) return ( FALSE ) ; ghInst = hInstance; lrc = telephonyInitialize(hTTYWnd, ghInst); if (lrc) return FALSE; while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator (msg.hwnd, ghAccel, &msg)) { TranslateMessage(&msg);// Translates virtual key codes DispatchMessage(&msg); // Dispatches message to window } } /* end while (not a quit message) */ telephonyShutdown(); // Returns the value from PostQuitMessage return (msg.wParam); // This will prevent 'unused formal parameter' warnings lpCmdLine; } //--------------------------------------------------------------------------- // BOOL NEAR InitApplication( HANDLE hInstance ) // // Description: // First time initialization stuff. This registers information // such as window classes. // // Parameters: // HANDLE hInstance // Handle to this instance of the application. // //--------------------------------------------------------------------------- BOOL NEAR InitApplication( HANDLE hInstance ) { WNDCLASS wndclass ; // register tty window class wndclass.style = 0 ; wndclass.lpfnWndProc = TTYWndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = sizeof( DWORD ) ; wndclass.hInstance = hInstance ; wndclass.hIcon = NULL; wndclass.hCursor = LoadCursor( NULL, IDC_ARROW ) ; wndclass.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1) ; wndclass.lpszMenuName = MAKEINTRESOURCE( IDR_MENU1) ; wndclass.lpszClassName = gszTTYClass ; return( RegisterClass( &wndclass ) ) ; } // end of InitApplication() //--------------------------------------------------------------------------- // HWND NEAR InitInstance( HANDLE hInstance, int nCmdShow ) // // Description: // Initializes instance specific information. // // Parameters: // HANDLE hInstance // Handle to instance // // int nCmdShow // How do we show the window? // //--------------------------------------------------------------------------- HWND NEAR InitInstance( HANDLE hInstance, int nCmdShow ) { HWND hTTYWnd ; // create the TTY window hTTYWnd = CreateWindow( gszTTYClass, gszAppName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ) ; if (NULL == hTTYWnd) return ( NULL ) ; ShowWindow( hTTYWnd, nCmdShow ) ; UpdateWindow( hTTYWnd ) ; return ( hTTYWnd ) ; } // end of InitInstance() //--------------------------------------------------------------------------- // LRESULT FAR PASCAL TTYWndProc( HWND hWnd, UINT uMsg, // WPARAM wParam, LPARAM lParam ) // // Description: // This is the TTY Window Proc. This handles ALL messages // to the tty window. // // Parameters: // As documented for Window procedures. // //--------------------------------------------------------------------------- LRESULT FAR PASCAL TTYWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { LONG lrc; char name[50]; switch (uMsg) { case MM_WOM_DONE: /* Unprepare the header */ waveOutUnprepareHeader((HWAVEOUT)wParam,(LPWAVEHDR)lParam, sizeof(WAVEHDR)); waveOutClose((HWAVEOUT)wParam); /* close wave device */ free (((LPWAVEHDR)lParam)->lpData); /* free the wave data */ free ((LPWAVEHDR)lParam); /* free the header */ if (mytapi.iPlayState == PLAYSTATE_PLAYBACK) { if (mytapi.nPlayCnt < mytapi.nMsgCnt) { mytapi.nPlayCnt++; wsprintf (name, "msg-%d.wav", mytapi.nPlayCnt); mytapi.h_waveout=playSound (mytapi.dwWaveOutID, name, hTTYWnd); } else { mytapi.iPlayState = PLAYSTATE_IDLE; mytapi.iPlaySubState = PLAYSUBSTATE_PASSWORD0; mytapi.nPlayCnt = 0; } } break; case MM_WIM_DATA: waveInUnprepareHeader (mytapi.h_wavein, (LPWAVEHDR)lParam, sizeof(WAVEHDR)); waveInClose (mytapi.h_wavein); /* close wave device */ /* drop the call */ if (mytapi.hCall) { if ((lrc = lineDrop (mytapi.hCall, NULL, 0)) < 0) { ProcessTAPIError (lrc); MessageBox (hTTYWnd, "Error dropping call", "", MB_OK); } } mytapi.nMsgCnt++; wsprintf (name, "msg-%d.wav", mytapi.nMsgCnt); saveMessage (name, (LPWAVEHDR)lParam); /* save the message */ GlobalFree ((HANDLE)((LPWAVEHDR)lParam)->dwUser); /* free 60s message buffer */ mytapi.iPlayState = PLAYSTATE_IDLE; mytapi.iPlaySubState = PLAYSUBSTATE_PASSWORD0; // set ring count for the message-waiting situation lineSetNumRings (mytapi.hLine, 0, max(0,RINGCNT-2)); lineGetNumRings(mytapi.hLine, 0, &mytapi.nRingCnt); break; case WM_CREATE: mytapi.bInitialized = FALSE; break; case WM_COMMAND: { switch ((DWORD) wParam) { case IDM_AUTOANSWER: if (!mytapi.bLineopen) { if (telephonyOpen(hWnd, ghInst)) { MessageBox(hWnd, "Error", "Error opening line", MB_OK); break; } } mytapi.bWaitForCall = TRUE; mytapi.dwWaveInID = mylineGetWaveID(LINECALLSELECT_LINE, "wave/in"); recordMessage (mytapi.dwWaveInID); break; case IDM_EXIT: PostMessage( hWnd, WM_CLOSE, 0, 0L ) ; break ; } } break ; case WM_PAINT: { PaintTTY( hWnd ) ; break ; } case WM_SIZE: SizeTTY( hWnd, HIWORD( lParam ), LOWORD( lParam ) ) ; break ; case WM_DESTROY: PostQuitMessage( 0 ) ; break ; default: return( DefWindowProc( hWnd, uMsg, wParam, lParam ) ) ; } return 0L ; } // end of TTYWndProc() //--------------------------------------------------------------------------- // BOOL NEAR PaintTTY( HWND hWnd ) // // Description: // Paints the rectangle determined by the paint struct of // the DC. // // Parameters: // HWND hWnd // handle to TTY window (as always) // //--------------------------------------------------------------------------- BOOL NEAR PaintTTY( HWND hWnd ) { return ( TRUE ) ; } // end of PaintTTY() //--------------------------------------------------------------------------- // BOOL NEAR SizeTTY( HWND hWnd, WORD wVertSize, WORD wHorzSize ) // // Description: // Sizes TTY and sets up scrolling regions. // // Parameters: // HWND hWnd // handle to TTY window // // WORD wVertSize // new vertical size // // WORD wHorzSize // new horizontal size // //--------------------------------------------------------------------------- BOOL NEAR SizeTTY( HWND hWnd, WORD wVertSize, WORD wHorzSize ) { return ( TRUE ) ; } // end of SizeTTY() //--------------------------------------------------------------------------- // End of File: comdial.c //---------------------------------------------------------------------------