home *** CD-ROM | disk | FTP | other *** search
/ Stars of Shareware: Programmierung / SOURCE.mdf / programm / windows / c / xlisp21w / sources / xsdemo.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-02-28  |  3.7 KB  |  172 lines

  1. #include    <windows.h>
  2. #include    "xserver.h"
  3. #include    "xsdemo.h"
  4.  
  5. long FAR PASCAL WndProc( HWND , WORD , WORD , LONG );
  6.  
  7. char    string[4096];
  8. char    command[81];
  9. HWND    MainWindow;
  10. HANDLE    hInst;
  11.  
  12. int PASCAL WinMain( HANDLE hInstance , HANDLE hPrevInstance ,
  13.             LPSTR lpCmdLine , int nCmdShow )
  14. {
  15.   MSG        msg;
  16.   WNDCLASS    WndClass;
  17.   static char    szAppName[] = "XLisp Client";
  18.   static char    szAppCapt[] = "XLisp Client";
  19.  
  20.   hInst = hInstance;
  21.   strcpy( string , "Request" );
  22.   if( !hPrevInstance )
  23.   {
  24.     WndClass.style = CS_HREDRAW | CS_VREDRAW;
  25.     WndClass.lpfnWndProc = WndProc;
  26.     WndClass.cbClsExtra = 0;
  27.     WndClass.cbWndExtra = 0;
  28.     WndClass.hInstance = hInstance;
  29.     WndClass.hIcon = LoadIcon( NULL,IDI_APPLICATION );
  30.     WndClass.hCursor = LoadCursor( NULL, IDC_ARROW );
  31.     WndClass.hbrBackground = COLOR_WINDOW+1;
  32.     WndClass.lpszMenuName = "XC";
  33.     WndClass.lpszClassName = szAppName;
  34.     RegisterClass( &WndClass );
  35.   }
  36.  
  37.   MainWindow = CreateWindow( szAppName ,
  38.                szAppCapt ,
  39.                WS_OVERLAPPEDWINDOW ,
  40.                CW_USEDEFAULT ,
  41.                CW_USEDEFAULT ,
  42.                CW_USEDEFAULT ,
  43.                CW_USEDEFAULT ,
  44.                NULL ,
  45.                NULL ,
  46.                hInstance ,
  47.                NULL );
  48.   ShowWindow( MainWindow , nCmdShow );
  49.   UpdateWindow( MainWindow );
  50.  
  51.   if( XDStartServer( MainWindow ) )
  52.   {
  53.     MessageBox( MainWindow , "Could not start server" , "Demo" ,
  54.         MB_OK );
  55.     return 1;
  56.   }
  57.  
  58.   while( GetMessage(
  59.         &msg ,
  60.         NULL ,
  61.         NULL ,
  62.         NULL ))
  63.   {
  64.     TranslateMessage( &msg );
  65.     DispatchMessage( &msg );
  66.   };
  67.   XDTerminateServer();
  68.   return( msg.wParam );
  69. }
  70.  
  71. /* Command dialog procedure */
  72. BOOL FAR PASCAL CmdDlgProc( HWND hDlg , WORD message ,
  73.                  WORD wParam , LONG lParam )
  74. {
  75.   char    cLastChar;
  76.   short    nEditLen;
  77.  
  78.   switch( message )
  79.   {
  80.     case WM_INITDIALOG:
  81.     SendDlgItemMessage( hDlg,IDD_FNAME,EM_LIMITTEXT,80,0L );
  82.     return TRUE;
  83.  
  84.     case WM_COMMAND:
  85.     switch( wParam )
  86.     {
  87.       case IDD_FNAME:
  88.         if( HIWORD(lParam) == EN_CHANGE )
  89.             EnableWindow( GetDlgItem( hDlg,IDOK ),
  90.             (BOOL)SendMessage(LOWORD(lParam),
  91.             WM_GETTEXTLENGTH,0,0L) );
  92.         return TRUE;
  93.  
  94.       case IDOK:
  95.         GetDlgItemText( hDlg,IDD_FNAME,command,80 );
  96.         EndDialog( hDlg,TRUE );
  97.         return TRUE;
  98.  
  99.       case IDCANCEL:
  100.         EndDialog( hDlg,FALSE );
  101.         return TRUE;
  102.  
  103.     }    /* switch( wParam ) */
  104.   }        /* switch( message ) */
  105.   return FALSE;
  106. }
  107.  
  108. /* Executes a command dialog */
  109. int DoCmdDialog()
  110. {
  111.   FARPROC       lpfnDlgProc;
  112.   int         ErrorCode;
  113.  
  114.   lpfnDlgProc = MakeProcInstance( CmdDlgProc,hInst );
  115.   ErrorCode = DialogBox( hInst,"Command",MainWindow,lpfnDlgProc );
  116.   FreeProcInstance( lpfnDlgProc );
  117.   return ErrorCode;
  118. }
  119.  
  120. long FAR PASCAL WndProc( HWND hWnd , WORD message , WORD wParam ,
  121.              LONG lParam )
  122. {
  123.   HDC        hdc;
  124.   PAINTSTRUCT    ps;
  125.   RECT        rect;
  126.   LPSTR        p;
  127.  
  128.   switch( message )
  129.   {
  130.     case WM_PAINT:
  131.     hdc = BeginPaint( hWnd , &ps );
  132.     GetClientRect( hWnd , &rect );
  133.     DrawText( hdc , string , -1 , &rect ,
  134.           DT_SINGLELINE | DT_CENTER | DT_VCENTER );
  135.     EndPaint( hWnd  , &ps );
  136.     return 0;
  137.  
  138.     case XL_REQ:
  139.     p = XDGetReply( MainWindow );
  140.     xstrncpy( (LPSTR)string , p , 4095 );
  141.     XDDeleteReply( MainWindow );
  142.   /* Eliminate CR-LF */
  143.     string[ strlen( string )-2 ] = 0;
  144.     InvalidateRect( MainWindow , NULL , 1 );
  145.     return 0;
  146.  
  147.     case XL_TRIG:
  148.     return 0;
  149.  
  150.     case WM_DESTROY:
  151.     PostQuitMessage( 0 );
  152.     return 0;
  153. /* Menu command messages */
  154.     case WM_COMMAND:
  155.     switch( wParam )
  156.     {
  157.       case IDM_COMMAND:
  158.         if( DoCmdDialog() )
  159.         {
  160.           strcat( command , "\n" );
  161.           XDSendRequest( MainWindow , (LPSTR)command );
  162.         }
  163.         return 0;
  164.  
  165.       case IDM_EXIT:
  166.         SendMessage( hWnd , WM_CLOSE , 0 , 0L );
  167.         return 0;
  168.     }
  169.   }
  170.   return DefWindowProc( hWnd , message , wParam , lParam );
  171. }
  172.