winemine: Reorder some functions to avoid forward declarations.

Francois Gouget fgouget at free.fr
Tue Dec 30 17:59:51 CST 2008


---

As far as I can see, this patch is independent from the other winemine 
patch. The next step is to make a bunch of these functions static...

 programs/winemine/main.c |  808 +++++++++++++++++++++++-----------------------
 programs/winemine/main.h |   50 ---
 2 files changed, 405 insertions(+), 453 deletions(-)

diff --git a/programs/winemine/main.c b/programs/winemine/main.c
index a8ea08e..3d0998f 100644
--- a/programs/winemine/main.c
+++ b/programs/winemine/main.c
@@ -36,240 +36,25 @@ static const DWORD wnd_style = WS_OVERLAPPEDWINDOW & ~WS_THICKFRAME & ~WS_MAXIMI
 static const char* registry_key = "Software\\Microsoft\\WinMine";
 
 
-int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdline, int cmdshow )
-{
-    MSG msg;
-    WNDCLASS wc;
-    HWND hWnd;
-    HACCEL haccel;
-    char appname[20];
-
-    LoadString( hInst, IDS_APPNAME, appname, sizeof(appname));
-
-    wc.style = 0;
-    wc.lpfnWndProc = MainProc;
-    wc.cbClsExtra = 0;
-    wc.cbWndExtra = 0;
-    wc.hInstance = hInst;
-    wc.hIcon = LoadIcon( hInst, "WINEMINE" );
-    wc.hCursor = LoadCursor( 0, IDI_APPLICATION );
-    wc.hbrBackground = (HBRUSH) GetStockObject( BLACK_BRUSH );
-    wc.lpszMenuName = "MENU_WINEMINE";
-    wc.lpszClassName = appname;
-
-    if (!RegisterClass(&wc)) ExitProcess(1);
-    hWnd = CreateWindow( appname, appname,
-	wnd_style,
-        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
-        0, 0, hInst, NULL );
-
-    if (!hWnd) ExitProcess(1);
-
-    ShowWindow( hWnd, cmdshow );
-    UpdateWindow( hWnd );
-
-    haccel = LoadAccelerators( hInst, MAKEINTRESOURCE(IDA_WINEMINE) );
-    SetTimer( hWnd, ID_TIMER, 1000, NULL );
-
-    while( GetMessage(&msg, 0, 0, 0) ) {
-        if (!TranslateAccelerator( hWnd, haccel, &msg ))
-            TranslateMessage( &msg );
-
-        DispatchMessage( &msg );
-    }
-    return msg.wParam;
-}
-
-LRESULT WINAPI MainProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
+void CheckLevel( BOARD *p_board )
 {
-    HDC hdc;
-    PAINTSTRUCT ps;
-    HMENU hMenu;
-    static BOARD board;
-
-    switch( msg ) {
-    case WM_CREATE:
-        board.hInst = ((LPCREATESTRUCT) lParam)->hInstance;
-        board.hWnd = hWnd;
-        InitBoard( &board );
-        CreateBoard( &board );
-        return 0;
-
-    case WM_PAINT:
-      {
-        HDC hMemDC;
-
-        WINE_TRACE("WM_PAINT\n");
-        hdc = BeginPaint( hWnd, &ps );
-        hMemDC = CreateCompatibleDC( hdc );
-
-        DrawBoard( hdc, hMemDC, &ps, &board );
-
-        DeleteDC( hMemDC );
-        EndPaint( hWnd, &ps );
-
-        return 0;
-      }
-
-    case WM_MOVE:
-        WINE_TRACE("WM_MOVE\n");
-        board.pos.x = (short)LOWORD(lParam);
-        board.pos.y = (short)HIWORD(lParam);
-        return 0;
-
-    case WM_DESTROY:
-        SaveBoard( &board );
-        DestroyBoard( &board );
-        PostQuitMessage( 0 );
-        return 0;
-
-    case WM_TIMER:
-        if( board.status == PLAYING ) {
-            board.time++;
-	    RedrawWindow( hWnd, &board.timer_rect, 0,
-			  RDW_INVALIDATE | RDW_UPDATENOW );
-        }
-        return 0;
-
-    case WM_LBUTTONDOWN:
-        WINE_TRACE("WM_LBUTTONDOWN\n");
-        if( wParam & MK_RBUTTON )
-            msg = WM_MBUTTONDOWN;
-        TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
-        SetCapture( hWnd );
-        return 0;
-
-    case WM_LBUTTONUP:
-        WINE_TRACE("WM_LBUTTONUP\n");
-        if( wParam & MK_RBUTTON )
-            msg = WM_MBUTTONUP;
-        TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
-        ReleaseCapture();
-        return 0;
-
-    case WM_RBUTTONDOWN:
-        WINE_TRACE("WM_RBUTTONDOWN\n");
-        if( wParam & MK_LBUTTON ) {
-            board.press.x = 0;
-            board.press.y = 0;
-            msg = WM_MBUTTONDOWN;
-        }
-        TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
-        return 0;
-
-    case WM_RBUTTONUP:
-        WINE_TRACE("WM_RBUTTONUP\n");
-        if( wParam & MK_LBUTTON )
-            msg = WM_MBUTTONUP;
-        TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
-        return 0;
-
-    case WM_MBUTTONDOWN:
-        WINE_TRACE("WM_MBUTTONDOWN\n");
-        TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
-        return 0;
-
-    case WM_MBUTTONUP:
-        WINE_TRACE("WM_MBUTTONUP\n");
-        TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
-        return 0;
-
-    case WM_MOUSEMOVE:
-    {
-        if( wParam & MK_MBUTTON ) {
-            msg = WM_MBUTTONDOWN;
-        }
-        else if( wParam & MK_LBUTTON ) {
-            msg = WM_LBUTTONDOWN;
-        }
-        else {
-            return 0;
-        }
-
-        TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam),  msg );
-
-        return 0;
-    }
-
-    case WM_COMMAND:
-        switch(LOWORD(wParam)) {
-        case IDM_NEW:
-            CreateBoard( &board );
-            return 0;
-
-        case IDM_MARKQ:
-            hMenu = GetMenu( hWnd );
-            board.IsMarkQ = !board.IsMarkQ;
-            if( board.IsMarkQ )
-                CheckMenuItem( hMenu, IDM_MARKQ, MF_CHECKED );
-            else
-                CheckMenuItem( hMenu, IDM_MARKQ, MF_UNCHECKED );
-            return 0;
-
-        case IDM_BEGINNER:
-            SetDifficulty( &board, BEGINNER );
-            CreateBoard( &board );
-            return 0;
-
-        case IDM_ADVANCED:
-            SetDifficulty( &board, ADVANCED );
-            CreateBoard( &board );
-            return 0;
-
-        case IDM_EXPERT:
-            SetDifficulty( &board, EXPERT );
-            CreateBoard( &board );
-            return 0;
-
-        case IDM_CUSTOM:
-            SetDifficulty( &board, CUSTOM );
-            CreateBoard( &board );
-            return 0;
-
-        case IDM_EXIT:
-            SendMessage( hWnd, WM_CLOSE, 0, 0);
-            return 0;
-
-        case IDM_TIMES:
-            DialogBoxParam( board.hInst, "DLG_TIMES", hWnd,
-                    TimesDlgProc, (LPARAM) &board);
-            return 0;
+    if( p_board->rows < BEGINNER_ROWS )
+        p_board->rows = BEGINNER_ROWS;
 
-        case IDM_ABOUT:
-        {
-            WCHAR appname[256], other[256];
-            LoadStringW( board.hInst, IDS_APPNAME, appname, sizeof(appname)/sizeof(WCHAR) );
-            LoadStringW( board.hInst, IDS_ABOUT, other, sizeof(other)/sizeof(WCHAR) );
-            ShellAboutW( hWnd, appname, other,
-                         LoadImageA( board.hInst, "WINEMINE", IMAGE_ICON, 48, 48, LR_SHARED ));
-            return 0;
-        }
-        default:
-            WINE_TRACE("Unknown WM_COMMAND command message received\n");
-            break;
-        }
-    }
-    return( DefWindowProc( hWnd, msg, wParam, lParam ));
-}
+    if( p_board->rows > MAX_ROWS )
+        p_board->rows = MAX_ROWS;
 
