//================================================================================================// // // process assign statement // //================================================================================================// public void SH_processAssignStatement(SignalHead thisHead, SignalScripts.SCRScripts.SCRStatement thisStat, int[] localFloats, SIGSCRfile sigscr) { // get term value int tempvalue = 0; tempvalue = SH_processSubTerm(thisHead, thisStat.StatementTerms, 0, localFloats, sigscr); // assign value switch (thisStat.AssignType) { // assign value to external float // Possible floats : // STATE // DRAW_STATE // ENABLED (not allowed for write) // BLOCK_STATE (not allowed for write) case (SignalScripts.SCRTermType.ExternalFloat): SignalScripts.SCRExternalFloats FloatType = (SignalScripts.SCRExternalFloats)thisStat.AssignParameter; switch (FloatType) { case SignalScripts.SCRExternalFloats.STATE: thisHead.state = (MstsSignalAspect)tempvalue; break; case SignalScripts.SCRExternalFloats.DRAW_STATE: thisHead.draw_state = tempvalue; break; default: break; } break; // Local float case (SignalScripts.SCRTermType.LocalFloat): localFloats[thisStat.AssignParameter] = tempvalue; break; default: break; } }
//================================================================================================// // process assign statement //================================================================================================// private static void ProcessAssignStatement(SignalHead head, SignalScripts.SCRScripts.SCRStatement statement, int[] localFloats) { // get term value int tempvalue = ProcessSubTerm(head, statement.StatementTerms, 0, localFloats); // assign value switch (statement.AssignType) { // assign value to external float // Possible floats : // STATE // DRAW_STATE // ENABLED (not allowed for write) // BLOCK_STATE (not allowed for write) case (SignalScripts.SCRTermType.ExternalFloat): SignalScripts.SCRExternalFloats floatType = (SignalScripts.SCRExternalFloats)statement.AssignParameter; switch (floatType) { case SignalScripts.SCRExternalFloats.STATE: head.SignalIndicationState = (SignalAspectState)tempvalue; break; case SignalScripts.SCRExternalFloats.DRAW_STATE: head.DrawState = tempvalue; break; default: break; } break; // Local float case (SignalScripts.SCRTermType.LocalFloat): localFloats[statement.AssignParameter] = tempvalue; break; default: break; } }
//================================================================================================// // // get parameter term value // //================================================================================================// public static int SH_termvalue(SignalHead thisHead, SignalScripts.SCRScripts.SCRParameterType thisParameter, int[] localFloats, SIGSCRfile sigscr) { int return_value = 0; // for non-function terms only first entry is valid switch (thisParameter.PartType) { // assign value to external float // Possible floats : // STATE // DRAW_STATE // ENABLED // BLOCK_STATE case (SignalScripts.SCRTermType.ExternalFloat): SignalScripts.SCRExternalFloats FloatType = (SignalScripts.SCRExternalFloats)thisParameter.PartParameter; switch (FloatType) { case SignalScripts.SCRExternalFloats.STATE: return_value = (int)thisHead.state; break; case SignalScripts.SCRExternalFloats.DRAW_STATE: return_value = thisHead.draw_state; break; case SignalScripts.SCRExternalFloats.ENABLED: return_value = Convert.ToInt32(thisHead.mainSignal.enabled); break; case SignalScripts.SCRExternalFloats.BLOCK_STATE: return_value = (int)thisHead.mainSignal.block_state(); break; case SignalScripts.SCRExternalFloats.APPROACH_CONTROL_REQ_POSITION: return_value = thisHead.ApproachControlLimitPositionM.HasValue ? Convert.ToInt32(thisHead.ApproachControlLimitPositionM.Value) : -1; break; case SignalScripts.SCRExternalFloats.APPROACH_CONTROL_REQ_SPEED: return_value = thisHead.ApproachControlLimitSpeedMpS.HasValue ? Convert.ToInt32(thisHead.ApproachControlLimitSpeedMpS.Value) : -1; break; default: break; } break; // Local float case (SignalScripts.SCRTermType.LocalFloat): return_value = localFloats[thisParameter.PartParameter]; break; // all others : constants default: return_value = thisParameter.PartParameter; break; } return(return_value); }
//================================================================================================// // get parameter term value //================================================================================================// private static int TermValue(SignalHead head, SignalScripts.SCRScripts.SCRParameterType parameter, int[] localFloats) { int result = 0; // for non-function terms only first entry is valid switch (parameter.PartType) { // assign value to external float // Possible floats : // STATE // DRAW_STATE // ENABLED // BLOCK_STATE case (SignalScripts.SCRTermType.ExternalFloat): SignalScripts.SCRExternalFloats floatType = (SignalScripts.SCRExternalFloats)parameter.PartParameter; switch (floatType) { case SignalScripts.SCRExternalFloats.STATE: result = (int)head.SignalIndicationState; break; case SignalScripts.SCRExternalFloats.DRAW_STATE: result = head.DrawState; break; case SignalScripts.SCRExternalFloats.ENABLED: result = Convert.ToInt32(head.MainSignal.Enabled); break; case SignalScripts.SCRExternalFloats.BLOCK_STATE: result = (int)head.MainSignal.BlockState(); break; case SignalScripts.SCRExternalFloats.APPROACH_CONTROL_REQ_POSITION: result = head.ApproachControlLimitPositionM.HasValue ? Convert.ToInt32(head.ApproachControlLimitPositionM.Value) : -1; break; case SignalScripts.SCRExternalFloats.APPROACH_CONTROL_REQ_SPEED: result = head.ApproachControlLimitSpeedMpS.HasValue ? Convert.ToInt32(head.ApproachControlLimitSpeedMpS.Value) : -1; break; default: break; } break; // Local float case (SignalScripts.SCRTermType.LocalFloat): result = localFloats[parameter.PartParameter]; break; // all others : constants default: result = parameter.PartParameter; break; } return(result); }