Public Sub GE_Flush(Extent_flag As Integer)
'************************************************************************************

'This procedure minimizes or closes the GE interface

'The input parameters are:

'       Extent_flag = flag to indicate if minimization or closure is to be performed

'Notes on this procedure:

'       None

'************************************************************************************
    
    'Disable GE_interrogate timer
    GE_interrogate.Enabled = False
    
    'Set up WINDOWPLACEMENT data type
    Dim wp As WINDOWPLACEMENT
    wp.Length = Len(wp)
    
    'If GE not temporarily minimized...
    If Not GE_status_temp_minimize Then
    
        'Get window characteristics from GE
        rc& = GetWindowPlacement(GE_main_window_handle, wp)
            
        'If non-zero result then...
        If rc& <> 0 Then
            
            'Extract them
            GE_savewindow_flags = wp.flags
            GE_savewindow_showCmd = wp.showCmd
            GE_savewindow_ptMinPositionX = wp.ptMinPosition.X
            GE_savewindow_ptMinPositionY = wp.ptMinPosition.Y
            GE_savewindow_ptMaxPositionX = wp.ptMaxPosition.X
            GE_savewindow_ptMaxPositionY = wp.ptMaxPosition.Y
            GE_savewindow_rcNormalPosition_Left = wp.rcNormalPosition.Left
            GE_savewindow_rcNormalPosition_Top = wp.rcNormalPosition.Top
            GE_savewindow_rcNormalPosition_Bottom = wp.rcNormalPosition.Bottom
            GE_savewindow_rcNormalPosition_Right = wp.rcNormalPosition.Right

        End If

    End If

'************************************************************************************

'Flush any current active kml files - if this is not done GE will generate an
'annoying message of the form "You have unsaved items in your Temporary Places
'folder. Would you like to save them..." and wait for the user to respond...

'************************************************************************************

    'If chart currently overlaid on GE...
    If GE_last_chart <> "" Then
    
        'Open minimal chart kml file for output
        File_xkm = FreeFile
        Open mydirectory + GE_last_chart + ".kml" For Output As #File_xkm
        
        'Build minimal kml file data
        Print #File_xkm, GE_kml_header1
        Print #File_xkm, GE_kml_header2
        Print #File_xkm, "</kml>"
            
        'Close minimal chart kml file
        Close #File_xkm
        
        'Send minimal chart kml file to GE (this will flush the chart overlay from
        'GE) and if successful flush name of last chart overlaid on GE
        If GE_Send_Kml(GE_last_chart) Then GE_last_chart = ""

    End If
    
    'If GE vessels network link has been established...
    If GE_status_networklink Then

        'Open minimal vessels link kml file for output
        File_xkm = FreeFile
        Open mydirectory + "C_wiz GE Vessels Link.kml" For Output As #File_xkm
            
        'Build minimal kml file data
        Print #File_xkm, GE_kml_header1
        Print #File_xkm, GE_kml_header2
        Print #File_xkm, "</kml>"
            
        'Close minimal vessels link kml file
        Close #File_xkm
            
        'Send minimal vessels link kml file to GE (this will flush the vessels link
        'from GE), saving inverted return code as the flag indicating the GE vessels
        'network link state
        GE_status_networklink = Not GE_Send_Kml("C_wiz GE Vessels Link")
        
    End If

'************************************************************************************

'Minimize or close GE...

'************************************************************************************

    'If closing...
    If Extent_flag Then
    
        'Try up to 10 times...
        For i% = 1 To 10
        
            'Kill GE by posting a message to its main window to close - use
            'PostMessage rather than SendMessage because SendMessage waits for a
            'response (which may never come if something is stuffed) while
            'PostMessage just sends a message and doesn't wait
            rc& = PostMessage(GE_main_window_handle, WM_CLOSE, 0&, 0&)
        
            'Wait a second
            Call Sleeper(1000)
            
            'Quit loop if handle of main GE window no longer points to a window
            If IsWindow(GE_main_window_handle) = 0 Then Exit For
                
        Next
    
        'Tidy up
        Call GE_Tidy
    
        'Delete all kml files
        Kill mydirectory + "*.kml"
    
    'Otherwise, only minimizing...
    Else
        
        'Prepare to minimize GE window
        wp.showCmd = SW_SHOWMINIMIZED
        
        'Fire at GE
        rc& = SetWindowPlacement(GE_main_window_handle, wp)
    
        'Disable GE_interrogate timer
        GE_interrogate.Enabled = False
    
    End If

    'Let the system have control
    DoEvents
            
End Sub