Procedure Update_Truth_Arrays; { The only routine which can modify the following Boolean arrays: Is_True, Was_True, Is_False, Changed. NOTE: this routine is essentially ** perceptual **} Var AbsTrackErr: Clicks_Type; begin { Update_Truth_Arrays } AbsTrackErr:= Abs(TrackErr); { avoid redundant calculatn } { save recent history: } Copy_Is_to_Was; { set sense-related flags: } Is_True[On_Targ]:= AbsTrackErr < OnTarg_Thresh; Is_True[Sns_Rot]:= Abs(Dsector)> Min_Rotn_Sense; Is_True[Targ_Rt]:= TrackErr < 0; Is_True[Targ_Nr]:= AbsTrackErr < Near_Thresh; Is_True[Dir_OK ]:= Is_True[Sns_Rot] and (Sign(Dsector)=Sign(TrackErr)); Is_True[New_Req]:= New_Request; Is_True[Gentle ]:= Abs(Dsector) < Speed_Limit; { set time-based flags: } Is_True[Any_Imp]:= AbsTrackErr < (Abs(Orig_TrackErr) - Min_Rotn_Sense); Is_True[Patient]:= Patience_Timr <= Patience_Dur; Is_True[Task_TO]:= Task_Timr >= TmOut_Dur; { equality test critical } { set historical differential or continuity-based flags: } Is_True[Ovshoot]:= (Was_True[Ovshoot] and Is_True[Targ_Nr]) or (Changed[Dir_OK] and Changed[On_Targ]); { latch brief roughness: } Is_True[Was_Gen]:= (Is_True[Was_Gen] and Is_True[Gentle]) or Is_True[Task_TO]; { look for cooperation and presence continuity: } Is_True[Was_Imp]:= (Is_True[Was_Imp] or Is_True[Any_Imp]) and not Is_True[Task_TO]; if Acknowledged then begin Is_True[Present]:= Is_True[Sns_Rot] or (Intrusn > 0); Is_True[Was_Prs]:= Was_True[Present]; Acknowledged:= FALSE; end; Is_True[Rct_Act]:= NoAct_Timr < Rct_Actv_Thresh; { set Is_False and Changed flag array: } Set_Comp_Flags; end; { Update_Truth_Arrays }