-void InitBoard( BOARD *p_board )
-{
-    HMENU hMenu;
+    if( p_board->cols < BEGINNER_COLS )
+        p_board->cols = BEGINNER_COLS;
 
-    p_board->hMinesBMP = LoadBitmap( p_board->hInst, "mines");
-    p_board->hFacesBMP = LoadBitmap( p_board->hInst, "faces");
-    p_board->hLedsBMP = LoadBitmap( p_board->hInst, "leds");
+    if( p_board->cols > MAX_COLS )
+        p_board->cols = MAX_COLS;
 
-    LoadBoard( p_board );
+    if( p_board->mines < BEGINNER_MINES )
+        p_board->mines = BEGINNER_MINES;
 
-    hMenu = GetMenu( p_board->hWnd );
-    CheckMenuItem( hMenu, IDM_BEGINNER + (unsigned) p_board->difficulty,
-            MF_CHECKED );
-    if( p_board->IsMarkQ )
-        CheckMenuItem( hMenu, IDM_MARKQ, MF_CHECKED );
-    else
-        CheckMenuItem( hMenu, IDM_MARKQ, MF_UNCHECKED );
-    CheckLevel( p_board );
+    if( p_board->mines > p_board->cols * p_board->rows - 2 )
+        p_board->mines = p_board->cols * p_board->rows - 2;
 }
 
 void LoadBoard( BOARD *p_board )
