void KeyCheck(void){ if ( BitIsSet(PrevKey, KEY_STEP_FLAG) //Нужно повторное считывание порта STEP && BitIsClear(KEY_PORTIN_STEP, KEY_STEP_PORT) ) SetBit(Key, KEY_STEP_FLAG); if ( BitIsSet(PrevKey, KEY_OK_FLAG) //Нужно повторное считывание порта OK && BitIsClear(KEY_PORTIN_OK, KEY_OK_PORT) ) SetBit(Key, KEY_OK_FLAG); PrevKey = 0; if (Key){ //Да, есть нажатие какой-то клавиши if (AlarmBeepIsSound()){ //Если сигнал будильника включен то выключить его SoundOff(); SetClockStatus(csClock, csNone); //Вернутся в нормальный режим Key = 0; BeginScakKeyRepeat(); return; //и выйти т.к. это нажатие выключения будильника } TimeoutReturnToClock(TIMEOUT_RET_CLOCK_MODE_MIN); //Установить интервал таймаута для возврата в основной режим SoundOn(SND_KEY_BEEP); //Пискнуть кнопкой } if BitIsSet(Key, KEY_STEP_FLAG){ //Шаг MenuStep(); } else if BitIsSet(Key, KEY_OK_FLAG){ //ОК MenuOK(); } Key = 0; //Все клавиши отработаны BeginScakKeyRepeat(); }
static void Toggle (void) { sound_on^=1; if (sound_on) SoundOn (); else SoundOff (); }
void CALLBACK SPUstopChannels2(unsigned short channels) { SoundOff(16,24,channels); }
void CALLBACK SPUstopChannels1(unsigned short channels) { SoundOff(0,16,channels); }
/* comefrom: processEvent */ doKeyDown(SimView *view, short charCode) { LastKeys[0] = LastKeys[1]; LastKeys[1] = LastKeys[2]; LastKeys[2] = LastKeys[3]; LastKeys[3] = tolower(charCode); if (strcmp(LastKeys, "fund") == 0) { Spend(-10000); PunishCnt++; /* punish for cheating */ if (PunishCnt == 5) { PunishCnt = 0; MakeEarthquake(); } LastKeys[0] = '\0'; } else if (strcmp(LastKeys, "fart") == 0) { MakeSound("city", "Explosion-High"); MakeSound("city", "Explosion-Low"); MakeFire(); MakeFlood(); MakeTornado(); MakeEarthquake(); MakeMonster(); LastKeys[0] = '\0'; } else if (strcmp(LastKeys, "nuke") == 0) { int i, j; MakeSound("city", "Explosion-High"); MakeSound("city", "Explosion-Low"); for (i = 0; i < WORLD_X; i++) { for (j = 0; j < WORLD_Y; j++) { short tile = Map[i][j] & LOMASK; if ((tile >= RUBBLE) && ((tile < CHURCH - 4) || (tile > CHURCH + 4))) { if ((tile >= HBRIDGE && tile <= VBRIDGE) || (tile >= BRWH && tile <= LTRFBASE + 1) || (tile >= BRWV && tile <= BRWV + 2) || (tile >= BRWXXX1 && tile <= BRWXXX1 + 2) || (tile >= BRWXXX2 && tile <= BRWXXX2 + 2) || (tile >= BRWXXX3 && tile <= BRWXXX3 + 2) || (tile >= BRWXXX4 && tile <= BRWXXX4 + 2) || (tile >= BRWXXX5 && tile <= BRWXXX5 + 2) || (tile >= BRWXXX6 && tile <= BRWXXX6 + 2) || (tile >= BRWXXX7 && tile <= BRWXXX7 + 2)) { Map[i][j] = RIVER; } else { Map[i][j] = TINYEXP + ANIMBIT + BULLBIT + Rand(2); } } } } LastKeys[0] = '\0'; } else if (strcmp(LastKeys, "stop") == 0) { heat_steps = 0; LastKeys[0] = '\0'; Kick(); } else if (strcmp(LastKeys, "will") == 0) { int i; int n = 500; for (i = 0; i < n; i++) { int x1 = Rand(WORLD_X - 1); int y1 = Rand(WORLD_Y - 1); int x2 = Rand(WORLD_X - 1); int y2 = Rand(WORLD_Y - 1); short temp = Map[x1][y1]; Map[x1][y1] = Map[x2][y2]; Map[x2][y2] = temp; } Kick(); } else if (strcmp(LastKeys, "bobo") == 0) { heat_steps = 1; heat_flow = -1; heat_rule = 0; LastKeys[0] = '\0'; Kick(); } else if (strcmp(LastKeys, "boss") == 0) { heat_steps = 1; heat_flow = 1; heat_rule = 0; LastKeys[0] = '\0'; Kick(); } else if (strcmp(LastKeys, "mack") == 0) { heat_steps = 1; heat_flow = 0; heat_rule = 0; LastKeys[0] = '\0'; Kick(); } else if (strcmp(LastKeys, "donh") == 0) { heat_steps = 1; heat_flow = -1; heat_rule = 1; LastKeys[0] = '\0'; Kick(); } else if (strcmp(LastKeys, "patb") == 0) { heat_steps = 1; heat_flow = Rand(40) - 20; heat_rule = 0; LastKeys[0] = '\0'; Kick(); } else if (strcmp(LastKeys, "lucb") == 0) { heat_steps = 1; heat_flow = Rand(1000) - 500; heat_rule = 0; LastKeys[0] = '\0'; Kick(); } else if (strcmp(LastKeys, "olpc") == 0) { Spend(-1000000); } switch (charCode) { case 'X': case 'x': { short s = view->tool_state; if (++s > lastState) { s = firstState; } setWandState(view, s); break; } case 'Z': case 'z': { short s = view->tool_state; if (--s < firstState) { s = lastState; } setWandState(view, s); break; } /***** shift wand state to bull dozer *****/ case 'B': case 'b': case 'B'-'@': { if (view->tool_state_save == -1) { view->tool_state_save = view->tool_state; } setWandState(view, dozeState); break; } /***** shift wand state to roads *****/ case 'R': case 'r': case 'R'-'@': { if (view->tool_state_save == -1) { view->tool_state_save = view->tool_state; } setWandState(view, roadState); break; } /***** shift wand state to power *****/ case 'P': case 'p': case 'P'-'@': { if (view->tool_state_save == -1) { view->tool_state_save = view->tool_state; } setWandState(view, wireState); break; } /***** shift wand state to transit *****/ case 'T': case 't': case 'T'-'@': { if (view->tool_state_save == -1) { view->tool_state_save = view->tool_state; } setWandState(view, rrState); break; } #if 0 /***** shift wand state to query *****/ case 'Q': case 'q': case 'Q'-'@': { if (view->tool_state_save == -1) view->tool_state_save = view->tool_state; setWandState(view, queryState); break; } #endif case 27: { SoundOff(); break; } } }