// ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ // ¥ CStrArrayStore::AllocateStorage /*e*/ // ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ // creates new elements pointing to an empty CCString. The array is completely destructed by the stack frame upon it's // deletion void CStrArrayStore::AllocateStorage( CProgram &ioState, UInt32 inNumElements) { /* mArray.InsertItemsAt(inNumElements,LArray::index_Last,(CCString*)0); for (ArrayIndexT index=1; index<=inNumElements; index++) { CCString *str=new CCString; ThrowIfMemFull_(str); mArray[index]=str; }*/ UInt32 wasCount=mArray.GetCount(); if (inNumElements>wasCount) // add new ones { mArray.InsertItemsAt(inNumElements-mArray.GetCount(),LArray::index_Last,(CCString*)0); // zero the ones which existed CreateStrings(inNumElements-wasCount,wasCount+1); ClearStrings(wasCount,1); } else if (inNumElements<wasCount) // delete old ones { DeleteStrings(wasCount-inNumElements,inNumElements+1); mArray.RemoveItemsAt(wasCount-inNumElements,inNumElements+1); ClearStrings(inNumElements,1); } else ClearStrings(wasCount,1); }
void ICPClass::NewMode(int mode) { AircraftClass *playerAC = SimDriver.GetPlayerAircraft(); //Clear our Flags ClearFlags(); //Clear our strings ClearStrings(); LastMode = mICPTertiaryMode; mICPTertiaryMode = mode; ResetSubPages(); Manual_Input = FALSE; MadeInput = FALSE; ClearCount = 0; InputsMade = 0; playerAC->FCC->SetStptMode(FireControlComputer::FCCWaypoint); playerAC->FCC->waypointStepCmd = 127; switch (mode) { case COMM1_BUTTON: LeaveCNI(); SetICPFlag(ICPClass::MODE_COMM1); if(VM) VM->SetRadio(0); WhichRadio = 0; ExecCOMM1Mode(); break; case COMM2_BUTTON: LeaveCNI(); SetICPFlag(ICPClass::MODE_COMM2); if(VM) VM->SetRadio(1); WhichRadio = 1; ExecCOMM2Mode(); break; case LIST_BUTTON: LeaveCNI(); SetICPFlag(ICPClass::MODE_LIST); SetICPFlag(ICPClass::EDIT_STPT); ExecLISTMode(); break; case IFF_BUTTON: LeaveCNI(); SetICPFlag(ICPClass::MODE_IFF); ExecIFFMode(); break; default: break; } }
void ICPClass::ChangeToCNI(void) { AircraftClass *playerAC = SimDriver.GetPlayerAircraft(); ResetSubPages(); if (playerAC && playerAC->FCC) { playerAC->FCC->SetStptMode(FireControlComputer::FCCWaypoint); playerAC->FCC->waypointStepCmd = 127; } ClearFlags(); ClearStrings(); ClearString(); ClearDigits(); ClearCount = 0; InputsMade = 0; SetICPFlag(ICPClass::MODE_CNI); SetICPFlag(ICPClass::EDIT_STPT); LaserLine = 1; }
void ICPClass::HandleInput(int mode, CPButtonObject *pbutton) { AircraftClass *playerAC = SimDriver.GetPlayerAircraft(); if(!g_bRealisticAvionics) { //MI original code if(mode == AA_BUTTON || mode == AG_BUTTON || mode == NAV_BUTTON) { if(pbutton != mpPrimaryExclusiveButton) { mpPrimaryExclusiveButton->SetCurrentState(0); mICPPrimaryMode = mode; mpPrimaryExclusiveButton = pbutton; if(mICPSecondaryMode == NONE_MODE) { mUpdateFlags |= CNI_UPDATE; ExecCNIMode(); } } } else if(mode == PREV_BUTTON || mode == NEXT_BUTTON) { HandlePrevNext(mode, mICPSecondaryMode); } else if(mode == ENTR_BUTTON) { HandleENTR(mICPSecondaryMode); } else if(mode == COMM1_BUTTON || mode == COMM2_BUTTON) { if(pbutton != mpTertiaryExclusiveButton) { mpTertiaryExclusiveButton->SetCurrentState(0); mICPTertiaryMode = mode; mpTertiaryExclusiveButton = pbutton; mUpdateFlags |= CNI_UPDATE; if(VM) { if(mode == COMM1_BUTTON) { VM->SetRadio(0); } else { VM->SetRadio(1); } } } } else { if(pbutton == mpSecondaryExclusiveButton) { mICPSecondaryMode = NONE_MODE; mpSecondaryExclusiveButton->SetCurrentState(0); mpSecondaryExclusiveButton = NULL; mUpdateFlags |= CNI_UPDATE; ExecCNIMode(); } else { if(mpSecondaryExclusiveButton != NULL) { mpSecondaryExclusiveButton->SetCurrentState(0); } mICPSecondaryMode = mode; mpSecondaryExclusiveButton = pbutton; switch(mode) { case NONE_MODE: break; case STPT_BUTTON: playerAC->FCC->SetStptMode(FireControlComputer::FCCWaypoint); playerAC->FCC->waypointStepCmd = 127; mUpdateFlags |= STPT_UPDATE; break; case DLINK_BUTTON: playerAC->FCC->SetStptMode(FireControlComputer::FCCDLinkpoint); playerAC->FCC->waypointStepCmd = 127; mUpdateFlags |= DLINK_UPDATE; ExecDLINKMode(); break; case MARK_BUTTON: playerAC->FCC->SetStptMode(FireControlComputer::FCCMarkpoint); playerAC->FCC->waypointStepCmd = 127; mUpdateFlags |= MARK_UPDATE; ExecMARKMode(); break; case ILS_BUTTON: mUpdateFlags |= ILS_UPDATE; ExecILSMode(); break; case CRUS_BUTTON: mUpdateFlags |= CRUS_UPDATE; ExecCRUSMode(); break; case FACK_BUTTON: mUpdateFlags |= FACK_UPDATE; PNUpdateFACKMode (NEXT_BUTTON, FACK_BUTTON); ExecFACKMode(); break; case ALOW_BUTTON: mUpdateFlags |= ALOW_UPDATE; break; } } } } else { if(!playerAC->HasPower(AircraftClass::UFCPower) || playerAC->mFaults->GetFault(FaultClass::ufc_fault)) return; //Master Modes if(mode == AA_BUTTON || mode == AG_BUTTON || mode == NAV_BUTTON) { mICPPrimaryMode = mode; if(IsICPSet(ICPClass::MODE_LIST) && mICPSecondaryMode == EIGHT_BUTTON) ExecMODEMode(); if(mode == AA_BUTTON) { IN_AA = TRUE; IN_AG = FALSE; } else if(mode == AG_BUTTON) { IN_AA = FALSE; IN_AG = TRUE; } } /****************************************************/ /*These are OVERRIDE buttons. With each of these */ /*we can get into specific DED pages, no matter in */ /*what mode we've been before. */ /****************************************************/ else if(mode == COMM1_BUTTON || mode == COMM2_BUTTON || mode == LIST_BUTTON || mode == IFF_BUTTON) { //This results in a new DED page, clear our strings ClearStrings(); //Did we push the same button as before? if(mICPTertiaryMode == mode && mode != CNI_MODE) PushedSame(LastMode); else NewMode(mode); } //END OVERRIDE FUNCTIONS //special case, FACK else if(mode == FACK_BUTTON) { if (playerAC && playerAC->mFaults) { if (m_FaultDisplay == false) { // was off m_FaultDisplay = true; // now on //have a fault, update our display playerAC->mFaults->GetFirstFault(&m_subsystem, &m_function); } else { // move to next fault if (playerAC->mFaults->GetFFaultCount() <= 0 || playerAC->mFaults->GetNextFault(&m_subsystem, &m_function) == FALSE) m_FaultDisplay = false; } mUpdateFlags |= FACK_UPDATE; // we need to do some work } } //SENCONDAR FUNCTIONS else if(mode == PREV_BUTTON || mode == NEXT_BUTTON) { ClearStrings(); if(IsICPSet(ICPClass::EDIT_STPT)) PNUpdateSTPTMode(mode, 0); else if(mICPSecondaryMode == CRUS_MODE) StepHOMERNGSTPT(mode); else if(IsICPSet(ICPClass::MODE_CNI) && mICPSecondaryMode == SEVEN_BUTTON) PNUpdateMARKMode(mode, 0); else if(IsICPSet(ICPClass::EDIT_VHF) || IsICPSet(ICPClass::EDIT_UHF)) PNUpdateCOMMMode(mode, 0); else if(IsICPSet(ICPClass::MODE_DLINK)) PNUpdateDLINKMode(mode, 0); else if(IsICPSet(ICPClass::MODE_COMM1))//Cobra 10/31/04 TJL { if(mode == NEXT_BUTTON) { if(PREUHF == NUM_COMM_CHANNELS) // ASSO: PREUHF = 1; else PREUHF++; } else { if(PREUHF == 1) PREUHF = NUM_COMM_CHANNELS; // ASSO: else PREUHF--; } } else if(IsICPSet(ICPClass::MODE_COMM2)) { if(mode == NEXT_BUTTON) { if(PREVHF == NUM_COMM_CHANNELS) // ASSO: PREVHF = 1; else PREVHF++; } else { if(PREVHF == 1) PREVHF = NUM_COMM_CHANNELS; // ASSO: else PREVHF--; } } else if(IsICPSet(ICPClass::MODE_CNI) && mICPSecondaryMode == SIX_BUTTON) { if(mode == NEXT_BUTTON) { if(running) { running = FALSE; stopped = TRUE; } else if(stopped) { running = TRUE; stopped = FALSE; } else { Start = vuxGameTime; running = TRUE; } } else { Start = vuxGameTime; Difference = 0; running = FALSE; stopped = FALSE; } } else if(IsICPSet(ICPClass::MODE_LIST) && mICPSecondaryMode == EWS_MODE) { if(PGMFlare || PGMChaff) StepEWSProg(mode); else PNUpdateSTPTMode(mode, 0); } // Retro 3Jan2004 start else if ((g_bPilotEntertainment)&&(winamp)&&(IsICPSet(ICPClass::MISC_MODE) && mICPSecondaryMode == ZERO_MODE)) { if (mode == PREV_BUTTON) winamp->VolDown(); else if (mode == NEXT_BUTTON) winamp->VolUp(); } // Retro 3Jan2004 end } else if(mode == ENTR_BUTTON) ICPEnter(); else if(mode == CLEAR_BUTTON) { if(IsICPSet(ICPClass::MODE_LIST) && mICPSecondaryMode == 0) { ClearStrings(); ExecINTGMode(); mICPSecondaryMode = 100; //small hack } else ClearInput(); } else if (mode == UP_MODE || mode == DOWN_MODE || mode == SEQ_MODE || mode == CNI_BUTTON) { if(mode == CNI_MODE) mICPTertiaryMode = CNI_MODE; CNISwitch(mode); // Retro 3Jan2004 start // Retro from here, kind of a hack having this here.. if ((g_bPilotEntertainment)&&(winamp)&&(IsICPSet(ICPClass::MISC_MODE) && mICPSecondaryMode == ZERO_MODE)) { if (mode == UP_MODE) winamp->Next(); else if (mode == DOWN_MODE) winamp->Previous(); else if (mode == SEQ_MODE) winamp->TogglePlayback(); } // Retro 3Jan2004 end } //****************** //****************** //SECONDARY BUTTONS* //****************** //****************** //'1' BUTTON else if(mode == ONE_BUTTON) { if(CheckMode()) return; else if(ManualInput()) HandleManualInput(mode); else if(IsICPSet(ICPClass::EDIT_JAMMER) || IsICPSet(ICPClass::EWS_EDIT_BINGO)) EWSOnOff(); else OneButton(mode); } //'2' BUTTON else if(mode == TWO_BUTTON) { if(CheckMode()) return; else if(ManualInput()) HandleManualInput(mode); else if(IsICPSet(ICPClass::EDIT_JAMMER) || IsICPSet(ICPClass::EWS_EDIT_BINGO)) EWSOnOff(); else TwoButton(mode); } //'3' BUTTON else if(mode == THREE_BUTTON) { if(CheckMode()) return; else if(ManualInput()) HandleManualInput(mode); else if(IsICPSet(ICPClass::EDIT_JAMMER) || IsICPSet(ICPClass::EWS_EDIT_BINGO)) EWSOnOff(); else ThreeButton(mode); } //'4' BUTTON else if(mode == FOUR_BUTTON) { if(CheckMode()) return; else if(ManualInput()) HandleManualInput(mode); else if(IsICPSet(ICPClass::EDIT_JAMMER) || IsICPSet(ICPClass::EWS_EDIT_BINGO)) EWSOnOff(); else FourButton(mode); } //'5' BUTTON else if(mode == FIFE_BUTTON) { if(CheckMode()) return; else if(ManualInput()) HandleManualInput(mode); else if(IsICPSet(ICPClass::EDIT_JAMMER) || IsICPSet(ICPClass::EWS_EDIT_BINGO)) EWSOnOff(); else FifeButton(mode); } //'6' BUTTON else if(mode == SIX_BUTTON) { if(CheckMode()) return; else if(ManualInput()) HandleManualInput(mode); else if(IsICPSet(ICPClass::EDIT_JAMMER) || IsICPSet(ICPClass::EWS_EDIT_BINGO)) EWSOnOff(); else SixButton(mode); } //'7' BUTTON else if(mode == SEVEN_BUTTON) { if(CheckMode()) return; else if(ManualInput()) HandleManualInput(mode); else if(IsICPSet(ICPClass::EDIT_JAMMER) || IsICPSet(ICPClass::EWS_EDIT_BINGO)) EWSOnOff(); else SevenButton(mode); } //'8' BUTTON else if(mode == EIGHT_BUTTON) { if(CheckMode()) return; else if(ManualInput()) HandleManualInput(mode); else if(IsICPSet(ICPClass::EDIT_JAMMER) || IsICPSet(ICPClass::EWS_EDIT_BINGO)) EWSOnOff(); else EightButton(mode); } //'9' BUTTON else if(mode == NINE_BUTTON) { if(CheckMode()) return; else if(ManualInput()) HandleManualInput(mode); else if(IsICPSet(ICPClass::EDIT_JAMMER) || IsICPSet(ICPClass::EWS_EDIT_BINGO)) EWSOnOff(); else NineButton(mode); } //'0' BUTTON else if(mode == ZERO_BUTTON) { if((IsICPSet(ICPClass::MODE_CNI) && mICPSecondaryMode == FIFE_BUTTON) && !IsICPSet(ICPClass::BLOCK_MODE)) { if(Cruise_RNG) { if(GetCruiseIndex() == 1) SetCruiseIndex(-1); else SetCruiseIndex(1); } else if(Cruise_HOME) { if(GetCruiseIndex() == 2) SetCruiseIndex(-1); else SetCruiseIndex(2); } else if(Cruise_EDR) { if(GetCruiseIndex() == 3) SetCruiseIndex(-1); else SetCruiseIndex(3); } else { if(GetCruiseIndex() == 0) SetCruiseIndex(-1); else SetCruiseIndex(0); } return; } else if(IsICPSet(ICPClass::MISC_MODE) && mICPSecondaryMode == EIGHT_BUTTON) { if(ShowBullseyeInfo) ShowBullseyeInfo = FALSE; else ShowBullseyeInfo = TRUE; return; } if(CheckMode()) return; else if(IsICPSet(ICPClass::EDIT_JAMMER) || IsICPSet(ICPClass::EWS_EDIT_BINGO)) return; else if(ManualInput()) HandleManualInput(mode); else ZeroButton(mode); } /*else if(mode == FACK_BUTTON) { ClearStrings(); ClearFlags(); SetICPFlag(ICPClass::MODE_FACK); PNUpdateFACKMode (NEXT_BUTTON, FACK_BUTTON); ExecFACKMode(); }*/ } }
void ICPClass::ExecILSMode(void) { if(!g_bRealisticAvionics) { //MI Original code VU_ID id; VU_ID homeid; VU_ID ilsid; BOOL isValidILS; BOOL isValidRWY; int channel; char rwyNum[4] = ""; TacanList::StationSet set; char setchar; char p_signaltype[10] = ""; NavigationSystem::Type type; static int frame = 0; if(mUpdateFlags & ILS_UPDATE) { mUpdateFlags &= ~ILS_UPDATE; if (gNavigationSys) { gNavigationSys->GetTacanVUID(NavigationSystem::ICP, &id); } else { id == FalconNullId; } if(id == FalconNullId) { sprintf(mpLine1, "NO MISSION PRESETS"); sprintf(mpLine2, ""); sprintf(mpLine3, ""); } else { type = gNavigationSys->GetType(); // Line #1 sprintf(mpLine1, ""); // Line #2 if(type == NavigationSystem::AIRBASE) { gNavigationSys->GetHomeID(&homeid); isValidILS = gNavigationSys->GetILSAttribute(NavigationSystem::AIRBASE_ID, &ilsid); isValidRWY = gNavigationSys->GetILSAttribute(NavigationSystem::RWY_NUM, (char*)rwyNum); if(id == homeid) { sprintf(mpLine2, "HOME RUNWAY "); } else { sprintf(mpLine2, "ALTERNATE RUNWAY "); } if(id == ilsid && isValidILS && isValidRWY) { strcat(mpLine2, rwyNum); } } else if(type == NavigationSystem::TANKER) { sprintf(mpLine2, "TANKER"); } else if(type == NavigationSystem::CARRIER) { if(id == homeid) { sprintf(mpLine2, "HOME CARRIER"); } else { sprintf(mpLine2, "ALTERNATE CARRIER"); } } // Line #3 gNavigationSys->GetTacanChannel(NavigationSystem::ICP, &channel, &set); if(set == TacanList::X) { setchar = 'X'; } else { setchar = 'Y'; } if(type == NavigationSystem::TANKER) { strcpy(p_signaltype, "AA-TR"); } else { strcpy(p_signaltype, "TR"); } sprintf(mpLine3, "TCN %-3d%c %s", channel, setchar, p_signaltype); } } else if (frame == 9) { if (gNavigationSys) { gNavigationSys->GetTacanVUID(NavigationSystem::ICP, &id); type = gNavigationSys->GetType(); if(type == NavigationSystem::AIRBASE) { gNavigationSys->GetHomeID(&homeid); isValidILS = gNavigationSys->GetILSAttribute(NavigationSystem::AIRBASE_ID, &ilsid); isValidRWY = gNavigationSys->GetILSAttribute(NavigationSystem::RWY_NUM, (char*)rwyNum); if(id == homeid) { sprintf(mpLine2, "HOME RUNWAY "); } else { sprintf(mpLine2, "ALTERNATE RUNWAY "); } if(id == ilsid && isValidILS && isValidRWY) { strcat(mpLine2, rwyNum); } } } else { id == FalconNullId; } frame = 0; } else { frame++; } } else { ClearStrings(); //MI modified for ICP stuff VU_ID id; VU_ID homeid; VU_ID ilsid; char rwyNum[4] = ""; char p_signaltype[10] = ""; static int frame = 0; HSICourse = static_cast<int> (OTWDriver.pCockpitManager->mpHsi->GetValue(CPHsi::HSI_VAL_DESIRED_CRS)); if(gNavigationSys->GetControlSrc() == NavigationSystem::AUXCOMM) ILSBackup(); else { if(gNavigationSys->GetTacanBand(NavigationSystem::ICP) == TacanList::X) TacanBand = 'X'; else TacanBand = 'Y'; if (gNavigationSys) gNavigationSys->GetTacanVUID(NavigationSystem::ICP, &id); else id == FalconNullId; if(id == FalconNullId) ILSOn = 0; else { //We SHOULD only have ILS when our Tacanband is == X if(TacanBand == 'X') ILSOn = 1; else ILSOn = 0; } if(gNavigationSys->GetDomain(NavigationSystem::ICP) == TacanList::AA) { //Line1 FillDEDMatrix(0,1,"TCN A/A TR"); if(ILSOn ==1) FillDEDMatrix(0,18,"ILS ON"); else FillDEDMatrix(0,18,"ILS OFF"); } else { //Line1 FillDEDMatrix(0,1,"TCN TR"); if(ILSOn ==1) FillDEDMatrix(0,18,"ILS ON"); else FillDEDMatrix(0,18,"ILS OFF"); } Digit1 = gNavigationSys->GetTacanChannel(NavigationSystem::ICP, 2); Digit2 = gNavigationSys->GetTacanChannel(NavigationSystem::ICP, 1); Digit3 = gNavigationSys->GetTacanChannel(NavigationSystem::ICP, 0); TacanChannel = (Digit1 * 100 + Digit2 * 10 + Digit3); //FakeILSFreq(); sprintf(Freq, "%3.2f", gNavigationSys->GetCurTCNILS()); //BEGIN LINE 3 PossibleInputs = 3; if(ILSPageSel == 0) ScratchPad(2,8,12); else if(ILSPageSel == 1) ScratchPad(2,16,25); if(GetCMDSTR()) FillDEDMatrix(2,17,"CMD STRG", 2); else FillDEDMatrix(2,17,"CMD STRG"); //END LINE 3 //BEGIN LINE 4 FillDEDMatrix(3,1,"CHAN"); ClearString(); sprintf(tempstr,"%3.0d",TacanChannel); FillDEDMatrix(3,9,tempstr); FillDEDMatrix(3,14,"FREQ"); FillDEDMatrix(3,19,Freq); //END LINE 4 //BEGIN LINE 5 FillDEDMatrix(4,1,"BAND"); sprintf(tempstr,"%c(0)",TacanBand); FillDEDMatrix(4,9,tempstr); FillDEDMatrix(4,14,"CRS"); sprintf(tempstr,"%d*",HSICourse); FillDEDMatrix(4,18,tempstr); //END LINE 5 } } }