@@ -341,6 +126,26 @@ void LoadBoard( BOARD *p_board )
     RegCloseKey( hkey );
 }
 
+void InitBoard( BOARD *p_board )
+{
+    HMENU hMenu;
+
+    p_board->hMinesBMP = LoadBitmap( p_board->hInst, "mines");
+    p_board->hFacesBMP = LoadBitmap( p_board->hInst, "faces");
+    p_board->hLedsBMP = LoadBitmap( p_board->hInst, "leds");
+
+    LoadBoard( p_board );
+
+    hMenu = GetMenu( p_board->hWnd );
+    CheckMenuItem( hMenu, IDM_BEGINNER + (unsigned) p_board->difficulty,
+            MF_CHECKED );
+    if( p_board->IsMarkQ )
+        CheckMenuItem( hMenu, IDM_MARKQ, MF_CHECKED );
+    else
+        CheckMenuItem( hMenu, IDM_MARKQ, MF_UNCHECKED );
+    CheckLevel( p_board );
+}
+
 void SaveBoard( BOARD *p_board )
 {
     HKEY hkey;
@@ -525,27 +330,6 @@ void CreateBoard( BOARD *p_board )
 }
 
 
-void CheckLevel( BOARD *p_board )
-{
-    if( p_board->rows < BEGINNER_ROWS )
-        p_board->rows = BEGINNER_ROWS;
-
-    if( p_board->rows > MAX_ROWS )
-        p_board->rows = MAX_ROWS;
-
-    if( p_board->cols < BEGINNER_COLS )
-        p_board->cols = BEGINNER_COLS;
-
-    if( p_board->cols > MAX_COLS )
-        p_board->cols = MAX_COLS;
-
-    if( p_board->mines < BEGINNER_MINES )
-        p_board->mines = BEGINNER_MINES;
-
-    if( p_board->mines > p_board->cols * p_board->rows - 2 )
-        p_board->mines = p_board->cols * p_board->rows - 2;
-}
-
 /* Randomly places mines everywhere except the selected box. */
 void PlaceMines ( BOARD *p_board, int selected_col, int selected_row )
 {
@@ -588,20 +372,6 @@ void PlaceMines ( BOARD *p_board, int selected_col, int selected_row )
     }
 }
 
-void DrawMines ( HDC hdc, HDC hMemDC, BOARD *p_board )
-{
-    HGDIOBJ hOldObj;
-    unsigned col, row;
-    hOldObj = SelectObject (hMemDC, p_board->hMinesBMP);
-
-    for( row = 1; row <= p_board->rows; row++ ) {
-      for( col = 1; col <= p_board->cols; col++ ) {
-        DrawMine( hdc, hMemDC, p_board, col, row, FALSE );
-      }
-    }
-    SelectObject( hMemDC, hOldObj );
-}
-
 void DrawMine( HDC hdc, HDC hMemDC, BOARD *p_board, unsigned col, unsigned row, BOOL IsPressed )
 {
     MINEBMP_OFFSET offset = BOX_BMP;
@@ -679,6 +449,20 @@ void DrawMine( HDC hdc, HDC hMemDC, BOARD *p_board, unsigned col, unsigned row,
             hMemDC, 0, offset * MINE_HEIGHT, SRCCOPY );
 }
 
+void DrawMines ( HDC hdc, HDC hMemDC, BOARD *p_board )
+{
+    HGDIOBJ hOldObj;
+    unsigned col, row;
+    hOldObj = SelectObject (hMemDC, p_board->hMinesBMP);
+
+    for( row = 1; row <= p_board->rows; row++ ) {
+      for( col = 1; col <= p_board->cols; col++ ) {
+        DrawMine( hdc, hMemDC, p_board, col, row, FALSE );
+      }
+    }
+    SelectObject( hMemDC, hOldObj );
+}
+
 void DrawLeds( HDC hdc, HDC hMemDC, BOARD *p_board, int number, int x, int y )
 {
     HGDIOBJ hOldObj;
@@ -761,56 +545,154 @@ void DrawBoard( HDC hdc, HDC hMemDC, PAINTSTRUCT *ps, BOARD *p_board )
 }
 
 
