home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Windows Shareware GOLD
/
NuclearComputingVol3No1.cdr
/
other
/
f1490
/
testapp.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-12-29
|
6KB
|
271 lines
/*****************************************************************************
testapp.c
Main Program file.
This file contains an example test application for WINPIPE.DLL and
stdio.exe.
This program's operation is described in winpipe.wri.
*****************************************************************************/
#include <windows.h>
#include "winpipe.h"
#include "testapp.h"
#define PIPE_IN 10
#define toupper(a) ( ( (a >= 'a') && (a <= 'z') ) ? (a - ('a'-'A')) : a)
PIPE Pipe;
HANDLE hThisInstance;
HANDLE hThisWnd;
char szAppName[]="Entry";
#define DEBUG_STRLEN 120
char szDebug[DEBUG_STRLEN]; /* Place for debug commands */
static int iDebug=0;
/* Quick'n easy dialog routine */
BOOL PopupDLG( hParentWnd, lpszTemplate, lpfnDlgProc )
HWND hParentWnd;
LPSTR lpszTemplate;
FARPROC lpfnDlgProc;
{
BOOL bResult;
FARPROC lpProc;
lpProc = MakeProcInstance( lpfnDlgProc, INSTANCE(hParentWnd) );
bResult = DialogBox( INSTANCE(hParentWnd), lpszTemplate, hParentWnd, lpProc );
FreeProcInstance( lpProc );
return( bResult );
}
/* Aboutbox proc */
BOOL FAR PASCAL About(hDlg, message, wParam, lParam)
HWND hDlg;
unsigned message;
WORD wParam;
LONG lParam;
{
switch (message) {
case WM_INITDIALOG:
return (TRUE);
case WM_COMMAND:
switch(wParam){
case IDOK:
EndDialog(hDlg, TRUE);
break;
case IDCANCEL:
EndDialog(hDlg, TRUE);
break;
default:
break;
}
}
return (FALSE);
}
/* See if szString matches szTemplate */
match(char *szString, char *szTemplate)
{
while(*szTemplate){
if(toupper(*szString) != *szTemplate)
return(0);
szString++;
szTemplate++;
}
return(1);
}
/* Parse debugging dialog */
Parse(char *szString)
{
char buffer[120];
if(match(szString, "WHO:"))
Wputs("Testapp.exe\n");
if(match(szString, "WHAT:"))
Wputs("Test of Winpipes and Stdio\n");
if(match(szString, "STAT:")){
wsprintf((LPSTR)buffer, (LPSTR) "status:\niDebug=%d\nPipe=%d\nStdin=%d\n", iDebug, Pipe, Stdin);
Wputs((LPSTR)buffer);
}
}
/* interact with debugging dialog from stdio */
Debugger() /* called on a WM_USER, wNotify */
{
int c;
while((c=Wgetc()) >= 0){ /* non-error */
Wputc((char) c); /* echo to terminal */
szDebug[iDebug] = (char)c; /* save strlen */
switch(c){
case 13: /* enter */
case 10: /* line feed */
szDebug[iDebug] = 0; /* Null terminate */
Parse(szDebug);
iDebug=0; /* Reset next */
break;
case 8: /* Backspace */
iDebug--;
iDebug = (iDebug <= 0) ? 0 : iDebug;
break;
default: /* every other character */
iDebug++;
iDebug = (iDebug >= DEBUG_STRLEN) ? (DEBUG_STRLEN - 1): iDebug;
break;
}
}
}
/* Winproc for testapp */
long FAR PASCAL WndProc(hWnd, message, wParam, lParam)
HWND hWnd;
unsigned message;
WORD wParam;
LONG lParam;
{
switch (message) {
case WM_COMMAND:
switch(wParam){
case IDM_ABOUT:
Wputs("About Box Call\n");
PopupDLG(hWnd, "AboutBox", About);
break;
default:
Wputs("Unused WM_COMMAND\n");
return (DefWindowProc(hWnd, message, wParam, lParam));
}
break;
case WM_DESTROY:
ReleasePipe(Stdin);
Wputs("WM_DESTROY\n");
PostQuitMessage(0);
break;
case WM_USER:
if(wParam == PIPE_IN)
Debugger();
break;
case WM_CHAR:
if(wParam == 13)
Wputc(10);
else
Wputc(wParam);
break;
case WM_CREATE:
if(OpenPipe(hWnd, "Stdin", PIPE_READ, PIPE_IN)<0)
Wputs("Can't open pipe\n");
Wputs("WM_CREATE\n");
return (DefWindowProc(hWnd, message, wParam, lParam));
break;
case WM_PAINT:
Wputs("Paint Message\n");
default:
return (DefWindowProc(hWnd, message, wParam, lParam));
}
return (NULL);
}
/* Winmain for testapp */
int PASCAL WinMain(hInst, hPrevInstance, lpszCmdLine, nCmdShow)
HANDLE hInst;
HANDLE hPrevInstance;
LPSTR lpszCmdLine;
int nCmdShow;
{
MSG msg;
BOOL bStat;
hThisInstance = hInst;
if(!hPrevInstance){
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;
wc.hIcon = LoadIcon(hInst,"testIcon");
wc.hCursor = LoadCursor (NULL, IDC_ARROW);
wc.hbrBackground = GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = "Testio";
wc.lpszClassName = "stdio_test";
if(!RegisterClass(&wc))
return(FALSE);
}
hThisWnd = CreateWindow ("stdio_test", "Testapp", WS_OVERLAPPEDWINDOW, 25, 25, 300, 200, NULL, NULL, hInst, NULL);
ShowWindow(hThisWnd, nCmdShow);
UpdateWindow(hThisWnd);
while(GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return(msg.wParam);
}