Private Sub executeFCFS()

    ' Increment execution timer
    t = t + 1
    
    ' Fetch the process that has an arrival time equal to the current time value.
    Index = getNextProcIDInReadyQueueByArrivalTime(t)
    
    If Index > 0 And Index <> curIndex Then
        ' A new process arrives at the ready queue.
        ' =========================================
        logEvent rtf, "Process " & cpuScheduler.getProcess(Index).getProcessID & _
                 " arrives at the ready queue at time t = " & CStr(t) & _
                 " with a CPU burst of " & CStr(cpuScheduler.getProcess(Index).getCPUBurst)
        
        cpuScheduler.getProcess(Index).setTimeEnteredQueue = t
        
        If curIndex <> -1 Then
            ' There has been an executing process.
            If (cpuScheduler.getProcess(curIndex).getCPUBurst + cpuScheduler.getProcess(curIndex).getTimeEnteredQueue) = t Then
                
                                        
                ' Mark the current process as completed.
                cpuScheduler.getProcess(curIndex).setExecutionStatus = True
                
                ' Set the time the current process left the executing status.
                cpuScheduler.getProcess(Index).setTimeLeftQueue = t
                
                ' Set the time this process' partial CPU burst completed
                cpuScheduler.getProcess(curIndex).setTimeCompleted = t
                                        
                ' Increment the process' execution time.
                cpuScheduler.getProcess(Index).setExecutionTime = cpuScheduler.getProcess(Index).getExecutionTime + 1
                                        
                logEvent rtf, "Process " & cpuScheduler.getProcess(Index).getProcessID & _
                         " executing at time t = " & CStr(t)
                         
                curIndex = Index
            
            
            Else
            
                logEvent rtf, "Process " & cpuScheduler.getProcess(curIndex).getProcessID & _
                         " executing at time t = " & CStr(t)
                         
                cpuScheduler.getProcess(curIndex).setExecutionTime = cpuScheduler.getProcess(curIndex).getExecutionTime + 1
            
            End If
        
        Else
        
            logEvent rtf, "Process " & cpuScheduler.getProcess(Index).getProcessID & _
                         " executing at time t = " & CStr(t)
            
            curIndex = Index
            cpuScheduler.getProcess(curIndex).setExecutionTime = cpuScheduler.getProcess(curIndex).getExecutionTime + 1
                        
        End If
        
    Else
    
        If (cpuScheduler.getProcess(curIndex).getCPUBurst + cpuScheduler.getProcess(curIndex).getTimeEnteredQueue) = t Then
        
            
            logEvent rtf, "Process " & cpuScheduler.getProcess(curIndex).getProcessID & _
                             " executing at time t = " & CStr(t)
            
            logEvent rtf, "Process " & cpuScheduler.getProcess(curIndex).getProcessID & _
                         " completed its CPU burst at time t = " & CStr(t)
        
            ' The current process completes executing
            ' Mark the current process as completed.
            cpuScheduler.getProcess(curIndex).setExecutionStatus = True
                
            ' Set the time the current process left the executing status.
            cpuScheduler.getProcess(curIndex).setTimeCompleted = t
            
            displayTurnAroundTime lvw, cpuScheduler.getProcess(curIndex).getProcessID, cpuScheduler.getProcess(curIndex)
            
            Index = getNextProcIDInReadyQueue(t)
            
            If Index = -1 Then
                Exit Sub
            Else
                cpuScheduler.getProcess(Index).setTimeEnteredQueue = t
                curIndex = Index
            End If
            
        Else
            ' The program execution flow comes here when the current executing process is not changed.
            logEvent rtf, "Process " & cpuScheduler.getProcess(curIndex).getProcessID & _
                             " executing at time t = " & CStr(t)
            
            cpuScheduler.getProcess(curIndex).setExecutionTime = cpuScheduler.getProcess(curIndex).getExecutionTime + 1
        End If
                
    End If
    DoEvents

End Sub