-void TestBoard( HWND hWnd, BOARD *p_board, int x, int y, int msg )
+void AddFlag( BOARD *p_board, unsigned col, unsigned row )
 {
-    POINT pt;
-    unsigned col,row;
+    if( p_board->box[col][row].FlagType != COMPLETE ) {
+        switch( p_board->box[col][row].FlagType ) {
+        case FLAG:
+            if( p_board->IsMarkQ )
+                p_board->box[col][row].FlagType = QUESTION;
+            else
+                p_board->box[col][row].FlagType = NORMAL;
+            p_board->num_flags--;
+            break;
 
-    pt.x = x;
-    pt.y = y;
+        case QUESTION:
+            p_board->box[col][row].FlagType = NORMAL;
+            break;
 
-    if( PtInRect( &p_board->mines_rect, pt ) && p_board->status != GAMEOVER
-    && p_board->status != WON )
-        TestMines( p_board, pt, msg );
-    else {
-        UnpressBoxes( p_board,
-            p_board->press.x,
-            p_board->press.y );
-        p_board->press.x = 0;
-        p_board->press.y = 0;
+        default:
+            p_board->box[col][row].FlagType = FLAG;
+            p_board->num_flags++;
+        }
     }
+}
 
-    if( p_board->boxes_left == 0 ) {
-        p_board->status = WON;
 
-        if (p_board->num_flags < p_board->mines) {
-            for( row = 1; row <= p_board->rows; row++ ) {
-                for( col = 1; col <= p_board->cols; col++ ) {
-                    if (p_board->box[col][row].IsMine && p_board->box[col][row].FlagType != FLAG)
-                        p_board->box[col][row].FlagType = FLAG;
-                }
-            }
+void UnpressBox( BOARD *p_board, unsigned col, unsigned row )
+{
+    HDC hdc;
+    HGDIOBJ hOldObj;
+    HDC hMemDC;
 
-            p_board->num_flags = p_board->mines;
+    hdc = GetDC( p_board->hWnd );
+    hMemDC = CreateCompatibleDC( hdc );
+    hOldObj = SelectObject( hMemDC, p_board->hMinesBMP );
 
-            RedrawWindow( p_board->hWnd, NULL, 0,
-                RDW_INVALIDATE | RDW_UPDATENOW );
+    DrawMine( hdc, hMemDC, p_board, col, row, FALSE );
+
+    SelectObject( hMemDC, hOldObj );
+    DeleteDC( hMemDC );
+    ReleaseDC( p_board->hWnd, hdc );
+}
+
+
+void UnpressBoxes( BOARD *p_board, unsigned col, unsigned row )
+{
+    int i, j;
+
+    for( i = -1; i <= 1; i++ )
+      for( j = -1; j <= 1; j++ ) {
+        UnpressBox( p_board, col + i, row + j );
+      }
+}
+
+
+void PressBox( BOARD *p_board, unsigned col, unsigned row )
+{
+    HDC hdc;
+    HGDIOBJ hOldObj;
+    HDC hMemDC;
+
+    hdc = GetDC( p_board->hWnd );
+    hMemDC = CreateCompatibleDC( hdc );
+    hOldObj = SelectObject (hMemDC, p_board->hMinesBMP);
+
+    DrawMine( hdc, hMemDC, p_board, col, row, TRUE );
+
+    SelectObject( hMemDC, hOldObj );
+    DeleteDC( hMemDC );
+    ReleaseDC( p_board->hWnd, hdc );
+}
+
+
+void PressBoxes( BOARD *p_board, unsigned col, unsigned row )
+{
+    int i, j;
+
+    for( i = -1; i <= 1; i++ )
+      for( j = -1; j <= 1; j++ ) {
+        p_board->box[col + i][row + j].IsPressed = TRUE;
+        PressBox( p_board, col + i, row + j );
+    }
+
+    for( i = -1; i <= 1; i++ )
+      for( j = -1; j <= 1; j++ ) {
+        if( !p_board->box[p_board->press.x + i][p_board->press.y + j].IsPressed )
+            UnpressBox( p_board, p_board->press.x + i, p_board->press.y + j );
+    }
+
+    for( i = -1; i <= 1; i++ )
+      for( j = -1; j <= 1; j++ ) {
+        p_board->box[col + i][row + j].IsPressed = FALSE;
+        PressBox( p_board, col + i, row + j );
+    }
+
+    p_board->press.x = col;
+    p_board->press.y = row;
+}
+
+
+void CompleteBox( BOARD *p_board, unsigned col, unsigned row )
+{
+    int i, j;
+
+    if( p_board->box[col][row].FlagType != COMPLETE &&
+            p_board->box[col][row].FlagType != FLAG &&
+            col > 0 && col < p_board->cols + 1 &&
+            row > 0 && row < p_board->rows + 1 ) {
+        p_board->box[col][row].FlagType = COMPLETE;
+
+        if( p_board->box[col][row].IsMine ) {
+            p_board->face_bmp = DEAD_BMP;
+            p_board->status = GAMEOVER;
         }
+        else if( p_board->status != GAMEOVER )
+            p_board->boxes_left--;
 
-        if( p_board->difficulty != CUSTOM &&
-                    p_board->time < p_board->best_time[p_board->difficulty] ) {
-            p_board->best_time[p_board->difficulty] = p_board->time;
+        if( p_board->box[col][row].NumMines == 0 )
+        {
+            for( i = -1; i <= 1; i++ )
+            for( j = -1; j <= 1; j++ )
+                CompleteBox( p_board, col + i, row + j  );
+        }
+    }
+}
 
-            DialogBoxParam( p_board->hInst, "DLG_CONGRATS", hWnd,
-                    CongratsDlgProc, (LPARAM) p_board);
 
-            DialogBoxParam( p_board->hInst, "DLG_TIMES", hWnd,
-                    TimesDlgProc, (LPARAM) p_board);
+void CompleteBoxes( BOARD *p_board, unsigned col, unsigned row )
+{
+    unsigned numFlags = 0;
+    int i, j;
+
+    if( p_board->box[col][row].FlagType == COMPLETE ) {
+        for( i = -1; i <= 1; i++ )
+          for( j = -1; j <= 1; j++ ) {
+            if( p_board->box[col+i][row+j].FlagType == FLAG )
+                numFlags++;
+          }
+
+        if( numFlags == p_board->box[col][row].NumMines ) {
+            for( i = -1; i <= 1; i++ )
+              for( j = -1; j <= 1; j++ ) {
+                if( p_board->box[col+i][row+j].FlagType != FLAG )
+                    CompleteBox( p_board, col+i, row+j );
+              }
         }
     }
-    TestFace( p_board, pt, msg );
 }
 
+
 void TestMines( BOARD *p_board, POINT pt, int msg )
 {
     BOOL draw = TRUE;
@@ -901,149 +783,269 @@ void TestFace( BOARD *p_board, POINT pt, int msg )
 }
 
 
-void CompleteBox( BOARD *p_board, unsigned col, unsigned row )
+void TestBoard( HWND hWnd, BOARD *p_board, int x, int y, int msg )
 {
-    int i, j;
+    POINT pt;
+    unsigned col,row;
 
-    if( p_board->box[col][row].FlagType != COMPLETE &&
-            p_board->box[col][row].FlagType != FLAG &&
-            col > 0 && col < p_board->cols + 1 &&
-            row > 0 && row < p_board->rows + 1 ) {
-        p_board->box[col][row].FlagType = COMPLETE;
+    pt.x = x;
+    pt.y = y;
 
-        if( p_board->box[col][row].IsMine ) {
-            p_board->face_bmp = DEAD_BMP;
-            p_board->status = GAMEOVER;
+    if( PtInRect( &p_board->mines_rect, pt ) && p_board->status != GAMEOVER
+    && p_board->status != WON )
+        TestMines( p_board, pt, msg );
+    else {
+        UnpressBoxes( p_board,
+            p_board->press.x,
+            p_board->press.y );
+        p_board->press.x = 0;
+        p_board->press.y = 0;
+    }
+
+    if( p_board->boxes_left == 0 ) {
+        p_board->status = WON;
+
+        if (p_board->num_flags < p_board->mines) {
+            for( row = 1; row <= p_board->rows; row++ ) {
+                for( col = 1; col <= p_board->cols; col++ ) {
+                    if (p_board->box[col][row].IsMine && p_board->box[col][row].FlagType != FLAG)
+                        p_board->box[col][row].FlagType = FLAG;
+                }
+            }
+
+            p_board->num_flags = p_board->mines;
+
+            RedrawWindow( p_board->hWnd, NULL, 0,
+                RDW_INVALIDATE | RDW_UPDATENOW );
         }
-        else if( p_board->status != GAMEOVER )
-            p_board->boxes_left--;
 
-        if( p_board->box[col][row].NumMines == 0 )
-        {
-            for( i = -1; i <= 1; i++ )
-            for( j = -1; j <= 1; j++ )
-                CompleteBox( p_board, col + i, row + j  );
+        if( p_board->difficulty != CUSTOM &&
+                    p_board->time < p_board->best_time[p_board->difficulty] ) {
+            p_board->best_time[p_board->difficulty] = p_board->time;
+
+            DialogBoxParam( p_board->hInst, "DLG_CONGRATS", hWnd,
+                    CongratsDlgProc, (LPARAM) p_board);
+
+            DialogBoxParam( p_board->hInst, "DLG_TIMES", hWnd,
+                    TimesDlgProc, (LPARAM) p_board);
         }
     }
+    TestFace( p_board, pt, msg );
 }
 
 
-void CompleteBoxes( BOARD *p_board, unsigned col, unsigned row )
+LRESULT WINAPI MainProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
-    unsigned numFlags = 0;
-    int i, j;
+    HDC hdc;
+    PAINTSTRUCT ps;
+    HMENU hMenu;
+    static BOARD board;
 
-    if( p_board->box[col][row].FlagType == COMPLETE ) {
-        for( i = -1; i <= 1; i++ )
-          for( j = -1; j <= 1; j++ ) {
-            if( p_board->box[col+i][row+j].FlagType == FLAG )
-                numFlags++;
-          }
+    switch( msg ) {
+    case WM_CREATE:
+        board.hInst = ((LPCREATESTRUCT) lParam)->hInstance;
+        board.hWnd = hWnd;
+        InitBoard( &board );
+        CreateBoard( &board );
+        return 0;
 
-        if( numFlags == p_board->box[col][row].NumMines ) {
-            for( i = -1; i <= 1; i++ )
-              for( j = -1; j <= 1; j++ ) {
-                if( p_board->box[col+i][row+j].FlagType != FLAG )
-                    CompleteBox( p_board, col+i, row+j );
-              }
-        }
-    }
-}
+    case WM_PAINT:
+      {
+        HDC hMemDC;
 
+        WINE_TRACE("WM_PAINT\n");
+        hdc = BeginPaint( hWnd, &ps );
+        hMemDC = CreateCompatibleDC( hdc );
 
-void AddFlag( BOARD *p_board, unsigned col, unsigned row )
-{
-    if( p_board->box[col][row].FlagType != COMPLETE ) {
-        switch( p_board->box[col][row].FlagType ) {
-        case FLAG:
-            if( p_board->IsMarkQ )
-                p_board->box[col][row].FlagType = QUESTION;
-            else
-                p_board->box[col][row].FlagType = NORMAL;
-            p_board->num_flags--;
-            break;
+        DrawBoard( hdc, hMemDC, &ps, &board );
 
-        case QUESTION:
-            p_board->box[col][row].FlagType = NORMAL;
-            break;
+        DeleteDC( hMemDC );
+        EndPaint( hWnd, &ps );
 
-        default:
-            p_board->box[col][row].FlagType = FLAG;
-            p_board->num_flags++;
+        return 0;
+      }
+
+    case WM_MOVE:
+        WINE_TRACE("WM_MOVE\n");
+        board.pos.x = (short)LOWORD(lParam);
+        board.pos.y = (short)HIWORD(lParam);
+        return 0;
+
+    case WM_DESTROY:
+        SaveBoard( &board );
+        DestroyBoard( &board );
+        PostQuitMessage( 0 );
+        return 0;
+
+    case WM_TIMER:
+        if( board.status == PLAYING ) {
+            board.time++;
+	    RedrawWindow( hWnd, &board.timer_rect, 0,
+			  RDW_INVALIDATE | RDW_UPDATENOW );
         }
-    }
-}
+        return 0;
 
+    case WM_LBUTTONDOWN:
+        WINE_TRACE("WM_LBUTTONDOWN\n");
+        if( wParam & MK_RBUTTON )
+            msg = WM_MBUTTONDOWN;
+        TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
+        SetCapture( hWnd );
+        return 0;
 
-void PressBox( BOARD *p_board, unsigned col, unsigned row )
-{
-    HDC hdc;
-    HGDIOBJ hOldObj;
-    HDC hMemDC;
+    case WM_LBUTTONUP:
+        WINE_TRACE("WM_LBUTTONUP\n");
+        if( wParam & MK_RBUTTON )
+            msg = WM_MBUTTONUP;
+        TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
+        ReleaseCapture();
+        return 0;
 
-    hdc = GetDC( p_board->hWnd );
-    hMemDC = CreateCompatibleDC( hdc );
-    hOldObj = SelectObject (hMemDC, p_board->hMinesBMP);
+    case WM_RBUTTONDOWN:
+        WINE_TRACE("WM_RBUTTONDOWN\n");
+        if( wParam & MK_LBUTTON ) {
+            board.press.x = 0;
+            board.press.y = 0;
+            msg = WM_MBUTTONDOWN;
+        }
+        TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
+        return 0;
 
-    DrawMine( hdc, hMemDC, p_board, col, row, TRUE );
+    case WM_RBUTTONUP:
+        WINE_TRACE("WM_RBUTTONUP\n");
+        if( wParam & MK_LBUTTON )
+            msg = WM_MBUTTONUP;
+        TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
+        return 0;
 
-    SelectObject( hMemDC, hOldObj );
-    DeleteDC( hMemDC );
-    ReleaseDC( p_board->hWnd, hdc );
-}
+    case WM_MBUTTONDOWN:
+        WINE_TRACE("WM_MBUTTONDOWN\n");
+        TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
+        return 0;
 
+    case WM_MBUTTONUP:
+        WINE_TRACE("WM_MBUTTONUP\n");
+        TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
+        return 0;
 
-void PressBoxes( BOARD *p_board, unsigned col, unsigned row )
-{
-    int i, j;
+    case WM_MOUSEMOVE:
+    {
+        if( wParam & MK_MBUTTON ) {
+            msg = WM_MBUTTONDOWN;
+        }
+        else if( wParam & MK_LBUTTON ) {
+            msg = WM_LBUTTONDOWN;
+        }
+        else {
+            return 0;
+        }
 
-    for( i = -1; i <= 1; i++ )
-      for( j = -1; j <= 1; j++ ) {
-        p_board->box[col + i][row + j].IsPressed = TRUE;
-        PressBox( p_board, col + i, row + j );
-    }
+        TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam),  msg );
 
-    for( i = -1; i <= 1; i++ )
-      for( j = -1; j <= 1; j++ ) {
-        if( !p_board->box[p_board->press.x + i][p_board->press.y + j].IsPressed )
-            UnpressBox( p_board, p_board->press.x + i, p_board->press.y + j );
+        return 0;
     }
 
-    for( i = -1; i <= 1; i++ )
-      for( j = -1; j <= 1; j++ ) {
-        p_board->box[col + i][row + j].IsPressed = FALSE;
-        PressBox( p_board, col + i, row + j );
-    }
+    case WM_COMMAND:
+        switch(LOWORD(wParam)) {
+        case IDM_NEW:
+            CreateBoard( &board );
+            return 0;
 
-    p_board->press.x = col;
-    p_board->press.y = row;
-}
+        case IDM_MARKQ:
+            hMenu = GetMenu( hWnd );
+            board.IsMarkQ = !board.IsMarkQ;
+            if( board.IsMarkQ )
+                CheckMenuItem( hMenu, IDM_MARKQ, MF_CHECKED );
+            else
+                CheckMenuItem( hMenu, IDM_MARKQ, MF_UNCHECKED );
+            return 0;
 
+        case IDM_BEGINNER:
+            SetDifficulty( &board, BEGINNER );
+            CreateBoard( &board );
+            return 0;
 
-void UnpressBox( BOARD *p_board, unsigned col, unsigned row )
-{
-    HDC hdc;
-    HGDIOBJ hOldObj;
-    HDC hMemDC;
+        case IDM_ADVANCED:
+            SetDifficulty( &board, ADVANCED );
+            CreateBoard( &board );
+            return 0;
 
-    hdc = GetDC( p_board->hWnd );
-    hMemDC = CreateCompatibleDC( hdc );
-    hOldObj = SelectObject( hMemDC, p_board->hMinesBMP );
+        case IDM_EXPERT:
+            SetDifficulty( &board, EXPERT );
+            CreateBoard( &board );
+            return 0;
 
-    DrawMine( hdc, hMemDC, p_board, col, row, FALSE );
+        case IDM_CUSTOM:
+            SetDifficulty( &board, CUSTOM );
+            CreateBoard( &board );
+            return 0;
 
-    SelectObject( hMemDC, hOldObj );
-    DeleteDC( hMemDC );
-    ReleaseDC( p_board->hWnd, hdc );
-}
+        case IDM_EXIT:
+            SendMessage( hWnd, WM_CLOSE, 0, 0);
+            return 0;
 
+        case IDM_TIMES:
+            DialogBoxParam( board.hInst, "DLG_TIMES", hWnd,
+                    TimesDlgProc, (LPARAM) &board);
+            return 0;
 
-void UnpressBoxes( BOARD *p_board, unsigned col, unsigned row )
+        case IDM_ABOUT:
+        {
+            WCHAR appname[256], other[256];
+            LoadStringW( board.hInst, IDS_APPNAME, appname, sizeof(appname)/sizeof(WCHAR) );
+            LoadStringW( board.hInst, IDS_ABOUT, other, sizeof(other)/sizeof(WCHAR) );
+            ShellAboutW( hWnd, appname, other,
+                         LoadImageA( board.hInst, "WINEMINE", IMAGE_ICON, 48, 48, LR_SHARED ));
+            return 0;
+        }
+        default:
+            WINE_TRACE("Unknown WM_COMMAND command message received\n");
+            break;
+        }
+    }
+    return( DefWindowProc( hWnd, msg, wParam, lParam ));
+}
+
+int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdline, int cmdshow )
 {
-    int i, j;
+    MSG msg;
+    WNDCLASS wc;
+    HWND hWnd;
+    HACCEL haccel;
+    char appname[20];
 
-    for( i = -1; i <= 1; i++ )
-      for( j = -1; j <= 1; j++ ) {
-        UnpressBox( p_board, col + i, row + j );
-      }
+    LoadString( hInst, IDS_APPNAME, appname, sizeof(appname));
+
+    wc.style = 0;
+    wc.lpfnWndProc = MainProc;
+    wc.cbClsExtra = 0;
+    wc.cbWndExtra = 0;
+    wc.hInstance = hInst;
+    wc.hIcon = LoadIcon( hInst, "WINEMINE" );
+    wc.hCursor = LoadCursor( 0, IDI_APPLICATION );
+    wc.hbrBackground = (HBRUSH) GetStockObject( BLACK_BRUSH );
+    wc.lpszMenuName = "MENU_WINEMINE";
+    wc.lpszClassName = appname;
+
+    if (!RegisterClass(&wc)) ExitProcess(1);
+    hWnd = CreateWindow( appname, appname,
+	wnd_style,
+        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
+        0, 0, hInst, NULL );
+
+    if (!hWnd) ExitProcess(1);
+
+    ShowWindow( hWnd, cmdshow );
+    UpdateWindow( hWnd );
+
+    haccel = LoadAccelerators( hInst, MAKEINTRESOURCE(IDA_WINEMINE) );
+    SetTimer( hWnd, ID_TIMER, 1000, NULL );
+
+    while( GetMessage(&msg, 0, 0, 0) ) {
+        if (!TranslateAccelerator( hWnd, haccel, &msg ))
+            TranslateMessage( &msg );
+
+        DispatchMessage( &msg );
+    }
+    return msg.wParam;
 }
diff --git a/programs/winemine/main.h b/programs/winemine/main.h
index e9febfc..396f19e 100644
--- a/programs/winemine/main.h
+++ b/programs/winemine/main.h
@@ -120,58 +120,8 @@ typedef struct tagBOARD
 
 } BOARD;
 
-void ExitApp( int error );
-
-void InitBoard( BOARD *p_board );
-
-void LoadBoard( BOARD *p_board );
-
-void SaveBoard( BOARD *p_board );
-
-void DestroyBoard( BOARD *p_board );
-
-void SetDifficulty( BOARD *p_board, DIFFICULTY difficulty );
-
 void CheckLevel( BOARD *p_board );
 
-void CreateBoard( BOARD *p_board );
-
-void PlaceMines ( BOARD *p_board, int selected_col, int selected_row );
-
-void TestBoard( HWND hWnd, BOARD *p_board, int x, int y, int msg );
-
-void TestMines( BOARD *p_board, POINT pt, int msg );
-
-void TestFace( BOARD *p_board, POINT pt, int msg );
-
-void DrawBoard( HDC hdc, HDC hMemDC, PAINTSTRUCT *ps, BOARD *p_board );
-
-void DrawMines( HDC hdc, HDC hMemDC, BOARD *p_board );
-
-void DrawMine( HDC hdc, HDC hMemDC, BOARD *p_board, unsigned col, unsigned row, BOOL IsPressed );
-
-void AddFlag( BOARD *p_board, unsigned col, unsigned row );
-
-void CompleteBox( BOARD *p_board, unsigned col, unsigned row );
-
-void CompleteBoxes( BOARD *p_board, unsigned col, unsigned row );
-
-void PressBox( BOARD *p_board, unsigned col, unsigned row );
-
-void PressBoxes( BOARD *p_board, unsigned col, unsigned row );
-
-void UnpressBox( BOARD *p_board, unsigned col, unsigned row );
-
-void UnpressBoxes( BOARD *p_board, unsigned col, unsigned row );
-
-void UpdateTimer( BOARD *p_board );
-
-void DrawLeds( HDC hdc, HDC hMemDC, BOARD *p_board, int number, int x, int y);
-
-void DrawFace( HDC hdc, HDC hMemDC, BOARD *p_board );
-
-LRESULT WINAPI MainProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
-
 INT_PTR CALLBACK CustomDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
 
 INT_PTR CALLBACK CongratsDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
-- 
1.5.6.5



More information about the wine-patches mailing list